From 0d1043399b29f3d70c379f47a57f1547203f39dd Mon Sep 17 00:00:00 2001 From: ojack Date: Fri, 9 Feb 2024 17:13:54 +0100 Subject: [PATCH] updated prompt text --- public/bundle.js | 5 ++--- public/bundle.min.js | 2 +- public/bundle.min.js.map | 2 +- src/stores/store.js | 3 +-- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/public/bundle.js b/public/bundle.js index 4c15615..d850e60 100644 --- a/public/bundle.js +++ b/public/bundle.js @@ -43512,8 +43512,7 @@ module.exports = function store(state, emitter) { function showConfirmation(successCallback, terminateCallback) { var c = prompt(` - ////:: ḣ̖̻͛̓y҉̃̀̋̑ḑ̴̞͛̒r̴̨̦͕̝ā̤̓̍͘ s̠҉͍͊ͅḳ̯͍̑ͦẹ̿͋̒̕t̲̂̓ͩ̑c͕͗ͤ̕̕ḣ̖̻͛̓ ĝ̽̓̀͑ā̤̓̍͘l̙͖̑̾ͣl̙͖̑̾ͣẹ̿͋̒̕r̴̨̦͕̝y҉̃̀̋̑ :://// - + HYDRA SKETCH GALLERY 🎨 Click 'OK' to add your sketch and screenshot to the gallery of hydra sketches at https://botsin.space/@hydra. @@ -45507,4 +45506,4 @@ module.exports = function toolbar(state, emit) { } },{"choo/html":49}]},{},[1]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhIb2xlcy5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVJlc3QuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9QcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvYWNvcm4vZGlzdC9hY29ybi5qcyIsIm5vZGVfbW9kdWxlcy9hZnRlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci5zbGljZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwibm9kZV9tb2R1bGVzL2Fzc2VydC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9hc3NlcnQvbm9kZV9tb2R1bGVzL3V0aWwvc3VwcG9ydC9pc0J1ZmZlckJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYXNzZXJ0L25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiLCJub2RlX21vZHVsZXMvYXN0cmF2ZWwvZGlzdC9hc3RyYXZlbC5qcyIsIm5vZGVfbW9kdWxlcy9hc3RyYXZlbC9kaXN0L2F0dGFjaENvbW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL2FzdHJhdmVsL2Rpc3QvZGVmYXVsdFRyYXZlbGVyLmpzIiwibm9kZV9tb2R1bGVzL2FzdHJpbmcvZGlzdC9hc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JhY2tvMi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtYXJyYXlidWZmZXIvbGliL2Jhc2U2NC1hcnJheWJ1ZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYmxvYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyLXJlc29sdmUvZW1wdHkuanMiLCJub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanMiLCJub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nob28tZGV2dG9vbHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hvby1kZXZ0b29scy9saWIvY29weS5qcyIsIm5vZGVfbW9kdWxlcy9jaG9vLWRldnRvb2xzL2xpYi9kZWJ1Zy5qcyIsIm5vZGVfbW9kdWxlcy9jaG9vLWRldnRvb2xzL2xpYi9oZWxwLmpzIiwibm9kZV9tb2R1bGVzL2Nob28tZGV2dG9vbHMvbGliL2xvZy5qcyIsIm5vZGVfbW9kdWxlcy9jaG9vLWRldnRvb2xzL2xpYi9sb2dnZXIuanMiLCJub2RlX21vZHVsZXMvY2hvby1kZXZ0b29scy9saWIvcGVyZi5qcyIsIm5vZGVfbW9kdWxlcy9jaG9vLWRldnRvb2xzL2xpYi9zdG9yYWdlLmpzIiwibm9kZV9tb2R1bGVzL2Nob28taG9va3MvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hvby9jb21wb25lbnQvY2FjaGUuanMiLCJub2RlX21vZHVsZXMvY2hvby9jb21wb25lbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hvby9odG1sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nob28vaHRtbC9yYXcuanMiLCJub2RlX21vZHVsZXMvY2hvby9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jbGlwYm9hcmQtY29weS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jbG9uZS9jbG9uZS5qcyIsIm5vZGVfbW9kdWxlcy9jb2RlbWlycm9yLW1pbmlmaWVkL2FkZG9uL2NvbW1lbnQvY29tbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9jb2RlbWlycm9yLW1pbmlmaWVkL2FkZG9uL2hpbnQvamF2YXNjcmlwdC1oaW50LmpzIiwibm9kZV9tb2R1bGVzL2NvZGVtaXJyb3ItbWluaWZpZWQvYWRkb24vaGludC9zaG93LWhpbnQuanMiLCJub2RlX21vZHVsZXMvY29kZW1pcnJvci1taW5pZmllZC9hZGRvbi9zZWxlY3Rpb24vbWFyay1zZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29kZW1pcnJvci1taW5pZmllZC9saWIvY29kZW1pcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9jb2RlbWlycm9yLW1pbmlmaWVkL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBvbmVudC1iaW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBvbmVudC1lbWl0dGVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBvbmVudC1pbmhlcml0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RvY3VtZW50LXJlYWR5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvbGliL2dsb2JhbFRoaXMuYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L2xpYi9zb2NrZXQuanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9saWIvdHJhbnNwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvbGliL3RyYW5zcG9ydHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9saWIvdHJhbnNwb3J0cy9wb2xsaW5nLWpzb25wLmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvbGliL3RyYW5zcG9ydHMvcG9sbGluZy14aHIuanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9saWIvdHJhbnNwb3J0cy9wb2xsaW5nLmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvbGliL3RyYW5zcG9ydHMvd2Vic29ja2V0LmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvbGliL3RyYW5zcG9ydHMveG1saHR0cHJlcXVlc3QuYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvZGVidWcuanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9ub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLXBhcnNlci9saWIvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tcGFyc2VyL2xpYi9rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1wYXJzZXIvbGliL3V0ZjguanMiLCJub2RlX21vZHVsZXMvZXJyLWNvZGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9mYXN0LXNhZmUtc3RyaW5naWZ5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCJub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9nZXQtYnJvd3Nlci1ydGMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9nbG9iYWwvZG9jdW1lbnQuanMiLCJub2RlX21vZHVsZXMvZ2xvYmFsL3dpbmRvdy5qcyIsIm5vZGVfbW9kdWxlcy9oYXMtYmluYXJ5Mi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oYXMtYmluYXJ5Mi9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oYXMtY29ycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oYXMtcHJvdG8vaW5kZXguanMiLCJub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanMiLCJub2RlX21vZHVsZXMvaGFzL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oeXBlcnNjcmlwdC1hdHRyaWJ1dGUtdG8tcHJvcGVydHkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaHlwZXJ4L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2kxOG5leHQtYnJvd3Nlci1sYW5ndWFnZWRldGVjdG9yL2Rpc3QvY2pzL2kxOG5leHRCcm93c2VyTGFuZ3VhZ2VEZXRlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvY2pzL2kxOG5leHQuanMiLCJub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pbmRleG9mL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2NvcmUvZGlyZWN0aXZlcy5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvY29yZS9pbnB1dHNjYW5uZXIuanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2NvcmUvb3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvY29yZS9vdXRwdXQuanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2NvcmUvcGF0dGVybi5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvY29yZS90ZW1wbGF0YWJsZXBhdHRlcm4uanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2NvcmUvdG9rZW4uanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2NvcmUvdG9rZW5pemVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9jb3JlL3Rva2Vuc3RyZWFtLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9jb3JlL3doaXRlc3BhY2VwYXR0ZXJuLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9jc3MvYmVhdXRpZmllci5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvY3NzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9jc3Mvb3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvaHRtbC9iZWF1dGlmaWVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9odG1sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9odG1sL29wdGlvbnMuanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2h0bWwvdG9rZW5pemVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvamF2YXNjcmlwdC9hY29ybi5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvamF2YXNjcmlwdC9iZWF1dGlmaWVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9qYXZhc2NyaXB0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9qYXZhc2NyaXB0L29wdGlvbnMuanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2phdmFzY3JpcHQvdG9rZW5pemVyLmpzIiwibm9kZV9tb2R1bGVzL25hbm9hc3NlcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmFub2J1cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vYnVzL25vZGVfbW9kdWxlcy9yZW1vdmUtYXJyYXktaXRlbXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmFub2NvbXBvbmVudC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vY29tcG9uZW50L25vZGVfbW9kdWxlcy9uYW5vYXNzZXJ0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25hbm9ocmVmL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25hbm9odG1sL2xpYi9hcHBlbmQtY2hpbGQuanMiLCJub2RlX21vZHVsZXMvbmFub2h0bWwvbGliL2Jvb2wtcHJvcHMuanMiLCJub2RlX21vZHVsZXMvbmFub2h0bWwvbGliL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvbmFub2h0bWwvbGliL2RpcmVjdC1wcm9wcy5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vaHRtbC9saWIvZG9tLmpzIiwibm9kZV9tb2R1bGVzL25hbm9odG1sL2xpYi9yYXctYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vaHRtbC9saWIvc3ZnLXRhZ3MuanMiLCJub2RlX21vZHVsZXMvbmFub2lkL2Zvcm1hdC5icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL25hbm9sb2dnZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmFub2xydS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vbW9ycGgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmFub21vcnBoL2xpYi9ldmVudHMuanMiLCJub2RlX21vZHVsZXMvbmFub21vcnBoL2xpYi9tb3JwaC5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vcXVlcnkvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vcmFmL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25hbm9yb3V0ZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmFub3NjaGVkdWxlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vdGltaW5nL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3QtY2hhbmdlLWNhbGxzaXRlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1pbnNwZWN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29uLWxvYWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvb24tcGVyZm9ybWFuY2UvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZXFzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNldXJpL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BsdWNrZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJldHRpZXItYnl0ZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3FzL2xpYi9mb3JtYXRzLmpzIiwibm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiLCJub2RlX21vZHVsZXMvcXMvbGliL3N0cmluZ2lmeS5qcyIsIm5vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvcXVldWUtbWljcm90YXNrL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JhbmRvbWJ5dGVzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmVtb3ZlLWFycmF5LWl0ZW1zL2Rpc3QvcmVtb3ZlLWFycmF5LWl0ZW1zLmNqcy5qcyIsIm5vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zY3JvbGwtdG8tYW5jaG9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Nob3J0aWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvYWxwaGFiZXQuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvYnVpbGQuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvZ2VuZXJhdGUuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvaXMtdmFsaWQuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvcmFuZG9tL3JhbmRvbS1ieXRlLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvcmFuZG9tL3JhbmRvbS1mcm9tLXNlZWQuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvdXRpbC9jbHVzdGVyLXdvcmtlci1pZC1icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZS1wZWVyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZXJyb3JzLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZS1wZWVyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZS1wZWVyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fd3JpdGFibGUuanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZS1wZWVyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlLmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZS1wZWVyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS1icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1jbGllbnQvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1jbGllbnQvbGliL21hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvc29ja2V0LmlvLWNsaWVudC9saWIvb24uanMiLCJub2RlX21vZHVsZXMvc29ja2V0LmlvLWNsaWVudC9saWIvc29ja2V0LmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1jbGllbnQvbGliL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXQuaW8tY2xpZW50L25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXQuaW8tcGFyc2VyL2JpbmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXQuaW8tcGFyc2VyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1wYXJzZXIvaXMtYnVmZmVyLmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1wYXJzZXIvbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3N0YXRlLWNvcHkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIvbGliL3N0cmluZ19kZWNvZGVyLmpzIiwibm9kZV9tb2R1bGVzL3N1cGVyYWdlbnQvc3JjL2FnZW50LWJhc2UuanMiLCJub2RlX21vZHVsZXMvc3VwZXJhZ2VudC9zcmMvY2xpZW50LmpzIiwibm9kZV9tb2R1bGVzL3N1cGVyYWdlbnQvbGliL25vZGVfbW9kdWxlcy9zdXBlcmFnZW50L3NyYy9yZXF1ZXN0LWJhc2UuanMiLCJub2RlX21vZHVsZXMvc3VwZXJhZ2VudC9zcmMvcmVzcG9uc2UtYmFzZS5qcyIsIm5vZGVfbW9kdWxlcy9zdXBlcmFnZW50L3NyYy91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy90by1hcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy91dGlsLWRlcHJlY2F0ZS9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3dheWZhcmVyL2dldC1hbGwtcm91dGVzLmpzIiwibm9kZV9tb2R1bGVzL3dheWZhcmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3dheWZhcmVyL3RyaWUuanMiLCJub2RlX21vZHVsZXMveWVhc3QvaW5kZXguanMiLCJzcmMvbGliL3A1LXdyYXBwZXIuanMiLCJzcmMvbGliL3BhdGNoLWJheS9wYi1saXZlLmpzIiwic3JjL2xpYi9wYXRjaC1iYXkvcnRjLXBhdGNoLWJheS5qcyIsInNyYy9zdG9yZXMvZXhhbXBsZXMuanNvbiIsInNyYy9zdG9yZXMvZ2FsbGVyeS5qcyIsInNyYy9zdG9yZXMvbGFuZ3VhZ2Utc3RvcmUuanMiLCJzcmMvc3RvcmVzL3N0b3JlLmpzIiwic3JjL3N0b3Jlcy90ZXh0LWVsZW1lbnRzLmpzIiwic3JjL3ZpZXdzL0VkaXRvckNvbXBvbmVudC5qcyIsInNyYy92aWV3cy9IeWRyYS5qcyIsInNyYy92aWV3cy9lZGl0b3IvZWRpdG9yLmpzIiwic3JjL3ZpZXdzL2VkaXRvci9rZXltYXBzLmpzIiwic3JjL3ZpZXdzL2VkaXRvci9sb2cuanMiLCJzcmMvdmlld3MvZWRpdG9yL3JhbmRvbWl6ZXIvTXV0YXRvci5qcyIsInNyYy92aWV3cy9lZGl0b3IvcmFuZG9taXplci9VbmRvU3RhY2suanMiLCJzcmMvdmlld3MvZWRpdG9yL3JhbmRvbWl6ZXIvZ2xzbFRyYW5zZm9ybXMuanMiLCJzcmMvdmlld3MvZWRpdG9yL3JlcGwuanMiLCJzcmMvdmlld3MvaW5mby5qcyIsInNyYy92aWV3cy9tYWluLmpzIiwic3JjL3ZpZXdzL3Rvb2xiYXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDLzFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMxZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMxa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4YkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BHQTs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2p2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBOztBQ0RBO0FBQ0E7O0FDREE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25WQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMzU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDck9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDL1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4eUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoOENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1aENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDL0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbGdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDaG9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN0TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDL0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDbk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDL1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUNuTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMza0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsImNvbnN0IGRldnRvb2xzID0gcmVxdWlyZSgnY2hvby1kZXZ0b29scycpXG5jb25zdCBjaG9vID0gcmVxdWlyZSgnY2hvbycpXG5jb25zdCBzdG9yZSA9IHJlcXVpcmUoJy4vc3JjL3N0b3Jlcy9zdG9yZS5qcycpXG5jb25zdCBsYW5ndWFnZVN0b3JlID0gcmVxdWlyZSgnLi9zcmMvc3RvcmVzL2xhbmd1YWdlLXN0b3JlLmpzJylcblxuY29uc3QgbWFpblZpZXcgPSByZXF1aXJlKCcuL3NyYy92aWV3cy9tYWluLmpzJylcblxuY29uc3QgYXBwID0gY2hvbygpXG5hcHAudXNlKGRldnRvb2xzKCkpXG5hcHAudXNlKHN0b3JlKVxuYXBwLnVzZShsYW5ndWFnZVN0b3JlKVxuYXBwLnJvdXRlKCcvJywgbWFpblZpZXcpXG5hcHAucm91dGUoJy9oeWRyYS1iYWNrdXAnLCBtYWluVmlldylcbmFwcC5tb3VudCgnYm9keScpXG5cblxuXG4iLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIik7XG5mdW5jdGlvbiBfdG9BcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG9iaik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLmFjb3JuID0ge30pKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgLy8gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQuIERvIG5vdCBtb2RpZnkgbWFudWFsbHkhXG4gIHZhciBhc3RyYWxJZGVudGlmaWVyQ29kZXMgPSBbNTA5LCAwLCAyMjcsIDAsIDE1MCwgNCwgMjk0LCA5LCAxMzY4LCAyLCAyLCAxLCA2LCAzLCA0MSwgMiwgNSwgMCwgMTY2LCAxLCA1NzQsIDMsIDksIDksIDM3MCwgMSwgODEsIDIsIDcxLCAxMCwgNTAsIDMsIDEyMywgMiwgNTQsIDE0LCAzMiwgMTAsIDMsIDEsIDExLCAzLCA0NiwgMTAsIDgsIDAsIDQ2LCA5LCA3LCAyLCAzNywgMTMsIDIsIDksIDYsIDEsIDQ1LCAwLCAxMywgMiwgNDksIDEzLCA5LCAzLCAyLCAxMSwgODMsIDExLCA3LCAwLCAzLCAwLCAxNTgsIDExLCA2LCA5LCA3LCAzLCA1NiwgMSwgMiwgNiwgMywgMSwgMywgMiwgMTAsIDAsIDExLCAxLCAzLCA2LCA0LCA0LCAxOTMsIDE3LCAxMCwgOSwgNSwgMCwgODIsIDE5LCAxMywgOSwgMjE0LCA2LCAzLCA4LCAyOCwgMSwgODMsIDE2LCAxNiwgOSwgODIsIDEyLCA5LCA5LCA4NCwgMTQsIDUsIDksIDI0MywgMTQsIDE2NiwgOSwgNzEsIDUsIDIsIDEsIDMsIDMsIDIsIDAsIDIsIDEsIDEzLCA5LCAxMjAsIDYsIDMsIDYsIDQsIDAsIDI5LCA5LCA0MSwgNiwgMiwgMywgOSwgMCwgMTAsIDEwLCA0NywgMTUsIDQwNiwgNywgMiwgNywgMTcsIDksIDU3LCAyMSwgMiwgMTMsIDEyMywgNSwgNCwgMCwgMiwgMSwgMiwgNiwgMiwgMCwgOSwgOSwgNDksIDQsIDIsIDEsIDIsIDQsIDksIDksIDMzMCwgMywgMTAsIDEsIDIsIDAsIDQ5LCA2LCA0LCA0LCAxNCwgOSwgNTM1MSwgMCwgNywgMTQsIDEzODM1LCA5LCA4NywgOSwgMzksIDQsIDYwLCA2LCAyNiwgOSwgMTAxNCwgMCwgMiwgNTQsIDgsIDMsIDgyLCAwLCAxMiwgMSwgMTk2MjgsIDEsIDQ3MDYsIDQ1LCAzLCAyMiwgNTQzLCA0LCA0LCA1LCA5LCA3LCAzLCA2LCAzMSwgMywgMTQ5LCAyLCAxNDE4LCA0OSwgNTEzLCA1NCwgNSwgNDksIDksIDAsIDE1LCAwLCAyMywgNCwgMiwgMTQsIDEzNjEsIDYsIDIsIDE2LCAzLCA2LCAyLCAxLCAyLCA0LCAxMDEsIDAsIDE2MSwgNiwgMTAsIDksIDM1NywgMCwgNjIsIDEzLCA0OTksIDEzLCA5ODMsIDYsIDExMCwgNiwgNiwgOSwgNDc1OSwgOSwgNzg3NzE5LCAyMzldO1xuXG4gIC8vIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkLiBEbyBub3QgbW9kaWZ5IG1hbnVhbGx5IVxuICB2YXIgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMgPSBbMCwgMTEsIDIsIDI1LCAyLCAxOCwgMiwgMSwgMiwgMTQsIDMsIDEzLCAzNSwgMTIyLCA3MCwgNTIsIDI2OCwgMjgsIDQsIDQ4LCA0OCwgMzEsIDE0LCAyOSwgNiwgMzcsIDExLCAyOSwgMywgMzUsIDUsIDcsIDIsIDQsIDQzLCAxNTcsIDE5LCAzNSwgNSwgMzUsIDUsIDM5LCA5LCA1MSwgMTMsIDEwLCAyLCAxNCwgMiwgNiwgMiwgMSwgMiwgMTAsIDIsIDE0LCAyLCA2LCAyLCAxLCA2OCwgMzEwLCAxMCwgMjEsIDExLCA3LCAyNSwgNSwgMiwgNDEsIDIsIDgsIDcwLCA1LCAzLCAwLCAyLCA0MywgMiwgMSwgNCwgMCwgMywgMjIsIDExLCAyMiwgMTAsIDMwLCA2NiwgMTgsIDIsIDEsIDExLCAyMSwgMTEsIDI1LCA3MSwgNTUsIDcsIDEsIDY1LCAwLCAxNiwgMywgMiwgMiwgMiwgMjgsIDQzLCAyOCwgNCwgMjgsIDM2LCA3LCAyLCAyNywgMjgsIDUzLCAxMSwgMjEsIDExLCAxOCwgMTQsIDE3LCAxMTEsIDcyLCA1NiwgNTAsIDE0LCA1MCwgMTQsIDM1LCAzNDksIDQxLCA3LCAxLCA3OSwgMjgsIDExLCAwLCA5LCAyMSwgNDMsIDE3LCA0NywgMjAsIDI4LCAyMiwgMTMsIDUyLCA1OCwgMSwgMywgMCwgMTQsIDQ0LCAzMywgMjQsIDI3LCAzNSwgMzAsIDAsIDMsIDAsIDksIDM0LCA0LCAwLCAxMywgNDcsIDE1LCAzLCAyMiwgMCwgMiwgMCwgMzYsIDE3LCAyLCAyNCwgMjAsIDEsIDY0LCA2LCAyLCAwLCAyLCAzLCAyLCAxNCwgMiwgOSwgOCwgNDYsIDM5LCA3LCAzLCAxLCAzLCAyMSwgMiwgNiwgMiwgMSwgMiwgNCwgNCwgMCwgMTksIDAsIDEzLCA0LCAxNTksIDUyLCAxOSwgMywgMjEsIDIsIDMxLCA0NywgMjEsIDEsIDIsIDAsIDE4NSwgNDYsIDQyLCAzLCAzNywgNDcsIDIxLCAwLCA2MCwgNDIsIDE0LCAwLCA3MiwgMjYsIDM4LCA2LCAxODYsIDQzLCAxMTcsIDYzLCAzMiwgNywgMywgMCwgMywgNywgMiwgMSwgMiwgMjMsIDE2LCAwLCAyLCAwLCA5NSwgNywgMywgMzgsIDE3LCAwLCAyLCAwLCAyOSwgMCwgMTEsIDM5LCA4LCAwLCAyMiwgMCwgMTIsIDQ1LCAyMCwgMCwgMTksIDcyLCAyNjQsIDgsIDIsIDM2LCAxOCwgMCwgNTAsIDI5LCAxMTMsIDYsIDIsIDEsIDIsIDM3LCAyMiwgMCwgMjYsIDUsIDIsIDEsIDIsIDMxLCAxNSwgMCwgMzI4LCAxOCwgMTYsIDAsIDIsIDEyLCAyLCAzMywgMTI1LCAwLCA4MCwgOTIxLCAxMDMsIDExMCwgMTgsIDE5NSwgMjYzNywgOTYsIDE2LCAxMDcxLCAxOCwgNSwgNDAyNiwgNTgyLCA4NjM0LCA1NjgsIDgsIDMwLCAxOCwgNzgsIDE4LCAyOSwgMTksIDQ3LCAxNywgMywgMzIsIDIwLCA2LCAxOCwgNjg5LCA2MywgMTI5LCA3NCwgNiwgMCwgNjcsIDEyLCA2NSwgMSwgMiwgMCwgMjksIDYxMzUsIDksIDEyMzcsIDQzLCA4LCA4OTM2LCAzLCAyLCA2LCAyLCAxLCAyLCAyOTAsIDE2LCAwLCAzMCwgMiwgMywgMCwgMTUsIDMsIDksIDM5NSwgMjMwOSwgMTA2LCA2LCAxMiwgNCwgOCwgOCwgOSwgNTk5MSwgODQsIDIsIDcwLCAyLCAxLCAzLCAwLCAzLCAxLCAzLCAzLCAyLCAxMSwgMiwgMCwgMiwgNiwgMiwgNjQsIDIsIDMsIDMsIDcsIDIsIDYsIDIsIDI3LCAyLCAzLCAyLCA0LCAyLCAwLCA0LCA2LCAyLCAzMzksIDMsIDI0LCAyLCAyNCwgMiwgMzAsIDIsIDI0LCAyLCAzMCwgMiwgMjQsIDIsIDMwLCAyLCAyNCwgMiwgMzAsIDIsIDI0LCAyLCA3LCAxODQ1LCAzMCwgNywgNSwgMjYyLCA2MSwgMTQ3LCA0NCwgMTEsIDYsIDE3LCAwLCAzMjIsIDI5LCAxOSwgNDMsIDQ4NSwgMjcsIDc1NywgNiwgMiwgMywgMiwgMSwgMiwgMTQsIDIsIDE5NiwgNjAsIDY3LCA4LCAwLCAxMjA1LCAzLCAyLCAyNiwgMiwgMSwgMiwgMCwgMywgMCwgMiwgOSwgMiwgMywgMiwgMCwgMiwgMCwgNywgMCwgNSwgMCwgMiwgMCwgMiwgMCwgMiwgMiwgMiwgMSwgMiwgMCwgMywgMCwgMiwgMCwgMiwgMCwgMiwgMCwgMiwgMCwgMiwgMSwgMiwgMCwgMywgMywgMiwgNiwgMiwgMywgMiwgMywgMiwgMCwgMiwgOSwgMiwgMTYsIDYsIDIsIDIsIDQsIDIsIDE2LCA0NDIxLCA0MjcxOSwgMzMsIDQxNTMsIDcsIDIyMSwgMywgNTc2MSwgMTUsIDc0NzIsIDMxMDQsIDU0MSwgMTUwNywgNDkzOCwgNiwgNDE5MV07XG5cbiAgLy8gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQuIERvIG5vdCBtb2RpZnkgbWFudWFsbHkhXG4gIHZhciBub25BU0NJSWlkZW50aWZpZXJDaGFycyA9IFwiXFx1MjAwY1xcdTIwMGRcXHhiN1xcdTAzMDAtXFx1MDM2ZlxcdTAzODdcXHUwNDgzLVxcdTA0ODdcXHUwNTkxLVxcdTA1YmRcXHUwNWJmXFx1MDVjMVxcdTA1YzJcXHUwNWM0XFx1MDVjNVxcdTA1YzdcXHUwNjEwLVxcdTA2MWFcXHUwNjRiLVxcdTA2NjlcXHUwNjcwXFx1MDZkNi1cXHUwNmRjXFx1MDZkZi1cXHUwNmU0XFx1MDZlN1xcdTA2ZThcXHUwNmVhLVxcdTA2ZWRcXHUwNmYwLVxcdTA2ZjlcXHUwNzExXFx1MDczMC1cXHUwNzRhXFx1MDdhNi1cXHUwN2IwXFx1MDdjMC1cXHUwN2M5XFx1MDdlYi1cXHUwN2YzXFx1MDdmZFxcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA4NTktXFx1MDg1YlxcdTA4OTgtXFx1MDg5ZlxcdTA4Y2EtXFx1MDhlMVxcdTA4ZTMtXFx1MDkwM1xcdTA5M2EtXFx1MDkzY1xcdTA5M2UtXFx1MDk0ZlxcdTA5NTEtXFx1MDk1N1xcdTA5NjJcXHUwOTYzXFx1MDk2Ni1cXHUwOTZmXFx1MDk4MS1cXHUwOTgzXFx1MDliY1xcdTA5YmUtXFx1MDljNFxcdTA5YzdcXHUwOWM4XFx1MDljYi1cXHUwOWNkXFx1MDlkN1xcdTA5ZTJcXHUwOWUzXFx1MDllNi1cXHUwOWVmXFx1MDlmZVxcdTBhMDEtXFx1MGEwM1xcdTBhM2NcXHUwYTNlLVxcdTBhNDJcXHUwYTQ3XFx1MGE0OFxcdTBhNGItXFx1MGE0ZFxcdTBhNTFcXHUwYTY2LVxcdTBhNzFcXHUwYTc1XFx1MGE4MS1cXHUwYTgzXFx1MGFiY1xcdTBhYmUtXFx1MGFjNVxcdTBhYzctXFx1MGFjOVxcdTBhY2ItXFx1MGFjZFxcdTBhZTJcXHUwYWUzXFx1MGFlNi1cXHUwYWVmXFx1MGFmYS1cXHUwYWZmXFx1MGIwMS1cXHUwYjAzXFx1MGIzY1xcdTBiM2UtXFx1MGI0NFxcdTBiNDdcXHUwYjQ4XFx1MGI0Yi1cXHUwYjRkXFx1MGI1NS1cXHUwYjU3XFx1MGI2MlxcdTBiNjNcXHUwYjY2LVxcdTBiNmZcXHUwYjgyXFx1MGJiZS1cXHUwYmMyXFx1MGJjNi1cXHUwYmM4XFx1MGJjYS1cXHUwYmNkXFx1MGJkN1xcdTBiZTYtXFx1MGJlZlxcdTBjMDAtXFx1MGMwNFxcdTBjM2NcXHUwYzNlLVxcdTBjNDRcXHUwYzQ2LVxcdTBjNDhcXHUwYzRhLVxcdTBjNGRcXHUwYzU1XFx1MGM1NlxcdTBjNjJcXHUwYzYzXFx1MGM2Ni1cXHUwYzZmXFx1MGM4MS1cXHUwYzgzXFx1MGNiY1xcdTBjYmUtXFx1MGNjNFxcdTBjYzYtXFx1MGNjOFxcdTBjY2EtXFx1MGNjZFxcdTBjZDVcXHUwY2Q2XFx1MGNlMlxcdTBjZTNcXHUwY2U2LVxcdTBjZWZcXHUwY2YzXFx1MGQwMC1cXHUwZDAzXFx1MGQzYlxcdTBkM2NcXHUwZDNlLVxcdTBkNDRcXHUwZDQ2LVxcdTBkNDhcXHUwZDRhLVxcdTBkNGRcXHUwZDU3XFx1MGQ2MlxcdTBkNjNcXHUwZDY2LVxcdTBkNmZcXHUwZDgxLVxcdTBkODNcXHUwZGNhXFx1MGRjZi1cXHUwZGQ0XFx1MGRkNlxcdTBkZDgtXFx1MGRkZlxcdTBkZTYtXFx1MGRlZlxcdTBkZjJcXHUwZGYzXFx1MGUzMVxcdTBlMzQtXFx1MGUzYVxcdTBlNDctXFx1MGU0ZVxcdTBlNTAtXFx1MGU1OVxcdTBlYjFcXHUwZWI0LVxcdTBlYmNcXHUwZWM4LVxcdTBlY2VcXHUwZWQwLVxcdTBlZDlcXHUwZjE4XFx1MGYxOVxcdTBmMjAtXFx1MGYyOVxcdTBmMzVcXHUwZjM3XFx1MGYzOVxcdTBmM2VcXHUwZjNmXFx1MGY3MS1cXHUwZjg0XFx1MGY4NlxcdTBmODdcXHUwZjhkLVxcdTBmOTdcXHUwZjk5LVxcdTBmYmNcXHUwZmM2XFx1MTAyYi1cXHUxMDNlXFx1MTA0MC1cXHUxMDQ5XFx1MTA1Ni1cXHUxMDU5XFx1MTA1ZS1cXHUxMDYwXFx1MTA2Mi1cXHUxMDY0XFx1MTA2Ny1cXHUxMDZkXFx1MTA3MS1cXHUxMDc0XFx1MTA4Mi1cXHUxMDhkXFx1MTA4Zi1cXHUxMDlkXFx1MTM1ZC1cXHUxMzVmXFx1MTM2OS1cXHUxMzcxXFx1MTcxMi1cXHUxNzE1XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3YjQtXFx1MTdkM1xcdTE3ZGRcXHUxN2UwLVxcdTE3ZTlcXHUxODBiLVxcdTE4MGRcXHUxODBmLVxcdTE4MTlcXHUxOGE5XFx1MTkyMC1cXHUxOTJiXFx1MTkzMC1cXHUxOTNiXFx1MTk0Ni1cXHUxOTRmXFx1MTlkMC1cXHUxOWRhXFx1MWExNy1cXHUxYTFiXFx1MWE1NS1cXHUxYTVlXFx1MWE2MC1cXHUxYTdjXFx1MWE3Zi1cXHUxYTg5XFx1MWE5MC1cXHUxYTk5XFx1MWFiMC1cXHUxYWJkXFx1MWFiZi1cXHUxYWNlXFx1MWIwMC1cXHUxYjA0XFx1MWIzNC1cXHUxYjQ0XFx1MWI1MC1cXHUxYjU5XFx1MWI2Yi1cXHUxYjczXFx1MWI4MC1cXHUxYjgyXFx1MWJhMS1cXHUxYmFkXFx1MWJiMC1cXHUxYmI5XFx1MWJlNi1cXHUxYmYzXFx1MWMyNC1cXHUxYzM3XFx1MWM0MC1cXHUxYzQ5XFx1MWM1MC1cXHUxYzU5XFx1MWNkMC1cXHUxY2QyXFx1MWNkNC1cXHUxY2U4XFx1MWNlZFxcdTFjZjRcXHUxY2Y3LVxcdTFjZjlcXHUxZGMwLVxcdTFkZmZcXHUyMDNmXFx1MjA0MFxcdTIwNTRcXHUyMGQwLVxcdTIwZGNcXHUyMGUxXFx1MjBlNS1cXHUyMGYwXFx1MmNlZi1cXHUyY2YxXFx1MmQ3ZlxcdTJkZTAtXFx1MmRmZlxcdTMwMmEtXFx1MzAyZlxcdTMwOTlcXHUzMDlhXFx1YTYyMC1cXHVhNjI5XFx1YTY2ZlxcdWE2NzQtXFx1YTY3ZFxcdWE2OWVcXHVhNjlmXFx1YTZmMFxcdWE2ZjFcXHVhODAyXFx1YTgwNlxcdWE4MGJcXHVhODIzLVxcdWE4MjdcXHVhODJjXFx1YTg4MFxcdWE4ODFcXHVhOGI0LVxcdWE4YzVcXHVhOGQwLVxcdWE4ZDlcXHVhOGUwLVxcdWE4ZjFcXHVhOGZmLVxcdWE5MDlcXHVhOTI2LVxcdWE5MmRcXHVhOTQ3LVxcdWE5NTNcXHVhOTgwLVxcdWE5ODNcXHVhOWIzLVxcdWE5YzBcXHVhOWQwLVxcdWE5ZDlcXHVhOWU1XFx1YTlmMC1cXHVhOWY5XFx1YWEyOS1cXHVhYTM2XFx1YWE0M1xcdWFhNGNcXHVhYTRkXFx1YWE1MC1cXHVhYTU5XFx1YWE3Yi1cXHVhYTdkXFx1YWFiMFxcdWFhYjItXFx1YWFiNFxcdWFhYjdcXHVhYWI4XFx1YWFiZVxcdWFhYmZcXHVhYWMxXFx1YWFlYi1cXHVhYWVmXFx1YWFmNVxcdWFhZjZcXHVhYmUzLVxcdWFiZWFcXHVhYmVjXFx1YWJlZFxcdWFiZjAtXFx1YWJmOVxcdWZiMWVcXHVmZTAwLVxcdWZlMGZcXHVmZTIwLVxcdWZlMmZcXHVmZTMzXFx1ZmUzNFxcdWZlNGQtXFx1ZmU0ZlxcdWZmMTAtXFx1ZmYxOVxcdWZmM2ZcIjtcblxuICAvLyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZC4gRG8gbm90IG1vZGlmeSBtYW51YWxseSFcbiAgdmFyIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgPSBcIlxceGFhXFx4YjVcXHhiYVxceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHUwMmMxXFx1MDJjNi1cXHUwMmQxXFx1MDJlMC1cXHUwMmU0XFx1MDJlY1xcdTAyZWVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN2EtXFx1MDM3ZFxcdTAzN2ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhhXFx1MDM4Y1xcdTAzOGUtXFx1MDNhMVxcdTAzYTMtXFx1MDNmNVxcdTAzZjctXFx1MDQ4MVxcdTA0OGEtXFx1MDUyZlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYwLVxcdTA1ODhcXHUwNWQwLVxcdTA1ZWFcXHUwNWVmLVxcdTA1ZjJcXHUwNjIwLVxcdTA2NGFcXHUwNjZlXFx1MDY2ZlxcdTA2NzEtXFx1MDZkM1xcdTA2ZDVcXHUwNmU1XFx1MDZlNlxcdTA2ZWVcXHUwNmVmXFx1MDZmYS1cXHUwNmZjXFx1MDZmZlxcdTA3MTBcXHUwNzEyLVxcdTA3MmZcXHUwNzRkLVxcdTA3YTVcXHUwN2IxXFx1MDdjYS1cXHUwN2VhXFx1MDdmNFxcdTA3ZjVcXHUwN2ZhXFx1MDgwMC1cXHUwODE1XFx1MDgxYVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDg2MC1cXHUwODZhXFx1MDg3MC1cXHUwODg3XFx1MDg4OS1cXHUwODhlXFx1MDhhMC1cXHUwOGM5XFx1MDkwNC1cXHUwOTM5XFx1MDkzZFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OGNcXHUwOThmXFx1MDk5MFxcdTA5OTMtXFx1MDlhOFxcdTA5YWEtXFx1MDliMFxcdTA5YjJcXHUwOWI2LVxcdTA5YjlcXHUwOWJkXFx1MDljZVxcdTA5ZGNcXHUwOWRkXFx1MDlkZi1cXHUwOWUxXFx1MDlmMFxcdTA5ZjFcXHUwOWZjXFx1MGEwNS1cXHUwYTBhXFx1MGEwZlxcdTBhMTBcXHUwYTEzLVxcdTBhMjhcXHUwYTJhLVxcdTBhMzBcXHUwYTMyXFx1MGEzM1xcdTBhMzVcXHUwYTM2XFx1MGEzOFxcdTBhMzlcXHUwYTU5LVxcdTBhNWNcXHUwYTVlXFx1MGE3Mi1cXHUwYTc0XFx1MGE4NS1cXHUwYThkXFx1MGE4Zi1cXHUwYTkxXFx1MGE5My1cXHUwYWE4XFx1MGFhYS1cXHUwYWIwXFx1MGFiMlxcdTBhYjNcXHUwYWI1LVxcdTBhYjlcXHUwYWJkXFx1MGFkMFxcdTBhZTBcXHUwYWUxXFx1MGFmOVxcdTBiMDUtXFx1MGIwY1xcdTBiMGZcXHUwYjEwXFx1MGIxMy1cXHUwYjI4XFx1MGIyYS1cXHUwYjMwXFx1MGIzMlxcdTBiMzNcXHUwYjM1LVxcdTBiMzlcXHUwYjNkXFx1MGI1Y1xcdTBiNWRcXHUwYjVmLVxcdTBiNjFcXHUwYjcxXFx1MGI4M1xcdTBiODUtXFx1MGI4YVxcdTBiOGUtXFx1MGI5MFxcdTBiOTItXFx1MGI5NVxcdTBiOTlcXHUwYjlhXFx1MGI5Y1xcdTBiOWVcXHUwYjlmXFx1MGJhM1xcdTBiYTRcXHUwYmE4LVxcdTBiYWFcXHUwYmFlLVxcdTBiYjlcXHUwYmQwXFx1MGMwNS1cXHUwYzBjXFx1MGMwZS1cXHUwYzEwXFx1MGMxMi1cXHUwYzI4XFx1MGMyYS1cXHUwYzM5XFx1MGMzZFxcdTBjNTgtXFx1MGM1YVxcdTBjNWRcXHUwYzYwXFx1MGM2MVxcdTBjODBcXHUwYzg1LVxcdTBjOGNcXHUwYzhlLVxcdTBjOTBcXHUwYzkyLVxcdTBjYThcXHUwY2FhLVxcdTBjYjNcXHUwY2I1LVxcdTBjYjlcXHUwY2JkXFx1MGNkZFxcdTBjZGVcXHUwY2UwXFx1MGNlMVxcdTBjZjFcXHUwY2YyXFx1MGQwNC1cXHUwZDBjXFx1MGQwZS1cXHUwZDEwXFx1MGQxMi1cXHUwZDNhXFx1MGQzZFxcdTBkNGVcXHUwZDU0LVxcdTBkNTZcXHUwZDVmLVxcdTBkNjFcXHUwZDdhLVxcdTBkN2ZcXHUwZDg1LVxcdTBkOTZcXHUwZDlhLVxcdTBkYjFcXHUwZGIzLVxcdTBkYmJcXHUwZGJkXFx1MGRjMC1cXHUwZGM2XFx1MGUwMS1cXHUwZTMwXFx1MGUzMlxcdTBlMzNcXHUwZTQwLVxcdTBlNDZcXHUwZTgxXFx1MGU4MlxcdTBlODRcXHUwZTg2LVxcdTBlOGFcXHUwZThjLVxcdTBlYTNcXHUwZWE1XFx1MGVhNy1cXHUwZWIwXFx1MGViMlxcdTBlYjNcXHUwZWJkXFx1MGVjMC1cXHUwZWM0XFx1MGVjNlxcdTBlZGMtXFx1MGVkZlxcdTBmMDBcXHUwZjQwLVxcdTBmNDdcXHUwZjQ5LVxcdTBmNmNcXHUwZjg4LVxcdTBmOGNcXHUxMDAwLVxcdTEwMmFcXHUxMDNmXFx1MTA1MC1cXHUxMDU1XFx1MTA1YS1cXHUxMDVkXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2ZS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4ZVxcdTEwYTAtXFx1MTBjNVxcdTEwYzdcXHUxMGNkXFx1MTBkMC1cXHUxMGZhXFx1MTBmYy1cXHUxMjQ4XFx1MTI0YS1cXHUxMjRkXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNWEtXFx1MTI1ZFxcdTEyNjAtXFx1MTI4OFxcdTEyOGEtXFx1MTI4ZFxcdTEyOTAtXFx1MTJiMFxcdTEyYjItXFx1MTJiNVxcdTEyYjgtXFx1MTJiZVxcdTEyYzBcXHUxMmMyLVxcdTEyYzVcXHUxMmM4LVxcdTEyZDZcXHUxMmQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNWFcXHUxMzgwLVxcdTEzOGZcXHUxM2EwLVxcdTEzZjVcXHUxM2Y4LVxcdTEzZmRcXHUxNDAxLVxcdTE2NmNcXHUxNjZmLVxcdTE2N2ZcXHUxNjgxLVxcdTE2OWFcXHUxNmEwLVxcdTE2ZWFcXHUxNmVlLVxcdTE2ZjhcXHUxNzAwLVxcdTE3MTFcXHUxNzFmLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NmNcXHUxNzZlLVxcdTE3NzBcXHUxNzgwLVxcdTE3YjNcXHUxN2Q3XFx1MTdkY1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MThhOFxcdTE4YWFcXHUxOGIwLVxcdTE4ZjVcXHUxOTAwLVxcdTE5MWVcXHUxOTUwLVxcdTE5NmRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5YWJcXHUxOWIwLVxcdTE5YzlcXHUxYTAwLVxcdTFhMTZcXHUxYTIwLVxcdTFhNTRcXHUxYWE3XFx1MWIwNS1cXHUxYjMzXFx1MWI0NS1cXHUxYjRjXFx1MWI4My1cXHUxYmEwXFx1MWJhZVxcdTFiYWZcXHUxYmJhLVxcdTFiZTVcXHUxYzAwLVxcdTFjMjNcXHUxYzRkLVxcdTFjNGZcXHUxYzVhLVxcdTFjN2RcXHUxYzgwLVxcdTFjODhcXHUxYzkwLVxcdTFjYmFcXHUxY2JkLVxcdTFjYmZcXHUxY2U5LVxcdTFjZWNcXHUxY2VlLVxcdTFjZjNcXHUxY2Y1XFx1MWNmNlxcdTFjZmFcXHUxZDAwLVxcdTFkYmZcXHUxZTAwLVxcdTFmMTVcXHUxZjE4LVxcdTFmMWRcXHUxZjIwLVxcdTFmNDVcXHUxZjQ4LVxcdTFmNGRcXHUxZjUwLVxcdTFmNTdcXHUxZjU5XFx1MWY1YlxcdTFmNWRcXHUxZjVmLVxcdTFmN2RcXHUxZjgwLVxcdTFmYjRcXHUxZmI2LVxcdTFmYmNcXHUxZmJlXFx1MWZjMi1cXHUxZmM0XFx1MWZjNi1cXHUxZmNjXFx1MWZkMC1cXHUxZmQzXFx1MWZkNi1cXHUxZmRiXFx1MWZlMC1cXHUxZmVjXFx1MWZmMi1cXHUxZmY0XFx1MWZmNi1cXHUxZmZjXFx1MjA3MVxcdTIwN2ZcXHUyMDkwLVxcdTIwOWNcXHUyMTAyXFx1MjEwN1xcdTIxMGEtXFx1MjExM1xcdTIxMTVcXHUyMTE4LVxcdTIxMWRcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJhLVxcdTIxMzlcXHUyMTNjLVxcdTIxM2ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRlXFx1MjE2MC1cXHUyMTg4XFx1MmMwMC1cXHUyY2U0XFx1MmNlYi1cXHUyY2VlXFx1MmNmMlxcdTJjZjNcXHUyZDAwLVxcdTJkMjVcXHUyZDI3XFx1MmQyZFxcdTJkMzAtXFx1MmQ2N1xcdTJkNmZcXHUyZDgwLVxcdTJkOTZcXHUyZGEwLVxcdTJkYTZcXHUyZGE4LVxcdTJkYWVcXHUyZGIwLVxcdTJkYjZcXHUyZGI4LVxcdTJkYmVcXHUyZGMwLVxcdTJkYzZcXHUyZGM4LVxcdTJkY2VcXHUyZGQwLVxcdTJkZDZcXHUyZGQ4LVxcdTJkZGVcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM2NcXHUzMDQxLVxcdTMwOTZcXHUzMDliLVxcdTMwOWZcXHUzMGExLVxcdTMwZmFcXHUzMGZjLVxcdTMwZmZcXHUzMTA1LVxcdTMxMmZcXHUzMTMxLVxcdTMxOGVcXHUzMWEwLVxcdTMxYmZcXHUzMWYwLVxcdTMxZmZcXHUzNDAwLVxcdTRkYmZcXHU0ZTAwLVxcdWE0OGNcXHVhNGQwLVxcdWE0ZmRcXHVhNTAwLVxcdWE2MGNcXHVhNjEwLVxcdWE2MWZcXHVhNjJhXFx1YTYyYlxcdWE2NDAtXFx1YTY2ZVxcdWE2N2YtXFx1YTY5ZFxcdWE2YTAtXFx1YTZlZlxcdWE3MTctXFx1YTcxZlxcdWE3MjItXFx1YTc4OFxcdWE3OGItXFx1YTdjYVxcdWE3ZDBcXHVhN2QxXFx1YTdkM1xcdWE3ZDUtXFx1YTdkOVxcdWE3ZjItXFx1YTgwMVxcdWE4MDMtXFx1YTgwNVxcdWE4MDctXFx1YTgwYVxcdWE4MGMtXFx1YTgyMlxcdWE4NDAtXFx1YTg3M1xcdWE4ODItXFx1YThiM1xcdWE4ZjItXFx1YThmN1xcdWE4ZmJcXHVhOGZkXFx1YThmZVxcdWE5MGEtXFx1YTkyNVxcdWE5MzAtXFx1YTk0NlxcdWE5NjAtXFx1YTk3Y1xcdWE5ODQtXFx1YTliMlxcdWE5Y2ZcXHVhOWUwLVxcdWE5ZTRcXHVhOWU2LVxcdWE5ZWZcXHVhOWZhLVxcdWE5ZmVcXHVhYTAwLVxcdWFhMjhcXHVhYTQwLVxcdWFhNDJcXHVhYTQ0LVxcdWFhNGJcXHVhYTYwLVxcdWFhNzZcXHVhYTdhXFx1YWE3ZS1cXHVhYWFmXFx1YWFiMVxcdWFhYjVcXHVhYWI2XFx1YWFiOS1cXHVhYWJkXFx1YWFjMFxcdWFhYzJcXHVhYWRiLVxcdWFhZGRcXHVhYWUwLVxcdWFhZWFcXHVhYWYyLVxcdWFhZjRcXHVhYjAxLVxcdWFiMDZcXHVhYjA5LVxcdWFiMGVcXHVhYjExLVxcdWFiMTZcXHVhYjIwLVxcdWFiMjZcXHVhYjI4LVxcdWFiMmVcXHVhYjMwLVxcdWFiNWFcXHVhYjVjLVxcdWFiNjlcXHVhYjcwLVxcdWFiZTJcXHVhYzAwLVxcdWQ3YTNcXHVkN2IwLVxcdWQ3YzZcXHVkN2NiLVxcdWQ3ZmJcXHVmOTAwLVxcdWZhNmRcXHVmYTcwLVxcdWZhZDlcXHVmYjAwLVxcdWZiMDZcXHVmYjEzLVxcdWZiMTdcXHVmYjFkXFx1ZmIxZi1cXHVmYjI4XFx1ZmIyYS1cXHVmYjM2XFx1ZmIzOC1cXHVmYjNjXFx1ZmIzZVxcdWZiNDBcXHVmYjQxXFx1ZmI0M1xcdWZiNDRcXHVmYjQ2LVxcdWZiYjFcXHVmYmQzLVxcdWZkM2RcXHVmZDUwLVxcdWZkOGZcXHVmZDkyLVxcdWZkYzdcXHVmZGYwLVxcdWZkZmJcXHVmZTcwLVxcdWZlNzRcXHVmZTc2LVxcdWZlZmNcXHVmZjIxLVxcdWZmM2FcXHVmZjQxLVxcdWZmNWFcXHVmZjY2LVxcdWZmYmVcXHVmZmMyLVxcdWZmYzdcXHVmZmNhLVxcdWZmY2ZcXHVmZmQyLVxcdWZmZDdcXHVmZmRhLVxcdWZmZGNcIjtcblxuICAvLyBUaGVzZSBhcmUgYSBydW4tbGVuZ3RoIGFuZCBvZmZzZXQgZW5jb2RlZCByZXByZXNlbnRhdGlvbiBvZiB0aGVcbiAgLy8gPjB4ZmZmZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBhIHZhbGlkIHBhcnQgb2YgaWRlbnRpZmllcnMuIFRoZVxuICAvLyBvZmZzZXQgc3RhcnRzIGF0IDB4MTAwMDAsIGFuZCBlYWNoIHBhaXIgb2YgbnVtYmVycyByZXByZXNlbnRzIGFuXG4gIC8vIG9mZnNldCB0byB0aGUgbmV4dCByYW5nZSwgYW5kIHRoZW4gYSBzaXplIG9mIHRoZSByYW5nZS5cblxuICAvLyBSZXNlcnZlZCB3b3JkIGxpc3RzIGZvciB2YXJpb3VzIGRpYWxlY3RzIG9mIHRoZSBsYW5ndWFnZVxuXG4gIHZhciByZXNlcnZlZFdvcmRzID0ge1xuICAgIDM6IFwiYWJzdHJhY3QgYm9vbGVhbiBieXRlIGNoYXIgY2xhc3MgZG91YmxlIGVudW0gZXhwb3J0IGV4dGVuZHMgZmluYWwgZmxvYXQgZ290byBpbXBsZW1lbnRzIGltcG9ydCBpbnQgaW50ZXJmYWNlIGxvbmcgbmF0aXZlIHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHNob3J0IHN0YXRpYyBzdXBlciBzeW5jaHJvbml6ZWQgdGhyb3dzIHRyYW5zaWVudCB2b2xhdGlsZVwiLFxuICAgIDU6IFwiY2xhc3MgZW51bSBleHRlbmRzIHN1cGVyIGNvbnN0IGV4cG9ydCBpbXBvcnRcIixcbiAgICA2OiBcImVudW1cIixcbiAgICBzdHJpY3Q6IFwiaW1wbGVtZW50cyBpbnRlcmZhY2UgbGV0IHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHN0YXRpYyB5aWVsZFwiLFxuICAgIHN0cmljdEJpbmQ6IFwiZXZhbCBhcmd1bWVudHNcIlxuICB9O1xuXG4gIC8vIEFuZCB0aGUga2V5d29yZHNcblxuICB2YXIgZWNtYTVBbmRMZXNzS2V5d29yZHMgPSBcImJyZWFrIGNhc2UgY2F0Y2ggY29udGludWUgZGVidWdnZXIgZGVmYXVsdCBkbyBlbHNlIGZpbmFsbHkgZm9yIGZ1bmN0aW9uIGlmIHJldHVybiBzd2l0Y2ggdGhyb3cgdHJ5IHZhciB3aGlsZSB3aXRoIG51bGwgdHJ1ZSBmYWxzZSBpbnN0YW5jZW9mIHR5cGVvZiB2b2lkIGRlbGV0ZSBuZXcgaW4gdGhpc1wiO1xuXG4gIHZhciBrZXl3b3JkcyQxID0ge1xuICAgIDU6IGVjbWE1QW5kTGVzc0tleXdvcmRzLFxuICAgIFwiNW1vZHVsZVwiOiBlY21hNUFuZExlc3NLZXl3b3JkcyArIFwiIGV4cG9ydCBpbXBvcnRcIixcbiAgICA2OiBlY21hNUFuZExlc3NLZXl3b3JkcyArIFwiIGNvbnN0IGNsYXNzIGV4dGVuZHMgZXhwb3J0IGltcG9ydCBzdXBlclwiXG4gIH07XG5cbiAgdmFyIGtleXdvcmRSZWxhdGlvbmFsT3BlcmF0b3IgPSAvXmluKHN0YW5jZW9mKT8kLztcblxuICAvLyAjIyBDaGFyYWN0ZXIgY2F0ZWdvcmllc1xuXG4gIHZhciBub25BU0NJSWlkZW50aWZpZXJTdGFydCA9IG5ldyBSZWdFeHAoXCJbXCIgKyBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzICsgXCJdXCIpO1xuICB2YXIgbm9uQVNDSUlpZGVudGlmaWVyID0gbmV3IFJlZ0V4cChcIltcIiArIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgKyBub25BU0NJSWlkZW50aWZpZXJDaGFycyArIFwiXVwiKTtcblxuICAvLyBUaGlzIGhhcyBhIGNvbXBsZXhpdHkgbGluZWFyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgY29kZS4gVGhlXG4gIC8vIGFzc3VtcHRpb24gaXMgdGhhdCBsb29raW5nIHVwIGFzdHJhbCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgaXNcbiAgLy8gcmFyZS5cbiAgZnVuY3Rpb24gaXNJbkFzdHJhbFNldChjb2RlLCBzZXQpIHtcbiAgICB2YXIgcG9zID0gMHgxMDAwMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgcG9zICs9IHNldFtpXTtcbiAgICAgIGlmIChwb3MgPiBjb2RlKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICBwb3MgKz0gc2V0W2kgKyAxXTtcbiAgICAgIGlmIChwb3MgPj0gY29kZSkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVGVzdCB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGNvZGUgc3RhcnRzIGFuIGlkZW50aWZpZXIuXG5cbiAgZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY29kZSwgYXN0cmFsKSB7XG4gICAgaWYgKGNvZGUgPCA2NSkgeyByZXR1cm4gY29kZSA9PT0gMzYgfVxuICAgIGlmIChjb2RlIDwgOTEpIHsgcmV0dXJuIHRydWUgfVxuICAgIGlmIChjb2RlIDwgOTcpIHsgcmV0dXJuIGNvZGUgPT09IDk1IH1cbiAgICBpZiAoY29kZSA8IDEyMykgeyByZXR1cm4gdHJ1ZSB9XG4gICAgaWYgKGNvZGUgPD0gMHhmZmZmKSB7IHJldHVybiBjb2RlID49IDB4YWEgJiYgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKSB9XG4gICAgaWYgKGFzdHJhbCA9PT0gZmFsc2UpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICByZXR1cm4gaXNJbkFzdHJhbFNldChjb2RlLCBhc3RyYWxJZGVudGlmaWVyU3RhcnRDb2RlcylcbiAgfVxuXG4gIC8vIFRlc3Qgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBpcyBwYXJ0IG9mIGFuIGlkZW50aWZpZXIuXG5cbiAgZnVuY3Rpb24gaXNJZGVudGlmaWVyQ2hhcihjb2RlLCBhc3RyYWwpIHtcbiAgICBpZiAoY29kZSA8IDQ4KSB7IHJldHVybiBjb2RlID09PSAzNiB9XG4gICAgaWYgKGNvZGUgPCA1OCkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgaWYgKGNvZGUgPCA2NSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIGlmIChjb2RlIDwgOTEpIHsgcmV0dXJuIHRydWUgfVxuICAgIGlmIChjb2RlIDwgOTcpIHsgcmV0dXJuIGNvZGUgPT09IDk1IH1cbiAgICBpZiAoY29kZSA8IDEyMykgeyByZXR1cm4gdHJ1ZSB9XG4gICAgaWYgKGNvZGUgPD0gMHhmZmZmKSB7IHJldHVybiBjb2RlID49IDB4YWEgJiYgbm9uQVNDSUlpZGVudGlmaWVyLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSkgfVxuICAgIGlmIChhc3RyYWwgPT09IGZhbHNlKSB7IHJldHVybiBmYWxzZSB9XG4gICAgcmV0dXJuIGlzSW5Bc3RyYWxTZXQoY29kZSwgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMpIHx8IGlzSW5Bc3RyYWxTZXQoY29kZSwgYXN0cmFsSWRlbnRpZmllckNvZGVzKVxuICB9XG5cbiAgLy8gIyMgVG9rZW4gdHlwZXNcblxuICAvLyBUaGUgYXNzaWdubWVudCBvZiBmaW5lLWdyYWluZWQsIGluZm9ybWF0aW9uLWNhcnJ5aW5nIHR5cGUgb2JqZWN0c1xuICAvLyBhbGxvd3MgdGhlIHRva2VuaXplciB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gaXQgaGFzIGFib3V0IGFcbiAgLy8gdG9rZW4gaW4gYSB3YXkgdGhhdCBpcyB2ZXJ5IGNoZWFwIGZvciB0aGUgcGFyc2VyIHRvIGxvb2sgdXAuXG5cbiAgLy8gQWxsIHRva2VuIHR5cGUgdmFyaWFibGVzIHN0YXJ0IHdpdGggYW4gdW5kZXJzY29yZSwgdG8gbWFrZSB0aGVtXG4gIC8vIGVhc3kgdG8gcmVjb2duaXplLlxuXG4gIC8vIFRoZSBgYmVmb3JlRXhwcmAgcHJvcGVydHkgaXMgdXNlZCB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiByZWd1bGFyXG4gIC8vIGV4cHJlc3Npb25zIGFuZCBkaXZpc2lvbnMuIEl0IGlzIHNldCBvbiBhbGwgdG9rZW4gdHlwZXMgdGhhdCBjYW5cbiAgLy8gYmUgZm9sbG93ZWQgYnkgYW4gZXhwcmVzc2lvbiAodGh1cywgYSBzbGFzaCBhZnRlciB0aGVtIHdvdWxkIGJlIGFcbiAgLy8gcmVndWxhciBleHByZXNzaW9uKS5cbiAgLy9cbiAgLy8gVGhlIGBzdGFydHNFeHByYCBwcm9wZXJ0eSBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSB0b2tlbiBlbmRzIGFcbiAgLy8gYHlpZWxkYCBleHByZXNzaW9uLiBJdCBpcyBzZXQgb24gYWxsIHRva2VuIHR5cGVzIHRoYXQgZWl0aGVyIGNhblxuICAvLyBkaXJlY3RseSBzdGFydCBhbiBleHByZXNzaW9uIChsaWtlIGEgcXVvdGF0aW9uIG1hcmspIG9yIGNhblxuICAvLyBjb250aW51ZSBhbiBleHByZXNzaW9uIChsaWtlIHRoZSBib2R5IG9mIGEgc3RyaW5nKS5cbiAgLy9cbiAgLy8gYGlzTG9vcGAgbWFya3MgYSBrZXl3b3JkIGFzIHN0YXJ0aW5nIGEgbG9vcCwgd2hpY2ggaXMgaW1wb3J0YW50XG4gIC8vIHRvIGtub3cgd2hlbiBwYXJzaW5nIGEgbGFiZWwsIGluIG9yZGVyIHRvIGFsbG93IG9yIGRpc2FsbG93XG4gIC8vIGNvbnRpbnVlIGp1bXBzIHRvIHRoYXQgbGFiZWwuXG5cbiAgdmFyIFRva2VuVHlwZSA9IGZ1bmN0aW9uIFRva2VuVHlwZShsYWJlbCwgY29uZikge1xuICAgIGlmICggY29uZiA9PT0gdm9pZCAwICkgY29uZiA9IHt9O1xuXG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgIHRoaXMua2V5d29yZCA9IGNvbmYua2V5d29yZDtcbiAgICB0aGlzLmJlZm9yZUV4cHIgPSAhIWNvbmYuYmVmb3JlRXhwcjtcbiAgICB0aGlzLnN0YXJ0c0V4cHIgPSAhIWNvbmYuc3RhcnRzRXhwcjtcbiAgICB0aGlzLmlzTG9vcCA9ICEhY29uZi5pc0xvb3A7XG4gICAgdGhpcy5pc0Fzc2lnbiA9ICEhY29uZi5pc0Fzc2lnbjtcbiAgICB0aGlzLnByZWZpeCA9ICEhY29uZi5wcmVmaXg7XG4gICAgdGhpcy5wb3N0Zml4ID0gISFjb25mLnBvc3RmaXg7XG4gICAgdGhpcy5iaW5vcCA9IGNvbmYuYmlub3AgfHwgbnVsbDtcbiAgICB0aGlzLnVwZGF0ZUNvbnRleHQgPSBudWxsO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGJpbm9wKG5hbWUsIHByZWMpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuVHlwZShuYW1lLCB7YmVmb3JlRXhwcjogdHJ1ZSwgYmlub3A6IHByZWN9KVxuICB9XG4gIHZhciBiZWZvcmVFeHByID0ge2JlZm9yZUV4cHI6IHRydWV9LCBzdGFydHNFeHByID0ge3N0YXJ0c0V4cHI6IHRydWV9O1xuXG4gIC8vIE1hcCBrZXl3b3JkIG5hbWVzIHRvIHRva2VuIHR5cGVzLlxuXG4gIHZhciBrZXl3b3JkcyA9IHt9O1xuXG4gIC8vIFN1Y2NpbmN0IGRlZmluaXRpb25zIG9mIGtleXdvcmQgdG9rZW4gdHlwZXNcbiAgZnVuY3Rpb24ga3cobmFtZSwgb3B0aW9ucykge1xuICAgIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gICAgb3B0aW9ucy5rZXl3b3JkID0gbmFtZTtcbiAgICByZXR1cm4ga2V5d29yZHNbbmFtZV0gPSBuZXcgVG9rZW5UeXBlKG5hbWUsIG9wdGlvbnMpXG4gIH1cblxuICB2YXIgdHlwZXMkMSA9IHtcbiAgICBudW06IG5ldyBUb2tlblR5cGUoXCJudW1cIiwgc3RhcnRzRXhwciksXG4gICAgcmVnZXhwOiBuZXcgVG9rZW5UeXBlKFwicmVnZXhwXCIsIHN0YXJ0c0V4cHIpLFxuICAgIHN0cmluZzogbmV3IFRva2VuVHlwZShcInN0cmluZ1wiLCBzdGFydHNFeHByKSxcbiAgICBuYW1lOiBuZXcgVG9rZW5UeXBlKFwibmFtZVwiLCBzdGFydHNFeHByKSxcbiAgICBwcml2YXRlSWQ6IG5ldyBUb2tlblR5cGUoXCJwcml2YXRlSWRcIiwgc3RhcnRzRXhwciksXG4gICAgZW9mOiBuZXcgVG9rZW5UeXBlKFwiZW9mXCIpLFxuXG4gICAgLy8gUHVuY3R1YXRpb24gdG9rZW4gdHlwZXMuXG4gICAgYnJhY2tldEw6IG5ldyBUb2tlblR5cGUoXCJbXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gICAgYnJhY2tldFI6IG5ldyBUb2tlblR5cGUoXCJdXCIpLFxuICAgIGJyYWNlTDogbmV3IFRva2VuVHlwZShcIntcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgICBicmFjZVI6IG5ldyBUb2tlblR5cGUoXCJ9XCIpLFxuICAgIHBhcmVuTDogbmV3IFRva2VuVHlwZShcIihcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgICBwYXJlblI6IG5ldyBUb2tlblR5cGUoXCIpXCIpLFxuICAgIGNvbW1hOiBuZXcgVG9rZW5UeXBlKFwiLFwiLCBiZWZvcmVFeHByKSxcbiAgICBzZW1pOiBuZXcgVG9rZW5UeXBlKFwiO1wiLCBiZWZvcmVFeHByKSxcbiAgICBjb2xvbjogbmV3IFRva2VuVHlwZShcIjpcIiwgYmVmb3JlRXhwciksXG4gICAgZG90OiBuZXcgVG9rZW5UeXBlKFwiLlwiKSxcbiAgICBxdWVzdGlvbjogbmV3IFRva2VuVHlwZShcIj9cIiwgYmVmb3JlRXhwciksXG4gICAgcXVlc3Rpb25Eb3Q6IG5ldyBUb2tlblR5cGUoXCI/LlwiKSxcbiAgICBhcnJvdzogbmV3IFRva2VuVHlwZShcIj0+XCIsIGJlZm9yZUV4cHIpLFxuICAgIHRlbXBsYXRlOiBuZXcgVG9rZW5UeXBlKFwidGVtcGxhdGVcIiksXG4gICAgaW52YWxpZFRlbXBsYXRlOiBuZXcgVG9rZW5UeXBlKFwiaW52YWxpZFRlbXBsYXRlXCIpLFxuICAgIGVsbGlwc2lzOiBuZXcgVG9rZW5UeXBlKFwiLi4uXCIsIGJlZm9yZUV4cHIpLFxuICAgIGJhY2tRdW90ZTogbmV3IFRva2VuVHlwZShcImBcIiwgc3RhcnRzRXhwciksXG4gICAgZG9sbGFyQnJhY2VMOiBuZXcgVG9rZW5UeXBlKFwiJHtcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcblxuICAgIC8vIE9wZXJhdG9ycy4gVGhlc2UgY2Fycnkgc2V2ZXJhbCBraW5kcyBvZiBwcm9wZXJ0aWVzIHRvIGhlbHAgdGhlXG4gICAgLy8gcGFyc2VyIHVzZSB0aGVtIHByb3Blcmx5ICh0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgcHJvcGVydGllcyBpc1xuICAgIC8vIHdoYXQgY2F0ZWdvcml6ZXMgdGhlbSBhcyBvcGVyYXRvcnMpLlxuICAgIC8vXG4gICAgLy8gYGJpbm9wYCwgd2hlbiBwcmVzZW50LCBzcGVjaWZpZXMgdGhhdCB0aGlzIG9wZXJhdG9yIGlzIGEgYmluYXJ5XG4gICAgLy8gb3BlcmF0b3IsIGFuZCB3aWxsIHJlZmVyIHRvIGl0cyBwcmVjZWRlbmNlLlxuICAgIC8vXG4gICAgLy8gYHByZWZpeGAgYW5kIGBwb3N0Zml4YCBtYXJrIHRoZSBvcGVyYXRvciBhcyBhIHByZWZpeCBvciBwb3N0Zml4XG4gICAgLy8gdW5hcnkgb3BlcmF0b3IuXG4gICAgLy9cbiAgICAvLyBgaXNBc3NpZ25gIG1hcmtzIGFsbCBvZiBgPWAsIGArPWAsIGAtPWAgZXRjZXRlcmEsIHdoaWNoIGFjdCBhc1xuICAgIC8vIGJpbmFyeSBvcGVyYXRvcnMgd2l0aCBhIHZlcnkgbG93IHByZWNlZGVuY2UsIHRoYXQgc2hvdWxkIHJlc3VsdFxuICAgIC8vIGluIEFzc2lnbm1lbnRFeHByZXNzaW9uIG5vZGVzLlxuXG4gICAgZXE6IG5ldyBUb2tlblR5cGUoXCI9XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBpc0Fzc2lnbjogdHJ1ZX0pLFxuICAgIGFzc2lnbjogbmV3IFRva2VuVHlwZShcIl89XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBpc0Fzc2lnbjogdHJ1ZX0pLFxuICAgIGluY0RlYzogbmV3IFRva2VuVHlwZShcIisrLy0tXCIsIHtwcmVmaXg6IHRydWUsIHBvc3RmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgICBwcmVmaXg6IG5ldyBUb2tlblR5cGUoXCIhL35cIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICAgIGxvZ2ljYWxPUjogYmlub3AoXCJ8fFwiLCAxKSxcbiAgICBsb2dpY2FsQU5EOiBiaW5vcChcIiYmXCIsIDIpLFxuICAgIGJpdHdpc2VPUjogYmlub3AoXCJ8XCIsIDMpLFxuICAgIGJpdHdpc2VYT1I6IGJpbm9wKFwiXlwiLCA0KSxcbiAgICBiaXR3aXNlQU5EOiBiaW5vcChcIiZcIiwgNSksXG4gICAgZXF1YWxpdHk6IGJpbm9wKFwiPT0vIT0vPT09LyE9PVwiLCA2KSxcbiAgICByZWxhdGlvbmFsOiBiaW5vcChcIjwvPi88PS8+PVwiLCA3KSxcbiAgICBiaXRTaGlmdDogYmlub3AoXCI8PC8+Pi8+Pj5cIiwgOCksXG4gICAgcGx1c01pbjogbmV3IFRva2VuVHlwZShcIisvLVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgYmlub3A6IDksIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICAgIG1vZHVsbzogYmlub3AoXCIlXCIsIDEwKSxcbiAgICBzdGFyOiBiaW5vcChcIipcIiwgMTApLFxuICAgIHNsYXNoOiBiaW5vcChcIi9cIiwgMTApLFxuICAgIHN0YXJzdGFyOiBuZXcgVG9rZW5UeXBlKFwiKipcIiwge2JlZm9yZUV4cHI6IHRydWV9KSxcbiAgICBjb2FsZXNjZTogYmlub3AoXCI/P1wiLCAxKSxcblxuICAgIC8vIEtleXdvcmQgdG9rZW4gdHlwZXMuXG4gICAgX2JyZWFrOiBrdyhcImJyZWFrXCIpLFxuICAgIF9jYXNlOiBrdyhcImNhc2VcIiwgYmVmb3JlRXhwciksXG4gICAgX2NhdGNoOiBrdyhcImNhdGNoXCIpLFxuICAgIF9jb250aW51ZToga3coXCJjb250aW51ZVwiKSxcbiAgICBfZGVidWdnZXI6IGt3KFwiZGVidWdnZXJcIiksXG4gICAgX2RlZmF1bHQ6IGt3KFwiZGVmYXVsdFwiLCBiZWZvcmVFeHByKSxcbiAgICBfZG86IGt3KFwiZG9cIiwge2lzTG9vcDogdHJ1ZSwgYmVmb3JlRXhwcjogdHJ1ZX0pLFxuICAgIF9lbHNlOiBrdyhcImVsc2VcIiwgYmVmb3JlRXhwciksXG4gICAgX2ZpbmFsbHk6IGt3KFwiZmluYWxseVwiKSxcbiAgICBfZm9yOiBrdyhcImZvclwiLCB7aXNMb29wOiB0cnVlfSksXG4gICAgX2Z1bmN0aW9uOiBrdyhcImZ1bmN0aW9uXCIsIHN0YXJ0c0V4cHIpLFxuICAgIF9pZjoga3coXCJpZlwiKSxcbiAgICBfcmV0dXJuOiBrdyhcInJldHVyblwiLCBiZWZvcmVFeHByKSxcbiAgICBfc3dpdGNoOiBrdyhcInN3aXRjaFwiKSxcbiAgICBfdGhyb3c6IGt3KFwidGhyb3dcIiwgYmVmb3JlRXhwciksXG4gICAgX3RyeToga3coXCJ0cnlcIiksXG4gICAgX3Zhcjoga3coXCJ2YXJcIiksXG4gICAgX2NvbnN0OiBrdyhcImNvbnN0XCIpLFxuICAgIF93aGlsZToga3coXCJ3aGlsZVwiLCB7aXNMb29wOiB0cnVlfSksXG4gICAgX3dpdGg6IGt3KFwid2l0aFwiKSxcbiAgICBfbmV3OiBrdyhcIm5ld1wiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICAgIF90aGlzOiBrdyhcInRoaXNcIiwgc3RhcnRzRXhwciksXG4gICAgX3N1cGVyOiBrdyhcInN1cGVyXCIsIHN0YXJ0c0V4cHIpLFxuICAgIF9jbGFzczoga3coXCJjbGFzc1wiLCBzdGFydHNFeHByKSxcbiAgICBfZXh0ZW5kczoga3coXCJleHRlbmRzXCIsIGJlZm9yZUV4cHIpLFxuICAgIF9leHBvcnQ6IGt3KFwiZXhwb3J0XCIpLFxuICAgIF9pbXBvcnQ6IGt3KFwiaW1wb3J0XCIsIHN0YXJ0c0V4cHIpLFxuICAgIF9udWxsOiBrdyhcIm51bGxcIiwgc3RhcnRzRXhwciksXG4gICAgX3RydWU6IGt3KFwidHJ1ZVwiLCBzdGFydHNFeHByKSxcbiAgICBfZmFsc2U6IGt3KFwiZmFsc2VcIiwgc3RhcnRzRXhwciksXG4gICAgX2luOiBrdyhcImluXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBiaW5vcDogN30pLFxuICAgIF9pbnN0YW5jZW9mOiBrdyhcImluc3RhbmNlb2ZcIiwge2JlZm9yZUV4cHI6IHRydWUsIGJpbm9wOiA3fSksXG4gICAgX3R5cGVvZjoga3coXCJ0eXBlb2ZcIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICAgIF92b2lkOiBrdyhcInZvaWRcIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICAgIF9kZWxldGU6IGt3KFwiZGVsZXRlXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBwcmVmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KVxuICB9O1xuXG4gIC8vIE1hdGNoZXMgYSB3aG9sZSBsaW5lIGJyZWFrICh3aGVyZSBDUkxGIGlzIGNvbnNpZGVyZWQgYSBzaW5nbGVcbiAgLy8gbGluZSBicmVhaykuIFVzZWQgdG8gY291bnQgbGluZXMuXG5cbiAgdmFyIGxpbmVCcmVhayA9IC9cXHJcXG4/fFxcbnxcXHUyMDI4fFxcdTIwMjkvO1xuICB2YXIgbGluZUJyZWFrRyA9IG5ldyBSZWdFeHAobGluZUJyZWFrLnNvdXJjZSwgXCJnXCIpO1xuXG4gIGZ1bmN0aW9uIGlzTmV3TGluZShjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgPT09IDEwIHx8IGNvZGUgPT09IDEzIHx8IGNvZGUgPT09IDB4MjAyOCB8fCBjb2RlID09PSAweDIwMjlcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHRMaW5lQnJlYWsoY29kZSwgZnJvbSwgZW5kKSB7XG4gICAgaWYgKCBlbmQgPT09IHZvaWQgMCApIGVuZCA9IGNvZGUubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IGZyb207IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdmFyIG5leHQgPSBjb2RlLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoaXNOZXdMaW5lKG5leHQpKVxuICAgICAgICB7IHJldHVybiBpIDwgZW5kIC0gMSAmJiBuZXh0ID09PSAxMyAmJiBjb2RlLmNoYXJDb2RlQXQoaSArIDEpID09PSAxMCA/IGkgKyAyIDogaSArIDEgfVxuICAgIH1cbiAgICByZXR1cm4gLTFcbiAgfVxuXG4gIHZhciBub25BU0NJSXdoaXRlc3BhY2UgPSAvW1xcdTE2ODBcXHUyMDAwLVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHVmZWZmXS87XG5cbiAgdmFyIHNraXBXaGl0ZVNwYWNlID0gLyg/Olxcc3xcXC9cXC8uKnxcXC9cXCpbXl0qP1xcKlxcLykqL2c7XG5cbiAgdmFyIHJlZiA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd25Qcm9wZXJ0eSA9IHJlZi5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHRvU3RyaW5nID0gcmVmLnRvU3RyaW5nO1xuXG4gIHZhciBoYXNPd24gPSBPYmplY3QuaGFzT3duIHx8IChmdW5jdGlvbiAob2JqLCBwcm9wTmFtZSkgeyByZXR1cm4gKFxuICAgIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wTmFtZSlcbiAgKTsgfSk7XG5cbiAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IChmdW5jdGlvbiAob2JqKSB7IHJldHVybiAoXG4gICAgdG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgQXJyYXldXCJcbiAgKTsgfSk7XG5cbiAgZnVuY3Rpb24gd29yZHNSZWdleHAod29yZHMpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIHdvcmRzLnJlcGxhY2UoLyAvZywgXCJ8XCIpICsgXCIpJFwiKVxuICB9XG5cbiAgZnVuY3Rpb24gY29kZVBvaW50VG9TdHJpbmcoY29kZSkge1xuICAgIC8vIFVURi0xNiBEZWNvZGluZ1xuICAgIGlmIChjb2RlIDw9IDB4RkZGRikgeyByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSB9XG4gICAgY29kZSAtPSAweDEwMDAwO1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKChjb2RlID4+IDEwKSArIDB4RDgwMCwgKGNvZGUgJiAxMDIzKSArIDB4REMwMClcbiAgfVxuXG4gIHZhciBsb25lU3Vycm9nYXRlID0gLyg/OltcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKS87XG5cbiAgLy8gVGhlc2UgYXJlIHVzZWQgd2hlbiBgb3B0aW9ucy5sb2NhdGlvbnNgIGlzIG9uLCBmb3IgdGhlXG4gIC8vIGBzdGFydExvY2AgYW5kIGBlbmRMb2NgIHByb3BlcnRpZXMuXG5cbiAgdmFyIFBvc2l0aW9uID0gZnVuY3Rpb24gUG9zaXRpb24obGluZSwgY29sKSB7XG4gICAgdGhpcy5saW5lID0gbGluZTtcbiAgICB0aGlzLmNvbHVtbiA9IGNvbDtcbiAgfTtcblxuICBQb3NpdGlvbi5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0IChuKSB7XG4gICAgcmV0dXJuIG5ldyBQb3NpdGlvbih0aGlzLmxpbmUsIHRoaXMuY29sdW1uICsgbilcbiAgfTtcblxuICB2YXIgU291cmNlTG9jYXRpb24gPSBmdW5jdGlvbiBTb3VyY2VMb2NhdGlvbihwLCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIGlmIChwLnNvdXJjZUZpbGUgIT09IG51bGwpIHsgdGhpcy5zb3VyY2UgPSBwLnNvdXJjZUZpbGU7IH1cbiAgfTtcblxuICAvLyBUaGUgYGdldExpbmVJbmZvYCBmdW5jdGlvbiBpcyBtb3N0bHkgdXNlZnVsIHdoZW4gdGhlXG4gIC8vIGBsb2NhdGlvbnNgIG9wdGlvbiBpcyBvZmYgKGZvciBwZXJmb3JtYW5jZSByZWFzb25zKSBhbmQgeW91XG4gIC8vIHdhbnQgdG8gZmluZCB0aGUgbGluZS9jb2x1bW4gcG9zaXRpb24gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyXG4gIC8vIG9mZnNldC4gYGlucHV0YCBzaG91bGQgYmUgdGhlIGNvZGUgc3RyaW5nIHRoYXQgdGhlIG9mZnNldCByZWZlcnNcbiAgLy8gaW50by5cblxuICBmdW5jdGlvbiBnZXRMaW5lSW5mbyhpbnB1dCwgb2Zmc2V0KSB7XG4gICAgZm9yICh2YXIgbGluZSA9IDEsIGN1ciA9IDA7Oykge1xuICAgICAgdmFyIG5leHRCcmVhayA9IG5leHRMaW5lQnJlYWsoaW5wdXQsIGN1ciwgb2Zmc2V0KTtcbiAgICAgIGlmIChuZXh0QnJlYWsgPCAwKSB7IHJldHVybiBuZXcgUG9zaXRpb24obGluZSwgb2Zmc2V0IC0gY3VyKSB9XG4gICAgICArK2xpbmU7XG4gICAgICBjdXIgPSBuZXh0QnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gQSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBnaXZlbiB0byBjb25maWd1cmUgdGhlIHBhcnNlciBwcm9jZXNzLlxuICAvLyBUaGVzZSBvcHRpb25zIGFyZSByZWNvZ25pemVkIChvbmx5IGBlY21hVmVyc2lvbmAgaXMgcmVxdWlyZWQpOlxuXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAvLyBgZWNtYVZlcnNpb25gIGluZGljYXRlcyB0aGUgRUNNQVNjcmlwdCB2ZXJzaW9uIHRvIHBhcnNlLiBNdXN0IGJlXG4gICAgLy8gZWl0aGVyIDMsIDUsIDYgKG9yIDIwMTUpLCA3ICgyMDE2KSwgOCAoMjAxNyksIDkgKDIwMTgpLCAxMFxuICAgIC8vICgyMDE5KSwgMTEgKDIwMjApLCAxMiAoMjAyMSksIDEzICgyMDIyKSwgMTQgKDIwMjMpLCBvciBgXCJsYXRlc3RcImBcbiAgICAvLyAodGhlIGxhdGVzdCB2ZXJzaW9uIHRoZSBsaWJyYXJ5IHN1cHBvcnRzKS4gVGhpcyBpbmZsdWVuY2VzXG4gICAgLy8gc3VwcG9ydCBmb3Igc3RyaWN0IG1vZGUsIHRoZSBzZXQgb2YgcmVzZXJ2ZWQgd29yZHMsIGFuZCBzdXBwb3J0XG4gICAgLy8gZm9yIG5ldyBzeW50YXggZmVhdHVyZXMuXG4gICAgZWNtYVZlcnNpb246IG51bGwsXG4gICAgLy8gYHNvdXJjZVR5cGVgIGluZGljYXRlcyB0aGUgbW9kZSB0aGUgY29kZSBzaG91bGQgYmUgcGFyc2VkIGluLlxuICAgIC8vIENhbiBiZSBlaXRoZXIgYFwic2NyaXB0XCJgIG9yIGBcIm1vZHVsZVwiYC4gVGhpcyBpbmZsdWVuY2VzIGdsb2JhbFxuICAgIC8vIHN0cmljdCBtb2RlIGFuZCBwYXJzaW5nIG9mIGBpbXBvcnRgIGFuZCBgZXhwb3J0YCBkZWNsYXJhdGlvbnMuXG4gICAgc291cmNlVHlwZTogXCJzY3JpcHRcIixcbiAgICAvLyBgb25JbnNlcnRlZFNlbWljb2xvbmAgY2FuIGJlIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZFxuICAgIC8vIHdoZW4gYSBzZW1pY29sb24gaXMgYXV0b21hdGljYWxseSBpbnNlcnRlZC4gSXQgd2lsbCBiZSBwYXNzZWRcbiAgICAvLyB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbW1hIGFzIGFuIG9mZnNldCwgYW5kIGlmIGBsb2NhdGlvbnNgIGlzXG4gICAgLy8gZW5hYmxlZCwgaXQgaXMgZ2l2ZW4gdGhlIGxvY2F0aW9uIGFzIGEgYHtsaW5lLCBjb2x1bW59YCBvYmplY3RcbiAgICAvLyBhcyBzZWNvbmQgYXJndW1lbnQuXG4gICAgb25JbnNlcnRlZFNlbWljb2xvbjogbnVsbCxcbiAgICAvLyBgb25UcmFpbGluZ0NvbW1hYCBpcyBzaW1pbGFyIHRvIGBvbkluc2VydGVkU2VtaWNvbG9uYCwgYnV0IGZvclxuICAgIC8vIHRyYWlsaW5nIGNvbW1hcy5cbiAgICBvblRyYWlsaW5nQ29tbWE6IG51bGwsXG4gICAgLy8gQnkgZGVmYXVsdCwgcmVzZXJ2ZWQgd29yZHMgYXJlIG9ubHkgZW5mb3JjZWQgaWYgZWNtYVZlcnNpb24gPj0gNS5cbiAgICAvLyBTZXQgYGFsbG93UmVzZXJ2ZWRgIHRvIGEgYm9vbGVhbiB2YWx1ZSB0byBleHBsaWNpdGx5IHR1cm4gdGhpcyBvblxuICAgIC8vIGFuIG9mZi4gV2hlbiB0aGlzIG9wdGlvbiBoYXMgdGhlIHZhbHVlIFwibmV2ZXJcIiwgcmVzZXJ2ZWQgd29yZHNcbiAgICAvLyBhbmQga2V5d29yZHMgY2FuIGFsc28gbm90IGJlIHVzZWQgYXMgcHJvcGVydHkgbmFtZXMuXG4gICAgYWxsb3dSZXNlcnZlZDogbnVsbCxcbiAgICAvLyBXaGVuIGVuYWJsZWQsIGEgcmV0dXJuIGF0IHRoZSB0b3AgbGV2ZWwgaXMgbm90IGNvbnNpZGVyZWQgYW5cbiAgICAvLyBlcnJvci5cbiAgICBhbGxvd1JldHVybk91dHNpZGVGdW5jdGlvbjogZmFsc2UsXG4gICAgLy8gV2hlbiBlbmFibGVkLCBpbXBvcnQvZXhwb3J0IHN0YXRlbWVudHMgYXJlIG5vdCBjb25zdHJhaW5lZCB0b1xuICAgIC8vIGFwcGVhcmluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtLCBhbmQgYW4gaW1wb3J0Lm1ldGEgZXhwcmVzc2lvblxuICAgIC8vIGluIGEgc2NyaXB0IGlzbid0IGNvbnNpZGVyZWQgYW4gZXJyb3IuXG4gICAgYWxsb3dJbXBvcnRFeHBvcnRFdmVyeXdoZXJlOiBmYWxzZSxcbiAgICAvLyBCeSBkZWZhdWx0LCBhd2FpdCBpZGVudGlmaWVycyBhcmUgYWxsb3dlZCB0byBhcHBlYXIgYXQgdGhlIHRvcC1sZXZlbCBzY29wZSBvbmx5IGlmIGVjbWFWZXJzaW9uID49IDIwMjIuXG4gICAgLy8gV2hlbiBlbmFibGVkLCBhd2FpdCBpZGVudGlmaWVycyBhcmUgYWxsb3dlZCB0byBhcHBlYXIgYXQgdGhlIHRvcC1sZXZlbCBzY29wZSxcbiAgICAvLyBidXQgdGhleSBhcmUgc3RpbGwgbm90IGFsbG93ZWQgaW4gbm9uLWFzeW5jIGZ1bmN0aW9ucy5cbiAgICBhbGxvd0F3YWl0T3V0c2lkZUZ1bmN0aW9uOiBudWxsLFxuICAgIC8vIFdoZW4gZW5hYmxlZCwgc3VwZXIgaWRlbnRpZmllcnMgYXJlIG5vdCBjb25zdHJhaW5lZCB0b1xuICAgIC8vIGFwcGVhcmluZyBpbiBtZXRob2RzIGFuZCBkbyBub3QgcmFpc2UgYW4gZXJyb3Igd2hlbiB0aGV5IGFwcGVhciBlbHNld2hlcmUuXG4gICAgYWxsb3dTdXBlck91dHNpZGVNZXRob2Q6IG51bGwsXG4gICAgLy8gV2hlbiBlbmFibGVkLCBoYXNoYmFuZyBkaXJlY3RpdmUgaW4gdGhlIGJlZ2lubmluZyBvZiBmaWxlIGlzXG4gICAgLy8gYWxsb3dlZCBhbmQgdHJlYXRlZCBhcyBhIGxpbmUgY29tbWVudC4gRW5hYmxlZCBieSBkZWZhdWx0IHdoZW5cbiAgICAvLyBgZWNtYVZlcnNpb25gID49IDIwMjMuXG4gICAgYWxsb3dIYXNoQmFuZzogZmFsc2UsXG4gICAgLy8gV2hlbiBgbG9jYXRpb25zYCBpcyBvbiwgYGxvY2AgcHJvcGVydGllcyBob2xkaW5nIG9iamVjdHMgd2l0aFxuICAgIC8vIGBzdGFydGAgYW5kIGBlbmRgIHByb3BlcnRpZXMgaW4gYHtsaW5lLCBjb2x1bW59YCBmb3JtICh3aXRoXG4gICAgLy8gbGluZSBiZWluZyAxLWJhc2VkIGFuZCBjb2x1bW4gMC1iYXNlZCkgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGVcbiAgICAvLyBub2Rlcy5cbiAgICBsb2NhdGlvbnM6IGZhbHNlLFxuICAgIC8vIEEgZnVuY3Rpb24gY2FuIGJlIHBhc3NlZCBhcyBgb25Ub2tlbmAgb3B0aW9uLCB3aGljaCB3aWxsXG4gICAgLy8gY2F1c2UgQWNvcm4gdG8gY2FsbCB0aGF0IGZ1bmN0aW9uIHdpdGggb2JqZWN0IGluIHRoZSBzYW1lXG4gICAgLy8gZm9ybWF0IGFzIHRva2VucyByZXR1cm5lZCBmcm9tIGB0b2tlbml6ZXIoKS5nZXRUb2tlbigpYC4gTm90ZVxuICAgIC8vIHRoYXQgeW91IGFyZSBub3QgYWxsb3dlZCB0byBjYWxsIHRoZSBwYXJzZXIgZnJvbSB0aGVcbiAgICAvLyBjYWxsYmFja+KAlHRoYXQgd2lsbCBjb3JydXB0IGl0cyBpbnRlcm5hbCBzdGF0ZS5cbiAgICBvblRva2VuOiBudWxsLFxuICAgIC8vIEEgZnVuY3Rpb24gY2FuIGJlIHBhc3NlZCBhcyBgb25Db21tZW50YCBvcHRpb24sIHdoaWNoIHdpbGxcbiAgICAvLyBjYXVzZSBBY29ybiB0byBjYWxsIHRoYXQgZnVuY3Rpb24gd2l0aCBgKGJsb2NrLCB0ZXh0LCBzdGFydCxcbiAgICAvLyBlbmQpYCBwYXJhbWV0ZXJzIHdoZW5ldmVyIGEgY29tbWVudCBpcyBza2lwcGVkLiBgYmxvY2tgIGlzIGFcbiAgICAvLyBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGlzIGlzIGEgYmxvY2sgKGAvKiAqL2ApIGNvbW1lbnQsXG4gICAgLy8gYHRleHRgIGlzIHRoZSBjb250ZW50IG9mIHRoZSBjb21tZW50LCBhbmQgYHN0YXJ0YCBhbmQgYGVuZGAgYXJlXG4gICAgLy8gY2hhcmFjdGVyIG9mZnNldHMgdGhhdCBkZW5vdGUgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGNvbW1lbnQuXG4gICAgLy8gV2hlbiB0aGUgYGxvY2F0aW9uc2Agb3B0aW9uIGlzIG9uLCB0d28gbW9yZSBwYXJhbWV0ZXJzIGFyZVxuICAgIC8vIHBhc3NlZCwgdGhlIGZ1bGwgYHtsaW5lLCBjb2x1bW59YCBsb2NhdGlvbnMgb2YgdGhlIHN0YXJ0IGFuZFxuICAgIC8vIGVuZCBvZiB0aGUgY29tbWVudHMuIE5vdGUgdGhhdCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNhbGwgdGhlXG4gICAgLy8gcGFyc2VyIGZyb20gdGhlIGNhbGxiYWNr4oCUdGhhdCB3aWxsIGNvcnJ1cHQgaXRzIGludGVybmFsIHN0YXRlLlxuICAgIG9uQ29tbWVudDogbnVsbCxcbiAgICAvLyBOb2RlcyBoYXZlIHRoZWlyIHN0YXJ0IGFuZCBlbmQgY2hhcmFjdGVycyBvZmZzZXRzIHJlY29yZGVkIGluXG4gICAgLy8gYHN0YXJ0YCBhbmQgYGVuZGAgcHJvcGVydGllcyAoZGlyZWN0bHkgb24gdGhlIG5vZGUsIHJhdGhlciB0aGFuXG4gICAgLy8gdGhlIGBsb2NgIG9iamVjdCwgd2hpY2ggaG9sZHMgbGluZS9jb2x1bW4gZGF0YS4gVG8gYWxzbyBhZGQgYVxuICAgIC8vIFtzZW1pLXN0YW5kYXJkaXplZF1bcmFuZ2VdIGByYW5nZWAgcHJvcGVydHkgaG9sZGluZyBhIGBbc3RhcnQsXG4gICAgLy8gZW5kXWAgYXJyYXkgd2l0aCB0aGUgc2FtZSBudW1iZXJzLCBzZXQgdGhlIGByYW5nZXNgIG9wdGlvbiB0b1xuICAgIC8vIGB0cnVlYC5cbiAgICAvL1xuICAgIC8vIFtyYW5nZV06IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTY3OFxuICAgIHJhbmdlczogZmFsc2UsXG4gICAgLy8gSXQgaXMgcG9zc2libGUgdG8gcGFyc2UgbXVsdGlwbGUgZmlsZXMgaW50byBhIHNpbmdsZSBBU1QgYnlcbiAgICAvLyBwYXNzaW5nIHRoZSB0cmVlIHByb2R1Y2VkIGJ5IHBhcnNpbmcgdGhlIGZpcnN0IGZpbGUgYXNcbiAgICAvLyBgcHJvZ3JhbWAgb3B0aW9uIGluIHN1YnNlcXVlbnQgcGFyc2VzLiBUaGlzIHdpbGwgYWRkIHRoZVxuICAgIC8vIHRvcGxldmVsIGZvcm1zIG9mIHRoZSBwYXJzZWQgZmlsZSB0byB0aGUgYFByb2dyYW1gICh0b3ApIG5vZGVcbiAgICAvLyBvZiBhbiBleGlzdGluZyBwYXJzZSB0cmVlLlxuICAgIHByb2dyYW06IG51bGwsXG4gICAgLy8gV2hlbiBgbG9jYXRpb25zYCBpcyBvbiwgeW91IGNhbiBwYXNzIHRoaXMgdG8gcmVjb3JkIHRoZSBzb3VyY2VcbiAgICAvLyBmaWxlIGluIGV2ZXJ5IG5vZGUncyBgbG9jYCBvYmplY3QuXG4gICAgc291cmNlRmlsZTogbnVsbCxcbiAgICAvLyBUaGlzIHZhbHVlLCBpZiBnaXZlbiwgaXMgc3RvcmVkIGluIGV2ZXJ5IG5vZGUsIHdoZXRoZXJcbiAgICAvLyBgbG9jYXRpb25zYCBpcyBvbiBvciBvZmYuXG4gICAgZGlyZWN0U291cmNlRmlsZTogbnVsbCxcbiAgICAvLyBXaGVuIGVuYWJsZWQsIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbnMgYXJlIHJlcHJlc2VudGVkIGJ5XG4gICAgLy8gKG5vbi1zdGFuZGFyZCkgUGFyZW50aGVzaXplZEV4cHJlc3Npb24gbm9kZXNcbiAgICBwcmVzZXJ2ZVBhcmVuczogZmFsc2VcbiAgfTtcblxuICAvLyBJbnRlcnByZXQgYW5kIGRlZmF1bHQgYW4gb3B0aW9ucyBvYmplY3RcblxuICB2YXIgd2FybmVkQWJvdXRFY21hVmVyc2lvbiA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGdldE9wdGlvbnMob3B0cykge1xuICAgIHZhciBvcHRpb25zID0ge307XG5cbiAgICBmb3IgKHZhciBvcHQgaW4gZGVmYXVsdE9wdGlvbnMpXG4gICAgICB7IG9wdGlvbnNbb3B0XSA9IG9wdHMgJiYgaGFzT3duKG9wdHMsIG9wdCkgPyBvcHRzW29wdF0gOiBkZWZhdWx0T3B0aW9uc1tvcHRdOyB9XG5cbiAgICBpZiAob3B0aW9ucy5lY21hVmVyc2lvbiA9PT0gXCJsYXRlc3RcIikge1xuICAgICAgb3B0aW9ucy5lY21hVmVyc2lvbiA9IDFlODtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZWNtYVZlcnNpb24gPT0gbnVsbCkge1xuICAgICAgaWYgKCF3YXJuZWRBYm91dEVjbWFWZXJzaW9uICYmIHR5cGVvZiBjb25zb2xlID09PSBcIm9iamVjdFwiICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICB3YXJuZWRBYm91dEVjbWFWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKFwiU2luY2UgQWNvcm4gOC4wLjAsIG9wdGlvbnMuZWNtYVZlcnNpb24gaXMgcmVxdWlyZWQuXFxuRGVmYXVsdGluZyB0byAyMDIwLCBidXQgdGhpcyB3aWxsIHN0b3Agd29ya2luZyBpbiB0aGUgZnV0dXJlLlwiKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuZWNtYVZlcnNpb24gPSAxMTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMjAxNSkge1xuICAgICAgb3B0aW9ucy5lY21hVmVyc2lvbiAtPSAyMDA5O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmFsbG93UmVzZXJ2ZWQgPT0gbnVsbClcbiAgICAgIHsgb3B0aW9ucy5hbGxvd1Jlc2VydmVkID0gb3B0aW9ucy5lY21hVmVyc2lvbiA8IDU7IH1cblxuICAgIGlmICghb3B0cyB8fCBvcHRzLmFsbG93SGFzaEJhbmcgPT0gbnVsbClcbiAgICAgIHsgb3B0aW9ucy5hbGxvd0hhc2hCYW5nID0gb3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxNDsgfVxuXG4gICAgaWYgKGlzQXJyYXkob3B0aW9ucy5vblRva2VuKSkge1xuICAgICAgdmFyIHRva2VucyA9IG9wdGlvbnMub25Ub2tlbjtcbiAgICAgIG9wdGlvbnMub25Ub2tlbiA9IGZ1bmN0aW9uICh0b2tlbikgeyByZXR1cm4gdG9rZW5zLnB1c2godG9rZW4pOyB9O1xuICAgIH1cbiAgICBpZiAoaXNBcnJheShvcHRpb25zLm9uQ29tbWVudCkpXG4gICAgICB7IG9wdGlvbnMub25Db21tZW50ID0gcHVzaENvbW1lbnQob3B0aW9ucywgb3B0aW9ucy5vbkNvbW1lbnQpOyB9XG5cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaENvbW1lbnQob3B0aW9ucywgYXJyYXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYmxvY2ssIHRleHQsIHN0YXJ0LCBlbmQsIHN0YXJ0TG9jLCBlbmRMb2MpIHtcbiAgICAgIHZhciBjb21tZW50ID0ge1xuICAgICAgICB0eXBlOiBibG9jayA/IFwiQmxvY2tcIiA6IFwiTGluZVwiLFxuICAgICAgICB2YWx1ZTogdGV4dCxcbiAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICBlbmQ6IGVuZFxuICAgICAgfTtcbiAgICAgIGlmIChvcHRpb25zLmxvY2F0aW9ucylcbiAgICAgICAgeyBjb21tZW50LmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbih0aGlzLCBzdGFydExvYywgZW5kTG9jKTsgfVxuICAgICAgaWYgKG9wdGlvbnMucmFuZ2VzKVxuICAgICAgICB7IGNvbW1lbnQucmFuZ2UgPSBbc3RhcnQsIGVuZF07IH1cbiAgICAgIGFycmF5LnB1c2goY29tbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRWFjaCBzY29wZSBnZXRzIGEgYml0c2V0IHRoYXQgbWF5IGNvbnRhaW4gdGhlc2UgZmxhZ3NcbiAgdmFyXG4gICAgICBTQ09QRV9UT1AgPSAxLFxuICAgICAgU0NPUEVfRlVOQ1RJT04gPSAyLFxuICAgICAgU0NPUEVfQVNZTkMgPSA0LFxuICAgICAgU0NPUEVfR0VORVJBVE9SID0gOCxcbiAgICAgIFNDT1BFX0FSUk9XID0gMTYsXG4gICAgICBTQ09QRV9TSU1QTEVfQ0FUQ0ggPSAzMixcbiAgICAgIFNDT1BFX1NVUEVSID0gNjQsXG4gICAgICBTQ09QRV9ESVJFQ1RfU1VQRVIgPSAxMjgsXG4gICAgICBTQ09QRV9DTEFTU19TVEFUSUNfQkxPQ0sgPSAyNTYsXG4gICAgICBTQ09QRV9WQVIgPSBTQ09QRV9UT1AgfCBTQ09QRV9GVU5DVElPTiB8IFNDT1BFX0NMQVNTX1NUQVRJQ19CTE9DSztcblxuICBmdW5jdGlvbiBmdW5jdGlvbkZsYWdzKGFzeW5jLCBnZW5lcmF0b3IpIHtcbiAgICByZXR1cm4gU0NPUEVfRlVOQ1RJT04gfCAoYXN5bmMgPyBTQ09QRV9BU1lOQyA6IDApIHwgKGdlbmVyYXRvciA/IFNDT1BFX0dFTkVSQVRPUiA6IDApXG4gIH1cblxuICAvLyBVc2VkIGluIGNoZWNrTFZhbCogYW5kIGRlY2xhcmVOYW1lIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBhIGJpbmRpbmdcbiAgdmFyXG4gICAgICBCSU5EX05PTkUgPSAwLCAvLyBOb3QgYSBiaW5kaW5nXG4gICAgICBCSU5EX1ZBUiA9IDEsIC8vIFZhci1zdHlsZSBiaW5kaW5nXG4gICAgICBCSU5EX0xFWElDQUwgPSAyLCAvLyBMZXQtIG9yIGNvbnN0LXN0eWxlIGJpbmRpbmdcbiAgICAgIEJJTkRfRlVOQ1RJT04gPSAzLCAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvblxuICAgICAgQklORF9TSU1QTEVfQ0FUQ0ggPSA0LCAvLyBTaW1wbGUgKGlkZW50aWZpZXIgcGF0dGVybikgY2F0Y2ggYmluZGluZ1xuICAgICAgQklORF9PVVRTSURFID0gNTsgLy8gU3BlY2lhbCBjYXNlIGZvciBmdW5jdGlvbiBuYW1lcyBhcyBib3VuZCBpbnNpZGUgdGhlIGZ1bmN0aW9uXG5cbiAgdmFyIFBhcnNlciA9IGZ1bmN0aW9uIFBhcnNlcihvcHRpb25zLCBpbnB1dCwgc3RhcnRQb3MpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLnNvdXJjZUZpbGUgPSBvcHRpb25zLnNvdXJjZUZpbGU7XG4gICAgdGhpcy5rZXl3b3JkcyA9IHdvcmRzUmVnZXhwKGtleXdvcmRzJDFbb3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ID8gNiA6IG9wdGlvbnMuc291cmNlVHlwZSA9PT0gXCJtb2R1bGVcIiA/IFwiNW1vZHVsZVwiIDogNV0pO1xuICAgIHZhciByZXNlcnZlZCA9IFwiXCI7XG4gICAgaWYgKG9wdGlvbnMuYWxsb3dSZXNlcnZlZCAhPT0gdHJ1ZSkge1xuICAgICAgcmVzZXJ2ZWQgPSByZXNlcnZlZFdvcmRzW29wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiA/IDYgOiBvcHRpb25zLmVjbWFWZXJzaW9uID09PSA1ID8gNSA6IDNdO1xuICAgICAgaWYgKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gXCJtb2R1bGVcIikgeyByZXNlcnZlZCArPSBcIiBhd2FpdFwiOyB9XG4gICAgfVxuICAgIHRoaXMucmVzZXJ2ZWRXb3JkcyA9IHdvcmRzUmVnZXhwKHJlc2VydmVkKTtcbiAgICB2YXIgcmVzZXJ2ZWRTdHJpY3QgPSAocmVzZXJ2ZWQgPyByZXNlcnZlZCArIFwiIFwiIDogXCJcIikgKyByZXNlcnZlZFdvcmRzLnN0cmljdDtcbiAgICB0aGlzLnJlc2VydmVkV29yZHNTdHJpY3QgPSB3b3Jkc1JlZ2V4cChyZXNlcnZlZFN0cmljdCk7XG4gICAgdGhpcy5yZXNlcnZlZFdvcmRzU3RyaWN0QmluZCA9IHdvcmRzUmVnZXhwKHJlc2VydmVkU3RyaWN0ICsgXCIgXCIgKyByZXNlcnZlZFdvcmRzLnN0cmljdEJpbmQpO1xuICAgIHRoaXMuaW5wdXQgPSBTdHJpbmcoaW5wdXQpO1xuXG4gICAgLy8gVXNlZCB0byBzaWduYWwgdG8gY2FsbGVycyBvZiBgcmVhZFdvcmQxYCB3aGV0aGVyIHRoZSB3b3JkXG4gICAgLy8gY29udGFpbmVkIGFueSBlc2NhcGUgc2VxdWVuY2VzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdvcmRzIHdpdGhcbiAgICAvLyBlc2NhcGUgc2VxdWVuY2VzIG11c3Qgbm90IGJlIGludGVycHJldGVkIGFzIGtleXdvcmRzLlxuICAgIHRoaXMuY29udGFpbnNFc2MgPSBmYWxzZTtcblxuICAgIC8vIFNldCB1cCB0b2tlbiBzdGF0ZVxuXG4gICAgLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHRva2VuaXplciBpbiB0aGUgaW5wdXQuXG4gICAgaWYgKHN0YXJ0UG9zKSB7XG4gICAgICB0aGlzLnBvcyA9IHN0YXJ0UG9zO1xuICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmlucHV0Lmxhc3RJbmRleE9mKFwiXFxuXCIsIHN0YXJ0UG9zIC0gMSkgKyAxO1xuICAgICAgdGhpcy5jdXJMaW5lID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmxpbmVTdGFydCkuc3BsaXQobGluZUJyZWFrKS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9zID0gdGhpcy5saW5lU3RhcnQgPSAwO1xuICAgICAgdGhpcy5jdXJMaW5lID0gMTtcbiAgICB9XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IHRva2VuOlxuICAgIC8vIEl0cyB0eXBlXG4gICAgdGhpcy50eXBlID0gdHlwZXMkMS5lb2Y7XG4gICAgLy8gRm9yIHRva2VucyB0aGF0IGluY2x1ZGUgbW9yZSBpbmZvcm1hdGlvbiB0aGFuIHRoZWlyIHR5cGUsIHRoZSB2YWx1ZVxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIC8vIEl0cyBzdGFydCBhbmQgZW5kIG9mZnNldFxuICAgIHRoaXMuc3RhcnQgPSB0aGlzLmVuZCA9IHRoaXMucG9zO1xuICAgIC8vIEFuZCwgaWYgbG9jYXRpb25zIGFyZSB1c2VkLCB0aGUge2xpbmUsIGNvbHVtbn0gb2JqZWN0XG4gICAgLy8gY29ycmVzcG9uZGluZyB0byB0aG9zZSBvZmZzZXRzXG4gICAgdGhpcy5zdGFydExvYyA9IHRoaXMuZW5kTG9jID0gdGhpcy5jdXJQb3NpdGlvbigpO1xuXG4gICAgLy8gUG9zaXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBwcmV2aW91cyB0b2tlblxuICAgIHRoaXMubGFzdFRva0VuZExvYyA9IHRoaXMubGFzdFRva1N0YXJ0TG9jID0gbnVsbDtcbiAgICB0aGlzLmxhc3RUb2tTdGFydCA9IHRoaXMubGFzdFRva0VuZCA9IHRoaXMucG9zO1xuXG4gICAgLy8gVGhlIGNvbnRleHQgc3RhY2sgaXMgdXNlZCB0byBzdXBlcmZpY2lhbGx5IHRyYWNrIHN5bnRhY3RpY1xuICAgIC8vIGNvbnRleHQgdG8gcHJlZGljdCB3aGV0aGVyIGEgcmVndWxhciBleHByZXNzaW9uIGlzIGFsbG93ZWQgaW4gYVxuICAgIC8vIGdpdmVuIHBvc2l0aW9uLlxuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuaW5pdGlhbENvbnRleHQoKTtcbiAgICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcblxuICAgIC8vIEZpZ3VyZSBvdXQgaWYgaXQncyBhIG1vZHVsZSBjb2RlLlxuICAgIHRoaXMuaW5Nb2R1bGUgPSBvcHRpb25zLnNvdXJjZVR5cGUgPT09IFwibW9kdWxlXCI7XG4gICAgdGhpcy5zdHJpY3QgPSB0aGlzLmluTW9kdWxlIHx8IHRoaXMuc3RyaWN0RGlyZWN0aXZlKHRoaXMucG9zKTtcblxuICAgIC8vIFVzZWQgdG8gc2lnbmlmeSB0aGUgc3RhcnQgb2YgYSBwb3RlbnRpYWwgYXJyb3cgZnVuY3Rpb25cbiAgICB0aGlzLnBvdGVudGlhbEFycm93QXQgPSAtMTtcbiAgICB0aGlzLnBvdGVudGlhbEFycm93SW5Gb3JBd2FpdCA9IGZhbHNlO1xuXG4gICAgLy8gUG9zaXRpb25zIHRvIGRlbGF5ZWQtY2hlY2sgdGhhdCB5aWVsZC9hd2FpdCBkb2VzIG5vdCBleGlzdCBpbiBkZWZhdWx0IHBhcmFtZXRlcnMuXG4gICAgdGhpcy55aWVsZFBvcyA9IHRoaXMuYXdhaXRQb3MgPSB0aGlzLmF3YWl0SWRlbnRQb3MgPSAwO1xuICAgIC8vIExhYmVscyBpbiBzY29wZS5cbiAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgIC8vIFRodXMtZmFyIHVuZGVmaW5lZCBleHBvcnRzLlxuICAgIHRoaXMudW5kZWZpbmVkRXhwb3J0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAvLyBJZiBlbmFibGVkLCBza2lwIGxlYWRpbmcgaGFzaGJhbmcgbGluZS5cbiAgICBpZiAodGhpcy5wb3MgPT09IDAgJiYgb3B0aW9ucy5hbGxvd0hhc2hCYW5nICYmIHRoaXMuaW5wdXQuc2xpY2UoMCwgMikgPT09IFwiIyFcIilcbiAgICAgIHsgdGhpcy5za2lwTGluZUNvbW1lbnQoMik7IH1cblxuICAgIC8vIFNjb3BlIHRyYWNraW5nIGZvciBkdXBsaWNhdGUgdmFyaWFibGUgbmFtZXMgKHNlZSBzY29wZS5qcylcbiAgICB0aGlzLnNjb3BlU3RhY2sgPSBbXTtcbiAgICB0aGlzLmVudGVyU2NvcGUoU0NPUEVfVE9QKTtcblxuICAgIC8vIEZvciBSZWdFeHAgdmFsaWRhdGlvblxuICAgIHRoaXMucmVnZXhwU3RhdGUgPSBudWxsO1xuXG4gICAgLy8gVGhlIHN0YWNrIG9mIHByaXZhdGUgbmFtZXMuXG4gICAgLy8gRWFjaCBlbGVtZW50IGhhcyB0d28gcHJvcGVydGllczogJ2RlY2xhcmVkJyBhbmQgJ3VzZWQnLlxuICAgIC8vIFdoZW4gaXQgZXhpdGVkIGZyb20gdGhlIG91dGVybW9zdCBjbGFzcyBkZWZpbml0aW9uLCBhbGwgdXNlZCBwcml2YXRlIG5hbWVzIG11c3QgYmUgZGVjbGFyZWQuXG4gICAgdGhpcy5wcml2YXRlTmFtZVN0YWNrID0gW107XG4gIH07XG5cbiAgdmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgaW5GdW5jdGlvbjogeyBjb25maWd1cmFibGU6IHRydWUgfSxpbkdlbmVyYXRvcjogeyBjb25maWd1cmFibGU6IHRydWUgfSxpbkFzeW5jOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGNhbkF3YWl0OiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGFsbG93U3VwZXI6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sYWxsb3dEaXJlY3RTdXBlcjogeyBjb25maWd1cmFibGU6IHRydWUgfSx0cmVhdEZ1bmN0aW9uc0FzVmFyOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGFsbG93TmV3RG90VGFyZ2V0OiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGluQ2xhc3NTdGF0aWNCbG9jazogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG4gIFBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSAoKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLm9wdGlvbnMucHJvZ3JhbSB8fCB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VUb3BMZXZlbChub2RlKVxuICB9O1xuXG4gIHByb3RvdHlwZUFjY2Vzc29ycy5pbkZ1bmN0aW9uLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLmN1cnJlbnRWYXJTY29wZSgpLmZsYWdzICYgU0NPUEVfRlVOQ1RJT04pID4gMCB9O1xuXG4gIHByb3RvdHlwZUFjY2Vzc29ycy5pbkdlbmVyYXRvci5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5jdXJyZW50VmFyU2NvcGUoKS5mbGFncyAmIFNDT1BFX0dFTkVSQVRPUikgPiAwICYmICF0aGlzLmN1cnJlbnRWYXJTY29wZSgpLmluQ2xhc3NGaWVsZEluaXQgfTtcblxuICBwcm90b3R5cGVBY2Nlc3NvcnMuaW5Bc3luYy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5jdXJyZW50VmFyU2NvcGUoKS5mbGFncyAmIFNDT1BFX0FTWU5DKSA+IDAgJiYgIXRoaXMuY3VycmVudFZhclNjb3BlKCkuaW5DbGFzc0ZpZWxkSW5pdCB9O1xuXG4gIHByb3RvdHlwZUFjY2Vzc29ycy5jYW5Bd2FpdC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc2NvcGVTdGFjay5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHNjb3BlID0gdGhpcy5zY29wZVN0YWNrW2ldO1xuICAgICAgaWYgKHNjb3BlLmluQ2xhc3NGaWVsZEluaXQgfHwgc2NvcGUuZmxhZ3MgJiBTQ09QRV9DTEFTU19TVEFUSUNfQkxPQ0spIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIGlmIChzY29wZS5mbGFncyAmIFNDT1BFX0ZVTkNUSU9OKSB7IHJldHVybiAoc2NvcGUuZmxhZ3MgJiBTQ09QRV9BU1lOQykgPiAwIH1cbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLmluTW9kdWxlICYmIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMykgfHwgdGhpcy5vcHRpb25zLmFsbG93QXdhaXRPdXRzaWRlRnVuY3Rpb25cbiAgfTtcblxuICBwcm90b3R5cGVBY2Nlc3NvcnMuYWxsb3dTdXBlci5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlZiA9IHRoaXMuY3VycmVudFRoaXNTY29wZSgpO1xuICAgICAgdmFyIGZsYWdzID0gcmVmLmZsYWdzO1xuICAgICAgdmFyIGluQ2xhc3NGaWVsZEluaXQgPSByZWYuaW5DbGFzc0ZpZWxkSW5pdDtcbiAgICByZXR1cm4gKGZsYWdzICYgU0NPUEVfU1VQRVIpID4gMCB8fCBpbkNsYXNzRmllbGRJbml0IHx8IHRoaXMub3B0aW9ucy5hbGxvd1N1cGVyT3V0c2lkZU1ldGhvZFxuICB9O1xuXG4gIHByb3RvdHlwZUFjY2Vzc29ycy5hbGxvd0RpcmVjdFN1cGVyLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLmN1cnJlbnRUaGlzU2NvcGUoKS5mbGFncyAmIFNDT1BFX0RJUkVDVF9TVVBFUikgPiAwIH07XG5cbiAgcHJvdG90eXBlQWNjZXNzb3JzLnRyZWF0RnVuY3Rpb25zQXNWYXIuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy50cmVhdEZ1bmN0aW9uc0FzVmFySW5TY29wZSh0aGlzLmN1cnJlbnRTY29wZSgpKSB9O1xuXG4gIHByb3RvdHlwZUFjY2Vzc29ycy5hbGxvd05ld0RvdFRhcmdldC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlZiA9IHRoaXMuY3VycmVudFRoaXNTY29wZSgpO1xuICAgICAgdmFyIGZsYWdzID0gcmVmLmZsYWdzO1xuICAgICAgdmFyIGluQ2xhc3NGaWVsZEluaXQgPSByZWYuaW5DbGFzc0ZpZWxkSW5pdDtcbiAgICByZXR1cm4gKGZsYWdzICYgKFNDT1BFX0ZVTkNUSU9OIHwgU0NPUEVfQ0xBU1NfU1RBVElDX0JMT0NLKSkgPiAwIHx8IGluQ2xhc3NGaWVsZEluaXRcbiAgfTtcblxuICBwcm90b3R5cGVBY2Nlc3NvcnMuaW5DbGFzc1N0YXRpY0Jsb2NrLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKHRoaXMuY3VycmVudFZhclNjb3BlKCkuZmxhZ3MgJiBTQ09QRV9DTEFTU19TVEFUSUNfQkxPQ0spID4gMFxuICB9O1xuXG4gIFBhcnNlci5leHRlbmQgPSBmdW5jdGlvbiBleHRlbmQgKCkge1xuICAgICAgdmFyIHBsdWdpbnMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIHdoaWxlICggbGVuLS0gKSBwbHVnaW5zWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgY2xzID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHsgY2xzID0gcGx1Z2luc1tpXShjbHMpOyB9XG4gICAgcmV0dXJuIGNsc1xuICB9O1xuXG4gIFBhcnNlci5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlIChpbnB1dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgdGhpcyhvcHRpb25zLCBpbnB1dCkucGFyc2UoKVxuICB9O1xuXG4gIFBhcnNlci5wYXJzZUV4cHJlc3Npb25BdCA9IGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbkF0IChpbnB1dCwgcG9zLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlciA9IG5ldyB0aGlzKG9wdGlvbnMsIGlucHV0LCBwb3MpO1xuICAgIHBhcnNlci5uZXh0VG9rZW4oKTtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbigpXG4gIH07XG5cbiAgUGFyc2VyLnRva2VuaXplciA9IGZ1bmN0aW9uIHRva2VuaXplciAoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IHRoaXMob3B0aW9ucywgaW5wdXQpXG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFBhcnNlci5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG4gIHZhciBwcCQ5ID0gUGFyc2VyLnByb3RvdHlwZTtcblxuICAvLyAjIyBQYXJzZXIgdXRpbGl0aWVzXG5cbiAgdmFyIGxpdGVyYWwgPSAvXig/OicoKD86XFxcXC58W14nXFxcXF0pKj8pJ3xcIigoPzpcXFxcLnxbXlwiXFxcXF0pKj8pXCIpLztcbiAgcHAkOS5zdHJpY3REaXJlY3RpdmUgPSBmdW5jdGlvbihzdGFydCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA1KSB7IHJldHVybiBmYWxzZSB9XG4gICAgZm9yICg7Oykge1xuICAgICAgLy8gVHJ5IHRvIGZpbmQgc3RyaW5nIGxpdGVyYWwuXG4gICAgICBza2lwV2hpdGVTcGFjZS5sYXN0SW5kZXggPSBzdGFydDtcbiAgICAgIHN0YXJ0ICs9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dClbMF0ubGVuZ3RoO1xuICAgICAgdmFyIG1hdGNoID0gbGl0ZXJhbC5leGVjKHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQpKTtcbiAgICAgIGlmICghbWF0Y2gpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIGlmICgobWF0Y2hbMV0gfHwgbWF0Y2hbMl0pID09PSBcInVzZSBzdHJpY3RcIikge1xuICAgICAgICBza2lwV2hpdGVTcGFjZS5sYXN0SW5kZXggPSBzdGFydCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgdmFyIHNwYWNlQWZ0ZXIgPSBza2lwV2hpdGVTcGFjZS5leGVjKHRoaXMuaW5wdXQpLCBlbmQgPSBzcGFjZUFmdGVyLmluZGV4ICsgc3BhY2VBZnRlclswXS5sZW5ndGg7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQXQoZW5kKTtcbiAgICAgICAgcmV0dXJuIG5leHQgPT09IFwiO1wiIHx8IG5leHQgPT09IFwifVwiIHx8XG4gICAgICAgICAgKGxpbmVCcmVhay50ZXN0KHNwYWNlQWZ0ZXJbMF0pICYmXG4gICAgICAgICAgICEoL1soYC5bK1xcLS8qJTw+PSw/XiZdLy50ZXN0KG5leHQpIHx8IG5leHQgPT09IFwiIVwiICYmIHRoaXMuaW5wdXQuY2hhckF0KGVuZCArIDEpID09PSBcIj1cIikpXG4gICAgICB9XG4gICAgICBzdGFydCArPSBtYXRjaFswXS5sZW5ndGg7XG5cbiAgICAgIC8vIFNraXAgc2VtaWNvbG9uLCBpZiBhbnkuXG4gICAgICBza2lwV2hpdGVTcGFjZS5sYXN0SW5kZXggPSBzdGFydDtcbiAgICAgIHN0YXJ0ICs9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dClbMF0ubGVuZ3RoO1xuICAgICAgaWYgKHRoaXMuaW5wdXRbc3RhcnRdID09PSBcIjtcIilcbiAgICAgICAgeyBzdGFydCsrOyB9XG4gICAgfVxuICB9O1xuXG4gIC8vIFByZWRpY2F0ZSB0aGF0IHRlc3RzIHdoZXRoZXIgdGhlIG5leHQgdG9rZW4gaXMgb2YgdGhlIGdpdmVuXG4gIC8vIHR5cGUsIGFuZCBpZiB5ZXMsIGNvbnN1bWVzIGl0IGFzIGEgc2lkZSBlZmZlY3QuXG5cbiAgcHAkOS5lYXQgPSBmdW5jdGlvbih0eXBlKSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZSkge1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH07XG5cbiAgLy8gVGVzdHMgd2hldGhlciBwYXJzZWQgdG9rZW4gaXMgYSBjb250ZXh0dWFsIGtleXdvcmQuXG5cbiAgcHAkOS5pc0NvbnRleHR1YWwgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5uYW1lICYmIHRoaXMudmFsdWUgPT09IG5hbWUgJiYgIXRoaXMuY29udGFpbnNFc2NcbiAgfTtcblxuICAvLyBDb25zdW1lcyBjb250ZXh0dWFsIGtleXdvcmQgaWYgcG9zc2libGUuXG5cbiAgcHAkOS5lYXRDb250ZXh0dWFsID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGlmICghdGhpcy5pc0NvbnRleHR1YWwobmFtZSkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB0aGlzLm5leHQoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9O1xuXG4gIC8vIEFzc2VydHMgdGhhdCBmb2xsb3dpbmcgdG9rZW4gaXMgZ2l2ZW4gY29udGV4dHVhbCBrZXl3b3JkLlxuXG4gIHBwJDkuZXhwZWN0Q29udGV4dHVhbCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMuZWF0Q29udGV4dHVhbChuYW1lKSkgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICB9O1xuXG4gIC8vIFRlc3Qgd2hldGhlciBhIHNlbWljb2xvbiBjYW4gYmUgaW5zZXJ0ZWQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uXG5cbiAgcHAkOS5jYW5JbnNlcnRTZW1pY29sb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSB0eXBlcyQxLmVvZiB8fFxuICAgICAgdGhpcy50eXBlID09PSB0eXBlcyQxLmJyYWNlUiB8fFxuICAgICAgbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMuc3RhcnQpKVxuICB9O1xuXG4gIHBwJDkuaW5zZXJ0U2VtaWNvbG9uID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMub25JbnNlcnRlZFNlbWljb2xvbilcbiAgICAgICAgeyB0aGlzLm9wdGlvbnMub25JbnNlcnRlZFNlbWljb2xvbih0aGlzLmxhc3RUb2tFbmQsIHRoaXMubGFzdFRva0VuZExvYyk7IH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9O1xuXG4gIC8vIENvbnN1bWUgYSBzZW1pY29sb24sIG9yLCBmYWlsaW5nIHRoYXQsIHNlZSBpZiB3ZSBhcmUgYWxsb3dlZCB0b1xuICAvLyBwcmV0ZW5kIHRoYXQgdGhlcmUgaXMgYSBzZW1pY29sb24gYXQgdGhpcyBwb3NpdGlvbi5cblxuICBwcCQ5LnNlbWljb2xvbiA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5lYXQodHlwZXMkMS5zZW1pKSAmJiAhdGhpcy5pbnNlcnRTZW1pY29sb24oKSkgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICB9O1xuXG4gIHBwJDkuYWZ0ZXJUcmFpbGluZ0NvbW1hID0gZnVuY3Rpb24odG9rVHlwZSwgbm90TmV4dCkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHRva1R5cGUpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMub25UcmFpbGluZ0NvbW1hKVxuICAgICAgICB7IHRoaXMub3B0aW9ucy5vblRyYWlsaW5nQ29tbWEodGhpcy5sYXN0VG9rU3RhcnQsIHRoaXMubGFzdFRva1N0YXJ0TG9jKTsgfVxuICAgICAgaWYgKCFub3ROZXh0KVxuICAgICAgICB7IHRoaXMubmV4dCgpOyB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfTtcblxuICAvLyBFeHBlY3QgYSB0b2tlbiBvZiBhIGdpdmVuIHR5cGUuIElmIGZvdW5kLCBjb25zdW1lIGl0LCBvdGhlcndpc2UsXG4gIC8vIHJhaXNlIGFuIHVuZXhwZWN0ZWQgdG9rZW4gZXJyb3IuXG5cbiAgcHAkOS5leHBlY3QgPSBmdW5jdGlvbih0eXBlKSB7XG4gICAgdGhpcy5lYXQodHlwZSkgfHwgdGhpcy51bmV4cGVjdGVkKCk7XG4gIH07XG5cbiAgLy8gUmFpc2UgYW4gdW5leHBlY3RlZCB0b2tlbiBlcnJvci5cblxuICBwcCQ5LnVuZXhwZWN0ZWQgPSBmdW5jdGlvbihwb3MpIHtcbiAgICB0aGlzLnJhaXNlKHBvcyAhPSBudWxsID8gcG9zIDogdGhpcy5zdGFydCwgXCJVbmV4cGVjdGVkIHRva2VuXCIpO1xuICB9O1xuXG4gIHZhciBEZXN0cnVjdHVyaW5nRXJyb3JzID0gZnVuY3Rpb24gRGVzdHJ1Y3R1cmluZ0Vycm9ycygpIHtcbiAgICB0aGlzLnNob3J0aGFuZEFzc2lnbiA9XG4gICAgdGhpcy50cmFpbGluZ0NvbW1hID1cbiAgICB0aGlzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPVxuICAgIHRoaXMucGFyZW50aGVzaXplZEJpbmQgPVxuICAgIHRoaXMuZG91YmxlUHJvdG8gPVxuICAgICAgLTE7XG4gIH07XG5cbiAgcHAkOS5jaGVja1BhdHRlcm5FcnJvcnMgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBpc0Fzc2lnbikge1xuICAgIGlmICghcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykgeyByZXR1cm4gfVxuICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPiAtMSlcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSwgXCJDb21tYSBpcyBub3QgcGVybWl0dGVkIGFmdGVyIHRoZSByZXN0IGVsZW1lbnRcIik7IH1cbiAgICB2YXIgcGFyZW5zID0gaXNBc3NpZ24gPyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gOiByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kO1xuICAgIGlmIChwYXJlbnMgPiAtMSkgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUocGFyZW5zLCBpc0Fzc2lnbiA/IFwiQXNzaWduaW5nIHRvIHJ2YWx1ZVwiIDogXCJQYXJlbnRoZXNpemVkIHBhdHRlcm5cIik7IH1cbiAgfTtcblxuICBwcCQ5LmNoZWNrRXhwcmVzc2lvbkVycm9ycyA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGFuZFRocm93KSB7XG4gICAgaWYgKCFyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIHNob3J0aGFuZEFzc2lnbiA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuc2hvcnRoYW5kQXNzaWduO1xuICAgIHZhciBkb3VibGVQcm90byA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuZG91YmxlUHJvdG87XG4gICAgaWYgKCFhbmRUaHJvdykgeyByZXR1cm4gc2hvcnRoYW5kQXNzaWduID49IDAgfHwgZG91YmxlUHJvdG8gPj0gMCB9XG4gICAgaWYgKHNob3J0aGFuZEFzc2lnbiA+PSAwKVxuICAgICAgeyB0aGlzLnJhaXNlKHNob3J0aGFuZEFzc2lnbiwgXCJTaG9ydGhhbmQgcHJvcGVydHkgYXNzaWdubWVudHMgYXJlIHZhbGlkIG9ubHkgaW4gZGVzdHJ1Y3R1cmluZyBwYXR0ZXJuc1wiKTsgfVxuICAgIGlmIChkb3VibGVQcm90byA+PSAwKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZG91YmxlUHJvdG8sIFwiUmVkZWZpbml0aW9uIG9mIF9fcHJvdG9fXyBwcm9wZXJ0eVwiKTsgfVxuICB9O1xuXG4gIHBwJDkuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMueWllbGRQb3MgJiYgKCF0aGlzLmF3YWl0UG9zIHx8IHRoaXMueWllbGRQb3MgPCB0aGlzLmF3YWl0UG9zKSlcbiAgICAgIHsgdGhpcy5yYWlzZSh0aGlzLnlpZWxkUG9zLCBcIllpZWxkIGV4cHJlc3Npb24gY2Fubm90IGJlIGEgZGVmYXVsdCB2YWx1ZVwiKTsgfVxuICAgIGlmICh0aGlzLmF3YWl0UG9zKVxuICAgICAgeyB0aGlzLnJhaXNlKHRoaXMuYXdhaXRQb3MsIFwiQXdhaXQgZXhwcmVzc2lvbiBjYW5ub3QgYmUgYSBkZWZhdWx0IHZhbHVlXCIpOyB9XG4gIH07XG5cbiAgcHAkOS5pc1NpbXBsZUFzc2lnblRhcmdldCA9IGZ1bmN0aW9uKGV4cHIpIHtcbiAgICBpZiAoZXhwci50eXBlID09PSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpXG4gICAgICB7IHJldHVybiB0aGlzLmlzU2ltcGxlQXNzaWduVGFyZ2V0KGV4cHIuZXhwcmVzc2lvbikgfVxuICAgIHJldHVybiBleHByLnR5cGUgPT09IFwiSWRlbnRpZmllclwiIHx8IGV4cHIudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCJcbiAgfTtcblxuICB2YXIgcHAkOCA9IFBhcnNlci5wcm90b3R5cGU7XG5cbiAgLy8gIyMjIFN0YXRlbWVudCBwYXJzaW5nXG5cbiAgLy8gUGFyc2UgYSBwcm9ncmFtLiBJbml0aWFsaXplcyB0aGUgcGFyc2VyLCByZWFkcyBhbnkgbnVtYmVyIG9mXG4gIC8vIHN0YXRlbWVudHMsIGFuZCB3cmFwcyB0aGVtIGluIGEgUHJvZ3JhbSBub2RlLiAgT3B0aW9uYWxseSB0YWtlcyBhXG4gIC8vIGBwcm9ncmFtYCBhcmd1bWVudC4gIElmIHByZXNlbnQsIHRoZSBzdGF0ZW1lbnRzIHdpbGwgYmUgYXBwZW5kZWRcbiAgLy8gdG8gaXRzIGJvZHkgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBub2RlLlxuXG4gIHBwJDgucGFyc2VUb3BMZXZlbCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgaWYgKCFub2RlLmJvZHkpIHsgbm9kZS5ib2R5ID0gW107IH1cbiAgICB3aGlsZSAodGhpcy50eXBlICE9PSB0eXBlcyQxLmVvZikge1xuICAgICAgdmFyIHN0bXQgPSB0aGlzLnBhcnNlU3RhdGVtZW50KG51bGwsIHRydWUsIGV4cG9ydHMpO1xuICAgICAgbm9kZS5ib2R5LnB1c2goc3RtdCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmluTW9kdWxlKVxuICAgICAgeyBmb3IgKHZhciBpID0gMCwgbGlzdCA9IE9iamVjdC5rZXlzKHRoaXMudW5kZWZpbmVkRXhwb3J0cyk7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKVxuICAgICAgICB7XG4gICAgICAgICAgdmFyIG5hbWUgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMudW5kZWZpbmVkRXhwb3J0c1tuYW1lXS5zdGFydCwgKFwiRXhwb3J0ICdcIiArIG5hbWUgKyBcIicgaXMgbm90IGRlZmluZWRcIikpO1xuICAgICAgICB9IH1cbiAgICB0aGlzLmFkYXB0RGlyZWN0aXZlUHJvbG9ndWUobm9kZS5ib2R5KTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICBub2RlLnNvdXJjZVR5cGUgPSB0aGlzLm9wdGlvbnMuc291cmNlVHlwZTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiUHJvZ3JhbVwiKVxuICB9O1xuXG4gIHZhciBsb29wTGFiZWwgPSB7a2luZDogXCJsb29wXCJ9LCBzd2l0Y2hMYWJlbCA9IHtraW5kOiBcInN3aXRjaFwifTtcblxuICBwcCQ4LmlzTGV0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA2IHx8ICF0aGlzLmlzQ29udGV4dHVhbChcImxldFwiKSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHRoaXMucG9zO1xuICAgIHZhciBza2lwID0gc2tpcFdoaXRlU3BhY2UuZXhlYyh0aGlzLmlucHV0KTtcbiAgICB2YXIgbmV4dCA9IHRoaXMucG9zICsgc2tpcFswXS5sZW5ndGgsIG5leHRDaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdChuZXh0KTtcbiAgICAvLyBGb3IgYW1iaWd1b3VzIGNhc2VzLCBkZXRlcm1pbmUgaWYgYSBMZXhpY2FsRGVjbGFyYXRpb24gKG9yIG9ubHkgYVxuICAgIC8vIFN0YXRlbWVudCkgaXMgYWxsb3dlZCBoZXJlLiBJZiBjb250ZXh0IGlzIG5vdCBlbXB0eSB0aGVuIG9ubHkgYSBTdGF0ZW1lbnRcbiAgICAvLyBpcyBhbGxvd2VkLiBIb3dldmVyLCBgbGV0IFtgIGlzIGFuIGV4cGxpY2l0IG5lZ2F0aXZlIGxvb2thaGVhZCBmb3JcbiAgICAvLyBFeHByZXNzaW9uU3RhdGVtZW50LCBzbyBzcGVjaWFsLWNhc2UgaXQgZmlyc3QuXG4gICAgaWYgKG5leHRDaCA9PT0gOTEgfHwgbmV4dENoID09PSA5MikgeyByZXR1cm4gdHJ1ZSB9IC8vICdbJywgJy8nXG4gICAgaWYgKGNvbnRleHQpIHsgcmV0dXJuIGZhbHNlIH1cblxuICAgIGlmIChuZXh0Q2ggPT09IDEyMyB8fCBuZXh0Q2ggPiAweGQ3ZmYgJiYgbmV4dENoIDwgMHhkYzAwKSB7IHJldHVybiB0cnVlIH0gLy8gJ3snLCBhc3RyYWxcbiAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQobmV4dENoLCB0cnVlKSkge1xuICAgICAgdmFyIHBvcyA9IG5leHQgKyAxO1xuICAgICAgd2hpbGUgKGlzSWRlbnRpZmllckNoYXIobmV4dENoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHBvcyksIHRydWUpKSB7ICsrcG9zOyB9XG4gICAgICBpZiAobmV4dENoID09PSA5MiB8fCBuZXh0Q2ggPiAweGQ3ZmYgJiYgbmV4dENoIDwgMHhkYzAwKSB7IHJldHVybiB0cnVlIH1cbiAgICAgIHZhciBpZGVudCA9IHRoaXMuaW5wdXQuc2xpY2UobmV4dCwgcG9zKTtcbiAgICAgIGlmICgha2V5d29yZFJlbGF0aW9uYWxPcGVyYXRvci50ZXN0KGlkZW50KSkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGNoZWNrICdhc3luYyBbbm8gTGluZVRlcm1pbmF0b3IgaGVyZV0gZnVuY3Rpb24nXG4gIC8vIC0gJ2FzeW5jIC8qZm9vKi8gZnVuY3Rpb24nIGlzIE9LLlxuICAvLyAtICdhc3luYyAvKlxcbiovIGZ1bmN0aW9uJyBpcyBpbnZhbGlkLlxuICBwcCQ4LmlzQXN5bmNGdW5jdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA4IHx8ICF0aGlzLmlzQ29udGV4dHVhbChcImFzeW5jXCIpKVxuICAgICAgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgc2tpcFdoaXRlU3BhY2UubGFzdEluZGV4ID0gdGhpcy5wb3M7XG4gICAgdmFyIHNraXAgPSBza2lwV2hpdGVTcGFjZS5leGVjKHRoaXMuaW5wdXQpO1xuICAgIHZhciBuZXh0ID0gdGhpcy5wb3MgKyBza2lwWzBdLmxlbmd0aCwgYWZ0ZXI7XG4gICAgcmV0dXJuICFsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMucG9zLCBuZXh0KSkgJiZcbiAgICAgIHRoaXMuaW5wdXQuc2xpY2UobmV4dCwgbmV4dCArIDgpID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIChuZXh0ICsgOCA9PT0gdGhpcy5pbnB1dC5sZW5ndGggfHxcbiAgICAgICAhKGlzSWRlbnRpZmllckNoYXIoYWZ0ZXIgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQobmV4dCArIDgpKSB8fCBhZnRlciA+IDB4ZDdmZiAmJiBhZnRlciA8IDB4ZGMwMCkpXG4gIH07XG5cbiAgLy8gUGFyc2UgYSBzaW5nbGUgc3RhdGVtZW50LlxuICAvL1xuICAvLyBJZiBleHBlY3RpbmcgYSBzdGF0ZW1lbnQgYW5kIGZpbmRpbmcgYSBzbGFzaCBvcGVyYXRvciwgcGFyc2UgYVxuICAvLyByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbC4gVGhpcyBpcyB0byBoYW5kbGUgY2FzZXMgbGlrZVxuICAvLyBgaWYgKGZvbykgL2JsYWgvLmV4ZWMoZm9vKWAsIHdoZXJlIGxvb2tpbmcgYXQgdGhlIHByZXZpb3VzIHRva2VuXG4gIC8vIGRvZXMgbm90IGhlbHAuXG5cbiAgcHAkOC5wYXJzZVN0YXRlbWVudCA9IGZ1bmN0aW9uKGNvbnRleHQsIHRvcExldmVsLCBleHBvcnRzKSB7XG4gICAgdmFyIHN0YXJ0dHlwZSA9IHRoaXMudHlwZSwgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCksIGtpbmQ7XG5cbiAgICBpZiAodGhpcy5pc0xldChjb250ZXh0KSkge1xuICAgICAgc3RhcnR0eXBlID0gdHlwZXMkMS5fdmFyO1xuICAgICAga2luZCA9IFwibGV0XCI7XG4gICAgfVxuXG4gICAgLy8gTW9zdCB0eXBlcyBvZiBzdGF0ZW1lbnRzIGFyZSByZWNvZ25pemVkIGJ5IHRoZSBrZXl3b3JkIHRoZXlcbiAgICAvLyBzdGFydCB3aXRoLiBNYW55IGFyZSB0cml2aWFsIHRvIHBhcnNlLCBzb21lIHJlcXVpcmUgYSBiaXQgb2ZcbiAgICAvLyBjb21wbGV4aXR5LlxuXG4gICAgc3dpdGNoIChzdGFydHR5cGUpIHtcbiAgICBjYXNlIHR5cGVzJDEuX2JyZWFrOiBjYXNlIHR5cGVzJDEuX2NvbnRpbnVlOiByZXR1cm4gdGhpcy5wYXJzZUJyZWFrQ29udGludWVTdGF0ZW1lbnQobm9kZSwgc3RhcnR0eXBlLmtleXdvcmQpXG4gICAgY2FzZSB0eXBlcyQxLl9kZWJ1Z2dlcjogcmV0dXJuIHRoaXMucGFyc2VEZWJ1Z2dlclN0YXRlbWVudChub2RlKVxuICAgIGNhc2UgdHlwZXMkMS5fZG86IHJldHVybiB0aGlzLnBhcnNlRG9TdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuX2ZvcjogcmV0dXJuIHRoaXMucGFyc2VGb3JTdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuX2Z1bmN0aW9uOlxuICAgICAgLy8gRnVuY3Rpb24gYXMgc29sZSBib2R5IG9mIGVpdGhlciBhbiBpZiBzdGF0ZW1lbnQgb3IgYSBsYWJlbGVkIHN0YXRlbWVudFxuICAgICAgLy8gd29ya3MsIGJ1dCBub3Qgd2hlbiBpdCBpcyBwYXJ0IG9mIGEgbGFiZWxlZCBzdGF0ZW1lbnQgdGhhdCBpcyB0aGUgc29sZVxuICAgICAgLy8gYm9keSBvZiBhbiBpZiBzdGF0ZW1lbnQuXG4gICAgICBpZiAoKGNvbnRleHQgJiYgKHRoaXMuc3RyaWN0IHx8IGNvbnRleHQgIT09IFwiaWZcIiAmJiBjb250ZXh0ICE9PSBcImxhYmVsXCIpKSAmJiB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvblN0YXRlbWVudChub2RlLCBmYWxzZSwgIWNvbnRleHQpXG4gICAgY2FzZSB0eXBlcyQxLl9jbGFzczpcbiAgICAgIGlmIChjb250ZXh0KSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUNsYXNzKG5vZGUsIHRydWUpXG4gICAgY2FzZSB0eXBlcyQxLl9pZjogcmV0dXJuIHRoaXMucGFyc2VJZlN0YXRlbWVudChub2RlKVxuICAgIGNhc2UgdHlwZXMkMS5fcmV0dXJuOiByZXR1cm4gdGhpcy5wYXJzZVJldHVyblN0YXRlbWVudChub2RlKVxuICAgIGNhc2UgdHlwZXMkMS5fc3dpdGNoOiByZXR1cm4gdGhpcy5wYXJzZVN3aXRjaFN0YXRlbWVudChub2RlKVxuICAgIGNhc2UgdHlwZXMkMS5fdGhyb3c6IHJldHVybiB0aGlzLnBhcnNlVGhyb3dTdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuX3RyeTogcmV0dXJuIHRoaXMucGFyc2VUcnlTdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuX2NvbnN0OiBjYXNlIHR5cGVzJDEuX3ZhcjpcbiAgICAgIGtpbmQgPSBraW5kIHx8IHRoaXMudmFsdWU7XG4gICAgICBpZiAoY29udGV4dCAmJiBraW5kICE9PSBcInZhclwiKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZVZhclN0YXRlbWVudChub2RlLCBraW5kKVxuICAgIGNhc2UgdHlwZXMkMS5fd2hpbGU6IHJldHVybiB0aGlzLnBhcnNlV2hpbGVTdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuX3dpdGg6IHJldHVybiB0aGlzLnBhcnNlV2l0aFN0YXRlbWVudChub2RlKVxuICAgIGNhc2UgdHlwZXMkMS5icmFjZUw6IHJldHVybiB0aGlzLnBhcnNlQmxvY2sodHJ1ZSwgbm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuc2VtaTogcmV0dXJuIHRoaXMucGFyc2VFbXB0eVN0YXRlbWVudChub2RlKVxuICAgIGNhc2UgdHlwZXMkMS5fZXhwb3J0OlxuICAgIGNhc2UgdHlwZXMkMS5faW1wb3J0OlxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+IDEwICYmIHN0YXJ0dHlwZSA9PT0gdHlwZXMkMS5faW1wb3J0KSB7XG4gICAgICAgIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHRoaXMucG9zO1xuICAgICAgICB2YXIgc2tpcCA9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dCk7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5wb3MgKyBza2lwWzBdLmxlbmd0aCwgbmV4dENoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KG5leHQpO1xuICAgICAgICBpZiAobmV4dENoID09PSA0MCB8fCBuZXh0Q2ggPT09IDQ2KSAvLyAnKCcgb3IgJy4nXG4gICAgICAgICAgeyByZXR1cm4gdGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSwgdGhpcy5wYXJzZUV4cHJlc3Npb24oKSkgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd0ltcG9ydEV4cG9ydEV2ZXJ5d2hlcmUpIHtcbiAgICAgICAgaWYgKCF0b3BMZXZlbClcbiAgICAgICAgICB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCInaW1wb3J0JyBhbmQgJ2V4cG9ydCcgbWF5IG9ubHkgYXBwZWFyIGF0IHRoZSB0b3AgbGV2ZWxcIik7IH1cbiAgICAgICAgaWYgKCF0aGlzLmluTW9kdWxlKVxuICAgICAgICAgIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIidpbXBvcnQnIGFuZCAnZXhwb3J0JyBtYXkgYXBwZWFyIG9ubHkgd2l0aCAnc291cmNlVHlwZTogbW9kdWxlJ1wiKTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXJ0dHlwZSA9PT0gdHlwZXMkMS5faW1wb3J0ID8gdGhpcy5wYXJzZUltcG9ydChub2RlKSA6IHRoaXMucGFyc2VFeHBvcnQobm9kZSwgZXhwb3J0cylcblxuICAgICAgLy8gSWYgdGhlIHN0YXRlbWVudCBkb2VzIG5vdCBzdGFydCB3aXRoIGEgc3RhdGVtZW50IGtleXdvcmQgb3IgYVxuICAgICAgLy8gYnJhY2UsIGl0J3MgYW4gRXhwcmVzc2lvblN0YXRlbWVudCBvciBMYWJlbGVkU3RhdGVtZW50LiBXZVxuICAgICAgLy8gc2ltcGx5IHN0YXJ0IHBhcnNpbmcgYW4gZXhwcmVzc2lvbiwgYW5kIGFmdGVyd2FyZHMsIGlmIHRoZVxuICAgICAgLy8gbmV4dCB0b2tlbiBpcyBhIGNvbG9uIGFuZCB0aGUgZXhwcmVzc2lvbiB3YXMgYSBzaW1wbGVcbiAgICAgIC8vIElkZW50aWZpZXIgbm9kZSwgd2Ugc3dpdGNoIHRvIGludGVycHJldGluZyBpdCBhcyBhIGxhYmVsLlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodGhpcy5pc0FzeW5jRnVuY3Rpb24oKSkge1xuICAgICAgICBpZiAoY29udGV4dCkgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvblN0YXRlbWVudChub2RlLCB0cnVlLCAhY29udGV4dClcbiAgICAgIH1cblxuICAgICAgdmFyIG1heWJlTmFtZSA9IHRoaXMudmFsdWUsIGV4cHIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgaWYgKHN0YXJ0dHlwZSA9PT0gdHlwZXMkMS5uYW1lICYmIGV4cHIudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYgdGhpcy5lYXQodHlwZXMkMS5jb2xvbikpXG4gICAgICAgIHsgcmV0dXJuIHRoaXMucGFyc2VMYWJlbGVkU3RhdGVtZW50KG5vZGUsIG1heWJlTmFtZSwgZXhwciwgY29udGV4dCkgfVxuICAgICAgZWxzZSB7IHJldHVybiB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChub2RlLCBleHByKSB9XG4gICAgfVxuICB9O1xuXG4gIHBwJDgucGFyc2VCcmVha0NvbnRpbnVlU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwga2V5d29yZCkge1xuICAgIHZhciBpc0JyZWFrID0ga2V5d29yZCA9PT0gXCJicmVha1wiO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLnNlbWkpIHx8IHRoaXMuaW5zZXJ0U2VtaWNvbG9uKCkpIHsgbm9kZS5sYWJlbCA9IG51bGw7IH1cbiAgICBlbHNlIGlmICh0aGlzLnR5cGUgIT09IHR5cGVzJDEubmFtZSkgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgIGVsc2Uge1xuICAgICAgbm9kZS5sYWJlbCA9IHRoaXMucGFyc2VJZGVudCgpO1xuICAgICAgdGhpcy5zZW1pY29sb24oKTtcbiAgICB9XG5cbiAgICAvLyBWZXJpZnkgdGhhdCB0aGVyZSBpcyBhbiBhY3R1YWwgZGVzdGluYXRpb24gdG8gYnJlYWsgb3JcbiAgICAvLyBjb250aW51ZSB0by5cbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCB0aGlzLmxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGxhYiA9IHRoaXMubGFiZWxzW2ldO1xuICAgICAgaWYgKG5vZGUubGFiZWwgPT0gbnVsbCB8fCBsYWIubmFtZSA9PT0gbm9kZS5sYWJlbC5uYW1lKSB7XG4gICAgICAgIGlmIChsYWIua2luZCAhPSBudWxsICYmIChpc0JyZWFrIHx8IGxhYi5raW5kID09PSBcImxvb3BcIikpIHsgYnJlYWsgfVxuICAgICAgICBpZiAobm9kZS5sYWJlbCAmJiBpc0JyZWFrKSB7IGJyZWFrIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPT09IHRoaXMubGFiZWxzLmxlbmd0aCkgeyB0aGlzLnJhaXNlKG5vZGUuc3RhcnQsIFwiVW5zeW50YWN0aWMgXCIgKyBrZXl3b3JkKTsgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgaXNCcmVhayA/IFwiQnJlYWtTdGF0ZW1lbnRcIiA6IFwiQ29udGludWVTdGF0ZW1lbnRcIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdGhpcy5zZW1pY29sb24oKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRGVidWdnZXJTdGF0ZW1lbnRcIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlRG9TdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdGhpcy5sYWJlbHMucHVzaChsb29wTGFiZWwpO1xuICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJkb1wiKTtcbiAgICB0aGlzLmxhYmVscy5wb3AoKTtcbiAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLl93aGlsZSk7XG4gICAgbm9kZS50ZXN0ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNilcbiAgICAgIHsgdGhpcy5lYXQodHlwZXMkMS5zZW1pKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgdGhpcy5zZW1pY29sb24oKTsgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJEb1doaWxlU3RhdGVtZW50XCIpXG4gIH07XG5cbiAgLy8gRGlzYW1iaWd1YXRpbmcgYmV0d2VlbiBhIGBmb3JgIGFuZCBhIGBmb3JgL2BpbmAgb3IgYGZvcmAvYG9mYFxuICAvLyBsb29wIGlzIG5vbi10cml2aWFsLiBCYXNpY2FsbHksIHdlIGhhdmUgdG8gcGFyc2UgdGhlIGluaXQgYHZhcmBcbiAgLy8gc3RhdGVtZW50IG9yIGV4cHJlc3Npb24sIGRpc2FsbG93aW5nIHRoZSBgaW5gIG9wZXJhdG9yIChzZWVcbiAgLy8gdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gYHBhcnNlRXhwcmVzc2lvbmApLCBhbmQgdGhlbiBjaGVja1xuICAvLyB3aGV0aGVyIHRoZSBuZXh0IHRva2VuIGlzIGBpbmAgb3IgYG9mYC4gV2hlbiB0aGVyZSBpcyBubyBpbml0XG4gIC8vIHBhcnQgKHNlbWljb2xvbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgb3BlbmluZyBwYXJlbnRoZXNpcyksIGl0XG4gIC8vIGlzIGEgcmVndWxhciBgZm9yYCBsb29wLlxuXG4gIHBwJDgucGFyc2VGb3JTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdmFyIGF3YWl0QXQgPSAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiYgdGhpcy5jYW5Bd2FpdCAmJiB0aGlzLmVhdENvbnRleHR1YWwoXCJhd2FpdFwiKSkgPyB0aGlzLmxhc3RUb2tTdGFydCA6IC0xO1xuICAgIHRoaXMubGFiZWxzLnB1c2gobG9vcExhYmVsKTtcbiAgICB0aGlzLmVudGVyU2NvcGUoMCk7XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5wYXJlbkwpO1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuc2VtaSkge1xuICAgICAgaWYgKGF3YWl0QXQgPiAtMSkgeyB0aGlzLnVuZXhwZWN0ZWQoYXdhaXRBdCk7IH1cbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRm9yKG5vZGUsIG51bGwpXG4gICAgfVxuICAgIHZhciBpc0xldCA9IHRoaXMuaXNMZXQoKTtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLl92YXIgfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLl9jb25zdCB8fCBpc0xldCkge1xuICAgICAgdmFyIGluaXQkMSA9IHRoaXMuc3RhcnROb2RlKCksIGtpbmQgPSBpc0xldCA/IFwibGV0XCIgOiB0aGlzLnZhbHVlO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICB0aGlzLnBhcnNlVmFyKGluaXQkMSwgdHJ1ZSwga2luZCk7XG4gICAgICB0aGlzLmZpbmlzaE5vZGUoaW5pdCQxLCBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIik7XG4gICAgICBpZiAoKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5faW4gfHwgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMuaXNDb250ZXh0dWFsKFwib2ZcIikpKSAmJiBpbml0JDEuZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkpIHtcbiAgICAgICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLl9pbikge1xuICAgICAgICAgICAgaWYgKGF3YWl0QXQgPiAtMSkgeyB0aGlzLnVuZXhwZWN0ZWQoYXdhaXRBdCk7IH1cbiAgICAgICAgICB9IGVsc2UgeyBub2RlLmF3YWl0ID0gYXdhaXRBdCA+IC0xOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGb3JJbihub2RlLCBpbml0JDEpXG4gICAgICB9XG4gICAgICBpZiAoYXdhaXRBdCA+IC0xKSB7IHRoaXMudW5leHBlY3RlZChhd2FpdEF0KTsgfVxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VGb3Iobm9kZSwgaW5pdCQxKVxuICAgIH1cbiAgICB2YXIgc3RhcnRzV2l0aExldCA9IHRoaXMuaXNDb250ZXh0dWFsKFwibGV0XCIpLCBpc0Zvck9mID0gZmFsc2U7XG4gICAgdmFyIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgPSBuZXcgRGVzdHJ1Y3R1cmluZ0Vycm9ycztcbiAgICB2YXIgaW5pdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGF3YWl0QXQgPiAtMSA/IFwiYXdhaXRcIiA6IHRydWUsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuX2luIHx8IChpc0Zvck9mID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgdGhpcy5pc0NvbnRleHR1YWwoXCJvZlwiKSkpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSkge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLl9pbikge1xuICAgICAgICAgIGlmIChhd2FpdEF0ID4gLTEpIHsgdGhpcy51bmV4cGVjdGVkKGF3YWl0QXQpOyB9XG4gICAgICAgIH0gZWxzZSB7IG5vZGUuYXdhaXQgPSBhd2FpdEF0ID4gLTE7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzdGFydHNXaXRoTGV0ICYmIGlzRm9yT2YpIHsgdGhpcy5yYWlzZShpbml0LnN0YXJ0LCBcIlRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBhIGZvci1vZiBsb29wIG1heSBub3Qgc3RhcnQgd2l0aCAnbGV0Jy5cIik7IH1cbiAgICAgIHRoaXMudG9Bc3NpZ25hYmxlKGluaXQsIGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICAgIHRoaXMuY2hlY2tMVmFsUGF0dGVybihpbml0KTtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRm9ySW4obm9kZSwgaW5pdClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChhd2FpdEF0ID4gLTEpIHsgdGhpcy51bmV4cGVjdGVkKGF3YWl0QXQpOyB9XG4gICAgcmV0dXJuIHRoaXMucGFyc2VGb3Iobm9kZSwgaW5pdClcbiAgfTtcblxuICBwcCQ4LnBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlLCBpc0FzeW5jLCBkZWNsYXJhdGlvblBvc2l0aW9uKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbihub2RlLCBGVU5DX1NUQVRFTUVOVCB8IChkZWNsYXJhdGlvblBvc2l0aW9uID8gMCA6IEZVTkNfSEFOR0lOR19TVEFURU1FTlQpLCBmYWxzZSwgaXNBc3luYylcbiAgfTtcblxuICBwcCQ4LnBhcnNlSWZTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS50ZXN0ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpO1xuICAgIC8vIGFsbG93IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBicmFuY2hlcywgYnV0IG9ubHkgaW4gbm9uLXN0cmljdCBtb2RlXG4gICAgbm9kZS5jb25zZXF1ZW50ID0gdGhpcy5wYXJzZVN0YXRlbWVudChcImlmXCIpO1xuICAgIG5vZGUuYWx0ZXJuYXRlID0gdGhpcy5lYXQodHlwZXMkMS5fZWxzZSkgPyB0aGlzLnBhcnNlU3RhdGVtZW50KFwiaWZcIikgOiBudWxsO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJZlN0YXRlbWVudFwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VSZXR1cm5TdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCF0aGlzLmluRnVuY3Rpb24gJiYgIXRoaXMub3B0aW9ucy5hbGxvd1JldHVybk91dHNpZGVGdW5jdGlvbilcbiAgICAgIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIidyZXR1cm4nIG91dHNpZGUgb2YgZnVuY3Rpb25cIik7IH1cbiAgICB0aGlzLm5leHQoKTtcblxuICAgIC8vIEluIGByZXR1cm5gIChhbmQgYGJyZWFrYC9gY29udGludWVgKSwgdGhlIGtleXdvcmRzIHdpdGhcbiAgICAvLyBvcHRpb25hbCBhcmd1bWVudHMsIHdlIGVhZ2VybHkgbG9vayBmb3IgYSBzZW1pY29sb24gb3IgdGhlXG4gICAgLy8gcG9zc2liaWxpdHkgdG8gaW5zZXJ0IG9uZS5cblxuICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLnNlbWkpIHx8IHRoaXMuaW5zZXJ0U2VtaWNvbG9uKCkpIHsgbm9kZS5hcmd1bWVudCA9IG51bGw7IH1cbiAgICBlbHNlIHsgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7IHRoaXMuc2VtaWNvbG9uKCk7IH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiUmV0dXJuU3RhdGVtZW50XCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZVN3aXRjaFN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB0aGlzLm5leHQoKTtcbiAgICBub2RlLmRpc2NyaW1pbmFudCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKTtcbiAgICBub2RlLmNhc2VzID0gW107XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5icmFjZUwpO1xuICAgIHRoaXMubGFiZWxzLnB1c2goc3dpdGNoTGFiZWwpO1xuICAgIHRoaXMuZW50ZXJTY29wZSgwKTtcblxuICAgIC8vIFN0YXRlbWVudHMgdW5kZXIgbXVzdCBiZSBncm91cGVkIChieSBsYWJlbCkgaW4gU3dpdGNoQ2FzZVxuICAgIC8vIG5vZGVzLiBgY3VyYCBpcyB1c2VkIHRvIGtlZXAgdGhlIG5vZGUgdGhhdCB3ZSBhcmUgY3VycmVudGx5XG4gICAgLy8gYWRkaW5nIHN0YXRlbWVudHMgdG8uXG5cbiAgICB2YXIgY3VyO1xuICAgIGZvciAodmFyIHNhd0RlZmF1bHQgPSBmYWxzZTsgdGhpcy50eXBlICE9PSB0eXBlcyQxLmJyYWNlUjspIHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuX2Nhc2UgfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLl9kZWZhdWx0KSB7XG4gICAgICAgIHZhciBpc0Nhc2UgPSB0aGlzLnR5cGUgPT09IHR5cGVzJDEuX2Nhc2U7XG4gICAgICAgIGlmIChjdXIpIHsgdGhpcy5maW5pc2hOb2RlKGN1ciwgXCJTd2l0Y2hDYXNlXCIpOyB9XG4gICAgICAgIG5vZGUuY2FzZXMucHVzaChjdXIgPSB0aGlzLnN0YXJ0Tm9kZSgpKTtcbiAgICAgICAgY3VyLmNvbnNlcXVlbnQgPSBbXTtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChpc0Nhc2UpIHtcbiAgICAgICAgICBjdXIudGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHNhd0RlZmF1bHQpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMubGFzdFRva1N0YXJ0LCBcIk11bHRpcGxlIGRlZmF1bHQgY2xhdXNlc1wiKTsgfVxuICAgICAgICAgIHNhd0RlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgIGN1ci50ZXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLmNvbG9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghY3VyKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICAgIGN1ci5jb25zZXF1ZW50LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudChudWxsKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZXhpdFNjb3BlKCk7XG4gICAgaWYgKGN1cikgeyB0aGlzLmZpbmlzaE5vZGUoY3VyLCBcIlN3aXRjaENhc2VcIik7IH1cbiAgICB0aGlzLm5leHQoKTsgLy8gQ2xvc2luZyBicmFjZVxuICAgIHRoaXMubGFiZWxzLnBvcCgpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJTd2l0Y2hTdGF0ZW1lbnRcIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlVGhyb3dTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgaWYgKGxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rRW5kLCB0aGlzLnN0YXJ0KSkpXG4gICAgICB7IHRoaXMucmFpc2UodGhpcy5sYXN0VG9rRW5kLCBcIklsbGVnYWwgbmV3bGluZSBhZnRlciB0aHJvd1wiKTsgfVxuICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgIHRoaXMuc2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlRocm93U3RhdGVtZW50XCIpXG4gIH07XG5cbiAgLy8gUmV1c2VkIGVtcHR5IGFycmF5IGFkZGVkIGZvciBub2RlIGZpZWxkcyB0aGF0IGFyZSBhbHdheXMgZW1wdHkuXG5cbiAgdmFyIGVtcHR5JDEgPSBbXTtcblxuICBwcCQ4LnBhcnNlQ2F0Y2hDbGF1c2VQYXJhbSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYXJhbSA9IHRoaXMucGFyc2VCaW5kaW5nQXRvbSgpO1xuICAgIHZhciBzaW1wbGUgPSBwYXJhbS50eXBlID09PSBcIklkZW50aWZpZXJcIjtcbiAgICB0aGlzLmVudGVyU2NvcGUoc2ltcGxlID8gU0NPUEVfU0lNUExFX0NBVENIIDogMCk7XG4gICAgdGhpcy5jaGVja0xWYWxQYXR0ZXJuKHBhcmFtLCBzaW1wbGUgPyBCSU5EX1NJTVBMRV9DQVRDSCA6IEJJTkRfTEVYSUNBTCk7XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5wYXJlblIpO1xuXG4gICAgcmV0dXJuIHBhcmFtXG4gIH07XG5cbiAgcHAkOC5wYXJzZVRyeVN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB0aGlzLm5leHQoKTtcbiAgICBub2RlLmJsb2NrID0gdGhpcy5wYXJzZUJsb2NrKCk7XG4gICAgbm9kZS5oYW5kbGVyID0gbnVsbDtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLl9jYXRjaCkge1xuICAgICAgdmFyIGNsYXVzZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLnBhcmVuTCkpIHtcbiAgICAgICAgY2xhdXNlLnBhcmFtID0gdGhpcy5wYXJzZUNhdGNoQ2xhdXNlUGFyYW0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCAxMCkgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgICBjbGF1c2UucGFyYW0gPSBudWxsO1xuICAgICAgICB0aGlzLmVudGVyU2NvcGUoMCk7XG4gICAgICB9XG4gICAgICBjbGF1c2UuYm9keSA9IHRoaXMucGFyc2VCbG9jayhmYWxzZSk7XG4gICAgICB0aGlzLmV4aXRTY29wZSgpO1xuICAgICAgbm9kZS5oYW5kbGVyID0gdGhpcy5maW5pc2hOb2RlKGNsYXVzZSwgXCJDYXRjaENsYXVzZVwiKTtcbiAgICB9XG4gICAgbm9kZS5maW5hbGl6ZXIgPSB0aGlzLmVhdCh0eXBlcyQxLl9maW5hbGx5KSA/IHRoaXMucGFyc2VCbG9jaygpIDogbnVsbDtcbiAgICBpZiAoIW5vZGUuaGFuZGxlciAmJiAhbm9kZS5maW5hbGl6ZXIpXG4gICAgICB7IHRoaXMucmFpc2Uobm9kZS5zdGFydCwgXCJNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgY2xhdXNlXCIpOyB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlRyeVN0YXRlbWVudFwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VWYXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlLCBraW5kLCBhbGxvd01pc3NpbmdJbml0aWFsaXplcikge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHRoaXMucGFyc2VWYXIobm9kZSwgZmFsc2UsIGtpbmQsIGFsbG93TWlzc2luZ0luaXRpYWxpemVyKTtcbiAgICB0aGlzLnNlbWljb2xvbigpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZVdoaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIG5vZGUudGVzdCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKTtcbiAgICB0aGlzLmxhYmVscy5wdXNoKGxvb3BMYWJlbCk7XG4gICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudChcIndoaWxlXCIpO1xuICAgIHRoaXMubGFiZWxzLnBvcCgpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJXaGlsZVN0YXRlbWVudFwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VXaXRoU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICh0aGlzLnN0cmljdCkgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ3dpdGgnIGluIHN0cmljdCBtb2RlXCIpOyB9XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5vYmplY3QgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudChcIndpdGhcIik7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIldpdGhTdGF0ZW1lbnRcIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlRW1wdHlTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkVtcHR5U3RhdGVtZW50XCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUxhYmVsZWRTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlLCBtYXliZU5hbWUsIGV4cHIsIGNvbnRleHQpIHtcbiAgICBmb3IgKHZhciBpJDEgPSAwLCBsaXN0ID0gdGhpcy5sYWJlbHM7IGkkMSA8IGxpc3QubGVuZ3RoOyBpJDEgKz0gMSlcbiAgICAgIHtcbiAgICAgIHZhciBsYWJlbCA9IGxpc3RbaSQxXTtcblxuICAgICAgaWYgKGxhYmVsLm5hbWUgPT09IG1heWJlTmFtZSlcbiAgICAgICAgeyB0aGlzLnJhaXNlKGV4cHIuc3RhcnQsIFwiTGFiZWwgJ1wiICsgbWF5YmVOYW1lICsgXCInIGlzIGFscmVhZHkgZGVjbGFyZWRcIik7XG4gICAgfSB9XG4gICAgdmFyIGtpbmQgPSB0aGlzLnR5cGUuaXNMb29wID8gXCJsb29wXCIgOiB0aGlzLnR5cGUgPT09IHR5cGVzJDEuX3N3aXRjaCA/IFwic3dpdGNoXCIgOiBudWxsO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxhYmVscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGxhYmVsJDEgPSB0aGlzLmxhYmVsc1tpXTtcbiAgICAgIGlmIChsYWJlbCQxLnN0YXRlbWVudFN0YXJ0ID09PSBub2RlLnN0YXJ0KSB7XG4gICAgICAgIC8vIFVwZGF0ZSBpbmZvcm1hdGlvbiBhYm91dCBwcmV2aW91cyBsYWJlbHMgb24gdGhpcyBub2RlXG4gICAgICAgIGxhYmVsJDEuc3RhdGVtZW50U3RhcnQgPSB0aGlzLnN0YXJ0O1xuICAgICAgICBsYWJlbCQxLmtpbmQgPSBraW5kO1xuICAgICAgfSBlbHNlIHsgYnJlYWsgfVxuICAgIH1cbiAgICB0aGlzLmxhYmVscy5wdXNoKHtuYW1lOiBtYXliZU5hbWUsIGtpbmQ6IGtpbmQsIHN0YXRlbWVudFN0YXJ0OiB0aGlzLnN0YXJ0fSk7XG4gICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudChjb250ZXh0ID8gY29udGV4dC5pbmRleE9mKFwibGFiZWxcIikgPT09IC0xID8gY29udGV4dCArIFwibGFiZWxcIiA6IGNvbnRleHQgOiBcImxhYmVsXCIpO1xuICAgIHRoaXMubGFiZWxzLnBvcCgpO1xuICAgIG5vZGUubGFiZWwgPSBleHByO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJMYWJlbGVkU3RhdGVtZW50XCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlLCBleHByKSB7XG4gICAgbm9kZS5leHByZXNzaW9uID0gZXhwcjtcbiAgICB0aGlzLnNlbWljb2xvbigpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpXG4gIH07XG5cbiAgLy8gUGFyc2UgYSBzZW1pY29sb24tZW5jbG9zZWQgYmxvY2sgb2Ygc3RhdGVtZW50cywgaGFuZGxpbmcgYFwidXNlXG4gIC8vIHN0cmljdFwiYCBkZWNsYXJhdGlvbnMgd2hlbiBgYWxsb3dTdHJpY3RgIGlzIHRydWUgKHVzZWQgZm9yXG4gIC8vIGZ1bmN0aW9uIGJvZGllcykuXG5cbiAgcHAkOC5wYXJzZUJsb2NrID0gZnVuY3Rpb24oY3JlYXRlTmV3TGV4aWNhbFNjb3BlLCBub2RlLCBleGl0U3RyaWN0KSB7XG4gICAgaWYgKCBjcmVhdGVOZXdMZXhpY2FsU2NvcGUgPT09IHZvaWQgMCApIGNyZWF0ZU5ld0xleGljYWxTY29wZSA9IHRydWU7XG4gICAgaWYgKCBub2RlID09PSB2b2lkIDAgKSBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcblxuICAgIG5vZGUuYm9keSA9IFtdO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuYnJhY2VMKTtcbiAgICBpZiAoY3JlYXRlTmV3TGV4aWNhbFNjb3BlKSB7IHRoaXMuZW50ZXJTY29wZSgwKTsgfVxuICAgIHdoaWxlICh0aGlzLnR5cGUgIT09IHR5cGVzJDEuYnJhY2VSKSB7XG4gICAgICB2YXIgc3RtdCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQobnVsbCk7XG4gICAgICBub2RlLmJvZHkucHVzaChzdG10KTtcbiAgICB9XG4gICAgaWYgKGV4aXRTdHJpY3QpIHsgdGhpcy5zdHJpY3QgPSBmYWxzZTsgfVxuICAgIHRoaXMubmV4dCgpO1xuICAgIGlmIChjcmVhdGVOZXdMZXhpY2FsU2NvcGUpIHsgdGhpcy5leGl0U2NvcGUoKTsgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJCbG9ja1N0YXRlbWVudFwiKVxuICB9O1xuXG4gIC8vIFBhcnNlIGEgcmVndWxhciBgZm9yYCBsb29wLiBUaGUgZGlzYW1iaWd1YXRpb24gY29kZSBpblxuICAvLyBgcGFyc2VTdGF0ZW1lbnRgIHdpbGwgYWxyZWFkeSBoYXZlIHBhcnNlZCB0aGUgaW5pdCBzdGF0ZW1lbnQgb3JcbiAgLy8gZXhwcmVzc2lvbi5cblxuICBwcCQ4LnBhcnNlRm9yID0gZnVuY3Rpb24obm9kZSwgaW5pdCkge1xuICAgIG5vZGUuaW5pdCA9IGluaXQ7XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5zZW1pKTtcbiAgICBub2RlLnRlc3QgPSB0aGlzLnR5cGUgPT09IHR5cGVzJDEuc2VtaSA/IG51bGwgOiB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuc2VtaSk7XG4gICAgbm9kZS51cGRhdGUgPSB0aGlzLnR5cGUgPT09IHR5cGVzJDEucGFyZW5SID8gbnVsbCA6IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5wYXJlblIpO1xuICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJmb3JcIik7XG4gICAgdGhpcy5leGl0U2NvcGUoKTtcbiAgICB0aGlzLmxhYmVscy5wb3AoKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRm9yU3RhdGVtZW50XCIpXG4gIH07XG5cbiAgLy8gUGFyc2UgYSBgZm9yYC9gaW5gIGFuZCBgZm9yYC9gb2ZgIGxvb3AsIHdoaWNoIGFyZSBhbG1vc3RcbiAgLy8gc2FtZSBmcm9tIHBhcnNlcidzIHBlcnNwZWN0aXZlLlxuXG4gIHBwJDgucGFyc2VGb3JJbiA9IGZ1bmN0aW9uKG5vZGUsIGluaXQpIHtcbiAgICB2YXIgaXNGb3JJbiA9IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5faW47XG4gICAgdGhpcy5uZXh0KCk7XG5cbiAgICBpZiAoXG4gICAgICBpbml0LnR5cGUgPT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiICYmXG4gICAgICBpbml0LmRlY2xhcmF0aW9uc1swXS5pbml0ICE9IG51bGwgJiZcbiAgICAgIChcbiAgICAgICAgIWlzRm9ySW4gfHxcbiAgICAgICAgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgOCB8fFxuICAgICAgICB0aGlzLnN0cmljdCB8fFxuICAgICAgICBpbml0LmtpbmQgIT09IFwidmFyXCIgfHxcbiAgICAgICAgaW5pdC5kZWNsYXJhdGlvbnNbMF0uaWQudHlwZSAhPT0gXCJJZGVudGlmaWVyXCJcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMucmFpc2UoXG4gICAgICAgIGluaXQuc3RhcnQsXG4gICAgICAgICgoaXNGb3JJbiA/IFwiZm9yLWluXCIgOiBcImZvci1vZlwiKSArIFwiIGxvb3AgdmFyaWFibGUgZGVjbGFyYXRpb24gbWF5IG5vdCBoYXZlIGFuIGluaXRpYWxpemVyXCIpXG4gICAgICApO1xuICAgIH1cbiAgICBub2RlLmxlZnQgPSBpbml0O1xuICAgIG5vZGUucmlnaHQgPSBpc0ZvckluID8gdGhpcy5wYXJzZUV4cHJlc3Npb24oKSA6IHRoaXMucGFyc2VNYXliZUFzc2lnbigpO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEucGFyZW5SKTtcbiAgICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KFwiZm9yXCIpO1xuICAgIHRoaXMuZXhpdFNjb3BlKCk7XG4gICAgdGhpcy5sYWJlbHMucG9wKCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBpc0ZvckluID8gXCJGb3JJblN0YXRlbWVudFwiIDogXCJGb3JPZlN0YXRlbWVudFwiKVxuICB9O1xuXG4gIC8vIFBhcnNlIGEgbGlzdCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG5cbiAgcHAkOC5wYXJzZVZhciA9IGZ1bmN0aW9uKG5vZGUsIGlzRm9yLCBraW5kLCBhbGxvd01pc3NpbmdJbml0aWFsaXplcikge1xuICAgIG5vZGUuZGVjbGFyYXRpb25zID0gW107XG4gICAgbm9kZS5raW5kID0ga2luZDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgZGVjbCA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLnBhcnNlVmFySWQoZGVjbCwga2luZCk7XG4gICAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5lcSkpIHtcbiAgICAgICAgZGVjbC5pbml0ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGlzRm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoIWFsbG93TWlzc2luZ0luaXRpYWxpemVyICYmIGtpbmQgPT09IFwiY29uc3RcIiAmJiAhKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5faW4gfHwgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMuaXNDb250ZXh0dWFsKFwib2ZcIikpKSkge1xuICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgICAgIH0gZWxzZSBpZiAoIWFsbG93TWlzc2luZ0luaXRpYWxpemVyICYmIGRlY2wuaWQudHlwZSAhPT0gXCJJZGVudGlmaWVyXCIgJiYgIShpc0ZvciAmJiAodGhpcy50eXBlID09PSB0eXBlcyQxLl9pbiB8fCB0aGlzLmlzQ29udGV4dHVhbChcIm9mXCIpKSkpIHtcbiAgICAgICAgdGhpcy5yYWlzZSh0aGlzLmxhc3RUb2tFbmQsIFwiQ29tcGxleCBiaW5kaW5nIHBhdHRlcm5zIHJlcXVpcmUgYW4gaW5pdGlhbGl6YXRpb24gdmFsdWVcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWNsLmluaXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgbm9kZS5kZWNsYXJhdGlvbnMucHVzaCh0aGlzLmZpbmlzaE5vZGUoZGVjbCwgXCJWYXJpYWJsZURlY2xhcmF0b3JcIikpO1xuICAgICAgaWYgKCF0aGlzLmVhdCh0eXBlcyQxLmNvbW1hKSkgeyBicmVhayB9XG4gICAgfVxuICAgIHJldHVybiBub2RlXG4gIH07XG5cbiAgcHAkOC5wYXJzZVZhcklkID0gZnVuY3Rpb24oZGVjbCwga2luZCkge1xuICAgIGRlY2wuaWQgPSB0aGlzLnBhcnNlQmluZGluZ0F0b20oKTtcbiAgICB0aGlzLmNoZWNrTFZhbFBhdHRlcm4oZGVjbC5pZCwga2luZCA9PT0gXCJ2YXJcIiA/IEJJTkRfVkFSIDogQklORF9MRVhJQ0FMLCBmYWxzZSk7XG4gIH07XG5cbiAgdmFyIEZVTkNfU1RBVEVNRU5UID0gMSwgRlVOQ19IQU5HSU5HX1NUQVRFTUVOVCA9IDIsIEZVTkNfTlVMTEFCTEVfSUQgPSA0O1xuXG4gIC8vIFBhcnNlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gb3IgbGl0ZXJhbCAoZGVwZW5kaW5nIG9uIHRoZVxuICAvLyBgc3RhdGVtZW50ICYgRlVOQ19TVEFURU1FTlRgKS5cblxuICAvLyBSZW1vdmUgYGFsbG93RXhwcmVzc2lvbkJvZHlgIGZvciA3LjAuMCwgYXMgaXQgaXMgb25seSBjYWxsZWQgd2l0aCBmYWxzZVxuICBwcCQ4LnBhcnNlRnVuY3Rpb24gPSBmdW5jdGlvbihub2RlLCBzdGF0ZW1lbnQsIGFsbG93RXhwcmVzc2lvbkJvZHksIGlzQXN5bmMsIGZvckluaXQpIHtcbiAgICB0aGlzLmluaXRGdW5jdGlvbihub2RlKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgfHwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgIWlzQXN5bmMpIHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuc3RhciAmJiAoc3RhdGVtZW50ICYgRlVOQ19IQU5HSU5HX1NUQVRFTUVOVCkpXG4gICAgICAgIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgIG5vZGUuZ2VuZXJhdG9yID0gdGhpcy5lYXQodHlwZXMkMS5zdGFyKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KVxuICAgICAgeyBub2RlLmFzeW5jID0gISFpc0FzeW5jOyB9XG5cbiAgICBpZiAoc3RhdGVtZW50ICYgRlVOQ19TVEFURU1FTlQpIHtcbiAgICAgIG5vZGUuaWQgPSAoc3RhdGVtZW50ICYgRlVOQ19OVUxMQUJMRV9JRCkgJiYgdGhpcy50eXBlICE9PSB0eXBlcyQxLm5hbWUgPyBudWxsIDogdGhpcy5wYXJzZUlkZW50KCk7XG4gICAgICBpZiAobm9kZS5pZCAmJiAhKHN0YXRlbWVudCAmIEZVTkNfSEFOR0lOR19TVEFURU1FTlQpKVxuICAgICAgICAvLyBJZiBpdCBpcyBhIHJlZ3VsYXIgZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4gc2xvcHB5IG1vZGUsIHRoZW4gaXQgaXNcbiAgICAgICAgLy8gc3ViamVjdCB0byBBbm5leCBCIHNlbWFudGljcyAoQklORF9GVU5DVElPTikuIE90aGVyd2lzZSwgdGhlIGJpbmRpbmdcbiAgICAgICAgLy8gbW9kZSBkZXBlbmRzIG9uIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgc2NvcGUgKHNlZVxuICAgICAgICAvLyB0cmVhdEZ1bmN0aW9uc0FzVmFyKS5cbiAgICAgICAgeyB0aGlzLmNoZWNrTFZhbFNpbXBsZShub2RlLmlkLCAodGhpcy5zdHJpY3QgfHwgbm9kZS5nZW5lcmF0b3IgfHwgbm9kZS5hc3luYykgPyB0aGlzLnRyZWF0RnVuY3Rpb25zQXNWYXIgPyBCSU5EX1ZBUiA6IEJJTkRfTEVYSUNBTCA6IEJJTkRfRlVOQ1RJT04pOyB9XG4gICAgfVxuXG4gICAgdmFyIG9sZFlpZWxkUG9zID0gdGhpcy55aWVsZFBvcywgb2xkQXdhaXRQb3MgPSB0aGlzLmF3YWl0UG9zLCBvbGRBd2FpdElkZW50UG9zID0gdGhpcy5hd2FpdElkZW50UG9zO1xuICAgIHRoaXMueWllbGRQb3MgPSAwO1xuICAgIHRoaXMuYXdhaXRQb3MgPSAwO1xuICAgIHRoaXMuYXdhaXRJZGVudFBvcyA9IDA7XG4gICAgdGhpcy5lbnRlclNjb3BlKGZ1bmN0aW9uRmxhZ3Mobm9kZS5hc3luYywgbm9kZS5nZW5lcmF0b3IpKTtcblxuICAgIGlmICghKHN0YXRlbWVudCAmIEZVTkNfU1RBVEVNRU5UKSlcbiAgICAgIHsgbm9kZS5pZCA9IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5uYW1lID8gdGhpcy5wYXJzZUlkZW50KCkgOiBudWxsOyB9XG5cbiAgICB0aGlzLnBhcnNlRnVuY3Rpb25QYXJhbXMobm9kZSk7XG4gICAgdGhpcy5wYXJzZUZ1bmN0aW9uQm9keShub2RlLCBhbGxvd0V4cHJlc3Npb25Cb2R5LCBmYWxzZSwgZm9ySW5pdCk7XG5cbiAgICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3M7XG4gICAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zO1xuICAgIHRoaXMuYXdhaXRJZGVudFBvcyA9IG9sZEF3YWl0SWRlbnRQb3M7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAoc3RhdGVtZW50ICYgRlVOQ19TVEFURU1FTlQpID8gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgOiBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VGdW5jdGlvblBhcmFtcyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLnBhcmVuTCk7XG4gICAgbm9kZS5wYXJhbXMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3QodHlwZXMkMS5wYXJlblIsIGZhbHNlLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCk7XG4gICAgdGhpcy5jaGVja1lpZWxkQXdhaXRJbkRlZmF1bHRQYXJhbXMoKTtcbiAgfTtcblxuICAvLyBQYXJzZSBhIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGxpdGVyYWwgKGRlcGVuZGluZyBvbiB0aGVcbiAgLy8gYGlzU3RhdGVtZW50YCBwYXJhbWV0ZXIpLlxuXG4gIHBwJDgucGFyc2VDbGFzcyA9IGZ1bmN0aW9uKG5vZGUsIGlzU3RhdGVtZW50KSB7XG4gICAgdGhpcy5uZXh0KCk7XG5cbiAgICAvLyBlY21hLTI2MiAxNC42IENsYXNzIERlZmluaXRpb25zXG4gICAgLy8gQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFsd2F5cyBzdHJpY3QgbW9kZSBjb2RlLlxuICAgIHZhciBvbGRTdHJpY3QgPSB0aGlzLnN0cmljdDtcbiAgICB0aGlzLnN0cmljdCA9IHRydWU7XG5cbiAgICB0aGlzLnBhcnNlQ2xhc3NJZChub2RlLCBpc1N0YXRlbWVudCk7XG4gICAgdGhpcy5wYXJzZUNsYXNzU3VwZXIobm9kZSk7XG4gICAgdmFyIHByaXZhdGVOYW1lTWFwID0gdGhpcy5lbnRlckNsYXNzQm9keSgpO1xuICAgIHZhciBjbGFzc0JvZHkgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHZhciBoYWRDb25zdHJ1Y3RvciA9IGZhbHNlO1xuICAgIGNsYXNzQm9keS5ib2R5ID0gW107XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5icmFjZUwpO1xuICAgIHdoaWxlICh0aGlzLnR5cGUgIT09IHR5cGVzJDEuYnJhY2VSKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VDbGFzc0VsZW1lbnQobm9kZS5zdXBlckNsYXNzICE9PSBudWxsKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGNsYXNzQm9keS5ib2R5LnB1c2goZWxlbWVudCk7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFwiTWV0aG9kRGVmaW5pdGlvblwiICYmIGVsZW1lbnQua2luZCA9PT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICAgICAgaWYgKGhhZENvbnN0cnVjdG9yKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShlbGVtZW50LnN0YXJ0LCBcIkR1cGxpY2F0ZSBjb25zdHJ1Y3RvciBpbiB0aGUgc2FtZSBjbGFzc1wiKTsgfVxuICAgICAgICAgIGhhZENvbnN0cnVjdG9yID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmtleSAmJiBlbGVtZW50LmtleS50eXBlID09PSBcIlByaXZhdGVJZGVudGlmaWVyXCIgJiYgaXNQcml2YXRlTmFtZUNvbmZsaWN0ZWQocHJpdmF0ZU5hbWVNYXAsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGVsZW1lbnQua2V5LnN0YXJ0LCAoXCJJZGVudGlmaWVyICcjXCIgKyAoZWxlbWVudC5rZXkubmFtZSkgKyBcIicgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdHJpY3QgPSBvbGRTdHJpY3Q7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5ib2R5ID0gdGhpcy5maW5pc2hOb2RlKGNsYXNzQm9keSwgXCJDbGFzc0JvZHlcIik7XG4gICAgdGhpcy5leGl0Q2xhc3NCb2R5KCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBpc1N0YXRlbWVudCA/IFwiQ2xhc3NEZWNsYXJhdGlvblwiIDogXCJDbGFzc0V4cHJlc3Npb25cIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlQ2xhc3NFbGVtZW50ID0gZnVuY3Rpb24oY29uc3RydWN0b3JBbGxvd3NTdXBlcikge1xuICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLnNlbWkpKSB7IHJldHVybiBudWxsIH1cblxuICAgIHZhciBlY21hVmVyc2lvbiA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbjtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgdmFyIGtleU5hbWUgPSBcIlwiO1xuICAgIHZhciBpc0dlbmVyYXRvciA9IGZhbHNlO1xuICAgIHZhciBpc0FzeW5jID0gZmFsc2U7XG4gICAgdmFyIGtpbmQgPSBcIm1ldGhvZFwiO1xuICAgIHZhciBpc1N0YXRpYyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuZWF0Q29udGV4dHVhbChcInN0YXRpY1wiKSkge1xuICAgICAgLy8gUGFyc2Ugc3RhdGljIGluaXQgYmxvY2tcbiAgICAgIGlmIChlY21hVmVyc2lvbiA+PSAxMyAmJiB0aGlzLmVhdCh0eXBlcyQxLmJyYWNlTCkpIHtcbiAgICAgICAgdGhpcy5wYXJzZUNsYXNzU3RhdGljQmxvY2sobm9kZSk7XG4gICAgICAgIHJldHVybiBub2RlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0NsYXNzRWxlbWVudE5hbWVTdGFydCgpIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5zdGFyKSB7XG4gICAgICAgIGlzU3RhdGljID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleU5hbWUgPSBcInN0YXRpY1wiO1xuICAgICAgfVxuICAgIH1cbiAgICBub2RlLnN0YXRpYyA9IGlzU3RhdGljO1xuICAgIGlmICgha2V5TmFtZSAmJiBlY21hVmVyc2lvbiA+PSA4ICYmIHRoaXMuZWF0Q29udGV4dHVhbChcImFzeW5jXCIpKSB7XG4gICAgICBpZiAoKHRoaXMuaXNDbGFzc0VsZW1lbnROYW1lU3RhcnQoKSB8fCB0aGlzLnR5cGUgPT09IHR5cGVzJDEuc3RhcikgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAgICAgaXNBc3luYyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlOYW1lID0gXCJhc3luY1wiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWtleU5hbWUgJiYgKGVjbWFWZXJzaW9uID49IDkgfHwgIWlzQXN5bmMpICYmIHRoaXMuZWF0KHR5cGVzJDEuc3RhcikpIHtcbiAgICAgIGlzR2VuZXJhdG9yID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFrZXlOYW1lICYmICFpc0FzeW5jICYmICFpc0dlbmVyYXRvcikge1xuICAgICAgdmFyIGxhc3RWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAodGhpcy5lYXRDb250ZXh0dWFsKFwiZ2V0XCIpIHx8IHRoaXMuZWF0Q29udGV4dHVhbChcInNldFwiKSkge1xuICAgICAgICBpZiAodGhpcy5pc0NsYXNzRWxlbWVudE5hbWVTdGFydCgpKSB7XG4gICAgICAgICAga2luZCA9IGxhc3RWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrZXlOYW1lID0gbGFzdFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgZWxlbWVudCBuYW1lXG4gICAgaWYgKGtleU5hbWUpIHtcbiAgICAgIC8vICdhc3luYycsICdnZXQnLCAnc2V0Jywgb3IgJ3N0YXRpYycgd2VyZSBub3QgYSBrZXl3b3JkIGNvbnRleHR1YWxseS5cbiAgICAgIC8vIFRoZSBsYXN0IHRva2VuIGlzIGFueSBvZiB0aG9zZS4gTWFrZSBpdCB0aGUgZWxlbWVudCBuYW1lLlxuICAgICAgbm9kZS5jb21wdXRlZCA9IGZhbHNlO1xuICAgICAgbm9kZS5rZXkgPSB0aGlzLnN0YXJ0Tm9kZUF0KHRoaXMubGFzdFRva1N0YXJ0LCB0aGlzLmxhc3RUb2tTdGFydExvYyk7XG4gICAgICBub2RlLmtleS5uYW1lID0ga2V5TmFtZTtcbiAgICAgIHRoaXMuZmluaXNoTm9kZShub2RlLmtleSwgXCJJZGVudGlmaWVyXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnNlQ2xhc3NFbGVtZW50TmFtZShub2RlKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBlbGVtZW50IHZhbHVlXG4gICAgaWYgKGVjbWFWZXJzaW9uIDwgMTMgfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLnBhcmVuTCB8fCBraW5kICE9PSBcIm1ldGhvZFwiIHx8IGlzR2VuZXJhdG9yIHx8IGlzQXN5bmMpIHtcbiAgICAgIHZhciBpc0NvbnN0cnVjdG9yID0gIW5vZGUuc3RhdGljICYmIGNoZWNrS2V5TmFtZShub2RlLCBcImNvbnN0cnVjdG9yXCIpO1xuICAgICAgdmFyIGFsbG93c0RpcmVjdFN1cGVyID0gaXNDb25zdHJ1Y3RvciAmJiBjb25zdHJ1Y3RvckFsbG93c1N1cGVyO1xuICAgICAgLy8gQ291bGRuJ3QgbW92ZSB0aGlzIGNoZWNrIGludG8gdGhlICdwYXJzZUNsYXNzTWV0aG9kJyBtZXRob2QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gICAgICBpZiAoaXNDb25zdHJ1Y3RvciAmJiBraW5kICE9PSBcIm1ldGhvZFwiKSB7IHRoaXMucmFpc2Uobm9kZS5rZXkuc3RhcnQsIFwiQ29uc3RydWN0b3IgY2FuJ3QgaGF2ZSBnZXQvc2V0IG1vZGlmaWVyXCIpOyB9XG4gICAgICBub2RlLmtpbmQgPSBpc0NvbnN0cnVjdG9yID8gXCJjb25zdHJ1Y3RvclwiIDoga2luZDtcbiAgICAgIHRoaXMucGFyc2VDbGFzc01ldGhvZChub2RlLCBpc0dlbmVyYXRvciwgaXNBc3luYywgYWxsb3dzRGlyZWN0U3VwZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnNlQ2xhc3NGaWVsZChub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZVxuICB9O1xuXG4gIHBwJDguaXNDbGFzc0VsZW1lbnROYW1lU3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy50eXBlID09PSB0eXBlcyQxLm5hbWUgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5wcml2YXRlSWQgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5udW0gfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5zdHJpbmcgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5icmFja2V0TCB8fFxuICAgICAgdGhpcy50eXBlLmtleXdvcmRcbiAgICApXG4gIH07XG5cbiAgcHAkOC5wYXJzZUNsYXNzRWxlbWVudE5hbWUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5wcml2YXRlSWQpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlID09PSBcImNvbnN0cnVjdG9yXCIpIHtcbiAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIkNsYXNzZXMgY2FuJ3QgaGF2ZSBhbiBlbGVtZW50IG5hbWVkICcjY29uc3RydWN0b3InXCIpO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5jb21wdXRlZCA9IGZhbHNlO1xuICAgICAgZWxlbWVudC5rZXkgPSB0aGlzLnBhcnNlUHJpdmF0ZUlkZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2VQcm9wZXJ0eU5hbWUoZWxlbWVudCk7XG4gICAgfVxuICB9O1xuXG4gIHBwJDgucGFyc2VDbGFzc01ldGhvZCA9IGZ1bmN0aW9uKG1ldGhvZCwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIGFsbG93c0RpcmVjdFN1cGVyKSB7XG4gICAgLy8gQ2hlY2sga2V5IGFuZCBmbGFnc1xuICAgIHZhciBrZXkgPSBtZXRob2Qua2V5O1xuICAgIGlmIChtZXRob2Qua2luZCA9PT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICBpZiAoaXNHZW5lcmF0b3IpIHsgdGhpcy5yYWlzZShrZXkuc3RhcnQsIFwiQ29uc3RydWN0b3IgY2FuJ3QgYmUgYSBnZW5lcmF0b3JcIik7IH1cbiAgICAgIGlmIChpc0FzeW5jKSB7IHRoaXMucmFpc2Uoa2V5LnN0YXJ0LCBcIkNvbnN0cnVjdG9yIGNhbid0IGJlIGFuIGFzeW5jIG1ldGhvZFwiKTsgfVxuICAgIH0gZWxzZSBpZiAobWV0aG9kLnN0YXRpYyAmJiBjaGVja0tleU5hbWUobWV0aG9kLCBcInByb3RvdHlwZVwiKSkge1xuICAgICAgdGhpcy5yYWlzZShrZXkuc3RhcnQsIFwiQ2xhc3NlcyBtYXkgbm90IGhhdmUgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBlXCIpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHZhbHVlXG4gICAgdmFyIHZhbHVlID0gbWV0aG9kLnZhbHVlID0gdGhpcy5wYXJzZU1ldGhvZChpc0dlbmVyYXRvciwgaXNBc3luYywgYWxsb3dzRGlyZWN0U3VwZXIpO1xuXG4gICAgLy8gQ2hlY2sgdmFsdWVcbiAgICBpZiAobWV0aG9kLmtpbmQgPT09IFwiZ2V0XCIgJiYgdmFsdWUucGFyYW1zLmxlbmd0aCAhPT0gMClcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHZhbHVlLnN0YXJ0LCBcImdldHRlciBzaG91bGQgaGF2ZSBubyBwYXJhbXNcIik7IH1cbiAgICBpZiAobWV0aG9kLmtpbmQgPT09IFwic2V0XCIgJiYgdmFsdWUucGFyYW1zLmxlbmd0aCAhPT0gMSlcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHZhbHVlLnN0YXJ0LCBcInNldHRlciBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbVwiKTsgfVxuICAgIGlmIChtZXRob2Qua2luZCA9PT0gXCJzZXRcIiAmJiB2YWx1ZS5wYXJhbXNbMF0udHlwZSA9PT0gXCJSZXN0RWxlbWVudFwiKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodmFsdWUucGFyYW1zWzBdLnN0YXJ0LCBcIlNldHRlciBjYW5ub3QgdXNlIHJlc3QgcGFyYW1zXCIpOyB9XG5cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG1ldGhvZCwgXCJNZXRob2REZWZpbml0aW9uXCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUNsYXNzRmllbGQgPSBmdW5jdGlvbihmaWVsZCkge1xuICAgIGlmIChjaGVja0tleU5hbWUoZmllbGQsIFwiY29uc3RydWN0b3JcIikpIHtcbiAgICAgIHRoaXMucmFpc2UoZmllbGQua2V5LnN0YXJ0LCBcIkNsYXNzZXMgY2FuJ3QgaGF2ZSBhIGZpZWxkIG5hbWVkICdjb25zdHJ1Y3RvcidcIik7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5zdGF0aWMgJiYgY2hlY2tLZXlOYW1lKGZpZWxkLCBcInByb3RvdHlwZVwiKSkge1xuICAgICAgdGhpcy5yYWlzZShmaWVsZC5rZXkuc3RhcnQsIFwiQ2xhc3NlcyBjYW4ndCBoYXZlIGEgc3RhdGljIGZpZWxkIG5hbWVkICdwcm90b3R5cGUnXCIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLmVxKSkge1xuICAgICAgLy8gVG8gcmFpc2UgU3ludGF4RXJyb3IgaWYgJ2FyZ3VtZW50cycgZXhpc3RzIGluIHRoZSBpbml0aWFsaXplci5cbiAgICAgIHZhciBzY29wZSA9IHRoaXMuY3VycmVudFRoaXNTY29wZSgpO1xuICAgICAgdmFyIGluQ2xhc3NGaWVsZEluaXQgPSBzY29wZS5pbkNsYXNzRmllbGRJbml0O1xuICAgICAgc2NvcGUuaW5DbGFzc0ZpZWxkSW5pdCA9IHRydWU7XG4gICAgICBmaWVsZC52YWx1ZSA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpO1xuICAgICAgc2NvcGUuaW5DbGFzc0ZpZWxkSW5pdCA9IGluQ2xhc3NGaWVsZEluaXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkLnZhbHVlID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5zZW1pY29sb24oKTtcblxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUoZmllbGQsIFwiUHJvcGVydHlEZWZpbml0aW9uXCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUNsYXNzU3RhdGljQmxvY2sgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgbm9kZS5ib2R5ID0gW107XG5cbiAgICB2YXIgb2xkTGFiZWxzID0gdGhpcy5sYWJlbHM7XG4gICAgdGhpcy5sYWJlbHMgPSBbXTtcbiAgICB0aGlzLmVudGVyU2NvcGUoU0NPUEVfQ0xBU1NfU1RBVElDX0JMT0NLIHwgU0NPUEVfU1VQRVIpO1xuICAgIHdoaWxlICh0aGlzLnR5cGUgIT09IHR5cGVzJDEuYnJhY2VSKSB7XG4gICAgICB2YXIgc3RtdCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQobnVsbCk7XG4gICAgICBub2RlLmJvZHkucHVzaChzdG10KTtcbiAgICB9XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdGhpcy5leGl0U2NvcGUoKTtcbiAgICB0aGlzLmxhYmVscyA9IG9sZExhYmVscztcblxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJTdGF0aWNCbG9ja1wiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VDbGFzc0lkID0gZnVuY3Rpb24obm9kZSwgaXNTdGF0ZW1lbnQpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLm5hbWUpIHtcbiAgICAgIG5vZGUuaWQgPSB0aGlzLnBhcnNlSWRlbnQoKTtcbiAgICAgIGlmIChpc1N0YXRlbWVudClcbiAgICAgICAgeyB0aGlzLmNoZWNrTFZhbFNpbXBsZShub2RlLmlkLCBCSU5EX0xFWElDQUwsIGZhbHNlKTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNTdGF0ZW1lbnQgPT09IHRydWUpXG4gICAgICAgIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgIG5vZGUuaWQgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBwcCQ4LnBhcnNlQ2xhc3NTdXBlciA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBub2RlLnN1cGVyQ2xhc3MgPSB0aGlzLmVhdCh0eXBlcyQxLl9leHRlbmRzKSA/IHRoaXMucGFyc2VFeHByU3Vic2NyaXB0cyhudWxsLCBmYWxzZSkgOiBudWxsO1xuICB9O1xuXG4gIHBwJDguZW50ZXJDbGFzc0JvZHkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWxlbWVudCA9IHtkZWNsYXJlZDogT2JqZWN0LmNyZWF0ZShudWxsKSwgdXNlZDogW119O1xuICAgIHRoaXMucHJpdmF0ZU5hbWVTdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgIHJldHVybiBlbGVtZW50LmRlY2xhcmVkXG4gIH07XG5cbiAgcHAkOC5leGl0Q2xhc3NCb2R5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlZiA9IHRoaXMucHJpdmF0ZU5hbWVTdGFjay5wb3AoKTtcbiAgICB2YXIgZGVjbGFyZWQgPSByZWYuZGVjbGFyZWQ7XG4gICAgdmFyIHVzZWQgPSByZWYudXNlZDtcbiAgICB2YXIgbGVuID0gdGhpcy5wcml2YXRlTmFtZVN0YWNrLmxlbmd0aDtcbiAgICB2YXIgcGFyZW50ID0gbGVuID09PSAwID8gbnVsbCA6IHRoaXMucHJpdmF0ZU5hbWVTdGFja1tsZW4gLSAxXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZWQubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBpZCA9IHVzZWRbaV07XG4gICAgICBpZiAoIWhhc093bihkZWNsYXJlZCwgaWQubmFtZSkpIHtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIHBhcmVudC51c2VkLnB1c2goaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShpZC5zdGFydCwgKFwiUHJpdmF0ZSBmaWVsZCAnI1wiICsgKGlkLm5hbWUpICsgXCInIG11c3QgYmUgZGVjbGFyZWQgaW4gYW4gZW5jbG9zaW5nIGNsYXNzXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBpc1ByaXZhdGVOYW1lQ29uZmxpY3RlZChwcml2YXRlTmFtZU1hcCwgZWxlbWVudCkge1xuICAgIHZhciBuYW1lID0gZWxlbWVudC5rZXkubmFtZTtcbiAgICB2YXIgY3VyciA9IHByaXZhdGVOYW1lTWFwW25hbWVdO1xuXG4gICAgdmFyIG5leHQgPSBcInRydWVcIjtcbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBcIk1ldGhvZERlZmluaXRpb25cIiAmJiAoZWxlbWVudC5raW5kID09PSBcImdldFwiIHx8IGVsZW1lbnQua2luZCA9PT0gXCJzZXRcIikpIHtcbiAgICAgIG5leHQgPSAoZWxlbWVudC5zdGF0aWMgPyBcInNcIiA6IFwiaVwiKSArIGVsZW1lbnQua2luZDtcbiAgICB9XG5cbiAgICAvLyBgY2xhc3MgeyBnZXQgI2EoKXt9OyBzdGF0aWMgc2V0ICNhKF8pe30gfWAgaXMgYWxzbyBjb25mbGljdC5cbiAgICBpZiAoXG4gICAgICBjdXJyID09PSBcImlnZXRcIiAmJiBuZXh0ID09PSBcImlzZXRcIiB8fFxuICAgICAgY3VyciA9PT0gXCJpc2V0XCIgJiYgbmV4dCA9PT0gXCJpZ2V0XCIgfHxcbiAgICAgIGN1cnIgPT09IFwic2dldFwiICYmIG5leHQgPT09IFwic3NldFwiIHx8XG4gICAgICBjdXJyID09PSBcInNzZXRcIiAmJiBuZXh0ID09PSBcInNnZXRcIlxuICAgICkge1xuICAgICAgcHJpdmF0ZU5hbWVNYXBbbmFtZV0gPSBcInRydWVcIjtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSBpZiAoIWN1cnIpIHtcbiAgICAgIHByaXZhdGVOYW1lTWFwW25hbWVdID0gbmV4dDtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrS2V5TmFtZShub2RlLCBuYW1lKSB7XG4gICAgdmFyIGNvbXB1dGVkID0gbm9kZS5jb21wdXRlZDtcbiAgICB2YXIga2V5ID0gbm9kZS5rZXk7XG4gICAgcmV0dXJuICFjb21wdXRlZCAmJiAoXG4gICAgICBrZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYga2V5Lm5hbWUgPT09IG5hbWUgfHxcbiAgICAgIGtleS50eXBlID09PSBcIkxpdGVyYWxcIiAmJiBrZXkudmFsdWUgPT09IG5hbWVcbiAgICApXG4gIH1cblxuICAvLyBQYXJzZXMgbW9kdWxlIGV4cG9ydCBkZWNsYXJhdGlvbi5cblxuICBwcCQ4LnBhcnNlRXhwb3J0QWxsRGVjbGFyYXRpb24gPSBmdW5jdGlvbihub2RlLCBleHBvcnRzKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMSkge1xuICAgICAgaWYgKHRoaXMuZWF0Q29udGV4dHVhbChcImFzXCIpKSB7XG4gICAgICAgIG5vZGUuZXhwb3J0ZWQgPSB0aGlzLnBhcnNlTW9kdWxlRXhwb3J0TmFtZSgpO1xuICAgICAgICB0aGlzLmNoZWNrRXhwb3J0KGV4cG9ydHMsIG5vZGUuZXhwb3J0ZWQsIHRoaXMubGFzdFRva1N0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuZXhwb3J0ZWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmV4cGVjdENvbnRleHR1YWwoXCJmcm9tXCIpO1xuICAgIGlmICh0aGlzLnR5cGUgIT09IHR5cGVzJDEuc3RyaW5nKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgbm9kZS5zb3VyY2UgPSB0aGlzLnBhcnNlRXhwckF0b20oKTtcbiAgICB0aGlzLnNlbWljb2xvbigpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VFeHBvcnQgPSBmdW5jdGlvbihub2RlLCBleHBvcnRzKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgLy8gZXhwb3J0ICogZnJvbSAnLi4uJ1xuICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLnN0YXIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uKG5vZGUsIGV4cG9ydHMpXG4gICAgfVxuICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLl9kZWZhdWx0KSkgeyAvLyBleHBvcnQgZGVmYXVsdCAuLi5cbiAgICAgIHRoaXMuY2hlY2tFeHBvcnQoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHRoaXMubGFzdFRva1N0YXJ0KTtcbiAgICAgIG5vZGUuZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKCk7XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIpXG4gICAgfVxuICAgIC8vIGV4cG9ydCB2YXJ8Y29uc3R8bGV0fGZ1bmN0aW9ufGNsYXNzIC4uLlxuICAgIGlmICh0aGlzLnNob3VsZFBhcnNlRXhwb3J0U3RhdGVtZW50KCkpIHtcbiAgICAgIG5vZGUuZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRXhwb3J0RGVjbGFyYXRpb24obm9kZSk7XG4gICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIilcbiAgICAgICAgeyB0aGlzLmNoZWNrVmFyaWFibGVFeHBvcnQoZXhwb3J0cywgbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgdGhpcy5jaGVja0V4cG9ydChleHBvcnRzLCBub2RlLmRlY2xhcmF0aW9uLmlkLCBub2RlLmRlY2xhcmF0aW9uLmlkLnN0YXJ0KTsgfVxuICAgICAgbm9kZS5zcGVjaWZpZXJzID0gW107XG4gICAgICBub2RlLnNvdXJjZSA9IG51bGw7XG4gICAgfSBlbHNlIHsgLy8gZXhwb3J0IHsgeCwgeSBhcyB6IH0gW2Zyb20gJy4uLiddXG4gICAgICBub2RlLmRlY2xhcmF0aW9uID0gbnVsbDtcbiAgICAgIG5vZGUuc3BlY2lmaWVycyA9IHRoaXMucGFyc2VFeHBvcnRTcGVjaWZpZXJzKGV4cG9ydHMpO1xuICAgICAgaWYgKHRoaXMuZWF0Q29udGV4dHVhbChcImZyb21cIikpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gdHlwZXMkMS5zdHJpbmcpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgICAgbm9kZS5zb3VyY2UgPSB0aGlzLnBhcnNlRXhwckF0b20oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gbm9kZS5zcGVjaWZpZXJzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIC8vIGNoZWNrIGZvciBrZXl3b3JkcyB1c2VkIGFzIGxvY2FsIG5hbWVzXG4gICAgICAgICAgdmFyIHNwZWMgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgdGhpcy5jaGVja1VucmVzZXJ2ZWQoc3BlYy5sb2NhbCk7XG4gICAgICAgICAgLy8gY2hlY2sgaWYgZXhwb3J0IGlzIGRlZmluZWRcbiAgICAgICAgICB0aGlzLmNoZWNrTG9jYWxFeHBvcnQoc3BlYy5sb2NhbCk7XG5cbiAgICAgICAgICBpZiAoc3BlYy5sb2NhbC50eXBlID09PSBcIkxpdGVyYWxcIikge1xuICAgICAgICAgICAgdGhpcy5yYWlzZShzcGVjLmxvY2FsLnN0YXJ0LCBcIkEgc3RyaW5nIGxpdGVyYWwgY2Fubm90IGJlIHVzZWQgYXMgYW4gZXhwb3J0ZWQgYmluZGluZyB3aXRob3V0IGBmcm9tYC5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbm9kZS5zb3VyY2UgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5zZW1pY29sb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlRXhwb3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VTdGF0ZW1lbnQobnVsbClcbiAgfTtcblxuICBwcCQ4LnBhcnNlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlzQXN5bmM7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5fZnVuY3Rpb24gfHwgKGlzQXN5bmMgPSB0aGlzLmlzQXN5bmNGdW5jdGlvbigpKSkge1xuICAgICAgdmFyIGZOb2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgaWYgKGlzQXN5bmMpIHsgdGhpcy5uZXh0KCk7IH1cbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24oZk5vZGUsIEZVTkNfU1RBVEVNRU5UIHwgRlVOQ19OVUxMQUJMRV9JRCwgZmFsc2UsIGlzQXN5bmMpXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuX2NsYXNzKSB7XG4gICAgICB2YXIgY05vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VDbGFzcyhjTm9kZSwgXCJudWxsYWJsZUlEXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpO1xuICAgICAgdGhpcy5zZW1pY29sb24oKTtcbiAgICAgIHJldHVybiBkZWNsYXJhdGlvblxuICAgIH1cbiAgfTtcblxuICBwcCQ4LmNoZWNrRXhwb3J0ID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgcG9zKSB7XG4gICAgaWYgKCFleHBvcnRzKSB7IHJldHVybiB9XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKVxuICAgICAgeyBuYW1lID0gbmFtZS50eXBlID09PSBcIklkZW50aWZpZXJcIiA/IG5hbWUubmFtZSA6IG5hbWUudmFsdWU7IH1cbiAgICBpZiAoaGFzT3duKGV4cG9ydHMsIG5hbWUpKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUocG9zLCBcIkR1cGxpY2F0ZSBleHBvcnQgJ1wiICsgbmFtZSArIFwiJ1wiKTsgfVxuICAgIGV4cG9ydHNbbmFtZV0gPSB0cnVlO1xuICB9O1xuXG4gIHBwJDguY2hlY2tQYXR0ZXJuRXhwb3J0ID0gZnVuY3Rpb24oZXhwb3J0cywgcGF0KSB7XG4gICAgdmFyIHR5cGUgPSBwYXQudHlwZTtcbiAgICBpZiAodHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpXG4gICAgICB7IHRoaXMuY2hlY2tFeHBvcnQoZXhwb3J0cywgcGF0LCBwYXQuc3RhcnQpOyB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gXCJPYmplY3RQYXR0ZXJuXCIpXG4gICAgICB7IGZvciAodmFyIGkgPSAwLCBsaXN0ID0gcGF0LnByb3BlcnRpZXM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKVxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHByb3AgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgcHJvcCk7XG4gICAgICAgIH0gfVxuICAgIGVsc2UgaWYgKHR5cGUgPT09IFwiQXJyYXlQYXR0ZXJuXCIpXG4gICAgICB7IGZvciAodmFyIGkkMSA9IDAsIGxpc3QkMSA9IHBhdC5lbGVtZW50czsgaSQxIDwgbGlzdCQxLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICAgdmFyIGVsdCA9IGxpc3QkMVtpJDFdO1xuXG4gICAgICAgICAgaWYgKGVsdCkgeyB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBlbHQpOyB9XG4gICAgICB9IH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcIlByb3BlcnR5XCIpXG4gICAgICB7IHRoaXMuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIHBhdC52YWx1ZSk7IH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIpXG4gICAgICB7IHRoaXMuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIHBhdC5sZWZ0KTsgfVxuICAgIGVsc2UgaWYgKHR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIilcbiAgICAgIHsgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgcGF0LmFyZ3VtZW50KTsgfVxuICAgIGVsc2UgaWYgKHR5cGUgPT09IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgICAgIHsgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgcGF0LmV4cHJlc3Npb24pOyB9XG4gIH07XG5cbiAgcHAkOC5jaGVja1ZhcmlhYmxlRXhwb3J0ID0gZnVuY3Rpb24oZXhwb3J0cywgZGVjbHMpIHtcbiAgICBpZiAoIWV4cG9ydHMpIHsgcmV0dXJuIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IGRlY2xzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICAgIHtcbiAgICAgIHZhciBkZWNsID0gbGlzdFtpXTtcblxuICAgICAgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgZGVjbC5pZCk7XG4gICAgfVxuICB9O1xuXG4gIHBwJDguc2hvdWxkUGFyc2VFeHBvcnRTdGF0ZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlLmtleXdvcmQgPT09IFwidmFyXCIgfHxcbiAgICAgIHRoaXMudHlwZS5rZXl3b3JkID09PSBcImNvbnN0XCIgfHxcbiAgICAgIHRoaXMudHlwZS5rZXl3b3JkID09PSBcImNsYXNzXCIgfHxcbiAgICAgIHRoaXMudHlwZS5rZXl3b3JkID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgIHRoaXMuaXNMZXQoKSB8fFxuICAgICAgdGhpcy5pc0FzeW5jRnVuY3Rpb24oKVxuICB9O1xuXG4gIC8vIFBhcnNlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1vZHVsZSBleHBvcnRzLlxuXG4gIHBwJDgucGFyc2VFeHBvcnRTcGVjaWZpZXIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIG5vZGUubG9jYWwgPSB0aGlzLnBhcnNlTW9kdWxlRXhwb3J0TmFtZSgpO1xuXG4gICAgbm9kZS5leHBvcnRlZCA9IHRoaXMuZWF0Q29udGV4dHVhbChcImFzXCIpID8gdGhpcy5wYXJzZU1vZHVsZUV4cG9ydE5hbWUoKSA6IG5vZGUubG9jYWw7XG4gICAgdGhpcy5jaGVja0V4cG9ydChcbiAgICAgIGV4cG9ydHMsXG4gICAgICBub2RlLmV4cG9ydGVkLFxuICAgICAgbm9kZS5leHBvcnRlZC5zdGFydFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0U3BlY2lmaWVyXCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUV4cG9ydFNwZWNpZmllcnMgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gICAgdmFyIG5vZGVzID0gW10sIGZpcnN0ID0gdHJ1ZTtcbiAgICAvLyBleHBvcnQgeyB4LCB5IGFzIHogfSBbZnJvbSAnLi4uJ11cbiAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLmJyYWNlTCk7XG4gICAgd2hpbGUgKCF0aGlzLmVhdCh0eXBlcyQxLmJyYWNlUikpIHtcbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5leHBlY3QodHlwZXMkMS5jb21tYSk7XG4gICAgICAgIGlmICh0aGlzLmFmdGVyVHJhaWxpbmdDb21tYSh0eXBlcyQxLmJyYWNlUikpIHsgYnJlYWsgfVxuICAgICAgfSBlbHNlIHsgZmlyc3QgPSBmYWxzZTsgfVxuXG4gICAgICBub2Rlcy5wdXNoKHRoaXMucGFyc2VFeHBvcnRTcGVjaWZpZXIoZXhwb3J0cykpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXNcbiAgfTtcblxuICAvLyBQYXJzZXMgaW1wb3J0IGRlY2xhcmF0aW9uLlxuXG4gIHBwJDgucGFyc2VJbXBvcnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7XG5cbiAgICAvLyBpbXBvcnQgJy4uLidcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLnN0cmluZykge1xuICAgICAgbm9kZS5zcGVjaWZpZXJzID0gZW1wdHkkMTtcbiAgICAgIG5vZGUuc291cmNlID0gdGhpcy5wYXJzZUV4cHJBdG9tKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc3BlY2lmaWVycyA9IHRoaXMucGFyc2VJbXBvcnRTcGVjaWZpZXJzKCk7XG4gICAgICB0aGlzLmV4cGVjdENvbnRleHR1YWwoXCJmcm9tXCIpO1xuICAgICAgbm9kZS5zb3VyY2UgPSB0aGlzLnR5cGUgPT09IHR5cGVzJDEuc3RyaW5nID8gdGhpcy5wYXJzZUV4cHJBdG9tKCkgOiB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgICB9XG4gICAgdGhpcy5zZW1pY29sb24oKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSW1wb3J0RGVjbGFyYXRpb25cIilcbiAgfTtcblxuICAvLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGUgaW1wb3J0cy5cblxuICBwcCQ4LnBhcnNlSW1wb3J0U3BlY2lmaWVyID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIG5vZGUuaW1wb3J0ZWQgPSB0aGlzLnBhcnNlTW9kdWxlRXhwb3J0TmFtZSgpO1xuXG4gICAgaWYgKHRoaXMuZWF0Q29udGV4dHVhbChcImFzXCIpKSB7XG4gICAgICBub2RlLmxvY2FsID0gdGhpcy5wYXJzZUlkZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tVbnJlc2VydmVkKG5vZGUuaW1wb3J0ZWQpO1xuICAgICAgbm9kZS5sb2NhbCA9IG5vZGUuaW1wb3J0ZWQ7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tMVmFsU2ltcGxlKG5vZGUubG9jYWwsIEJJTkRfTEVYSUNBTCk7XG5cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSW1wb3J0U3BlY2lmaWVyXCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIgPSBmdW5jdGlvbigpIHtcbiAgICAvLyBpbXBvcnQgZGVmYXVsdE9iaiwgeyB4LCB5IGFzIHogfSBmcm9tICcuLi4nXG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIG5vZGUubG9jYWwgPSB0aGlzLnBhcnNlSWRlbnQoKTtcbiAgICB0aGlzLmNoZWNrTFZhbFNpbXBsZShub2RlLmxvY2FsLCBCSU5EX0xFWElDQUwpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyXCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICB0aGlzLmV4cGVjdENvbnRleHR1YWwoXCJhc1wiKTtcbiAgICBub2RlLmxvY2FsID0gdGhpcy5wYXJzZUlkZW50KCk7XG4gICAgdGhpcy5jaGVja0xWYWxTaW1wbGUobm9kZS5sb2NhbCwgQklORF9MRVhJQ0FMKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyXCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUltcG9ydFNwZWNpZmllcnMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbm9kZXMgPSBbXSwgZmlyc3QgPSB0cnVlO1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEubmFtZSkge1xuICAgICAgbm9kZXMucHVzaCh0aGlzLnBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpKTtcbiAgICAgIGlmICghdGhpcy5lYXQodHlwZXMkMS5jb21tYSkpIHsgcmV0dXJuIG5vZGVzIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5zdGFyKSB7XG4gICAgICBub2Rlcy5wdXNoKHRoaXMucGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7XG4gICAgICByZXR1cm4gbm9kZXNcbiAgICB9XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5icmFjZUwpO1xuICAgIHdoaWxlICghdGhpcy5lYXQodHlwZXMkMS5icmFjZVIpKSB7XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuY29tbWEpO1xuICAgICAgICBpZiAodGhpcy5hZnRlclRyYWlsaW5nQ29tbWEodHlwZXMkMS5icmFjZVIpKSB7IGJyZWFrIH1cbiAgICAgIH0gZWxzZSB7IGZpcnN0ID0gZmFsc2U7IH1cblxuICAgICAgbm9kZXMucHVzaCh0aGlzLnBhcnNlSW1wb3J0U3BlY2lmaWVyKCkpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXNcbiAgfTtcblxuICBwcCQ4LnBhcnNlTW9kdWxlRXhwb3J0TmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTMgJiYgdGhpcy50eXBlID09PSB0eXBlcyQxLnN0cmluZykge1xuICAgICAgdmFyIHN0cmluZ0xpdGVyYWwgPSB0aGlzLnBhcnNlTGl0ZXJhbCh0aGlzLnZhbHVlKTtcbiAgICAgIGlmIChsb25lU3Vycm9nYXRlLnRlc3Qoc3RyaW5nTGl0ZXJhbC52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5yYWlzZShzdHJpbmdMaXRlcmFsLnN0YXJ0LCBcIkFuIGV4cG9ydCBuYW1lIGNhbm5vdCBpbmNsdWRlIGEgbG9uZSBzdXJyb2dhdGUuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZ0xpdGVyYWxcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFyc2VJZGVudCh0cnVlKVxuICB9O1xuXG4gIC8vIFNldCBgRXhwcmVzc2lvblN0YXRlbWVudCNkaXJlY3RpdmVgIHByb3BlcnR5IGZvciBkaXJlY3RpdmUgcHJvbG9ndWVzLlxuICBwcCQ4LmFkYXB0RGlyZWN0aXZlUHJvbG9ndWUgPSBmdW5jdGlvbihzdGF0ZW1lbnRzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZW1lbnRzLmxlbmd0aCAmJiB0aGlzLmlzRGlyZWN0aXZlQ2FuZGlkYXRlKHN0YXRlbWVudHNbaV0pOyArK2kpIHtcbiAgICAgIHN0YXRlbWVudHNbaV0uZGlyZWN0aXZlID0gc3RhdGVtZW50c1tpXS5leHByZXNzaW9uLnJhdy5zbGljZSgxLCAtMSk7XG4gICAgfVxuICB9O1xuICBwcCQ4LmlzRGlyZWN0aXZlQ2FuZGlkYXRlID0gZnVuY3Rpb24oc3RhdGVtZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA1ICYmXG4gICAgICBzdGF0ZW1lbnQudHlwZSA9PT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgJiZcbiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLnR5cGUgPT09IFwiTGl0ZXJhbFwiICYmXG4gICAgICB0eXBlb2Ygc3RhdGVtZW50LmV4cHJlc3Npb24udmFsdWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIC8vIFJlamVjdCBwYXJlbnRoZXNpemVkIHN0cmluZ3MuXG4gICAgICAodGhpcy5pbnB1dFtzdGF0ZW1lbnQuc3RhcnRdID09PSBcIlxcXCJcIiB8fCB0aGlzLmlucHV0W3N0YXRlbWVudC5zdGFydF0gPT09IFwiJ1wiKVxuICAgIClcbiAgfTtcblxuICB2YXIgcHAkNyA9IFBhcnNlci5wcm90b3R5cGU7XG5cbiAgLy8gQ29udmVydCBleGlzdGluZyBleHByZXNzaW9uIGF0b20gdG8gYXNzaWduYWJsZSBwYXR0ZXJuXG4gIC8vIGlmIHBvc3NpYmxlLlxuXG4gIHBwJDcudG9Bc3NpZ25hYmxlID0gZnVuY3Rpb24obm9kZSwgaXNCaW5kaW5nLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIG5vZGUpIHtcbiAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICBjYXNlIFwiSWRlbnRpZmllclwiOlxuICAgICAgICBpZiAodGhpcy5pbkFzeW5jICYmIG5vZGUubmFtZSA9PT0gXCJhd2FpdFwiKVxuICAgICAgICAgIHsgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcIkNhbm5vdCB1c2UgJ2F3YWl0JyBhcyBpZGVudGlmaWVyIGluc2lkZSBhbiBhc3luYyBmdW5jdGlvblwiKTsgfVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiT2JqZWN0UGF0dGVyblwiOlxuICAgICAgY2FzZSBcIkFycmF5UGF0dGVyblwiOlxuICAgICAgY2FzZSBcIkFzc2lnbm1lbnRQYXR0ZXJuXCI6XG4gICAgICBjYXNlIFwiUmVzdEVsZW1lbnRcIjpcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBcIk9iamVjdEV4cHJlc3Npb25cIjpcbiAgICAgICAgbm9kZS50eXBlID0gXCJPYmplY3RQYXR0ZXJuXCI7XG4gICAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7IHRoaXMuY2hlY2tQYXR0ZXJuRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpOyB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gbm9kZS5wcm9wZXJ0aWVzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIHZhciBwcm9wID0gbGlzdFtpXTtcblxuICAgICAgICB0aGlzLnRvQXNzaWduYWJsZShwcm9wLCBpc0JpbmRpbmcpO1xuICAgICAgICAgIC8vIEVhcmx5IGVycm9yOlxuICAgICAgICAgIC8vICAgQXNzaWdubWVudFJlc3RQcm9wZXJ0eVtZaWVsZCwgQXdhaXRdIDpcbiAgICAgICAgICAvLyAgICAgYC4uLmAgRGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnRUYXJnZXRbWWllbGQsIEF3YWl0XVxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gICBJdCBpcyBhIFN5bnRheCBFcnJvciBpZiB8RGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnRUYXJnZXR8IGlzIGFuIHxBcnJheUxpdGVyYWx8IG9yIGFuIHxPYmplY3RMaXRlcmFsfC5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcm9wLnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIiAmJlxuICAgICAgICAgICAgKHByb3AuYXJndW1lbnQudHlwZSA9PT0gXCJBcnJheVBhdHRlcm5cIiB8fCBwcm9wLmFyZ3VtZW50LnR5cGUgPT09IFwiT2JqZWN0UGF0dGVyblwiKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yYWlzZShwcm9wLmFyZ3VtZW50LnN0YXJ0LCBcIlVuZXhwZWN0ZWQgdG9rZW5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCJQcm9wZXJ0eVwiOlxuICAgICAgICAvLyBBc3NpZ25tZW50UHJvcGVydHkgaGFzIHR5cGUgPT09IFwiUHJvcGVydHlcIlxuICAgICAgICBpZiAobm9kZS5raW5kICE9PSBcImluaXRcIikgeyB0aGlzLnJhaXNlKG5vZGUua2V5LnN0YXJ0LCBcIk9iamVjdCBwYXR0ZXJuIGNhbid0IGNvbnRhaW4gZ2V0dGVyIG9yIHNldHRlclwiKTsgfVxuICAgICAgICB0aGlzLnRvQXNzaWduYWJsZShub2RlLnZhbHVlLCBpc0JpbmRpbmcpO1xuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiQXJyYXlFeHByZXNzaW9uXCI6XG4gICAgICAgIG5vZGUudHlwZSA9IFwiQXJyYXlQYXR0ZXJuXCI7XG4gICAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7IHRoaXMuY2hlY2tQYXR0ZXJuRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpOyB9XG4gICAgICAgIHRoaXMudG9Bc3NpZ25hYmxlTGlzdChub2RlLmVsZW1lbnRzLCBpc0JpbmRpbmcpO1xuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiU3ByZWFkRWxlbWVudFwiOlxuICAgICAgICBub2RlLnR5cGUgPSBcIlJlc3RFbGVtZW50XCI7XG4gICAgICAgIHRoaXMudG9Bc3NpZ25hYmxlKG5vZGUuYXJndW1lbnQsIGlzQmluZGluZyk7XG4gICAgICAgIGlmIChub2RlLmFyZ3VtZW50LnR5cGUgPT09IFwiQXNzaWdubWVudFBhdHRlcm5cIilcbiAgICAgICAgICB7IHRoaXMucmFpc2Uobm9kZS5hcmd1bWVudC5zdGFydCwgXCJSZXN0IGVsZW1lbnRzIGNhbm5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZVwiKTsgfVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiQXNzaWdubWVudEV4cHJlc3Npb25cIjpcbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgIT09IFwiPVwiKSB7IHRoaXMucmFpc2Uobm9kZS5sZWZ0LmVuZCwgXCJPbmx5ICc9JyBvcGVyYXRvciBjYW4gYmUgdXNlZCBmb3Igc3BlY2lmeWluZyBkZWZhdWx0IHZhbHVlLlwiKTsgfVxuICAgICAgICBub2RlLnR5cGUgPSBcIkFzc2lnbm1lbnRQYXR0ZXJuXCI7XG4gICAgICAgIGRlbGV0ZSBub2RlLm9wZXJhdG9yO1xuICAgICAgICB0aGlzLnRvQXNzaWduYWJsZShub2RlLmxlZnQsIGlzQmluZGluZyk7XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiOlxuICAgICAgICB0aGlzLnRvQXNzaWduYWJsZShub2RlLmV4cHJlc3Npb24sIGlzQmluZGluZywgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCJDaGFpbkV4cHJlc3Npb25cIjpcbiAgICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUuc3RhcnQsIFwiT3B0aW9uYWwgY2hhaW5pbmcgY2Fubm90IGFwcGVhciBpbiBsZWZ0LWhhbmQgc2lkZVwiKTtcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBcIk1lbWJlckV4cHJlc3Npb25cIjpcbiAgICAgICAgaWYgKCFpc0JpbmRpbmcpIHsgYnJlYWsgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnJhaXNlKG5vZGUuc3RhcnQsIFwiQXNzaWduaW5nIHRvIHJ2YWx1ZVwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHsgdGhpcy5jaGVja1BhdHRlcm5FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7IH1cbiAgICByZXR1cm4gbm9kZVxuICB9O1xuXG4gIC8vIENvbnZlcnQgbGlzdCBvZiBleHByZXNzaW9uIGF0b21zIHRvIGJpbmRpbmcgbGlzdC5cblxuICBwcCQ3LnRvQXNzaWduYWJsZUxpc3QgPSBmdW5jdGlvbihleHByTGlzdCwgaXNCaW5kaW5nKSB7XG4gICAgdmFyIGVuZCA9IGV4cHJMaXN0Lmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB2YXIgZWx0ID0gZXhwckxpc3RbaV07XG4gICAgICBpZiAoZWx0KSB7IHRoaXMudG9Bc3NpZ25hYmxlKGVsdCwgaXNCaW5kaW5nKTsgfVxuICAgIH1cbiAgICBpZiAoZW5kKSB7XG4gICAgICB2YXIgbGFzdCA9IGV4cHJMaXN0W2VuZCAtIDFdO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA9PT0gNiAmJiBpc0JpbmRpbmcgJiYgbGFzdCAmJiBsYXN0LnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIiAmJiBsYXN0LmFyZ3VtZW50LnR5cGUgIT09IFwiSWRlbnRpZmllclwiKVxuICAgICAgICB7IHRoaXMudW5leHBlY3RlZChsYXN0LmFyZ3VtZW50LnN0YXJ0KTsgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwckxpc3RcbiAgfTtcblxuICAvLyBQYXJzZXMgc3ByZWFkIGVsZW1lbnQuXG5cbiAgcHAkNy5wYXJzZVNwcmVhZCA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlNwcmVhZEVsZW1lbnRcIilcbiAgfTtcblxuICBwcCQ3LnBhcnNlUmVzdEJpbmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgdGhpcy5uZXh0KCk7XG5cbiAgICAvLyBSZXN0RWxlbWVudCBpbnNpZGUgb2YgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBpZGVudGlmaWVyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA9PT0gNiAmJiB0aGlzLnR5cGUgIT09IHR5cGVzJDEubmFtZSlcbiAgICAgIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cblxuICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlQmluZGluZ0F0b20oKTtcblxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJSZXN0RWxlbWVudFwiKVxuICB9O1xuXG4gIC8vIFBhcnNlcyBsdmFsdWUgKGFzc2lnbmFibGUpIGF0b20uXG5cbiAgcHAkNy5wYXJzZUJpbmRpbmdBdG9tID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSB0eXBlcyQxLmJyYWNrZXRMOlxuICAgICAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICBub2RlLmVsZW1lbnRzID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KHR5cGVzJDEuYnJhY2tldFIsIHRydWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXJyYXlQYXR0ZXJuXCIpXG5cbiAgICAgIGNhc2UgdHlwZXMkMS5icmFjZUw6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT2JqKHRydWUpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBhcnNlSWRlbnQoKVxuICB9O1xuXG4gIHBwJDcucGFyc2VCaW5kaW5nTGlzdCA9IGZ1bmN0aW9uKGNsb3NlLCBhbGxvd0VtcHR5LCBhbGxvd1RyYWlsaW5nQ29tbWEsIGFsbG93TW9kaWZpZXJzKSB7XG4gICAgdmFyIGVsdHMgPSBbXSwgZmlyc3QgPSB0cnVlO1xuICAgIHdoaWxlICghdGhpcy5lYXQoY2xvc2UpKSB7XG4gICAgICBpZiAoZmlyc3QpIHsgZmlyc3QgPSBmYWxzZTsgfVxuICAgICAgZWxzZSB7IHRoaXMuZXhwZWN0KHR5cGVzJDEuY29tbWEpOyB9XG4gICAgICBpZiAoYWxsb3dFbXB0eSAmJiB0aGlzLnR5cGUgPT09IHR5cGVzJDEuY29tbWEpIHtcbiAgICAgICAgZWx0cy5wdXNoKG51bGwpO1xuICAgICAgfSBlbHNlIGlmIChhbGxvd1RyYWlsaW5nQ29tbWEgJiYgdGhpcy5hZnRlclRyYWlsaW5nQ29tbWEoY2xvc2UpKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5lbGxpcHNpcykge1xuICAgICAgICB2YXIgcmVzdCA9IHRoaXMucGFyc2VSZXN0QmluZGluZygpO1xuICAgICAgICB0aGlzLnBhcnNlQmluZGluZ0xpc3RJdGVtKHJlc3QpO1xuICAgICAgICBlbHRzLnB1c2gocmVzdCk7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuY29tbWEpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiQ29tbWEgaXMgbm90IHBlcm1pdHRlZCBhZnRlciB0aGUgcmVzdCBlbGVtZW50XCIpOyB9XG4gICAgICAgIHRoaXMuZXhwZWN0KGNsb3NlKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsdHMucHVzaCh0aGlzLnBhcnNlQXNzaWduYWJsZUxpc3RJdGVtKGFsbG93TW9kaWZpZXJzKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbHRzXG4gIH07XG5cbiAgcHAkNy5wYXJzZUFzc2lnbmFibGVMaXN0SXRlbSA9IGZ1bmN0aW9uKGFsbG93TW9kaWZpZXJzKSB7XG4gICAgdmFyIGVsZW0gPSB0aGlzLnBhcnNlTWF5YmVEZWZhdWx0KHRoaXMuc3RhcnQsIHRoaXMuc3RhcnRMb2MpO1xuICAgIHRoaXMucGFyc2VCaW5kaW5nTGlzdEl0ZW0oZWxlbSk7XG4gICAgcmV0dXJuIGVsZW1cbiAgfTtcblxuICBwcCQ3LnBhcnNlQmluZGluZ0xpc3RJdGVtID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICByZXR1cm4gcGFyYW1cbiAgfTtcblxuICAvLyBQYXJzZXMgYXNzaWdubWVudCBwYXR0ZXJuIGFyb3VuZCBnaXZlbiBhdG9tIGlmIHBvc3NpYmxlLlxuXG4gIHBwJDcucGFyc2VNYXliZURlZmF1bHQgPSBmdW5jdGlvbihzdGFydFBvcywgc3RhcnRMb2MsIGxlZnQpIHtcbiAgICBsZWZ0ID0gbGVmdCB8fCB0aGlzLnBhcnNlQmluZGluZ0F0b20oKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNiB8fCAhdGhpcy5lYXQodHlwZXMkMS5lcSkpIHsgcmV0dXJuIGxlZnQgfVxuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgIG5vZGUubGVmdCA9IGxlZnQ7XG4gICAgbm9kZS5yaWdodCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJBc3NpZ25tZW50UGF0dGVyblwiKVxuICB9O1xuXG4gIC8vIFRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zIGFsbCB2ZXJpZnkgdGhhdCBhIG5vZGUgaXMgYW4gbHZhbHVlIOKAlFxuICAvLyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgYm91bmQsIG9yIGFzc2lnbmVkIHRvLiBJbiBvcmRlciB0byBkbyBzbywgdGhleSBwZXJmb3JtXG4gIC8vIGEgdmFyaWV0eSBvZiBjaGVja3M6XG4gIC8vXG4gIC8vIC0gQ2hlY2sgdGhhdCBub25lIG9mIHRoZSBib3VuZC9hc3NpZ25lZC10byBpZGVudGlmaWVycyBhcmUgcmVzZXJ2ZWQgd29yZHMuXG4gIC8vIC0gUmVjb3JkIG5hbWUgZGVjbGFyYXRpb25zIGZvciBiaW5kaW5ncyBpbiB0aGUgYXBwcm9wcmlhdGUgc2NvcGUuXG4gIC8vIC0gQ2hlY2sgZHVwbGljYXRlIGFyZ3VtZW50IG5hbWVzLCBpZiBjaGVja0NsYXNoZXMgaXMgc2V0LlxuICAvL1xuICAvLyBJZiBhIGNvbXBsZXggYmluZGluZyBwYXR0ZXJuIGlzIGVuY291bnRlcmVkIChlLmcuLCBvYmplY3QgYW5kIGFycmF5XG4gIC8vIGRlc3RydWN0dXJpbmcpLCB0aGUgZW50aXJlIHBhdHRlcm4gaXMgcmVjdXJzaXZlbHkgY2hlY2tlZC5cbiAgLy9cbiAgLy8gVGhlcmUgYXJlIHRocmVlIHZlcnNpb25zIG9mIGNoZWNrTFZhbCooKSBhcHByb3ByaWF0ZSBmb3IgZGlmZmVyZW50XG4gIC8vIGNpcmN1bXN0YW5jZXM6XG4gIC8vXG4gIC8vIC0gY2hlY2tMVmFsU2ltcGxlKCkgc2hhbGwgYmUgdXNlZCBpZiB0aGUgc3ludGFjdGljIGNvbnN0cnVjdCBzdXBwb3J0c1xuICAvLyAgIG5vdGhpbmcgb3RoZXIgdGhhbiBpZGVudGlmaWVycyBhbmQgbWVtYmVyIGV4cHJlc3Npb25zLiBQYXJlbnRoZXNpemVkXG4gIC8vICAgZXhwcmVzc2lvbnMgYXJlIGFsc28gY29ycmVjdGx5IGhhbmRsZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IGFwcHJvcHJpYXRlIGZvclxuICAvLyAgIGNvbnN0cnVjdHMgZm9yIHdoaWNoIHRoZSBzcGVjIHNheXNcbiAgLy9cbiAgLy8gICA+IEl0IGlzIGEgU3ludGF4IEVycm9yIGlmIEFzc2lnbm1lbnRUYXJnZXRUeXBlIG9mIFt0aGUgcHJvZHVjdGlvbl0gaXMgbm90XG4gIC8vICAgPiBzaW1wbGUuXG4gIC8vXG4gIC8vICAgSXQgaXMgYWxzbyBhcHByb3ByaWF0ZSBmb3IgY2hlY2tpbmcgaWYgYW4gaWRlbnRpZmllciBpcyB2YWxpZCBhbmQgbm90XG4gIC8vICAgZGVmaW5lZCBlbHNld2hlcmUsIGxpa2UgaW1wb3J0IGRlY2xhcmF0aW9ucyBvciBmdW5jdGlvbi9jbGFzcyBpZGVudGlmaWVycy5cbiAgLy9cbiAgLy8gICBFeGFtcGxlcyB3aGVyZSB0aGlzIGlzIHVzZWQgaW5jbHVkZTpcbiAgLy8gICAgIGEgKz0g4oCmO1xuICAvLyAgICAgaW1wb3J0IGEgZnJvbSAn4oCmJztcbiAgLy8gICB3aGVyZSBhIGlzIHRoZSBub2RlIHRvIGJlIGNoZWNrZWQuXG4gIC8vXG4gIC8vIC0gY2hlY2tMVmFsUGF0dGVybigpIHNoYWxsIGJlIHVzZWQgaWYgdGhlIHN5bnRhY3RpYyBjb25zdHJ1Y3Qgc3VwcG9ydHNcbiAgLy8gICBhbnl0aGluZyBjaGVja0xWYWxTaW1wbGUoKSBzdXBwb3J0cywgYXMgd2VsbCBhcyBvYmplY3QgYW5kIGFycmF5XG4gIC8vICAgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJucy4gVGhpcyBpcyBnZW5lcmFsbHkgYXBwcm9wcmlhdGUgZm9yIGNvbnN0cnVjdHMgZm9yXG4gIC8vICAgd2hpY2ggdGhlIHNwZWMgc2F5c1xuICAvL1xuICAvLyAgID4gSXQgaXMgYSBTeW50YXggRXJyb3IgaWYgW3RoZSBwcm9kdWN0aW9uXSBpcyBuZWl0aGVyIGFuIE9iamVjdExpdGVyYWwgbm9yXG4gIC8vICAgPiBhbiBBcnJheUxpdGVyYWwgYW5kIEFzc2lnbm1lbnRUYXJnZXRUeXBlIG9mIFt0aGUgcHJvZHVjdGlvbl0gaXMgbm90XG4gIC8vICAgPiBzaW1wbGUuXG4gIC8vXG4gIC8vICAgRXhhbXBsZXMgd2hlcmUgdGhpcyBpcyB1c2VkIGluY2x1ZGU6XG4gIC8vICAgICAoYSA9IOKApik7XG4gIC8vICAgICBjb25zdCBhID0g4oCmO1xuICAvLyAgICAgdHJ5IHsg4oCmIH0gY2F0Y2ggKGEpIHsg4oCmIH1cbiAgLy8gICB3aGVyZSBhIGlzIHRoZSBub2RlIHRvIGJlIGNoZWNrZWQuXG4gIC8vXG4gIC8vIC0gY2hlY2tMVmFsSW5uZXJQYXR0ZXJuKCkgc2hhbGwgYmUgdXNlZCBpZiB0aGUgc3ludGFjdGljIGNvbnN0cnVjdCBzdXBwb3J0c1xuICAvLyAgIGFueXRoaW5nIGNoZWNrTFZhbFBhdHRlcm4oKSBzdXBwb3J0cywgYXMgd2VsbCBhcyBkZWZhdWx0IGFzc2lnbm1lbnRcbiAgLy8gICBwYXR0ZXJucywgcmVzdCBlbGVtZW50cywgYW5kIG90aGVyIGNvbnN0cnVjdHMgdGhhdCBtYXkgYXBwZWFyIHdpdGhpbiBhblxuICAvLyAgIG9iamVjdCBvciBhcnJheSBkZXN0cnVjdHVyaW5nIHBhdHRlcm4uXG4gIC8vXG4gIC8vICAgQXMgYSBzcGVjaWFsIGNhc2UsIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYWxzbyB1c2UgY2hlY2tMVmFsSW5uZXJQYXR0ZXJuKCksXG4gIC8vICAgYXMgdGhleSBhbHNvIHN1cHBvcnQgZGVmYXVsdHMgYW5kIHJlc3QgY29uc3RydWN0cy5cbiAgLy9cbiAgLy8gVGhlc2UgZnVuY3Rpb25zIGRlbGliZXJhdGVseSBzdXBwb3J0IGJvdGggYXNzaWdubWVudCBhbmQgYmluZGluZyBjb25zdHJ1Y3RzLFxuICAvLyBhcyB0aGUgbG9naWMgZm9yIGJvdGggaXMgZXhjZWVkaW5nbHkgc2ltaWxhci4gSWYgdGhlIG5vZGUgaXMgdGhlIHRhcmdldCBvZlxuICAvLyBhbiBhc3NpZ25tZW50LCB0aGVuIGJpbmRpbmdUeXBlIHNob3VsZCBiZSBzZXQgdG8gQklORF9OT05FLiBPdGhlcndpc2UsIGl0XG4gIC8vIHNob3VsZCBiZSBzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIEJJTkRfKiBjb25zdGFudCwgbGlrZSBCSU5EX1ZBUiBvclxuICAvLyBCSU5EX0xFWElDQUwuXG4gIC8vXG4gIC8vIElmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIG5vbi1CSU5EX05PTkUgYmluZGluZ1R5cGUsIHRoZW5cbiAgLy8gYWRkaXRpb25hbGx5IGEgY2hlY2tDbGFzaGVzIG9iamVjdCBtYXkgYmUgc3BlY2lmaWVkIHRvIGFsbG93IGNoZWNraW5nIGZvclxuICAvLyBkdXBsaWNhdGUgYXJndW1lbnQgbmFtZXMuIGNoZWNrQ2xhc2hlcyBpcyBpZ25vcmVkIGlmIHRoZSBwcm92aWRlZCBjb25zdHJ1Y3RcbiAgLy8gaXMgYW4gYXNzaWdubWVudCAoaS5lLiwgYmluZGluZ1R5cGUgaXMgQklORF9OT05FKS5cblxuICBwcCQ3LmNoZWNrTFZhbFNpbXBsZSA9IGZ1bmN0aW9uKGV4cHIsIGJpbmRpbmdUeXBlLCBjaGVja0NsYXNoZXMpIHtcbiAgICBpZiAoIGJpbmRpbmdUeXBlID09PSB2b2lkIDAgKSBiaW5kaW5nVHlwZSA9IEJJTkRfTk9ORTtcblxuICAgIHZhciBpc0JpbmQgPSBiaW5kaW5nVHlwZSAhPT0gQklORF9OT05FO1xuXG4gICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICBjYXNlIFwiSWRlbnRpZmllclwiOlxuICAgICAgaWYgKHRoaXMuc3RyaWN0ICYmIHRoaXMucmVzZXJ2ZWRXb3Jkc1N0cmljdEJpbmQudGVzdChleHByLm5hbWUpKVxuICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShleHByLnN0YXJ0LCAoaXNCaW5kID8gXCJCaW5kaW5nIFwiIDogXCJBc3NpZ25pbmcgdG8gXCIpICsgZXhwci5uYW1lICsgXCIgaW4gc3RyaWN0IG1vZGVcIik7IH1cbiAgICAgIGlmIChpc0JpbmQpIHtcbiAgICAgICAgaWYgKGJpbmRpbmdUeXBlID09PSBCSU5EX0xFWElDQUwgJiYgZXhwci5uYW1lID09PSBcImxldFwiKVxuICAgICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGV4cHIuc3RhcnQsIFwibGV0IGlzIGRpc2FsbG93ZWQgYXMgYSBsZXhpY2FsbHkgYm91bmQgbmFtZVwiKTsgfVxuICAgICAgICBpZiAoY2hlY2tDbGFzaGVzKSB7XG4gICAgICAgICAgaWYgKGhhc093bihjaGVja0NsYXNoZXMsIGV4cHIubmFtZSkpXG4gICAgICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShleHByLnN0YXJ0LCBcIkFyZ3VtZW50IG5hbWUgY2xhc2hcIik7IH1cbiAgICAgICAgICBjaGVja0NsYXNoZXNbZXhwci5uYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJpbmRpbmdUeXBlICE9PSBCSU5EX09VVFNJREUpIHsgdGhpcy5kZWNsYXJlTmFtZShleHByLm5hbWUsIGJpbmRpbmdUeXBlLCBleHByLnN0YXJ0KTsgfVxuICAgICAgfVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJDaGFpbkV4cHJlc3Npb25cIjpcbiAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShleHByLnN0YXJ0LCBcIk9wdGlvbmFsIGNoYWluaW5nIGNhbm5vdCBhcHBlYXIgaW4gbGVmdC1oYW5kIHNpZGVcIik7XG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIk1lbWJlckV4cHJlc3Npb25cIjpcbiAgICAgIGlmIChpc0JpbmQpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGV4cHIuc3RhcnQsIFwiQmluZGluZyBtZW1iZXIgZXhwcmVzc2lvblwiKTsgfVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiOlxuICAgICAgaWYgKGlzQmluZCkgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgXCJCaW5kaW5nIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvblwiKTsgfVxuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tMVmFsU2ltcGxlKGV4cHIuZXhwcmVzc2lvbiwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcylcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLnJhaXNlKGV4cHIuc3RhcnQsIChpc0JpbmQgPyBcIkJpbmRpbmdcIiA6IFwiQXNzaWduaW5nIHRvXCIpICsgXCIgcnZhbHVlXCIpO1xuICAgIH1cbiAgfTtcblxuICBwcCQ3LmNoZWNrTFZhbFBhdHRlcm4gPSBmdW5jdGlvbihleHByLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKSB7XG4gICAgaWYgKCBiaW5kaW5nVHlwZSA9PT0gdm9pZCAwICkgYmluZGluZ1R5cGUgPSBCSU5EX05PTkU7XG5cbiAgICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgIGNhc2UgXCJPYmplY3RQYXR0ZXJuXCI6XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IGV4cHIucHJvcGVydGllczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIHByb3AgPSBsaXN0W2ldO1xuXG4gICAgICB0aGlzLmNoZWNrTFZhbElubmVyUGF0dGVybihwcm9wLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiQXJyYXlQYXR0ZXJuXCI6XG4gICAgICBmb3IgKHZhciBpJDEgPSAwLCBsaXN0JDEgPSBleHByLmVsZW1lbnRzOyBpJDEgPCBsaXN0JDEubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgICAgICB2YXIgZWxlbSA9IGxpc3QkMVtpJDFdO1xuXG4gICAgICBpZiAoZWxlbSkgeyB0aGlzLmNoZWNrTFZhbElubmVyUGF0dGVybihlbGVtLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTsgfVxuICAgICAgfVxuICAgICAgYnJlYWtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLmNoZWNrTFZhbFNpbXBsZShleHByLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTtcbiAgICB9XG4gIH07XG5cbiAgcHAkNy5jaGVja0xWYWxJbm5lclBhdHRlcm4gPSBmdW5jdGlvbihleHByLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKSB7XG4gICAgaWYgKCBiaW5kaW5nVHlwZSA9PT0gdm9pZCAwICkgYmluZGluZ1R5cGUgPSBCSU5EX05PTkU7XG5cbiAgICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgIGNhc2UgXCJQcm9wZXJ0eVwiOlxuICAgICAgLy8gQXNzaWdubWVudFByb3BlcnR5IGhhcyB0eXBlID09PSBcIlByb3BlcnR5XCJcbiAgICAgIHRoaXMuY2hlY2tMVmFsSW5uZXJQYXR0ZXJuKGV4cHIudmFsdWUsIGJpbmRpbmdUeXBlLCBjaGVja0NsYXNoZXMpO1xuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJBc3NpZ25tZW50UGF0dGVyblwiOlxuICAgICAgdGhpcy5jaGVja0xWYWxQYXR0ZXJuKGV4cHIubGVmdCwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcyk7XG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIlJlc3RFbGVtZW50XCI6XG4gICAgICB0aGlzLmNoZWNrTFZhbFBhdHRlcm4oZXhwci5hcmd1bWVudCwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcyk7XG4gICAgICBicmVha1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMuY2hlY2tMVmFsUGF0dGVybihleHByLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gVGhlIGFsZ29yaXRobSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcmVnZXhwIGNhbiBhcHBlYXIgYXQgYVxuICAvLyBnaXZlbiBwb2ludCBpbiB0aGUgcHJvZ3JhbSBpcyBsb29zZWx5IGJhc2VkIG9uIHN3ZWV0LmpzJyBhcHByb2FjaC5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3N3ZWV0LmpzL3dpa2kvZGVzaWduXG5cblxuICB2YXIgVG9rQ29udGV4dCA9IGZ1bmN0aW9uIFRva0NvbnRleHQodG9rZW4sIGlzRXhwciwgcHJlc2VydmVTcGFjZSwgb3ZlcnJpZGUsIGdlbmVyYXRvcikge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLmlzRXhwciA9ICEhaXNFeHByO1xuICAgIHRoaXMucHJlc2VydmVTcGFjZSA9ICEhcHJlc2VydmVTcGFjZTtcbiAgICB0aGlzLm92ZXJyaWRlID0gb3ZlcnJpZGU7XG4gICAgdGhpcy5nZW5lcmF0b3IgPSAhIWdlbmVyYXRvcjtcbiAgfTtcblxuICB2YXIgdHlwZXMgPSB7XG4gICAgYl9zdGF0OiBuZXcgVG9rQ29udGV4dChcIntcIiwgZmFsc2UpLFxuICAgIGJfZXhwcjogbmV3IFRva0NvbnRleHQoXCJ7XCIsIHRydWUpLFxuICAgIGJfdG1wbDogbmV3IFRva0NvbnRleHQoXCIke1wiLCBmYWxzZSksXG4gICAgcF9zdGF0OiBuZXcgVG9rQ29udGV4dChcIihcIiwgZmFsc2UpLFxuICAgIHBfZXhwcjogbmV3IFRva0NvbnRleHQoXCIoXCIsIHRydWUpLFxuICAgIHFfdG1wbDogbmV3IFRva0NvbnRleHQoXCJgXCIsIHRydWUsIHRydWUsIGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLnRyeVJlYWRUZW1wbGF0ZVRva2VuKCk7IH0pLFxuICAgIGZfc3RhdDogbmV3IFRva0NvbnRleHQoXCJmdW5jdGlvblwiLCBmYWxzZSksXG4gICAgZl9leHByOiBuZXcgVG9rQ29udGV4dChcImZ1bmN0aW9uXCIsIHRydWUpLFxuICAgIGZfZXhwcl9nZW46IG5ldyBUb2tDb250ZXh0KFwiZnVuY3Rpb25cIiwgdHJ1ZSwgZmFsc2UsIG51bGwsIHRydWUpLFxuICAgIGZfZ2VuOiBuZXcgVG9rQ29udGV4dChcImZ1bmN0aW9uXCIsIGZhbHNlLCBmYWxzZSwgbnVsbCwgdHJ1ZSlcbiAgfTtcblxuICB2YXIgcHAkNiA9IFBhcnNlci5wcm90b3R5cGU7XG5cbiAgcHAkNi5pbml0aWFsQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbdHlwZXMuYl9zdGF0XVxuICB9O1xuXG4gIHBwJDYuY3VyQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHRbdGhpcy5jb250ZXh0Lmxlbmd0aCAtIDFdXG4gIH07XG5cbiAgcHAkNi5icmFjZUlzQmxvY2sgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLmN1ckNvbnRleHQoKTtcbiAgICBpZiAocGFyZW50ID09PSB0eXBlcy5mX2V4cHIgfHwgcGFyZW50ID09PSB0eXBlcy5mX3N0YXQpXG4gICAgICB7IHJldHVybiB0cnVlIH1cbiAgICBpZiAocHJldlR5cGUgPT09IHR5cGVzJDEuY29sb24gJiYgKHBhcmVudCA9PT0gdHlwZXMuYl9zdGF0IHx8IHBhcmVudCA9PT0gdHlwZXMuYl9leHByKSlcbiAgICAgIHsgcmV0dXJuICFwYXJlbnQuaXNFeHByIH1cblxuICAgIC8vIFRoZSBjaGVjayBmb3IgYHR0Lm5hbWUgJiYgZXhwckFsbG93ZWRgIGRldGVjdHMgd2hldGhlciB3ZSBhcmVcbiAgICAvLyBhZnRlciBhIGB5aWVsZGAgb3IgYG9mYCBjb25zdHJ1Y3QuIFNlZSB0aGUgYHVwZGF0ZUNvbnRleHRgIGZvclxuICAgIC8vIGB0dC5uYW1lYC5cbiAgICBpZiAocHJldlR5cGUgPT09IHR5cGVzJDEuX3JldHVybiB8fCBwcmV2VHlwZSA9PT0gdHlwZXMkMS5uYW1lICYmIHRoaXMuZXhwckFsbG93ZWQpXG4gICAgICB7IHJldHVybiBsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5zdGFydCkpIH1cbiAgICBpZiAocHJldlR5cGUgPT09IHR5cGVzJDEuX2Vsc2UgfHwgcHJldlR5cGUgPT09IHR5cGVzJDEuc2VtaSB8fCBwcmV2VHlwZSA9PT0gdHlwZXMkMS5lb2YgfHwgcHJldlR5cGUgPT09IHR5cGVzJDEucGFyZW5SIHx8IHByZXZUeXBlID09PSB0eXBlcyQxLmFycm93KVxuICAgICAgeyByZXR1cm4gdHJ1ZSB9XG4gICAgaWYgKHByZXZUeXBlID09PSB0eXBlcyQxLmJyYWNlTClcbiAgICAgIHsgcmV0dXJuIHBhcmVudCA9PT0gdHlwZXMuYl9zdGF0IH1cbiAgICBpZiAocHJldlR5cGUgPT09IHR5cGVzJDEuX3ZhciB8fCBwcmV2VHlwZSA9PT0gdHlwZXMkMS5fY29uc3QgfHwgcHJldlR5cGUgPT09IHR5cGVzJDEubmFtZSlcbiAgICAgIHsgcmV0dXJuIGZhbHNlIH1cbiAgICByZXR1cm4gIXRoaXMuZXhwckFsbG93ZWRcbiAgfTtcblxuICBwcCQ2LmluR2VuZXJhdG9yQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmNvbnRleHQubGVuZ3RoIC0gMTsgaSA+PSAxOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0W2ldO1xuICAgICAgaWYgKGNvbnRleHQudG9rZW4gPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgeyByZXR1cm4gY29udGV4dC5nZW5lcmF0b3IgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICBwcCQ2LnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICAgIHZhciB1cGRhdGUsIHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgaWYgKHR5cGUua2V5d29yZCAmJiBwcmV2VHlwZSA9PT0gdHlwZXMkMS5kb3QpXG4gICAgICB7IHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTsgfVxuICAgIGVsc2UgaWYgKHVwZGF0ZSA9IHR5cGUudXBkYXRlQ29udGV4dClcbiAgICAgIHsgdXBkYXRlLmNhbGwodGhpcywgcHJldlR5cGUpOyB9XG4gICAgZWxzZVxuICAgICAgeyB0aGlzLmV4cHJBbGxvd2VkID0gdHlwZS5iZWZvcmVFeHByOyB9XG4gIH07XG5cbiAgLy8gVXNlZCB0byBoYW5kbGUgZWdkZSBjYXNlcyB3aGVuIHRva2VuIGNvbnRleHQgY291bGQgbm90IGJlIGluZmVycmVkIGNvcnJlY3RseSBkdXJpbmcgdG9rZW5pemF0aW9uIHBoYXNlXG5cbiAgcHAkNi5vdmVycmlkZUNvbnRleHQgPSBmdW5jdGlvbih0b2tlbkN0eCkge1xuICAgIGlmICh0aGlzLmN1ckNvbnRleHQoKSAhPT0gdG9rZW5DdHgpIHtcbiAgICAgIHRoaXMuY29udGV4dFt0aGlzLmNvbnRleHQubGVuZ3RoIC0gMV0gPSB0b2tlbkN0eDtcbiAgICB9XG4gIH07XG5cbiAgLy8gVG9rZW4tc3BlY2lmaWMgY29udGV4dCB1cGRhdGUgY29kZVxuXG4gIHR5cGVzJDEucGFyZW5SLnVwZGF0ZUNvbnRleHQgPSB0eXBlcyQxLmJyYWNlUi51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBvdXQgPSB0aGlzLmNvbnRleHQucG9wKCk7XG4gICAgaWYgKG91dCA9PT0gdHlwZXMuYl9zdGF0ICYmIHRoaXMuY3VyQ29udGV4dCgpLnRva2VuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIG91dCA9IHRoaXMuY29udGV4dC5wb3AoKTtcbiAgICB9XG4gICAgdGhpcy5leHByQWxsb3dlZCA9ICFvdXQuaXNFeHByO1xuICB9O1xuXG4gIHR5cGVzJDEuYnJhY2VMLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICAgIHRoaXMuY29udGV4dC5wdXNoKHRoaXMuYnJhY2VJc0Jsb2NrKHByZXZUeXBlKSA/IHR5cGVzLmJfc3RhdCA6IHR5cGVzLmJfZXhwcik7XG4gICAgdGhpcy5leHByQWxsb3dlZCA9IHRydWU7XG4gIH07XG5cbiAgdHlwZXMkMS5kb2xsYXJCcmFjZUwudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY29udGV4dC5wdXNoKHR5cGVzLmJfdG1wbCk7XG4gICAgdGhpcy5leHByQWxsb3dlZCA9IHRydWU7XG4gIH07XG5cbiAgdHlwZXMkMS5wYXJlbkwudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gICAgdmFyIHN0YXRlbWVudFBhcmVucyA9IHByZXZUeXBlID09PSB0eXBlcyQxLl9pZiB8fCBwcmV2VHlwZSA9PT0gdHlwZXMkMS5fZm9yIHx8IHByZXZUeXBlID09PSB0eXBlcyQxLl93aXRoIHx8IHByZXZUeXBlID09PSB0eXBlcyQxLl93aGlsZTtcbiAgICB0aGlzLmNvbnRleHQucHVzaChzdGF0ZW1lbnRQYXJlbnMgPyB0eXBlcy5wX3N0YXQgOiB0eXBlcy5wX2V4cHIpO1xuICAgIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlO1xuICB9O1xuXG4gIHR5cGVzJDEuaW5jRGVjLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAvLyB0b2tFeHByQWxsb3dlZCBzdGF5cyB1bmNoYW5nZWRcbiAgfTtcblxuICB0eXBlcyQxLl9mdW5jdGlvbi51cGRhdGVDb250ZXh0ID0gdHlwZXMkMS5fY2xhc3MudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gICAgaWYgKHByZXZUeXBlLmJlZm9yZUV4cHIgJiYgcHJldlR5cGUgIT09IHR5cGVzJDEuX2Vsc2UgJiZcbiAgICAgICAgIShwcmV2VHlwZSA9PT0gdHlwZXMkMS5zZW1pICYmIHRoaXMuY3VyQ29udGV4dCgpICE9PSB0eXBlcy5wX3N0YXQpICYmXG4gICAgICAgICEocHJldlR5cGUgPT09IHR5cGVzJDEuX3JldHVybiAmJiBsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5zdGFydCkpKSAmJlxuICAgICAgICAhKChwcmV2VHlwZSA9PT0gdHlwZXMkMS5jb2xvbiB8fCBwcmV2VHlwZSA9PT0gdHlwZXMkMS5icmFjZUwpICYmIHRoaXMuY3VyQ29udGV4dCgpID09PSB0eXBlcy5iX3N0YXQpKVxuICAgICAgeyB0aGlzLmNvbnRleHQucHVzaCh0eXBlcy5mX2V4cHIpOyB9XG4gICAgZWxzZVxuICAgICAgeyB0aGlzLmNvbnRleHQucHVzaCh0eXBlcy5mX3N0YXQpOyB9XG4gICAgdGhpcy5leHByQWxsb3dlZCA9IGZhbHNlO1xuICB9O1xuXG4gIHR5cGVzJDEuYmFja1F1b3RlLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jdXJDb250ZXh0KCkgPT09IHR5cGVzLnFfdG1wbClcbiAgICAgIHsgdGhpcy5jb250ZXh0LnBvcCgpOyB9XG4gICAgZWxzZVxuICAgICAgeyB0aGlzLmNvbnRleHQucHVzaCh0eXBlcy5xX3RtcGwpOyB9XG4gICAgdGhpcy5leHByQWxsb3dlZCA9IGZhbHNlO1xuICB9O1xuXG4gIHR5cGVzJDEuc3Rhci51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgICBpZiAocHJldlR5cGUgPT09IHR5cGVzJDEuX2Z1bmN0aW9uKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbnRleHQubGVuZ3RoIC0gMTtcbiAgICAgIGlmICh0aGlzLmNvbnRleHRbaW5kZXhdID09PSB0eXBlcy5mX2V4cHIpXG4gICAgICAgIHsgdGhpcy5jb250ZXh0W2luZGV4XSA9IHR5cGVzLmZfZXhwcl9nZW47IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyB0aGlzLmNvbnRleHRbaW5kZXhdID0gdHlwZXMuZl9nZW47IH1cbiAgICB9XG4gICAgdGhpcy5leHByQWxsb3dlZCA9IHRydWU7XG4gIH07XG5cbiAgdHlwZXMkMS5uYW1lLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICAgIHZhciBhbGxvd2VkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHByZXZUeXBlICE9PSB0eXBlcyQxLmRvdCkge1xuICAgICAgaWYgKHRoaXMudmFsdWUgPT09IFwib2ZcIiAmJiAhdGhpcy5leHByQWxsb3dlZCB8fFxuICAgICAgICAgIHRoaXMudmFsdWUgPT09IFwieWllbGRcIiAmJiB0aGlzLmluR2VuZXJhdG9yQ29udGV4dCgpKVxuICAgICAgICB7IGFsbG93ZWQgPSB0cnVlOyB9XG4gICAgfVxuICAgIHRoaXMuZXhwckFsbG93ZWQgPSBhbGxvd2VkO1xuICB9O1xuXG4gIC8vIEEgcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyIG9wZXJhdGVzIGJ5IGRlZmluaW5nIGZ1bmN0aW9ucyBmb3IgYWxsXG4gIC8vIHN5bnRhY3RpYyBlbGVtZW50cywgYW5kIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgdGhvc2UsIGVhY2ggZnVuY3Rpb25cbiAgLy8gYWR2YW5jaW5nIHRoZSBpbnB1dCBzdHJlYW0gYW5kIHJldHVybmluZyBhbiBBU1Qgbm9kZS4gUHJlY2VkZW5jZVxuICAvLyBvZiBjb25zdHJ1Y3RzIChmb3IgZXhhbXBsZSwgdGhlIGZhY3QgdGhhdCBgIXhbMV1gIG1lYW5zIGAhKHhbMV0pYFxuICAvLyBpbnN0ZWFkIG9mIGAoIXgpWzFdYCBpcyBoYW5kbGVkIGJ5IHRoZSBmYWN0IHRoYXQgdGhlIHBhcnNlclxuICAvLyBmdW5jdGlvbiB0aGF0IHBhcnNlcyB1bmFyeSBwcmVmaXggb3BlcmF0b3JzIGlzIGNhbGxlZCBmaXJzdCwgYW5kXG4gIC8vIGluIHR1cm4gY2FsbHMgdGhlIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGBbXWAgc3Vic2NyaXB0cyDigJQgdGhhdFxuICAvLyB3YXksIGl0J2xsIHJlY2VpdmUgdGhlIG5vZGUgZm9yIGB4WzFdYCBhbHJlYWR5IHBhcnNlZCwgYW5kIHdyYXBzXG4gIC8vICp0aGF0KiBpbiB0aGUgdW5hcnkgb3BlcmF0b3Igbm9kZS5cbiAgLy9cbiAgLy8gQWNvcm4gdXNlcyBhbiBbb3BlcmF0b3IgcHJlY2VkZW5jZSBwYXJzZXJdW29wcF0gdG8gaGFuZGxlIGJpbmFyeVxuICAvLyBvcGVyYXRvciBwcmVjZWRlbmNlLCBiZWNhdXNlIGl0IGlzIG11Y2ggbW9yZSBjb21wYWN0IHRoYW4gdXNpbmdcbiAgLy8gdGhlIHRlY2huaXF1ZSBvdXRsaW5lZCBhYm92ZSwgd2hpY2ggdXNlcyBkaWZmZXJlbnQsIG5lc3RpbmdcbiAgLy8gZnVuY3Rpb25zIHRvIHNwZWNpZnkgcHJlY2VkZW5jZSwgZm9yIGFsbCBvZiB0aGUgdGVuIGJpbmFyeVxuICAvLyBwcmVjZWRlbmNlIGxldmVscyB0aGF0IEphdmFTY3JpcHQgZGVmaW5lcy5cbiAgLy9cbiAgLy8gW29wcF06IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3BlcmF0b3ItcHJlY2VkZW5jZV9wYXJzZXJcblxuXG4gIHZhciBwcCQ1ID0gUGFyc2VyLnByb3RvdHlwZTtcblxuICAvLyBDaGVjayBpZiBwcm9wZXJ0eSBuYW1lIGNsYXNoZXMgd2l0aCBhbHJlYWR5IGFkZGVkLlxuICAvLyBPYmplY3QvY2xhc3MgZ2V0dGVycyBhbmQgc2V0dGVycyBhcmUgbm90IGFsbG93ZWQgdG8gY2xhc2gg4oCUXG4gIC8vIGVpdGhlciB3aXRoIGVhY2ggb3RoZXIgb3Igd2l0aCBhbiBpbml0IHByb3BlcnR5IOKAlCBhbmQgaW5cbiAgLy8gc3RyaWN0IG1vZGUsIGluaXQgcHJvcGVydGllcyBhcmUgYWxzbyBub3QgYWxsb3dlZCB0byBiZSByZXBlYXRlZC5cblxuICBwcCQ1LmNoZWNrUHJvcENsYXNoID0gZnVuY3Rpb24ocHJvcCwgcHJvcEhhc2gsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiYgcHJvcC50eXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIilcbiAgICAgIHsgcmV0dXJuIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgKHByb3AuY29tcHV0ZWQgfHwgcHJvcC5tZXRob2QgfHwgcHJvcC5zaG9ydGhhbmQpKVxuICAgICAgeyByZXR1cm4gfVxuICAgIHZhciBrZXkgPSBwcm9wLmtleTtcbiAgICB2YXIgbmFtZTtcbiAgICBzd2l0Y2ggKGtleS50eXBlKSB7XG4gICAgY2FzZSBcIklkZW50aWZpZXJcIjogbmFtZSA9IGtleS5uYW1lOyBicmVha1xuICAgIGNhc2UgXCJMaXRlcmFsXCI6IG5hbWUgPSBTdHJpbmcoa2V5LnZhbHVlKTsgYnJlYWtcbiAgICBkZWZhdWx0OiByZXR1cm5cbiAgICB9XG4gICAgdmFyIGtpbmQgPSBwcm9wLmtpbmQ7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgICBpZiAobmFtZSA9PT0gXCJfX3Byb3RvX19cIiAmJiBraW5kID09PSBcImluaXRcIikge1xuICAgICAgICBpZiAocHJvcEhhc2gucHJvdG8pIHtcbiAgICAgICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuZG91YmxlUHJvdG8gPCAwKSB7XG4gICAgICAgICAgICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuZG91YmxlUHJvdG8gPSBrZXkuc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShrZXkuc3RhcnQsIFwiUmVkZWZpbml0aW9uIG9mIF9fcHJvdG9fXyBwcm9wZXJ0eVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHJvcEhhc2gucHJvdG8gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG5hbWUgPSBcIiRcIiArIG5hbWU7XG4gICAgdmFyIG90aGVyID0gcHJvcEhhc2hbbmFtZV07XG4gICAgaWYgKG90aGVyKSB7XG4gICAgICB2YXIgcmVkZWZpbml0aW9uO1xuICAgICAgaWYgKGtpbmQgPT09IFwiaW5pdFwiKSB7XG4gICAgICAgIHJlZGVmaW5pdGlvbiA9IHRoaXMuc3RyaWN0ICYmIG90aGVyLmluaXQgfHwgb3RoZXIuZ2V0IHx8IG90aGVyLnNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZGVmaW5pdGlvbiA9IG90aGVyLmluaXQgfHwgb3RoZXJba2luZF07XG4gICAgICB9XG4gICAgICBpZiAocmVkZWZpbml0aW9uKVxuICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShrZXkuc3RhcnQsIFwiUmVkZWZpbml0aW9uIG9mIHByb3BlcnR5XCIpOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG90aGVyID0gcHJvcEhhc2hbbmFtZV0gPSB7XG4gICAgICAgIGluaXQ6IGZhbHNlLFxuICAgICAgICBnZXQ6IGZhbHNlLFxuICAgICAgICBzZXQ6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBvdGhlcltraW5kXSA9IHRydWU7XG4gIH07XG5cbiAgLy8gIyMjIEV4cHJlc3Npb24gcGFyc2luZ1xuXG4gIC8vIFRoZXNlIG5lc3QsIGZyb20gdGhlIG1vc3QgZ2VuZXJhbCBleHByZXNzaW9uIHR5cGUgYXQgdGhlIHRvcCB0b1xuICAvLyAnYXRvbWljJywgbm9uZGl2aXNpYmxlIGV4cHJlc3Npb24gdHlwZXMgYXQgdGhlIGJvdHRvbS4gTW9zdCBvZlxuICAvLyB0aGUgZnVuY3Rpb25zIHdpbGwgc2ltcGx5IGxldCB0aGUgZnVuY3Rpb24ocykgYmVsb3cgdGhlbSBwYXJzZSxcbiAgLy8gYW5kLCAqaWYqIHRoZSBzeW50YWN0aWMgY29uc3RydWN0IHRoZXkgaGFuZGxlIGlzIHByZXNlbnQsIHdyYXBcbiAgLy8gdGhlIEFTVCBub2RlIHRoYXQgdGhlIGlubmVyIHBhcnNlciBnYXZlIHRoZW0gaW4gYW5vdGhlciBub2RlLlxuXG4gIC8vIFBhcnNlIGEgZnVsbCBleHByZXNzaW9uLiBUaGUgb3B0aW9uYWwgYXJndW1lbnRzIGFyZSB1c2VkIHRvXG4gIC8vIGZvcmJpZCB0aGUgYGluYCBvcGVyYXRvciAoaW4gZm9yIGxvb3BzIGluaXRhbGl6YXRpb24gZXhwcmVzc2lvbnMpXG4gIC8vIGFuZCBwcm92aWRlIHJlZmVyZW5jZSBmb3Igc3RvcmluZyAnPScgb3BlcmF0b3IgaW5zaWRlIHNob3J0aGFuZFxuICAvLyBwcm9wZXJ0eSBhc3NpZ25tZW50IGluIGNvbnRleHRzIHdoZXJlIGJvdGggb2JqZWN0IGV4cHJlc3Npb25cbiAgLy8gYW5kIG9iamVjdCBwYXR0ZXJuIG1pZ2h0IGFwcGVhciAoc28gaXQncyBwb3NzaWJsZSB0byByYWlzZVxuICAvLyBkZWxheWVkIHN5bnRheCBlcnJvciBhdCBjb3JyZWN0IHBvc2l0aW9uKS5cblxuICBwcCQ1LnBhcnNlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKGZvckluaXQsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZm9ySW5pdCwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5jb21tYSkge1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICBub2RlLmV4cHJlc3Npb25zID0gW2V4cHJdO1xuICAgICAgd2hpbGUgKHRoaXMuZWF0KHR5cGVzJDEuY29tbWEpKSB7IG5vZGUuZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZm9ySW5pdCwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykpOyB9XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiU2VxdWVuY2VFeHByZXNzaW9uXCIpXG4gICAgfVxuICAgIHJldHVybiBleHByXG4gIH07XG5cbiAgLy8gUGFyc2UgYW4gYXNzaWdubWVudCBleHByZXNzaW9uLiBUaGlzIGluY2x1ZGVzIGFwcGxpY2F0aW9ucyBvZlxuICAvLyBvcGVyYXRvcnMgbGlrZSBgKz1gLlxuXG4gIHBwJDUucGFyc2VNYXliZUFzc2lnbiA9IGZ1bmN0aW9uKGZvckluaXQsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGFmdGVyTGVmdFBhcnNlKSB7XG4gICAgaWYgKHRoaXMuaXNDb250ZXh0dWFsKFwieWllbGRcIikpIHtcbiAgICAgIGlmICh0aGlzLmluR2VuZXJhdG9yKSB7IHJldHVybiB0aGlzLnBhcnNlWWllbGQoZm9ySW5pdCkgfVxuICAgICAgLy8gVGhlIHRva2VuaXplciB3aWxsIGFzc3VtZSBhbiBleHByZXNzaW9uIGlzIGFsbG93ZWQgYWZ0ZXJcbiAgICAgIC8vIGB5aWVsZGAsIGJ1dCB0aGlzIGlzbid0IHRoYXQga2luZCBvZiB5aWVsZFxuICAgICAgZWxzZSB7IHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTsgfVxuICAgIH1cblxuICAgIHZhciBvd25EZXN0cnVjdHVyaW5nRXJyb3JzID0gZmFsc2UsIG9sZFBhcmVuQXNzaWduID0gLTEsIG9sZFRyYWlsaW5nQ29tbWEgPSAtMSwgb2xkRG91YmxlUHJvdG8gPSAtMTtcbiAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgb2xkUGFyZW5Bc3NpZ24gPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ247XG4gICAgICBvbGRUcmFpbGluZ0NvbW1hID0gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hO1xuICAgICAgb2xkRG91YmxlUHJvdG8gPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLmRvdWJsZVByb3RvO1xuICAgICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID0gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgPSBuZXcgRGVzdHJ1Y3R1cmluZ0Vycm9ycztcbiAgICAgIG93bkRlc3RydWN0dXJpbmdFcnJvcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLnBhcmVuTCB8fCB0aGlzLnR5cGUgPT09IHR5cGVzJDEubmFtZSkge1xuICAgICAgdGhpcy5wb3RlbnRpYWxBcnJvd0F0ID0gdGhpcy5zdGFydDtcbiAgICAgIHRoaXMucG90ZW50aWFsQXJyb3dJbkZvckF3YWl0ID0gZm9ySW5pdCA9PT0gXCJhd2FpdFwiO1xuICAgIH1cbiAgICB2YXIgbGVmdCA9IHRoaXMucGFyc2VNYXliZUNvbmRpdGlvbmFsKGZvckluaXQsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgIGlmIChhZnRlckxlZnRQYXJzZSkgeyBsZWZ0ID0gYWZ0ZXJMZWZ0UGFyc2UuY2FsbCh0aGlzLCBsZWZ0LCBzdGFydFBvcywgc3RhcnRMb2MpOyB9XG4gICAgaWYgKHRoaXMudHlwZS5pc0Fzc2lnbikge1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICBub2RlLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuZXEpXG4gICAgICAgIHsgbGVmdCA9IHRoaXMudG9Bc3NpZ25hYmxlKGxlZnQsIGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTsgfVxuICAgICAgaWYgKCFvd25EZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuZG91YmxlUHJvdG8gPSAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbiA+PSBsZWZ0LnN0YXJ0KVxuICAgICAgICB7IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuc2hvcnRoYW5kQXNzaWduID0gLTE7IH0gLy8gcmVzZXQgYmVjYXVzZSBzaG9ydGhhbmQgZGVmYXVsdCB3YXMgdXNlZCBjb3JyZWN0bHlcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuZXEpXG4gICAgICAgIHsgdGhpcy5jaGVja0xWYWxQYXR0ZXJuKGxlZnQpOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgdGhpcy5jaGVja0xWYWxTaW1wbGUobGVmdCk7IH1cbiAgICAgIG5vZGUubGVmdCA9IGxlZnQ7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIG5vZGUucmlnaHQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZm9ySW5pdCk7XG4gICAgICBpZiAob2xkRG91YmxlUHJvdG8gPiAtMSkgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLmRvdWJsZVByb3RvID0gb2xkRG91YmxlUHJvdG87IH1cbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3duRGVzdHJ1Y3R1cmluZ0Vycm9ycykgeyB0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTsgfVxuICAgIH1cbiAgICBpZiAob2xkUGFyZW5Bc3NpZ24gPiAtMSkgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSBvbGRQYXJlbkFzc2lnbjsgfVxuICAgIGlmIChvbGRUcmFpbGluZ0NvbW1hID4gLTEpIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID0gb2xkVHJhaWxpbmdDb21tYTsgfVxuICAgIHJldHVybiBsZWZ0XG4gIH07XG5cbiAgLy8gUGFyc2UgYSB0ZXJuYXJ5IGNvbmRpdGlvbmFsIChgPzpgKSBvcGVyYXRvci5cblxuICBwcCQ1LnBhcnNlTWF5YmVDb25kaXRpb25hbCA9IGZ1bmN0aW9uKGZvckluaXQsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlRXhwck9wcyhmb3JJbml0LCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICBpZiAodGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykpIHsgcmV0dXJuIGV4cHIgfVxuICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLnF1ZXN0aW9uKSkge1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICBub2RlLnRlc3QgPSBleHByO1xuICAgICAgbm9kZS5jb25zZXF1ZW50ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7XG4gICAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLmNvbG9uKTtcbiAgICAgIG5vZGUuYWx0ZXJuYXRlID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGZvckluaXQpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKVxuICAgIH1cbiAgICByZXR1cm4gZXhwclxuICB9O1xuXG4gIC8vIFN0YXJ0IHRoZSBwcmVjZWRlbmNlIHBhcnNlci5cblxuICBwcCQ1LnBhcnNlRXhwck9wcyA9IGZ1bmN0aW9uKGZvckluaXQsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlTWF5YmVVbmFyeShyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBmYWxzZSwgZmFsc2UsIGZvckluaXQpO1xuICAgIGlmICh0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSkgeyByZXR1cm4gZXhwciB9XG4gICAgcmV0dXJuIGV4cHIuc3RhcnQgPT09IHN0YXJ0UG9zICYmIGV4cHIudHlwZSA9PT0gXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiID8gZXhwciA6IHRoaXMucGFyc2VFeHByT3AoZXhwciwgc3RhcnRQb3MsIHN0YXJ0TG9jLCAtMSwgZm9ySW5pdClcbiAgfTtcblxuICAvLyBQYXJzZSBiaW5hcnkgb3BlcmF0b3JzIHdpdGggdGhlIG9wZXJhdG9yIHByZWNlZGVuY2UgcGFyc2luZ1xuICAvLyBhbGdvcml0aG0uIGBsZWZ0YCBpcyB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIG9wZXJhdG9yLlxuICAvLyBgbWluUHJlY2AgcHJvdmlkZXMgY29udGV4dCB0aGF0IGFsbG93cyB0aGUgZnVuY3Rpb24gdG8gc3RvcCBhbmRcbiAgLy8gZGVmZXIgZnVydGhlciBwYXJzZXIgdG8gb25lIG9mIGl0cyBjYWxsZXJzIHdoZW4gaXQgZW5jb3VudGVycyBhblxuICAvLyBvcGVyYXRvciB0aGF0IGhhcyBhIGxvd2VyIHByZWNlZGVuY2UgdGhhbiB0aGUgc2V0IGl0IGlzIHBhcnNpbmcuXG5cbiAgcHAkNS5wYXJzZUV4cHJPcCA9IGZ1bmN0aW9uKGxlZnQsIGxlZnRTdGFydFBvcywgbGVmdFN0YXJ0TG9jLCBtaW5QcmVjLCBmb3JJbml0KSB7XG4gICAgdmFyIHByZWMgPSB0aGlzLnR5cGUuYmlub3A7XG4gICAgaWYgKHByZWMgIT0gbnVsbCAmJiAoIWZvckluaXQgfHwgdGhpcy50eXBlICE9PSB0eXBlcyQxLl9pbikpIHtcbiAgICAgIGlmIChwcmVjID4gbWluUHJlYykge1xuICAgICAgICB2YXIgbG9naWNhbCA9IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5sb2dpY2FsT1IgfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLmxvZ2ljYWxBTkQ7XG4gICAgICAgIHZhciBjb2FsZXNjZSA9IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5jb2FsZXNjZTtcbiAgICAgICAgaWYgKGNvYWxlc2NlKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBwcmVjZWRlbmNlIG9mIGB0dC5jb2FsZXNjZWAgYXMgZXF1YWwgdG8gdGhlIHJhbmdlIG9mIGxvZ2ljYWwgZXhwcmVzc2lvbnMuXG4gICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIGBub2RlLnJpZ2h0YCBzaG91bGRuJ3QgY29udGFpbiBsb2dpY2FsIGV4cHJlc3Npb25zIGluIG9yZGVyIHRvIGNoZWNrIHRoZSBtaXhlZCBlcnJvci5cbiAgICAgICAgICBwcmVjID0gdHlwZXMkMS5sb2dpY2FsQU5ELmJpbm9wO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvcCA9IHRoaXMudmFsdWU7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgICAgIHZhciByaWdodCA9IHRoaXMucGFyc2VFeHByT3AodGhpcy5wYXJzZU1heWJlVW5hcnkobnVsbCwgZmFsc2UsIGZhbHNlLCBmb3JJbml0KSwgc3RhcnRQb3MsIHN0YXJ0TG9jLCBwcmVjLCBmb3JJbml0KTtcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmJ1aWxkQmluYXJ5KGxlZnRTdGFydFBvcywgbGVmdFN0YXJ0TG9jLCBsZWZ0LCByaWdodCwgb3AsIGxvZ2ljYWwgfHwgY29hbGVzY2UpO1xuICAgICAgICBpZiAoKGxvZ2ljYWwgJiYgdGhpcy50eXBlID09PSB0eXBlcyQxLmNvYWxlc2NlKSB8fCAoY29hbGVzY2UgJiYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5sb2dpY2FsT1IgfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLmxvZ2ljYWxBTkQpKSkge1xuICAgICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIkxvZ2ljYWwgZXhwcmVzc2lvbnMgYW5kIGNvYWxlc2NlIGV4cHJlc3Npb25zIGNhbm5vdCBiZSBtaXhlZC4gV3JhcCBlaXRoZXIgYnkgcGFyZW50aGVzZXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFeHByT3Aobm9kZSwgbGVmdFN0YXJ0UG9zLCBsZWZ0U3RhcnRMb2MsIG1pblByZWMsIGZvckluaXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsZWZ0XG4gIH07XG5cbiAgcHAkNS5idWlsZEJpbmFyeSA9IGZ1bmN0aW9uKHN0YXJ0UG9zLCBzdGFydExvYywgbGVmdCwgcmlnaHQsIG9wLCBsb2dpY2FsKSB7XG4gICAgaWYgKHJpZ2h0LnR5cGUgPT09IFwiUHJpdmF0ZUlkZW50aWZpZXJcIikgeyB0aGlzLnJhaXNlKHJpZ2h0LnN0YXJ0LCBcIlByaXZhdGUgaWRlbnRpZmllciBjYW4gb25seSBiZSBsZWZ0IHNpZGUgb2YgYmluYXJ5IGV4cHJlc3Npb25cIik7IH1cbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICBub2RlLmxlZnQgPSBsZWZ0O1xuICAgIG5vZGUub3BlcmF0b3IgPSBvcDtcbiAgICBub2RlLnJpZ2h0ID0gcmlnaHQ7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBsb2dpY2FsID8gXCJMb2dpY2FsRXhwcmVzc2lvblwiIDogXCJCaW5hcnlFeHByZXNzaW9uXCIpXG4gIH07XG5cbiAgLy8gUGFyc2UgdW5hcnkgb3BlcmF0b3JzLCBib3RoIHByZWZpeCBhbmQgcG9zdGZpeC5cblxuICBwcCQ1LnBhcnNlTWF5YmVVbmFyeSA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHNhd1VuYXJ5LCBpbmNEZWMsIGZvckluaXQpIHtcbiAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2MsIGV4cHI7XG4gICAgaWYgKHRoaXMuaXNDb250ZXh0dWFsKFwiYXdhaXRcIikgJiYgdGhpcy5jYW5Bd2FpdCkge1xuICAgICAgZXhwciA9IHRoaXMucGFyc2VBd2FpdChmb3JJbml0KTtcbiAgICAgIHNhd1VuYXJ5ID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5wcmVmaXgpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKSwgdXBkYXRlID0gdGhpcy50eXBlID09PSB0eXBlcyQxLmluY0RlYztcbiAgICAgIG5vZGUub3BlcmF0b3IgPSB0aGlzLnZhbHVlO1xuICAgICAgbm9kZS5wcmVmaXggPSB0cnVlO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZU1heWJlVW5hcnkobnVsbCwgdHJ1ZSwgdXBkYXRlLCBmb3JJbml0KTtcbiAgICAgIHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpO1xuICAgICAgaWYgKHVwZGF0ZSkgeyB0aGlzLmNoZWNrTFZhbFNpbXBsZShub2RlLmFyZ3VtZW50KTsgfVxuICAgICAgZWxzZSBpZiAodGhpcy5zdHJpY3QgJiYgbm9kZS5vcGVyYXRvciA9PT0gXCJkZWxldGVcIiAmJlxuICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudC50eXBlID09PSBcIklkZW50aWZpZXJcIilcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCJEZWxldGluZyBsb2NhbCB2YXJpYWJsZSBpbiBzdHJpY3QgbW9kZVwiKTsgfVxuICAgICAgZWxzZSBpZiAobm9kZS5vcGVyYXRvciA9PT0gXCJkZWxldGVcIiAmJiBpc1ByaXZhdGVGaWVsZEFjY2Vzcyhub2RlLmFyZ3VtZW50KSlcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCJQcml2YXRlIGZpZWxkcyBjYW4gbm90IGJlIGRlbGV0ZWRcIik7IH1cbiAgICAgIGVsc2UgeyBzYXdVbmFyeSA9IHRydWU7IH1cbiAgICAgIGV4cHIgPSB0aGlzLmZpbmlzaE5vZGUobm9kZSwgdXBkYXRlID8gXCJVcGRhdGVFeHByZXNzaW9uXCIgOiBcIlVuYXJ5RXhwcmVzc2lvblwiKTtcbiAgICB9IGVsc2UgaWYgKCFzYXdVbmFyeSAmJiB0aGlzLnR5cGUgPT09IHR5cGVzJDEucHJpdmF0ZUlkKSB7XG4gICAgICBpZiAoZm9ySW5pdCB8fCB0aGlzLnByaXZhdGVOYW1lU3RhY2subGVuZ3RoID09PSAwKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICBleHByID0gdGhpcy5wYXJzZVByaXZhdGVJZGVudCgpO1xuICAgICAgLy8gb25seSBjb3VsZCBiZSBwcml2YXRlIGZpZWxkcyBpbiAnaW4nLCBzdWNoIGFzICN4IGluIG9ialxuICAgICAgaWYgKHRoaXMudHlwZSAhPT0gdHlwZXMkMS5faW4pIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgZXhwciA9IHRoaXMucGFyc2VFeHByU3Vic2NyaXB0cyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBmb3JJbml0KTtcbiAgICAgIGlmICh0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSkgeyByZXR1cm4gZXhwciB9XG4gICAgICB3aGlsZSAodGhpcy50eXBlLnBvc3RmaXggJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAgICAgdmFyIG5vZGUkMSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICAgICAgbm9kZSQxLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICAgICAgbm9kZSQxLnByZWZpeCA9IGZhbHNlO1xuICAgICAgICBub2RlJDEuYXJndW1lbnQgPSBleHByO1xuICAgICAgICB0aGlzLmNoZWNrTFZhbFNpbXBsZShleHByKTtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgIGV4cHIgPSB0aGlzLmZpbmlzaE5vZGUobm9kZSQxLCBcIlVwZGF0ZUV4cHJlc3Npb25cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbmNEZWMgJiYgdGhpcy5lYXQodHlwZXMkMS5zdGFyc3RhcikpIHtcbiAgICAgIGlmIChzYXdVbmFyeSlcbiAgICAgICAgeyB0aGlzLnVuZXhwZWN0ZWQodGhpcy5sYXN0VG9rU3RhcnQpOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgcmV0dXJuIHRoaXMuYnVpbGRCaW5hcnkoc3RhcnRQb3MsIHN0YXJ0TG9jLCBleHByLCB0aGlzLnBhcnNlTWF5YmVVbmFyeShudWxsLCBmYWxzZSwgZmFsc2UsIGZvckluaXQpLCBcIioqXCIsIGZhbHNlKSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBleHByXG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzUHJpdmF0ZUZpZWxkQWNjZXNzKG5vZGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgbm9kZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT09IFwiUHJpdmF0ZUlkZW50aWZpZXJcIiB8fFxuICAgICAgbm9kZS50eXBlID09PSBcIkNoYWluRXhwcmVzc2lvblwiICYmIGlzUHJpdmF0ZUZpZWxkQWNjZXNzKG5vZGUuZXhwcmVzc2lvbilcbiAgICApXG4gIH1cblxuICAvLyBQYXJzZSBjYWxsLCBkb3QsIGFuZCBgW11gLXN1YnNjcmlwdCBleHByZXNzaW9ucy5cblxuICBwcCQ1LnBhcnNlRXhwclN1YnNjcmlwdHMgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBmb3JJbml0KSB7XG4gICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICAgIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJBdG9tKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGZvckluaXQpO1xuICAgIGlmIChleHByLnR5cGUgPT09IFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIiAmJiB0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva1N0YXJ0LCB0aGlzLmxhc3RUb2tFbmQpICE9PSBcIilcIilcbiAgICAgIHsgcmV0dXJuIGV4cHIgfVxuICAgIHZhciByZXN1bHQgPSB0aGlzLnBhcnNlU3Vic2NyaXB0cyhleHByLCBzdGFydFBvcywgc3RhcnRMb2MsIGZhbHNlLCBmb3JJbml0KTtcbiAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyAmJiByZXN1bHQudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPj0gcmVzdWx0LnN0YXJ0KSB7IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA9IC0xOyB9XG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZCA+PSByZXN1bHQuc3RhcnQpIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZCA9IC0xOyB9XG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID49IHJlc3VsdC5zdGFydCkgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPSAtMTsgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH07XG5cbiAgcHAkNS5wYXJzZVN1YnNjcmlwdHMgPSBmdW5jdGlvbihiYXNlLCBzdGFydFBvcywgc3RhcnRMb2MsIG5vQ2FsbHMsIGZvckluaXQpIHtcbiAgICB2YXIgbWF5YmVBc3luY0Fycm93ID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDggJiYgYmFzZS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJiBiYXNlLm5hbWUgPT09IFwiYXN5bmNcIiAmJlxuICAgICAgICB0aGlzLmxhc3RUb2tFbmQgPT09IGJhc2UuZW5kICYmICF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpICYmIGJhc2UuZW5kIC0gYmFzZS5zdGFydCA9PT0gNSAmJlxuICAgICAgICB0aGlzLnBvdGVudGlhbEFycm93QXQgPT09IGJhc2Uuc3RhcnQ7XG4gICAgdmFyIG9wdGlvbmFsQ2hhaW5lZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5wYXJzZVN1YnNjcmlwdChiYXNlLCBzdGFydFBvcywgc3RhcnRMb2MsIG5vQ2FsbHMsIG1heWJlQXN5bmNBcnJvdywgb3B0aW9uYWxDaGFpbmVkLCBmb3JJbml0KTtcblxuICAgICAgaWYgKGVsZW1lbnQub3B0aW9uYWwpIHsgb3B0aW9uYWxDaGFpbmVkID0gdHJ1ZTsgfVxuICAgICAgaWYgKGVsZW1lbnQgPT09IGJhc2UgfHwgZWxlbWVudC50eXBlID09PSBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIpIHtcbiAgICAgICAgaWYgKG9wdGlvbmFsQ2hhaW5lZCkge1xuICAgICAgICAgIHZhciBjaGFpbk5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICAgICAgY2hhaW5Ob2RlLmV4cHJlc3Npb24gPSBlbGVtZW50O1xuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLmZpbmlzaE5vZGUoY2hhaW5Ob2RlLCBcIkNoYWluRXhwcmVzc2lvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudFxuICAgICAgfVxuXG4gICAgICBiYXNlID0gZWxlbWVudDtcbiAgICB9XG4gIH07XG5cbiAgcHAkNS5zaG91bGRQYXJzZUFzeW5jQXJyb3cgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgJiYgdGhpcy5lYXQodHlwZXMkMS5hcnJvdylcbiAgfTtcblxuICBwcCQ1LnBhcnNlU3Vic2NyaXB0QXN5bmNBcnJvdyA9IGZ1bmN0aW9uKHN0YXJ0UG9zLCBzdGFydExvYywgZXhwckxpc3QsIGZvckluaXQpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUFycm93RXhwcmVzc2lvbih0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIGV4cHJMaXN0LCB0cnVlLCBmb3JJbml0KVxuICB9O1xuXG4gIHBwJDUucGFyc2VTdWJzY3JpcHQgPSBmdW5jdGlvbihiYXNlLCBzdGFydFBvcywgc3RhcnRMb2MsIG5vQ2FsbHMsIG1heWJlQXN5bmNBcnJvdywgb3B0aW9uYWxDaGFpbmVkLCBmb3JJbml0KSB7XG4gICAgdmFyIG9wdGlvbmFsU3VwcG9ydGVkID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExO1xuICAgIHZhciBvcHRpb25hbCA9IG9wdGlvbmFsU3VwcG9ydGVkICYmIHRoaXMuZWF0KHR5cGVzJDEucXVlc3Rpb25Eb3QpO1xuICAgIGlmIChub0NhbGxzICYmIG9wdGlvbmFsKSB7IHRoaXMucmFpc2UodGhpcy5sYXN0VG9rU3RhcnQsIFwiT3B0aW9uYWwgY2hhaW5pbmcgY2Fubm90IGFwcGVhciBpbiB0aGUgY2FsbGVlIG9mIG5ldyBleHByZXNzaW9uc1wiKTsgfVxuXG4gICAgdmFyIGNvbXB1dGVkID0gdGhpcy5lYXQodHlwZXMkMS5icmFja2V0TCk7XG4gICAgaWYgKGNvbXB1dGVkIHx8IChvcHRpb25hbCAmJiB0aGlzLnR5cGUgIT09IHR5cGVzJDEucGFyZW5MICYmIHRoaXMudHlwZSAhPT0gdHlwZXMkMS5iYWNrUXVvdGUpIHx8IHRoaXMuZWF0KHR5cGVzJDEuZG90KSkge1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICBub2RlLm9iamVjdCA9IGJhc2U7XG4gICAgICBpZiAoY29tcHV0ZWQpIHtcbiAgICAgICAgbm9kZS5wcm9wZXJ0eSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuYnJhY2tldFIpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEucHJpdmF0ZUlkICYmIGJhc2UudHlwZSAhPT0gXCJTdXBlclwiKSB7XG4gICAgICAgIG5vZGUucHJvcGVydHkgPSB0aGlzLnBhcnNlUHJpdmF0ZUlkZW50KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50KHRoaXMub3B0aW9ucy5hbGxvd1Jlc2VydmVkICE9PSBcIm5ldmVyXCIpO1xuICAgICAgfVxuICAgICAgbm9kZS5jb21wdXRlZCA9ICEhY29tcHV0ZWQ7XG4gICAgICBpZiAob3B0aW9uYWxTdXBwb3J0ZWQpIHtcbiAgICAgICAgbm9kZS5vcHRpb25hbCA9IG9wdGlvbmFsO1xuICAgICAgfVxuICAgICAgYmFzZSA9IHRoaXMuZmluaXNoTm9kZShub2RlLCBcIk1lbWJlckV4cHJlc3Npb25cIik7XG4gICAgfSBlbHNlIGlmICghbm9DYWxscyAmJiB0aGlzLmVhdCh0eXBlcyQxLnBhcmVuTCkpIHtcbiAgICAgIHZhciByZWZEZXN0cnVjdHVyaW5nRXJyb3JzID0gbmV3IERlc3RydWN0dXJpbmdFcnJvcnMsIG9sZFlpZWxkUG9zID0gdGhpcy55aWVsZFBvcywgb2xkQXdhaXRQb3MgPSB0aGlzLmF3YWl0UG9zLCBvbGRBd2FpdElkZW50UG9zID0gdGhpcy5hd2FpdElkZW50UG9zO1xuICAgICAgdGhpcy55aWVsZFBvcyA9IDA7XG4gICAgICB0aGlzLmF3YWl0UG9zID0gMDtcbiAgICAgIHRoaXMuYXdhaXRJZGVudFBvcyA9IDA7XG4gICAgICB2YXIgZXhwckxpc3QgPSB0aGlzLnBhcnNlRXhwckxpc3QodHlwZXMkMS5wYXJlblIsIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4LCBmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgICBpZiAobWF5YmVBc3luY0Fycm93ICYmICFvcHRpb25hbCAmJiB0aGlzLnNob3VsZFBhcnNlQXN5bmNBcnJvdygpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jaGVja1lpZWxkQXdhaXRJbkRlZmF1bHRQYXJhbXMoKTtcbiAgICAgICAgaWYgKHRoaXMuYXdhaXRJZGVudFBvcyA+IDApXG4gICAgICAgICAgeyB0aGlzLnJhaXNlKHRoaXMuYXdhaXRJZGVudFBvcywgXCJDYW5ub3QgdXNlICdhd2FpdCcgYXMgaWRlbnRpZmllciBpbnNpZGUgYW4gYXN5bmMgZnVuY3Rpb25cIik7IH1cbiAgICAgICAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zO1xuICAgICAgICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3M7XG4gICAgICAgIHRoaXMuYXdhaXRJZGVudFBvcyA9IG9sZEF3YWl0SWRlbnRQb3M7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlU3Vic2NyaXB0QXN5bmNBcnJvdyhzdGFydFBvcywgc3RhcnRMb2MsIGV4cHJMaXN0LCBmb3JJbml0KVxuICAgICAgfVxuICAgICAgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7XG4gICAgICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3MgfHwgdGhpcy55aWVsZFBvcztcbiAgICAgIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvcyB8fCB0aGlzLmF3YWl0UG9zO1xuICAgICAgdGhpcy5hd2FpdElkZW50UG9zID0gb2xkQXdhaXRJZGVudFBvcyB8fCB0aGlzLmF3YWl0SWRlbnRQb3M7XG4gICAgICB2YXIgbm9kZSQxID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgbm9kZSQxLmNhbGxlZSA9IGJhc2U7XG4gICAgICBub2RlJDEuYXJndW1lbnRzID0gZXhwckxpc3Q7XG4gICAgICBpZiAob3B0aW9uYWxTdXBwb3J0ZWQpIHtcbiAgICAgICAgbm9kZSQxLm9wdGlvbmFsID0gb3B0aW9uYWw7XG4gICAgICB9XG4gICAgICBiYXNlID0gdGhpcy5maW5pc2hOb2RlKG5vZGUkMSwgXCJDYWxsRXhwcmVzc2lvblwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5iYWNrUXVvdGUpIHtcbiAgICAgIGlmIChvcHRpb25hbCB8fCBvcHRpb25hbENoYWluZWQpIHtcbiAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIk9wdGlvbmFsIGNoYWluaW5nIGNhbm5vdCBhcHBlYXIgaW4gdGhlIHRhZyBvZiB0YWdnZWQgdGVtcGxhdGUgZXhwcmVzc2lvbnNcIik7XG4gICAgICB9XG4gICAgICB2YXIgbm9kZSQyID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgbm9kZSQyLnRhZyA9IGJhc2U7XG4gICAgICBub2RlJDIucXVhc2kgPSB0aGlzLnBhcnNlVGVtcGxhdGUoe2lzVGFnZ2VkOiB0cnVlfSk7XG4gICAgICBiYXNlID0gdGhpcy5maW5pc2hOb2RlKG5vZGUkMiwgXCJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb25cIik7XG4gICAgfVxuICAgIHJldHVybiBiYXNlXG4gIH07XG5cbiAgLy8gUGFyc2UgYW4gYXRvbWljIGV4cHJlc3Npb24g4oCUIGVpdGhlciBhIHNpbmdsZSB0b2tlbiB0aGF0IGlzIGFuXG4gIC8vIGV4cHJlc3Npb24sIGFuIGV4cHJlc3Npb24gc3RhcnRlZCBieSBhIGtleXdvcmQgbGlrZSBgZnVuY3Rpb25gIG9yXG4gIC8vIGBuZXdgLCBvciBhbiBleHByZXNzaW9uIHdyYXBwZWQgaW4gcHVuY3R1YXRpb24gbGlrZSBgKClgLCBgW11gLFxuICAvLyBvciBge31gLlxuXG4gIHBwJDUucGFyc2VFeHByQXRvbSA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGZvckluaXQsIGZvck5ldykge1xuICAgIC8vIElmIGEgZGl2aXNpb24gb3BlcmF0b3IgYXBwZWFycyBpbiBhbiBleHByZXNzaW9uIHBvc2l0aW9uLCB0aGVcbiAgICAvLyB0b2tlbml6ZXIgZ290IGNvbmZ1c2VkLCBhbmQgd2UgZm9yY2UgaXQgdG8gcmVhZCBhIHJlZ2V4cCBpbnN0ZWFkLlxuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuc2xhc2gpIHsgdGhpcy5yZWFkUmVnZXhwKCk7IH1cblxuICAgIHZhciBub2RlLCBjYW5CZUFycm93ID0gdGhpcy5wb3RlbnRpYWxBcnJvd0F0ID09PSB0aGlzLnN0YXJ0O1xuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgY2FzZSB0eXBlcyQxLl9zdXBlcjpcbiAgICAgIGlmICghdGhpcy5hbGxvd1N1cGVyKVxuICAgICAgICB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCInc3VwZXInIGtleXdvcmQgb3V0c2lkZSBhIG1ldGhvZFwiKTsgfVxuICAgICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEucGFyZW5MICYmICF0aGlzLmFsbG93RGlyZWN0U3VwZXIpXG4gICAgICAgIHsgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcInN1cGVyKCkgY2FsbCBvdXRzaWRlIGNvbnN0cnVjdG9yIG9mIGEgc3ViY2xhc3NcIik7IH1cbiAgICAgIC8vIFRoZSBgc3VwZXJgIGtleXdvcmQgY2FuIGFwcGVhciBhdCBiZWxvdzpcbiAgICAgIC8vIFN1cGVyUHJvcGVydHk6XG4gICAgICAvLyAgICAgc3VwZXIgWyBFeHByZXNzaW9uIF1cbiAgICAgIC8vICAgICBzdXBlciAuIElkZW50aWZpZXJOYW1lXG4gICAgICAvLyBTdXBlckNhbGw6XG4gICAgICAvLyAgICAgc3VwZXIgKCBBcmd1bWVudHMgKVxuICAgICAgaWYgKHRoaXMudHlwZSAhPT0gdHlwZXMkMS5kb3QgJiYgdGhpcy50eXBlICE9PSB0eXBlcyQxLmJyYWNrZXRMICYmIHRoaXMudHlwZSAhPT0gdHlwZXMkMS5wYXJlbkwpXG4gICAgICAgIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJTdXBlclwiKVxuXG4gICAgY2FzZSB0eXBlcyQxLl90aGlzOlxuICAgICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJUaGlzRXhwcmVzc2lvblwiKVxuXG4gICAgY2FzZSB0eXBlcyQxLm5hbWU6XG4gICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2MsIGNvbnRhaW5zRXNjID0gdGhpcy5jb250YWluc0VzYztcbiAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VJZGVudChmYWxzZSk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDggJiYgIWNvbnRhaW5zRXNjICYmIGlkLm5hbWUgPT09IFwiYXN5bmNcIiAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSAmJiB0aGlzLmVhdCh0eXBlcyQxLl9mdW5jdGlvbikpIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZUNvbnRleHQodHlwZXMuZl9leHByKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbih0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIDAsIGZhbHNlLCB0cnVlLCBmb3JJbml0KVxuICAgICAgfVxuICAgICAgaWYgKGNhbkJlQXJyb3cgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuZWF0KHR5cGVzJDEuYXJyb3cpKVxuICAgICAgICAgIHsgcmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBbaWRdLCBmYWxzZSwgZm9ySW5pdCkgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDggJiYgaWQubmFtZSA9PT0gXCJhc3luY1wiICYmIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5uYW1lICYmICFjb250YWluc0VzYyAmJlxuICAgICAgICAgICAgKCF0aGlzLnBvdGVudGlhbEFycm93SW5Gb3JBd2FpdCB8fCB0aGlzLnZhbHVlICE9PSBcIm9mXCIgfHwgdGhpcy5jb250YWluc0VzYykpIHtcbiAgICAgICAgICBpZCA9IHRoaXMucGFyc2VJZGVudChmYWxzZSk7XG4gICAgICAgICAgaWYgKHRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgfHwgIXRoaXMuZWF0KHR5cGVzJDEuYXJyb3cpKVxuICAgICAgICAgICAgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlQXJyb3dFeHByZXNzaW9uKHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKSwgW2lkXSwgdHJ1ZSwgZm9ySW5pdClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlkXG5cbiAgICBjYXNlIHR5cGVzJDEucmVnZXhwOlxuICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIG5vZGUgPSB0aGlzLnBhcnNlTGl0ZXJhbCh2YWx1ZS52YWx1ZSk7XG4gICAgICBub2RlLnJlZ2V4ID0ge3BhdHRlcm46IHZhbHVlLnBhdHRlcm4sIGZsYWdzOiB2YWx1ZS5mbGFnc307XG4gICAgICByZXR1cm4gbm9kZVxuXG4gICAgY2FzZSB0eXBlcyQxLm51bTogY2FzZSB0eXBlcyQxLnN0cmluZzpcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlTGl0ZXJhbCh0aGlzLnZhbHVlKVxuXG4gICAgY2FzZSB0eXBlcyQxLl9udWxsOiBjYXNlIHR5cGVzJDEuX3RydWU6IGNhc2UgdHlwZXMkMS5fZmFsc2U6XG4gICAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICAgIG5vZGUudmFsdWUgPSB0aGlzLnR5cGUgPT09IHR5cGVzJDEuX251bGwgPyBudWxsIDogdGhpcy50eXBlID09PSB0eXBlcyQxLl90cnVlO1xuICAgICAgbm9kZS5yYXcgPSB0aGlzLnR5cGUua2V5d29yZDtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkxpdGVyYWxcIilcblxuICAgIGNhc2UgdHlwZXMkMS5wYXJlbkw6XG4gICAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0LCBleHByID0gdGhpcy5wYXJzZVBhcmVuQW5kRGlzdGluZ3Vpc2hFeHByZXNzaW9uKGNhbkJlQXJyb3csIGZvckluaXQpO1xuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA8IDAgJiYgIXRoaXMuaXNTaW1wbGVBc3NpZ25UYXJnZXQoZXhwcikpXG4gICAgICAgICAgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSBzdGFydDsgfVxuICAgICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZCA8IDApXG4gICAgICAgICAgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kID0gc3RhcnQ7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBleHByXG5cbiAgICBjYXNlIHR5cGVzJDEuYnJhY2tldEw6XG4gICAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgbm9kZS5lbGVtZW50cyA9IHRoaXMucGFyc2VFeHByTGlzdCh0eXBlcyQxLmJyYWNrZXRSLCB0cnVlLCB0cnVlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJBcnJheUV4cHJlc3Npb25cIilcblxuICAgIGNhc2UgdHlwZXMkMS5icmFjZUw6XG4gICAgICB0aGlzLm92ZXJyaWRlQ29udGV4dCh0eXBlcy5iX2V4cHIpO1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VPYmooZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG5cbiAgICBjYXNlIHR5cGVzJDEuX2Z1bmN0aW9uOlxuICAgICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24obm9kZSwgMClcblxuICAgIGNhc2UgdHlwZXMkMS5fY2xhc3M6XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUNsYXNzKHRoaXMuc3RhcnROb2RlKCksIGZhbHNlKVxuXG4gICAgY2FzZSB0eXBlcyQxLl9uZXc6XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZU5ldygpXG5cbiAgICBjYXNlIHR5cGVzJDEuYmFja1F1b3RlOlxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VUZW1wbGF0ZSgpXG5cbiAgICBjYXNlIHR5cGVzJDEuX2ltcG9ydDpcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFeHBySW1wb3J0KGZvck5ldylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuZXhwZWN0ZWQoKVxuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRXhwckF0b21EZWZhdWx0KClcbiAgICB9XG4gIH07XG5cbiAgcHAkNS5wYXJzZUV4cHJBdG9tRGVmYXVsdCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudW5leHBlY3RlZCgpO1xuICB9O1xuXG4gIHBwJDUucGFyc2VFeHBySW1wb3J0ID0gZnVuY3Rpb24oZm9yTmV3KSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuXG4gICAgLy8gQ29uc3VtZSBgaW1wb3J0YCBhcyBhbiBpZGVudGlmaWVyIGZvciBgaW1wb3J0Lm1ldGFgLlxuICAgIC8vIEJlY2F1c2UgYHRoaXMucGFyc2VJZGVudCh0cnVlKWAgZG9lc24ndCBjaGVjayBlc2NhcGUgc2VxdWVuY2VzLCBpdCBuZWVkcyB0aGUgY2hlY2sgb2YgYHRoaXMuY29udGFpbnNFc2NgLlxuICAgIGlmICh0aGlzLmNvbnRhaW5zRXNjKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIkVzY2FwZSBzZXF1ZW5jZSBpbiBrZXl3b3JkIGltcG9ydFwiKTsgfVxuICAgIHZhciBtZXRhID0gdGhpcy5wYXJzZUlkZW50KHRydWUpO1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5wYXJlbkwgJiYgIWZvck5ldykge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VEeW5hbWljSW1wb3J0KG5vZGUpXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuZG90KSB7XG4gICAgICBub2RlLm1ldGEgPSBtZXRhO1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VJbXBvcnRNZXRhKG5vZGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudW5leHBlY3RlZCgpO1xuICAgIH1cbiAgfTtcblxuICBwcCQ1LnBhcnNlRHluYW1pY0ltcG9ydCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB0aGlzLm5leHQoKTsgLy8gc2tpcCBgKGBcblxuICAgIC8vIFBhcnNlIG5vZGUuc291cmNlLlxuICAgIG5vZGUuc291cmNlID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7XG5cbiAgICAvLyBWZXJpZnkgZW5kaW5nLlxuICAgIGlmICghdGhpcy5lYXQodHlwZXMkMS5wYXJlblIpKSB7XG4gICAgICB2YXIgZXJyb3JQb3MgPSB0aGlzLnN0YXJ0O1xuICAgICAgaWYgKHRoaXMuZWF0KHR5cGVzJDEuY29tbWEpICYmIHRoaXMuZWF0KHR5cGVzJDEucGFyZW5SKSkge1xuICAgICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXJyb3JQb3MsIFwiVHJhaWxpbmcgY29tbWEgaXMgbm90IGFsbG93ZWQgaW4gaW1wb3J0KClcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoZXJyb3JQb3MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJbXBvcnRFeHByZXNzaW9uXCIpXG4gIH07XG5cbiAgcHAkNS5wYXJzZUltcG9ydE1ldGEgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7IC8vIHNraXAgYC5gXG5cbiAgICB2YXIgY29udGFpbnNFc2MgPSB0aGlzLmNvbnRhaW5zRXNjO1xuICAgIG5vZGUucHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnQodHJ1ZSk7XG5cbiAgICBpZiAobm9kZS5wcm9wZXJ0eS5uYW1lICE9PSBcIm1ldGFcIilcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUucHJvcGVydHkuc3RhcnQsIFwiVGhlIG9ubHkgdmFsaWQgbWV0YSBwcm9wZXJ0eSBmb3IgaW1wb3J0IGlzICdpbXBvcnQubWV0YSdcIik7IH1cbiAgICBpZiAoY29udGFpbnNFc2MpXG4gICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIidpbXBvcnQubWV0YScgbXVzdCBub3QgY29udGFpbiBlc2NhcGVkIGNoYXJhY3RlcnNcIik7IH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnNvdXJjZVR5cGUgIT09IFwibW9kdWxlXCIgJiYgIXRoaXMub3B0aW9ucy5hbGxvd0ltcG9ydEV4cG9ydEV2ZXJ5d2hlcmUpXG4gICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIkNhbm5vdCB1c2UgJ2ltcG9ydC5tZXRhJyBvdXRzaWRlIGEgbW9kdWxlXCIpOyB9XG5cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTWV0YVByb3BlcnR5XCIpXG4gIH07XG5cbiAgcHAkNS5wYXJzZUxpdGVyYWwgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICBub2RlLnZhbHVlID0gdmFsdWU7XG4gICAgbm9kZS5yYXcgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTtcbiAgICBpZiAobm9kZS5yYXcuY2hhckNvZGVBdChub2RlLnJhdy5sZW5ndGggLSAxKSA9PT0gMTEwKSB7IG5vZGUuYmlnaW50ID0gbm9kZS5yYXcuc2xpY2UoMCwgLTEpLnJlcGxhY2UoL18vZywgXCJcIik7IH1cbiAgICB0aGlzLm5leHQoKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTGl0ZXJhbFwiKVxuICB9O1xuXG4gIHBwJDUucGFyc2VQYXJlbkV4cHJlc3Npb24gPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLnBhcmVuTCk7XG4gICAgdmFyIHZhbCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5wYXJlblIpO1xuICAgIHJldHVybiB2YWxcbiAgfTtcblxuICBwcCQ1LnNob3VsZFBhcnNlQXJyb3cgPSBmdW5jdGlvbihleHByTGlzdCkge1xuICAgIHJldHVybiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKVxuICB9O1xuXG4gIHBwJDUucGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKGNhbkJlQXJyb3csIGZvckluaXQpIHtcbiAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2MsIHZhbCwgYWxsb3dUcmFpbGluZ0NvbW1hID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDg7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgICB0aGlzLm5leHQoKTtcblxuICAgICAgdmFyIGlubmVyU3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBpbm5lclN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgICAgIHZhciBleHByTGlzdCA9IFtdLCBmaXJzdCA9IHRydWUsIGxhc3RJc0NvbW1hID0gZmFsc2U7XG4gICAgICB2YXIgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IG5ldyBEZXN0cnVjdHVyaW5nRXJyb3JzLCBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgc3ByZWFkU3RhcnQ7XG4gICAgICB0aGlzLnlpZWxkUG9zID0gMDtcbiAgICAgIHRoaXMuYXdhaXRQb3MgPSAwO1xuICAgICAgLy8gRG8gbm90IHNhdmUgYXdhaXRJZGVudFBvcyB0byBhbGxvdyBjaGVja2luZyBhd2FpdHMgbmVzdGVkIGluIHBhcmFtZXRlcnNcbiAgICAgIHdoaWxlICh0aGlzLnR5cGUgIT09IHR5cGVzJDEucGFyZW5SKSB7XG4gICAgICAgIGZpcnN0ID8gZmlyc3QgPSBmYWxzZSA6IHRoaXMuZXhwZWN0KHR5cGVzJDEuY29tbWEpO1xuICAgICAgICBpZiAoYWxsb3dUcmFpbGluZ0NvbW1hICYmIHRoaXMuYWZ0ZXJUcmFpbGluZ0NvbW1hKHR5cGVzJDEucGFyZW5SLCB0cnVlKSkge1xuICAgICAgICAgIGxhc3RJc0NvbW1hID0gdHJ1ZTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5lbGxpcHNpcykge1xuICAgICAgICAgIHNwcmVhZFN0YXJ0ID0gdGhpcy5zdGFydDtcbiAgICAgICAgICBleHByTGlzdC5wdXNoKHRoaXMucGFyc2VQYXJlbkl0ZW0odGhpcy5wYXJzZVJlc3RCaW5kaW5nKCkpKTtcbiAgICAgICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLmNvbW1hKSB7XG4gICAgICAgICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoXG4gICAgICAgICAgICAgIHRoaXMuc3RhcnQsXG4gICAgICAgICAgICAgIFwiQ29tbWEgaXMgbm90IHBlcm1pdHRlZCBhZnRlciB0aGUgcmVzdCBlbGVtZW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwckxpc3QucHVzaCh0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRoaXMucGFyc2VQYXJlbkl0ZW0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGlubmVyRW5kUG9zID0gdGhpcy5sYXN0VG9rRW5kLCBpbm5lckVuZExvYyA9IHRoaXMubGFzdFRva0VuZExvYztcbiAgICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEucGFyZW5SKTtcblxuICAgICAgaWYgKGNhbkJlQXJyb3cgJiYgdGhpcy5zaG91bGRQYXJzZUFycm93KGV4cHJMaXN0KSAmJiB0aGlzLmVhdCh0eXBlcyQxLmFycm93KSkge1xuICAgICAgICB0aGlzLmNoZWNrUGF0dGVybkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKCk7XG4gICAgICAgIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvcztcbiAgICAgICAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVBhcmVuQXJyb3dMaXN0KHN0YXJ0UG9zLCBzdGFydExvYywgZXhwckxpc3QsIGZvckluaXQpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXhwckxpc3QubGVuZ3RoIHx8IGxhc3RJc0NvbW1hKSB7IHRoaXMudW5leHBlY3RlZCh0aGlzLmxhc3RUb2tTdGFydCk7IH1cbiAgICAgIGlmIChzcHJlYWRTdGFydCkgeyB0aGlzLnVuZXhwZWN0ZWQoc3ByZWFkU3RhcnQpOyB9XG4gICAgICB0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTtcbiAgICAgIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvcyB8fCB0aGlzLnlpZWxkUG9zO1xuICAgICAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zIHx8IHRoaXMuYXdhaXRQb3M7XG5cbiAgICAgIGlmIChleHByTGlzdC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhbCA9IHRoaXMuc3RhcnROb2RlQXQoaW5uZXJTdGFydFBvcywgaW5uZXJTdGFydExvYyk7XG4gICAgICAgIHZhbC5leHByZXNzaW9ucyA9IGV4cHJMaXN0O1xuICAgICAgICB0aGlzLmZpbmlzaE5vZGVBdCh2YWwsIFwiU2VxdWVuY2VFeHByZXNzaW9uXCIsIGlubmVyRW5kUG9zLCBpbm5lckVuZExvYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBleHByTGlzdFswXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJlc2VydmVQYXJlbnMpIHtcbiAgICAgIHZhciBwYXIgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICBwYXIuZXhwcmVzc2lvbiA9IHZhbDtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUocGFyLCBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG4gIH07XG5cbiAgcHAkNS5wYXJzZVBhcmVuSXRlbSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbVxuICB9O1xuXG4gIHBwJDUucGFyc2VQYXJlbkFycm93TGlzdCA9IGZ1bmN0aW9uKHN0YXJ0UG9zLCBzdGFydExvYywgZXhwckxpc3QsIGZvckluaXQpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUFycm93RXhwcmVzc2lvbih0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIGV4cHJMaXN0LCBmYWxzZSwgZm9ySW5pdClcbiAgfTtcblxuICAvLyBOZXcncyBwcmVjZWRlbmNlIGlzIHNsaWdodGx5IHRyaWNreS4gSXQgbXVzdCBhbGxvdyBpdHMgYXJndW1lbnQgdG9cbiAgLy8gYmUgYSBgW11gIG9yIGRvdCBzdWJzY3JpcHQgZXhwcmVzc2lvbiwgYnV0IG5vdCBhIGNhbGwg4oCUIGF0IGxlYXN0LFxuICAvLyBub3Qgd2l0aG91dCB3cmFwcGluZyBpdCBpbiBwYXJlbnRoZXNlcy4gVGh1cywgaXQgdXNlcyB0aGUgbm9DYWxsc1xuICAvLyBhcmd1bWVudCB0byBwYXJzZVN1YnNjcmlwdHMgdG8gcHJldmVudCBpdCBmcm9tIGNvbnN1bWluZyB0aGVcbiAgLy8gYXJndW1lbnQgbGlzdC5cblxuICB2YXIgZW1wdHkgPSBbXTtcblxuICBwcCQ1LnBhcnNlTmV3ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY29udGFpbnNFc2MpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiRXNjYXBlIHNlcXVlbmNlIGluIGtleXdvcmQgbmV3XCIpOyB9XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHZhciBtZXRhID0gdGhpcy5wYXJzZUlkZW50KHRydWUpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLmVhdCh0eXBlcyQxLmRvdCkpIHtcbiAgICAgIG5vZGUubWV0YSA9IG1ldGE7XG4gICAgICB2YXIgY29udGFpbnNFc2MgPSB0aGlzLmNvbnRhaW5zRXNjO1xuICAgICAgbm9kZS5wcm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudCh0cnVlKTtcbiAgICAgIGlmIChub2RlLnByb3BlcnR5Lm5hbWUgIT09IFwidGFyZ2V0XCIpXG4gICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUucHJvcGVydHkuc3RhcnQsIFwiVGhlIG9ubHkgdmFsaWQgbWV0YSBwcm9wZXJ0eSBmb3IgbmV3IGlzICduZXcudGFyZ2V0J1wiKTsgfVxuICAgICAgaWYgKGNvbnRhaW5zRXNjKVxuICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIiduZXcudGFyZ2V0JyBtdXN0IG5vdCBjb250YWluIGVzY2FwZWQgY2hhcmFjdGVyc1wiKTsgfVxuICAgICAgaWYgKCF0aGlzLmFsbG93TmV3RG90VGFyZ2V0KVxuICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIiduZXcudGFyZ2V0JyBjYW4gb25seSBiZSB1c2VkIGluIGZ1bmN0aW9ucyBhbmQgY2xhc3Mgc3RhdGljIGJsb2NrXCIpOyB9XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTWV0YVByb3BlcnR5XCIpXG4gICAgfVxuICAgIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgICBub2RlLmNhbGxlZSA9IHRoaXMucGFyc2VTdWJzY3JpcHRzKHRoaXMucGFyc2VFeHByQXRvbShudWxsLCBmYWxzZSwgdHJ1ZSksIHN0YXJ0UG9zLCBzdGFydExvYywgdHJ1ZSwgZmFsc2UpO1xuICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLnBhcmVuTCkpIHsgbm9kZS5hcmd1bWVudHMgPSB0aGlzLnBhcnNlRXhwckxpc3QodHlwZXMkMS5wYXJlblIsIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4LCBmYWxzZSk7IH1cbiAgICBlbHNlIHsgbm9kZS5hcmd1bWVudHMgPSBlbXB0eTsgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJOZXdFeHByZXNzaW9uXCIpXG4gIH07XG5cbiAgLy8gUGFyc2UgdGVtcGxhdGUgZXhwcmVzc2lvbi5cblxuICBwcCQ1LnBhcnNlVGVtcGxhdGVFbGVtZW50ID0gZnVuY3Rpb24ocmVmKSB7XG4gICAgdmFyIGlzVGFnZ2VkID0gcmVmLmlzVGFnZ2VkO1xuXG4gICAgdmFyIGVsZW0gPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuaW52YWxpZFRlbXBsYXRlKSB7XG4gICAgICBpZiAoIWlzVGFnZ2VkKSB7XG4gICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIkJhZCBlc2NhcGUgc2VxdWVuY2UgaW4gdW50YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbFwiKTtcbiAgICAgIH1cbiAgICAgIGVsZW0udmFsdWUgPSB7XG4gICAgICAgIHJhdzogdGhpcy52YWx1ZSxcbiAgICAgICAgY29va2VkOiBudWxsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtLnZhbHVlID0ge1xuICAgICAgICByYXc6IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5lbmQpLnJlcGxhY2UoL1xcclxcbj8vZywgXCJcXG5cIiksXG4gICAgICAgIGNvb2tlZDogdGhpcy52YWx1ZVxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgZWxlbS50YWlsID0gdGhpcy50eXBlID09PSB0eXBlcyQxLmJhY2tRdW90ZTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKGVsZW0sIFwiVGVtcGxhdGVFbGVtZW50XCIpXG4gIH07XG5cbiAgcHAkNS5wYXJzZVRlbXBsYXRlID0gZnVuY3Rpb24ocmVmKSB7XG4gICAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICAgIHZhciBpc1RhZ2dlZCA9IHJlZi5pc1RhZ2dlZDsgaWYgKCBpc1RhZ2dlZCA9PT0gdm9pZCAwICkgaXNUYWdnZWQgPSBmYWxzZTtcblxuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICBub2RlLmV4cHJlc3Npb25zID0gW107XG4gICAgdmFyIGN1ckVsdCA9IHRoaXMucGFyc2VUZW1wbGF0ZUVsZW1lbnQoe2lzVGFnZ2VkOiBpc1RhZ2dlZH0pO1xuICAgIG5vZGUucXVhc2lzID0gW2N1ckVsdF07XG4gICAgd2hpbGUgKCFjdXJFbHQudGFpbCkge1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5lb2YpIHsgdGhpcy5yYWlzZSh0aGlzLnBvcywgXCJVbnRlcm1pbmF0ZWQgdGVtcGxhdGUgbGl0ZXJhbFwiKTsgfVxuICAgICAgdGhpcy5leHBlY3QodHlwZXMkMS5kb2xsYXJCcmFjZUwpO1xuICAgICAgbm9kZS5leHByZXNzaW9ucy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpO1xuICAgICAgdGhpcy5leHBlY3QodHlwZXMkMS5icmFjZVIpO1xuICAgICAgbm9kZS5xdWFzaXMucHVzaChjdXJFbHQgPSB0aGlzLnBhcnNlVGVtcGxhdGVFbGVtZW50KHtpc1RhZ2dlZDogaXNUYWdnZWR9KSk7XG4gICAgfVxuICAgIHRoaXMubmV4dCgpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJUZW1wbGF0ZUxpdGVyYWxcIilcbiAgfTtcblxuICBwcCQ1LmlzQXN5bmNQcm9wID0gZnVuY3Rpb24ocHJvcCkge1xuICAgIHJldHVybiAhcHJvcC5jb21wdXRlZCAmJiBwcm9wLmtleS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJiBwcm9wLmtleS5uYW1lID09PSBcImFzeW5jXCIgJiZcbiAgICAgICh0aGlzLnR5cGUgPT09IHR5cGVzJDEubmFtZSB8fCB0aGlzLnR5cGUgPT09IHR5cGVzJDEubnVtIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5zdHJpbmcgfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLmJyYWNrZXRMIHx8IHRoaXMudHlwZS5rZXl3b3JkIHx8ICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSAmJiB0aGlzLnR5cGUgPT09IHR5cGVzJDEuc3RhcikpICYmXG4gICAgICAhbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMuc3RhcnQpKVxuICB9O1xuXG4gIC8vIFBhcnNlIGFuIG9iamVjdCBsaXRlcmFsIG9yIGJpbmRpbmcgcGF0dGVybi5cblxuICBwcCQ1LnBhcnNlT2JqID0gZnVuY3Rpb24oaXNQYXR0ZXJuLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBmaXJzdCA9IHRydWUsIHByb3BIYXNoID0ge307XG4gICAgbm9kZS5wcm9wZXJ0aWVzID0gW107XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgd2hpbGUgKCF0aGlzLmVhdCh0eXBlcyQxLmJyYWNlUikpIHtcbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5leHBlY3QodHlwZXMkMS5jb21tYSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNSAmJiB0aGlzLmFmdGVyVHJhaWxpbmdDb21tYSh0eXBlcyQxLmJyYWNlUikpIHsgYnJlYWsgfVxuICAgICAgfSBlbHNlIHsgZmlyc3QgPSBmYWxzZTsgfVxuXG4gICAgICB2YXIgcHJvcCA9IHRoaXMucGFyc2VQcm9wZXJ0eShpc1BhdHRlcm4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgICAgaWYgKCFpc1BhdHRlcm4pIHsgdGhpcy5jaGVja1Byb3BDbGFzaChwcm9wLCBwcm9wSGFzaCwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7IH1cbiAgICAgIG5vZGUucHJvcGVydGllcy5wdXNoKHByb3ApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGlzUGF0dGVybiA/IFwiT2JqZWN0UGF0dGVyblwiIDogXCJPYmplY3RFeHByZXNzaW9uXCIpXG4gIH07XG5cbiAgcHAkNS5wYXJzZVByb3BlcnR5ID0gZnVuY3Rpb24oaXNQYXR0ZXJuLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgdmFyIHByb3AgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBpc0dlbmVyYXRvciwgaXNBc3luYywgc3RhcnRQb3MsIHN0YXJ0TG9jO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSAmJiB0aGlzLmVhdCh0eXBlcyQxLmVsbGlwc2lzKSkge1xuICAgICAgaWYgKGlzUGF0dGVybikge1xuICAgICAgICBwcm9wLmFyZ3VtZW50ID0gdGhpcy5wYXJzZUlkZW50KGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5jb21tYSkge1xuICAgICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIkNvbW1hIGlzIG5vdCBwZXJtaXR0ZWQgYWZ0ZXIgdGhlIHJlc3QgZWxlbWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKHByb3AsIFwiUmVzdEVsZW1lbnRcIilcbiAgICAgIH1cbiAgICAgIC8vIFBhcnNlIGFyZ3VtZW50LlxuICAgICAgcHJvcC5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgICAvLyBUbyBkaXNhbGxvdyB0cmFpbGluZyBjb21tYSB2aWEgYHRoaXMudG9Bc3NpZ25hYmxlKClgLlxuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5jb21tYSAmJiByZWZEZXN0cnVjdHVyaW5nRXJyb3JzICYmIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA8IDApIHtcbiAgICAgICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID0gdGhpcy5zdGFydDtcbiAgICAgIH1cbiAgICAgIC8vIEZpbmlzaFxuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShwcm9wLCBcIlNwcmVhZEVsZW1lbnRcIilcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgICBwcm9wLm1ldGhvZCA9IGZhbHNlO1xuICAgICAgcHJvcC5zaG9ydGhhbmQgPSBmYWxzZTtcbiAgICAgIGlmIChpc1BhdHRlcm4gfHwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgICBzdGFydFBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgICAgIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgICAgIH1cbiAgICAgIGlmICghaXNQYXR0ZXJuKVxuICAgICAgICB7IGlzR2VuZXJhdG9yID0gdGhpcy5lYXQodHlwZXMkMS5zdGFyKTsgfVxuICAgIH1cbiAgICB2YXIgY29udGFpbnNFc2MgPSB0aGlzLmNvbnRhaW5zRXNjO1xuICAgIHRoaXMucGFyc2VQcm9wZXJ0eU5hbWUocHJvcCk7XG4gICAgaWYgKCFpc1BhdHRlcm4gJiYgIWNvbnRhaW5zRXNjICYmIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4ICYmICFpc0dlbmVyYXRvciAmJiB0aGlzLmlzQXN5bmNQcm9wKHByb3ApKSB7XG4gICAgICBpc0FzeW5jID0gdHJ1ZTtcbiAgICAgIGlzR2VuZXJhdG9yID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiYgdGhpcy5lYXQodHlwZXMkMS5zdGFyKTtcbiAgICAgIHRoaXMucGFyc2VQcm9wZXJ0eU5hbWUocHJvcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQXN5bmMgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5wYXJzZVByb3BlcnR5VmFsdWUocHJvcCwgaXNQYXR0ZXJuLCBpc0dlbmVyYXRvciwgaXNBc3luYywgc3RhcnRQb3MsIHN0YXJ0TG9jLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBjb250YWluc0VzYyk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShwcm9wLCBcIlByb3BlcnR5XCIpXG4gIH07XG5cbiAgcHAkNS5wYXJzZUdldHRlclNldHRlciA9IGZ1bmN0aW9uKHByb3ApIHtcbiAgICBwcm9wLmtpbmQgPSBwcm9wLmtleS5uYW1lO1xuICAgIHRoaXMucGFyc2VQcm9wZXJ0eU5hbWUocHJvcCk7XG4gICAgcHJvcC52YWx1ZSA9IHRoaXMucGFyc2VNZXRob2QoZmFsc2UpO1xuICAgIHZhciBwYXJhbUNvdW50ID0gcHJvcC5raW5kID09PSBcImdldFwiID8gMCA6IDE7XG4gICAgaWYgKHByb3AudmFsdWUucGFyYW1zLmxlbmd0aCAhPT0gcGFyYW1Db3VudCkge1xuICAgICAgdmFyIHN0YXJ0ID0gcHJvcC52YWx1ZS5zdGFydDtcbiAgICAgIGlmIChwcm9wLmtpbmQgPT09IFwiZ2V0XCIpXG4gICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcImdldHRlciBzaG91bGQgaGF2ZSBubyBwYXJhbXNcIik7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoc3RhcnQsIFwic2V0dGVyIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtXCIpOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wLmtpbmQgPT09IFwic2V0XCIgJiYgcHJvcC52YWx1ZS5wYXJhbXNbMF0udHlwZSA9PT0gXCJSZXN0RWxlbWVudFwiKVxuICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShwcm9wLnZhbHVlLnBhcmFtc1swXS5zdGFydCwgXCJTZXR0ZXIgY2Fubm90IHVzZSByZXN0IHBhcmFtc1wiKTsgfVxuICAgIH1cbiAgfTtcblxuICBwcCQ1LnBhcnNlUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKHByb3AsIGlzUGF0dGVybiwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIHN0YXJ0UG9zLCBzdGFydExvYywgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgY29udGFpbnNFc2MpIHtcbiAgICBpZiAoKGlzR2VuZXJhdG9yIHx8IGlzQXN5bmMpICYmIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5jb2xvbilcbiAgICAgIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cblxuICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLmNvbG9uKSkge1xuICAgICAgcHJvcC52YWx1ZSA9IGlzUGF0dGVybiA/IHRoaXMucGFyc2VNYXliZURlZmF1bHQodGhpcy5zdGFydCwgdGhpcy5zdGFydExvYykgOiB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgICAgcHJvcC5raW5kID0gXCJpbml0XCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLnR5cGUgPT09IHR5cGVzJDEucGFyZW5MKSB7XG4gICAgICBpZiAoaXNQYXR0ZXJuKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICBwcm9wLmtpbmQgPSBcImluaXRcIjtcbiAgICAgIHByb3AubWV0aG9kID0gdHJ1ZTtcbiAgICAgIHByb3AudmFsdWUgPSB0aGlzLnBhcnNlTWV0aG9kKGlzR2VuZXJhdG9yLCBpc0FzeW5jKTtcbiAgICB9IGVsc2UgaWYgKCFpc1BhdHRlcm4gJiYgIWNvbnRhaW5zRXNjICYmXG4gICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNSAmJiAhcHJvcC5jb21wdXRlZCAmJiBwcm9wLmtleS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgICAgICAgICAgKHByb3Aua2V5Lm5hbWUgPT09IFwiZ2V0XCIgfHwgcHJvcC5rZXkubmFtZSA9PT0gXCJzZXRcIikgJiZcbiAgICAgICAgICAgICAgICh0aGlzLnR5cGUgIT09IHR5cGVzJDEuY29tbWEgJiYgdGhpcy50eXBlICE9PSB0eXBlcyQxLmJyYWNlUiAmJiB0aGlzLnR5cGUgIT09IHR5cGVzJDEuZXEpKSB7XG4gICAgICBpZiAoaXNHZW5lcmF0b3IgfHwgaXNBc3luYykgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgdGhpcy5wYXJzZUdldHRlclNldHRlcihwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmICFwcm9wLmNvbXB1dGVkICYmIHByb3Aua2V5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICBpZiAoaXNHZW5lcmF0b3IgfHwgaXNBc3luYykgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgdGhpcy5jaGVja1VucmVzZXJ2ZWQocHJvcC5rZXkpO1xuICAgICAgaWYgKHByb3Aua2V5Lm5hbWUgPT09IFwiYXdhaXRcIiAmJiAhdGhpcy5hd2FpdElkZW50UG9zKVxuICAgICAgICB7IHRoaXMuYXdhaXRJZGVudFBvcyA9IHN0YXJ0UG9zOyB9XG4gICAgICBwcm9wLmtpbmQgPSBcImluaXRcIjtcbiAgICAgIGlmIChpc1BhdHRlcm4pIHtcbiAgICAgICAgcHJvcC52YWx1ZSA9IHRoaXMucGFyc2VNYXliZURlZmF1bHQoc3RhcnRQb3MsIHN0YXJ0TG9jLCB0aGlzLmNvcHlOb2RlKHByb3Aua2V5KSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5lcSAmJiByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbiA8IDApXG4gICAgICAgICAgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbiA9IHRoaXMuc3RhcnQ7IH1cbiAgICAgICAgcHJvcC52YWx1ZSA9IHRoaXMucGFyc2VNYXliZURlZmF1bHQoc3RhcnRQb3MsIHN0YXJ0TG9jLCB0aGlzLmNvcHlOb2RlKHByb3Aua2V5KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wLnZhbHVlID0gdGhpcy5jb3B5Tm9kZShwcm9wLmtleSk7XG4gICAgICB9XG4gICAgICBwcm9wLnNob3J0aGFuZCA9IHRydWU7XG4gICAgfSBlbHNlIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgfTtcblxuICBwcCQ1LnBhcnNlUHJvcGVydHlOYW1lID0gZnVuY3Rpb24ocHJvcCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgICAgaWYgKHRoaXMuZWF0KHR5cGVzJDEuYnJhY2tldEwpKSB7XG4gICAgICAgIHByb3AuY29tcHV0ZWQgPSB0cnVlO1xuICAgICAgICBwcm9wLmtleSA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpO1xuICAgICAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLmJyYWNrZXRSKTtcbiAgICAgICAgcmV0dXJuIHByb3Aua2V5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wLmNvbXB1dGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wLmtleSA9IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5udW0gfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLnN0cmluZyA/IHRoaXMucGFyc2VFeHByQXRvbSgpIDogdGhpcy5wYXJzZUlkZW50KHRoaXMub3B0aW9ucy5hbGxvd1Jlc2VydmVkICE9PSBcIm5ldmVyXCIpXG4gIH07XG5cbiAgLy8gSW5pdGlhbGl6ZSBlbXB0eSBmdW5jdGlvbiBub2RlLlxuXG4gIHBwJDUuaW5pdEZ1bmN0aW9uID0gZnVuY3Rpb24obm9kZSkge1xuICAgIG5vZGUuaWQgPSBudWxsO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikgeyBub2RlLmdlbmVyYXRvciA9IG5vZGUuZXhwcmVzc2lvbiA9IGZhbHNlOyB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KSB7IG5vZGUuYXN5bmMgPSBmYWxzZTsgfVxuICB9O1xuXG4gIC8vIFBhcnNlIG9iamVjdCBvciBjbGFzcyBtZXRob2QuXG5cbiAgcHAkNS5wYXJzZU1ldGhvZCA9IGZ1bmN0aW9uKGlzR2VuZXJhdG9yLCBpc0FzeW5jLCBhbGxvd0RpcmVjdFN1cGVyKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgb2xkQXdhaXRJZGVudFBvcyA9IHRoaXMuYXdhaXRJZGVudFBvcztcblxuICAgIHRoaXMuaW5pdEZ1bmN0aW9uKG5vZGUpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNilcbiAgICAgIHsgbm9kZS5nZW5lcmF0b3IgPSBpc0dlbmVyYXRvcjsgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOClcbiAgICAgIHsgbm9kZS5hc3luYyA9ICEhaXNBc3luYzsgfVxuXG4gICAgdGhpcy55aWVsZFBvcyA9IDA7XG4gICAgdGhpcy5hd2FpdFBvcyA9IDA7XG4gICAgdGhpcy5hd2FpdElkZW50UG9zID0gMDtcbiAgICB0aGlzLmVudGVyU2NvcGUoZnVuY3Rpb25GbGFncyhpc0FzeW5jLCBub2RlLmdlbmVyYXRvcikgfCBTQ09QRV9TVVBFUiB8IChhbGxvd0RpcmVjdFN1cGVyID8gU0NPUEVfRElSRUNUX1NVUEVSIDogMCkpO1xuXG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5wYXJlbkwpO1xuICAgIG5vZGUucGFyYW1zID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KHR5cGVzJDEucGFyZW5SLCBmYWxzZSwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpO1xuICAgIHRoaXMuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKCk7XG4gICAgdGhpcy5wYXJzZUZ1bmN0aW9uQm9keShub2RlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zO1xuICAgIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvcztcbiAgICB0aGlzLmF3YWl0SWRlbnRQb3MgPSBvbGRBd2FpdElkZW50UG9zO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJGdW5jdGlvbkV4cHJlc3Npb25cIilcbiAgfTtcblxuICAvLyBQYXJzZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy5cblxuICBwcCQ1LnBhcnNlQXJyb3dFeHByZXNzaW9uID0gZnVuY3Rpb24obm9kZSwgcGFyYW1zLCBpc0FzeW5jLCBmb3JJbml0KSB7XG4gICAgdmFyIG9sZFlpZWxkUG9zID0gdGhpcy55aWVsZFBvcywgb2xkQXdhaXRQb3MgPSB0aGlzLmF3YWl0UG9zLCBvbGRBd2FpdElkZW50UG9zID0gdGhpcy5hd2FpdElkZW50UG9zO1xuXG4gICAgdGhpcy5lbnRlclNjb3BlKGZ1bmN0aW9uRmxhZ3MoaXNBc3luYywgZmFsc2UpIHwgU0NPUEVfQVJST1cpO1xuICAgIHRoaXMuaW5pdEZ1bmN0aW9uKG5vZGUpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCkgeyBub2RlLmFzeW5jID0gISFpc0FzeW5jOyB9XG5cbiAgICB0aGlzLnlpZWxkUG9zID0gMDtcbiAgICB0aGlzLmF3YWl0UG9zID0gMDtcbiAgICB0aGlzLmF3YWl0SWRlbnRQb3MgPSAwO1xuXG4gICAgbm9kZS5wYXJhbXMgPSB0aGlzLnRvQXNzaWduYWJsZUxpc3QocGFyYW1zLCB0cnVlKTtcbiAgICB0aGlzLnBhcnNlRnVuY3Rpb25Cb2R5KG5vZGUsIHRydWUsIGZhbHNlLCBmb3JJbml0KTtcblxuICAgIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvcztcbiAgICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3M7XG4gICAgdGhpcy5hd2FpdElkZW50UG9zID0gb2xkQXdhaXRJZGVudFBvcztcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIilcbiAgfTtcblxuICAvLyBQYXJzZSBmdW5jdGlvbiBib2R5IGFuZCBjaGVjayBwYXJhbWV0ZXJzLlxuXG4gIHBwJDUucGFyc2VGdW5jdGlvbkJvZHkgPSBmdW5jdGlvbihub2RlLCBpc0Fycm93RnVuY3Rpb24sIGlzTWV0aG9kLCBmb3JJbml0KSB7XG4gICAgdmFyIGlzRXhwcmVzc2lvbiA9IGlzQXJyb3dGdW5jdGlvbiAmJiB0aGlzLnR5cGUgIT09IHR5cGVzJDEuYnJhY2VMO1xuICAgIHZhciBvbGRTdHJpY3QgPSB0aGlzLnN0cmljdCwgdXNlU3RyaWN0ID0gZmFsc2U7XG5cbiAgICBpZiAoaXNFeHByZXNzaW9uKSB7XG4gICAgICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZm9ySW5pdCk7XG4gICAgICBub2RlLmV4cHJlc3Npb24gPSB0cnVlO1xuICAgICAgdGhpcy5jaGVja1BhcmFtcyhub2RlLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub25TaW1wbGUgPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNyAmJiAhdGhpcy5pc1NpbXBsZVBhcmFtTGlzdChub2RlLnBhcmFtcyk7XG4gICAgICBpZiAoIW9sZFN0cmljdCB8fCBub25TaW1wbGUpIHtcbiAgICAgICAgdXNlU3RyaWN0ID0gdGhpcy5zdHJpY3REaXJlY3RpdmUodGhpcy5lbmQpO1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24sIHZlcmlmeSB0aGF0IGFyZ3VtZW50IG5hbWVzXG4gICAgICAgIC8vIGFyZSBub3QgcmVwZWF0ZWQsIGFuZCBpdCBkb2VzIG5vdCB0cnkgdG8gYmluZCB0aGUgd29yZHMgYGV2YWxgXG4gICAgICAgIC8vIG9yIGBhcmd1bWVudHNgLlxuICAgICAgICBpZiAodXNlU3RyaWN0ICYmIG5vblNpbXBsZSlcbiAgICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIklsbGVnYWwgJ3VzZSBzdHJpY3QnIGRpcmVjdGl2ZSBpbiBmdW5jdGlvbiB3aXRoIG5vbi1zaW1wbGUgcGFyYW1ldGVyIGxpc3RcIik7IH1cbiAgICAgIH1cbiAgICAgIC8vIFN0YXJ0IGEgbmV3IHNjb3BlIHdpdGggcmVnYXJkIHRvIGxhYmVscyBhbmQgdGhlIGBpbkZ1bmN0aW9uYFxuICAgICAgLy8gZmxhZyAocmVzdG9yZSB0aGVtIHRvIHRoZWlyIG9sZCB2YWx1ZSBhZnRlcndhcmRzKS5cbiAgICAgIHZhciBvbGRMYWJlbHMgPSB0aGlzLmxhYmVscztcbiAgICAgIHRoaXMubGFiZWxzID0gW107XG4gICAgICBpZiAodXNlU3RyaWN0KSB7IHRoaXMuc3RyaWN0ID0gdHJ1ZTsgfVxuXG4gICAgICAvLyBBZGQgdGhlIHBhcmFtcyB0byB2YXJEZWNsYXJlZE5hbWVzIHRvIGVuc3VyZSB0aGF0IGFuIGVycm9yIGlzIHRocm93blxuICAgICAgLy8gaWYgYSBsZXQvY29uc3QgZGVjbGFyYXRpb24gaW4gdGhlIGZ1bmN0aW9uIGNsYXNoZXMgd2l0aCBvbmUgb2YgdGhlIHBhcmFtcy5cbiAgICAgIHRoaXMuY2hlY2tQYXJhbXMobm9kZSwgIW9sZFN0cmljdCAmJiAhdXNlU3RyaWN0ICYmICFpc0Fycm93RnVuY3Rpb24gJiYgIWlzTWV0aG9kICYmIHRoaXMuaXNTaW1wbGVQYXJhbUxpc3Qobm9kZS5wYXJhbXMpKTtcbiAgICAgIC8vIEVuc3VyZSB0aGUgZnVuY3Rpb24gbmFtZSBpc24ndCBhIGZvcmJpZGRlbiBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlLCBlLmcuICdldmFsJ1xuICAgICAgaWYgKHRoaXMuc3RyaWN0ICYmIG5vZGUuaWQpIHsgdGhpcy5jaGVja0xWYWxTaW1wbGUobm9kZS5pZCwgQklORF9PVVRTSURFKTsgfVxuICAgICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZUJsb2NrKGZhbHNlLCB1bmRlZmluZWQsIHVzZVN0cmljdCAmJiAhb2xkU3RyaWN0KTtcbiAgICAgIG5vZGUuZXhwcmVzc2lvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5hZGFwdERpcmVjdGl2ZVByb2xvZ3VlKG5vZGUuYm9keS5ib2R5KTtcbiAgICAgIHRoaXMubGFiZWxzID0gb2xkTGFiZWxzO1xuICAgIH1cbiAgICB0aGlzLmV4aXRTY29wZSgpO1xuICB9O1xuXG4gIHBwJDUuaXNTaW1wbGVQYXJhbUxpc3QgPSBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IHBhcmFtczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAgICB7XG4gICAgICB2YXIgcGFyYW0gPSBsaXN0W2ldO1xuXG4gICAgICBpZiAocGFyYW0udHlwZSAhPT0gXCJJZGVudGlmaWVyXCIpIHsgcmV0dXJuIGZhbHNlXG4gICAgfSB9XG4gICAgcmV0dXJuIHRydWVcbiAgfTtcblxuICAvLyBDaGVja3MgZnVuY3Rpb24gcGFyYW1zIGZvciB2YXJpb3VzIGRpc2FsbG93ZWQgcGF0dGVybnMgc3VjaCBhcyB1c2luZyBcImV2YWxcIlxuICAvLyBvciBcImFyZ3VtZW50c1wiIGFuZCBkdXBsaWNhdGUgcGFyYW1ldGVycy5cblxuICBwcCQ1LmNoZWNrUGFyYW1zID0gZnVuY3Rpb24obm9kZSwgYWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdmFyIG5hbWVIYXNoID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUucGFyYW1zOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICAgIHtcbiAgICAgIHZhciBwYXJhbSA9IGxpc3RbaV07XG5cbiAgICAgIHRoaXMuY2hlY2tMVmFsSW5uZXJQYXR0ZXJuKHBhcmFtLCBCSU5EX1ZBUiwgYWxsb3dEdXBsaWNhdGVzID8gbnVsbCA6IG5hbWVIYXNoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMsIGFuZCByZXR1cm5zIHRoZW0gYXNcbiAgLy8gYW4gYXJyYXkuIGBjbG9zZWAgaXMgdGhlIHRva2VuIHR5cGUgdGhhdCBlbmRzIHRoZSBsaXN0LCBhbmRcbiAgLy8gYGFsbG93RW1wdHlgIGNhbiBiZSB0dXJuZWQgb24gdG8gYWxsb3cgc3Vic2VxdWVudCBjb21tYXMgd2l0aFxuICAvLyBub3RoaW5nIGluIGJldHdlZW4gdGhlbSB0byBiZSBwYXJzZWQgYXMgYG51bGxgICh3aGljaCBpcyBuZWVkZWRcbiAgLy8gZm9yIGFycmF5IGxpdGVyYWxzKS5cblxuICBwcCQ1LnBhcnNlRXhwckxpc3QgPSBmdW5jdGlvbihjbG9zZSwgYWxsb3dUcmFpbGluZ0NvbW1hLCBhbGxvd0VtcHR5LCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgdmFyIGVsdHMgPSBbXSwgZmlyc3QgPSB0cnVlO1xuICAgIHdoaWxlICghdGhpcy5lYXQoY2xvc2UpKSB7XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuY29tbWEpO1xuICAgICAgICBpZiAoYWxsb3dUcmFpbGluZ0NvbW1hICYmIHRoaXMuYWZ0ZXJUcmFpbGluZ0NvbW1hKGNsb3NlKSkgeyBicmVhayB9XG4gICAgICB9IGVsc2UgeyBmaXJzdCA9IGZhbHNlOyB9XG5cbiAgICAgIHZhciBlbHQgPSAodm9pZCAwKTtcbiAgICAgIGlmIChhbGxvd0VtcHR5ICYmIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5jb21tYSlcbiAgICAgICAgeyBlbHQgPSBudWxsOyB9XG4gICAgICBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuZWxsaXBzaXMpIHtcbiAgICAgICAgZWx0ID0gdGhpcy5wYXJzZVNwcmVhZChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgJiYgdGhpcy50eXBlID09PSB0eXBlcyQxLmNvbW1hICYmIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA8IDApXG4gICAgICAgICAgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPSB0aGlzLnN0YXJ0OyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbHQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgICAgfVxuICAgICAgZWx0cy5wdXNoKGVsdCk7XG4gICAgfVxuICAgIHJldHVybiBlbHRzXG4gIH07XG5cbiAgcHAkNS5jaGVja1VucmVzZXJ2ZWQgPSBmdW5jdGlvbihyZWYpIHtcbiAgICB2YXIgc3RhcnQgPSByZWYuc3RhcnQ7XG4gICAgdmFyIGVuZCA9IHJlZi5lbmQ7XG4gICAgdmFyIG5hbWUgPSByZWYubmFtZTtcblxuICAgIGlmICh0aGlzLmluR2VuZXJhdG9yICYmIG5hbWUgPT09IFwieWllbGRcIilcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcIkNhbm5vdCB1c2UgJ3lpZWxkJyBhcyBpZGVudGlmaWVyIGluc2lkZSBhIGdlbmVyYXRvclwiKTsgfVxuICAgIGlmICh0aGlzLmluQXN5bmMgJiYgbmFtZSA9PT0gXCJhd2FpdFwiKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoc3RhcnQsIFwiQ2Fubm90IHVzZSAnYXdhaXQnIGFzIGlkZW50aWZpZXIgaW5zaWRlIGFuIGFzeW5jIGZ1bmN0aW9uXCIpOyB9XG4gICAgaWYgKHRoaXMuY3VycmVudFRoaXNTY29wZSgpLmluQ2xhc3NGaWVsZEluaXQgJiYgbmFtZSA9PT0gXCJhcmd1bWVudHNcIilcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcIkNhbm5vdCB1c2UgJ2FyZ3VtZW50cycgaW4gY2xhc3MgZmllbGQgaW5pdGlhbGl6ZXJcIik7IH1cbiAgICBpZiAodGhpcy5pbkNsYXNzU3RhdGljQmxvY2sgJiYgKG5hbWUgPT09IFwiYXJndW1lbnRzXCIgfHwgbmFtZSA9PT0gXCJhd2FpdFwiKSlcbiAgICAgIHsgdGhpcy5yYWlzZShzdGFydCwgKFwiQ2Fubm90IHVzZSBcIiArIG5hbWUgKyBcIiBpbiBjbGFzcyBzdGF0aWMgaW5pdGlhbGl6YXRpb24gYmxvY2tcIikpOyB9XG4gICAgaWYgKHRoaXMua2V5d29yZHMudGVzdChuYW1lKSlcbiAgICAgIHsgdGhpcy5yYWlzZShzdGFydCwgKFwiVW5leHBlY3RlZCBrZXl3b3JkICdcIiArIG5hbWUgKyBcIidcIikpOyB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDYgJiZcbiAgICAgIHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCkuaW5kZXhPZihcIlxcXFxcIikgIT09IC0xKSB7IHJldHVybiB9XG4gICAgdmFyIHJlID0gdGhpcy5zdHJpY3QgPyB0aGlzLnJlc2VydmVkV29yZHNTdHJpY3QgOiB0aGlzLnJlc2VydmVkV29yZHM7XG4gICAgaWYgKHJlLnRlc3QobmFtZSkpIHtcbiAgICAgIGlmICghdGhpcy5pbkFzeW5jICYmIG5hbWUgPT09IFwiYXdhaXRcIilcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoc3RhcnQsIFwiQ2Fubm90IHVzZSBrZXl3b3JkICdhd2FpdCcgb3V0c2lkZSBhbiBhc3luYyBmdW5jdGlvblwiKTsgfVxuICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCAoXCJUaGUga2V5d29yZCAnXCIgKyBuYW1lICsgXCInIGlzIHJlc2VydmVkXCIpKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUGFyc2UgdGhlIG5leHQgdG9rZW4gYXMgYW4gaWRlbnRpZmllci4gSWYgYGxpYmVyYWxgIGlzIHRydWUgKHVzZWRcbiAgLy8gd2hlbiBwYXJzaW5nIHByb3BlcnRpZXMpLCBpdCB3aWxsIGFsc28gY29udmVydCBrZXl3b3JkcyBpbnRvXG4gIC8vIGlkZW50aWZpZXJzLlxuXG4gIHBwJDUucGFyc2VJZGVudCA9IGZ1bmN0aW9uKGxpYmVyYWwpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMucGFyc2VJZGVudE5vZGUoKTtcbiAgICB0aGlzLm5leHQoISFsaWJlcmFsKTtcbiAgICB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJZGVudGlmaWVyXCIpO1xuICAgIGlmICghbGliZXJhbCkge1xuICAgICAgdGhpcy5jaGVja1VucmVzZXJ2ZWQobm9kZSk7XG4gICAgICBpZiAobm9kZS5uYW1lID09PSBcImF3YWl0XCIgJiYgIXRoaXMuYXdhaXRJZGVudFBvcylcbiAgICAgICAgeyB0aGlzLmF3YWl0SWRlbnRQb3MgPSBub2RlLnN0YXJ0OyB9XG4gICAgfVxuICAgIHJldHVybiBub2RlXG4gIH07XG5cbiAgcHAkNS5wYXJzZUlkZW50Tm9kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLm5hbWUpIHtcbiAgICAgIG5vZGUubmFtZSA9IHRoaXMudmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUua2V5d29yZCkge1xuICAgICAgbm9kZS5uYW1lID0gdGhpcy50eXBlLmtleXdvcmQ7XG5cbiAgICAgIC8vIFRvIGZpeCBodHRwczovL2dpdGh1Yi5jb20vYWNvcm5qcy9hY29ybi9pc3N1ZXMvNTc1XG4gICAgICAvLyBgY2xhc3NgIGFuZCBgZnVuY3Rpb25gIGtleXdvcmRzIHB1c2ggbmV3IGNvbnRleHQgaW50byB0aGlzLmNvbnRleHQuXG4gICAgICAvLyBCdXQgdGhlcmUgaXMgbm8gY2hhbmNlIHRvIHBvcCB0aGUgY29udGV4dCBpZiB0aGUga2V5d29yZCBpcyBjb25zdW1lZCBhcyBhbiBpZGVudGlmaWVyIHN1Y2ggYXMgYSBwcm9wZXJ0eSBuYW1lLlxuICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIHRva2VuIGlzIGEgZG90LCB0aGlzIGRvZXMgbm90IGFwcGx5IGJlY2F1c2UgdGhlIGNvbnRleHQtbWFuYWdpbmcgY29kZSBhbHJlYWR5IGlnbm9yZWQgdGhlIGtleXdvcmRcbiAgICAgIGlmICgobm9kZS5uYW1lID09PSBcImNsYXNzXCIgfHwgbm9kZS5uYW1lID09PSBcImZ1bmN0aW9uXCIpICYmXG4gICAgICAgICh0aGlzLmxhc3RUb2tFbmQgIT09IHRoaXMubGFzdFRva1N0YXJ0ICsgMSB8fCB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5sYXN0VG9rU3RhcnQpICE9PSA0NikpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnBvcCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVcbiAgfTtcblxuICBwcCQ1LnBhcnNlUHJpdmF0ZUlkZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEucHJpdmF0ZUlkKSB7XG4gICAgICBub2RlLm5hbWUgPSB0aGlzLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgICB9XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiUHJpdmF0ZUlkZW50aWZpZXJcIik7XG5cbiAgICAvLyBGb3IgdmFsaWRhdGluZyBleGlzdGVuY2VcbiAgICBpZiAodGhpcy5wcml2YXRlTmFtZVN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCAoXCJQcml2YXRlIGZpZWxkICcjXCIgKyAobm9kZS5uYW1lKSArIFwiJyBtdXN0IGJlIGRlY2xhcmVkIGluIGFuIGVuY2xvc2luZyBjbGFzc1wiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJpdmF0ZU5hbWVTdGFja1t0aGlzLnByaXZhdGVOYW1lU3RhY2subGVuZ3RoIC0gMV0udXNlZC5wdXNoKG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlXG4gIH07XG5cbiAgLy8gUGFyc2VzIHlpZWxkIGV4cHJlc3Npb24gaW5zaWRlIGdlbmVyYXRvci5cblxuICBwcCQ1LnBhcnNlWWllbGQgPSBmdW5jdGlvbihmb3JJbml0KSB7XG4gICAgaWYgKCF0aGlzLnlpZWxkUG9zKSB7IHRoaXMueWllbGRQb3MgPSB0aGlzLnN0YXJ0OyB9XG5cbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5zZW1pIHx8IHRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgfHwgKHRoaXMudHlwZSAhPT0gdHlwZXMkMS5zdGFyICYmICF0aGlzLnR5cGUuc3RhcnRzRXhwcikpIHtcbiAgICAgIG5vZGUuZGVsZWdhdGUgPSBmYWxzZTtcbiAgICAgIG5vZGUuYXJndW1lbnQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLmRlbGVnYXRlID0gdGhpcy5lYXQodHlwZXMkMS5zdGFyKTtcbiAgICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZm9ySW5pdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJZaWVsZEV4cHJlc3Npb25cIilcbiAgfTtcblxuICBwcCQ1LnBhcnNlQXdhaXQgPSBmdW5jdGlvbihmb3JJbml0KSB7XG4gICAgaWYgKCF0aGlzLmF3YWl0UG9zKSB7IHRoaXMuYXdhaXRQb3MgPSB0aGlzLnN0YXJ0OyB9XG5cbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZVVuYXJ5KG51bGwsIHRydWUsIGZhbHNlLCBmb3JJbml0KTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXdhaXRFeHByZXNzaW9uXCIpXG4gIH07XG5cbiAgdmFyIHBwJDQgPSBQYXJzZXIucHJvdG90eXBlO1xuXG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByYWlzZSBleGNlcHRpb25zIG9uIHBhcnNlIGVycm9ycy4gSXRcbiAgLy8gdGFrZXMgYW4gb2Zmc2V0IGludGVnZXIgKGludG8gdGhlIGN1cnJlbnQgYGlucHV0YCkgdG8gaW5kaWNhdGVcbiAgLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvciwgYXR0YWNoZXMgdGhlIHBvc2l0aW9uIHRvIHRoZSBlbmRcbiAgLy8gb2YgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCB0aGVuIHJhaXNlcyBhIGBTeW50YXhFcnJvcmAgd2l0aCB0aGF0XG4gIC8vIG1lc3NhZ2UuXG5cbiAgcHAkNC5yYWlzZSA9IGZ1bmN0aW9uKHBvcywgbWVzc2FnZSkge1xuICAgIHZhciBsb2MgPSBnZXRMaW5lSW5mbyh0aGlzLmlucHV0LCBwb3MpO1xuICAgIG1lc3NhZ2UgKz0gXCIgKFwiICsgbG9jLmxpbmUgKyBcIjpcIiArIGxvYy5jb2x1bW4gKyBcIilcIjtcbiAgICB2YXIgZXJyID0gbmV3IFN5bnRheEVycm9yKG1lc3NhZ2UpO1xuICAgIGVyci5wb3MgPSBwb3M7IGVyci5sb2MgPSBsb2M7IGVyci5yYWlzZWRBdCA9IHRoaXMucG9zO1xuICAgIHRocm93IGVyclxuICB9O1xuXG4gIHBwJDQucmFpc2VSZWNvdmVyYWJsZSA9IHBwJDQucmFpc2U7XG5cbiAgcHAkNC5jdXJQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7XG4gICAgICByZXR1cm4gbmV3IFBvc2l0aW9uKHRoaXMuY3VyTGluZSwgdGhpcy5wb3MgLSB0aGlzLmxpbmVTdGFydClcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBwJDMgPSBQYXJzZXIucHJvdG90eXBlO1xuXG4gIHZhciBTY29wZSA9IGZ1bmN0aW9uIFNjb3BlKGZsYWdzKSB7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICAgIC8vIEEgbGlzdCBvZiB2YXItZGVjbGFyZWQgbmFtZXMgaW4gdGhlIGN1cnJlbnQgbGV4aWNhbCBzY29wZVxuICAgIHRoaXMudmFyID0gW107XG4gICAgLy8gQSBsaXN0IG9mIGxleGljYWxseS1kZWNsYXJlZCBuYW1lcyBpbiB0aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlXG4gICAgdGhpcy5sZXhpY2FsID0gW107XG4gICAgLy8gQSBsaXN0IG9mIGxleGljYWxseS1kZWNsYXJlZCBGdW5jdGlvbkRlY2xhcmF0aW9uIG5hbWVzIGluIHRoZSBjdXJyZW50IGxleGljYWwgc2NvcGVcbiAgICB0aGlzLmZ1bmN0aW9ucyA9IFtdO1xuICAgIC8vIEEgc3dpdGNoIHRvIGRpc2FsbG93IHRoZSBpZGVudGlmaWVyIHJlZmVyZW5jZSAnYXJndW1lbnRzJ1xuICAgIHRoaXMuaW5DbGFzc0ZpZWxkSW5pdCA9IGZhbHNlO1xuICB9O1xuXG4gIC8vIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUga2VlcCB0cmFjayBvZiBkZWNsYXJlZCB2YXJpYWJsZXMgaW4gdGhlIGN1cnJlbnQgc2NvcGUgaW4gb3JkZXIgdG8gZGV0ZWN0IGR1cGxpY2F0ZSB2YXJpYWJsZSBuYW1lcy5cblxuICBwcCQzLmVudGVyU2NvcGUgPSBmdW5jdGlvbihmbGFncykge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKG5ldyBTY29wZShmbGFncykpO1xuICB9O1xuXG4gIHBwJDMuZXhpdFNjb3BlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zY29wZVN0YWNrLnBvcCgpO1xuICB9O1xuXG4gIC8vIFRoZSBzcGVjIHNheXM6XG4gIC8vID4gQXQgdGhlIHRvcCBsZXZlbCBvZiBhIGZ1bmN0aW9uLCBvciBzY3JpcHQsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhcmVcbiAgLy8gPiB0cmVhdGVkIGxpa2UgdmFyIGRlY2xhcmF0aW9ucyByYXRoZXIgdGhhbiBsaWtlIGxleGljYWwgZGVjbGFyYXRpb25zLlxuICBwcCQzLnRyZWF0RnVuY3Rpb25zQXNWYXJJblNjb3BlID0gZnVuY3Rpb24oc2NvcGUpIHtcbiAgICByZXR1cm4gKHNjb3BlLmZsYWdzICYgU0NPUEVfRlVOQ1RJT04pIHx8ICF0aGlzLmluTW9kdWxlICYmIChzY29wZS5mbGFncyAmIFNDT1BFX1RPUClcbiAgfTtcblxuICBwcCQzLmRlY2xhcmVOYW1lID0gZnVuY3Rpb24obmFtZSwgYmluZGluZ1R5cGUsIHBvcykge1xuICAgIHZhciByZWRlY2xhcmVkID0gZmFsc2U7XG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSBCSU5EX0xFWElDQUwpIHtcbiAgICAgIHZhciBzY29wZSA9IHRoaXMuY3VycmVudFNjb3BlKCk7XG4gICAgICByZWRlY2xhcmVkID0gc2NvcGUubGV4aWNhbC5pbmRleE9mKG5hbWUpID4gLTEgfHwgc2NvcGUuZnVuY3Rpb25zLmluZGV4T2YobmFtZSkgPiAtMSB8fCBzY29wZS52YXIuaW5kZXhPZihuYW1lKSA+IC0xO1xuICAgICAgc2NvcGUubGV4aWNhbC5wdXNoKG5hbWUpO1xuICAgICAgaWYgKHRoaXMuaW5Nb2R1bGUgJiYgKHNjb3BlLmZsYWdzICYgU0NPUEVfVE9QKSlcbiAgICAgICAgeyBkZWxldGUgdGhpcy51bmRlZmluZWRFeHBvcnRzW25hbWVdOyB9XG4gICAgfSBlbHNlIGlmIChiaW5kaW5nVHlwZSA9PT0gQklORF9TSU1QTEVfQ0FUQ0gpIHtcbiAgICAgIHZhciBzY29wZSQxID0gdGhpcy5jdXJyZW50U2NvcGUoKTtcbiAgICAgIHNjb3BlJDEubGV4aWNhbC5wdXNoKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmluZGluZ1R5cGUgPT09IEJJTkRfRlVOQ1RJT04pIHtcbiAgICAgIHZhciBzY29wZSQyID0gdGhpcy5jdXJyZW50U2NvcGUoKTtcbiAgICAgIGlmICh0aGlzLnRyZWF0RnVuY3Rpb25zQXNWYXIpXG4gICAgICAgIHsgcmVkZWNsYXJlZCA9IHNjb3BlJDIubGV4aWNhbC5pbmRleE9mKG5hbWUpID4gLTE7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyByZWRlY2xhcmVkID0gc2NvcGUkMi5sZXhpY2FsLmluZGV4T2YobmFtZSkgPiAtMSB8fCBzY29wZSQyLnZhci5pbmRleE9mKG5hbWUpID4gLTE7IH1cbiAgICAgIHNjb3BlJDIuZnVuY3Rpb25zLnB1c2gobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnNjb3BlU3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIHNjb3BlJDMgPSB0aGlzLnNjb3BlU3RhY2tbaV07XG4gICAgICAgIGlmIChzY29wZSQzLmxleGljYWwuaW5kZXhPZihuYW1lKSA+IC0xICYmICEoKHNjb3BlJDMuZmxhZ3MgJiBTQ09QRV9TSU1QTEVfQ0FUQ0gpICYmIHNjb3BlJDMubGV4aWNhbFswXSA9PT0gbmFtZSkgfHxcbiAgICAgICAgICAgICF0aGlzLnRyZWF0RnVuY3Rpb25zQXNWYXJJblNjb3BlKHNjb3BlJDMpICYmIHNjb3BlJDMuZnVuY3Rpb25zLmluZGV4T2YobmFtZSkgPiAtMSkge1xuICAgICAgICAgIHJlZGVjbGFyZWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUkMy52YXIucHVzaChuYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuaW5Nb2R1bGUgJiYgKHNjb3BlJDMuZmxhZ3MgJiBTQ09QRV9UT1ApKVxuICAgICAgICAgIHsgZGVsZXRlIHRoaXMudW5kZWZpbmVkRXhwb3J0c1tuYW1lXTsgfVxuICAgICAgICBpZiAoc2NvcGUkMy5mbGFncyAmIFNDT1BFX1ZBUikgeyBicmVhayB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZWRlY2xhcmVkKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShwb3MsIChcIklkZW50aWZpZXIgJ1wiICsgbmFtZSArIFwiJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkXCIpKTsgfVxuICB9O1xuXG4gIHBwJDMuY2hlY2tMb2NhbEV4cG9ydCA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgLy8gc2NvcGUuZnVuY3Rpb25zIG11c3QgYmUgZW1wdHkgYXMgTW9kdWxlIGNvZGUgaXMgYWx3YXlzIHN0cmljdC5cbiAgICBpZiAodGhpcy5zY29wZVN0YWNrWzBdLmxleGljYWwuaW5kZXhPZihpZC5uYW1lKSA9PT0gLTEgJiZcbiAgICAgICAgdGhpcy5zY29wZVN0YWNrWzBdLnZhci5pbmRleE9mKGlkLm5hbWUpID09PSAtMSkge1xuICAgICAgdGhpcy51bmRlZmluZWRFeHBvcnRzW2lkLm5hbWVdID0gaWQ7XG4gICAgfVxuICB9O1xuXG4gIHBwJDMuY3VycmVudFNjb3BlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NvcGVTdGFja1t0aGlzLnNjb3BlU3RhY2subGVuZ3RoIC0gMV1cbiAgfTtcblxuICBwcCQzLmN1cnJlbnRWYXJTY29wZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLnNjb3BlU3RhY2subGVuZ3RoIC0gMTs7IGktLSkge1xuICAgICAgdmFyIHNjb3BlID0gdGhpcy5zY29wZVN0YWNrW2ldO1xuICAgICAgaWYgKHNjb3BlLmZsYWdzICYgU0NPUEVfVkFSKSB7IHJldHVybiBzY29wZSB9XG4gICAgfVxuICB9O1xuXG4gIC8vIENvdWxkIGJlIHVzZWZ1bCBmb3IgYHRoaXNgLCBgbmV3LnRhcmdldGAsIGBzdXBlcigpYCwgYHN1cGVyLnByb3BlcnR5YCwgYW5kIGBzdXBlcltwcm9wZXJ0eV1gLlxuICBwcCQzLmN1cnJlbnRUaGlzU2NvcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zY29wZVN0YWNrLmxlbmd0aCAtIDE7OyBpLS0pIHtcbiAgICAgIHZhciBzY29wZSA9IHRoaXMuc2NvcGVTdGFja1tpXTtcbiAgICAgIGlmIChzY29wZS5mbGFncyAmIFNDT1BFX1ZBUiAmJiAhKHNjb3BlLmZsYWdzICYgU0NPUEVfQVJST1cpKSB7IHJldHVybiBzY29wZSB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBOb2RlID0gZnVuY3Rpb24gTm9kZShwYXJzZXIsIHBvcywgbG9jKSB7XG4gICAgdGhpcy50eXBlID0gXCJcIjtcbiAgICB0aGlzLnN0YXJ0ID0gcG9zO1xuICAgIHRoaXMuZW5kID0gMDtcbiAgICBpZiAocGFyc2VyLm9wdGlvbnMubG9jYXRpb25zKVxuICAgICAgeyB0aGlzLmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbihwYXJzZXIsIGxvYyk7IH1cbiAgICBpZiAocGFyc2VyLm9wdGlvbnMuZGlyZWN0U291cmNlRmlsZSlcbiAgICAgIHsgdGhpcy5zb3VyY2VGaWxlID0gcGFyc2VyLm9wdGlvbnMuZGlyZWN0U291cmNlRmlsZTsgfVxuICAgIGlmIChwYXJzZXIub3B0aW9ucy5yYW5nZXMpXG4gICAgICB7IHRoaXMucmFuZ2UgPSBbcG9zLCAwXTsgfVxuICB9O1xuXG4gIC8vIFN0YXJ0IGFuIEFTVCBub2RlLCBhdHRhY2hpbmcgYSBzdGFydCBvZmZzZXQuXG5cbiAgdmFyIHBwJDIgPSBQYXJzZXIucHJvdG90eXBlO1xuXG4gIHBwJDIuc3RhcnROb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBOb2RlKHRoaXMsIHRoaXMuc3RhcnQsIHRoaXMuc3RhcnRMb2MpXG4gIH07XG5cbiAgcHAkMi5zdGFydE5vZGVBdCA9IGZ1bmN0aW9uKHBvcywgbG9jKSB7XG4gICAgcmV0dXJuIG5ldyBOb2RlKHRoaXMsIHBvcywgbG9jKVxuICB9O1xuXG4gIC8vIEZpbmlzaCBhbiBBU1Qgbm9kZSwgYWRkaW5nIGB0eXBlYCBhbmQgYGVuZGAgcHJvcGVydGllcy5cblxuICBmdW5jdGlvbiBmaW5pc2hOb2RlQXQobm9kZSwgdHlwZSwgcG9zLCBsb2MpIHtcbiAgICBub2RlLnR5cGUgPSB0eXBlO1xuICAgIG5vZGUuZW5kID0gcG9zO1xuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKVxuICAgICAgeyBub2RlLmxvYy5lbmQgPSBsb2M7IH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcylcbiAgICAgIHsgbm9kZS5yYW5nZVsxXSA9IHBvczsgfVxuICAgIHJldHVybiBub2RlXG4gIH1cblxuICBwcCQyLmZpbmlzaE5vZGUgPSBmdW5jdGlvbihub2RlLCB0eXBlKSB7XG4gICAgcmV0dXJuIGZpbmlzaE5vZGVBdC5jYWxsKHRoaXMsIG5vZGUsIHR5cGUsIHRoaXMubGFzdFRva0VuZCwgdGhpcy5sYXN0VG9rRW5kTG9jKVxuICB9O1xuXG4gIC8vIEZpbmlzaCBub2RlIGF0IGdpdmVuIHBvc2l0aW9uXG5cbiAgcHAkMi5maW5pc2hOb2RlQXQgPSBmdW5jdGlvbihub2RlLCB0eXBlLCBwb3MsIGxvYykge1xuICAgIHJldHVybiBmaW5pc2hOb2RlQXQuY2FsbCh0aGlzLCBub2RlLCB0eXBlLCBwb3MsIGxvYylcbiAgfTtcblxuICBwcCQyLmNvcHlOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBuZXdOb2RlID0gbmV3IE5vZGUodGhpcywgbm9kZS5zdGFydCwgdGhpcy5zdGFydExvYyk7XG4gICAgZm9yICh2YXIgcHJvcCBpbiBub2RlKSB7IG5ld05vZGVbcHJvcF0gPSBub2RlW3Byb3BdOyB9XG4gICAgcmV0dXJuIG5ld05vZGVcbiAgfTtcblxuICAvLyBUaGlzIGZpbGUgY29udGFpbnMgVW5pY29kZSBwcm9wZXJ0aWVzIGV4dHJhY3RlZCBmcm9tIHRoZSBFQ01BU2NyaXB0IHNwZWNpZmljYXRpb24uXG4gIC8vIFRoZSBsaXN0cyBhcmUgZXh0cmFjdGVkIGxpa2Ugc286XG4gIC8vICQkKCcjdGFibGUtYmluYXJ5LXVuaWNvZGUtcHJvcGVydGllcyA+IGZpZ3VyZSA+IHRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOm50aC1jaGlsZCgxKSBjb2RlJykubWFwKGVsID0+IGVsLmlubmVyVGV4dClcblxuICAvLyAjdGFibGUtYmluYXJ5LXVuaWNvZGUtcHJvcGVydGllc1xuICB2YXIgZWNtYTlCaW5hcnlQcm9wZXJ0aWVzID0gXCJBU0NJSSBBU0NJSV9IZXhfRGlnaXQgQUhleCBBbHBoYWJldGljIEFscGhhIEFueSBBc3NpZ25lZCBCaWRpX0NvbnRyb2wgQmlkaV9DIEJpZGlfTWlycm9yZWQgQmlkaV9NIENhc2VfSWdub3JhYmxlIENJIENhc2VkIENoYW5nZXNfV2hlbl9DYXNlZm9sZGVkIENXQ0YgQ2hhbmdlc19XaGVuX0Nhc2VtYXBwZWQgQ1dDTSBDaGFuZ2VzX1doZW5fTG93ZXJjYXNlZCBDV0wgQ2hhbmdlc19XaGVuX05GS0NfQ2FzZWZvbGRlZCBDV0tDRiBDaGFuZ2VzX1doZW5fVGl0bGVjYXNlZCBDV1QgQ2hhbmdlc19XaGVuX1VwcGVyY2FzZWQgQ1dVIERhc2ggRGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludCBESSBEZXByZWNhdGVkIERlcCBEaWFjcml0aWMgRGlhIEVtb2ppIEVtb2ppX0NvbXBvbmVudCBFbW9qaV9Nb2RpZmllciBFbW9qaV9Nb2RpZmllcl9CYXNlIEVtb2ppX1ByZXNlbnRhdGlvbiBFeHRlbmRlciBFeHQgR3JhcGhlbWVfQmFzZSBHcl9CYXNlIEdyYXBoZW1lX0V4dGVuZCBHcl9FeHQgSGV4X0RpZ2l0IEhleCBJRFNfQmluYXJ5X09wZXJhdG9yIElEU0IgSURTX1RyaW5hcnlfT3BlcmF0b3IgSURTVCBJRF9Db250aW51ZSBJREMgSURfU3RhcnQgSURTIElkZW9ncmFwaGljIElkZW8gSm9pbl9Db250cm9sIEpvaW5fQyBMb2dpY2FsX09yZGVyX0V4Y2VwdGlvbiBMT0UgTG93ZXJjYXNlIExvd2VyIE1hdGggTm9uY2hhcmFjdGVyX0NvZGVfUG9pbnQgTkNoYXIgUGF0dGVybl9TeW50YXggUGF0X1N5biBQYXR0ZXJuX1doaXRlX1NwYWNlIFBhdF9XUyBRdW90YXRpb25fTWFyayBRTWFyayBSYWRpY2FsIFJlZ2lvbmFsX0luZGljYXRvciBSSSBTZW50ZW5jZV9UZXJtaW5hbCBTVGVybSBTb2Z0X0RvdHRlZCBTRCBUZXJtaW5hbF9QdW5jdHVhdGlvbiBUZXJtIFVuaWZpZWRfSWRlb2dyYXBoIFVJZGVvIFVwcGVyY2FzZSBVcHBlciBWYXJpYXRpb25fU2VsZWN0b3IgVlMgV2hpdGVfU3BhY2Ugc3BhY2UgWElEX0NvbnRpbnVlIFhJREMgWElEX1N0YXJ0IFhJRFNcIjtcbiAgdmFyIGVjbWExMEJpbmFyeVByb3BlcnRpZXMgPSBlY21hOUJpbmFyeVByb3BlcnRpZXMgKyBcIiBFeHRlbmRlZF9QaWN0b2dyYXBoaWNcIjtcbiAgdmFyIGVjbWExMUJpbmFyeVByb3BlcnRpZXMgPSBlY21hMTBCaW5hcnlQcm9wZXJ0aWVzO1xuICB2YXIgZWNtYTEyQmluYXJ5UHJvcGVydGllcyA9IGVjbWExMUJpbmFyeVByb3BlcnRpZXMgKyBcIiBFQmFzZSBFQ29tcCBFTW9kIEVQcmVzIEV4dFBpY3RcIjtcbiAgdmFyIGVjbWExM0JpbmFyeVByb3BlcnRpZXMgPSBlY21hMTJCaW5hcnlQcm9wZXJ0aWVzO1xuICB2YXIgZWNtYTE0QmluYXJ5UHJvcGVydGllcyA9IGVjbWExM0JpbmFyeVByb3BlcnRpZXM7XG5cbiAgdmFyIHVuaWNvZGVCaW5hcnlQcm9wZXJ0aWVzID0ge1xuICAgIDk6IGVjbWE5QmluYXJ5UHJvcGVydGllcyxcbiAgICAxMDogZWNtYTEwQmluYXJ5UHJvcGVydGllcyxcbiAgICAxMTogZWNtYTExQmluYXJ5UHJvcGVydGllcyxcbiAgICAxMjogZWNtYTEyQmluYXJ5UHJvcGVydGllcyxcbiAgICAxMzogZWNtYTEzQmluYXJ5UHJvcGVydGllcyxcbiAgICAxNDogZWNtYTE0QmluYXJ5UHJvcGVydGllc1xuICB9O1xuXG4gIC8vICN0YWJsZS1iaW5hcnktdW5pY29kZS1wcm9wZXJ0aWVzLW9mLXN0cmluZ3NcbiAgdmFyIGVjbWExNEJpbmFyeVByb3BlcnRpZXNPZlN0cmluZ3MgPSBcIkJhc2ljX0Vtb2ppIEVtb2ppX0tleWNhcF9TZXF1ZW5jZSBSR0lfRW1vamlfTW9kaWZpZXJfU2VxdWVuY2UgUkdJX0Vtb2ppX0ZsYWdfU2VxdWVuY2UgUkdJX0Vtb2ppX1RhZ19TZXF1ZW5jZSBSR0lfRW1vamlfWldKX1NlcXVlbmNlIFJHSV9FbW9qaVwiO1xuXG4gIHZhciB1bmljb2RlQmluYXJ5UHJvcGVydGllc09mU3RyaW5ncyA9IHtcbiAgICA5OiBcIlwiLFxuICAgIDEwOiBcIlwiLFxuICAgIDExOiBcIlwiLFxuICAgIDEyOiBcIlwiLFxuICAgIDEzOiBcIlwiLFxuICAgIDE0OiBlY21hMTRCaW5hcnlQcm9wZXJ0aWVzT2ZTdHJpbmdzXG4gIH07XG5cbiAgLy8gI3RhYmxlLXVuaWNvZGUtZ2VuZXJhbC1jYXRlZ29yeS12YWx1ZXNcbiAgdmFyIHVuaWNvZGVHZW5lcmFsQ2F0ZWdvcnlWYWx1ZXMgPSBcIkNhc2VkX0xldHRlciBMQyBDbG9zZV9QdW5jdHVhdGlvbiBQZSBDb25uZWN0b3JfUHVuY3R1YXRpb24gUGMgQ29udHJvbCBDYyBjbnRybCBDdXJyZW5jeV9TeW1ib2wgU2MgRGFzaF9QdW5jdHVhdGlvbiBQZCBEZWNpbWFsX051bWJlciBOZCBkaWdpdCBFbmNsb3NpbmdfTWFyayBNZSBGaW5hbF9QdW5jdHVhdGlvbiBQZiBGb3JtYXQgQ2YgSW5pdGlhbF9QdW5jdHVhdGlvbiBQaSBMZXR0ZXIgTCBMZXR0ZXJfTnVtYmVyIE5sIExpbmVfU2VwYXJhdG9yIFpsIExvd2VyY2FzZV9MZXR0ZXIgTGwgTWFyayBNIENvbWJpbmluZ19NYXJrIE1hdGhfU3ltYm9sIFNtIE1vZGlmaWVyX0xldHRlciBMbSBNb2RpZmllcl9TeW1ib2wgU2sgTm9uc3BhY2luZ19NYXJrIE1uIE51bWJlciBOIE9wZW5fUHVuY3R1YXRpb24gUHMgT3RoZXIgQyBPdGhlcl9MZXR0ZXIgTG8gT3RoZXJfTnVtYmVyIE5vIE90aGVyX1B1bmN0dWF0aW9uIFBvIE90aGVyX1N5bWJvbCBTbyBQYXJhZ3JhcGhfU2VwYXJhdG9yIFpwIFByaXZhdGVfVXNlIENvIFB1bmN0dWF0aW9uIFAgcHVuY3QgU2VwYXJhdG9yIFogU3BhY2VfU2VwYXJhdG9yIFpzIFNwYWNpbmdfTWFyayBNYyBTdXJyb2dhdGUgQ3MgU3ltYm9sIFMgVGl0bGVjYXNlX0xldHRlciBMdCBVbmFzc2lnbmVkIENuIFVwcGVyY2FzZV9MZXR0ZXIgTHVcIjtcblxuICAvLyAjdGFibGUtdW5pY29kZS1zY3JpcHQtdmFsdWVzXG4gIHZhciBlY21hOVNjcmlwdFZhbHVlcyA9IFwiQWRsYW0gQWRsbSBBaG9tIEFuYXRvbGlhbl9IaWVyb2dseXBocyBIbHV3IEFyYWJpYyBBcmFiIEFybWVuaWFuIEFybW4gQXZlc3RhbiBBdnN0IEJhbGluZXNlIEJhbGkgQmFtdW0gQmFtdSBCYXNzYV9WYWggQmFzcyBCYXRhayBCYXRrIEJlbmdhbGkgQmVuZyBCaGFpa3N1a2kgQmhrcyBCb3BvbW9mbyBCb3BvIEJyYWhtaSBCcmFoIEJyYWlsbGUgQnJhaSBCdWdpbmVzZSBCdWdpIEJ1aGlkIEJ1aGQgQ2FuYWRpYW5fQWJvcmlnaW5hbCBDYW5zIENhcmlhbiBDYXJpIENhdWNhc2lhbl9BbGJhbmlhbiBBZ2hiIENoYWttYSBDYWttIENoYW0gQ2hhbSBDaGVyb2tlZSBDaGVyIENvbW1vbiBaeXl5IENvcHRpYyBDb3B0IFFhYWMgQ3VuZWlmb3JtIFhzdXggQ3lwcmlvdCBDcHJ0IEN5cmlsbGljIEN5cmwgRGVzZXJldCBEc3J0IERldmFuYWdhcmkgRGV2YSBEdXBsb3lhbiBEdXBsIEVneXB0aWFuX0hpZXJvZ2x5cGhzIEVneXAgRWxiYXNhbiBFbGJhIEV0aGlvcGljIEV0aGkgR2VvcmdpYW4gR2VvciBHbGFnb2xpdGljIEdsYWcgR290aGljIEdvdGggR3JhbnRoYSBHcmFuIEdyZWVrIEdyZWsgR3VqYXJhdGkgR3VqciBHdXJtdWtoaSBHdXJ1IEhhbiBIYW5pIEhhbmd1bCBIYW5nIEhhbnVub28gSGFubyBIYXRyYW4gSGF0ciBIZWJyZXcgSGViciBIaXJhZ2FuYSBIaXJhIEltcGVyaWFsX0FyYW1haWMgQXJtaSBJbmhlcml0ZWQgWmluaCBRYWFpIEluc2NyaXB0aW9uYWxfUGFobGF2aSBQaGxpIEluc2NyaXB0aW9uYWxfUGFydGhpYW4gUHJ0aSBKYXZhbmVzZSBKYXZhIEthaXRoaSBLdGhpIEthbm5hZGEgS25kYSBLYXRha2FuYSBLYW5hIEtheWFoX0xpIEthbGkgS2hhcm9zaHRoaSBLaGFyIEtobWVyIEtobXIgS2hvamtpIEtob2ogS2h1ZGF3YWRpIFNpbmQgTGFvIExhb28gTGF0aW4gTGF0biBMZXBjaGEgTGVwYyBMaW1idSBMaW1iIExpbmVhcl9BIExpbmEgTGluZWFyX0IgTGluYiBMaXN1IExpc3UgTHljaWFuIEx5Y2kgTHlkaWFuIEx5ZGkgTWFoYWphbmkgTWFoaiBNYWxheWFsYW0gTWx5bSBNYW5kYWljIE1hbmQgTWFuaWNoYWVhbiBNYW5pIE1hcmNoZW4gTWFyYyBNYXNhcmFtX0dvbmRpIEdvbm0gTWVldGVpX01heWVrIE10ZWkgTWVuZGVfS2lrYWt1aSBNZW5kIE1lcm9pdGljX0N1cnNpdmUgTWVyYyBNZXJvaXRpY19IaWVyb2dseXBocyBNZXJvIE1pYW8gUGxyZCBNb2RpIE1vbmdvbGlhbiBNb25nIE1ybyBNcm9vIE11bHRhbmkgTXVsdCBNeWFubWFyIE15bXIgTmFiYXRhZWFuIE5iYXQgTmV3X1RhaV9MdWUgVGFsdSBOZXdhIE5ld2EgTmtvIE5rb28gTnVzaHUgTnNodSBPZ2hhbSBPZ2FtIE9sX0NoaWtpIE9sY2sgT2xkX0h1bmdhcmlhbiBIdW5nIE9sZF9JdGFsaWMgSXRhbCBPbGRfTm9ydGhfQXJhYmlhbiBOYXJiIE9sZF9QZXJtaWMgUGVybSBPbGRfUGVyc2lhbiBYcGVvIE9sZF9Tb3V0aF9BcmFiaWFuIFNhcmIgT2xkX1R1cmtpYyBPcmtoIE9yaXlhIE9yeWEgT3NhZ2UgT3NnZSBPc21hbnlhIE9zbWEgUGFoYXdoX0htb25nIEhtbmcgUGFsbXlyZW5lIFBhbG0gUGF1X0Npbl9IYXUgUGF1YyBQaGFnc19QYSBQaGFnIFBob2VuaWNpYW4gUGhueCBQc2FsdGVyX1BhaGxhdmkgUGhscCBSZWphbmcgUmpuZyBSdW5pYyBSdW5yIFNhbWFyaXRhbiBTYW1yIFNhdXJhc2h0cmEgU2F1ciBTaGFyYWRhIFNocmQgU2hhdmlhbiBTaGF3IFNpZGRoYW0gU2lkZCBTaWduV3JpdGluZyBTZ253IFNpbmhhbGEgU2luaCBTb3JhX1NvbXBlbmcgU29yYSBTb3lvbWJvIFNveW8gU3VuZGFuZXNlIFN1bmQgU3lsb3RpX05hZ3JpIFN5bG8gU3lyaWFjIFN5cmMgVGFnYWxvZyBUZ2xnIFRhZ2JhbndhIFRhZ2IgVGFpX0xlIFRhbGUgVGFpX1RoYW0gTGFuYSBUYWlfVmlldCBUYXZ0IFRha3JpIFRha3IgVGFtaWwgVGFtbCBUYW5ndXQgVGFuZyBUZWx1Z3UgVGVsdSBUaGFhbmEgVGhhYSBUaGFpIFRoYWkgVGliZXRhbiBUaWJ0IFRpZmluYWdoIFRmbmcgVGlyaHV0YSBUaXJoIFVnYXJpdGljIFVnYXIgVmFpIFZhaWkgV2FyYW5nX0NpdGkgV2FyYSBZaSBZaWlpIFphbmFiYXphcl9TcXVhcmUgWmFuYlwiO1xuICB2YXIgZWNtYTEwU2NyaXB0VmFsdWVzID0gZWNtYTlTY3JpcHRWYWx1ZXMgKyBcIiBEb2dyYSBEb2dyIEd1bmphbGFfR29uZGkgR29uZyBIYW5pZmlfUm9oaW5neWEgUm9oZyBNYWthc2FyIE1ha2EgTWVkZWZhaWRyaW4gTWVkZiBPbGRfU29nZGlhbiBTb2dvIFNvZ2RpYW4gU29nZFwiO1xuICB2YXIgZWNtYTExU2NyaXB0VmFsdWVzID0gZWNtYTEwU2NyaXB0VmFsdWVzICsgXCIgRWx5bWFpYyBFbHltIE5hbmRpbmFnYXJpIE5hbmQgTnlpYWtlbmdfUHVhY2h1ZV9IbW9uZyBIbW5wIFdhbmNobyBXY2hvXCI7XG4gIHZhciBlY21hMTJTY3JpcHRWYWx1ZXMgPSBlY21hMTFTY3JpcHRWYWx1ZXMgKyBcIiBDaG9yYXNtaWFuIENocnMgRGlhayBEaXZlc19Ba3VydSBLaGl0YW5fU21hbGxfU2NyaXB0IEtpdHMgWWV6aSBZZXppZGlcIjtcbiAgdmFyIGVjbWExM1NjcmlwdFZhbHVlcyA9IGVjbWExMlNjcmlwdFZhbHVlcyArIFwiIEN5cHJvX01pbm9hbiBDcG1uIE9sZF9VeWdodXIgT3VnciBUYW5nc2EgVG5zYSBUb3RvIFZpdGhrdXFpIFZpdGhcIjtcbiAgdmFyIGVjbWExNFNjcmlwdFZhbHVlcyA9IGVjbWExM1NjcmlwdFZhbHVlcyArIFwiIEhya3QgS2F0YWthbmFfT3JfSGlyYWdhbmEgS2F3aSBOYWdfTXVuZGFyaSBOYWdtIFVua25vd24gWnp6elwiO1xuXG4gIHZhciB1bmljb2RlU2NyaXB0VmFsdWVzID0ge1xuICAgIDk6IGVjbWE5U2NyaXB0VmFsdWVzLFxuICAgIDEwOiBlY21hMTBTY3JpcHRWYWx1ZXMsXG4gICAgMTE6IGVjbWExMVNjcmlwdFZhbHVlcyxcbiAgICAxMjogZWNtYTEyU2NyaXB0VmFsdWVzLFxuICAgIDEzOiBlY21hMTNTY3JpcHRWYWx1ZXMsXG4gICAgMTQ6IGVjbWExNFNjcmlwdFZhbHVlc1xuICB9O1xuXG4gIHZhciBkYXRhID0ge307XG4gIGZ1bmN0aW9uIGJ1aWxkVW5pY29kZURhdGEoZWNtYVZlcnNpb24pIHtcbiAgICB2YXIgZCA9IGRhdGFbZWNtYVZlcnNpb25dID0ge1xuICAgICAgYmluYXJ5OiB3b3Jkc1JlZ2V4cCh1bmljb2RlQmluYXJ5UHJvcGVydGllc1tlY21hVmVyc2lvbl0gKyBcIiBcIiArIHVuaWNvZGVHZW5lcmFsQ2F0ZWdvcnlWYWx1ZXMpLFxuICAgICAgYmluYXJ5T2ZTdHJpbmdzOiB3b3Jkc1JlZ2V4cCh1bmljb2RlQmluYXJ5UHJvcGVydGllc09mU3RyaW5nc1tlY21hVmVyc2lvbl0pLFxuICAgICAgbm9uQmluYXJ5OiB7XG4gICAgICAgIEdlbmVyYWxfQ2F0ZWdvcnk6IHdvcmRzUmVnZXhwKHVuaWNvZGVHZW5lcmFsQ2F0ZWdvcnlWYWx1ZXMpLFxuICAgICAgICBTY3JpcHQ6IHdvcmRzUmVnZXhwKHVuaWNvZGVTY3JpcHRWYWx1ZXNbZWNtYVZlcnNpb25dKVxuICAgICAgfVxuICAgIH07XG4gICAgZC5ub25CaW5hcnkuU2NyaXB0X0V4dGVuc2lvbnMgPSBkLm5vbkJpbmFyeS5TY3JpcHQ7XG5cbiAgICBkLm5vbkJpbmFyeS5nYyA9IGQubm9uQmluYXJ5LkdlbmVyYWxfQ2F0ZWdvcnk7XG4gICAgZC5ub25CaW5hcnkuc2MgPSBkLm5vbkJpbmFyeS5TY3JpcHQ7XG4gICAgZC5ub25CaW5hcnkuc2N4ID0gZC5ub25CaW5hcnkuU2NyaXB0X0V4dGVuc2lvbnM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IFs5LCAxMCwgMTEsIDEyLCAxMywgMTRdOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBlY21hVmVyc2lvbiA9IGxpc3RbaV07XG5cbiAgICBidWlsZFVuaWNvZGVEYXRhKGVjbWFWZXJzaW9uKTtcbiAgfVxuXG4gIHZhciBwcCQxID0gUGFyc2VyLnByb3RvdHlwZTtcblxuICB2YXIgUmVnRXhwVmFsaWRhdGlvblN0YXRlID0gZnVuY3Rpb24gUmVnRXhwVmFsaWRhdGlvblN0YXRlKHBhcnNlcikge1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMudmFsaWRGbGFncyA9IFwiZ2ltXCIgKyAocGFyc2VyLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiA/IFwidXlcIiA6IFwiXCIpICsgKHBhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgPyBcInNcIiA6IFwiXCIpICsgKHBhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uID49IDEzID8gXCJkXCIgOiBcIlwiKSArIChwYXJzZXIub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxNSA/IFwidlwiIDogXCJcIik7XG4gICAgdGhpcy51bmljb2RlUHJvcGVydGllcyA9IGRhdGFbcGFyc2VyLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTQgPyAxNCA6IHBhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uXTtcbiAgICB0aGlzLnNvdXJjZSA9IFwiXCI7XG4gICAgdGhpcy5mbGFncyA9IFwiXCI7XG4gICAgdGhpcy5zdGFydCA9IDA7XG4gICAgdGhpcy5zd2l0Y2hVID0gZmFsc2U7XG4gICAgdGhpcy5zd2l0Y2hWID0gZmFsc2U7XG4gICAgdGhpcy5zd2l0Y2hOID0gZmFsc2U7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMubGFzdEludFZhbHVlID0gMDtcbiAgICB0aGlzLmxhc3RTdHJpbmdWYWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5sYXN0QXNzZXJ0aW9uSXNRdWFudGlmaWFibGUgPSBmYWxzZTtcbiAgICB0aGlzLm51bUNhcHR1cmluZ1BhcmVucyA9IDA7XG4gICAgdGhpcy5tYXhCYWNrUmVmZXJlbmNlID0gMDtcbiAgICB0aGlzLmdyb3VwTmFtZXMgPSBbXTtcbiAgICB0aGlzLmJhY2tSZWZlcmVuY2VOYW1lcyA9IFtdO1xuICB9O1xuXG4gIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiByZXNldCAoc3RhcnQsIHBhdHRlcm4sIGZsYWdzKSB7XG4gICAgdmFyIHVuaWNvZGVTZXRzID0gZmxhZ3MuaW5kZXhPZihcInZcIikgIT09IC0xO1xuICAgIHZhciB1bmljb2RlID0gZmxhZ3MuaW5kZXhPZihcInVcIikgIT09IC0xO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8IDA7XG4gICAgdGhpcy5zb3VyY2UgPSBwYXR0ZXJuICsgXCJcIjtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgaWYgKHVuaWNvZGVTZXRzICYmIHRoaXMucGFyc2VyLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTUpIHtcbiAgICAgIHRoaXMuc3dpdGNoVSA9IHRydWU7XG4gICAgICB0aGlzLnN3aXRjaFYgPSB0cnVlO1xuICAgICAgdGhpcy5zd2l0Y2hOID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zd2l0Y2hVID0gdW5pY29kZSAmJiB0aGlzLnBhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uID49IDY7XG4gICAgICB0aGlzLnN3aXRjaFYgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3dpdGNoTiA9IHVuaWNvZGUgJiYgdGhpcy5wYXJzZXIub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5O1xuICAgIH1cbiAgfTtcblxuICBSZWdFeHBWYWxpZGF0aW9uU3RhdGUucHJvdG90eXBlLnJhaXNlID0gZnVuY3Rpb24gcmFpc2UgKG1lc3NhZ2UpIHtcbiAgICB0aGlzLnBhcnNlci5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIChcIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAvXCIgKyAodGhpcy5zb3VyY2UpICsgXCIvOiBcIiArIG1lc3NhZ2UpKTtcbiAgfTtcblxuICAvLyBJZiB1IGZsYWcgaXMgZ2l2ZW4sIHRoaXMgcmV0dXJucyB0aGUgY29kZSBwb2ludCBhdCB0aGUgaW5kZXggKGl0IGNvbWJpbmVzIGEgc3Vycm9nYXRlIHBhaXIpLlxuICAvLyBPdGhlcndpc2UsIHRoaXMgcmV0dXJucyB0aGUgY29kZSB1bml0IG9mIHRoZSBpbmRleCAoY2FuIGJlIGEgcGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyKS5cbiAgUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIGF0IChpLCBmb3JjZVUpIHtcbiAgICAgIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICAgIHZhciBzID0gdGhpcy5zb3VyY2U7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICBpZiAoaSA+PSBsKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgdmFyIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKCEoZm9yY2VVIHx8IHRoaXMuc3dpdGNoVSkgfHwgYyA8PSAweEQ3RkYgfHwgYyA+PSAweEUwMDAgfHwgaSArIDEgPj0gbCkge1xuICAgICAgcmV0dXJuIGNcbiAgICB9XG4gICAgdmFyIG5leHQgPSBzLmNoYXJDb2RlQXQoaSArIDEpO1xuICAgIHJldHVybiBuZXh0ID49IDB4REMwMCAmJiBuZXh0IDw9IDB4REZGRiA/IChjIDw8IDEwKSArIG5leHQgLSAweDM1RkRDMDAgOiBjXG4gIH07XG5cbiAgUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5uZXh0SW5kZXggPSBmdW5jdGlvbiBuZXh0SW5kZXggKGksIGZvcmNlVSkge1xuICAgICAgaWYgKCBmb3JjZVUgPT09IHZvaWQgMCApIGZvcmNlVSA9IGZhbHNlO1xuXG4gICAgdmFyIHMgPSB0aGlzLnNvdXJjZTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIGlmIChpID49IGwpIHtcbiAgICAgIHJldHVybiBsXG4gICAgfVxuICAgIHZhciBjID0gcy5jaGFyQ29kZUF0KGkpLCBuZXh0O1xuICAgIGlmICghKGZvcmNlVSB8fCB0aGlzLnN3aXRjaFUpIHx8IGMgPD0gMHhEN0ZGIHx8IGMgPj0gMHhFMDAwIHx8IGkgKyAxID49IGwgfHxcbiAgICAgICAgKG5leHQgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4REMwMCB8fCBuZXh0ID4gMHhERkZGKSB7XG4gICAgICByZXR1cm4gaSArIDFcbiAgICB9XG4gICAgcmV0dXJuIGkgKyAyXG4gIH07XG5cbiAgUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5jdXJyZW50ID0gZnVuY3Rpb24gY3VycmVudCAoZm9yY2VVKSB7XG4gICAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5hdCh0aGlzLnBvcywgZm9yY2VVKVxuICB9O1xuXG4gIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUubG9va2FoZWFkID0gZnVuY3Rpb24gbG9va2FoZWFkIChmb3JjZVUpIHtcbiAgICAgIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICAgIHJldHVybiB0aGlzLmF0KHRoaXMubmV4dEluZGV4KHRoaXMucG9zLCBmb3JjZVUpLCBmb3JjZVUpXG4gIH07XG5cbiAgUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5hZHZhbmNlID0gZnVuY3Rpb24gYWR2YW5jZSAoZm9yY2VVKSB7XG4gICAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgICB0aGlzLnBvcyA9IHRoaXMubmV4dEluZGV4KHRoaXMucG9zLCBmb3JjZVUpO1xuICB9O1xuXG4gIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUuZWF0ID0gZnVuY3Rpb24gZWF0IChjaCwgZm9yY2VVKSB7XG4gICAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50KGZvcmNlVSkgPT09IGNoKSB7XG4gICAgICB0aGlzLmFkdmFuY2UoZm9yY2VVKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUuZWF0Q2hhcnMgPSBmdW5jdGlvbiBlYXRDaGFycyAoY2hzLCBmb3JjZVUpIHtcbiAgICAgIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICAgIHZhciBwb3MgPSB0aGlzLnBvcztcbiAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IGNoczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBjaCA9IGxpc3RbaV07XG5cbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmF0KHBvcywgZm9yY2VVKTtcbiAgICAgIGlmIChjdXJyZW50ID09PSAtMSB8fCBjdXJyZW50ICE9PSBjaCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHBvcyA9IHRoaXMubmV4dEluZGV4KHBvcywgZm9yY2VVKTtcbiAgICB9XG4gICAgdGhpcy5wb3MgPSBwb3M7XG4gICAgcmV0dXJuIHRydWVcbiAgfTtcblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGZsYWdzIHBhcnQgb2YgYSBnaXZlbiBSZWdFeHBMaXRlcmFsLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZ0V4cFZhbGlkYXRpb25TdGF0ZX0gc3RhdGUgVGhlIHN0YXRlIHRvIHZhbGlkYXRlIFJlZ0V4cC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBwcCQxLnZhbGlkYXRlUmVnRXhwRmxhZ3MgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciB2YWxpZEZsYWdzID0gc3RhdGUudmFsaWRGbGFncztcbiAgICB2YXIgZmxhZ3MgPSBzdGF0ZS5mbGFncztcblxuICAgIHZhciB1ID0gZmFsc2U7XG4gICAgdmFyIHYgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmxhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBmbGFnID0gZmxhZ3MuY2hhckF0KGkpO1xuICAgICAgaWYgKHZhbGlkRmxhZ3MuaW5kZXhPZihmbGFnKSA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5yYWlzZShzdGF0ZS5zdGFydCwgXCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGZsYWdzLmluZGV4T2YoZmxhZywgaSArIDEpID4gLTEpIHtcbiAgICAgICAgdGhpcy5yYWlzZShzdGF0ZS5zdGFydCwgXCJEdXBsaWNhdGUgcmVndWxhciBleHByZXNzaW9uIGZsYWdcIik7XG4gICAgICB9XG4gICAgICBpZiAoZmxhZyA9PT0gXCJ1XCIpIHsgdSA9IHRydWU7IH1cbiAgICAgIGlmIChmbGFnID09PSBcInZcIikgeyB2ID0gdHJ1ZTsgfVxuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDE1ICYmIHUgJiYgdikge1xuICAgICAgdGhpcy5yYWlzZShzdGF0ZS5zdGFydCwgXCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnXCIpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIHBhdHRlcm4gcGFydCBvZiBhIGdpdmVuIFJlZ0V4cExpdGVyYWwuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVnRXhwVmFsaWRhdGlvblN0YXRlfSBzdGF0ZSBUaGUgc3RhdGUgdG8gdmFsaWRhdGUgUmVnRXhwLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHBwJDEudmFsaWRhdGVSZWdFeHBQYXR0ZXJuID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB0aGlzLnJlZ2V4cF9wYXR0ZXJuKHN0YXRlKTtcblxuICAgIC8vIFRoZSBnb2FsIHN5bWJvbCBmb3IgdGhlIHBhcnNlIGlzIHxQYXR0ZXJuW35VLCB+Tl18LiBJZiB0aGUgcmVzdWx0IG9mXG4gICAgLy8gcGFyc2luZyBjb250YWlucyBhIHxHcm91cE5hbWV8LCByZXBhcnNlIHdpdGggdGhlIGdvYWwgc3ltYm9sXG4gICAgLy8gfFBhdHRlcm5bflUsICtOXXwgYW5kIHVzZSB0aGlzIHJlc3VsdCBpbnN0ZWFkLiBUaHJvdyBhICpTeW50YXhFcnJvcipcbiAgICAvLyBleGNlcHRpb24gaWYgX1BfIGRpZCBub3QgY29uZm9ybSB0byB0aGUgZ3JhbW1hciwgaWYgYW55IGVsZW1lbnRzIG9mIF9QX1xuICAgIC8vIHdlcmUgbm90IG1hdGNoZWQgYnkgdGhlIHBhcnNlLCBvciBpZiBhbnkgRWFybHkgRXJyb3IgY29uZGl0aW9ucyBleGlzdC5cbiAgICBpZiAoIXN0YXRlLnN3aXRjaE4gJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiYgc3RhdGUuZ3JvdXBOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICBzdGF0ZS5zd2l0Y2hOID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVnZXhwX3BhdHRlcm4oc3RhdGUpO1xuICAgIH1cbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1QYXR0ZXJuXG4gIHBwJDEucmVnZXhwX3BhdHRlcm4gPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHN0YXRlLnBvcyA9IDA7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gMDtcbiAgICBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgPSBcIlwiO1xuICAgIHN0YXRlLmxhc3RBc3NlcnRpb25Jc1F1YW50aWZpYWJsZSA9IGZhbHNlO1xuICAgIHN0YXRlLm51bUNhcHR1cmluZ1BhcmVucyA9IDA7XG4gICAgc3RhdGUubWF4QmFja1JlZmVyZW5jZSA9IDA7XG4gICAgc3RhdGUuZ3JvdXBOYW1lcy5sZW5ndGggPSAwO1xuICAgIHN0YXRlLmJhY2tSZWZlcmVuY2VOYW1lcy5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5yZWdleHBfZGlzanVuY3Rpb24oc3RhdGUpO1xuXG4gICAgaWYgKHN0YXRlLnBvcyAhPT0gc3RhdGUuc291cmNlLmxlbmd0aCkge1xuICAgICAgLy8gTWFrZSB0aGUgc2FtZSBtZXNzYWdlcyBhcyBWOC5cbiAgICAgIGlmIChzdGF0ZS5lYXQoMHgyOSAvKiApICovKSkge1xuICAgICAgICBzdGF0ZS5yYWlzZShcIlVubWF0Y2hlZCAnKSdcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuZWF0KDB4NUQgLyogXSAqLykgfHwgc3RhdGUuZWF0KDB4N0QgLyogfSAqLykpIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJMb25lIHF1YW50aWZpZXIgYnJhY2tldHNcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGF0ZS5tYXhCYWNrUmVmZXJlbmNlID4gc3RhdGUubnVtQ2FwdHVyaW5nUGFyZW5zKSB7XG4gICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgZXNjYXBlXCIpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IHN0YXRlLmJhY2tSZWZlcmVuY2VOYW1lczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBuYW1lID0gbGlzdFtpXTtcblxuICAgICAgaWYgKHN0YXRlLmdyb3VwTmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIG5hbWVkIGNhcHR1cmUgcmVmZXJlbmNlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtRGlzanVuY3Rpb25cbiAgcHAkMS5yZWdleHBfZGlzanVuY3Rpb24gPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHRoaXMucmVnZXhwX2FsdGVybmF0aXZlKHN0YXRlKTtcbiAgICB3aGlsZSAoc3RhdGUuZWF0KDB4N0MgLyogfCAqLykpIHtcbiAgICAgIHRoaXMucmVnZXhwX2FsdGVybmF0aXZlKHN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHRoZSBzYW1lIG1lc3NhZ2UgYXMgVjguXG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdFF1YW50aWZpZXIoc3RhdGUsIHRydWUpKSB7XG4gICAgICBzdGF0ZS5yYWlzZShcIk5vdGhpbmcgdG8gcmVwZWF0XCIpO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuZWF0KDB4N0IgLyogeyAqLykpIHtcbiAgICAgIHN0YXRlLnJhaXNlKFwiTG9uZSBxdWFudGlmaWVyIGJyYWNrZXRzXCIpO1xuICAgIH1cbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1BbHRlcm5hdGl2ZVxuICBwcCQxLnJlZ2V4cF9hbHRlcm5hdGl2ZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgd2hpbGUgKHN0YXRlLnBvcyA8IHN0YXRlLnNvdXJjZS5sZW5ndGggJiYgdGhpcy5yZWdleHBfZWF0VGVybShzdGF0ZSkpXG4gICAgICB7IH1cbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItVGVybVxuICBwcCQxLnJlZ2V4cF9lYXRUZXJtID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0QXNzZXJ0aW9uKHN0YXRlKSkge1xuICAgICAgLy8gSGFuZGxlIGBRdWFudGlmaWFibGVBc3NlcnRpb24gUXVhbnRpZmllcmAgYWx0ZXJuYXRpdmUuXG4gICAgICAvLyBgc3RhdGUubGFzdEFzc2VydGlvbklzUXVhbnRpZmlhYmxlYCBpcyB0cnVlIGlmIHRoZSBsYXN0IGVhdGVuIEFzc2VydGlvblxuICAgICAgLy8gaXMgYSBRdWFudGlmaWFibGVBc3NlcnRpb24uXG4gICAgICBpZiAoc3RhdGUubGFzdEFzc2VydGlvbklzUXVhbnRpZmlhYmxlICYmIHRoaXMucmVnZXhwX2VhdFF1YW50aWZpZXIoc3RhdGUpKSB7XG4gICAgICAgIC8vIE1ha2UgdGhlIHNhbWUgbWVzc2FnZSBhcyBWOC5cbiAgICAgICAgaWYgKHN0YXRlLnN3aXRjaFUpIHtcbiAgICAgICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgcXVhbnRpZmllclwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuc3dpdGNoVSA/IHRoaXMucmVnZXhwX2VhdEF0b20oc3RhdGUpIDogdGhpcy5yZWdleHBfZWF0RXh0ZW5kZWRBdG9tKHN0YXRlKSkge1xuICAgICAgdGhpcy5yZWdleHBfZWF0UXVhbnRpZmllcihzdGF0ZSk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1Bc3NlcnRpb25cbiAgcHAkMS5yZWdleHBfZWF0QXNzZXJ0aW9uID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgc3RhdGUubGFzdEFzc2VydGlvbklzUXVhbnRpZmlhYmxlID0gZmFsc2U7XG5cbiAgICAvLyBeLCAkXG4gICAgaWYgKHN0YXRlLmVhdCgweDVFIC8qIF4gKi8pIHx8IHN0YXRlLmVhdCgweDI0IC8qICQgKi8pKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFxcYiBcXEJcbiAgICBpZiAoc3RhdGUuZWF0KDB4NUMgLyogXFwgKi8pKSB7XG4gICAgICBpZiAoc3RhdGUuZWF0KDB4NDIgLyogQiAqLykgfHwgc3RhdGUuZWF0KDB4NjIgLyogYiAqLykpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIH1cblxuICAgIC8vIExvb2thaGVhZCAvIExvb2tiZWhpbmRcbiAgICBpZiAoc3RhdGUuZWF0KDB4MjggLyogKCAqLykgJiYgc3RhdGUuZWF0KDB4M0YgLyogPyAqLykpIHtcbiAgICAgIHZhciBsb29rYmVoaW5kID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkpIHtcbiAgICAgICAgbG9va2JlaGluZCA9IHN0YXRlLmVhdCgweDNDIC8qIDwgKi8pO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmVhdCgweDNEIC8qID0gKi8pIHx8IHN0YXRlLmVhdCgweDIxIC8qICEgKi8pKSB7XG4gICAgICAgIHRoaXMucmVnZXhwX2Rpc2p1bmN0aW9uKHN0YXRlKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5lYXQoMHgyOSAvKiApICovKSkge1xuICAgICAgICAgIHN0YXRlLnJhaXNlKFwiVW50ZXJtaW5hdGVkIGdyb3VwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmxhc3RBc3NlcnRpb25Jc1F1YW50aWZpYWJsZSA9ICFsb29rYmVoaW5kO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLVF1YW50aWZpZXJcbiAgcHAkMS5yZWdleHBfZWF0UXVhbnRpZmllciA9IGZ1bmN0aW9uKHN0YXRlLCBub0Vycm9yKSB7XG4gICAgaWYgKCBub0Vycm9yID09PSB2b2lkIDAgKSBub0Vycm9yID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5yZWdleHBfZWF0UXVhbnRpZmllclByZWZpeChzdGF0ZSwgbm9FcnJvcikpIHtcbiAgICAgIHN0YXRlLmVhdCgweDNGIC8qID8gKi8pO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtUXVhbnRpZmllclByZWZpeFxuICBwcCQxLnJlZ2V4cF9lYXRRdWFudGlmaWVyUHJlZml4ID0gZnVuY3Rpb24oc3RhdGUsIG5vRXJyb3IpIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3RhdGUuZWF0KDB4MkEgLyogKiAqLykgfHxcbiAgICAgIHN0YXRlLmVhdCgweDJCIC8qICsgKi8pIHx8XG4gICAgICBzdGF0ZS5lYXQoMHgzRiAvKiA/ICovKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0QnJhY2VkUXVhbnRpZmllcihzdGF0ZSwgbm9FcnJvcilcbiAgICApXG4gIH07XG4gIHBwJDEucmVnZXhwX2VhdEJyYWNlZFF1YW50aWZpZXIgPSBmdW5jdGlvbihzdGF0ZSwgbm9FcnJvcikge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICBpZiAoc3RhdGUuZWF0KDB4N0IgLyogeyAqLykpIHtcbiAgICAgIHZhciBtaW4gPSAwLCBtYXggPSAtMTtcbiAgICAgIGlmICh0aGlzLnJlZ2V4cF9lYXREZWNpbWFsRGlnaXRzKHN0YXRlKSkge1xuICAgICAgICBtaW4gPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICAgIGlmIChzdGF0ZS5lYXQoMHgyQyAvKiAsICovKSAmJiB0aGlzLnJlZ2V4cF9lYXREZWNpbWFsRGlnaXRzKHN0YXRlKSkge1xuICAgICAgICAgIG1heCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuZWF0KDB4N0QgLyogfSAqLykpIHtcbiAgICAgICAgICAvLyBTeW50YXhFcnJvciBpbiBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jc2VjLXRlcm1cbiAgICAgICAgICBpZiAobWF4ICE9PSAtMSAmJiBtYXggPCBtaW4gJiYgIW5vRXJyb3IpIHtcbiAgICAgICAgICAgIHN0YXRlLnJhaXNlKFwibnVtYmVycyBvdXQgb2Ygb3JkZXIgaW4ge30gcXVhbnRpZmllclwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnN3aXRjaFUgJiYgIW5vRXJyb3IpIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbmNvbXBsZXRlIHF1YW50aWZpZXJcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQXRvbVxuICBwcCQxLnJlZ2V4cF9lYXRBdG9tID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yZWdleHBfZWF0UGF0dGVybkNoYXJhY3RlcnMoc3RhdGUpIHx8XG4gICAgICBzdGF0ZS5lYXQoMHgyRSAvKiAuICovKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0UmV2ZXJzZVNvbGlkdXNBdG9tRXNjYXBlKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0Q2hhcmFjdGVyQ2xhc3Moc3RhdGUpIHx8XG4gICAgICB0aGlzLnJlZ2V4cF9lYXRVbmNhcHR1cmluZ0dyb3VwKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0Q2FwdHVyaW5nR3JvdXAoc3RhdGUpXG4gICAgKVxuICB9O1xuICBwcCQxLnJlZ2V4cF9lYXRSZXZlcnNlU29saWR1c0F0b21Fc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICBpZiAoc3RhdGUuZWF0KDB4NUMgLyogXFwgKi8pKSB7XG4gICAgICBpZiAodGhpcy5yZWdleHBfZWF0QXRvbUVzY2FwZShzdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcbiAgcHAkMS5yZWdleHBfZWF0VW5jYXB0dXJpbmdHcm91cCA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgIGlmIChzdGF0ZS5lYXQoMHgyOCAvKiAoICovKSkge1xuICAgICAgaWYgKHN0YXRlLmVhdCgweDNGIC8qID8gKi8pICYmIHN0YXRlLmVhdCgweDNBIC8qIDogKi8pKSB7XG4gICAgICAgIHRoaXMucmVnZXhwX2Rpc2p1bmN0aW9uKHN0YXRlKTtcbiAgICAgICAgaWYgKHN0YXRlLmVhdCgweDI5IC8qICkgKi8pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5yYWlzZShcIlVudGVybWluYXRlZCBncm91cFwiKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcbiAgcHAkMS5yZWdleHBfZWF0Q2FwdHVyaW5nR3JvdXAgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5lYXQoMHgyOCAvKiAoICovKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5KSB7XG4gICAgICAgIHRoaXMucmVnZXhwX2dyb3VwU3BlY2lmaWVyKHN0YXRlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuY3VycmVudCgpID09PSAweDNGIC8qID8gKi8pIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWdleHBfZGlzanVuY3Rpb24oc3RhdGUpO1xuICAgICAgaWYgKHN0YXRlLmVhdCgweDI5IC8qICkgKi8pKSB7XG4gICAgICAgIHN0YXRlLm51bUNhcHR1cmluZ1BhcmVucyArPSAxO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgc3RhdGUucmFpc2UoXCJVbnRlcm1pbmF0ZWQgZ3JvdXBcIik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1FeHRlbmRlZEF0b21cbiAgcHAkMS5yZWdleHBfZWF0RXh0ZW5kZWRBdG9tID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3RhdGUuZWF0KDB4MkUgLyogLiAqLykgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdFJldmVyc2VTb2xpZHVzQXRvbUVzY2FwZShzdGF0ZSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckNsYXNzKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0VW5jYXB0dXJpbmdHcm91cChzdGF0ZSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdENhcHR1cmluZ0dyb3VwKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0SW52YWxpZEJyYWNlZFF1YW50aWZpZXIoc3RhdGUpIHx8XG4gICAgICB0aGlzLnJlZ2V4cF9lYXRFeHRlbmRlZFBhdHRlcm5DaGFyYWN0ZXIoc3RhdGUpXG4gICAgKVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1JbnZhbGlkQnJhY2VkUXVhbnRpZmllclxuICBwcCQxLnJlZ2V4cF9lYXRJbnZhbGlkQnJhY2VkUXVhbnRpZmllciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdEJyYWNlZFF1YW50aWZpZXIoc3RhdGUsIHRydWUpKSB7XG4gICAgICBzdGF0ZS5yYWlzZShcIk5vdGhpbmcgdG8gcmVwZWF0XCIpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1TeW50YXhDaGFyYWN0ZXJcbiAgcHAkMS5yZWdleHBfZWF0U3ludGF4Q2hhcmFjdGVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gICAgaWYgKGlzU3ludGF4Q2hhcmFjdGVyKGNoKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gY2g7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcbiAgZnVuY3Rpb24gaXNTeW50YXhDaGFyYWN0ZXIoY2gpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2ggPT09IDB4MjQgLyogJCAqLyB8fFxuICAgICAgY2ggPj0gMHgyOCAvKiAoICovICYmIGNoIDw9IDB4MkIgLyogKyAqLyB8fFxuICAgICAgY2ggPT09IDB4MkUgLyogLiAqLyB8fFxuICAgICAgY2ggPT09IDB4M0YgLyogPyAqLyB8fFxuICAgICAgY2ggPj0gMHg1QiAvKiBbICovICYmIGNoIDw9IDB4NUUgLyogXiAqLyB8fFxuICAgICAgY2ggPj0gMHg3QiAvKiB7ICovICYmIGNoIDw9IDB4N0QgLyogfSAqL1xuICAgIClcbiAgfVxuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLVBhdHRlcm5DaGFyYWN0ZXJcbiAgLy8gQnV0IGVhdCBlYWdlci5cbiAgcHAkMS5yZWdleHBfZWF0UGF0dGVybkNoYXJhY3RlcnMgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICB2YXIgY2ggPSAwO1xuICAgIHdoaWxlICgoY2ggPSBzdGF0ZS5jdXJyZW50KCkpICE9PSAtMSAmJiAhaXNTeW50YXhDaGFyYWN0ZXIoY2gpKSB7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZS5wb3MgIT09IHN0YXJ0XG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUV4dGVuZGVkUGF0dGVybkNoYXJhY3RlclxuICBwcCQxLnJlZ2V4cF9lYXRFeHRlbmRlZFBhdHRlcm5DaGFyYWN0ZXIgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgICBpZiAoXG4gICAgICBjaCAhPT0gLTEgJiZcbiAgICAgIGNoICE9PSAweDI0IC8qICQgKi8gJiZcbiAgICAgICEoY2ggPj0gMHgyOCAvKiAoICovICYmIGNoIDw9IDB4MkIgLyogKyAqLykgJiZcbiAgICAgIGNoICE9PSAweDJFIC8qIC4gKi8gJiZcbiAgICAgIGNoICE9PSAweDNGIC8qID8gKi8gJiZcbiAgICAgIGNoICE9PSAweDVCIC8qIFsgKi8gJiZcbiAgICAgIGNoICE9PSAweDVFIC8qIF4gKi8gJiZcbiAgICAgIGNoICE9PSAweDdDIC8qIHwgKi9cbiAgICApIHtcbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIEdyb3VwU3BlY2lmaWVyIDo6XG4gIC8vICAgW2VtcHR5XVxuICAvLyAgIGA/YCBHcm91cE5hbWVcbiAgcHAkMS5yZWdleHBfZ3JvdXBTcGVjaWZpZXIgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5lYXQoMHgzRiAvKiA/ICovKSkge1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdEdyb3VwTmFtZShzdGF0ZSkpIHtcbiAgICAgICAgaWYgKHN0YXRlLmdyb3VwTmFtZXMuaW5kZXhPZihzdGF0ZS5sYXN0U3RyaW5nVmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgIHN0YXRlLnJhaXNlKFwiRHVwbGljYXRlIGNhcHR1cmUgZ3JvdXAgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5ncm91cE5hbWVzLnB1c2goc3RhdGUubGFzdFN0cmluZ1ZhbHVlKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgZ3JvdXBcIik7XG4gICAgfVxuICB9O1xuXG4gIC8vIEdyb3VwTmFtZSA6OlxuICAvLyAgIGA8YCBSZWdFeHBJZGVudGlmaWVyTmFtZSBgPmBcbiAgLy8gTm90ZTogdGhpcyB1cGRhdGVzIGBzdGF0ZS5sYXN0U3RyaW5nVmFsdWVgIHByb3BlcnR5IHdpdGggdGhlIGVhdGVuIG5hbWUuXG4gIHBwJDEucmVnZXhwX2VhdEdyb3VwTmFtZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlID0gXCJcIjtcbiAgICBpZiAoc3RhdGUuZWF0KDB4M0MgLyogPCAqLykpIHtcbiAgICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRSZWdFeHBJZGVudGlmaWVyTmFtZShzdGF0ZSkgJiYgc3RhdGUuZWF0KDB4M0UgLyogPiAqLykpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBjYXB0dXJlIGdyb3VwIG5hbWVcIik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIFJlZ0V4cElkZW50aWZpZXJOYW1lIDo6XG4gIC8vICAgUmVnRXhwSWRlbnRpZmllclN0YXJ0XG4gIC8vICAgUmVnRXhwSWRlbnRpZmllck5hbWUgUmVnRXhwSWRlbnRpZmllclBhcnRcbiAgLy8gTm90ZTogdGhpcyB1cGRhdGVzIGBzdGF0ZS5sYXN0U3RyaW5nVmFsdWVgIHByb3BlcnR5IHdpdGggdGhlIGVhdGVuIG5hbWUuXG4gIHBwJDEucmVnZXhwX2VhdFJlZ0V4cElkZW50aWZpZXJOYW1lID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgPSBcIlwiO1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRSZWdFeHBJZGVudGlmaWVyU3RhcnQoc3RhdGUpKSB7XG4gICAgICBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgKz0gY29kZVBvaW50VG9TdHJpbmcoc3RhdGUubGFzdEludFZhbHVlKTtcbiAgICAgIHdoaWxlICh0aGlzLnJlZ2V4cF9lYXRSZWdFeHBJZGVudGlmaWVyUGFydChzdGF0ZSkpIHtcbiAgICAgICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlICs9IGNvZGVQb2ludFRvU3RyaW5nKHN0YXRlLmxhc3RJbnRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBSZWdFeHBJZGVudGlmaWVyU3RhcnQgOjpcbiAgLy8gICBVbmljb2RlSURTdGFydFxuICAvLyAgIGAkYFxuICAvLyAgIGBfYFxuICAvLyAgIGBcXGAgUmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlWytVXVxuICBwcCQxLnJlZ2V4cF9lYXRSZWdFeHBJZGVudGlmaWVyU3RhcnQgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICB2YXIgZm9yY2VVID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExO1xuICAgIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoZm9yY2VVKTtcbiAgICBzdGF0ZS5hZHZhbmNlKGZvcmNlVSk7XG5cbiAgICBpZiAoY2ggPT09IDB4NUMgLyogXFwgKi8gJiYgdGhpcy5yZWdleHBfZWF0UmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlKHN0YXRlLCBmb3JjZVUpKSB7XG4gICAgICBjaCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gY2g7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIHJldHVybiBmYWxzZVxuICB9O1xuICBmdW5jdGlvbiBpc1JlZ0V4cElkZW50aWZpZXJTdGFydChjaCkge1xuICAgIHJldHVybiBpc0lkZW50aWZpZXJTdGFydChjaCwgdHJ1ZSkgfHwgY2ggPT09IDB4MjQgLyogJCAqLyB8fCBjaCA9PT0gMHg1RiAvKiBfICovXG4gIH1cblxuICAvLyBSZWdFeHBJZGVudGlmaWVyUGFydCA6OlxuICAvLyAgIFVuaWNvZGVJRENvbnRpbnVlXG4gIC8vICAgYCRgXG4gIC8vICAgYF9gXG4gIC8vICAgYFxcYCBSZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VbK1VdXG4gIC8vICAgPFpXTko+XG4gIC8vICAgPFpXSj5cbiAgcHAkMS5yZWdleHBfZWF0UmVnRXhwSWRlbnRpZmllclBhcnQgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICB2YXIgZm9yY2VVID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExO1xuICAgIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoZm9yY2VVKTtcbiAgICBzdGF0ZS5hZHZhbmNlKGZvcmNlVSk7XG5cbiAgICBpZiAoY2ggPT09IDB4NUMgLyogXFwgKi8gJiYgdGhpcy5yZWdleHBfZWF0UmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlKHN0YXRlLCBmb3JjZVUpKSB7XG4gICAgICBjaCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaDtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgc3RhdGUucG9zID0gc3RhcnQ7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG4gIGZ1bmN0aW9uIGlzUmVnRXhwSWRlbnRpZmllclBhcnQoY2gpIHtcbiAgICByZXR1cm4gaXNJZGVudGlmaWVyQ2hhcihjaCwgdHJ1ZSkgfHwgY2ggPT09IDB4MjQgLyogJCAqLyB8fCBjaCA9PT0gMHg1RiAvKiBfICovIHx8IGNoID09PSAweDIwMEMgLyogPFpXTko+ICovIHx8IGNoID09PSAweDIwMEQgLyogPFpXSj4gKi9cbiAgfVxuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1BdG9tRXNjYXBlXG4gIHBwJDEucmVnZXhwX2VhdEF0b21Fc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVnZXhwX2VhdEJhY2tSZWZlcmVuY2Uoc3RhdGUpIHx8XG4gICAgICB0aGlzLnJlZ2V4cF9lYXRDaGFyYWN0ZXJDbGFzc0VzY2FwZShzdGF0ZSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckVzY2FwZShzdGF0ZSkgfHxcbiAgICAgIChzdGF0ZS5zd2l0Y2hOICYmIHRoaXMucmVnZXhwX2VhdEtHcm91cE5hbWUoc3RhdGUpKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKHN0YXRlLnN3aXRjaFUpIHtcbiAgICAgIC8vIE1ha2UgdGhlIHNhbWUgbWVzc2FnZSBhcyBWOC5cbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50KCkgPT09IDB4NjMgLyogYyAqLykge1xuICAgICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgdW5pY29kZSBlc2NhcGVcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgZXNjYXBlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcbiAgcHAkMS5yZWdleHBfZWF0QmFja1JlZmVyZW5jZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXREZWNpbWFsRXNjYXBlKHN0YXRlKSkge1xuICAgICAgdmFyIG4gPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICBpZiAoc3RhdGUuc3dpdGNoVSkge1xuICAgICAgICAvLyBGb3IgU3ludGF4RXJyb3IgaW4gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3NlYy1hdG9tZXNjYXBlXG4gICAgICAgIGlmIChuID4gc3RhdGUubWF4QmFja1JlZmVyZW5jZSkge1xuICAgICAgICAgIHN0YXRlLm1heEJhY2tSZWZlcmVuY2UgPSBuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAobiA8PSBzdGF0ZS5udW1DYXB0dXJpbmdQYXJlbnMpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcbiAgcHAkMS5yZWdleHBfZWF0S0dyb3VwTmFtZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmVhdCgweDZCIC8qIGsgKi8pKSB7XG4gICAgICBpZiAodGhpcy5yZWdleHBfZWF0R3JvdXBOYW1lKHN0YXRlKSkge1xuICAgICAgICBzdGF0ZS5iYWNrUmVmZXJlbmNlTmFtZXMucHVzaChzdGF0ZS5sYXN0U3RyaW5nVmFsdWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIG5hbWVkIHJlZmVyZW5jZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUNoYXJhY3RlckVzY2FwZVxuICBwcCQxLnJlZ2V4cF9lYXRDaGFyYWN0ZXJFc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlZ2V4cF9lYXRDb250cm9sRXNjYXBlKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0Q0NvbnRyb2xMZXR0ZXIoc3RhdGUpIHx8XG4gICAgICB0aGlzLnJlZ2V4cF9lYXRaZXJvKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0SGV4RXNjYXBlU2VxdWVuY2Uoc3RhdGUpIHx8XG4gICAgICB0aGlzLnJlZ2V4cF9lYXRSZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2Uoc3RhdGUsIGZhbHNlKSB8fFxuICAgICAgKCFzdGF0ZS5zd2l0Y2hVICYmIHRoaXMucmVnZXhwX2VhdExlZ2FjeU9jdGFsRXNjYXBlU2VxdWVuY2Uoc3RhdGUpKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0SWRlbnRpdHlFc2NhcGUoc3RhdGUpXG4gICAgKVxuICB9O1xuICBwcCQxLnJlZ2V4cF9lYXRDQ29udHJvbExldHRlciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgIGlmIChzdGF0ZS5lYXQoMHg2MyAvKiBjICovKSkge1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdENvbnRyb2xMZXR0ZXIoc3RhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG4gIHBwJDEucmVnZXhwX2VhdFplcm8gPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5jdXJyZW50KCkgPT09IDB4MzAgLyogMCAqLyAmJiAhaXNEZWNpbWFsRGlnaXQoc3RhdGUubG9va2FoZWFkKCkpKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAwO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQ29udHJvbEVzY2FwZVxuICBwcCQxLnJlZ2V4cF9lYXRDb250cm9sRXNjYXBlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gICAgaWYgKGNoID09PSAweDc0IC8qIHQgKi8pIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MDk7IC8qIFxcdCAqL1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKGNoID09PSAweDZFIC8qIG4gKi8pIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MEE7IC8qIFxcbiAqL1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKGNoID09PSAweDc2IC8qIHYgKi8pIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MEI7IC8qIFxcdiAqL1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKGNoID09PSAweDY2IC8qIGYgKi8pIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MEM7IC8qIFxcZiAqL1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKGNoID09PSAweDcyIC8qIHIgKi8pIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MEQ7IC8qIFxcciAqL1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQ29udHJvbExldHRlclxuICBwcCQxLnJlZ2V4cF9lYXRDb250cm9sTGV0dGVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gICAgaWYgKGlzQ29udHJvbExldHRlcihjaCkpIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoICUgMHgyMDtcbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuICBmdW5jdGlvbiBpc0NvbnRyb2xMZXR0ZXIoY2gpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGNoID49IDB4NDEgLyogQSAqLyAmJiBjaCA8PSAweDVBIC8qIFogKi8pIHx8XG4gICAgICAoY2ggPj0gMHg2MSAvKiBhICovICYmIGNoIDw9IDB4N0EgLyogeiAqLylcbiAgICApXG4gIH1cblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1SZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VcbiAgcHAkMS5yZWdleHBfZWF0UmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlID0gZnVuY3Rpb24oc3RhdGUsIGZvcmNlVSkge1xuICAgIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICB2YXIgc3dpdGNoVSA9IGZvcmNlVSB8fCBzdGF0ZS5zd2l0Y2hVO1xuXG4gICAgaWYgKHN0YXRlLmVhdCgweDc1IC8qIHUgKi8pKSB7XG4gICAgICBpZiAodGhpcy5yZWdleHBfZWF0Rml4ZWRIZXhEaWdpdHMoc3RhdGUsIDQpKSB7XG4gICAgICAgIHZhciBsZWFkID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgICBpZiAoc3dpdGNoVSAmJiBsZWFkID49IDB4RDgwMCAmJiBsZWFkIDw9IDB4REJGRikge1xuICAgICAgICAgIHZhciBsZWFkU3Vycm9nYXRlRW5kID0gc3RhdGUucG9zO1xuICAgICAgICAgIGlmIChzdGF0ZS5lYXQoMHg1QyAvKiBcXCAqLykgJiYgc3RhdGUuZWF0KDB4NzUgLyogdSAqLykgJiYgdGhpcy5yZWdleHBfZWF0Rml4ZWRIZXhEaWdpdHMoc3RhdGUsIDQpKSB7XG4gICAgICAgICAgICB2YXIgdHJhaWwgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodHJhaWwgPj0gMHhEQzAwICYmIHRyYWlsIDw9IDB4REZGRikge1xuICAgICAgICAgICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAobGVhZCAtIDB4RDgwMCkgKiAweDQwMCArICh0cmFpbCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0ZS5wb3MgPSBsZWFkU3Vycm9nYXRlRW5kO1xuICAgICAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGxlYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgc3dpdGNoVSAmJlxuICAgICAgICBzdGF0ZS5lYXQoMHg3QiAvKiB7ICovKSAmJlxuICAgICAgICB0aGlzLnJlZ2V4cF9lYXRIZXhEaWdpdHMoc3RhdGUpICYmXG4gICAgICAgIHN0YXRlLmVhdCgweDdEIC8qIH0gKi8pICYmXG4gICAgICAgIGlzVmFsaWRVbmljb2RlKHN0YXRlLmxhc3RJbnRWYWx1ZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHN3aXRjaFUpIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHVuaWNvZGUgZXNjYXBlXCIpO1xuICAgICAgfVxuICAgICAgc3RhdGUucG9zID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG4gIGZ1bmN0aW9uIGlzVmFsaWRVbmljb2RlKGNoKSB7XG4gICAgcmV0dXJuIGNoID49IDAgJiYgY2ggPD0gMHgxMEZGRkZcbiAgfVxuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1JZGVudGl0eUVzY2FwZVxuICBwcCQxLnJlZ2V4cF9lYXRJZGVudGl0eUVzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnN3aXRjaFUpIHtcbiAgICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRTeW50YXhDaGFyYWN0ZXIoc3RhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuZWF0KDB4MkYgLyogLyAqLykpIHtcbiAgICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gMHgyRjsgLyogLyAqL1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICAgIGlmIChjaCAhPT0gMHg2MyAvKiBjICovICYmICghc3RhdGUuc3dpdGNoTiB8fCBjaCAhPT0gMHg2QiAvKiBrICovKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gY2g7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLURlY2ltYWxFc2NhcGVcbiAgcHAkMS5yZWdleHBfZWF0RGVjaW1hbEVzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gMDtcbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gICAgaWYgKGNoID49IDB4MzEgLyogMSAqLyAmJiBjaCA8PSAweDM5IC8qIDkgKi8pIHtcbiAgICAgIGRvIHtcbiAgICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gMTAgKiBzdGF0ZS5sYXN0SW50VmFsdWUgKyAoY2ggLSAweDMwIC8qIDAgKi8pO1xuICAgICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgICB9IHdoaWxlICgoY2ggPSBzdGF0ZS5jdXJyZW50KCkpID49IDB4MzAgLyogMCAqLyAmJiBjaCA8PSAweDM5IC8qIDkgKi8pXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBSZXR1cm4gdmFsdWVzIHVzZWQgYnkgY2hhcmFjdGVyIHNldCBwYXJzaW5nIG1ldGhvZHMsIG5lZWRlZCB0b1xuICAvLyBmb3JiaWQgbmVnYXRpb24gb2Ygc2V0cyB0aGF0IGNhbiBtYXRjaCBzdHJpbmdzLlxuICB2YXIgQ2hhclNldE5vbmUgPSAwOyAvLyBOb3RoaW5nIHBhcnNlZFxuICB2YXIgQ2hhclNldE9rID0gMTsgLy8gQ29uc3RydWN0IHBhcnNlZCwgY2Fubm90IGNvbnRhaW4gc3RyaW5nc1xuICB2YXIgQ2hhclNldFN0cmluZyA9IDI7IC8vIENvbnN0cnVjdCBwYXJzZWQsIGNhbiBjb250YWluIHN0cmluZ3NcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1DaGFyYWN0ZXJDbGFzc0VzY2FwZVxuICBwcCQxLnJlZ2V4cF9lYXRDaGFyYWN0ZXJDbGFzc0VzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuXG4gICAgaWYgKGlzQ2hhcmFjdGVyQ2xhc3NFc2NhcGUoY2gpKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAtMTtcbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiBDaGFyU2V0T2tcbiAgICB9XG5cbiAgICB2YXIgbmVnYXRlID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgc3RhdGUuc3dpdGNoVSAmJlxuICAgICAgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiZcbiAgICAgICgobmVnYXRlID0gY2ggPT09IDB4NTAgLyogUCAqLykgfHwgY2ggPT09IDB4NzAgLyogcCAqLylcbiAgICApIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IC0xO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmIChcbiAgICAgICAgc3RhdGUuZWF0KDB4N0IgLyogeyAqLykgJiZcbiAgICAgICAgKHJlc3VsdCA9IHRoaXMucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eVZhbHVlRXhwcmVzc2lvbihzdGF0ZSkpICYmXG4gICAgICAgIHN0YXRlLmVhdCgweDdEIC8qIH0gKi8pXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5lZ2F0ZSAmJiByZXN1bHQgPT09IENoYXJTZXRTdHJpbmcpIHsgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHByb3BlcnR5IG5hbWVcIik7IH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfVxuICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHByb3BlcnR5IG5hbWVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIENoYXJTZXROb25lXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNDaGFyYWN0ZXJDbGFzc0VzY2FwZShjaCkge1xuICAgIHJldHVybiAoXG4gICAgICBjaCA9PT0gMHg2NCAvKiBkICovIHx8XG4gICAgICBjaCA9PT0gMHg0NCAvKiBEICovIHx8XG4gICAgICBjaCA9PT0gMHg3MyAvKiBzICovIHx8XG4gICAgICBjaCA9PT0gMHg1MyAvKiBTICovIHx8XG4gICAgICBjaCA9PT0gMHg3NyAvKiB3ICovIHx8XG4gICAgICBjaCA9PT0gMHg1NyAvKiBXICovXG4gICAgKVxuICB9XG5cbiAgLy8gVW5pY29kZVByb3BlcnR5VmFsdWVFeHByZXNzaW9uIDo6XG4gIC8vICAgVW5pY29kZVByb3BlcnR5TmFtZSBgPWAgVW5pY29kZVByb3BlcnR5VmFsdWVcbiAgLy8gICBMb25lVW5pY29kZVByb3BlcnR5TmFtZU9yVmFsdWVcbiAgcHAkMS5yZWdleHBfZWF0VW5pY29kZVByb3BlcnR5VmFsdWVFeHByZXNzaW9uID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG5cbiAgICAvLyBVbmljb2RlUHJvcGVydHlOYW1lIGA9YCBVbmljb2RlUHJvcGVydHlWYWx1ZVxuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRVbmljb2RlUHJvcGVydHlOYW1lKHN0YXRlKSAmJiBzdGF0ZS5lYXQoMHgzRCAvKiA9ICovKSkge1xuICAgICAgdmFyIG5hbWUgPSBzdGF0ZS5sYXN0U3RyaW5nVmFsdWU7XG4gICAgICBpZiAodGhpcy5yZWdleHBfZWF0VW5pY29kZVByb3BlcnR5VmFsdWUoc3RhdGUpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHN0YXRlLmxhc3RTdHJpbmdWYWx1ZTtcbiAgICAgICAgdGhpcy5yZWdleHBfdmFsaWRhdGVVbmljb2RlUHJvcGVydHlOYW1lQW5kVmFsdWUoc3RhdGUsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIENoYXJTZXRPa1xuICAgICAgfVxuICAgIH1cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcblxuICAgIC8vIExvbmVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZVxuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRMb25lVW5pY29kZVByb3BlcnR5TmFtZU9yVmFsdWUoc3RhdGUpKSB7XG4gICAgICB2YXIgbmFtZU9yVmFsdWUgPSBzdGF0ZS5sYXN0U3RyaW5nVmFsdWU7XG4gICAgICByZXR1cm4gdGhpcy5yZWdleHBfdmFsaWRhdGVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZShzdGF0ZSwgbmFtZU9yVmFsdWUpXG4gICAgfVxuICAgIHJldHVybiBDaGFyU2V0Tm9uZVxuICB9O1xuXG4gIHBwJDEucmVnZXhwX3ZhbGlkYXRlVW5pY29kZVByb3BlcnR5TmFtZUFuZFZhbHVlID0gZnVuY3Rpb24oc3RhdGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKCFoYXNPd24oc3RhdGUudW5pY29kZVByb3BlcnRpZXMubm9uQmluYXJ5LCBuYW1lKSlcbiAgICAgIHsgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHByb3BlcnR5IG5hbWVcIik7IH1cbiAgICBpZiAoIXN0YXRlLnVuaWNvZGVQcm9wZXJ0aWVzLm5vbkJpbmFyeVtuYW1lXS50ZXN0KHZhbHVlKSlcbiAgICAgIHsgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHByb3BlcnR5IHZhbHVlXCIpOyB9XG4gIH07XG5cbiAgcHAkMS5yZWdleHBfdmFsaWRhdGVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZSA9IGZ1bmN0aW9uKHN0YXRlLCBuYW1lT3JWYWx1ZSkge1xuICAgIGlmIChzdGF0ZS51bmljb2RlUHJvcGVydGllcy5iaW5hcnkudGVzdChuYW1lT3JWYWx1ZSkpIHsgcmV0dXJuIENoYXJTZXRPayB9XG4gICAgaWYgKHN0YXRlLnN3aXRjaFYgJiYgc3RhdGUudW5pY29kZVByb3BlcnRpZXMuYmluYXJ5T2ZTdHJpbmdzLnRlc3QobmFtZU9yVmFsdWUpKSB7IHJldHVybiBDaGFyU2V0U3RyaW5nIH1cbiAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgcHJvcGVydHkgbmFtZVwiKTtcbiAgfTtcblxuICAvLyBVbmljb2RlUHJvcGVydHlOYW1lIDo6XG4gIC8vICAgVW5pY29kZVByb3BlcnR5TmFtZUNoYXJhY3RlcnNcbiAgcHAkMS5yZWdleHBfZWF0VW5pY29kZVByb3BlcnR5TmFtZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIGNoID0gMDtcbiAgICBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgPSBcIlwiO1xuICAgIHdoaWxlIChpc1VuaWNvZGVQcm9wZXJ0eU5hbWVDaGFyYWN0ZXIoY2ggPSBzdGF0ZS5jdXJyZW50KCkpKSB7XG4gICAgICBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgKz0gY29kZVBvaW50VG9TdHJpbmcoY2gpO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUubGFzdFN0cmluZ1ZhbHVlICE9PSBcIlwiXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNVbmljb2RlUHJvcGVydHlOYW1lQ2hhcmFjdGVyKGNoKSB7XG4gICAgcmV0dXJuIGlzQ29udHJvbExldHRlcihjaCkgfHwgY2ggPT09IDB4NUYgLyogXyAqL1xuICB9XG5cbiAgLy8gVW5pY29kZVByb3BlcnR5VmFsdWUgOjpcbiAgLy8gICBVbmljb2RlUHJvcGVydHlWYWx1ZUNoYXJhY3RlcnNcbiAgcHAkMS5yZWdleHBfZWF0VW5pY29kZVByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBjaCA9IDA7XG4gICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlID0gXCJcIjtcbiAgICB3aGlsZSAoaXNVbmljb2RlUHJvcGVydHlWYWx1ZUNoYXJhY3RlcihjaCA9IHN0YXRlLmN1cnJlbnQoKSkpIHtcbiAgICAgIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSArPSBjb2RlUG9pbnRUb1N0cmluZyhjaCk7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgIT09IFwiXCJcbiAgfTtcbiAgZnVuY3Rpb24gaXNVbmljb2RlUHJvcGVydHlWYWx1ZUNoYXJhY3RlcihjaCkge1xuICAgIHJldHVybiBpc1VuaWNvZGVQcm9wZXJ0eU5hbWVDaGFyYWN0ZXIoY2gpIHx8IGlzRGVjaW1hbERpZ2l0KGNoKVxuICB9XG5cbiAgLy8gTG9uZVVuaWNvZGVQcm9wZXJ0eU5hbWVPclZhbHVlIDo6XG4gIC8vICAgVW5pY29kZVByb3BlcnR5VmFsdWVDaGFyYWN0ZXJzXG4gIHBwJDEucmVnZXhwX2VhdExvbmVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eVZhbHVlKHN0YXRlKVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUNoYXJhY3RlckNsYXNzXG4gIHBwJDEucmVnZXhwX2VhdENoYXJhY3RlckNsYXNzID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUuZWF0KDB4NUIgLyogWyAqLykpIHtcbiAgICAgIHZhciBuZWdhdGUgPSBzdGF0ZS5lYXQoMHg1RSAvKiBeICovKTtcbiAgICAgIHZhciByZXN1bHQgPSB0aGlzLnJlZ2V4cF9jbGFzc0NvbnRlbnRzKHN0YXRlKTtcbiAgICAgIGlmICghc3RhdGUuZWF0KDB4NUQgLyogXSAqLykpXG4gICAgICAgIHsgc3RhdGUucmFpc2UoXCJVbnRlcm1pbmF0ZWQgY2hhcmFjdGVyIGNsYXNzXCIpOyB9XG4gICAgICBpZiAobmVnYXRlICYmIHJlc3VsdCA9PT0gQ2hhclNldFN0cmluZylcbiAgICAgICAgeyBzdGF0ZS5yYWlzZShcIk5lZ2F0ZWQgY2hhcmFjdGVyIGNsYXNzIG1heSBjb250YWluIHN0cmluZ3NcIik7IH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzQ29udGVudHNcbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQ2xhc3NSYW5nZXNcbiAgcHAkMS5yZWdleHBfY2xhc3NDb250ZW50cyA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmN1cnJlbnQoKSA9PT0gMHg1RCAvKiBdICovKSB7IHJldHVybiBDaGFyU2V0T2sgfVxuICAgIGlmIChzdGF0ZS5zd2l0Y2hWKSB7IHJldHVybiB0aGlzLnJlZ2V4cF9jbGFzc1NldEV4cHJlc3Npb24oc3RhdGUpIH1cbiAgICB0aGlzLnJlZ2V4cF9ub25FbXB0eUNsYXNzUmFuZ2VzKHN0YXRlKTtcbiAgICByZXR1cm4gQ2hhclNldE9rXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtTm9uZW1wdHlDbGFzc1Jhbmdlc1xuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1Ob25lbXB0eUNsYXNzUmFuZ2VzTm9EYXNoXG4gIHBwJDEucmVnZXhwX25vbkVtcHR5Q2xhc3NSYW5nZXMgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHdoaWxlICh0aGlzLnJlZ2V4cF9lYXRDbGFzc0F0b20oc3RhdGUpKSB7XG4gICAgICB2YXIgbGVmdCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgIGlmIChzdGF0ZS5lYXQoMHgyRCAvKiAtICovKSAmJiB0aGlzLnJlZ2V4cF9lYXRDbGFzc0F0b20oc3RhdGUpKSB7XG4gICAgICAgIHZhciByaWdodCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgICAgaWYgKHN0YXRlLnN3aXRjaFUgJiYgKGxlZnQgPT09IC0xIHx8IHJpZ2h0ID09PSAtMSkpIHtcbiAgICAgICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0ICE9PSAtMSAmJiByaWdodCAhPT0gLTEgJiYgbGVmdCA+IHJpZ2h0KSB7XG4gICAgICAgICAgc3RhdGUucmFpc2UoXCJSYW5nZSBvdXQgb2Ygb3JkZXIgaW4gY2hhcmFjdGVyIGNsYXNzXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUNsYXNzQXRvbVxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1DbGFzc0F0b21Ob0Rhc2hcbiAgcHAkMS5yZWdleHBfZWF0Q2xhc3NBdG9tID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG5cbiAgICBpZiAoc3RhdGUuZWF0KDB4NUMgLyogXFwgKi8pKSB7XG4gICAgICBpZiAodGhpcy5yZWdleHBfZWF0Q2xhc3NFc2NhcGUoc3RhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc3dpdGNoVSkge1xuICAgICAgICAvLyBNYWtlIHRoZSBzYW1lIG1lc3NhZ2UgYXMgVjguXG4gICAgICAgIHZhciBjaCQxID0gc3RhdGUuY3VycmVudCgpO1xuICAgICAgICBpZiAoY2gkMSA9PT0gMHg2MyAvKiBjICovIHx8IGlzT2N0YWxEaWdpdChjaCQxKSkge1xuICAgICAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBjbGFzcyBlc2NhcGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGVzY2FwZVwiKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgICBpZiAoY2ggIT09IDB4NUQgLyogXSAqLykge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gY2g7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1DbGFzc0VzY2FwZVxuICBwcCQxLnJlZ2V4cF9lYXRDbGFzc0VzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuXG4gICAgaWYgKHN0YXRlLmVhdCgweDYyIC8qIGIgKi8pKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDA4OyAvKiA8QlM+ICovXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmIChzdGF0ZS5zd2l0Y2hVICYmIHN0YXRlLmVhdCgweDJEIC8qIC0gKi8pKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDJEOyAvKiAtICovXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICghc3RhdGUuc3dpdGNoVSAmJiBzdGF0ZS5lYXQoMHg2MyAvKiBjICovKSkge1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdENsYXNzQ29udHJvbExldHRlcihzdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlZ2V4cF9lYXRDaGFyYWN0ZXJDbGFzc0VzY2FwZShzdGF0ZSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckVzY2FwZShzdGF0ZSlcbiAgICApXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NTZXRFeHByZXNzaW9uXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzVW5pb25cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NJbnRlcnNlY3Rpb25cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NTdWJ0cmFjdGlvblxuICBwcCQxLnJlZ2V4cF9jbGFzc1NldEV4cHJlc3Npb24gPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBDaGFyU2V0T2ssIHN1YlJlc3VsdDtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0Q2xhc3NTZXRSYW5nZShzdGF0ZSkpIDsgZWxzZSBpZiAoc3ViUmVzdWx0ID0gdGhpcy5yZWdleHBfZWF0Q2xhc3NTZXRPcGVyYW5kKHN0YXRlKSkge1xuICAgICAgaWYgKHN1YlJlc3VsdCA9PT0gQ2hhclNldFN0cmluZykgeyByZXN1bHQgPSBDaGFyU2V0U3RyaW5nOyB9XG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc0ludGVyc2VjdGlvblxuICAgICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgICAgd2hpbGUgKHN0YXRlLmVhdENoYXJzKFsweDI2LCAweDI2XSAvKiAmJiAqLykpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLmN1cnJlbnQoKSAhPT0gMHgyNiAvKiAmICovICYmXG4gICAgICAgICAgKHN1YlJlc3VsdCA9IHRoaXMucmVnZXhwX2VhdENsYXNzU2V0T3BlcmFuZChzdGF0ZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChzdWJSZXN1bHQgIT09IENoYXJTZXRTdHJpbmcpIHsgcmVzdWx0ID0gQ2hhclNldE9rOyB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgY2hhcmFjdGVyIGluIGNoYXJhY3RlciBjbGFzc1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCAhPT0gc3RhdGUucG9zKSB7IHJldHVybiByZXN1bHQgfVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NTdWJ0cmFjdGlvblxuICAgICAgd2hpbGUgKHN0YXRlLmVhdENoYXJzKFsweDJELCAweDJEXSAvKiAtLSAqLykpIHtcbiAgICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdENsYXNzU2V0T3BlcmFuZChzdGF0ZSkpIHsgY29udGludWUgfVxuICAgICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgY2hhcmFjdGVyIGluIGNoYXJhY3RlciBjbGFzc1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCAhPT0gc3RhdGUucG9zKSB7IHJldHVybiByZXN1bHQgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgY2hhcmFjdGVyIGluIGNoYXJhY3RlciBjbGFzc1wiKTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NVbmlvblxuICAgIGZvciAoOzspIHtcbiAgICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRDbGFzc1NldFJhbmdlKHN0YXRlKSkgeyBjb250aW51ZSB9XG4gICAgICBzdWJSZXN1bHQgPSB0aGlzLnJlZ2V4cF9lYXRDbGFzc1NldE9wZXJhbmQoc3RhdGUpO1xuICAgICAgaWYgKCFzdWJSZXN1bHQpIHsgcmV0dXJuIHJlc3VsdCB9XG4gICAgICBpZiAoc3ViUmVzdWx0ID09PSBDaGFyU2V0U3RyaW5nKSB7IHJlc3VsdCA9IENoYXJTZXRTdHJpbmc7IH1cbiAgICB9XG4gIH07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NTZXRSYW5nZVxuICBwcCQxLnJlZ2V4cF9lYXRDbGFzc1NldFJhbmdlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdENsYXNzU2V0Q2hhcmFjdGVyKHN0YXRlKSkge1xuICAgICAgdmFyIGxlZnQgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICBpZiAoc3RhdGUuZWF0KDB4MkQgLyogLSAqLykgJiYgdGhpcy5yZWdleHBfZWF0Q2xhc3NTZXRDaGFyYWN0ZXIoc3RhdGUpKSB7XG4gICAgICAgIHZhciByaWdodCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgICAgaWYgKGxlZnQgIT09IC0xICYmIHJpZ2h0ICE9PSAtMSAmJiBsZWZ0ID4gcmlnaHQpIHtcbiAgICAgICAgICBzdGF0ZS5yYWlzZShcIlJhbmdlIG91dCBvZiBvcmRlciBpbiBjaGFyYWN0ZXIgY2xhc3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc1NldE9wZXJhbmRcbiAgcHAkMS5yZWdleHBfZWF0Q2xhc3NTZXRPcGVyYW5kID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0Q2xhc3NTZXRDaGFyYWN0ZXIoc3RhdGUpKSB7IHJldHVybiBDaGFyU2V0T2sgfVxuICAgIHJldHVybiB0aGlzLnJlZ2V4cF9lYXRDbGFzc1N0cmluZ0Rpc2p1bmN0aW9uKHN0YXRlKSB8fCB0aGlzLnJlZ2V4cF9lYXROZXN0ZWRDbGFzcyhzdGF0ZSlcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1OZXN0ZWRDbGFzc1xuICBwcCQxLnJlZ2V4cF9lYXROZXN0ZWRDbGFzcyA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgIGlmIChzdGF0ZS5lYXQoMHg1QiAvKiBbICovKSkge1xuICAgICAgdmFyIG5lZ2F0ZSA9IHN0YXRlLmVhdCgweDVFIC8qIF4gKi8pO1xuICAgICAgdmFyIHJlc3VsdCA9IHRoaXMucmVnZXhwX2NsYXNzQ29udGVudHMoc3RhdGUpO1xuICAgICAgaWYgKHN0YXRlLmVhdCgweDVEIC8qIF0gKi8pKSB7XG4gICAgICAgIGlmIChuZWdhdGUgJiYgcmVzdWx0ID09PSBDaGFyU2V0U3RyaW5nKSB7XG4gICAgICAgICAgc3RhdGUucmFpc2UoXCJOZWdhdGVkIGNoYXJhY3RlciBjbGFzcyBtYXkgY29udGFpbiBzdHJpbmdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIH1cbiAgICBpZiAoc3RhdGUuZWF0KDB4NUMgLyogXFwgKi8pKSB7XG4gICAgICB2YXIgcmVzdWx0JDEgPSB0aGlzLnJlZ2V4cF9lYXRDaGFyYWN0ZXJDbGFzc0VzY2FwZShzdGF0ZSk7XG4gICAgICBpZiAocmVzdWx0JDEpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCQxXG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc1N0cmluZ0Rpc2p1bmN0aW9uXG4gIHBwJDEucmVnZXhwX2VhdENsYXNzU3RyaW5nRGlzanVuY3Rpb24gPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICBpZiAoc3RhdGUuZWF0Q2hhcnMoWzB4NUMsIDB4NzFdIC8qIFxccSAqLykpIHtcbiAgICAgIGlmIChzdGF0ZS5lYXQoMHg3QiAvKiB7ICovKSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5yZWdleHBfY2xhc3NTdHJpbmdEaXNqdW5jdGlvbkNvbnRlbnRzKHN0YXRlKTtcbiAgICAgICAgaWYgKHN0YXRlLmVhdCgweDdEIC8qIH0gKi8pKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNYWtlIHRoZSBzYW1lIG1lc3NhZ2UgYXMgVjguXG4gICAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBlc2NhcGVcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc1N0cmluZ0Rpc2p1bmN0aW9uQ29udGVudHNcbiAgcHAkMS5yZWdleHBfY2xhc3NTdHJpbmdEaXNqdW5jdGlvbkNvbnRlbnRzID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5yZWdleHBfY2xhc3NTdHJpbmcoc3RhdGUpO1xuICAgIHdoaWxlIChzdGF0ZS5lYXQoMHg3QyAvKiB8ICovKSkge1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2NsYXNzU3RyaW5nKHN0YXRlKSA9PT0gQ2hhclNldFN0cmluZykgeyByZXN1bHQgPSBDaGFyU2V0U3RyaW5nOyB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc1N0cmluZ1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1Ob25FbXB0eUNsYXNzU3RyaW5nXG4gIHBwJDEucmVnZXhwX2NsYXNzU3RyaW5nID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHdoaWxlICh0aGlzLnJlZ2V4cF9lYXRDbGFzc1NldENoYXJhY3RlcihzdGF0ZSkpIHsgY291bnQrKzsgfVxuICAgIHJldHVybiBjb3VudCA9PT0gMSA/IENoYXJTZXRPayA6IENoYXJTZXRTdHJpbmdcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc1NldENoYXJhY3RlclxuICBwcCQxLnJlZ2V4cF9lYXRDbGFzc1NldENoYXJhY3RlciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgIGlmIChzdGF0ZS5lYXQoMHg1QyAvKiBcXCAqLykpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5yZWdleHBfZWF0Q2hhcmFjdGVyRXNjYXBlKHN0YXRlKSB8fFxuICAgICAgICB0aGlzLnJlZ2V4cF9lYXRDbGFzc1NldFJlc2VydmVkUHVuY3R1YXRvcihzdGF0ZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmVhdCgweDYyIC8qIGIgKi8pKSB7XG4gICAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MDg7IC8qIDxCUz4gKi9cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgICBpZiAoY2ggPCAwIHx8IGNoID09PSBzdGF0ZS5sb29rYWhlYWQoKSAmJiBpc0NsYXNzU2V0UmVzZXJ2ZWREb3VibGVQdW5jdHVhdG9yQ2hhcmFjdGVyKGNoKSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIGlmIChpc0NsYXNzU2V0U3ludGF4Q2hhcmFjdGVyKGNoKSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaDtcbiAgICByZXR1cm4gdHJ1ZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzU2V0UmVzZXJ2ZWREb3VibGVQdW5jdHVhdG9yXG4gIGZ1bmN0aW9uIGlzQ2xhc3NTZXRSZXNlcnZlZERvdWJsZVB1bmN0dWF0b3JDaGFyYWN0ZXIoY2gpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2ggPT09IDB4MjEgLyogISAqLyB8fFxuICAgICAgY2ggPj0gMHgyMyAvKiAjICovICYmIGNoIDw9IDB4MjYgLyogJiAqLyB8fFxuICAgICAgY2ggPj0gMHgyQSAvKiAqICovICYmIGNoIDw9IDB4MkMgLyogLCAqLyB8fFxuICAgICAgY2ggPT09IDB4MkUgLyogLiAqLyB8fFxuICAgICAgY2ggPj0gMHgzQSAvKiA6ICovICYmIGNoIDw9IDB4NDAgLyogQCAqLyB8fFxuICAgICAgY2ggPT09IDB4NUUgLyogXiAqLyB8fFxuICAgICAgY2ggPT09IDB4NjAgLyogYCAqLyB8fFxuICAgICAgY2ggPT09IDB4N0UgLyogfiAqL1xuICAgIClcbiAgfVxuXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzU2V0U3ludGF4Q2hhcmFjdGVyXG4gIGZ1bmN0aW9uIGlzQ2xhc3NTZXRTeW50YXhDaGFyYWN0ZXIoY2gpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2ggPT09IDB4MjggLyogKCAqLyB8fFxuICAgICAgY2ggPT09IDB4MjkgLyogKSAqLyB8fFxuICAgICAgY2ggPT09IDB4MkQgLyogLSAqLyB8fFxuICAgICAgY2ggPT09IDB4MkYgLyogLyAqLyB8fFxuICAgICAgY2ggPj0gMHg1QiAvKiBbICovICYmIGNoIDw9IDB4NUQgLyogXSAqLyB8fFxuICAgICAgY2ggPj0gMHg3QiAvKiB7ICovICYmIGNoIDw9IDB4N0QgLyogfSAqL1xuICAgIClcbiAgfVxuXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzU2V0UmVzZXJ2ZWRQdW5jdHVhdG9yXG4gIHBwJDEucmVnZXhwX2VhdENsYXNzU2V0UmVzZXJ2ZWRQdW5jdHVhdG9yID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gICAgaWYgKGlzQ2xhc3NTZXRSZXNlcnZlZFB1bmN0dWF0b3IoY2gpKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaDtcbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzU2V0UmVzZXJ2ZWRQdW5jdHVhdG9yXG4gIGZ1bmN0aW9uIGlzQ2xhc3NTZXRSZXNlcnZlZFB1bmN0dWF0b3IoY2gpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2ggPT09IDB4MjEgLyogISAqLyB8fFxuICAgICAgY2ggPT09IDB4MjMgLyogIyAqLyB8fFxuICAgICAgY2ggPT09IDB4MjUgLyogJSAqLyB8fFxuICAgICAgY2ggPT09IDB4MjYgLyogJiAqLyB8fFxuICAgICAgY2ggPT09IDB4MkMgLyogLCAqLyB8fFxuICAgICAgY2ggPT09IDB4MkQgLyogLSAqLyB8fFxuICAgICAgY2ggPj0gMHgzQSAvKiA6ICovICYmIGNoIDw9IDB4M0UgLyogPiAqLyB8fFxuICAgICAgY2ggPT09IDB4NDAgLyogQCAqLyB8fFxuICAgICAgY2ggPT09IDB4NjAgLyogYCAqLyB8fFxuICAgICAgY2ggPT09IDB4N0UgLyogfiAqL1xuICAgIClcbiAgfVxuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1DbGFzc0NvbnRyb2xMZXR0ZXJcbiAgcHAkMS5yZWdleHBfZWF0Q2xhc3NDb250cm9sTGV0dGVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNoKSB8fCBjaCA9PT0gMHg1RiAvKiBfICovKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaCAlIDB4MjA7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1IZXhFc2NhcGVTZXF1ZW5jZVxuICBwcCQxLnJlZ2V4cF9lYXRIZXhFc2NhcGVTZXF1ZW5jZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgIGlmIChzdGF0ZS5lYXQoMHg3OCAvKiB4ICovKSkge1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdEZpeGVkSGV4RGlnaXRzKHN0YXRlLCAyKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnN3aXRjaFUpIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGVzY2FwZVwiKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1EZWNpbWFsRGlnaXRzXG4gIHBwJDEucmVnZXhwX2VhdERlY2ltYWxEaWdpdHMgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICB2YXIgY2ggPSAwO1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KGNoID0gc3RhdGUuY3VycmVudCgpKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gMTAgKiBzdGF0ZS5sYXN0SW50VmFsdWUgKyAoY2ggLSAweDMwIC8qIDAgKi8pO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUucG9zICE9PSBzdGFydFxuICB9O1xuICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkge1xuICAgIHJldHVybiBjaCA+PSAweDMwIC8qIDAgKi8gJiYgY2ggPD0gMHgzOSAvKiA5ICovXG4gIH1cblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1IZXhEaWdpdHNcbiAgcHAkMS5yZWdleHBfZWF0SGV4RGlnaXRzID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgdmFyIGNoID0gMDtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAwO1xuICAgIHdoaWxlIChpc0hleERpZ2l0KGNoID0gc3RhdGUuY3VycmVudCgpKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gMTYgKiBzdGF0ZS5sYXN0SW50VmFsdWUgKyBoZXhUb0ludChjaCk7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZS5wb3MgIT09IHN0YXJ0XG4gIH07XG4gIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGNoID49IDB4MzAgLyogMCAqLyAmJiBjaCA8PSAweDM5IC8qIDkgKi8pIHx8XG4gICAgICAoY2ggPj0gMHg0MSAvKiBBICovICYmIGNoIDw9IDB4NDYgLyogRiAqLykgfHxcbiAgICAgIChjaCA+PSAweDYxIC8qIGEgKi8gJiYgY2ggPD0gMHg2NiAvKiBmICovKVxuICAgIClcbiAgfVxuICBmdW5jdGlvbiBoZXhUb0ludChjaCkge1xuICAgIGlmIChjaCA+PSAweDQxIC8qIEEgKi8gJiYgY2ggPD0gMHg0NiAvKiBGICovKSB7XG4gICAgICByZXR1cm4gMTAgKyAoY2ggLSAweDQxIC8qIEEgKi8pXG4gICAgfVxuICAgIGlmIChjaCA+PSAweDYxIC8qIGEgKi8gJiYgY2ggPD0gMHg2NiAvKiBmICovKSB7XG4gICAgICByZXR1cm4gMTAgKyAoY2ggLSAweDYxIC8qIGEgKi8pXG4gICAgfVxuICAgIHJldHVybiBjaCAtIDB4MzAgLyogMCAqL1xuICB9XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUxlZ2FjeU9jdGFsRXNjYXBlU2VxdWVuY2VcbiAgLy8gQWxsb3dzIG9ubHkgMC0zNzcob2N0YWwpIGkuZS4gMC0yNTUoZGVjaW1hbCkuXG4gIHBwJDEucmVnZXhwX2VhdExlZ2FjeU9jdGFsRXNjYXBlU2VxdWVuY2UgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRPY3RhbERpZ2l0KHN0YXRlKSkge1xuICAgICAgdmFyIG4xID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdE9jdGFsRGlnaXQoc3RhdGUpKSB7XG4gICAgICAgIHZhciBuMiA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgICAgaWYgKG4xIDw9IDMgJiYgdGhpcy5yZWdleHBfZWF0T2N0YWxEaWdpdChzdGF0ZSkpIHtcbiAgICAgICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBuMSAqIDY0ICsgbjIgKiA4ICsgc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IG4xICogOCArIG4yO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBuMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLU9jdGFsRGlnaXRcbiAgcHAkMS5yZWdleHBfZWF0T2N0YWxEaWdpdCA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaCAtIDB4MzA7IC8qIDAgKi9cbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG4gIGZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkge1xuICAgIHJldHVybiBjaCA+PSAweDMwIC8qIDAgKi8gJiYgY2ggPD0gMHgzNyAvKiA3ICovXG4gIH1cblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1IZXg0RGlnaXRzXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUhleERpZ2l0XG4gIC8vIEFuZCBIZXhEaWdpdCBIZXhEaWdpdCBpbiBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1IZXhFc2NhcGVTZXF1ZW5jZVxuICBwcCQxLnJlZ2V4cF9lYXRGaXhlZEhleERpZ2l0cyA9IGZ1bmN0aW9uKHN0YXRlLCBsZW5ndGgpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gICAgICBpZiAoIWlzSGV4RGlnaXQoY2gpKSB7XG4gICAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDE2ICogc3RhdGUubGFzdEludFZhbHVlICsgaGV4VG9JbnQoY2gpO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9O1xuXG4gIC8vIE9iamVjdCB0eXBlIHVzZWQgdG8gcmVwcmVzZW50IHRva2Vucy4gTm90ZSB0aGF0IG5vcm1hbGx5LCB0b2tlbnNcbiAgLy8gc2ltcGx5IGV4aXN0IGFzIHByb3BlcnRpZXMgb24gdGhlIHBhcnNlciBvYmplY3QuIFRoaXMgaXMgb25seVxuICAvLyB1c2VkIGZvciB0aGUgb25Ub2tlbiBjYWxsYmFjayBhbmQgdGhlIGV4dGVybmFsIHRva2VuaXplci5cblxuICB2YXIgVG9rZW4gPSBmdW5jdGlvbiBUb2tlbihwKSB7XG4gICAgdGhpcy50eXBlID0gcC50eXBlO1xuICAgIHRoaXMudmFsdWUgPSBwLnZhbHVlO1xuICAgIHRoaXMuc3RhcnQgPSBwLnN0YXJ0O1xuICAgIHRoaXMuZW5kID0gcC5lbmQ7XG4gICAgaWYgKHAub3B0aW9ucy5sb2NhdGlvbnMpXG4gICAgICB7IHRoaXMubG9jID0gbmV3IFNvdXJjZUxvY2F0aW9uKHAsIHAuc3RhcnRMb2MsIHAuZW5kTG9jKTsgfVxuICAgIGlmIChwLm9wdGlvbnMucmFuZ2VzKVxuICAgICAgeyB0aGlzLnJhbmdlID0gW3Auc3RhcnQsIHAuZW5kXTsgfVxuICB9O1xuXG4gIC8vICMjIFRva2VuaXplclxuXG4gIHZhciBwcCA9IFBhcnNlci5wcm90b3R5cGU7XG5cbiAgLy8gTW92ZSB0byB0aGUgbmV4dCB0b2tlblxuXG4gIHBwLm5leHQgPSBmdW5jdGlvbihpZ25vcmVFc2NhcGVTZXF1ZW5jZUluS2V5d29yZCkge1xuICAgIGlmICghaWdub3JlRXNjYXBlU2VxdWVuY2VJbktleXdvcmQgJiYgdGhpcy50eXBlLmtleXdvcmQgJiYgdGhpcy5jb250YWluc0VzYylcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiRXNjYXBlIHNlcXVlbmNlIGluIGtleXdvcmQgXCIgKyB0aGlzLnR5cGUua2V5d29yZCk7IH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm9uVG9rZW4pXG4gICAgICB7IHRoaXMub3B0aW9ucy5vblRva2VuKG5ldyBUb2tlbih0aGlzKSk7IH1cblxuICAgIHRoaXMubGFzdFRva0VuZCA9IHRoaXMuZW5kO1xuICAgIHRoaXMubGFzdFRva1N0YXJ0ID0gdGhpcy5zdGFydDtcbiAgICB0aGlzLmxhc3RUb2tFbmRMb2MgPSB0aGlzLmVuZExvYztcbiAgICB0aGlzLmxhc3RUb2tTdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgfTtcblxuICBwcC5nZXRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHJldHVybiBuZXcgVG9rZW4odGhpcylcbiAgfTtcblxuICAvLyBJZiB3ZSdyZSBpbiBhbiBFUzYgZW52aXJvbm1lbnQsIG1ha2UgcGFyc2VycyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICB7IHBwW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzJDEkMS5nZXRUb2tlbigpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiB0b2tlbi50eXBlID09PSB0eXBlcyQxLmVvZixcbiAgICAgICAgICAgIHZhbHVlOiB0b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07IH1cblxuICAvLyBUb2dnbGUgc3RyaWN0IG1vZGUuIFJlLXJlYWRzIHRoZSBuZXh0IG51bWJlciBvciBzdHJpbmcgdG8gcGxlYXNlXG4gIC8vIHBlZGFudGljIHRlc3RzIChgXCJ1c2Ugc3RyaWN0XCI7IDAxMDtgIHNob3VsZCBmYWlsKS5cblxuICAvLyBSZWFkIGEgc2luZ2xlIHRva2VuLCB1cGRhdGluZyB0aGUgcGFyc2VyIG9iamVjdCdzIHRva2VuLXJlbGF0ZWRcbiAgLy8gcHJvcGVydGllcy5cblxuICBwcC5uZXh0VG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgY3VyQ29udGV4dCA9IHRoaXMuY3VyQ29udGV4dCgpO1xuICAgIGlmICghY3VyQ29udGV4dCB8fCAhY3VyQ29udGV4dC5wcmVzZXJ2ZVNwYWNlKSB7IHRoaXMuc2tpcFNwYWNlKCk7IH1cblxuICAgIHRoaXMuc3RhcnQgPSB0aGlzLnBvcztcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykgeyB0aGlzLnN0YXJ0TG9jID0gdGhpcy5jdXJQb3NpdGlvbigpOyB9XG4gICAgaWYgKHRoaXMucG9zID49IHRoaXMuaW5wdXQubGVuZ3RoKSB7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuZW9mKSB9XG5cbiAgICBpZiAoY3VyQ29udGV4dC5vdmVycmlkZSkgeyByZXR1cm4gY3VyQ29udGV4dC5vdmVycmlkZSh0aGlzKSB9XG4gICAgZWxzZSB7IHRoaXMucmVhZFRva2VuKHRoaXMuZnVsbENoYXJDb2RlQXRQb3MoKSk7IH1cbiAgfTtcblxuICBwcC5yZWFkVG9rZW4gPSBmdW5jdGlvbihjb2RlKSB7XG4gICAgLy8gSWRlbnRpZmllciBvciBrZXl3b3JkLiAnXFx1WFhYWCcgc2VxdWVuY2VzIGFyZSBhbGxvd2VkIGluXG4gICAgLy8gaWRlbnRpZmllcnMsIHNvICdcXCcgYWxzbyBkaXNwYXRjaGVzIHRvIHRoYXQuXG4gICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNvZGUsIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB8fCBjb2RlID09PSA5MiAvKiAnXFwnICovKVxuICAgICAgeyByZXR1cm4gdGhpcy5yZWFkV29yZCgpIH1cblxuICAgIHJldHVybiB0aGlzLmdldFRva2VuRnJvbUNvZGUoY29kZSlcbiAgfTtcblxuICBwcC5mdWxsQ2hhckNvZGVBdFBvcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb2RlID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgICBpZiAoY29kZSA8PSAweGQ3ZmYgfHwgY29kZSA+PSAweGRjMDApIHsgcmV0dXJuIGNvZGUgfVxuICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgcmV0dXJuIG5leHQgPD0gMHhkYmZmIHx8IG5leHQgPj0gMHhlMDAwID8gY29kZSA6IChjb2RlIDw8IDEwKSArIG5leHQgLSAweDM1ZmRjMDBcbiAgfTtcblxuICBwcC5za2lwQmxvY2tDb21tZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YXJ0TG9jID0gdGhpcy5vcHRpb25zLm9uQ29tbWVudCAmJiB0aGlzLmN1clBvc2l0aW9uKCk7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3MsIGVuZCA9IHRoaXMuaW5wdXQuaW5kZXhPZihcIiovXCIsIHRoaXMucG9zICs9IDIpO1xuICAgIGlmIChlbmQgPT09IC0xKSB7IHRoaXMucmFpc2UodGhpcy5wb3MgLSAyLCBcIlVudGVybWluYXRlZCBjb21tZW50XCIpOyB9XG4gICAgdGhpcy5wb3MgPSBlbmQgKyAyO1xuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7XG4gICAgICBmb3IgKHZhciBuZXh0QnJlYWsgPSAodm9pZCAwKSwgcG9zID0gc3RhcnQ7IChuZXh0QnJlYWsgPSBuZXh0TGluZUJyZWFrKHRoaXMuaW5wdXQsIHBvcywgdGhpcy5wb3MpKSA+IC0xOykge1xuICAgICAgICArK3RoaXMuY3VyTGluZTtcbiAgICAgICAgcG9zID0gdGhpcy5saW5lU3RhcnQgPSBuZXh0QnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMub25Db21tZW50KVxuICAgICAgeyB0aGlzLm9wdGlvbnMub25Db21tZW50KHRydWUsIHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQgKyAyLCBlbmQpLCBzdGFydCwgdGhpcy5wb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TG9jLCB0aGlzLmN1clBvc2l0aW9uKCkpOyB9XG4gIH07XG5cbiAgcHAuc2tpcExpbmVDb21tZW50ID0gZnVuY3Rpb24oc3RhcnRTa2lwKSB7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgdmFyIHN0YXJ0TG9jID0gdGhpcy5vcHRpb25zLm9uQ29tbWVudCAmJiB0aGlzLmN1clBvc2l0aW9uKCk7XG4gICAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICs9IHN0YXJ0U2tpcCk7XG4gICAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGggJiYgIWlzTmV3TGluZShjaCkpIHtcbiAgICAgIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KCsrdGhpcy5wb3MpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm9uQ29tbWVudClcbiAgICAgIHsgdGhpcy5vcHRpb25zLm9uQ29tbWVudChmYWxzZSwgdGhpcy5pbnB1dC5zbGljZShzdGFydCArIHN0YXJ0U2tpcCwgdGhpcy5wb3MpLCBzdGFydCwgdGhpcy5wb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TG9jLCB0aGlzLmN1clBvc2l0aW9uKCkpOyB9XG4gIH07XG5cbiAgLy8gQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgcGFyc2UgYW5kIGFmdGVyIGV2ZXJ5IHRva2VuLiBTa2lwc1xuICAvLyB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cywgYW5kLlxuXG4gIHBwLnNraXBTcGFjZSA9IGZ1bmN0aW9uKCkge1xuICAgIGxvb3A6IHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgY2FzZSAzMjogY2FzZSAxNjA6IC8vICcgJ1xuICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAxMzpcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpID09PSAxMCkge1xuICAgICAgICAgICsrdGhpcy5wb3M7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgMTA6IGNhc2UgODIzMjogY2FzZSA4MjMzOlxuICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykge1xuICAgICAgICAgICsrdGhpcy5jdXJMaW5lO1xuICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgNDc6IC8vICcvJ1xuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpKSB7XG4gICAgICAgIGNhc2UgNDI6IC8vICcqJ1xuICAgICAgICAgIHRoaXMuc2tpcEJsb2NrQ29tbWVudCgpO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgdGhpcy5za2lwTGluZUNvbW1lbnQoMik7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhayBsb29wXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChjaCA+IDggJiYgY2ggPCAxNCB8fCBjaCA+PSA1NzYwICYmIG5vbkFTQ0lJd2hpdGVzcGFjZS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSkge1xuICAgICAgICAgICsrdGhpcy5wb3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWsgbG9vcFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHRva2VuLiBTZXRzIGBlbmRgLCBgdmFsYCwgYW5kXG4gIC8vIG1haW50YWlucyBgY29udGV4dGAgYW5kIGBleHByQWxsb3dlZGAsIGFuZCBza2lwcyB0aGUgc3BhY2UgYWZ0ZXJcbiAgLy8gdGhlIHRva2VuLCBzbyB0aGF0IHRoZSBuZXh0IG9uZSdzIGBzdGFydGAgd2lsbCBwb2ludCBhdCB0aGVcbiAgLy8gcmlnaHQgcG9zaXRpb24uXG5cbiAgcHAuZmluaXNoVG9rZW4gPSBmdW5jdGlvbih0eXBlLCB2YWwpIHtcbiAgICB0aGlzLmVuZCA9IHRoaXMucG9zO1xuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7IHRoaXMuZW5kTG9jID0gdGhpcy5jdXJQb3NpdGlvbigpOyB9XG4gICAgdmFyIHByZXZUeXBlID0gdGhpcy50eXBlO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcblxuICAgIHRoaXMudXBkYXRlQ29udGV4dChwcmV2VHlwZSk7XG4gIH07XG5cbiAgLy8gIyMjIFRva2VuIHJlYWRpbmdcblxuICAvLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBmZXRjaCB0aGUgbmV4dCB0b2tlbi4gSXRcbiAgLy8gaXMgc29tZXdoYXQgb2JzY3VyZSwgYmVjYXVzZSBpdCB3b3JrcyBpbiBjaGFyYWN0ZXIgY29kZXMgcmF0aGVyXG4gIC8vIHRoYW4gY2hhcmFjdGVycywgYW5kIGJlY2F1c2Ugb3BlcmF0b3IgcGFyc2luZyBoYXMgYmVlbiBpbmxpbmVkXG4gIC8vIGludG8gaXQuXG4gIC8vXG4gIC8vIEFsbCBpbiB0aGUgbmFtZSBvZiBzcGVlZC5cbiAgLy9cbiAgcHAucmVhZFRva2VuX2RvdCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgaWYgKG5leHQgPj0gNDggJiYgbmV4dCA8PSA1NykgeyByZXR1cm4gdGhpcy5yZWFkTnVtYmVyKHRydWUpIH1cbiAgICB2YXIgbmV4dDIgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgbmV4dCA9PT0gNDYgJiYgbmV4dDIgPT09IDQ2KSB7IC8vIDQ2ID0gZG90ICcuJ1xuICAgICAgdGhpcy5wb3MgKz0gMztcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuZWxsaXBzaXMpXG4gICAgfSBlbHNlIHtcbiAgICAgICsrdGhpcy5wb3M7XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmRvdClcbiAgICB9XG4gIH07XG5cbiAgcHAucmVhZFRva2VuX3NsYXNoID0gZnVuY3Rpb24oKSB7IC8vICcvJ1xuICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgaWYgKHRoaXMuZXhwckFsbG93ZWQpIHsgKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMucmVhZFJlZ2V4cCgpIH1cbiAgICBpZiAobmV4dCA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5hc3NpZ24sIDIpIH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLnNsYXNoLCAxKVxuICB9O1xuXG4gIHBwLnJlYWRUb2tlbl9tdWx0X21vZHVsb19leHAgPSBmdW5jdGlvbihjb2RlKSB7IC8vICclKidcbiAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICAgIHZhciBzaXplID0gMTtcbiAgICB2YXIgdG9rZW50eXBlID0gY29kZSA9PT0gNDIgPyB0eXBlcyQxLnN0YXIgOiB0eXBlcyQxLm1vZHVsbztcblxuICAgIC8vIGV4cG9uZW50aWF0aW9uIG9wZXJhdG9yICoqIGFuZCAqKj1cbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDcgJiYgY29kZSA9PT0gNDIgJiYgbmV4dCA9PT0gNDIpIHtcbiAgICAgICsrc2l6ZTtcbiAgICAgIHRva2VudHlwZSA9IHR5cGVzJDEuc3RhcnN0YXI7XG4gICAgICBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMik7XG4gICAgfVxuXG4gICAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuYXNzaWduLCBzaXplICsgMSkgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHRva2VudHlwZSwgc2l6ZSlcbiAgfTtcblxuICBwcC5yZWFkVG9rZW5fcGlwZV9hbXAgPSBmdW5jdGlvbihjb2RlKSB7IC8vICd8JidcbiAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICAgIGlmIChuZXh0ID09PSBjb2RlKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDEyKSB7XG4gICAgICAgIHZhciBuZXh0MiA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpO1xuICAgICAgICBpZiAobmV4dDIgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuYXNzaWduLCAzKSB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hPcChjb2RlID09PSAxMjQgPyB0eXBlcyQxLmxvZ2ljYWxPUiA6IHR5cGVzJDEubG9naWNhbEFORCwgMilcbiAgICB9XG4gICAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuYXNzaWduLCAyKSB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AoY29kZSA9PT0gMTI0ID8gdHlwZXMkMS5iaXR3aXNlT1IgOiB0eXBlcyQxLmJpdHdpc2VBTkQsIDEpXG4gIH07XG5cbiAgcHAucmVhZFRva2VuX2NhcmV0ID0gZnVuY3Rpb24oKSB7IC8vICdeJ1xuICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuYXNzaWduLCAyKSB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5iaXR3aXNlWE9SLCAxKVxuICB9O1xuXG4gIHBwLnJlYWRUb2tlbl9wbHVzX21pbiA9IGZ1bmN0aW9uKGNvZGUpIHsgLy8gJystJ1xuICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgaWYgKG5leHQgPT09IGNvZGUpIHtcbiAgICAgIGlmIChuZXh0ID09PSA0NSAmJiAhdGhpcy5pbk1vZHVsZSAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKSA9PT0gNjIgJiZcbiAgICAgICAgICAodGhpcy5sYXN0VG9rRW5kID09PSAwIHx8IGxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rRW5kLCB0aGlzLnBvcykpKSkge1xuICAgICAgICAvLyBBIGAtLT5gIGxpbmUgY29tbWVudFxuICAgICAgICB0aGlzLnNraXBMaW5lQ29tbWVudCgzKTtcbiAgICAgICAgdGhpcy5za2lwU3BhY2UoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2VuKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuaW5jRGVjLCAyKVxuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5hc3NpZ24sIDIpIH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLnBsdXNNaW4sIDEpXG4gIH07XG5cbiAgcHAucmVhZFRva2VuX2x0X2d0ID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnPD4nXG4gICAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgICB2YXIgc2l6ZSA9IDE7XG4gICAgaWYgKG5leHQgPT09IGNvZGUpIHtcbiAgICAgIHNpemUgPSBjb2RlID09PSA2MiAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKSA9PT0gNjIgPyAzIDogMjtcbiAgICAgIGlmICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyBzaXplKSA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5hc3NpZ24sIHNpemUgKyAxKSB9XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLmJpdFNoaWZ0LCBzaXplKVxuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gMzMgJiYgY29kZSA9PT0gNjAgJiYgIXRoaXMuaW5Nb2R1bGUgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMikgPT09IDQ1ICYmXG4gICAgICAgIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDMpID09PSA0NSkge1xuICAgICAgLy8gYDwhLS1gLCBhbiBYTUwtc3R5bGUgY29tbWVudCB0aGF0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIGxpbmUgY29tbWVudFxuICAgICAgdGhpcy5za2lwTGluZUNvbW1lbnQoNCk7XG4gICAgICB0aGlzLnNraXBTcGFjZSgpO1xuICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2VuKClcbiAgICB9XG4gICAgaWYgKG5leHQgPT09IDYxKSB7IHNpemUgPSAyOyB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5yZWxhdGlvbmFsLCBzaXplKVxuICB9O1xuXG4gIHBwLnJlYWRUb2tlbl9lcV9leGNsID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnPSEnXG4gICAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgICBpZiAobmV4dCA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5lcXVhbGl0eSwgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMikgPT09IDYxID8gMyA6IDIpIH1cbiAgICBpZiAoY29kZSA9PT0gNjEgJiYgbmV4dCA9PT0gNjIgJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHsgLy8gJz0+J1xuICAgICAgdGhpcy5wb3MgKz0gMjtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuYXJyb3cpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKGNvZGUgPT09IDYxID8gdHlwZXMkMS5lcSA6IHR5cGVzJDEucHJlZml4LCAxKVxuICB9O1xuXG4gIHBwLnJlYWRUb2tlbl9xdWVzdGlvbiA9IGZ1bmN0aW9uKCkgeyAvLyAnPydcbiAgICB2YXIgZWNtYVZlcnNpb24gPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb247XG4gICAgaWYgKGVjbWFWZXJzaW9uID49IDExKSB7XG4gICAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICAgICAgaWYgKG5leHQgPT09IDQ2KSB7XG4gICAgICAgIHZhciBuZXh0MiA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpO1xuICAgICAgICBpZiAobmV4dDIgPCA0OCB8fCBuZXh0MiA+IDU3KSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEucXVlc3Rpb25Eb3QsIDIpIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0ID09PSA2Mykge1xuICAgICAgICBpZiAoZWNtYVZlcnNpb24gPj0gMTIpIHtcbiAgICAgICAgICB2YXIgbmV4dDIkMSA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpO1xuICAgICAgICAgIGlmIChuZXh0MiQxID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLmFzc2lnbiwgMykgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuY29hbGVzY2UsIDIpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEucXVlc3Rpb24sIDEpXG4gIH07XG5cbiAgcHAucmVhZFRva2VuX251bWJlclNpZ24gPSBmdW5jdGlvbigpIHsgLy8gJyMnXG4gICAgdmFyIGVjbWFWZXJzaW9uID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uO1xuICAgIHZhciBjb2RlID0gMzU7IC8vICcjJ1xuICAgIGlmIChlY21hVmVyc2lvbiA+PSAxMykge1xuICAgICAgKyt0aGlzLnBvcztcbiAgICAgIGNvZGUgPSB0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCk7XG4gICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY29kZSwgdHJ1ZSkgfHwgY29kZSA9PT0gOTIgLyogJ1xcJyAqLykge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLnByaXZhdGVJZCwgdGhpcy5yZWFkV29yZDEoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiArIGNvZGVQb2ludFRvU3RyaW5nKGNvZGUpICsgXCInXCIpO1xuICB9O1xuXG4gIHBwLmdldFRva2VuRnJvbUNvZGUgPSBmdW5jdGlvbihjb2RlKSB7XG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgLy8gVGhlIGludGVycHJldGF0aW9uIG9mIGEgZG90IGRlcGVuZHMgb24gd2hldGhlciBpdCBpcyBmb2xsb3dlZFxuICAgIC8vIGJ5IGEgZGlnaXQgb3IgYW5vdGhlciB0d28gZG90cy5cbiAgICBjYXNlIDQ2OiAvLyAnLidcbiAgICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9kb3QoKVxuXG4gICAgLy8gUHVuY3R1YXRpb24gdG9rZW5zLlxuICAgIGNhc2UgNDA6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEucGFyZW5MKVxuICAgIGNhc2UgNDE6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEucGFyZW5SKVxuICAgIGNhc2UgNTk6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuc2VtaSlcbiAgICBjYXNlIDQ0OiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmNvbW1hKVxuICAgIGNhc2UgOTE6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuYnJhY2tldEwpXG4gICAgY2FzZSA5MzogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5icmFja2V0UilcbiAgICBjYXNlIDEyMzogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5icmFjZUwpXG4gICAgY2FzZSAxMjU6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuYnJhY2VSKVxuICAgIGNhc2UgNTg6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuY29sb24pXG5cbiAgICBjYXNlIDk2OiAvLyAnYCdcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA2KSB7IGJyZWFrIH1cbiAgICAgICsrdGhpcy5wb3M7XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmJhY2tRdW90ZSlcblxuICAgIGNhc2UgNDg6IC8vICcwJ1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgICAgIGlmIChuZXh0ID09PSAxMjAgfHwgbmV4dCA9PT0gODgpIHsgcmV0dXJuIHRoaXMucmVhZFJhZGl4TnVtYmVyKDE2KSB9IC8vICcweCcsICcwWCcgLSBoZXggbnVtYmVyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHtcbiAgICAgICAgaWYgKG5leHQgPT09IDExMSB8fCBuZXh0ID09PSA3OSkgeyByZXR1cm4gdGhpcy5yZWFkUmFkaXhOdW1iZXIoOCkgfSAvLyAnMG8nLCAnME8nIC0gb2N0YWwgbnVtYmVyXG4gICAgICAgIGlmIChuZXh0ID09PSA5OCB8fCBuZXh0ID09PSA2NikgeyByZXR1cm4gdGhpcy5yZWFkUmFkaXhOdW1iZXIoMikgfSAvLyAnMGInLCAnMEInIC0gYmluYXJ5IG51bWJlclxuICAgICAgfVxuXG4gICAgLy8gQW55dGhpbmcgZWxzZSBiZWdpbm5pbmcgd2l0aCBhIGRpZ2l0IGlzIGFuIGludGVnZXIsIG9jdGFsXG4gICAgLy8gbnVtYmVyLCBvciBmbG9hdC5cbiAgICBjYXNlIDQ5OiBjYXNlIDUwOiBjYXNlIDUxOiBjYXNlIDUyOiBjYXNlIDUzOiBjYXNlIDU0OiBjYXNlIDU1OiBjYXNlIDU2OiBjYXNlIDU3OiAvLyAxLTlcbiAgICAgIHJldHVybiB0aGlzLnJlYWROdW1iZXIoZmFsc2UpXG5cbiAgICAvLyBRdW90ZXMgcHJvZHVjZSBzdHJpbmdzLlxuICAgIGNhc2UgMzQ6IGNhc2UgMzk6IC8vICdcIicsIFwiJ1wiXG4gICAgICByZXR1cm4gdGhpcy5yZWFkU3RyaW5nKGNvZGUpXG5cbiAgICAvLyBPcGVyYXRvcnMgYXJlIHBhcnNlZCBpbmxpbmUgaW4gdGlueSBzdGF0ZSBtYWNoaW5lcy4gJz0nICg2MSkgaXNcbiAgICAvLyBvZnRlbiByZWZlcnJlZCB0by4gYGZpbmlzaE9wYCBzaW1wbHkgc2tpcHMgdGhlIGFtb3VudCBvZlxuICAgIC8vIGNoYXJhY3RlcnMgaXQgaXMgZ2l2ZW4gYXMgc2Vjb25kIGFyZ3VtZW50LCBhbmQgcmV0dXJucyBhIHRva2VuXG4gICAgLy8gb2YgdGhlIHR5cGUgZ2l2ZW4gYnkgaXRzIGZpcnN0IGFyZ3VtZW50LlxuICAgIGNhc2UgNDc6IC8vICcvJ1xuICAgICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX3NsYXNoKClcblxuICAgIGNhc2UgMzc6IGNhc2UgNDI6IC8vICclKidcbiAgICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9tdWx0X21vZHVsb19leHAoY29kZSlcblxuICAgIGNhc2UgMTI0OiBjYXNlIDM4OiAvLyAnfCYnXG4gICAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fcGlwZV9hbXAoY29kZSlcblxuICAgIGNhc2UgOTQ6IC8vICdeJ1xuICAgICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX2NhcmV0KClcblxuICAgIGNhc2UgNDM6IGNhc2UgNDU6IC8vICcrLSdcbiAgICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9wbHVzX21pbihjb2RlKVxuXG4gICAgY2FzZSA2MDogY2FzZSA2MjogLy8gJzw+J1xuICAgICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX2x0X2d0KGNvZGUpXG5cbiAgICBjYXNlIDYxOiBjYXNlIDMzOiAvLyAnPSEnXG4gICAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fZXFfZXhjbChjb2RlKVxuXG4gICAgY2FzZSA2MzogLy8gJz8nXG4gICAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fcXVlc3Rpb24oKVxuXG4gICAgY2FzZSAxMjY6IC8vICd+J1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5wcmVmaXgsIDEpXG5cbiAgICBjYXNlIDM1OiAvLyAnIydcbiAgICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9udW1iZXJTaWduKClcbiAgICB9XG5cbiAgICB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiArIGNvZGVQb2ludFRvU3RyaW5nKGNvZGUpICsgXCInXCIpO1xuICB9O1xuXG4gIHBwLmZpbmlzaE9wID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkge1xuICAgIHZhciBzdHIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMucG9zLCB0aGlzLnBvcyArIHNpemUpO1xuICAgIHRoaXMucG9zICs9IHNpemU7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZSwgc3RyKVxuICB9O1xuXG4gIHBwLnJlYWRSZWdleHAgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZXNjYXBlZCwgaW5DbGFzcywgc3RhcnQgPSB0aGlzLnBvcztcbiAgICBmb3IgKDs7KSB7XG4gICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpIHsgdGhpcy5yYWlzZShzdGFydCwgXCJVbnRlcm1pbmF0ZWQgcmVndWxhciBleHByZXNzaW9uXCIpOyB9XG4gICAgICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJBdCh0aGlzLnBvcyk7XG4gICAgICBpZiAobGluZUJyZWFrLnRlc3QoY2gpKSB7IHRoaXMucmFpc2Uoc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvblwiKTsgfVxuICAgICAgaWYgKCFlc2NhcGVkKSB7XG4gICAgICAgIGlmIChjaCA9PT0gXCJbXCIpIHsgaW5DbGFzcyA9IHRydWU7IH1cbiAgICAgICAgZWxzZSBpZiAoY2ggPT09IFwiXVwiICYmIGluQ2xhc3MpIHsgaW5DbGFzcyA9IGZhbHNlOyB9XG4gICAgICAgIGVsc2UgaWYgKGNoID09PSBcIi9cIiAmJiAhaW5DbGFzcykgeyBicmVhayB9XG4gICAgICAgIGVzY2FwZWQgPSBjaCA9PT0gXCJcXFxcXCI7XG4gICAgICB9IGVsc2UgeyBlc2NhcGVkID0gZmFsc2U7IH1cbiAgICAgICsrdGhpcy5wb3M7XG4gICAgfVxuICAgIHZhciBwYXR0ZXJuID0gdGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpO1xuICAgICsrdGhpcy5wb3M7XG4gICAgdmFyIGZsYWdzU3RhcnQgPSB0aGlzLnBvcztcbiAgICB2YXIgZmxhZ3MgPSB0aGlzLnJlYWRXb3JkMSgpO1xuICAgIGlmICh0aGlzLmNvbnRhaW5zRXNjKSB7IHRoaXMudW5leHBlY3RlZChmbGFnc1N0YXJ0KTsgfVxuXG4gICAgLy8gVmFsaWRhdGUgcGF0dGVyblxuICAgIHZhciBzdGF0ZSA9IHRoaXMucmVnZXhwU3RhdGUgfHwgKHRoaXMucmVnZXhwU3RhdGUgPSBuZXcgUmVnRXhwVmFsaWRhdGlvblN0YXRlKHRoaXMpKTtcbiAgICBzdGF0ZS5yZXNldChzdGFydCwgcGF0dGVybiwgZmxhZ3MpO1xuICAgIHRoaXMudmFsaWRhdGVSZWdFeHBGbGFncyhzdGF0ZSk7XG4gICAgdGhpcy52YWxpZGF0ZVJlZ0V4cFBhdHRlcm4oc3RhdGUpO1xuXG4gICAgLy8gQ3JlYXRlIExpdGVyYWwjdmFsdWUgcHJvcGVydHkgdmFsdWUuXG4gICAgdmFyIHZhbHVlID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgdmFsdWUgPSBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBFU1RyZWUgcmVxdWlyZXMgbnVsbCBpZiBpdCBmYWlsZWQgdG8gaW5zdGFudGlhdGUgUmVnRXhwIG9iamVjdC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc3RyZWUvZXN0cmVlL2Jsb2IvYTI3MDAzYWRmNGZkN2JmYWQ0NGRlOWNlZjM3MmEyZWFjZDUyN2IxYy9lczUubWQjcmVnZXhwbGl0ZXJhbFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEucmVnZXhwLCB7cGF0dGVybjogcGF0dGVybiwgZmxhZ3M6IGZsYWdzLCB2YWx1ZTogdmFsdWV9KVxuICB9O1xuXG4gIC8vIFJlYWQgYW4gaW50ZWdlciBpbiB0aGUgZ2l2ZW4gcmFkaXguIFJldHVybiBudWxsIGlmIHplcm8gZGlnaXRzXG4gIC8vIHdlcmUgcmVhZCwgdGhlIGludGVnZXIgdmFsdWUgb3RoZXJ3aXNlLiBXaGVuIGBsZW5gIGlzIGdpdmVuLCB0aGlzXG4gIC8vIHdpbGwgcmV0dXJuIGBudWxsYCB1bmxlc3MgdGhlIGludGVnZXIgaGFzIGV4YWN0bHkgYGxlbmAgZGlnaXRzLlxuXG4gIHBwLnJlYWRJbnQgPSBmdW5jdGlvbihyYWRpeCwgbGVuLCBtYXliZUxlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwpIHtcbiAgICAvLyBgbGVuYCBpcyB1c2VkIGZvciBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlcy4gSW4gdGhhdCBjYXNlLCBkaXNhbGxvdyBzZXBhcmF0b3JzLlxuICAgIHZhciBhbGxvd1NlcGFyYXRvcnMgPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTIgJiYgbGVuID09PSB1bmRlZmluZWQ7XG5cbiAgICAvLyBgbWF5YmVMZWdhY3lPY3RhbE51bWVyaWNMaXRlcmFsYCBpcyB0cnVlIGlmIGl0IGRvZXNuJ3QgaGF2ZSBwcmVmaXggKDB4LDBvLDBiKVxuICAgIC8vIGFuZCBpc24ndCBmcmFjdGlvbiBwYXJ0IG5vciBleHBvbmVudCBwYXJ0LiBJbiB0aGF0IGNhc2UsIGlmIHRoZSBmaXJzdCBkaWdpdFxuICAgIC8vIGlzIHplcm8gdGhlbiBkaXNhbGxvdyBzZXBhcmF0b3JzLlxuICAgIHZhciBpc0xlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwgPSBtYXliZUxlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSA9PT0gNDg7XG5cbiAgICB2YXIgc3RhcnQgPSB0aGlzLnBvcywgdG90YWwgPSAwLCBsYXN0Q29kZSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsZW4gPT0gbnVsbCA/IEluZmluaXR5IDogbGVuOyBpIDwgZTsgKytpLCArK3RoaXMucG9zKSB7XG4gICAgICB2YXIgY29kZSA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyksIHZhbCA9ICh2b2lkIDApO1xuXG4gICAgICBpZiAoYWxsb3dTZXBhcmF0b3JzICYmIGNvZGUgPT09IDk1KSB7XG4gICAgICAgIGlmIChpc0xlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMucG9zLCBcIk51bWVyaWMgc2VwYXJhdG9yIGlzIG5vdCBhbGxvd2VkIGluIGxlZ2FjeSBvY3RhbCBudW1lcmljIGxpdGVyYWxzXCIpOyB9XG4gICAgICAgIGlmIChsYXN0Q29kZSA9PT0gOTUpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMucG9zLCBcIk51bWVyaWMgc2VwYXJhdG9yIG11c3QgYmUgZXhhY3RseSBvbmUgdW5kZXJzY29yZVwiKTsgfVxuICAgICAgICBpZiAoaSA9PT0gMCkgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5wb3MsIFwiTnVtZXJpYyBzZXBhcmF0b3IgaXMgbm90IGFsbG93ZWQgYXQgdGhlIGZpcnN0IG9mIGRpZ2l0c1wiKTsgfVxuICAgICAgICBsYXN0Q29kZSA9IGNvZGU7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChjb2RlID49IDk3KSB7IHZhbCA9IGNvZGUgLSA5NyArIDEwOyB9IC8vIGFcbiAgICAgIGVsc2UgaWYgKGNvZGUgPj0gNjUpIHsgdmFsID0gY29kZSAtIDY1ICsgMTA7IH0gLy8gQVxuICAgICAgZWxzZSBpZiAoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3KSB7IHZhbCA9IGNvZGUgLSA0ODsgfSAvLyAwLTlcbiAgICAgIGVsc2UgeyB2YWwgPSBJbmZpbml0eTsgfVxuICAgICAgaWYgKHZhbCA+PSByYWRpeCkgeyBicmVhayB9XG4gICAgICBsYXN0Q29kZSA9IGNvZGU7XG4gICAgICB0b3RhbCA9IHRvdGFsICogcmFkaXggKyB2YWw7XG4gICAgfVxuXG4gICAgaWYgKGFsbG93U2VwYXJhdG9ycyAmJiBsYXN0Q29kZSA9PT0gOTUpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMucG9zIC0gMSwgXCJOdW1lcmljIHNlcGFyYXRvciBpcyBub3QgYWxsb3dlZCBhdCB0aGUgbGFzdCBvZiBkaWdpdHNcIik7IH1cbiAgICBpZiAodGhpcy5wb3MgPT09IHN0YXJ0IHx8IGxlbiAhPSBudWxsICYmIHRoaXMucG9zIC0gc3RhcnQgIT09IGxlbikgeyByZXR1cm4gbnVsbCB9XG5cbiAgICByZXR1cm4gdG90YWxcbiAgfTtcblxuICBmdW5jdGlvbiBzdHJpbmdUb051bWJlcihzdHIsIGlzTGVnYWN5T2N0YWxOdW1lcmljTGl0ZXJhbCkge1xuICAgIGlmIChpc0xlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwpIHtcbiAgICAgIHJldHVybiBwYXJzZUludChzdHIsIDgpXG4gICAgfVxuXG4gICAgLy8gYHBhcnNlRmxvYXQodmFsdWUpYCBzdG9wcyBwYXJzaW5nIGF0IHRoZSBmaXJzdCBudW1lcmljIHNlcGFyYXRvciB0aGVuIHJldHVybnMgYSB3cm9uZyB2YWx1ZS5cbiAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIucmVwbGFjZSgvXy9nLCBcIlwiKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ1RvQmlnSW50KHN0cikge1xuICAgIGlmICh0eXBlb2YgQmlnSW50ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgLy8gYEJpZ0ludCh2YWx1ZSlgIHRocm93cyBzeW50YXggZXJyb3IgaWYgdGhlIHN0cmluZyBjb250YWlucyBudW1lcmljIHNlcGFyYXRvcnMuXG4gICAgcmV0dXJuIEJpZ0ludChzdHIucmVwbGFjZSgvXy9nLCBcIlwiKSlcbiAgfVxuXG4gIHBwLnJlYWRSYWRpeE51bWJlciA9IGZ1bmN0aW9uKHJhZGl4KSB7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgdGhpcy5wb3MgKz0gMjsgLy8gMHhcbiAgICB2YXIgdmFsID0gdGhpcy5yZWFkSW50KHJhZGl4KTtcbiAgICBpZiAodmFsID09IG51bGwpIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0ICsgMiwgXCJFeHBlY3RlZCBudW1iZXIgaW4gcmFkaXggXCIgKyByYWRpeCk7IH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcykgPT09IDExMCkge1xuICAgICAgdmFsID0gc3RyaW5nVG9CaWdJbnQodGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpKTtcbiAgICAgICsrdGhpcy5wb3M7XG4gICAgfSBlbHNlIGlmIChpc0lkZW50aWZpZXJTdGFydCh0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCkpKSB7IHRoaXMucmFpc2UodGhpcy5wb3MsIFwiSWRlbnRpZmllciBkaXJlY3RseSBhZnRlciBudW1iZXJcIik7IH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLm51bSwgdmFsKVxuICB9O1xuXG4gIC8vIFJlYWQgYW4gaW50ZWdlciwgb2N0YWwgaW50ZWdlciwgb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVyLlxuXG4gIHBwLnJlYWROdW1iZXIgPSBmdW5jdGlvbihzdGFydHNXaXRoRG90KSB7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgaWYgKCFzdGFydHNXaXRoRG90ICYmIHRoaXMucmVhZEludCgxMCwgdW5kZWZpbmVkLCB0cnVlKSA9PT0gbnVsbCkgeyB0aGlzLnJhaXNlKHN0YXJ0LCBcIkludmFsaWQgbnVtYmVyXCIpOyB9XG4gICAgdmFyIG9jdGFsID0gdGhpcy5wb3MgLSBzdGFydCA+PSAyICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdChzdGFydCkgPT09IDQ4O1xuICAgIGlmIChvY3RhbCAmJiB0aGlzLnN0cmljdCkgeyB0aGlzLnJhaXNlKHN0YXJ0LCBcIkludmFsaWQgbnVtYmVyXCIpOyB9XG4gICAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICAgIGlmICghb2N0YWwgJiYgIXN0YXJ0c1dpdGhEb3QgJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExICYmIG5leHQgPT09IDExMCkge1xuICAgICAgdmFyIHZhbCQxID0gc3RyaW5nVG9CaWdJbnQodGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpKTtcbiAgICAgICsrdGhpcy5wb3M7XG4gICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQodGhpcy5mdWxsQ2hhckNvZGVBdFBvcygpKSkgeyB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIklkZW50aWZpZXIgZGlyZWN0bHkgYWZ0ZXIgbnVtYmVyXCIpOyB9XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLm51bSwgdmFsJDEpXG4gICAgfVxuICAgIGlmIChvY3RhbCAmJiAvWzg5XS8udGVzdCh0aGlzLmlucHV0LnNsaWNlKHN0YXJ0LCB0aGlzLnBvcykpKSB7IG9jdGFsID0gZmFsc2U7IH1cbiAgICBpZiAobmV4dCA9PT0gNDYgJiYgIW9jdGFsKSB7IC8vICcuJ1xuICAgICAgKyt0aGlzLnBvcztcbiAgICAgIHRoaXMucmVhZEludCgxMCk7XG4gICAgICBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgICB9XG4gICAgaWYgKChuZXh0ID09PSA2OSB8fCBuZXh0ID09PSAxMDEpICYmICFvY3RhbCkgeyAvLyAnZUUnXG4gICAgICBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KCsrdGhpcy5wb3MpO1xuICAgICAgaWYgKG5leHQgPT09IDQzIHx8IG5leHQgPT09IDQ1KSB7ICsrdGhpcy5wb3M7IH0gLy8gJystJ1xuICAgICAgaWYgKHRoaXMucmVhZEludCgxMCkgPT09IG51bGwpIHsgdGhpcy5yYWlzZShzdGFydCwgXCJJbnZhbGlkIG51bWJlclwiKTsgfVxuICAgIH1cbiAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQodGhpcy5mdWxsQ2hhckNvZGVBdFBvcygpKSkgeyB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIklkZW50aWZpZXIgZGlyZWN0bHkgYWZ0ZXIgbnVtYmVyXCIpOyB9XG5cbiAgICB2YXIgdmFsID0gc3RyaW5nVG9OdW1iZXIodGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpLCBvY3RhbCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5udW0sIHZhbClcbiAgfTtcblxuICAvLyBSZWFkIGEgc3RyaW5nIHZhbHVlLCBpbnRlcnByZXRpbmcgYmFja3NsYXNoLWVzY2FwZXMuXG5cbiAgcHAucmVhZENvZGVQb2ludCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyksIGNvZGU7XG5cbiAgICBpZiAoY2ggPT09IDEyMykgeyAvLyAneydcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA2KSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICB2YXIgY29kZVBvcyA9ICsrdGhpcy5wb3M7XG4gICAgICBjb2RlID0gdGhpcy5yZWFkSGV4Q2hhcih0aGlzLmlucHV0LmluZGV4T2YoXCJ9XCIsIHRoaXMucG9zKSAtIHRoaXMucG9zKTtcbiAgICAgICsrdGhpcy5wb3M7XG4gICAgICBpZiAoY29kZSA+IDB4MTBGRkZGKSB7IHRoaXMuaW52YWxpZFN0cmluZ1Rva2VuKGNvZGVQb3MsIFwiQ29kZSBwb2ludCBvdXQgb2YgYm91bmRzXCIpOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGUgPSB0aGlzLnJlYWRIZXhDaGFyKDQpO1xuICAgIH1cbiAgICByZXR1cm4gY29kZVxuICB9O1xuXG4gIHBwLnJlYWRTdHJpbmcgPSBmdW5jdGlvbihxdW90ZSkge1xuICAgIHZhciBvdXQgPSBcIlwiLCBjaHVua1N0YXJ0ID0gKyt0aGlzLnBvcztcbiAgICBmb3IgKDs7KSB7XG4gICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIlVudGVybWluYXRlZCBzdHJpbmcgY29uc3RhbnRcIik7IH1cbiAgICAgIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gICAgICBpZiAoY2ggPT09IHF1b3RlKSB7IGJyZWFrIH1cbiAgICAgIGlmIChjaCA9PT0gOTIpIHsgLy8gJ1xcJ1xuICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICAgIG91dCArPSB0aGlzLnJlYWRFc2NhcGVkQ2hhcihmYWxzZSk7XG4gICAgICAgIGNodW5rU3RhcnQgPSB0aGlzLnBvcztcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjAyOCB8fCBjaCA9PT0gMHgyMDI5KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCAxMCkgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHN0cmluZyBjb25zdGFudFwiKTsgfVxuICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykge1xuICAgICAgICAgIHRoaXMuY3VyTGluZSsrO1xuICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc05ld0xpbmUoY2gpKSB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpOyB9XG4gICAgICAgICsrdGhpcy5wb3M7XG4gICAgICB9XG4gICAgfVxuICAgIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKyspO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuc3RyaW5nLCBvdXQpXG4gIH07XG5cbiAgLy8gUmVhZHMgdGVtcGxhdGUgc3RyaW5nIHRva2Vucy5cblxuICB2YXIgSU5WQUxJRF9URU1QTEFURV9FU0NBUEVfRVJST1IgPSB7fTtcblxuICBwcC50cnlSZWFkVGVtcGxhdGVUb2tlbiA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5UZW1wbGF0ZUVsZW1lbnQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlYWRUbXBsVG9rZW4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgPT09IElOVkFMSURfVEVNUExBVEVfRVNDQVBFX0VSUk9SKSB7XG4gICAgICAgIHRoaXMucmVhZEludmFsaWRUZW1wbGF0ZVRva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluVGVtcGxhdGVFbGVtZW50ID0gZmFsc2U7XG4gIH07XG5cbiAgcHAuaW52YWxpZFN0cmluZ1Rva2VuID0gZnVuY3Rpb24ocG9zaXRpb24sIG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5pblRlbXBsYXRlRWxlbWVudCAmJiB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSkge1xuICAgICAgdGhyb3cgSU5WQUxJRF9URU1QTEFURV9FU0NBUEVfRVJST1JcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYWlzZShwb3NpdGlvbiwgbWVzc2FnZSk7XG4gICAgfVxuICB9O1xuXG4gIHBwLnJlYWRUbXBsVG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb3V0ID0gXCJcIiwgY2h1bmtTdGFydCA9IHRoaXMucG9zO1xuICAgIGZvciAoOzspIHtcbiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHRlbXBsYXRlXCIpOyB9XG4gICAgICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICAgICAgaWYgKGNoID09PSA5NiB8fCBjaCA9PT0gMzYgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSkgPT09IDEyMykgeyAvLyAnYCcsICckeydcbiAgICAgICAgaWYgKHRoaXMucG9zID09PSB0aGlzLnN0YXJ0ICYmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEudGVtcGxhdGUgfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLmludmFsaWRUZW1wbGF0ZSkpIHtcbiAgICAgICAgICBpZiAoY2ggPT09IDM2KSB7XG4gICAgICAgICAgICB0aGlzLnBvcyArPSAyO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5kb2xsYXJCcmFjZUwpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICsrdGhpcy5wb3M7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmJhY2tRdW90ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLnRlbXBsYXRlLCBvdXQpXG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09IDkyKSB7IC8vICdcXCdcbiAgICAgICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MpO1xuICAgICAgICBvdXQgKz0gdGhpcy5yZWFkRXNjYXBlZENoYXIodHJ1ZSk7XG4gICAgICAgIGNodW5rU3RhcnQgPSB0aGlzLnBvcztcbiAgICAgIH0gZWxzZSBpZiAoaXNOZXdMaW5lKGNoKSkge1xuICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICAgICsrdGhpcy5wb3M7XG4gICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBpZiAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSA9PT0gMTApIHsgKyt0aGlzLnBvczsgfVxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIG91dCArPSBcIlxcblwiO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHtcbiAgICAgICAgICArK3RoaXMuY3VyTGluZTtcbiAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMucG9zO1xuICAgICAgICB9XG4gICAgICAgIGNodW5rU3RhcnQgPSB0aGlzLnBvcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICsrdGhpcy5wb3M7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlYWRzIGEgdGVtcGxhdGUgdG9rZW4gdG8gc2VhcmNoIGZvciB0aGUgZW5kLCB3aXRob3V0IHZhbGlkYXRpbmcgYW55IGVzY2FwZSBzZXF1ZW5jZXNcbiAgcHAucmVhZEludmFsaWRUZW1wbGF0ZVRva2VuID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICg7IHRoaXMucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGg7IHRoaXMucG9zKyspIHtcbiAgICAgIHN3aXRjaCAodGhpcy5pbnB1dFt0aGlzLnBvc10pIHtcbiAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICsrdGhpcy5wb3M7XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCIkXCI6XG4gICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zICsgMV0gIT09IFwie1wiKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwiYFwiOlxuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmludmFsaWRUZW1wbGF0ZSwgdGhpcy5pbnB1dC5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLnBvcykpXG5cbiAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIlVudGVybWluYXRlZCB0ZW1wbGF0ZVwiKTtcbiAgfTtcblxuICAvLyBVc2VkIHRvIHJlYWQgZXNjYXBlZCBjaGFyYWN0ZXJzXG5cbiAgcHAucmVhZEVzY2FwZWRDaGFyID0gZnVuY3Rpb24oaW5UZW1wbGF0ZSkge1xuICAgIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMucG9zKTtcbiAgICArK3RoaXMucG9zO1xuICAgIHN3aXRjaCAoY2gpIHtcbiAgICBjYXNlIDExMDogcmV0dXJuIFwiXFxuXCIgLy8gJ24nIC0+ICdcXG4nXG4gICAgY2FzZSAxMTQ6IHJldHVybiBcIlxcclwiIC8vICdyJyAtPiAnXFxyJ1xuICAgIGNhc2UgMTIwOiByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnJlYWRIZXhDaGFyKDIpKSAvLyAneCdcbiAgICBjYXNlIDExNzogcmV0dXJuIGNvZGVQb2ludFRvU3RyaW5nKHRoaXMucmVhZENvZGVQb2ludCgpKSAvLyAndSdcbiAgICBjYXNlIDExNjogcmV0dXJuIFwiXFx0XCIgLy8gJ3QnIC0+ICdcXHQnXG4gICAgY2FzZSA5ODogcmV0dXJuIFwiXFxiXCIgLy8gJ2InIC0+ICdcXGInXG4gICAgY2FzZSAxMTg6IHJldHVybiBcIlxcdTAwMGJcIiAvLyAndicgLT4gJ1xcdTAwMGInXG4gICAgY2FzZSAxMDI6IHJldHVybiBcIlxcZlwiIC8vICdmJyAtPiAnXFxmJ1xuICAgIGNhc2UgMTM6IGlmICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpID09PSAxMCkgeyArK3RoaXMucG9zOyB9IC8vICdcXHJcXG4nXG4gICAgY2FzZSAxMDogLy8gJyBcXG4nXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykgeyB0aGlzLmxpbmVTdGFydCA9IHRoaXMucG9zOyArK3RoaXMuY3VyTGluZTsgfVxuICAgICAgcmV0dXJuIFwiXCJcbiAgICBjYXNlIDU2OlxuICAgIGNhc2UgNTc6XG4gICAgICBpZiAodGhpcy5zdHJpY3QpIHtcbiAgICAgICAgdGhpcy5pbnZhbGlkU3RyaW5nVG9rZW4oXG4gICAgICAgICAgdGhpcy5wb3MgLSAxLFxuICAgICAgICAgIFwiSW52YWxpZCBlc2NhcGUgc2VxdWVuY2VcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGluVGVtcGxhdGUpIHtcbiAgICAgICAgdmFyIGNvZGVQb3MgPSB0aGlzLnBvcyAtIDE7XG5cbiAgICAgICAgdGhpcy5pbnZhbGlkU3RyaW5nVG9rZW4oXG4gICAgICAgICAgY29kZVBvcyxcbiAgICAgICAgICBcIkludmFsaWQgZXNjYXBlIHNlcXVlbmNlIGluIHRlbXBsYXRlIHN0cmluZ1wiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChjaCA+PSA0OCAmJiBjaCA8PSA1NSkge1xuICAgICAgICB2YXIgb2N0YWxTdHIgPSB0aGlzLmlucHV0LnN1YnN0cih0aGlzLnBvcyAtIDEsIDMpLm1hdGNoKC9eWzAtN10rLylbMF07XG4gICAgICAgIHZhciBvY3RhbCA9IHBhcnNlSW50KG9jdGFsU3RyLCA4KTtcbiAgICAgICAgaWYgKG9jdGFsID4gMjU1KSB7XG4gICAgICAgICAgb2N0YWxTdHIgPSBvY3RhbFN0ci5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgb2N0YWwgPSBwYXJzZUludChvY3RhbFN0ciwgOCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3MgKz0gb2N0YWxTdHIubGVuZ3RoIC0gMTtcbiAgICAgICAgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICAgICAgICBpZiAoKG9jdGFsU3RyICE9PSBcIjBcIiB8fCBjaCA9PT0gNTYgfHwgY2ggPT09IDU3KSAmJiAodGhpcy5zdHJpY3QgfHwgaW5UZW1wbGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLmludmFsaWRTdHJpbmdUb2tlbihcbiAgICAgICAgICAgIHRoaXMucG9zIC0gMSAtIG9jdGFsU3RyLmxlbmd0aCxcbiAgICAgICAgICAgIGluVGVtcGxhdGVcbiAgICAgICAgICAgICAgPyBcIk9jdGFsIGxpdGVyYWwgaW4gdGVtcGxhdGUgc3RyaW5nXCJcbiAgICAgICAgICAgICAgOiBcIk9jdGFsIGxpdGVyYWwgaW4gc3RyaWN0IG1vZGVcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUob2N0YWwpXG4gICAgICB9XG4gICAgICBpZiAoaXNOZXdMaW5lKGNoKSkge1xuICAgICAgICAvLyBVbmljb2RlIG5ldyBsaW5lIGNoYXJhY3RlcnMgYWZ0ZXIgXFwgZ2V0IHJlbW92ZWQgZnJvbSBvdXRwdXQgaW4gYm90aFxuICAgICAgICAvLyB0ZW1wbGF0ZSBsaXRlcmFscyBhbmQgc3RyaW5nc1xuICAgICAgICByZXR1cm4gXCJcIlxuICAgICAgfVxuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpXG4gICAgfVxuICB9O1xuXG4gIC8vIFVzZWQgdG8gcmVhZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlcyAoJ1xceCcsICdcXHUnLCAnXFxVJykuXG5cbiAgcHAucmVhZEhleENoYXIgPSBmdW5jdGlvbihsZW4pIHtcbiAgICB2YXIgY29kZVBvcyA9IHRoaXMucG9zO1xuICAgIHZhciBuID0gdGhpcy5yZWFkSW50KDE2LCBsZW4pO1xuICAgIGlmIChuID09PSBudWxsKSB7IHRoaXMuaW52YWxpZFN0cmluZ1Rva2VuKGNvZGVQb3MsIFwiQmFkIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2VcIik7IH1cbiAgICByZXR1cm4gblxuICB9O1xuXG4gIC8vIFJlYWQgYW4gaWRlbnRpZmllciwgYW5kIHJldHVybiBpdCBhcyBhIHN0cmluZy4gU2V0cyBgdGhpcy5jb250YWluc0VzY2BcbiAgLy8gdG8gd2hldGhlciB0aGUgd29yZCBjb250YWluZWQgYSAnXFx1JyBlc2NhcGUuXG4gIC8vXG4gIC8vIEluY3JlbWVudGFsbHkgYWRkcyBvbmx5IGVzY2FwZWQgY2hhcnMsIGFkZGluZyBvdGhlciBjaHVua3MgYXMtaXNcbiAgLy8gYXMgYSBtaWNyby1vcHRpbWl6YXRpb24uXG5cbiAgcHAucmVhZFdvcmQxID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jb250YWluc0VzYyA9IGZhbHNlO1xuICAgIHZhciB3b3JkID0gXCJcIiwgZmlyc3QgPSB0cnVlLCBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgdmFyIGFzdHJhbCA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2O1xuICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgICB2YXIgY2ggPSB0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCk7XG4gICAgICBpZiAoaXNJZGVudGlmaWVyQ2hhcihjaCwgYXN0cmFsKSkge1xuICAgICAgICB0aGlzLnBvcyArPSBjaCA8PSAweGZmZmYgPyAxIDogMjtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDkyKSB7IC8vIFwiXFxcIlxuICAgICAgICB0aGlzLmNvbnRhaW5zRXNjID0gdHJ1ZTtcbiAgICAgICAgd29yZCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKTtcbiAgICAgICAgdmFyIGVzY1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIGlmICh0aGlzLmlucHV0LmNoYXJDb2RlQXQoKyt0aGlzLnBvcykgIT09IDExNykgLy8gXCJ1XCJcbiAgICAgICAgICB7IHRoaXMuaW52YWxpZFN0cmluZ1Rva2VuKHRoaXMucG9zLCBcIkV4cGVjdGluZyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZSBcXFxcdVhYWFhcIik7IH1cbiAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgICAgdmFyIGVzYyA9IHRoaXMucmVhZENvZGVQb2ludCgpO1xuICAgICAgICBpZiAoIShmaXJzdCA/IGlzSWRlbnRpZmllclN0YXJ0IDogaXNJZGVudGlmaWVyQ2hhcikoZXNjLCBhc3RyYWwpKVxuICAgICAgICAgIHsgdGhpcy5pbnZhbGlkU3RyaW5nVG9rZW4oZXNjU3RhcnQsIFwiSW52YWxpZCBVbmljb2RlIGVzY2FwZVwiKTsgfVxuICAgICAgICB3b3JkICs9IGNvZGVQb2ludFRvU3RyaW5nKGVzYyk7XG4gICAgICAgIGNodW5rU3RhcnQgPSB0aGlzLnBvcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gd29yZCArIHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MpXG4gIH07XG5cbiAgLy8gUmVhZCBhbiBpZGVudGlmaWVyIG9yIGtleXdvcmQgdG9rZW4uIFdpbGwgY2hlY2sgZm9yIHJlc2VydmVkXG4gIC8vIHdvcmRzIHdoZW4gbmVjZXNzYXJ5LlxuXG4gIHBwLnJlYWRXb3JkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHdvcmQgPSB0aGlzLnJlYWRXb3JkMSgpO1xuICAgIHZhciB0eXBlID0gdHlwZXMkMS5uYW1lO1xuICAgIGlmICh0aGlzLmtleXdvcmRzLnRlc3Qod29yZCkpIHtcbiAgICAgIHR5cGUgPSBrZXl3b3Jkc1t3b3JkXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZSwgd29yZClcbiAgfTtcblxuICAvLyBBY29ybiBpcyBhIHRpbnksIGZhc3QgSmF2YVNjcmlwdCBwYXJzZXIgd3JpdHRlbiBpbiBKYXZhU2NyaXB0LlxuICAvL1xuICAvLyBBY29ybiB3YXMgd3JpdHRlbiBieSBNYXJpam4gSGF2ZXJiZWtlLCBJbmd2YXIgU3RlcGFueWFuLCBhbmRcbiAgLy8gdmFyaW91cyBjb250cmlidXRvcnMgYW5kIHJlbGVhc2VkIHVuZGVyIGFuIE1JVCBsaWNlbnNlLlxuICAvL1xuICAvLyBHaXQgcmVwb3NpdG9yaWVzIGZvciBBY29ybiBhcmUgYXZhaWxhYmxlIGF0XG4gIC8vXG4gIC8vICAgICBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9hY29yblxuICAvLyAgICAgaHR0cHM6Ly9naXRodWIuY29tL2Fjb3JuanMvYWNvcm4uZ2l0XG4gIC8vXG4gIC8vIFBsZWFzZSB1c2UgdGhlIFtnaXRodWIgYnVnIHRyYWNrZXJdW2doYnRdIHRvIHJlcG9ydCBpc3N1ZXMuXG4gIC8vXG4gIC8vIFtnaGJ0XTogaHR0cHM6Ly9naXRodWIuY29tL2Fjb3JuanMvYWNvcm4vaXNzdWVzXG4gIC8vXG4gIC8vIFt3YWxrXTogdXRpbC93YWxrLmpzXG5cblxuICB2YXIgdmVyc2lvbiA9IFwiOC45LjBcIjtcblxuICBQYXJzZXIuYWNvcm4gPSB7XG4gICAgUGFyc2VyOiBQYXJzZXIsXG4gICAgdmVyc2lvbjogdmVyc2lvbixcbiAgICBkZWZhdWx0T3B0aW9uczogZGVmYXVsdE9wdGlvbnMsXG4gICAgUG9zaXRpb246IFBvc2l0aW9uLFxuICAgIFNvdXJjZUxvY2F0aW9uOiBTb3VyY2VMb2NhdGlvbixcbiAgICBnZXRMaW5lSW5mbzogZ2V0TGluZUluZm8sXG4gICAgTm9kZTogTm9kZSxcbiAgICBUb2tlblR5cGU6IFRva2VuVHlwZSxcbiAgICB0b2tUeXBlczogdHlwZXMkMSxcbiAgICBrZXl3b3JkVHlwZXM6IGtleXdvcmRzLFxuICAgIFRva0NvbnRleHQ6IFRva0NvbnRleHQsXG4gICAgdG9rQ29udGV4dHM6IHR5cGVzLFxuICAgIGlzSWRlbnRpZmllckNoYXI6IGlzSWRlbnRpZmllckNoYXIsXG4gICAgaXNJZGVudGlmaWVyU3RhcnQ6IGlzSWRlbnRpZmllclN0YXJ0LFxuICAgIFRva2VuOiBUb2tlbixcbiAgICBpc05ld0xpbmU6IGlzTmV3TGluZSxcbiAgICBsaW5lQnJlYWs6IGxpbmVCcmVhayxcbiAgICBsaW5lQnJlYWtHOiBsaW5lQnJlYWtHLFxuICAgIG5vbkFTQ0lJd2hpdGVzcGFjZTogbm9uQVNDSUl3aGl0ZXNwYWNlXG4gIH07XG5cbiAgLy8gVGhlIG1haW4gZXhwb3J0ZWQgaW50ZXJmYWNlICh1bmRlciBgc2VsZi5hY29ybmAgd2hlbiBpbiB0aGVcbiAgLy8gYnJvd3NlcikgaXMgYSBgcGFyc2VgIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjb2RlIHN0cmluZyBhbmRcbiAgLy8gcmV0dXJucyBhbiBhYnN0cmFjdCBzeW50YXggdHJlZSBhcyBzcGVjaWZpZWQgYnkgW01vemlsbGEgcGFyc2VyXG4gIC8vIEFQSV1bYXBpXS5cbiAgLy9cbiAgLy8gW2FwaV06IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvU3BpZGVyTW9ua2V5L1BhcnNlcl9BUElcblxuICBmdW5jdGlvbiBwYXJzZShpbnB1dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBQYXJzZXIucGFyc2UoaW5wdXQsIG9wdGlvbnMpXG4gIH1cblxuICAvLyBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHBhcnNlIGEgc2luZ2xlIGV4cHJlc3Npb24gYXQgYSBnaXZlblxuICAvLyBvZmZzZXQgaW4gYSBzdHJpbmcuIFVzZWZ1bCBmb3IgcGFyc2luZyBtaXhlZC1sYW5ndWFnZSBmb3JtYXRzXG4gIC8vIHRoYXQgZW1iZWQgSmF2YVNjcmlwdCBleHByZXNzaW9ucy5cblxuICBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb25BdChpbnB1dCwgcG9zLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFBhcnNlci5wYXJzZUV4cHJlc3Npb25BdChpbnB1dCwgcG9zLCBvcHRpb25zKVxuICB9XG5cbiAgLy8gQWNvcm4gaXMgb3JnYW5pemVkIGFzIGEgdG9rZW5pemVyIGFuZCBhIHJlY3Vyc2l2ZS1kZXNjZW50IHBhcnNlci5cbiAgLy8gVGhlIGB0b2tlbml6ZXJgIGV4cG9ydCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIHRva2VuaXplci5cblxuICBmdW5jdGlvbiB0b2tlbml6ZXIoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUGFyc2VyLnRva2VuaXplcihpbnB1dCwgb3B0aW9ucylcbiAgfVxuXG4gIGV4cG9ydHMuTm9kZSA9IE5vZGU7XG4gIGV4cG9ydHMuUGFyc2VyID0gUGFyc2VyO1xuICBleHBvcnRzLlBvc2l0aW9uID0gUG9zaXRpb247XG4gIGV4cG9ydHMuU291cmNlTG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbjtcbiAgZXhwb3J0cy5Ub2tDb250ZXh0ID0gVG9rQ29udGV4dDtcbiAgZXhwb3J0cy5Ub2tlbiA9IFRva2VuO1xuICBleHBvcnRzLlRva2VuVHlwZSA9IFRva2VuVHlwZTtcbiAgZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICBleHBvcnRzLmdldExpbmVJbmZvID0gZ2V0TGluZUluZm87XG4gIGV4cG9ydHMuaXNJZGVudGlmaWVyQ2hhciA9IGlzSWRlbnRpZmllckNoYXI7XG4gIGV4cG9ydHMuaXNJZGVudGlmaWVyU3RhcnQgPSBpc0lkZW50aWZpZXJTdGFydDtcbiAgZXhwb3J0cy5pc05ld0xpbmUgPSBpc05ld0xpbmU7XG4gIGV4cG9ydHMua2V5d29yZFR5cGVzID0ga2V5d29yZHM7XG4gIGV4cG9ydHMubGluZUJyZWFrID0gbGluZUJyZWFrO1xuICBleHBvcnRzLmxpbmVCcmVha0cgPSBsaW5lQnJlYWtHO1xuICBleHBvcnRzLm5vbkFTQ0lJd2hpdGVzcGFjZSA9IG5vbkFTQ0lJd2hpdGVzcGFjZTtcbiAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuICBleHBvcnRzLnBhcnNlRXhwcmVzc2lvbkF0ID0gcGFyc2VFeHByZXNzaW9uQXQ7XG4gIGV4cG9ydHMudG9rQ29udGV4dHMgPSB0eXBlcztcbiAgZXhwb3J0cy50b2tUeXBlcyA9IHR5cGVzJDE7XG4gIGV4cG9ydHMudG9rZW5pemVyID0gdG9rZW5pemVyO1xuICBleHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG59KSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGFmdGVyXG5cbmZ1bmN0aW9uIGFmdGVyKGNvdW50LCBjYWxsYmFjaywgZXJyX2NiKSB7XG4gICAgdmFyIGJhaWwgPSBmYWxzZVxuICAgIGVycl9jYiA9IGVycl9jYiB8fCBub29wXG4gICAgcHJveHkuY291bnQgPSBjb3VudFxuXG4gICAgcmV0dXJuIChjb3VudCA9PT0gMCkgPyBjYWxsYmFjaygpIDogcHJveHlcblxuICAgIGZ1bmN0aW9uIHByb3h5KGVyciwgcmVzdWx0KSB7XG4gICAgICAgIGlmIChwcm94eS5jb3VudCA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FmdGVyIGNhbGxlZCB0b28gbWFueSB0aW1lcycpXG4gICAgICAgIH1cbiAgICAgICAgLS1wcm94eS5jb3VudFxuXG4gICAgICAgIC8vIGFmdGVyIGZpcnN0IGVycm9yLCByZXN0IGFyZSBwYXNzZWQgdG8gZXJyX2NiXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGJhaWwgPSB0cnVlXG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgICAvLyBmdXR1cmUgZXJyb3IgY2FsbGJhY2tzIHdpbGwgZ28gdG8gZXJyb3IgaGFuZGxlclxuICAgICAgICAgICAgY2FsbGJhY2sgPSBlcnJfY2JcbiAgICAgICAgfSBlbHNlIGlmIChwcm94eS5jb3VudCA9PT0gMCAmJiAhYmFpbCkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBub29wKCkge31cbiIsIi8qKlxuICogQW4gYWJzdHJhY3Rpb24gZm9yIHNsaWNpbmcgYW4gYXJyYXlidWZmZXIgZXZlbiB3aGVuXG4gKiBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgaXMgbm90IHN1cHBvcnRlZFxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhcnJheWJ1ZmZlciwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBhcnJheWJ1ZmZlci5ieXRlTGVuZ3RoO1xuICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gIGVuZCA9IGVuZCB8fCBieXRlcztcblxuICBpZiAoYXJyYXlidWZmZXIuc2xpY2UpIHsgcmV0dXJuIGFycmF5YnVmZmVyLnNsaWNlKHN0YXJ0LCBlbmQpOyB9XG5cbiAgaWYgKHN0YXJ0IDwgMCkgeyBzdGFydCArPSBieXRlczsgfVxuICBpZiAoZW5kIDwgMCkgeyBlbmQgKz0gYnl0ZXM7IH1cbiAgaWYgKGVuZCA+IGJ5dGVzKSB7IGVuZCA9IGJ5dGVzOyB9XG5cbiAgaWYgKHN0YXJ0ID49IGJ5dGVzIHx8IHN0YXJ0ID49IGVuZCB8fCBieXRlcyA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gIH1cblxuICB2YXIgYWJ2ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoZW5kIC0gc3RhcnQpO1xuICBmb3IgKHZhciBpID0gc3RhcnQsIGlpID0gMDsgaSA8IGVuZDsgaSsrLCBpaSsrKSB7XG4gICAgcmVzdWx0W2lpXSA9IGFidltpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmJ1ZmZlcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIGNvbXBhcmUgYW5kIGlzQnVmZmVyIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvYmxvYi82ODBlOWU1ZTQ4OGYyMmFhYzI3NTk5YTU3ZGM4NDRhNjMxNTkyOGRkL2luZGV4LmpzXG4vLyBvcmlnaW5hbCBub3RpY2U6XG5cbi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHggPSBhLmxlbmd0aDtcbiAgdmFyIHkgPSBiLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXTtcbiAgICAgIHkgPSBiW2ldO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmICh5IDwgeCkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuZnVuY3Rpb24gaXNCdWZmZXIoYikge1xuICBpZiAoZ2xvYmFsLkJ1ZmZlciAmJiB0eXBlb2YgZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnbG9iYWwuQnVmZmVyLmlzQnVmZmVyKGIpO1xuICB9XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpO1xufVxuXG4vLyBiYXNlZCBvbiBub2RlIGFzc2VydCwgb3JpZ2luYWwgbm90aWNlOlxuLy8gTkI6IFRoZSBVUkwgdG8gdGhlIENvbW1vbkpTIHNwZWMgaXMga2VwdCBqdXN0IGZvciB0cmFkaXRpb24uXG4vLyAgICAgbm9kZS1hc3NlcnQgaGFzIGV2b2x2ZWQgYSBsb3Qgc2luY2UgdGhlbiwgYm90aCBpbiBBUEkgYW5kIGJlaGF2aW9yLlxuXG4vLyBodHRwOi8vd2lraS5jb21tb25qcy5vcmcvd2lraS9Vbml0X1Rlc3RpbmcvMS4wXG4vL1xuLy8gVEhJUyBJUyBOT1QgVEVTVEVEIE5PUiBMSUtFTFkgVE8gV09SSyBPVVRTSURFIFY4IVxuLy9cbi8vIE9yaWdpbmFsbHkgZnJvbSBuYXJ3aGFsLmpzIChodHRwOi8vbmFyd2hhbGpzLm9yZylcbi8vIENvcHlyaWdodCAoYykgMjAwOSBUaG9tYXMgUm9iaW5zb24gPDI4MG5vcnRoLmNvbT5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAnU29mdHdhcmUnKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4vLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsLycpO1xudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGZ1bmN0aW9uc0hhdmVOYW1lcyA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb28oKSB7fS5uYW1lID09PSAnZm9vJztcbn0oKSk7XG5mdW5jdGlvbiBwVG9TdHJpbmcgKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG59XG5mdW5jdGlvbiBpc1ZpZXcoYXJyYnVmKSB7XG4gIGlmIChpc0J1ZmZlcihhcnJidWYpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsLkFycmF5QnVmZmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhhcnJidWYpO1xuICB9XG4gIGlmICghYXJyYnVmKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChhcnJidWYgaW5zdGFuY2VvZiBEYXRhVmlldykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChhcnJidWYuYnVmZmVyICYmIGFycmJ1Zi5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbi8vIDEuIFRoZSBhc3NlcnQgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0aGF0IHRocm93XG4vLyBBc3NlcnRpb25FcnJvcidzIHdoZW4gcGFydGljdWxhciBjb25kaXRpb25zIGFyZSBub3QgbWV0LiBUaGVcbi8vIGFzc2VydCBtb2R1bGUgbXVzdCBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlLlxuXG52YXIgYXNzZXJ0ID0gbW9kdWxlLmV4cG9ydHMgPSBvaztcblxuLy8gMi4gVGhlIEFzc2VydGlvbkVycm9yIGlzIGRlZmluZWQgaW4gYXNzZXJ0LlxuLy8gbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7IG1lc3NhZ2U6IG1lc3NhZ2UsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBhY3R1YWwsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkIH0pXG5cbnZhciByZWdleCA9IC9cXHMqZnVuY3Rpb25cXHMrKFteXFwoXFxzXSopXFxzKi87XG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lL2Jsb2IvYWRlZWVlYzhiZmNjNjA2OGIxODdkN2Q5ZmIzZDViYjFkM2EzMDg5OS9pbXBsZW1lbnRhdGlvbi5qc1xuZnVuY3Rpb24gZ2V0TmFtZShmdW5jKSB7XG4gIGlmICghdXRpbC5pc0Z1bmN0aW9uKGZ1bmMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmdW5jdGlvbnNIYXZlTmFtZXMpIHtcbiAgICByZXR1cm4gZnVuYy5uYW1lO1xuICB9XG4gIHZhciBzdHIgPSBmdW5jLnRvU3RyaW5nKCk7XG4gIHZhciBtYXRjaCA9IHN0ci5tYXRjaChyZWdleCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXTtcbn1cbmFzc2VydC5Bc3NlcnRpb25FcnJvciA9IGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5uYW1lID0gJ0Fzc2VydGlvbkVycm9yJztcbiAgdGhpcy5hY3R1YWwgPSBvcHRpb25zLmFjdHVhbDtcbiAgdGhpcy5leHBlY3RlZCA9IG9wdGlvbnMuZXhwZWN0ZWQ7XG4gIHRoaXMub3BlcmF0b3IgPSBvcHRpb25zLm9wZXJhdG9yO1xuICBpZiAob3B0aW9ucy5tZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gb3B0aW9ucy5tZXNzYWdlO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWVzc2FnZSA9IGdldE1lc3NhZ2UodGhpcyk7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gdHJ1ZTtcbiAgfVxuICB2YXIgc3RhY2tTdGFydEZ1bmN0aW9uID0gb3B0aW9ucy5zdGFja1N0YXJ0RnVuY3Rpb24gfHwgZmFpbDtcbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgc3RhY2tTdGFydEZ1bmN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBub24gdjggYnJvd3NlcnMgc28gd2UgY2FuIGhhdmUgYSBzdGFja3RyYWNlXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xuICAgIGlmIChlcnIuc3RhY2spIHtcbiAgICAgIHZhciBvdXQgPSBlcnIuc3RhY2s7XG5cbiAgICAgIC8vIHRyeSB0byBzdHJpcCB1c2VsZXNzIGZyYW1lc1xuICAgICAgdmFyIGZuX25hbWUgPSBnZXROYW1lKHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gICAgICB2YXIgaWR4ID0gb3V0LmluZGV4T2YoJ1xcbicgKyBmbl9uYW1lKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAvLyBvbmNlIHdlIGhhdmUgbG9jYXRlZCB0aGUgZnVuY3Rpb24gZnJhbWVcbiAgICAgICAgLy8gd2UgbmVlZCB0byBzdHJpcCBvdXQgZXZlcnl0aGluZyBiZWZvcmUgaXQgKGFuZCBpdHMgbGluZSlcbiAgICAgICAgdmFyIG5leHRfbGluZSA9IG91dC5pbmRleE9mKCdcXG4nLCBpZHggKyAxKTtcbiAgICAgICAgb3V0ID0gb3V0LnN1YnN0cmluZyhuZXh0X2xpbmUgKyAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFjayA9IG91dDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFzc2VydC5Bc3NlcnRpb25FcnJvciBpbnN0YW5jZW9mIEVycm9yXG51dGlsLmluaGVyaXRzKGFzc2VydC5Bc3NlcnRpb25FcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiB0cnVuY2F0ZShzLCBuKSB7XG4gIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPCBuID8gcyA6IHMuc2xpY2UoMCwgbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc3BlY3Qoc29tZXRoaW5nKSB7XG4gIGlmIChmdW5jdGlvbnNIYXZlTmFtZXMgfHwgIXV0aWwuaXNGdW5jdGlvbihzb21ldGhpbmcpKSB7XG4gICAgcmV0dXJuIHV0aWwuaW5zcGVjdChzb21ldGhpbmcpO1xuICB9XG4gIHZhciByYXduYW1lID0gZ2V0TmFtZShzb21ldGhpbmcpO1xuICB2YXIgbmFtZSA9IHJhd25hbWUgPyAnOiAnICsgcmF3bmFtZSA6ICcnO1xuICByZXR1cm4gJ1tGdW5jdGlvbicgKyAgbmFtZSArICddJztcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2Uoc2VsZikge1xuICByZXR1cm4gdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmFjdHVhbCksIDEyOCkgKyAnICcgK1xuICAgICAgICAgc2VsZi5vcGVyYXRvciArICcgJyArXG4gICAgICAgICB0cnVuY2F0ZShpbnNwZWN0KHNlbGYuZXhwZWN0ZWQpLCAxMjgpO1xufVxuXG4vLyBBdCBwcmVzZW50IG9ubHkgdGhlIHRocmVlIGtleXMgbWVudGlvbmVkIGFib3ZlIGFyZSB1c2VkIGFuZFxuLy8gdW5kZXJzdG9vZCBieSB0aGUgc3BlYy4gSW1wbGVtZW50YXRpb25zIG9yIHN1YiBtb2R1bGVzIGNhbiBwYXNzXG4vLyBvdGhlciBrZXlzIHRvIHRoZSBBc3NlcnRpb25FcnJvcidzIGNvbnN0cnVjdG9yIC0gdGhleSB3aWxsIGJlXG4vLyBpZ25vcmVkLlxuXG4vLyAzLiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbXVzdCB0aHJvdyBhbiBBc3NlcnRpb25FcnJvclxuLy8gd2hlbiBhIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQsIHdpdGggYSBtZXNzYWdlIHRoYXRcbi8vIG1heSBiZSB1bmRlZmluZWQgaWYgbm90IHByb3ZpZGVkLiAgQWxsIGFzc2VydGlvbiBtZXRob2RzIHByb3ZpZGVcbi8vIGJvdGggdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgdmFsdWVzIHRvIHRoZSBhc3NlcnRpb24gZXJyb3IgZm9yXG4vLyBkaXNwbGF5IHB1cnBvc2VzLlxuXG5mdW5jdGlvbiBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yLCBzdGFja1N0YXJ0RnVuY3Rpb24pIHtcbiAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHN0YWNrU3RhcnRGdW5jdGlvbjogc3RhY2tTdGFydEZ1bmN0aW9uXG4gIH0pO1xufVxuXG4vLyBFWFRFTlNJT04hIGFsbG93cyBmb3Igd2VsbCBiZWhhdmVkIGVycm9ycyBkZWZpbmVkIGVsc2V3aGVyZS5cbmFzc2VydC5mYWlsID0gZmFpbDtcblxuLy8gNC4gUHVyZSBhc3NlcnRpb24gdGVzdHMgd2hldGhlciBhIHZhbHVlIGlzIHRydXRoeSwgYXMgZGV0ZXJtaW5lZFxuLy8gYnkgISFndWFyZC5cbi8vIGFzc2VydC5vayhndWFyZCwgbWVzc2FnZV9vcHQpO1xuLy8gVGhpcyBzdGF0ZW1lbnQgaXMgZXF1aXZhbGVudCB0byBhc3NlcnQuZXF1YWwodHJ1ZSwgISFndWFyZCxcbi8vIG1lc3NhZ2Vfb3B0KTsuIFRvIHRlc3Qgc3RyaWN0bHkgZm9yIHRoZSB2YWx1ZSB0cnVlLCB1c2Vcbi8vIGFzc2VydC5zdHJpY3RFcXVhbCh0cnVlLCBndWFyZCwgbWVzc2FnZV9vcHQpOy5cblxuZnVuY3Rpb24gb2sodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09JywgYXNzZXJ0Lm9rKTtcbn1cbmFzc2VydC5vayA9IG9rO1xuXG4vLyA1LiBUaGUgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHNoYWxsb3csIGNvZXJjaXZlIGVxdWFsaXR5IHdpdGhcbi8vID09LlxuLy8gYXNzZXJ0LmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5lcXVhbCk7XG59O1xuXG4vLyA2LiBUaGUgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igd2hldGhlciB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsXG4vLyB3aXRoICE9IGFzc2VydC5ub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIG5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9JywgYXNzZXJ0Lm5vdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gNy4gVGhlIGVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBhIGRlZXAgZXF1YWxpdHkgcmVsYXRpb24uXG4vLyBhc3NlcnQuZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBmYWxzZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwRXF1YWwnLCBhc3NlcnQuZGVlcEVxdWFsKTtcbiAgfVxufTtcblxuYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIGRlZXBTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCB0cnVlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBTdHJpY3RFcXVhbCcsIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHN0cmljdCwgbWVtb3MpIHtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYWN0dWFsKSAmJiBpc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gY29tcGFyZShhY3R1YWwsIGV4cGVjdGVkKSA9PT0gMDtcblxuICAvLyA3LjIuIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIERhdGUgb2JqZWN0LCB0aGUgYWN0dWFsIHZhbHVlIGlzXG4gIC8vIGVxdWl2YWxlbnQgaWYgaXQgaXMgYWxzbyBhIERhdGUgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIHRoZSBzYW1lIHRpbWUuXG4gIH0gZWxzZSBpZiAodXRpbC5pc0RhdGUoYWN0dWFsKSAmJiB1dGlsLmlzRGF0ZShleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpO1xuXG4gIC8vIDcuMyBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCB0aGUgYWN0dWFsIHZhbHVlIGlzXG4gIC8vIGVxdWl2YWxlbnQgaWYgaXQgaXMgYWxzbyBhIFJlZ0V4cCBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kXG4gIC8vIHByb3BlcnRpZXMgKGBnbG9iYWxgLCBgbXVsdGlsaW5lYCwgYGxhc3RJbmRleGAsIGBpZ25vcmVDYXNlYCkuXG4gIH0gZWxzZSBpZiAodXRpbC5pc1JlZ0V4cChhY3R1YWwpICYmIHV0aWwuaXNSZWdFeHAoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5zb3VyY2UgPT09IGV4cGVjdGVkLnNvdXJjZSAmJlxuICAgICAgICAgICBhY3R1YWwuZ2xvYmFsID09PSBleHBlY3RlZC5nbG9iYWwgJiZcbiAgICAgICAgICAgYWN0dWFsLm11bHRpbGluZSA9PT0gZXhwZWN0ZWQubXVsdGlsaW5lICYmXG4gICAgICAgICAgIGFjdHVhbC5sYXN0SW5kZXggPT09IGV4cGVjdGVkLmxhc3RJbmRleCAmJlxuICAgICAgICAgICBhY3R1YWwuaWdub3JlQ2FzZSA9PT0gZXhwZWN0ZWQuaWdub3JlQ2FzZTtcblxuICAvLyA3LjQuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsXG4gIC8vIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIH0gZWxzZSBpZiAoKGFjdHVhbCA9PT0gbnVsbCB8fCB0eXBlb2YgYWN0dWFsICE9PSAnb2JqZWN0JykgJiZcbiAgICAgICAgICAgICAoZXhwZWN0ZWQgPT09IG51bGwgfHwgdHlwZW9mIGV4cGVjdGVkICE9PSAnb2JqZWN0JykpIHtcbiAgICByZXR1cm4gc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyBJZiBib3RoIHZhbHVlcyBhcmUgaW5zdGFuY2VzIG9mIHR5cGVkIGFycmF5cywgd3JhcCB0aGVpciB1bmRlcmx5aW5nXG4gIC8vIEFycmF5QnVmZmVycyBpbiBhIEJ1ZmZlciBlYWNoIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlXG4gIC8vIFRoaXMgb3B0aW1pemF0aW9uIHJlcXVpcmVzIHRoZSBhcnJheXMgdG8gaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIGNoZWNrZWQgYnlcbiAgLy8gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoYWthIHBUb1N0cmluZykuIE5ldmVyIHBlcmZvcm0gYmluYXJ5XG4gIC8vIGNvbXBhcmlzb25zIGZvciBGbG9hdCpBcnJheXMsIHRob3VnaCwgc2luY2UgZS5nLiArMCA9PT0gLTAgYnV0IHRoZWlyXG4gIC8vIGJpdCBwYXR0ZXJucyBhcmUgbm90IGlkZW50aWNhbC5cbiAgfSBlbHNlIGlmIChpc1ZpZXcoYWN0dWFsKSAmJiBpc1ZpZXcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgcFRvU3RyaW5nKGFjdHVhbCkgPT09IHBUb1N0cmluZyhleHBlY3RlZCkgJiZcbiAgICAgICAgICAgICAhKGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fFxuICAgICAgICAgICAgICAgYWN0dWFsIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSkge1xuICAgIHJldHVybiBjb21wYXJlKG5ldyBVaW50OEFycmF5KGFjdHVhbC5idWZmZXIpLFxuICAgICAgICAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KGV4cGVjdGVkLmJ1ZmZlcikpID09PSAwO1xuXG4gIC8vIDcuNSBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gIC8vIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAvLyB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gIC8vIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgLy8gY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgLy8gYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYWN0dWFsKSAhPT0gaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIG1lbW9zID0gbWVtb3MgfHwge2FjdHVhbDogW10sIGV4cGVjdGVkOiBbXX07XG5cbiAgICB2YXIgYWN0dWFsSW5kZXggPSBtZW1vcy5hY3R1YWwuaW5kZXhPZihhY3R1YWwpO1xuICAgIGlmIChhY3R1YWxJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChhY3R1YWxJbmRleCA9PT0gbWVtb3MuZXhwZWN0ZWQuaW5kZXhPZihleHBlY3RlZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb3MuYWN0dWFsLnB1c2goYWN0dWFsKTtcbiAgICBtZW1vcy5leHBlY3RlZC5wdXNoKGV4cGVjdGVkKTtcblxuICAgIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FyZ3VtZW50cyhvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSB7XG4gIGlmIChhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZCB8fCBiID09PSBudWxsIHx8IGIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIG9uZSBpcyBhIHByaW1pdGl2ZSwgdGhlIG90aGVyIG11c3QgYmUgc2FtZVxuICBpZiAodXRpbC5pc1ByaW1pdGl2ZShhKSB8fCB1dGlsLmlzUHJpbWl0aXZlKGIpKVxuICAgIHJldHVybiBhID09PSBiO1xuICBpZiAoc3RyaWN0ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSAhPT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgdmFyIGFJc0FyZ3MgPSBpc0FyZ3VtZW50cyhhKTtcbiAgdmFyIGJJc0FyZ3MgPSBpc0FyZ3VtZW50cyhiKTtcbiAgaWYgKChhSXNBcmdzICYmICFiSXNBcmdzKSB8fCAoIWFJc0FyZ3MgJiYgYklzQXJncykpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoYUlzQXJncykge1xuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIF9kZWVwRXF1YWwoYSwgYiwgc3RyaWN0KTtcbiAgfVxuICB2YXIga2EgPSBvYmplY3RLZXlzKGEpO1xuICB2YXIga2IgPSBvYmplY3RLZXlzKGIpO1xuICB2YXIga2V5LCBpO1xuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzXG4gIC8vIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9PSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPT0ga2JbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy9lcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZFxuICAvL35+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIV9kZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIHN0cmljdCwgYWN0dWFsVmlzaXRlZE9iamVjdHMpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyA4LiBUaGUgbm9uLWVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBmb3IgYW55IGRlZXAgaW5lcXVhbGl0eS5cbi8vIGFzc2VydC5ub3REZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RGVlcEVxdWFsID0gZnVuY3Rpb24gbm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcEVxdWFsJywgYXNzZXJ0Lm5vdERlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWwgPSBub3REZWVwU3RyaWN0RXF1YWw7XG5mdW5jdGlvbiBub3REZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCB0cnVlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBTdHJpY3RFcXVhbCcsIG5vdERlZXBTdHJpY3RFcXVhbCk7XG4gIH1cbn1cblxuXG4vLyA5LiBUaGUgc3RyaWN0IGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzdHJpY3QgZXF1YWxpdHksIGFzIGRldGVybWluZWQgYnkgPT09LlxuLy8gYXNzZXJ0LnN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LnN0cmljdEVxdWFsID0gZnVuY3Rpb24gc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJz09PScsIGFzc2VydC5zdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDEwLiBUaGUgc3RyaWN0IG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHN0cmljdCBpbmVxdWFsaXR5LCBhc1xuLy8gZGV0ZXJtaW5lZCBieSAhPT0uICBhc3NlcnQubm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnIT09JywgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkge1xuICBpZiAoIWFjdHVhbCB8fCAhZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV4cGVjdGVkKSA9PSAnW29iamVjdCBSZWdFeHBdJykge1xuICAgIHJldHVybiBleHBlY3RlZC50ZXN0KGFjdHVhbCk7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWdub3JlLiAgVGhlIGluc3RhbmNlb2YgY2hlY2sgZG9lc24ndCB3b3JrIGZvciBhcnJvdyBmdW5jdGlvbnMuXG4gIH1cblxuICBpZiAoRXJyb3IuaXNQcm90b3R5cGVPZihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZXhwZWN0ZWQuY2FsbCh7fSwgYWN0dWFsKSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gX3RyeUJsb2NrKGJsb2NrKSB7XG4gIHZhciBlcnJvcjtcbiAgdHJ5IHtcbiAgICBibG9jaygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gX3Rocm93cyhzaG91bGRUaHJvdywgYmxvY2ssIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIHZhciBhY3R1YWw7XG5cbiAgaWYgKHR5cGVvZiBibG9jayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYmxvY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgbWVzc2FnZSA9IGV4cGVjdGVkO1xuICAgIGV4cGVjdGVkID0gbnVsbDtcbiAgfVxuXG4gIGFjdHVhbCA9IF90cnlCbG9jayhibG9jayk7XG5cbiAgbWVzc2FnZSA9IChleHBlY3RlZCAmJiBleHBlY3RlZC5uYW1lID8gJyAoJyArIGV4cGVjdGVkLm5hbWUgKyAnKS4nIDogJy4nKSArXG4gICAgICAgICAgICAobWVzc2FnZSA/ICcgJyArIG1lc3NhZ2UgOiAnLicpO1xuXG4gIGlmIChzaG91bGRUaHJvdyAmJiAhYWN0dWFsKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCAnTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICB2YXIgdXNlclByb3ZpZGVkTWVzc2FnZSA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJztcbiAgdmFyIGlzVW53YW50ZWRFeGNlcHRpb24gPSAhc2hvdWxkVGhyb3cgJiYgdXRpbC5pc0Vycm9yKGFjdHVhbCk7XG4gIHZhciBpc1VuZXhwZWN0ZWRFeGNlcHRpb24gPSAhc2hvdWxkVGhyb3cgJiYgYWN0dWFsICYmICFleHBlY3RlZDtcblxuICBpZiAoKGlzVW53YW50ZWRFeGNlcHRpb24gJiZcbiAgICAgIHVzZXJQcm92aWRlZE1lc3NhZ2UgJiZcbiAgICAgIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fFxuICAgICAgaXNVbmV4cGVjdGVkRXhjZXB0aW9uKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCAnR290IHVud2FudGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIGlmICgoc2hvdWxkVGhyb3cgJiYgYWN0dWFsICYmIGV4cGVjdGVkICYmXG4gICAgICAhZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHx8ICghc2hvdWxkVGhyb3cgJiYgYWN0dWFsKSkge1xuICAgIHRocm93IGFjdHVhbDtcbiAgfVxufVxuXG4vLyAxMS4gRXhwZWN0ZWQgdG8gdGhyb3cgYW4gZXJyb3I6XG4vLyBhc3NlcnQudGhyb3dzKGJsb2NrLCBFcnJvcl9vcHQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uKGJsb2NrLCAvKm9wdGlvbmFsKi9lcnJvciwgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzKHRydWUsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG4vLyBFWFRFTlNJT04hIFRoaXMgaXMgYW5ub3lpbmcgdG8gd3JpdGUgb3V0c2lkZSB0aGlzIG1vZHVsZS5cbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyhmYWxzZSwgYmxvY2ssIGVycm9yLCBtZXNzYWdlKTtcbn07XG5cbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24oZXJyKSB7IGlmIChlcnIpIHRocm93IGVycjsgfTtcblxuLy8gRXhwb3NlIGEgc3RyaWN0IG9ubHkgdmFyaWFudCBvZiBhc3NlcnRcbmZ1bmN0aW9uIHN0cmljdCh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAoIXZhbHVlKSBmYWlsKHZhbHVlLCB0cnVlLCBtZXNzYWdlLCAnPT0nLCBzdHJpY3QpO1xufVxuYXNzZXJ0LnN0cmljdCA9IG9iamVjdEFzc2lnbihzdHJpY3QsIGFzc2VydCwge1xuICBlcXVhbDogYXNzZXJ0LnN0cmljdEVxdWFsLFxuICBkZWVwRXF1YWw6IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwsXG4gIG5vdEVxdWFsOiBhc3NlcnQubm90U3RyaWN0RXF1YWwsXG4gIG5vdERlZXBFcXVhbDogYXNzZXJ0Lm5vdERlZXBTdHJpY3RFcXVhbFxufSk7XG5hc3NlcnQuc3RyaWN0LnN0cmljdCA9IGFzc2VydC5zdHJpY3Q7XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyKGFyZykge1xuICByZXR1cm4gYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnXG4gICAgJiYgdHlwZW9mIGFyZy5jb3B5ID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5maWxsID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5yZWFkVUludDggPT09ICdmdW5jdGlvbic7XG59IiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBmb3JtYXRSZWdFeHAgPSAvJVtzZGolXS9nO1xuZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbihmKSB7XG4gIGlmICghaXNTdHJpbmcoZikpIHtcbiAgICB2YXIgb2JqZWN0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goaW5zcGVjdChhcmd1bWVudHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpO1xuICB9XG5cbiAgdmFyIGkgPSAxO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbih4KSB7XG4gICAgaWYgKHggPT09ICclJScpIHJldHVybiAnJSc7XG4gICAgaWYgKGkgPj0gbGVuKSByZXR1cm4geDtcbiAgICBzd2l0Y2ggKHgpIHtcbiAgICAgIGNhc2UgJyVzJzogcmV0dXJuIFN0cmluZyhhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWQnOiByZXR1cm4gTnVtYmVyKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclaic6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3NbaSsrXSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICBmb3IgKHZhciB4ID0gYXJnc1tpXTsgaSA8IGxlbjsgeCA9IGFyZ3NbKytpXSkge1xuICAgIGlmIChpc051bGwoeCkgfHwgIWlzT2JqZWN0KHgpKSB7XG4gICAgICBzdHIgKz0gJyAnICsgeDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9ICcgJyArIGluc3BlY3QoeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8vIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4vLyBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuLy8gSWYgLS1uby1kZXByZWNhdGlvbiBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbmV4cG9ydHMuZGVwcmVjYXRlID0gZnVuY3Rpb24oZm4sIG1zZykge1xuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKFsnZXhwb3J0cycsICcuL2RlZmF1bHRUcmF2ZWxlcicsICcuL2F0dGFjaENvbW1lbnRzJ10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCcuL2RlZmF1bHRUcmF2ZWxlcicpLCByZXF1aXJlKCcuL2F0dGFjaENvbW1lbnRzJykpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QuZXhwb3J0cywgZ2xvYmFsLmRlZmF1bHRUcmF2ZWxlciwgZ2xvYmFsLmF0dGFjaENvbW1lbnRzKTtcbiAgICBnbG9iYWwuYXN0cmF2ZWwgPSBtb2QuZXhwb3J0cztcbiAgfVxufSkodGhpcywgZnVuY3Rpb24gKGV4cG9ydHMsIF9kZWZhdWx0VHJhdmVsZXIsIF9hdHRhY2hDb21tZW50cykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbiAgZXhwb3J0cy5tYWtlVHJhdmVsZXIgPSBleHBvcnRzLmF0dGFjaENvbW1lbnRzID0gZXhwb3J0cy5kZWZhdWx0VHJhdmVsZXIgPSB1bmRlZmluZWQ7XG5cbiAgdmFyIF9kZWZhdWx0VHJhdmVsZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmYXVsdFRyYXZlbGVyKTtcblxuICB2YXIgX2F0dGFjaENvbW1lbnRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2F0dGFjaENvbW1lbnRzKTtcblxuICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xuICB9XG5cbiAgLy8gQXN0cmF2ZWwgaXMgIHRpbnkgYW5kIGZhc3QgRVNUcmVlLWNvbXBsaWFudCBBU1Qgd2Fsa2VyIGFuZCBtb2RpZmllci5cbiAgLy9cbiAgLy8gQXN0cmF2ZWwgd2FzIHdyaXR0ZW4gYnkgRGF2aWQgQm9ubmV0IGFuZCByZWxlYXNlZCB1bmRlciBhbiBNSVQgbGljZW5zZS5cbiAgLy9cbiAgLy8gVGhlIEdpdCByZXBvc2l0b3J5IGZvciBBc3RyYXZlbCBpcyBhdmFpbGFibGUgYXQ6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZGJvbm5ldC9hc3RyYXZlbC5naXRcbiAgLy9cbiAgLy8gUGxlYXNlIHVzZSB0aGUgR2l0SHViIGJ1ZyB0cmFja2VyIHRvIHJlcG9ydCBpc3N1ZXM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZGJvbm5ldC9hc3RyYXZlbC9pc3N1ZXNcblxuICBmdW5jdGlvbiBtYWtlVHJhdmVsZXIocHJvcGVydGllcykge1xuICAgIC8qXG4gICAgUmV0dXJucyBhIGN1c3RvbSBBU1QgdHJhdmVsZXIgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBgZGVmYXVsdFRyYXZlbGVyYCB3aXRoIGl0cyBvd24gcHJvdmlkZWQgYHByb3BlcnRpZXNgIGFuZCB0aGUgcHJvcGVydHkgYHN1cGVyYCB0aGF0IHBvaW50cyB0byB0aGUgcGFyZW50IHRyYXZlbGVyIG9iamVjdC5cbiAgICAqL1xuICAgIHJldHVybiBfZGVmYXVsdFRyYXZlbGVyMi5kZWZhdWx0Lm1ha2VDaGlsZChwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIGV4cG9ydHMuZGVmYXVsdFRyYXZlbGVyID0gX2RlZmF1bHRUcmF2ZWxlcjIuZGVmYXVsdDtcbiAgZXhwb3J0cy5hdHRhY2hDb21tZW50cyA9IF9hdHRhY2hDb21tZW50czIuZGVmYXVsdDtcbiAgZXhwb3J0cy5tYWtlVHJhdmVsZXIgPSBtYWtlVHJhdmVsZXI7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzdHJhdmVsLmpzLm1hcCIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbJ2V4cG9ydHMnLCAnLi9kZWZhdWx0VHJhdmVsZXInXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBmYWN0b3J5KGV4cG9ydHMsIHJlcXVpcmUoJy4vZGVmYXVsdFRyYXZlbGVyJykpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QuZXhwb3J0cywgZ2xvYmFsLmRlZmF1bHRUcmF2ZWxlcik7XG4gICAgZ2xvYmFsLmF0dGFjaENvbW1lbnRzID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzLCBfZGVmYXVsdFRyYXZlbGVyKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG4gIGV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChub2RlLCBjb21tZW50cykge1xuICAgIC8qXG4gICAgTW9kaWZpZXMgaW4tcGxhY2UgdGhlIEFTVCBzdGFydGluZyBhdCBgbm9kZWAgYnkgYXR0YWNoaW5nIHRoZSBwcm92aWRlZCBgY29tbWVudHNgIGFuZCByZXR1cm5zIHRoYXQgQVNULlxuICAgICovXG4gICAgY3VzdG9tVHJhdmVsZXJbbm9kZS50eXBlXShub2RlLCB7XG4gICAgICBjb21tZW50czogY29tbWVudHMsXG4gICAgICBpbmRleDogMFxuICAgIH0pO1xuICAgIHJldHVybiBub2RlO1xuICB9O1xuXG4gIHZhciBfZGVmYXVsdFRyYXZlbGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmF1bHRUcmF2ZWxlcik7XG5cbiAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dGFjaENvbW1lbnRzKHBhcmVudCwgY2hpbGRyZW4sIGZpbmRIZWFkaW5nQ29tbWVudHMsIHN0YXRlLCB0cmF2ZWxlcikge1xuICAgIHZhciBpbmRleCA9IHN0YXRlLmluZGV4LFxuICAgICAgICBjb21tZW50cyA9IHN0YXRlLmNvbW1lbnRzO1xuXG4gICAgdmFyIGNvbW1lbnQgPSBjb21tZW50c1tpbmRleF07XG4gICAgLy8gRGVmaW5lIHRoZW0gaW4gdGhlIGJsb2NrcyB3aGVyZSB0aGVyZSBhcmUgdXNlZCBvbmNlXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JhYmVsL21pbmlmeS9pc3N1ZXMvNDg1IGlzIHJlc29sdmVkXG4gICAgdmFyIGJvdW5kQ29tbWVudHMgPSB2b2lkIDAsXG4gICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSB2b2lkIDA7XG4gICAgaWYgKGNvbW1lbnQgIT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkcmVuID09IG51bGwgfHwgY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIE5vIGNoaWxkcmVuLCBhdHRhY2ggY29tbWVudHMgdG8gcGFyZW50XG4gICAgICAgIGJvdW5kQ29tbWVudHMgPSBwYXJlbnQuY29tbWVudHMgIT0gbnVsbCA/IHBhcmVudC5jb21tZW50cyA6IFtdO1xuICAgICAgICB3aGlsZSAoY29tbWVudCAhPSBudWxsICYmIGNvbW1lbnQuZW5kIDwgcGFyZW50LmVuZCkge1xuICAgICAgICAgIGJvdW5kQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuaW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKGJvdW5kQ29tbWVudHMubGVuZ3RoICE9PSAwICYmIHBhcmVudC5jb21tZW50cyA9PSBudWxsKSBwYXJlbnQuY29tbWVudHMgPSBib3VuZENvbW1lbnRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTG9vayBmb3IgaGVhZGluZyBibG9jayBjb21tZW50c1xuICAgICAgICBpZiAoZmluZEhlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgIGJvdW5kQ29tbWVudHMgPSBwYXJlbnQuY29tbWVudHMgIT0gbnVsbCA/IHBhcmVudC5jb21tZW50cyA6IFtdO1xuICAgICAgICAgIHZhciBzdGFydCA9IGNoaWxkcmVuWzBdLnN0YXJ0O1xuXG4gICAgICAgICAgd2hpbGUgKGNvbW1lbnQgIT0gbnVsbCAmJiBjb21tZW50LnR5cGVbMF0gPT09ICdCJyAmJiBjb21tZW50LmVuZCA8IHN0YXJ0KSB7XG4gICAgICAgICAgICBib3VuZENvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbKytpbmRleF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChib3VuZENvbW1lbnRzLmxlbmd0aCAhPT0gMCAmJiBwYXJlbnQuY29tbWVudHMgPT0gbnVsbCkgcGFyZW50LmNvbW1lbnRzID0gYm91bmRDb21tZW50cztcbiAgICAgICAgfVxuICAgICAgICAvLyBBdHRhY2ggY29tbWVudHMgdG8gY2hpbGRyZW5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDsgY29tbWVudCAhPSBudWxsICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgIGJvdW5kQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoY29tbWVudCAhPSBudWxsICYmIGNvbW1lbnQuZW5kIDwgY2hpbGQuc3RhcnQpIHtcbiAgICAgICAgICAgIGJvdW5kQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50c1srK2luZGV4XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgbmV4dCBjb21tZW50IGlzIGxpbmUgY29tbWVudCBhbmQgb24gdGhlIHNhbWUgbGluZVxuICAgICAgICAgIGlmIChjb21tZW50ICE9IG51bGwgJiYgY29tbWVudC50eXBlWzBdID09PSAnTCcpIHtcbiAgICAgICAgICAgIGlmIChjb21tZW50LmxvYy5zdGFydC5saW5lID09PSBjaGlsZC5sb2MuZW5kLmxpbmUpIHtcbiAgICAgICAgICAgICAgYm91bmRDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbKytpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChib3VuZENvbW1lbnRzLmxlbmd0aCAhPT0gMCkgY2hpbGQuY29tbWVudHMgPSBib3VuZENvbW1lbnRzO1xuICAgICAgICAgIC8vIFRyYXZlbCB0aHJvdWdoIGNoaWxkXG4gICAgICAgICAgc3RhdGUuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0cmF2ZWxlcltjaGlsZC50eXBlXShjaGlsZCwgc3RhdGUpO1xuICAgICAgICAgIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBMb29rIGZvciByZW1haW5pbmcgY29tbWVudHNcbiAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICB3aGlsZSAoY29tbWVudCAhPSBudWxsICYmIGNvbW1lbnQuZW5kIDwgcGFyZW50LmVuZCkge1xuICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMubGVuZ3RoICE9PSAwKSBwYXJlbnQudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgIHN0YXRlLmluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIFByb2dyYW0gPSB2b2lkIDA7XG5cbiAgdmFyIGN1c3RvbVRyYXZlbGVyID0gX2RlZmF1bHRUcmF2ZWxlcjIuZGVmYXVsdC5tYWtlQ2hpbGQoe1xuICAgIFByb2dyYW06IFByb2dyYW0gPSBmdW5jdGlvbiBQcm9ncmFtKG5vZGUsIHN0YXRlKSB7XG4gICAgICBhdHRhY2hDb21tZW50cyhub2RlLCBub2RlLmJvZHksIHRydWUsIHN0YXRlLCB0aGlzKTtcbiAgICB9LFxuICAgIEJsb2NrU3RhdGVtZW50OiBQcm9ncmFtLFxuICAgIE9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIE9iamVjdEV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIGF0dGFjaENvbW1lbnRzKG5vZGUsIG5vZGUucHJvcGVydGllcywgdHJ1ZSwgc3RhdGUsIHRoaXMpO1xuICAgIH0sXG4gICAgQXJyYXlFeHByZXNzaW9uOiBmdW5jdGlvbiBBcnJheUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIGF0dGFjaENvbW1lbnRzKG5vZGUsIG5vZGUuZWxlbWVudHMsIHRydWUsIHN0YXRlLCB0aGlzKTtcbiAgICB9LFxuICAgIFN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24gU3dpdGNoU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgICBhdHRhY2hDb21tZW50cyhub2RlLCBub2RlLmNhc2VzLCBmYWxzZSwgc3RhdGUsIHRoaXMpO1xuICAgIH0sXG4gICAgU3dpdGNoQ2FzZTogZnVuY3Rpb24gU3dpdGNoQ2FzZShub2RlLCBzdGF0ZSkge1xuICAgICAgYXR0YWNoQ29tbWVudHMobm9kZSwgbm9kZS5jb25zZXF1ZW50LCBmYWxzZSwgc3RhdGUsIHRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBUT0RPOiBDb25zaWRlciBBcnJheUV4cHJlc3Npb24gP1xuICApO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdHRhY2hDb21tZW50cy5qcy5tYXAiLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZmFjdG9yeShleHBvcnRzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbW9kID0ge1xuICAgICAgZXhwb3J0czoge31cbiAgICB9O1xuICAgIGZhY3RvcnkobW9kLmV4cG9ydHMpO1xuICAgIGdsb2JhbC5kZWZhdWx0VHJhdmVsZXIgPSBtb2QuZXhwb3J0cztcbiAgfVxufSkodGhpcywgZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbiAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBGb3JJblN0YXRlbWVudCA9IHZvaWQgMCxcbiAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24gPSB2b2lkIDAsXG4gICAgICBSZXN0RWxlbWVudCA9IHZvaWQgMCxcbiAgICAgIEJpbmFyeUV4cHJlc3Npb24gPSB2b2lkIDAsXG4gICAgICBBcnJheUV4cHJlc3Npb24gPSB2b2lkIDA7XG5cbiAgdmFyIGlnbm9yZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuICB2YXIgRm91bmQgPSBmdW5jdGlvbiBGb3VuZChub2RlLCBzdGF0ZSkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3VuZCk7XG5cbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgfTtcblxuICBleHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgLy8gQmFzaWMgbWV0aG9kc1xuICAgIGdvOiBmdW5jdGlvbiBnbyhub2RlLCBzdGF0ZSkge1xuICAgICAgLypcbiAgICAgIFN0YXJ0cyB0cmF2ZWxsaW5nIHRocm91Z2ggdGhlIHNwZWNpZmllZCBBU1QgYG5vZGVgIHdpdGggdGhlIHByb3ZpZGVkIGBzdGF0ZWAuXG4gICAgICBUaGlzIG1ldGhvZCBpcyByZWN1cnNpdmVseSBjYWxsZWQgYnkgZWFjaCBub2RlIGhhbmRsZXIuXG4gICAgICAqL1xuICAgICAgdGhpc1tub2RlLnR5cGVdKG5vZGUsIHN0YXRlKTtcbiAgICB9LFxuICAgIGZpbmQ6IGZ1bmN0aW9uIGZpbmQocHJlZGljYXRlLCBub2RlLCBzdGF0ZSkge1xuICAgICAgLypcbiAgICAgIFJldHVybnMgeyBub2RlLCBzdGF0ZSB9IGZvciB3aGljaCBgcHJlZGljYXRlKG5vZGUsIHN0YXRlKWAgcmV0dXJucyB0cnV0aHksXG4gICAgICBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIEFTVCBgbm9kZWAgYW5kIHdpdGggdGhlIHByb3ZpZGVkIGBzdGF0ZWAuXG4gICAgICBPdGhlcndpc2UsIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gICAgICAqL1xuICAgICAgdmFyIGZpbmRlciA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICBmaW5kZXIuZ28gPSBmdW5jdGlvbiAobm9kZSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShub2RlLCBzdGF0ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRm91bmQobm9kZSwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXNbbm9kZS50eXBlXShub2RlLCBzdGF0ZSk7XG4gICAgICB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmluZGVyLmdvKG5vZGUsIHN0YXRlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBtYWtlQ2hpbGQ6IGZ1bmN0aW9uIG1ha2VDaGlsZCgpIHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgICAgLypcbiAgICAgIFJldHVybnMgYSBjdXN0b20gQVNUIHRyYXZlbGVyIHRoYXQgaW5oZXJpdHMgZnJvbSBgdGhpc2AgdHJhdmVsZXIgd2l0aCBpdHMgb3duIHByb3ZpZGVkIGBwcm9wZXJ0aWVzYCBhbmQgdGhlIHByb3BlcnR5IGBzdXBlcmAgdGhhdCBwb2ludHMgdG8gdGhlIHBhcmVudCB0cmF2ZWxlciBvYmplY3QuXG4gICAgICAqL1xuICAgICAgdmFyIHRyYXZlbGVyID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgIHRyYXZlbGVyLnN1cGVyID0gdGhpcztcbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRyYXZlbGVyW2tleV0gPSBwcm9wZXJ0aWVzW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJhdmVsZXI7XG4gICAgfSxcblxuXG4gICAgLy8gSmF2YVNjcmlwdCA1XG4gICAgUHJvZ3JhbTogZnVuY3Rpb24gUHJvZ3JhbShub2RlLCBzdGF0ZSkge1xuICAgICAgdmFyIHN0YXRlbWVudHMgPSBub2RlLmJvZHksXG4gICAgICAgICAgbGVuZ3RoID0gc3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5nbyhzdGF0ZW1lbnRzW2ldLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24gQmxvY2tTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIHZhciBzdGF0ZW1lbnRzID0gbm9kZS5ib2R5O1xuICAgICAgaWYgKHN0YXRlbWVudHMgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gc3RhdGVtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRoaXMuZ28oc3RhdGVtZW50c1tpXSwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIEVtcHR5U3RhdGVtZW50OiBpZ25vcmUsXG4gICAgRXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rpb24gRXhwcmVzc2lvblN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmV4cHJlc3Npb24sIHN0YXRlKTtcbiAgICB9LFxuICAgIElmU3RhdGVtZW50OiBmdW5jdGlvbiBJZlN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLnRlc3QsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5jb25zZXF1ZW50LCBzdGF0ZSk7XG4gICAgICBpZiAobm9kZS5hbHRlcm5hdGUgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUuYWx0ZXJuYXRlLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBMYWJlbGVkU3RhdGVtZW50OiBmdW5jdGlvbiBMYWJlbGVkU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUubGFiZWwsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5ib2R5LCBzdGF0ZSk7XG4gICAgfSxcbiAgICBCcmVha1N0YXRlbWVudDogZnVuY3Rpb24gQnJlYWtTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIGlmIChub2RlLmxhYmVsKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS5sYWJlbCwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29udGludWVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIENvbnRpbnVlU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgICBpZiAobm9kZS5sYWJlbCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUubGFiZWwsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFdpdGhTdGF0ZW1lbnQ6IGZ1bmN0aW9uIFdpdGhTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5vYmplY3QsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5ib2R5LCBzdGF0ZSk7XG4gICAgfSxcbiAgICBTd2l0Y2hTdGF0ZW1lbnQ6IGZ1bmN0aW9uIFN3aXRjaFN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmRpc2NyaW1pbmFudCwgc3RhdGUpO1xuICAgICAgdmFyIGNhc2VzID0gbm9kZS5jYXNlcyxcbiAgICAgICAgICBsZW5ndGggPSBjYXNlcy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5nbyhjYXNlc1tpXSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgU3dpdGNoQ2FzZTogZnVuY3Rpb24gU3dpdGNoQ2FzZShub2RlLCBzdGF0ZSkge1xuICAgICAgaWYgKG5vZGUudGVzdCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS50ZXN0LCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICB2YXIgc3RhdGVtZW50cyA9IG5vZGUuY29uc2VxdWVudCxcbiAgICAgICAgICBsZW5ndGggPSBzdGF0ZW1lbnRzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmdvKHN0YXRlbWVudHNbaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFJldHVyblN0YXRlbWVudDogZnVuY3Rpb24gUmV0dXJuU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgICBpZiAobm9kZS5hcmd1bWVudCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFRocm93U3RhdGVtZW50OiBmdW5jdGlvbiBUaHJvd1N0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmFyZ3VtZW50LCBzdGF0ZSk7XG4gICAgfSxcbiAgICBUcnlTdGF0ZW1lbnQ6IGZ1bmN0aW9uIFRyeVN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmJsb2NrLCBzdGF0ZSk7XG4gICAgICBpZiAobm9kZS5oYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLmhhbmRsZXIsIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmZpbmFsaXplciAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS5maW5hbGl6ZXIsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENhdGNoQ2xhdXNlOiBmdW5jdGlvbiBDYXRjaENsYXVzZShub2RlLCBzdGF0ZSkge1xuICAgICAgaWYgKG5vZGUucGFyYW0gIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUucGFyYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ28obm9kZS5ib2R5LCBzdGF0ZSk7XG4gICAgfSxcbiAgICBXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gV2hpbGVTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS50ZXN0LCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUuYm9keSwgc3RhdGUpO1xuICAgIH0sXG4gICAgRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gRG9XaGlsZVN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmJvZHksIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS50ZXN0LCBzdGF0ZSk7XG4gICAgfSxcbiAgICBGb3JTdGF0ZW1lbnQ6IGZ1bmN0aW9uIEZvclN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgaWYgKG5vZGUuaW5pdCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS5pbml0LCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS50ZXN0ICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLnRlc3QsIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnVwZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS51cGRhdGUsIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ28obm9kZS5ib2R5LCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIEZvckluU3RhdGVtZW50OiBGb3JJblN0YXRlbWVudCA9IGZ1bmN0aW9uIEZvckluU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUubGVmdCwgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLnJpZ2h0LCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUuYm9keSwgc3RhdGUpO1xuICAgIH0sXG4gICAgRGVidWdnZXJTdGF0ZW1lbnQ6IGlnbm9yZSxcbiAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBGdW5jdGlvbkRlY2xhcmF0aW9uID0gZnVuY3Rpb24gRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlLCBzdGF0ZSkge1xuICAgICAgaWYgKG5vZGUuaWQgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUuaWQsIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXJhbXMgPSBub2RlLnBhcmFtcztcblxuICAgICAgaWYgKHBhcmFtcyAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLmdvKHBhcmFtc1tpXSwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmdvKG5vZGUuYm9keSwgc3RhdGUpO1xuICAgIH0sXG4gICAgVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24gVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IG5vZGUuZGVjbGFyYXRpb25zLFxuICAgICAgICAgIGxlbmd0aCA9IGRlY2xhcmF0aW9ucy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5nbyhkZWNsYXJhdGlvbnNbaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogZnVuY3Rpb24gVmFyaWFibGVEZWNsYXJhdG9yKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUuaWQsIHN0YXRlKTtcbiAgICAgIGlmIChub2RlLmluaXQgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUuaW5pdCwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIEFycm93RnVuY3Rpb25FeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB2YXIgcGFyYW1zID0gbm9kZS5wYXJhbXM7XG5cbiAgICAgIGlmIChwYXJhbXMgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcGFyYW1zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5nbyhwYXJhbXNbaV0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5nbyhub2RlLmJvZHksIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgVGhpc0V4cHJlc3Npb246IGlnbm9yZSxcbiAgICBBcnJheUV4cHJlc3Npb246IEFycmF5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIEFycmF5RXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdmFyIGVsZW1lbnRzID0gbm9kZS5lbGVtZW50cyxcbiAgICAgICAgICBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuZ28oZWxlbWVudHNbaV0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24gT2JqZWN0RXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSBub2RlLnByb3BlcnRpZXMsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5nbyhwcm9wZXJ0aWVzW2ldLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBQcm9wZXJ0eTogZnVuY3Rpb24gUHJvcGVydHkobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5rZXksIHN0YXRlKTtcbiAgICAgIGlmICghbm9kZS5zaG9ydGhhbmQpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLnZhbHVlLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgICBTZXF1ZW5jZUV4cHJlc3Npb246IGZ1bmN0aW9uIFNlcXVlbmNlRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdmFyIGV4cHJlc3Npb25zID0gbm9kZS5leHByZXNzaW9ucyxcbiAgICAgICAgICBsZW5ndGggPSBleHByZXNzaW9ucy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5nbyhleHByZXNzaW9uc1tpXSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgVW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbiBVbmFyeUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5hcmd1bWVudCwgc3RhdGUpO1xuICAgIH0sXG4gICAgVXBkYXRlRXhwcmVzc2lvbjogZnVuY3Rpb24gVXBkYXRlRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmFyZ3VtZW50LCBzdGF0ZSk7XG4gICAgfSxcbiAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24gQXNzaWdubWVudEV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5sZWZ0LCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUucmlnaHQsIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgQmluYXJ5RXhwcmVzc2lvbjogQmluYXJ5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIEJpbmFyeUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5sZWZ0LCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUucmlnaHQsIHN0YXRlKTtcbiAgICB9LFxuICAgIExvZ2ljYWxFeHByZXNzaW9uOiBCaW5hcnlFeHByZXNzaW9uLFxuICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogZnVuY3Rpb24gQ29uZGl0aW9uYWxFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUudGVzdCwgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLmNvbnNlcXVlbnQsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5hbHRlcm5hdGUsIHN0YXRlKTtcbiAgICB9LFxuICAgIE5ld0V4cHJlc3Npb246IGZ1bmN0aW9uIE5ld0V4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuQ2FsbEV4cHJlc3Npb24obm9kZSwgc3RhdGUpO1xuICAgIH0sXG4gICAgQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIENhbGxFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUuY2FsbGVlLCBzdGF0ZSk7XG4gICAgICB2YXIgYXJncyA9IG5vZGVbJ2FyZ3VtZW50cyddLFxuICAgICAgICAgIGxlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ28oYXJnc1tpXSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgTWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24gTWVtYmVyRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLm9iamVjdCwgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLnByb3BlcnR5LCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIElkZW50aWZpZXI6IGlnbm9yZSxcbiAgICBMaXRlcmFsOiBpZ25vcmUsXG5cbiAgICAvLyBKYXZhU2NyaXB0IDZcbiAgICBGb3JPZlN0YXRlbWVudDogRm9ySW5TdGF0ZW1lbnQsXG4gICAgQ2xhc3NEZWNsYXJhdGlvbjogZnVuY3Rpb24gQ2xhc3NEZWNsYXJhdGlvbihub2RlLCBzdGF0ZSkge1xuICAgICAgaWYgKG5vZGUuaWQpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLmlkLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5zdXBlckNsYXNzKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS5zdXBlckNsYXNzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdvKG5vZGUuYm9keSwgc3RhdGUpO1xuICAgIH0sXG4gICAgQ2xhc3NCb2R5OiBmdW5jdGlvbiBDbGFzc0JvZHkobm9kZSwgc3RhdGUpIHtcbiAgICAgIHZhciBib2R5ID0gbm9kZS5ib2R5LFxuICAgICAgICAgIGxlbmd0aCA9IGJvZHkubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ28oYm9keVtpXSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgSW1wb3J0RGVjbGFyYXRpb246IGZ1bmN0aW9uIEltcG9ydERlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB2YXIgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVycyxcbiAgICAgICAgICBsZW5ndGggPSBzcGVjaWZpZXJzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmdvKHNwZWNpZmllcnNbaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ28obm9kZS5zb3VyY2UsIHN0YXRlKTtcbiAgICB9LFxuICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUubG9jYWwsIHN0YXRlKTtcbiAgICB9LFxuICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IGZ1bmN0aW9uIEltcG9ydERlZmF1bHRTcGVjaWZpZXIobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5sb2NhbCwgc3RhdGUpO1xuICAgIH0sXG4gICAgSW1wb3J0U3BlY2lmaWVyOiBmdW5jdGlvbiBJbXBvcnRTcGVjaWZpZXIobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5pbXBvcnRlZCwgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLmxvY2FsLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246IGZ1bmN0aW9uIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmRlY2xhcmF0aW9uLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBmdW5jdGlvbiBFeHBvcnROYW1lZERlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbikge1xuICAgICAgICB0aGlzLmdvKG5vZGUuZGVjbGFyYXRpb24sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIHZhciBzcGVjaWZpZXJzID0gbm9kZS5zcGVjaWZpZXJzLFxuICAgICAgICAgIGxlbmd0aCA9IHNwZWNpZmllcnMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ28oc3BlY2lmaWVyc1tpXSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuc291cmNlKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS5zb3VyY2UsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIEV4cG9ydFNwZWNpZmllcjogZnVuY3Rpb24gRXhwb3J0U3BlY2lmaWVyKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUubG9jYWwsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5leHBvcnRlZCwgc3RhdGUpO1xuICAgIH0sXG4gICAgRXhwb3J0QWxsRGVjbGFyYXRpb246IGZ1bmN0aW9uIEV4cG9ydEFsbERlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUuc291cmNlLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBNZXRob2REZWZpbml0aW9uOiBmdW5jdGlvbiBNZXRob2REZWZpbml0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUua2V5LCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUudmFsdWUsIHN0YXRlKTtcbiAgICB9LFxuICAgIENsYXNzRXhwcmVzc2lvbjogZnVuY3Rpb24gQ2xhc3NFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLkNsYXNzRGVjbGFyYXRpb24obm9kZSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBTdXBlcjogaWdub3JlLFxuICAgIFJlc3RFbGVtZW50OiBSZXN0RWxlbWVudCA9IGZ1bmN0aW9uIFJlc3RFbGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICB9LFxuICAgIFNwcmVhZEVsZW1lbnQ6IFJlc3RFbGVtZW50LFxuICAgIFlpZWxkRXhwcmVzc2lvbjogZnVuY3Rpb24gWWllbGRFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICBpZiAobm9kZS5hcmd1bWVudCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogZnVuY3Rpb24gVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUudGFnLCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUucXVhc2ksIHN0YXRlKTtcbiAgICB9LFxuICAgIFRlbXBsYXRlTGl0ZXJhbDogZnVuY3Rpb24gVGVtcGxhdGVMaXRlcmFsKG5vZGUsIHN0YXRlKSB7XG4gICAgICB2YXIgcXVhc2lzID0gbm9kZS5xdWFzaXMsXG4gICAgICAgICAgZXhwcmVzc2lvbnMgPSBub2RlLmV4cHJlc3Npb25zO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5nbyhleHByZXNzaW9uc1tpXSwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuZ3RoID0gcXVhc2lzLmxlbmd0aDsgX2kgPCBfbGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHRoaXMuZ28ocXVhc2lzW19pXSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBUZW1wbGF0ZUVsZW1lbnQ6IGlnbm9yZSxcbiAgICBPYmplY3RQYXR0ZXJuOiBmdW5jdGlvbiBPYmplY3RQYXR0ZXJuKG5vZGUsIHN0YXRlKSB7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllcyxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmdvKHByb3BlcnRpZXNbaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgQXJyYXlQYXR0ZXJuOiBBcnJheUV4cHJlc3Npb24sXG4gICAgQXNzaWdubWVudFBhdHRlcm46IGZ1bmN0aW9uIEFzc2lnbm1lbnRQYXR0ZXJuKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUubGVmdCwgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLnJpZ2h0LCBzdGF0ZSk7XG4gICAgfSxcbiAgICBNZXRhUHJvcGVydHk6IGZ1bmN0aW9uIE1ldGFQcm9wZXJ0eShub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLm1ldGEsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5wcm9wZXJ0eSwgc3RhdGUpO1xuICAgIH0sXG5cblxuICAgIC8vIEphdmFTY3JpcHQgN1xuICAgIEF3YWl0RXhwcmVzc2lvbjogZnVuY3Rpb24gQXdhaXRFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICB9XG4gIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRUcmF2ZWxlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2VuZXJhdGUgPSBnZW5lcmF0ZTtcbmV4cG9ydHMuYmFzZUdlbmVyYXRvciA9IGV4cG9ydHMuR0VORVJBVE9SID0gZXhwb3J0cy5FWFBSRVNTSU9OU19QUkVDRURFTkNFID0gZXhwb3J0cy5ORUVEU19QQVJFTlRIRVNFUyA9IHZvaWQgMDtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG52YXIgc3RyaW5naWZ5ID0gSlNPTi5zdHJpbmdpZnk7XG5cbmlmICghU3RyaW5nLnByb3RvdHlwZS5yZXBlYXQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcucHJvdG90eXBlLnJlcGVhdCBpcyB1bmRlZmluZWQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZGF2aWRib25uZXQvYXN0cmluZyNpbnN0YWxsYXRpb24nKTtcbn1cblxuaWYgKCFTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKSB7XG4gIHRocm93IG5ldyBFcnJvcignU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCBpcyB1bmRlZmluZWQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZGF2aWRib25uZXQvYXN0cmluZyNpbnN0YWxsYXRpb24nKTtcbn1cblxudmFyIE9QRVJBVE9SX1BSRUNFREVOQ0UgPSB7XG4gICd8fCc6IDIsXG4gICc/Pyc6IDMsXG4gICcmJic6IDQsXG4gICd8JzogNSxcbiAgJ14nOiA2LFxuICAnJic6IDcsXG4gICc9PSc6IDgsXG4gICchPSc6IDgsXG4gICc9PT0nOiA4LFxuICAnIT09JzogOCxcbiAgJzwnOiA5LFxuICAnPic6IDksXG4gICc8PSc6IDksXG4gICc+PSc6IDksXG4gIFwiaW5cIjogOSxcbiAgXCJpbnN0YW5jZW9mXCI6IDksXG4gICc8PCc6IDEwLFxuICAnPj4nOiAxMCxcbiAgJz4+Pic6IDEwLFxuICAnKyc6IDExLFxuICAnLSc6IDExLFxuICAnKic6IDEyLFxuICAnJSc6IDEyLFxuICAnLyc6IDEyLFxuICAnKionOiAxM1xufTtcbnZhciBORUVEU19QQVJFTlRIRVNFUyA9IDE3O1xuZXhwb3J0cy5ORUVEU19QQVJFTlRIRVNFUyA9IE5FRURTX1BBUkVOVEhFU0VTO1xudmFyIEVYUFJFU1NJT05TX1BSRUNFREVOQ0UgPSB7XG4gIEFycmF5RXhwcmVzc2lvbjogMjAsXG4gIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogMjAsXG4gIFRoaXNFeHByZXNzaW9uOiAyMCxcbiAgSWRlbnRpZmllcjogMjAsXG4gIFByaXZhdGVJZGVudGlmaWVyOiAyMCxcbiAgTGl0ZXJhbDogMTgsXG4gIFRlbXBsYXRlTGl0ZXJhbDogMjAsXG4gIFN1cGVyOiAyMCxcbiAgU2VxdWVuY2VFeHByZXNzaW9uOiAyMCxcbiAgTWVtYmVyRXhwcmVzc2lvbjogMTksXG4gIENoYWluRXhwcmVzc2lvbjogMTksXG4gIENhbGxFeHByZXNzaW9uOiAxOSxcbiAgTmV3RXhwcmVzc2lvbjogMTksXG4gIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBORUVEU19QQVJFTlRIRVNFUyxcbiAgQ2xhc3NFeHByZXNzaW9uOiBORUVEU19QQVJFTlRIRVNFUyxcbiAgRnVuY3Rpb25FeHByZXNzaW9uOiBORUVEU19QQVJFTlRIRVNFUyxcbiAgT2JqZWN0RXhwcmVzc2lvbjogTkVFRFNfUEFSRU5USEVTRVMsXG4gIFVwZGF0ZUV4cHJlc3Npb246IDE2LFxuICBVbmFyeUV4cHJlc3Npb246IDE1LFxuICBBd2FpdEV4cHJlc3Npb246IDE1LFxuICBCaW5hcnlFeHByZXNzaW9uOiAxNCxcbiAgTG9naWNhbEV4cHJlc3Npb246IDEzLFxuICBDb25kaXRpb25hbEV4cHJlc3Npb246IDQsXG4gIEFzc2lnbm1lbnRFeHByZXNzaW9uOiAzLFxuICBZaWVsZEV4cHJlc3Npb246IDIsXG4gIFJlc3RFbGVtZW50OiAxXG59O1xuZXhwb3J0cy5FWFBSRVNTSU9OU19QUkVDRURFTkNFID0gRVhQUkVTU0lPTlNfUFJFQ0VERU5DRTtcblxuZnVuY3Rpb24gZm9ybWF0U2VxdWVuY2Uoc3RhdGUsIG5vZGVzKSB7XG4gIHZhciBnZW5lcmF0b3IgPSBzdGF0ZS5nZW5lcmF0b3I7XG4gIHN0YXRlLndyaXRlKCcoJyk7XG5cbiAgaWYgKG5vZGVzICE9IG51bGwgJiYgbm9kZXMubGVuZ3RoID4gMCkge1xuICAgIGdlbmVyYXRvcltub2Rlc1swXS50eXBlXShub2Rlc1swXSwgc3RhdGUpO1xuICAgIHZhciBsZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFyYW0gPSBub2Rlc1tpXTtcbiAgICAgIHN0YXRlLndyaXRlKCcsICcpO1xuICAgICAgZ2VuZXJhdG9yW3BhcmFtLnR5cGVdKHBhcmFtLCBzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUud3JpdGUoJyknKTtcbn1cblxuZnVuY3Rpb24gZXhwcmVzc2lvbk5lZWRzUGFyZW50aGVzaXMoc3RhdGUsIG5vZGUsIHBhcmVudE5vZGUsIGlzUmlnaHRIYW5kKSB7XG4gIHZhciBub2RlUHJlY2VkZW5jZSA9IHN0YXRlLmV4cHJlc3Npb25zUHJlY2VkZW5jZVtub2RlLnR5cGVdO1xuXG4gIGlmIChub2RlUHJlY2VkZW5jZSA9PT0gTkVFRFNfUEFSRU5USEVTRVMpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBwYXJlbnROb2RlUHJlY2VkZW5jZSA9IHN0YXRlLmV4cHJlc3Npb25zUHJlY2VkZW5jZVtwYXJlbnROb2RlLnR5cGVdO1xuXG4gIGlmIChub2RlUHJlY2VkZW5jZSAhPT0gcGFyZW50Tm9kZVByZWNlZGVuY2UpIHtcbiAgICByZXR1cm4gIWlzUmlnaHRIYW5kICYmIG5vZGVQcmVjZWRlbmNlID09PSAxNSAmJiBwYXJlbnROb2RlUHJlY2VkZW5jZSA9PT0gMTQgJiYgcGFyZW50Tm9kZS5vcGVyYXRvciA9PT0gJyoqJyB8fCBub2RlUHJlY2VkZW5jZSA8IHBhcmVudE5vZGVQcmVjZWRlbmNlO1xuICB9XG5cbiAgaWYgKG5vZGVQcmVjZWRlbmNlICE9PSAxMyAmJiBub2RlUHJlY2VkZW5jZSAhPT0gMTQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobm9kZS5vcGVyYXRvciA9PT0gJyoqJyAmJiBwYXJlbnROb2RlLm9wZXJhdG9yID09PSAnKionKSB7XG4gICAgcmV0dXJuICFpc1JpZ2h0SGFuZDtcbiAgfVxuXG4gIGlmIChub2RlUHJlY2VkZW5jZSA9PT0gMTMgJiYgcGFyZW50Tm9kZVByZWNlZGVuY2UgPT09IDEzICYmIChub2RlLm9wZXJhdG9yID09PSAnPz8nIHx8IHBhcmVudE5vZGUub3BlcmF0b3IgPT09ICc/PycpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNSaWdodEhhbmQpIHtcbiAgICByZXR1cm4gT1BFUkFUT1JfUFJFQ0VERU5DRVtub2RlLm9wZXJhdG9yXSA8PSBPUEVSQVRPUl9QUkVDRURFTkNFW3BhcmVudE5vZGUub3BlcmF0b3JdO1xuICB9XG5cbiAgcmV0dXJuIE9QRVJBVE9SX1BSRUNFREVOQ0Vbbm9kZS5vcGVyYXRvcl0gPCBPUEVSQVRPUl9QUkVDRURFTkNFW3BhcmVudE5vZGUub3BlcmF0b3JdO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRFeHByZXNzaW9uKHN0YXRlLCBub2RlLCBwYXJlbnROb2RlLCBpc1JpZ2h0SGFuZCkge1xuICB2YXIgZ2VuZXJhdG9yID0gc3RhdGUuZ2VuZXJhdG9yO1xuXG4gIGlmIChleHByZXNzaW9uTmVlZHNQYXJlbnRoZXNpcyhzdGF0ZSwgbm9kZSwgcGFyZW50Tm9kZSwgaXNSaWdodEhhbmQpKSB7XG4gICAgc3RhdGUud3JpdGUoJygnKTtcbiAgICBnZW5lcmF0b3Jbbm9kZS50eXBlXShub2RlLCBzdGF0ZSk7XG4gICAgc3RhdGUud3JpdGUoJyknKTtcbiAgfSBlbHNlIHtcbiAgICBnZW5lcmF0b3Jbbm9kZS50eXBlXShub2RlLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVpbmRlbnQoc3RhdGUsIHRleHQsIGluZGVudCwgbGluZUVuZCkge1xuICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgdmFyIGVuZCA9IGxpbmVzLmxlbmd0aCAtIDE7XG4gIHN0YXRlLndyaXRlKGxpbmVzWzBdLnRyaW0oKSk7XG5cbiAgaWYgKGVuZCA+IDApIHtcbiAgICBzdGF0ZS53cml0ZShsaW5lRW5kKTtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHN0YXRlLndyaXRlKGluZGVudCArIGxpbmVzW2ldLnRyaW0oKSArIGxpbmVFbmQpO1xuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKGluZGVudCArIGxpbmVzW2VuZF0udHJpbSgpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRDb21tZW50cyhzdGF0ZSwgY29tbWVudHMsIGluZGVudCwgbGluZUVuZCkge1xuICB2YXIgbGVuZ3RoID0gY29tbWVudHMubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY29tbWVudCA9IGNvbW1lbnRzW2ldO1xuICAgIHN0YXRlLndyaXRlKGluZGVudCk7XG5cbiAgICBpZiAoY29tbWVudC50eXBlWzBdID09PSAnTCcpIHtcbiAgICAgIHN0YXRlLndyaXRlKCcvLyAnICsgY29tbWVudC52YWx1ZS50cmltKCkgKyAnXFxuJywgY29tbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLndyaXRlKCcvKicpO1xuICAgICAgcmVpbmRlbnQoc3RhdGUsIGNvbW1lbnQudmFsdWUsIGluZGVudCwgbGluZUVuZCk7XG4gICAgICBzdGF0ZS53cml0ZSgnKi8nICsgbGluZUVuZCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NhbGxFeHByZXNzaW9uKG5vZGUpIHtcbiAgdmFyIGN1cnJlbnROb2RlID0gbm9kZTtcblxuICB3aGlsZSAoY3VycmVudE5vZGUgIT0gbnVsbCkge1xuICAgIHZhciBfY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZSxcbiAgICAgICAgdHlwZSA9IF9jdXJyZW50Tm9kZS50eXBlO1xuXG4gICAgaWYgKHR5cGVbMF0gPT09ICdDJyAmJiB0eXBlWzFdID09PSAnYScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZVswXSA9PT0gJ00nICYmIHR5cGVbMV0gPT09ICdlJyAmJiB0eXBlWzJdID09PSAnbScpIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUub2JqZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFZhcmlhYmxlRGVjbGFyYXRpb24oc3RhdGUsIG5vZGUpIHtcbiAgdmFyIGdlbmVyYXRvciA9IHN0YXRlLmdlbmVyYXRvcjtcbiAgdmFyIGRlY2xhcmF0aW9ucyA9IG5vZGUuZGVjbGFyYXRpb25zO1xuICBzdGF0ZS53cml0ZShub2RlLmtpbmQgKyAnICcpO1xuICB2YXIgbGVuZ3RoID0gZGVjbGFyYXRpb25zLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoID4gMCkge1xuICAgIGdlbmVyYXRvci5WYXJpYWJsZURlY2xhcmF0b3IoZGVjbGFyYXRpb25zWzBdLCBzdGF0ZSk7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnLCAnKTtcbiAgICAgIGdlbmVyYXRvci5WYXJpYWJsZURlY2xhcmF0b3IoZGVjbGFyYXRpb25zW2ldLCBzdGF0ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBGb3JJblN0YXRlbWVudCwgRnVuY3Rpb25EZWNsYXJhdGlvbiwgUmVzdEVsZW1lbnQsIEJpbmFyeUV4cHJlc3Npb24sIEFycmF5RXhwcmVzc2lvbiwgQmxvY2tTdGF0ZW1lbnQ7XG52YXIgR0VORVJBVE9SID0ge1xuICBQcm9ncmFtOiBmdW5jdGlvbiBQcm9ncmFtKG5vZGUsIHN0YXRlKSB7XG4gICAgdmFyIGluZGVudCA9IHN0YXRlLmluZGVudC5yZXBlYXQoc3RhdGUuaW5kZW50TGV2ZWwpO1xuICAgIHZhciBsaW5lRW5kID0gc3RhdGUubGluZUVuZCxcbiAgICAgICAgd3JpdGVDb21tZW50cyA9IHN0YXRlLndyaXRlQ29tbWVudHM7XG5cbiAgICBpZiAod3JpdGVDb21tZW50cyAmJiBub2RlLmNvbW1lbnRzICE9IG51bGwpIHtcbiAgICAgIGZvcm1hdENvbW1lbnRzKHN0YXRlLCBub2RlLmNvbW1lbnRzLCBpbmRlbnQsIGxpbmVFbmQpO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZW1lbnRzID0gbm9kZS5ib2R5O1xuICAgIHZhciBsZW5ndGggPSBzdGF0ZW1lbnRzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW2ldO1xuXG4gICAgICBpZiAod3JpdGVDb21tZW50cyAmJiBzdGF0ZW1lbnQuY29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgICBmb3JtYXRDb21tZW50cyhzdGF0ZSwgc3RhdGVtZW50LmNvbW1lbnRzLCBpbmRlbnQsIGxpbmVFbmQpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS53cml0ZShpbmRlbnQpO1xuICAgICAgdGhpc1tzdGF0ZW1lbnQudHlwZV0oc3RhdGVtZW50LCBzdGF0ZSk7XG4gICAgICBzdGF0ZS53cml0ZShsaW5lRW5kKTtcbiAgICB9XG5cbiAgICBpZiAod3JpdGVDb21tZW50cyAmJiBub2RlLnRyYWlsaW5nQ29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgZm9ybWF0Q29tbWVudHMoc3RhdGUsIG5vZGUudHJhaWxpbmdDb21tZW50cywgaW5kZW50LCBsaW5lRW5kKTtcbiAgICB9XG4gIH0sXG4gIEJsb2NrU3RhdGVtZW50OiBCbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uIEJsb2NrU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgdmFyIGluZGVudCA9IHN0YXRlLmluZGVudC5yZXBlYXQoc3RhdGUuaW5kZW50TGV2ZWwrKyk7XG4gICAgdmFyIGxpbmVFbmQgPSBzdGF0ZS5saW5lRW5kLFxuICAgICAgICB3cml0ZUNvbW1lbnRzID0gc3RhdGUud3JpdGVDb21tZW50cztcbiAgICB2YXIgc3RhdGVtZW50SW5kZW50ID0gaW5kZW50ICsgc3RhdGUuaW5kZW50O1xuICAgIHN0YXRlLndyaXRlKCd7Jyk7XG4gICAgdmFyIHN0YXRlbWVudHMgPSBub2RlLmJvZHk7XG5cbiAgICBpZiAoc3RhdGVtZW50cyAhPSBudWxsICYmIHN0YXRlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgc3RhdGUud3JpdGUobGluZUVuZCk7XG5cbiAgICAgIGlmICh3cml0ZUNvbW1lbnRzICYmIG5vZGUuY29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgICBmb3JtYXRDb21tZW50cyhzdGF0ZSwgbm9kZS5jb21tZW50cywgc3RhdGVtZW50SW5kZW50LCBsaW5lRW5kKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxlbmd0aCA9IHN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW2ldO1xuXG4gICAgICAgIGlmICh3cml0ZUNvbW1lbnRzICYmIHN0YXRlbWVudC5jb21tZW50cyAhPSBudWxsKSB7XG4gICAgICAgICAgZm9ybWF0Q29tbWVudHMoc3RhdGUsIHN0YXRlbWVudC5jb21tZW50cywgc3RhdGVtZW50SW5kZW50LCBsaW5lRW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLndyaXRlKHN0YXRlbWVudEluZGVudCk7XG4gICAgICAgIHRoaXNbc3RhdGVtZW50LnR5cGVdKHN0YXRlbWVudCwgc3RhdGUpO1xuICAgICAgICBzdGF0ZS53cml0ZShsaW5lRW5kKTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUud3JpdGUoaW5kZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHdyaXRlQ29tbWVudHMgJiYgbm9kZS5jb21tZW50cyAhPSBudWxsKSB7XG4gICAgICAgIHN0YXRlLndyaXRlKGxpbmVFbmQpO1xuICAgICAgICBmb3JtYXRDb21tZW50cyhzdGF0ZSwgbm9kZS5jb21tZW50cywgc3RhdGVtZW50SW5kZW50LCBsaW5lRW5kKTtcbiAgICAgICAgc3RhdGUud3JpdGUoaW5kZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod3JpdGVDb21tZW50cyAmJiBub2RlLnRyYWlsaW5nQ29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgZm9ybWF0Q29tbWVudHMoc3RhdGUsIG5vZGUudHJhaWxpbmdDb21tZW50cywgc3RhdGVtZW50SW5kZW50LCBsaW5lRW5kKTtcbiAgICB9XG5cbiAgICBzdGF0ZS53cml0ZSgnfScpO1xuICAgIHN0YXRlLmluZGVudExldmVsLS07XG4gIH0sXG4gIENsYXNzQm9keTogQmxvY2tTdGF0ZW1lbnQsXG4gIFN0YXRpY0Jsb2NrOiBmdW5jdGlvbiBTdGF0aWNCbG9jayhub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdzdGF0aWMgJyk7XG4gICAgdGhpcy5CbG9ja1N0YXRlbWVudChub2RlLCBzdGF0ZSk7XG4gIH0sXG4gIEVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiBFbXB0eVN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gIH0sXG4gIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IGZ1bmN0aW9uIEV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICB2YXIgcHJlY2VkZW5jZSA9IHN0YXRlLmV4cHJlc3Npb25zUHJlY2VkZW5jZVtub2RlLmV4cHJlc3Npb24udHlwZV07XG5cbiAgICBpZiAocHJlY2VkZW5jZSA9PT0gTkVFRFNfUEFSRU5USEVTRVMgfHwgcHJlY2VkZW5jZSA9PT0gMyAmJiBub2RlLmV4cHJlc3Npb24ubGVmdC50eXBlWzBdID09PSAnTycpIHtcbiAgICAgIHN0YXRlLndyaXRlKCcoJyk7XG4gICAgICB0aGlzW25vZGUuZXhwcmVzc2lvbi50eXBlXShub2RlLmV4cHJlc3Npb24sIHN0YXRlKTtcbiAgICAgIHN0YXRlLndyaXRlKCcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbbm9kZS5leHByZXNzaW9uLnR5cGVdKG5vZGUuZXhwcmVzc2lvbiwgc3RhdGUpO1xuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gIH0sXG4gIElmU3RhdGVtZW50OiBmdW5jdGlvbiBJZlN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdpZiAoJyk7XG4gICAgdGhpc1tub2RlLnRlc3QudHlwZV0obm9kZS50ZXN0LCBzdGF0ZSk7XG4gICAgc3RhdGUud3JpdGUoJykgJyk7XG4gICAgdGhpc1tub2RlLmNvbnNlcXVlbnQudHlwZV0obm9kZS5jb25zZXF1ZW50LCBzdGF0ZSk7XG5cbiAgICBpZiAobm9kZS5hbHRlcm5hdGUgIT0gbnVsbCkge1xuICAgICAgc3RhdGUud3JpdGUoJyBlbHNlICcpO1xuICAgICAgdGhpc1tub2RlLmFsdGVybmF0ZS50eXBlXShub2RlLmFsdGVybmF0ZSwgc3RhdGUpO1xuICAgIH1cbiAgfSxcbiAgTGFiZWxlZFN0YXRlbWVudDogZnVuY3Rpb24gTGFiZWxlZFN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHRoaXNbbm9kZS5sYWJlbC50eXBlXShub2RlLmxhYmVsLCBzdGF0ZSk7XG4gICAgc3RhdGUud3JpdGUoJzogJyk7XG4gICAgdGhpc1tub2RlLmJvZHkudHlwZV0obm9kZS5ib2R5LCBzdGF0ZSk7XG4gIH0sXG4gIEJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbiBCcmVha1N0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdicmVhaycpO1xuXG4gICAgaWYgKG5vZGUubGFiZWwgIT0gbnVsbCkge1xuICAgICAgc3RhdGUud3JpdGUoJyAnKTtcbiAgICAgIHRoaXNbbm9kZS5sYWJlbC50eXBlXShub2RlLmxhYmVsLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgc3RhdGUud3JpdGUoJzsnKTtcbiAgfSxcbiAgQ29udGludWVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIENvbnRpbnVlU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ2NvbnRpbnVlJyk7XG5cbiAgICBpZiAobm9kZS5sYWJlbCAhPSBudWxsKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnICcpO1xuICAgICAgdGhpc1tub2RlLmxhYmVsLnR5cGVdKG5vZGUubGFiZWwsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBzdGF0ZS53cml0ZSgnOycpO1xuICB9LFxuICBXaXRoU3RhdGVtZW50OiBmdW5jdGlvbiBXaXRoU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ3dpdGggKCcpO1xuICAgIHRoaXNbbm9kZS5vYmplY3QudHlwZV0obm9kZS5vYmplY3QsIHN0YXRlKTtcbiAgICBzdGF0ZS53cml0ZSgnKSAnKTtcbiAgICB0aGlzW25vZGUuYm9keS50eXBlXShub2RlLmJvZHksIHN0YXRlKTtcbiAgfSxcbiAgU3dpdGNoU3RhdGVtZW50OiBmdW5jdGlvbiBTd2l0Y2hTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICB2YXIgaW5kZW50ID0gc3RhdGUuaW5kZW50LnJlcGVhdChzdGF0ZS5pbmRlbnRMZXZlbCsrKTtcbiAgICB2YXIgbGluZUVuZCA9IHN0YXRlLmxpbmVFbmQsXG4gICAgICAgIHdyaXRlQ29tbWVudHMgPSBzdGF0ZS53cml0ZUNvbW1lbnRzO1xuICAgIHN0YXRlLmluZGVudExldmVsKys7XG4gICAgdmFyIGNhc2VJbmRlbnQgPSBpbmRlbnQgKyBzdGF0ZS5pbmRlbnQ7XG4gICAgdmFyIHN0YXRlbWVudEluZGVudCA9IGNhc2VJbmRlbnQgKyBzdGF0ZS5pbmRlbnQ7XG4gICAgc3RhdGUud3JpdGUoJ3N3aXRjaCAoJyk7XG4gICAgdGhpc1tub2RlLmRpc2NyaW1pbmFudC50eXBlXShub2RlLmRpc2NyaW1pbmFudCwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCcpIHsnICsgbGluZUVuZCk7XG4gICAgdmFyIG9jY3VyZW5jZXMgPSBub2RlLmNhc2VzO1xuICAgIHZhciBvY2N1cmVuY2VzQ291bnQgPSBvY2N1cmVuY2VzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2NjdXJlbmNlc0NvdW50OyBpKyspIHtcbiAgICAgIHZhciBvY2N1cmVuY2UgPSBvY2N1cmVuY2VzW2ldO1xuXG4gICAgICBpZiAod3JpdGVDb21tZW50cyAmJiBvY2N1cmVuY2UuY29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgICBmb3JtYXRDb21tZW50cyhzdGF0ZSwgb2NjdXJlbmNlLmNvbW1lbnRzLCBjYXNlSW5kZW50LCBsaW5lRW5kKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9jY3VyZW5jZS50ZXN0KSB7XG4gICAgICAgIHN0YXRlLndyaXRlKGNhc2VJbmRlbnQgKyAnY2FzZSAnKTtcbiAgICAgICAgdGhpc1tvY2N1cmVuY2UudGVzdC50eXBlXShvY2N1cmVuY2UudGVzdCwgc3RhdGUpO1xuICAgICAgICBzdGF0ZS53cml0ZSgnOicgKyBsaW5lRW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLndyaXRlKGNhc2VJbmRlbnQgKyAnZGVmYXVsdDonICsgbGluZUVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb25zZXF1ZW50ID0gb2NjdXJlbmNlLmNvbnNlcXVlbnQ7XG4gICAgICB2YXIgY29uc2VxdWVudENvdW50ID0gY29uc2VxdWVudC5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBjb25zZXF1ZW50Q291bnQ7IF9pKyspIHtcbiAgICAgICAgdmFyIHN0YXRlbWVudCA9IGNvbnNlcXVlbnRbX2ldO1xuXG4gICAgICAgIGlmICh3cml0ZUNvbW1lbnRzICYmIHN0YXRlbWVudC5jb21tZW50cyAhPSBudWxsKSB7XG4gICAgICAgICAgZm9ybWF0Q29tbWVudHMoc3RhdGUsIHN0YXRlbWVudC5jb21tZW50cywgc3RhdGVtZW50SW5kZW50LCBsaW5lRW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLndyaXRlKHN0YXRlbWVudEluZGVudCk7XG4gICAgICAgIHRoaXNbc3RhdGVtZW50LnR5cGVdKHN0YXRlbWVudCwgc3RhdGUpO1xuICAgICAgICBzdGF0ZS53cml0ZShsaW5lRW5kKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0ZS5pbmRlbnRMZXZlbCAtPSAyO1xuICAgIHN0YXRlLndyaXRlKGluZGVudCArICd9Jyk7XG4gIH0sXG4gIFJldHVyblN0YXRlbWVudDogZnVuY3Rpb24gUmV0dXJuU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ3JldHVybicpO1xuXG4gICAgaWYgKG5vZGUuYXJndW1lbnQpIHtcbiAgICAgIHN0YXRlLndyaXRlKCcgJyk7XG4gICAgICB0aGlzW25vZGUuYXJndW1lbnQudHlwZV0obm9kZS5hcmd1bWVudCwgc3RhdGUpO1xuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gIH0sXG4gIFRocm93U3RhdGVtZW50OiBmdW5jdGlvbiBUaHJvd1N0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCd0aHJvdyAnKTtcbiAgICB0aGlzW25vZGUuYXJndW1lbnQudHlwZV0obm9kZS5hcmd1bWVudCwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gIH0sXG4gIFRyeVN0YXRlbWVudDogZnVuY3Rpb24gVHJ5U3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ3RyeSAnKTtcbiAgICB0aGlzW25vZGUuYmxvY2sudHlwZV0obm9kZS5ibG9jaywgc3RhdGUpO1xuXG4gICAgaWYgKG5vZGUuaGFuZGxlcikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBub2RlLmhhbmRsZXI7XG5cbiAgICAgIGlmIChoYW5kbGVyLnBhcmFtID09IG51bGwpIHtcbiAgICAgICAgc3RhdGUud3JpdGUoJyBjYXRjaCAnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLndyaXRlKCcgY2F0Y2ggKCcpO1xuICAgICAgICB0aGlzW2hhbmRsZXIucGFyYW0udHlwZV0oaGFuZGxlci5wYXJhbSwgc3RhdGUpO1xuICAgICAgICBzdGF0ZS53cml0ZSgnKSAnKTtcbiAgICAgIH1cblxuICAgICAgdGhpc1toYW5kbGVyLmJvZHkudHlwZV0oaGFuZGxlci5ib2R5LCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuZmluYWxpemVyKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnIGZpbmFsbHkgJyk7XG4gICAgICB0aGlzW25vZGUuZmluYWxpemVyLnR5cGVdKG5vZGUuZmluYWxpemVyLCBzdGF0ZSk7XG4gICAgfVxuICB9LFxuICBXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gV2hpbGVTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnd2hpbGUgKCcpO1xuICAgIHRoaXNbbm9kZS50ZXN0LnR5cGVdKG5vZGUudGVzdCwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCcpICcpO1xuICAgIHRoaXNbbm9kZS5ib2R5LnR5cGVdKG5vZGUuYm9keSwgc3RhdGUpO1xuICB9LFxuICBEb1doaWxlU3RhdGVtZW50OiBmdW5jdGlvbiBEb1doaWxlU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ2RvICcpO1xuICAgIHRoaXNbbm9kZS5ib2R5LnR5cGVdKG5vZGUuYm9keSwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCcgd2hpbGUgKCcpO1xuICAgIHRoaXNbbm9kZS50ZXN0LnR5cGVdKG5vZGUudGVzdCwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCcpOycpO1xuICB9LFxuICBGb3JTdGF0ZW1lbnQ6IGZ1bmN0aW9uIEZvclN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdmb3IgKCcpO1xuXG4gICAgaWYgKG5vZGUuaW5pdCAhPSBudWxsKSB7XG4gICAgICB2YXIgaW5pdCA9IG5vZGUuaW5pdDtcblxuICAgICAgaWYgKGluaXQudHlwZVswXSA9PT0gJ1YnKSB7XG4gICAgICAgIGZvcm1hdFZhcmlhYmxlRGVjbGFyYXRpb24oc3RhdGUsIGluaXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tpbml0LnR5cGVdKGluaXQsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0ZS53cml0ZSgnOyAnKTtcblxuICAgIGlmIChub2RlLnRlc3QpIHtcbiAgICAgIHRoaXNbbm9kZS50ZXN0LnR5cGVdKG5vZGUudGVzdCwgc3RhdGUpO1xuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKCc7ICcpO1xuXG4gICAgaWYgKG5vZGUudXBkYXRlKSB7XG4gICAgICB0aGlzW25vZGUudXBkYXRlLnR5cGVdKG5vZGUudXBkYXRlLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgc3RhdGUud3JpdGUoJykgJyk7XG4gICAgdGhpc1tub2RlLmJvZHkudHlwZV0obm9kZS5ib2R5LCBzdGF0ZSk7XG4gIH0sXG4gIEZvckluU3RhdGVtZW50OiBGb3JJblN0YXRlbWVudCA9IGZ1bmN0aW9uIEZvckluU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoXCJmb3IgXCIuY29uY2F0KG5vZGVbXCJhd2FpdFwiXSA/ICdhd2FpdCAnIDogJycsIFwiKFwiKSk7XG4gICAgdmFyIGxlZnQgPSBub2RlLmxlZnQ7XG5cbiAgICBpZiAobGVmdC50eXBlWzBdID09PSAnVicpIHtcbiAgICAgIGZvcm1hdFZhcmlhYmxlRGVjbGFyYXRpb24oc3RhdGUsIGxlZnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2xlZnQudHlwZV0obGVmdCwgc3RhdGUpO1xuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKG5vZGUudHlwZVszXSA9PT0gJ0knID8gJyBpbiAnIDogJyBvZiAnKTtcbiAgICB0aGlzW25vZGUucmlnaHQudHlwZV0obm9kZS5yaWdodCwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCcpICcpO1xuICAgIHRoaXNbbm9kZS5ib2R5LnR5cGVdKG5vZGUuYm9keSwgc3RhdGUpO1xuICB9LFxuICBGb3JPZlN0YXRlbWVudDogRm9ySW5TdGF0ZW1lbnQsXG4gIERlYnVnZ2VyU3RhdGVtZW50OiBmdW5jdGlvbiBEZWJ1Z2dlclN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdkZWJ1Z2dlcjsnLCBub2RlKTtcbiAgfSxcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbjogRnVuY3Rpb25EZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIEZ1bmN0aW9uRGVjbGFyYXRpb24obm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgobm9kZS5hc3luYyA/ICdhc3luYyAnIDogJycpICsgKG5vZGUuZ2VuZXJhdG9yID8gJ2Z1bmN0aW9uKiAnIDogJ2Z1bmN0aW9uICcpICsgKG5vZGUuaWQgPyBub2RlLmlkLm5hbWUgOiAnJyksIG5vZGUpO1xuICAgIGZvcm1hdFNlcXVlbmNlKHN0YXRlLCBub2RlLnBhcmFtcyk7XG4gICAgc3RhdGUud3JpdGUoJyAnKTtcbiAgICB0aGlzW25vZGUuYm9keS50eXBlXShub2RlLmJvZHksIHN0YXRlKTtcbiAgfSxcbiAgRnVuY3Rpb25FeHByZXNzaW9uOiBGdW5jdGlvbkRlY2xhcmF0aW9uLFxuICBWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbiBWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgZm9ybWF0VmFyaWFibGVEZWNsYXJhdGlvbihzdGF0ZSwgbm9kZSk7XG4gICAgc3RhdGUud3JpdGUoJzsnKTtcbiAgfSxcbiAgVmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbiBWYXJpYWJsZURlY2xhcmF0b3Iobm9kZSwgc3RhdGUpIHtcbiAgICB0aGlzW25vZGUuaWQudHlwZV0obm9kZS5pZCwgc3RhdGUpO1xuXG4gICAgaWYgKG5vZGUuaW5pdCAhPSBudWxsKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnID0gJyk7XG4gICAgICB0aGlzW25vZGUuaW5pdC50eXBlXShub2RlLmluaXQsIHN0YXRlKTtcbiAgICB9XG4gIH0sXG4gIENsYXNzRGVjbGFyYXRpb246IGZ1bmN0aW9uIENsYXNzRGVjbGFyYXRpb24obm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnY2xhc3MgJyArIChub2RlLmlkID8gXCJcIi5jb25jYXQobm9kZS5pZC5uYW1lLCBcIiBcIikgOiAnJyksIG5vZGUpO1xuXG4gICAgaWYgKG5vZGUuc3VwZXJDbGFzcykge1xuICAgICAgc3RhdGUud3JpdGUoJ2V4dGVuZHMgJyk7XG4gICAgICB2YXIgc3VwZXJDbGFzcyA9IG5vZGUuc3VwZXJDbGFzcztcbiAgICAgIHZhciB0eXBlID0gc3VwZXJDbGFzcy50eXBlO1xuICAgICAgdmFyIHByZWNlZGVuY2UgPSBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2VbdHlwZV07XG5cbiAgICAgIGlmICgodHlwZVswXSAhPT0gJ0MnIHx8IHR5cGVbMV0gIT09ICdsJyB8fCB0eXBlWzVdICE9PSAnRScpICYmIChwcmVjZWRlbmNlID09PSBORUVEU19QQVJFTlRIRVNFUyB8fCBwcmVjZWRlbmNlIDwgc3RhdGUuZXhwcmVzc2lvbnNQcmVjZWRlbmNlLkNsYXNzRXhwcmVzc2lvbikpIHtcbiAgICAgICAgc3RhdGUud3JpdGUoJygnKTtcbiAgICAgICAgdGhpc1tub2RlLnN1cGVyQ2xhc3MudHlwZV0oc3VwZXJDbGFzcywgc3RhdGUpO1xuICAgICAgICBzdGF0ZS53cml0ZSgnKScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tzdXBlckNsYXNzLnR5cGVdKHN1cGVyQ2xhc3MsIHN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUud3JpdGUoJyAnKTtcbiAgICB9XG5cbiAgICB0aGlzLkNsYXNzQm9keShub2RlLmJvZHksIHN0YXRlKTtcbiAgfSxcbiAgSW1wb3J0RGVjbGFyYXRpb246IGZ1bmN0aW9uIEltcG9ydERlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ2ltcG9ydCAnKTtcbiAgICB2YXIgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVycztcbiAgICB2YXIgbGVuZ3RoID0gc3BlY2lmaWVycy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOykge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBzdGF0ZS53cml0ZSgnLCAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzcGVjaWZpZXIgPSBzcGVjaWZpZXJzW2ldO1xuICAgICAgICB2YXIgdHlwZSA9IHNwZWNpZmllci50eXBlWzZdO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnRCcpIHtcbiAgICAgICAgICBzdGF0ZS53cml0ZShzcGVjaWZpZXIubG9jYWwubmFtZSwgc3BlY2lmaWVyKTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ04nKSB7XG4gICAgICAgICAgc3RhdGUud3JpdGUoJyogYXMgJyArIHNwZWNpZmllci5sb2NhbC5uYW1lLCBzcGVjaWZpZXIpO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaSA8IGxlbmd0aCkge1xuICAgICAgICBzdGF0ZS53cml0ZSgneycpO1xuXG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICB2YXIgX3NwZWNpZmllciA9IHNwZWNpZmllcnNbaV07XG4gICAgICAgICAgdmFyIG5hbWUgPSBfc3BlY2lmaWVyLmltcG9ydGVkLm5hbWU7XG4gICAgICAgICAgc3RhdGUud3JpdGUobmFtZSwgX3NwZWNpZmllcik7XG5cbiAgICAgICAgICBpZiAobmFtZSAhPT0gX3NwZWNpZmllci5sb2NhbC5uYW1lKSB7XG4gICAgICAgICAgICBzdGF0ZS53cml0ZSgnIGFzICcgKyBfc3BlY2lmaWVyLmxvY2FsLm5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgrK2kgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YXRlLndyaXRlKCcsICcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS53cml0ZSgnfScpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS53cml0ZSgnIGZyb20gJyk7XG4gICAgfVxuXG4gICAgdGhpcy5MaXRlcmFsKG5vZGUuc291cmNlLCBzdGF0ZSk7XG4gICAgc3RhdGUud3JpdGUoJzsnKTtcbiAgfSxcbiAgSW1wb3J0RXhwcmVzc2lvbjogZnVuY3Rpb24gSW1wb3J0RXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdpbXBvcnQoJyk7XG4gICAgdGhpc1tub2RlLnNvdXJjZS50eXBlXShub2RlLnNvdXJjZSwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCcpJyk7XG4gIH0sXG4gIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogZnVuY3Rpb24gRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ2V4cG9ydCBkZWZhdWx0ICcpO1xuICAgIHRoaXNbbm9kZS5kZWNsYXJhdGlvbi50eXBlXShub2RlLmRlY2xhcmF0aW9uLCBzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUuZXhwcmVzc2lvbnNQcmVjZWRlbmNlW25vZGUuZGVjbGFyYXRpb24udHlwZV0gIT0gbnVsbCAmJiBub2RlLmRlY2xhcmF0aW9uLnR5cGVbMF0gIT09ICdGJykge1xuICAgICAgc3RhdGUud3JpdGUoJzsnKTtcbiAgICB9XG4gIH0sXG4gIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IGZ1bmN0aW9uIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnZXhwb3J0ICcpO1xuXG4gICAgaWYgKG5vZGUuZGVjbGFyYXRpb24pIHtcbiAgICAgIHRoaXNbbm9kZS5kZWNsYXJhdGlvbi50eXBlXShub2RlLmRlY2xhcmF0aW9uLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLndyaXRlKCd7Jyk7XG4gICAgICB2YXIgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVycyxcbiAgICAgICAgICBsZW5ndGggPSBzcGVjaWZpZXJzLmxlbmd0aDtcblxuICAgICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7Oykge1xuICAgICAgICAgIHZhciBzcGVjaWZpZXIgPSBzcGVjaWZpZXJzW2ldO1xuICAgICAgICAgIHZhciBuYW1lID0gc3BlY2lmaWVyLmxvY2FsLm5hbWU7XG4gICAgICAgICAgc3RhdGUud3JpdGUobmFtZSwgc3BlY2lmaWVyKTtcblxuICAgICAgICAgIGlmIChuYW1lICE9PSBzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSkge1xuICAgICAgICAgICAgc3RhdGUud3JpdGUoJyBhcyAnICsgc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgrK2kgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YXRlLndyaXRlKCcsICcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RhdGUud3JpdGUoJ30nKTtcblxuICAgICAgaWYgKG5vZGUuc291cmNlKSB7XG4gICAgICAgIHN0YXRlLndyaXRlKCcgZnJvbSAnKTtcbiAgICAgICAgdGhpcy5MaXRlcmFsKG5vZGUuc291cmNlLCBzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gICAgfVxuICB9LFxuICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogZnVuY3Rpb24gRXhwb3J0QWxsRGVjbGFyYXRpb24obm9kZSwgc3RhdGUpIHtcbiAgICBpZiAobm9kZS5leHBvcnRlZCAhPSBudWxsKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnZXhwb3J0ICogYXMgJyArIG5vZGUuZXhwb3J0ZWQubmFtZSArICcgZnJvbSAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUud3JpdGUoJ2V4cG9ydCAqIGZyb20gJyk7XG4gICAgfVxuXG4gICAgdGhpcy5MaXRlcmFsKG5vZGUuc291cmNlLCBzdGF0ZSk7XG4gICAgc3RhdGUud3JpdGUoJzsnKTtcbiAgfSxcbiAgTWV0aG9kRGVmaW5pdGlvbjogZnVuY3Rpb24gTWV0aG9kRGVmaW5pdGlvbihub2RlLCBzdGF0ZSkge1xuICAgIGlmIChub2RlW1wic3RhdGljXCJdKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnc3RhdGljICcpO1xuICAgIH1cblxuICAgIHZhciBraW5kID0gbm9kZS5raW5kWzBdO1xuXG4gICAgaWYgKGtpbmQgPT09ICdnJyB8fCBraW5kID09PSAncycpIHtcbiAgICAgIHN0YXRlLndyaXRlKG5vZGUua2luZCArICcgJyk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudmFsdWUuYXN5bmMpIHtcbiAgICAgIHN0YXRlLndyaXRlKCdhc3luYyAnKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS52YWx1ZS5nZW5lcmF0b3IpIHtcbiAgICAgIHN0YXRlLndyaXRlKCcqJyk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuY29tcHV0ZWQpIHtcbiAgICAgIHN0YXRlLndyaXRlKCdbJyk7XG4gICAgICB0aGlzW25vZGUua2V5LnR5cGVdKG5vZGUua2V5LCBzdGF0ZSk7XG4gICAgICBzdGF0ZS53cml0ZSgnXScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW25vZGUua2V5LnR5cGVdKG5vZGUua2V5LCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgZm9ybWF0U2VxdWVuY2Uoc3RhdGUsIG5vZGUudmFsdWUucGFyYW1zKTtcbiAgICBzdGF0ZS53cml0ZSgnICcpO1xuICAgIHRoaXNbbm9kZS52YWx1ZS5ib2R5LnR5cGVdKG5vZGUudmFsdWUuYm9keSwgc3RhdGUpO1xuICB9LFxuICBDbGFzc0V4cHJlc3Npb246IGZ1bmN0aW9uIENsYXNzRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIHRoaXMuQ2xhc3NEZWNsYXJhdGlvbihub2RlLCBzdGF0ZSk7XG4gIH0sXG4gIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKG5vZGUuYXN5bmMgPyAnYXN5bmMgJyA6ICcnLCBub2RlKTtcbiAgICB2YXIgcGFyYW1zID0gbm9kZS5wYXJhbXM7XG5cbiAgICBpZiAocGFyYW1zICE9IG51bGwpIHtcbiAgICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAxICYmIHBhcmFtc1swXS50eXBlWzBdID09PSAnSScpIHtcbiAgICAgICAgc3RhdGUud3JpdGUocGFyYW1zWzBdLm5hbWUsIHBhcmFtc1swXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtYXRTZXF1ZW5jZShzdGF0ZSwgbm9kZS5wYXJhbXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKCcgPT4gJyk7XG5cbiAgICBpZiAobm9kZS5ib2R5LnR5cGVbMF0gPT09ICdPJykge1xuICAgICAgc3RhdGUud3JpdGUoJygnKTtcbiAgICAgIHRoaXMuT2JqZWN0RXhwcmVzc2lvbihub2RlLmJvZHksIHN0YXRlKTtcbiAgICAgIHN0YXRlLndyaXRlKCcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbbm9kZS5ib2R5LnR5cGVdKG5vZGUuYm9keSwgc3RhdGUpO1xuICAgIH1cbiAgfSxcbiAgVGhpc0V4cHJlc3Npb246IGZ1bmN0aW9uIFRoaXNFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ3RoaXMnLCBub2RlKTtcbiAgfSxcbiAgU3VwZXI6IGZ1bmN0aW9uIFN1cGVyKG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ3N1cGVyJywgbm9kZSk7XG4gIH0sXG4gIFJlc3RFbGVtZW50OiBSZXN0RWxlbWVudCA9IGZ1bmN0aW9uIFJlc3RFbGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJy4uLicpO1xuICAgIHRoaXNbbm9kZS5hcmd1bWVudC50eXBlXShub2RlLmFyZ3VtZW50LCBzdGF0ZSk7XG4gIH0sXG4gIFNwcmVhZEVsZW1lbnQ6IFJlc3RFbGVtZW50LFxuICBZaWVsZEV4cHJlc3Npb246IGZ1bmN0aW9uIFlpZWxkRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKG5vZGUuZGVsZWdhdGUgPyAneWllbGQqJyA6ICd5aWVsZCcpO1xuXG4gICAgaWYgKG5vZGUuYXJndW1lbnQpIHtcbiAgICAgIHN0YXRlLndyaXRlKCcgJyk7XG4gICAgICB0aGlzW25vZGUuYXJndW1lbnQudHlwZV0obm9kZS5hcmd1bWVudCwgc3RhdGUpO1xuICAgIH1cbiAgfSxcbiAgQXdhaXRFeHByZXNzaW9uOiBmdW5jdGlvbiBBd2FpdEV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnYXdhaXQgJywgbm9kZSk7XG4gICAgZm9ybWF0RXhwcmVzc2lvbihzdGF0ZSwgbm9kZS5hcmd1bWVudCwgbm9kZSk7XG4gIH0sXG4gIFRlbXBsYXRlTGl0ZXJhbDogZnVuY3Rpb24gVGVtcGxhdGVMaXRlcmFsKG5vZGUsIHN0YXRlKSB7XG4gICAgdmFyIHF1YXNpcyA9IG5vZGUucXVhc2lzLFxuICAgICAgICBleHByZXNzaW9ucyA9IG5vZGUuZXhwcmVzc2lvbnM7XG4gICAgc3RhdGUud3JpdGUoJ2AnKTtcbiAgICB2YXIgbGVuZ3RoID0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGV4cHJlc3Npb24gPSBleHByZXNzaW9uc1tpXTtcbiAgICAgIHZhciBfcXVhc2kgPSBxdWFzaXNbaV07XG4gICAgICBzdGF0ZS53cml0ZShfcXVhc2kudmFsdWUucmF3LCBfcXVhc2kpO1xuICAgICAgc3RhdGUud3JpdGUoJyR7Jyk7XG4gICAgICB0aGlzW2V4cHJlc3Npb24udHlwZV0oZXhwcmVzc2lvbiwgc3RhdGUpO1xuICAgICAgc3RhdGUud3JpdGUoJ30nKTtcbiAgICB9XG5cbiAgICB2YXIgcXVhc2kgPSBxdWFzaXNbcXVhc2lzLmxlbmd0aCAtIDFdO1xuICAgIHN0YXRlLndyaXRlKHF1YXNpLnZhbHVlLnJhdywgcXVhc2kpO1xuICAgIHN0YXRlLndyaXRlKCdgJyk7XG4gIH0sXG4gIFRlbXBsYXRlRWxlbWVudDogZnVuY3Rpb24gVGVtcGxhdGVFbGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUobm9kZS52YWx1ZS5yYXcsIG5vZGUpO1xuICB9LFxuICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIGZvcm1hdEV4cHJlc3Npb24oc3RhdGUsIG5vZGUudGFnLCBub2RlKTtcbiAgICB0aGlzW25vZGUucXVhc2kudHlwZV0obm9kZS5xdWFzaSwgc3RhdGUpO1xuICB9LFxuICBBcnJheUV4cHJlc3Npb246IEFycmF5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIEFycmF5RXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdbJyk7XG5cbiAgICBpZiAobm9kZS5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZWxlbWVudHMgPSBub2RlLmVsZW1lbnRzLFxuICAgICAgICAgIGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7Oykge1xuICAgICAgICB2YXIgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuXG4gICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzW2VsZW1lbnQudHlwZV0oZWxlbWVudCwgc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCsraSA8IGxlbmd0aCkge1xuICAgICAgICAgIHN0YXRlLndyaXRlKCcsICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXRlLndyaXRlKCcsICcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGUud3JpdGUoJ10nKTtcbiAgfSxcbiAgQXJyYXlQYXR0ZXJuOiBBcnJheUV4cHJlc3Npb24sXG4gIE9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIE9iamVjdEV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICB2YXIgaW5kZW50ID0gc3RhdGUuaW5kZW50LnJlcGVhdChzdGF0ZS5pbmRlbnRMZXZlbCsrKTtcbiAgICB2YXIgbGluZUVuZCA9IHN0YXRlLmxpbmVFbmQsXG4gICAgICAgIHdyaXRlQ29tbWVudHMgPSBzdGF0ZS53cml0ZUNvbW1lbnRzO1xuICAgIHZhciBwcm9wZXJ0eUluZGVudCA9IGluZGVudCArIHN0YXRlLmluZGVudDtcbiAgICBzdGF0ZS53cml0ZSgneycpO1xuXG4gICAgaWYgKG5vZGUucHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG4gICAgICBzdGF0ZS53cml0ZShsaW5lRW5kKTtcblxuICAgICAgaWYgKHdyaXRlQ29tbWVudHMgJiYgbm9kZS5jb21tZW50cyAhPSBudWxsKSB7XG4gICAgICAgIGZvcm1hdENvbW1lbnRzKHN0YXRlLCBub2RlLmNvbW1lbnRzLCBwcm9wZXJ0eUluZGVudCwgbGluZUVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21tYSA9ICcsJyArIGxpbmVFbmQ7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllcyxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7Oykge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmICh3cml0ZUNvbW1lbnRzICYmIHByb3BlcnR5LmNvbW1lbnRzICE9IG51bGwpIHtcbiAgICAgICAgICBmb3JtYXRDb21tZW50cyhzdGF0ZSwgcHJvcGVydHkuY29tbWVudHMsIHByb3BlcnR5SW5kZW50LCBsaW5lRW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLndyaXRlKHByb3BlcnR5SW5kZW50KTtcbiAgICAgICAgdGhpc1twcm9wZXJ0eS50eXBlXShwcm9wZXJ0eSwgc3RhdGUpO1xuXG4gICAgICAgIGlmICgrK2kgPCBsZW5ndGgpIHtcbiAgICAgICAgICBzdGF0ZS53cml0ZShjb21tYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RhdGUud3JpdGUobGluZUVuZCk7XG5cbiAgICAgIGlmICh3cml0ZUNvbW1lbnRzICYmIG5vZGUudHJhaWxpbmdDb21tZW50cyAhPSBudWxsKSB7XG4gICAgICAgIGZvcm1hdENvbW1lbnRzKHN0YXRlLCBub2RlLnRyYWlsaW5nQ29tbWVudHMsIHByb3BlcnR5SW5kZW50LCBsaW5lRW5kKTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUud3JpdGUoaW5kZW50ICsgJ30nKTtcbiAgICB9IGVsc2UgaWYgKHdyaXRlQ29tbWVudHMpIHtcbiAgICAgIGlmIChub2RlLmNvbW1lbnRzICE9IG51bGwpIHtcbiAgICAgICAgc3RhdGUud3JpdGUobGluZUVuZCk7XG4gICAgICAgIGZvcm1hdENvbW1lbnRzKHN0YXRlLCBub2RlLmNvbW1lbnRzLCBwcm9wZXJ0eUluZGVudCwgbGluZUVuZCk7XG5cbiAgICAgICAgaWYgKG5vZGUudHJhaWxpbmdDb21tZW50cyAhPSBudWxsKSB7XG4gICAgICAgICAgZm9ybWF0Q29tbWVudHMoc3RhdGUsIG5vZGUudHJhaWxpbmdDb21tZW50cywgcHJvcGVydHlJbmRlbnQsIGxpbmVFbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUud3JpdGUoaW5kZW50ICsgJ30nKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS50cmFpbGluZ0NvbW1lbnRzICE9IG51bGwpIHtcbiAgICAgICAgc3RhdGUud3JpdGUobGluZUVuZCk7XG4gICAgICAgIGZvcm1hdENvbW1lbnRzKHN0YXRlLCBub2RlLnRyYWlsaW5nQ29tbWVudHMsIHByb3BlcnR5SW5kZW50LCBsaW5lRW5kKTtcbiAgICAgICAgc3RhdGUud3JpdGUoaW5kZW50ICsgJ30nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLndyaXRlKCd9Jyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLndyaXRlKCd9Jyk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5kZW50TGV2ZWwtLTtcbiAgfSxcbiAgUHJvcGVydHk6IGZ1bmN0aW9uIFByb3BlcnR5KG5vZGUsIHN0YXRlKSB7XG4gICAgaWYgKG5vZGUubWV0aG9kIHx8IG5vZGUua2luZFswXSAhPT0gJ2knKSB7XG4gICAgICB0aGlzLk1ldGhvZERlZmluaXRpb24obm9kZSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW5vZGUuc2hvcnRoYW5kKSB7XG4gICAgICAgIGlmIChub2RlLmNvbXB1dGVkKSB7XG4gICAgICAgICAgc3RhdGUud3JpdGUoJ1snKTtcbiAgICAgICAgICB0aGlzW25vZGUua2V5LnR5cGVdKG5vZGUua2V5LCBzdGF0ZSk7XG4gICAgICAgICAgc3RhdGUud3JpdGUoJ10nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzW25vZGUua2V5LnR5cGVdKG5vZGUua2V5LCBzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS53cml0ZSgnOiAnKTtcbiAgICAgIH1cblxuICAgICAgdGhpc1tub2RlLnZhbHVlLnR5cGVdKG5vZGUudmFsdWUsIHN0YXRlKTtcbiAgICB9XG4gIH0sXG4gIFByb3BlcnR5RGVmaW5pdGlvbjogZnVuY3Rpb24gUHJvcGVydHlEZWZpbml0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgaWYgKG5vZGVbXCJzdGF0aWNcIl0pIHtcbiAgICAgIHN0YXRlLndyaXRlKCdzdGF0aWMgJyk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuY29tcHV0ZWQpIHtcbiAgICAgIHN0YXRlLndyaXRlKCdbJyk7XG4gICAgfVxuXG4gICAgdGhpc1tub2RlLmtleS50eXBlXShub2RlLmtleSwgc3RhdGUpO1xuXG4gICAgaWYgKG5vZGUuY29tcHV0ZWQpIHtcbiAgICAgIHN0YXRlLndyaXRlKCddJyk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudmFsdWUgPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUua2V5LnR5cGVbMF0gIT09ICdGJykge1xuICAgICAgICBzdGF0ZS53cml0ZSgnOycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhdGUud3JpdGUoJyA9ICcpO1xuICAgIHRoaXNbbm9kZS52YWx1ZS50eXBlXShub2RlLnZhbHVlLCBzdGF0ZSk7XG4gICAgc3RhdGUud3JpdGUoJzsnKTtcbiAgfSxcbiAgT2JqZWN0UGF0dGVybjogZnVuY3Rpb24gT2JqZWN0UGF0dGVybihub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCd7Jyk7XG5cbiAgICBpZiAobm9kZS5wcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gbm9kZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDs7KSB7XG4gICAgICAgIHRoaXNbcHJvcGVydGllc1tpXS50eXBlXShwcm9wZXJ0aWVzW2ldLCBzdGF0ZSk7XG5cbiAgICAgICAgaWYgKCsraSA8IGxlbmd0aCkge1xuICAgICAgICAgIHN0YXRlLndyaXRlKCcsICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGUud3JpdGUoJ30nKTtcbiAgfSxcbiAgU2VxdWVuY2VFeHByZXNzaW9uOiBmdW5jdGlvbiBTZXF1ZW5jZUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICBmb3JtYXRTZXF1ZW5jZShzdGF0ZSwgbm9kZS5leHByZXNzaW9ucyk7XG4gIH0sXG4gIFVuYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gVW5hcnlFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgaWYgKG5vZGUucHJlZml4KSB7XG4gICAgICB2YXIgb3BlcmF0b3IgPSBub2RlLm9wZXJhdG9yLFxuICAgICAgICAgIGFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudCxcbiAgICAgICAgICB0eXBlID0gbm9kZS5hcmd1bWVudC50eXBlO1xuICAgICAgc3RhdGUud3JpdGUob3BlcmF0b3IpO1xuICAgICAgdmFyIG5lZWRzUGFyZW50aGVzZXMgPSBleHByZXNzaW9uTmVlZHNQYXJlbnRoZXNpcyhzdGF0ZSwgYXJndW1lbnQsIG5vZGUpO1xuXG4gICAgICBpZiAoIW5lZWRzUGFyZW50aGVzZXMgJiYgKG9wZXJhdG9yLmxlbmd0aCA+IDEgfHwgdHlwZVswXSA9PT0gJ1UnICYmICh0eXBlWzFdID09PSAnbicgfHwgdHlwZVsxXSA9PT0gJ3AnKSAmJiBhcmd1bWVudC5wcmVmaXggJiYgYXJndW1lbnQub3BlcmF0b3JbMF0gPT09IG9wZXJhdG9yICYmIChvcGVyYXRvciA9PT0gJysnIHx8IG9wZXJhdG9yID09PSAnLScpKSkge1xuICAgICAgICBzdGF0ZS53cml0ZSgnICcpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVlZHNQYXJlbnRoZXNlcykge1xuICAgICAgICBzdGF0ZS53cml0ZShvcGVyYXRvci5sZW5ndGggPiAxID8gJyAoJyA6ICcoJyk7XG4gICAgICAgIHRoaXNbdHlwZV0oYXJndW1lbnQsIHN0YXRlKTtcbiAgICAgICAgc3RhdGUud3JpdGUoJyknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbdHlwZV0oYXJndW1lbnQsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1tub2RlLmFyZ3VtZW50LnR5cGVdKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICAgIHN0YXRlLndyaXRlKG5vZGUub3BlcmF0b3IpO1xuICAgIH1cbiAgfSxcbiAgVXBkYXRlRXhwcmVzc2lvbjogZnVuY3Rpb24gVXBkYXRlRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIGlmIChub2RlLnByZWZpeCkge1xuICAgICAgc3RhdGUud3JpdGUobm9kZS5vcGVyYXRvcik7XG4gICAgICB0aGlzW25vZGUuYXJndW1lbnQudHlwZV0obm9kZS5hcmd1bWVudCwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW25vZGUuYXJndW1lbnQudHlwZV0obm9kZS5hcmd1bWVudCwgc3RhdGUpO1xuICAgICAgc3RhdGUud3JpdGUobm9kZS5vcGVyYXRvcik7XG4gICAgfVxuICB9LFxuICBBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24gQXNzaWdubWVudEV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICB0aGlzW25vZGUubGVmdC50eXBlXShub2RlLmxlZnQsIHN0YXRlKTtcbiAgICBzdGF0ZS53cml0ZSgnICcgKyBub2RlLm9wZXJhdG9yICsgJyAnKTtcbiAgICB0aGlzW25vZGUucmlnaHQudHlwZV0obm9kZS5yaWdodCwgc3RhdGUpO1xuICB9LFxuICBBc3NpZ25tZW50UGF0dGVybjogZnVuY3Rpb24gQXNzaWdubWVudFBhdHRlcm4obm9kZSwgc3RhdGUpIHtcbiAgICB0aGlzW25vZGUubGVmdC50eXBlXShub2RlLmxlZnQsIHN0YXRlKTtcbiAgICBzdGF0ZS53cml0ZSgnID0gJyk7XG4gICAgdGhpc1tub2RlLnJpZ2h0LnR5cGVdKG5vZGUucmlnaHQsIHN0YXRlKTtcbiAgfSxcbiAgQmluYXJ5RXhwcmVzc2lvbjogQmluYXJ5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIEJpbmFyeUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICB2YXIgaXNJbiA9IG5vZGUub3BlcmF0b3IgPT09ICdpbic7XG5cbiAgICBpZiAoaXNJbikge1xuICAgICAgc3RhdGUud3JpdGUoJygnKTtcbiAgICB9XG5cbiAgICBmb3JtYXRFeHByZXNzaW9uKHN0YXRlLCBub2RlLmxlZnQsIG5vZGUsIGZhbHNlKTtcbiAgICBzdGF0ZS53cml0ZSgnICcgKyBub2RlLm9wZXJhdG9yICsgJyAnKTtcbiAgICBmb3JtYXRFeHByZXNzaW9uKHN0YXRlLCBub2RlLnJpZ2h0LCBub2RlLCB0cnVlKTtcblxuICAgIGlmIChpc0luKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnKScpO1xuICAgIH1cbiAgfSxcbiAgTG9naWNhbEV4cHJlc3Npb246IEJpbmFyeUV4cHJlc3Npb24sXG4gIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogZnVuY3Rpb24gQ29uZGl0aW9uYWxFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgdmFyIHRlc3QgPSBub2RlLnRlc3Q7XG4gICAgdmFyIHByZWNlZGVuY2UgPSBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2VbdGVzdC50eXBlXTtcblxuICAgIGlmIChwcmVjZWRlbmNlID09PSBORUVEU19QQVJFTlRIRVNFUyB8fCBwcmVjZWRlbmNlIDw9IHN0YXRlLmV4cHJlc3Npb25zUHJlY2VkZW5jZS5Db25kaXRpb25hbEV4cHJlc3Npb24pIHtcbiAgICAgIHN0YXRlLndyaXRlKCcoJyk7XG4gICAgICB0aGlzW3Rlc3QudHlwZV0odGVzdCwgc3RhdGUpO1xuICAgICAgc3RhdGUud3JpdGUoJyknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1t0ZXN0LnR5cGVdKHRlc3QsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBzdGF0ZS53cml0ZSgnID8gJyk7XG4gICAgdGhpc1tub2RlLmNvbnNlcXVlbnQudHlwZV0obm9kZS5jb25zZXF1ZW50LCBzdGF0ZSk7XG4gICAgc3RhdGUud3JpdGUoJyA6ICcpO1xuICAgIHRoaXNbbm9kZS5hbHRlcm5hdGUudHlwZV0obm9kZS5hbHRlcm5hdGUsIHN0YXRlKTtcbiAgfSxcbiAgTmV3RXhwcmVzc2lvbjogZnVuY3Rpb24gTmV3RXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCduZXcgJyk7XG4gICAgdmFyIHByZWNlZGVuY2UgPSBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2Vbbm9kZS5jYWxsZWUudHlwZV07XG5cbiAgICBpZiAocHJlY2VkZW5jZSA9PT0gTkVFRFNfUEFSRU5USEVTRVMgfHwgcHJlY2VkZW5jZSA8IHN0YXRlLmV4cHJlc3Npb25zUHJlY2VkZW5jZS5DYWxsRXhwcmVzc2lvbiB8fCBoYXNDYWxsRXhwcmVzc2lvbihub2RlLmNhbGxlZSkpIHtcbiAgICAgIHN0YXRlLndyaXRlKCcoJyk7XG4gICAgICB0aGlzW25vZGUuY2FsbGVlLnR5cGVdKG5vZGUuY2FsbGVlLCBzdGF0ZSk7XG4gICAgICBzdGF0ZS53cml0ZSgnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW25vZGUuY2FsbGVlLnR5cGVdKG5vZGUuY2FsbGVlLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgZm9ybWF0U2VxdWVuY2Uoc3RhdGUsIG5vZGVbJ2FyZ3VtZW50cyddKTtcbiAgfSxcbiAgQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIENhbGxFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgdmFyIHByZWNlZGVuY2UgPSBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2Vbbm9kZS5jYWxsZWUudHlwZV07XG5cbiAgICBpZiAocHJlY2VkZW5jZSA9PT0gTkVFRFNfUEFSRU5USEVTRVMgfHwgcHJlY2VkZW5jZSA8IHN0YXRlLmV4cHJlc3Npb25zUHJlY2VkZW5jZS5DYWxsRXhwcmVzc2lvbikge1xuICAgICAgc3RhdGUud3JpdGUoJygnKTtcbiAgICAgIHRoaXNbbm9kZS5jYWxsZWUudHlwZV0obm9kZS5jYWxsZWUsIHN0YXRlKTtcbiAgICAgIHN0YXRlLndyaXRlKCcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbbm9kZS5jYWxsZWUudHlwZV0obm9kZS5jYWxsZWUsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5vcHRpb25hbCkge1xuICAgICAgc3RhdGUud3JpdGUoJz8uJyk7XG4gICAgfVxuXG4gICAgZm9ybWF0U2VxdWVuY2Uoc3RhdGUsIG5vZGVbJ2FyZ3VtZW50cyddKTtcbiAgfSxcbiAgQ2hhaW5FeHByZXNzaW9uOiBmdW5jdGlvbiBDaGFpbkV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICB0aGlzW25vZGUuZXhwcmVzc2lvbi50eXBlXShub2RlLmV4cHJlc3Npb24sIHN0YXRlKTtcbiAgfSxcbiAgTWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24gTWVtYmVyRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIHZhciBwcmVjZWRlbmNlID0gc3RhdGUuZXhwcmVzc2lvbnNQcmVjZWRlbmNlW25vZGUub2JqZWN0LnR5cGVdO1xuXG4gICAgaWYgKHByZWNlZGVuY2UgPT09IE5FRURTX1BBUkVOVEhFU0VTIHx8IHByZWNlZGVuY2UgPCBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2UuTWVtYmVyRXhwcmVzc2lvbikge1xuICAgICAgc3RhdGUud3JpdGUoJygnKTtcbiAgICAgIHRoaXNbbm9kZS5vYmplY3QudHlwZV0obm9kZS5vYmplY3QsIHN0YXRlKTtcbiAgICAgIHN0YXRlLndyaXRlKCcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbbm9kZS5vYmplY3QudHlwZV0obm9kZS5vYmplY3QsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5jb21wdXRlZCkge1xuICAgICAgaWYgKG5vZGUub3B0aW9uYWwpIHtcbiAgICAgICAgc3RhdGUud3JpdGUoJz8uJyk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLndyaXRlKCdbJyk7XG4gICAgICB0aGlzW25vZGUucHJvcGVydHkudHlwZV0obm9kZS5wcm9wZXJ0eSwgc3RhdGUpO1xuICAgICAgc3RhdGUud3JpdGUoJ10nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGUub3B0aW9uYWwpIHtcbiAgICAgICAgc3RhdGUud3JpdGUoJz8uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS53cml0ZSgnLicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzW25vZGUucHJvcGVydHkudHlwZV0obm9kZS5wcm9wZXJ0eSwgc3RhdGUpO1xuICAgIH1cbiAgfSxcbiAgTWV0YVByb3BlcnR5OiBmdW5jdGlvbiBNZXRhUHJvcGVydHkobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZShub2RlLm1ldGEubmFtZSArICcuJyArIG5vZGUucHJvcGVydHkubmFtZSwgbm9kZSk7XG4gIH0sXG4gIElkZW50aWZpZXI6IGZ1bmN0aW9uIElkZW50aWZpZXIobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZShub2RlLm5hbWUsIG5vZGUpO1xuICB9LFxuICBQcml2YXRlSWRlbnRpZmllcjogZnVuY3Rpb24gUHJpdmF0ZUlkZW50aWZpZXIobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZShcIiNcIi5jb25jYXQobm9kZS5uYW1lKSwgbm9kZSk7XG4gIH0sXG4gIExpdGVyYWw6IGZ1bmN0aW9uIExpdGVyYWwobm9kZSwgc3RhdGUpIHtcbiAgICBpZiAobm9kZS5yYXcgIT0gbnVsbCkge1xuICAgICAgc3RhdGUud3JpdGUobm9kZS5yYXcsIG5vZGUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5yZWdleCAhPSBudWxsKSB7XG4gICAgICB0aGlzLlJlZ0V4cExpdGVyYWwobm9kZSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5iaWdpbnQgIT0gbnVsbCkge1xuICAgICAgc3RhdGUud3JpdGUobm9kZS5iaWdpbnQgKyAnbicsIG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS53cml0ZShzdHJpbmdpZnkobm9kZS52YWx1ZSksIG5vZGUpO1xuICAgIH1cbiAgfSxcbiAgUmVnRXhwTGl0ZXJhbDogZnVuY3Rpb24gUmVnRXhwTGl0ZXJhbChub2RlLCBzdGF0ZSkge1xuICAgIHZhciByZWdleCA9IG5vZGUucmVnZXg7XG4gICAgc3RhdGUud3JpdGUoXCIvXCIuY29uY2F0KHJlZ2V4LnBhdHRlcm4sIFwiL1wiKS5jb25jYXQocmVnZXguZmxhZ3MpLCBub2RlKTtcbiAgfVxufTtcbmV4cG9ydHMuR0VORVJBVE9SID0gR0VORVJBVE9SO1xudmFyIEVNUFRZX09CSkVDVCA9IHt9O1xudmFyIGJhc2VHZW5lcmF0b3IgPSBHRU5FUkFUT1I7XG5leHBvcnRzLmJhc2VHZW5lcmF0b3IgPSBiYXNlR2VuZXJhdG9yO1xuXG52YXIgU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0YXRlKG9wdGlvbnMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RhdGUpO1xuXG4gICAgdmFyIHNldHVwID0gb3B0aW9ucyA9PSBudWxsID8gRU1QVFlfT0JKRUNUIDogb3B0aW9ucztcbiAgICB0aGlzLm91dHB1dCA9ICcnO1xuXG4gICAgaWYgKHNldHVwLm91dHB1dCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm91dHB1dCA9IHNldHVwLm91dHB1dDtcbiAgICAgIHRoaXMud3JpdGUgPSB0aGlzLndyaXRlVG9TdHJlYW07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3V0cHV0ID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5nZW5lcmF0b3IgPSBzZXR1cC5nZW5lcmF0b3IgIT0gbnVsbCA/IHNldHVwLmdlbmVyYXRvciA6IEdFTkVSQVRPUjtcbiAgICB0aGlzLmV4cHJlc3Npb25zUHJlY2VkZW5jZSA9IHNldHVwLmV4cHJlc3Npb25zUHJlY2VkZW5jZSAhPSBudWxsID8gc2V0dXAuZXhwcmVzc2lvbnNQcmVjZWRlbmNlIDogRVhQUkVTU0lPTlNfUFJFQ0VERU5DRTtcbiAgICB0aGlzLmluZGVudCA9IHNldHVwLmluZGVudCAhPSBudWxsID8gc2V0dXAuaW5kZW50IDogJyAgJztcbiAgICB0aGlzLmxpbmVFbmQgPSBzZXR1cC5saW5lRW5kICE9IG51bGwgPyBzZXR1cC5saW5lRW5kIDogJ1xcbic7XG4gICAgdGhpcy5pbmRlbnRMZXZlbCA9IHNldHVwLnN0YXJ0aW5nSW5kZW50TGV2ZWwgIT0gbnVsbCA/IHNldHVwLnN0YXJ0aW5nSW5kZW50TGV2ZWwgOiAwO1xuICAgIHRoaXMud3JpdGVDb21tZW50cyA9IHNldHVwLmNvbW1lbnRzID8gc2V0dXAuY29tbWVudHMgOiBmYWxzZTtcblxuICAgIGlmIChzZXR1cC5zb3VyY2VNYXAgIT0gbnVsbCkge1xuICAgICAgdGhpcy53cml0ZSA9IHNldHVwLm91dHB1dCA9PSBudWxsID8gdGhpcy53cml0ZUFuZE1hcCA6IHRoaXMud3JpdGVUb1N0cmVhbUFuZE1hcDtcbiAgICAgIHRoaXMuc291cmNlTWFwID0gc2V0dXAuc291cmNlTWFwO1xuICAgICAgdGhpcy5saW5lID0gMTtcbiAgICAgIHRoaXMuY29sdW1uID0gMDtcbiAgICAgIHRoaXMubGluZUVuZFNpemUgPSB0aGlzLmxpbmVFbmQuc3BsaXQoJ1xcbicpLmxlbmd0aCAtIDE7XG4gICAgICB0aGlzLm1hcHBpbmcgPSB7XG4gICAgICAgIG9yaWdpbmFsOiBudWxsLFxuICAgICAgICBnZW5lcmF0ZWQ6IHRoaXMsXG4gICAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgc291cmNlOiBzZXR1cC5zb3VyY2VNYXAuZmlsZSB8fCBzZXR1cC5zb3VyY2VNYXAuX2ZpbGVcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN0YXRlLCBbe1xuICAgIGtleTogXCJ3cml0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZShjb2RlKSB7XG4gICAgICB0aGlzLm91dHB1dCArPSBjb2RlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZVRvU3RyZWFtXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlVG9TdHJlYW0oY29kZSkge1xuICAgICAgdGhpcy5vdXRwdXQud3JpdGUoY29kZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIndyaXRlQW5kTWFwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlQW5kTWFwKGNvZGUsIG5vZGUpIHtcbiAgICAgIHRoaXMub3V0cHV0ICs9IGNvZGU7XG4gICAgICB0aGlzLm1hcChjb2RlLCBub2RlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVUb1N0cmVhbUFuZE1hcFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZVRvU3RyZWFtQW5kTWFwKGNvZGUsIG5vZGUpIHtcbiAgICAgIHRoaXMub3V0cHV0LndyaXRlKGNvZGUpO1xuICAgICAgdGhpcy5tYXAoY29kZSwgbm9kZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm1hcFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtYXAoY29kZSwgbm9kZSkge1xuICAgICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICB2YXIgdHlwZSA9IG5vZGUudHlwZTtcblxuICAgICAgICBpZiAodHlwZVswXSA9PT0gJ0wnICYmIHR5cGVbMl0gPT09ICduJykge1xuICAgICAgICAgIHRoaXMuY29sdW1uID0gMDtcbiAgICAgICAgICB0aGlzLmxpbmUrKztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5sb2MgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5tYXBwaW5nO1xuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWwgPSBub2RlLmxvYy5zdGFydDtcbiAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBub2RlLm5hbWU7XG4gICAgICAgICAgdGhpcy5zb3VyY2VNYXAuYWRkTWFwcGluZyhtYXBwaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlWzBdID09PSAnVCcgJiYgdHlwZVs4XSA9PT0gJ0UnIHx8IHR5cGVbMF0gPT09ICdMJyAmJiB0eXBlWzFdID09PSAnaScgJiYgdHlwZW9mIG5vZGUudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmFyIF9sZW5ndGggPSBjb2RlLmxlbmd0aDtcbiAgICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW4sXG4gICAgICAgICAgICAgIGxpbmUgPSB0aGlzLmxpbmU7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNvZGVbaV0gPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgIGNvbHVtbiA9IDA7XG4gICAgICAgICAgICAgIGxpbmUrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbHVtbisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgICAgIHRoaXMubGluZSA9IGxpbmU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW5ndGggPSBjb2RlLmxlbmd0aDtcbiAgICAgIHZhciBsaW5lRW5kID0gdGhpcy5saW5lRW5kO1xuXG4gICAgICBpZiAobGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodGhpcy5saW5lRW5kU2l6ZSA+IDAgJiYgKGxpbmVFbmQubGVuZ3RoID09PSAxID8gY29kZVtsZW5ndGggLSAxXSA9PT0gbGluZUVuZCA6IGNvZGUuZW5kc1dpdGgobGluZUVuZCkpKSB7XG4gICAgICAgICAgdGhpcy5saW5lICs9IHRoaXMubGluZUVuZFNpemU7XG4gICAgICAgICAgdGhpcy5jb2x1bW4gPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29sdW1uICs9IGxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLm91dHB1dDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3RhdGU7XG59KCk7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlKG5vZGUsIG9wdGlvbnMpIHtcbiAgdmFyIHN0YXRlID0gbmV3IFN0YXRlKG9wdGlvbnMpO1xuICBzdGF0ZS5nZW5lcmF0b3Jbbm9kZS50eXBlXShub2RlLCBzdGF0ZSk7XG4gIHJldHVybiBzdGF0ZS5vdXRwdXQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzdHJpbmcuanMubWFwIiwiXG4vKipcbiAqIEV4cG9zZSBgQmFja29mZmAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBCYWNrb2ZmO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYmFja29mZiB0aW1lciB3aXRoIGBvcHRzYC5cbiAqXG4gKiAtIGBtaW5gIGluaXRpYWwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgWzEwMF1cbiAqIC0gYG1heGAgbWF4IHRpbWVvdXQgWzEwMDAwXVxuICogLSBgaml0dGVyYCBbMF1cbiAqIC0gYGZhY3RvcmAgWzJdXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gQmFja29mZihvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB0aGlzLm1zID0gb3B0cy5taW4gfHwgMTAwO1xuICB0aGlzLm1heCA9IG9wdHMubWF4IHx8IDEwMDAwO1xuICB0aGlzLmZhY3RvciA9IG9wdHMuZmFjdG9yIHx8IDI7XG4gIHRoaXMuaml0dGVyID0gb3B0cy5qaXR0ZXIgPiAwICYmIG9wdHMuaml0dGVyIDw9IDEgPyBvcHRzLmppdHRlciA6IDA7XG4gIHRoaXMuYXR0ZW1wdHMgPSAwO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgYmFja29mZiBkdXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkJhY2tvZmYucHJvdG90eXBlLmR1cmF0aW9uID0gZnVuY3Rpb24oKXtcbiAgdmFyIG1zID0gdGhpcy5tcyAqIE1hdGgucG93KHRoaXMuZmFjdG9yLCB0aGlzLmF0dGVtcHRzKyspO1xuICBpZiAodGhpcy5qaXR0ZXIpIHtcbiAgICB2YXIgcmFuZCA9ICBNYXRoLnJhbmRvbSgpO1xuICAgIHZhciBkZXZpYXRpb24gPSBNYXRoLmZsb29yKHJhbmQgKiB0aGlzLmppdHRlciAqIG1zKTtcbiAgICBtcyA9IChNYXRoLmZsb29yKHJhbmQgKiAxMCkgJiAxKSA9PSAwICA/IG1zIC0gZGV2aWF0aW9uIDogbXMgKyBkZXZpYXRpb247XG4gIH1cbiAgcmV0dXJuIE1hdGgubWluKG1zLCB0aGlzLm1heCkgfCAwO1xufTtcblxuLyoqXG4gKiBSZXNldCB0aGUgbnVtYmVyIG9mIGF0dGVtcHRzLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQmFja29mZi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpe1xuICB0aGlzLmF0dGVtcHRzID0gMDtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtaW5pbXVtIGR1cmF0aW9uXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5CYWNrb2ZmLnByb3RvdHlwZS5zZXRNaW4gPSBmdW5jdGlvbihtaW4pe1xuICB0aGlzLm1zID0gbWluO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1heGltdW0gZHVyYXRpb25cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkJhY2tvZmYucHJvdG90eXBlLnNldE1heCA9IGZ1bmN0aW9uKG1heCl7XG4gIHRoaXMubWF4ID0gbWF4O1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGppdHRlclxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQmFja29mZi5wcm90b3R5cGUuc2V0Sml0dGVyID0gZnVuY3Rpb24oaml0dGVyKXtcbiAgdGhpcy5qaXR0ZXIgPSBqaXR0ZXI7XG59O1xuXG4iLCIvKlxuICogYmFzZTY0LWFycmF5YnVmZmVyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmlrbGFzdmgvYmFzZTY0LWFycmF5YnVmZmVyXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEyIE5pa2xhcyB2b24gSGVydHplblxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG4oZnVuY3Rpb24oY2hhcnMpe1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBleHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uKGFycmF5YnVmZmVyKSB7XG4gICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLFxuICAgIGksIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gXCJcIjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrPTMpIHtcbiAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpXSA+PiAyXTtcbiAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTtcbiAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2kgKyAxXSAmIDE1KSA8PCAyKSB8IChieXRlc1tpICsgMl0gPj4gNildO1xuICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kgKyAyXSAmIDYzXTtcbiAgICB9XG5cbiAgICBpZiAoKGxlbiAlIDMpID09PSAyKSB7XG4gICAgICBiYXNlNjQgPSBiYXNlNjQuc3Vic3RyaW5nKDAsIGJhc2U2NC5sZW5ndGggLSAxKSArIFwiPVwiO1xuICAgIH0gZWxzZSBpZiAobGVuICUgMyA9PT0gMSkge1xuICAgICAgYmFzZTY0ID0gYmFzZTY0LnN1YnN0cmluZygwLCBiYXNlNjQubGVuZ3RoIC0gMikgKyBcIj09XCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U2NDtcbiAgfTtcblxuICBleHBvcnRzLmRlY29kZSA9ICBmdW5jdGlvbihiYXNlNjQpIHtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYmFzZTY0Lmxlbmd0aCAqIDAuNzUsXG4gICAgbGVuID0gYmFzZTY0Lmxlbmd0aCwgaSwgcCA9IDAsXG4gICAgZW5jb2RlZDEsIGVuY29kZWQyLCBlbmNvZGVkMywgZW5jb2RlZDQ7XG5cbiAgICBpZiAoYmFzZTY0W2Jhc2U2NC5sZW5ndGggLSAxXSA9PT0gXCI9XCIpIHtcbiAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgaWYgKGJhc2U2NFtiYXNlNjQubGVuZ3RoIC0gMl0gPT09IFwiPVwiKSB7XG4gICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhcnJheWJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpLFxuICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSs9NCkge1xuICAgICAgZW5jb2RlZDEgPSBjaGFycy5pbmRleE9mKGJhc2U2NFtpXSk7XG4gICAgICBlbmNvZGVkMiA9IGNoYXJzLmluZGV4T2YoYmFzZTY0W2krMV0pO1xuICAgICAgZW5jb2RlZDMgPSBjaGFycy5pbmRleE9mKGJhc2U2NFtpKzJdKTtcbiAgICAgIGVuY29kZWQ0ID0gY2hhcnMuaW5kZXhPZihiYXNlNjRbaSszXSk7XG5cbiAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDEgPDwgMikgfCAoZW5jb2RlZDIgPj4gNCk7XG4gICAgICBieXRlc1twKytdID0gKChlbmNvZGVkMiAmIDE1KSA8PCA0KSB8IChlbmNvZGVkMyA+PiAyKTtcbiAgICAgIGJ5dGVzW3ArK10gPSAoKGVuY29kZWQzICYgMykgPDwgNikgfCAoZW5jb2RlZDQgJiA2Myk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5YnVmZmVyO1xuICB9O1xufSkoXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIpO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIvKipcclxuICogQ3JlYXRlIGEgYmxvYiBidWlsZGVyIGV2ZW4gd2hlbiB2ZW5kb3IgcHJlZml4ZXMgZXhpc3RcclxuICovXHJcblxyXG52YXIgQmxvYkJ1aWxkZXIgPSB0eXBlb2YgQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gQmxvYkJ1aWxkZXIgOlxyXG4gIHR5cGVvZiBXZWJLaXRCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCcgPyBXZWJLaXRCbG9iQnVpbGRlciA6XHJcbiAgdHlwZW9mIE1TQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gTVNCbG9iQnVpbGRlciA6XHJcbiAgdHlwZW9mIE1vekJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IE1vekJsb2JCdWlsZGVyIDogXHJcbiAgZmFsc2U7XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgQmxvYiBjb25zdHJ1Y3RvciBpcyBzdXBwb3J0ZWRcclxuICovXHJcblxyXG52YXIgYmxvYlN1cHBvcnRlZCA9IChmdW5jdGlvbigpIHtcclxuICB0cnkge1xyXG4gICAgdmFyIGEgPSBuZXcgQmxvYihbJ2hpJ10pO1xyXG4gICAgcmV0dXJuIGEuc2l6ZSA9PT0gMjtcclxuICB9IGNhdGNoKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn0pKCk7XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgQmxvYiBjb25zdHJ1Y3RvciBzdXBwb3J0cyBBcnJheUJ1ZmZlclZpZXdzXHJcbiAqIEZhaWxzIGluIFNhZmFyaSA2LCBzbyB3ZSBuZWVkIHRvIG1hcCB0byBBcnJheUJ1ZmZlcnMgdGhlcmUuXHJcbiAqL1xyXG5cclxudmFyIGJsb2JTdXBwb3J0c0FycmF5QnVmZmVyVmlldyA9IGJsb2JTdXBwb3J0ZWQgJiYgKGZ1bmN0aW9uKCkge1xyXG4gIHRyeSB7XHJcbiAgICB2YXIgYiA9IG5ldyBCbG9iKFtuZXcgVWludDhBcnJheShbMSwyXSldKTtcclxuICAgIHJldHVybiBiLnNpemUgPT09IDI7XHJcbiAgfSBjYXRjaChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIEJsb2JCdWlsZGVyIGlzIHN1cHBvcnRlZFxyXG4gKi9cclxuXHJcbnZhciBibG9iQnVpbGRlclN1cHBvcnRlZCA9IEJsb2JCdWlsZGVyXHJcbiAgJiYgQmxvYkJ1aWxkZXIucHJvdG90eXBlLmFwcGVuZFxyXG4gICYmIEJsb2JCdWlsZGVyLnByb3RvdHlwZS5nZXRCbG9iO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IG1hcHMgQXJyYXlCdWZmZXJWaWV3cyB0byBBcnJheUJ1ZmZlcnNcclxuICogVXNlZCBieSBCbG9iQnVpbGRlciBjb25zdHJ1Y3RvciBhbmQgb2xkIGJyb3dzZXJzIHRoYXQgZGlkbid0XHJcbiAqIHN1cHBvcnQgaXQgaW4gdGhlIEJsb2IgY29uc3RydWN0b3IuXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWFwQXJyYXlCdWZmZXJWaWV3cyhhcnkpIHtcclxuICByZXR1cm4gYXJ5Lm1hcChmdW5jdGlvbihjaHVuaykge1xyXG4gICAgaWYgKGNodW5rLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XHJcbiAgICAgIHZhciBidWYgPSBjaHVuay5idWZmZXI7XHJcblxyXG4gICAgICAvLyBpZiB0aGlzIGlzIGEgc3ViYXJyYXksIG1ha2UgYSBjb3B5IHNvIHdlIG9ubHlcclxuICAgICAgLy8gaW5jbHVkZSB0aGUgc3ViYXJyYXkgcmVnaW9uIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyXHJcbiAgICAgIGlmIChjaHVuay5ieXRlTGVuZ3RoICE9PSBidWYuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIHZhciBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoY2h1bmsuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgY29weS5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmLCBjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKSk7XHJcbiAgICAgICAgYnVmID0gY29weS5idWZmZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBidWY7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNodW5rO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBCbG9iQnVpbGRlckNvbnN0cnVjdG9yKGFyeSwgb3B0aW9ucykge1xyXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICB2YXIgYmIgPSBuZXcgQmxvYkJ1aWxkZXIoKTtcclxuICBtYXBBcnJheUJ1ZmZlclZpZXdzKGFyeSkuZm9yRWFjaChmdW5jdGlvbihwYXJ0KSB7XHJcbiAgICBiYi5hcHBlbmQocGFydCk7XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiAob3B0aW9ucy50eXBlKSA/IGJiLmdldEJsb2Iob3B0aW9ucy50eXBlKSA6IGJiLmdldEJsb2IoKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIEJsb2JDb25zdHJ1Y3RvcihhcnksIG9wdGlvbnMpIHtcclxuICByZXR1cm4gbmV3IEJsb2IobWFwQXJyYXlCdWZmZXJWaWV3cyhhcnkpLCBvcHRpb25zIHx8IHt9KTtcclxufTtcclxuXHJcbmlmICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICBCbG9iQnVpbGRlckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IEJsb2IucHJvdG90eXBlO1xyXG4gIEJsb2JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBCbG9iLnByb3RvdHlwZTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7XHJcbiAgaWYgKGJsb2JTdXBwb3J0ZWQpIHtcclxuICAgIHJldHVybiBibG9iU3VwcG9ydHNBcnJheUJ1ZmZlclZpZXcgPyBCbG9iIDogQmxvYkNvbnN0cnVjdG9yO1xyXG4gIH0gZWxzZSBpZiAoYmxvYkJ1aWxkZXJTdXBwb3J0ZWQpIHtcclxuICAgIHJldHVybiBCbG9iQnVpbGRlckNvbnN0cnVjdG9yO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxufSkoKTtcclxuIiwiIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbnZhciBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0geyBfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ3BhcmVudCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5idWZmZXJcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdvZmZzZXQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnl0ZU9mZnNldFxuICB9XG59KVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAobGVuZ3RoID4gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBsZW5ndGggKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYnVmXG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICE9IG51bGwgJiZcbiAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gICAgKVxuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgIClcbiAgfVxuXG4gIHZhciB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICB2YXIgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbkJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbkJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgYnVmID0gYnVmLnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGJ1ZltpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgdmFyIGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgYnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0IChvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW4pXG5cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJ1ZlxuICAgIH1cblxuICAgIG9iai5jb3B5KGJ1ZiwgMCwgMCwgbGVuKVxuICAgIHJldHVybiBidWZcbiAgfVxuXG4gIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IG51bWJlcklzTmFOKG9iai5sZW5ndGgpKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApXG4gICAgfVxuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iailcbiAgfVxuXG4gIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmouZGF0YSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwgS19NQVhfTEVOR1RIYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiBiICE9IG51bGwgJiYgYi5faXNCdWZmZXIgPT09IHRydWUgJiZcbiAgICBiICE9PSBCdWZmZXIucHJvdG90eXBlIC8vIHNvIEJ1ZmZlci5pc0J1ZmZlcihCdWZmZXIucHJvdG90eXBlKSB3aWxsIGJlIGZhbHNlXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoaXNJbnN0YW5jZShhLCBVaW50OEFycmF5KSkgYSA9IEJ1ZmZlci5mcm9tKGEsIGEub2Zmc2V0LCBhLmJ5dGVMZW5ndGgpXG4gIGlmIChpc0luc3RhbmNlKGIsIFVpbnQ4QXJyYXkpKSBiID0gQnVmZmVyLmZyb20oYiwgYi5vZmZzZXQsIGIuYnl0ZUxlbmd0aClcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheSdcbiAgICApXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoaXNJbnN0YW5jZShidWYsIFVpbnQ4QXJyYXkpKSB7XG4gICAgICBidWYgPSBCdWZmZXIuZnJvbShidWYpXG4gICAgfVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc3RyaW5nXG4gICAgKVxuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIG11c3RNYXRjaCA9IChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gPT09IHRydWUpXG4gIGlmICghbXVzdE1hdGNoICYmIGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkge1xuICAgICAgICAgIHJldHVybiBtdXN0TWF0Y2ggPyAtMSA6IHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIH1cbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgKGFuZCB0aGUgYGlzLWJ1ZmZlcmAgbnBtIHBhY2thZ2UpXG4vLyB0byBkZXRlY3QgYSBCdWZmZXIgaW5zdGFuY2UuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJgXG4vLyByZWxpYWJseSBpbiBhIGJyb3dzZXJpZnkgY29udGV4dCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudFxuLy8gY29waWVzIG9mIHRoZSAnYnVmZmVyJyBwYWNrYWdlIGluIHVzZS4gVGhpcyBtZXRob2Qgd29ya3MgZXZlbiBmb3IgQnVmZmVyXG4vLyBpbnN0YW5jZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSBhbm90aGVyIGNvcHkgb2YgdGhlIGBidWZmZXJgIHBhY2thZ2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNTRcbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nXG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkucmVwbGFjZSgvKC57Mn0pL2csICckMSAnKS50cmltKClcbiAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoaXNJbnN0YW5jZSh0YXJnZXQsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdGFyZ2V0ID0gQnVmZmVyLmZyb20odGFyZ2V0LCB0YXJnZXQub2Zmc2V0LCB0YXJnZXQuYnl0ZUxlbmd0aClcbiAgfVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ0YXJnZXRcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHRhcmdldClcbiAgICApXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0IC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChudW1iZXJJc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA+Pj4gMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXInKVxuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFVzZSBidWlsdC1pbiB3aGVuIGF2YWlsYWJsZSwgbWlzc2luZyBmcm9tIElFMTFcbiAgICB0aGlzLmNvcHlXaXRoaW4odGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmICgoZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBjb2RlIDwgMTI4KSB8fFxuICAgICAgICAgIGVuY29kaW5nID09PSAnbGF0aW4xJykge1xuICAgICAgICAvLyBGYXN0IHBhdGg6IElmIGB2YWxgIGZpdHMgaW50byBhIHNpbmdsZSBieXRlLCB1c2UgdGhhdCBudW1lcmljIHZhbHVlLlxuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIFwiJyArIHZhbCArXG4gICAgICAgICdcIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCBcInZhbHVlXCInKVxuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHRha2VzIGVxdWFsIHNpZ25zIGFzIGVuZCBvZiB0aGUgQmFzZTY0IGVuY29kaW5nXG4gIHN0ciA9IHN0ci5zcGxpdCgnPScpWzBdXG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXIgb3IgVWludDhBcnJheSBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMgKGkuZS4gaWZyYW1lcykgZG8gbm90IHBhc3Ncbi8vIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2sgYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb2YgdGhhdCB0eXBlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5mdW5jdGlvbiBpc0luc3RhbmNlIChvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHxcbiAgICAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZSlcbn1cbmZ1bmN0aW9uIG51bWJlcklzTmFOIChvYmopIHtcbiAgLy8gRm9yIElFMTEgc3VwcG9ydFxuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnLi8nKTtcblxudmFyICRpbmRleE9mID0gY2FsbEJpbmQoR2V0SW50cmluc2ljKCdTdHJpbmcucHJvdG90eXBlLmluZGV4T2YnKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJvdW5kSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljID0gR2V0SW50cmluc2ljKG5hbWUsICEhYWxsb3dNaXNzaW5nKTtcblx0aWYgKHR5cGVvZiBpbnRyaW5zaWMgPT09ICdmdW5jdGlvbicgJiYgJGluZGV4T2YobmFtZSwgJy5wcm90b3R5cGUuJykgPiAtMSkge1xuXHRcdHJldHVybiBjYWxsQmluZChpbnRyaW5zaWMpO1xuXHR9XG5cdHJldHVybiBpbnRyaW5zaWM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcblxudmFyIHN0b3JhZ2UgPSByZXF1aXJlKCcuL2xpYi9zdG9yYWdlJylcbnZhciBsb2dnZXIgPSByZXF1aXJlKCcuL2xpYi9sb2dnZXInKVxudmFyIGRlYnVnID0gcmVxdWlyZSgnLi9saWIvZGVidWcnKVxudmFyIGNvcHkgPSByZXF1aXJlKCcuL2xpYi9jb3B5JylcbnZhciBoZWxwID0gcmVxdWlyZSgnLi9saWIvaGVscCcpXG52YXIgcGVyZiA9IHJlcXVpcmUoJy4vbGliL3BlcmYnKVxudmFyIGxvZyA9IHJlcXVpcmUoJy4vbGliL2xvZycpXG52YXIgZ2V0QWxsUm91dGVzID0gcmVxdWlyZSgnd2F5ZmFyZXIvZ2V0LWFsbC1yb3V0ZXMnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9zZVxuXG5mdW5jdGlvbiBleHBvc2UgKG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgc3RvcmUuc3RvcmVOYW1lID0gJ2Nob28tZGV2dG9vbHMnXG4gIHJldHVybiBzdG9yZVxuICBmdW5jdGlvbiBzdG9yZSAoc3RhdGUsIGVtaXR0ZXIsIGFwcCkge1xuICAgIHZhciBsb2NhbEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbG9nZ2VyKHN0YXRlLCBlbWl0dGVyLCBvcHRzKVxuICAgIH1cblxuICAgIGVtaXR0ZXIub24oJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVyblxuICAgICAgd2luZG93LmNob28gPSB7fVxuXG4gICAgICB3aW5kb3cuY2hvby5zdGF0ZSA9IHN0YXRlXG4gICAgICB3aW5kb3cuY2hvby5lbWl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBlbWl0dGVyLmVtaXQuYXBwbHkoZW1pdHRlciwgYXJndW1lbnRzKVxuICAgICAgfVxuICAgICAgd2luZG93LmNob28ub24gPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgICBlbWl0dGVyLm9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpXG4gICAgICB9XG5cbiAgICAgIGRlYnVnKHN0YXRlLCBlbWl0dGVyLCBhcHAsIGxvY2FsRW1pdHRlcilcblxuICAgICAgbG9nKHN0YXRlLCBlbWl0dGVyLCBhcHAsIGxvY2FsRW1pdHRlcilcbiAgICAgIHBlcmYoc3RhdGUsIGVtaXR0ZXIsIGFwcCwgbG9jYWxFbWl0dGVyKVxuICAgICAgd2luZG93LmNob28uY29weSA9IGNvcHlcbiAgICAgIGlmIChhcHAucm91dGVyICYmIGFwcC5yb3V0ZXIucm91dGVyKSB7XG4gICAgICAgIHdpbmRvdy5jaG9vLnJvdXRlcyA9IE9iamVjdC5rZXlzKGdldEFsbFJvdXRlcyhhcHAucm91dGVyLnJvdXRlcikpXG4gICAgICB9XG5cbiAgICAgIHN0b3JhZ2UoKVxuICAgICAgaGVscCgpXG4gICAgfSlcbiAgfVxufVxuIiwidmFyIHN0YXRlQ29weSA9IHJlcXVpcmUoJ3N0YXRlLWNvcHknKVxudmFyIHBsdWNrID0gcmVxdWlyZSgncGx1Y2tlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gY29weVxuXG5mdW5jdGlvbiBjb3B5IChzdGF0ZSkge1xuICB2YXIgaXNTdGF0ZVN0cmluZyA9IHN0YXRlICYmIHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZydcbiAgdmFyIGlzQ2hvb1BhdGggPSBpc1N0YXRlU3RyaW5nICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgc3RhdGUuaW5kZXhPZignc3RhdGUuJykgPT09IDBcblxuICBpZiAoIXN0YXRlIHx8IHR5cGVvZiBzdGF0ZSA9PT0gJ2Z1bmN0aW9uJykgc3RhdGUgPSB3aW5kb3cuY2hvby5zdGF0ZVxuICBpZiAoaXNDaG9vUGF0aCkgW10ucHVzaC5jYWxsKGFyZ3VtZW50cywgeyBzdGF0ZTogd2luZG93LmNob28uc3RhdGUgfSlcblxuICBzdGF0ZUNvcHkoaXNTdGF0ZVN0cmluZyA/IHBsdWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBzdGF0ZSlcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBvbkNoYW5nZSA9IHJlcXVpcmUoJ29iamVjdC1jaGFuZ2UtY2FsbHNpdGUnKVxudmFyIG5hbm9sb2dnZXIgPSByZXF1aXJlKCduYW5vbG9nZ2VyJylcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG52YXIgZW5hYmxlZE1lc3NhZ2UgPSAnRGVidWdnaW5nIGVuYWJsZWQuIFRvIGRpc2FibGUgcnVuOiBgY2hvby5kZWJ1ZyA9IGZhbHNlYCdcbnZhciBkaXNhYmxlZE1lc3NhZ2UgPSAnRGVidWdnaW5nIGRpc2FibGVkLiBXZSBob3BlIGl0IHdhcyBoZWxwZnVsISDwn5mMJ1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYnVnXG5cbmZ1bmN0aW9uIGRlYnVnIChzdGF0ZSwgZW1pdHRlciwgYXBwLCBsb2NhbEVtaXR0ZXIpIHtcbiAgdmFyIGxvZyA9IG5hbm9sb2dnZXIoJ2Nob28tZGV2dG9vbHMnKVxuICB2YXIgZW5hYmxlZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UubG9nTGV2ZWwgPT09ICdkZWJ1ZydcbiAgaWYgKGVuYWJsZWQpIGxvZy5pbmZvKGVuYWJsZWRNZXNzYWdlKVxuXG4gIHN0YXRlID0gb25DaGFuZ2Uoc3RhdGUsIGZ1bmN0aW9uIChhdHRyLCB2YWx1ZSwgY2FsbHNpdGUpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHJldHVyblxuICAgIGNhbGxzaXRlID0gY2FsbHNpdGUuc3BsaXQoJ1xcbicpWzFdLnJlcGxhY2UoL14gKy8sICcnKVxuICAgIGxvZy5pbmZvKCdzdGF0ZS4nICsgYXR0ciwgdmFsdWUsICdcXG4nICsgY2FsbHNpdGUpXG4gIH0pXG5cbiAgYXBwLnN0YXRlID0gc3RhdGVcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmNob28sICdkZWJ1ZycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UubG9nTGV2ZWwgPSAnZGVidWcnXG4gICAgICBsb2NhbEVtaXR0ZXIuZW1pdCgnZGVidWcnLCB0cnVlKVxuICAgICAgZW5hYmxlZCA9IHRydWVcbiAgICAgIHJldHVybiBlbmFibGVkTWVzc2FnZVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoYm9vbCkge1xuICAgICAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBib29sLCAnYm9vbGVhbicsICdjaG9vLWRldnRvb2xzLmRlYnVnOiBib29sIHNob3VsZCBiZSB0eXBlIGJvb2xlYW4nKVxuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5sb2dMZXZlbCA9IGJvb2wgPyAnZGVidWcnIDogJ2luZm8nXG4gICAgICBlbmFibGVkID0gYm9vbFxuICAgICAgbG9jYWxFbWl0dGVyLmVtaXQoJ2RlYnVnJywgZW5hYmxlZClcbiAgICAgIGlmIChlbmFibGVkKSBsb2cuaW5mbyhlbmFibGVkTWVzc2FnZSlcbiAgICAgIGVsc2UgbG9nLmluZm8oZGlzYWJsZWRNZXNzYWdlKVxuICAgIH1cbiAgfSlcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gaGVscFxuXG5mdW5jdGlvbiBoZWxwICgpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5jaG9vLCAnaGVscCcsIHtcbiAgICBnZXQ6IGdldCxcbiAgICBzZXQ6IG5vb3BcbiAgfSlcblxuICBmdW5jdGlvbiBnZXQgKCkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcHJpbnQoJ2NvcHknLCAnU2VyaWFsaXplIHRoZSBjdXJyZW50IHN0YXRlIHRvIHRoZSBjbGlwYm9hcmQuJylcbiAgICAgIHByaW50KCdkZWJ1ZycsICdFbmFibGUgQ2hvbyBkZWJ1ZyBtb2RlLicpXG4gICAgICBwcmludCgnZW1pdCcsICdFbWl0IGFuIGV2ZW50IGluIHRoZSBDaG9vIGVtaXR0ZXIuJylcbiAgICAgIHByaW50KCdoZWxwJywgJ1ByaW50IHVzYWdlIGluZm9ybWF0aW9uLicpXG4gICAgICBwcmludCgnbG9nJywgJ1ByaW50IHRoZSBsYXN0IDE1MCBldmVudHMgZW1pdHRlZC4nKVxuICAgICAgcHJpbnQoJ29uJywgJ0xpc3RlbiBmb3IgYW4gZXZlbnQgaW4gdGhlIENob28gZW1pdHRlci4nKVxuICAgICAgcHJpbnQoJ29uY2UnLCAnTGlzdGVuIGZvciBhbiBldmVudCBvbmNlIGluIHRoZSBDaG9vIGVtaXR0ZXIuJylcbiAgICAgIHByaW50KCdwZXJmJywgJ1ByaW50IG91dCBwZXJmb3JtYW5jZSBtZXRyaWNzJylcbiAgICAgIHByaW50KCdzdGF0ZScsICdQcmludCB0aGUgQ2hvbyBzdGF0ZSBvYmplY3QuJylcbiAgICAgIHByaW50KCdzdG9yYWdlJywgJ1ByaW50IGJyb3dzZXIgc3RvcmFnZSBpbmZvcm1hdGlvbi4nKVxuICAgIH0sIDApXG4gICAgcmV0dXJuICdDaG9vIGNvbW1hbmQgb3ZlcnZpZXcnXG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnQgKGNtZCwgZGVzYykge1xuICB2YXIgY29sb3IgPSAnI2NjOTljYydcbiAgY29uc29sZS5sb2coJyAgJWNjaG9vLicgKyBjbWQsICdjb2xvcjogJyArIGNvbG9yLCAn4oCUICcgKyBkZXNjKVxufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG4iLCJ2YXIgcmVtb3ZlSXRlbXMgPSByZXF1aXJlKCdyZW1vdmUtYXJyYXktaXRlbXMnKVxudmFyIHNjaGVkdWxlciA9IHJlcXVpcmUoJ25hbm9zY2hlZHVsZXInKSgpXG52YXIgbmFub2xvZ2dlciA9IHJlcXVpcmUoJ25hbm9sb2dnZXInKVxudmFyIF9sb2cgPSBuYW5vbG9nZ2VyKCdjaG9vJylcbnZhciBjbG9uZSA9IHJlcXVpcmUoJ2Nsb25lJylcblxudmFyIE1BWF9ISVNUT1JZX0xFTkdUSCA9IDE1MCAvLyBIb3cgbWFueSBpdGVtcyB3ZSBzaG91bGQga2VlcCBhcm91bmRcblxubW9kdWxlLmV4cG9ydHMgPSBsb2dcblxuZnVuY3Rpb24gbG9nIChzdGF0ZSwgZW1pdHRlciwgYXBwLCBsb2NhbEVtaXR0ZXIpIHtcbiAgdmFyIHNob3VsZERlYnVnID0gd2luZG93LmxvY2FsU3RvcmFnZS5sb2dMZXZlbCA9PT0gJ2RlYnVnJ1xuICB2YXIgaGlzdG9yeSA9IFtdXG4gIHZhciBpID0gMFxuICB2YXIgc2hvdWxkV2FybiA9IHRydWVcblxuICBsb2NhbEVtaXR0ZXIub24oJ2RlYnVnJywgZnVuY3Rpb24gKGJvb2wpIHtcbiAgICBzaG91bGREZWJ1ZyA9IGJvb2xcbiAgfSlcblxuICB3aW5kb3cuY2hvby5faGlzdG9yeSA9IGhpc3RvcnlcbiAgd2luZG93LmNob28uaGlzdG9yeSA9IHNob3dIaXN0b3J5XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5jaG9vLCAnbG9nJywgeyBnZXQ6IHNob3dIaXN0b3J5LCBzZXQ6IG5vb3AgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5jaG9vLCAnaGlzdG9yeScsIHsgZ2V0OiBzaG93SGlzdG9yeSwgc2V0OiBub29wIH0pXG5cbiAgZW1pdHRlci5vbignKicsIGZ1bmN0aW9uIChuYW1lLCBkYXRhKSB7XG4gICAgaSArPSAxXG4gICAgdmFyIGVudHJ5ID0gbmV3IEV2ZW50KG5hbWUsIGRhdGEsIHN0YXRlKVxuICAgIGhpc3RvcnkucHVzaChlbnRyeSlcbiAgICBzY2hlZHVsZXIucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gaGlzdG9yeS5sZW5ndGhcbiAgICAgIGlmIChsZW5ndGggPiBNQVhfSElTVE9SWV9MRU5HVEgpIHtcbiAgICAgICAgcmVtb3ZlSXRlbXMoaGlzdG9yeSwgMCwgbGVuZ3RoIC0gTUFYX0hJU1RPUllfTEVOR1RIKVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG5cbiAgZnVuY3Rpb24gc2hvd0hpc3RvcnkgKCkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgY29uc29sZS50YWJsZShoaXN0b3J5KVxuICAgIH0sIDApXG4gICAgdmFyIGV2ZW50cyA9IGkgPT09IDEgPyAnZXZlbnQnIDogJ2V2ZW50cydcbiAgICB2YXIgbXNnID0gaSArICcgJyArIGV2ZW50cyArICcgcmVjb3JkZWQsIHNob3dpbmcgdGhlIGxhc3QgJyArIE1BWF9ISVNUT1JZX0xFTkdUSCArICcuJ1xuICAgIGlmIChzaG91bGREZWJ1ZyA9PT0gZmFsc2UpIHtcbiAgICAgIG1zZyArPSAnIEVuYWJsZSBzdGF0ZSBjYXB0dXJlIGJ5IGNhbGxpbmcgYGNob28uZGVidWdgLidcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnICs9ICcgRGlzYWJsZSBzdGF0ZSBjYXB0dXJlIGJ5IGNhbGxpbmcgYGNob28uZGVidWcgPSBmYWxzZWAuJ1xuICAgIH1cbiAgICByZXR1cm4gbXNnXG4gIH1cblxuICBmdW5jdGlvbiBFdmVudCAobmFtZSwgZGF0YSwgc3RhdGUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdGhpcy5kYXRhID0gZGF0YSA9PT0gdW5kZWZpbmVkID8gJzxubyBkYXRhPicgOiBkYXRhXG4gICAgdGhpcy5zdGF0ZSA9IHNob3VsZERlYnVnXG4gICAgICA/IHRyeUNsb25lKHN0YXRlKVxuICAgICAgOiAnPGRpc2FibGVkPidcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeUNsb25lIChzdGF0ZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgX3N0YXRlID0gY2xvbmUoc3RhdGUpXG4gICAgICBpZiAoIXNob3VsZFdhcm4pIHNob3VsZFdhcm4gPSB0cnVlXG4gICAgICByZXR1cm4gX3N0YXRlXG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChzaG91bGRXYXJuKSB7XG4gICAgICAgIF9sb2cud2FybignQ291bGQgbm90IGNsb25lIHlvdXIgYXBwIHN0YXRlLiBNYWtlIHN1cmUgdG8gaGF2ZSBhIHNlcmlhbGl6YWJsZSBzdGF0ZSBzbyBpdCBjYW4gYmUgY2xvbmVkJylcbiAgICAgICAgc2hvdWxkV2FybiA9IGZhbHNlXG4gICAgICB9XG4gICAgICByZXR1cm4gJzx1bnNlcmlhbGl6YWJsZT4nXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cbiIsInZhciBzY2hlZHVsZXIgPSByZXF1aXJlKCduYW5vc2NoZWR1bGVyJykoKVxudmFyIG5hbm9sb2dnZXIgPSByZXF1aXJlKCduYW5vbG9nZ2VyJylcbnZhciBIb29rcyA9IHJlcXVpcmUoJ2Nob28taG9va3MnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZ2dlclxuXG5mdW5jdGlvbiBsb2dnZXIgKHN0YXRlLCBlbWl0dGVyLCBvcHRzKSB7XG4gIHZhciBpbml0aWFsUmVuZGVyID0gdHJ1ZVxuICB2YXIgaG9va3MgPSBIb29rcyhlbWl0dGVyKVxuICB2YXIgbG9nID0gbmFub2xvZ2dlcignY2hvbycpXG5cbiAgaG9va3Mub24oJ2xvZzpkZWJ1ZycsIGxvZ2dlcignZGVidWcnKSlcbiAgaG9va3Mub24oJ2xvZzppbmZvJywgbG9nZ2VyKCdpbmZvJykpXG4gIGhvb2tzLm9uKCdsb2c6d2FybicsIGxvZ2dlcignd2FybicpKVxuICBob29rcy5vbignbG9nOmVycm9yJywgbG9nZ2VyKCdlcnJvcicpKVxuICBob29rcy5vbignbG9nOmZhdGFsJywgbG9nZ2VyKCdmYXRhbCcpKVxuXG4gIGhvb2tzLm9uKCdldmVudCcsIGZ1bmN0aW9uIChldmVudE5hbWUsIGRhdGEsIHRpbWluZykge1xuICAgIGlmIChvcHRzLmZpbHRlciAmJiAhb3B0cy5maWx0ZXIoZXZlbnROYW1lLCBkYXRhLCB0aW1pbmcpKSByZXR1cm5cblxuICAgIGlmICh0aW1pbmcpIHtcbiAgICAgIHZhciBkdXJhdGlvbiA9IHRpbWluZy5kdXJhdGlvbi50b0ZpeGVkKClcbiAgICAgIHZhciBsZXZlbCA9IGR1cmF0aW9uIDwgNTAgPyAnaW5mbycgOiAnd2FybidcbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIGxvZ2dlcihsZXZlbCkoZXZlbnROYW1lLCBkYXRhLCBkdXJhdGlvbiArICdtcycpXG4gICAgICBlbHNlIGxvZ2dlcihsZXZlbCkoZXZlbnROYW1lLCBkdXJhdGlvbiArICdtcycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIGxvZ2dlcignaW5mbycpKGV2ZW50TmFtZSwgZGF0YSlcbiAgICAgIGVsc2UgbG9nZ2VyKCdpbmZvJykoZXZlbnROYW1lKVxuICAgIH1cbiAgfSlcblxuICBob29rcy5vbigndW5oYW5kbGVkJywgZnVuY3Rpb24gKGV2ZW50TmFtZSwgZGF0YSkge1xuICAgIGxvZ2dlcignZXJyb3InKSgnTm8gbGlzdGVuZXJzIGZvciAnICsgZXZlbnROYW1lKVxuICB9KVxuXG4gIGhvb2tzLm9uKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKHRpbWluZykge1xuICAgIGlmICghdGltaW5nKSByZXR1cm4gbG9nZ2VyKCdpbmZvJykoJ0RPTUNvbnRlbnRMb2FkZWQnKVxuICAgIHZhciBsZXZlbCA9IHRpbWluZy5pbnRlcmFjdGl2ZSA8IDEwMDAgPyAnaW5mbycgOiAnd2FybidcbiAgICBsb2dnZXIobGV2ZWwpKCdET01Db250ZW50TG9hZGVkJywgdGltaW5nLmludGVyYWN0aXZlICsgJ21zIHRvIGludGVyYWN0aXZlJylcbiAgfSlcblxuICBob29rcy5vbigncmVuZGVyJywgZnVuY3Rpb24gKHRpbWluZ3MpIHtcbiAgICBpZiAoIXRpbWluZ3MgfHwgIXRpbWluZ3MucmVuZGVyKSByZXR1cm4gbG9nZ2VyKCdpbmZvJykoJ3JlbmRlcicpXG4gICAgdmFyIGR1cmF0aW9uID0gdGltaW5ncy5yZW5kZXIuZHVyYXRpb24udG9GaXhlZCgpXG4gICAgdmFyIG1zZyA9ICdyZW5kZXInXG5cbiAgICBpZiAoaW5pdGlhbFJlbmRlcikge1xuICAgICAgaW5pdGlhbFJlbmRlciA9IGZhbHNlXG4gICAgICBtc2cgPSAnaW5pdGlhbCAnICsgbXNnXG4gICAgfVxuXG4gICAgLy8gZWFjaCBmcmFtZSBoYXMgMTBtcyBhdmFpbGFibGUgZm9yIHVzZXJsYW5kIHN0dWZmXG4gICAgdmFyIGZwcyA9IE1hdGgubWluKCg2MDAgLyBkdXJhdGlvbikudG9GaXhlZCgpLCA2MClcblxuICAgIGlmIChmcHMgPT09IDYwKSB7XG4gICAgICBsb2dnZXIoJ2luZm8nKShtc2csIGZwcyArICdmcHMnLCBkdXJhdGlvbiArICdtcycpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0aW1lcyA9IHtcbiAgICAgICAgcmVuZGVyOiB0aW1pbmdzLnJlbmRlci5kdXJhdGlvbi50b0ZpeGVkKCkgKyAnbXMnXG4gICAgICB9XG4gICAgICBpZiAodGltaW5ncy5tb3JwaCkgdGltZXMubW9ycGggPSB0aW1pbmdzLm1vcnBoLmR1cmF0aW9uLnRvRml4ZWQoKSArICdtcydcbiAgICAgIGxvZ2dlcignd2FybicpKG1zZywgZnBzICsgJ2ZwcycsIGR1cmF0aW9uICsgJ21zJywgdGltZXMpXG4gICAgfVxuICB9KVxuXG4gIGhvb2tzLm9uKCdyZXNvdXJjZS10aW1pbmctYnVmZmVyLWZ1bGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgbG9nZ2VyKCdlcnJvcicpKFwiVGhlIGJyb3dzZXIncyBSZXNvdXJjZSBSZXNvdXJjZSB0aW1pbmcgYnVmZmVyIGlzIGZ1bGwuIENhbm5vdCBzdG9yZSBhbnkgbW9yZSB0aW1pbmcgaW5mb3JtYXRpb25cIilcbiAgfSlcblxuICBob29rcy5zdGFydCgpXG5cbiAgZnVuY3Rpb24gbG9nZ2VyIChsZXZlbCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYXJncyA9IFtdXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pXG4gICAgICB9XG4gICAgICBzY2hlZHVsZXIucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvZ1tsZXZlbF0uYXBwbHkobG9nLCBhcmdzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsInZhciBvblBlcmZvcm1hbmNlID0gcmVxdWlyZSgnb24tcGVyZm9ybWFuY2UnKVxuXG52YXIgQkFSID0gJ+KWiCdcblxubW9kdWxlLmV4cG9ydHMgPSBwZXJmXG5cbmZ1bmN0aW9uIHBlcmYgKHN0YXRlLCBlbWl0dGVyLCBhcHAsIGxvY2FsRW1pdHRlcikge1xuICB2YXIgc3RhdHMgPSB7fVxuXG4gIHdpbmRvdy5jaG9vLnBlcmYgPSB7fVxuXG4gIC8vIFByaW50IGFsbCBldmVudHNcbiAgdmFyIGFsbCA9IG5ldyBQZXJmKHN0YXRzLCAnYWxsJylcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5jaG9vLnBlcmYsICdhbGwnLCB7XG4gICAgZ2V0OiBhbGwuZ2V0LmJpbmQoYWxsKSxcbiAgICBzZXQ6IG5vb3BcbiAgfSlcblxuICAvLyBQcmludCBvbmx5IENob28gY29yZSBldmVudHNcbiAgdmFyIGNvcmUgPSBuZXcgUGVyZihzdGF0cywgJ2NvcmUnLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiAvXmNob28vLnRlc3QobmFtZSlcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5jaG9vLnBlcmYsICdjb3JlJywge1xuICAgIGdldDogY29yZS5nZXQuYmluZChjb3JlKSxcbiAgICBzZXQ6IG5vb3BcbiAgfSlcblxuICAvLyBQcmludCBjb21wb25lbnQgZGF0YVxuICB2YXIgY29tcG9uZW50cyA9IG5ldyBQZXJmKHN0YXRzLCAnY29tcG9uZW50cycsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuICEvXmNob28vLnRlc3QobmFtZSkgJiYgIS9eYmFua2FpLy50ZXN0KG5hbWUpXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuY2hvby5wZXJmLCAnY29tcG9uZW50cycsIHtcbiAgICBnZXQ6IGNvbXBvbmVudHMuZ2V0LmJpbmQoY29tcG9uZW50cyksXG4gICAgc2V0OiBub29wXG4gIH0pXG5cbiAgLy8gUHJpbnQgY2hvbyB1c2VybGFuZCBldmVudHMgKGV2ZW50IGVtaXR0ZXIpXG4gIHZhciBldmVudHMgPSBuZXcgUGVyZihzdGF0cywgJ2V2ZW50cycsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIC9eY2hvb1xcLmVtaXQvLnRlc3QobmFtZSlcbiAgfSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9eY2hvb1xcLmVtaXRcXCgnLywgJycpLnJlcGxhY2UoLydcXCkkLywgJycpXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuY2hvby5wZXJmLCAnZXZlbnRzJywge1xuICAgIGdldDogZXZlbnRzLmdldC5iaW5kKGV2ZW50cyksXG4gICAgc2V0OiBub29wXG4gIH0pXG5cbiAgb25QZXJmb3JtYW5jZShmdW5jdGlvbiAoZW50cnkpIHtcbiAgICBpZiAoZW50cnkuZW50cnlUeXBlICE9PSAnbWVhc3VyZScpIHJldHVyblxuICAgIHZhciBuYW1lID0gZW50cnkubmFtZS5yZXBsYWNlKC8gLiokLywgJycpXG5cbiAgICBpZiAoIXN0YXRzW25hbWVdKSB7XG4gICAgICBzdGF0c1tuYW1lXSA9IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgY291bnQ6IDAsXG4gICAgICAgIGVudHJpZXM6IFtdXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN0YXQgPSBzdGF0c1tuYW1lXVxuICAgIHN0YXQuY291bnQgKz0gMVxuICAgIHN0YXQuZW50cmllcy5wdXNoKGVudHJ5LmR1cmF0aW9uKVxuICB9KVxufVxuXG4vLyBDcmVhdGUgYSBuZXcgUGVyZiBpbnN0YW5jZSBieSBwYXNzaW5nIGl0IGEgZmlsdGVyXG5mdW5jdGlvbiBQZXJmIChzdGF0cywgbmFtZSwgZmlsdGVyLCByZW5hbWUpIHtcbiAgdGhpcy5zdGF0cyA9IHN0YXRzXG4gIHRoaXMubmFtZSA9IG5hbWVcbiAgdGhpcy5maWx0ZXIgPSBmaWx0ZXIgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZSB9XG4gIHRoaXMucmVuYW1lID0gcmVuYW1lIHx8IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBuYW1lIH1cbn1cblxuLy8gQ29tcHV0ZSBhIHRhYmxlIG9mIHBlcmZvcm1hbmNlIGVudHJpZXMgYmFzZWQgb24gYSBmaWx0ZXJcblBlcmYucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGZpbHRlcmVkID0gT2JqZWN0LmtleXModGhpcy5zdGF0cykuZmlsdGVyKHRoaXMuZmlsdGVyKVxuICB2YXIgc2VsZiA9IHRoaXNcblxuICB2YXIgbWF4VGltZSA9IDBcbiAgdmFyIG1heE1lZGlhbiA9IDBcbiAgdmFyIGZtdCA9IGZpbHRlcmVkLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0YXQgPSBzZWxmLnN0YXRzW2tleV1cbiAgICB2YXIgdG90YWxUaW1lID0gTnVtYmVyKHN0YXQuZW50cmllcy5yZWR1Y2UoZnVuY3Rpb24gKHRpbWUsIGVudHJ5KSB7XG4gICAgICByZXR1cm4gdGltZSArIGVudHJ5XG4gICAgfSwgMCkudG9GaXhlZCgyKSlcbiAgICBpZiAodG90YWxUaW1lID4gbWF4VGltZSkgbWF4VGltZSA9IHRvdGFsVGltZVxuXG4gICAgdmFyIG1lZGlhbiA9IGdldE1lZGlhbihzdGF0LmVudHJpZXMpXG4gICAgaWYgKG1lZGlhbiA+IG1heE1lZGlhbikgbWF4TWVkaWFuID0gbWVkaWFuXG5cbiAgICB2YXIgbmFtZSA9IHNlbGYucmVuYW1lKHN0YXQubmFtZSlcbiAgICByZXR1cm4gbmV3IFBlcmZFbnRyeShuYW1lLCB0b3RhbFRpbWUsIG1lZGlhbiwgc3RhdC5jb3VudClcbiAgfSlcblxuICB2YXIgYmFyTGVuZ3RoID0gMTBcbiAgZm10LmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgdmFyIHRvdGFsVGltZSA9IGVudHJ5WydUb3RhbCBUaW1lIChtcyknXVxuICAgIHZhciBtZWRpYW4gPSBlbnRyeVsnTWVkaWFuIChtcyknXVxuICAgIGVudHJ5WycgJ10gPSBjcmVhdGVCYXIodG90YWxUaW1lIC8gbWF4VGltZSAqIDEwMCAvIGJhckxlbmd0aClcbiAgICBlbnRyeVsnICAnXSA9IGNyZWF0ZUJhcihtZWRpYW4gLyBtYXhNZWRpYW4gKiAxMDAgLyBiYXJMZW5ndGgpXG4gIH0pXG5cbiAgZnVuY3Rpb24gY3JlYXRlQmFyIChsZW4pIHtcbiAgICB2YXIgc3RyID0gJydcbiAgICBmb3IgKHZhciBpID0gMCwgbWF4ID0gTWF0aC5yb3VuZChsZW4pOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgIHN0ciArPSBCQVJcbiAgICB9XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgdmFyIHJlcyA9IGZtdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGJbJ1RvdGFsIFRpbWUgKG1zKSddIC0gYVsnVG90YWwgVGltZSAobXMpJ11cbiAgfSlcbiAgY29uc29sZS50YWJsZShyZXMpXG4gIHJldHVybiBcIlNob3dpbmcgcGVyZm9ybWFuY2UgZXZlbnRzIGZvciAnXCIgKyB0aGlzLm5hbWUgKyBcIidcIlxufVxuXG4vLyBBbiBlbnRyeSBmb3IgdGhlIHBlcmZvcm1hbmNlIHRpbWVsaW5lLlxuZnVuY3Rpb24gUGVyZkVudHJ5IChuYW1lLCB0b3RhbFRpbWUsIG1lZGlhbiwgY291bnQpIHtcbiAgdGhpcy5OYW1lID0gbmFtZVxuICB0aGlzWydUb3RhbCBUaW1lIChtcyknXSA9IHRvdGFsVGltZVxuICB0aGlzWycgJ10gPSAwXG4gIHRoaXNbJ01lZGlhbiAobXMpJ10gPSBtZWRpYW5cbiAgdGhpc1snICAnXSA9IDBcbiAgdGhpc1snVG90YWwgQ291bnQnXSA9IGNvdW50XG59XG5cbi8vIEdldCB0aGUgbWVkaWFuIGZyb20gYW4gYXJyYXkgb2YgbnVtYmVycy5cbmZ1bmN0aW9uIGdldE1lZGlhbiAoYXJncykge1xuICBpZiAoIWFyZ3MubGVuZ3RoKSByZXR1cm4gMFxuICB2YXIgbnVtYmVycyA9IGFyZ3Muc2xpY2UoMCkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAtIGIgfSlcbiAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobnVtYmVycy5sZW5ndGggLyAyKVxuICB2YXIgaXNFdmVuID0gbnVtYmVycy5sZW5ndGggJSAyID09PSAwXG4gIHZhciByZXMgPSBpc0V2ZW4gPyAobnVtYmVyc1ttaWRkbGVdICsgbnVtYmVyc1ttaWRkbGUgLSAxXSkgLyAyIDogbnVtYmVyc1ttaWRkbGVdXG4gIHJldHVybiBOdW1iZXIocmVzLnRvRml4ZWQoMikpXG59XG5cbi8vIERvIG5vdGhpbmcuXG5mdW5jdGlvbiBub29wICgpIHt9XG4iLCJ2YXIgcHJldHR5ID0gcmVxdWlyZSgncHJldHRpZXItYnl0ZXMnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JhZ2VcblxuZnVuY3Rpb24gc3RvcmFnZSAoKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuY2hvbywgJ3N0b3JhZ2UnLCB7XG4gICAgZ2V0OiBnZXQsXG4gICAgc2V0OiBub29wXG4gIH0pXG5cbiAgZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICBpZiAobmF2aWdhdG9yLnN0b3JhZ2UpIHtcbiAgICAgIG5hdmlnYXRvci5zdG9yYWdlLmVzdGltYXRlKCkudGhlbihmdW5jdGlvbiAoZXN0aW1hdGUpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gKGVzdGltYXRlLnVzYWdlIC8gZXN0aW1hdGUucXVvdGEpLnRvRml4ZWQoKVxuICAgICAgICBjbHIoJ01heCBzdG9yYWdlOicsIGZtdChlc3RpbWF0ZS5xdW90YSkpXG4gICAgICAgIGNscignU3RvcmFnZSB1c2VkOicsIGZtdChlc3RpbWF0ZS51c2FnZSkgKyAnICgnICsgdmFsdWUgKyAnJSknKVxuICAgICAgICBuYXZpZ2F0b3Iuc3RvcmFnZS5wZXJzaXN0ZWQoKS50aGVuKGZ1bmN0aW9uIChib29sKSB7XG4gICAgICAgICAgdmFyIHZhbCA9IGJvb2wgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnXG4gICAgICAgICAgY2xyKCdQZXJzaXN0ZW50IHN0b3JhZ2U6JywgdmFsKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIHJldHVybiAnQ2FsY3VsYXRpbmcgc3RvcmFnZSBxdW90YeKApidcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sXG4gICAgICByZXR1cm4gKC9odHRwcy8udGVzdChwcm90b2NvbCkpXG4gICAgICAgID8gXCJUaGUgU3RvcmFnZSBBUEkgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBicm93c2VyLiBXZSdyZSBzb3JyeSFcIlxuICAgICAgICA6ICdUaGUgU3RvcmFnZSBBUEkgaXMgdW5hdmFpbGFibGUuIFNlcnZpbmcgdGhpcyBzaXRlIG92ZXIgSFRUUFMgbWlnaHQgaGVscCBlbmFibGUgaXQhJ1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbHIgKG1zZywgYXJnKSB7XG4gIHZhciBjb2xvciA9ICcjY2M5OWNjJ1xuICBjb25zb2xlLmxvZygnJWMnICsgbXNnLCAnY29sb3I6ICcgKyBjb2xvciwgYXJnKVxufVxuXG5mdW5jdGlvbiBmbXQgKG51bSkge1xuICByZXR1cm4gcHJldHR5KG51bSkucmVwbGFjZSgnICcsICcnKVxufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG4iLCJ2YXIgb25QZXJmb3JtYW5jZSA9IHJlcXVpcmUoJ29uLXBlcmZvcm1hbmNlJylcbnZhciBzY2hlZHVsZXIgPSByZXF1aXJlKCduYW5vc2NoZWR1bGVyJykoKVxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbm1vZHVsZS5leHBvcnRzID0gQ2hvb0hvb2tzXG5cbmZ1bmN0aW9uIENob29Ib29rcyAoZW1pdHRlcikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2hvb0hvb2tzKSkgcmV0dXJuIG5ldyBDaG9vSG9va3MoZW1pdHRlcilcblxuICBhc3NlcnQuZXF1YWwodHlwZW9mIGVtaXR0ZXIsICdvYmplY3QnKVxuXG4gIHRoaXMuaGFzV2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgdGhpcy5oYXNJZGxlQ2FsbGJhY2sgPSB0aGlzLmhhc1dpbmRvdyAmJiB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFja1xuICB0aGlzLmhhc1BlcmZvcm1hbmNlID0gdGhpcy5oYXNXaW5kb3cgJiZcbiAgICB3aW5kb3cucGVyZm9ybWFuY2UgJiZcbiAgICB3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZVxuXG4gIHRoaXMuZW1pdHRlciA9IGVtaXR0ZXJcbiAgdGhpcy5saXN0ZW5lcnMgPSB7fVxuICB0aGlzLmJ1ZmZlciA9IHtcbiAgICByZW5kZXI6IHt9LFxuICAgIGV2ZW50czoge31cbiAgfVxufVxuXG5DaG9vSG9va3MucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKG5hbWUsIGhhbmRsZXIpIHtcbiAgdGhpcy5saXN0ZW5lcnNbbmFtZV0gPSBoYW5kbGVyXG59XG5cbkNob29Ib29rcy5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAodGhpcy5oYXNQZXJmb3JtYW5jZSkge1xuICAgIHdpbmRvdy5wZXJmb3JtYW5jZS5vbnJlc291cmNldGltaW5nYnVmZmVyZnVsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IHNlbGYubGlzdGVuZXJzWydyZXNvdXJjZS10aW1pbmctYnVmZmVyLWZ1bGwnXVxuICAgICAgaWYgKGxpc3RlbmVyKSBsaXN0ZW5lcigpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyBhbHNvIGhhbmRsZSBsb2cgZXZlbnRzXG4gIG9uUGVyZm9ybWFuY2UoZnVuY3Rpb24gKHRpbWluZykge1xuICAgIGlmICghdGltaW5nKSByZXR1cm5cbiAgICBpZiAodGltaW5nLmVudHJ5VHlwZSAhPT0gJ21lYXN1cmUnKSByZXR1cm5cblxuICAgIHZhciBldmVudE5hbWUgPSB0aW1pbmcubmFtZVxuICAgIGlmICgvY2hvb1xcLm1vcnBoLy50ZXN0KGV2ZW50TmFtZSkpIHtcbiAgICAgIHNlbGYuYnVmZmVyLnJlbmRlci5tb3JwaCA9IHRpbWluZ1xuICAgIH0gZWxzZSBpZiAoL2Nob29cXC5yb3V0ZS8udGVzdChldmVudE5hbWUpKSB7XG4gICAgICBzZWxmLmJ1ZmZlci5yZW5kZXIucm91dGUgPSB0aW1pbmdcbiAgICB9IGVsc2UgaWYgKC9jaG9vXFwucmVuZGVyLy50ZXN0KGV2ZW50TmFtZSkpIHtcbiAgICAgIHNlbGYuYnVmZmVyLnJlbmRlci5yZW5kZXIgPSB0aW1pbmdcbiAgICB9IGVsc2UgaWYgKC9jaG9vXFwuZW1pdC8udGVzdChldmVudE5hbWUpICYmICEvbG9nOi8udGVzdChldmVudE5hbWUpKSB7XG4gICAgICB2YXIgZXZlbnRMaXN0ZW5lciA9IHNlbGYubGlzdGVuZXJzWydldmVudCddXG4gICAgICBpZiAoZXZlbnRMaXN0ZW5lcikge1xuICAgICAgICB2YXIgdGltaW5nTmFtZSA9IGV2ZW50TmFtZS5tYXRjaCgvY2hvb1xcLmVtaXRcXCgnKC4qKSdcXCkvKVsxXVxuICAgICAgICBpZiAodGltaW5nTmFtZSA9PT0gJ3JlbmRlcicgfHwgdGltaW5nTmFtZSA9PT0gJ0RPTUNvbnRlbnRMb2FkZWQnKSByZXR1cm5cblxuICAgICAgICB2YXIgdHJhY2VJZCA9IGV2ZW50TmFtZS5tYXRjaCgvXFxbKFxcZCspXFxdLylbMV1cbiAgICAgICAgdmFyIGRhdGEgPSBzZWxmLmJ1ZmZlci5ldmVudHNbdHJhY2VJZF1cblxuICAgICAgICBzZWxmLmJ1ZmZlci5ldmVudHNbdHJhY2VJZF0gPSBudWxsXG4gICAgICAgIGV2ZW50TGlzdGVuZXIodGltaW5nTmFtZSwgZGF0YSwgdGltaW5nKVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByQnVmID0gc2VsZi5idWZmZXIucmVuZGVyXG4gICAgaWYgKHJCdWYucmVuZGVyICYmIHJCdWYucm91dGUgJiYgckJ1Zi5tb3JwaCkge1xuICAgICAgdmFyIHJlbmRlckxpc3RlbmVyID0gc2VsZi5saXN0ZW5lcnNbJ3JlbmRlciddXG4gICAgICBpZiAoIXJlbmRlckxpc3RlbmVyKSByZXR1cm5cbiAgICAgIHZhciB0aW1pbmdzID0ge31cbiAgICAgIHdoaWxlIChzZWxmLmJ1ZmZlci5yZW5kZXIubGVuZ3RoKSB7XG4gICAgICAgIHZhciBfdGltaW5nID0gc2VsZi5idWZmZXIucmVuZGVyLnBvcCgpXG4gICAgICAgIHZhciBuYW1lID0gX3RpbWluZy5uYW1lXG4gICAgICAgIGlmICgvY2hvb1xcLnJlbmRlci8udGVzdChuYW1lKSkgdGltaW5ncy5yZW5kZXIgPSBfdGltaW5nXG4gICAgICAgIGVsc2UgaWYgKC9jaG9vXFwubW9ycGgvLnRlc3QobmFtZSkpIHRpbWluZ3MubW9ycGggPSBfdGltaW5nXG4gICAgICAgIGVsc2UgdGltaW5ncy5yb3V0ZSA9IF90aW1pbmdcbiAgICAgIH1cbiAgICAgIHJCdWYucmVuZGVyID0gckJ1Zi5yb3V0ZSA9IHJCdWYubW9ycGggPSB2b2lkIDBcbiAgICAgIHJlbmRlckxpc3RlbmVyKHRpbWluZ3MpXG4gICAgfVxuICB9KVxuXG4gIC8vIENoZWNrIGlmIHRoZXJlJ3MgdGltaW5ncyB3aXRob3V0IGFueSBsaXN0ZW5lcnNcbiAgLy8gYW5kIHRyaWdnZXIgdGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQuXG4gIC8vIElmIHRoZSB0aW1pbmcgQVBJIGlzIG5vdCBhdmFpbGFibGUsIHdlIGhhbmRsZSBhbGwgZXZlbnRzIGhlcmVcbiAgdGhpcy5lbWl0dGVyLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50TmFtZSwgZGF0YSwgdXVpZCkge1xuICAgIHZhciBsb2dMZXZlbCA9IC9ebG9nOihcXHd7NCw1fSkvLmV4ZWMoZXZlbnROYW1lKVxuXG4gICAgaWYgKCFzZWxmLmhhc1BlcmZvcm1hbmNlICYmIGV2ZW50TmFtZSA9PT0gJ3JlbmRlcicpIHtcbiAgICAgIC8vIFJlbmRlclxuICAgICAgdmFyIHJlbmRlckxpc3RlbmVyID0gc2VsZi5saXN0ZW5lcnNbJ3JlbmRlciddXG4gICAgICBpZiAocmVuZGVyTGlzdGVuZXIpIHJlbmRlckxpc3RlbmVyKClcbiAgICB9IGVsc2UgaWYgKGV2ZW50TmFtZSA9PT0gJ0RPTUNvbnRlbnRMb2FkZWQnKSB7XG4gICAgICAvLyBET01Db250ZW50TG9hZGVkXG4gICAgICBzZWxmLl9lbWl0TG9hZGVkKClcbiAgICB9IGVsc2UgaWYgKGxvZ0xldmVsKSB7XG4gICAgICBsb2dMZXZlbCA9IGxvZ0xldmVsWzFdXG4gICAgICAvLyBMb2c6KlxuICAgICAgdmFyIGxvZ0xpc3RlbmVyID0gc2VsZi5saXN0ZW5lcnNbJ2xvZzonICsgbG9nTGV2ZWxdXG4gICAgICBpZiAobG9nTGlzdGVuZXIpIHtcbiAgICAgICAgbG9nTGlzdGVuZXIuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCBhcmd1bWVudHMubGVuZ3RoIC0gMSkpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghc2VsZi5lbWl0dGVyLmxpc3RlbmVycyhldmVudE5hbWUpLmxlbmd0aCkge1xuICAgICAgLy8gVW5oYW5kbGVkXG4gICAgICB2YXIgdW5oYW5kbGVkTGlzdGVuZXIgPSBzZWxmLmxpc3RlbmVyc1sndW5oYW5kbGVkJ11cbiAgICAgIGlmICh1bmhhbmRsZWRMaXN0ZW5lcikgdW5oYW5kbGVkTGlzdGVuZXIoZXZlbnROYW1lLCBkYXRhKVxuICAgIH0gZWxzZSBpZiAoZXZlbnROYW1lICE9PSAncmVuZGVyJykge1xuICAgICAgLy8gKlxuICAgICAgaWYgKHNlbGYuaGFzUGVyZm9ybWFuY2UpIHNlbGYuYnVmZmVyLmV2ZW50c1t1dWlkXSA9IGRhdGFcbiAgICB9XG4gIH0pXG59XG5cbi8vIGNvbXB1dGUgYW5kIGxvZyB0aW1lIHRpbGwgaW50ZXJhY3RpdmUgd2hlbiBET01Db250ZW50TG9hZGVkIGV2ZW50IGZpcmVzXG5DaG9vSG9va3MucHJvdG90eXBlLl9lbWl0TG9hZGVkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgc2NoZWR1bGVyLnB1c2goZnVuY3Rpb24gY2xlYXIgKCkge1xuICAgIHZhciBsaXN0ZW5lciA9IHNlbGYubGlzdGVuZXJzWydET01Db250ZW50TG9hZGVkJ11cbiAgICB2YXIgdGltaW5nID0gc2VsZi5oYXNXaW5kb3cgJiYgd2luZG93LnBlcmZvcm1hbmNlICYmIHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmdcblxuICAgIGlmIChsaXN0ZW5lciAmJiB0aW1pbmcpIHtcbiAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRpbWluZy5kb21JbnRlcmFjdGl2ZSAtIHRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsXG4gICAgICAgIGxvYWRlZDogdGltaW5nLmRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCAtIHRpbWluZy5uYXZpZ2F0aW9uU3RhcnRcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuIiwidmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG52YXIgTFJVID0gcmVxdWlyZSgnbmFub2xydScpXG5cbm1vZHVsZS5leHBvcnRzID0gQ2hvb0NvbXBvbmVudENhY2hlXG5cbmZ1bmN0aW9uIENob29Db21wb25lbnRDYWNoZSAoc3RhdGUsIGVtaXQsIGxydSkge1xuICBhc3NlcnQub2sodGhpcyBpbnN0YW5jZW9mIENob29Db21wb25lbnRDYWNoZSwgJ0Nob29Db21wb25lbnRDYWNoZSBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIGBuZXdgJylcblxuICBhc3NlcnQuZXF1YWwodHlwZW9mIHN0YXRlLCAnb2JqZWN0JywgJ0Nob29Db21wb25lbnRDYWNoZTogc3RhdGUgc2hvdWxkIGJlIHR5cGUgb2JqZWN0JylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBlbWl0LCAnZnVuY3Rpb24nLCAnQ2hvb0NvbXBvbmVudENhY2hlOiBlbWl0IHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcblxuICBpZiAodHlwZW9mIGxydSA9PT0gJ251bWJlcicpIHRoaXMuY2FjaGUgPSBuZXcgTFJVKGxydSlcbiAgZWxzZSB0aGlzLmNhY2hlID0gbHJ1IHx8IG5ldyBMUlUoMTAwKVxuICB0aGlzLnN0YXRlID0gc3RhdGVcbiAgdGhpcy5lbWl0ID0gZW1pdFxufVxuXG4vLyBHZXQgJiBjcmVhdGUgY29tcG9uZW50IGluc3RhbmNlcy5cbkNob29Db21wb25lbnRDYWNoZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKENvbXBvbmVudCwgaWQpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBDb21wb25lbnQsICdmdW5jdGlvbicsICdDaG9vQ29tcG9uZW50Q2FjaGUucmVuZGVyOiBDb21wb25lbnQgc2hvdWxkIGJlIHR5cGUgZnVuY3Rpb24nKVxuICBhc3NlcnQub2sodHlwZW9mIGlkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaWQgPT09ICdudW1iZXInLCAnQ2hvb0NvbXBvbmVudENhY2hlLnJlbmRlcjogaWQgc2hvdWxkIGJlIHR5cGUgc3RyaW5nIG9yIHR5cGUgbnVtYmVyJylcblxuICB2YXIgZWwgPSB0aGlzLmNhY2hlLmdldChpZClcbiAgaWYgKCFlbCkge1xuICAgIHZhciBhcmdzID0gW11cbiAgICBmb3IgKHZhciBpID0gMiwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKVxuICAgIH1cbiAgICBhcmdzLnVuc2hpZnQoQ29tcG9uZW50LCBpZCwgdGhpcy5zdGF0ZSwgdGhpcy5lbWl0KVxuICAgIGVsID0gbmV3Q2FsbC5hcHBseShuZXdDYWxsLCBhcmdzKVxuICAgIHRoaXMuY2FjaGUuc2V0KGlkLCBlbClcbiAgfVxuXG4gIHJldHVybiBlbFxufVxuXG4vLyBCZWNhdXNlIHlvdSBjYW4ndCBjYWxsIGBuZXdgIGFuZCBgLmFwcGx5KClgIGF0IHRoZSBzYW1lIHRpbWUuIFRoaXMgaXMgYSBtYWRcbi8vIGhhY2ssIGJ1dCBoZXkgaXQgd29ya3Mgc28gd2UgZ29ubmEgZ28gZm9yIGl0LiBXaG9vcC5cbmZ1bmN0aW9uIG5ld0NhbGwgKENscykge1xuICByZXR1cm4gbmV3IChDbHMuYmluZC5hcHBseShDbHMsIGFyZ3VtZW50cykpIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnbmFub2NvbXBvbmVudCcpXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ25hbm9odG1sJylcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnbmFub2h0bWwvcmF3JylcbiIsInZhciBzY3JvbGxUb0FuY2hvciA9IHJlcXVpcmUoJ3Njcm9sbC10by1hbmNob3InKVxudmFyIGRvY3VtZW50UmVhZHkgPSByZXF1aXJlKCdkb2N1bWVudC1yZWFkeScpXG52YXIgbmFub3RpbWluZyA9IHJlcXVpcmUoJ25hbm90aW1pbmcnKVxudmFyIG5hbm9yb3V0ZXIgPSByZXF1aXJlKCduYW5vcm91dGVyJylcbnZhciBuYW5vbW9ycGggPSByZXF1aXJlKCduYW5vbW9ycGgnKVxudmFyIG5hbm9xdWVyeSA9IHJlcXVpcmUoJ25hbm9xdWVyeScpXG52YXIgbmFub2hyZWYgPSByZXF1aXJlKCduYW5vaHJlZicpXG52YXIgbmFub3JhZiA9IHJlcXVpcmUoJ25hbm9yYWYnKVxudmFyIG5hbm9idXMgPSByZXF1aXJlKCduYW5vYnVzJylcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG52YXIgQ2FjaGUgPSByZXF1aXJlKCcuL2NvbXBvbmVudC9jYWNoZScpXG5cbm1vZHVsZS5leHBvcnRzID0gQ2hvb1xuXG52YXIgSElTVE9SWV9PQkpFQ1QgPSB7fVxuXG5mdW5jdGlvbiBDaG9vIChvcHRzKSB7XG4gIHZhciB0aW1pbmcgPSBuYW5vdGltaW5nKCdjaG9vLmNvbnN0cnVjdG9yJylcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENob28pKSByZXR1cm4gbmV3IENob28ob3B0cylcbiAgb3B0cyA9IG9wdHMgfHwge31cblxuICBhc3NlcnQuZXF1YWwodHlwZW9mIG9wdHMsICdvYmplY3QnLCAnY2hvbzogb3B0cyBzaG91bGQgYmUgdHlwZSBvYmplY3QnKVxuXG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIC8vIGRlZmluZSBldmVudHMgdXNlZCBieSBjaG9vXG4gIHRoaXMuX2V2ZW50cyA9IHtcbiAgICBET01DT05URU5UTE9BREVEOiAnRE9NQ29udGVudExvYWRlZCcsXG4gICAgRE9NVElUTEVDSEFOR0U6ICdET01UaXRsZUNoYW5nZScsXG4gICAgUkVQTEFDRVNUQVRFOiAncmVwbGFjZVN0YXRlJyxcbiAgICBQVVNIU1RBVEU6ICdwdXNoU3RhdGUnLFxuICAgIE5BVklHQVRFOiAnbmF2aWdhdGUnLFxuICAgIFBPUFNUQVRFOiAncG9wU3RhdGUnLFxuICAgIFJFTkRFUjogJ3JlbmRlcidcbiAgfVxuXG4gIC8vIHByb3BlcnRpZXMgZm9yIGludGVybmFsIHVzZSBvbmx5XG4gIHRoaXMuX2hpc3RvcnlFbmFibGVkID0gb3B0cy5oaXN0b3J5ID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0cy5oaXN0b3J5XG4gIHRoaXMuX2hyZWZFbmFibGVkID0gb3B0cy5ocmVmID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0cy5ocmVmXG4gIHRoaXMuX2hhc2hFbmFibGVkID0gb3B0cy5oYXNoID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdHMuaGFzaFxuICB0aGlzLl9oYXNXaW5kb3cgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICB0aGlzLl9jYWNoZSA9IG9wdHMuY2FjaGVcbiAgdGhpcy5fbG9hZGVkID0gZmFsc2VcbiAgdGhpcy5fc3RvcmVzID0gW29uZG9tdGl0bGVjaGFuZ2VdXG4gIHRoaXMuX3RyZWUgPSBudWxsXG5cbiAgLy8gc3RhdGVcbiAgdmFyIF9zdGF0ZSA9IHtcbiAgICBldmVudHM6IHRoaXMuX2V2ZW50cyxcbiAgICBjb21wb25lbnRzOiB7fVxuICB9XG4gIGlmICh0aGlzLl9oYXNXaW5kb3cpIHtcbiAgICB0aGlzLnN0YXRlID0gd2luZG93LmluaXRpYWxTdGF0ZVxuICAgICAgPyBPYmplY3QuYXNzaWduKHt9LCB3aW5kb3cuaW5pdGlhbFN0YXRlLCBfc3RhdGUpXG4gICAgICA6IF9zdGF0ZVxuICAgIGRlbGV0ZSB3aW5kb3cuaW5pdGlhbFN0YXRlXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGF0ZSA9IF9zdGF0ZVxuICB9XG5cbiAgLy8gcHJvcGVydGllcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBBUElcbiAgdGhpcy5yb3V0ZXIgPSBuYW5vcm91dGVyKHsgY3Vycnk6IHRydWUgfSlcbiAgdGhpcy5lbWl0dGVyID0gbmFub2J1cygnY2hvby5lbWl0JylcbiAgdGhpcy5lbWl0ID0gdGhpcy5lbWl0dGVyLmVtaXQuYmluZCh0aGlzLmVtaXR0ZXIpXG5cbiAgLy8gbGlzdGVuIGZvciB0aXRsZSBjaGFuZ2VzOyBhdmFpbGFibGUgZXZlbiB3aGVuIGNhbGxpbmcgLnRvU3RyaW5nKClcbiAgaWYgKHRoaXMuX2hhc1dpbmRvdykgdGhpcy5zdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlXG4gIGZ1bmN0aW9uIG9uZG9tdGl0bGVjaGFuZ2UgKHN0YXRlKSB7XG4gICAgc2VsZi5lbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihzZWxmLl9ldmVudHMuRE9NVElUTEVDSEFOR0UsIGZ1bmN0aW9uICh0aXRsZSkge1xuICAgICAgYXNzZXJ0LmVxdWFsKHR5cGVvZiB0aXRsZSwgJ3N0cmluZycsICdldmVudHMuRE9NVGl0bGVDaGFuZ2U6IHRpdGxlIHNob3VsZCBiZSB0eXBlIHN0cmluZycpXG4gICAgICBzdGF0ZS50aXRsZSA9IHRpdGxlXG4gICAgICBpZiAoc2VsZi5faGFzV2luZG93KSBkb2N1bWVudC50aXRsZSA9IHRpdGxlXG4gICAgfSlcbiAgfVxuICB0aW1pbmcoKVxufVxuXG5DaG9vLnByb3RvdHlwZS5yb3V0ZSA9IGZ1bmN0aW9uIChyb3V0ZSwgaGFuZGxlcikge1xuICB2YXIgcm91dGVUaW1pbmcgPSBuYW5vdGltaW5nKFwiY2hvby5yb3V0ZSgnXCIgKyByb3V0ZSArIFwiJylcIilcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiByb3V0ZSwgJ3N0cmluZycsICdjaG9vLnJvdXRlOiByb3V0ZSBzaG91bGQgYmUgdHlwZSBzdHJpbmcnKVxuICBhc3NlcnQuZXF1YWwodHlwZW9mIGhhbmRsZXIsICdmdW5jdGlvbicsICdjaG9vLmhhbmRsZXI6IHJvdXRlIHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcbiAgdGhpcy5yb3V0ZXIub24ocm91dGUsIGhhbmRsZXIpXG4gIHJvdXRlVGltaW5nKClcbn1cblxuQ2hvby5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gKGNiKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgY2IsICdmdW5jdGlvbicsICdjaG9vLnVzZTogY2Igc2hvdWxkIGJlIHR5cGUgZnVuY3Rpb24nKVxuICB2YXIgc2VsZiA9IHRoaXNcbiAgdGhpcy5fc3RvcmVzLnB1c2goZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgdmFyIG1zZyA9ICdjaG9vLnVzZSdcbiAgICBtc2cgPSBjYi5zdG9yZU5hbWUgPyBtc2cgKyAnKCcgKyBjYi5zdG9yZU5hbWUgKyAnKScgOiBtc2dcbiAgICB2YXIgZW5kVGltaW5nID0gbmFub3RpbWluZyhtc2cpXG4gICAgY2Ioc3RhdGUsIHNlbGYuZW1pdHRlciwgc2VsZilcbiAgICBlbmRUaW1pbmcoKVxuICB9KVxufVxuXG5DaG9vLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiB3aW5kb3csICdvYmplY3QnLCAnY2hvby5zdGFydDogd2luZG93IHdhcyBub3QgZm91bmQuIC5zdGFydCgpIG11c3QgYmUgY2FsbGVkIGluIGEgYnJvd3NlciwgdXNlIC50b1N0cmluZygpIGlmIHJ1bm5pbmcgaW4gTm9kZScpXG4gIHZhciBzdGFydFRpbWluZyA9IG5hbm90aW1pbmcoJ2Nob28uc3RhcnQnKVxuXG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAodGhpcy5faGlzdG9yeUVuYWJsZWQpIHtcbiAgICB0aGlzLmVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKHRoaXMuX2V2ZW50cy5OQVZJR0FURSwgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fbWF0Y2hSb3V0ZShzZWxmLnN0YXRlKVxuICAgICAgaWYgKHNlbGYuX2xvYWRlZCkge1xuICAgICAgICBzZWxmLmVtaXR0ZXIuZW1pdChzZWxmLl9ldmVudHMuUkVOREVSKVxuICAgICAgICBzZXRUaW1lb3V0KHNjcm9sbFRvQW5jaG9yLmJpbmQobnVsbCwgd2luZG93LmxvY2F0aW9uLmhhc2gpLCAwKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKHRoaXMuX2V2ZW50cy5QT1BTVEFURSwgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5lbWl0dGVyLmVtaXQoc2VsZi5fZXZlbnRzLk5BVklHQVRFKVxuICAgIH0pXG5cbiAgICB0aGlzLmVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKHRoaXMuX2V2ZW50cy5QVVNIU1RBVEUsIGZ1bmN0aW9uIChocmVmKSB7XG4gICAgICBhc3NlcnQuZXF1YWwodHlwZW9mIGhyZWYsICdzdHJpbmcnLCAnZXZlbnRzLnB1c2hTdGF0ZTogaHJlZiBzaG91bGQgYmUgdHlwZSBzdHJpbmcnKVxuICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKEhJU1RPUllfT0JKRUNULCBudWxsLCBocmVmKVxuICAgICAgc2VsZi5lbWl0dGVyLmVtaXQoc2VsZi5fZXZlbnRzLk5BVklHQVRFKVxuICAgIH0pXG5cbiAgICB0aGlzLmVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKHRoaXMuX2V2ZW50cy5SRVBMQUNFU1RBVEUsIGZ1bmN0aW9uIChocmVmKSB7XG4gICAgICBhc3NlcnQuZXF1YWwodHlwZW9mIGhyZWYsICdzdHJpbmcnLCAnZXZlbnRzLnJlcGxhY2VTdGF0ZTogaHJlZiBzaG91bGQgYmUgdHlwZSBzdHJpbmcnKVxuICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKEhJU1RPUllfT0JKRUNULCBudWxsLCBocmVmKVxuICAgICAgc2VsZi5lbWl0dGVyLmVtaXQoc2VsZi5fZXZlbnRzLk5BVklHQVRFKVxuICAgIH0pXG5cbiAgICB3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZW1pdHRlci5lbWl0KHNlbGYuX2V2ZW50cy5QT1BTVEFURSlcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5faHJlZkVuYWJsZWQpIHtcbiAgICAgIG5hbm9ocmVmKGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAgICAgICB2YXIgaHJlZiA9IGxvY2F0aW9uLmhyZWZcbiAgICAgICAgdmFyIGhhc2ggPSBsb2NhdGlvbi5oYXNoXG4gICAgICAgIGlmIChocmVmID09PSB3aW5kb3cubG9jYXRpb24uaHJlZikge1xuICAgICAgICAgIGlmICghc2VsZi5faGFzaEVuYWJsZWQgJiYgaGFzaCkgc2Nyb2xsVG9BbmNob3IoaGFzaClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzZWxmLmVtaXR0ZXIuZW1pdChzZWxmLl9ldmVudHMuUFVTSFNUQVRFLCBocmVmKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB0aGlzLl9zZXRDYWNoZSh0aGlzLnN0YXRlKVxuICB0aGlzLl9tYXRjaFJvdXRlKHRoaXMuc3RhdGUpXG4gIHRoaXMuX3N0b3Jlcy5mb3JFYWNoKGZ1bmN0aW9uIChpbml0U3RvcmUpIHtcbiAgICBpbml0U3RvcmUoc2VsZi5zdGF0ZSlcbiAgfSlcblxuICB0aGlzLl90cmVlID0gdGhpcy5fcHJlcmVuZGVyKHRoaXMuc3RhdGUpXG4gIGFzc2VydC5vayh0aGlzLl90cmVlLCAnY2hvby5zdGFydDogbm8gdmFsaWQgRE9NIG5vZGUgcmV0dXJuZWQgZm9yIGxvY2F0aW9uICcgKyB0aGlzLnN0YXRlLmhyZWYpXG5cbiAgdGhpcy5lbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihzZWxmLl9ldmVudHMuUkVOREVSLCBuYW5vcmFmKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVuZGVyVGltaW5nID0gbmFub3RpbWluZygnY2hvby5yZW5kZXInKVxuICAgIHZhciBuZXdUcmVlID0gc2VsZi5fcHJlcmVuZGVyKHNlbGYuc3RhdGUpXG4gICAgYXNzZXJ0Lm9rKG5ld1RyZWUsICdjaG9vLnJlbmRlcjogbm8gdmFsaWQgRE9NIG5vZGUgcmV0dXJuZWQgZm9yIGxvY2F0aW9uICcgKyBzZWxmLnN0YXRlLmhyZWYpXG5cbiAgICBhc3NlcnQuZXF1YWwoc2VsZi5fdHJlZS5ub2RlTmFtZSwgbmV3VHJlZS5ub2RlTmFtZSwgJ2Nob28ucmVuZGVyOiBUaGUgdGFyZ2V0IG5vZGUgPCcgK1xuICAgICAgc2VsZi5fdHJlZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICsgJz4gaXMgbm90IHRoZSBzYW1lIHR5cGUgYXMgdGhlIG5ldyBub2RlIDwnICtcbiAgICAgIG5ld1RyZWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSArICc+LicpXG5cbiAgICB2YXIgbW9ycGhUaW1pbmcgPSBuYW5vdGltaW5nKCdjaG9vLm1vcnBoJylcbiAgICBuYW5vbW9ycGgoc2VsZi5fdHJlZSwgbmV3VHJlZSlcbiAgICBtb3JwaFRpbWluZygpXG5cbiAgICByZW5kZXJUaW1pbmcoKVxuICB9KSlcblxuICBkb2N1bWVudFJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLmVtaXR0ZXIuZW1pdChzZWxmLl9ldmVudHMuRE9NQ09OVEVOVExPQURFRClcbiAgICBzZWxmLl9sb2FkZWQgPSB0cnVlXG4gIH0pXG5cbiAgc3RhcnRUaW1pbmcoKVxuICByZXR1cm4gdGhpcy5fdHJlZVxufVxuXG5DaG9vLnByb3RvdHlwZS5tb3VudCA9IGZ1bmN0aW9uIG1vdW50IChzZWxlY3Rvcikge1xuICB2YXIgbW91bnRUaW1pbmcgPSBuYW5vdGltaW5nKFwiY2hvby5tb3VudCgnXCIgKyBzZWxlY3RvciArIFwiJylcIilcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICdvYmplY3QnKSB7XG4gICAgYXNzZXJ0Lm9rKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycsICdjaG9vLm1vdW50OiBzZWxlY3RvciBzaG91bGQgYmUgdHlwZSBTdHJpbmcnKVxuICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvclxuICAgIG1vdW50VGltaW5nKClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgYXNzZXJ0Lm9rKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHNlbGVjdG9yID09PSAnb2JqZWN0JywgJ2Nob28ubW91bnQ6IHNlbGVjdG9yIHNob3VsZCBiZSB0eXBlIFN0cmluZyBvciBIVE1MRWxlbWVudCcpXG5cbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgZG9jdW1lbnRSZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlbmRlclRpbWluZyA9IG5hbm90aW1pbmcoJ2Nob28ucmVuZGVyJylcbiAgICB2YXIgbmV3VHJlZSA9IHNlbGYuc3RhcnQoKVxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzZWxmLl90cmVlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5fdHJlZSA9IHNlbGVjdG9yXG4gICAgfVxuXG4gICAgYXNzZXJ0Lm9rKHNlbGYuX3RyZWUsICdjaG9vLm1vdW50OiBjb3VsZCBub3QgcXVlcnkgc2VsZWN0b3I6ICcgKyBzZWxlY3RvcilcbiAgICBhc3NlcnQuZXF1YWwoc2VsZi5fdHJlZS5ub2RlTmFtZSwgbmV3VHJlZS5ub2RlTmFtZSwgJ2Nob28ubW91bnQ6IFRoZSB0YXJnZXQgbm9kZSA8JyArXG4gICAgICBzZWxmLl90cmVlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKyAnPiBpcyBub3QgdGhlIHNhbWUgdHlwZSBhcyB0aGUgbmV3IG5vZGUgPCcgK1xuICAgICAgbmV3VHJlZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICsgJz4uJylcblxuICAgIHZhciBtb3JwaFRpbWluZyA9IG5hbm90aW1pbmcoJ2Nob28ubW9ycGgnKVxuICAgIG5hbm9tb3JwaChzZWxmLl90cmVlLCBuZXdUcmVlKVxuICAgIG1vcnBoVGltaW5nKClcblxuICAgIHJlbmRlclRpbWluZygpXG4gIH0pXG4gIG1vdW50VGltaW5nKClcbn1cblxuQ2hvby5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAobG9jYXRpb24sIHN0YXRlKSB7XG4gIHN0YXRlID0gc3RhdGUgfHwge31cbiAgc3RhdGUuY29tcG9uZW50cyA9IHN0YXRlLmNvbXBvbmVudHMgfHwge31cbiAgc3RhdGUuZXZlbnRzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZXZlbnRzLCB0aGlzLl9ldmVudHMpXG5cbiAgYXNzZXJ0Lm5vdEVxdWFsKHR5cGVvZiB3aW5kb3csICdvYmplY3QnLCAnY2hvby5tb3VudDogd2luZG93IHdhcyBmb3VuZC4gLnRvU3RyaW5nKCkgbXVzdCBiZSBjYWxsZWQgaW4gTm9kZSwgdXNlIC5zdGFydCgpIG9yIC5tb3VudCgpIGlmIHJ1bm5pbmcgaW4gdGhlIGJyb3dzZXInKVxuICBhc3NlcnQuZXF1YWwodHlwZW9mIGxvY2F0aW9uLCAnc3RyaW5nJywgJ2Nob28udG9TdHJpbmc6IGxvY2F0aW9uIHNob3VsZCBiZSB0eXBlIHN0cmluZycpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygc3RhdGUsICdvYmplY3QnLCAnY2hvby50b1N0cmluZzogc3RhdGUgc2hvdWxkIGJlIHR5cGUgb2JqZWN0JylcblxuICB0aGlzLl9zZXRDYWNoZShzdGF0ZSlcbiAgdGhpcy5fbWF0Y2hSb3V0ZShzdGF0ZSwgbG9jYXRpb24pXG4gIHRoaXMuZW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICB0aGlzLl9zdG9yZXMuZm9yRWFjaChmdW5jdGlvbiAoaW5pdFN0b3JlKSB7XG4gICAgaW5pdFN0b3JlKHN0YXRlKVxuICB9KVxuXG4gIHZhciBodG1sID0gdGhpcy5fcHJlcmVuZGVyKHN0YXRlKVxuICBhc3NlcnQub2soaHRtbCwgJ2Nob28udG9TdHJpbmc6IG5vIHZhbGlkIHZhbHVlIHJldHVybmVkIGZvciB0aGUgcm91dGUgJyArIGxvY2F0aW9uKVxuICBhc3NlcnQoIUFycmF5LmlzQXJyYXkoaHRtbCksICdjaG9vLnRvU3RyaW5nOiByZXR1cm4gdmFsdWUgd2FzIGFuIGFycmF5IGZvciB0aGUgcm91dGUgJyArIGxvY2F0aW9uKVxuICByZXR1cm4gdHlwZW9mIGh0bWwub3V0ZXJIVE1MID09PSAnc3RyaW5nJyA/IGh0bWwub3V0ZXJIVE1MIDogaHRtbC50b1N0cmluZygpXG59XG5cbkNob28ucHJvdG90eXBlLl9tYXRjaFJvdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBsb2NhdGlvbk92ZXJyaWRlKSB7XG4gIHZhciBsb2NhdGlvbiwgcXVlcnlTdHJpbmdcbiAgaWYgKGxvY2F0aW9uT3ZlcnJpZGUpIHtcbiAgICBsb2NhdGlvbiA9IGxvY2F0aW9uT3ZlcnJpZGUucmVwbGFjZSgvXFw/LiskLywgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgICBpZiAoIXRoaXMuX2hhc2hFbmFibGVkKSBsb2NhdGlvbiA9IGxvY2F0aW9uLnJlcGxhY2UoLyMuKyQvLCAnJylcbiAgICBxdWVyeVN0cmluZyA9IGxvY2F0aW9uT3ZlcnJpZGVcbiAgfSBlbHNlIHtcbiAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpXG4gICAgaWYgKHRoaXMuX2hhc2hFbmFibGVkKSBsb2NhdGlvbiArPSB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKC9eIy8sICcvJylcbiAgICBxdWVyeVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2hcbiAgfVxuICB2YXIgbWF0Y2hlZCA9IHRoaXMucm91dGVyLm1hdGNoKGxvY2F0aW9uKVxuICB0aGlzLl9oYW5kbGVyID0gbWF0Y2hlZC5jYlxuICBzdGF0ZS5ocmVmID0gbG9jYXRpb25cbiAgc3RhdGUucXVlcnkgPSBuYW5vcXVlcnkocXVlcnlTdHJpbmcpXG4gIHN0YXRlLnJvdXRlID0gbWF0Y2hlZC5yb3V0ZVxuICBzdGF0ZS5wYXJhbXMgPSBtYXRjaGVkLnBhcmFtc1xufVxuXG5DaG9vLnByb3RvdHlwZS5fcHJlcmVuZGVyID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHZhciByb3V0ZVRpbWluZyA9IG5hbm90aW1pbmcoXCJjaG9vLnByZXJlbmRlcignXCIgKyBzdGF0ZS5yb3V0ZSArIFwiJylcIilcbiAgdmFyIHJlcyA9IHRoaXMuX2hhbmRsZXIoc3RhdGUsIHRoaXMuZW1pdClcbiAgcm91dGVUaW1pbmcoKVxuICByZXR1cm4gcmVzXG59XG5cbkNob28ucHJvdG90eXBlLl9zZXRDYWNoZSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICB2YXIgY2FjaGUgPSBuZXcgQ2FjaGUoc3RhdGUsIHRoaXMuZW1pdHRlci5lbWl0LmJpbmQodGhpcy5lbWl0dGVyKSwgdGhpcy5fY2FjaGUpXG4gIHN0YXRlLmNhY2hlID0gcmVuZGVyQ29tcG9uZW50XG5cbiAgZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50IChDb21wb25lbnQsIGlkKSB7XG4gICAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBDb21wb25lbnQsICdmdW5jdGlvbicsICdjaG9vLnN0YXRlLmNhY2hlOiBDb21wb25lbnQgc2hvdWxkIGJlIHR5cGUgZnVuY3Rpb24nKVxuICAgIHZhciBhcmdzID0gW11cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKVxuICAgIH1cbiAgICByZXR1cm4gY2FjaGUucmVuZGVyLmFwcGx5KGNhY2hlLCBhcmdzKVxuICB9XG5cbiAgLy8gV2hlbiB0aGUgc3RhdGUgZ2V0cyBzdHJpbmdpZmllZCwgbWFrZSBzdXJlIGBzdGF0ZS5jYWNoZWAgaXNuJ3RcbiAgLy8gc3RyaW5naWZpZWQgdG9vLlxuICByZW5kZXJDb21wb25lbnQudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiIsIi8qISBjbGlwYm9hcmQtY29weS4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuLyogZ2xvYmFsIERPTUV4Y2VwdGlvbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsaXBib2FyZENvcHlcblxuZnVuY3Rpb24gY2xpcGJvYXJkQ29weSAodGV4dCkge1xuICAvLyBVc2UgdGhlIEFzeW5jIENsaXBib2FyZCBBUEkgd2hlbiBhdmFpbGFibGUuIFJlcXVpcmVzIGEgc2VjdXJlIGJyb3dzaW5nXG4gIC8vIGNvbnRleHQgKGkuZS4gSFRUUFMpXG4gIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIHRocm93IChlcnIgIT09IHVuZGVmaW5lZCA/IGVyciA6IG5ldyBET01FeGNlcHRpb24oJ1RoZSByZXF1ZXN0IGlzIG5vdCBhbGxvd2VkJywgJ05vdEFsbG93ZWRFcnJvcicpKVxuICAgIH0pXG4gIH1cblxuICAvLyAuLi5PdGhlcndpc2UsIHVzZSBkb2N1bWVudC5leGVjQ29tbWFuZCgpIGZhbGxiYWNrXG5cbiAgLy8gUHV0IHRoZSB0ZXh0IHRvIGNvcHkgaW50byBhIDxzcGFuPlxuICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICBzcGFuLnRleHRDb250ZW50ID0gdGV4dFxuXG4gIC8vIFByZXNlcnZlIGNvbnNlY3V0aXZlIHNwYWNlcyBhbmQgbmV3bGluZXNcbiAgc3Bhbi5zdHlsZS53aGl0ZVNwYWNlID0gJ3ByZSdcbiAgc3Bhbi5zdHlsZS53ZWJraXRVc2VyU2VsZWN0ID0gJ2F1dG8nXG4gIHNwYW4uc3R5bGUudXNlclNlbGVjdCA9ICdhbGwnXG5cbiAgLy8gQWRkIHRoZSA8c3Bhbj4gdG8gdGhlIHBhZ2VcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzcGFuKVxuXG4gIC8vIE1ha2UgYSBzZWxlY3Rpb24gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugb2YgdGV4dCBzZWxlY3RlZCBieSB0aGUgdXNlclxuICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gIHZhciByYW5nZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICByYW5nZS5zZWxlY3ROb2RlKHNwYW4pXG4gIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcblxuICAvLyBDb3B5IHRleHQgdG8gdGhlIGNsaXBib2FyZFxuICB2YXIgc3VjY2VzcyA9IGZhbHNlXG4gIHRyeSB7XG4gICAgc3VjY2VzcyA9IHdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycilcbiAgfVxuXG4gIC8vIENsZWFudXBcbiAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gIHdpbmRvdy5kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNwYW4pXG5cbiAgcmV0dXJuIHN1Y2Nlc3NcbiAgICA/IFByb21pc2UucmVzb2x2ZSgpXG4gICAgOiBQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdUaGUgcmVxdWVzdCBpcyBub3QgYWxsb3dlZCcsICdOb3RBbGxvd2VkRXJyb3InKSlcbn1cbiIsInZhciBjbG9uZSA9IChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gX2luc3RhbmNlb2Yob2JqLCB0eXBlKSB7XG4gIHJldHVybiB0eXBlICE9IG51bGwgJiYgb2JqIGluc3RhbmNlb2YgdHlwZTtcbn1cblxudmFyIG5hdGl2ZU1hcDtcbnRyeSB7XG4gIG5hdGl2ZU1hcCA9IE1hcDtcbn0gY2F0Y2goXykge1xuICAvLyBtYXliZSBhIHJlZmVyZW5jZSBlcnJvciBiZWNhdXNlIG5vIGBNYXBgLiBHaXZlIGl0IGEgZHVtbXkgdmFsdWUgdGhhdCBub1xuICAvLyB2YWx1ZSB3aWxsIGV2ZXIgYmUgYW4gaW5zdGFuY2VvZi5cbiAgbmF0aXZlTWFwID0gZnVuY3Rpb24oKSB7fTtcbn1cblxudmFyIG5hdGl2ZVNldDtcbnRyeSB7XG4gIG5hdGl2ZVNldCA9IFNldDtcbn0gY2F0Y2goXykge1xuICBuYXRpdmVTZXQgPSBmdW5jdGlvbigpIHt9O1xufVxuXG52YXIgbmF0aXZlUHJvbWlzZTtcbnRyeSB7XG4gIG5hdGl2ZVByb21pc2UgPSBQcm9taXNlO1xufSBjYXRjaChfKSB7XG4gIG5hdGl2ZVByb21pc2UgPSBmdW5jdGlvbigpIHt9O1xufVxuXG4vKipcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXG4gKiB0aGVyZSBhcmUgbm8gY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiB5b3VyIG9iamVjdCwgeW91IGNhbiBzYXZlIHNvbWUgQ1BVIHRpbWVcbiAqIGJ5IGNhbGxpbmcgY2xvbmUob2JqLCBmYWxzZSkuXG4gKlxuICogQ2F1dGlvbjogaWYgYGNpcmN1bGFyYCBpcyBmYWxzZSBhbmQgYHBhcmVudGAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcbiAqIHlvdXIgcHJvZ3JhbSBtYXkgZW50ZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgY3Jhc2guXG4gKlxuICogQHBhcmFtIGBwYXJlbnRgIC0gdGhlIG9iamVjdCB0byBiZSBjbG9uZWRcbiAqIEBwYXJhbSBgY2lyY3VsYXJgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG9iamVjdCB0byBiZSBjbG9uZWQgbWF5IGNvbnRhaW5cbiAqICAgIGNpcmN1bGFyIHJlZmVyZW5jZXMuIChvcHRpb25hbCAtIHRydWUgYnkgZGVmYXVsdClcbiAqIEBwYXJhbSBgZGVwdGhgIC0gc2V0IHRvIGEgbnVtYmVyIGlmIHRoZSBvYmplY3QgaXMgb25seSB0byBiZSBjbG9uZWQgdG9cbiAqICAgIGEgcGFydGljdWxhciBkZXB0aC4gKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gSW5maW5pdHkpXG4gKiBAcGFyYW0gYHByb3RvdHlwZWAgLSBzZXRzIHRoZSBwcm90b3R5cGUgdG8gYmUgdXNlZCB3aGVuIGNsb25pbmcgYW4gb2JqZWN0LlxuICogICAgKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gcGFyZW50IHByb3RvdHlwZSkuXG4gKiBAcGFyYW0gYGluY2x1ZGVOb25FbnVtZXJhYmxlYCAtIHNldCB0byB0cnVlIGlmIHRoZSBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gKiAgICBzaG91bGQgYmUgY2xvbmVkIGFzIHdlbGwuIE5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgb24gdGhlIHByb3RvdHlwZVxuICogICAgY2hhaW4gd2lsbCBiZSBpZ25vcmVkLiAob3B0aW9uYWwgLSBmYWxzZSBieSBkZWZhdWx0KVxuKi9cbmZ1bmN0aW9uIGNsb25lKHBhcmVudCwgY2lyY3VsYXIsIGRlcHRoLCBwcm90b3R5cGUsIGluY2x1ZGVOb25FbnVtZXJhYmxlKSB7XG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT09ICdvYmplY3QnKSB7XG4gICAgZGVwdGggPSBjaXJjdWxhci5kZXB0aDtcbiAgICBwcm90b3R5cGUgPSBjaXJjdWxhci5wcm90b3R5cGU7XG4gICAgaW5jbHVkZU5vbkVudW1lcmFibGUgPSBjaXJjdWxhci5pbmNsdWRlTm9uRW51bWVyYWJsZTtcbiAgICBjaXJjdWxhciA9IGNpcmN1bGFyLmNpcmN1bGFyO1xuICB9XG4gIC8vIG1haW50YWluIHR3byBhcnJheXMgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMsIHdoZXJlIGNvcnJlc3BvbmRpbmcgcGFyZW50c1xuICAvLyBhbmQgY2hpbGRyZW4gaGF2ZSB0aGUgc2FtZSBpbmRleFxuICB2YXIgYWxsUGFyZW50cyA9IFtdO1xuICB2YXIgYWxsQ2hpbGRyZW4gPSBbXTtcblxuICB2YXIgdXNlQnVmZmVyID0gdHlwZW9mIEJ1ZmZlciAhPSAndW5kZWZpbmVkJztcblxuICBpZiAodHlwZW9mIGNpcmN1bGFyID09ICd1bmRlZmluZWQnKVxuICAgIGNpcmN1bGFyID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGRlcHRoID09ICd1bmRlZmluZWQnKVxuICAgIGRlcHRoID0gSW5maW5pdHk7XG5cbiAgLy8gcmVjdXJzZSB0aGlzIGZ1bmN0aW9uIHNvIHdlIGRvbid0IHJlc2V0IGFsbFBhcmVudHMgYW5kIGFsbENoaWxkcmVuXG4gIGZ1bmN0aW9uIF9jbG9uZShwYXJlbnQsIGRlcHRoKSB7XG4gICAgLy8gY2xvbmluZyBudWxsIGFsd2F5cyByZXR1cm5zIG51bGxcbiAgICBpZiAocGFyZW50ID09PSBudWxsKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoZGVwdGggPT09IDApXG4gICAgICByZXR1cm4gcGFyZW50O1xuXG4gICAgdmFyIGNoaWxkO1xuICAgIHZhciBwcm90bztcbiAgICBpZiAodHlwZW9mIHBhcmVudCAhPSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVNYXApKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVNYXAoKTtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlU2V0KCk7XG4gICAgfSBlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZVByb21pc2UpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcGFyZW50LnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXNvbHZlKF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgIHJlamVjdChfY2xvbmUoZXJyLCBkZXB0aCAtIDEpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IFtdO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc1JlZ0V4cChwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX19nZXRSZWdFeHBGbGFncyhwYXJlbnQpKTtcbiAgICAgIGlmIChwYXJlbnQubGFzdEluZGV4KSBjaGlsZC5sYXN0SW5kZXggPSBwYXJlbnQubGFzdEluZGV4O1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0RhdGUocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSkge1xuICAgICAgaWYgKEJ1ZmZlci5hbGxvY1Vuc2FmZSkge1xuICAgICAgICAvLyBOb2RlLmpzID49IDQuNS4wXG4gICAgICAgIGNoaWxkID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBhcmVudC5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT2xkZXIgTm9kZS5qcyB2ZXJzaW9uc1xuICAgICAgICBjaGlsZCA9IG5ldyBCdWZmZXIocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBwYXJlbnQuY29weShjaGlsZCk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfSBlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIEVycm9yKSkge1xuICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XG4gICAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICAgIHByb3RvID0gcHJvdG90eXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaXJjdWxhcikge1xuICAgICAgdmFyIGluZGV4ID0gYWxsUGFyZW50cy5pbmRleE9mKHBhcmVudCk7XG5cbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgICByZXR1cm4gYWxsQ2hpbGRyZW5baW5kZXhdO1xuICAgICAgfVxuICAgICAgYWxsUGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICBhbGxDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG5cbiAgICBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVNYXApKSB7XG4gICAgICBwYXJlbnQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIHZhciBrZXlDaGlsZCA9IF9jbG9uZShrZXksIGRlcHRoIC0gMSk7XG4gICAgICAgIHZhciB2YWx1ZUNoaWxkID0gX2Nsb25lKHZhbHVlLCBkZXB0aCAtIDEpO1xuICAgICAgICBjaGlsZC5zZXQoa2V5Q2hpbGQsIHZhbHVlQ2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZVNldCkpIHtcbiAgICAgIHBhcmVudC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciBlbnRyeUNoaWxkID0gX2Nsb25lKHZhbHVlLCBkZXB0aCAtIDEpO1xuICAgICAgICBjaGlsZC5hZGQoZW50cnlDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpIGluIHBhcmVudCkge1xuICAgICAgdmFyIGF0dHJzO1xuICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgIGF0dHJzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgaSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRycyAmJiBhdHRycy5zZXQgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNoaWxkW2ldID0gX2Nsb25lKHBhcmVudFtpXSwgZGVwdGggLSAxKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHBhcmVudCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBjbG9uaW5nIGEgc3ltYm9sIGJlY2F1c2UgaXQgaXMgYSBwcmltaXRpdmUsXG4gICAgICAgIC8vIGxpa2UgYSBudW1iZXIgb3Igc3RyaW5nLlxuICAgICAgICB2YXIgc3ltYm9sID0gc3ltYm9sc1tpXTtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgc3ltYm9sKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSAmJiAhaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZFtzeW1ib2xdID0gX2Nsb25lKHBhcmVudFtzeW1ib2xdLCBkZXB0aCAtIDEpO1xuICAgICAgICBpZiAoIWRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwgc3ltYm9sLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVOb25FbnVtZXJhYmxlKSB7XG4gICAgICB2YXIgYWxsUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBhcmVudCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IGFsbFByb3BlcnR5TmFtZXNbaV07XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIHByb3BlcnR5TmFtZSk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkW3Byb3BlcnR5TmFtZV0gPSBfY2xvbmUocGFyZW50W3Byb3BlcnR5TmFtZV0sIGRlcHRoIC0gMSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwgcHJvcGVydHlOYW1lLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcmV0dXJuIF9jbG9uZShwYXJlbnQsIGRlcHRoKTtcbn1cblxuLyoqXG4gKiBTaW1wbGUgZmxhdCBjbG9uZSB1c2luZyBwcm90b3R5cGUsIGFjY2VwdHMgb25seSBvYmplY3RzLCB1c2VmdWxsIGZvciBwcm9wZXJ0eVxuICogb3ZlcnJpZGUgb24gRkxBVCBjb25maWd1cmF0aW9uIG9iamVjdCAobm8gbmVzdGVkIHByb3BzKS5cbiAqXG4gKiBVU0UgV0lUSCBDQVVUSU9OISBUaGlzIG1heSBub3QgYmVoYXZlIGFzIHlvdSB3aXNoIGlmIHlvdSBkbyBub3Qga25vdyBob3cgdGhpc1xuICogd29ya3MuXG4gKi9cbmNsb25lLmNsb25lUHJvdG90eXBlID0gZnVuY3Rpb24gY2xvbmVQcm90b3R5cGUocGFyZW50KSB7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgdmFyIGMgPSBmdW5jdGlvbiAoKSB7fTtcbiAgYy5wcm90b3R5cGUgPSBwYXJlbnQ7XG4gIHJldHVybiBuZXcgYygpO1xufTtcblxuLy8gcHJpdmF0ZSB1dGlsaXR5IGZ1bmN0aW9uc1xuXG5mdW5jdGlvbiBfX29ialRvU3RyKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cbmNsb25lLl9fb2JqVG9TdHIgPSBfX29ialRvU3RyO1xuXG5mdW5jdGlvbiBfX2lzRGF0ZShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuY2xvbmUuX19pc0RhdGUgPSBfX2lzRGF0ZTtcblxuZnVuY3Rpb24gX19pc0FycmF5KG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuY2xvbmUuX19pc0FycmF5ID0gX19pc0FycmF5O1xuXG5mdW5jdGlvbiBfX2lzUmVnRXhwKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmNsb25lLl9faXNSZWdFeHAgPSBfX2lzUmVnRXhwO1xuXG5mdW5jdGlvbiBfX2dldFJlZ0V4cEZsYWdzKHJlKSB7XG4gIHZhciBmbGFncyA9ICcnO1xuICBpZiAocmUuZ2xvYmFsKSBmbGFncyArPSAnZyc7XG4gIGlmIChyZS5pZ25vcmVDYXNlKSBmbGFncyArPSAnaSc7XG4gIGlmIChyZS5tdWx0aWxpbmUpIGZsYWdzICs9ICdtJztcbiAgcmV0dXJuIGZsYWdzO1xufVxuY2xvbmUuX19nZXRSZWdFeHBGbGFncyA9IF9fZ2V0UmVnRXhwRmxhZ3M7XG5cbnJldHVybiBjbG9uZTtcbn0pKCk7XG5cbmlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGNsb25lO1xufVxuIiwiKGZ1bmN0aW9uKHIpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP3IocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLHIpOnIoQ29kZU1pcnJvcil9KShmdW5jdGlvbihyKXtmdW5jdGlvbiBJKGMpe2M9Yy5zZWFyY2godSk7cmV0dXJuLTE9PWM/MDpjfWZ1bmN0aW9uIEooYyxkLGEpe3JldHVybi9cXGJzdHJpbmdcXGIvLnRlc3QoYy5nZXRUb2tlblR5cGVBdChsKGQubGluZSwwKSkpJiYhL15bJ1wiYF0vLnRlc3QoYSl9ZnVuY3Rpb24gRyhjLGQpe3ZhciBhPWMuZ2V0TW9kZSgpO3JldHVybiExIT09YS51c2VJbm5lckNvbW1lbnRzJiZhLmlubmVyTW9kZT9jLmdldE1vZGVBdChkKTphfXZhciBFPXt9LHU9L1teXFxzXFx1MDBhMF0vLGw9ci5Qb3MsSz1yLmNtcFBvcztyLmNvbW1hbmRzLnRvZ2dsZUNvbW1lbnQ9ZnVuY3Rpb24oYyl7Yy50b2dnbGVDb21tZW50KCl9O1xuci5kZWZpbmVFeHRlbnNpb24oXCJ0b2dnbGVDb21tZW50XCIsZnVuY3Rpb24oYyl7Y3x8KGM9RSk7Zm9yKHZhciBkPUluZmluaXR5LGE9dGhpcy5saXN0U2VsZWN0aW9ucygpLGI9bnVsbCxlPWEubGVuZ3RoLTE7MDw9ZTtlLS0pe3ZhciBnPWFbZV0uZnJvbSgpLGY9YVtlXS50bygpO2cubGluZT49ZHx8KGYubGluZT49ZCYmKGY9bChkLDApKSxkPWcubGluZSxudWxsPT1iP3RoaXMudW5jb21tZW50KGcsZixjKT9iPVwidW5cIjoodGhpcy5saW5lQ29tbWVudChnLGYsYyksYj1cImxpbmVcIik6XCJ1blwiPT1iP3RoaXMudW5jb21tZW50KGcsZixjKTp0aGlzLmxpbmVDb21tZW50KGcsZixjKSl9fSk7ci5kZWZpbmVFeHRlbnNpb24oXCJsaW5lQ29tbWVudFwiLGZ1bmN0aW9uKGMsZCxhKXthfHwoYT1FKTt2YXIgYj10aGlzLGU9RyhiLGMpLGc9Yi5nZXRMaW5lKGMubGluZSk7aWYobnVsbCE9ZyYmIUooYixjLGcpKXt2YXIgZj1hLmxpbmVDb21tZW50fHxlLmxpbmVDb21tZW50O2lmKGYpe3ZhciBtPU1hdGgubWluKDAhPVxuZC5jaHx8ZC5saW5lPT1jLmxpbmU/ZC5saW5lKzE6ZC5saW5lLGIubGFzdExpbmUoKSsxKSx2PW51bGw9PWEucGFkZGluZz9cIiBcIjphLnBhZGRpbmcsaz1hLmNvbW1lbnRCbGFua0xpbmVzfHxjLmxpbmU9PWQubGluZTtiLm9wZXJhdGlvbihmdW5jdGlvbigpe2lmKGEuaW5kZW50KXtmb3IodmFyIHE9bnVsbCxoPWMubGluZTtoPG07KytoKXt2YXIgbj1iLmdldExpbmUoaCk7bj0tMT09PW4uc2VhcmNoKHUpP246bi5zbGljZSgwLEkobikpO2lmKG51bGw9PXF8fHEubGVuZ3RoPm4ubGVuZ3RoKXE9bn1mb3IoaD1jLmxpbmU7aDxtOysraCl7bj1iLmdldExpbmUoaCk7dmFyIHQ9cS5sZW5ndGg7aWYoa3x8dS50ZXN0KG4pKW4uc2xpY2UoMCx0KSE9cSYmKHQ9SShuKSksYi5yZXBsYWNlUmFuZ2UocStmK3YsbChoLDApLGwoaCx0KSl9fWVsc2UgZm9yKGg9Yy5saW5lO2g8bTsrK2gpKGt8fHUudGVzdChiLmdldExpbmUoaCkpKSYmYi5yZXBsYWNlUmFuZ2UoZit2LGwoaCwwKSl9KX1lbHNlIGlmKGEuYmxvY2tDb21tZW50U3RhcnR8fFxuZS5ibG9ja0NvbW1lbnRTdGFydClhLmZ1bGxMaW5lcz0hMCxiLmJsb2NrQ29tbWVudChjLGQsYSl9fSk7ci5kZWZpbmVFeHRlbnNpb24oXCJibG9ja0NvbW1lbnRcIixmdW5jdGlvbihjLGQsYSl7YXx8KGE9RSk7dmFyIGI9dGhpcyxlPUcoYixjKSxnPWEuYmxvY2tDb21tZW50U3RhcnR8fGUuYmxvY2tDb21tZW50U3RhcnQsZj1hLmJsb2NrQ29tbWVudEVuZHx8ZS5ibG9ja0NvbW1lbnRFbmQ7aWYoIWd8fCFmKShhLmxpbmVDb21tZW50fHxlLmxpbmVDb21tZW50KSYmMCE9YS5mdWxsTGluZXMmJmIubGluZUNvbW1lbnQoYyxkLGEpO2Vsc2UgaWYoIS9cXGJjb21tZW50XFxiLy50ZXN0KGIuZ2V0VG9rZW5UeXBlQXQobChjLmxpbmUsMCkpKSl7dmFyIG09TWF0aC5taW4oZC5saW5lLGIubGFzdExpbmUoKSk7bSE9Yy5saW5lJiYwPT1kLmNoJiZ1LnRlc3QoYi5nZXRMaW5lKG0pKSYmLS1tO3ZhciB2PW51bGw9PWEucGFkZGluZz9cIiBcIjphLnBhZGRpbmc7Yy5saW5lPm18fGIub3BlcmF0aW9uKGZ1bmN0aW9uKCl7aWYoMCE9XG5hLmZ1bGxMaW5lcyl7dmFyIGs9dS50ZXN0KGIuZ2V0TGluZShtKSk7Yi5yZXBsYWNlUmFuZ2UoditmLGwobSkpO2IucmVwbGFjZVJhbmdlKGcrdixsKGMubGluZSwwKSk7dmFyIHE9YS5ibG9ja0NvbW1lbnRMZWFkfHxlLmJsb2NrQ29tbWVudExlYWQ7aWYobnVsbCE9cSlmb3IodmFyIGg9Yy5saW5lKzE7aDw9bTsrK2gpKGghPW18fGspJiZiLnJlcGxhY2VSYW5nZShxK3YsbChoLDApKX1lbHNlIGs9MD09SyhiLmdldEN1cnNvcihcInRvXCIpLGQpLHE9IWIuc29tZXRoaW5nU2VsZWN0ZWQoKSxiLnJlcGxhY2VSYW5nZShmLGQpLGsmJmIuc2V0U2VsZWN0aW9uKHE/ZDpiLmdldEN1cnNvcihcImZyb21cIiksZCksYi5yZXBsYWNlUmFuZ2UoZyxjKX0pfX0pO3IuZGVmaW5lRXh0ZW5zaW9uKFwidW5jb21tZW50XCIsZnVuY3Rpb24oYyxkLGEpe2F8fChhPUUpO3ZhciBiPXRoaXMsZT1HKGIsYyksZz1NYXRoLm1pbigwIT1kLmNofHxkLmxpbmU9PWMubGluZT9kLmxpbmU6ZC5saW5lLTEsYi5sYXN0TGluZSgpKSxcbmY9TWF0aC5taW4oYy5saW5lLGcpLG09YS5saW5lQ29tbWVudHx8ZS5saW5lQ29tbWVudCx2PVtdLGs9bnVsbD09YS5wYWRkaW5nP1wiIFwiOmEucGFkZGluZyxxO2E6aWYobSl7Zm9yKHZhciBoPWY7aDw9ZzsrK2gpe3ZhciBuPWIuZ2V0TGluZShoKSx0PW4uaW5kZXhPZihtKTstMTx0JiYhL2NvbW1lbnQvLnRlc3QoYi5nZXRUb2tlblR5cGVBdChsKGgsdCsxKSkpJiYodD0tMSk7aWYoLTE9PXQmJnUudGVzdChuKSlicmVhayBhO2lmKC0xPHQmJnUudGVzdChuLnNsaWNlKDAsdCkpKWJyZWFrIGE7di5wdXNoKG4pfWIub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Zm9yKHZhciBwPWY7cDw9ZzsrK3Ape3ZhciBBPXZbcC1mXSx4PUEuaW5kZXhPZihtKSx3PXgrbS5sZW5ndGg7MD54fHwoQS5zbGljZSh3LHcray5sZW5ndGgpPT1rJiYodys9ay5sZW5ndGgpLHE9ITAsYi5yZXBsYWNlUmFuZ2UoXCJcIixsKHAseCksbChwLHcpKSl9fSk7aWYocSlyZXR1cm4hMH12YXIgeT1hLmJsb2NrQ29tbWVudFN0YXJ0fHxcbmUuYmxvY2tDb21tZW50U3RhcnQsej1hLmJsb2NrQ29tbWVudEVuZHx8ZS5ibG9ja0NvbW1lbnRFbmQ7aWYoIXl8fCF6KXJldHVybiExO3ZhciBIPWEuYmxvY2tDb21tZW50TGVhZHx8ZS5ibG9ja0NvbW1lbnRMZWFkLEM9Yi5nZXRMaW5lKGYpLEQ9Qy5pbmRleE9mKHkpO2lmKC0xPT1EKXJldHVybiExO3ZhciBGPWc9PWY/QzpiLmdldExpbmUoZyksQj1GLmluZGV4T2YoeixnPT1mP0QreS5sZW5ndGg6MCk7YT1sKGYsRCsxKTtlPWwoZyxCKzEpO2lmKC0xPT1CfHwhL2NvbW1lbnQvLnRlc3QoYi5nZXRUb2tlblR5cGVBdChhKSl8fCEvY29tbWVudC8udGVzdChiLmdldFRva2VuVHlwZUF0KGUpKXx8LTE8Yi5nZXRSYW5nZShhLGUsXCJcXG5cIikuaW5kZXhPZih6KSlyZXR1cm4hMTtlPUMubGFzdEluZGV4T2YoeSxjLmNoKTthPS0xPT1lPy0xOkMuc2xpY2UoMCxjLmNoKS5pbmRleE9mKHosZSt5Lmxlbmd0aCk7aWYoLTEhPWUmJi0xIT1hJiZhK3oubGVuZ3RoIT1jLmNoKXJldHVybiExO2E9Ri5pbmRleE9mKHosXG5kLmNoKTtjPUYuc2xpY2UoZC5jaCkubGFzdEluZGV4T2YoeSxhLWQuY2gpO2U9LTE9PWF8fC0xPT1jPy0xOmQuY2grYztpZigtMSE9YSYmLTEhPWUmJmUhPWQuY2gpcmV0dXJuITE7Yi5vcGVyYXRpb24oZnVuY3Rpb24oKXtiLnJlcGxhY2VSYW5nZShcIlwiLGwoZyxCLShrJiZGLnNsaWNlKEItay5sZW5ndGgsQik9PWs/ay5sZW5ndGg6MCkpLGwoZyxCK3oubGVuZ3RoKSk7dmFyIHA9RCt5Lmxlbmd0aDtrJiZDLnNsaWNlKHAscCtrLmxlbmd0aCk9PWsmJihwKz1rLmxlbmd0aCk7Yi5yZXBsYWNlUmFuZ2UoXCJcIixsKGYsRCksbChmLHApKTtpZihIKWZvcihwPWYrMTtwPD1nOysrcCl7dmFyIEE9Yi5nZXRMaW5lKHApLHg9QS5pbmRleE9mKEgpO2lmKC0xIT14JiYhdS50ZXN0KEEuc2xpY2UoMCx4KSkpe3ZhciB3PXgrSC5sZW5ndGg7ayYmQS5zbGljZSh3LHcray5sZW5ndGgpPT1rJiYodys9ay5sZW5ndGgpO2IucmVwbGFjZVJhbmdlKFwiXCIsbChwLHgpLGwocCx3KSl9fX0pO3JldHVybiEwfSl9KTtcbiIsIihmdW5jdGlvbihtKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSxtKTptKENvZGVNaXJyb3IpfSkoZnVuY3Rpb24obSl7ZnVuY3Rpb24gcShhLGIpe2Zvcih2YXIgbD0wLGU9YS5sZW5ndGg7bDxlOysrbCliKGFbbF0pfWZ1bmN0aW9uIHQoYSxiLGwsZSl7dmFyIGM9YS5nZXRDdXJzb3IoKSxkPWwoYSxjKTtpZighL1xcYig/OnN0cmluZ3xjb21tZW50KVxcYi8udGVzdChkLnR5cGUpKXt2YXIgZz1tLmlubmVyTW9kZShhLmdldE1vZGUoKSxkLnN0YXRlKTtpZihcImpzb25cIiE9PWcubW9kZS5oZWxwZXJUeXBlKXtkLnN0YXRlPWcuc3RhdGU7L15bXFx3JF9dKiQvLnRlc3QoZC5zdHJpbmcpP2QuZW5kPmMuY2gmJihkLmVuZD1jLmNoLGQuc3RyaW5nPWQuc3RyaW5nLnNsaWNlKDAsXG5jLmNoLWQuc3RhcnQpKTpkPXtzdGFydDpjLmNoLGVuZDpjLmNoLHN0cmluZzpcIlwiLHN0YXRlOmQuc3RhdGUsdHlwZTpcIi5cIj09ZC5zdHJpbmc/XCJwcm9wZXJ0eVwiOm51bGx9O2ZvcihnPWQ7XCJwcm9wZXJ0eVwiPT1nLnR5cGU7KXtnPWwoYSxyKGMubGluZSxnLnN0YXJ0KSk7aWYoXCIuXCIhPWcuc3RyaW5nKXJldHVybjtnPWwoYSxyKGMubGluZSxnLnN0YXJ0KSk7aWYoIXApdmFyIHA9W107cC5wdXNoKGcpfXJldHVybntsaXN0OnUoZCxwLGIsZSksZnJvbTpyKGMubGluZSxkLnN0YXJ0KSx0bzpyKGMubGluZSxkLmVuZCl9fX19ZnVuY3Rpb24gdihhLGIpe2E9YS5nZXRUb2tlbkF0KGIpO2IuY2g9PWEuc3RhcnQrMSYmXCIuXCI9PWEuc3RyaW5nLmNoYXJBdCgwKT8oYS5lbmQ9YS5zdGFydCxhLnN0cmluZz1cIi5cIixhLnR5cGU9XCJwcm9wZXJ0eVwiKTovXlxcLltcXHckX10qJC8udGVzdChhLnN0cmluZykmJihhLnR5cGU9XCJwcm9wZXJ0eVwiLGEuc3RhcnQrKyxhLnN0cmluZz1hLnN0cmluZy5yZXBsYWNlKC9cXC4vLFxuXCJcIikpO3JldHVybiBhfWZ1bmN0aW9uIHUoYSxiLGwsZSl7ZnVuY3Rpb24gYyhoKXt2YXIgaztpZihrPTA9PWgubGFzdEluZGV4T2YocCwwKSl7YTppZihBcnJheS5wcm90b3R5cGUuaW5kZXhPZilrPS0xIT1nLmluZGV4T2YoaCk7ZWxzZXtmb3Ioaz1nLmxlbmd0aDtrLS07KWlmKGdba109PT1oKXtrPSEwO2JyZWFrIGF9az0hMX1rPSFrfWsmJmcucHVzaChoKX1mdW5jdGlvbiBkKGgpe1wic3RyaW5nXCI9PXR5cGVvZiBoP3EodyxjKTpoIGluc3RhbmNlb2YgQXJyYXk/cSh4LGMpOmggaW5zdGFuY2VvZiBGdW5jdGlvbiYmcSh5LGMpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YpZm9yKDtoO2g9T2JqZWN0LmdldFByb3RvdHlwZU9mKGgpKU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGgpLmZvckVhY2goYyk7ZWxzZSBmb3IodmFyIGsgaW4gaCljKGspfXZhciBnPVtdLHA9YS5zdHJpbmcsbj1lJiZlLmdsb2JhbFNjb3BlfHx3aW5kb3c7aWYoYiYmXG5iLmxlbmd0aCl7YT1iLnBvcCgpO3ZhciBmO2EudHlwZSYmMD09PWEudHlwZS5pbmRleE9mKFwidmFyaWFibGVcIik/KGUmJmUuYWRkaXRpb25hbENvbnRleHQmJihmPWUuYWRkaXRpb25hbENvbnRleHRbYS5zdHJpbmddKSxlJiYhMT09PWUudXNlR2xvYmFsU2NvcGV8fChmPWZ8fG5bYS5zdHJpbmddKSk6XCJzdHJpbmdcIj09YS50eXBlP2Y9XCJcIjpcImF0b21cIj09YS50eXBlP2Y9MTpcImZ1bmN0aW9uXCI9PWEudHlwZSYmKG51bGw9PW4ualF1ZXJ5fHxcIiRcIiE9YS5zdHJpbmcmJlwialF1ZXJ5XCIhPWEuc3RyaW5nfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBuLmpRdWVyeT9udWxsIT1uLl8mJlwiX1wiPT1hLnN0cmluZyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fJiYoZj1uLl8oKSk6Zj1uLmpRdWVyeSgpKTtmb3IoO251bGwhPWYmJmIubGVuZ3RoOylmPWZbYi5wb3AoKS5zdHJpbmddO251bGwhPWYmJmQoZil9ZWxzZXtmb3IoYj1hLnN0YXRlLmxvY2FsVmFycztiO2I9Yi5uZXh0KWMoYi5uYW1lKTtmb3IoZj1hLnN0YXRlLmNvbnRleHQ7ZjtmPVxuZi5wcmV2KWZvcihiPWYudmFycztiO2I9Yi5uZXh0KWMoYi5uYW1lKTtmb3IoYj1hLnN0YXRlLmdsb2JhbFZhcnM7YjtiPWIubmV4dCljKGIubmFtZSk7aWYoZSYmbnVsbCE9ZS5hZGRpdGlvbmFsQ29udGV4dClmb3IodmFyIHogaW4gZS5hZGRpdGlvbmFsQ29udGV4dCljKHopO2UmJiExPT09ZS51c2VHbG9iYWxTY29wZXx8ZChuKTtxKGwsYyl9cmV0dXJuIGd9dmFyIHI9bS5Qb3M7bS5yZWdpc3RlckhlbHBlcihcImhpbnRcIixcImphdmFzY3JpcHRcIixmdW5jdGlvbihhLGIpe3JldHVybiB0KGEsQSxmdW5jdGlvbihsLGUpe3JldHVybiBsLmdldFRva2VuQXQoZSl9LGIpfSk7bS5yZWdpc3RlckhlbHBlcihcImhpbnRcIixcImNvZmZlZXNjcmlwdFwiLGZ1bmN0aW9uKGEsYil7cmV0dXJuIHQoYSxCLHYsYil9KTt2YXIgdz1cImNoYXJBdCBjaGFyQ29kZUF0IGluZGV4T2YgbGFzdEluZGV4T2Ygc3Vic3RyaW5nIHN1YnN0ciBzbGljZSB0cmltIHRyaW1MZWZ0IHRyaW1SaWdodCB0b1VwcGVyQ2FzZSB0b0xvd2VyQ2FzZSBzcGxpdCBjb25jYXQgbWF0Y2ggcmVwbGFjZSBzZWFyY2hcIi5zcGxpdChcIiBcIiksXG54PVwibGVuZ3RoIGNvbmNhdCBqb2luIHNwbGljZSBwdXNoIHBvcCBzaGlmdCB1bnNoaWZ0IHNsaWNlIHJldmVyc2Ugc29ydCBpbmRleE9mIGxhc3RJbmRleE9mIGV2ZXJ5IHNvbWUgZmlsdGVyIGZvckVhY2ggbWFwIHJlZHVjZSByZWR1Y2VSaWdodCBcIi5zcGxpdChcIiBcIikseT1bXCJwcm90b3R5cGVcIixcImFwcGx5XCIsXCJjYWxsXCIsXCJiaW5kXCJdLEE9XCJicmVhayBjYXNlIGNhdGNoIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlYnVnZ2VyIGRlZmF1bHQgZGVsZXRlIGRvIGVsc2UgZXhwb3J0IGV4dGVuZHMgZmFsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gaWYgaW4gaW1wb3J0IGluc3RhbmNlb2YgbmV3IG51bGwgcmV0dXJuIHN1cGVyIHN3aXRjaCB0aGlzIHRocm93IHRydWUgdHJ5IHR5cGVvZiB2YXIgdm9pZCB3aGlsZSB3aXRoIHlpZWxkXCIuc3BsaXQoXCIgXCIpLEI9XCJhbmQgYnJlYWsgY2F0Y2ggY2xhc3MgY29udGludWUgZGVsZXRlIGRvIGVsc2UgZXh0ZW5kcyBmYWxzZSBmaW5hbGx5IGZvciBpZiBpbiBpbnN0YW5jZW9mIGlzbnQgbmV3IG5vIG5vdCBudWxsIG9mIG9mZiBvbiBvciByZXR1cm4gc3dpdGNoIHRoZW4gdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVudGlsIHZvaWQgd2hpbGUgd2l0aCB5ZXNcIi5zcGxpdChcIiBcIil9KTtcbiIsIihmdW5jdGlvbihoKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9oKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSxoKTpoKENvZGVNaXJyb3IpfSkoZnVuY3Rpb24oaCl7ZnVuY3Rpb24gQihhLGIpe3RoaXMuY209YTt0aGlzLm9wdGlvbnM9Yjt0aGlzLndpZGdldD1udWxsO3RoaXMudGljaz10aGlzLmRlYm91bmNlPTA7dGhpcy5zdGFydFBvcz10aGlzLmNtLmdldEN1cnNvcihcInN0YXJ0XCIpO3RoaXMuc3RhcnRMZW49dGhpcy5jbS5nZXRMaW5lKHRoaXMuc3RhcnRQb3MubGluZSkubGVuZ3RoLXRoaXMuY20uZ2V0U2VsZWN0aW9uKCkubGVuZ3RoO2lmKHRoaXMub3B0aW9ucy51cGRhdGVPbkN1cnNvckFjdGl2aXR5KXt2YXIgYz10aGlzO2Eub24oXCJjdXJzb3JBY3Rpdml0eVwiLHRoaXMuYWN0aXZpdHlGdW5jPVxuZnVuY3Rpb24oKXtjLmN1cnNvckFjdGl2aXR5KCl9KX19ZnVuY3Rpb24gSyhhLGIpe2Z1bmN0aW9uIGMocixnKXt2YXIgbT1cInN0cmluZ1wiIT10eXBlb2YgZz9mdW5jdGlvbihrKXtyZXR1cm4gZyhrLGIpfTpkLmhhc093blByb3BlcnR5KGcpP2RbZ106ZztwW3JdPW19dmFyIGQ9e1VwOmZ1bmN0aW9uKCl7Yi5tb3ZlRm9jdXMoLTEpfSxEb3duOmZ1bmN0aW9uKCl7Yi5tb3ZlRm9jdXMoMSl9LFBhZ2VVcDpmdW5jdGlvbigpe2IubW92ZUZvY3VzKC1iLm1lbnVTaXplKCkrMSwhMCl9LFBhZ2VEb3duOmZ1bmN0aW9uKCl7Yi5tb3ZlRm9jdXMoYi5tZW51U2l6ZSgpLTEsITApfSxIb21lOmZ1bmN0aW9uKCl7Yi5zZXRGb2N1cygwKX0sRW5kOmZ1bmN0aW9uKCl7Yi5zZXRGb2N1cyhiLmxlbmd0aC0xKX0sRW50ZXI6Yi5waWNrLFRhYjpiLnBpY2ssRXNjOmIuY2xvc2V9Oy9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSYmKGRbXCJDdHJsLVBcIl09ZnVuY3Rpb24oKXtiLm1vdmVGb2N1cygtMSl9LFxuZFtcIkN0cmwtTlwiXT1mdW5jdGlvbigpe2IubW92ZUZvY3VzKDEpfSk7dmFyIGU9YS5vcHRpb25zLmN1c3RvbUtleXMscD1lP3t9OmQ7aWYoZSlmb3IodmFyIGYgaW4gZSllLmhhc093blByb3BlcnR5KGYpJiZjKGYsZVtmXSk7aWYoYT1hLm9wdGlvbnMuZXh0cmFLZXlzKWZvcihmIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShmKSYmYyhmLGFbZl0pO3JldHVybiBwfWZ1bmN0aW9uIEMoYSxiKXtmb3IoO2ImJmIhPWE7KXtpZihcIkxJXCI9PT1iLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkmJmIucGFyZW50Tm9kZT09YSlyZXR1cm4gYjtiPWIucGFyZW50Tm9kZX19ZnVuY3Rpb24gRChhLGIpe3RoaXMuaWQ9XCJjbS1jb21wbGV0ZS1cIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKDFFNikpO3RoaXMuY29tcGxldGlvbj1hO3RoaXMuZGF0YT1iO3RoaXMucGlja2VkPSExO3ZhciBjPXRoaXMsZD1hLmNtLGU9ZC5nZXRJbnB1dEZpZWxkKCkub3duZXJEb2N1bWVudCxwPWUuZGVmYXVsdFZpZXd8fGUucGFyZW50V2luZG93LFxuZj10aGlzLmhpbnRzPWUuY3JlYXRlRWxlbWVudChcInVsXCIpO2Yuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwibGlzdGJveFwiKTtmLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIixcInRydWVcIik7Zi5pZD10aGlzLmlkO2YuY2xhc3NOYW1lPVwiQ29kZU1pcnJvci1oaW50cyBcIithLmNtLm9wdGlvbnMudGhlbWU7dGhpcy5zZWxlY3RlZEhpbnQ9Yi5zZWxlY3RlZEhpbnR8fDA7Zm9yKHZhciByPWIubGlzdCxnPTA7ZzxyLmxlbmd0aDsrK2cpe3ZhciBtPWYuYXBwZW5kQ2hpbGQoZS5jcmVhdGVFbGVtZW50KFwibGlcIikpLGs9cltnXSxxPVwiQ29kZU1pcnJvci1oaW50XCIrKGchPXRoaXMuc2VsZWN0ZWRIaW50P1wiXCI6XCIgQ29kZU1pcnJvci1oaW50LWFjdGl2ZVwiKTtudWxsIT1rLmNsYXNzTmFtZSYmKHE9ay5jbGFzc05hbWUrXCIgXCIrcSk7bS5jbGFzc05hbWU9cTtnPT10aGlzLnNlbGVjdGVkSGludCYmbS5zZXRBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIsXCJ0cnVlXCIpO20uaWQ9dGhpcy5pZCtcIi1cIitnO1xubS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJvcHRpb25cIik7ay5yZW5kZXI/ay5yZW5kZXIobSxiLGspOm0uYXBwZW5kQ2hpbGQoZS5jcmVhdGVUZXh0Tm9kZShrLmRpc3BsYXlUZXh0fHwoXCJzdHJpbmdcIj09dHlwZW9mIGs/azprLnRleHQpKSk7bS5oaW50SWQ9Z312YXIgbj1hLm9wdGlvbnMuY29udGFpbmVyfHxlLmJvZHk7Zz1kLmN1cnNvckNvb3JkcyhhLm9wdGlvbnMuYWxpZ25XaXRoV29yZD9iLmZyb206bnVsbCk7dmFyIHc9Zy5sZWZ0LHg9Zy5ib3R0b20sRT0hMDtxPW09MDtpZihuIT09ZS5ib2R5KXtrPS0xIT09W1wiYWJzb2x1dGVcIixcInJlbGF0aXZlXCIsXCJmaXhlZFwiXS5pbmRleE9mKHAuZ2V0Q29tcHV0ZWRTdHlsZShuKS5wb3NpdGlvbik/bjpuLm9mZnNldFBhcmVudDtxPWsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIHQ9ZS5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO209cS5sZWZ0LXQubGVmdC1rLnNjcm9sbExlZnQ7cT1xLnRvcC10LnRvcC1rLnNjcm9sbFRvcH1mLnN0eWxlLmxlZnQ9XG53LW0rXCJweFwiO2Yuc3R5bGUudG9wPXgtcStcInB4XCI7az1wLmlubmVyV2lkdGh8fE1hdGgubWF4KGUuYm9keS5vZmZzZXRXaWR0aCxlLmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCk7dD1wLmlubmVySGVpZ2h0fHxNYXRoLm1heChlLmJvZHkub2Zmc2V0SGVpZ2h0LGUuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCk7bi5hcHBlbmRDaGlsZChmKTtkLmdldElucHV0RmllbGQoKS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWF1dG9jb21wbGV0ZVwiLFwibGlzdFwiKTtkLmdldElucHV0RmllbGQoKS5zZXRBdHRyaWJ1dGUoXCJhcmlhLW93bnNcIix0aGlzLmlkKTtkLmdldElucHV0RmllbGQoKS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIix0aGlzLmlkK1wiLVwiK3RoaXMuc2VsZWN0ZWRIaW50KTtuPWEub3B0aW9ucy5tb3ZlT25PdmVybGFwP2YuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6bmV3IERPTVJlY3Q7dmFyIEY9YS5vcHRpb25zLnBhZGRpbmdGb3JTY3JvbGxiYXI/Zi5zY3JvbGxIZWlnaHQ+XG5mLmNsaWVudEhlaWdodCsxOiExLHU7c2V0VGltZW91dChmdW5jdGlvbigpe3U9ZC5nZXRTY3JvbGxJbmZvKCl9KTtpZigwPG4uYm90dG9tLXQpe3ZhciB5PW4uYm90dG9tLW4udG9wLHo9bi50b3AtKGcuYm90dG9tLWcudG9wKS0yO3Qtbi50b3A8ej8oeT56JiYoZi5zdHlsZS5oZWlnaHQ9KHk9eikrXCJweFwiKSxmLnN0eWxlLnRvcD0oeD1nLnRvcC15KStxK1wicHhcIixFPSExKTpmLnN0eWxlLmhlaWdodD10LW4udG9wLTIrXCJweFwifXE9bi5yaWdodC1rO0YmJihxKz1kLmRpc3BsYXkubmF0aXZlQmFyV2lkdGgpOzA8cSYmKG4ucmlnaHQtbi5sZWZ0PmsmJihmLnN0eWxlLndpZHRoPWstNStcInB4XCIscS09bi5yaWdodC1uLmxlZnQtayksZi5zdHlsZS5sZWZ0PSh3PU1hdGgubWF4KGcubGVmdC1xLW0sMCkpK1wicHhcIik7aWYoRilmb3IoZz1mLmZpcnN0Q2hpbGQ7ZztnPWcubmV4dFNpYmxpbmcpZy5zdHlsZS5wYWRkaW5nUmlnaHQ9ZC5kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoK1wicHhcIjtkLmFkZEtleU1hcCh0aGlzLmtleU1hcD1cbksoYSx7bW92ZUZvY3VzOmZ1bmN0aW9uKGwsdil7Yy5jaGFuZ2VBY3RpdmUoYy5zZWxlY3RlZEhpbnQrbCx2KX0sc2V0Rm9jdXM6ZnVuY3Rpb24obCl7Yy5jaGFuZ2VBY3RpdmUobCl9LG1lbnVTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGMuc2NyZWVuQW1vdW50KCl9LGxlbmd0aDpyLmxlbmd0aCxjbG9zZTpmdW5jdGlvbigpe2EuY2xvc2UoKX0scGljazpmdW5jdGlvbigpe2MucGljaygpfSxkYXRhOmJ9KSk7aWYoYS5vcHRpb25zLmNsb3NlT25VbmZvY3VzKXt2YXIgRztkLm9uKFwiYmx1clwiLHRoaXMub25CbHVyPWZ1bmN0aW9uKCl7Rz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5jbG9zZSgpfSwxMDApfSk7ZC5vbihcImZvY3VzXCIsdGhpcy5vbkZvY3VzPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KEcpfSl9ZC5vbihcInNjcm9sbFwiLHRoaXMub25TY3JvbGw9ZnVuY3Rpb24oKXt2YXIgbD1kLmdldFNjcm9sbEluZm8oKSx2PWQuZ2V0V3JhcHBlckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbnV8fCh1PWQuZ2V0U2Nyb2xsSW5mbygpKTt2YXIgSD14K3UudG9wLWwudG9wLEE9SC0ocC5wYWdlWU9mZnNldHx8KGUuZG9jdW1lbnRFbGVtZW50fHxlLmJvZHkpLnNjcm9sbFRvcCk7RXx8KEErPWYub2Zmc2V0SGVpZ2h0KTtpZihBPD12LnRvcHx8QT49di5ib3R0b20pcmV0dXJuIGEuY2xvc2UoKTtmLnN0eWxlLnRvcD1IK1wicHhcIjtmLnN0eWxlLmxlZnQ9dyt1LmxlZnQtbC5sZWZ0K1wicHhcIn0pO2gub24oZixcImRibGNsaWNrXCIsZnVuY3Rpb24obCl7KGw9QyhmLGwudGFyZ2V0fHxsLnNyY0VsZW1lbnQpKSYmbnVsbCE9bC5oaW50SWQmJihjLmNoYW5nZUFjdGl2ZShsLmhpbnRJZCksYy5waWNrKCkpfSk7aC5vbihmLFwiY2xpY2tcIixmdW5jdGlvbihsKXsobD1DKGYsbC50YXJnZXR8fGwuc3JjRWxlbWVudCkpJiZudWxsIT1sLmhpbnRJZCYmKGMuY2hhbmdlQWN0aXZlKGwuaGludElkKSxhLm9wdGlvbnMuY29tcGxldGVPblNpbmdsZUNsaWNrJiZjLnBpY2soKSl9KTtoLm9uKGYsXCJtb3VzZWRvd25cIixcbmZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2QuZm9jdXMoKX0sMjApfSk7Zz10aGlzLmdldFNlbGVjdGVkSGludFJhbmdlKCk7MD09PWcuZnJvbSYmMD09PWcudG98fHRoaXMuc2Nyb2xsVG9BY3RpdmUoKTtoLnNpZ25hbChiLFwic2VsZWN0XCIsclt0aGlzLnNlbGVjdGVkSGludF0sZi5jaGlsZE5vZGVzW3RoaXMuc2VsZWN0ZWRIaW50XSk7cmV0dXJuITB9ZnVuY3Rpb24gTChhLGIpe2lmKCFhLnNvbWV0aGluZ1NlbGVjdGVkKCkpcmV0dXJuIGI7YT1bXTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLnN1cHBvcnRzU2VsZWN0aW9uJiZhLnB1c2goYltjXSk7cmV0dXJuIGF9ZnVuY3Rpb24gSShhLGIsYyxkKXthLmFzeW5jP2EoYixkLGMpOihhPWEoYixjKSkmJmEudGhlbj9hLnRoZW4oZCk6ZChhKX1oLnNob3dIaW50PWZ1bmN0aW9uKGEsYixjKXtpZighYilyZXR1cm4gYS5zaG93SGludChjKTtjJiZjLmFzeW5jJiYoYi5hc3luYz0hMCk7Yj17aGludDpifTtpZihjKWZvcih2YXIgZCBpbiBjKWJbZF09XG5jW2RdO3JldHVybiBhLnNob3dIaW50KGIpfTtoLmRlZmluZUV4dGVuc2lvbihcInNob3dIaW50XCIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nZXRDdXJzb3IoXCJzdGFydFwiKSxjPXRoaXMub3B0aW9ucy5oaW50T3B0aW9ucyxkPXt9LGU7Zm9yKGUgaW4gSilkW2VdPUpbZV07aWYoYylmb3IoZSBpbiBjKXZvaWQgMCE9PWNbZV0mJihkW2VdPWNbZV0pO2lmKGEpZm9yKGUgaW4gYSl2b2lkIDAhPT1hW2VdJiYoZFtlXT1hW2VdKTtkLmhpbnQucmVzb2x2ZSYmKGQuaGludD1kLmhpbnQucmVzb2x2ZSh0aGlzLGIpKTthPWQ7Yj10aGlzLmxpc3RTZWxlY3Rpb25zKCk7aWYoISgxPGIubGVuZ3RoKSl7aWYodGhpcy5zb21ldGhpbmdTZWxlY3RlZCgpKXtpZighYS5oaW50LnN1cHBvcnRzU2VsZWN0aW9uKXJldHVybjtmb3IoZT0wO2U8Yi5sZW5ndGg7ZSsrKWlmKGJbZV0uaGVhZC5saW5lIT1iW2VdLmFuY2hvci5saW5lKXJldHVybn10aGlzLnN0YXRlLmNvbXBsZXRpb25BY3RpdmUmJnRoaXMuc3RhdGUuY29tcGxldGlvbkFjdGl2ZS5jbG9zZSgpO1xuYj10aGlzLnN0YXRlLmNvbXBsZXRpb25BY3RpdmU9bmV3IEIodGhpcyxhKTtiLm9wdGlvbnMuaGludCYmKGguc2lnbmFsKHRoaXMsXCJzdGFydENvbXBsZXRpb25cIix0aGlzKSxiLnVwZGF0ZSghMCkpfX0pO2guZGVmaW5lRXh0ZW5zaW9uKFwiY2xvc2VIaW50XCIsZnVuY3Rpb24oKXt0aGlzLnN0YXRlLmNvbXBsZXRpb25BY3RpdmUmJnRoaXMuc3RhdGUuY29tcGxldGlvbkFjdGl2ZS5jbG9zZSgpfSk7dmFyIE09d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oYSl7cmV0dXJuIHNldFRpbWVvdXQoYSwxRTMvNjApfSxOPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8Y2xlYXJUaW1lb3V0O0IucHJvdG90eXBlPXtjbG9zZTpmdW5jdGlvbigpe3RoaXMuYWN0aXZlKCkmJih0aGlzLnRpY2s9dGhpcy5jbS5zdGF0ZS5jb21wbGV0aW9uQWN0aXZlPW51bGwsdGhpcy5vcHRpb25zLnVwZGF0ZU9uQ3Vyc29yQWN0aXZpdHkmJnRoaXMuY20ub2ZmKFwiY3Vyc29yQWN0aXZpdHlcIixcbnRoaXMuYWN0aXZpdHlGdW5jKSx0aGlzLndpZGdldCYmdGhpcy5kYXRhJiZoLnNpZ25hbCh0aGlzLmRhdGEsXCJjbG9zZVwiKSx0aGlzLndpZGdldCYmdGhpcy53aWRnZXQuY2xvc2UoKSxoLnNpZ25hbCh0aGlzLmNtLFwiZW5kQ29tcGxldGlvblwiLHRoaXMuY20pKX0sYWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY20uc3RhdGUuY29tcGxldGlvbkFjdGl2ZT09dGhpc30scGljazpmdW5jdGlvbihhLGIpe3ZhciBjPWEubGlzdFtiXSxkPXRoaXM7dGhpcy5jbS5vcGVyYXRpb24oZnVuY3Rpb24oKXtjLmhpbnQ/Yy5oaW50KGQuY20sYSxjKTpkLmNtLnJlcGxhY2VSYW5nZShcInN0cmluZ1wiPT10eXBlb2YgYz9jOmMudGV4dCxjLmZyb218fGEuZnJvbSxjLnRvfHxhLnRvLFwiY29tcGxldGVcIik7aC5zaWduYWwoYSxcInBpY2tcIixjKTtkLmNtLnNjcm9sbEludG9WaWV3KCl9KTt0aGlzLm9wdGlvbnMuY2xvc2VPblBpY2smJnRoaXMuY2xvc2UoKX0sY3Vyc29yQWN0aXZpdHk6ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlJiZcbihOKHRoaXMuZGVib3VuY2UpLHRoaXMuZGVib3VuY2U9MCk7dmFyIGE9dGhpcy5zdGFydFBvczt0aGlzLmRhdGEmJihhPXRoaXMuZGF0YS5mcm9tKTt2YXIgYj10aGlzLmNtLmdldEN1cnNvcigpLGM9dGhpcy5jbS5nZXRMaW5lKGIubGluZSk7aWYoYi5saW5lIT10aGlzLnN0YXJ0UG9zLmxpbmV8fGMubGVuZ3RoLWIuY2ghPXRoaXMuc3RhcnRMZW4tdGhpcy5zdGFydFBvcy5jaHx8Yi5jaDxhLmNofHx0aGlzLmNtLnNvbWV0aGluZ1NlbGVjdGVkKCl8fCFiLmNofHx0aGlzLm9wdGlvbnMuY2xvc2VDaGFyYWN0ZXJzLnRlc3QoYy5jaGFyQXQoYi5jaC0xKSkpdGhpcy5jbG9zZSgpO2Vsc2V7dmFyIGQ9dGhpczt0aGlzLmRlYm91bmNlPU0oZnVuY3Rpb24oKXtkLnVwZGF0ZSgpfSk7dGhpcy53aWRnZXQmJnRoaXMud2lkZ2V0LmRpc2FibGUoKX19LHVwZGF0ZTpmdW5jdGlvbihhKXtpZihudWxsIT10aGlzLnRpY2spe3ZhciBiPXRoaXMsYz0rK3RoaXMudGljaztJKHRoaXMub3B0aW9ucy5oaW50LFxudGhpcy5jbSx0aGlzLm9wdGlvbnMsZnVuY3Rpb24oZCl7Yi50aWNrPT1jJiZiLmZpbmlzaFVwZGF0ZShkLGEpfSl9fSxmaW5pc2hVcGRhdGU6ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEmJmguc2lnbmFsKHRoaXMuZGF0YSxcInVwZGF0ZVwiKTtiPXRoaXMud2lkZ2V0JiZ0aGlzLndpZGdldC5waWNrZWR8fGImJnRoaXMub3B0aW9ucy5jb21wbGV0ZVNpbmdsZTt0aGlzLndpZGdldCYmdGhpcy53aWRnZXQuY2xvc2UoKTsodGhpcy5kYXRhPWEpJiZhLmxpc3QubGVuZ3RoJiYoYiYmMT09YS5saXN0Lmxlbmd0aD90aGlzLnBpY2soYSwwKToodGhpcy53aWRnZXQ9bmV3IEQodGhpcyxhKSxoLnNpZ25hbChhLFwic2hvd25cIikpKX19O0QucHJvdG90eXBlPXtjbG9zZTpmdW5jdGlvbigpe2lmKHRoaXMuY29tcGxldGlvbi53aWRnZXQ9PXRoaXMpe3RoaXMuY29tcGxldGlvbi53aWRnZXQ9bnVsbDt0aGlzLmhpbnRzLnBhcmVudE5vZGUmJnRoaXMuaGludHMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmhpbnRzKTtcbnRoaXMuY29tcGxldGlvbi5jbS5yZW1vdmVLZXlNYXAodGhpcy5rZXlNYXApO3ZhciBhPXRoaXMuY29tcGxldGlvbi5jbS5nZXRJbnB1dEZpZWxkKCk7YS5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIik7YS5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLW93bnNcIik7YT10aGlzLmNvbXBsZXRpb24uY207dGhpcy5jb21wbGV0aW9uLm9wdGlvbnMuY2xvc2VPblVuZm9jdXMmJihhLm9mZihcImJsdXJcIix0aGlzLm9uQmx1ciksYS5vZmYoXCJmb2N1c1wiLHRoaXMub25Gb2N1cykpO2Eub2ZmKFwic2Nyb2xsXCIsdGhpcy5vblNjcm9sbCl9fSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5jb21wbGV0aW9uLmNtLnJlbW92ZUtleU1hcCh0aGlzLmtleU1hcCk7dmFyIGE9dGhpczt0aGlzLmtleU1hcD17RW50ZXI6ZnVuY3Rpb24oKXthLnBpY2tlZD0hMH19O3RoaXMuY29tcGxldGlvbi5jbS5hZGRLZXlNYXAodGhpcy5rZXlNYXApfSxwaWNrOmZ1bmN0aW9uKCl7dGhpcy5jb21wbGV0aW9uLnBpY2sodGhpcy5kYXRhLFxudGhpcy5zZWxlY3RlZEhpbnQpfSxjaGFuZ2VBY3RpdmU6ZnVuY3Rpb24oYSxiKXthPj10aGlzLmRhdGEubGlzdC5sZW5ndGg/YT1iP3RoaXMuZGF0YS5saXN0Lmxlbmd0aC0xOjA6MD5hJiYoYT1iPzA6dGhpcy5kYXRhLmxpc3QubGVuZ3RoLTEpO2lmKHRoaXMuc2VsZWN0ZWRIaW50IT1hKXtpZihiPXRoaXMuaGludHMuY2hpbGROb2Rlc1t0aGlzLnNlbGVjdGVkSGludF0pYi5jbGFzc05hbWU9Yi5jbGFzc05hbWUucmVwbGFjZShcIiBDb2RlTWlycm9yLWhpbnQtYWN0aXZlXCIsXCJcIiksYi5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIpO2I9dGhpcy5oaW50cy5jaGlsZE5vZGVzW3RoaXMuc2VsZWN0ZWRIaW50PWFdO2IuY2xhc3NOYW1lKz1cIiBDb2RlTWlycm9yLWhpbnQtYWN0aXZlXCI7Yi5zZXRBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIsXCJ0cnVlXCIpO3RoaXMuY29tcGxldGlvbi5jbS5nZXRJbnB1dEZpZWxkKCkuc2V0QXR0cmlidXRlKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsXG5iLmlkKTt0aGlzLnNjcm9sbFRvQWN0aXZlKCk7aC5zaWduYWwodGhpcy5kYXRhLFwic2VsZWN0XCIsdGhpcy5kYXRhLmxpc3RbdGhpcy5zZWxlY3RlZEhpbnRdLGIpfX0sc2Nyb2xsVG9BY3RpdmU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFNlbGVjdGVkSGludFJhbmdlKCksYj10aGlzLmhpbnRzLmNoaWxkTm9kZXNbYS5mcm9tXTthPXRoaXMuaGludHMuY2hpbGROb2Rlc1thLnRvXTt2YXIgYz10aGlzLmhpbnRzLmZpcnN0Q2hpbGQ7Yi5vZmZzZXRUb3A8dGhpcy5oaW50cy5zY3JvbGxUb3A/dGhpcy5oaW50cy5zY3JvbGxUb3A9Yi5vZmZzZXRUb3AtYy5vZmZzZXRUb3A6YS5vZmZzZXRUb3ArYS5vZmZzZXRIZWlnaHQ+dGhpcy5oaW50cy5zY3JvbGxUb3ArdGhpcy5oaW50cy5jbGllbnRIZWlnaHQmJih0aGlzLmhpbnRzLnNjcm9sbFRvcD1hLm9mZnNldFRvcCthLm9mZnNldEhlaWdodC10aGlzLmhpbnRzLmNsaWVudEhlaWdodCtjLm9mZnNldFRvcCl9LHNjcmVlbkFtb3VudDpmdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMuaGludHMuY2xpZW50SGVpZ2h0L1xudGhpcy5oaW50cy5maXJzdENoaWxkLm9mZnNldEhlaWdodCl8fDF9LGdldFNlbGVjdGVkSGludFJhbmdlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jb21wbGV0aW9uLm9wdGlvbnMuc2Nyb2xsTWFyZ2lufHwwO3JldHVybntmcm9tOk1hdGgubWF4KDAsdGhpcy5zZWxlY3RlZEhpbnQtYSksdG86TWF0aC5taW4odGhpcy5kYXRhLmxpc3QubGVuZ3RoLTEsdGhpcy5zZWxlY3RlZEhpbnQrYSl9fX07aC5yZWdpc3RlckhlbHBlcihcImhpbnRcIixcImF1dG9cIix7cmVzb2x2ZTpmdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0SGVscGVycyhiLFwiaGludFwiKSxkO3JldHVybiBjLmxlbmd0aD8oYT1mdW5jdGlvbihlLHAsZil7ZnVuY3Rpb24gcihtKXtpZihtPT1nLmxlbmd0aClyZXR1cm4gcChudWxsKTtJKGdbbV0sZSxmLGZ1bmN0aW9uKGspe2smJjA8ay5saXN0Lmxlbmd0aD9wKGspOnIobSsxKX0pfXZhciBnPUwoZSxjKTtyKDApfSxhLmFzeW5jPSEwLGEuc3VwcG9ydHNTZWxlY3Rpb249ITAsYSk6KGQ9XG5hLmdldEhlbHBlcihhLmdldEN1cnNvcigpLFwiaGludFdvcmRzXCIpKT9mdW5jdGlvbihlKXtyZXR1cm4gaC5oaW50LmZyb21MaXN0KGUse3dvcmRzOmR9KX06aC5oaW50LmFueXdvcmQ/ZnVuY3Rpb24oZSxwKXtyZXR1cm4gaC5oaW50LmFueXdvcmQoZSxwKX06ZnVuY3Rpb24oKXt9fX0pO2gucmVnaXN0ZXJIZWxwZXIoXCJoaW50XCIsXCJmcm9tTGlzdFwiLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRDdXJzb3IoKSxkPWEuZ2V0VG9rZW5BdChjKTthPWguUG9zKGMubGluZSxkLnN0YXJ0KTtkLnN0YXJ0PGMuY2gmJi9cXHcvLnRlc3QoZC5zdHJpbmcuY2hhckF0KGMuY2gtZC5zdGFydC0xKSk/ZD1kLnN0cmluZy5zdWJzdHIoMCxjLmNoLWQuc3RhcnQpOihkPVwiXCIsYT1jKTtmb3IodmFyIGU9W10scD0wO3A8Yi53b3Jkcy5sZW5ndGg7cCsrKXt2YXIgZj1iLndvcmRzW3BdO2Yuc2xpY2UoMCxkLmxlbmd0aCk9PWQmJmUucHVzaChmKX1pZihlLmxlbmd0aClyZXR1cm57bGlzdDplLGZyb206YSx0bzpjfX0pO1xuaC5jb21tYW5kcy5hdXRvY29tcGxldGU9aC5zaG93SGludDt2YXIgSj17aGludDpoLmhpbnQuYXV0byxjb21wbGV0ZVNpbmdsZTohMCxhbGlnbldpdGhXb3JkOiEwLGNsb3NlQ2hhcmFjdGVyczovW1xccygpXFxbXFxde307Oj4sXS8sY2xvc2VPblBpY2s6ITAsY2xvc2VPblVuZm9jdXM6ITAsdXBkYXRlT25DdXJzb3JBY3Rpdml0eTohMCxjb21wbGV0ZU9uU2luZ2xlQ2xpY2s6ITAsY29udGFpbmVyOm51bGwsY3VzdG9tS2V5czpudWxsLGV4dHJhS2V5czpudWxsLHBhZGRpbmdGb3JTY3JvbGxiYXI6ITAsbW92ZU9uT3ZlcmxhcDohMH07aC5kZWZpbmVPcHRpb24oXCJoaW50T3B0aW9uc1wiLG51bGwpfSk7XG4iLCJ2YXIgJGpzY29tcD0kanNjb21wfHx7fTskanNjb21wLnNjb3BlPXt9OyRqc2NvbXAuZmluZEludGVybmFsPWZ1bmN0aW9uKGEsZCxjKXthIGluc3RhbmNlb2YgU3RyaW5nJiYoYT1TdHJpbmcoYSkpO2Zvcih2YXIgZT1hLmxlbmd0aCxmPTA7ZjxlO2YrKyl7dmFyIG09YVtmXTtpZihkLmNhbGwoYyxtLGYsYSkpcmV0dXJue2k6Zix2Om19fXJldHVybntpOi0xLHY6dm9pZCAwfX07JGpzY29tcC5BU1NVTUVfRVM1PSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9NQVA9ITE7JGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX1NFVD0hMTskanNjb21wLlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITE7JGpzY29tcC5JU09MQVRFX1BPTFlGSUxMUz0hMTskanNjb21wLkZPUkNFX1BPTFlGSUxMX1BST01JU0U9ITE7JGpzY29tcC5GT1JDRV9QT0xZRklMTF9QUk9NSVNFX1dIRU5fTk9fVU5IQU5ETEVEX1JFSkVDVElPTj0hMTtcbiRqc2NvbXAuZGVmaW5lUHJvcGVydHk9JGpzY29tcC5BU1NVTUVfRVM1fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oYSxkLGMpe2lmKGE9PUFycmF5LnByb3RvdHlwZXx8YT09T2JqZWN0LnByb3RvdHlwZSlyZXR1cm4gYTthW2RdPWMudmFsdWU7cmV0dXJuIGF9OyRqc2NvbXAuZ2V0R2xvYmFsPWZ1bmN0aW9uKGEpe2E9W1wib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLGEsXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbF07Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDsrK2Qpe3ZhciBjPWFbZF07aWYoYyYmYy5NYXRoPT1NYXRoKXJldHVybiBjfXRocm93IEVycm9yKFwiQ2Fubm90IGZpbmQgZ2xvYmFsIG9iamVjdFwiKTt9OyRqc2NvbXAuZ2xvYmFsPSRqc2NvbXAuZ2V0R2xvYmFsKHRoaXMpO1xuJGpzY29tcC5JU19TWU1CT0xfTkFUSVZFPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PT10eXBlb2YgU3ltYm9sKFwieFwiKTskanNjb21wLlRSVVNUX0VTNl9QT0xZRklMTFM9ISRqc2NvbXAuSVNPTEFURV9QT0xZRklMTFN8fCRqc2NvbXAuSVNfU1lNQk9MX05BVElWRTskanNjb21wLnBvbHlmaWxscz17fTskanNjb21wLnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbD17fTskanNjb21wLlBPTFlGSUxMX1BSRUZJWD1cIiRqc2NwJFwiO3ZhciAkanNjb21wJGxvb2t1cFBvbHlmaWxsZWRWYWx1ZT1mdW5jdGlvbihhLGQpe3ZhciBjPSRqc2NvbXAucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW2RdO2lmKG51bGw9PWMpcmV0dXJuIGFbZF07Yz1hW2NdO3JldHVybiB2b2lkIDAhPT1jP2M6YVtkXX07XG4kanNjb21wLnBvbHlmaWxsPWZ1bmN0aW9uKGEsZCxjLGUpe2QmJigkanNjb21wLklTT0xBVEVfUE9MWUZJTExTPyRqc2NvbXAucG9seWZpbGxJc29sYXRlZChhLGQsYyxlKTokanNjb21wLnBvbHlmaWxsVW5pc29sYXRlZChhLGQsYyxlKSl9OyRqc2NvbXAucG9seWZpbGxVbmlzb2xhdGVkPWZ1bmN0aW9uKGEsZCxjLGUpe2M9JGpzY29tcC5nbG9iYWw7YT1hLnNwbGl0KFwiLlwiKTtmb3IoZT0wO2U8YS5sZW5ndGgtMTtlKyspe3ZhciBmPWFbZV07aWYoIShmIGluIGMpKXJldHVybjtjPWNbZl19YT1hW2EubGVuZ3RoLTFdO2U9Y1thXTtkPWQoZSk7ZCE9ZSYmbnVsbCE9ZCYmJGpzY29tcC5kZWZpbmVQcm9wZXJ0eShjLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpkfSl9O1xuJGpzY29tcC5wb2x5ZmlsbElzb2xhdGVkPWZ1bmN0aW9uKGEsZCxjLGUpe3ZhciBmPWEuc3BsaXQoXCIuXCIpO2E9MT09PWYubGVuZ3RoO2U9ZlswXTtlPSFhJiZlIGluICRqc2NvbXAucG9seWZpbGxzPyRqc2NvbXAucG9seWZpbGxzOiRqc2NvbXAuZ2xvYmFsO2Zvcih2YXIgbT0wO208Zi5sZW5ndGgtMTttKyspe3ZhciByPWZbbV07aWYoIShyIGluIGUpKXJldHVybjtlPWVbcl19Zj1mW2YubGVuZ3RoLTFdO2M9JGpzY29tcC5JU19TWU1CT0xfTkFUSVZFJiZcImVzNlwiPT09Yz9lW2ZdOm51bGw7ZD1kKGMpO251bGwhPWQmJihhPyRqc2NvbXAuZGVmaW5lUHJvcGVydHkoJGpzY29tcC5wb2x5ZmlsbHMsZix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmR9KTpkIT09YyYmKHZvaWQgMD09PSRqc2NvbXAucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW2ZdJiYoYz0xRTkqTWF0aC5yYW5kb20oKT4+PjAsJGpzY29tcC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2xbZl09JGpzY29tcC5JU19TWU1CT0xfTkFUSVZFP1xuJGpzY29tcC5nbG9iYWwuU3ltYm9sKGYpOiRqc2NvbXAuUE9MWUZJTExfUFJFRklYK2MrXCIkXCIrZiksJGpzY29tcC5kZWZpbmVQcm9wZXJ0eShlLCRqc2NvbXAucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW2ZdLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZH0pKSl9OyRqc2NvbXAucG9seWZpbGwoXCJBcnJheS5wcm90b3R5cGUuZmluZFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oZCxjKXtyZXR1cm4gJGpzY29tcC5maW5kSW50ZXJuYWwodGhpcyxkLGMpLnZ9fSxcImVzNlwiLFwiZXMzXCIpO1xuKGZ1bmN0aW9uKGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP2EocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLGEpOmEoQ29kZU1pcnJvcil9KShmdW5jdGlvbihhKXtmdW5jdGlvbiBkKGIpe2Iuc3RhdGUubWFya2VkU2VsZWN0aW9uJiZiLm9wZXJhdGlvbihmdW5jdGlvbigpe3IoYil9KX1mdW5jdGlvbiBjKGIpe2Iuc3RhdGUubWFya2VkU2VsZWN0aW9uJiZiLnN0YXRlLm1hcmtlZFNlbGVjdGlvbi5sZW5ndGgmJmIub3BlcmF0aW9uKGZ1bmN0aW9uKCl7ZihiKX0pfWZ1bmN0aW9uIGUoYixnLGgsayl7aWYoMCE9cChnLGgpKWZvcih2YXIgbD1iLnN0YXRlLm1hcmtlZFNlbGVjdGlvbixuPWIuc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGUscT1nLmxpbmU7Oyl7dmFyIHQ9cT09Zy5saW5lP2c6dihxLFxuMCk7cSs9dTt2YXIgdz1xPj1oLmxpbmUseD13P2g6dihxLDApO3Q9Yi5tYXJrVGV4dCh0LHgse2NsYXNzTmFtZTpufSk7bnVsbD09az9sLnB1c2godCk6bC5zcGxpY2UoaysrLDAsdCk7aWYodylicmVha319ZnVuY3Rpb24gZihiKXtiPWIuc3RhdGUubWFya2VkU2VsZWN0aW9uO2Zvcih2YXIgZz0wO2c8Yi5sZW5ndGg7KytnKWJbZ10uY2xlYXIoKTtiLmxlbmd0aD0wfWZ1bmN0aW9uIG0oYil7ZihiKTtmb3IodmFyIGc9Yi5saXN0U2VsZWN0aW9ucygpLGg9MDtoPGcubGVuZ3RoO2grKyllKGIsZ1toXS5mcm9tKCksZ1toXS50bygpKX1mdW5jdGlvbiByKGIpe2lmKCFiLnNvbWV0aGluZ1NlbGVjdGVkKCkpcmV0dXJuIGYoYik7aWYoMTxiLmxpc3RTZWxlY3Rpb25zKCkubGVuZ3RoKXJldHVybiBtKGIpO3ZhciBnPWIuZ2V0Q3Vyc29yKFwic3RhcnRcIiksaD1iLmdldEN1cnNvcihcImVuZFwiKSxrPWIuc3RhdGUubWFya2VkU2VsZWN0aW9uO2lmKCFrLmxlbmd0aClyZXR1cm4gZShiLGcsaCk7dmFyIGw9XG5rWzBdLmZpbmQoKSxuPWtbay5sZW5ndGgtMV0uZmluZCgpO2lmKCFsfHwhbnx8aC5saW5lLWcubGluZTw9dXx8MDw9cChnLG4udG8pfHwwPj1wKGgsbC5mcm9tKSlyZXR1cm4gbShiKTtmb3IoOzA8cChnLGwuZnJvbSk7KWsuc2hpZnQoKS5jbGVhcigpLGw9a1swXS5maW5kKCk7MD5wKGcsbC5mcm9tKSYmKGwudG8ubGluZS1nLmxpbmU8dT8oay5zaGlmdCgpLmNsZWFyKCksZShiLGcsbC50bywwKSk6ZShiLGcsbC5mcm9tLDApKTtmb3IoOzA+cChoLG4udG8pOylrLnBvcCgpLmNsZWFyKCksbj1rW2subGVuZ3RoLTFdLmZpbmQoKTswPHAoaCxuLnRvKSYmKGgubGluZS1uLmZyb20ubGluZTx1PyhrLnBvcCgpLmNsZWFyKCksZShiLG4uZnJvbSxoKSk6ZShiLG4udG8saCkpfWEuZGVmaW5lT3B0aW9uKFwic3R5bGVTZWxlY3RlZFRleHRcIiwhMSxmdW5jdGlvbihiLGcsaCl7aD1oJiZoIT1hLkluaXQ7ZyYmIWg/KGIuc3RhdGUubWFya2VkU2VsZWN0aW9uPVtdLGIuc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGU9XG5cInN0cmluZ1wiPT10eXBlb2YgZz9nOlwiQ29kZU1pcnJvci1zZWxlY3RlZHRleHRcIixtKGIpLGIub24oXCJjdXJzb3JBY3Rpdml0eVwiLGQpLGIub24oXCJjaGFuZ2VcIixjKSk6IWcmJmgmJihiLm9mZihcImN1cnNvckFjdGl2aXR5XCIsZCksYi5vZmYoXCJjaGFuZ2VcIixjKSxmKGIpLGIuc3RhdGUubWFya2VkU2VsZWN0aW9uPWIuc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGU9bnVsbCl9KTt2YXIgdT04LHY9YS5Qb3MscD1hLmNtcFBvc30pO1xuIiwidmFyICRqc2NvbXA9JGpzY29tcHx8e307JGpzY29tcC5zY29wZT17fTskanNjb21wLmZpbmRJbnRlcm5hbD1mdW5jdGlvbih5LEUsRCl7eSBpbnN0YW5jZW9mIFN0cmluZyYmKHk9U3RyaW5nKHkpKTtmb3IodmFyIHY9eS5sZW5ndGgsTT0wO008djtNKyspe3ZhciBqYT15W01dO2lmKEUuY2FsbChELGphLE0seSkpcmV0dXJue2k6TSx2OmphfX1yZXR1cm57aTotMSx2OnZvaWQgMH19OyRqc2NvbXAuQVNTVU1FX0VTNT0hMTskanNjb21wLkFTU1VNRV9OT19OQVRJVkVfTUFQPSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9TRVQ9ITE7JGpzY29tcC5TSU1QTEVfRlJPVU5EX1BPTFlGSUxMPSExOyRqc2NvbXAuSVNPTEFURV9QT0xZRklMTFM9ITE7JGpzY29tcC5GT1JDRV9QT0xZRklMTF9QUk9NSVNFPSExOyRqc2NvbXAuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRV9XSEVOX05PX1VOSEFORExFRF9SRUpFQ1RJT049ITE7XG4kanNjb21wLmRlZmluZVByb3BlcnR5PSRqc2NvbXAuQVNTVU1FX0VTNXx8XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHksRSxEKXtpZih5PT1BcnJheS5wcm90b3R5cGV8fHk9PU9iamVjdC5wcm90b3R5cGUpcmV0dXJuIHk7eVtFXT1ELnZhbHVlO3JldHVybiB5fTskanNjb21wLmdldEdsb2JhbD1mdW5jdGlvbih5KXt5PVtcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyx5LFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyxcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZixcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWxdO2Zvcih2YXIgRT0wO0U8eS5sZW5ndGg7KytFKXt2YXIgRD15W0VdO2lmKEQmJkQuTWF0aD09TWF0aClyZXR1cm4gRH10aHJvdyBFcnJvcihcIkNhbm5vdCBmaW5kIGdsb2JhbCBvYmplY3RcIik7fTskanNjb21wLmdsb2JhbD0kanNjb21wLmdldEdsb2JhbCh0aGlzKTtcbiRqc2NvbXAuSVNfU1lNQk9MX05BVElWRT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT09dHlwZW9mIFN5bWJvbChcInhcIik7JGpzY29tcC5UUlVTVF9FUzZfUE9MWUZJTExTPSEkanNjb21wLklTT0xBVEVfUE9MWUZJTExTfHwkanNjb21wLklTX1NZTUJPTF9OQVRJVkU7JGpzY29tcC5wb2x5ZmlsbHM9e307JGpzY29tcC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2w9e307JGpzY29tcC5QT0xZRklMTF9QUkVGSVg9XCIkanNjcCRcIjt2YXIgJGpzY29tcCRsb29rdXBQb2x5ZmlsbGVkVmFsdWU9ZnVuY3Rpb24oeSxFKXt2YXIgRD0kanNjb21wLnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtFXTtpZihudWxsPT1EKXJldHVybiB5W0VdO0Q9eVtEXTtyZXR1cm4gdm9pZCAwIT09RD9EOnlbRV19O1xuJGpzY29tcC5wb2x5ZmlsbD1mdW5jdGlvbih5LEUsRCx2KXtFJiYoJGpzY29tcC5JU09MQVRFX1BPTFlGSUxMUz8kanNjb21wLnBvbHlmaWxsSXNvbGF0ZWQoeSxFLEQsdik6JGpzY29tcC5wb2x5ZmlsbFVuaXNvbGF0ZWQoeSxFLEQsdikpfTskanNjb21wLnBvbHlmaWxsVW5pc29sYXRlZD1mdW5jdGlvbih5LEUsRCx2KXtEPSRqc2NvbXAuZ2xvYmFsO3k9eS5zcGxpdChcIi5cIik7Zm9yKHY9MDt2PHkubGVuZ3RoLTE7disrKXt2YXIgTT15W3ZdO2lmKCEoTSBpbiBEKSlyZXR1cm47RD1EW01dfXk9eVt5Lmxlbmd0aC0xXTt2PURbeV07RT1FKHYpO0UhPXYmJm51bGwhPUUmJiRqc2NvbXAuZGVmaW5lUHJvcGVydHkoRCx5LHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6RX0pfTtcbiRqc2NvbXAucG9seWZpbGxJc29sYXRlZD1mdW5jdGlvbih5LEUsRCx2KXt2YXIgTT15LnNwbGl0KFwiLlwiKTt5PTE9PT1NLmxlbmd0aDt2PU1bMF07dj0heSYmdiBpbiAkanNjb21wLnBvbHlmaWxscz8kanNjb21wLnBvbHlmaWxsczokanNjb21wLmdsb2JhbDtmb3IodmFyIGphPTA7amE8TS5sZW5ndGgtMTtqYSsrKXt2YXIga2E9TVtqYV07aWYoIShrYSBpbiB2KSlyZXR1cm47dj12W2thXX1NPU1bTS5sZW5ndGgtMV07RD0kanNjb21wLklTX1NZTUJPTF9OQVRJVkUmJlwiZXM2XCI9PT1EP3ZbTV06bnVsbDtFPUUoRCk7bnVsbCE9RSYmKHk/JGpzY29tcC5kZWZpbmVQcm9wZXJ0eSgkanNjb21wLnBvbHlmaWxscyxNLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6RX0pOkUhPT1EJiYodm9pZCAwPT09JGpzY29tcC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2xbTV0mJihEPTFFOSpNYXRoLnJhbmRvbSgpPj4+MCwkanNjb21wLnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtNXT1cbiRqc2NvbXAuSVNfU1lNQk9MX05BVElWRT8kanNjb21wLmdsb2JhbC5TeW1ib2woTSk6JGpzY29tcC5QT0xZRklMTF9QUkVGSVgrRCtcIiRcIitNKSwkanNjb21wLmRlZmluZVByb3BlcnR5KHYsJGpzY29tcC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2xbTV0se2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpFfSkpKX07JGpzY29tcC5wb2x5ZmlsbChcIkFycmF5LnByb3RvdHlwZS5maW5kXCIsZnVuY3Rpb24oeSl7cmV0dXJuIHk/eTpmdW5jdGlvbihFLEQpe3JldHVybiAkanNjb21wLmZpbmRJbnRlcm5hbCh0aGlzLEUsRCkudn19LFwiZXM2XCIsXCJlczNcIik7XG4oZnVuY3Rpb24oeSxFKXtcIm9iamVjdFwiPT09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPUUoKTpcImZ1bmN0aW9uXCI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShFKTooeT15fHxzZWxmLHkuQ29kZU1pcnJvcj1FKCkpfSkodGhpcyxmdW5jdGlvbigpe2Z1bmN0aW9uIHkoYSl7cmV0dXJuIG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIithK1wiKD86JHxcXFxccylcXFxccypcIil9ZnVuY3Rpb24gRShhKXtmb3IodmFyIGI9YS5jaGlsZE5vZGVzLmxlbmd0aDswPGI7LS1iKWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTtyZXR1cm4gYX1mdW5jdGlvbiBEKGEsYil7cmV0dXJuIEUoYSkuYXBwZW5kQ2hpbGQoYil9ZnVuY3Rpb24gdihhLGIsZCxjKXthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYSk7ZCYmKGEuY2xhc3NOYW1lPWQpO2MmJihhLnN0eWxlLmNzc1RleHQ9Yyk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiKSk7XG5lbHNlIGlmKGIpZm9yKGQ9MDtkPGIubGVuZ3RoOysrZClhLmFwcGVuZENoaWxkKGJbZF0pO3JldHVybiBhfWZ1bmN0aW9uIE0oYSxiLGQsYyl7YT12KGEsYixkLGMpO2Euc2V0QXR0cmlidXRlKFwicm9sZVwiLFwicHJlc2VudGF0aW9uXCIpO3JldHVybiBhfWZ1bmN0aW9uIGphKGEsYil7Mz09Yi5ub2RlVHlwZSYmKGI9Yi5wYXJlbnROb2RlKTtpZihhLmNvbnRhaW5zKXJldHVybiBhLmNvbnRhaW5zKGIpO2RvIGlmKDExPT1iLm5vZGVUeXBlJiYoYj1iLmhvc3QpLGI9PWEpcmV0dXJuITA7d2hpbGUoYj1iLnBhcmVudE5vZGUpfWZ1bmN0aW9uIGthKGEpe3RyeXt2YXIgYj1hLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goZCl7Yj1hLmJvZHl8fG51bGx9Zm9yKDtiJiZiLnNoYWRvd1Jvb3QmJmIuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50OyliPWIuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O3JldHVybiBifWZ1bmN0aW9uIFlhKGEsYil7dmFyIGQ9YS5jbGFzc05hbWU7eShiKS50ZXN0KGQpfHwoYS5jbGFzc05hbWUrPVxuKGQ/XCIgXCI6XCJcIikrYil9ZnVuY3Rpb24gZmQoYSxiKXthPWEuc3BsaXQoXCIgXCIpO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0mJiF5KGFbZF0pLnRlc3QoYikmJihiKz1cIiBcIithW2RdKTtyZXR1cm4gYn1mdW5jdGlvbiBxYShhKXtyZXR1cm4gYS5kaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudH1mdW5jdGlvbiBnZChhKXt2YXIgYj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkobnVsbCxiKX19ZnVuY3Rpb24gWmEoYSxiLGQpe2J8fChiPXt9KTtmb3IodmFyIGMgaW4gYSkhYS5oYXNPd25Qcm9wZXJ0eShjKXx8ITE9PT1kJiZiLmhhc093blByb3BlcnR5KGMpfHwoYltjXT1hW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiB3YShhLGIsZCxjLGUpe251bGw9PWImJihiPWEuc2VhcmNoKC9bXlxcc1xcdTAwYTBdLyksLTE9PWImJihiPWEubGVuZ3RoKSk7Yz1jfHwwO2ZvcihlPWV8fDA7Oyl7dmFyIGY9YS5pbmRleE9mKFwiXFx0XCIsXG5jKTtpZigwPmZ8fGY+PWIpcmV0dXJuIGUrKGItYyk7ZSs9Zi1jO2UrPWQtZSVkO2M9ZisxfX1mdW5jdGlvbiBlYShhLGIpe2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGg7KytkKWlmKGFbZF09PWIpcmV0dXJuIGQ7cmV0dXJuLTF9ZnVuY3Rpb24gaGQoYSxiLGQpe2Zvcih2YXIgYz0wLGU9MDs7KXt2YXIgZj1hLmluZGV4T2YoXCJcXHRcIixjKTstMT09ZiYmKGY9YS5sZW5ndGgpO3ZhciBnPWYtYztpZihmPT1hLmxlbmd0aHx8ZStnPj1iKXJldHVybiBjK01hdGgubWluKGcsYi1lKTtlKz1mLWM7ZSs9ZC1lJWQ7Yz1mKzE7aWYoZT49YilyZXR1cm4gY319ZnVuY3Rpb24gaWQoYSl7Zm9yKDt2Yy5sZW5ndGg8PWE7KXZjLnB1c2goSih2YykrXCIgXCIpO3JldHVybiB2Y1thXX1mdW5jdGlvbiBKKGEpe3JldHVybiBhW2EubGVuZ3RoLTFdfWZ1bmN0aW9uIHdjKGEsYil7Zm9yKHZhciBkPVtdLGM9MDtjPGEubGVuZ3RoO2MrKylkW2NdPWIoYVtjXSxjKTtyZXR1cm4gZH1mdW5jdGlvbiB5ZyhhLGIsZCl7Zm9yKHZhciBjPVxuMCxlPWQoYik7YzxhLmxlbmd0aCYmZChhW2NdKTw9ZTspYysrO2Euc3BsaWNlKGMsMCxiKX1mdW5jdGlvbiBwZSgpe31mdW5jdGlvbiBxZShhLGIpe09iamVjdC5jcmVhdGU/YT1PYmplY3QuY3JlYXRlKGEpOihwZS5wcm90b3R5cGU9YSxhPW5ldyBwZSk7YiYmWmEoYixhKTtyZXR1cm4gYX1mdW5jdGlvbiBqZChhKXtyZXR1cm4vXFx3Ly50ZXN0KGEpfHxcIlxcdTAwODBcIjxhJiYoYS50b1VwcGVyQ2FzZSgpIT1hLnRvTG93ZXJDYXNlKCl8fHpnLnRlc3QoYSkpfWZ1bmN0aW9uIHhjKGEsYil7cmV0dXJuIGI/LTE8Yi5zb3VyY2UuaW5kZXhPZihcIlxcXFx3XCIpJiZqZChhKT8hMDpiLnRlc3QoYSk6amQoYSl9ZnVuY3Rpb24gcmUoYSl7Zm9yKHZhciBiIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShiKSYmYVtiXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBrZChhKXtyZXR1cm4gNzY4PD1hLmNoYXJDb2RlQXQoMCkmJkFnLnRlc3QoYSl9ZnVuY3Rpb24gc2UoYSxiLGQpe2Zvcig7KDA+ZD8wPGI6XG5iPGEubGVuZ3RoKSYma2QoYS5jaGFyQXQoYikpOyliKz1kO3JldHVybiBifWZ1bmN0aW9uIEpiKGEsYixkKXtmb3IodmFyIGM9Yj5kPy0xOjE7Oyl7aWYoYj09ZClyZXR1cm4gYjt2YXIgZT0oYitkKS8yO2U9MD5jP01hdGguY2VpbChlKTpNYXRoLmZsb29yKGUpO2lmKGU9PWIpcmV0dXJuIGEoZSk/YjpkO2EoZSk/ZD1lOmI9ZStjfX1mdW5jdGlvbiBCZyhhLGIsZCxjKXtpZighYSlyZXR1cm4gYyhiLGQsXCJsdHJcIiwwKTtmb3IodmFyIGU9ITEsZj0wO2Y8YS5sZW5ndGg7KytmKXt2YXIgZz1hW2ZdO2lmKGcuZnJvbTxkJiZnLnRvPmJ8fGI9PWQmJmcudG89PWIpYyhNYXRoLm1heChnLmZyb20sYiksTWF0aC5taW4oZy50byxkKSwxPT1nLmxldmVsP1wicnRsXCI6XCJsdHJcIixmKSxlPSEwfWV8fGMoYixkLFwibHRyXCIpfWZ1bmN0aW9uIEtiKGEsYixkKXt2YXIgYztMYj1udWxsO2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7KytlKXt2YXIgZj1hW2VdO2lmKGYuZnJvbTxiJiZmLnRvPmIpcmV0dXJuIGU7XG5mLnRvPT1iJiYoZi5mcm9tIT1mLnRvJiZcImJlZm9yZVwiPT1kP2M9ZTpMYj1lKTtmLmZyb209PWImJihmLmZyb20hPWYudG8mJlwiYmVmb3JlXCIhPWQ/Yz1lOkxiPWUpfXJldHVybiBudWxsIT1jP2M6TGJ9ZnVuY3Rpb24gSmEoYSxiKXt2YXIgZD1hLm9yZGVyO251bGw9PWQmJihkPWEub3JkZXI9Q2coYS50ZXh0LGIpKTtyZXR1cm4gZH1mdW5jdGlvbiB0YShhLGIsZCl7aWYoYS5yZW1vdmVFdmVudExpc3RlbmVyKWEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGQsITEpO2Vsc2UgaWYoYS5kZXRhY2hFdmVudClhLmRldGFjaEV2ZW50KFwib25cIitiLGQpO2Vsc2V7dmFyIGM9KGE9YS5faGFuZGxlcnMpJiZhW2JdO2MmJihkPWVhKGMsZCksLTE8ZCYmKGFbYl09Yy5zbGljZSgwLGQpLmNvbmNhdChjLnNsaWNlKGQrMSkpKSl9fWZ1bmN0aW9uIFcoYSxiKXt2YXIgZD1hLl9oYW5kbGVycyYmYS5faGFuZGxlcnNbYl18fHljO2lmKGQubGVuZ3RoKWZvcih2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsXG4yKSxlPTA7ZTxkLmxlbmd0aDsrK2UpZFtlXS5hcHBseShudWxsLGMpfWZ1bmN0aW9uIFooYSxiLGQpe1wic3RyaW5nXCI9PXR5cGVvZiBiJiYoYj17dHlwZTpiLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwfX0pO1coYSxkfHxiLnR5cGUsYSxiKTtyZXR1cm4gbGQoYil8fGIuY29kZW1pcnJvcklnbm9yZX1mdW5jdGlvbiB0ZShhKXt2YXIgYj1hLl9oYW5kbGVycyYmYS5faGFuZGxlcnMuY3Vyc29yQWN0aXZpdHk7aWYoYil7YT1hLmN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnN8fChhLmN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnM9W10pO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7KytkKS0xPT1lYShhLGJbZF0pJiZhLnB1c2goYltkXSl9fWZ1bmN0aW9uIHhhKGEsYil7cmV0dXJuIDA8KGEuX2hhbmRsZXJzJiZhLl9oYW5kbGVyc1tiXXx8eWMpLmxlbmd0aH1mdW5jdGlvbiBwYihhKXthLnByb3RvdHlwZS5vbj1mdW5jdGlvbihiLGQpe3oodGhpcyxcbmIsZCl9O2EucHJvdG90eXBlLm9mZj1mdW5jdGlvbihiLGQpe3RhKHRoaXMsYixkKX19ZnVuY3Rpb24gbGEoYSl7YS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMX1mdW5jdGlvbiB1ZShhKXthLnN0b3BQcm9wYWdhdGlvbj9hLnN0b3BQcm9wYWdhdGlvbigpOmEuY2FuY2VsQnViYmxlPSEwfWZ1bmN0aW9uIGxkKGEpe3JldHVybiBudWxsIT1hLmRlZmF1bHRQcmV2ZW50ZWQ/YS5kZWZhdWx0UHJldmVudGVkOjA9PWEucmV0dXJuVmFsdWV9ZnVuY3Rpb24gTWIoYSl7bGEoYSk7dWUoYSl9ZnVuY3Rpb24gdmUoYSl7dmFyIGI9YS53aGljaDtudWxsPT1iJiYoYS5idXR0b24mMT9iPTE6YS5idXR0b24mMj9iPTM6YS5idXR0b24mNCYmKGI9MikpO3lhJiZhLmN0cmxLZXkmJjE9PWImJihiPTMpO3JldHVybiBifWZ1bmN0aW9uIERnKGEsYil7Mjxhcmd1bWVudHMubGVuZ3RoJiYoYi5kZXBlbmRlbmNpZXM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLFxuMikpO21kW2FdPWJ9ZnVuY3Rpb24gemMoYSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEmJnFiLmhhc093blByb3BlcnR5KGEpKWE9cWJbYV07ZWxzZSBpZihhJiZcInN0cmluZ1wiPT10eXBlb2YgYS5uYW1lJiZxYi5oYXNPd25Qcm9wZXJ0eShhLm5hbWUpKXt2YXIgYj1xYlthLm5hbWVdO1wic3RyaW5nXCI9PXR5cGVvZiBiJiYoYj17bmFtZTpifSk7YT1xZShiLGEpO2EubmFtZT1iLm5hbWV9ZWxzZXtpZihcInN0cmluZ1wiPT10eXBlb2YgYSYmL15bXFx3XFwtXStcXC9bXFx3XFwtXStcXCt4bWwkLy50ZXN0KGEpKXJldHVybiB6YyhcImFwcGxpY2F0aW9uL3htbFwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgYSYmL15bXFx3XFwtXStcXC9bXFx3XFwtXStcXCtqc29uJC8udGVzdChhKSlyZXR1cm4gemMoXCJhcHBsaWNhdGlvbi9qc29uXCIpfXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhP3tuYW1lOmF9OmF8fHtuYW1lOlwibnVsbFwifX1mdW5jdGlvbiBuZChhLGIpe2I9emMoYik7dmFyIGQ9bWRbYi5uYW1lXTtpZighZClyZXR1cm4gbmQoYSxcblwidGV4dC9wbGFpblwiKTthPWQoYSxiKTtpZihyYi5oYXNPd25Qcm9wZXJ0eShiLm5hbWUpKXtkPXJiW2IubmFtZV07Zm9yKHZhciBjIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShjKSYmKGEuaGFzT3duUHJvcGVydHkoYykmJihhW1wiX1wiK2NdPWFbY10pLGFbY109ZFtjXSl9YS5uYW1lPWIubmFtZTtiLmhlbHBlclR5cGUmJihhLmhlbHBlclR5cGU9Yi5oZWxwZXJUeXBlKTtpZihiLm1vZGVQcm9wcylmb3IodmFyIGUgaW4gYi5tb2RlUHJvcHMpYVtlXT1iLm1vZGVQcm9wc1tlXTtyZXR1cm4gYX1mdW5jdGlvbiBFZyhhLGIpe2E9cmIuaGFzT3duUHJvcGVydHkoYSk/cmJbYV06cmJbYV09e307WmEoYixhKX1mdW5jdGlvbiAkYShhLGIpe2lmKCEwPT09YilyZXR1cm4gYjtpZihhLmNvcHlTdGF0ZSlyZXR1cm4gYS5jb3B5U3RhdGUoYik7YT17fTtmb3IodmFyIGQgaW4gYil7dmFyIGM9YltkXTtjIGluc3RhbmNlb2YgQXJyYXkmJihjPWMuY29uY2F0KFtdKSk7YVtkXT1jfXJldHVybiBhfWZ1bmN0aW9uIG9kKGEsXG5iKXtmb3IodmFyIGQ7YS5pbm5lck1vZGU7KXtkPWEuaW5uZXJNb2RlKGIpO2lmKCFkfHxkLm1vZGU9PWEpYnJlYWs7Yj1kLnN0YXRlO2E9ZC5tb2RlfXJldHVybiBkfHx7bW9kZTphLHN0YXRlOmJ9fWZ1bmN0aW9uIHdlKGEsYixkKXtyZXR1cm4gYS5zdGFydFN0YXRlP2Euc3RhcnRTdGF0ZShiLGQpOiEwfWZ1bmN0aW9uIHcoYSxiKXtiLT1hLmZpcnN0O2lmKDA+Ynx8Yj49YS5zaXplKXRocm93IEVycm9yKFwiVGhlcmUgaXMgbm8gbGluZSBcIisoYithLmZpcnN0KStcIiBpbiB0aGUgZG9jdW1lbnQuXCIpO2Zvcig7IWEubGluZXM7KWZvcih2YXIgZD0wOzsrK2Qpe3ZhciBjPWEuY2hpbGRyZW5bZF0sZT1jLmNodW5rU2l6ZSgpO2lmKGI8ZSl7YT1jO2JyZWFrfWItPWV9cmV0dXJuIGEubGluZXNbYl19ZnVuY3Rpb24gYWIoYSxiLGQpe3ZhciBjPVtdLGU9Yi5saW5lO2EuaXRlcihiLmxpbmUsZC5saW5lKzEsZnVuY3Rpb24oZil7Zj1mLnRleHQ7ZT09ZC5saW5lJiYoZj1mLnNsaWNlKDAsZC5jaCkpO1xuZT09Yi5saW5lJiYoZj1mLnNsaWNlKGIuY2gpKTtjLnB1c2goZik7KytlfSk7cmV0dXJuIGN9ZnVuY3Rpb24gcGQoYSxiLGQpe3ZhciBjPVtdO2EuaXRlcihiLGQsZnVuY3Rpb24oZSl7Yy5wdXNoKGUudGV4dCl9KTtyZXR1cm4gY31mdW5jdGlvbiBFYShhLGIpe2lmKGItPWEuaGVpZ2h0KWZvcig7YTthPWEucGFyZW50KWEuaGVpZ2h0Kz1ifWZ1bmN0aW9uIE4oYSl7aWYobnVsbD09YS5wYXJlbnQpcmV0dXJuIG51bGw7dmFyIGI9YS5wYXJlbnQ7YT1lYShiLmxpbmVzLGEpO2Zvcih2YXIgZD1iLnBhcmVudDtkO2I9ZCxkPWQucGFyZW50KWZvcih2YXIgYz0wO2QuY2hpbGRyZW5bY10hPWI7KytjKWErPWQuY2hpbGRyZW5bY10uY2h1bmtTaXplKCk7cmV0dXJuIGErYi5maXJzdH1mdW5jdGlvbiBiYihhLGIpe3ZhciBkPWEuZmlyc3Q7YTpkb3tmb3IodmFyIGM9MDtjPGEuY2hpbGRyZW4ubGVuZ3RoOysrYyl7dmFyIGU9YS5jaGlsZHJlbltjXSxmPWUuaGVpZ2h0O2lmKGI8Zil7YT1lO2NvbnRpbnVlIGF9Yi09XG5mO2QrPWUuY2h1bmtTaXplKCl9cmV0dXJuIGR9d2hpbGUoIWEubGluZXMpO2ZvcihjPTA7YzxhLmxpbmVzLmxlbmd0aDsrK2Mpe2U9YS5saW5lc1tjXS5oZWlnaHQ7aWYoYjxlKWJyZWFrO2ItPWV9cmV0dXJuIGQrY31mdW5jdGlvbiBOYihhLGIpe3JldHVybiBiPj1hLmZpcnN0JiZiPGEuZmlyc3QrYS5zaXplfWZ1bmN0aW9uIHFkKGEsYil7cmV0dXJuIFN0cmluZyhhLmxpbmVOdW1iZXJGb3JtYXR0ZXIoYithLmZpcnN0TGluZU51bWJlcikpfWZ1bmN0aW9uIHQoYSxiLGQpe3ZvaWQgMD09PWQmJihkPW51bGwpO2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChhLGIsZCk7dGhpcy5saW5lPWE7dGhpcy5jaD1iO3RoaXMuc3RpY2t5PWR9ZnVuY3Rpb24gQihhLGIpe3JldHVybiBhLmxpbmUtYi5saW5lfHxhLmNoLWIuY2h9ZnVuY3Rpb24gcmQoYSxiKXtyZXR1cm4gYS5zdGlja3k9PWIuc3RpY2t5JiYwPT1CKGEsYil9ZnVuY3Rpb24gc2QoYSl7cmV0dXJuIHQoYS5saW5lLFxuYS5jaCl9ZnVuY3Rpb24gQWMoYSxiKXtyZXR1cm4gMD5CKGEsYik/YjphfWZ1bmN0aW9uIEJjKGEsYil7cmV0dXJuIDA+QihhLGIpP2E6Yn1mdW5jdGlvbiBDKGEsYil7aWYoYi5saW5lPGEuZmlyc3QpcmV0dXJuIHQoYS5maXJzdCwwKTt2YXIgZD1hLmZpcnN0K2Euc2l6ZS0xO2lmKGIubGluZT5kKXJldHVybiB0KGQsdyhhLGQpLnRleHQubGVuZ3RoKTthPXcoYSxiLmxpbmUpLnRleHQubGVuZ3RoO2Q9Yi5jaDtiPW51bGw9PWR8fGQ+YT90KGIubGluZSxhKTowPmQ/dChiLmxpbmUsMCk6YjtyZXR1cm4gYn1mdW5jdGlvbiB4ZShhLGIpe2Zvcih2YXIgZD1bXSxjPTA7YzxiLmxlbmd0aDtjKyspZFtjXT1DKGEsYltjXSk7cmV0dXJuIGR9ZnVuY3Rpb24geWUoYSxiLGQsYyl7dmFyIGU9W2Euc3RhdGUubW9kZUdlbl0sZj17fTt6ZShhLGIudGV4dCxhLmRvYy5tb2RlLGQsZnVuY3Rpb24oayxsKXtyZXR1cm4gZS5wdXNoKGssbCl9LGYsYyk7dmFyIGc9ZC5zdGF0ZTtjPWZ1bmN0aW9uKGspe2QuYmFzZVRva2Vucz1cbmU7dmFyIGw9YS5zdGF0ZS5vdmVybGF5c1trXSxtPTEsbj0wO2Quc3RhdGU9ITA7emUoYSxiLnRleHQsbC5tb2RlLGQsZnVuY3Rpb24ocCxxKXtmb3IodmFyIHI9bTtuPHA7KXt2YXIgdT1lW21dO3U+cCYmZS5zcGxpY2UobSwxLHAsZVttKzFdLHUpO20rPTI7bj1NYXRoLm1pbihwLHUpfWlmKHEpaWYobC5vcGFxdWUpZS5zcGxpY2UocixtLXIscCxcIm92ZXJsYXkgXCIrcSksbT1yKzI7ZWxzZSBmb3IoO3I8bTtyKz0yKXA9ZVtyKzFdLGVbcisxXT0ocD9wK1wiIFwiOlwiXCIpK1wib3ZlcmxheSBcIitxfSxmKTtkLnN0YXRlPWc7ZC5iYXNlVG9rZW5zPW51bGw7ZC5iYXNlVG9rZW5Qb3M9MX07Zm9yKHZhciBoPTA7aDxhLnN0YXRlLm92ZXJsYXlzLmxlbmd0aDsrK2gpYyhoKTtyZXR1cm57c3R5bGVzOmUsY2xhc3NlczpmLmJnQ2xhc3N8fGYudGV4dENsYXNzP2Y6bnVsbH19ZnVuY3Rpb24gQWUoYSxiLGQpe2lmKCFiLnN0eWxlc3x8Yi5zdHlsZXNbMF0hPWEuc3RhdGUubW9kZUdlbil7dmFyIGM9T2IoYSxcbk4oYikpLGU9Yi50ZXh0Lmxlbmd0aD5hLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoJiYkYShhLmRvYy5tb2RlLGMuc3RhdGUpLGY9eWUoYSxiLGMpO2UmJihjLnN0YXRlPWUpO2Iuc3RhdGVBZnRlcj1jLnNhdmUoIWUpO2Iuc3R5bGVzPWYuc3R5bGVzO2YuY2xhc3Nlcz9iLnN0eWxlQ2xhc3Nlcz1mLmNsYXNzZXM6Yi5zdHlsZUNsYXNzZXMmJihiLnN0eWxlQ2xhc3Nlcz1udWxsKTtkPT09YS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXImJihhLmRvYy5tb2RlRnJvbnRpZXI9TWF0aC5tYXgoYS5kb2MubW9kZUZyb250aWVyLCsrYS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIpKX1yZXR1cm4gYi5zdHlsZXN9ZnVuY3Rpb24gT2IoYSxiLGQpe3ZhciBjPWEuZG9jLGU9YS5kaXNwbGF5O2lmKCFjLm1vZGUuc3RhcnRTdGF0ZSlyZXR1cm4gbmV3IEZhKGMsITAsYik7dmFyIGY9RmcoYSxiLGQpLGc9Zj5jLmZpcnN0JiZ3KGMsZi0xKS5zdGF0ZUFmdGVyLGg9Zz9GYS5mcm9tU2F2ZWQoYyxnLGYpOm5ldyBGYShjLFxud2UoYy5tb2RlKSxmKTtjLml0ZXIoZixiLGZ1bmN0aW9uKGspe3RkKGEsay50ZXh0LGgpO3ZhciBsPWgubGluZTtrLnN0YXRlQWZ0ZXI9bD09Yi0xfHwwPT1sJTV8fGw+PWUudmlld0Zyb20mJmw8ZS52aWV3VG8/aC5zYXZlKCk6bnVsbDtoLm5leHRMaW5lKCl9KTtkJiYoYy5tb2RlRnJvbnRpZXI9aC5saW5lKTtyZXR1cm4gaH1mdW5jdGlvbiB0ZChhLGIsZCxjKXt2YXIgZT1hLmRvYy5tb2RlO2E9bmV3IFgoYixhLm9wdGlvbnMudGFiU2l6ZSxkKTthLnN0YXJ0PWEucG9zPWN8fDA7Zm9yKFwiXCI9PWImJkJlKGUsZC5zdGF0ZSk7IWEuZW9sKCk7KXVkKGUsYSxkLnN0YXRlKSxhLnN0YXJ0PWEucG9zfWZ1bmN0aW9uIEJlKGEsYil7aWYoYS5ibGFua0xpbmUpcmV0dXJuIGEuYmxhbmtMaW5lKGIpO2lmKGEuaW5uZXJNb2RlJiYoYT1vZChhLGIpLGEubW9kZS5ibGFua0xpbmUpKXJldHVybiBhLm1vZGUuYmxhbmtMaW5lKGEuc3RhdGUpfWZ1bmN0aW9uIHVkKGEsYixkLGMpe2Zvcih2YXIgZT1cbjA7MTA+ZTtlKyspe2MmJihjWzBdPW9kKGEsZCkubW9kZSk7dmFyIGY9YS50b2tlbihiLGQpO2lmKGIucG9zPmIuc3RhcnQpcmV0dXJuIGZ9dGhyb3cgRXJyb3IoXCJNb2RlIFwiK2EubmFtZStcIiBmYWlsZWQgdG8gYWR2YW5jZSBzdHJlYW0uXCIpO31mdW5jdGlvbiBDZShhLGIsZCxjKXt2YXIgZT1hLmRvYyxmPWUubW9kZTtiPUMoZSxiKTt2YXIgZz13KGUsYi5saW5lKTtkPU9iKGEsYi5saW5lLGQpO2E9bmV3IFgoZy50ZXh0LGEub3B0aW9ucy50YWJTaXplLGQpO3ZhciBoO2ZvcihjJiYoaD1bXSk7KGN8fGEucG9zPGIuY2gpJiYhYS5lb2woKTspe2Euc3RhcnQ9YS5wb3M7dmFyIGs9dWQoZixhLGQuc3RhdGUpO2MmJmgucHVzaChuZXcgRGUoYSxrLCRhKGUubW9kZSxkLnN0YXRlKSkpfXJldHVybiBjP2g6bmV3IERlKGEsayxkLnN0YXRlKX1mdW5jdGlvbiBFZShhLGIpe2lmKGEpZm9yKDs7KXt2YXIgZD1hLm1hdGNoKC8oPzpefFxccyspbGluZS0oYmFja2dyb3VuZC0pPyhcXFMrKS8pO2lmKCFkKWJyZWFrO1xuYT1hLnNsaWNlKDAsZC5pbmRleCkrYS5zbGljZShkLmluZGV4K2RbMF0ubGVuZ3RoKTt2YXIgYz1kWzFdP1wiYmdDbGFzc1wiOlwidGV4dENsYXNzXCI7bnVsbD09YltjXT9iW2NdPWRbMl06KG5ldyBSZWdFeHAoXCIoPzpefFxcXFxzKVwiK2RbMl0rXCIoPzokfFxcXFxzKVwiKSkudGVzdChiW2NdKXx8KGJbY10rPVwiIFwiK2RbMl0pfXJldHVybiBhfWZ1bmN0aW9uIHplKGEsYixkLGMsZSxmLGcpe3ZhciBoPWQuZmxhdHRlblNwYW5zO251bGw9PWgmJihoPWEub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBrPTAsbD1udWxsLG09bmV3IFgoYixhLm9wdGlvbnMudGFiU2l6ZSxjKSxuPWEub3B0aW9ucy5hZGRNb2RlQ2xhc3MmJltudWxsXTtmb3IoXCJcIj09YiYmRWUoQmUoZCxjLnN0YXRlKSxmKTshbS5lb2woKTspe2lmKG0ucG9zPmEub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpe2g9ITE7ZyYmdGQoYSxiLGMsbS5wb3MpO20ucG9zPWIubGVuZ3RoO3ZhciBwPW51bGx9ZWxzZSBwPUVlKHVkKGQsbSxjLnN0YXRlLFxubiksZik7aWYobil7dmFyIHE9blswXS5uYW1lO3EmJihwPVwibS1cIisocD9xK1wiIFwiK3A6cSkpfWlmKCFofHxsIT1wKXtmb3IoO2s8bS5zdGFydDspaz1NYXRoLm1pbihtLnN0YXJ0LGsrNUUzKSxlKGssbCk7bD1wfW0uc3RhcnQ9bS5wb3N9Zm9yKDtrPG0ucG9zOylhPU1hdGgubWluKG0ucG9zLGsrNUUzKSxlKGEsbCksaz1hfWZ1bmN0aW9uIEZnKGEsYixkKXtmb3IodmFyIGMsZSxmPWEuZG9jLGc9ZD8tMTpiLShhLmRvYy5tb2RlLmlubmVyTW9kZT8xRTM6MTAwKTtiPmc7LS1iKXtpZihiPD1mLmZpcnN0KXJldHVybiBmLmZpcnN0O3ZhciBoPXcoZixiLTEpLGs9aC5zdGF0ZUFmdGVyO2lmKGsmJighZHx8YisoayBpbnN0YW5jZW9mIENjP2subG9va0FoZWFkOjApPD1mLm1vZGVGcm9udGllcikpcmV0dXJuIGI7aD13YShoLnRleHQsbnVsbCxhLm9wdGlvbnMudGFiU2l6ZSk7aWYobnVsbD09ZXx8Yz5oKWU9Yi0xLGM9aH1yZXR1cm4gZX1mdW5jdGlvbiBHZyhhLGIpe2EubW9kZUZyb250aWVyPVxuTWF0aC5taW4oYS5tb2RlRnJvbnRpZXIsYik7aWYoIShhLmhpZ2hsaWdodEZyb250aWVyPGItMTApKXtmb3IodmFyIGQ9YS5maXJzdCxjPWItMTtjPmQ7Yy0tKXt2YXIgZT13KGEsYykuc3RhdGVBZnRlcjtpZihlJiYoIShlIGluc3RhbmNlb2YgQ2MpfHxjK2UubG9va0FoZWFkPGIpKXtkPWMrMTticmVha319YS5oaWdobGlnaHRGcm9udGllcj1NYXRoLm1pbihhLmhpZ2hsaWdodEZyb250aWVyLGQpfX1mdW5jdGlvbiBEYyhhLGIsZCl7dGhpcy5tYXJrZXI9YTt0aGlzLmZyb209Yjt0aGlzLnRvPWR9ZnVuY3Rpb24gUGIoYSxiKXtpZihhKWZvcih2YXIgZD0wO2Q8YS5sZW5ndGg7KytkKXt2YXIgYz1hW2RdO2lmKGMubWFya2VyPT1iKXJldHVybiBjfX1mdW5jdGlvbiB2ZChhLGIpe2lmKGIuZnVsbClyZXR1cm4gbnVsbDt2YXIgZD1OYihhLGIuZnJvbS5saW5lKSYmdyhhLGIuZnJvbS5saW5lKS5tYXJrZWRTcGFucyxjPU5iKGEsYi50by5saW5lKSYmdyhhLGIudG8ubGluZSkubWFya2VkU3BhbnM7XG5pZighZCYmIWMpcmV0dXJuIG51bGw7YT1iLmZyb20uY2g7dmFyIGU9Yi50by5jaCxmPTA9PUIoYi5mcm9tLGIudG8pLGc7aWYoZClmb3IodmFyIGg9MDtoPGQubGVuZ3RoOysraCl7dmFyIGs9ZFtoXSxsPWsubWFya2VyO2lmKG51bGw9PWsuZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9rLmZyb208PWE6ay5mcm9tPGEpfHwhKGsuZnJvbSE9YXx8XCJib29rbWFya1wiIT1sLnR5cGV8fGYmJmsubWFya2VyLmluc2VydExlZnQpKXt2YXIgbT1udWxsPT1rLnRvfHwobC5pbmNsdXNpdmVSaWdodD9rLnRvPj1hOmsudG8+YSk7KGd8fChnPVtdKSkucHVzaChuZXcgRGMobCxrLmZyb20sbT9udWxsOmsudG8pKX19ZD1nO3ZhciBuO2lmKGMpZm9yKGc9MDtnPGMubGVuZ3RoOysrZylpZihoPWNbZ10saz1oLm1hcmtlcixudWxsPT1oLnRvfHwoay5pbmNsdXNpdmVSaWdodD9oLnRvPj1lOmgudG8+ZSl8fGguZnJvbT09ZSYmXCJib29rbWFya1wiPT1rLnR5cGUmJighZnx8aC5tYXJrZXIuaW5zZXJ0TGVmdCkpbD1cbm51bGw9PWguZnJvbXx8KGsuaW5jbHVzaXZlTGVmdD9oLmZyb208PWU6aC5mcm9tPGUpLChufHwobj1bXSkpLnB1c2gobmV3IERjKGssbD9udWxsOmguZnJvbS1lLG51bGw9PWgudG8/bnVsbDpoLnRvLWUpKTtjPTE9PWIudGV4dC5sZW5ndGg7ZT1KKGIudGV4dCkubGVuZ3RoKyhjP2E6MCk7aWYoZClmb3IoZj0wO2Y8ZC5sZW5ndGg7KytmKWlmKGc9ZFtmXSxudWxsPT1nLnRvKShoPVBiKG4sZy5tYXJrZXIpLGgpP2MmJihnLnRvPW51bGw9PWgudG8/bnVsbDpoLnRvK2UpOmcudG89YTtpZihuKWZvcihhPTA7YTxuLmxlbmd0aDsrK2EpZj1uW2FdLG51bGwhPWYudG8mJihmLnRvKz1lKSxudWxsPT1mLmZyb20/UGIoZCxmLm1hcmtlcil8fChmLmZyb209ZSxjJiYoZHx8KGQ9W10pKS5wdXNoKGYpKTooZi5mcm9tKz1lLGMmJihkfHwoZD1bXSkpLnB1c2goZikpO2QmJihkPUZlKGQpKTtuJiZuIT1kJiYobj1GZShuKSk7YT1bZF07aWYoIWMpe2I9Yi50ZXh0Lmxlbmd0aC0yO3ZhciBwO2lmKDA8XG5iJiZkKWZvcihjPTA7YzxkLmxlbmd0aDsrK2MpbnVsbD09ZFtjXS50byYmKHB8fChwPVtdKSkucHVzaChuZXcgRGMoZFtjXS5tYXJrZXIsbnVsbCxudWxsKSk7Zm9yKGQ9MDtkPGI7KytkKWEucHVzaChwKTthLnB1c2gobil9cmV0dXJuIGF9ZnVuY3Rpb24gRmUoYSl7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2Ipe3ZhciBkPWFbYl07bnVsbCE9ZC5mcm9tJiZkLmZyb209PWQudG8mJiExIT09ZC5tYXJrZXIuY2xlYXJXaGVuRW1wdHkmJmEuc3BsaWNlKGItLSwxKX1yZXR1cm4gYS5sZW5ndGg/YTpudWxsfWZ1bmN0aW9uIEhnKGEsYixkKXt2YXIgYz1udWxsO2EuaXRlcihiLmxpbmUsZC5saW5lKzEsZnVuY3Rpb24obSl7aWYobS5tYXJrZWRTcGFucylmb3IodmFyIG49MDtuPG0ubWFya2VkU3BhbnMubGVuZ3RoOysrbil7dmFyIHA9bS5tYXJrZWRTcGFuc1tuXS5tYXJrZXI7IXAucmVhZE9ubHl8fGMmJi0xIT1lYShjLHApfHwoY3x8KGM9W10pKS5wdXNoKHApfX0pO2lmKCFjKXJldHVybiBudWxsO1xuYT1be2Zyb206Yix0bzpkfV07Zm9yKGI9MDtiPGMubGVuZ3RoOysrYil7ZD1jW2JdO2Zvcih2YXIgZT1kLmZpbmQoMCksZj0wO2Y8YS5sZW5ndGg7KytmKXt2YXIgZz1hW2ZdO2lmKCEoMD5CKGcudG8sZS5mcm9tKXx8MDxCKGcuZnJvbSxlLnRvKSkpe3ZhciBoPVtmLDFdLGs9QihnLmZyb20sZS5mcm9tKSxsPUIoZy50byxlLnRvKTsoMD5rfHwhZC5pbmNsdXNpdmVMZWZ0JiYhaykmJmgucHVzaCh7ZnJvbTpnLmZyb20sdG86ZS5mcm9tfSk7KDA8bHx8IWQuaW5jbHVzaXZlUmlnaHQmJiFsKSYmaC5wdXNoKHtmcm9tOmUudG8sdG86Zy50b30pO2Euc3BsaWNlLmFwcGx5KGEsaCk7Zis9aC5sZW5ndGgtM319fXJldHVybiBhfWZ1bmN0aW9uIEdlKGEpe3ZhciBiPWEubWFya2VkU3BhbnM7aWYoYil7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDsrK2QpYltkXS5tYXJrZXIuZGV0YWNoTGluZShhKTthLm1hcmtlZFNwYW5zPW51bGx9fWZ1bmN0aW9uIEhlKGEsYil7aWYoYil7Zm9yKHZhciBkPTA7ZDxcbmIubGVuZ3RoOysrZCliW2RdLm1hcmtlci5hdHRhY2hMaW5lKGEpO2EubWFya2VkU3BhbnM9Yn19ZnVuY3Rpb24gd2QoYSxiKXt2YXIgZD1hLmxpbmVzLmxlbmd0aC1iLmxpbmVzLmxlbmd0aDtpZigwIT1kKXJldHVybiBkO2Q9YS5maW5kKCk7dmFyIGM9Yi5maW5kKCksZT1CKGQuZnJvbSxjLmZyb20pfHwoYS5pbmNsdXNpdmVMZWZ0Py0xOjApLShiLmluY2x1c2l2ZUxlZnQ/LTE6MCk7cmV0dXJuIGU/LWU6KGQ9QihkLnRvLGMudG8pfHwoYS5pbmNsdXNpdmVSaWdodD8xOjApLShiLmluY2x1c2l2ZVJpZ2h0PzE6MCkpP2Q6Yi5pZC1hLmlkfWZ1bmN0aW9uIHNiKGEsYil7YT1LYSYmYS5tYXJrZWRTcGFucztpZihhKWZvcih2YXIgZCxjPTA7YzxhLmxlbmd0aDsrK2MpaWYoZD1hW2NdLGQubWFya2VyLmNvbGxhcHNlZCYmbnVsbD09KGI/ZC5mcm9tOmQudG8pJiYoIWV8fDA+d2QoZSxkLm1hcmtlcikpKXZhciBlPWQubWFya2VyO3JldHVybiBlfWZ1bmN0aW9uIEllKGEsYixkLGMsZSl7YT1cbncoYSxiKTtpZihhPUthJiZhLm1hcmtlZFNwYW5zKWZvcihiPTA7YjxhLmxlbmd0aDsrK2Ipe3ZhciBmPWFbYl07aWYoZi5tYXJrZXIuY29sbGFwc2VkKXt2YXIgZz1mLm1hcmtlci5maW5kKDApLGg9QihnLmZyb20sZCl8fChmLm1hcmtlci5pbmNsdXNpdmVMZWZ0Py0xOjApLShlLmluY2x1c2l2ZUxlZnQ/LTE6MCksaz1CKGcudG8sYyl8fChmLm1hcmtlci5pbmNsdXNpdmVSaWdodD8xOjApLShlLmluY2x1c2l2ZVJpZ2h0PzE6MCk7aWYoISgwPD1oJiYwPj1rfHwwPj1oJiYwPD1rKSYmKDA+PWgmJihmLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmZS5pbmNsdXNpdmVMZWZ0PzA8PUIoZy50byxkKTowPEIoZy50byxkKSl8fDA8PWgmJihmLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmZS5pbmNsdXNpdmVMZWZ0PzA+PUIoZy5mcm9tLGMpOjA+QihnLmZyb20sYykpKSlyZXR1cm4hMH19fWZ1bmN0aW9uIHphKGEpe2Zvcih2YXIgYjtiPXNiKGEsITApOylhPWIuZmluZCgtMSwhMCkubGluZTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHhkKGEsYil7YT13KGEsYik7dmFyIGQ9emEoYSk7cmV0dXJuIGE9PWQ/YjpOKGQpfWZ1bmN0aW9uIEplKGEsYil7aWYoYj5hLmxhc3RMaW5lKCkpcmV0dXJuIGI7dmFyIGQ9dyhhLGIpO2lmKCFQYShhLGQpKXJldHVybiBiO2Zvcig7YT1zYihkLCExKTspZD1hLmZpbmQoMSwhMCkubGluZTtyZXR1cm4gTihkKSsxfWZ1bmN0aW9uIFBhKGEsYil7dmFyIGQ9S2EmJmIubWFya2VkU3BhbnM7aWYoZClmb3IodmFyIGMsZT0wO2U8ZC5sZW5ndGg7KytlKWlmKGM9ZFtlXSxjLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1jLmZyb218fCFjLm1hcmtlci53aWRnZXROb2RlJiYwPT1jLmZyb20mJmMubWFya2VyLmluY2x1c2l2ZUxlZnQmJnlkKGEsYixjKSkpcmV0dXJuITB9ZnVuY3Rpb24geWQoYSxiLGQpe2lmKG51bGw9PWQudG8pcmV0dXJuIGI9ZC5tYXJrZXIuZmluZCgxLCEwKSx5ZChhLGIubGluZSxQYihiLmxpbmUubWFya2VkU3BhbnMsZC5tYXJrZXIpKTtpZihkLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmXG5kLnRvPT1iLnRleHQubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgYyxlPTA7ZTxiLm1hcmtlZFNwYW5zLmxlbmd0aDsrK2UpaWYoYz1iLm1hcmtlZFNwYW5zW2VdLGMubWFya2VyLmNvbGxhcHNlZCYmIWMubWFya2VyLndpZGdldE5vZGUmJmMuZnJvbT09ZC50byYmKG51bGw9PWMudG98fGMudG8hPWQuZnJvbSkmJihjLm1hcmtlci5pbmNsdXNpdmVMZWZ0fHxkLm1hcmtlci5pbmNsdXNpdmVSaWdodCkmJnlkKGEsYixjKSlyZXR1cm4hMH1mdW5jdGlvbiBHYShhKXthPXphKGEpO2Zvcih2YXIgYj0wLGQ9YS5wYXJlbnQsYz0wO2M8ZC5saW5lcy5sZW5ndGg7KytjKXt2YXIgZT1kLmxpbmVzW2NdO2lmKGU9PWEpYnJlYWs7ZWxzZSBiKz1lLmhlaWdodH1mb3IoYT1kLnBhcmVudDthO2Q9YSxhPWQucGFyZW50KWZvcihjPTA7YzxhLmNoaWxkcmVuLmxlbmd0aCYmKGU9YS5jaGlsZHJlbltjXSxlIT1kKTsrK2MpYis9ZS5oZWlnaHQ7cmV0dXJuIGJ9ZnVuY3Rpb24gRWMoYSl7aWYoMD09YS5oZWlnaHQpcmV0dXJuIDA7XG5mb3IodmFyIGI9YS50ZXh0Lmxlbmd0aCxkLGM9YTtkPXNiKGMsITApOylkPWQuZmluZCgwLCEwKSxjPWQuZnJvbS5saW5lLGIrPWQuZnJvbS5jaC1kLnRvLmNoO2ZvcihjPWE7ZD1zYihjLCExKTspYT1kLmZpbmQoMCwhMCksYi09Yy50ZXh0Lmxlbmd0aC1hLmZyb20uY2gsYz1hLnRvLmxpbmUsYis9Yy50ZXh0Lmxlbmd0aC1hLnRvLmNoO3JldHVybiBifWZ1bmN0aW9uIHpkKGEpe3ZhciBiPWEuZGlzcGxheTthPWEuZG9jO2IubWF4TGluZT13KGEsYS5maXJzdCk7Yi5tYXhMaW5lTGVuZ3RoPUVjKGIubWF4TGluZSk7Yi5tYXhMaW5lQ2hhbmdlZD0hMDthLml0ZXIoZnVuY3Rpb24oZCl7dmFyIGM9RWMoZCk7Yz5iLm1heExpbmVMZW5ndGgmJihiLm1heExpbmVMZW5ndGg9YyxiLm1heExpbmU9ZCl9KX1mdW5jdGlvbiBLZShhLGIpe2lmKCFhfHwvXlxccyokLy50ZXN0KGEpKXJldHVybiBudWxsO2I9Yi5hZGRNb2RlQ2xhc3M/SWc6Smc7cmV0dXJuIGJbYV18fChiW2FdPWEucmVwbGFjZSgvXFxTKy9nLFxuXCJjbS0kJlwiKSl9ZnVuY3Rpb24gTGUoYSxiKXt2YXIgZD1NKFwic3BhblwiLG51bGwsbnVsbCxmYT9cInBhZGRpbmctcmlnaHQ6IC4xcHhcIjpudWxsKTtkPXtwcmU6TShcInByZVwiLFtkXSxcIkNvZGVNaXJyb3ItbGluZVwiKSxjb250ZW50OmQsY29sOjAscG9zOjAsY206YSx0cmFpbGluZ1NwYWNlOiExLHNwbGl0U3BhY2VzOmEuZ2V0T3B0aW9uKFwibGluZVdyYXBwaW5nXCIpfTtiLm1lYXN1cmU9e307Zm9yKHZhciBjPTA7Yzw9KGIucmVzdD9iLnJlc3QubGVuZ3RoOjApO2MrKyl7dmFyIGU9Yz9iLnJlc3RbYy0xXTpiLmxpbmUsZj12b2lkIDA7ZC5wb3M9MDtkLmFkZFRva2VuPUtnO3ZhciBnPWEuZGlzcGxheS5tZWFzdXJlO2lmKG51bGwhPUFkKWc9QWQ7ZWxzZXt2YXIgaD1EKGcsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJBXFx1MDYyZUFcIikpLGs9UWIoaCwwLDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2g9UWIoaCwxLDIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0UoZyk7Zz1rJiZrLmxlZnQhPVxuay5yaWdodD9BZD0zPmgucmlnaHQtay5yaWdodDohMX1nJiYoZj1KYShlLGEuZG9jLmRpcmVjdGlvbikpJiYoZC5hZGRUb2tlbj1MZyhkLmFkZFRva2VuLGYpKTtkLm1hcD1bXTt2YXIgbD1iIT1hLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCYmTihlKTthOnt2YXIgbT1oPWs9Zz12b2lkIDAsbj12b2lkIDAscD12b2lkIDAscT12b2lkIDA7Zj1kO2w9QWUoYSxlLGwpO3ZhciByPWUubWFya2VkU3BhbnMsdT1lLnRleHQsQT0wO2lmKHIpZm9yKHZhciBZPXUubGVuZ3RoLHg9MCxQPTEsSz1cIlwiLFE9MDs7KXtpZihRPT14KXtuPW09aD1wPVwiXCI7az1nPW51bGw7UT1JbmZpbml0eTtmb3IodmFyIFM9W10sRj12b2lkIDAsUj0wO1I8ci5sZW5ndGg7KytSKXt2YXIgSD1yW1JdLEw9SC5tYXJrZXI7aWYoXCJib29rbWFya1wiPT1MLnR5cGUmJkguZnJvbT09eCYmTC53aWRnZXROb2RlKVMucHVzaChMKTtlbHNlIGlmKEguZnJvbTw9eCYmKG51bGw9PUgudG98fEgudG8+eHx8TC5jb2xsYXBzZWQmJkgudG89PVxueCYmSC5mcm9tPT14KSl7bnVsbCE9SC50byYmSC50byE9eCYmUT5ILnRvJiYoUT1ILnRvLG09XCJcIik7TC5jbGFzc05hbWUmJihuKz1cIiBcIitMLmNsYXNzTmFtZSk7TC5jc3MmJihwPShwP3ArXCI7XCI6XCJcIikrTC5jc3MpO0wuc3RhcnRTdHlsZSYmSC5mcm9tPT14JiYoaCs9XCIgXCIrTC5zdGFydFN0eWxlKTtMLmVuZFN0eWxlJiZILnRvPT1RJiYoRnx8KEY9W10pKS5wdXNoKEwuZW5kU3R5bGUsSC50byk7TC50aXRsZSYmKChnfHwoZz17fSkpLnRpdGxlPUwudGl0bGUpO2lmKEwuYXR0cmlidXRlcylmb3IodmFyIGhhIGluIEwuYXR0cmlidXRlcykoZ3x8KGc9e30pKVtoYV09TC5hdHRyaWJ1dGVzW2hhXTtMLmNvbGxhcHNlZCYmKCFrfHwwPndkKGsubWFya2VyLEwpKSYmKGs9SCl9ZWxzZSBILmZyb20+eCYmUT5ILmZyb20mJihRPUguZnJvbSl9aWYoRilmb3IoUj0wO1I8Ri5sZW5ndGg7Uis9MilGW1IrMV09PVEmJihtKz1cIiBcIitGW1JdKTtpZigha3x8ay5mcm9tPT14KWZvcihGPTA7RjxTLmxlbmd0aDsrK0YpTWUoZixcbjAsU1tGXSk7aWYoayYmKGsuZnJvbXx8MCk9PXgpe01lKGYsKG51bGw9PWsudG8/WSsxOmsudG8pLXgsay5tYXJrZXIsbnVsbD09ay5mcm9tKTtpZihudWxsPT1rLnRvKWJyZWFrIGE7ay50bz09eCYmKGs9ITEpfX1pZih4Pj1ZKWJyZWFrO2ZvcihTPU1hdGgubWluKFksUSk7Oyl7aWYoSyl7Rj14K0subGVuZ3RoO2t8fChSPUY+Uz9LLnNsaWNlKDAsUy14KTpLLGYuYWRkVG9rZW4oZixSLHE/cStuOm4saCx4K1IubGVuZ3RoPT1RP206XCJcIixwLGcpKTtpZihGPj1TKXtLPUsuc2xpY2UoUy14KTt4PVM7YnJlYWt9eD1GO2g9XCJcIn1LPXUuc2xpY2UoQSxBPWxbUCsrXSk7cT1LZShsW1ArK10sZi5jbS5vcHRpb25zKX19ZWxzZSBmb3IoZz0xO2c8bC5sZW5ndGg7Zys9MilmLmFkZFRva2VuKGYsdS5zbGljZShBLEE9bFtnXSksS2UobFtnKzFdLGYuY20ub3B0aW9ucykpfWUuc3R5bGVDbGFzc2VzJiYoZS5zdHlsZUNsYXNzZXMuYmdDbGFzcyYmKGQuYmdDbGFzcz1mZChlLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzLFxuZC5iZ0NsYXNzfHxcIlwiKSksZS5zdHlsZUNsYXNzZXMudGV4dENsYXNzJiYoZC50ZXh0Q2xhc3M9ZmQoZS5zdHlsZUNsYXNzZXMudGV4dENsYXNzLGQudGV4dENsYXNzfHxcIlwiKSkpOzA9PWQubWFwLmxlbmd0aCYmKGU9ZC5tYXAsZj1lLnB1c2gsZz1kLmNvbnRlbnQsaz1nLmFwcGVuZENoaWxkLGg9YS5kaXNwbGF5Lm1lYXN1cmUsbnVsbD09QmQmJihtPXYoXCJzcGFuXCIsXCJcXHUyMDBiXCIpLEQoaCx2KFwic3BhblwiLFttLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwieFwiKV0pKSwwIT1oLmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0JiYoQmQ9MT49bS5vZmZzZXRXaWR0aCYmMjxtLm9mZnNldEhlaWdodCYmIShHJiY4PlQpKSksaD1CZD92KFwic3BhblwiLFwiXFx1MjAwYlwiKTp2KFwic3BhblwiLFwiXFx1MDBhMFwiLG51bGwsXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweFwiKSxoLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIixcIlwiKSxmLmNhbGwoZSwwLDAsay5jYWxsKGcsXG5oKSkpOzA9PWM/KGIubWVhc3VyZS5tYXA9ZC5tYXAsYi5tZWFzdXJlLmNhY2hlPXt9KTooKGIubWVhc3VyZS5tYXBzfHwoYi5tZWFzdXJlLm1hcHM9W10pKS5wdXNoKGQubWFwKSwoYi5tZWFzdXJlLmNhY2hlc3x8KGIubWVhc3VyZS5jYWNoZXM9W10pKS5wdXNoKHt9KSl9ZmEmJihoYT1kLmNvbnRlbnQubGFzdENoaWxkLC9cXGJjbS10YWJcXGIvLnRlc3QoaGEuY2xhc3NOYW1lKXx8aGEucXVlcnlTZWxlY3RvciYmaGEucXVlcnlTZWxlY3RvcihcIi5jbS10YWJcIikpJiYoZC5jb250ZW50LmNsYXNzTmFtZT1cImNtLXRhYi13cmFwLWhhY2tcIik7VyhhLFwicmVuZGVyTGluZVwiLGEsYi5saW5lLGQucHJlKTtkLnByZS5jbGFzc05hbWUmJihkLnRleHRDbGFzcz1mZChkLnByZS5jbGFzc05hbWUsZC50ZXh0Q2xhc3N8fFwiXCIpKTtyZXR1cm4gZH1mdW5jdGlvbiBNZyhhKXt2YXIgYj12KFwic3BhblwiLFwiXFx1MjAyMlwiLFwiY20taW52YWxpZGNoYXJcIik7Yi50aXRsZT1cIlxcXFx1XCIrYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbmIuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLGIudGl0bGUpO3JldHVybiBifWZ1bmN0aW9uIEtnKGEsYixkLGMsZSxmLGcpe2lmKGIpe2lmKGEuc3BsaXRTcGFjZXMpe3ZhciBoPWEudHJhaWxpbmdTcGFjZTtpZigxPGIubGVuZ3RoJiYhLyAgLy50ZXN0KGIpKWg9YjtlbHNle2Zvcih2YXIgaz1cIlwiLGw9MDtsPGIubGVuZ3RoO2wrKyl7dmFyIG09Yi5jaGFyQXQobCk7XCIgXCIhPW18fCFofHxsIT1iLmxlbmd0aC0xJiYzMiE9Yi5jaGFyQ29kZUF0KGwrMSl8fChtPVwiXFx1MDBhMFwiKTtrKz1tO2g9XCIgXCI9PW19aD1rfX1lbHNlIGg9YjtrPWg7bD1hLmNtLnN0YXRlLnNwZWNpYWxDaGFyczttPSExO2lmKGwudGVzdChiKSl7aD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Zm9yKHZhciBuPTA7Oyl7bC5sYXN0SW5kZXg9bjt2YXIgcD1sLmV4ZWMoYikscT1wP3AuaW5kZXgtbjpiLmxlbmd0aC1uO2lmKHEpe3ZhciByPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGsuc2xpY2UobixuK1xucSkpO0cmJjk+VD9oLmFwcGVuZENoaWxkKHYoXCJzcGFuXCIsW3JdKSk6aC5hcHBlbmRDaGlsZChyKTthLm1hcC5wdXNoKGEucG9zLGEucG9zK3Escik7YS5jb2wrPXE7YS5wb3MrPXF9aWYoIXApYnJlYWs7bis9cSsxO1wiXFx0XCI9PXBbMF0/KHA9YS5jbS5vcHRpb25zLnRhYlNpemUscC09YS5jb2wlcCxxPWguYXBwZW5kQ2hpbGQodihcInNwYW5cIixpZChwKSxcImNtLXRhYlwiKSkscS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJwcmVzZW50YXRpb25cIikscS5zZXRBdHRyaWJ1dGUoXCJjbS10ZXh0XCIsXCJcXHRcIiksYS5jb2wrPXApOihcIlxcclwiPT1wWzBdfHxcIlxcblwiPT1wWzBdPyhxPWguYXBwZW5kQ2hpbGQodihcInNwYW5cIixcIlxcclwiPT1wWzBdP1wiXFx1MjQwZFwiOlwiXFx1MjQyNFwiLFwiY20taW52YWxpZGNoYXJcIikpLHEuc2V0QXR0cmlidXRlKFwiY20tdGV4dFwiLHBbMF0pKToocT1hLmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcihwWzBdKSxxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIixwWzBdKSxHJiY5PlQ/XG5oLmFwcGVuZENoaWxkKHYoXCJzcGFuXCIsW3FdKSk6aC5hcHBlbmRDaGlsZChxKSksYS5jb2wrPTEpO2EubWFwLnB1c2goYS5wb3MsYS5wb3MrMSxxKTthLnBvcysrfX1lbHNlIGEuY29sKz1iLmxlbmd0aCxoPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGspLGEubWFwLnB1c2goYS5wb3MsYS5wb3MrYi5sZW5ndGgsaCksRyYmOT5UJiYobT0hMCksYS5wb3MrPWIubGVuZ3RoO2EudHJhaWxpbmdTcGFjZT0zMj09ay5jaGFyQ29kZUF0KGIubGVuZ3RoLTEpO2lmKGR8fGN8fGV8fG18fGZ8fGcpe2I9ZHx8XCJcIjtjJiYoYis9Yyk7ZSYmKGIrPWUpO2M9dihcInNwYW5cIixbaF0sYixmKTtpZihnKWZvcih2YXIgdSBpbiBnKWcuaGFzT3duUHJvcGVydHkodSkmJlwic3R5bGVcIiE9dSYmXCJjbGFzc1wiIT11JiZjLnNldEF0dHJpYnV0ZSh1LGdbdV0pO3JldHVybiBhLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYyl9YS5jb250ZW50LmFwcGVuZENoaWxkKGgpfX1mdW5jdGlvbiBMZyhhLGIpe3JldHVybiBmdW5jdGlvbihkLFxuYyxlLGYsZyxoLGspe2U9ZT9lK1wiIGNtLWZvcmNlLWJvcmRlclwiOlwiY20tZm9yY2UtYm9yZGVyXCI7Zm9yKHZhciBsPWQucG9zLG09bCtjLmxlbmd0aDs7KXtmb3IodmFyIG49dm9pZCAwLHA9MDtwPGIubGVuZ3RoJiYhKG49YltwXSxuLnRvPmwmJm4uZnJvbTw9bCk7cCsrKTtpZihuLnRvPj1tKXJldHVybiBhKGQsYyxlLGYsZyxoLGspO2EoZCxjLnNsaWNlKDAsbi50by1sKSxlLGYsbnVsbCxoLGspO2Y9bnVsbDtjPWMuc2xpY2Uobi50by1sKTtsPW4udG99fX1mdW5jdGlvbiBNZShhLGIsZCxjKXt2YXIgZT0hYyYmZC53aWRnZXROb2RlO2UmJmEubWFwLnB1c2goYS5wb3MsYS5wb3MrYixlKTshYyYmYS5jbS5kaXNwbGF5LmlucHV0Lm5lZWRzQ29udGVudEF0dHJpYnV0ZSYmKGV8fChlPWEuY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSkpLGUuc2V0QXR0cmlidXRlKFwiY20tbWFya2VyXCIsZC5pZCkpO2UmJihhLmNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShlKSxcbmEuY29udGVudC5hcHBlbmRDaGlsZChlKSk7YS5wb3MrPWI7YS50cmFpbGluZ1NwYWNlPSExfWZ1bmN0aW9uIE5lKGEsYixkKXtmb3IodmFyIGM9dGhpcy5saW5lPWIsZTtjPXNiKGMsITEpOyljPWMuZmluZCgxLCEwKS5saW5lLChlfHwoZT1bXSkpLnB1c2goYyk7dGhpcy5zaXplPSh0aGlzLnJlc3Q9ZSk/TihKKHRoaXMucmVzdCkpLWQrMToxO3RoaXMubm9kZT10aGlzLnRleHQ9bnVsbDt0aGlzLmhpZGRlbj1QYShhLGIpfWZ1bmN0aW9uIEZjKGEsYixkKXt2YXIgYz1bXSxlO2ZvcihlPWI7ZTxkOyliPW5ldyBOZShhLmRvYyx3KGEuZG9jLGUpLGUpLGUrPWIuc2l6ZSxjLnB1c2goYik7cmV0dXJuIGN9ZnVuY3Rpb24gTmcoYSxiKXtpZihhPWEub3duc0dyb3VwKXRyeXt2YXIgZD1hLmRlbGF5ZWRDYWxsYmFja3MsYz0wO2Rve2Zvcig7YzxkLmxlbmd0aDtjKyspZFtjXS5jYWxsKG51bGwpO2Zvcih2YXIgZT0wO2U8YS5vcHMubGVuZ3RoO2UrKyl7dmFyIGY9YS5vcHNbZV07aWYoZi5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzKWZvcig7Zi5jdXJzb3JBY3Rpdml0eUNhbGxlZDxcbmYuY3Vyc29yQWN0aXZpdHlIYW5kbGVycy5sZW5ndGg7KWYuY3Vyc29yQWN0aXZpdHlIYW5kbGVyc1tmLmN1cnNvckFjdGl2aXR5Q2FsbGVkKytdLmNhbGwobnVsbCxmLmNtKX19d2hpbGUoYzxkLmxlbmd0aCl9ZmluYWxseXt0Yj1udWxsLGIoYSl9fWZ1bmN0aW9uIGFhKGEsYil7dmFyIGQ9YS5faGFuZGxlcnMmJmEuX2hhbmRsZXJzW2JdfHx5YztpZihkLmxlbmd0aCl7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO2lmKHRiKXZhciBlPXRiLmRlbGF5ZWRDYWxsYmFja3M7ZWxzZSBSYj9lPVJiOihlPVJiPVtdLHNldFRpbWVvdXQoT2csMCkpO2Zvcih2YXIgZj1mdW5jdGlvbihoKXtlLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gZFtoXS5hcHBseShudWxsLGMpfSl9LGc9MDtnPGQubGVuZ3RoOysrZylmKGcpfX1mdW5jdGlvbiBPZygpe3ZhciBhPVJiO1JiPW51bGw7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2IpYVtiXSgpfWZ1bmN0aW9uIE9lKGEsYixcbmQsYyl7Zm9yKHZhciBlPTA7ZTxiLmNoYW5nZXMubGVuZ3RoO2UrKyl7dmFyIGY9Yi5jaGFuZ2VzW2VdO2lmKFwidGV4dFwiPT1mKXtmPWE7dmFyIGc9YixoPWcudGV4dC5jbGFzc05hbWUsaz1QZShmLGcpO2cudGV4dD09Zy5ub2RlJiYoZy5ub2RlPWsucHJlKTtnLnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoay5wcmUsZy50ZXh0KTtnLnRleHQ9ay5wcmU7ay5iZ0NsYXNzIT1nLmJnQ2xhc3N8fGsudGV4dENsYXNzIT1nLnRleHRDbGFzcz8oZy5iZ0NsYXNzPWsuYmdDbGFzcyxnLnRleHRDbGFzcz1rLnRleHRDbGFzcyxDZChmLGcpKTpoJiYoZy50ZXh0LmNsYXNzTmFtZT1oKX1lbHNlIGlmKFwiZ3V0dGVyXCI9PWYpUWUoYSxiLGQsYyk7ZWxzZSBpZihcImNsYXNzXCI9PWYpQ2QoYSxiKTtlbHNlIGlmKFwid2lkZ2V0XCI9PWYpe2Y9YTtnPWI7aD1jO2cuYWxpZ25hYmxlJiYoZy5hbGlnbmFibGU9bnVsbCk7az15KFwiQ29kZU1pcnJvci1saW5ld2lkZ2V0XCIpO2Zvcih2YXIgbD1nLm5vZGUuZmlyc3RDaGlsZCxcbm07bDtsPW0pbT1sLm5leHRTaWJsaW5nLGsudGVzdChsLmNsYXNzTmFtZSkmJmcubm9kZS5yZW1vdmVDaGlsZChsKTtSZShmLGcsaCl9fWIuY2hhbmdlcz1udWxsfWZ1bmN0aW9uIFNiKGEpe2Eubm9kZT09YS50ZXh0JiYoYS5ub2RlPXYoXCJkaXZcIixudWxsLG51bGwsXCJwb3NpdGlvbjogcmVsYXRpdmVcIiksYS50ZXh0LnBhcmVudE5vZGUmJmEudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChhLm5vZGUsYS50ZXh0KSxhLm5vZGUuYXBwZW5kQ2hpbGQoYS50ZXh0KSxHJiY4PlQmJihhLm5vZGUuc3R5bGUuekluZGV4PTIpKTtyZXR1cm4gYS5ub2RlfWZ1bmN0aW9uIFBlKGEsYil7dmFyIGQ9YS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7cmV0dXJuIGQmJmQubGluZT09Yi5saW5lPyhhLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZD1udWxsLGIubWVhc3VyZT1kLm1lYXN1cmUsZC5idWlsdCk6TGUoYSxiKX1mdW5jdGlvbiBDZChhLGIpe3ZhciBkPWIuYmdDbGFzcz9iLmJnQ2xhc3MrXCIgXCIrXG4oYi5saW5lLmJnQ2xhc3N8fFwiXCIpOmIubGluZS5iZ0NsYXNzO2QmJihkKz1cIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kXCIpO2lmKGIuYmFja2dyb3VuZClkP2IuYmFja2dyb3VuZC5jbGFzc05hbWU9ZDooYi5iYWNrZ3JvdW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYi5iYWNrZ3JvdW5kKSxiLmJhY2tncm91bmQ9bnVsbCk7ZWxzZSBpZihkKXt2YXIgYz1TYihiKTtiLmJhY2tncm91bmQ9Yy5pbnNlcnRCZWZvcmUodihcImRpdlwiLG51bGwsZCksYy5maXJzdENoaWxkKTthLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShiLmJhY2tncm91bmQpfWIubGluZS53cmFwQ2xhc3M/U2IoYikuY2xhc3NOYW1lPWIubGluZS53cmFwQ2xhc3M6Yi5ub2RlIT1iLnRleHQmJihiLm5vZGUuY2xhc3NOYW1lPVwiXCIpO2IudGV4dC5jbGFzc05hbWU9KGIudGV4dENsYXNzP2IudGV4dENsYXNzK1wiIFwiKyhiLmxpbmUudGV4dENsYXNzfHxcIlwiKTpiLmxpbmUudGV4dENsYXNzKXx8XCJcIn1mdW5jdGlvbiBRZShhLFxuYixkLGMpe2IuZ3V0dGVyJiYoYi5ub2RlLnJlbW92ZUNoaWxkKGIuZ3V0dGVyKSxiLmd1dHRlcj1udWxsKTtiLmd1dHRlckJhY2tncm91bmQmJihiLm5vZGUucmVtb3ZlQ2hpbGQoYi5ndXR0ZXJCYWNrZ3JvdW5kKSxiLmd1dHRlckJhY2tncm91bmQ9bnVsbCk7aWYoYi5saW5lLmd1dHRlckNsYXNzKXt2YXIgZT1TYihiKTtiLmd1dHRlckJhY2tncm91bmQ9dihcImRpdlwiLG51bGwsXCJDb2RlTWlycm9yLWd1dHRlci1iYWNrZ3JvdW5kIFwiK2IubGluZS5ndXR0ZXJDbGFzcyxcImxlZnQ6IFwiKyhhLm9wdGlvbnMuZml4ZWRHdXR0ZXI/Yy5maXhlZFBvczotYy5ndXR0ZXJUb3RhbFdpZHRoKStcInB4OyB3aWR0aDogXCIrYy5ndXR0ZXJUb3RhbFdpZHRoK1wicHhcIik7YS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUoYi5ndXR0ZXJCYWNrZ3JvdW5kKTtlLmluc2VydEJlZm9yZShiLmd1dHRlckJhY2tncm91bmQsYi50ZXh0KX1lPWIubGluZS5ndXR0ZXJNYXJrZXJzO2lmKGEub3B0aW9ucy5saW5lTnVtYmVyc3x8XG5lKXt2YXIgZj1TYihiKSxnPWIuZ3V0dGVyPXYoXCJkaXZcIixudWxsLFwiQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlclwiLFwibGVmdDogXCIrKGEub3B0aW9ucy5maXhlZEd1dHRlcj9jLmZpeGVkUG9zOi1jLmd1dHRlclRvdGFsV2lkdGgpK1wicHhcIik7Zy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKTthLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShnKTtmLmluc2VydEJlZm9yZShnLGIudGV4dCk7Yi5saW5lLmd1dHRlckNsYXNzJiYoZy5jbGFzc05hbWUrPVwiIFwiK2IubGluZS5ndXR0ZXJDbGFzcyk7IWEub3B0aW9ucy5saW5lTnVtYmVyc3x8ZSYmZVtcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIl18fChiLmxpbmVOdW1iZXI9Zy5hcHBlbmRDaGlsZCh2KFwiZGl2XCIscWQoYS5vcHRpb25zLGQpLFwiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdFwiLFwibGVmdDogXCIrYy5ndXR0ZXJMZWZ0W1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiXStcInB4OyB3aWR0aDogXCIrXG5hLmRpc3BsYXkubGluZU51bUlubmVyV2lkdGgrXCJweFwiKSkpO2lmKGUpZm9yKGI9MDtiPGEuZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGg7KytiKWQ9YS5kaXNwbGF5Lmd1dHRlclNwZWNzW2JdLmNsYXNzTmFtZSwoZj1lLmhhc093blByb3BlcnR5KGQpJiZlW2RdKSYmZy5hcHBlbmRDaGlsZCh2KFwiZGl2XCIsW2ZdLFwiQ29kZU1pcnJvci1ndXR0ZXItZWx0XCIsXCJsZWZ0OiBcIitjLmd1dHRlckxlZnRbZF0rXCJweDsgd2lkdGg6IFwiK2MuZ3V0dGVyV2lkdGhbZF0rXCJweFwiKSl9fWZ1bmN0aW9uIFBnKGEsYixkLGMpe3ZhciBlPVBlKGEsYik7Yi50ZXh0PWIubm9kZT1lLnByZTtlLmJnQ2xhc3MmJihiLmJnQ2xhc3M9ZS5iZ0NsYXNzKTtlLnRleHRDbGFzcyYmKGIudGV4dENsYXNzPWUudGV4dENsYXNzKTtDZChhLGIpO1FlKGEsYixkLGMpO1JlKGEsYixjKTtyZXR1cm4gYi5ub2RlfWZ1bmN0aW9uIFJlKGEsYixkKXtTZShhLGIubGluZSxiLGQsITApO2lmKGIucmVzdClmb3IodmFyIGM9MDtjPGIucmVzdC5sZW5ndGg7YysrKVNlKGEsXG5iLnJlc3RbY10sYixkLCExKX1mdW5jdGlvbiBTZShhLGIsZCxjLGUpe2lmKGIud2lkZ2V0cyl7dmFyIGY9U2IoZCksZz0wO2ZvcihiPWIud2lkZ2V0cztnPGIubGVuZ3RoOysrZyl7dmFyIGg9YltnXSxrPXYoXCJkaXZcIixbaC5ub2RlXSxcIkNvZGVNaXJyb3ItbGluZXdpZGdldFwiKyhoLmNsYXNzTmFtZT9cIiBcIitoLmNsYXNzTmFtZTpcIlwiKSk7aC5oYW5kbGVNb3VzZUV2ZW50c3x8ay5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsXCJ0cnVlXCIpO3ZhciBsPWgsbT1rLG49YztpZihsLm5vSFNjcm9sbCl7KGQuYWxpZ25hYmxlfHwoZC5hbGlnbmFibGU9W10pKS5wdXNoKG0pO3ZhciBwPW4ud3JhcHBlcldpZHRoO20uc3R5bGUubGVmdD1uLmZpeGVkUG9zK1wicHhcIjtsLmNvdmVyR3V0dGVyfHwocC09bi5ndXR0ZXJUb3RhbFdpZHRoLG0uc3R5bGUucGFkZGluZ0xlZnQ9bi5ndXR0ZXJUb3RhbFdpZHRoK1wicHhcIik7bS5zdHlsZS53aWR0aD1wK1wicHhcIn1sLmNvdmVyR3V0dGVyJiYobS5zdHlsZS56SW5kZXg9XG41LG0uc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiLGwubm9IU2Nyb2xsfHwobS5zdHlsZS5tYXJnaW5MZWZ0PS1uLmd1dHRlclRvdGFsV2lkdGgrXCJweFwiKSk7YS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUoayk7ZSYmaC5hYm92ZT9mLmluc2VydEJlZm9yZShrLGQuZ3V0dGVyfHxkLnRleHQpOmYuYXBwZW5kQ2hpbGQoayk7YWEoaCxcInJlZHJhd1wiKX19fWZ1bmN0aW9uIFRiKGEpe2lmKG51bGwhPWEuaGVpZ2h0KXJldHVybiBhLmhlaWdodDt2YXIgYj1hLmRvYy5jbTtpZighYilyZXR1cm4gMDtpZighamEoZG9jdW1lbnQuYm9keSxhLm5vZGUpKXt2YXIgZD1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIjthLmNvdmVyR3V0dGVyJiYoZCs9XCJtYXJnaW4tbGVmdDogLVwiK2IuZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoK1wicHg7XCIpO2Eubm9IU2Nyb2xsJiYoZCs9XCJ3aWR0aDogXCIrYi5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgrXCJweDtcIik7RChiLmRpc3BsYXkubWVhc3VyZSx2KFwiZGl2XCIsXG5bYS5ub2RlXSxudWxsLGQpKX1yZXR1cm4gYS5oZWlnaHQ9YS5ub2RlLnBhcmVudE5vZGUub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIExhKGEsYil7Zm9yKGI9Yi50YXJnZXR8fGIuc3JjRWxlbWVudDtiIT1hLndyYXBwZXI7Yj1iLnBhcmVudE5vZGUpaWYoIWJ8fDE9PWIubm9kZVR5cGUmJlwidHJ1ZVwiPT1iLmdldEF0dHJpYnV0ZShcImNtLWlnbm9yZS1ldmVudHNcIil8fGIucGFyZW50Tm9kZT09YS5zaXplciYmYiE9YS5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiBEZChhKXtyZXR1cm4gYS5tb3Zlci5vZmZzZXRIZWlnaHQtYS5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIFRlKGEpe2lmKGEuY2FjaGVkUGFkZGluZ0gpcmV0dXJuIGEuY2FjaGVkUGFkZGluZ0g7dmFyIGI9RChhLm1lYXN1cmUsdihcInByZVwiLFwieFwiLFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIikpO2I9d2luZG93LmdldENvbXB1dGVkU3R5bGU/d2luZG93LmdldENvbXB1dGVkU3R5bGUoYik6Yi5jdXJyZW50U3R5bGU7Yj17bGVmdDpwYXJzZUludChiLnBhZGRpbmdMZWZ0KSxcbnJpZ2h0OnBhcnNlSW50KGIucGFkZGluZ1JpZ2h0KX07aXNOYU4oYi5sZWZ0KXx8aXNOYU4oYi5yaWdodCl8fChhLmNhY2hlZFBhZGRpbmdIPWIpO3JldHVybiBifWZ1bmN0aW9uIEhhKGEpe3JldHVybiA1MC1hLmRpc3BsYXkubmF0aXZlQmFyV2lkdGh9ZnVuY3Rpb24gY2IoYSl7cmV0dXJuIGEuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC1IYShhKS1hLmRpc3BsYXkuYmFyV2lkdGh9ZnVuY3Rpb24gRWQoYSl7cmV0dXJuIGEuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQtSGEoYSktYS5kaXNwbGF5LmJhckhlaWdodH1mdW5jdGlvbiBVZShhLGIsZCl7aWYoYS5saW5lPT1iKXJldHVybnttYXA6YS5tZWFzdXJlLm1hcCxjYWNoZTphLm1lYXN1cmUuY2FjaGV9O2lmKGEucmVzdCl7Zm9yKHZhciBjPTA7YzxhLnJlc3QubGVuZ3RoO2MrKylpZihhLnJlc3RbY109PWIpcmV0dXJue21hcDphLm1lYXN1cmUubWFwc1tjXSxjYWNoZTphLm1lYXN1cmUuY2FjaGVzW2NdfTtmb3IoYj1cbjA7YjxhLnJlc3QubGVuZ3RoO2IrKylpZihOKGEucmVzdFtiXSk+ZClyZXR1cm57bWFwOmEubWVhc3VyZS5tYXBzW2JdLGNhY2hlOmEubWVhc3VyZS5jYWNoZXNbYl0sYmVmb3JlOiEwfX19ZnVuY3Rpb24gRmQoYSxiKXtpZihiPj1hLmRpc3BsYXkudmlld0Zyb20mJmI8YS5kaXNwbGF5LnZpZXdUbylyZXR1cm4gYS5kaXNwbGF5LnZpZXdbZGIoYSxiKV07aWYoKGE9YS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQpJiZiPj1hLmxpbmVOJiZiPGEubGluZU4rYS5zaXplKXJldHVybiBhfWZ1bmN0aW9uIGViKGEsYil7dmFyIGQ9TihiKSxjPUZkKGEsZCk7YyYmIWMudGV4dD9jPW51bGw6YyYmYy5jaGFuZ2VzJiYoT2UoYSxjLGQsR2QoYSkpLGEuY3VyT3AuZm9yY2VVcGRhdGU9ITApO2lmKCFjKXt2YXIgZT16YShiKTtjPU4oZSk7ZT1hLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZD1uZXcgTmUoYS5kb2MsZSxjKTtlLmxpbmVOPWM7Yz1lLmJ1aWx0PUxlKGEsZSk7ZS50ZXh0PWMucHJlO0QoYS5kaXNwbGF5LmxpbmVNZWFzdXJlLFxuYy5wcmUpO2M9ZX1hPVVlKGMsYixkKTtyZXR1cm57bGluZTpiLHZpZXc6YyxyZWN0Om51bGwsbWFwOmEubWFwLGNhY2hlOmEuY2FjaGUsYmVmb3JlOmEuYmVmb3JlLGhhc0hlaWdodHM6ITF9fWZ1bmN0aW9uIEFhKGEsYixkLGMsZSl7Yi5iZWZvcmUmJihkPS0xKTt2YXIgZj1kKyhjfHxcIlwiKTtpZihiLmNhY2hlLmhhc093blByb3BlcnR5KGYpKWE9Yi5jYWNoZVtmXTtlbHNle2IucmVjdHx8KGIucmVjdD1iLnZpZXcudGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7aWYoIWIuaGFzSGVpZ2h0cyl7dmFyIGc9Yi52aWV3LGg9Yi5yZWN0LGs9YS5vcHRpb25zLmxpbmVXcmFwcGluZyxsPWsmJmNiKGEpO2lmKCFnLm1lYXN1cmUuaGVpZ2h0c3x8ayYmZy5tZWFzdXJlLndpZHRoIT1sKXt2YXIgbT1nLm1lYXN1cmUuaGVpZ2h0cz1bXTtpZihrKWZvcihnLm1lYXN1cmUud2lkdGg9bCxnPWcudGV4dC5maXJzdENoaWxkLmdldENsaWVudFJlY3RzKCksaz0wO2s8Zy5sZW5ndGgtMTtrKyspe2w9XG5nW2tdO3ZhciBuPWdbaysxXTsyPE1hdGguYWJzKGwuYm90dG9tLW4uYm90dG9tKSYmbS5wdXNoKChsLmJvdHRvbStuLnRvcCkvMi1oLnRvcCl9bS5wdXNoKGguYm90dG9tLWgudG9wKX1iLmhhc0hlaWdodHM9ITB9bT1jO2c9VmUoYi5tYXAsZCxtKTtjPWcubm9kZTtoPWcuc3RhcnQ7az1nLmVuZDtkPWcuY29sbGFwc2U7aWYoMz09Yy5ub2RlVHlwZSl7Zm9yKHZhciBwPTA7ND5wO3ArKyl7Zm9yKDtoJiZrZChiLmxpbmUudGV4dC5jaGFyQXQoZy5jb3ZlclN0YXJ0K2gpKTspLS1oO2Zvcig7Zy5jb3ZlclN0YXJ0K2s8Zy5jb3ZlckVuZCYma2QoYi5saW5lLnRleHQuY2hhckF0KGcuY292ZXJTdGFydCtrKSk7KSsraztpZihHJiY5PlQmJjA9PWgmJms9PWcuY292ZXJFbmQtZy5jb3ZlclN0YXJ0KXZhciBxPWMucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3E9UWIoYyxoLGspLmdldENsaWVudFJlY3RzKCk7az1XZTtpZihcImxlZnRcIj09bSlmb3IobD0wO2w8cS5sZW5ndGgmJlxuKGs9cVtsXSkubGVmdD09ay5yaWdodDtsKyspO2Vsc2UgZm9yKGw9cS5sZW5ndGgtMTswPD1sJiYoaz1xW2xdKS5sZWZ0PT1rLnJpZ2h0O2wtLSk7cT1rfWlmKHEubGVmdHx8cS5yaWdodHx8MD09aClicmVhaztrPWg7LS1oO2Q9XCJyaWdodFwifUcmJjExPlQmJigocD0hd2luZG93LnNjcmVlbnx8bnVsbD09c2NyZWVuLmxvZ2ljYWxYRFBJfHxzY3JlZW4ubG9naWNhbFhEUEk9PXNjcmVlbi5kZXZpY2VYRFBJKXx8KG51bGwhPUhkP3A9SGQ6KG09RChhLmRpc3BsYXkubWVhc3VyZSx2KFwic3BhblwiLFwieFwiKSkscD1tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG09UWIobSwwLDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHA9SGQ9MTxNYXRoLmFicyhwLmxlZnQtbS5sZWZ0KSkscD0hcCkscHx8KHA9c2NyZWVuLmxvZ2ljYWxYRFBJL3NjcmVlbi5kZXZpY2VYRFBJLG09c2NyZWVuLmxvZ2ljYWxZRFBJL3NjcmVlbi5kZXZpY2VZRFBJLHE9e2xlZnQ6cS5sZWZ0KnAscmlnaHQ6cS5yaWdodCpwLFxudG9wOnEudG9wKm0sYm90dG9tOnEuYm90dG9tKm19KSl9ZWxzZSAwPGgmJihkPW09XCJyaWdodFwiKSxxPWEub3B0aW9ucy5saW5lV3JhcHBpbmcmJjE8KHA9Yy5nZXRDbGllbnRSZWN0cygpKS5sZW5ndGg/cFtcInJpZ2h0XCI9PW0/cC5sZW5ndGgtMTowXTpjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyEoRyYmOT5UKXx8aHx8cSYmKHEubGVmdHx8cS5yaWdodCl8fChxPShxPWMucGFyZW50Tm9kZS5nZXRDbGllbnRSZWN0cygpWzBdKT97bGVmdDpxLmxlZnQscmlnaHQ6cS5sZWZ0K3ViKGEuZGlzcGxheSksdG9wOnEudG9wLGJvdHRvbTpxLmJvdHRvbX06V2UpO2M9cS50b3AtYi5yZWN0LnRvcDtoPXEuYm90dG9tLWIucmVjdC50b3A7cD0oYytoKS8yO209Yi52aWV3Lm1lYXN1cmUuaGVpZ2h0cztmb3IoZz0wO2c8bS5sZW5ndGgtMSYmIShwPG1bZ10pO2crKyk7ZD17bGVmdDooXCJyaWdodFwiPT1kP3EucmlnaHQ6cS5sZWZ0KS1iLnJlY3QubGVmdCxyaWdodDooXCJsZWZ0XCI9PWQ/cS5sZWZ0OnEucmlnaHQpLVxuYi5yZWN0LmxlZnQsdG9wOmc/bVtnLTFdOjAsYm90dG9tOm1bZ119O3EubGVmdHx8cS5yaWdodHx8KGQuYm9ndXM9ITApO2Eub3B0aW9ucy5zaW5nbGVDdXJzb3JIZWlnaHRQZXJMaW5lfHwoZC5ydG9wPWMsZC5yYm90dG9tPWgpO2E9ZDthLmJvZ3VzfHwoYi5jYWNoZVtmXT1hKX1yZXR1cm57bGVmdDphLmxlZnQscmlnaHQ6YS5yaWdodCx0b3A6ZT9hLnJ0b3A6YS50b3AsYm90dG9tOmU/YS5yYm90dG9tOmEuYm90dG9tfX1mdW5jdGlvbiBWZShhLGIsZCl7Zm9yKHZhciBjLGUsZixnLGgsayxsPTA7bDxhLmxlbmd0aDtsKz0zKXtoPWFbbF07az1hW2wrMV07aWYoYjxoKWU9MCxmPTEsZz1cImxlZnRcIjtlbHNlIGlmKGI8ayllPWItaCxmPWUrMTtlbHNlIGlmKGw9PWEubGVuZ3RoLTN8fGI9PWsmJmFbbCszXT5iKWY9ay1oLGU9Zi0xLGI+PWsmJihnPVwicmlnaHRcIik7aWYobnVsbCE9ZSl7Yz1hW2wrMl07aD09ayYmZD09KGMuaW5zZXJ0TGVmdD9cImxlZnRcIjpcInJpZ2h0XCIpJiYoZz1kKTtpZihcImxlZnRcIj09XG5kJiYwPT1lKWZvcig7bCYmYVtsLTJdPT1hW2wtM10mJmFbbC0xXS5pbnNlcnRMZWZ0OyljPWFbKGwtPTMpKzJdLGc9XCJsZWZ0XCI7aWYoXCJyaWdodFwiPT1kJiZlPT1rLWgpZm9yKDtsPGEubGVuZ3RoLTMmJmFbbCszXT09YVtsKzRdJiYhYVtsKzVdLmluc2VydExlZnQ7KWM9YVsobCs9MykrMl0sZz1cInJpZ2h0XCI7YnJlYWt9fXJldHVybntub2RlOmMsc3RhcnQ6ZSxlbmQ6Zixjb2xsYXBzZTpnLGNvdmVyU3RhcnQ6aCxjb3ZlckVuZDprfX1mdW5jdGlvbiBYZShhKXtpZihhLm1lYXN1cmUmJihhLm1lYXN1cmUuY2FjaGU9e30sYS5tZWFzdXJlLmhlaWdodHM9bnVsbCxhLnJlc3QpKWZvcih2YXIgYj0wO2I8YS5yZXN0Lmxlbmd0aDtiKyspYS5tZWFzdXJlLmNhY2hlc1tiXT17fX1mdW5jdGlvbiBZZShhKXthLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlPW51bGw7RShhLmRpc3BsYXkubGluZU1lYXN1cmUpO2Zvcih2YXIgYj0wO2I8YS5kaXNwbGF5LnZpZXcubGVuZ3RoO2IrKylYZShhLmRpc3BsYXkudmlld1tiXSl9XG5mdW5jdGlvbiBVYihhKXtZZShhKTthLmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoPWEuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0PWEuZGlzcGxheS5jYWNoZWRQYWRkaW5nSD1udWxsO2Eub3B0aW9ucy5saW5lV3JhcHBpbmd8fChhLmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApO2EuZGlzcGxheS5saW5lTnVtQ2hhcnM9bnVsbH1mdW5jdGlvbiBaZShhKXtyZXR1cm4gUWEmJkdjPy0oYS5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhLmJvZHkpLm1hcmdpbkxlZnQpKTphLmRlZmF1bHRWaWV3LnBhZ2VYT2Zmc2V0fHwoYS5kb2N1bWVudEVsZW1lbnR8fGEuYm9keSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiAkZShhKXtyZXR1cm4gUWEmJkdjPy0oYS5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1wYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEuYm9keSkubWFyZ2luVG9wKSk6YS5kZWZhdWx0Vmlldy5wYWdlWU9mZnNldHx8XG4oYS5kb2N1bWVudEVsZW1lbnR8fGEuYm9keSkuc2Nyb2xsVG9wfWZ1bmN0aW9uIElkKGEpe2E9emEoYSkud2lkZ2V0czt2YXIgYj0wO2lmKGEpZm9yKHZhciBkPTA7ZDxhLmxlbmd0aDsrK2QpYVtkXS5hYm92ZSYmKGIrPVRiKGFbZF0pKTtyZXR1cm4gYn1mdW5jdGlvbiBIYyhhLGIsZCxjLGUpe2V8fChlPUlkKGIpLGQudG9wKz1lLGQuYm90dG9tKz1lKTtpZihcImxpbmVcIj09YylyZXR1cm4gZDtjfHwoYz1cImxvY2FsXCIpO2I9R2EoYik7Yj1cImxvY2FsXCI9PWM/YithLmRpc3BsYXkubGluZVNwYWNlLm9mZnNldFRvcDpiLWEuZGlzcGxheS52aWV3T2Zmc2V0O2lmKFwicGFnZVwiPT1jfHxcIndpbmRvd1wiPT1jKWU9YS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxiKz1lLnRvcCsoXCJ3aW5kb3dcIj09Yz8wOiRlKHFhKGEpKSksYT1lLmxlZnQrKFwid2luZG93XCI9PWM/MDpaZShxYShhKSkpLGQubGVmdCs9YSxkLnJpZ2h0Kz1hO2QudG9wKz1iO2QuYm90dG9tKz1iO3JldHVybiBkfVxuZnVuY3Rpb24gYWYoYSxiLGQpe2lmKFwiZGl2XCI9PWQpcmV0dXJuIGI7dmFyIGM9Yi5sZWZ0O2I9Yi50b3A7XCJwYWdlXCI9PWQ/KGMtPVplKHFhKGEpKSxiLT0kZShxYShhKSkpOlwibG9jYWxcIiE9ZCYmZHx8KGQ9YS5kaXNwbGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGMrPWQubGVmdCxiKz1kLnRvcCk7YT1hLmRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybntsZWZ0OmMtYS5sZWZ0LHRvcDpiLWEudG9wfX1mdW5jdGlvbiBJYyhhLGIsZCxjLGUpe2N8fChjPXcoYS5kb2MsYi5saW5lKSk7dmFyIGY9YztiPWIuY2g7Yz1BYShhLGViKGEsYyksYixlKTtyZXR1cm4gSGMoYSxmLGMsZCl9ZnVuY3Rpb24gQmEoYSxiLGQsYyxlLGYpe2Z1bmN0aW9uIGcocCxxKXtwPUFhKGEsZSxwLHE/XCJyaWdodFwiOlwibGVmdFwiLGYpO3E/cC5sZWZ0PXAucmlnaHQ6cC5yaWdodD1wLmxlZnQ7cmV0dXJuIEhjKGEsYyxwLGQpfWZ1bmN0aW9uIGgocCxxLHIpe3JldHVybiBnKHI/XG5wLTE6cCwxPT1rW3FdLmxldmVsIT1yKX1jPWN8fHcoYS5kb2MsYi5saW5lKTtlfHwoZT1lYihhLGMpKTt2YXIgaz1KYShjLGEuZG9jLmRpcmVjdGlvbiksbD1iLmNoO2I9Yi5zdGlja3k7bD49Yy50ZXh0Lmxlbmd0aD8obD1jLnRleHQubGVuZ3RoLGI9XCJiZWZvcmVcIik6MD49bCYmKGw9MCxiPVwiYWZ0ZXJcIik7aWYoIWspcmV0dXJuIGcoXCJiZWZvcmVcIj09Yj9sLTE6bCxcImJlZm9yZVwiPT1iKTt2YXIgbT1LYihrLGwsYiksbj1MYjttPWgobCxtLFwiYmVmb3JlXCI9PWIpO251bGwhPW4mJihtLm90aGVyPWgobCxuLFwiYmVmb3JlXCIhPWIpKTtyZXR1cm4gbX1mdW5jdGlvbiBiZihhLGIpe3ZhciBkPTA7Yj1DKGEuZG9jLGIpO2Eub3B0aW9ucy5saW5lV3JhcHBpbmd8fChkPXViKGEuZGlzcGxheSkqYi5jaCk7Yj13KGEuZG9jLGIubGluZSk7YT1HYShiKSthLmRpc3BsYXkubGluZVNwYWNlLm9mZnNldFRvcDtyZXR1cm57bGVmdDpkLHJpZ2h0OmQsdG9wOmEsYm90dG9tOmErYi5oZWlnaHR9fWZ1bmN0aW9uIEpkKGEsXG5iLGQsYyxlKXthPXQoYSxiLGQpO2EueFJlbD1lO2MmJihhLm91dHNpZGU9Yyk7cmV0dXJuIGF9ZnVuY3Rpb24gS2QoYSxiLGQpe3ZhciBjPWEuZG9jO2QrPWEuZGlzcGxheS52aWV3T2Zmc2V0O2lmKDA+ZClyZXR1cm4gSmQoYy5maXJzdCwwLG51bGwsLTEsLTEpO3ZhciBlPWJiKGMsZCksZj1jLmZpcnN0K2Muc2l6ZS0xO2lmKGU+ZilyZXR1cm4gSmQoYy5maXJzdCtjLnNpemUtMSx3KGMsZikudGV4dC5sZW5ndGgsbnVsbCwxLDEpOzA+YiYmKGI9MCk7Zm9yKHZhciBnPXcoYyxlKTs7KXtmPVFnKGEsZyxlLGIsZCk7dmFyIGg9dm9pZCAwO3ZhciBrPWYuY2grKDA8Zi54UmVsfHwwPGYub3V0c2lkZT8xOjApO2lmKGc9S2EmJmcubWFya2VkU3BhbnMpZm9yKHZhciBsPTA7bDxnLmxlbmd0aDsrK2wpe3ZhciBtPWdbbF07bS5tYXJrZXIuY29sbGFwc2VkJiYobnVsbD09bS5mcm9tfHxtLmZyb208aykmJihudWxsPT1tLnRvfHxtLnRvPmspJiYoIWh8fDA+d2QoaCxtLm1hcmtlcikpJiYoaD1cbm0ubWFya2VyKX1pZighaClyZXR1cm4gZjtmPWguZmluZCgxKTtpZihmLmxpbmU9PWUpcmV0dXJuIGY7Zz13KGMsZT1mLmxpbmUpfX1mdW5jdGlvbiBjZihhLGIsZCxjKXtjLT1JZChiKTtiPWIudGV4dC5sZW5ndGg7dmFyIGU9SmIoZnVuY3Rpb24oZil7cmV0dXJuIEFhKGEsZCxmLTEpLmJvdHRvbTw9Y30sYiwwKTtiPUpiKGZ1bmN0aW9uKGYpe3JldHVybiBBYShhLGQsZikudG9wPmN9LGUsYik7cmV0dXJue2JlZ2luOmUsZW5kOmJ9fWZ1bmN0aW9uIGRmKGEsYixkLGMpe2R8fChkPWViKGEsYikpO2M9SGMoYSxiLEFhKGEsZCxjKSxcImxpbmVcIikudG9wO3JldHVybiBjZihhLGIsZCxjKX1mdW5jdGlvbiBMZChhLGIsZCxjKXtyZXR1cm4gYS5ib3R0b208PWQ/ITE6YS50b3A+ZD8hMDooYz9hLmxlZnQ6YS5yaWdodCk+Yn1mdW5jdGlvbiBRZyhhLGIsZCxjLGUpe2UtPUdhKGIpO3ZhciBmPWViKGEsYiksZz1JZChiKSxoPTAsaz1iLnRleHQubGVuZ3RoLGw9ITAsbT1KYShiLGEuZG9jLmRpcmVjdGlvbik7XG5tJiYobT0oYS5vcHRpb25zLmxpbmVXcmFwcGluZz9SZzpTZykoYSxiLGQsZixtLGMsZSksaD0obD0xIT1tLmxldmVsKT9tLmZyb206bS50by0xLGs9bD9tLnRvOm0uZnJvbS0xKTt2YXIgbj1udWxsLHA9bnVsbDttPUpiKGZ1bmN0aW9uKHIpe3ZhciB1PUFhKGEsZixyKTt1LnRvcCs9Zzt1LmJvdHRvbSs9ZztpZighTGQodSxjLGUsITEpKXJldHVybiExO3UudG9wPD1lJiZ1LmxlZnQ8PWMmJihuPXIscD11KTtyZXR1cm4hMH0saCxrKTt2YXIgcT0hMTtwPyhoPWMtcC5sZWZ0PHAucmlnaHQtYyxsPWg9PWwsbT1uKyhsPzA6MSksbD1sP1wiYWZ0ZXJcIjpcImJlZm9yZVwiLGg9aD9wLmxlZnQ6cC5yaWdodCk6KGx8fG0hPWsmJm0hPWh8fG0rKyxsPTA9PW0/XCJhZnRlclwiOm09PWIudGV4dC5sZW5ndGg/XCJiZWZvcmVcIjpBYShhLGYsbS0obD8xOjApKS5ib3R0b20rZzw9ZT09bD9cImFmdGVyXCI6XCJiZWZvcmVcIixxPUJhKGEsdChkLG0sbCksXCJsaW5lXCIsYixmKSxoPXEubGVmdCxxPWU8cS50b3A/LTE6ZT49XG5xLmJvdHRvbT8xOjApO209c2UoYi50ZXh0LG0sMSk7cmV0dXJuIEpkKGQsbSxsLHEsYy1oKX1mdW5jdGlvbiBTZyhhLGIsZCxjLGUsZixnKXt2YXIgaD1KYihmdW5jdGlvbihtKXttPWVbbV07dmFyIG49MSE9bS5sZXZlbDtyZXR1cm4gTGQoQmEoYSx0KGQsbj9tLnRvOm0uZnJvbSxuP1wiYmVmb3JlXCI6XCJhZnRlclwiKSxcImxpbmVcIixiLGMpLGYsZywhMCl9LDAsZS5sZW5ndGgtMSksaz1lW2hdO2lmKDA8aCl7dmFyIGw9MSE9ay5sZXZlbDtsPUJhKGEsdChkLGw/ay5mcm9tOmsudG8sbD9cImFmdGVyXCI6XCJiZWZvcmVcIiksXCJsaW5lXCIsYixjKTtMZChsLGYsZywhMCkmJmwudG9wPmcmJihrPWVbaC0xXSl9cmV0dXJuIGt9ZnVuY3Rpb24gUmcoYSxiLGQsYyxlLGYsZyl7Zz1jZihhLGIsYyxnKTtkPWcuYmVnaW47Zz1nLmVuZDsvXFxzLy50ZXN0KGIudGV4dC5jaGFyQXQoZy0xKSkmJmctLTtmb3IodmFyIGg9Yj1udWxsLGs9MDtrPGUubGVuZ3RoO2srKyl7dmFyIGw9ZVtrXTtpZighKGwuZnJvbT49XG5nfHxsLnRvPD1kKSl7dmFyIG09QWEoYSxjLDEhPWwubGV2ZWw/TWF0aC5taW4oZyxsLnRvKS0xOk1hdGgubWF4KGQsbC5mcm9tKSkucmlnaHQ7bT1tPGY/Zi1tKzFFOTptLWY7aWYoIWJ8fGg+bSliPWwsaD1tfX1ifHwoYj1lW2UubGVuZ3RoLTFdKTtiLmZyb208ZCYmKGI9e2Zyb206ZCx0bzpiLnRvLGxldmVsOmIubGV2ZWx9KTtiLnRvPmcmJihiPXtmcm9tOmIuZnJvbSx0bzpnLGxldmVsOmIubGV2ZWx9KTtyZXR1cm4gYn1mdW5jdGlvbiB2YihhKXtpZihudWxsIT1hLmNhY2hlZFRleHRIZWlnaHQpcmV0dXJuIGEuY2FjaGVkVGV4dEhlaWdodDtpZihudWxsPT1mYil7ZmI9dihcInByZVwiLG51bGwsXCJDb2RlTWlycm9yLWxpbmUtbGlrZVwiKTtmb3IodmFyIGI9MDs0OT5iOysrYilmYi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInhcIikpLGZiLmFwcGVuZENoaWxkKHYoXCJiclwiKSk7ZmIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJ4XCIpKX1EKGEubWVhc3VyZSxcbmZiKTtiPWZiLm9mZnNldEhlaWdodC81MDszPGImJihhLmNhY2hlZFRleHRIZWlnaHQ9Yik7RShhLm1lYXN1cmUpO3JldHVybiBifHwxfWZ1bmN0aW9uIHViKGEpe2lmKG51bGwhPWEuY2FjaGVkQ2hhcldpZHRoKXJldHVybiBhLmNhY2hlZENoYXJXaWR0aDt2YXIgYj12KFwic3BhblwiLFwieHh4eHh4eHh4eFwiKSxkPXYoXCJwcmVcIixbYl0sXCJDb2RlTWlycm9yLWxpbmUtbGlrZVwiKTtEKGEubWVhc3VyZSxkKTtiPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Yj0oYi5yaWdodC1iLmxlZnQpLzEwOzI8YiYmKGEuY2FjaGVkQ2hhcldpZHRoPWIpO3JldHVybiBifHwxMH1mdW5jdGlvbiBHZChhKXtmb3IodmFyIGI9YS5kaXNwbGF5LGQ9e30sYz17fSxlPWIuZ3V0dGVycy5jbGllbnRMZWZ0LGY9Yi5ndXR0ZXJzLmZpcnN0Q2hpbGQsZz0wO2Y7Zj1mLm5leHRTaWJsaW5nLCsrZyl7dmFyIGg9YS5kaXNwbGF5Lmd1dHRlclNwZWNzW2ddLmNsYXNzTmFtZTtkW2hdPWYub2Zmc2V0TGVmdCtmLmNsaWVudExlZnQrXG5lO2NbaF09Zi5jbGllbnRXaWR0aH1yZXR1cm57Zml4ZWRQb3M6TWQoYiksZ3V0dGVyVG90YWxXaWR0aDpiLmd1dHRlcnMub2Zmc2V0V2lkdGgsZ3V0dGVyTGVmdDpkLGd1dHRlcldpZHRoOmMsd3JhcHBlcldpZHRoOmIud3JhcHBlci5jbGllbnRXaWR0aH19ZnVuY3Rpb24gTWQoYSl7cmV0dXJuIGEuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1hLnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9ZnVuY3Rpb24gZWYoYSl7dmFyIGI9dmIoYS5kaXNwbGF5KSxkPWEub3B0aW9ucy5saW5lV3JhcHBpbmcsYz1kJiZNYXRoLm1heCg1LGEuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC91YihhLmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihlKXtpZihQYShhLmRvYyxlKSlyZXR1cm4gMDt2YXIgZj0wO2lmKGUud2lkZ2V0cylmb3IodmFyIGc9MDtnPGUud2lkZ2V0cy5sZW5ndGg7ZysrKWUud2lkZ2V0c1tnXS5oZWlnaHQmJihmKz1lLndpZGdldHNbZ10uaGVpZ2h0KTtcbnJldHVybiBkP2YrKE1hdGguY2VpbChlLnRleHQubGVuZ3RoL2MpfHwxKSpiOmYrYn19ZnVuY3Rpb24gTmQoYSl7dmFyIGI9YS5kb2MsZD1lZihhKTtiLml0ZXIoZnVuY3Rpb24oYyl7dmFyIGU9ZChjKTtlIT1jLmhlaWdodCYmRWEoYyxlKX0pfWZ1bmN0aW9uIGdiKGEsYixkLGMpe3ZhciBlPWEuZGlzcGxheTtpZighZCYmXCJ0cnVlXCI9PShiLnRhcmdldHx8Yi5zcmNFbGVtZW50KS5nZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiKSlyZXR1cm4gbnVsbDtkPWUubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RyeXt2YXIgZj1iLmNsaWVudFgtZC5sZWZ0O3ZhciBnPWIuY2xpZW50WS1kLnRvcH1jYXRjaChrKXtyZXR1cm4gbnVsbH1iPUtkKGEsZixnKTt2YXIgaDtjJiYwPGIueFJlbCYmKGg9dyhhLmRvYyxiLmxpbmUpLnRleHQpLmxlbmd0aD09Yi5jaCYmKGM9d2EoaCxoLmxlbmd0aCxhLm9wdGlvbnMudGFiU2l6ZSktaC5sZW5ndGgsYj10KGIubGluZSxNYXRoLm1heCgwLFxuTWF0aC5yb3VuZCgoZi1UZShhLmRpc3BsYXkpLmxlZnQpL3ViKGEuZGlzcGxheSkpLWMpKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gZGIoYSxiKXtpZihiPj1hLmRpc3BsYXkudmlld1RvKXJldHVybiBudWxsO2ItPWEuZGlzcGxheS52aWV3RnJvbTtpZigwPmIpcmV0dXJuIG51bGw7YT1hLmRpc3BsYXkudmlldztmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKylpZihiLT1hW2RdLnNpemUsMD5iKXJldHVybiBkfWZ1bmN0aW9uIG1hKGEsYixkLGMpe251bGw9PWImJihiPWEuZG9jLmZpcnN0KTtudWxsPT1kJiYoZD1hLmRvYy5maXJzdCthLmRvYy5zaXplKTtjfHwoYz0wKTt2YXIgZT1hLmRpc3BsYXk7YyYmZDxlLnZpZXdUbyYmKG51bGw9PWUudXBkYXRlTGluZU51bWJlcnN8fGUudXBkYXRlTGluZU51bWJlcnM+YikmJihlLnVwZGF0ZUxpbmVOdW1iZXJzPWIpO2EuY3VyT3Audmlld0NoYW5nZWQ9ITA7aWYoYj49ZS52aWV3VG8pS2EmJnhkKGEuZG9jLGIpPGUudmlld1RvJiZSYShhKTtlbHNlIGlmKGQ8PVxuZS52aWV3RnJvbSlLYSYmSmUoYS5kb2MsZCtjKT5lLnZpZXdGcm9tP1JhKGEpOihlLnZpZXdGcm9tKz1jLGUudmlld1RvKz1jKTtlbHNlIGlmKGI8PWUudmlld0Zyb20mJmQ+PWUudmlld1RvKVJhKGEpO2Vsc2UgaWYoYjw9ZS52aWV3RnJvbSl7dmFyIGY9SmMoYSxkLGQrYywxKTtmPyhlLnZpZXc9ZS52aWV3LnNsaWNlKGYuaW5kZXgpLGUudmlld0Zyb209Zi5saW5lTixlLnZpZXdUbys9Yyk6UmEoYSl9ZWxzZSBpZihkPj1lLnZpZXdUbykoZj1KYyhhLGIsYiwtMSkpPyhlLnZpZXc9ZS52aWV3LnNsaWNlKDAsZi5pbmRleCksZS52aWV3VG89Zi5saW5lTik6UmEoYSk7ZWxzZXtmPUpjKGEsYixiLC0xKTt2YXIgZz1KYyhhLGQsZCtjLDEpO2YmJmc/KGUudmlldz1lLnZpZXcuc2xpY2UoMCxmLmluZGV4KS5jb25jYXQoRmMoYSxmLmxpbmVOLGcubGluZU4pKS5jb25jYXQoZS52aWV3LnNsaWNlKGcuaW5kZXgpKSxlLnZpZXdUbys9Yyk6UmEoYSl9aWYoYT1lLmV4dGVybmFsTWVhc3VyZWQpZDxcbmEubGluZU4/YS5saW5lTis9YzpiPGEubGluZU4rYS5zaXplJiYoZS5leHRlcm5hbE1lYXN1cmVkPW51bGwpfWZ1bmN0aW9uIFNhKGEsYixkKXthLmN1ck9wLnZpZXdDaGFuZ2VkPSEwO3ZhciBjPWEuZGlzcGxheSxlPWEuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO2UmJmI+PWUubGluZU4mJmI8ZS5saW5lTitlLnNpemUmJihjLmV4dGVybmFsTWVhc3VyZWQ9bnVsbCk7YjxjLnZpZXdGcm9tfHxiPj1jLnZpZXdUb3x8KGE9Yy52aWV3W2RiKGEsYildLG51bGwhPWEubm9kZSYmKGE9YS5jaGFuZ2VzfHwoYS5jaGFuZ2VzPVtdKSwtMT09ZWEoYSxkKSYmYS5wdXNoKGQpKSl9ZnVuY3Rpb24gUmEoYSl7YS5kaXNwbGF5LnZpZXdGcm9tPWEuZGlzcGxheS52aWV3VG89YS5kb2MuZmlyc3Q7YS5kaXNwbGF5LnZpZXc9W107YS5kaXNwbGF5LnZpZXdPZmZzZXQ9MH1mdW5jdGlvbiBKYyhhLGIsZCxjKXt2YXIgZT1kYihhLGIpLGY9YS5kaXNwbGF5LnZpZXc7aWYoIUthfHxkPT1hLmRvYy5maXJzdCtcbmEuZG9jLnNpemUpcmV0dXJue2luZGV4OmUsbGluZU46ZH07Zm9yKHZhciBnPWEuZGlzcGxheS52aWV3RnJvbSxoPTA7aDxlO2grKylnKz1mW2hdLnNpemU7aWYoZyE9Yil7aWYoMDxjKXtpZihlPT1mLmxlbmd0aC0xKXJldHVybiBudWxsO2I9ZytmW2VdLnNpemUtYjtlKyt9ZWxzZSBiPWctYjtkKz1ifWZvcig7eGQoYS5kb2MsZCkhPWQ7KXtpZihlPT0oMD5jPzA6Zi5sZW5ndGgtMSkpcmV0dXJuIG51bGw7ZCs9YypmW2UtKDA+Yz8xOjApXS5zaXplO2UrPWN9cmV0dXJue2luZGV4OmUsbGluZU46ZH19ZnVuY3Rpb24gZmYoYSl7YT1hLmRpc3BsYXkudmlldztmb3IodmFyIGI9MCxkPTA7ZDxhLmxlbmd0aDtkKyspe3ZhciBjPWFbZF07Yy5oaWRkZW58fGMubm9kZSYmIWMuY2hhbmdlc3x8KytifXJldHVybiBifWZ1bmN0aW9uIFZiKGEpe2EuZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKGEuZGlzcGxheS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCkpfWZ1bmN0aW9uIGdmKGEsYil7dm9pZCAwPT09XG5iJiYoYj0hMCk7dmFyIGQ9YS5kb2MsYz17fSxlPWMuY3Vyc29ycz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZj1jLnNlbGVjdGlvbj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZz1hLm9wdGlvbnMuJGN1c3RvbUN1cnNvcjtnJiYoYj0hMCk7Zm9yKHZhciBoPTA7aDxkLnNlbC5yYW5nZXMubGVuZ3RoO2grKylpZihifHxoIT1kLnNlbC5wcmltSW5kZXgpe3ZhciBrPWQuc2VsLnJhbmdlc1toXTtpZighKGsuZnJvbSgpLmxpbmU+PWEuZGlzcGxheS52aWV3VG98fGsudG8oKS5saW5lPGEuZGlzcGxheS52aWV3RnJvbSkpe3ZhciBsPWsuZW1wdHkoKTtpZihnKXt2YXIgbT1nKGEsayk7bSYmT2QoYSxtLGUpfWVsc2UobHx8YS5vcHRpb25zLnNob3dDdXJzb3JXaGVuU2VsZWN0aW5nKSYmT2QoYSxrLmhlYWQsZSk7bHx8VGcoYSxrLGYpfX1yZXR1cm4gY31mdW5jdGlvbiBPZChhLGIsZCl7dmFyIGM9QmEoYSxiLFwiZGl2XCIsbnVsbCxudWxsLCFhLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSksXG5lPWQuYXBwZW5kQ2hpbGQodihcImRpdlwiLFwiXFx1MDBhMFwiLFwiQ29kZU1pcnJvci1jdXJzb3JcIikpO2Uuc3R5bGUubGVmdD1jLmxlZnQrXCJweFwiO2Uuc3R5bGUudG9wPWMudG9wK1wicHhcIjtlLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLGMuYm90dG9tLWMudG9wKSphLm9wdGlvbnMuY3Vyc29ySGVpZ2h0K1wicHhcIjsvXFxiY20tZmF0LWN1cnNvclxcYi8udGVzdChhLmdldFdyYXBwZXJFbGVtZW50KCkuY2xhc3NOYW1lKSYmKGI9SWMoYSxiLFwiZGl2XCIsbnVsbCxudWxsKSxiPWIucmlnaHQtYi5sZWZ0LGUuc3R5bGUud2lkdGg9KDA8Yj9iOmEuZGVmYXVsdENoYXJXaWR0aCgpKStcInB4XCIpO2Mub3RoZXImJihhPWQuYXBwZW5kQ2hpbGQodihcImRpdlwiLFwiXFx1MDBhMFwiLFwiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3JcIikpLGEuc3R5bGUuZGlzcGxheT1cIlwiLGEuc3R5bGUubGVmdD1jLm90aGVyLmxlZnQrXCJweFwiLGEuc3R5bGUudG9wPWMub3RoZXIudG9wK1wicHhcIixhLnN0eWxlLmhlaWdodD1cbi44NSooYy5vdGhlci5ib3R0b20tYy5vdGhlci50b3ApK1wicHhcIil9ZnVuY3Rpb24gS2MoYSxiKXtyZXR1cm4gYS50b3AtYi50b3B8fGEubGVmdC1iLmxlZnR9ZnVuY3Rpb24gVGcoYSxiLGQpe2Z1bmN0aW9uIGMocSxyLHUsQSl7MD5yJiYocj0wKTtyPU1hdGgucm91bmQocik7QT1NYXRoLnJvdW5kKEEpO2guYXBwZW5kQ2hpbGQodihcImRpdlwiLG51bGwsXCJDb2RlTWlycm9yLXNlbGVjdGVkXCIsXCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IFwiK3ErXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogXCIrcitcInB4OyB3aWR0aDogXCIrKG51bGw9PXU/bS1xOnUpK1wicHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiKyhBLXIpK1wicHhcIikpfWZ1bmN0aW9uIGUocSxyLHUpe2Z1bmN0aW9uIEEoRixSKXtyZXR1cm4gSWMoYSx0KHEsRiksXCJkaXZcIix4LFIpfWZ1bmN0aW9uIFkoRixSLEgpe0Y9ZGYoYSx4LG51bGwsRik7Uj1cImx0clwiPT1SPT0oXCJhZnRlclwiPT1cbkgpP1wibGVmdFwiOlwicmlnaHRcIjtIPVwiYWZ0ZXJcIj09SD9GLmJlZ2luOkYuZW5kLSgvXFxzLy50ZXN0KHgudGV4dC5jaGFyQXQoRi5lbmQtMSkpPzI6MSk7cmV0dXJuIEEoSCxSKVtSXX12YXIgeD13KGcscSksUD14LnRleHQubGVuZ3RoLEssUSxTPUphKHgsZy5kaXJlY3Rpb24pO0JnKFMscnx8MCxudWxsPT11P1A6dSxmdW5jdGlvbihGLFIsSCxMKXt2YXIgaGE9XCJsdHJcIj09SCxuYT1BKEYsaGE/XCJsZWZ0XCI6XCJyaWdodFwiKSx1YT1BKFItMSxoYT9cInJpZ2h0XCI6XCJsZWZ0XCIpLGhiPW51bGw9PXImJjA9PUYsaWI9bnVsbD09dSYmUj09UCxQZD0wPT1MO0w9IVN8fEw9PVMubGVuZ3RoLTE7Mz49dWEudG9wLW5hLnRvcD8oUj0obj9oYjppYikmJlBkP2w6KGhhP25hOnVhKS5sZWZ0LGMoUixuYS50b3AsKChuP2liOmhiKSYmTD9tOihoYT91YTpuYSkucmlnaHQpLVIsbmEuYm90dG9tKSk6KGhhPyhoYT1uJiZoYiYmUGQ/bDpuYS5sZWZ0LGhiPW4/bTpZKEYsSCxcImJlZm9yZVwiKSxGPW4/bDpZKFIsSCxcblwiYWZ0ZXJcIiksaWI9biYmaWImJkw/bTp1YS5yaWdodCk6KGhhPW4/WShGLEgsXCJiZWZvcmVcIik6bCxoYj0hbiYmaGImJlBkP206bmEucmlnaHQsRj0hbiYmaWImJkw/bDp1YS5sZWZ0LGliPW4/WShSLEgsXCJhZnRlclwiKTptKSxjKGhhLG5hLnRvcCxoYi1oYSxuYS5ib3R0b20pLG5hLmJvdHRvbTx1YS50b3AmJmMobCxuYS5ib3R0b20sbnVsbCx1YS50b3ApLGMoRix1YS50b3AsaWItRix1YS5ib3R0b20pKTtpZighS3x8MD5LYyhuYSxLKSlLPW5hOzA+S2ModWEsSykmJihLPXVhKTtpZighUXx8MD5LYyhuYSxRKSlRPW5hOzA+S2ModWEsUSkmJihRPXVhKX0pO3JldHVybntzdGFydDpLLGVuZDpRfX12YXIgZj1hLmRpc3BsYXksZz1hLmRvYyxoPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxrPVRlKGEuZGlzcGxheSksbD1rLmxlZnQsbT1NYXRoLm1heChmLnNpemVyV2lkdGgsY2IoYSktZi5zaXplci5vZmZzZXRMZWZ0KS1rLnJpZ2h0LG49XCJsdHJcIj09Zy5kaXJlY3Rpb247XG5mPWIuZnJvbSgpO2I9Yi50bygpO2lmKGYubGluZT09Yi5saW5lKWUoZi5saW5lLGYuY2gsYi5jaCk7ZWxzZXt2YXIgcD13KGcsZi5saW5lKTtrPXcoZyxiLmxpbmUpO2s9emEocCk9PXphKGspO2Y9ZShmLmxpbmUsZi5jaCxrP3AudGV4dC5sZW5ndGgrMTpudWxsKS5lbmQ7Yj1lKGIubGluZSxrPzA6bnVsbCxiLmNoKS5zdGFydDtrJiYoZi50b3A8Yi50b3AtMj8oYyhmLnJpZ2h0LGYudG9wLG51bGwsZi5ib3R0b20pLGMobCxiLnRvcCxiLmxlZnQsYi5ib3R0b20pKTpjKGYucmlnaHQsZi50b3AsYi5sZWZ0LWYucmlnaHQsZi5ib3R0b20pKTtmLmJvdHRvbTxiLnRvcCYmYyhsLGYuYm90dG9tLG51bGwsYi50b3ApfWQuYXBwZW5kQ2hpbGQoaCl9ZnVuY3Rpb24gUWQoYSl7aWYoYS5zdGF0ZS5mb2N1c2VkKXt2YXIgYj1hLmRpc3BsYXk7Y2xlYXJJbnRlcnZhbChiLmJsaW5rZXIpO3ZhciBkPSEwO2IuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHk9XCJcIjswPGEub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU/XG5iLmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXthLmhhc0ZvY3VzKCl8fHdiKGEpO2IuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHk9KGQ9IWQpP1wiXCI6XCJoaWRkZW5cIn0sYS5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSk6MD5hLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlJiYoYi5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiKX19ZnVuY3Rpb24gaGYoYSl7YS5oYXNGb2N1cygpfHwoYS5kaXNwbGF5LmlucHV0LmZvY3VzKCksYS5zdGF0ZS5mb2N1c2VkfHxSZChhKSl9ZnVuY3Rpb24gU2QoYSl7YS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudD0hMDtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCYmKGEuc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQ9ITEsYS5zdGF0ZS5mb2N1c2VkJiZ3YihhKSl9LDEwMCl9ZnVuY3Rpb24gUmQoYSxiKXthLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50JiYhYS5zdGF0ZS5kcmFnZ2luZ1RleHQmJihhLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50PVxuITEpO1wibm9jdXJzb3JcIiE9YS5vcHRpb25zLnJlYWRPbmx5JiYoYS5zdGF0ZS5mb2N1c2VkfHwoVyhhLFwiZm9jdXNcIixhLGIpLGEuc3RhdGUuZm9jdXNlZD0hMCxZYShhLmRpc3BsYXkud3JhcHBlcixcIkNvZGVNaXJyb3ItZm9jdXNlZFwiKSxhLmN1ck9wfHxhLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnU9PWEuZG9jLnNlbHx8KGEuZGlzcGxheS5pbnB1dC5yZXNldCgpLGZhJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGEuZGlzcGxheS5pbnB1dC5yZXNldCghMCl9LDIwKSksYS5kaXNwbGF5LmlucHV0LnJlY2VpdmVkRm9jdXMoKSksUWQoYSkpfWZ1bmN0aW9uIHdiKGEsYil7YS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudHx8KGEuc3RhdGUuZm9jdXNlZCYmKFcoYSxcImJsdXJcIixhLGIpLGEuc3RhdGUuZm9jdXNlZD0hMSxqYihhLmRpc3BsYXkud3JhcHBlcixcIkNvZGVNaXJyb3ItZm9jdXNlZFwiKSksY2xlYXJJbnRlcnZhbChhLmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe2Euc3RhdGUuZm9jdXNlZHx8XG4oYS5kaXNwbGF5LnNoaWZ0PSExKX0sMTUwKSl9ZnVuY3Rpb24gTGMoYSl7Zm9yKHZhciBiPWEuZGlzcGxheSxkPWIubGluZURpdi5vZmZzZXRUb3AsYz1NYXRoLm1heCgwLGIuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSxlPWIubGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsZj0wLGc9MDtnPGIudmlldy5sZW5ndGg7ZysrKXt2YXIgaD1iLnZpZXdbZ10saz1hLm9wdGlvbnMubGluZVdyYXBwaW5nLGw9MDtpZighaC5oaWRkZW4pe2UrPWgubGluZS5oZWlnaHQ7aWYoRyYmOD5UKXtrPWgubm9kZS5vZmZzZXRUb3AraC5ub2RlLm9mZnNldEhlaWdodDt2YXIgbT1rLWQ7ZD1rfWVsc2V7dmFyIG49aC5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO209bi5ib3R0b20tbi50b3A7IWsmJmgudGV4dC5maXJzdENoaWxkJiYobD1oLnRleHQuZmlyc3RDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodC1uLmxlZnQtMSl9az1oLmxpbmUuaGVpZ2h0LVxubTtpZiguMDA1PGt8fC0uMDA1PmspaWYoZTxjJiYoZi09ayksRWEoaC5saW5lLG0pLGpmKGgubGluZSksaC5yZXN0KWZvcihtPTA7bTxoLnJlc3QubGVuZ3RoO20rKylqZihoLnJlc3RbbV0pO2w+YS5kaXNwbGF5LnNpemVyV2lkdGgmJihsPU1hdGguY2VpbChsL3ViKGEuZGlzcGxheSkpLGw+YS5kaXNwbGF5Lm1heExpbmVMZW5ndGgmJihhLmRpc3BsYXkubWF4TGluZUxlbmd0aD1sLGEuZGlzcGxheS5tYXhMaW5lPWgubGluZSxhLmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApKX19MjxNYXRoLmFicyhmKSYmKGIuc2Nyb2xsZXIuc2Nyb2xsVG9wKz1mKX1mdW5jdGlvbiBqZihhKXtpZihhLndpZGdldHMpZm9yKHZhciBiPTA7YjxhLndpZGdldHMubGVuZ3RoOysrYil7dmFyIGQ9YS53aWRnZXRzW2JdLGM9ZC5ub2RlLnBhcmVudE5vZGU7YyYmKGQuaGVpZ2h0PWMub2Zmc2V0SGVpZ2h0KX19ZnVuY3Rpb24gTWMoYSxiLGQpe3ZhciBjPWQmJm51bGwhPWQudG9wP01hdGgubWF4KDAsZC50b3ApOlxuYS5zY3JvbGxlci5zY3JvbGxUb3A7Yz1NYXRoLmZsb29yKGMtYS5saW5lU3BhY2Uub2Zmc2V0VG9wKTt2YXIgZT1kJiZudWxsIT1kLmJvdHRvbT9kLmJvdHRvbTpjK2Eud3JhcHBlci5jbGllbnRIZWlnaHQ7Yz1iYihiLGMpO2U9YmIoYixlKTtpZihkJiZkLmVuc3VyZSl7dmFyIGY9ZC5lbnN1cmUuZnJvbS5saW5lO2Q9ZC5lbnN1cmUudG8ubGluZTtmPGM/KGM9ZixlPWJiKGIsR2EodyhiLGYpKSthLndyYXBwZXIuY2xpZW50SGVpZ2h0KSk6TWF0aC5taW4oZCxiLmxhc3RMaW5lKCkpPj1lJiYoYz1iYihiLEdhKHcoYixkKSktYS53cmFwcGVyLmNsaWVudEhlaWdodCksZT1kKX1yZXR1cm57ZnJvbTpjLHRvOk1hdGgubWF4KGUsYysxKX19ZnVuY3Rpb24gVGQoYSxiKXt2YXIgZD1hLmRpc3BsYXksYz12YihhLmRpc3BsYXkpOzA+Yi50b3AmJihiLnRvcD0wKTt2YXIgZT1hLmN1ck9wJiZudWxsIT1hLmN1ck9wLnNjcm9sbFRvcD9hLmN1ck9wLnNjcm9sbFRvcDpkLnNjcm9sbGVyLnNjcm9sbFRvcCxcbmY9RWQoYSksZz17fTtiLmJvdHRvbS1iLnRvcD5mJiYoYi5ib3R0b209Yi50b3ArZik7dmFyIGg9YS5kb2MuaGVpZ2h0K0RkKGQpLGs9Yi50b3A8YztjPWIuYm90dG9tPmgtYztiLnRvcDxlP2cuc2Nyb2xsVG9wPWs/MDpiLnRvcDpiLmJvdHRvbT5lK2YmJihmPU1hdGgubWluKGIudG9wLChjP2g6Yi5ib3R0b20pLWYpLGYhPWUmJihnLnNjcm9sbFRvcD1mKSk7ZT1hLm9wdGlvbnMuZml4ZWRHdXR0ZXI/MDpkLmd1dHRlcnMub2Zmc2V0V2lkdGg7Zj1hLmN1ck9wJiZudWxsIT1hLmN1ck9wLnNjcm9sbExlZnQ/YS5jdXJPcC5zY3JvbGxMZWZ0OmQuc2Nyb2xsZXIuc2Nyb2xsTGVmdC1lO2E9Y2IoYSktZC5ndXR0ZXJzLm9mZnNldFdpZHRoO2lmKGQ9Yi5yaWdodC1iLmxlZnQ+YSliLnJpZ2h0PWIubGVmdCthOzEwPmIubGVmdD9nLnNjcm9sbExlZnQ9MDpiLmxlZnQ8Zj9nLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxiLmxlZnQrZS0oZD8wOjEwKSk6Yi5yaWdodD5hK2YtMyYmKGcuc2Nyb2xsTGVmdD1cbmIucmlnaHQrKGQ/MDoxMCktYSk7cmV0dXJuIGd9ZnVuY3Rpb24gTmMoYSxiKXtudWxsIT1iJiYoT2MoYSksYS5jdXJPcC5zY3JvbGxUb3A9KG51bGw9PWEuY3VyT3Auc2Nyb2xsVG9wP2EuZG9jLnNjcm9sbFRvcDphLmN1ck9wLnNjcm9sbFRvcCkrYil9ZnVuY3Rpb24geGIoYSl7T2MoYSk7dmFyIGI9YS5nZXRDdXJzb3IoKTthLmN1ck9wLnNjcm9sbFRvUG9zPXtmcm9tOmIsdG86YixtYXJnaW46YS5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbn19ZnVuY3Rpb24gV2IoYSxiLGQpe251bGw9PWImJm51bGw9PWR8fE9jKGEpO251bGwhPWImJihhLmN1ck9wLnNjcm9sbExlZnQ9Yik7bnVsbCE9ZCYmKGEuY3VyT3Auc2Nyb2xsVG9wPWQpfWZ1bmN0aW9uIE9jKGEpe3ZhciBiPWEuY3VyT3Auc2Nyb2xsVG9Qb3M7aWYoYil7YS5jdXJPcC5zY3JvbGxUb1Bvcz1udWxsO3ZhciBkPWJmKGEsYi5mcm9tKSxjPWJmKGEsYi50byk7a2YoYSxkLGMsYi5tYXJnaW4pfX1mdW5jdGlvbiBrZihhLGIsZCxcbmMpe2I9VGQoYSx7bGVmdDpNYXRoLm1pbihiLmxlZnQsZC5sZWZ0KSx0b3A6TWF0aC5taW4oYi50b3AsZC50b3ApLWMscmlnaHQ6TWF0aC5tYXgoYi5yaWdodCxkLnJpZ2h0KSxib3R0b206TWF0aC5tYXgoYi5ib3R0b20sZC5ib3R0b20pK2N9KTtXYihhLGIuc2Nyb2xsTGVmdCxiLnNjcm9sbFRvcCl9ZnVuY3Rpb24gWGIoYSxiKXsyPk1hdGguYWJzKGEuZG9jLnNjcm9sbFRvcC1iKXx8KE1hfHxVZChhLHt0b3A6Yn0pLGxmKGEsYiwhMCksTWEmJlVkKGEpLFliKGEsMTAwKSl9ZnVuY3Rpb24gbGYoYSxiLGQpe2I9TWF0aC5tYXgoMCxNYXRoLm1pbihhLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LWEuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsYikpO2lmKGEuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AhPWJ8fGQpYS5kb2Muc2Nyb2xsVG9wPWIsYS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGIpLGEuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AhPVxuYiYmKGEuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A9Yil9ZnVuY3Rpb24ga2IoYSxiLGQsYyl7Yj1NYXRoLm1heCgwLE1hdGgubWluKGIsYS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoLWEuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCkpOyhkP2I9PWEuZG9jLnNjcm9sbExlZnQ6Mj5NYXRoLmFicyhhLmRvYy5zY3JvbGxMZWZ0LWIpKSYmIWN8fChhLmRvYy5zY3JvbGxMZWZ0PWIsbWYoYSksYS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPWImJihhLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1iKSxhLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KGIpKX1mdW5jdGlvbiBaYihhKXt2YXIgYj1hLmRpc3BsYXksZD1iLmd1dHRlcnMub2Zmc2V0V2lkdGgsYz1NYXRoLnJvdW5kKGEuZG9jLmhlaWdodCtEZChhLmRpc3BsYXkpKTtyZXR1cm57Y2xpZW50SGVpZ2h0OmIuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LHZpZXdIZWlnaHQ6Yi53cmFwcGVyLmNsaWVudEhlaWdodCxcbnNjcm9sbFdpZHRoOmIuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6Yi5zY3JvbGxlci5jbGllbnRXaWR0aCx2aWV3V2lkdGg6Yi53cmFwcGVyLmNsaWVudFdpZHRoLGJhckxlZnQ6YS5vcHRpb25zLmZpeGVkR3V0dGVyP2Q6MCxkb2NIZWlnaHQ6YyxzY3JvbGxIZWlnaHQ6YytIYShhKStiLmJhckhlaWdodCxuYXRpdmVCYXJXaWR0aDpiLm5hdGl2ZUJhcldpZHRoLGd1dHRlcldpZHRoOmR9fWZ1bmN0aW9uIHliKGEsYil7Ynx8KGI9WmIoYSkpO3ZhciBkPWEuZGlzcGxheS5iYXJXaWR0aCxjPWEuZGlzcGxheS5iYXJIZWlnaHQ7bmYoYSxiKTtmb3IoYj0wOzQ+YiYmZCE9YS5kaXNwbGF5LmJhcldpZHRofHxjIT1hLmRpc3BsYXkuYmFySGVpZ2h0O2IrKylkIT1hLmRpc3BsYXkuYmFyV2lkdGgmJmEub3B0aW9ucy5saW5lV3JhcHBpbmcmJkxjKGEpLG5mKGEsWmIoYSkpLGQ9YS5kaXNwbGF5LmJhcldpZHRoLGM9YS5kaXNwbGF5LmJhckhlaWdodH1mdW5jdGlvbiBuZihhLGIpe3ZhciBkPVxuYS5kaXNwbGF5LGM9ZC5zY3JvbGxiYXJzLnVwZGF0ZShiKTtkLnNpemVyLnN0eWxlLnBhZGRpbmdSaWdodD0oZC5iYXJXaWR0aD1jLnJpZ2h0KStcInB4XCI7ZC5zaXplci5zdHlsZS5wYWRkaW5nQm90dG9tPShkLmJhckhlaWdodD1jLmJvdHRvbSkrXCJweFwiO2QuaGVpZ2h0Rm9yY2VyLnN0eWxlLmJvcmRlckJvdHRvbT1jLmJvdHRvbStcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7Yy5yaWdodCYmYy5ib3R0b20/KGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiLGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmhlaWdodD1jLmJvdHRvbStcInB4XCIsZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGg9Yy5yaWdodCtcInB4XCIpOmQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9XCJcIjtjLmJvdHRvbSYmYS5vcHRpb25zLmNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyJiZhLm9wdGlvbnMuZml4ZWRHdXR0ZXI/KGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiLFxuZC5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWMuYm90dG9tK1wicHhcIixkLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aD1iLmd1dHRlcldpZHRoK1wicHhcIik6ZC5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT1cIlwifWZ1bmN0aW9uIG9mKGEpe2EuZGlzcGxheS5zY3JvbGxiYXJzJiYoYS5kaXNwbGF5LnNjcm9sbGJhcnMuY2xlYXIoKSxhLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyYmamIoYS5kaXNwbGF5LndyYXBwZXIsYS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpKTthLmRpc3BsYXkuc2Nyb2xsYmFycz1uZXcgcGZbYS5vcHRpb25zLnNjcm9sbGJhclN0eWxlXShmdW5jdGlvbihiKXthLmRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUoYixhLmRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyKTt6KGIsXCJtb3VzZWRvd25cIixmdW5jdGlvbigpe2Euc3RhdGUuZm9jdXNlZCYmc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBhLmRpc3BsYXkuaW5wdXQuZm9jdXMoKX0sMCl9KTtcbmIuc2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIixcInRydWVcIil9LGZ1bmN0aW9uKGIsZCl7XCJob3Jpem9udGFsXCI9PWQ/a2IoYSxiKTpYYihhLGIpfSxhKTthLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyYmWWEoYS5kaXNwbGF5LndyYXBwZXIsYS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpfWZ1bmN0aW9uIGxiKGEpe2EuY3VyT3A9e2NtOmEsdmlld0NoYW5nZWQ6ITEsc3RhcnRIZWlnaHQ6YS5kb2MuaGVpZ2h0LGZvcmNlVXBkYXRlOiExLHVwZGF0ZUlucHV0OjAsdHlwaW5nOiExLGNoYW5nZU9ianM6bnVsbCxjdXJzb3JBY3Rpdml0eUhhbmRsZXJzOm51bGwsY3Vyc29yQWN0aXZpdHlDYWxsZWQ6MCxzZWxlY3Rpb25DaGFuZ2VkOiExLHVwZGF0ZU1heExpbmU6ITEsc2Nyb2xsTGVmdDpudWxsLHNjcm9sbFRvcDpudWxsLHNjcm9sbFRvUG9zOm51bGwsZm9jdXM6ITEsaWQ6KytVZyxtYXJrQXJyYXlzOm51bGx9O2E9YS5jdXJPcDt0Yj90Yi5vcHMucHVzaChhKTphLm93bnNHcm91cD1cbnRiPXtvcHM6W2FdLGRlbGF5ZWRDYWxsYmFja3M6W119fWZ1bmN0aW9uIG1iKGEpeyhhPWEuY3VyT3ApJiZOZyhhLGZ1bmN0aW9uKGIpe2Zvcih2YXIgZD0wO2Q8Yi5vcHMubGVuZ3RoO2QrKyliLm9wc1tkXS5jbS5jdXJPcD1udWxsO2I9Yi5vcHM7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGM9YltkXSxlPWMuY20sZj1lLmRpc3BsYXksZz1lLmRpc3BsYXk7IWcuc2Nyb2xsYmFyc0NsaXBwZWQmJmcuc2Nyb2xsZXIub2Zmc2V0V2lkdGgmJihnLm5hdGl2ZUJhcldpZHRoPWcuc2Nyb2xsZXIub2Zmc2V0V2lkdGgtZy5zY3JvbGxlci5jbGllbnRXaWR0aCxnLmhlaWdodEZvcmNlci5zdHlsZS5oZWlnaHQ9SGEoZSkrXCJweFwiLGcuc2l6ZXIuc3R5bGUubWFyZ2luQm90dG9tPS1nLm5hdGl2ZUJhcldpZHRoK1wicHhcIixnLnNpemVyLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9SGEoZSkrXCJweFwiLGcuc2Nyb2xsYmFyc0NsaXBwZWQ9ITApO2MudXBkYXRlTWF4TGluZSYmemQoZSk7Yy5tdXN0VXBkYXRlPVxuYy52aWV3Q2hhbmdlZHx8Yy5mb3JjZVVwZGF0ZXx8bnVsbCE9Yy5zY3JvbGxUb3B8fGMuc2Nyb2xsVG9Qb3MmJihjLnNjcm9sbFRvUG9zLmZyb20ubGluZTxmLnZpZXdGcm9tfHxjLnNjcm9sbFRvUG9zLnRvLmxpbmU+PWYudmlld1RvKXx8Zi5tYXhMaW5lQ2hhbmdlZCYmZS5vcHRpb25zLmxpbmVXcmFwcGluZztjLnVwZGF0ZT1jLm11c3RVcGRhdGUmJm5ldyBQYyhlLGMubXVzdFVwZGF0ZSYme3RvcDpjLnNjcm9sbFRvcCxlbnN1cmU6Yy5zY3JvbGxUb1Bvc30sYy5mb3JjZVVwZGF0ZSl9Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrKyljPWJbZF0sYy51cGRhdGVkRGlzcGxheT1jLm11c3RVcGRhdGUmJlZkKGMuY20sYy51cGRhdGUpO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspaWYoYz1iW2RdLGU9Yy5jbSxmPWUuZGlzcGxheSxjLnVwZGF0ZWREaXNwbGF5JiZMYyhlKSxjLmJhck1lYXN1cmU9WmIoZSksZi5tYXhMaW5lQ2hhbmdlZCYmIWUub3B0aW9ucy5saW5lV3JhcHBpbmcmJihnPWYubWF4TGluZS50ZXh0Lmxlbmd0aCxcbmc9QWEoZSxlYihlLGYubWF4TGluZSksZyx2b2lkIDApLGMuYWRqdXN0V2lkdGhUbz1nLmxlZnQrMyxlLmRpc3BsYXkuc2l6ZXJXaWR0aD1jLmFkanVzdFdpZHRoVG8sYy5iYXJNZWFzdXJlLnNjcm9sbFdpZHRoPU1hdGgubWF4KGYuc2Nyb2xsZXIuY2xpZW50V2lkdGgsZi5zaXplci5vZmZzZXRMZWZ0K2MuYWRqdXN0V2lkdGhUbytIYShlKStlLmRpc3BsYXkuYmFyV2lkdGgpLGMubWF4U2Nyb2xsTGVmdD1NYXRoLm1heCgwLGYuc2l6ZXIub2Zmc2V0TGVmdCtjLmFkanVzdFdpZHRoVG8tY2IoZSkpKSxjLnVwZGF0ZWREaXNwbGF5fHxjLnNlbGVjdGlvbkNoYW5nZWQpYy5wcmVwYXJlZFNlbGVjdGlvbj1mLmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKTtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKWM9YltkXSxlPWMuY20sbnVsbCE9Yy5hZGp1c3RXaWR0aFRvJiYoZS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPWMuYWRqdXN0V2lkdGhUbytcInB4XCIsYy5tYXhTY3JvbGxMZWZ0PGUuZG9jLnNjcm9sbExlZnQmJlxua2IoZSxNYXRoLm1pbihlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCxjLm1heFNjcm9sbExlZnQpLCEwKSxlLmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITEpLGY9Yy5mb2N1cyYmYy5mb2N1cz09a2EocWEoZSkpLGMucHJlcGFyZWRTZWxlY3Rpb24mJmUuZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKGMucHJlcGFyZWRTZWxlY3Rpb24sZiksKGMudXBkYXRlZERpc3BsYXl8fGMuc3RhcnRIZWlnaHQhPWUuZG9jLmhlaWdodCkmJnliKGUsYy5iYXJNZWFzdXJlKSxjLnVwZGF0ZWREaXNwbGF5JiZXZChlLGMuYmFyTWVhc3VyZSksYy5zZWxlY3Rpb25DaGFuZ2VkJiZRZChlKSxlLnN0YXRlLmZvY3VzZWQmJmMudXBkYXRlSW5wdXQmJmUuZGlzcGxheS5pbnB1dC5yZXNldChjLnR5cGluZyksZiYmaGYoYy5jbSk7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGg9dm9pZCAwO2M9YltkXTtlPWMuY207Zj1lLmRpc3BsYXk7Zz1lLmRvYztjLnVwZGF0ZWREaXNwbGF5JiZxZihlLGMudXBkYXRlKTtcbm51bGw9PWYud2hlZWxTdGFydFh8fG51bGw9PWMuc2Nyb2xsVG9wJiZudWxsPT1jLnNjcm9sbExlZnQmJiFjLnNjcm9sbFRvUG9zfHwoZi53aGVlbFN0YXJ0WD1mLndoZWVsU3RhcnRZPW51bGwpO251bGwhPWMuc2Nyb2xsVG9wJiZsZihlLGMuc2Nyb2xsVG9wLGMuZm9yY2VTY3JvbGwpO251bGwhPWMuc2Nyb2xsTGVmdCYma2IoZSxjLnNjcm9sbExlZnQsITAsITApO2lmKGMuc2Nyb2xsVG9Qb3Mpe3ZhciBrPUMoZyxjLnNjcm9sbFRvUG9zLmZyb20pO3ZhciBsPUMoZyxjLnNjcm9sbFRvUG9zLnRvKTt2YXIgbT1jLnNjcm9sbFRvUG9zLm1hcmdpbjtudWxsPT1tJiYobT0wKTtlLm9wdGlvbnMubGluZVdyYXBwaW5nfHxrIT1sfHwobD1cImJlZm9yZVwiPT1rLnN0aWNreT90KGsubGluZSxrLmNoKzEsXCJiZWZvcmVcIik6ayxrPWsuY2g/dChrLmxpbmUsXCJiZWZvcmVcIj09ay5zdGlja3k/ay5jaC0xOmsuY2gsXCJhZnRlclwiKTprKTtmb3IodmFyIG49MDs1Pm47bisrKXt2YXIgcD0hMTtoPUJhKGUsXG5rKTt2YXIgcT1sJiZsIT1rP0JhKGUsbCk6aDtoPXtsZWZ0Ok1hdGgubWluKGgubGVmdCxxLmxlZnQpLHRvcDpNYXRoLm1pbihoLnRvcCxxLnRvcCktbSxyaWdodDpNYXRoLm1heChoLmxlZnQscS5sZWZ0KSxib3R0b206TWF0aC5tYXgoaC5ib3R0b20scS5ib3R0b20pK219O3E9VGQoZSxoKTt2YXIgcj1lLmRvYy5zY3JvbGxUb3AsdT1lLmRvYy5zY3JvbGxMZWZ0O251bGwhPXEuc2Nyb2xsVG9wJiYoWGIoZSxxLnNjcm9sbFRvcCksMTxNYXRoLmFicyhlLmRvYy5zY3JvbGxUb3AtcikmJihwPSEwKSk7bnVsbCE9cS5zY3JvbGxMZWZ0JiYoa2IoZSxxLnNjcm9sbExlZnQpLDE8TWF0aC5hYnMoZS5kb2Muc2Nyb2xsTGVmdC11KSYmKHA9ITApKTtpZighcClicmVha31sPWg7WihlLFwic2Nyb2xsQ3Vyc29ySW50b1ZpZXdcIil8fChtPWUuZGlzcGxheSxuPW0uc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaz1udWxsLHA9bS53cmFwcGVyLm93bmVyRG9jdW1lbnQsMD5sLnRvcCtuLnRvcD9cbms9ITA6bC5ib3R0b20rbi50b3A+KHAuZGVmYXVsdFZpZXcuaW5uZXJIZWlnaHR8fHAuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkmJihrPSExKSxudWxsPT1rfHxWZ3x8KGw9dihcImRpdlwiLFwiXFx1MjAwYlwiLG51bGwsXCJwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogXCIrKGwudG9wLW0udmlld09mZnNldC1lLmRpc3BsYXkubGluZVNwYWNlLm9mZnNldFRvcCkrXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIisobC5ib3R0b20tbC50b3ArSGEoZSkrbS5iYXJIZWlnaHQpK1wicHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IFwiK2wubGVmdCtcInB4OyB3aWR0aDogXCIrTWF0aC5tYXgoMixsLnJpZ2h0LWwubGVmdCkrXCJweDtcIiksZS5kaXNwbGF5LmxpbmVTcGFjZS5hcHBlbmRDaGlsZChsKSxsLnNjcm9sbEludG9WaWV3KGspLGUuZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQobCkpKX1sPWMubWF5YmVIaWRkZW5NYXJrZXJzO1xuaz1jLm1heWJlVW5oaWRkZW5NYXJrZXJzO2lmKGwpZm9yKG09MDttPGwubGVuZ3RoOysrbSlsW21dLmxpbmVzLmxlbmd0aHx8VyhsW21dLFwiaGlkZVwiKTtpZihrKWZvcihsPTA7bDxrLmxlbmd0aDsrK2wpa1tsXS5saW5lcy5sZW5ndGgmJlcoa1tsXSxcInVuaGlkZVwiKTtmLndyYXBwZXIub2Zmc2V0SGVpZ2h0JiYoZy5zY3JvbGxUb3A9ZS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCk7Yy5jaGFuZ2VPYmpzJiZXKGUsXCJjaGFuZ2VzXCIsZSxjLmNoYW5nZU9ianMpO2MudXBkYXRlJiZjLnVwZGF0ZS5maW5pc2goKX19KX1mdW5jdGlvbiByYShhLGIpe2lmKGEuY3VyT3ApcmV0dXJuIGIoKTtsYihhKTt0cnl7cmV0dXJuIGIoKX1maW5hbGx5e21iKGEpfX1mdW5jdGlvbiBiYShhLGIpe3JldHVybiBmdW5jdGlvbigpe2lmKGEuY3VyT3ApcmV0dXJuIGIuYXBwbHkoYSxhcmd1bWVudHMpO2xiKGEpO3RyeXtyZXR1cm4gYi5hcHBseShhLGFyZ3VtZW50cyl9ZmluYWxseXttYihhKX19fWZ1bmN0aW9uIGlhKGEpe3JldHVybiBmdW5jdGlvbigpe2lmKHRoaXMuY3VyT3ApcmV0dXJuIGEuYXBwbHkodGhpcyxcbmFyZ3VtZW50cyk7bGIodGhpcyk7dHJ5e3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e21iKHRoaXMpfX19ZnVuY3Rpb24gY2EoYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5jbTtpZighYnx8Yi5jdXJPcClyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bGIoYik7dHJ5e3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e21iKGIpfX19ZnVuY3Rpb24gWWIoYSxiKXthLmRvYy5oaWdobGlnaHRGcm9udGllcjxhLmRpc3BsYXkudmlld1RvJiZhLnN0YXRlLmhpZ2hsaWdodC5zZXQoYixnZChXZyxhKSl9ZnVuY3Rpb24gV2coYSl7dmFyIGI9YS5kb2M7aWYoIShiLmhpZ2hsaWdodEZyb250aWVyPj1hLmRpc3BsYXkudmlld1RvKSl7dmFyIGQ9K25ldyBEYXRlK2Eub3B0aW9ucy53b3JrVGltZSxjPU9iKGEsYi5oaWdobGlnaHRGcm9udGllciksZT1bXTtiLml0ZXIoYy5saW5lLE1hdGgubWluKGIuZmlyc3QrYi5zaXplLGEuZGlzcGxheS52aWV3VG8rXG41MDApLGZ1bmN0aW9uKGYpe2lmKGMubGluZT49YS5kaXNwbGF5LnZpZXdGcm9tKXt2YXIgZz1mLnN0eWxlcyxoPWYudGV4dC5sZW5ndGg+YS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aD8kYShiLm1vZGUsYy5zdGF0ZSk6bnVsbCxrPXllKGEsZixjLCEwKTtoJiYoYy5zdGF0ZT1oKTtmLnN0eWxlcz1rLnN0eWxlcztoPWYuc3R5bGVDbGFzc2VzOyhrPWsuY2xhc3Nlcyk/Zi5zdHlsZUNsYXNzZXM9azpoJiYoZi5zdHlsZUNsYXNzZXM9bnVsbCk7az0hZ3x8Zy5sZW5ndGghPWYuc3R5bGVzLmxlbmd0aHx8aCE9ayYmKCFofHwha3x8aC5iZ0NsYXNzIT1rLmJnQ2xhc3N8fGgudGV4dENsYXNzIT1rLnRleHRDbGFzcyk7Zm9yKGg9MDshayYmaDxnLmxlbmd0aDsrK2gpaz1nW2hdIT1mLnN0eWxlc1toXTtrJiZlLnB1c2goYy5saW5lKTtmLnN0YXRlQWZ0ZXI9Yy5zYXZlKCl9ZWxzZSBmLnRleHQubGVuZ3RoPD1hLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoJiZ0ZChhLGYudGV4dCxjKSxcbmYuc3RhdGVBZnRlcj0wPT1jLmxpbmUlNT9jLnNhdmUoKTpudWxsO2MubmV4dExpbmUoKTtpZigrbmV3IERhdGU+ZClyZXR1cm4gWWIoYSxhLm9wdGlvbnMud29ya0RlbGF5KSwhMH0pO2IuaGlnaGxpZ2h0RnJvbnRpZXI9Yy5saW5lO2IubW9kZUZyb250aWVyPU1hdGgubWF4KGIubW9kZUZyb250aWVyLGMubGluZSk7ZS5sZW5ndGgmJnJhKGEsZnVuY3Rpb24oKXtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKylTYShhLGVbZl0sXCJ0ZXh0XCIpfSl9fWZ1bmN0aW9uIFZkKGEsYil7dmFyIGQ9YS5kaXNwbGF5LGM9YS5kb2M7aWYoYi5lZGl0b3JJc0hpZGRlbilyZXR1cm4gUmEoYSksITE7aWYoIWIuZm9yY2UmJmIudmlzaWJsZS5mcm9tPj1kLnZpZXdGcm9tJiZiLnZpc2libGUudG88PWQudmlld1RvJiYobnVsbD09ZC51cGRhdGVMaW5lTnVtYmVyc3x8ZC51cGRhdGVMaW5lTnVtYmVycz49ZC52aWV3VG8pJiZkLnJlbmRlcmVkVmlldz09ZC52aWV3JiYwPT1mZihhKSlyZXR1cm4hMTtyZihhKSYmXG4oUmEoYSksYi5kaW1zPUdkKGEpKTt2YXIgZT1jLmZpcnN0K2Muc2l6ZSxmPU1hdGgubWF4KGIudmlzaWJsZS5mcm9tLWEub3B0aW9ucy52aWV3cG9ydE1hcmdpbixjLmZpcnN0KSxnPU1hdGgubWluKGUsYi52aXNpYmxlLnRvK2Eub3B0aW9ucy52aWV3cG9ydE1hcmdpbik7ZC52aWV3RnJvbTxmJiYyMD5mLWQudmlld0Zyb20mJihmPU1hdGgubWF4KGMuZmlyc3QsZC52aWV3RnJvbSkpO2Qudmlld1RvPmcmJjIwPmQudmlld1RvLWcmJihnPU1hdGgubWluKGUsZC52aWV3VG8pKTtLYSYmKGY9eGQoYS5kb2MsZiksZz1KZShhLmRvYyxnKSk7Yz1mIT1kLnZpZXdGcm9tfHxnIT1kLnZpZXdUb3x8ZC5sYXN0V3JhcEhlaWdodCE9Yi53cmFwcGVySGVpZ2h0fHxkLmxhc3RXcmFwV2lkdGghPWIud3JhcHBlcldpZHRoO2U9YS5kaXNwbGF5OzA9PWUudmlldy5sZW5ndGh8fGY+PWUudmlld1RvfHxnPD1lLnZpZXdGcm9tPyhlLnZpZXc9RmMoYSxmLGcpLGUudmlld0Zyb209Zik6KGUudmlld0Zyb20+XG5mP2Uudmlldz1GYyhhLGYsZS52aWV3RnJvbSkuY29uY2F0KGUudmlldyk6ZS52aWV3RnJvbTxmJiYoZS52aWV3PWUudmlldy5zbGljZShkYihhLGYpKSksZS52aWV3RnJvbT1mLGUudmlld1RvPGc/ZS52aWV3PWUudmlldy5jb25jYXQoRmMoYSxlLnZpZXdUbyxnKSk6ZS52aWV3VG8+ZyYmKGUudmlldz1lLnZpZXcuc2xpY2UoMCxkYihhLGcpKSkpO2Uudmlld1RvPWc7ZC52aWV3T2Zmc2V0PUdhKHcoYS5kb2MsZC52aWV3RnJvbSkpO2EuZGlzcGxheS5tb3Zlci5zdHlsZS50b3A9ZC52aWV3T2Zmc2V0K1wicHhcIjtnPWZmKGEpO2lmKCFjJiYwPT1nJiYhYi5mb3JjZSYmZC5yZW5kZXJlZFZpZXc9PWQudmlldyYmKG51bGw9PWQudXBkYXRlTGluZU51bWJlcnN8fGQudXBkYXRlTGluZU51bWJlcnM+PWQudmlld1RvKSlyZXR1cm4hMTthLmhhc0ZvY3VzKCk/Zj1udWxsOihmPWthKHFhKGEpKSkmJmphKGEuZGlzcGxheS5saW5lRGl2LGYpPyhmPXthY3RpdmVFbHQ6Zn0sd2luZG93LmdldFNlbGVjdGlvbiYmXG4oZT1xYShhKS5kZWZhdWx0Vmlldy5nZXRTZWxlY3Rpb24oKSxlLmFuY2hvck5vZGUmJmUuZXh0ZW5kJiZqYShhLmRpc3BsYXkubGluZURpdixlLmFuY2hvck5vZGUpJiYoZi5hbmNob3JOb2RlPWUuYW5jaG9yTm9kZSxmLmFuY2hvck9mZnNldD1lLmFuY2hvck9mZnNldCxmLmZvY3VzTm9kZT1lLmZvY3VzTm9kZSxmLmZvY3VzT2Zmc2V0PWUuZm9jdXNPZmZzZXQpKSk6Zj1udWxsOzQ8ZyYmKGQubGluZURpdi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiKTtYZyhhLGQudXBkYXRlTGluZU51bWJlcnMsYi5kaW1zKTs0PGcmJihkLmxpbmVEaXYuc3R5bGUuZGlzcGxheT1cIlwiKTtkLnJlbmRlcmVkVmlldz1kLnZpZXc7KGc9ZikmJmcuYWN0aXZlRWx0JiZnLmFjdGl2ZUVsdCE9a2EoZy5hY3RpdmVFbHQub3duZXJEb2N1bWVudCkmJihnLmFjdGl2ZUVsdC5mb2N1cygpLCEvXihJTlBVVHxURVhUQVJFQSkkLy50ZXN0KGcuYWN0aXZlRWx0Lm5vZGVOYW1lKSYmZy5hbmNob3JOb2RlJiZqYShkb2N1bWVudC5ib2R5LFxuZy5hbmNob3JOb2RlKSYmamEoZG9jdW1lbnQuYm9keSxnLmZvY3VzTm9kZSkmJihlPWcuYWN0aXZlRWx0Lm93bmVyRG9jdW1lbnQsZj1lLmRlZmF1bHRWaWV3LmdldFNlbGVjdGlvbigpLGU9ZS5jcmVhdGVSYW5nZSgpLGUuc2V0RW5kKGcuYW5jaG9yTm9kZSxnLmFuY2hvck9mZnNldCksZS5jb2xsYXBzZSghMSksZi5yZW1vdmVBbGxSYW5nZXMoKSxmLmFkZFJhbmdlKGUpLGYuZXh0ZW5kKGcuZm9jdXNOb2RlLGcuZm9jdXNPZmZzZXQpKSk7RShkLmN1cnNvckRpdik7RShkLnNlbGVjdGlvbkRpdik7ZC5ndXR0ZXJzLnN0eWxlLmhlaWdodD1kLnNpemVyLnN0eWxlLm1pbkhlaWdodD0wO2MmJihkLmxhc3RXcmFwSGVpZ2h0PWIud3JhcHBlckhlaWdodCxkLmxhc3RXcmFwV2lkdGg9Yi53cmFwcGVyV2lkdGgsWWIoYSw0MDApKTtkLnVwZGF0ZUxpbmVOdW1iZXJzPW51bGw7cmV0dXJuITB9ZnVuY3Rpb24gcWYoYSxiKXtmb3IodmFyIGQ9Yi52aWV3cG9ydCxjPSEwOztjPSExKXtpZihjJiZhLm9wdGlvbnMubGluZVdyYXBwaW5nJiZcbmIub2xkRGlzcGxheVdpZHRoIT1jYihhKSljJiYoYi52aXNpYmxlPU1jKGEuZGlzcGxheSxhLmRvYyxkKSk7ZWxzZSBpZihkJiZudWxsIT1kLnRvcCYmKGQ9e3RvcDpNYXRoLm1pbihhLmRvYy5oZWlnaHQrRGQoYS5kaXNwbGF5KS1FZChhKSxkLnRvcCl9KSxiLnZpc2libGU9TWMoYS5kaXNwbGF5LGEuZG9jLGQpLGIudmlzaWJsZS5mcm9tPj1hLmRpc3BsYXkudmlld0Zyb20mJmIudmlzaWJsZS50bzw9YS5kaXNwbGF5LnZpZXdUbylicmVhaztpZighVmQoYSxiKSlicmVhaztMYyhhKTtjPVpiKGEpO1ZiKGEpO3liKGEsYyk7V2QoYSxjKTtiLmZvcmNlPSExfWIuc2lnbmFsKGEsXCJ1cGRhdGVcIixhKTtpZihhLmRpc3BsYXkudmlld0Zyb20hPWEuZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tfHxhLmRpc3BsYXkudmlld1RvIT1hLmRpc3BsYXkucmVwb3J0ZWRWaWV3VG8pYi5zaWduYWwoYSxcInZpZXdwb3J0Q2hhbmdlXCIsYSxhLmRpc3BsYXkudmlld0Zyb20sYS5kaXNwbGF5LnZpZXdUbyksYS5kaXNwbGF5LnJlcG9ydGVkVmlld0Zyb209XG5hLmRpc3BsYXkudmlld0Zyb20sYS5kaXNwbGF5LnJlcG9ydGVkVmlld1RvPWEuZGlzcGxheS52aWV3VG99ZnVuY3Rpb24gVWQoYSxiKXtiPW5ldyBQYyhhLGIpO2lmKFZkKGEsYikpe0xjKGEpO3FmKGEsYik7dmFyIGQ9WmIoYSk7VmIoYSk7eWIoYSxkKTtXZChhLGQpO2IuZmluaXNoKCl9fWZ1bmN0aW9uIFhnKGEsYixkKXtmdW5jdGlvbiBjKHApe3ZhciBxPXAubmV4dFNpYmxpbmc7ZmEmJnlhJiZhLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PT1wP3Auc3R5bGUuZGlzcGxheT1cIm5vbmVcIjpwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocCk7cmV0dXJuIHF9dmFyIGU9YS5kaXNwbGF5LGY9YS5vcHRpb25zLmxpbmVOdW1iZXJzLGc9ZS5saW5lRGl2LGg9Zy5maXJzdENoaWxkLGs9ZS52aWV3O2U9ZS52aWV3RnJvbTtmb3IodmFyIGw9MDtsPGsubGVuZ3RoO2wrKyl7dmFyIG09a1tsXTtpZighbS5oaWRkZW4paWYobS5ub2RlJiZtLm5vZGUucGFyZW50Tm9kZT09Zyl7Zm9yKDtoIT1tLm5vZGU7KWg9XG5jKGgpO2g9ZiYmbnVsbCE9YiYmYjw9ZSYmbS5saW5lTnVtYmVyO20uY2hhbmdlcyYmKC0xPGVhKG0uY2hhbmdlcyxcImd1dHRlclwiKSYmKGg9ITEpLE9lKGEsbSxlLGQpKTtoJiYoRShtLmxpbmVOdW1iZXIpLG0ubGluZU51bWJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShxZChhLm9wdGlvbnMsZSkpKSk7aD1tLm5vZGUubmV4dFNpYmxpbmd9ZWxzZXt2YXIgbj1QZyhhLG0sZSxkKTtnLmluc2VydEJlZm9yZShuLGgpfWUrPW0uc2l6ZX1mb3IoO2g7KWg9YyhoKX1mdW5jdGlvbiBYZChhKXthLnNpemVyLnN0eWxlLm1hcmdpbkxlZnQ9YS5ndXR0ZXJzLm9mZnNldFdpZHRoK1wicHhcIjthYShhLFwiZ3V0dGVyQ2hhbmdlZFwiLGEpfWZ1bmN0aW9uIFdkKGEsYil7YS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodD1iLmRvY0hlaWdodCtcInB4XCI7YS5kaXNwbGF5LmhlaWdodEZvcmNlci5zdHlsZS50b3A9Yi5kb2NIZWlnaHQrXCJweFwiO2EuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodD1cbmIuZG9jSGVpZ2h0K2EuZGlzcGxheS5iYXJIZWlnaHQrSGEoYSkrXCJweFwifWZ1bmN0aW9uIG1mKGEpe3ZhciBiPWEuZGlzcGxheSxkPWIudmlldztpZihiLmFsaWduV2lkZ2V0c3x8Yi5ndXR0ZXJzLmZpcnN0Q2hpbGQmJmEub3B0aW9ucy5maXhlZEd1dHRlcil7Zm9yKHZhciBjPU1kKGIpLWIuc2Nyb2xsZXIuc2Nyb2xsTGVmdCthLmRvYy5zY3JvbGxMZWZ0LGU9Yi5ndXR0ZXJzLm9mZnNldFdpZHRoLGY9YytcInB4XCIsZz0wO2c8ZC5sZW5ndGg7ZysrKWlmKCFkW2ddLmhpZGRlbil7YS5vcHRpb25zLmZpeGVkR3V0dGVyJiYoZFtnXS5ndXR0ZXImJihkW2ddLmd1dHRlci5zdHlsZS5sZWZ0PWYpLGRbZ10uZ3V0dGVyQmFja2dyb3VuZCYmKGRbZ10uZ3V0dGVyQmFja2dyb3VuZC5zdHlsZS5sZWZ0PWYpKTt2YXIgaD1kW2ddLmFsaWduYWJsZTtpZihoKWZvcih2YXIgaz0wO2s8aC5sZW5ndGg7aysrKWhba10uc3R5bGUubGVmdD1mfWEub3B0aW9ucy5maXhlZEd1dHRlciYmKGIuZ3V0dGVycy5zdHlsZS5sZWZ0PVxuYytlK1wicHhcIil9fWZ1bmN0aW9uIHJmKGEpe2lmKCFhLm9wdGlvbnMubGluZU51bWJlcnMpcmV0dXJuITE7dmFyIGI9YS5kb2M7Yj1xZChhLm9wdGlvbnMsYi5maXJzdCtiLnNpemUtMSk7dmFyIGQ9YS5kaXNwbGF5O2lmKGIubGVuZ3RoIT1kLmxpbmVOdW1DaGFycyl7dmFyIGM9ZC5tZWFzdXJlLmFwcGVuZENoaWxkKHYoXCJkaXZcIixbdihcImRpdlwiLGIpXSxcIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHRcIikpLGU9Yy5maXJzdENoaWxkLm9mZnNldFdpZHRoO2M9Yy5vZmZzZXRXaWR0aC1lO2QubGluZUd1dHRlci5zdHlsZS53aWR0aD1cIlwiO2QubGluZU51bUlubmVyV2lkdGg9TWF0aC5tYXgoZSxkLmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGgtYykrMTtkLmxpbmVOdW1XaWR0aD1kLmxpbmVOdW1Jbm5lcldpZHRoK2M7ZC5saW5lTnVtQ2hhcnM9ZC5saW5lTnVtSW5uZXJXaWR0aD9iLmxlbmd0aDotMTtkLmxpbmVHdXR0ZXIuc3R5bGUud2lkdGg9ZC5saW5lTnVtV2lkdGgrXG5cInB4XCI7WGQoYS5kaXNwbGF5KTtyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBZZChhLGIpe2Zvcih2YXIgZD1bXSxjPSExLGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIGY9YVtlXSxnPW51bGw7XCJzdHJpbmdcIiE9dHlwZW9mIGYmJihnPWYuc3R5bGUsZj1mLmNsYXNzTmFtZSk7aWYoXCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCI9PWYpaWYoYiljPSEwO2Vsc2UgY29udGludWU7ZC5wdXNoKHtjbGFzc05hbWU6ZixzdHlsZTpnfSl9YiYmIWMmJmQucHVzaCh7Y2xhc3NOYW1lOlwiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiLHN0eWxlOm51bGx9KTtyZXR1cm4gZH1mdW5jdGlvbiBzZihhKXt2YXIgYj1hLmd1dHRlcnMsZD1hLmd1dHRlclNwZWNzO0UoYik7YS5saW5lR3V0dGVyPW51bGw7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDsrK2Mpe3ZhciBlPWRbY10sZj1lLmNsYXNzTmFtZTtlPWUuc3R5bGU7dmFyIGc9Yi5hcHBlbmRDaGlsZCh2KFwiZGl2XCIsbnVsbCxcIkNvZGVNaXJyb3ItZ3V0dGVyIFwiK2YpKTtcbmUmJihnLnN0eWxlLmNzc1RleHQ9ZSk7XCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCI9PWYmJihhLmxpbmVHdXR0ZXI9ZyxnLnN0eWxlLndpZHRoPShhLmxpbmVOdW1XaWR0aHx8MSkrXCJweFwiKX1iLnN0eWxlLmRpc3BsYXk9ZC5sZW5ndGg/XCJcIjpcIm5vbmVcIjtYZChhKX1mdW5jdGlvbiAkYihhKXtzZihhLmRpc3BsYXkpO21hKGEpO21mKGEpfWZ1bmN0aW9uIFlnKGEsYixkLGMpe3RoaXMuaW5wdXQ9ZDt0aGlzLnNjcm9sbGJhckZpbGxlcj12KFwiZGl2XCIsbnVsbCxcIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlclwiKTt0aGlzLnNjcm9sbGJhckZpbGxlci5zZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiLFwidHJ1ZVwiKTt0aGlzLmd1dHRlckZpbGxlcj12KFwiZGl2XCIsbnVsbCxcIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlclwiKTt0aGlzLmd1dHRlckZpbGxlci5zZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiLFwidHJ1ZVwiKTt0aGlzLmxpbmVEaXY9TShcImRpdlwiLG51bGwsXCJDb2RlTWlycm9yLWNvZGVcIik7XG50aGlzLnNlbGVjdGlvbkRpdj12KFwiZGl2XCIsbnVsbCxudWxsLFwicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxXCIpO3RoaXMuY3Vyc29yRGl2PXYoXCJkaXZcIixudWxsLFwiQ29kZU1pcnJvci1jdXJzb3JzXCIpO3RoaXMubWVhc3VyZT12KFwiZGl2XCIsbnVsbCxcIkNvZGVNaXJyb3ItbWVhc3VyZVwiKTt0aGlzLmxpbmVNZWFzdXJlPXYoXCJkaXZcIixudWxsLFwiQ29kZU1pcnJvci1tZWFzdXJlXCIpO3RoaXMubGluZVNwYWNlPU0oXCJkaXZcIixbdGhpcy5tZWFzdXJlLHRoaXMubGluZU1lYXN1cmUsdGhpcy5zZWxlY3Rpb25EaXYsdGhpcy5jdXJzb3JEaXYsdGhpcy5saW5lRGl2XSxudWxsLFwicG9zaXRpb246IHJlbGF0aXZlOyBvdXRsaW5lOiBub25lXCIpO3ZhciBlPU0oXCJkaXZcIixbdGhpcy5saW5lU3BhY2VdLFwiQ29kZU1pcnJvci1saW5lc1wiKTt0aGlzLm1vdmVyPXYoXCJkaXZcIixbZV0sbnVsbCxcInBvc2l0aW9uOiByZWxhdGl2ZVwiKTt0aGlzLnNpemVyPXYoXCJkaXZcIixbdGhpcy5tb3Zlcl0sXCJDb2RlTWlycm9yLXNpemVyXCIpO1xudGhpcy5zaXplcldpZHRoPW51bGw7dGhpcy5oZWlnaHRGb3JjZXI9dihcImRpdlwiLG51bGwsbnVsbCxcInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiA1MHB4OyB3aWR0aDogMXB4O1wiKTt0aGlzLmd1dHRlcnM9dihcImRpdlwiLG51bGwsXCJDb2RlTWlycm9yLWd1dHRlcnNcIik7dGhpcy5saW5lR3V0dGVyPW51bGw7dGhpcy5zY3JvbGxlcj12KFwiZGl2XCIsW3RoaXMuc2l6ZXIsdGhpcy5oZWlnaHRGb3JjZXIsdGhpcy5ndXR0ZXJzXSxcIkNvZGVNaXJyb3Itc2Nyb2xsXCIpO3RoaXMuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKFwidGFiSW5kZXhcIixcIi0xXCIpO3RoaXMud3JhcHBlcj12KFwiZGl2XCIsW3RoaXMuc2Nyb2xsYmFyRmlsbGVyLHRoaXMuZ3V0dGVyRmlsbGVyLHRoaXMuc2Nyb2xsZXJdLFwiQ29kZU1pcnJvclwiKTtRYSYmMTA1PD10ZiYmKHRoaXMud3JhcHBlci5zdHlsZS5jbGlwUGF0aD1cImluc2V0KDBweClcIik7dGhpcy53cmFwcGVyLnNldEF0dHJpYnV0ZShcInRyYW5zbGF0ZVwiLFwibm9cIik7RyYmOD5cblQmJih0aGlzLmd1dHRlcnMuc3R5bGUuekluZGV4PS0xLHRoaXMuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0PTApO2ZhfHxNYSYmYWN8fCh0aGlzLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCk7YSYmKGEuYXBwZW5kQ2hpbGQ/YS5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpOmEodGhpcy53cmFwcGVyKSk7dGhpcy5yZXBvcnRlZFZpZXdGcm9tPXRoaXMucmVwb3J0ZWRWaWV3VG89dGhpcy52aWV3RnJvbT10aGlzLnZpZXdUbz1iLmZpcnN0O3RoaXMudmlldz1bXTt0aGlzLmV4dGVybmFsTWVhc3VyZWQ9dGhpcy5yZW5kZXJlZFZpZXc9bnVsbDt0aGlzLmxhc3RXcmFwSGVpZ2h0PXRoaXMubGFzdFdyYXBXaWR0aD10aGlzLnZpZXdPZmZzZXQ9MDt0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzPW51bGw7dGhpcy5uYXRpdmVCYXJXaWR0aD10aGlzLmJhckhlaWdodD10aGlzLmJhcldpZHRoPTA7dGhpcy5zY3JvbGxiYXJzQ2xpcHBlZD0hMTt0aGlzLmxpbmVOdW1XaWR0aD10aGlzLmxpbmVOdW1Jbm5lcldpZHRoPVxudGhpcy5saW5lTnVtQ2hhcnM9bnVsbDt0aGlzLmFsaWduV2lkZ2V0cz0hMTt0aGlzLm1heExpbmU9dGhpcy5jYWNoZWRDaGFyV2lkdGg9dGhpcy5jYWNoZWRUZXh0SGVpZ2h0PXRoaXMuY2FjaGVkUGFkZGluZ0g9bnVsbDt0aGlzLm1heExpbmVMZW5ndGg9MDt0aGlzLm1heExpbmVDaGFuZ2VkPSExO3RoaXMud2hlZWxEWD10aGlzLndoZWVsRFk9dGhpcy53aGVlbFN0YXJ0WD10aGlzLndoZWVsU3RhcnRZPW51bGw7dGhpcy5zaGlmdD0hMTt0aGlzLmFjdGl2ZVRvdWNoPXRoaXMuc2VsRm9yQ29udGV4dE1lbnU9bnVsbDt0aGlzLmd1dHRlclNwZWNzPVlkKGMuZ3V0dGVycyxjLmxpbmVOdW1iZXJzKTtzZih0aGlzKTtkLmluaXQodGhpcyl9ZnVuY3Rpb24gdWYoYSl7dmFyIGI9YS53aGVlbERlbHRhWCxkPWEud2hlZWxEZWx0YVk7bnVsbD09YiYmYS5kZXRhaWwmJmEuYXhpcz09YS5IT1JJWk9OVEFMX0FYSVMmJihiPWEuZGV0YWlsKTtudWxsPT1kJiZhLmRldGFpbCYmYS5heGlzPT1hLlZFUlRJQ0FMX0FYSVM/XG5kPWEuZGV0YWlsOm51bGw9PWQmJihkPWEud2hlZWxEZWx0YSk7cmV0dXJue3g6Yix5OmR9fWZ1bmN0aW9uIFpnKGEpe2E9dWYoYSk7YS54Kj1OYTthLnkqPU5hO3JldHVybiBhfWZ1bmN0aW9uIHZmKGEsYil7UWEmJjEwMj09dGYmJihudWxsPT1hLmRpc3BsYXkuY2hyb21lU2Nyb2xsSGFjaz9hLmRpc3BsYXkuc2l6ZXIuc3R5bGUucG9pbnRlckV2ZW50cz1cIm5vbmVcIjpjbGVhclRpbWVvdXQoYS5kaXNwbGF5LmNocm9tZVNjcm9sbEhhY2spLGEuZGlzcGxheS5jaHJvbWVTY3JvbGxIYWNrPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmRpc3BsYXkuY2hyb21lU2Nyb2xsSGFjaz1udWxsO2EuZGlzcGxheS5zaXplci5zdHlsZS5wb2ludGVyRXZlbnRzPVwiXCJ9LDEwMCkpO3ZhciBkPXVmKGIpLGM9ZC54O2Q9ZC55O3ZhciBlPU5hOzA9PT1iLmRlbHRhTW9kZSYmKGM9Yi5kZWx0YVgsZD1iLmRlbHRhWSxlPTEpO3ZhciBmPWEuZGlzcGxheSxnPWYuc2Nyb2xsZXIsaD1nLnNjcm9sbFdpZHRoPmcuY2xpZW50V2lkdGgsXG5rPWcuc2Nyb2xsSGVpZ2h0PmcuY2xpZW50SGVpZ2h0O2lmKGMmJmh8fGQmJmspe2lmKGQmJnlhJiZmYSl7aD1iLnRhcmdldDt2YXIgbD1mLnZpZXc7YTpmb3IoO2ghPWc7aD1oLnBhcmVudE5vZGUpZm9yKHZhciBtPTA7bTxsLmxlbmd0aDttKyspaWYobFttXS5ub2RlPT1oKXthLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PWg7YnJlYWsgYX19IWN8fE1hfHxDYXx8bnVsbD09ZT8oZCYmbnVsbCE9ZSYmKGUqPWQsaz1hLmRvYy5zY3JvbGxUb3AsaD1rK2Yud3JhcHBlci5jbGllbnRIZWlnaHQsMD5lP2s9TWF0aC5tYXgoMCxrK2UtNTApOmg9TWF0aC5taW4oYS5kb2MuaGVpZ2h0LGgrZSs1MCksVWQoYSx7dG9wOmssYm90dG9tOmh9KSksMjA+UWMmJjAhPT1iLmRlbHRhTW9kZSYmKG51bGw9PWYud2hlZWxTdGFydFg/KGYud2hlZWxTdGFydFg9Zy5zY3JvbGxMZWZ0LGYud2hlZWxTdGFydFk9Zy5zY3JvbGxUb3AsZi53aGVlbERYPWMsZi53aGVlbERZPWQsc2V0VGltZW91dChmdW5jdGlvbigpe2lmKG51bGwhPVxuZi53aGVlbFN0YXJ0WCl7dmFyIG49Zy5zY3JvbGxMZWZ0LWYud2hlZWxTdGFydFgscD1nLnNjcm9sbFRvcC1mLndoZWVsU3RhcnRZO249cCYmZi53aGVlbERZJiZwL2Yud2hlZWxEWXx8biYmZi53aGVlbERYJiZuL2Yud2hlZWxEWDtmLndoZWVsU3RhcnRYPWYud2hlZWxTdGFydFk9bnVsbDtuJiYoTmE9KE5hKlFjK24pLyhRYysxKSwrK1FjKX19LDIwMCkpOihmLndoZWVsRFgrPWMsZi53aGVlbERZKz1kKSkpOihkJiZrJiZYYihhLE1hdGgubWF4KDAsZy5zY3JvbGxUb3ArZCplKSksa2IoYSxNYXRoLm1heCgwLGcuc2Nyb2xsTGVmdCtjKmUpKSwoIWR8fGQmJmspJiZsYShiKSxmLndoZWVsU3RhcnRYPW51bGwpfX1mdW5jdGlvbiBEYShhLGIsZCl7YT1hJiZhLm9wdGlvbnMuc2VsZWN0aW9uc01heVRvdWNoO2Q9YltkXTtiLnNvcnQoZnVuY3Rpb24oayxsKXtyZXR1cm4gQihrLmZyb20oKSxsLmZyb20oKSl9KTtkPWVhKGIsZCk7Zm9yKHZhciBjPTE7YzxiLmxlbmd0aDtjKyspe3ZhciBlPVxuYltjXSxmPWJbYy0xXSxnPUIoZi50bygpLGUuZnJvbSgpKTtpZihhJiYhZS5lbXB0eSgpPzA8ZzowPD1nKXtnPUJjKGYuZnJvbSgpLGUuZnJvbSgpKTt2YXIgaD1BYyhmLnRvKCksZS50bygpKTtlPWYuZW1wdHkoKT9lLmZyb20oKT09ZS5oZWFkOmYuZnJvbSgpPT1mLmhlYWQ7Yzw9ZCYmLS1kO2Iuc3BsaWNlKC0tYywyLG5ldyBJKGU/aDpnLGU/ZzpoKSl9fXJldHVybiBuZXcgdmEoYixkKX1mdW5jdGlvbiBPYShhLGIpe3JldHVybiBuZXcgdmEoW25ldyBJKGEsYnx8YSldLDApfWZ1bmN0aW9uIFRhKGEpe3JldHVybiBhLnRleHQ/dChhLmZyb20ubGluZSthLnRleHQubGVuZ3RoLTEsSihhLnRleHQpLmxlbmd0aCsoMT09YS50ZXh0Lmxlbmd0aD9hLmZyb20uY2g6MCkpOmEudG99ZnVuY3Rpb24gd2YoYSxiKXtpZigwPkIoYSxiLmZyb20pKXJldHVybiBhO2lmKDA+PUIoYSxiLnRvKSlyZXR1cm4gVGEoYik7dmFyIGQ9YS5saW5lK2IudGV4dC5sZW5ndGgtKGIudG8ubGluZS1iLmZyb20ubGluZSktXG4xLGM9YS5jaDthLmxpbmU9PWIudG8ubGluZSYmKGMrPVRhKGIpLmNoLWIudG8uY2gpO3JldHVybiB0KGQsYyl9ZnVuY3Rpb24gWmQoYSxiKXtmb3IodmFyIGQ9W10sYz0wO2M8YS5zZWwucmFuZ2VzLmxlbmd0aDtjKyspe3ZhciBlPWEuc2VsLnJhbmdlc1tjXTtkLnB1c2gobmV3IEkod2YoZS5hbmNob3IsYiksd2YoZS5oZWFkLGIpKSl9cmV0dXJuIERhKGEuY20sZCxhLnNlbC5wcmltSW5kZXgpfWZ1bmN0aW9uIHhmKGEsYixkKXtyZXR1cm4gYS5saW5lPT1iLmxpbmU/dChkLmxpbmUsYS5jaC1iLmNoK2QuY2gpOnQoZC5saW5lKyhhLmxpbmUtYi5saW5lKSxhLmNoKX1mdW5jdGlvbiAkZChhKXthLmRvYy5tb2RlPW5kKGEub3B0aW9ucyxhLmRvYy5tb2RlT3B0aW9uKTtiYyhhKX1mdW5jdGlvbiBiYyhhKXthLmRvYy5pdGVyKGZ1bmN0aW9uKGIpe2Iuc3RhdGVBZnRlciYmKGIuc3RhdGVBZnRlcj1udWxsKTtiLnN0eWxlcyYmKGIuc3R5bGVzPW51bGwpfSk7YS5kb2MubW9kZUZyb250aWVyPVxuYS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXI9YS5kb2MuZmlyc3Q7WWIoYSwxMDApO2Euc3RhdGUubW9kZUdlbisrO2EuY3VyT3AmJm1hKGEpfWZ1bmN0aW9uIHlmKGEsYil7cmV0dXJuIDA9PWIuZnJvbS5jaCYmMD09Yi50by5jaCYmXCJcIj09SihiLnRleHQpJiYoIWEuY218fGEuY20ub3B0aW9ucy53aG9sZUxpbmVVcGRhdGVCZWZvcmUpfWZ1bmN0aW9uIGFlKGEsYixkLGMpe2Z1bmN0aW9uIGUocix1LEEpe3IudGV4dD11O3Iuc3RhdGVBZnRlciYmKHIuc3RhdGVBZnRlcj1udWxsKTtyLnN0eWxlcyYmKHIuc3R5bGVzPW51bGwpO251bGwhPXIub3JkZXImJihyLm9yZGVyPW51bGwpO0dlKHIpO0hlKHIsQSk7dT1jP2Mocik6MTt1IT1yLmhlaWdodCYmRWEocix1KTthYShyLFwiY2hhbmdlXCIscixiKX1mdW5jdGlvbiBmKHIsdSl7Zm9yKHZhciBBPVtdO3I8dTsrK3IpQS5wdXNoKG5ldyB6YihrW3JdLGQ/ZFtyXTpudWxsLGMpKTtyZXR1cm4gQX12YXIgZz1iLmZyb20saD1iLnRvLGs9Yi50ZXh0LFxubD13KGEsZy5saW5lKSxtPXcoYSxoLmxpbmUpLG49SihrKSxwPWQ/ZFtrLmxlbmd0aC0xXTpudWxsLHE9aC5saW5lLWcubGluZTtiLmZ1bGw/KGEuaW5zZXJ0KDAsZigwLGsubGVuZ3RoKSksYS5yZW1vdmUoay5sZW5ndGgsYS5zaXplLWsubGVuZ3RoKSk6eWYoYSxiKT8oaD1mKDAsay5sZW5ndGgtMSksZShtLG0udGV4dCxwKSxxJiZhLnJlbW92ZShnLmxpbmUscSksaC5sZW5ndGgmJmEuaW5zZXJ0KGcubGluZSxoKSk6bD09bT8xPT1rLmxlbmd0aD9lKGwsbC50ZXh0LnNsaWNlKDAsZy5jaCkrbitsLnRleHQuc2xpY2UoaC5jaCkscCk6KHE9ZigxLGsubGVuZ3RoLTEpLHEucHVzaChuZXcgemIobitsLnRleHQuc2xpY2UoaC5jaCkscCxjKSksZShsLGwudGV4dC5zbGljZSgwLGcuY2gpK2tbMF0sZD9kWzBdOm51bGwpLGEuaW5zZXJ0KGcubGluZSsxLHEpKToxPT1rLmxlbmd0aD8oZShsLGwudGV4dC5zbGljZSgwLGcuY2gpK2tbMF0rbS50ZXh0LnNsaWNlKGguY2gpLGQ/ZFswXTpudWxsKSxcbmEucmVtb3ZlKGcubGluZSsxLHEpKTooZShsLGwudGV4dC5zbGljZSgwLGcuY2gpK2tbMF0sZD9kWzBdOm51bGwpLGUobSxuK20udGV4dC5zbGljZShoLmNoKSxwKSxwPWYoMSxrLmxlbmd0aC0xKSwxPHEmJmEucmVtb3ZlKGcubGluZSsxLHEtMSksYS5pbnNlcnQoZy5saW5lKzEscCkpO2FhKGEsXCJjaGFuZ2VcIixhLGIpfWZ1bmN0aW9uIFVhKGEsYixkKXtmdW5jdGlvbiBjKGUsZixnKXtpZihlLmxpbmtlZClmb3IodmFyIGg9MDtoPGUubGlua2VkLmxlbmd0aDsrK2gpe3ZhciBrPWUubGlua2VkW2hdO2lmKGsuZG9jIT1mKXt2YXIgbD1nJiZrLnNoYXJlZEhpc3Q7aWYoIWR8fGwpYihrLmRvYyxsKSxjKGsuZG9jLGUsbCl9fX1jKGEsbnVsbCwhMCl9ZnVuY3Rpb24gemYoYSxiKXtpZihiLmNtKXRocm93IEVycm9yKFwiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS5cIik7YS5kb2M9YjtiLmNtPWE7TmQoYSk7JGQoYSk7QWYoYSk7YS5vcHRpb25zLmRpcmVjdGlvbj1iLmRpcmVjdGlvbjtcbmEub3B0aW9ucy5saW5lV3JhcHBpbmd8fHpkKGEpO2Eub3B0aW9ucy5tb2RlPWIubW9kZU9wdGlvbjttYShhKX1mdW5jdGlvbiBBZihhKXsoXCJydGxcIj09YS5kb2MuZGlyZWN0aW9uP1lhOmpiKShhLmRpc3BsYXkubGluZURpdixcIkNvZGVNaXJyb3ItcnRsXCIpfWZ1bmN0aW9uICRnKGEpe3JhKGEsZnVuY3Rpb24oKXtBZihhKTttYShhKX0pfWZ1bmN0aW9uIFJjKGEpe3RoaXMuZG9uZT1bXTt0aGlzLnVuZG9uZT1bXTt0aGlzLnVuZG9EZXB0aD1hP2EudW5kb0RlcHRoOkluZmluaXR5O3RoaXMubGFzdE1vZFRpbWU9dGhpcy5sYXN0U2VsVGltZT0wO3RoaXMubGFzdE9yaWdpbj10aGlzLmxhc3RTZWxPcmlnaW49dGhpcy5sYXN0T3A9dGhpcy5sYXN0U2VsT3A9bnVsbDt0aGlzLmdlbmVyYXRpb249dGhpcy5tYXhHZW5lcmF0aW9uPWE/YS5tYXhHZW5lcmF0aW9uOjF9ZnVuY3Rpb24gYmUoYSxiKXt2YXIgZD17ZnJvbTpzZChiLmZyb20pLHRvOlRhKGIpLHRleHQ6YWIoYSxiLmZyb20sYi50byl9O1xuQmYoYSxkLGIuZnJvbS5saW5lLGIudG8ubGluZSsxKTtVYShhLGZ1bmN0aW9uKGMpe3JldHVybiBCZihjLGQsYi5mcm9tLmxpbmUsYi50by5saW5lKzEpfSwhMCk7cmV0dXJuIGR9ZnVuY3Rpb24gQ2YoYSl7Zm9yKDthLmxlbmd0aDspaWYoSihhKS5yYW5nZXMpYS5wb3AoKTtlbHNlIGJyZWFrfWZ1bmN0aW9uIERmKGEsYixkLGMpe3ZhciBlPWEuaGlzdG9yeTtlLnVuZG9uZS5sZW5ndGg9MDt2YXIgZj0rbmV3IERhdGUsZztpZihnPWUubGFzdE9wPT1jfHxlLmxhc3RPcmlnaW49PWIub3JpZ2luJiZiLm9yaWdpbiYmKFwiK1wiPT1iLm9yaWdpbi5jaGFyQXQoMCkmJmUubGFzdE1vZFRpbWU+Zi0oYS5jbT9hLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXk6NTAwKXx8XCIqXCI9PWIub3JpZ2luLmNoYXJBdCgwKSkpe2lmKGUubGFzdE9wPT1jKXtDZihlLmRvbmUpO3ZhciBoPUooZS5kb25lKX1lbHNlIGUuZG9uZS5sZW5ndGgmJiFKKGUuZG9uZSkucmFuZ2VzP2g9SihlLmRvbmUpOjE8ZS5kb25lLmxlbmd0aCYmXG4hZS5kb25lW2UuZG9uZS5sZW5ndGgtMl0ucmFuZ2VzPyhlLmRvbmUucG9wKCksaD1KKGUuZG9uZSkpOmg9dm9pZCAwO2c9aH1pZihnKXt2YXIgaz1KKGguY2hhbmdlcyk7MD09QihiLmZyb20sYi50bykmJjA9PUIoYi5mcm9tLGsudG8pP2sudG89VGEoYik6aC5jaGFuZ2VzLnB1c2goYmUoYSxiKSl9ZWxzZSBmb3IoKGg9SihlLmRvbmUpKSYmaC5yYW5nZXN8fFNjKGEuc2VsLGUuZG9uZSksaD17Y2hhbmdlczpbYmUoYSxiKV0sZ2VuZXJhdGlvbjplLmdlbmVyYXRpb259LGUuZG9uZS5wdXNoKGgpO2UuZG9uZS5sZW5ndGg+ZS51bmRvRGVwdGg7KWUuZG9uZS5zaGlmdCgpLGUuZG9uZVswXS5yYW5nZXN8fGUuZG9uZS5zaGlmdCgpO2UuZG9uZS5wdXNoKGQpO2UuZ2VuZXJhdGlvbj0rK2UubWF4R2VuZXJhdGlvbjtlLmxhc3RNb2RUaW1lPWUubGFzdFNlbFRpbWU9ZjtlLmxhc3RPcD1lLmxhc3RTZWxPcD1jO2UubGFzdE9yaWdpbj1lLmxhc3RTZWxPcmlnaW49Yi5vcmlnaW47a3x8VyhhLFwiaGlzdG9yeUFkZGVkXCIpfVxuZnVuY3Rpb24gU2MoYSxiKXt2YXIgZD1KKGIpO2QmJmQucmFuZ2VzJiZkLmVxdWFscyhhKXx8Yi5wdXNoKGEpfWZ1bmN0aW9uIEJmKGEsYixkLGMpe3ZhciBlPWJbXCJzcGFuc19cIithLmlkXSxmPTA7YS5pdGVyKE1hdGgubWF4KGEuZmlyc3QsZCksTWF0aC5taW4oYS5maXJzdCthLnNpemUsYyksZnVuY3Rpb24oZyl7Zy5tYXJrZWRTcGFucyYmKChlfHwoZT1iW1wic3BhbnNfXCIrYS5pZF09e30pKVtmXT1nLm1hcmtlZFNwYW5zKTsrK2Z9KX1mdW5jdGlvbiBFZihhLGIpe3ZhciBkO2lmKGQ9YltcInNwYW5zX1wiK2EuaWRdKXtmb3IodmFyIGM9W10sZT0wO2U8Yi50ZXh0Lmxlbmd0aDsrK2Upe3ZhciBmPWMsZz1mLnB1c2g7dmFyIGg9dm9pZCAwO3ZhciBrPWRbZV07aWYoayl7Zm9yKHZhciBsPTA7bDxrLmxlbmd0aDsrK2wpa1tsXS5tYXJrZXIuZXhwbGljaXRseUNsZWFyZWQ/aHx8KGg9ay5zbGljZSgwLGwpKTpoJiZoLnB1c2goa1tsXSk7aD1oP2gubGVuZ3RoP2g6bnVsbDprfWVsc2UgaD1udWxsO1xuZy5jYWxsKGYsaCl9ZD1jfWVsc2UgZD1udWxsO2E9dmQoYSxiKTtpZighZClyZXR1cm4gYTtpZighYSlyZXR1cm4gZDtmb3IoYj0wO2I8ZC5sZW5ndGg7KytiKWlmKGM9ZFtiXSxlPWFbYl0sYyYmZSlhOmZvcihmPTA7ZjxlLmxlbmd0aDsrK2Ype2c9ZVtmXTtmb3IoaD0wO2g8Yy5sZW5ndGg7KytoKWlmKGNbaF0ubWFya2VyPT1nLm1hcmtlciljb250aW51ZSBhO2MucHVzaChnKX1lbHNlIGUmJihkW2JdPWUpO3JldHVybiBkfWZ1bmN0aW9uIEFiKGEsYixkKXtmb3IodmFyIGM9W10sZT0wO2U8YS5sZW5ndGg7KytlKXt2YXIgZj1hW2VdO2lmKGYucmFuZ2VzKWMucHVzaChkP3ZhLnByb3RvdHlwZS5kZWVwQ29weS5jYWxsKGYpOmYpO2Vsc2V7Zj1mLmNoYW5nZXM7dmFyIGc9W107Yy5wdXNoKHtjaGFuZ2VzOmd9KTtmb3IodmFyIGg9MDtoPGYubGVuZ3RoOysraCl7dmFyIGs9ZltoXSxsO2cucHVzaCh7ZnJvbTprLmZyb20sdG86ay50byx0ZXh0OmsudGV4dH0pO2lmKGIpZm9yKHZhciBtIGluIGspKGw9XG5tLm1hdGNoKC9ec3BhbnNfKFxcZCspJC8pKSYmLTE8ZWEoYixOdW1iZXIobFsxXSkpJiYoSihnKVttXT1rW21dLGRlbGV0ZSBrW21dKX19fXJldHVybiBjfWZ1bmN0aW9uIGNlKGEsYixkLGMpe3JldHVybiBjPyhhPWEuYW5jaG9yLGQmJihjPTA+QihiLGEpLGMhPTA+QihkLGEpPyhhPWIsYj1kKTpjIT0wPkIoYixkKSYmKGI9ZCkpLG5ldyBJKGEsYikpOm5ldyBJKGR8fGIsYil9ZnVuY3Rpb24gVGMoYSxiLGQsYyxlKXtudWxsPT1lJiYoZT1hLmNtJiYoYS5jbS5kaXNwbGF5LnNoaWZ0fHxhLmV4dGVuZCkpO2RhKGEsbmV3IHZhKFtjZShhLnNlbC5wcmltYXJ5KCksYixkLGUpXSwwKSxjKX1mdW5jdGlvbiBGZihhLGIsZCl7Zm9yKHZhciBjPVtdLGU9YS5jbSYmKGEuY20uZGlzcGxheS5zaGlmdHx8YS5leHRlbmQpLGY9MDtmPGEuc2VsLnJhbmdlcy5sZW5ndGg7ZisrKWNbZl09Y2UoYS5zZWwucmFuZ2VzW2ZdLGJbZl0sbnVsbCxlKTtiPURhKGEuY20sYyxhLnNlbC5wcmltSW5kZXgpO2RhKGEsXG5iLGQpfWZ1bmN0aW9uIGRlKGEsYixkLGMpe3ZhciBlPWEuc2VsLnJhbmdlcy5zbGljZSgwKTtlW2JdPWQ7ZGEoYSxEYShhLmNtLGUsYS5zZWwucHJpbUluZGV4KSxjKX1mdW5jdGlvbiBhaChhLGIsZCl7ZD17cmFuZ2VzOmIucmFuZ2VzLHVwZGF0ZTpmdW5jdGlvbihjKXt0aGlzLnJhbmdlcz1bXTtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyl0aGlzLnJhbmdlc1tlXT1uZXcgSShDKGEsY1tlXS5hbmNob3IpLEMoYSxjW2VdLmhlYWQpKX0sb3JpZ2luOmQmJmQub3JpZ2lufTtXKGEsXCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2VcIixhLGQpO2EuY20mJlcoYS5jbSxcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLGEuY20sZCk7cmV0dXJuIGQucmFuZ2VzIT1iLnJhbmdlcz9EYShhLmNtLGQucmFuZ2VzLGQucmFuZ2VzLmxlbmd0aC0xKTpifWZ1bmN0aW9uIEdmKGEsYixkKXt2YXIgYz1hLmhpc3RvcnkuZG9uZSxlPUooYyk7ZSYmZS5yYW5nZXM/KGNbYy5sZW5ndGgtMV09YixVYyhhLGIsZCkpOmRhKGEsXG5iLGQpfWZ1bmN0aW9uIGRhKGEsYixkKXtVYyhhLGIsZCk7Yj1hLnNlbDt2YXIgYz1hLmNtP2EuY20uY3VyT3AuaWQ6TmFOLGU9YS5oaXN0b3J5LGY9ZCYmZC5vcmlnaW4sZztpZighKGc9Yz09ZS5sYXN0U2VsT3ApJiYoZz1mJiZlLmxhc3RTZWxPcmlnaW49PWYpJiYhKGc9ZS5sYXN0TW9kVGltZT09ZS5sYXN0U2VsVGltZSYmZS5sYXN0T3JpZ2luPT1mKSl7Zz1KKGUuZG9uZSk7dmFyIGg9Zi5jaGFyQXQoMCk7Zz1cIipcIj09aHx8XCIrXCI9PWgmJmcucmFuZ2VzLmxlbmd0aD09Yi5yYW5nZXMubGVuZ3RoJiZnLnNvbWV0aGluZ1NlbGVjdGVkKCk9PWIuc29tZXRoaW5nU2VsZWN0ZWQoKSYmbmV3IERhdGUtYS5oaXN0b3J5Lmxhc3RTZWxUaW1lPD0oYS5jbT9hLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXk6NTAwKX1nP2UuZG9uZVtlLmRvbmUubGVuZ3RoLTFdPWI6U2MoYixlLmRvbmUpO2UubGFzdFNlbFRpbWU9K25ldyBEYXRlO2UubGFzdFNlbE9yaWdpbj1mO2UubGFzdFNlbE9wPWM7XG5kJiYhMSE9PWQuY2xlYXJSZWRvJiZDZihlLnVuZG9uZSl9ZnVuY3Rpb24gVWMoYSxiLGQpe2lmKHhhKGEsXCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2VcIil8fGEuY20mJnhhKGEuY20sXCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2VcIikpYj1haChhLGIsZCk7dmFyIGM9ZCYmZC5iaWFzfHwoMD5CKGIucHJpbWFyeSgpLmhlYWQsYS5zZWwucHJpbWFyeSgpLmhlYWQpPy0xOjEpO0hmKGEsSWYoYSxiLGMsITApKTtkJiYhMT09PWQuc2Nyb2xsfHwhYS5jbXx8XCJub2N1cnNvclwiPT1hLmNtLmdldE9wdGlvbihcInJlYWRPbmx5XCIpfHx4YihhLmNtKX1mdW5jdGlvbiBIZihhLGIpe2IuZXF1YWxzKGEuc2VsKXx8KGEuc2VsPWIsYS5jbSYmKGEuY20uY3VyT3AudXBkYXRlSW5wdXQ9MSxhLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9ITAsdGUoYS5jbSkpLGFhKGEsXCJjdXJzb3JBY3Rpdml0eVwiLGEpKX1mdW5jdGlvbiBKZihhKXtIZihhLElmKGEsYS5zZWwsbnVsbCwhMSkpfWZ1bmN0aW9uIElmKGEsYixkLGMpe2Zvcih2YXIgZSxcbmY9MDtmPGIucmFuZ2VzLmxlbmd0aDtmKyspe3ZhciBnPWIucmFuZ2VzW2ZdLGg9Yi5yYW5nZXMubGVuZ3RoPT1hLnNlbC5yYW5nZXMubGVuZ3RoJiZhLnNlbC5yYW5nZXNbZl0saz1WYyhhLGcuYW5jaG9yLGgmJmguYW5jaG9yLGQsYyk7aD1nLmhlYWQ9PWcuYW5jaG9yP2s6VmMoYSxnLmhlYWQsaCYmaC5oZWFkLGQsYyk7aWYoZXx8ayE9Zy5hbmNob3J8fGghPWcuaGVhZCllfHwoZT1iLnJhbmdlcy5zbGljZSgwLGYpKSxlW2ZdPW5ldyBJKGssaCl9cmV0dXJuIGU/RGEoYS5jbSxlLGIucHJpbUluZGV4KTpifWZ1bmN0aW9uIEJiKGEsYixkLGMsZSl7dmFyIGY9dyhhLGIubGluZSk7aWYoZi5tYXJrZWRTcGFucylmb3IodmFyIGc9MDtnPGYubWFya2VkU3BhbnMubGVuZ3RoOysrZyl7dmFyIGg9Zi5tYXJrZWRTcGFuc1tnXSxrPWgubWFya2VyLGw9XCJzZWxlY3RMZWZ0XCJpbiBrPyFrLnNlbGVjdExlZnQ6ay5pbmNsdXNpdmVMZWZ0LG09XCJzZWxlY3RSaWdodFwiaW4gaz8hay5zZWxlY3RSaWdodDpcbmsuaW5jbHVzaXZlUmlnaHQ7aWYoKG51bGw9PWguZnJvbXx8KGw/aC5mcm9tPD1iLmNoOmguZnJvbTxiLmNoKSkmJihudWxsPT1oLnRvfHwobT9oLnRvPj1iLmNoOmgudG8+Yi5jaCkpKXtpZihlJiYoVyhrLFwiYmVmb3JlQ3Vyc29yRW50ZXJcIiksay5leHBsaWNpdGx5Q2xlYXJlZCkpaWYoZi5tYXJrZWRTcGFucyl7LS1nO2NvbnRpbnVlfWVsc2UgYnJlYWs7aWYoay5hdG9taWMpe2lmKGQpe2c9ay5maW5kKDA+Yz8xOi0xKTtoPXZvaWQgMDtpZigwPmM/bTpsKWc9S2YoYSxnLC1jLGcmJmcubGluZT09Yi5saW5lP2Y6bnVsbCk7aWYoZyYmZy5saW5lPT1iLmxpbmUmJihoPUIoZyxkKSkmJigwPmM/MD5oOjA8aCkpcmV0dXJuIEJiKGEsZyxiLGMsZSl9ZD1rLmZpbmQoMD5jPy0xOjEpO2lmKDA+Yz9sOm0pZD1LZihhLGQsYyxkLmxpbmU9PWIubGluZT9mOm51bGwpO3JldHVybiBkP0JiKGEsZCxiLGMsZSk6bnVsbH19fXJldHVybiBifWZ1bmN0aW9uIFZjKGEsYixkLGMsZSl7Yz1jfHwxO2I9XG5CYihhLGIsZCxjLGUpfHwhZSYmQmIoYSxiLGQsYywhMCl8fEJiKGEsYixkLC1jLGUpfHwhZSYmQmIoYSxiLGQsLWMsITApO3JldHVybiBiP2I6KGEuY2FudEVkaXQ9ITAsdChhLmZpcnN0LDApKX1mdW5jdGlvbiBLZihhLGIsZCxjKXtyZXR1cm4gMD5kJiYwPT1iLmNoP2IubGluZT5hLmZpcnN0P0MoYSx0KGIubGluZS0xKSk6bnVsbDowPGQmJmIuY2g9PShjfHx3KGEsYi5saW5lKSkudGV4dC5sZW5ndGg/Yi5saW5lPGEuZmlyc3QrYS5zaXplLTE/dChiLmxpbmUrMSwwKTpudWxsOm5ldyB0KGIubGluZSxiLmNoK2QpfWZ1bmN0aW9uIExmKGEpe2Euc2V0U2VsZWN0aW9uKHQoYS5maXJzdExpbmUoKSwwKSx0KGEubGFzdExpbmUoKSksSWEpfWZ1bmN0aW9uIE1mKGEsYixkKXt2YXIgYz17Y2FuY2VsZWQ6ITEsZnJvbTpiLmZyb20sdG86Yi50byx0ZXh0OmIudGV4dCxvcmlnaW46Yi5vcmlnaW4sY2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIGMuY2FuY2VsZWQ9ITB9fTtkJiYoYy51cGRhdGU9XG5mdW5jdGlvbihlLGYsZyxoKXtlJiYoYy5mcm9tPUMoYSxlKSk7ZiYmKGMudG89QyhhLGYpKTtnJiYoYy50ZXh0PWcpO3ZvaWQgMCE9PWgmJihjLm9yaWdpbj1oKX0pO1coYSxcImJlZm9yZUNoYW5nZVwiLGEsYyk7YS5jbSYmVyhhLmNtLFwiYmVmb3JlQ2hhbmdlXCIsYS5jbSxjKTtyZXR1cm4gYy5jYW5jZWxlZD8oYS5jbSYmKGEuY20uY3VyT3AudXBkYXRlSW5wdXQ9MiksbnVsbCk6e2Zyb206Yy5mcm9tLHRvOmMudG8sdGV4dDpjLnRleHQsb3JpZ2luOmMub3JpZ2lufX1mdW5jdGlvbiBDYihhLGIsZCl7aWYoYS5jbSl7aWYoIWEuY20uY3VyT3ApcmV0dXJuIGJhKGEuY20sQ2IpKGEsYixkKTtpZihhLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpcmV0dXJufWlmKHhhKGEsXCJiZWZvcmVDaGFuZ2VcIil8fGEuY20mJnhhKGEuY20sXCJiZWZvcmVDaGFuZ2VcIikpaWYoYj1NZihhLGIsITApLCFiKXJldHVybjtpZihkPU5mJiYhZCYmSGcoYSxiLmZyb20sYi50bykpZm9yKHZhciBjPWQubGVuZ3RoLTE7MDw9XG5jOy0tYylPZihhLHtmcm9tOmRbY10uZnJvbSx0bzpkW2NdLnRvLHRleHQ6Yz9bXCJcIl06Yi50ZXh0LG9yaWdpbjpiLm9yaWdpbn0pO2Vsc2UgT2YoYSxiKX1mdW5jdGlvbiBPZihhLGIpe2lmKDEhPWIudGV4dC5sZW5ndGh8fFwiXCIhPWIudGV4dFswXXx8MCE9QihiLmZyb20sYi50bykpe3ZhciBkPVpkKGEsYik7RGYoYSxiLGQsYS5jbT9hLmNtLmN1ck9wLmlkOk5hTik7Y2MoYSxiLGQsdmQoYSxiKSk7dmFyIGM9W107VWEoYSxmdW5jdGlvbihlLGYpe2Z8fC0xIT1lYShjLGUuaGlzdG9yeSl8fChQZihlLmhpc3RvcnksYiksYy5wdXNoKGUuaGlzdG9yeSkpO2NjKGUsYixudWxsLHZkKGUsYikpfSl9fWZ1bmN0aW9uIFdjKGEsYixkKXt2YXIgYz1hLmNtJiZhLmNtLnN0YXRlLnN1cHByZXNzRWRpdHM7aWYoIWN8fGQpe2Zvcih2YXIgZT1hLmhpc3RvcnksZixnPWEuc2VsLGg9XCJ1bmRvXCI9PWI/ZS5kb25lOmUudW5kb25lLGs9XCJ1bmRvXCI9PWI/ZS51bmRvbmU6ZS5kb25lLGw9MDtsPGgubGVuZ3RoJiZcbihmPWhbbF0sZD8hZi5yYW5nZXN8fGYuZXF1YWxzKGEuc2VsKTpmLnJhbmdlcyk7bCsrKTtpZihsIT1oLmxlbmd0aCl7Zm9yKGUubGFzdE9yaWdpbj1lLmxhc3RTZWxPcmlnaW49bnVsbDs7KWlmKGY9aC5wb3AoKSxmLnJhbmdlcyl7U2MoZixrKTtpZihkJiYhZi5lcXVhbHMoYS5zZWwpKXtkYShhLGYse2NsZWFyUmVkbzohMX0pO3JldHVybn1nPWZ9ZWxzZXtpZihjKXtoLnB1c2goZik7cmV0dXJufWJyZWFrfXZhciBtPVtdO1NjKGcsayk7ay5wdXNoKHtjaGFuZ2VzOm0sZ2VuZXJhdGlvbjplLmdlbmVyYXRpb259KTtlLmdlbmVyYXRpb249Zi5nZW5lcmF0aW9ufHwrK2UubWF4R2VuZXJhdGlvbjt2YXIgbj14YShhLFwiYmVmb3JlQ2hhbmdlXCIpfHxhLmNtJiZ4YShhLmNtLFwiYmVmb3JlQ2hhbmdlXCIpO2Q9ZnVuY3Rpb24ocCl7dmFyIHE9Zi5jaGFuZ2VzW3BdO3Eub3JpZ2luPWI7aWYobiYmIU1mKGEscSwhMSkpcmV0dXJuIGgubGVuZ3RoPTAse307bS5wdXNoKGJlKGEscSkpO3ZhciByPXA/XG5aZChhLHEpOkooaCk7Y2MoYSxxLHIsRWYoYSxxKSk7IXAmJmEuY20mJmEuY20uc2Nyb2xsSW50b1ZpZXcoe2Zyb206cS5mcm9tLHRvOlRhKHEpfSk7dmFyIHU9W107VWEoYSxmdW5jdGlvbihBLFkpe1l8fC0xIT1lYSh1LEEuaGlzdG9yeSl8fChQZihBLmhpc3RvcnkscSksdS5wdXNoKEEuaGlzdG9yeSkpO2NjKEEscSxudWxsLEVmKEEscSkpfSl9O2ZvcihjPWYuY2hhbmdlcy5sZW5ndGgtMTswPD1jOy0tYylpZihlPWQoYykpcmV0dXJuIGUudn19fWZ1bmN0aW9uIFFmKGEsYil7aWYoMCE9YiYmKGEuZmlyc3QrPWIsYS5zZWw9bmV3IHZhKHdjKGEuc2VsLnJhbmdlcyxmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkodChlLmFuY2hvci5saW5lK2IsZS5hbmNob3IuY2gpLHQoZS5oZWFkLmxpbmUrYixlLmhlYWQuY2gpKX0pLGEuc2VsLnByaW1JbmRleCksYS5jbSkpe21hKGEuY20sYS5maXJzdCxhLmZpcnN0LWIsYik7Zm9yKHZhciBkPWEuY20uZGlzcGxheSxjPWQudmlld0Zyb207YzxkLnZpZXdUbztjKyspU2EoYS5jbSxcbmMsXCJndXR0ZXJcIil9fWZ1bmN0aW9uIGNjKGEsYixkLGMpe2lmKGEuY20mJiFhLmNtLmN1ck9wKXJldHVybiBiYShhLmNtLGNjKShhLGIsZCxjKTtpZihiLnRvLmxpbmU8YS5maXJzdClRZihhLGIudGV4dC5sZW5ndGgtMS0oYi50by5saW5lLWIuZnJvbS5saW5lKSk7ZWxzZSBpZighKGIuZnJvbS5saW5lPmEubGFzdExpbmUoKSkpe2lmKGIuZnJvbS5saW5lPGEuZmlyc3Qpe3ZhciBlPWIudGV4dC5sZW5ndGgtMS0oYS5maXJzdC1iLmZyb20ubGluZSk7UWYoYSxlKTtiPXtmcm9tOnQoYS5maXJzdCwwKSx0bzp0KGIudG8ubGluZStlLGIudG8uY2gpLHRleHQ6W0ooYi50ZXh0KV0sb3JpZ2luOmIub3JpZ2lufX1lPWEubGFzdExpbmUoKTtiLnRvLmxpbmU+ZSYmKGI9e2Zyb206Yi5mcm9tLHRvOnQoZSx3KGEsZSkudGV4dC5sZW5ndGgpLHRleHQ6W2IudGV4dFswXV0sb3JpZ2luOmIub3JpZ2lufSk7Yi5yZW1vdmVkPWFiKGEsYi5mcm9tLGIudG8pO2R8fChkPVpkKGEsYikpO2EuY20/YmgoYS5jbSxcbmIsYyk6YWUoYSxiLGMpO1VjKGEsZCxJYSk7YS5jYW50RWRpdCYmVmMoYSx0KGEuZmlyc3RMaW5lKCksMCkpJiYoYS5jYW50RWRpdD0hMSl9fWZ1bmN0aW9uIGJoKGEsYixkKXt2YXIgYz1hLmRvYyxlPWEuZGlzcGxheSxmPWIuZnJvbSxnPWIudG8saD0hMSxrPWYubGluZTthLm9wdGlvbnMubGluZVdyYXBwaW5nfHwoaz1OKHphKHcoYyxmLmxpbmUpKSksYy5pdGVyKGssZy5saW5lKzEsZnVuY3Rpb24obCl7aWYobD09ZS5tYXhMaW5lKXJldHVybiBoPSEwfSkpOy0xPGMuc2VsLmNvbnRhaW5zKGIuZnJvbSxiLnRvKSYmdGUoYSk7YWUoYyxiLGQsZWYoYSkpO2Eub3B0aW9ucy5saW5lV3JhcHBpbmd8fChjLml0ZXIoayxmLmxpbmUrYi50ZXh0Lmxlbmd0aCxmdW5jdGlvbihsKXt2YXIgbT1FYyhsKTttPmUubWF4TGluZUxlbmd0aCYmKGUubWF4TGluZT1sLGUubWF4TGluZUxlbmd0aD1tLGUubWF4TGluZUNoYW5nZWQ9ITAsaD0hMSl9KSxoJiYoYS5jdXJPcC51cGRhdGVNYXhMaW5lPSEwKSk7XG5HZyhjLGYubGluZSk7WWIoYSw0MDApO2Q9Yi50ZXh0Lmxlbmd0aC0oZy5saW5lLWYubGluZSktMTtiLmZ1bGw/bWEoYSk6Zi5saW5lIT1nLmxpbmV8fDEhPWIudGV4dC5sZW5ndGh8fHlmKGEuZG9jLGIpP21hKGEsZi5saW5lLGcubGluZSsxLGQpOlNhKGEsZi5saW5lLFwidGV4dFwiKTtkPXhhKGEsXCJjaGFuZ2VzXCIpO2lmKChjPXhhKGEsXCJjaGFuZ2VcIikpfHxkKWI9e2Zyb206Zix0bzpnLHRleHQ6Yi50ZXh0LHJlbW92ZWQ6Yi5yZW1vdmVkLG9yaWdpbjpiLm9yaWdpbn0sYyYmYWEoYSxcImNoYW5nZVwiLGEsYiksZCYmKGEuY3VyT3AuY2hhbmdlT2Jqc3x8KGEuY3VyT3AuY2hhbmdlT2Jqcz1bXSkpLnB1c2goYik7YS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51PW51bGx9ZnVuY3Rpb24gRGIoYSxiLGQsYyxlKXtjfHwoYz1kKTswPkIoYyxkKSYmKGM9W2MsZF0sZD1jWzBdLGM9Y1sxXSk7XCJzdHJpbmdcIj09dHlwZW9mIGImJihiPWEuc3BsaXRMaW5lcyhiKSk7Q2IoYSx7ZnJvbTpkLHRvOmMsXG50ZXh0OmIsb3JpZ2luOmV9KX1mdW5jdGlvbiBSZihhLGIsZCxjKXtkPGEubGluZT9hLmxpbmUrPWM6YjxhLmxpbmUmJihhLmxpbmU9YixhLmNoPTApfWZ1bmN0aW9uIFNmKGEsYixkLGMpe2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7KytlKXt2YXIgZj1hW2VdLGc9ITA7aWYoZi5yYW5nZXMpZm9yKGYuY29waWVkfHwoZj1hW2VdPWYuZGVlcENvcHkoKSxmLmNvcGllZD0hMCksZz0wO2c8Zi5yYW5nZXMubGVuZ3RoO2crKylSZihmLnJhbmdlc1tnXS5hbmNob3IsYixkLGMpLFJmKGYucmFuZ2VzW2ddLmhlYWQsYixkLGMpO2Vsc2V7Zm9yKHZhciBoPTA7aDxmLmNoYW5nZXMubGVuZ3RoOysraCl7dmFyIGs9Zi5jaGFuZ2VzW2hdO2lmKGQ8ay5mcm9tLmxpbmUpay5mcm9tPXQoay5mcm9tLmxpbmUrYyxrLmZyb20uY2gpLGsudG89dChrLnRvLmxpbmUrYyxrLnRvLmNoKTtlbHNlIGlmKGI8PWsudG8ubGluZSl7Zz0hMTticmVha319Z3x8KGEuc3BsaWNlKDAsZSsxKSxlPTApfX19ZnVuY3Rpb24gUGYoYSxcbmIpe3ZhciBkPWIuZnJvbS5saW5lLGM9Yi50by5saW5lO2I9Yi50ZXh0Lmxlbmd0aC0oYy1kKS0xO1NmKGEuZG9uZSxkLGMsYik7U2YoYS51bmRvbmUsZCxjLGIpfWZ1bmN0aW9uIGRjKGEsYixkLGMpe3ZhciBlPWIsZj1iO1wibnVtYmVyXCI9PXR5cGVvZiBiP2Y9dyhhLE1hdGgubWF4KGEuZmlyc3QsTWF0aC5taW4oYixhLmZpcnN0K2Euc2l6ZS0xKSkpOmU9TihiKTtpZihudWxsPT1lKXJldHVybiBudWxsO2MoZixlKSYmYS5jbSYmU2EoYS5jbSxlLGQpO3JldHVybiBmfWZ1bmN0aW9uIGVjKGEpe3RoaXMubGluZXM9YTt0aGlzLnBhcmVudD1udWxsO2Zvcih2YXIgYj0wLGQ9MDtkPGEubGVuZ3RoOysrZClhW2RdLnBhcmVudD10aGlzLGIrPWFbZF0uaGVpZ2h0O3RoaXMuaGVpZ2h0PWJ9ZnVuY3Rpb24gZmMoYSl7dGhpcy5jaGlsZHJlbj1hO2Zvcih2YXIgYj0wLGQ9MCxjPTA7YzxhLmxlbmd0aDsrK2Mpe3ZhciBlPWFbY107Yis9ZS5jaHVua1NpemUoKTtkKz1lLmhlaWdodDtlLnBhcmVudD1cbnRoaXN9dGhpcy5zaXplPWI7dGhpcy5oZWlnaHQ9ZDt0aGlzLnBhcmVudD1udWxsfWZ1bmN0aW9uIGNoKGEsYixkLGMpe3ZhciBlPW5ldyBnYyhhLGQsYyksZj1hLmNtO2YmJmUubm9IU2Nyb2xsJiYoZi5kaXNwbGF5LmFsaWduV2lkZ2V0cz0hMCk7ZGMoYSxiLFwid2lkZ2V0XCIsZnVuY3Rpb24oZyl7dmFyIGg9Zy53aWRnZXRzfHwoZy53aWRnZXRzPVtdKTtudWxsPT1lLmluc2VydEF0P2gucHVzaChlKTpoLnNwbGljZShNYXRoLm1pbihoLmxlbmd0aCxNYXRoLm1heCgwLGUuaW5zZXJ0QXQpKSwwLGUpO2UubGluZT1nO2YmJiFQYShhLGcpJiYoaD1HYShnKTxhLnNjcm9sbFRvcCxFYShnLGcuaGVpZ2h0K1RiKGUpKSxoJiZOYyhmLGUuaGVpZ2h0KSxmLmN1ck9wLmZvcmNlVXBkYXRlPSEwKTtyZXR1cm4hMH0pO2YmJmFhKGYsXCJsaW5lV2lkZ2V0QWRkZWRcIixmLGUsXCJudW1iZXJcIj09dHlwZW9mIGI/YjpOKGIpKTtyZXR1cm4gZX1mdW5jdGlvbiBFYihhLGIsZCxjLGUpe2lmKGMmJmMuc2hhcmVkKXJldHVybiBkaChhLFxuYixkLGMsZSk7aWYoYS5jbSYmIWEuY20uY3VyT3ApcmV0dXJuIGJhKGEuY20sRWIpKGEsYixkLGMsZSk7dmFyIGY9bmV3IFZhKGEsZSk7ZT1CKGIsZCk7YyYmWmEoYyxmLCExKTtpZigwPGV8fDA9PWUmJiExIT09Zi5jbGVhcldoZW5FbXB0eSlyZXR1cm4gZjtmLnJlcGxhY2VkV2l0aCYmKGYuY29sbGFwc2VkPSEwLGYud2lkZ2V0Tm9kZT1NKFwic3BhblwiLFtmLnJlcGxhY2VkV2l0aF0sXCJDb2RlTWlycm9yLXdpZGdldFwiKSxjLmhhbmRsZU1vdXNlRXZlbnRzfHxmLndpZGdldE5vZGUuc2V0QXR0cmlidXRlKFwiY20taWdub3JlLWV2ZW50c1wiLFwidHJ1ZVwiKSxjLmluc2VydExlZnQmJihmLndpZGdldE5vZGUuaW5zZXJ0TGVmdD0hMCkpO2lmKGYuY29sbGFwc2VkKXtpZihJZShhLGIubGluZSxiLGQsZil8fGIubGluZSE9ZC5saW5lJiZJZShhLGQubGluZSxiLGQsZikpdGhyb3cgRXJyb3IoXCJJbnNlcnRpbmcgY29sbGFwc2VkIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lXCIpO1xuS2E9ITB9Zi5hZGRUb0hpc3RvcnkmJkRmKGEse2Zyb206Yix0bzpkLG9yaWdpbjpcIm1hcmtUZXh0XCJ9LGEuc2VsLE5hTik7dmFyIGc9Yi5saW5lLGg9YS5jbSxrO2EuaXRlcihnLGQubGluZSsxLGZ1bmN0aW9uKGwpe2gmJmYuY29sbGFwc2VkJiYhaC5vcHRpb25zLmxpbmVXcmFwcGluZyYmemEobCk9PWguZGlzcGxheS5tYXhMaW5lJiYoaz0hMCk7Zi5jb2xsYXBzZWQmJmchPWIubGluZSYmRWEobCwwKTt2YXIgbT1uZXcgRGMoZixnPT1iLmxpbmU/Yi5jaDpudWxsLGc9PWQubGluZT9kLmNoOm51bGwpLG49YS5jbSYmYS5jbS5jdXJPcDsobj1uJiZ3aW5kb3cuV2Vha1NldCYmKG4ubWFya2VkU3BhbnN8fChuLm1hcmtlZFNwYW5zPW5ldyBXZWFrU2V0KSkpJiZsLm1hcmtlZFNwYW5zJiZuLmhhcyhsLm1hcmtlZFNwYW5zKT9sLm1hcmtlZFNwYW5zLnB1c2gobSk6KGwubWFya2VkU3BhbnM9bC5tYXJrZWRTcGFucz9sLm1hcmtlZFNwYW5zLmNvbmNhdChbbV0pOlttXSxuJiZuLmFkZChsLm1hcmtlZFNwYW5zKSk7XG5tLm1hcmtlci5hdHRhY2hMaW5lKGwpOysrZ30pO2YuY29sbGFwc2VkJiZhLml0ZXIoYi5saW5lLGQubGluZSsxLGZ1bmN0aW9uKGwpe1BhKGEsbCkmJkVhKGwsMCl9KTtmLmNsZWFyT25FbnRlciYmeihmLFwiYmVmb3JlQ3Vyc29yRW50ZXJcIixmdW5jdGlvbigpe3JldHVybiBmLmNsZWFyKCl9KTtmLnJlYWRPbmx5JiYoTmY9ITAsKGEuaGlzdG9yeS5kb25lLmxlbmd0aHx8YS5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpJiZhLmNsZWFySGlzdG9yeSgpKTtmLmNvbGxhcHNlZCYmKGYuaWQ9KytUZixmLmF0b21pYz0hMCk7aWYoaCl7ayYmKGguY3VyT3AudXBkYXRlTWF4TGluZT0hMCk7aWYoZi5jb2xsYXBzZWQpbWEoaCxiLmxpbmUsZC5saW5lKzEpO2Vsc2UgaWYoZi5jbGFzc05hbWV8fGYuc3RhcnRTdHlsZXx8Zi5lbmRTdHlsZXx8Zi5jc3N8fGYuYXR0cmlidXRlc3x8Zi50aXRsZSlmb3IoYz1iLmxpbmU7Yzw9ZC5saW5lO2MrKylTYShoLGMsXCJ0ZXh0XCIpO2YuYXRvbWljJiZKZihoLmRvYyk7XG5hYShoLFwibWFya2VyQWRkZWRcIixoLGYpfXJldHVybiBmfWZ1bmN0aW9uIGRoKGEsYixkLGMsZSl7Yz1aYShjKTtjLnNoYXJlZD0hMTt2YXIgZj1bRWIoYSxiLGQsYyxlKV0sZz1mWzBdLGg9Yy53aWRnZXROb2RlO1VhKGEsZnVuY3Rpb24oayl7aCYmKGMud2lkZ2V0Tm9kZT1oLmNsb25lTm9kZSghMCkpO2YucHVzaChFYihrLEMoayxiKSxDKGssZCksYyxlKSk7Zm9yKHZhciBsPTA7bDxrLmxpbmtlZC5sZW5ndGg7KytsKWlmKGsubGlua2VkW2xdLmlzUGFyZW50KXJldHVybjtnPUooZil9KTtyZXR1cm4gbmV3IGhjKGYsZyl9ZnVuY3Rpb24gVWYoYSl7cmV0dXJuIGEuZmluZE1hcmtzKHQoYS5maXJzdCwwKSxhLmNsaXBQb3ModChhLmxhc3RMaW5lKCkpKSxmdW5jdGlvbihiKXtyZXR1cm4gYi5wYXJlbnR9KX1mdW5jdGlvbiBlaChhKXtmb3IodmFyIGI9ZnVuY3Rpb24oYyl7Yz1hW2NdO3ZhciBlPVtjLnByaW1hcnkuZG9jXTtVYShjLnByaW1hcnkuZG9jLGZ1bmN0aW9uKGgpe3JldHVybiBlLnB1c2goaCl9KTtcbmZvcih2YXIgZj0wO2Y8Yy5tYXJrZXJzLmxlbmd0aDtmKyspe3ZhciBnPWMubWFya2Vyc1tmXTstMT09ZWEoZSxnLmRvYykmJihnLnBhcmVudD1udWxsLGMubWFya2Vycy5zcGxpY2UoZi0tLDEpKX19LGQ9MDtkPGEubGVuZ3RoO2QrKyliKGQpfWZ1bmN0aW9uIGZoKGEpe3ZhciBiPXRoaXM7VmYoYik7aWYoIVooYixhKSYmIUxhKGIuZGlzcGxheSxhKSl7bGEoYSk7RyYmKFdmPStuZXcgRGF0ZSk7dmFyIGQ9Z2IoYixhLCEwKSxjPWEuZGF0YVRyYW5zZmVyLmZpbGVzO2lmKGQmJiFiLmlzUmVhZE9ubHkoKSlpZihjJiZjLmxlbmd0aCYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlKWZvcih2YXIgZT1jLmxlbmd0aCxmPUFycmF5KGUpLGc9MCxoPWZ1bmN0aW9uKCl7KytnPT1lJiZiYShiLGZ1bmN0aW9uKCl7ZD1DKGIuZG9jLGQpO3ZhciBtPXtmcm9tOmQsdG86ZCx0ZXh0OmIuZG9jLnNwbGl0TGluZXMoZi5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW59KS5qb2luKGIuZG9jLmxpbmVTZXBhcmF0b3IoKSkpLFxub3JpZ2luOlwicGFzdGVcIn07Q2IoYi5kb2MsbSk7R2YoYi5kb2MsT2EoQyhiLmRvYyxkKSxDKGIuZG9jLFRhKG0pKSkpfSkoKX0saz1mdW5jdGlvbihtLG4pe2lmKGIub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXMmJi0xPT1lYShiLm9wdGlvbnMuYWxsb3dEcm9wRmlsZVR5cGVzLG0udHlwZSkpaCgpO2Vsc2V7dmFyIHA9bmV3IEZpbGVSZWFkZXI7cC5vbmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGgoKX07cC5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgcT1wLnJlc3VsdDsvW1xceDAwLVxceDA4XFx4MGUtXFx4MWZdezJ9Ly50ZXN0KHEpfHwoZltuXT1xKTtoKCl9O3AucmVhZEFzVGV4dChtKX19LGw9MDtsPGMubGVuZ3RoO2wrKylrKGNbbF0sbCk7ZWxzZSBpZihiLnN0YXRlLmRyYWdnaW5nVGV4dCYmLTE8Yi5kb2Muc2VsLmNvbnRhaW5zKGQpKWIuc3RhdGUuZHJhZ2dpbmdUZXh0KGEpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gYi5kaXNwbGF5LmlucHV0LmZvY3VzKCl9LDIwKTtlbHNlIHRyeXtpZihrPVxuYS5kYXRhVHJhbnNmZXIuZ2V0RGF0YShcIlRleHRcIikpe2Iuc3RhdGUuZHJhZ2dpbmdUZXh0JiYhYi5zdGF0ZS5kcmFnZ2luZ1RleHQuY29weSYmKGw9Yi5saXN0U2VsZWN0aW9ucygpKTtVYyhiLmRvYyxPYShkLGQpKTtpZihsKWZvcihjPTA7YzxsLmxlbmd0aDsrK2MpRGIoYi5kb2MsXCJcIixsW2NdLmFuY2hvcixsW2NdLmhlYWQsXCJkcmFnXCIpO2IucmVwbGFjZVNlbGVjdGlvbihrLFwiYXJvdW5kXCIsXCJwYXN0ZVwiKTtiLmRpc3BsYXkuaW5wdXQuZm9jdXMoKX19Y2F0Y2gobSl7fX19ZnVuY3Rpb24gVmYoYSl7YS5kaXNwbGF5LmRyYWdDdXJzb3ImJihhLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKGEuZGlzcGxheS5kcmFnQ3Vyc29yKSxhLmRpc3BsYXkuZHJhZ0N1cnNvcj1udWxsKX1mdW5jdGlvbiBYZihhKXtpZihkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtmb3IodmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIkNvZGVNaXJyb3JcIiksZD1bXSxjPVxuMDtjPGIubGVuZ3RoO2MrKyl7dmFyIGU9YltjXS5Db2RlTWlycm9yO2UmJmQucHVzaChlKX1kLmxlbmd0aCYmZFswXS5vcGVyYXRpb24oZnVuY3Rpb24oKXtmb3IodmFyIGY9MDtmPGQubGVuZ3RoO2YrKylhKGRbZl0pfSl9fWZ1bmN0aW9uIGdoKCl7dmFyIGE7eih3aW5kb3csXCJyZXNpemVcIixmdW5jdGlvbigpe251bGw9PWEmJihhPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthPW51bGw7WGYoaGgpfSwxMDApKX0pO3ood2luZG93LFwiYmx1clwiLGZ1bmN0aW9uKCl7cmV0dXJuIFhmKHdiKX0pfWZ1bmN0aW9uIGhoKGEpe3ZhciBiPWEuZGlzcGxheTtiLmNhY2hlZENoYXJXaWR0aD1iLmNhY2hlZFRleHRIZWlnaHQ9Yi5jYWNoZWRQYWRkaW5nSD1udWxsO2Iuc2Nyb2xsYmFyc0NsaXBwZWQ9ITE7YS5zZXRTaXplKCl9ZnVuY3Rpb24gaWgoYSl7dmFyIGI9YS5zcGxpdCgvLSg/ISQpLyk7YT1iW2IubGVuZ3RoLTFdO2Zvcih2YXIgZCxjLGUsZixnPTA7ZzxiLmxlbmd0aC0xO2crKyl7dmFyIGg9YltnXTtcbmlmKC9eKGNtZHxtZXRhfG0pJC9pLnRlc3QoaCkpZj0hMDtlbHNlIGlmKC9eYShsdCk/JC9pLnRlc3QoaCkpZD0hMDtlbHNlIGlmKC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KGgpKWM9ITA7ZWxzZSBpZigvXnMoaGlmdCk/JC9pLnRlc3QoaCkpZT0hMDtlbHNlIHRocm93IEVycm9yKFwiVW5yZWNvZ25pemVkIG1vZGlmaWVyIG5hbWU6IFwiK2gpO31kJiYoYT1cIkFsdC1cIithKTtjJiYoYT1cIkN0cmwtXCIrYSk7ZiYmKGE9XCJDbWQtXCIrYSk7ZSYmKGE9XCJTaGlmdC1cIithKTtyZXR1cm4gYX1mdW5jdGlvbiBqaChhKXt2YXIgYj17fSxkO2ZvcihkIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShkKSl7dmFyIGM9YVtkXTtpZighL14obmFtZXxmYWxsdGhyb3VnaHwoZGV8YXQpdGFjaCkkLy50ZXN0KGQpKXtpZihcIi4uLlwiIT1jKWZvcih2YXIgZT13YyhkLnNwbGl0KFwiIFwiKSxpaCksZj0wO2Y8ZS5sZW5ndGg7ZisrKXtpZihmPT1lLmxlbmd0aC0xKXt2YXIgZz1lLmpvaW4oXCIgXCIpO3ZhciBoPWN9ZWxzZSBnPVxuZS5zbGljZSgwLGYrMSkuam9pbihcIiBcIiksaD1cIi4uLlwiO3ZhciBrPWJbZ107aWYoIWspYltnXT1oO2Vsc2UgaWYoayE9aCl0aHJvdyBFcnJvcihcIkluY29uc2lzdGVudCBiaW5kaW5ncyBmb3IgXCIrZyk7fWRlbGV0ZSBhW2RdfX1mb3IodmFyIGwgaW4gYilhW2xdPWJbbF07cmV0dXJuIGF9ZnVuY3Rpb24gRmIoYSxiLGQsYyl7Yj1YYyhiKTt2YXIgZT1iLmNhbGw/Yi5jYWxsKGEsYyk6YlthXTtpZighMT09PWUpcmV0dXJuXCJub3RoaW5nXCI7aWYoXCIuLi5cIj09PWUpcmV0dXJuXCJtdWx0aVwiO2lmKG51bGwhPWUmJmQoZSkpcmV0dXJuXCJoYW5kbGVkXCI7aWYoYi5mYWxsdGhyb3VnaCl7aWYoXCJbb2JqZWN0IEFycmF5XVwiIT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYi5mYWxsdGhyb3VnaCkpcmV0dXJuIEZiKGEsYi5mYWxsdGhyb3VnaCxkLGMpO2ZvcihlPTA7ZTxiLmZhbGx0aHJvdWdoLmxlbmd0aDtlKyspe3ZhciBmPUZiKGEsYi5mYWxsdGhyb3VnaFtlXSxkLGMpO2lmKGYpcmV0dXJuIGZ9fX1cbmZ1bmN0aW9uIFlmKGEpe2E9XCJzdHJpbmdcIj09dHlwZW9mIGE/YTpXYVthLmtleUNvZGVdO3JldHVyblwiQ3RybFwiPT1hfHxcIkFsdFwiPT1hfHxcIlNoaWZ0XCI9PWF8fFwiTW9kXCI9PWF9ZnVuY3Rpb24gWmYoYSxiLGQpe3ZhciBjPWE7Yi5hbHRLZXkmJlwiQWx0XCIhPWMmJihhPVwiQWx0LVwiK2EpOygkZj9iLm1ldGFLZXk6Yi5jdHJsS2V5KSYmXCJDdHJsXCIhPWMmJihhPVwiQ3RybC1cIithKTsoJGY/Yi5jdHJsS2V5OmIubWV0YUtleSkmJlwiTW9kXCIhPWMmJihhPVwiQ21kLVwiK2EpOyFkJiZiLnNoaWZ0S2V5JiZcIlNoaWZ0XCIhPWMmJihhPVwiU2hpZnQtXCIrYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYWcoYSxiKXtpZihDYSYmMzQ9PWEua2V5Q29kZSYmYVtcImNoYXJcIl0pcmV0dXJuITE7dmFyIGQ9V2FbYS5rZXlDb2RlXTtpZihudWxsPT1kfHxhLmFsdEdyYXBoS2V5KXJldHVybiExOzM9PWEua2V5Q29kZSYmYS5jb2RlJiYoZD1hLmNvZGUpO3JldHVybiBaZihkLGEsYil9ZnVuY3Rpb24gWGMoYSl7cmV0dXJuXCJzdHJpbmdcIj09XG50eXBlb2YgYT9pY1thXTphfWZ1bmN0aW9uIEdiKGEsYil7Zm9yKHZhciBkPWEuZG9jLnNlbC5yYW5nZXMsYz1bXSxlPTA7ZTxkLmxlbmd0aDtlKyspe2Zvcih2YXIgZj1iKGRbZV0pO2MubGVuZ3RoJiYwPj1CKGYuZnJvbSxKKGMpLnRvKTspe3ZhciBnPWMucG9wKCk7aWYoMD5CKGcuZnJvbSxmLmZyb20pKXtmLmZyb209Zy5mcm9tO2JyZWFrfX1jLnB1c2goZil9cmEoYSxmdW5jdGlvbigpe2Zvcih2YXIgaD1jLmxlbmd0aC0xOzA8PWg7aC0tKURiKGEuZG9jLFwiXCIsY1toXS5mcm9tLGNbaF0udG8sXCIrZGVsZXRlXCIpO3hiKGEpfSl9ZnVuY3Rpb24gZWUoYSxiLGQpe2I9c2UoYS50ZXh0LGIrZCxkKTtyZXR1cm4gMD5ifHxiPmEudGV4dC5sZW5ndGg/bnVsbDpifWZ1bmN0aW9uIGZlKGEsYixkKXthPWVlKGEsYi5jaCxkKTtyZXR1cm4gbnVsbD09YT9udWxsOm5ldyB0KGIubGluZSxhLDA+ZD9cImFmdGVyXCI6XCJiZWZvcmVcIil9ZnVuY3Rpb24gZ2UoYSxiLGQsYyxlKXtpZihhJiYoXCJydGxcIj09XG5iLmRvYy5kaXJlY3Rpb24mJihlPS1lKSxhPUphKGQsYi5kb2MuZGlyZWN0aW9uKSkpe2E9MD5lP0ooYSk6YVswXTt2YXIgZj0wPmU9PSgxPT1hLmxldmVsKT9cImFmdGVyXCI6XCJiZWZvcmVcIjtpZigwPGEubGV2ZWx8fFwicnRsXCI9PWIuZG9jLmRpcmVjdGlvbil7dmFyIGc9ZWIoYixkKTt2YXIgaD0wPmU/ZC50ZXh0Lmxlbmd0aC0xOjA7dmFyIGs9QWEoYixnLGgpLnRvcDtoPUpiKGZ1bmN0aW9uKGwpe3JldHVybiBBYShiLGcsbCkudG9wPT1rfSwwPmU9PSgxPT1hLmxldmVsKT9hLmZyb206YS50by0xLGgpO1wiYmVmb3JlXCI9PWYmJihoPWVlKGQsaCwxKSl9ZWxzZSBoPTA+ZT9hLnRvOmEuZnJvbTtyZXR1cm4gbmV3IHQoYyxoLGYpfXJldHVybiBuZXcgdChjLDA+ZT9kLnRleHQubGVuZ3RoOjAsMD5lP1wiYmVmb3JlXCI6XCJhZnRlclwiKX1mdW5jdGlvbiBraChhLGIsZCxjKXt2YXIgZT1KYShiLGEuZG9jLmRpcmVjdGlvbik7aWYoIWUpcmV0dXJuIGZlKGIsZCxjKTtkLmNoPj1iLnRleHQubGVuZ3RoP1xuKGQuY2g9Yi50ZXh0Lmxlbmd0aCxkLnN0aWNreT1cImJlZm9yZVwiKTowPj1kLmNoJiYoZC5jaD0wLGQuc3RpY2t5PVwiYWZ0ZXJcIik7dmFyIGY9S2IoZSxkLmNoLGQuc3RpY2t5KSxnPWVbZl07aWYoXCJsdHJcIj09YS5kb2MuZGlyZWN0aW9uJiYwPT1nLmxldmVsJTImJigwPGM/Zy50bz5kLmNoOmcuZnJvbTxkLmNoKSlyZXR1cm4gZmUoYixkLGMpO3ZhciBoPWZ1bmN0aW9uKHEscil7cmV0dXJuIGVlKGIscSBpbnN0YW5jZW9mIHQ/cS5jaDpxLHIpfSxrLGw9ZnVuY3Rpb24ocSl7aWYoIWEub3B0aW9ucy5saW5lV3JhcHBpbmcpcmV0dXJue2JlZ2luOjAsZW5kOmIudGV4dC5sZW5ndGh9O2s9a3x8ZWIoYSxiKTtyZXR1cm4gZGYoYSxiLGsscSl9LG09bChcImJlZm9yZVwiPT1kLnN0aWNreT9oKGQsLTEpOmQuY2gpO2lmKFwicnRsXCI9PWEuZG9jLmRpcmVjdGlvbnx8MT09Zy5sZXZlbCl7dmFyIG49MT09Zy5sZXZlbD09MD5jLHA9aChkLG4/MTotMSk7aWYobnVsbCE9cCYmKG4/cDw9Zy50byYmcDw9bS5lbmQ6XG5wPj1nLmZyb20mJnA+PW0uYmVnaW4pKXJldHVybiBuZXcgdChkLmxpbmUscCxuP1wiYmVmb3JlXCI6XCJhZnRlclwiKX1nPWZ1bmN0aW9uKHEscix1KXtmb3IodmFyIEE9ZnVuY3Rpb24oSyxRKXtyZXR1cm4gUT9uZXcgdChkLmxpbmUsaChLLDEpLFwiYmVmb3JlXCIpOm5ldyB0KGQubGluZSxLLFwiYWZ0ZXJcIil9OzA8PXEmJnE8ZS5sZW5ndGg7cSs9cil7dmFyIFk9ZVtxXSx4PTA8cj09KDEhPVkubGV2ZWwpLFA9eD91LmJlZ2luOmgodS5lbmQsLTEpO2lmKFkuZnJvbTw9UCYmUDxZLnRvKXJldHVybiBBKFAseCk7UD14P1kuZnJvbTpoKFkudG8sLTEpO2lmKHUuYmVnaW48PVAmJlA8dS5lbmQpcmV0dXJuIEEoUCx4KX19O2lmKGY9ZyhmK2MsYyxtKSlyZXR1cm4gZjttPTA8Yz9tLmVuZDpoKG0uYmVnaW4sLTEpO3JldHVybiBudWxsPT1tfHwwPGMmJm09PWIudGV4dC5sZW5ndGh8fCEoZj1nKDA8Yz8wOmUubGVuZ3RoLTEsYyxsKG0pKSk/bnVsbDpmfWZ1bmN0aW9uIGJnKGEsYil7dmFyIGQ9dyhhLmRvYyxcbmIpLGM9emEoZCk7YyE9ZCYmKGI9TihjKSk7cmV0dXJuIGdlKCEwLGEsYyxiLDEpfWZ1bmN0aW9uIGNnKGEsYil7dmFyIGQ9YmcoYSxiLmxpbmUpLGM9dyhhLmRvYyxkLmxpbmUpO2E9SmEoYyxhLmRvYy5kaXJlY3Rpb24pO3JldHVybiBhJiYwIT1hWzBdLmxldmVsP2Q6KGM9TWF0aC5tYXgoZC5jaCxjLnRleHQuc2VhcmNoKC9cXFMvKSksdChkLmxpbmUsYi5saW5lPT1kLmxpbmUmJmIuY2g8PWMmJmIuY2g/MDpjLGQuc3RpY2t5KSl9ZnVuY3Rpb24gWWMoYSxiLGQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiJiYoYj1qY1tiXSwhYikpcmV0dXJuITE7YS5kaXNwbGF5LmlucHV0LmVuc3VyZVBvbGxlZCgpO3ZhciBjPWEuZGlzcGxheS5zaGlmdCxlPSExO3RyeXthLmlzUmVhZE9ubHkoKSYmKGEuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMCksZCYmKGEuZGlzcGxheS5zaGlmdD0hMSksZT1iKGEpIT1aY31maW5hbGx5e2EuZGlzcGxheS5zaGlmdD1jLGEuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gZX1cbmZ1bmN0aW9uIGtjKGEsYixkLGMpe3ZhciBlPWEuc3RhdGUua2V5U2VxO2lmKGUpe2lmKFlmKGIpKXJldHVyblwiaGFuZGxlZFwiOy8nJC8udGVzdChiKT9hLnN0YXRlLmtleVNlcT1udWxsOmxoLnNldCg1MCxmdW5jdGlvbigpe2Euc3RhdGUua2V5U2VxPT1lJiYoYS5zdGF0ZS5rZXlTZXE9bnVsbCxhLmRpc3BsYXkuaW5wdXQucmVzZXQoKSl9KTtpZihkZyhhLGUrXCIgXCIrYixkLGMpKXJldHVybiEwfXJldHVybiBkZyhhLGIsZCxjKX1mdW5jdGlvbiBkZyhhLGIsZCxjKXthOntmb3IodmFyIGU9MDtlPGEuc3RhdGUua2V5TWFwcy5sZW5ndGg7ZSsrKXt2YXIgZj1GYihiLGEuc3RhdGUua2V5TWFwc1tlXSxjLGEpO2lmKGYpe2M9ZjticmVhayBhfX1jPWEub3B0aW9ucy5leHRyYUtleXMmJkZiKGIsYS5vcHRpb25zLmV4dHJhS2V5cyxjLGEpfHxGYihiLGEub3B0aW9ucy5rZXlNYXAsYyxhKX1cIm11bHRpXCI9PWMmJihhLnN0YXRlLmtleVNlcT1iKTtcImhhbmRsZWRcIj09YyYmYWEoYSxcImtleUhhbmRsZWRcIixcbmEsYixkKTtpZihcImhhbmRsZWRcIj09Y3x8XCJtdWx0aVwiPT1jKWxhKGQpLFFkKGEpO3JldHVybiEhY31mdW5jdGlvbiBlZyhhLGIpe3ZhciBkPWFnKGIsITApO3JldHVybiBkP2Iuc2hpZnRLZXkmJiFhLnN0YXRlLmtleVNlcT9rYyhhLFwiU2hpZnQtXCIrZCxiLGZ1bmN0aW9uKGMpe3JldHVybiBZYyhhLGMsITApfSl8fGtjKGEsZCxiLGZ1bmN0aW9uKGMpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBjPy9eZ29bQS1aXS8udGVzdChjKTpjLm1vdGlvbilyZXR1cm4gWWMoYSxjKX0pOmtjKGEsZCxiLGZ1bmN0aW9uKGMpe3JldHVybiBZYyhhLGMpfSk6ITF9ZnVuY3Rpb24gbWgoYSxiLGQpe3JldHVybiBrYyhhLFwiJ1wiK2QrXCInXCIsYixmdW5jdGlvbihjKXtyZXR1cm4gWWMoYSxjLCEwKX0pfWZ1bmN0aW9uIGZnKGEpe2lmKCFhLnRhcmdldHx8YS50YXJnZXQ9PXRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpKWlmKHRoaXMuY3VyT3AuZm9jdXM9a2EocWEodGhpcykpLCFaKHRoaXMsYSkpe0cmJjExPlxuVCYmMjc9PWEua2V5Q29kZSYmKGEucmV0dXJuVmFsdWU9ITEpO3ZhciBiPWEua2V5Q29kZTt0aGlzLmRpc3BsYXkuc2hpZnQ9MTY9PWJ8fGEuc2hpZnRLZXk7dmFyIGQ9ZWcodGhpcyxhKTtDYSYmKGhlPWQ/YjpudWxsLCFkJiY4OD09YiYmIW5oJiYoeWE/YS5tZXRhS2V5OmEuY3RybEtleSkmJnRoaXMucmVwbGFjZVNlbGVjdGlvbihcIlwiLG51bGwsXCJjdXRcIikpO01hJiYheWEmJiFkJiY0Nj09YiYmYS5zaGlmdEtleSYmIWEuY3RybEtleSYmZG9jdW1lbnQuZXhlY0NvbW1hbmQmJmRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY3V0XCIpOzE4IT1ifHwvXFxiQ29kZU1pcnJvci1jcm9zc2hhaXJcXGIvLnRlc3QodGhpcy5kaXNwbGF5LmxpbmVEaXYuY2xhc3NOYW1lKXx8b2godGhpcyl9fWZ1bmN0aW9uIG9oKGEpe2Z1bmN0aW9uIGIoYyl7MTghPWMua2V5Q29kZSYmYy5hbHRLZXl8fChqYihkLFwiQ29kZU1pcnJvci1jcm9zc2hhaXJcIiksdGEoZG9jdW1lbnQsXCJrZXl1cFwiLGIpLHRhKGRvY3VtZW50LFwibW91c2VvdmVyXCIsXG5iKSl9dmFyIGQ9YS5kaXNwbGF5LmxpbmVEaXY7WWEoZCxcIkNvZGVNaXJyb3ItY3Jvc3NoYWlyXCIpO3ooZG9jdW1lbnQsXCJrZXl1cFwiLGIpO3ooZG9jdW1lbnQsXCJtb3VzZW92ZXJcIixiKX1mdW5jdGlvbiBnZyhhKXsxNj09YS5rZXlDb2RlJiYodGhpcy5kb2Muc2VsLnNoaWZ0PSExKTtaKHRoaXMsYSl9ZnVuY3Rpb24gaGcoYSl7aWYoIShhLnRhcmdldCYmYS50YXJnZXQhPXRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpfHxMYSh0aGlzLmRpc3BsYXksYSl8fFoodGhpcyxhKXx8YS5jdHJsS2V5JiYhYS5hbHRLZXl8fHlhJiZhLm1ldGFLZXkpKXt2YXIgYj1hLmtleUNvZGUsZD1hLmNoYXJDb2RlO2lmKENhJiZiPT1oZSloZT1udWxsLGxhKGEpO2Vsc2UgaWYoIUNhfHxhLndoaWNoJiYhKDEwPmEud2hpY2gpfHwhZWcodGhpcyxhKSlpZihiPVN0cmluZy5mcm9tQ2hhckNvZGUobnVsbD09ZD9iOmQpLFwiXFxiXCIhPWImJiFtaCh0aGlzLGEsYikpdGhpcy5kaXNwbGF5LmlucHV0Lm9uS2V5UHJlc3MoYSl9fVxuZnVuY3Rpb24gcGgoYSxiKXt2YXIgZD0rbmV3IERhdGU7aWYobGMmJmxjLmNvbXBhcmUoZCxhLGIpKXJldHVybiBtYz1sYz1udWxsLFwidHJpcGxlXCI7aWYobWMmJm1jLmNvbXBhcmUoZCxhLGIpKXJldHVybiBsYz1uZXcgaWUoZCxhLGIpLG1jPW51bGwsXCJkb3VibGVcIjttYz1uZXcgaWUoZCxhLGIpO2xjPW51bGw7cmV0dXJuXCJzaW5nbGVcIn1mdW5jdGlvbiBpZyhhKXt2YXIgYj10aGlzLmRpc3BsYXk7aWYoIShaKHRoaXMsYSl8fGIuYWN0aXZlVG91Y2gmJmIuaW5wdXQuc3VwcG9ydHNUb3VjaCgpKSlpZihiLmlucHV0LmVuc3VyZVBvbGxlZCgpLGIuc2hpZnQ9YS5zaGlmdEtleSxMYShiLGEpKWZhfHwoYi5zY3JvbGxlci5kcmFnZ2FibGU9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBiLnNjcm9sbGVyLmRyYWdnYWJsZT0hMH0sMTAwKSk7ZWxzZSBpZighJGModGhpcyxhLFwiZ3V0dGVyQ2xpY2tcIiwhMCkpe3ZhciBkPWdiKHRoaXMsYSksYz12ZShhKSxlPWQ/cGgoZCxjKTpcInNpbmdsZVwiO1xucWEodGhpcykuZGVmYXVsdFZpZXcuZm9jdXMoKTsxPT1jJiZ0aGlzLnN0YXRlLnNlbGVjdGluZ1RleHQmJnRoaXMuc3RhdGUuc2VsZWN0aW5nVGV4dChhKTtpZighZHx8IXFoKHRoaXMsYyxkLGUsYSkpaWYoMT09YylkP3JoKHRoaXMsZCxlLGEpOihhLnRhcmdldHx8YS5zcmNFbGVtZW50KT09Yi5zY3JvbGxlciYmbGEoYSk7ZWxzZSBpZigyPT1jKWQmJlRjKHRoaXMuZG9jLGQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gYi5pbnB1dC5mb2N1cygpfSwyMCk7ZWxzZSBpZigzPT1jKWlmKGplKXRoaXMuZGlzcGxheS5pbnB1dC5vbkNvbnRleHRNZW51KGEpO2Vsc2UgU2QodGhpcyl9fWZ1bmN0aW9uIHFoKGEsYixkLGMsZSl7dmFyIGY9XCJDbGlja1wiO1wiZG91YmxlXCI9PWM/Zj1cIkRvdWJsZVwiK2Y6XCJ0cmlwbGVcIj09YyYmKGY9XCJUcmlwbGVcIitmKTtyZXR1cm4ga2MoYSxaZigoMT09Yj9cIkxlZnRcIjoyPT1iP1wiTWlkZGxlXCI6XCJSaWdodFwiKStmLGUpLGUsZnVuY3Rpb24oZyl7XCJzdHJpbmdcIj09XG50eXBlb2YgZyYmKGc9amNbZ10pO2lmKCFnKXJldHVybiExO3ZhciBoPSExO3RyeXthLmlzUmVhZE9ubHkoKSYmKGEuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMCksaD1nKGEsZCkhPVpjfWZpbmFsbHl7YS5zdGF0ZS5zdXBwcmVzc0VkaXRzPSExfXJldHVybiBofSl9ZnVuY3Rpb24gcmgoYSxiLGQsYyl7Rz9zZXRUaW1lb3V0KGdkKGhmLGEpLDApOmEuY3VyT3AuZm9jdXM9a2EocWEoYSkpO3ZhciBlPWEuZ2V0T3B0aW9uKFwiY29uZmlndXJlTW91c2VcIik7ZT1lP2UoYSxkLGMpOnt9O251bGw9PWUudW5pdCYmKGUudW5pdD0oc2g/Yy5zaGlmdEtleSYmYy5tZXRhS2V5OmMuYWx0S2V5KT9cInJlY3RhbmdsZVwiOlwic2luZ2xlXCI9PWQ/XCJjaGFyXCI6XCJkb3VibGVcIj09ZD9cIndvcmRcIjpcImxpbmVcIik7aWYobnVsbD09ZS5leHRlbmR8fGEuZG9jLmV4dGVuZCllLmV4dGVuZD1hLmRvYy5leHRlbmR8fGMuc2hpZnRLZXk7bnVsbD09ZS5hZGROZXcmJihlLmFkZE5ldz15YT9jLm1ldGFLZXk6Yy5jdHJsS2V5KTtcbm51bGw9PWUubW92ZU9uRHJhZyYmKGUubW92ZU9uRHJhZz0hKHlhP2MuYWx0S2V5OmMuY3RybEtleSkpO3ZhciBmPWEuZG9jLnNlbCxnO2Eub3B0aW9ucy5kcmFnRHJvcCYmdGgmJiFhLmlzUmVhZE9ubHkoKSYmXCJzaW5nbGVcIj09ZCYmLTE8KGc9Zi5jb250YWlucyhiKSkmJigwPkIoKGc9Zi5yYW5nZXNbZ10pLmZyb20oKSxiKXx8MDxiLnhSZWwpJiYoMDxCKGcudG8oKSxiKXx8MD5iLnhSZWwpP3VoKGEsYyxiLGUpOnZoKGEsYyxiLGUpfWZ1bmN0aW9uIHVoKGEsYixkLGMpe3ZhciBlPWEuZGlzcGxheSxmPSExLGc9YmEoYSxmdW5jdGlvbihsKXtmYSYmKGUuc2Nyb2xsZXIuZHJhZ2dhYmxlPSExKTthLnN0YXRlLmRyYWdnaW5nVGV4dD0hMTthLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50JiYoYS5oYXNGb2N1cygpP2Euc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQ9ITE6U2QoYSkpO3RhKGUud3JhcHBlci5vd25lckRvY3VtZW50LFwibW91c2V1cFwiLGcpO3RhKGUud3JhcHBlci5vd25lckRvY3VtZW50LFxuXCJtb3VzZW1vdmVcIixoKTt0YShlLnNjcm9sbGVyLFwiZHJhZ3N0YXJ0XCIsayk7dGEoZS5zY3JvbGxlcixcImRyb3BcIixnKTtmfHwobGEobCksYy5hZGROZXd8fFRjKGEuZG9jLGQsbnVsbCxudWxsLGMuZXh0ZW5kKSxmYSYmIWFkfHxHJiY5PT1UP3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlLndyYXBwZXIub3duZXJEb2N1bWVudC5ib2R5LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSk7ZS5pbnB1dC5mb2N1cygpfSwyMCk6ZS5pbnB1dC5mb2N1cygpKX0pLGg9ZnVuY3Rpb24obCl7Zj1mfHwxMDw9TWF0aC5hYnMoYi5jbGllbnRYLWwuY2xpZW50WCkrTWF0aC5hYnMoYi5jbGllbnRZLWwuY2xpZW50WSl9LGs9ZnVuY3Rpb24oKXtyZXR1cm4gZj0hMH07ZmEmJihlLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCk7YS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ZztnLmNvcHk9IWMubW92ZU9uRHJhZzt6KGUud3JhcHBlci5vd25lckRvY3VtZW50LFwibW91c2V1cFwiLGcpO3ooZS53cmFwcGVyLm93bmVyRG9jdW1lbnQsXG5cIm1vdXNlbW92ZVwiLGgpO3ooZS5zY3JvbGxlcixcImRyYWdzdGFydFwiLGspO3ooZS5zY3JvbGxlcixcImRyb3BcIixnKTthLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50PSEwO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5pbnB1dC5mb2N1cygpfSwyMCk7ZS5zY3JvbGxlci5kcmFnRHJvcCYmZS5zY3JvbGxlci5kcmFnRHJvcCgpfWZ1bmN0aW9uIGpnKGEsYixkKXtpZihcImNoYXJcIj09ZClyZXR1cm4gbmV3IEkoYixiKTtpZihcIndvcmRcIj09ZClyZXR1cm4gYS5maW5kV29yZEF0KGIpO2lmKFwibGluZVwiPT1kKXJldHVybiBuZXcgSSh0KGIubGluZSwwKSxDKGEuZG9jLHQoYi5saW5lKzEsMCkpKTthPWQoYSxiKTtyZXR1cm4gbmV3IEkoYS5mcm9tLGEudG8pfWZ1bmN0aW9uIHZoKGEsYixkLGMpe2Z1bmN0aW9uIGUoeCl7aWYoMCE9QihxLHgpKWlmKHE9eCxcInJlY3RhbmdsZVwiPT1jLnVuaXQpe3ZhciBQPVtdLEs9YS5vcHRpb25zLnRhYlNpemUsUT13YSh3KGssZC5saW5lKS50ZXh0LGQuY2gsXG5LKSxTPXdhKHcoayx4LmxpbmUpLnRleHQseC5jaCxLKSxGPU1hdGgubWluKFEsUyk7UT1NYXRoLm1heChRLFMpO1M9TWF0aC5taW4oZC5saW5lLHgubGluZSk7Zm9yKHZhciBSPU1hdGgubWluKGEubGFzdExpbmUoKSxNYXRoLm1heChkLmxpbmUseC5saW5lKSk7Uzw9UjtTKyspe3ZhciBIPXcoayxTKS50ZXh0LEw9aGQoSCxGLEspO0Y9PVE/UC5wdXNoKG5ldyBJKHQoUyxMKSx0KFMsTCkpKTpILmxlbmd0aD5MJiZQLnB1c2gobmV3IEkodChTLEwpLHQoUyxoZChILFEsSykpKSl9UC5sZW5ndGh8fFAucHVzaChuZXcgSShkLGQpKTtkYShrLERhKGEsbC5yYW5nZXMuc2xpY2UoMCxuKS5jb25jYXQoUCksbikse29yaWdpbjpcIiptb3VzZVwiLHNjcm9sbDohMX0pO2Euc2Nyb2xsSW50b1ZpZXcoeCl9ZWxzZSBQPXAsRj1qZyhhLHgsYy51bml0KSx4PVAuYW5jaG9yLDA8QihGLmFuY2hvcix4KT8oSz1GLmhlYWQseD1CYyhQLmZyb20oKSxGLmFuY2hvcikpOihLPUYuYW5jaG9yLHg9QWMoUC50bygpLFxuRi5oZWFkKSksUD1sLnJhbmdlcy5zbGljZSgwKSxQW25dPXdoKGEsbmV3IEkoQyhrLHgpLEspKSxkYShrLERhKGEsUCxuKSxrZSl9ZnVuY3Rpb24gZih4KXt2YXIgUD0rK3UsSz1nYihhLHgsITAsXCJyZWN0YW5nbGVcIj09Yy51bml0KTtpZihLKWlmKDAhPUIoSyxxKSl7YS5jdXJPcC5mb2N1cz1rYShxYShhKSk7ZShLKTt2YXIgUT1NYyhoLGspOyhLLmxpbmU+PVEudG98fEsubGluZTxRLmZyb20pJiZzZXRUaW1lb3V0KGJhKGEsZnVuY3Rpb24oKXt1PT1QJiZmKHgpfSksMTUwKX1lbHNle3ZhciBTPXguY2xpZW50WTxyLnRvcD8tMjA6eC5jbGllbnRZPnIuYm90dG9tPzIwOjA7UyYmc2V0VGltZW91dChiYShhLGZ1bmN0aW9uKCl7dT09UCYmKGguc2Nyb2xsZXIuc2Nyb2xsVG9wKz1TLGYoeCkpfSksNTApfX1mdW5jdGlvbiBnKHgpe2Euc3RhdGUuc2VsZWN0aW5nVGV4dD0hMTt1PUluZmluaXR5O3gmJihsYSh4KSxoLmlucHV0LmZvY3VzKCkpO3RhKGgud3JhcHBlci5vd25lckRvY3VtZW50LFxuXCJtb3VzZW1vdmVcIixBKTt0YShoLndyYXBwZXIub3duZXJEb2N1bWVudCxcIm1vdXNldXBcIixZKTtrLmhpc3RvcnkubGFzdFNlbE9yaWdpbj1udWxsfUcmJlNkKGEpO3ZhciBoPWEuZGlzcGxheSxrPWEuZG9jO2xhKGIpO3ZhciBsPWsuc2VsLG09bC5yYW5nZXM7aWYoYy5hZGROZXcmJiFjLmV4dGVuZCl7dmFyIG49ay5zZWwuY29udGFpbnMoZCk7dmFyIHA9LTE8bj9tW25dOm5ldyBJKGQsZCl9ZWxzZSBwPWsuc2VsLnByaW1hcnkoKSxuPWsuc2VsLnByaW1JbmRleDtcInJlY3RhbmdsZVwiPT1jLnVuaXQ/KGMuYWRkTmV3fHwocD1uZXcgSShkLGQpKSxkPWdiKGEsYiwhMCwhMCksbj0tMSk6KGI9amcoYSxkLGMudW5pdCkscD1jLmV4dGVuZD9jZShwLGIuYW5jaG9yLGIuaGVhZCxjLmV4dGVuZCk6Yik7Yy5hZGROZXc/LTE9PW4/KG49bS5sZW5ndGgsZGEoayxEYShhLG0uY29uY2F0KFtwXSksbikse3Njcm9sbDohMSxvcmlnaW46XCIqbW91c2VcIn0pKToxPG0ubGVuZ3RoJiZtW25dLmVtcHR5KCkmJlxuXCJjaGFyXCI9PWMudW5pdCYmIWMuZXh0ZW5kPyhkYShrLERhKGEsbS5zbGljZSgwLG4pLmNvbmNhdChtLnNsaWNlKG4rMSkpLDApLHtzY3JvbGw6ITEsb3JpZ2luOlwiKm1vdXNlXCJ9KSxsPWsuc2VsKTpkZShrLG4scCxrZSk6KG49MCxkYShrLG5ldyB2YShbcF0sMCksa2UpLGw9ay5zZWwpO3ZhciBxPWQscj1oLndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdT0wLEE9YmEoYSxmdW5jdGlvbih4KXswIT09eC5idXR0b25zJiZ2ZSh4KT9mKHgpOmcoeCl9KSxZPWJhKGEsZyk7YS5zdGF0ZS5zZWxlY3RpbmdUZXh0PVk7eihoLndyYXBwZXIub3duZXJEb2N1bWVudCxcIm1vdXNlbW92ZVwiLEEpO3ooaC53cmFwcGVyLm93bmVyRG9jdW1lbnQsXCJtb3VzZXVwXCIsWSl9ZnVuY3Rpb24gd2goYSxiKXt2YXIgZD1iLmFuY2hvcixjPWIuaGVhZCxlPXcoYS5kb2MsZC5saW5lKTtpZigwPT1CKGQsYykmJmQuc3RpY2t5PT1jLnN0aWNreSlyZXR1cm4gYjtlPUphKGUpO2lmKCFlKXJldHVybiBiO3ZhciBmPVxuS2IoZSxkLmNoLGQuc3RpY2t5KSxnPWVbZl07aWYoZy5mcm9tIT1kLmNoJiZnLnRvIT1kLmNoKXJldHVybiBiO3ZhciBoPWYrKGcuZnJvbT09ZC5jaD09KDEhPWcubGV2ZWwpPzA6MSk7aWYoMD09aHx8aD09ZS5sZW5ndGgpcmV0dXJuIGI7Yy5saW5lIT1kLmxpbmU/YT0wPChjLmxpbmUtZC5saW5lKSooXCJsdHJcIj09YS5kb2MuZGlyZWN0aW9uPzE6LTEpOihhPUtiKGUsYy5jaCxjLnN0aWNreSksZj1hLWZ8fChjLmNoLWQuY2gpKigxPT1nLmxldmVsPy0xOjEpLGE9YT09aC0xfHxhPT1oPzA+ZjowPGYpO2U9ZVtoKyhhPy0xOjApXTtlPShoPWE9PSgxPT1lLmxldmVsKSk/ZS5mcm9tOmUudG87aD1oP1wiYWZ0ZXJcIjpcImJlZm9yZVwiO3JldHVybiBkLmNoPT1lJiZkLnN0aWNreT09aD9iOm5ldyBJKG5ldyB0KGQubGluZSxlLGgpLGMpfWZ1bmN0aW9uICRjKGEsYixkLGMpe2lmKGIudG91Y2hlcyl7dmFyIGU9Yi50b3VjaGVzWzBdLmNsaWVudFg7dmFyIGY9Yi50b3VjaGVzWzBdLmNsaWVudFl9ZWxzZSB0cnl7ZT1cbmIuY2xpZW50WCxmPWIuY2xpZW50WX1jYXRjaChrKXtyZXR1cm4hMX1pZihlPj1NYXRoLmZsb29yKGEuZGlzcGxheS5ndXR0ZXJzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSlyZXR1cm4hMTtjJiZsYShiKTtjPWEuZGlzcGxheTt2YXIgZz1jLmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZj5nLmJvdHRvbXx8IXhhKGEsZCkpcmV0dXJuIGxkKGIpO2YtPWcudG9wLWMudmlld09mZnNldDtmb3IoZz0wO2c8YS5kaXNwbGF5Lmd1dHRlclNwZWNzLmxlbmd0aDsrK2cpe3ZhciBoPWMuZ3V0dGVycy5jaGlsZE5vZGVzW2ddO2lmKGgmJmguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ+PWUpcmV0dXJuIGU9YmIoYS5kb2MsZiksVyhhLGQsYSxlLGEuZGlzcGxheS5ndXR0ZXJTcGVjc1tnXS5jbGFzc05hbWUsYiksbGQoYil9fWZ1bmN0aW9uIGtnKGEsYil7dmFyIGQ7KGQ9TGEoYS5kaXNwbGF5LGIpKXx8KGQ9eGEoYSxcImd1dHRlckNvbnRleHRNZW51XCIpPyRjKGEsXG5iLFwiZ3V0dGVyQ29udGV4dE1lbnVcIiwhMSk6ITEpO2lmKCFkJiYhWihhLGIsXCJjb250ZXh0bWVudVwiKSYmIWplKWEuZGlzcGxheS5pbnB1dC5vbkNvbnRleHRNZW51KGIpfWZ1bmN0aW9uIGxnKGEpe2EuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT1hLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXFxzKmNtLXMtXFxTKy9nLFwiXCIpK2Eub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxcXHMpXFxzKi9nLFwiIGNtLXMtXCIpO1ViKGEpfWZ1bmN0aW9uIHhoKGEsYixkKXshYiE9IShkJiZkIT1IYikmJihkPWEuZGlzcGxheS5kcmFnRnVuY3Rpb25zLGI9Yj96OnRhLGIoYS5kaXNwbGF5LnNjcm9sbGVyLFwiZHJhZ3N0YXJ0XCIsZC5zdGFydCksYihhLmRpc3BsYXkuc2Nyb2xsZXIsXCJkcmFnZW50ZXJcIixkLmVudGVyKSxiKGEuZGlzcGxheS5zY3JvbGxlcixcImRyYWdvdmVyXCIsZC5vdmVyKSxiKGEuZGlzcGxheS5zY3JvbGxlcixcImRyYWdsZWF2ZVwiLGQubGVhdmUpLGIoYS5kaXNwbGF5LnNjcm9sbGVyLFxuXCJkcm9wXCIsZC5kcm9wKSl9ZnVuY3Rpb24geWgoYSl7YS5vcHRpb25zLmxpbmVXcmFwcGluZz8oWWEoYS5kaXNwbGF5LndyYXBwZXIsXCJDb2RlTWlycm9yLXdyYXBcIiksYS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPVwiXCIsYS5kaXNwbGF5LnNpemVyV2lkdGg9bnVsbCk6KGpiKGEuZGlzcGxheS53cmFwcGVyLFwiQ29kZU1pcnJvci13cmFwXCIpLHpkKGEpKTtOZChhKTttYShhKTtVYihhKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHliKGEpfSwxMDApfWZ1bmN0aW9uIFUoYSxiKXt2YXIgZD10aGlzO2lmKCEodGhpcyBpbnN0YW5jZW9mIFUpKXJldHVybiBuZXcgVShhLGIpO3RoaXMub3B0aW9ucz1iPWI/WmEoYik6e307WmEobWcsYiwhMSk7dmFyIGM9Yi52YWx1ZTtcInN0cmluZ1wiPT10eXBlb2YgYz9jPW5ldyBvYShjLGIubW9kZSxudWxsLGIubGluZVNlcGFyYXRvcixiLmRpcmVjdGlvbik6Yi5tb2RlJiYoYy5tb2RlT3B0aW9uPWIubW9kZSk7dGhpcy5kb2M9Yzt2YXIgZT1cbm5ldyBVLmlucHV0U3R5bGVzW2IuaW5wdXRTdHlsZV0odGhpcyk7YT10aGlzLmRpc3BsYXk9bmV3IFlnKGEsYyxlLGIpO2Eud3JhcHBlci5Db2RlTWlycm9yPXRoaXM7bGcodGhpcyk7Yi5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPVwiIENvZGVNaXJyb3Itd3JhcFwiKTtvZih0aGlzKTt0aGlzLnN0YXRlPXtrZXlNYXBzOltdLG92ZXJsYXlzOltdLG1vZGVHZW46MCxvdmVyd3JpdGU6ITEsZGVsYXlpbmdCbHVyRXZlbnQ6ITEsZm9jdXNlZDohMSxzdXBwcmVzc0VkaXRzOiExLHBhc3RlSW5jb21pbmc6LTEsY3V0SW5jb21pbmc6LTEsc2VsZWN0aW5nVGV4dDohMSxkcmFnZ2luZ1RleHQ6ITEsaGlnaGxpZ2h0Om5ldyBYYSxrZXlTZXE6bnVsbCxzcGVjaWFsQ2hhcnM6bnVsbH07Yi5hdXRvZm9jdXMmJiFhYyYmYS5pbnB1dC5mb2N1cygpO0cmJjExPlQmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZC5kaXNwbGF5LmlucHV0LnJlc2V0KCEwKX0sXG4yMCk7emgodGhpcyk7bmd8fChnaCgpLG5nPSEwKTtsYih0aGlzKTt0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwO3pmKHRoaXMsYyk7Yi5hdXRvZm9jdXMmJiFhY3x8dGhpcy5oYXNGb2N1cygpP3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhhc0ZvY3VzKCkmJiFkLnN0YXRlLmZvY3VzZWQmJlJkKGQpfSwyMCk6d2IodGhpcyk7Zm9yKHZhciBmIGluIGJkKWlmKGJkLmhhc093blByb3BlcnR5KGYpKWJkW2ZdKHRoaXMsYltmXSxIYik7cmYodGhpcyk7Yi5maW5pc2hJbml0JiZiLmZpbmlzaEluaXQodGhpcyk7Zm9yKGM9MDtjPGxlLmxlbmd0aDsrK2MpbGVbY10odGhpcyk7bWIodGhpcyk7ZmEmJmIubGluZVdyYXBwaW5nJiZcIm9wdGltaXplbGVnaWJpbGl0eVwiPT1nZXRDb21wdXRlZFN0eWxlKGEubGluZURpdikudGV4dFJlbmRlcmluZyYmKGEubGluZURpdi5zdHlsZS50ZXh0UmVuZGVyaW5nPVwiYXV0b1wiKX1mdW5jdGlvbiB6aChhKXtmdW5jdGlvbiBiKCl7Yy5hY3RpdmVUb3VjaCYmKGU9XG5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGMuYWN0aXZlVG91Y2g9bnVsbH0sMUUzKSxmPWMuYWN0aXZlVG91Y2gsZi5lbmQ9K25ldyBEYXRlKX1mdW5jdGlvbiBkKGgsayl7aWYobnVsbD09ay5sZWZ0KXJldHVybiEwO3ZhciBsPWsubGVmdC1oLmxlZnQ7aD1rLnRvcC1oLnRvcDtyZXR1cm4gNDAwPGwqbCtoKmh9dmFyIGM9YS5kaXNwbGF5O3ooYy5zY3JvbGxlcixcIm1vdXNlZG93blwiLGJhKGEsaWcpKTtHJiYxMT5UP3ooYy5zY3JvbGxlcixcImRibGNsaWNrXCIsYmEoYSxmdW5jdGlvbihoKXtpZighWihhLGgpKXt2YXIgaz1nYihhLGgpOyFrfHwkYyhhLGgsXCJndXR0ZXJDbGlja1wiLCEwKXx8TGEoYS5kaXNwbGF5LGgpfHwobGEoaCksaD1hLmZpbmRXb3JkQXQoayksVGMoYS5kb2MsaC5hbmNob3IsaC5oZWFkKSl9fSkpOnooYy5zY3JvbGxlcixcImRibGNsaWNrXCIsZnVuY3Rpb24oaCl7cmV0dXJuIFooYSxoKXx8bGEoaCl9KTt6KGMuc2Nyb2xsZXIsXCJjb250ZXh0bWVudVwiLGZ1bmN0aW9uKGgpe3JldHVybiBrZyhhLFxuaCl9KTt6KGMuaW5wdXQuZ2V0RmllbGQoKSxcImNvbnRleHRtZW51XCIsZnVuY3Rpb24oaCl7Yy5zY3JvbGxlci5jb250YWlucyhoLnRhcmdldCl8fGtnKGEsaCl9KTt2YXIgZSxmPXtlbmQ6MH07eihjLnNjcm9sbGVyLFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKGgpe3ZhciBrO2lmKGs9IVooYSxoKSkxIT1oLnRvdWNoZXMubGVuZ3RoP2s9ITE6KGs9aC50b3VjaGVzWzBdLGs9MT49ay5yYWRpdXNYJiYxPj1rLnJhZGl1c1kpLGs9IWs7ayYmISRjKGEsaCxcImd1dHRlckNsaWNrXCIsITApJiYoYy5pbnB1dC5lbnN1cmVQb2xsZWQoKSxjbGVhclRpbWVvdXQoZSksaz0rbmV3IERhdGUsYy5hY3RpdmVUb3VjaD17c3RhcnQ6ayxtb3ZlZDohMSxwcmV2OjMwMD49ay1mLmVuZD9mOm51bGx9LDE9PWgudG91Y2hlcy5sZW5ndGgmJihjLmFjdGl2ZVRvdWNoLmxlZnQ9aC50b3VjaGVzWzBdLnBhZ2VYLGMuYWN0aXZlVG91Y2gudG9wPWgudG91Y2hlc1swXS5wYWdlWSkpfSk7eihjLnNjcm9sbGVyLFwidG91Y2htb3ZlXCIsXG5mdW5jdGlvbigpe2MuYWN0aXZlVG91Y2gmJihjLmFjdGl2ZVRvdWNoLm1vdmVkPSEwKX0pO3ooYy5zY3JvbGxlcixcInRvdWNoZW5kXCIsZnVuY3Rpb24oaCl7dmFyIGs9Yy5hY3RpdmVUb3VjaDtpZihrJiYhTGEoYyxoKSYmbnVsbCE9ay5sZWZ0JiYhay5tb3ZlZCYmMzAwPm5ldyBEYXRlLWsuc3RhcnQpe3ZhciBsPWEuY29vcmRzQ2hhcihjLmFjdGl2ZVRvdWNoLFwicGFnZVwiKTtrPSFrLnByZXZ8fGQoayxrLnByZXYpP25ldyBJKGwsbCk6IWsucHJldi5wcmV2fHxkKGssay5wcmV2LnByZXYpP2EuZmluZFdvcmRBdChsKTpuZXcgSSh0KGwubGluZSwwKSxDKGEuZG9jLHQobC5saW5lKzEsMCkpKTthLnNldFNlbGVjdGlvbihrLmFuY2hvcixrLmhlYWQpO2EuZm9jdXMoKTtsYShoKX1iKCl9KTt6KGMuc2Nyb2xsZXIsXCJ0b3VjaGNhbmNlbFwiLGIpO3ooYy5zY3JvbGxlcixcInNjcm9sbFwiLGZ1bmN0aW9uKCl7Yy5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihYYihhLGMuc2Nyb2xsZXIuc2Nyb2xsVG9wKSxcbmtiKGEsYy5zY3JvbGxlci5zY3JvbGxMZWZ0LCEwKSxXKGEsXCJzY3JvbGxcIixhKSl9KTt6KGMuc2Nyb2xsZXIsXCJtb3VzZXdoZWVsXCIsZnVuY3Rpb24oaCl7cmV0dXJuIHZmKGEsaCl9KTt6KGMuc2Nyb2xsZXIsXCJET01Nb3VzZVNjcm9sbFwiLGZ1bmN0aW9uKGgpe3JldHVybiB2ZihhLGgpfSk7eihjLndyYXBwZXIsXCJzY3JvbGxcIixmdW5jdGlvbigpe3JldHVybiBjLndyYXBwZXIuc2Nyb2xsVG9wPWMud3JhcHBlci5zY3JvbGxMZWZ0PTB9KTtjLmRyYWdGdW5jdGlvbnM9e2VudGVyOmZ1bmN0aW9uKGgpe1ooYSxoKXx8TWIoaCl9LG92ZXI6ZnVuY3Rpb24oaCl7aWYoIVooYSxoKSl7dmFyIGs9Z2IoYSxoKTtpZihrKXt2YXIgbD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7T2QoYSxrLGwpO2EuZGlzcGxheS5kcmFnQ3Vyc29yfHwoYS5kaXNwbGF5LmRyYWdDdXJzb3I9dihcImRpdlwiLG51bGwsXCJDb2RlTWlycm9yLWN1cnNvcnMgQ29kZU1pcnJvci1kcmFnY3Vyc29yc1wiKSxhLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShhLmRpc3BsYXkuZHJhZ0N1cnNvcixcbmEuZGlzcGxheS5jdXJzb3JEaXYpKTtEKGEuZGlzcGxheS5kcmFnQ3Vyc29yLGwpfU1iKGgpfX0sc3RhcnQ6ZnVuY3Rpb24oaCl7aWYoRyYmKCFhLnN0YXRlLmRyYWdnaW5nVGV4dHx8MTAwPituZXcgRGF0ZS1XZikpTWIoaCk7ZWxzZSBpZighWihhLGgpJiYhTGEoYS5kaXNwbGF5LGgpJiYoaC5kYXRhVHJhbnNmZXIuc2V0RGF0YShcIlRleHRcIixhLmdldFNlbGVjdGlvbigpKSxoLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPVwiY29weU1vdmVcIixoLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UmJiFhZCkpe3ZhciBrPXYoXCJpbWdcIixudWxsLG51bGwsXCJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDtcIik7ay5zcmM9XCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PVwiO0NhJiYoay53aWR0aD1rLmhlaWdodD0xLGEuZGlzcGxheS53cmFwcGVyLmFwcGVuZENoaWxkKGspLGsuX3RvcD1rLm9mZnNldFRvcCk7XG5oLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoaywwLDApO0NhJiZrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayl9fSxkcm9wOmJhKGEsZmgpLGxlYXZlOmZ1bmN0aW9uKGgpe1ooYSxoKXx8VmYoYSl9fTt2YXIgZz1jLmlucHV0LmdldEZpZWxkKCk7eihnLFwia2V5dXBcIixmdW5jdGlvbihoKXtyZXR1cm4gZ2cuY2FsbChhLGgpfSk7eihnLFwia2V5ZG93blwiLGJhKGEsZmcpKTt6KGcsXCJrZXlwcmVzc1wiLGJhKGEsaGcpKTt6KGcsXCJmb2N1c1wiLGZ1bmN0aW9uKGgpe3JldHVybiBSZChhLGgpfSk7eihnLFwiYmx1clwiLGZ1bmN0aW9uKGgpe3JldHVybiB3YihhLGgpfSl9ZnVuY3Rpb24gbmMoYSxiLGQsYyl7dmFyIGU9YS5kb2MsZjtudWxsPT1kJiYoZD1cImFkZFwiKTtcInNtYXJ0XCI9PWQmJihlLm1vZGUuaW5kZW50P2Y9T2IoYSxiKS5zdGF0ZTpkPVwicHJldlwiKTt2YXIgZz1hLm9wdGlvbnMudGFiU2l6ZSxoPXcoZSxiKSxrPXdhKGgudGV4dCxudWxsLGcpO2guc3RhdGVBZnRlciYmKGguc3RhdGVBZnRlcj1cbm51bGwpO3ZhciBsPWgudGV4dC5tYXRjaCgvXlxccyovKVswXTtpZighYyYmIS9cXFMvLnRlc3QoaC50ZXh0KSl7dmFyIG09MDtkPVwibm90XCJ9ZWxzZSBpZihcInNtYXJ0XCI9PWQmJihtPWUubW9kZS5pbmRlbnQoZixoLnRleHQuc2xpY2UobC5sZW5ndGgpLGgudGV4dCksbT09WmN8fDE1MDxtKSl7aWYoIWMpcmV0dXJuO2Q9XCJwcmV2XCJ9XCJwcmV2XCI9PWQ/bT1iPmUuZmlyc3Q/d2EodyhlLGItMSkudGV4dCxudWxsLGcpOjA6XCJhZGRcIj09ZD9tPWsrYS5vcHRpb25zLmluZGVudFVuaXQ6XCJzdWJ0cmFjdFwiPT1kP209ay1hLm9wdGlvbnMuaW5kZW50VW5pdDpcIm51bWJlclwiPT10eXBlb2YgZCYmKG09aytkKTttPU1hdGgubWF4KDAsbSk7ZD1cIlwiO2M9MDtpZihhLm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpZm9yKGE9TWF0aC5mbG9vcihtL2cpO2E7LS1hKWMrPWcsZCs9XCJcXHRcIjtjPG0mJihkKz1pZChtLWMpKTtpZihkIT1sKXJldHVybiBEYihlLGQsdChiLDApLHQoYixsLmxlbmd0aCksXCIraW5wdXRcIiksXG5oLnN0YXRlQWZ0ZXI9bnVsbCwhMDtmb3IoZz0wO2c8ZS5zZWwucmFuZ2VzLmxlbmd0aDtnKyspaWYoaD1lLnNlbC5yYW5nZXNbZ10saC5oZWFkLmxpbmU9PWImJmguaGVhZC5jaDxsLmxlbmd0aCl7Yj10KGIsbC5sZW5ndGgpO2RlKGUsZyxuZXcgSShiLGIpKTticmVha319ZnVuY3Rpb24gbWUoYSxiLGQsYyxlKXt2YXIgZj1hLmRvYzthLmRpc3BsYXkuc2hpZnQ9ITE7Y3x8KGM9Zi5zZWwpO3ZhciBnPStuZXcgRGF0ZS0yMDAsaD1cInBhc3RlXCI9PWV8fGEuc3RhdGUucGFzdGVJbmNvbWluZz5nLGs9bmUoYiksbD1udWxsO2lmKGgmJjE8Yy5yYW5nZXMubGVuZ3RoKWlmKHNhJiZzYS50ZXh0LmpvaW4oXCJcXG5cIik9PWIpe2lmKDA9PWMucmFuZ2VzLmxlbmd0aCVzYS50ZXh0Lmxlbmd0aCl7bD1bXTtmb3IodmFyIG09MDttPHNhLnRleHQubGVuZ3RoO20rKylsLnB1c2goZi5zcGxpdExpbmVzKHNhLnRleHRbbV0pKX19ZWxzZSBrLmxlbmd0aD09Yy5yYW5nZXMubGVuZ3RoJiZhLm9wdGlvbnMucGFzdGVMaW5lc1BlclNlbGVjdGlvbiYmXG4obD13YyhrLGZ1bmN0aW9uKHUpe3JldHVyblt1XX0pKTttPWEuY3VyT3AudXBkYXRlSW5wdXQ7Zm9yKHZhciBuPWMucmFuZ2VzLmxlbmd0aC0xOzA8PW47bi0tKXt2YXIgcD1jLnJhbmdlc1tuXSxxPXAuZnJvbSgpLHI9cC50bygpO3AuZW1wdHkoKSYmKGQmJjA8ZD9xPXQocS5saW5lLHEuY2gtZCk6YS5zdGF0ZS5vdmVyd3JpdGUmJiFoP3I9dChyLmxpbmUsTWF0aC5taW4odyhmLHIubGluZSkudGV4dC5sZW5ndGgsci5jaCtKKGspLmxlbmd0aCkpOmgmJnNhJiZzYS5saW5lV2lzZSYmc2EudGV4dC5qb2luKFwiXFxuXCIpPT1rLmpvaW4oXCJcXG5cIikmJihxPXI9dChxLmxpbmUsMCkpKTtwPXtmcm9tOnEsdG86cix0ZXh0Omw/bFtuJWwubGVuZ3RoXTprLG9yaWdpbjplfHwoaD9cInBhc3RlXCI6YS5zdGF0ZS5jdXRJbmNvbWluZz5nP1wiY3V0XCI6XCIraW5wdXRcIil9O0NiKGEuZG9jLHApO2FhKGEsXCJpbnB1dFJlYWRcIixhLHApfWImJiFoJiZvZyhhLGIpO3hiKGEpOzI+YS5jdXJPcC51cGRhdGVJbnB1dCYmXG4oYS5jdXJPcC51cGRhdGVJbnB1dD1tKTthLmN1ck9wLnR5cGluZz0hMDthLnN0YXRlLnBhc3RlSW5jb21pbmc9YS5zdGF0ZS5jdXRJbmNvbWluZz0tMX1mdW5jdGlvbiBwZyhhLGIpe3ZhciBkPWEuY2xpcGJvYXJkRGF0YSYmYS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJUZXh0XCIpO2lmKGQpcmV0dXJuIGEucHJldmVudERlZmF1bHQoKSxiLmlzUmVhZE9ubHkoKXx8Yi5vcHRpb25zLmRpc2FibGVJbnB1dHx8IWIuaGFzRm9jdXMoKXx8cmEoYixmdW5jdGlvbigpe3JldHVybiBtZShiLGQsMCxudWxsLFwicGFzdGVcIil9KSwhMH1mdW5jdGlvbiBvZyhhLGIpe2lmKGEub3B0aW9ucy5lbGVjdHJpY0NoYXJzJiZhLm9wdGlvbnMuc21hcnRJbmRlbnQpZm9yKHZhciBkPWEuZG9jLnNlbCxjPWQucmFuZ2VzLmxlbmd0aC0xOzA8PWM7Yy0tKXt2YXIgZT1kLnJhbmdlc1tjXTtpZighKDEwMDxlLmhlYWQuY2h8fGMmJmQucmFuZ2VzW2MtMV0uaGVhZC5saW5lPT1lLmhlYWQubGluZSkpe3ZhciBmPWEuZ2V0TW9kZUF0KGUuaGVhZCksXG5nPSExO2lmKGYuZWxlY3RyaWNDaGFycylmb3IodmFyIGg9MDtoPGYuZWxlY3RyaWNDaGFycy5sZW5ndGg7aCsrKXtpZigtMTxiLmluZGV4T2YoZi5lbGVjdHJpY0NoYXJzLmNoYXJBdChoKSkpe2c9bmMoYSxlLmhlYWQubGluZSxcInNtYXJ0XCIpO2JyZWFrfX1lbHNlIGYuZWxlY3RyaWNJbnB1dCYmZi5lbGVjdHJpY0lucHV0LnRlc3QodyhhLmRvYyxlLmhlYWQubGluZSkudGV4dC5zbGljZSgwLGUuaGVhZC5jaCkpJiYoZz1uYyhhLGUuaGVhZC5saW5lLFwic21hcnRcIikpO2cmJmFhKGEsXCJlbGVjdHJpY0lucHV0XCIsYSxlLmhlYWQubGluZSl9fX1mdW5jdGlvbiBxZyhhKXtmb3IodmFyIGI9W10sZD1bXSxjPTA7YzxhLmRvYy5zZWwucmFuZ2VzLmxlbmd0aDtjKyspe3ZhciBlPWEuZG9jLnNlbC5yYW5nZXNbY10uaGVhZC5saW5lO2U9e2FuY2hvcjp0KGUsMCksaGVhZDp0KGUrMSwwKX07ZC5wdXNoKGUpO2IucHVzaChhLmdldFJhbmdlKGUuYW5jaG9yLGUuaGVhZCkpfXJldHVybnt0ZXh0OmIsXG5yYW5nZXM6ZH19ZnVuY3Rpb24gcmcoYSxiLGQsYyl7YS5zZXRBdHRyaWJ1dGUoXCJhdXRvY29ycmVjdFwiLGQ/XCJcIjpcIm9mZlwiKTthLnNldEF0dHJpYnV0ZShcImF1dG9jYXBpdGFsaXplXCIsYz9cIlwiOlwib2ZmXCIpO2Euc2V0QXR0cmlidXRlKFwic3BlbGxjaGVja1wiLCEhYil9ZnVuY3Rpb24gc2coKXt2YXIgYT12KFwidGV4dGFyZWFcIixudWxsLG51bGwsXCJwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogLTFlbTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG1pbi1oZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZVwiKSxiPXYoXCJkaXZcIixbYV0sbnVsbCxcIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7XCIpO2ZhP2Euc3R5bGUud2lkdGg9XCIxMDAwcHhcIjphLnNldEF0dHJpYnV0ZShcIndyYXBcIixcIm9mZlwiKTtvYyYmKGEuc3R5bGUuYm9yZGVyPVwiMXB4IHNvbGlkIGJsYWNrXCIpO3JnKGEpO3JldHVybiBifWZ1bmN0aW9uIG9lKGEsXG5iLGQsYyxlKXtmdW5jdGlvbiBmKHUpe2lmKFwiY29kZXBvaW50XCI9PWMpe3ZhciBBPWsudGV4dC5jaGFyQ29kZUF0KGIuY2grKDA8ZD8wOi0xKSk7QT1pc05hTihBKT9udWxsOm5ldyB0KGIubGluZSxNYXRoLm1heCgwLE1hdGgubWluKGsudGV4dC5sZW5ndGgsYi5jaCtkKigoMDxkPzU1Mjk2PD1BJiY1NjMyMD5BOjU2MzIwPD1BJiY1NzM0Mz5BKT8yOjEpKSksLWQpfWVsc2UgQT1lP2toKGEuY20sayxiLGQpOmZlKGssYixkKTtpZihudWxsPT1BKXtpZih1PSF1KXU9Yi5saW5lK2wsdTxhLmZpcnN0fHx1Pj1hLmZpcnN0K2Euc2l6ZT91PSExOihiPW5ldyB0KHUsYi5jaCxiLnN0aWNreSksdT1rPXcoYSx1KSk7aWYodSliPWdlKGUsYS5jbSxrLGIubGluZSxsKTtlbHNlIHJldHVybiExfWVsc2UgYj1BO3JldHVybiEwfXZhciBnPWIsaD1kLGs9dyhhLGIubGluZSksbD1lJiZcInJ0bFwiPT1hLmRpcmVjdGlvbj8tZDpkO2lmKFwiY2hhclwiPT1jfHxcImNvZGVwb2ludFwiPT1jKWYoKTtlbHNlIGlmKFwiY29sdW1uXCI9PVxuYylmKCEwKTtlbHNlIGlmKFwid29yZFwiPT1jfHxcImdyb3VwXCI9PWMpZm9yKHZhciBtPW51bGwsbj1cImdyb3VwXCI9PWMscD1hLmNtJiZhLmNtLmdldEhlbHBlcihiLFwid29yZENoYXJzXCIpLHE9ITA7ISgwPmQpfHxmKCFxKTtxPSExKXt2YXIgcj1rLnRleHQuY2hhckF0KGIuY2gpfHxcIlxcblwiO3I9eGMocixwKT9cIndcIjpuJiZcIlxcblwiPT1yP1wiblwiOiFufHwvXFxzLy50ZXN0KHIpP251bGw6XCJwXCI7IW58fHF8fHJ8fChyPVwic1wiKTtpZihtJiZtIT1yKXswPmQmJihkPTEsZigpLGIuc3RpY2t5PVwiYWZ0ZXJcIik7YnJlYWt9ciYmKG09cik7aWYoMDxkJiYhZighcSkpYnJlYWt9aD1WYyhhLGIsZyxoLCEwKTtyZChnLGgpJiYoaC5oaXRTaWRlPSEwKTtyZXR1cm4gaH1mdW5jdGlvbiB0ZyhhLGIsZCxjKXt2YXIgZT1hLmRvYyxmPWIubGVmdDtpZihcInBhZ2VcIj09Yyl7dmFyIGc9TWF0aC5taW4oYS5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LHFhKGEpLmRlZmF1bHRWaWV3LmlubmVySGVpZ2h0fHxlKGEpLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpO1xuZz1NYXRoLm1heChnLS41KnZiKGEuZGlzcGxheSksMyk7Zz0oMDxkP2IuYm90dG9tOmIudG9wKStkKmd9ZWxzZVwibGluZVwiPT1jJiYoZz0wPGQ/Yi5ib3R0b20rMzpiLnRvcC0zKTtmb3IoOzspe2I9S2QoYSxmLGcpO2lmKCFiLm91dHNpZGUpYnJlYWs7aWYoMD5kPzA+PWc6Zz49ZS5oZWlnaHQpe2IuaGl0U2lkZT0hMDticmVha31nKz01KmR9cmV0dXJuIGJ9ZnVuY3Rpb24gdWcoYSxiKXt2YXIgZD1GZChhLGIubGluZSk7aWYoIWR8fGQuaGlkZGVuKXJldHVybiBudWxsO3ZhciBjPXcoYS5kb2MsYi5saW5lKTtkPVVlKGQsYyxiLmxpbmUpO2E9SmEoYyxhLmRvYy5kaXJlY3Rpb24pO2M9XCJsZWZ0XCI7YSYmKGM9S2IoYSxiLmNoKSUyP1wicmlnaHRcIjpcImxlZnRcIik7Yj1WZShkLm1hcCxiLmNoLGMpO2Iub2Zmc2V0PVwicmlnaHRcIj09Yi5jb2xsYXBzZT9iLmVuZDpiLnN0YXJ0O3JldHVybiBifWZ1bmN0aW9uIEFoKGEpe2Zvcig7YTthPWEucGFyZW50Tm9kZSlpZigvQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlci8udGVzdChhLmNsYXNzTmFtZSkpcmV0dXJuITA7XG5yZXR1cm4hMX1mdW5jdGlvbiBJYihhLGIpe2ImJihhLmJhZD0hMCk7cmV0dXJuIGF9ZnVuY3Rpb24gQmgoYSxiLGQsYyxlKXtmdW5jdGlvbiBmKHEpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gci5pZD09cX19ZnVuY3Rpb24gZygpe20mJihsKz1uLHAmJihsKz1uKSxtPXA9ITEpfWZ1bmN0aW9uIGgocSl7cSYmKGcoKSxsKz1xKX1mdW5jdGlvbiBrKHEpe2lmKDE9PXEubm9kZVR5cGUpe3ZhciByPXEuZ2V0QXR0cmlidXRlKFwiY20tdGV4dFwiKTtpZihyKWgocik7ZWxzZXtyPXEuZ2V0QXR0cmlidXRlKFwiY20tbWFya2VyXCIpO3ZhciB1O2lmKHIpcT1hLmZpbmRNYXJrcyh0KGMsMCksdChlKzEsMCksZigrcikpLHEubGVuZ3RoJiYodT1xWzBdLmZpbmQoMCkpJiZoKGFiKGEuZG9jLHUuZnJvbSx1LnRvKS5qb2luKG4pKTtlbHNlIGlmKFwiZmFsc2VcIiE9cS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikmJih1PS9eKHByZXxkaXZ8cHxsaXx0YWJsZXxicikkL2kudGVzdChxLm5vZGVOYW1lKSxcbi9eYnIkL2kudGVzdChxLm5vZGVOYW1lKXx8MCE9cS50ZXh0Q29udGVudC5sZW5ndGgpKXt1JiZnKCk7Zm9yKHI9MDtyPHEuY2hpbGROb2Rlcy5sZW5ndGg7cisrKWsocS5jaGlsZE5vZGVzW3JdKTsvXihwcmV8cCkkL2kudGVzdChxLm5vZGVOYW1lKSYmKHA9ITApO3UmJihtPSEwKX19fWVsc2UgMz09cS5ub2RlVHlwZSYmaChxLm5vZGVWYWx1ZS5yZXBsYWNlKC9cXHUyMDBiL2csXCJcIikucmVwbGFjZSgvXFx1MDBhMC9nLFwiIFwiKSl9Zm9yKHZhciBsPVwiXCIsbT0hMSxuPWEuZG9jLmxpbmVTZXBhcmF0b3IoKSxwPSExOzspe2soYik7aWYoYj09ZClicmVhaztiPWIubmV4dFNpYmxpbmc7cD0hMX1yZXR1cm4gbH1mdW5jdGlvbiBjZChhLGIsZCl7aWYoYj09YS5kaXNwbGF5LmxpbmVEaXYpe3ZhciBjPWEuZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXNbZF07aWYoIWMpcmV0dXJuIEliKGEuY2xpcFBvcyh0KGEuZGlzcGxheS52aWV3VG8tMSkpLCEwKTtiPW51bGw7ZD0wfWVsc2UgZm9yKGM9Yjs7Yz1cbmMucGFyZW50Tm9kZSl7aWYoIWN8fGM9PWEuZGlzcGxheS5saW5lRGl2KXJldHVybiBudWxsO2lmKGMucGFyZW50Tm9kZSYmYy5wYXJlbnROb2RlPT1hLmRpc3BsYXkubGluZURpdilicmVha31mb3IodmFyIGU9MDtlPGEuZGlzcGxheS52aWV3Lmxlbmd0aDtlKyspe3ZhciBmPWEuZGlzcGxheS52aWV3W2VdO2lmKGYubm9kZT09YylyZXR1cm4gQ2goZixiLGQpfX1mdW5jdGlvbiBDaChhLGIsZCl7ZnVuY3Rpb24gYyhtLG4scCl7Zm9yKHZhciBxPS0xO3E8KGw/bC5sZW5ndGg6MCk7cSsrKWZvcih2YXIgcj0wPnE/ay5tYXA6bFtxXSx1PTA7dTxyLmxlbmd0aDt1Kz0zKXt2YXIgQT1yW3UrMl07aWYoQT09bXx8QT09bil7bj1OKDA+cT9hLmxpbmU6YS5yZXN0W3FdKTtxPXJbdV0rcDtpZigwPnB8fEEhPW0pcT1yW3UrKHA/MTowKV07cmV0dXJuIHQobixxKX19fXZhciBlPWEudGV4dC5maXJzdENoaWxkLGY9ITE7aWYoIWJ8fCFqYShlLGIpKXJldHVybiBJYih0KE4oYS5saW5lKSwwKSwhMCk7XG5pZihiPT1lJiYoZj0hMCxiPWUuY2hpbGROb2Rlc1tkXSxkPTAsIWIpKXJldHVybiBkPWEucmVzdD9KKGEucmVzdCk6YS5saW5lLEliKHQoTihkKSxkLnRleHQubGVuZ3RoKSxmKTt2YXIgZz0zPT1iLm5vZGVUeXBlP2I6bnVsbCxoPWI7Z3x8MSE9Yi5jaGlsZE5vZGVzLmxlbmd0aHx8MyE9Yi5maXJzdENoaWxkLm5vZGVUeXBlfHwoZz1iLmZpcnN0Q2hpbGQsZCYmKGQ9Zy5ub2RlVmFsdWUubGVuZ3RoKSk7Zm9yKDtoLnBhcmVudE5vZGUhPWU7KWg9aC5wYXJlbnROb2RlO3ZhciBrPWEubWVhc3VyZSxsPWsubWFwcztpZihiPWMoZyxoLGQpKXJldHVybiBJYihiLGYpO2U9aC5uZXh0U2libGluZztmb3IoZz1nP2cubm9kZVZhbHVlLmxlbmd0aC1kOjA7ZTtlPWUubmV4dFNpYmxpbmcpe2lmKGI9YyhlLGUuZmlyc3RDaGlsZCwwKSlyZXR1cm4gSWIodChiLmxpbmUsYi5jaC1nKSxmKTtnKz1lLnRleHRDb250ZW50Lmxlbmd0aH1mb3IoaD1oLnByZXZpb3VzU2libGluZztoO2g9aC5wcmV2aW91c1NpYmxpbmcpe2lmKGI9XG5jKGgsaC5maXJzdENoaWxkLC0xKSlyZXR1cm4gSWIodChiLmxpbmUsYi5jaCtkKSxmKTtkKz1oLnRleHRDb250ZW50Lmxlbmd0aH19dmFyIHBhPW5hdmlnYXRvci51c2VyQWdlbnQsdmc9bmF2aWdhdG9yLnBsYXRmb3JtLE1hPS9nZWNrb1xcL1xcZC9pLnRlc3QocGEpLHdnPS9NU0lFIFxcZC8udGVzdChwYSkseGc9L1RyaWRlbnRcXC8oPzpbNy05XXxcXGR7Mix9KVxcLi4qcnY6KFxcZCspLy5leGVjKHBhKSxkZD0vRWRnZVxcLyhcXGQrKS8uZXhlYyhwYSksRz13Z3x8eGd8fGRkLFQ9RyYmKHdnP2RvY3VtZW50LmRvY3VtZW50TW9kZXx8NjorKGRkfHx4ZylbMV0pLGZhPSFkZCYmL1dlYktpdFxcLy8udGVzdChwYSksRGg9ZmEmJi9RdFxcL1xcZCtcXC5cXGQrLy50ZXN0KHBhKSxRYT0hZGQmJi9DaHJvbWVcXC8oXFxkKykvLmV4ZWMocGEpLHRmPVFhJiYrUWFbMV0sQ2E9L09wZXJhXFwvLy50ZXN0KHBhKSxhZD0vQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvciksRWg9L01hYyBPUyBYIDFcXGRcXEQoWzgtOV18XFxkXFxkKVxcRC8udGVzdChwYSksXG5WZz0vUGhhbnRvbUpTLy50ZXN0KHBhKSxvYz1hZCYmKC9Nb2JpbGVcXC9cXHcrLy50ZXN0KHBhKXx8MjxuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMpLEdjPS9BbmRyb2lkLy50ZXN0KHBhKSxhYz1vY3x8R2N8fC93ZWJPU3xCbGFja0JlcnJ5fE9wZXJhIE1pbml8T3BlcmEgTW9iaXxJRU1vYmlsZS9pLnRlc3QocGEpLHlhPW9jfHwvTWFjLy50ZXN0KHZnKSxzaD0vXFxiQ3JPU1xcYi8udGVzdChwYSksRmg9L3dpbi9pLnRlc3QodmcpLG5iPUNhJiZwYS5tYXRjaCgvVmVyc2lvblxcLyhcXGQqXFwuXFxkKikvKTtuYiYmKG5iPU51bWJlcihuYlsxXSkpO25iJiYxNTw9bmImJihDYT0hMSxmYT0hMCk7dmFyICRmPXlhJiYoRGh8fENhJiYobnVsbD09bmJ8fDEyLjExPm5iKSksamU9TWF8fEcmJjk8PVQsamI9ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLmNsYXNzTmFtZTtpZihiPXkoYikuZXhlYyhkKSl7dmFyIGM9ZC5zbGljZShiLmluZGV4K2JbMF0ubGVuZ3RoKTthLmNsYXNzTmFtZT1kLnNsaWNlKDAsYi5pbmRleCkrXG4oYz9iWzFdK2M6XCJcIil9fTt2YXIgUWI9ZG9jdW1lbnQuY3JlYXRlUmFuZ2U/ZnVuY3Rpb24oYSxiLGQsYyl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtlLnNldEVuZChjfHxhLGQpO2Uuc2V0U3RhcnQoYSxiKTtyZXR1cm4gZX06ZnVuY3Rpb24oYSxiLGQpe3ZhciBjPWRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7dHJ5e2MubW92ZVRvRWxlbWVudFRleHQoYS5wYXJlbnROb2RlKX1jYXRjaChlKXtyZXR1cm4gY31jLmNvbGxhcHNlKCEwKTtjLm1vdmVFbmQoXCJjaGFyYWN0ZXJcIixkKTtjLm1vdmVTdGFydChcImNoYXJhY3RlclwiLGIpO3JldHVybiBjfTt2YXIgcGM9ZnVuY3Rpb24oYSl7YS5zZWxlY3QoKX07b2M/cGM9ZnVuY3Rpb24oYSl7YS5zZWxlY3Rpb25TdGFydD0wO2Euc2VsZWN0aW9uRW5kPWEudmFsdWUubGVuZ3RofTpHJiYocGM9ZnVuY3Rpb24oYSl7dHJ5e2Euc2VsZWN0KCl9Y2F0Y2goYil7fX0pO3ZhciBYYT1mdW5jdGlvbigpe3RoaXMuZj10aGlzLmlkPW51bGw7XG50aGlzLnRpbWU9MDt0aGlzLmhhbmRsZXI9Z2QodGhpcy5vblRpbWVvdXQsdGhpcyl9O1hhLnByb3RvdHlwZS5vblRpbWVvdXQ9ZnVuY3Rpb24oYSl7YS5pZD0wO2EudGltZTw9K25ldyBEYXRlP2EuZigpOnNldFRpbWVvdXQoYS5oYW5kbGVyLGEudGltZS0rbmV3IERhdGUpfTtYYS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5mPWI7Yj0rbmV3IERhdGUrYTtpZighdGhpcy5pZHx8Yjx0aGlzLnRpbWUpY2xlYXJUaW1lb3V0KHRoaXMuaWQpLHRoaXMuaWQ9c2V0VGltZW91dCh0aGlzLmhhbmRsZXIsYSksdGhpcy50aW1lPWJ9O3ZhciBaYz17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIkNvZGVNaXJyb3IuUGFzc1wifX0sSWE9e3Njcm9sbDohMX0sa2U9e29yaWdpbjpcIiptb3VzZVwifSxxYz17b3JpZ2luOlwiK21vdmVcIn0sdmM9W1wiXCJdLHpnPS9bXFx1MDBkZlxcdTA1ODdcXHUwNTkwLVxcdTA1ZjRcXHUwNjAwLVxcdTA2ZmZcXHUzMDQwLVxcdTMwOWZcXHUzMGEwLVxcdTMwZmZcXHUzNDAwLVxcdTRkYjVcXHU0ZTAwLVxcdTlmY2NcXHVhYzAwLVxcdWQ3YWZdLyxcbkFnPS9bXFx1MDMwMC1cXHUwMzZmXFx1MDQ4My1cXHUwNDg5XFx1MDU5MS1cXHUwNWJkXFx1MDViZlxcdTA1YzFcXHUwNWMyXFx1MDVjNFxcdTA1YzVcXHUwNWM3XFx1MDYxMC1cXHUwNjFhXFx1MDY0Yi1cXHUwNjVlXFx1MDY3MFxcdTA2ZDYtXFx1MDZkY1xcdTA2ZGUtXFx1MDZlNFxcdTA2ZTdcXHUwNmU4XFx1MDZlYS1cXHUwNmVkXFx1MDcxMVxcdTA3MzAtXFx1MDc0YVxcdTA3YTYtXFx1MDdiMFxcdTA3ZWItXFx1MDdmM1xcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA5MDAtXFx1MDkwMlxcdTA5M2NcXHUwOTQxLVxcdTA5NDhcXHUwOTRkXFx1MDk1MS1cXHUwOTU1XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDliY1xcdTA5YmVcXHUwOWMxLVxcdTA5YzRcXHUwOWNkXFx1MDlkN1xcdTA5ZTJcXHUwOWUzXFx1MGEwMVxcdTBhMDJcXHUwYTNjXFx1MGE0MVxcdTBhNDJcXHUwYTQ3XFx1MGE0OFxcdTBhNGItXFx1MGE0ZFxcdTBhNTFcXHUwYTcwXFx1MGE3MVxcdTBhNzVcXHUwYTgxXFx1MGE4MlxcdTBhYmNcXHUwYWMxLVxcdTBhYzVcXHUwYWM3XFx1MGFjOFxcdTBhY2RcXHUwYWUyXFx1MGFlM1xcdTBiMDFcXHUwYjNjXFx1MGIzZVxcdTBiM2ZcXHUwYjQxLVxcdTBiNDRcXHUwYjRkXFx1MGI1NlxcdTBiNTdcXHUwYjYyXFx1MGI2M1xcdTBiODJcXHUwYmJlXFx1MGJjMFxcdTBiY2RcXHUwYmQ3XFx1MGMzZS1cXHUwYzQwXFx1MGM0Ni1cXHUwYzQ4XFx1MGM0YS1cXHUwYzRkXFx1MGM1NVxcdTBjNTZcXHUwYzYyXFx1MGM2M1xcdTBjYmNcXHUwY2JmXFx1MGNjMlxcdTBjYzZcXHUwY2NjXFx1MGNjZFxcdTBjZDVcXHUwY2Q2XFx1MGNlMlxcdTBjZTNcXHUwZDNlXFx1MGQ0MS1cXHUwZDQ0XFx1MGQ0ZFxcdTBkNTdcXHUwZDYyXFx1MGQ2M1xcdTBkY2FcXHUwZGNmXFx1MGRkMi1cXHUwZGQ0XFx1MGRkNlxcdTBkZGZcXHUwZTMxXFx1MGUzNC1cXHUwZTNhXFx1MGU0Ny1cXHUwZTRlXFx1MGViMVxcdTBlYjQtXFx1MGViOVxcdTBlYmJcXHUwZWJjXFx1MGVjOC1cXHUwZWNkXFx1MGYxOFxcdTBmMTlcXHUwZjM1XFx1MGYzN1xcdTBmMzlcXHUwZjcxLVxcdTBmN2VcXHUwZjgwLVxcdTBmODRcXHUwZjg2XFx1MGY4N1xcdTBmOTAtXFx1MGY5N1xcdTBmOTktXFx1MGZiY1xcdTBmYzZcXHUxMDJkLVxcdTEwMzBcXHUxMDMyLVxcdTEwMzdcXHUxMDM5XFx1MTAzYVxcdTEwM2RcXHUxMDNlXFx1MTA1OFxcdTEwNTlcXHUxMDVlLVxcdTEwNjBcXHUxMDcxLVxcdTEwNzRcXHUxMDgyXFx1MTA4NVxcdTEwODZcXHUxMDhkXFx1MTA5ZFxcdTEzNWZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdiNy1cXHUxN2JkXFx1MTdjNlxcdTE3YzktXFx1MTdkM1xcdTE3ZGRcXHUxODBiLVxcdTE4MGRcXHUxOGE5XFx1MTkyMC1cXHUxOTIyXFx1MTkyN1xcdTE5MjhcXHUxOTMyXFx1MTkzOS1cXHUxOTNiXFx1MWExN1xcdTFhMThcXHUxYTU2XFx1MWE1OC1cXHUxYTVlXFx1MWE2MFxcdTFhNjJcXHUxYTY1LVxcdTFhNmNcXHUxYTczLVxcdTFhN2NcXHUxYTdmXFx1MWIwMC1cXHUxYjAzXFx1MWIzNFxcdTFiMzYtXFx1MWIzYVxcdTFiM2NcXHUxYjQyXFx1MWI2Yi1cXHUxYjczXFx1MWI4MFxcdTFiODFcXHUxYmEyLVxcdTFiYTVcXHUxYmE4XFx1MWJhOVxcdTFjMmMtXFx1MWMzM1xcdTFjMzZcXHUxYzM3XFx1MWNkMC1cXHUxY2QyXFx1MWNkNC1cXHUxY2UwXFx1MWNlMi1cXHUxY2U4XFx1MWNlZFxcdTFkYzAtXFx1MWRlNlxcdTFkZmQtXFx1MWRmZlxcdTIwMGNcXHUyMDBkXFx1MjBkMC1cXHUyMGYwXFx1MmNlZi1cXHUyY2YxXFx1MmRlMC1cXHUyZGZmXFx1MzAyYS1cXHUzMDJmXFx1MzA5OVxcdTMwOWFcXHVhNjZmLVxcdWE2NzJcXHVhNjdjXFx1YTY3ZFxcdWE2ZjBcXHVhNmYxXFx1YTgwMlxcdWE4MDZcXHVhODBiXFx1YTgyNVxcdWE4MjZcXHVhOGM0XFx1YThlMC1cXHVhOGYxXFx1YTkyNi1cXHVhOTJkXFx1YTk0Ny1cXHVhOTUxXFx1YTk4MC1cXHVhOTgyXFx1YTliM1xcdWE5YjYtXFx1YTliOVxcdWE5YmNcXHVhYTI5LVxcdWFhMmVcXHVhYTMxXFx1YWEzMlxcdWFhMzVcXHVhYTM2XFx1YWE0M1xcdWFhNGNcXHVhYWIwXFx1YWFiMi1cXHVhYWI0XFx1YWFiN1xcdWFhYjhcXHVhYWJlXFx1YWFiZlxcdWFhYzFcXHVhYmU1XFx1YWJlOFxcdWFiZWRcXHVkYzAwLVxcdWRmZmZcXHVmYjFlXFx1ZmUwMC1cXHVmZTBmXFx1ZmUyMC1cXHVmZTI2XFx1ZmY5ZVxcdWZmOWZdLyxcbkxiPW51bGwsQ2c9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGcsaCxrKXt0aGlzLmxldmVsPWc7dGhpcy5mcm9tPWg7dGhpcy50bz1rfXZhciBiPS9bXFx1MDU5MC1cXHUwNWY0XFx1MDYwMC1cXHUwNmZmXFx1MDcwMC1cXHUwOGFjXS8sZD0vW3N0d05dLyxjPS9bTFJyXS8sZT0vW0xiMW5dLyxmPS9bMW5dLztyZXR1cm4gZnVuY3Rpb24oZyxoKXt2YXIgaz1cImx0clwiPT1oP1wiTFwiOlwiUlwiO2lmKDA9PWcubGVuZ3RofHxcImx0clwiPT1oJiYhYi50ZXN0KGcpKXJldHVybiExO2Zvcih2YXIgbD1nLmxlbmd0aCxtPVtdLG49MDtuPGw7KytuKXt2YXIgcD1tLHE9cC5wdXNoO3ZhciByPWcuY2hhckNvZGVBdChuKTtyPTI0Nz49cj9cImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOXCIuY2hhckF0KHIpOlxuMTQyNDw9ciYmMTUyND49cj9cIlJcIjoxNTM2PD1yJiYxNzg1Pj1yP1wibm5ubm5uTk5yJSVyLHJOTm1tbW1tbW1tbW1tcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbW1tbm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1uTm1tbW1tbXJybW1ObW1tbXJyMTExMTExMTExMVwiLmNoYXJBdChyLTE1MzYpOjE3NzQ8PXImJjIyMjA+PXI/XCJyXCI6ODE5Mjw9ciYmODIwMz49cj9cIndcIjo4MjA0PT1yP1wiYlwiOlwiTFwiO3EuY2FsbChwLHIpfW49MDtmb3IocD1rO248bDsrK24pcT1tW25dLFwibVwiPT1xP21bbl09cDpwPXE7bj0wO2ZvcihwPWs7bjxsOysrbilxPW1bbl0sXCIxXCI9PXEmJlwiclwiPT1wP21bbl09XCJuXCI6Yy50ZXN0KHEpJiYocD1xLFwiclwiPT1xJiYobVtuXT1cblwiUlwiKSk7bj0xO2ZvcihwPW1bMF07bjxsLTE7KytuKXE9bVtuXSxcIitcIj09cSYmXCIxXCI9PXAmJlwiMVwiPT1tW24rMV0/bVtuXT1cIjFcIjpcIixcIiE9cXx8cCE9bVtuKzFdfHxcIjFcIiE9cCYmXCJuXCIhPXB8fChtW25dPXApLHA9cTtmb3Iobj0wO248bDsrK24paWYocD1tW25dLFwiLFwiPT1wKW1bbl09XCJOXCI7ZWxzZSBpZihcIiVcIj09cCl7Zm9yKHA9bisxO3A8bCYmXCIlXCI9PW1bcF07KytwKTtmb3IocT1uJiZcIiFcIj09bVtuLTFdfHxwPGwmJlwiMVwiPT1tW3BdP1wiMVwiOlwiTlwiO248cDsrK24pbVtuXT1xO249cC0xfW49MDtmb3IocD1rO248bDsrK24pcT1tW25dLFwiTFwiPT1wJiZcIjFcIj09cT9tW25dPVwiTFwiOmMudGVzdChxKSYmKHA9cSk7Zm9yKHA9MDtwPGw7KytwKWlmKGQudGVzdChtW3BdKSl7Zm9yKG49cCsxO248bCYmZC50ZXN0KG1bbl0pOysrbik7cT1cIkxcIj09KHA/bVtwLTFdOmspO2ZvcihxPXE9PShcIkxcIj09KG48bD9tW25dOmspKT9xP1wiTFwiOlwiUlwiOms7cDxuOysrcCltW3BdPXE7cD1uLTF9az1bXTt2YXIgdTtcbmZvcihuPTA7bjxsOylpZihlLnRlc3QobVtuXSkpe3A9bjtmb3IoKytuO248bCYmZS50ZXN0KG1bbl0pOysrbik7ay5wdXNoKG5ldyBhKDAscCxuKSl9ZWxzZXt2YXIgQT1uO3A9ay5sZW5ndGg7cT1cInJ0bFwiPT1oPzE6MDtmb3IoKytuO248bCYmXCJMXCIhPW1bbl07KytuKTtmb3Iocj1BO3I8bjspaWYoZi50ZXN0KG1bcl0pKXtBPHImJihrLnNwbGljZShwLDAsbmV3IGEoMSxBLHIpKSxwKz1xKTtBPXI7Zm9yKCsrcjtyPG4mJmYudGVzdChtW3JdKTsrK3IpO2suc3BsaWNlKHAsMCxuZXcgYSgyLEEscikpO3ArPXE7QT1yfWVsc2UrK3I7QTxuJiZrLnNwbGljZShwLDAsbmV3IGEoMSxBLG4pKX1cImx0clwiPT1oJiYoMT09a1swXS5sZXZlbCYmKHU9Zy5tYXRjaCgvXlxccysvKSkmJihrWzBdLmZyb209dVswXS5sZW5ndGgsay51bnNoaWZ0KG5ldyBhKDAsMCx1WzBdLmxlbmd0aCkpKSwxPT1KKGspLmxldmVsJiYodT1nLm1hdGNoKC9cXHMrJC8pKSYmKEooaykudG8tPXVbMF0ubGVuZ3RoLGsucHVzaChuZXcgYSgwLFxubC11WzBdLmxlbmd0aCxsKSkpKTtyZXR1cm5cInJ0bFwiPT1oP2sucmV2ZXJzZSgpOmt9fSgpLHljPVtdLHo9ZnVuY3Rpb24oYSxiLGQpe2EuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIoYixkLCExKTphLmF0dGFjaEV2ZW50P2EuYXR0YWNoRXZlbnQoXCJvblwiK2IsZCk6KGE9YS5faGFuZGxlcnN8fChhLl9oYW5kbGVycz17fSksYVtiXT0oYVtiXXx8eWMpLmNvbmNhdChkKSl9LHRoPWZ1bmN0aW9uKCl7aWYoRyYmOT5UKXJldHVybiExO3ZhciBhPXYoXCJkaXZcIik7cmV0dXJuXCJkcmFnZ2FibGVcImluIGF8fFwiZHJhZ0Ryb3BcImluIGF9KCksQmQsQWQsbmU9MyE9XCJcXG5cXG5iXCIuc3BsaXQoL1xcbi8pLmxlbmd0aD9mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxkPVtdLGM9YS5sZW5ndGg7Yjw9Yzspe3ZhciBlPWEuaW5kZXhPZihcIlxcblwiLGIpOy0xPT1lJiYoZT1hLmxlbmd0aCk7dmFyIGY9YS5zbGljZShiLFwiXFxyXCI9PWEuY2hhckF0KGUtMSk/ZS0xOmUpLGc9Zi5pbmRleE9mKFwiXFxyXCIpO1xuLTEhPWc/KGQucHVzaChmLnNsaWNlKDAsZykpLGIrPWcrMSk6KGQucHVzaChmKSxiPWUrMSl9cmV0dXJuIGR9OmZ1bmN0aW9uKGEpe3JldHVybiBhLnNwbGl0KC9cXHJcXG4/fFxcbi8pfSxHaD13aW5kb3cuZ2V0U2VsZWN0aW9uP2Z1bmN0aW9uKGEpe3RyeXtyZXR1cm4gYS5zZWxlY3Rpb25TdGFydCE9YS5zZWxlY3Rpb25FbmR9Y2F0Y2goYil7cmV0dXJuITF9fTpmdW5jdGlvbihhKXt0cnl7dmFyIGI9YS5vd25lckRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpfWNhdGNoKGQpe31yZXR1cm4gYiYmYi5wYXJlbnRFbGVtZW50KCk9PWE/MCE9Yi5jb21wYXJlRW5kUG9pbnRzKFwiU3RhcnRUb0VuZFwiLGIpOiExfSxuaD1mdW5jdGlvbigpe3ZhciBhPXYoXCJkaXZcIik7aWYoXCJvbmNvcHlcImluIGEpcmV0dXJuITA7YS5zZXRBdHRyaWJ1dGUoXCJvbmNvcHlcIixcInJldHVybjtcIik7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgYS5vbmNvcHl9KCksSGQ9bnVsbCxtZD17fSxxYj17fSxyYj17fSxYPVxuZnVuY3Rpb24oYSxiLGQpe3RoaXMucG9zPXRoaXMuc3RhcnQ9MDt0aGlzLnN0cmluZz1hO3RoaXMudGFiU2l6ZT1ifHw4O3RoaXMubGluZVN0YXJ0PXRoaXMubGFzdENvbHVtblBvcz10aGlzLmxhc3RDb2x1bW5WYWx1ZT0wO3RoaXMubGluZU9yYWNsZT1kfTtYLnByb3RvdHlwZS5lb2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH07WC5wcm90b3R5cGUuc29sPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPT10aGlzLmxpbmVTdGFydH07WC5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpfHx2b2lkIDB9O1gucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtpZih0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGgpcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKX07WC5wcm90b3R5cGUuZWF0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7XG5pZihcInN0cmluZ1wiPT10eXBlb2YgYT9iPT1hOmImJihhLnRlc3Q/YS50ZXN0KGIpOmEoYikpKXJldHVybisrdGhpcy5wb3MsYn07WC5wcm90b3R5cGUuZWF0V2hpbGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMucG9zO3RoaXMuZWF0KGEpOyk7cmV0dXJuIHRoaXMucG9zPmJ9O1gucHJvdG90eXBlLmVhdFNwYWNlPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMucG9zOy9bXFxzXFx1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSk7KSsrdGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPmF9O1gucHJvdG90eXBlLnNraXBUb0VuZD1mdW5jdGlvbigpe3RoaXMucG9zPXRoaXMuc3RyaW5nLmxlbmd0aH07WC5wcm90b3R5cGUuc2tpcFRvPWZ1bmN0aW9uKGEpe2E9dGhpcy5zdHJpbmcuaW5kZXhPZihhLHRoaXMucG9zKTtpZigtMTxhKXJldHVybiB0aGlzLnBvcz1hLCEwfTtYLnByb3RvdHlwZS5iYWNrVXA9ZnVuY3Rpb24oYSl7dGhpcy5wb3MtPWF9O1gucHJvdG90eXBlLmNvbHVtbj1cbmZ1bmN0aW9uKCl7dGhpcy5sYXN0Q29sdW1uUG9zPHRoaXMuc3RhcnQmJih0aGlzLmxhc3RDb2x1bW5WYWx1ZT13YSh0aGlzLnN0cmluZyx0aGlzLnN0YXJ0LHRoaXMudGFiU2l6ZSx0aGlzLmxhc3RDb2x1bW5Qb3MsdGhpcy5sYXN0Q29sdW1uVmFsdWUpLHRoaXMubGFzdENvbHVtblBvcz10aGlzLnN0YXJ0KTtyZXR1cm4gdGhpcy5sYXN0Q29sdW1uVmFsdWUtKHRoaXMubGluZVN0YXJ0P3dhKHRoaXMuc3RyaW5nLHRoaXMubGluZVN0YXJ0LHRoaXMudGFiU2l6ZSk6MCl9O1gucHJvdG90eXBlLmluZGVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHdhKHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKS0odGhpcy5saW5lU3RhcnQ/d2EodGhpcy5zdHJpbmcsdGhpcy5saW5lU3RhcnQsdGhpcy50YWJTaXplKTowKX07WC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24oYSxiLGQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgYz1mdW5jdGlvbihmKXtyZXR1cm4gZD9mLnRvTG93ZXJDYXNlKCk6XG5mfSxlPXRoaXMuc3RyaW5nLnN1YnN0cih0aGlzLnBvcyxhLmxlbmd0aCk7aWYoYyhlKT09YyhhKSlyZXR1cm4hMSE9PWImJih0aGlzLnBvcys9YS5sZW5ndGgpLCEwfWVsc2V7aWYoKGE9dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKGEpKSYmMDxhLmluZGV4KXJldHVybiBudWxsO2EmJiExIT09YiYmKHRoaXMucG9zKz1hWzBdLmxlbmd0aCk7cmV0dXJuIGF9fTtYLnByb3RvdHlwZS5jdXJyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfTtYLnByb3RvdHlwZS5oaWRlRmlyc3RDaGFycz1mdW5jdGlvbihhLGIpe3RoaXMubGluZVN0YXJ0Kz1hO3RyeXtyZXR1cm4gYigpfWZpbmFsbHl7dGhpcy5saW5lU3RhcnQtPWF9fTtYLnByb3RvdHlwZS5sb29rQWhlYWQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5saW5lT3JhY2xlO3JldHVybiBiJiZiLmxvb2tBaGVhZChhKX07WC5wcm90b3R5cGUuYmFzZVRva2VuPWZ1bmN0aW9uKCl7dmFyIGE9XG50aGlzLmxpbmVPcmFjbGU7cmV0dXJuIGEmJmEuYmFzZVRva2VuKHRoaXMucG9zKX07dmFyIENjPWZ1bmN0aW9uKGEsYil7dGhpcy5zdGF0ZT1hO3RoaXMubG9va0FoZWFkPWJ9LEZhPWZ1bmN0aW9uKGEsYixkLGMpe3RoaXMuc3RhdGU9Yjt0aGlzLmRvYz1hO3RoaXMubGluZT1kO3RoaXMubWF4TG9va0FoZWFkPWN8fDA7dGhpcy5iYXNlVG9rZW5zPW51bGw7dGhpcy5iYXNlVG9rZW5Qb3M9MX07RmEucHJvdG90eXBlLmxvb2tBaGVhZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRvYy5nZXRMaW5lKHRoaXMubGluZSthKTtudWxsIT1iJiZhPnRoaXMubWF4TG9va0FoZWFkJiYodGhpcy5tYXhMb29rQWhlYWQ9YSk7cmV0dXJuIGJ9O0ZhLnByb3RvdHlwZS5iYXNlVG9rZW49ZnVuY3Rpb24oYSl7aWYoIXRoaXMuYmFzZVRva2VucylyZXR1cm4gbnVsbDtmb3IoO3RoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvc108PWE7KXRoaXMuYmFzZVRva2VuUG9zKz0yO3ZhciBiPXRoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvcytcbjFdO3JldHVybnt0eXBlOmImJmIucmVwbGFjZSgvKCB8XilvdmVybGF5IC4qLyxcIlwiKSxzaXplOnRoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvc10tYX19O0ZhLnByb3RvdHlwZS5uZXh0TGluZT1mdW5jdGlvbigpe3RoaXMubGluZSsrOzA8dGhpcy5tYXhMb29rQWhlYWQmJnRoaXMubWF4TG9va0FoZWFkLS19O0ZhLmZyb21TYXZlZD1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIGIgaW5zdGFuY2VvZiBDYz9uZXcgRmEoYSwkYShhLm1vZGUsYi5zdGF0ZSksZCxiLmxvb2tBaGVhZCk6bmV3IEZhKGEsJGEoYS5tb2RlLGIpLGQpfTtGYS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbihhKXthPSExIT09YT8kYSh0aGlzLmRvYy5tb2RlLHRoaXMuc3RhdGUpOnRoaXMuc3RhdGU7cmV0dXJuIDA8dGhpcy5tYXhMb29rQWhlYWQ/bmV3IENjKGEsdGhpcy5tYXhMb29rQWhlYWQpOmF9O3ZhciBEZT1mdW5jdGlvbihhLGIsZCl7dGhpcy5zdGFydD1hLnN0YXJ0O3RoaXMuZW5kPWEucG9zO3RoaXMuc3RyaW5nPVxuYS5jdXJyZW50KCk7dGhpcy50eXBlPWJ8fG51bGw7dGhpcy5zdGF0ZT1kfSxOZj0hMSxLYT0hMSx6Yj1mdW5jdGlvbihhLGIsZCl7dGhpcy50ZXh0PWE7SGUodGhpcyxiKTt0aGlzLmhlaWdodD1kP2QodGhpcyk6MX07emIucHJvdG90eXBlLmxpbmVObz1mdW5jdGlvbigpe3JldHVybiBOKHRoaXMpfTtwYih6Yik7dmFyIEpnPXt9LElnPXt9LHRiPW51bGwsUmI9bnVsbCxXZT17bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LGZiLG9iPWZ1bmN0aW9uKGEsYixkKXt0aGlzLmNtPWQ7dmFyIGM9dGhpcy52ZXJ0PXYoXCJkaXZcIixbdihcImRpdlwiLG51bGwsbnVsbCxcIm1pbi13aWR0aDogMXB4XCIpXSxcIkNvZGVNaXJyb3ItdnNjcm9sbGJhclwiKSxlPXRoaXMuaG9yaXo9dihcImRpdlwiLFt2KFwiZGl2XCIsbnVsbCxudWxsLFwiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHhcIildLFwiQ29kZU1pcnJvci1oc2Nyb2xsYmFyXCIpO2MudGFiSW5kZXg9ZS50YWJJbmRleD0tMTthKGMpO2EoZSk7eihjLFxuXCJzY3JvbGxcIixmdW5jdGlvbigpe2MuY2xpZW50SGVpZ2h0JiZiKGMuc2Nyb2xsVG9wLFwidmVydGljYWxcIil9KTt6KGUsXCJzY3JvbGxcIixmdW5jdGlvbigpe2UuY2xpZW50V2lkdGgmJmIoZS5zY3JvbGxMZWZ0LFwiaG9yaXpvbnRhbFwiKX0pO3RoaXMuY2hlY2tlZFplcm9XaWR0aD0hMTtHJiY4PlQmJih0aGlzLmhvcml6LnN0eWxlLm1pbkhlaWdodD10aGlzLnZlcnQuc3R5bGUubWluV2lkdGg9XCIxOHB4XCIpfTtvYi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWEuc2Nyb2xsV2lkdGg+YS5jbGllbnRXaWR0aCsxLGQ9YS5zY3JvbGxIZWlnaHQ+YS5jbGllbnRIZWlnaHQrMSxjPWEubmF0aXZlQmFyV2lkdGg7ZD8odGhpcy52ZXJ0LnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiLHRoaXMudmVydC5zdHlsZS5ib3R0b209Yj9jK1wicHhcIjpcIjBcIix0aGlzLnZlcnQuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxhLnNjcm9sbEhlaWdodC1hLmNsaWVudEhlaWdodCsoYS52aWV3SGVpZ2h0LVxuKGI/YzowKSkpK1wicHhcIik6KHRoaXMudmVydC5zY3JvbGxUb3A9MCx0aGlzLnZlcnQuc3R5bGUuZGlzcGxheT1cIlwiLHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1cIjBcIik7Yj8odGhpcy5ob3Jpei5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIix0aGlzLmhvcml6LnN0eWxlLnJpZ2h0PWQ/YytcInB4XCI6XCIwXCIsdGhpcy5ob3Jpei5zdHlsZS5sZWZ0PWEuYmFyTGVmdCtcInB4XCIsdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoPU1hdGgubWF4KDAsYS5zY3JvbGxXaWR0aC1hLmNsaWVudFdpZHRoKyhhLnZpZXdXaWR0aC1hLmJhckxlZnQtKGQ/YzowKSkpK1wicHhcIik6KHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheT1cIlwiLHRoaXMuaG9yaXouZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1cIjBcIik7IXRoaXMuY2hlY2tlZFplcm9XaWR0aCYmMDxhLmNsaWVudEhlaWdodCYmKDA9PWMmJnRoaXMuemVyb1dpZHRoSGFjaygpLHRoaXMuY2hlY2tlZFplcm9XaWR0aD0hMCk7cmV0dXJue3JpZ2h0OmQ/XG5jOjAsYm90dG9tOmI/YzowfX07b2IucHJvdG90eXBlLnNldFNjcm9sbExlZnQ9ZnVuY3Rpb24oYSl7dGhpcy5ob3Jpei5zY3JvbGxMZWZ0IT1hJiYodGhpcy5ob3Jpei5zY3JvbGxMZWZ0PWEpO3RoaXMuZGlzYWJsZUhvcml6JiZ0aGlzLmVuYWJsZVplcm9XaWR0aEJhcih0aGlzLmhvcml6LHRoaXMuZGlzYWJsZUhvcml6LFwiaG9yaXpcIil9O29iLnByb3RvdHlwZS5zZXRTY3JvbGxUb3A9ZnVuY3Rpb24oYSl7dGhpcy52ZXJ0LnNjcm9sbFRvcCE9YSYmKHRoaXMudmVydC5zY3JvbGxUb3A9YSk7dGhpcy5kaXNhYmxlVmVydCYmdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy52ZXJ0LHRoaXMuZGlzYWJsZVZlcnQsXCJ2ZXJ0XCIpfTtvYi5wcm90b3R5cGUuemVyb1dpZHRoSGFjaz1mdW5jdGlvbigpe3RoaXMuaG9yaXouc3R5bGUuaGVpZ2h0PXRoaXMudmVydC5zdHlsZS53aWR0aD15YSYmIUVoP1wiMTJweFwiOlwiMThweFwiO3RoaXMuaG9yaXouc3R5bGUudmlzaWJpbGl0eT10aGlzLnZlcnQuc3R5bGUudmlzaWJpbGl0eT1cblwiaGlkZGVuXCI7dGhpcy5kaXNhYmxlSG9yaXo9bmV3IFhhO3RoaXMuZGlzYWJsZVZlcnQ9bmV3IFhhfTtvYi5wcm90b3R5cGUuZW5hYmxlWmVyb1dpZHRoQmFyPWZ1bmN0aW9uKGEsYixkKXtmdW5jdGlvbiBjKCl7dmFyIGU9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsoXCJ2ZXJ0XCI9PWQ/ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLnJpZ2h0LTEsKGUudG9wK2UuYm90dG9tKS8yKTpkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KChlLnJpZ2h0K2UubGVmdCkvMixlLmJvdHRvbS0xKSkhPWE/YS5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCI6Yi5zZXQoMUUzLGMpfWEuc3R5bGUudmlzaWJpbGl0eT1cIlwiO2Iuc2V0KDFFMyxjKX07b2IucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ob3Jpei5wYXJlbnROb2RlO2EucmVtb3ZlQ2hpbGQodGhpcy5ob3Jpeik7YS5yZW1vdmVDaGlsZCh0aGlzLnZlcnQpfTt2YXIgcmM9ZnVuY3Rpb24oKXt9O3JjLnByb3RvdHlwZS51cGRhdGU9XG5mdW5jdGlvbigpe3JldHVybntib3R0b206MCxyaWdodDowfX07cmMucHJvdG90eXBlLnNldFNjcm9sbExlZnQ9ZnVuY3Rpb24oKXt9O3JjLnByb3RvdHlwZS5zZXRTY3JvbGxUb3A9ZnVuY3Rpb24oKXt9O3JjLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe307dmFyIHBmPXtcIm5hdGl2ZVwiOm9iLFwibnVsbFwiOnJjfSxVZz0wLFBjPWZ1bmN0aW9uKGEsYixkKXt2YXIgYz1hLmRpc3BsYXk7dGhpcy52aWV3cG9ydD1iO3RoaXMudmlzaWJsZT1NYyhjLGEuZG9jLGIpO3RoaXMuZWRpdG9ySXNIaWRkZW49IWMud3JhcHBlci5vZmZzZXRXaWR0aDt0aGlzLndyYXBwZXJIZWlnaHQ9Yy53cmFwcGVyLmNsaWVudEhlaWdodDt0aGlzLndyYXBwZXJXaWR0aD1jLndyYXBwZXIuY2xpZW50V2lkdGg7dGhpcy5vbGREaXNwbGF5V2lkdGg9Y2IoYSk7dGhpcy5mb3JjZT1kO3RoaXMuZGltcz1HZChhKTt0aGlzLmV2ZW50cz1bXX07UGMucHJvdG90eXBlLnNpZ25hbD1mdW5jdGlvbihhLGIpe3hhKGEsYikmJlxudGhpcy5ldmVudHMucHVzaChhcmd1bWVudHMpfTtQYy5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLmV2ZW50cy5sZW5ndGg7YSsrKVcuYXBwbHkobnVsbCx0aGlzLmV2ZW50c1thXSl9O3ZhciBRYz0wLE5hPW51bGw7Rz9OYT0tLjUzOk1hP05hPTE1OlFhP05hPS0uNzphZCYmKE5hPS0xLzMpO3ZhciB2YT1mdW5jdGlvbihhLGIpe3RoaXMucmFuZ2VzPWE7dGhpcy5wcmltSW5kZXg9Yn07dmEucHJvdG90eXBlLnByaW1hcnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5nZXNbdGhpcy5wcmltSW5kZXhdfTt2YS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGEpe2lmKGE9PXRoaXMpcmV0dXJuITA7aWYoYS5wcmltSW5kZXghPXRoaXMucHJpbUluZGV4fHxhLnJhbmdlcy5sZW5ndGghPXRoaXMucmFuZ2VzLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGI9MDtiPHRoaXMucmFuZ2VzLmxlbmd0aDtiKyspe3ZhciBkPXRoaXMucmFuZ2VzW2JdLGM9YS5yYW5nZXNbYl07XG5pZighcmQoZC5hbmNob3IsYy5hbmNob3IpfHwhcmQoZC5oZWFkLGMuaGVhZCkpcmV0dXJuITF9cmV0dXJuITB9O3ZhLnByb3RvdHlwZS5kZWVwQ29weT1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPTA7Yjx0aGlzLnJhbmdlcy5sZW5ndGg7YisrKWFbYl09bmV3IEkoc2QodGhpcy5yYW5nZXNbYl0uYW5jaG9yKSxzZCh0aGlzLnJhbmdlc1tiXS5oZWFkKSk7cmV0dXJuIG5ldyB2YShhLHRoaXMucHJpbUluZGV4KX07dmEucHJvdG90eXBlLnNvbWV0aGluZ1NlbGVjdGVkPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLnJhbmdlcy5sZW5ndGg7YSsrKWlmKCF0aGlzLnJhbmdlc1thXS5lbXB0eSgpKXJldHVybiEwO3JldHVybiExfTt2YS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtifHwoYj1hKTtmb3IodmFyIGQ9MDtkPHRoaXMucmFuZ2VzLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMucmFuZ2VzW2RdO2lmKDA8PUIoYixjLmZyb20oKSkmJjA+PUIoYSxjLnRvKCkpKXJldHVybiBkfXJldHVybi0xfTtcbnZhciBJPWZ1bmN0aW9uKGEsYil7dGhpcy5hbmNob3I9YTt0aGlzLmhlYWQ9Yn07SS5wcm90b3R5cGUuZnJvbT1mdW5jdGlvbigpe3JldHVybiBCYyh0aGlzLmFuY2hvcix0aGlzLmhlYWQpfTtJLnByb3RvdHlwZS50bz1mdW5jdGlvbigpe3JldHVybiBBYyh0aGlzLmFuY2hvcix0aGlzLmhlYWQpfTtJLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQubGluZT09dGhpcy5hbmNob3IubGluZSYmdGhpcy5oZWFkLmNoPT10aGlzLmFuY2hvci5jaH07ZWMucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saW5lcy5sZW5ndGh9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkPWEsYz1hK2I7ZDxjOysrZCl7dmFyIGU9dGhpcy5saW5lc1tkXTt0aGlzLmhlaWdodC09ZS5oZWlnaHQ7dmFyIGY9ZTtmLnBhcmVudD1udWxsO0dlKGYpO2FhKGUsXCJkZWxldGVcIil9dGhpcy5saW5lcy5zcGxpY2UoYSxiKX0sY29sbGFwc2U6ZnVuY3Rpb24oYSl7YS5wdXNoLmFwcGx5KGEsXG50aGlzLmxpbmVzKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24oYSxiLGQpe3RoaXMuaGVpZ2h0Kz1kO3RoaXMubGluZXM9dGhpcy5saW5lcy5zbGljZSgwLGEpLmNvbmNhdChiKS5jb25jYXQodGhpcy5saW5lcy5zbGljZShhKSk7Zm9yKGE9MDthPGIubGVuZ3RoOysrYSliW2FdLnBhcmVudD10aGlzfSxpdGVyTjpmdW5jdGlvbihhLGIsZCl7Zm9yKGI9YStiO2E8YjsrK2EpaWYoZCh0aGlzLmxpbmVzW2FdKSlyZXR1cm4hMH19O2ZjLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLnNpemUtPWI7Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK2Qpe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF0sZT1jLmNodW5rU2l6ZSgpO2lmKGE8ZSl7dmFyIGY9TWF0aC5taW4oYixlLWEpLGc9Yy5oZWlnaHQ7Yy5yZW1vdmVJbm5lcihhLGYpO3RoaXMuaGVpZ2h0LT1nLWMuaGVpZ2h0O2U9PWYmJih0aGlzLmNoaWxkcmVuLnNwbGljZShkLS0sXG4xKSxjLnBhcmVudD1udWxsKTtpZigwPT0oYi09ZikpYnJlYWs7YT0wfWVsc2UgYS09ZX0yNT50aGlzLnNpemUtYiYmKDE8dGhpcy5jaGlsZHJlbi5sZW5ndGh8fCEodGhpcy5jaGlsZHJlblswXWluc3RhbmNlb2YgZWMpKSYmKGE9W10sdGhpcy5jb2xsYXBzZShhKSx0aGlzLmNoaWxkcmVuPVtuZXcgZWMoYSldLHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50PXRoaXMpfSxjb2xsYXBzZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9MDtiPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysrYil0aGlzLmNoaWxkcmVuW2JdLmNvbGxhcHNlKGEpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbihhLGIsZCl7dGhpcy5zaXplKz1iLmxlbmd0aDt0aGlzLmhlaWdodCs9ZDtmb3IodmFyIGM9MDtjPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysrYyl7dmFyIGU9dGhpcy5jaGlsZHJlbltjXSxmPWUuY2h1bmtTaXplKCk7aWYoYTw9Zil7ZS5pbnNlcnRJbm5lcihhLGIsZCk7aWYoZS5saW5lcyYmNTA8ZS5saW5lcy5sZW5ndGgpe2ZvcihiPVxuYT1lLmxpbmVzLmxlbmd0aCUyNSsyNTtiPGUubGluZXMubGVuZ3RoOylkPW5ldyBlYyhlLmxpbmVzLnNsaWNlKGIsYis9MjUpKSxlLmhlaWdodC09ZC5oZWlnaHQsdGhpcy5jaGlsZHJlbi5zcGxpY2UoKytjLDAsZCksZC5wYXJlbnQ9dGhpcztlLmxpbmVzPWUubGluZXMuc2xpY2UoMCxhKTt0aGlzLm1heWJlU3BpbGwoKX1icmVha31hLT1mfX0sbWF5YmVTcGlsbDpmdW5jdGlvbigpe2lmKCEoMTA+PXRoaXMuY2hpbGRyZW4ubGVuZ3RoKSl7dmFyIGE9dGhpcztkb3t2YXIgYj1hLmNoaWxkcmVuLnNwbGljZShhLmNoaWxkcmVuLmxlbmd0aC01LDUpO2I9bmV3IGZjKGIpO2lmKGEucGFyZW50KXthLnNpemUtPWIuc2l6ZTthLmhlaWdodC09Yi5oZWlnaHQ7dmFyIGQ9ZWEoYS5wYXJlbnQuY2hpbGRyZW4sYSk7YS5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGQrMSwwLGIpfWVsc2UgZD1uZXcgZmMoYS5jaGlsZHJlbiksZC5wYXJlbnQ9YSxhLmNoaWxkcmVuPVtkLGJdLGE9ZDtiLnBhcmVudD1hLnBhcmVudH13aGlsZSgxMDxcbmEuY2hpbGRyZW4ubGVuZ3RoKTthLnBhcmVudC5tYXliZVNwaWxsKCl9fSxpdGVyTjpmdW5jdGlvbihhLGIsZCl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK2Mpe3ZhciBlPXRoaXMuY2hpbGRyZW5bY10sZj1lLmNodW5rU2l6ZSgpO2lmKGE8Zil7Zj1NYXRoLm1pbihiLGYtYSk7aWYoZS5pdGVyTihhLGYsZCkpcmV0dXJuITA7aWYoMD09KGItPWYpKWJyZWFrO2E9MH1lbHNlIGEtPWZ9fX07dmFyIGdjPWZ1bmN0aW9uKGEsYixkKXtpZihkKWZvcih2YXIgYyBpbiBkKWQuaGFzT3duUHJvcGVydHkoYykmJih0aGlzW2NdPWRbY10pO3RoaXMuZG9jPWE7dGhpcy5ub2RlPWJ9O2djLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZG9jLmNtLGI9dGhpcy5saW5lLndpZGdldHMsZD10aGlzLmxpbmUsYz1OKGQpO2lmKG51bGwhPWMmJmIpe2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7KytlKWJbZV09PXRoaXMmJmIuc3BsaWNlKGUtLSwxKTtiLmxlbmd0aHx8XG4oZC53aWRnZXRzPW51bGwpO3ZhciBmPVRiKHRoaXMpO0VhKGQsTWF0aC5tYXgoMCxkLmhlaWdodC1mKSk7YSYmKHJhKGEsZnVuY3Rpb24oKXt2YXIgZz0tZjtHYShkKTwoYS5jdXJPcCYmYS5jdXJPcC5zY3JvbGxUb3B8fGEuZG9jLnNjcm9sbFRvcCkmJk5jKGEsZyk7U2EoYSxjLFwid2lkZ2V0XCIpfSksYWEoYSxcImxpbmVXaWRnZXRDbGVhcmVkXCIsYSx0aGlzLGMpKX19O2djLnByb3RvdHlwZS5jaGFuZ2VkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMuaGVpZ2h0LGQ9dGhpcy5kb2MuY20sYz10aGlzLmxpbmU7dGhpcy5oZWlnaHQ9bnVsbDt2YXIgZT1UYih0aGlzKS1iO2UmJihQYSh0aGlzLmRvYyxjKXx8RWEoYyxjLmhlaWdodCtlKSxkJiZyYShkLGZ1bmN0aW9uKCl7ZC5jdXJPcC5mb3JjZVVwZGF0ZT0hMDtHYShjKTwoZC5jdXJPcCYmZC5jdXJPcC5zY3JvbGxUb3B8fGQuZG9jLnNjcm9sbFRvcCkmJk5jKGQsZSk7YWEoZCxcImxpbmVXaWRnZXRDaGFuZ2VkXCIsZCxhLE4oYykpfSkpfTtcbnBiKGdjKTt2YXIgVGY9MCxWYT1mdW5jdGlvbihhLGIpe3RoaXMubGluZXM9W107dGhpcy50eXBlPWI7dGhpcy5kb2M9YTt0aGlzLmlkPSsrVGZ9O1ZhLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt2YXIgYT10aGlzLmRvYy5jbSxiPWEmJiFhLmN1ck9wO2ImJmxiKGEpO2lmKHhhKHRoaXMsXCJjbGVhclwiKSl7dmFyIGQ9dGhpcy5maW5kKCk7ZCYmYWEodGhpcyxcImNsZWFyXCIsZC5mcm9tLGQudG8pfWZvcih2YXIgYz1kPW51bGwsZT0wO2U8dGhpcy5saW5lcy5sZW5ndGg7KytlKXt2YXIgZj10aGlzLmxpbmVzW2VdLGc9UGIoZi5tYXJrZWRTcGFucyx0aGlzKTthJiYhdGhpcy5jb2xsYXBzZWQ/U2EoYSxOKGYpLFwidGV4dFwiKTphJiYobnVsbCE9Zy50byYmKGM9TihmKSksbnVsbCE9Zy5mcm9tJiYoZD1OKGYpKSk7Zm9yKHZhciBoPWYsaz12b2lkIDAsbD1mLm1hcmtlZFNwYW5zLG09ZyxuPTA7bjxsLmxlbmd0aDsrK24pbFtuXSE9bSYmKGt8fFxuKGs9W10pKS5wdXNoKGxbbl0pO2gubWFya2VkU3BhbnM9aztudWxsPT1nLmZyb20mJnRoaXMuY29sbGFwc2VkJiYhUGEodGhpcy5kb2MsZikmJmEmJkVhKGYsdmIoYS5kaXNwbGF5KSl9aWYoYSYmdGhpcy5jb2xsYXBzZWQmJiFhLm9wdGlvbnMubGluZVdyYXBwaW5nKWZvcihlPTA7ZTx0aGlzLmxpbmVzLmxlbmd0aDsrK2UpZj16YSh0aGlzLmxpbmVzW2VdKSxnPUVjKGYpLGc+YS5kaXNwbGF5Lm1heExpbmVMZW5ndGgmJihhLmRpc3BsYXkubWF4TGluZT1mLGEuZGlzcGxheS5tYXhMaW5lTGVuZ3RoPWcsYS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKTtudWxsIT1kJiZhJiZ0aGlzLmNvbGxhcHNlZCYmbWEoYSxkLGMrMSk7dGhpcy5saW5lcy5sZW5ndGg9MDt0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwO3RoaXMuYXRvbWljJiZ0aGlzLmRvYy5jYW50RWRpdCYmKHRoaXMuZG9jLmNhbnRFZGl0PSExLGEmJkpmKGEuZG9jKSk7YSYmYWEoYSxcIm1hcmtlckNsZWFyZWRcIixhLHRoaXMsZCxcbmMpO2ImJm1iKGEpO3RoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5jbGVhcigpfX07VmEucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oYSxiKXtudWxsPT1hJiZcImJvb2ttYXJrXCI9PXRoaXMudHlwZSYmKGE9MSk7Zm9yKHZhciBkLGMsZT0wO2U8dGhpcy5saW5lcy5sZW5ndGg7KytlKXt2YXIgZj10aGlzLmxpbmVzW2VdLGc9UGIoZi5tYXJrZWRTcGFucyx0aGlzKTtpZihudWxsIT1nLmZyb20mJihkPXQoYj9mOk4oZiksZy5mcm9tKSwtMT09YSkpcmV0dXJuIGQ7aWYobnVsbCE9Zy50byYmKGM9dChiP2Y6TihmKSxnLnRvKSwxPT1hKSlyZXR1cm4gY31yZXR1cm4gZCYme2Zyb206ZCx0bzpjfX07VmEucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5maW5kKC0xLCEwKSxkPXRoaXMsYz10aGlzLmRvYy5jbTtiJiZjJiZyYShjLGZ1bmN0aW9uKCl7dmFyIGU9Yi5saW5lLGY9TihiLmxpbmUpO2lmKGY9RmQoYyxmKSlYZShmKSxjLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9XG5jLmN1ck9wLmZvcmNlVXBkYXRlPSEwO2MuY3VyT3AudXBkYXRlTWF4TGluZT0hMDtQYShkLmRvYyxlKXx8bnVsbD09ZC5oZWlnaHR8fChmPWQuaGVpZ2h0LGQuaGVpZ2h0PW51bGwsKGY9VGIoZCktZikmJkVhKGUsZS5oZWlnaHQrZikpO2FhKGMsXCJtYXJrZXJDaGFuZ2VkXCIsYyxhKX0pfTtWYS5wcm90b3R5cGUuYXR0YWNoTGluZT1mdW5jdGlvbihhKXtpZighdGhpcy5saW5lcy5sZW5ndGgmJnRoaXMuZG9jLmNtKXt2YXIgYj10aGlzLmRvYy5jbS5jdXJPcDtiLm1heWJlSGlkZGVuTWFya2VycyYmLTEhPWVhKGIubWF5YmVIaWRkZW5NYXJrZXJzLHRoaXMpfHwoYi5tYXliZVVuaGlkZGVuTWFya2Vyc3x8KGIubWF5YmVVbmhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfXRoaXMubGluZXMucHVzaChhKX07VmEucHJvdG90eXBlLmRldGFjaExpbmU9ZnVuY3Rpb24oYSl7dGhpcy5saW5lcy5zcGxpY2UoZWEodGhpcy5saW5lcyxhKSwxKTshdGhpcy5saW5lcy5sZW5ndGgmJnRoaXMuZG9jLmNtJiZcbihhPXRoaXMuZG9jLmNtLmN1ck9wLChhLm1heWJlSGlkZGVuTWFya2Vyc3x8KGEubWF5YmVIaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKSl9O3BiKFZhKTt2YXIgaGM9ZnVuY3Rpb24oYSxiKXt0aGlzLm1hcmtlcnM9YTt0aGlzLnByaW1hcnk9Yjtmb3IoYj0wO2I8YS5sZW5ndGg7KytiKWFbYl0ucGFyZW50PXRoaXN9O2hjLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwO2Zvcih2YXIgYT0wO2E8dGhpcy5tYXJrZXJzLmxlbmd0aDsrK2EpdGhpcy5tYXJrZXJzW2FdLmNsZWFyKCk7YWEodGhpcyxcImNsZWFyXCIpfX07aGMucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoYSxiKX07cGIoaGMpO3ZhciBIaD0wLG9hPWZ1bmN0aW9uKGEsYixkLGMsZSl7aWYoISh0aGlzIGluc3RhbmNlb2Ygb2EpKXJldHVybiBuZXcgb2EoYSxiLGQsYyxlKTtudWxsPT1cbmQmJihkPTApO2ZjLmNhbGwodGhpcyxbbmV3IGVjKFtuZXcgemIoXCJcIixudWxsKV0pXSk7dGhpcy5maXJzdD1kO3RoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsTGVmdD0wO3RoaXMuY2FudEVkaXQ9ITE7dGhpcy5jbGVhbkdlbmVyYXRpb249MTt0aGlzLm1vZGVGcm9udGllcj10aGlzLmhpZ2hsaWdodEZyb250aWVyPWQ7ZD10KGQsMCk7dGhpcy5zZWw9T2EoZCk7dGhpcy5oaXN0b3J5PW5ldyBSYyhudWxsKTt0aGlzLmlkPSsrSGg7dGhpcy5tb2RlT3B0aW9uPWI7dGhpcy5saW5lU2VwPWM7dGhpcy5kaXJlY3Rpb249XCJydGxcIj09ZT9cInJ0bFwiOlwibHRyXCI7dGhpcy5leHRlbmQ9ITE7XCJzdHJpbmdcIj09dHlwZW9mIGEmJihhPXRoaXMuc3BsaXRMaW5lcyhhKSk7YWUodGhpcyx7ZnJvbTpkLHRvOmQsdGV4dDphfSk7ZGEodGhpcyxPYShkKSxJYSl9O29hLnByb3RvdHlwZT1xZShmYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOm9hLGl0ZXI6ZnVuY3Rpb24oYSxiLGQpe2Q/dGhpcy5pdGVyTihhLXRoaXMuZmlyc3QsXG5iLWEsZCk6dGhpcy5pdGVyTih0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplLGEpfSxpbnNlcnQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGQ9MCxjPTA7YzxiLmxlbmd0aDsrK2MpZCs9YltjXS5oZWlnaHQ7dGhpcy5pbnNlcnRJbm5lcihhLXRoaXMuZmlyc3QsYixkKX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7dGhpcy5yZW1vdmVJbm5lcihhLXRoaXMuZmlyc3QsYil9LGdldFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPXBkKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSk7cmV0dXJuITE9PT1hP2I6Yi5qb2luKGF8fHRoaXMubGluZVNlcGFyYXRvcigpKX0sc2V0VmFsdWU6Y2EoZnVuY3Rpb24oYSl7dmFyIGI9dCh0aGlzLmZpcnN0LDApLGQ9dGhpcy5maXJzdCt0aGlzLnNpemUtMTtDYih0aGlzLHtmcm9tOmIsdG86dChkLHcodGhpcyxkKS50ZXh0Lmxlbmd0aCksdGV4dDp0aGlzLnNwbGl0TGluZXMoYSksb3JpZ2luOlwic2V0VmFsdWVcIixmdWxsOiEwfSwhMCk7dGhpcy5jbSYmXG5XYih0aGlzLmNtLDAsMCk7ZGEodGhpcyxPYShiKSxJYSl9KSxyZXBsYWNlUmFuZ2U6ZnVuY3Rpb24oYSxiLGQsYyl7Yj1DKHRoaXMsYik7ZD1kP0ModGhpcyxkKTpiO0RiKHRoaXMsYSxiLGQsYyl9LGdldFJhbmdlOmZ1bmN0aW9uKGEsYixkKXthPWFiKHRoaXMsQyh0aGlzLGEpLEModGhpcyxiKSk7cmV0dXJuITE9PT1kP2E6XCJcIj09PWQ/YS5qb2luKFwiXCIpOmEuam9pbihkfHx0aGlzLmxpbmVTZXBhcmF0b3IoKSl9LGdldExpbmU6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9dGhpcy5nZXRMaW5lSGFuZGxlKGEpKSYmYS50ZXh0fSxnZXRMaW5lSGFuZGxlOmZ1bmN0aW9uKGEpe2lmKE5iKHRoaXMsYSkpcmV0dXJuIHcodGhpcyxhKX0sZ2V0TGluZU51bWJlcjpmdW5jdGlvbihhKXtyZXR1cm4gTihhKX0sZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OmZ1bmN0aW9uKGEpe1wibnVtYmVyXCI9PXR5cGVvZiBhJiYoYT13KHRoaXMsYSkpO3JldHVybiB6YShhKX0sbGluZUNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0sXG5maXJzdExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdH0sbGFzdExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdCt0aGlzLnNpemUtMX0sY2xpcFBvczpmdW5jdGlvbihhKXtyZXR1cm4gQyh0aGlzLGEpfSxnZXRDdXJzb3I6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zZWwucHJpbWFyeSgpO3JldHVybiBudWxsPT1hfHxcImhlYWRcIj09YT9iLmhlYWQ6XCJhbmNob3JcIj09YT9iLmFuY2hvcjpcImVuZFwiPT1hfHxcInRvXCI9PWF8fCExPT09YT9iLnRvKCk6Yi5mcm9tKCl9LGxpc3RTZWxlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsLnJhbmdlc30sc29tZXRoaW5nU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKX0sc2V0Q3Vyc29yOmNhKGZ1bmN0aW9uKGEsYixkKXthPUModGhpcyxcIm51bWJlclwiPT10eXBlb2YgYT90KGEsYnx8MCk6YSk7ZGEodGhpcyxPYShhLG51bGwpLGQpfSksc2V0U2VsZWN0aW9uOmNhKGZ1bmN0aW9uKGEsXG5iLGQpe3ZhciBjPUModGhpcyxhKTthPUModGhpcyxifHxhKTtkYSh0aGlzLE9hKGMsYSksZCl9KSxleHRlbmRTZWxlY3Rpb246Y2EoZnVuY3Rpb24oYSxiLGQpe1RjKHRoaXMsQyh0aGlzLGEpLGImJkModGhpcyxiKSxkKX0pLGV4dGVuZFNlbGVjdGlvbnM6Y2EoZnVuY3Rpb24oYSxiKXtGZih0aGlzLHhlKHRoaXMsYSksYil9KSxleHRlbmRTZWxlY3Rpb25zQnk6Y2EoZnVuY3Rpb24oYSxiKXthPXdjKHRoaXMuc2VsLnJhbmdlcyxhKTtGZih0aGlzLHhlKHRoaXMsYSksYil9KSxzZXRTZWxlY3Rpb25zOmNhKGZ1bmN0aW9uKGEsYixkKXtpZihhLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGU9MDtlPGEubGVuZ3RoO2UrKyljW2VdPW5ldyBJKEModGhpcyxhW2VdLmFuY2hvciksQyh0aGlzLGFbZV0uaGVhZHx8YVtlXS5hbmNob3IpKTtudWxsPT1iJiYoYj1NYXRoLm1pbihhLmxlbmd0aC0xLHRoaXMuc2VsLnByaW1JbmRleCkpO2RhKHRoaXMsRGEodGhpcy5jbSxjLGIpLGQpfX0pLGFkZFNlbGVjdGlvbjpjYShmdW5jdGlvbihhLFxuYixkKXt2YXIgYz10aGlzLnNlbC5yYW5nZXMuc2xpY2UoMCk7Yy5wdXNoKG5ldyBJKEModGhpcyxhKSxDKHRoaXMsYnx8YSkpKTtkYSh0aGlzLERhKHRoaXMuY20sYyxjLmxlbmd0aC0xKSxkKX0pLGdldFNlbGVjdGlvbjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5zZWwucmFuZ2VzLGQsYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZT1hYih0aGlzLGJbY10uZnJvbSgpLGJbY10udG8oKSk7ZD1kP2QuY29uY2F0KGUpOmV9cmV0dXJuITE9PT1hP2Q6ZC5qb2luKGF8fHRoaXMubGluZVNlcGFyYXRvcigpKX0sZ2V0U2VsZWN0aW9uczpmdW5jdGlvbihhKXtmb3IodmFyIGI9W10sZD10aGlzLnNlbC5yYW5nZXMsYz0wO2M8ZC5sZW5ndGg7YysrKXt2YXIgZT1hYih0aGlzLGRbY10uZnJvbSgpLGRbY10udG8oKSk7ITEhPT1hJiYoZT1lLmpvaW4oYXx8dGhpcy5saW5lU2VwYXJhdG9yKCkpKTtiW2NdPWV9cmV0dXJuIGJ9LHJlcGxhY2VTZWxlY3Rpb246ZnVuY3Rpb24oYSxiLGQpe2Zvcih2YXIgYz1cbltdLGU9MDtlPHRoaXMuc2VsLnJhbmdlcy5sZW5ndGg7ZSsrKWNbZV09YTt0aGlzLnJlcGxhY2VTZWxlY3Rpb25zKGMsYixkfHxcIitpbnB1dFwiKX0scmVwbGFjZVNlbGVjdGlvbnM6Y2EoZnVuY3Rpb24oYSxiLGQpe2Zvcih2YXIgYz1bXSxlPXRoaXMuc2VsLGY9MDtmPGUucmFuZ2VzLmxlbmd0aDtmKyspe3ZhciBnPWUucmFuZ2VzW2ZdO2NbZl09e2Zyb206Zy5mcm9tKCksdG86Zy50bygpLHRleHQ6dGhpcy5zcGxpdExpbmVzKGFbZl0pLG9yaWdpbjpkfX1pZihhPWImJlwiZW5kXCIhPWIpe2E9W107ZT1kPXQodGhpcy5maXJzdCwwKTtmb3IoZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgaD1jW2ZdO2c9eGYoaC5mcm9tLGQsZSk7dmFyIGs9eGYoVGEoaCksZCxlKTtkPWgudG87ZT1rO1wiYXJvdW5kXCI9PWI/KGg9dGhpcy5zZWwucmFuZ2VzW2ZdLGg9MD5CKGguaGVhZCxoLmFuY2hvciksYVtmXT1uZXcgSShoP2s6ZyxoP2c6aykpOmFbZl09bmV3IEkoZyxnKX1hPW5ldyB2YShhLHRoaXMuc2VsLnByaW1JbmRleCl9Yj1cbmE7Zm9yKGE9Yy5sZW5ndGgtMTswPD1hO2EtLSlDYih0aGlzLGNbYV0pO2I/R2YodGhpcyxiKTp0aGlzLmNtJiZ4Yih0aGlzLmNtKX0pLHVuZG86Y2EoZnVuY3Rpb24oKXtXYyh0aGlzLFwidW5kb1wiKX0pLHJlZG86Y2EoZnVuY3Rpb24oKXtXYyh0aGlzLFwicmVkb1wiKX0pLHVuZG9TZWxlY3Rpb246Y2EoZnVuY3Rpb24oKXtXYyh0aGlzLFwidW5kb1wiLCEwKX0pLHJlZG9TZWxlY3Rpb246Y2EoZnVuY3Rpb24oKXtXYyh0aGlzLFwicmVkb1wiLCEwKX0pLHNldEV4dGVuZGluZzpmdW5jdGlvbihhKXt0aGlzLmV4dGVuZD1hfSxnZXRFeHRlbmRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leHRlbmR9LGhpc3RvcnlTaXplOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuaGlzdG9yeSxiPTAsZD0wLGM9MDtjPGEuZG9uZS5sZW5ndGg7YysrKWEuZG9uZVtjXS5yYW5nZXN8fCsrYjtmb3IoYz0wO2M8YS51bmRvbmUubGVuZ3RoO2MrKylhLnVuZG9uZVtjXS5yYW5nZXN8fCsrZDtyZXR1cm57dW5kbzpiLFxucmVkbzpkfX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLmhpc3Rvcnk9bmV3IFJjKHRoaXMuaGlzdG9yeSk7VWEodGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gYi5oaXN0b3J5PWEuaGlzdG9yeX0sITApfSxtYXJrQ2xlYW46ZnVuY3Rpb24oKXt0aGlzLmNsZWFuR2VuZXJhdGlvbj10aGlzLmNoYW5nZUdlbmVyYXRpb24oITApfSxjaGFuZ2VHZW5lcmF0aW9uOmZ1bmN0aW9uKGEpe2EmJih0aGlzLmhpc3RvcnkubGFzdE9wPXRoaXMuaGlzdG9yeS5sYXN0U2VsT3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCk7cmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9ufSxpc0NsZWFuOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbj09KGF8fHRoaXMuY2xlYW5HZW5lcmF0aW9uKX0sZ2V0SGlzdG9yeTpmdW5jdGlvbigpe3JldHVybntkb25lOkFiKHRoaXMuaGlzdG9yeS5kb25lKSx1bmRvbmU6QWIodGhpcy5oaXN0b3J5LnVuZG9uZSl9fSxcbnNldEhpc3Rvcnk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5oaXN0b3J5PW5ldyBSYyh0aGlzLmhpc3RvcnkpO2IuZG9uZT1BYihhLmRvbmUuc2xpY2UoMCksbnVsbCwhMCk7Yi51bmRvbmU9QWIoYS51bmRvbmUuc2xpY2UoMCksbnVsbCwhMCl9LHNldEd1dHRlck1hcmtlcjpjYShmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGRjKHRoaXMsYSxcImd1dHRlclwiLGZ1bmN0aW9uKGMpe3ZhciBlPWMuZ3V0dGVyTWFya2Vyc3x8KGMuZ3V0dGVyTWFya2Vycz17fSk7ZVtiXT1kOyFkJiZyZShlKSYmKGMuZ3V0dGVyTWFya2Vycz1udWxsKTtyZXR1cm4hMH0pfSksY2xlYXJHdXR0ZXI6Y2EoZnVuY3Rpb24oYSl7dmFyIGI9dGhpczt0aGlzLml0ZXIoZnVuY3Rpb24oZCl7ZC5ndXR0ZXJNYXJrZXJzJiZkLmd1dHRlck1hcmtlcnNbYV0mJmRjKGIsZCxcImd1dHRlclwiLGZ1bmN0aW9uKCl7ZC5ndXR0ZXJNYXJrZXJzW2FdPW51bGw7cmUoZC5ndXR0ZXJNYXJrZXJzKSYmKGQuZ3V0dGVyTWFya2Vycz1udWxsKTtcbnJldHVybiEwfSl9KX0pLGxpbmVJbmZvOmZ1bmN0aW9uKGEpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKXtpZighTmIodGhpcyxhKSlyZXR1cm4gbnVsbDt2YXIgYj1hO2E9dyh0aGlzLGEpO2lmKCFhKXJldHVybiBudWxsfWVsc2UgaWYoYj1OKGEpLG51bGw9PWIpcmV0dXJuIG51bGw7cmV0dXJue2xpbmU6YixoYW5kbGU6YSx0ZXh0OmEudGV4dCxndXR0ZXJNYXJrZXJzOmEuZ3V0dGVyTWFya2Vycyx0ZXh0Q2xhc3M6YS50ZXh0Q2xhc3MsYmdDbGFzczphLmJnQ2xhc3Msd3JhcENsYXNzOmEud3JhcENsYXNzLHdpZGdldHM6YS53aWRnZXRzfX0sYWRkTGluZUNsYXNzOmNhKGZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gZGModGhpcyxhLFwiZ3V0dGVyXCI9PWI/XCJndXR0ZXJcIjpcImNsYXNzXCIsZnVuY3Rpb24oYyl7dmFyIGU9XCJ0ZXh0XCI9PWI/XCJ0ZXh0Q2xhc3NcIjpcImJhY2tncm91bmRcIj09Yj9cImJnQ2xhc3NcIjpcImd1dHRlclwiPT1iP1wiZ3V0dGVyQ2xhc3NcIjpcIndyYXBDbGFzc1wiO2lmKGNbZV0pe2lmKHkoZCkudGVzdChjW2VdKSlyZXR1cm4hMTtcbmNbZV0rPVwiIFwiK2R9ZWxzZSBjW2VdPWQ7cmV0dXJuITB9KX0pLHJlbW92ZUxpbmVDbGFzczpjYShmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGRjKHRoaXMsYSxcImd1dHRlclwiPT1iP1wiZ3V0dGVyXCI6XCJjbGFzc1wiLGZ1bmN0aW9uKGMpe3ZhciBlPVwidGV4dFwiPT1iP1widGV4dENsYXNzXCI6XCJiYWNrZ3JvdW5kXCI9PWI/XCJiZ0NsYXNzXCI6XCJndXR0ZXJcIj09Yj9cImd1dHRlckNsYXNzXCI6XCJ3cmFwQ2xhc3NcIixmPWNbZV07aWYoZilpZihudWxsPT1kKWNbZV09bnVsbDtlbHNle3ZhciBnPWYubWF0Y2goeShkKSk7aWYoIWcpcmV0dXJuITE7dmFyIGg9Zy5pbmRleCtnWzBdLmxlbmd0aDtjW2VdPWYuc2xpY2UoMCxnLmluZGV4KSsoZy5pbmRleCYmaCE9Zi5sZW5ndGg/XCIgXCI6XCJcIikrZi5zbGljZShoKXx8bnVsbH1lbHNlIHJldHVybiExO3JldHVybiEwfSl9KSxhZGRMaW5lV2lkZ2V0OmNhKGZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gY2godGhpcyxhLGIsZCl9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKGEpe2EuY2xlYXIoKX0sXG5tYXJrVGV4dDpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIEViKHRoaXMsQyh0aGlzLGEpLEModGhpcyxiKSxkLGQmJmQudHlwZXx8XCJyYW5nZVwiKX0sc2V0Qm9va21hcms6ZnVuY3Rpb24oYSxiKXtiPXtyZXBsYWNlZFdpdGg6YiYmKG51bGw9PWIubm9kZVR5cGU/Yi53aWRnZXQ6YiksaW5zZXJ0TGVmdDpiJiZiLmluc2VydExlZnQsY2xlYXJXaGVuRW1wdHk6ITEsc2hhcmVkOmImJmIuc2hhcmVkLGhhbmRsZU1vdXNlRXZlbnRzOmImJmIuaGFuZGxlTW91c2VFdmVudHN9O2E9Qyh0aGlzLGEpO3JldHVybiBFYih0aGlzLGEsYSxiLFwiYm9va21hcmtcIil9LGZpbmRNYXJrc0F0OmZ1bmN0aW9uKGEpe2E9Qyh0aGlzLGEpO3ZhciBiPVtdLGQ9dyh0aGlzLGEubGluZSkubWFya2VkU3BhbnM7aWYoZClmb3IodmFyIGM9MDtjPGQubGVuZ3RoOysrYyl7dmFyIGU9ZFtjXTsobnVsbD09ZS5mcm9tfHxlLmZyb208PWEuY2gpJiYobnVsbD09ZS50b3x8ZS50bz49YS5jaCkmJmIucHVzaChlLm1hcmtlci5wYXJlbnR8fFxuZS5tYXJrZXIpfXJldHVybiBifSxmaW5kTWFya3M6ZnVuY3Rpb24oYSxiLGQpe2E9Qyh0aGlzLGEpO2I9Qyh0aGlzLGIpO3ZhciBjPVtdLGU9YS5saW5lO3RoaXMuaXRlcihhLmxpbmUsYi5saW5lKzEsZnVuY3Rpb24oZil7aWYoZj1mLm1hcmtlZFNwYW5zKWZvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgaD1mW2ddO251bGwhPWgudG8mJmU9PWEubGluZSYmYS5jaD49aC50b3x8bnVsbD09aC5mcm9tJiZlIT1hLmxpbmV8fG51bGwhPWguZnJvbSYmZT09Yi5saW5lJiZoLmZyb20+PWIuY2h8fGQmJiFkKGgubWFya2VyKXx8Yy5wdXNoKGgubWFya2VyLnBhcmVudHx8aC5tYXJrZXIpfSsrZX0pO3JldHVybiBjfSxnZXRBbGxNYXJrczpmdW5jdGlvbigpe3ZhciBhPVtdO3RoaXMuaXRlcihmdW5jdGlvbihiKXtpZihiPWIubWFya2VkU3BhbnMpZm9yKHZhciBkPTA7ZDxiLmxlbmd0aDsrK2QpbnVsbCE9YltkXS5mcm9tJiZhLnB1c2goYltkXS5tYXJrZXIpfSk7cmV0dXJuIGF9LHBvc0Zyb21JbmRleDpmdW5jdGlvbihhKXt2YXIgYixcbmQ9dGhpcy5maXJzdCxjPXRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDt0aGlzLml0ZXIoZnVuY3Rpb24oZSl7ZT1lLnRleHQubGVuZ3RoK2M7aWYoZT5hKXJldHVybiBiPWEsITA7YS09ZTsrK2R9KTtyZXR1cm4gQyh0aGlzLHQoZCxiKSl9LGluZGV4RnJvbVBvczpmdW5jdGlvbihhKXthPUModGhpcyxhKTt2YXIgYj1hLmNoO2lmKGEubGluZTx0aGlzLmZpcnN0fHwwPmEuY2gpcmV0dXJuIDA7dmFyIGQ9dGhpcy5saW5lU2VwYXJhdG9yKCkubGVuZ3RoO3RoaXMuaXRlcih0aGlzLmZpcnN0LGEubGluZSxmdW5jdGlvbihjKXtiKz1jLnRleHQubGVuZ3RoK2R9KTtyZXR1cm4gYn0sY29weTpmdW5jdGlvbihhKXt2YXIgYj1uZXcgb2EocGQodGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKSx0aGlzLm1vZGVPcHRpb24sdGhpcy5maXJzdCx0aGlzLmxpbmVTZXAsdGhpcy5kaXJlY3Rpb24pO2Iuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wO2Iuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQ7XG5iLnNlbD10aGlzLnNlbDtiLmV4dGVuZD0hMTthJiYoYi5oaXN0b3J5LnVuZG9EZXB0aD10aGlzLmhpc3RvcnkudW5kb0RlcHRoLGIuc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSkpO3JldHVybiBifSxsaW5rZWREb2M6ZnVuY3Rpb24oYSl7YXx8KGE9e30pO3ZhciBiPXRoaXMuZmlyc3QsZD10aGlzLmZpcnN0K3RoaXMuc2l6ZTtudWxsIT1hLmZyb20mJmEuZnJvbT5iJiYoYj1hLmZyb20pO251bGwhPWEudG8mJmEudG88ZCYmKGQ9YS50byk7Yj1uZXcgb2EocGQodGhpcyxiLGQpLGEubW9kZXx8dGhpcy5tb2RlT3B0aW9uLGIsdGhpcy5saW5lU2VwLHRoaXMuZGlyZWN0aW9uKTthLnNoYXJlZEhpc3QmJihiLmhpc3Rvcnk9dGhpcy5oaXN0b3J5KTsodGhpcy5saW5rZWR8fCh0aGlzLmxpbmtlZD1bXSkpLnB1c2goe2RvYzpiLHNoYXJlZEhpc3Q6YS5zaGFyZWRIaXN0fSk7Yi5saW5rZWQ9W3tkb2M6dGhpcyxpc1BhcmVudDohMCxzaGFyZWRIaXN0OmEuc2hhcmVkSGlzdH1dO2E9VWYodGhpcyk7XG5mb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgYz1hW2RdLGU9Yy5maW5kKCksZj1iLmNsaXBQb3MoZS5mcm9tKTtlPWIuY2xpcFBvcyhlLnRvKTtCKGYsZSkmJihmPUViKGIsZixlLGMucHJpbWFyeSxjLnByaW1hcnkudHlwZSksYy5tYXJrZXJzLnB1c2goZiksZi5wYXJlbnQ9Yyl9cmV0dXJuIGJ9LHVubGlua0RvYzpmdW5jdGlvbihhKXthIGluc3RhbmNlb2YgVSYmKGE9YS5kb2MpO2lmKHRoaXMubGlua2VkKWZvcih2YXIgYj0wO2I8dGhpcy5saW5rZWQubGVuZ3RoOysrYilpZih0aGlzLmxpbmtlZFtiXS5kb2M9PWEpe3RoaXMubGlua2VkLnNwbGljZShiLDEpO2EudW5saW5rRG9jKHRoaXMpO2VoKFVmKHRoaXMpKTticmVha31pZihhLmhpc3Rvcnk9PXRoaXMuaGlzdG9yeSl7dmFyIGQ9W2EuaWRdO1VhKGEsZnVuY3Rpb24oYyl7cmV0dXJuIGQucHVzaChjLmlkKX0sITApO2EuaGlzdG9yeT1uZXcgUmMobnVsbCk7YS5oaXN0b3J5LmRvbmU9QWIodGhpcy5oaXN0b3J5LmRvbmUsZCk7XG5hLmhpc3RvcnkudW5kb25lPUFiKHRoaXMuaGlzdG9yeS51bmRvbmUsZCl9fSxpdGVyTGlua2VkRG9jczpmdW5jdGlvbihhKXtVYSh0aGlzLGEpfSxnZXRNb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZX0sZ2V0RWRpdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY219LHNwbGl0TGluZXM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubGluZVNlcD9hLnNwbGl0KHRoaXMubGluZVNlcCk6bmUoYSl9LGxpbmVTZXBhcmF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saW5lU2VwfHxcIlxcblwifSxzZXREaXJlY3Rpb246Y2EoZnVuY3Rpb24oYSl7XCJydGxcIiE9YSYmKGE9XCJsdHJcIik7YSE9dGhpcy5kaXJlY3Rpb24mJih0aGlzLmRpcmVjdGlvbj1hLHRoaXMuaXRlcihmdW5jdGlvbihiKXtyZXR1cm4gYi5vcmRlcj1udWxsfSksdGhpcy5jbSYmJGcodGhpcy5jbSkpfSl9KTtvYS5wcm90b3R5cGUuZWFjaExpbmU9b2EucHJvdG90eXBlLml0ZXI7Zm9yKHZhciBXZj0wLG5nPSExLFdhPXszOlwiUGF1c2VcIixcbjg6XCJCYWNrc3BhY2VcIiw5OlwiVGFiXCIsMTM6XCJFbnRlclwiLDE2OlwiU2hpZnRcIiwxNzpcIkN0cmxcIiwxODpcIkFsdFwiLDE5OlwiUGF1c2VcIiwyMDpcIkNhcHNMb2NrXCIsMjc6XCJFc2NcIiwzMjpcIlNwYWNlXCIsMzM6XCJQYWdlVXBcIiwzNDpcIlBhZ2VEb3duXCIsMzU6XCJFbmRcIiwzNjpcIkhvbWVcIiwzNzpcIkxlZnRcIiwzODpcIlVwXCIsMzk6XCJSaWdodFwiLDQwOlwiRG93blwiLDQ0OlwiUHJpbnRTY3JuXCIsNDU6XCJJbnNlcnRcIiw0NjpcIkRlbGV0ZVwiLDU5OlwiO1wiLDYxOlwiPVwiLDkxOlwiTW9kXCIsOTI6XCJNb2RcIiw5MzpcIk1vZFwiLDEwNjpcIipcIiwxMDc6XCI9XCIsMTA5OlwiLVwiLDExMDpcIi5cIiwxMTE6XCIvXCIsMTQ1OlwiU2Nyb2xsTG9ja1wiLDE3MzpcIi1cIiwxODY6XCI7XCIsMTg3OlwiPVwiLDE4ODpcIixcIiwxODk6XCItXCIsMTkwOlwiLlwiLDE5MTpcIi9cIiwxOTI6XCJgXCIsMjE5OlwiW1wiLDIyMDpcIlxcXFxcIiwyMjE6XCJdXCIsMjIyOlwiJ1wiLDIyNDpcIk1vZFwiLDYzMjMyOlwiVXBcIiw2MzIzMzpcIkRvd25cIiw2MzIzNDpcIkxlZnRcIiw2MzIzNTpcIlJpZ2h0XCIsNjMyNzI6XCJEZWxldGVcIixcbjYzMjczOlwiSG9tZVwiLDYzMjc1OlwiRW5kXCIsNjMyNzY6XCJQYWdlVXBcIiw2MzI3NzpcIlBhZ2VEb3duXCIsNjMzMDI6XCJJbnNlcnRcIn0sc2M9MDsxMD5zYztzYysrKVdhW3NjKzQ4XT1XYVtzYys5Nl09U3RyaW5nKHNjKTtmb3IodmFyIGVkPTY1OzkwPj1lZDtlZCsrKVdhW2VkXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGVkKTtmb3IodmFyIHRjPTE7MTI+PXRjO3RjKyspV2FbdGMrMTExXT1XYVt0Yys2MzIzNV09XCJGXCIrdGM7dmFyIGljPXtiYXNpYzp7TGVmdDpcImdvQ2hhckxlZnRcIixSaWdodDpcImdvQ2hhclJpZ2h0XCIsVXA6XCJnb0xpbmVVcFwiLERvd246XCJnb0xpbmVEb3duXCIsRW5kOlwiZ29MaW5lRW5kXCIsSG9tZTpcImdvTGluZVN0YXJ0U21hcnRcIixQYWdlVXA6XCJnb1BhZ2VVcFwiLFBhZ2VEb3duOlwiZ29QYWdlRG93blwiLERlbGV0ZTpcImRlbENoYXJBZnRlclwiLEJhY2tzcGFjZTpcImRlbENoYXJCZWZvcmVcIixcIlNoaWZ0LUJhY2tzcGFjZVwiOlwiZGVsQ2hhckJlZm9yZVwiLFRhYjpcImRlZmF1bHRUYWJcIixcIlNoaWZ0LVRhYlwiOlwiaW5kZW50QXV0b1wiLFxuRW50ZXI6XCJuZXdsaW5lQW5kSW5kZW50XCIsSW5zZXJ0OlwidG9nZ2xlT3ZlcndyaXRlXCIsRXNjOlwic2luZ2xlU2VsZWN0aW9uXCJ9LHBjRGVmYXVsdDp7XCJDdHJsLUFcIjpcInNlbGVjdEFsbFwiLFwiQ3RybC1EXCI6XCJkZWxldGVMaW5lXCIsXCJDdHJsLVpcIjpcInVuZG9cIixcIlNoaWZ0LUN0cmwtWlwiOlwicmVkb1wiLFwiQ3RybC1ZXCI6XCJyZWRvXCIsXCJDdHJsLUhvbWVcIjpcImdvRG9jU3RhcnRcIixcIkN0cmwtRW5kXCI6XCJnb0RvY0VuZFwiLFwiQ3RybC1VcFwiOlwiZ29MaW5lVXBcIixcIkN0cmwtRG93blwiOlwiZ29MaW5lRG93blwiLFwiQ3RybC1MZWZ0XCI6XCJnb0dyb3VwTGVmdFwiLFwiQ3RybC1SaWdodFwiOlwiZ29Hcm91cFJpZ2h0XCIsXCJBbHQtTGVmdFwiOlwiZ29MaW5lU3RhcnRcIixcIkFsdC1SaWdodFwiOlwiZ29MaW5lRW5kXCIsXCJDdHJsLUJhY2tzcGFjZVwiOlwiZGVsR3JvdXBCZWZvcmVcIixcIkN0cmwtRGVsZXRlXCI6XCJkZWxHcm91cEFmdGVyXCIsXCJDdHJsLVNcIjpcInNhdmVcIixcIkN0cmwtRlwiOlwiZmluZFwiLFwiQ3RybC1HXCI6XCJmaW5kTmV4dFwiLFwiU2hpZnQtQ3RybC1HXCI6XCJmaW5kUHJldlwiLFxuXCJTaGlmdC1DdHJsLUZcIjpcInJlcGxhY2VcIixcIlNoaWZ0LUN0cmwtUlwiOlwicmVwbGFjZUFsbFwiLFwiQ3RybC1bXCI6XCJpbmRlbnRMZXNzXCIsXCJDdHJsLV1cIjpcImluZGVudE1vcmVcIixcIkN0cmwtVVwiOlwidW5kb1NlbGVjdGlvblwiLFwiU2hpZnQtQ3RybC1VXCI6XCJyZWRvU2VsZWN0aW9uXCIsXCJBbHQtVVwiOlwicmVkb1NlbGVjdGlvblwiLGZhbGx0aHJvdWdoOlwiYmFzaWNcIn0sZW1hY3N5OntcIkN0cmwtRlwiOlwiZ29DaGFyUmlnaHRcIixcIkN0cmwtQlwiOlwiZ29DaGFyTGVmdFwiLFwiQ3RybC1QXCI6XCJnb0xpbmVVcFwiLFwiQ3RybC1OXCI6XCJnb0xpbmVEb3duXCIsXCJDdHJsLUFcIjpcImdvTGluZVN0YXJ0XCIsXCJDdHJsLUVcIjpcImdvTGluZUVuZFwiLFwiQ3RybC1WXCI6XCJnb1BhZ2VEb3duXCIsXCJTaGlmdC1DdHJsLVZcIjpcImdvUGFnZVVwXCIsXCJDdHJsLURcIjpcImRlbENoYXJBZnRlclwiLFwiQ3RybC1IXCI6XCJkZWxDaGFyQmVmb3JlXCIsXCJBbHQtQmFja3NwYWNlXCI6XCJkZWxXb3JkQmVmb3JlXCIsXCJDdHJsLUtcIjpcImtpbGxMaW5lXCIsXCJDdHJsLVRcIjpcInRyYW5zcG9zZUNoYXJzXCIsXG5cIkN0cmwtT1wiOlwib3BlbkxpbmVcIn0sbWFjRGVmYXVsdDp7XCJDbWQtQVwiOlwic2VsZWN0QWxsXCIsXCJDbWQtRFwiOlwiZGVsZXRlTGluZVwiLFwiQ21kLVpcIjpcInVuZG9cIixcIlNoaWZ0LUNtZC1aXCI6XCJyZWRvXCIsXCJDbWQtWVwiOlwicmVkb1wiLFwiQ21kLUhvbWVcIjpcImdvRG9jU3RhcnRcIixcIkNtZC1VcFwiOlwiZ29Eb2NTdGFydFwiLFwiQ21kLUVuZFwiOlwiZ29Eb2NFbmRcIixcIkNtZC1Eb3duXCI6XCJnb0RvY0VuZFwiLFwiQWx0LUxlZnRcIjpcImdvR3JvdXBMZWZ0XCIsXCJBbHQtUmlnaHRcIjpcImdvR3JvdXBSaWdodFwiLFwiQ21kLUxlZnRcIjpcImdvTGluZUxlZnRcIixcIkNtZC1SaWdodFwiOlwiZ29MaW5lUmlnaHRcIixcIkFsdC1CYWNrc3BhY2VcIjpcImRlbEdyb3VwQmVmb3JlXCIsXCJDdHJsLUFsdC1CYWNrc3BhY2VcIjpcImRlbEdyb3VwQWZ0ZXJcIixcIkFsdC1EZWxldGVcIjpcImRlbEdyb3VwQWZ0ZXJcIixcIkNtZC1TXCI6XCJzYXZlXCIsXCJDbWQtRlwiOlwiZmluZFwiLFwiQ21kLUdcIjpcImZpbmROZXh0XCIsXCJTaGlmdC1DbWQtR1wiOlwiZmluZFByZXZcIixcIkNtZC1BbHQtRlwiOlwicmVwbGFjZVwiLFxuXCJTaGlmdC1DbWQtQWx0LUZcIjpcInJlcGxhY2VBbGxcIixcIkNtZC1bXCI6XCJpbmRlbnRMZXNzXCIsXCJDbWQtXVwiOlwiaW5kZW50TW9yZVwiLFwiQ21kLUJhY2tzcGFjZVwiOlwiZGVsV3JhcHBlZExpbmVMZWZ0XCIsXCJDbWQtRGVsZXRlXCI6XCJkZWxXcmFwcGVkTGluZVJpZ2h0XCIsXCJDbWQtVVwiOlwidW5kb1NlbGVjdGlvblwiLFwiU2hpZnQtQ21kLVVcIjpcInJlZG9TZWxlY3Rpb25cIixcIkN0cmwtVXBcIjpcImdvRG9jU3RhcnRcIixcIkN0cmwtRG93blwiOlwiZ29Eb2NFbmRcIixmYWxsdGhyb3VnaDpbXCJiYXNpY1wiLFwiZW1hY3N5XCJdfX07aWNbXCJkZWZhdWx0XCJdPXlhP2ljLm1hY0RlZmF1bHQ6aWMucGNEZWZhdWx0O3ZhciBqYz17c2VsZWN0QWxsOkxmLHNpbmdsZVNlbGVjdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gYS5zZXRTZWxlY3Rpb24oYS5nZXRDdXJzb3IoXCJhbmNob3JcIiksYS5nZXRDdXJzb3IoXCJoZWFkXCIpLElhKX0sa2lsbExpbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIEdiKGEsZnVuY3Rpb24oYil7aWYoYi5lbXB0eSgpKXt2YXIgZD1cbncoYS5kb2MsYi5oZWFkLmxpbmUpLnRleHQubGVuZ3RoO3JldHVybiBiLmhlYWQuY2g9PWQmJmIuaGVhZC5saW5lPGEubGFzdExpbmUoKT97ZnJvbTpiLmhlYWQsdG86dChiLmhlYWQubGluZSsxLDApfTp7ZnJvbTpiLmhlYWQsdG86dChiLmhlYWQubGluZSxkKX19cmV0dXJue2Zyb206Yi5mcm9tKCksdG86Yi50bygpfX0pfSxkZWxldGVMaW5lOmZ1bmN0aW9uKGEpe3JldHVybiBHYihhLGZ1bmN0aW9uKGIpe3JldHVybntmcm9tOnQoYi5mcm9tKCkubGluZSwwKSx0bzpDKGEuZG9jLHQoYi50bygpLmxpbmUrMSwwKSl9fSl9LGRlbExpbmVMZWZ0OmZ1bmN0aW9uKGEpe3JldHVybiBHYihhLGZ1bmN0aW9uKGIpe3JldHVybntmcm9tOnQoYi5mcm9tKCkubGluZSwwKSx0bzpiLmZyb20oKX19KX0sZGVsV3JhcHBlZExpbmVMZWZ0OmZ1bmN0aW9uKGEpe3JldHVybiBHYihhLGZ1bmN0aW9uKGIpe3ZhciBkPWEuY2hhckNvb3JkcyhiLmhlYWQsXCJkaXZcIikudG9wKzU7cmV0dXJue2Zyb206YS5jb29yZHNDaGFyKHtsZWZ0OjAsXG50b3A6ZH0sXCJkaXZcIiksdG86Yi5mcm9tKCl9fSl9LGRlbFdyYXBwZWRMaW5lUmlnaHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEdiKGEsZnVuY3Rpb24oYil7dmFyIGQ9YS5jaGFyQ29vcmRzKGIuaGVhZCxcImRpdlwiKS50b3ArNTtkPWEuY29vcmRzQ2hhcih7bGVmdDphLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCsxMDAsdG9wOmR9LFwiZGl2XCIpO3JldHVybntmcm9tOmIuZnJvbSgpLHRvOmR9fSl9LHVuZG86ZnVuY3Rpb24oYSl7cmV0dXJuIGEudW5kbygpfSxyZWRvOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlZG8oKX0sdW5kb1NlbGVjdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gYS51bmRvU2VsZWN0aW9uKCl9LHJlZG9TZWxlY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVkb1NlbGVjdGlvbigpfSxnb0RvY1N0YXJ0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmV4dGVuZFNlbGVjdGlvbih0KGEuZmlyc3RMaW5lKCksMCkpfSxnb0RvY0VuZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5leHRlbmRTZWxlY3Rpb24odChhLmxhc3RMaW5lKCkpKX0sXG5nb0xpbmVTdGFydDpmdW5jdGlvbihhKXtyZXR1cm4gYS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24oYil7cmV0dXJuIGJnKGEsYi5oZWFkLmxpbmUpfSx7b3JpZ2luOlwiK21vdmVcIixiaWFzOjF9KX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbihhKXtyZXR1cm4gYS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24oYil7cmV0dXJuIGNnKGEsYi5oZWFkKX0se29yaWdpbjpcIittb3ZlXCIsYmlhczoxfSl9LGdvTGluZUVuZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24oYil7Yj1iLmhlYWQubGluZTt2YXIgZD13KGEuZG9jLGIpO3ZhciBjPWQ7Zm9yKHZhciBlO2U9c2IoYywhMSk7KWM9ZS5maW5kKDEsITApLmxpbmU7YyE9ZCYmKGI9TihjKSk7cmV0dXJuIGdlKCEwLGEsZCxiLC0xKX0se29yaWdpbjpcIittb3ZlXCIsYmlhczotMX0pfSxnb0xpbmVSaWdodDpmdW5jdGlvbihhKXtyZXR1cm4gYS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24oYil7Yj1cbmEuY3Vyc29yQ29vcmRzKGIuaGVhZCxcImRpdlwiKS50b3ArNTtyZXR1cm4gYS5jb29yZHNDaGFyKHtsZWZ0OmEuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoKzEwMCx0b3A6Yn0sXCJkaXZcIil9LHFjKX0sZ29MaW5lTGVmdDpmdW5jdGlvbihhKXtyZXR1cm4gYS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24oYil7Yj1hLmN1cnNvckNvb3JkcyhiLmhlYWQsXCJkaXZcIikudG9wKzU7cmV0dXJuIGEuY29vcmRzQ2hhcih7bGVmdDowLHRvcDpifSxcImRpdlwiKX0scWMpfSxnb0xpbmVMZWZ0U21hcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKGIpe3ZhciBkPWEuY3Vyc29yQ29vcmRzKGIuaGVhZCxcImRpdlwiKS50b3ArNTtkPWEuY29vcmRzQ2hhcih7bGVmdDowLHRvcDpkfSxcImRpdlwiKTtyZXR1cm4gZC5jaDxhLmdldExpbmUoZC5saW5lKS5zZWFyY2goL1xcUy8pP2NnKGEsYi5oZWFkKTpkfSxxYyl9LGdvTGluZVVwOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1vdmVWKC0xLFxuXCJsaW5lXCIpfSxnb0xpbmVEb3duOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1vdmVWKDEsXCJsaW5lXCIpfSxnb1BhZ2VVcDpmdW5jdGlvbihhKXtyZXR1cm4gYS5tb3ZlVigtMSxcInBhZ2VcIil9LGdvUGFnZURvd246ZnVuY3Rpb24oYSl7cmV0dXJuIGEubW92ZVYoMSxcInBhZ2VcIil9LGdvQ2hhckxlZnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubW92ZUgoLTEsXCJjaGFyXCIpfSxnb0NoYXJSaWdodDpmdW5jdGlvbihhKXtyZXR1cm4gYS5tb3ZlSCgxLFwiY2hhclwiKX0sZ29Db2x1bW5MZWZ0OmZ1bmN0aW9uKGEpe3JldHVybiBhLm1vdmVIKC0xLFwiY29sdW1uXCIpfSxnb0NvbHVtblJpZ2h0OmZ1bmN0aW9uKGEpe3JldHVybiBhLm1vdmVIKDEsXCJjb2x1bW5cIil9LGdvV29yZExlZnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubW92ZUgoLTEsXCJ3b3JkXCIpfSxnb0dyb3VwUmlnaHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubW92ZUgoMSxcImdyb3VwXCIpfSxnb0dyb3VwTGVmdDpmdW5jdGlvbihhKXtyZXR1cm4gYS5tb3ZlSCgtMSxcblwiZ3JvdXBcIil9LGdvV29yZFJpZ2h0OmZ1bmN0aW9uKGEpe3JldHVybiBhLm1vdmVIKDEsXCJ3b3JkXCIpfSxkZWxDaGFyQmVmb3JlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRlbGV0ZUgoLTEsXCJjb2RlcG9pbnRcIil9LGRlbENoYXJBZnRlcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5kZWxldGVIKDEsXCJjaGFyXCIpfSxkZWxXb3JkQmVmb3JlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRlbGV0ZUgoLTEsXCJ3b3JkXCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGVsZXRlSCgxLFwid29yZFwiKX0sZGVsR3JvdXBCZWZvcmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGVsZXRlSCgtMSxcImdyb3VwXCIpfSxkZWxHcm91cEFmdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRlbGV0ZUgoMSxcImdyb3VwXCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKGEpe3JldHVybiBhLmluZGVudFNlbGVjdGlvbihcInNtYXJ0XCIpfSxpbmRlbnRNb3JlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmluZGVudFNlbGVjdGlvbihcImFkZFwiKX0sXG5pbmRlbnRMZXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmluZGVudFNlbGVjdGlvbihcInN1YnRyYWN0XCIpfSxpbnNlcnRUYWI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZVNlbGVjdGlvbihcIlxcdFwiKX0saW5zZXJ0U29mdFRhYjpmdW5jdGlvbihhKXtmb3IodmFyIGI9W10sZD1hLmxpc3RTZWxlY3Rpb25zKCksYz1hLm9wdGlvbnMudGFiU2l6ZSxlPTA7ZTxkLmxlbmd0aDtlKyspe3ZhciBmPWRbZV0uZnJvbSgpO2Y9d2EoYS5nZXRMaW5lKGYubGluZSksZi5jaCxjKTtiLnB1c2goaWQoYy1mJWMpKX1hLnJlcGxhY2VTZWxlY3Rpb25zKGIpfSxkZWZhdWx0VGFiOmZ1bmN0aW9uKGEpe2Euc29tZXRoaW5nU2VsZWN0ZWQoKT9hLmluZGVudFNlbGVjdGlvbihcImFkZFwiKTphLmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGFiXCIpfSx0cmFuc3Bvc2VDaGFyczpmdW5jdGlvbihhKXtyZXR1cm4gcmEoYSxmdW5jdGlvbigpe2Zvcih2YXIgYj1hLmxpc3RTZWxlY3Rpb25zKCksZD1bXSxjPTA7YzxiLmxlbmd0aDtjKyspaWYoYltjXS5lbXB0eSgpKXt2YXIgZT1cbmJbY10uaGVhZCxmPXcoYS5kb2MsZS5saW5lKS50ZXh0O2lmKGYpaWYoZS5jaD09Zi5sZW5ndGgmJihlPW5ldyB0KGUubGluZSxlLmNoLTEpKSwwPGUuY2gpZT1uZXcgdChlLmxpbmUsZS5jaCsxKSxhLnJlcGxhY2VSYW5nZShmLmNoYXJBdChlLmNoLTEpK2YuY2hhckF0KGUuY2gtMiksdChlLmxpbmUsZS5jaC0yKSxlLFwiK3RyYW5zcG9zZVwiKTtlbHNlIGlmKGUubGluZT5hLmRvYy5maXJzdCl7dmFyIGc9dyhhLmRvYyxlLmxpbmUtMSkudGV4dDtnJiYoZT1uZXcgdChlLmxpbmUsMSksYS5yZXBsYWNlUmFuZ2UoZi5jaGFyQXQoMCkrYS5kb2MubGluZVNlcGFyYXRvcigpK2cuY2hhckF0KGcubGVuZ3RoLTEpLHQoZS5saW5lLTEsZy5sZW5ndGgtMSksZSxcIit0cmFuc3Bvc2VcIikpfWQucHVzaChuZXcgSShlLGUpKX1hLnNldFNlbGVjdGlvbnMoZCl9KX0sbmV3bGluZUFuZEluZGVudDpmdW5jdGlvbihhKXtyZXR1cm4gcmEoYSxmdW5jdGlvbigpe2Zvcih2YXIgYj1hLmxpc3RTZWxlY3Rpb25zKCksXG5kPWIubGVuZ3RoLTE7MDw9ZDtkLS0pYS5yZXBsYWNlUmFuZ2UoYS5kb2MubGluZVNlcGFyYXRvcigpLGJbZF0uYW5jaG9yLGJbZF0uaGVhZCxcIitpbnB1dFwiKTtiPWEubGlzdFNlbGVjdGlvbnMoKTtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKWEuaW5kZW50TGluZShiW2RdLmZyb20oKS5saW5lLG51bGwsITApO3hiKGEpfSl9LG9wZW5MaW5lOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2VTZWxlY3Rpb24oXCJcXG5cIixcInN0YXJ0XCIpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudG9nZ2xlT3ZlcndyaXRlKCl9fSxsaD1uZXcgWGEsaGU9bnVsbCxpZT1mdW5jdGlvbihhLGIsZCl7dGhpcy50aW1lPWE7dGhpcy5wb3M9Yjt0aGlzLmJ1dHRvbj1kfTtpZS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIHRoaXMudGltZSs0MDA+YSYmMD09QihiLHRoaXMucG9zKSYmZD09dGhpcy5idXR0b259O3ZhciBtYyxsYyxIYj17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIkNvZGVNaXJyb3IuSW5pdFwifX0sXG5tZz17fSxiZD17fTtVLmRlZmF1bHRzPW1nO1Uub3B0aW9uSGFuZGxlcnM9YmQ7dmFyIGxlPVtdO1UuZGVmaW5lSW5pdEhvb2s9ZnVuY3Rpb24oYSl7cmV0dXJuIGxlLnB1c2goYSl9O3ZhciBzYT1udWxsLE89ZnVuY3Rpb24oYSl7dGhpcy5jbT1hO3RoaXMubGFzdEFuY2hvck5vZGU9dGhpcy5sYXN0QW5jaG9yT2Zmc2V0PXRoaXMubGFzdEZvY3VzTm9kZT10aGlzLmxhc3RGb2N1c09mZnNldD1udWxsO3RoaXMucG9sbGluZz1uZXcgWGE7dGhpcy5jb21wb3Npbmc9bnVsbDt0aGlzLmdyYWNlUGVyaW9kPSExO3RoaXMucmVhZERPTVRpbWVvdXQ9bnVsbH07Ty5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGgpe2ZvcihoPWgudGFyZ2V0O2g7aD1oLnBhcmVudE5vZGUpe2lmKGg9PWcpcmV0dXJuITA7aWYoL1xcYkNvZGVNaXJyb3ItKD86bGluZSk/d2lkZ2V0XFxiLy50ZXN0KGguY2xhc3NOYW1lKSlicmVha31yZXR1cm4hMX1mdW5jdGlvbiBkKGgpe2lmKGIoaCkmJiFaKGYsXG5oKSl7aWYoZi5zb21ldGhpbmdTZWxlY3RlZCgpKXNhPXtsaW5lV2lzZTohMSx0ZXh0OmYuZ2V0U2VsZWN0aW9ucygpfSxcImN1dFwiPT1oLnR5cGUmJmYucmVwbGFjZVNlbGVjdGlvbihcIlwiLG51bGwsXCJjdXRcIik7ZWxzZSBpZihmLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KXt2YXIgaz1xZyhmKTtzYT17bGluZVdpc2U6ITAsdGV4dDprLnRleHR9O1wiY3V0XCI9PWgudHlwZSYmZi5vcGVyYXRpb24oZnVuY3Rpb24oKXtmLnNldFNlbGVjdGlvbnMoay5yYW5nZXMsMCxJYSk7Zi5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsbnVsbCxcImN1dFwiKX0pfWVsc2UgcmV0dXJuO2lmKGguY2xpcGJvYXJkRGF0YSl7aC5jbGlwYm9hcmREYXRhLmNsZWFyRGF0YSgpO3ZhciBsPXNhLnRleHQuam9pbihcIlxcblwiKTtoLmNsaXBib2FyZERhdGEuc2V0RGF0YShcIlRleHRcIixsKTtpZihoLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcIlRleHRcIik9PWwpe2gucHJldmVudERlZmF1bHQoKTtyZXR1cm59fXZhciBtPXNnKCk7aD1tLmZpcnN0Q2hpbGQ7XG5mLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShtLGYuZGlzcGxheS5saW5lU3BhY2UuZmlyc3RDaGlsZCk7aC52YWx1ZT1zYS50ZXh0LmpvaW4oXCJcXG5cIik7dmFyIG49a2EoZy5vd25lckRvY3VtZW50KTtwYyhoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zi5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChtKTtuLmZvY3VzKCk7bj09ZyYmZS5zaG93UHJpbWFyeVNlbGVjdGlvbigpfSw1MCl9fXZhciBjPXRoaXMsZT10aGlzLGY9ZS5jbSxnPWUuZGl2PWEubGluZURpdjtnLmNvbnRlbnRFZGl0YWJsZT0hMDtyZyhnLGYub3B0aW9ucy5zcGVsbGNoZWNrLGYub3B0aW9ucy5hdXRvY29ycmVjdCxmLm9wdGlvbnMuYXV0b2NhcGl0YWxpemUpO3ooZyxcInBhc3RlXCIsZnVuY3Rpb24oaCl7IWIoaCl8fFooZixoKXx8cGcoaCxmKXx8MTE+PVQmJnNldFRpbWVvdXQoYmEoZixmdW5jdGlvbigpe3JldHVybiBjLnVwZGF0ZUZyb21ET00oKX0pLDIwKX0pO3ooZyxcImNvbXBvc2l0aW9uc3RhcnRcIixcbmZ1bmN0aW9uKGgpe2MuY29tcG9zaW5nPXtkYXRhOmguZGF0YSxkb25lOiExfX0pO3ooZyxcImNvbXBvc2l0aW9udXBkYXRlXCIsZnVuY3Rpb24oaCl7Yy5jb21wb3Npbmd8fChjLmNvbXBvc2luZz17ZGF0YTpoLmRhdGEsZG9uZTohMX0pfSk7eihnLFwiY29tcG9zaXRpb25lbmRcIixmdW5jdGlvbihoKXtjLmNvbXBvc2luZyYmKGguZGF0YSE9Yy5jb21wb3NpbmcuZGF0YSYmYy5yZWFkRnJvbURPTVNvb24oKSxjLmNvbXBvc2luZy5kb25lPSEwKX0pO3ooZyxcInRvdWNoc3RhcnRcIixmdW5jdGlvbigpe3JldHVybiBlLmZvcmNlQ29tcG9zaXRpb25FbmQoKX0pO3ooZyxcImlucHV0XCIsZnVuY3Rpb24oKXtjLmNvbXBvc2luZ3x8Yy5yZWFkRnJvbURPTVNvb24oKX0pO3ooZyxcImNvcHlcIixkKTt6KGcsXCJjdXRcIixkKX07Ty5wcm90b3R5cGUuc2NyZWVuUmVhZGVyTGFiZWxDaGFuZ2VkPWZ1bmN0aW9uKGEpe2E/dGhpcy5kaXYuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLGEpOnRoaXMuZGl2LnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIil9O1xuTy5wcm90b3R5cGUucHJlcGFyZVNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBhPWdmKHRoaXMuY20sITEpO2EuZm9jdXM9a2EodGhpcy5kaXYub3duZXJEb2N1bWVudCk9PXRoaXMuZGl2O3JldHVybiBhfTtPLnByb3RvdHlwZS5zaG93U2VsZWN0aW9uPWZ1bmN0aW9uKGEsYil7YSYmdGhpcy5jbS5kaXNwbGF5LnZpZXcubGVuZ3RoJiYoKGEuZm9jdXN8fGIpJiZ0aGlzLnNob3dQcmltYXJ5U2VsZWN0aW9uKCksdGhpcy5zaG93TXVsdGlwbGVTZWxlY3Rpb25zKGEpKX07Ty5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY20uZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCl9O08ucHJvdG90eXBlLnNob3dQcmltYXJ5U2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3Rpb24oKSxiPXRoaXMuY20sZD1iLmRvYy5zZWwucHJpbWFyeSgpLGM9ZC5mcm9tKCk7ZD1kLnRvKCk7aWYoYi5kaXNwbGF5LnZpZXdUbz09XG5iLmRpc3BsYXkudmlld0Zyb218fGMubGluZT49Yi5kaXNwbGF5LnZpZXdUb3x8ZC5saW5lPGIuZGlzcGxheS52aWV3RnJvbSlhLnJlbW92ZUFsbFJhbmdlcygpO2Vsc2V7dmFyIGU9Y2QoYixhLmFuY2hvck5vZGUsYS5hbmNob3JPZmZzZXQpLGY9Y2QoYixhLmZvY3VzTm9kZSxhLmZvY3VzT2Zmc2V0KTtpZighZXx8ZS5iYWR8fCFmfHxmLmJhZHx8MCE9QihCYyhlLGYpLGMpfHwwIT1CKEFjKGUsZiksZCkpaWYoZT1iLmRpc3BsYXkudmlldyxjPWMubGluZT49Yi5kaXNwbGF5LnZpZXdGcm9tJiZ1ZyhiLGMpfHx7bm9kZTplWzBdLm1lYXN1cmUubWFwWzJdLG9mZnNldDowfSxkPWQubGluZTxiLmRpc3BsYXkudmlld1RvJiZ1ZyhiLGQpLGR8fChkPWVbZS5sZW5ndGgtMV0ubWVhc3VyZSxkPWQubWFwcz9kLm1hcHNbZC5tYXBzLmxlbmd0aC0xXTpkLm1hcCxkPXtub2RlOmRbZC5sZW5ndGgtMV0sb2Zmc2V0OmRbZC5sZW5ndGgtMl0tZFtkLmxlbmd0aC0zXX0pLGMmJmQpe2U9YS5yYW5nZUNvdW50JiZcbmEuZ2V0UmFuZ2VBdCgwKTt0cnl7dmFyIGc9UWIoYy5ub2RlLGMub2Zmc2V0LGQub2Zmc2V0LGQubm9kZSl9Y2F0Y2goaCl7fWcmJighTWEmJmIuc3RhdGUuZm9jdXNlZD8oYS5jb2xsYXBzZShjLm5vZGUsYy5vZmZzZXQpLGcuY29sbGFwc2VkfHwoYS5yZW1vdmVBbGxSYW5nZXMoKSxhLmFkZFJhbmdlKGcpKSk6KGEucmVtb3ZlQWxsUmFuZ2VzKCksYS5hZGRSYW5nZShnKSksZSYmbnVsbD09YS5hbmNob3JOb2RlP2EuYWRkUmFuZ2UoZSk6TWEmJnRoaXMuc3RhcnRHcmFjZVBlcmlvZCgpKTt0aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCl9ZWxzZSBhLnJlbW92ZUFsbFJhbmdlcygpfX07Ty5wcm90b3R5cGUuc3RhcnRHcmFjZVBlcmlvZD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMuZ3JhY2VQZXJpb2QpO3RoaXMuZ3JhY2VQZXJpb2Q9c2V0VGltZW91dChmdW5jdGlvbigpe2EuZ3JhY2VQZXJpb2Q9ITE7YS5zZWxlY3Rpb25DaGFuZ2VkKCkmJmEuY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGEuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD1cbiEwfSl9LDIwKX07Ty5wcm90b3R5cGUuc2hvd011bHRpcGxlU2VsZWN0aW9ucz1mdW5jdGlvbihhKXtEKHRoaXMuY20uZGlzcGxheS5jdXJzb3JEaXYsYS5jdXJzb3JzKTtEKHRoaXMuY20uZGlzcGxheS5zZWxlY3Rpb25EaXYsYS5zZWxlY3Rpb24pfTtPLnByb3RvdHlwZS5yZW1lbWJlclNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2VsZWN0aW9uKCk7dGhpcy5sYXN0QW5jaG9yTm9kZT1hLmFuY2hvck5vZGU7dGhpcy5sYXN0QW5jaG9yT2Zmc2V0PWEuYW5jaG9yT2Zmc2V0O3RoaXMubGFzdEZvY3VzTm9kZT1hLmZvY3VzTm9kZTt0aGlzLmxhc3RGb2N1c09mZnNldD1hLmZvY3VzT2Zmc2V0fTtPLnByb3RvdHlwZS5zZWxlY3Rpb25JbkVkaXRvcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2VsZWN0aW9uKCk7aWYoIWEucmFuZ2VDb3VudClyZXR1cm4hMTthPWEuZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtyZXR1cm4gamEodGhpcy5kaXYsYSl9O1xuTy5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXtcIm5vY3Vyc29yXCIhPXRoaXMuY20ub3B0aW9ucy5yZWFkT25seSYmKHRoaXMuc2VsZWN0aW9uSW5FZGl0b3IoKSYma2EodGhpcy5kaXYub3duZXJEb2N1bWVudCk9PXRoaXMuZGl2fHx0aGlzLnNob3dTZWxlY3Rpb24odGhpcy5wcmVwYXJlU2VsZWN0aW9uKCksITApLHRoaXMuZGl2LmZvY3VzKCkpfTtPLnByb3RvdHlwZS5ibHVyPWZ1bmN0aW9uKCl7dGhpcy5kaXYuYmx1cigpfTtPLnByb3RvdHlwZS5nZXRGaWVsZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdn07Ty5wcm90b3R5cGUuc3VwcG9ydHNUb3VjaD1mdW5jdGlvbigpe3JldHVybiEwfTtPLnByb3RvdHlwZS5yZWNlaXZlZEZvY3VzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2QuY20uc3RhdGUuZm9jdXNlZCYmKGQucG9sbFNlbGVjdGlvbigpLGQucG9sbGluZy5zZXQoZC5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCxhKSl9dmFyIGI9dGhpcyxkPXRoaXM7dGhpcy5zZWxlY3Rpb25JbkVkaXRvcigpP1xuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBiLnBvbGxTZWxlY3Rpb24oKX0sMjApOnJhKHRoaXMuY20sZnVuY3Rpb24oKXtyZXR1cm4gZC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPSEwfSk7dGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9wdGlvbnMucG9sbEludGVydmFsLGEpfTtPLnByb3RvdHlwZS5zZWxlY3Rpb25DaGFuZ2VkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3Rpb24oKTtyZXR1cm4gYS5hbmNob3JOb2RlIT10aGlzLmxhc3RBbmNob3JOb2RlfHxhLmFuY2hvck9mZnNldCE9dGhpcy5sYXN0QW5jaG9yT2Zmc2V0fHxhLmZvY3VzTm9kZSE9dGhpcy5sYXN0Rm9jdXNOb2RlfHxhLmZvY3VzT2Zmc2V0IT10aGlzLmxhc3RGb2N1c09mZnNldH07Ty5wcm90b3R5cGUucG9sbFNlbGVjdGlvbj1mdW5jdGlvbigpe2lmKG51bGw9PXRoaXMucmVhZERPTVRpbWVvdXQmJiF0aGlzLmdyYWNlUGVyaW9kJiZ0aGlzLnNlbGVjdGlvbkNoYW5nZWQoKSl7dmFyIGE9dGhpcy5nZXRTZWxlY3Rpb24oKSxcbmI9dGhpcy5jbTtpZihHYyYmUWEmJnRoaXMuY20uZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGgmJkFoKGEuYW5jaG9yTm9kZSkpdGhpcy5jbS50cmlnZ2VyT25LZXlEb3duKHt0eXBlOlwia2V5ZG93blwiLGtleUNvZGU6OCxwcmV2ZW50RGVmYXVsdDpNYXRoLmFic30pLHRoaXMuYmx1cigpLHRoaXMuZm9jdXMoKTtlbHNlIGlmKCF0aGlzLmNvbXBvc2luZyl7dGhpcy5yZW1lbWJlclNlbGVjdGlvbigpO3ZhciBkPWNkKGIsYS5hbmNob3JOb2RlLGEuYW5jaG9yT2Zmc2V0KSxjPWNkKGIsYS5mb2N1c05vZGUsYS5mb2N1c09mZnNldCk7ZCYmYyYmcmEoYixmdW5jdGlvbigpe2RhKGIuZG9jLE9hKGQsYyksSWEpO2lmKGQuYmFkfHxjLmJhZCliLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9ITB9KX19fTtPLnByb3RvdHlwZS5wb2xsQ29udGVudD1mdW5jdGlvbigpe251bGwhPXRoaXMucmVhZERPTVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5yZWFkRE9NVGltZW91dCksdGhpcy5yZWFkRE9NVGltZW91dD1cbm51bGwpO3ZhciBhPXRoaXMuY20sYj1hLmRpc3BsYXksZD1hLmRvYy5zZWwucHJpbWFyeSgpLGM9ZC5mcm9tKCksZT1kLnRvKCk7MD09Yy5jaCYmYy5saW5lPmEuZmlyc3RMaW5lKCkmJihjPXQoYy5saW5lLTEsdyhhLmRvYyxjLmxpbmUtMSkubGVuZ3RoKSk7ZS5jaD09dyhhLmRvYyxlLmxpbmUpLnRleHQubGVuZ3RoJiZlLmxpbmU8YS5sYXN0TGluZSgpJiYoZT10KGUubGluZSsxLDApKTtpZihjLmxpbmU8Yi52aWV3RnJvbXx8ZS5saW5lPmIudmlld1RvLTEpcmV0dXJuITE7dmFyIGY7Yy5saW5lPT1iLnZpZXdGcm9tfHwwPT0oZj1kYihhLGMubGluZSkpPyhkPU4oYi52aWV3WzBdLmxpbmUpLGY9Yi52aWV3WzBdLm5vZGUpOihkPU4oYi52aWV3W2ZdLmxpbmUpLGY9Yi52aWV3W2YtMV0ubm9kZS5uZXh0U2libGluZyk7dmFyIGc9ZGIoYSxlLmxpbmUpO2c9PWIudmlldy5sZW5ndGgtMT8oZT1iLnZpZXdUby0xLGI9Yi5saW5lRGl2Lmxhc3RDaGlsZCk6KGU9TihiLnZpZXdbZysxXS5saW5lKS1cbjEsYj1iLnZpZXdbZysxXS5ub2RlLnByZXZpb3VzU2libGluZyk7aWYoIWYpcmV0dXJuITE7Yj1hLmRvYy5zcGxpdExpbmVzKEJoKGEsZixiLGQsZSkpO2ZvcihmPWFiKGEuZG9jLHQoZCwwKSx0KGUsdyhhLmRvYyxlKS50ZXh0Lmxlbmd0aCkpOzE8Yi5sZW5ndGgmJjE8Zi5sZW5ndGg7KWlmKEooYik9PUooZikpYi5wb3AoKSxmLnBvcCgpLGUtLTtlbHNlIGlmKGJbMF09PWZbMF0pYi5zaGlmdCgpLGYuc2hpZnQoKSxkKys7ZWxzZSBicmVhazt2YXIgaD0wO2c9MDtmb3IodmFyIGs9YlswXSxsPWZbMF0sbT1NYXRoLm1pbihrLmxlbmd0aCxsLmxlbmd0aCk7aDxtJiZrLmNoYXJDb2RlQXQoaCk9PWwuY2hhckNvZGVBdChoKTspKytoO2s9SihiKTtsPUooZik7Zm9yKG09TWF0aC5taW4oay5sZW5ndGgtKDE9PWIubGVuZ3RoP2g6MCksbC5sZW5ndGgtKDE9PWYubGVuZ3RoP2g6MCkpO2c8bSYmay5jaGFyQ29kZUF0KGsubGVuZ3RoLWctMSk9PWwuY2hhckNvZGVBdChsLmxlbmd0aC1nLTEpOykrK2c7XG5pZigxPT1iLmxlbmd0aCYmMT09Zi5sZW5ndGgmJmQ9PWMubGluZSlmb3IoO2gmJmg+Yy5jaCYmay5jaGFyQ29kZUF0KGsubGVuZ3RoLWctMSk9PWwuY2hhckNvZGVBdChsLmxlbmd0aC1nLTEpOyloLS0sZysrO2JbYi5sZW5ndGgtMV09ay5zbGljZSgwLGsubGVuZ3RoLWcpLnJlcGxhY2UoL15cXHUyMDBiKy8sXCJcIik7YlswXT1iWzBdLnNsaWNlKGgpLnJlcGxhY2UoL1xcdTIwMGIrJC8sXCJcIik7Yz10KGQsaCk7ZD10KGUsZi5sZW5ndGg/SihmKS5sZW5ndGgtZzowKTtpZigxPGIubGVuZ3RofHxiWzBdfHxCKGMsZCkpcmV0dXJuIERiKGEuZG9jLGIsYyxkLFwiK2lucHV0XCIpLCEwfTtPLnByb3RvdHlwZS5lbnN1cmVQb2xsZWQ9ZnVuY3Rpb24oKXt0aGlzLmZvcmNlQ29tcG9zaXRpb25FbmQoKX07Ty5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmZvcmNlQ29tcG9zaXRpb25FbmQoKX07Ty5wcm90b3R5cGUuZm9yY2VDb21wb3NpdGlvbkVuZD1mdW5jdGlvbigpe3RoaXMuY29tcG9zaW5nJiZcbihjbGVhclRpbWVvdXQodGhpcy5yZWFkRE9NVGltZW91dCksdGhpcy5jb21wb3Npbmc9bnVsbCx0aGlzLnVwZGF0ZUZyb21ET00oKSx0aGlzLmRpdi5ibHVyKCksdGhpcy5kaXYuZm9jdXMoKSl9O08ucHJvdG90eXBlLnJlYWRGcm9tRE9NU29vbj1mdW5jdGlvbigpe3ZhciBhPXRoaXM7bnVsbD09dGhpcy5yZWFkRE9NVGltZW91dCYmKHRoaXMucmVhZERPTVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2EucmVhZERPTVRpbWVvdXQ9bnVsbDtpZihhLmNvbXBvc2luZylpZihhLmNvbXBvc2luZy5kb25lKWEuY29tcG9zaW5nPW51bGw7ZWxzZSByZXR1cm47YS51cGRhdGVGcm9tRE9NKCl9LDgwKSl9O08ucHJvdG90eXBlLnVwZGF0ZUZyb21ET009ZnVuY3Rpb24oKXt2YXIgYT10aGlzOyF0aGlzLmNtLmlzUmVhZE9ubHkoKSYmdGhpcy5wb2xsQ29udGVudCgpfHxyYSh0aGlzLmNtLGZ1bmN0aW9uKCl7cmV0dXJuIG1hKGEuY20pfSl9O08ucHJvdG90eXBlLnNldFVuZWRpdGFibGU9ZnVuY3Rpb24oYSl7YS5jb250ZW50RWRpdGFibGU9XG5cImZhbHNlXCJ9O08ucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24oYSl7MD09YS5jaGFyQ29kZXx8dGhpcy5jb21wb3Npbmd8fChhLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbS5pc1JlYWRPbmx5KCl8fGJhKHRoaXMuY20sbWUpKHRoaXMuY20sU3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1hLmNoYXJDb2RlP2Eua2V5Q29kZTphLmNoYXJDb2RlKSwwKSl9O08ucHJvdG90eXBlLnJlYWRPbmx5Q2hhbmdlZD1mdW5jdGlvbihhKXt0aGlzLmRpdi5jb250ZW50RWRpdGFibGU9U3RyaW5nKFwibm9jdXJzb3JcIiE9YSl9O08ucHJvdG90eXBlLm9uQ29udGV4dE1lbnU9ZnVuY3Rpb24oKXt9O08ucHJvdG90eXBlLnJlc2V0UG9zaXRpb249ZnVuY3Rpb24oKXt9O08ucHJvdG90eXBlLm5lZWRzQ29udGVudEF0dHJpYnV0ZT0hMDt2YXIgVj1mdW5jdGlvbihhKXt0aGlzLmNtPWE7dGhpcy5wcmV2SW5wdXQ9XCJcIjt0aGlzLnBvbGxpbmdGYXN0PSExO3RoaXMucG9sbGluZz1uZXcgWGE7dGhpcy5oYXNTZWxlY3Rpb249XG4hMTt0aGlzLmNvbXBvc2luZz1udWxsO3RoaXMucmVzZXR0aW5nPSExfTtWLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoZyl7aWYoIVooZSxnKSl7aWYoZS5zb21ldGhpbmdTZWxlY3RlZCgpKXNhPXtsaW5lV2lzZTohMSx0ZXh0OmUuZ2V0U2VsZWN0aW9ucygpfTtlbHNlIGlmKGUub3B0aW9ucy5saW5lV2lzZUNvcHlDdXQpe3ZhciBoPXFnKGUpO3NhPXtsaW5lV2lzZTohMCx0ZXh0OmgudGV4dH07XCJjdXRcIj09Zy50eXBlP2Uuc2V0U2VsZWN0aW9ucyhoLnJhbmdlcyxudWxsLElhKTooYy5wcmV2SW5wdXQ9XCJcIixmLnZhbHVlPWgudGV4dC5qb2luKFwiXFxuXCIpLHBjKGYpKX1lbHNlIHJldHVybjtcImN1dFwiPT1nLnR5cGUmJihlLnN0YXRlLmN1dEluY29taW5nPStuZXcgRGF0ZSl9fXZhciBkPXRoaXMsYz10aGlzLGU9dGhpcy5jbTt0aGlzLmNyZWF0ZUZpZWxkKGEpO3ZhciBmPXRoaXMudGV4dGFyZWE7YS53cmFwcGVyLmluc2VydEJlZm9yZSh0aGlzLndyYXBwZXIsYS53cmFwcGVyLmZpcnN0Q2hpbGQpO1xub2MmJihmLnN0eWxlLndpZHRoPVwiMHB4XCIpO3ooZixcImlucHV0XCIsZnVuY3Rpb24oKXtHJiY5PD1UJiZkLmhhc1NlbGVjdGlvbiYmKGQuaGFzU2VsZWN0aW9uPW51bGwpO2MucG9sbCgpfSk7eihmLFwicGFzdGVcIixmdW5jdGlvbihnKXtaKGUsZyl8fHBnKGcsZSl8fChlLnN0YXRlLnBhc3RlSW5jb21pbmc9K25ldyBEYXRlLGMuZmFzdFBvbGwoKSl9KTt6KGYsXCJjdXRcIixiKTt6KGYsXCJjb3B5XCIsYik7eihhLnNjcm9sbGVyLFwicGFzdGVcIixmdW5jdGlvbihnKXtpZighTGEoYSxnKSYmIVooZSxnKSlpZihmLmRpc3BhdGNoRXZlbnQpe3ZhciBoPW5ldyBFdmVudChcInBhc3RlXCIpO2guY2xpcGJvYXJkRGF0YT1nLmNsaXBib2FyZERhdGE7Zi5kaXNwYXRjaEV2ZW50KGgpfWVsc2UgZS5zdGF0ZS5wYXN0ZUluY29taW5nPStuZXcgRGF0ZSxjLmZvY3VzKCl9KTt6KGEubGluZVNwYWNlLFwic2VsZWN0c3RhcnRcIixmdW5jdGlvbihnKXtMYShhLGcpfHxsYShnKX0pO3ooZixcImNvbXBvc2l0aW9uc3RhcnRcIixcbmZ1bmN0aW9uKCl7dmFyIGc9ZS5nZXRDdXJzb3IoXCJmcm9tXCIpO2MuY29tcG9zaW5nJiZjLmNvbXBvc2luZy5yYW5nZS5jbGVhcigpO2MuY29tcG9zaW5nPXtzdGFydDpnLHJhbmdlOmUubWFya1RleHQoZyxlLmdldEN1cnNvcihcInRvXCIpLHtjbGFzc05hbWU6XCJDb2RlTWlycm9yLWNvbXBvc2luZ1wifSl9fSk7eihmLFwiY29tcG9zaXRpb25lbmRcIixmdW5jdGlvbigpe2MuY29tcG9zaW5nJiYoYy5wb2xsKCksYy5jb21wb3NpbmcucmFuZ2UuY2xlYXIoKSxjLmNvbXBvc2luZz1udWxsKX0pfTtWLnByb3RvdHlwZS5jcmVhdGVGaWVsZD1mdW5jdGlvbihhKXt0aGlzLndyYXBwZXI9c2coKTt0aGlzLnRleHRhcmVhPXRoaXMud3JhcHBlci5maXJzdENoaWxkfTtWLnByb3RvdHlwZS5zY3JlZW5SZWFkZXJMYWJlbENoYW5nZWQ9ZnVuY3Rpb24oYSl7YT90aGlzLnRleHRhcmVhLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixhKTp0aGlzLnRleHRhcmVhLnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIil9O1xuVi5wcm90b3R5cGUucHJlcGFyZVNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuY20sYj1hLmRpc3BsYXksZD1hLmRvYyxjPWdmKGEpO2lmKGEub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKXthPUJhKGEsZC5zZWwucHJpbWFyeSgpLmhlYWQsXCJkaXZcIik7ZD1iLndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIGU9Yi5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2MudGVUb3A9TWF0aC5tYXgoMCxNYXRoLm1pbihiLndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLGEudG9wK2UudG9wLWQudG9wKSk7Yy50ZUxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihiLndyYXBwZXIuY2xpZW50V2lkdGgtMTAsYS5sZWZ0K2UubGVmdC1kLmxlZnQpKX1yZXR1cm4gY307Vi5wcm90b3R5cGUuc2hvd1NlbGVjdGlvbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmNtLmRpc3BsYXk7RChiLmN1cnNvckRpdixhLmN1cnNvcnMpO0QoYi5zZWxlY3Rpb25EaXYsYS5zZWxlY3Rpb24pO1xubnVsbCE9YS50ZVRvcCYmKHRoaXMud3JhcHBlci5zdHlsZS50b3A9YS50ZVRvcCtcInB4XCIsdGhpcy53cmFwcGVyLnN0eWxlLmxlZnQ9YS50ZUxlZnQrXCJweFwiKX07Vi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oYSl7aWYoISh0aGlzLmNvbnRleHRNZW51UGVuZGluZ3x8dGhpcy5jb21wb3NpbmcmJmEpKXt2YXIgYj10aGlzLmNtO3RoaXMucmVzZXR0aW5nPSEwO2Iuc29tZXRoaW5nU2VsZWN0ZWQoKT8odGhpcy5wcmV2SW5wdXQ9XCJcIixhPWIuZ2V0U2VsZWN0aW9uKCksdGhpcy50ZXh0YXJlYS52YWx1ZT1hLGIuc3RhdGUuZm9jdXNlZCYmcGModGhpcy50ZXh0YXJlYSksRyYmOTw9VCYmKHRoaXMuaGFzU2VsZWN0aW9uPWEpKTphfHwodGhpcy5wcmV2SW5wdXQ9dGhpcy50ZXh0YXJlYS52YWx1ZT1cIlwiLEcmJjk8PVQmJih0aGlzLmhhc1NlbGVjdGlvbj1udWxsKSk7dGhpcy5yZXNldHRpbmc9ITF9fTtWLnByb3RvdHlwZS5nZXRGaWVsZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHRhcmVhfTtcblYucHJvdG90eXBlLnN1cHBvcnRzVG91Y2g9ZnVuY3Rpb24oKXtyZXR1cm4hMX07Vi5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXtpZihcIm5vY3Vyc29yXCIhPXRoaXMuY20ub3B0aW9ucy5yZWFkT25seSYmKCFhY3x8a2EodGhpcy50ZXh0YXJlYS5vd25lckRvY3VtZW50KSE9dGhpcy50ZXh0YXJlYSkpdHJ5e3RoaXMudGV4dGFyZWEuZm9jdXMoKX1jYXRjaChhKXt9fTtWLnByb3RvdHlwZS5ibHVyPWZ1bmN0aW9uKCl7dGhpcy50ZXh0YXJlYS5ibHVyKCl9O1YucHJvdG90eXBlLnJlc2V0UG9zaXRpb249ZnVuY3Rpb24oKXt0aGlzLndyYXBwZXIuc3R5bGUudG9wPXRoaXMud3JhcHBlci5zdHlsZS5sZWZ0PTB9O1YucHJvdG90eXBlLnJlY2VpdmVkRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLnNsb3dQb2xsKCl9O1YucHJvdG90eXBlLnNsb3dQb2xsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLnBvbGxpbmdGYXN0fHx0aGlzLnBvbGxpbmcuc2V0KHRoaXMuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsXG5mdW5jdGlvbigpe2EucG9sbCgpO2EuY20uc3RhdGUuZm9jdXNlZCYmYS5zbG93UG9sbCgpfSl9O1YucHJvdG90eXBlLmZhc3RQb2xsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2QucG9sbCgpfHxiPyhkLnBvbGxpbmdGYXN0PSExLGQuc2xvd1BvbGwoKSk6KGI9ITAsZC5wb2xsaW5nLnNldCg2MCxhKSl9dmFyIGI9ITEsZD10aGlzO2QucG9sbGluZ0Zhc3Q9ITA7ZC5wb2xsaW5nLnNldCgyMCxhKX07Vi5wcm90b3R5cGUucG9sbD1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLmNtLGQ9dGhpcy50ZXh0YXJlYSxjPXRoaXMucHJldklucHV0O2lmKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nfHx0aGlzLnJlc2V0dGluZ3x8IWIuc3RhdGUuZm9jdXNlZHx8R2goZCkmJiFjJiYhdGhpcy5jb21wb3Npbmd8fGIuaXNSZWFkT25seSgpfHxiLm9wdGlvbnMuZGlzYWJsZUlucHV0fHxiLnN0YXRlLmtleVNlcSlyZXR1cm4hMTt2YXIgZT1kLnZhbHVlO2lmKGU9PWMmJiFiLnNvbWV0aGluZ1NlbGVjdGVkKCkpcmV0dXJuITE7XG5pZihHJiY5PD1UJiZ0aGlzLmhhc1NlbGVjdGlvbj09PWV8fHlhJiYvW1xcdWY3MDAtXFx1ZjdmZl0vLnRlc3QoZSkpcmV0dXJuIGIuZGlzcGxheS5pbnB1dC5yZXNldCgpLCExO2lmKGIuZG9jLnNlbD09Yi5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51KXt2YXIgZj1lLmNoYXJDb2RlQXQoMCk7ODIwMyE9Znx8Y3x8KGM9XCJcXHUyMDBiXCIpO2lmKDg2NjY9PWYpcmV0dXJuIHRoaXMucmVzZXQoKSx0aGlzLmNtLmV4ZWNDb21tYW5kKFwidW5kb1wiKX12YXIgZz0wO2ZvcihmPU1hdGgubWluKGMubGVuZ3RoLGUubGVuZ3RoKTtnPGYmJmMuY2hhckNvZGVBdChnKT09ZS5jaGFyQ29kZUF0KGcpOykrK2c7cmEoYixmdW5jdGlvbigpe21lKGIsZS5zbGljZShnKSxjLmxlbmd0aC1nLG51bGwsYS5jb21wb3Npbmc/XCIqY29tcG9zZVwiOm51bGwpOzFFMzxlLmxlbmd0aHx8LTE8ZS5pbmRleE9mKFwiXFxuXCIpP2QudmFsdWU9YS5wcmV2SW5wdXQ9XCJcIjphLnByZXZJbnB1dD1lO2EuY29tcG9zaW5nJiYoYS5jb21wb3NpbmcucmFuZ2UuY2xlYXIoKSxcbmEuY29tcG9zaW5nLnJhbmdlPWIubWFya1RleHQoYS5jb21wb3Npbmcuc3RhcnQsYi5nZXRDdXJzb3IoXCJ0b1wiKSx7Y2xhc3NOYW1lOlwiQ29kZU1pcnJvci1jb21wb3NpbmdcIn0pKX0pO3JldHVybiEwfTtWLnByb3RvdHlwZS5lbnN1cmVQb2xsZWQ9ZnVuY3Rpb24oKXt0aGlzLnBvbGxpbmdGYXN0JiZ0aGlzLnBvbGwoKSYmKHRoaXMucG9sbGluZ0Zhc3Q9ITEpfTtWLnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKCl7RyYmOTw9VCYmKHRoaXMuaGFzU2VsZWN0aW9uPW51bGwpO3RoaXMuZmFzdFBvbGwoKX07Vi5wcm90b3R5cGUub25Db250ZXh0TWVudT1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7aWYobnVsbCE9Zy5zZWxlY3Rpb25TdGFydCl7dmFyIHE9ZS5zb21ldGhpbmdTZWxlY3RlZCgpLHI9XCJcXHUyMDBiXCIrKHE/Zy52YWx1ZTpcIlwiKTtnLnZhbHVlPVwiXFx1MjFkYVwiO2cudmFsdWU9cjtjLnByZXZJbnB1dD1xP1wiXCI6XCJcXHUyMDBiXCI7Zy5zZWxlY3Rpb25TdGFydD0xO2cuc2VsZWN0aW9uRW5kPVxuci5sZW5ndGg7Zi5zZWxGb3JDb250ZXh0TWVudT1lLmRvYy5zZWx9fWZ1bmN0aW9uIGQoKXtpZihjLmNvbnRleHRNZW51UGVuZGluZz09ZCYmKGMuY29udGV4dE1lbnVQZW5kaW5nPSExLGMud3JhcHBlci5zdHlsZS5jc3NUZXh0PW0sZy5zdHlsZS5jc3NUZXh0PWwsRyYmOT5UJiZmLnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGYuc2Nyb2xsZXIuc2Nyb2xsVG9wPWspLG51bGwhPWcuc2VsZWN0aW9uU3RhcnQpKXsoIUd8fEcmJjk+VCkmJmIoKTt2YXIgcT0wLHI9ZnVuY3Rpb24oKXtmLnNlbEZvckNvbnRleHRNZW51PT1lLmRvYy5zZWwmJjA9PWcuc2VsZWN0aW9uU3RhcnQmJjA8Zy5zZWxlY3Rpb25FbmQmJlwiXFx1MjAwYlwiPT1jLnByZXZJbnB1dD9iYShlLExmKShlKToxMD5xKys/Zi5kZXRlY3RpbmdTZWxlY3RBbGw9c2V0VGltZW91dChyLDUwMCk6KGYuc2VsRm9yQ29udGV4dE1lbnU9bnVsbCxmLmlucHV0LnJlc2V0KCkpfTtmLmRldGVjdGluZ1NlbGVjdEFsbD1zZXRUaW1lb3V0KHIsXG4yMDApfX12YXIgYz10aGlzLGU9Yy5jbSxmPWUuZGlzcGxheSxnPWMudGV4dGFyZWE7Yy5jb250ZXh0TWVudVBlbmRpbmcmJmMuY29udGV4dE1lbnVQZW5kaW5nKCk7dmFyIGg9Z2IoZSxhKSxrPWYuc2Nyb2xsZXIuc2Nyb2xsVG9wO2lmKGgmJiFDYSl7ZS5vcHRpb25zLnJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudSYmLTE9PWUuZG9jLnNlbC5jb250YWlucyhoKSYmYmEoZSxkYSkoZS5kb2MsT2EoaCksSWEpO3ZhciBsPWcuc3R5bGUuY3NzVGV4dCxtPWMud3JhcHBlci5zdHlsZS5jc3NUZXh0O2g9Yy53cmFwcGVyLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjLndyYXBwZXIuc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOiBzdGF0aWNcIjtnLnN0eWxlLmNzc1RleHQ9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7XFxuICAgICAgdG9wOiBcIisoYS5jbGllbnRZLWgudG9wLTUpK1wicHg7IGxlZnQ6IFwiKyhhLmNsaWVudFgtaC5sZWZ0LVxuNSkrXCJweDtcXG4gICAgICB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiBcIisoRz9cInJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1KVwiOlwidHJhbnNwYXJlbnRcIikrXCI7XFxuICAgICAgb3V0bGluZTogbm9uZTsgYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTtcIjtpZihmYSl2YXIgbj1nLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuc2Nyb2xsWTtmLmlucHV0LmZvY3VzKCk7ZmEmJmcub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5zY3JvbGxUbyhudWxsLG4pO2YuaW5wdXQucmVzZXQoKTtlLnNvbWV0aGluZ1NlbGVjdGVkKCl8fChnLnZhbHVlPWMucHJldklucHV0PVwiIFwiKTtjLmNvbnRleHRNZW51UGVuZGluZz1kO2Yuc2VsRm9yQ29udGV4dE1lbnU9ZS5kb2Muc2VsO2NsZWFyVGltZW91dChmLmRldGVjdGluZ1NlbGVjdEFsbCk7RyYmOTw9VCYmYigpO2lmKGplKXtNYihhKTt2YXIgcD1cbmZ1bmN0aW9uKCl7dGEod2luZG93LFwibW91c2V1cFwiLHApO3NldFRpbWVvdXQoZCwyMCl9O3ood2luZG93LFwibW91c2V1cFwiLHApfWVsc2Ugc2V0VGltZW91dChkLDUwKX19O1YucHJvdG90eXBlLnJlYWRPbmx5Q2hhbmdlZD1mdW5jdGlvbihhKXthfHx0aGlzLnJlc2V0KCk7dGhpcy50ZXh0YXJlYS5kaXNhYmxlZD1cIm5vY3Vyc29yXCI9PWE7dGhpcy50ZXh0YXJlYS5yZWFkT25seT0hIWF9O1YucHJvdG90eXBlLnNldFVuZWRpdGFibGU9ZnVuY3Rpb24oKXt9O1YucHJvdG90eXBlLm5lZWRzQ29udGVudEF0dHJpYnV0ZT0hMTsoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihjLGUsZixnKXthLmRlZmF1bHRzW2NdPWU7ZiYmKGRbY109Zz9mdW5jdGlvbihoLGssbCl7bCE9SGImJmYoaCxrLGwpfTpmKX12YXIgZD1hLm9wdGlvbkhhbmRsZXJzO2EuZGVmaW5lT3B0aW9uPWI7YS5Jbml0PUhiO2IoXCJ2YWx1ZVwiLFwiXCIsZnVuY3Rpb24oYyxlKXtyZXR1cm4gYy5zZXRWYWx1ZShlKX0sITApO2IoXCJtb2RlXCIsXG5udWxsLGZ1bmN0aW9uKGMsZSl7Yy5kb2MubW9kZU9wdGlvbj1lOyRkKGMpfSwhMCk7YihcImluZGVudFVuaXRcIiwyLCRkLCEwKTtiKFwiaW5kZW50V2l0aFRhYnNcIiwhMSk7YihcInNtYXJ0SW5kZW50XCIsITApO2IoXCJ0YWJTaXplXCIsNCxmdW5jdGlvbihjKXtiYyhjKTtVYihjKTttYShjKX0sITApO2IoXCJsaW5lU2VwYXJhdG9yXCIsbnVsbCxmdW5jdGlvbihjLGUpe2lmKGMuZG9jLmxpbmVTZXA9ZSl7dmFyIGY9W10sZz1jLmRvYy5maXJzdDtjLmRvYy5pdGVyKGZ1bmN0aW9uKGspe2Zvcih2YXIgbD0wOzspe3ZhciBtPWsudGV4dC5pbmRleE9mKGUsbCk7aWYoLTE9PW0pYnJlYWs7bD1tK2UubGVuZ3RoO2YucHVzaCh0KGcsbSkpfWcrK30pO2Zvcih2YXIgaD1mLmxlbmd0aC0xOzA8PWg7aC0tKURiKGMuZG9jLGUsZltoXSx0KGZbaF0ubGluZSxmW2hdLmNoK2UubGVuZ3RoKSl9fSk7YihcInNwZWNpYWxDaGFyc1wiLC9bXFx1MDAwMC1cXHUwMDFmXFx1MDA3Zi1cXHUwMDlmXFx1MDBhZFxcdTA2MWNcXHUyMDBiXFx1MjAwZVxcdTIwMGZcXHUyMDI4XFx1MjAyOVxcdTIwMmRcXHUyMDJlXFx1MjA2NlxcdTIwNjdcXHUyMDY5XFx1ZmVmZlxcdWZmZjktXFx1ZmZmY10vZyxcbmZ1bmN0aW9uKGMsZSxmKXtjLnN0YXRlLnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKGUuc291cmNlKyhlLnRlc3QoXCJcXHRcIik/XCJcIjpcInxcXHRcIiksXCJnXCIpO2YhPUhiJiZjLnJlZnJlc2goKX0pO2IoXCJzcGVjaWFsQ2hhclBsYWNlaG9sZGVyXCIsTWcsZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVmcmVzaCgpfSwhMCk7YihcImVsZWN0cmljQ2hhcnNcIiwhMCk7YihcImlucHV0U3R5bGVcIixhYz9cImNvbnRlbnRlZGl0YWJsZVwiOlwidGV4dGFyZWFcIixmdW5jdGlvbigpe3Rocm93IEVycm9yKFwiaW5wdXRTdHlsZSBjYW4gbm90ICh5ZXQpIGJlIGNoYW5nZWQgaW4gYSBydW5uaW5nIGVkaXRvclwiKTt9LCEwKTtiKFwic3BlbGxjaGVja1wiLCExLGZ1bmN0aW9uKGMsZSl7cmV0dXJuIGMuZ2V0SW5wdXRGaWVsZCgpLnNwZWxsY2hlY2s9ZX0sITApO2IoXCJhdXRvY29ycmVjdFwiLCExLGZ1bmN0aW9uKGMsZSl7cmV0dXJuIGMuZ2V0SW5wdXRGaWVsZCgpLmF1dG9jb3JyZWN0PWV9LCEwKTtiKFwiYXV0b2NhcGl0YWxpemVcIixcbiExLGZ1bmN0aW9uKGMsZSl7cmV0dXJuIGMuZ2V0SW5wdXRGaWVsZCgpLmF1dG9jYXBpdGFsaXplPWV9LCEwKTtiKFwicnRsTW92ZVZpc3VhbGx5XCIsIUZoKTtiKFwid2hvbGVMaW5lVXBkYXRlQmVmb3JlXCIsITApO2IoXCJ0aGVtZVwiLFwiZGVmYXVsdFwiLGZ1bmN0aW9uKGMpe2xnKGMpOyRiKGMpfSwhMCk7YihcImtleU1hcFwiLFwiZGVmYXVsdFwiLGZ1bmN0aW9uKGMsZSxmKXtlPVhjKGUpOyhmPWYhPUhiJiZYYyhmKSkmJmYuZGV0YWNoJiZmLmRldGFjaChjLGUpO2UuYXR0YWNoJiZlLmF0dGFjaChjLGZ8fG51bGwpfSk7YihcImV4dHJhS2V5c1wiLG51bGwpO2IoXCJjb25maWd1cmVNb3VzZVwiLG51bGwpO2IoXCJsaW5lV3JhcHBpbmdcIiwhMSx5aCwhMCk7YihcImd1dHRlcnNcIixbXSxmdW5jdGlvbihjLGUpe2MuZGlzcGxheS5ndXR0ZXJTcGVjcz1ZZChlLGMub3B0aW9ucy5saW5lTnVtYmVycyk7JGIoYyl9LCEwKTtiKFwiZml4ZWRHdXR0ZXJcIiwhMCxmdW5jdGlvbihjLGUpe2MuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQ9XG5lP01kKGMuZGlzcGxheSkrXCJweFwiOlwiMFwiO2MucmVmcmVzaCgpfSwhMCk7YihcImNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyXCIsITEsZnVuY3Rpb24oYyl7cmV0dXJuIHliKGMpfSwhMCk7YihcInNjcm9sbGJhclN0eWxlXCIsXCJuYXRpdmVcIixmdW5jdGlvbihjKXtvZihjKTt5YihjKTtjLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoYy5kb2Muc2Nyb2xsVG9wKTtjLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KGMuZG9jLnNjcm9sbExlZnQpfSwhMCk7YihcImxpbmVOdW1iZXJzXCIsITEsZnVuY3Rpb24oYyxlKXtjLmRpc3BsYXkuZ3V0dGVyU3BlY3M9WWQoYy5vcHRpb25zLmd1dHRlcnMsZSk7JGIoYyl9LCEwKTtiKFwiZmlyc3RMaW5lTnVtYmVyXCIsMSwkYiwhMCk7YihcImxpbmVOdW1iZXJGb3JtYXR0ZXJcIixmdW5jdGlvbihjKXtyZXR1cm4gY30sJGIsITApO2IoXCJzaG93Q3Vyc29yV2hlblNlbGVjdGluZ1wiLCExLFZiLCEwKTtiKFwicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51XCIsXG4hMCk7YihcImxpbmVXaXNlQ29weUN1dFwiLCEwKTtiKFwicGFzdGVMaW5lc1BlclNlbGVjdGlvblwiLCEwKTtiKFwic2VsZWN0aW9uc01heVRvdWNoXCIsITEpO2IoXCJyZWFkT25seVwiLCExLGZ1bmN0aW9uKGMsZSl7XCJub2N1cnNvclwiPT1lJiYod2IoYyksYy5kaXNwbGF5LmlucHV0LmJsdXIoKSk7Yy5kaXNwbGF5LmlucHV0LnJlYWRPbmx5Q2hhbmdlZChlKX0pO2IoXCJzY3JlZW5SZWFkZXJMYWJlbFwiLG51bGwsZnVuY3Rpb24oYyxlKXtjLmRpc3BsYXkuaW5wdXQuc2NyZWVuUmVhZGVyTGFiZWxDaGFuZ2VkKFwiXCI9PT1lP251bGw6ZSl9KTtiKFwiZGlzYWJsZUlucHV0XCIsITEsZnVuY3Rpb24oYyxlKXtlfHxjLmRpc3BsYXkuaW5wdXQucmVzZXQoKX0sITApO2IoXCJkcmFnRHJvcFwiLCEwLHhoKTtiKFwiYWxsb3dEcm9wRmlsZVR5cGVzXCIsbnVsbCk7YihcImN1cnNvckJsaW5rUmF0ZVwiLDUzMCk7YihcImN1cnNvclNjcm9sbE1hcmdpblwiLDApO2IoXCJjdXJzb3JIZWlnaHRcIiwxLFZiLCEwKTtiKFwic2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZVwiLFxuITAsVmIsITApO2IoXCJ3b3JrVGltZVwiLDEwMCk7YihcIndvcmtEZWxheVwiLDEwMCk7YihcImZsYXR0ZW5TcGFuc1wiLCEwLGJjLCEwKTtiKFwiYWRkTW9kZUNsYXNzXCIsITEsYmMsITApO2IoXCJwb2xsSW50ZXJ2YWxcIiwxMDApO2IoXCJ1bmRvRGVwdGhcIiwyMDAsZnVuY3Rpb24oYyxlKXtyZXR1cm4gYy5kb2MuaGlzdG9yeS51bmRvRGVwdGg9ZX0pO2IoXCJoaXN0b3J5RXZlbnREZWxheVwiLDEyNTApO2IoXCJ2aWV3cG9ydE1hcmdpblwiLDEwLGZ1bmN0aW9uKGMpe3JldHVybiBjLnJlZnJlc2goKX0sITApO2IoXCJtYXhIaWdobGlnaHRMZW5ndGhcIiwxRTQsYmMsITApO2IoXCJtb3ZlSW5wdXRXaXRoQ3Vyc29yXCIsITAsZnVuY3Rpb24oYyxlKXtlfHxjLmRpc3BsYXkuaW5wdXQucmVzZXRQb3NpdGlvbigpfSk7YihcInRhYmluZGV4XCIsbnVsbCxmdW5jdGlvbihjLGUpe3JldHVybiBjLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKS50YWJJbmRleD1lfHxcIlwifSk7YihcImF1dG9mb2N1c1wiLG51bGwpO2IoXCJkaXJlY3Rpb25cIixcblwibHRyXCIsZnVuY3Rpb24oYyxlKXtyZXR1cm4gYy5kb2Muc2V0RGlyZWN0aW9uKGUpfSwhMCk7YihcInBocmFzZXNcIixudWxsKX0pKFUpOyhmdW5jdGlvbihhKXt2YXIgYj1hLm9wdGlvbkhhbmRsZXJzLGQ9YS5oZWxwZXJzPXt9O2EucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphLGZvY3VzOmZ1bmN0aW9uKCl7cWEodGhpcykuZGVmYXVsdFZpZXcuZm9jdXMoKTt0aGlzLmRpc3BsYXkuaW5wdXQuZm9jdXMoKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKGMsZSl7dmFyIGY9dGhpcy5vcHRpb25zLGc9ZltjXTtpZihmW2NdIT1lfHxcIm1vZGVcIj09YylmW2NdPWUsYi5oYXNPd25Qcm9wZXJ0eShjKSYmYmEodGhpcyxiW2NdKSh0aGlzLGUsZyksVyh0aGlzLFwib3B0aW9uQ2hhbmdlXCIsdGhpcyxjKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLm9wdGlvbnNbY119LGdldERvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sYWRkS2V5TWFwOmZ1bmN0aW9uKGMsZSl7dGhpcy5zdGF0ZS5rZXlNYXBzW2U/XG5cInB1c2hcIjpcInVuc2hpZnRcIl0oWGMoYykpfSxyZW1vdmVLZXlNYXA6ZnVuY3Rpb24oYyl7Zm9yKHZhciBlPXRoaXMuc3RhdGUua2V5TWFwcyxmPTA7ZjxlLmxlbmd0aDsrK2YpaWYoZVtmXT09Y3x8ZVtmXS5uYW1lPT1jKXJldHVybiBlLnNwbGljZShmLDEpLCEwfSxhZGRPdmVybGF5OmlhKGZ1bmN0aW9uKGMsZSl7dmFyIGY9Yy50b2tlbj9jOmEuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsYyk7aWYoZi5zdGFydFN0YXRlKXRocm93IEVycm9yKFwiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC5cIik7eWcodGhpcy5zdGF0ZS5vdmVybGF5cyx7bW9kZTpmLG1vZGVTcGVjOmMsb3BhcXVlOmUmJmUub3BhcXVlLHByaW9yaXR5OmUmJmUucHJpb3JpdHl8fDB9LGZ1bmN0aW9uKGcpe3JldHVybiBnLnByaW9yaXR5fSk7dGhpcy5zdGF0ZS5tb2RlR2VuKys7bWEodGhpcyl9KSxyZW1vdmVPdmVybGF5OmlhKGZ1bmN0aW9uKGMpe2Zvcih2YXIgZT10aGlzLnN0YXRlLm92ZXJsYXlzLGY9MDtmPGUubGVuZ3RoOysrZil7dmFyIGc9XG5lW2ZdLm1vZGVTcGVjO2lmKGc9PWN8fFwic3RyaW5nXCI9PXR5cGVvZiBjJiZnLm5hbWU9PWMpe2Uuc3BsaWNlKGYsMSk7dGhpcy5zdGF0ZS5tb2RlR2VuKys7bWEodGhpcyk7YnJlYWt9fX0pLGluZGVudExpbmU6aWEoZnVuY3Rpb24oYyxlLGYpe1wic3RyaW5nXCIhPXR5cGVvZiBlJiZcIm51bWJlclwiIT10eXBlb2YgZSYmKGU9bnVsbD09ZT90aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQ/XCJzbWFydFwiOlwicHJldlwiOmU/XCJhZGRcIjpcInN1YnRyYWN0XCIpO05iKHRoaXMuZG9jLGMpJiZuYyh0aGlzLGMsZSxmKX0pLGluZGVudFNlbGVjdGlvbjppYShmdW5jdGlvbihjKXtmb3IodmFyIGU9dGhpcy5kb2Muc2VsLnJhbmdlcyxmPS0xLGc9MDtnPGUubGVuZ3RoO2crKyl7dmFyIGg9ZVtnXTtpZihoLmVtcHR5KCkpaC5oZWFkLmxpbmU+ZiYmKG5jKHRoaXMsaC5oZWFkLmxpbmUsYywhMCksZj1oLmhlYWQubGluZSxnPT10aGlzLmRvYy5zZWwucHJpbUluZGV4JiZ4Yih0aGlzKSk7ZWxzZXt2YXIgaz1oLmZyb20oKTtcbmg9aC50bygpO3ZhciBsPU1hdGgubWF4KGYsay5saW5lKTtmPU1hdGgubWluKHRoaXMubGFzdExpbmUoKSxoLmxpbmUtKGguY2g/MDoxKSkrMTtmb3IoaD1sO2g8ZjsrK2gpbmModGhpcyxoLGMpO2g9dGhpcy5kb2Muc2VsLnJhbmdlczswPT1rLmNoJiZlLmxlbmd0aD09aC5sZW5ndGgmJjA8aFtnXS5mcm9tKCkuY2gmJmRlKHRoaXMuZG9jLGcsbmV3IEkoayxoW2ddLnRvKCkpLElhKX19fSksZ2V0VG9rZW5BdDpmdW5jdGlvbihjLGUpe3JldHVybiBDZSh0aGlzLGMsZSl9LGdldExpbmVUb2tlbnM6ZnVuY3Rpb24oYyxlKXtyZXR1cm4gQ2UodGhpcyx0KGMpLGUsITApfSxnZXRUb2tlblR5cGVBdDpmdW5jdGlvbihjKXtjPUModGhpcy5kb2MsYyk7dmFyIGU9QWUodGhpcyx3KHRoaXMuZG9jLGMubGluZSkpLGY9MCxnPShlLmxlbmd0aC0xKS8yO2M9Yy5jaDtpZigwPT1jKWU9ZVsyXTtlbHNlIGZvcig7Oyl7dmFyIGg9ZitnPj4xO2lmKChoP2VbMipoLTFdOjApPj1jKWc9aDtlbHNlIGlmKGVbMipcbmgrMV08YylmPWgrMTtlbHNle2U9ZVsyKmgrMl07YnJlYWt9fWY9ZT9lLmluZGV4T2YoXCJvdmVybGF5IFwiKTotMTtyZXR1cm4gMD5mP2U6MD09Zj9udWxsOmUuc2xpY2UoMCxmLTEpfSxnZXRNb2RlQXQ6ZnVuY3Rpb24oYyl7dmFyIGU9dGhpcy5kb2MubW9kZTtyZXR1cm4gZS5pbm5lck1vZGU/YS5pbm5lck1vZGUoZSx0aGlzLmdldFRva2VuQXQoYykuc3RhdGUpLm1vZGU6ZX0sZ2V0SGVscGVyOmZ1bmN0aW9uKGMsZSl7cmV0dXJuIHRoaXMuZ2V0SGVscGVycyhjLGUpWzBdfSxnZXRIZWxwZXJzOmZ1bmN0aW9uKGMsZSl7dmFyIGY9W107aWYoIWQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIGY7dmFyIGc9ZFtlXTtjPXRoaXMuZ2V0TW9kZUF0KGMpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBjW2VdKWdbY1tlXV0mJmYucHVzaChnW2NbZV1dKTtlbHNlIGlmKGNbZV0pZm9yKHZhciBoPTA7aDxjW2VdLmxlbmd0aDtoKyspe3ZhciBrPWdbY1tlXVtoXV07ayYmZi5wdXNoKGspfWVsc2UgYy5oZWxwZXJUeXBlJiZcbmdbYy5oZWxwZXJUeXBlXT9mLnB1c2goZ1tjLmhlbHBlclR5cGVdKTpnW2MubmFtZV0mJmYucHVzaChnW2MubmFtZV0pO2ZvcihlPTA7ZTxnLl9nbG9iYWwubGVuZ3RoO2UrKyloPWcuX2dsb2JhbFtlXSxoLnByZWQoYyx0aGlzKSYmLTE9PWVhKGYsaC52YWwpJiZmLnB1c2goaC52YWwpO3JldHVybiBmfSxnZXRTdGF0ZUFmdGVyOmZ1bmN0aW9uKGMsZSl7dmFyIGY9dGhpcy5kb2M7Yz1NYXRoLm1heChmLmZpcnN0LE1hdGgubWluKG51bGw9PWM/Zi5maXJzdCtmLnNpemUtMTpjLGYuZmlyc3QrZi5zaXplLTEpKTtyZXR1cm4gT2IodGhpcyxjKzEsZSkuc3RhdGV9LGN1cnNvckNvb3JkczpmdW5jdGlvbihjLGUpe3ZhciBmPXRoaXMuZG9jLnNlbC5wcmltYXJ5KCk7Yz1udWxsPT1jP2YuaGVhZDpcIm9iamVjdFwiPT10eXBlb2YgYz9DKHRoaXMuZG9jLGMpOmM/Zi5mcm9tKCk6Zi50bygpO3JldHVybiBCYSh0aGlzLGMsZXx8XCJwYWdlXCIpfSxjaGFyQ29vcmRzOmZ1bmN0aW9uKGMsZSl7cmV0dXJuIEljKHRoaXMsXG5DKHRoaXMuZG9jLGMpLGV8fFwicGFnZVwiKX0sY29vcmRzQ2hhcjpmdW5jdGlvbihjLGUpe2M9YWYodGhpcyxjLGV8fFwicGFnZVwiKTtyZXR1cm4gS2QodGhpcyxjLmxlZnQsYy50b3ApfSxsaW5lQXRIZWlnaHQ6ZnVuY3Rpb24oYyxlKXtjPWFmKHRoaXMse3RvcDpjLGxlZnQ6MH0sZXx8XCJwYWdlXCIpLnRvcDtyZXR1cm4gYmIodGhpcy5kb2MsYyt0aGlzLmRpc3BsYXkudmlld09mZnNldCl9LGhlaWdodEF0TGluZTpmdW5jdGlvbihjLGUsZil7dmFyIGc9ITE7aWYoXCJudW1iZXJcIj09dHlwZW9mIGMpe3ZhciBoPXRoaXMuZG9jLmZpcnN0K3RoaXMuZG9jLnNpemUtMTtjPHRoaXMuZG9jLmZpcnN0P2M9dGhpcy5kb2MuZmlyc3Q6Yz5oJiYoYz1oLGc9ITApO2M9dyh0aGlzLmRvYyxjKX1yZXR1cm4gSGModGhpcyxjLHt0b3A6MCxsZWZ0OjB9LGV8fFwicGFnZVwiLGZ8fGcpLnRvcCsoZz90aGlzLmRvYy5oZWlnaHQtR2EoYyk6MCl9LGRlZmF1bHRUZXh0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHZiKHRoaXMuZGlzcGxheSl9LFxuZGVmYXVsdENoYXJXaWR0aDpmdW5jdGlvbigpe3JldHVybiB1Yih0aGlzLmRpc3BsYXkpfSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS52aWV3RnJvbSx0bzp0aGlzLmRpc3BsYXkudmlld1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKGMsZSxmLGcsaCl7dmFyIGs9dGhpcy5kaXNwbGF5O2M9QmEodGhpcyxDKHRoaXMuZG9jLGMpKTt2YXIgbD1jLmJvdHRvbSxtPWMubGVmdDtlLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIjtlLnNldEF0dHJpYnV0ZShcImNtLWlnbm9yZS1ldmVudHNcIixcInRydWVcIik7dGhpcy5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUoZSk7ay5zaXplci5hcHBlbmRDaGlsZChlKTtpZihcIm92ZXJcIj09ZylsPWMudG9wO2Vsc2UgaWYoXCJhYm92ZVwiPT1nfHxcIm5lYXJcIj09Zyl7dmFyIG49TWF0aC5tYXgoay53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLmRvYy5oZWlnaHQpLHA9TWF0aC5tYXgoay5zaXplci5jbGllbnRXaWR0aCxrLmxpbmVTcGFjZS5jbGllbnRXaWR0aCk7XG4oXCJhYm92ZVwiPT1nfHxjLmJvdHRvbStlLm9mZnNldEhlaWdodD5uKSYmYy50b3A+ZS5vZmZzZXRIZWlnaHQ/bD1jLnRvcC1lLm9mZnNldEhlaWdodDpjLmJvdHRvbStlLm9mZnNldEhlaWdodDw9biYmKGw9Yy5ib3R0b20pO20rZS5vZmZzZXRXaWR0aD5wJiYobT1wLWUub2Zmc2V0V2lkdGgpfWUuc3R5bGUudG9wPWwrXCJweFwiO2Uuc3R5bGUubGVmdD1lLnN0eWxlLnJpZ2h0PVwiXCI7XCJyaWdodFwiPT1oPyhtPWsuc2l6ZXIuY2xpZW50V2lkdGgtZS5vZmZzZXRXaWR0aCxlLnN0eWxlLnJpZ2h0PVwiMHB4XCIpOihcImxlZnRcIj09aD9tPTA6XCJtaWRkbGVcIj09aCYmKG09KGsuc2l6ZXIuY2xpZW50V2lkdGgtZS5vZmZzZXRXaWR0aCkvMiksZS5zdHlsZS5sZWZ0PW0rXCJweFwiKTtmJiYoYz1UZCh0aGlzLHtsZWZ0Om0sdG9wOmwscmlnaHQ6bStlLm9mZnNldFdpZHRoLGJvdHRvbTpsK2Uub2Zmc2V0SGVpZ2h0fSksbnVsbCE9Yy5zY3JvbGxUb3AmJlhiKHRoaXMsYy5zY3JvbGxUb3ApLG51bGwhPWMuc2Nyb2xsTGVmdCYmXG5rYih0aGlzLGMuc2Nyb2xsTGVmdCkpfSx0cmlnZ2VyT25LZXlEb3duOmlhKGZnKSx0cmlnZ2VyT25LZXlQcmVzczppYShoZyksdHJpZ2dlck9uS2V5VXA6Z2csdHJpZ2dlck9uTW91c2VEb3duOmlhKGlnKSxleGVjQ29tbWFuZDpmdW5jdGlvbihjKXtpZihqYy5oYXNPd25Qcm9wZXJ0eShjKSlyZXR1cm4gamNbY10uY2FsbChudWxsLHRoaXMpfSx0cmlnZ2VyRWxlY3RyaWM6aWEoZnVuY3Rpb24oYyl7b2codGhpcyxjKX0pLGZpbmRQb3NIOmZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoPTE7MD5lJiYoaD0tMSxlPS1lKTtjPUModGhpcy5kb2MsYyk7Zm9yKHZhciBrPTA7azxlJiYoYz1vZSh0aGlzLmRvYyxjLGgsZixnKSwhYy5oaXRTaWRlKTsrK2spO3JldHVybiBjfSxtb3ZlSDppYShmdW5jdGlvbihjLGUpe3ZhciBmPXRoaXM7dGhpcy5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24oZyl7cmV0dXJuIGYuZGlzcGxheS5zaGlmdHx8Zi5kb2MuZXh0ZW5kfHxnLmVtcHR5KCk/b2UoZi5kb2MsXG5nLmhlYWQsYyxlLGYub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOjA+Yz9nLmZyb20oKTpnLnRvKCl9LHFjKX0pLGRlbGV0ZUg6aWEoZnVuY3Rpb24oYyxlKXt2YXIgZj10aGlzLmRvYzt0aGlzLmRvYy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKT9mLnJlcGxhY2VTZWxlY3Rpb24oXCJcIixudWxsLFwiK2RlbGV0ZVwiKTpHYih0aGlzLGZ1bmN0aW9uKGcpe3ZhciBoPW9lKGYsZy5oZWFkLGMsZSwhMSk7cmV0dXJuIDA+Yz97ZnJvbTpoLHRvOmcuaGVhZH06e2Zyb206Zy5oZWFkLHRvOmh9fSl9KSxmaW5kUG9zVjpmdW5jdGlvbihjLGUsZixnKXt2YXIgaD0xOzA+ZSYmKGg9LTEsZT0tZSk7dmFyIGs9Qyh0aGlzLmRvYyxjKTtmb3IoYz0wO2M8ZSYmKGs9QmEodGhpcyxrLFwiZGl2XCIpLG51bGw9PWc/Zz1rLmxlZnQ6ay5sZWZ0PWcsaz10Zyh0aGlzLGssaCxmKSwhay5oaXRTaWRlKTsrK2MpO3JldHVybiBrfSxtb3ZlVjppYShmdW5jdGlvbihjLGUpe3ZhciBmPXRoaXMsZz10aGlzLmRvYyxoPVtdLGs9XG4hdGhpcy5kaXNwbGF5LnNoaWZ0JiYhZy5leHRlbmQmJmcuc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCk7Zy5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24obSl7aWYoaylyZXR1cm4gMD5jP20uZnJvbSgpOm0udG8oKTt2YXIgbj1CYShmLG0uaGVhZCxcImRpdlwiKTtudWxsIT1tLmdvYWxDb2x1bW4mJihuLmxlZnQ9bS5nb2FsQ29sdW1uKTtoLnB1c2gobi5sZWZ0KTt2YXIgcD10ZyhmLG4sYyxlKTtcInBhZ2VcIj09ZSYmbT09Zy5zZWwucHJpbWFyeSgpJiZOYyhmLEljKGYscCxcImRpdlwiKS50b3Atbi50b3ApO3JldHVybiBwfSxxYyk7aWYoaC5sZW5ndGgpZm9yKHZhciBsPTA7bDxnLnNlbC5yYW5nZXMubGVuZ3RoO2wrKylnLnNlbC5yYW5nZXNbbF0uZ29hbENvbHVtbj1oW2xdfSksZmluZFdvcmRBdDpmdW5jdGlvbihjKXt2YXIgZT13KHRoaXMuZG9jLGMubGluZSkudGV4dCxmPWMuY2gsZz1jLmNoO2lmKGUpe3ZhciBoPXRoaXMuZ2V0SGVscGVyKGMsXCJ3b3JkQ2hhcnNcIik7XCJiZWZvcmVcIiE9XG5jLnN0aWNreSYmZyE9ZS5sZW5ndGh8fCFmPysrZzotLWY7dmFyIGs9ZS5jaGFyQXQoZik7Zm9yKGs9eGMoayxoKT9mdW5jdGlvbihsKXtyZXR1cm4geGMobCxoKX06L1xccy8udGVzdChrKT9mdW5jdGlvbihsKXtyZXR1cm4vXFxzLy50ZXN0KGwpfTpmdW5jdGlvbihsKXtyZXR1cm4hL1xccy8udGVzdChsKSYmIXhjKGwpfTswPGYmJmsoZS5jaGFyQXQoZi0xKSk7KS0tZjtmb3IoO2c8ZS5sZW5ndGgmJmsoZS5jaGFyQXQoZykpOykrK2d9cmV0dXJuIG5ldyBJKHQoYy5saW5lLGYpLHQoYy5saW5lLGcpKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKGMpe2lmKG51bGw9PWN8fGMhPXRoaXMuc3RhdGUub3ZlcndyaXRlKSh0aGlzLnN0YXRlLm92ZXJ3cml0ZT0hdGhpcy5zdGF0ZS5vdmVyd3JpdGUpP1lhKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsXCJDb2RlTWlycm9yLW92ZXJ3cml0ZVwiKTpqYih0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LFwiQ29kZU1pcnJvci1vdmVyd3JpdGVcIiksVyh0aGlzLFwib3ZlcndyaXRlVG9nZ2xlXCIsXG50aGlzLHRoaXMuc3RhdGUub3ZlcndyaXRlKX0saGFzRm9jdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCk9PWthKHFhKHRoaXMpKX0saXNSZWFkT25seTpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMub3B0aW9ucy5yZWFkT25seSYmIXRoaXMuZG9jLmNhbnRFZGl0KX0sc2Nyb2xsVG86aWEoZnVuY3Rpb24oYyxlKXtXYih0aGlzLGMsZSl9KSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5kaXNwbGF5LnNjcm9sbGVyO3JldHVybntsZWZ0OmMuc2Nyb2xsTGVmdCx0b3A6Yy5zY3JvbGxUb3AsaGVpZ2h0OmMuc2Nyb2xsSGVpZ2h0LUhhKHRoaXMpLXRoaXMuZGlzcGxheS5iYXJIZWlnaHQsd2lkdGg6Yy5zY3JvbGxXaWR0aC1IYSh0aGlzKS10aGlzLmRpc3BsYXkuYmFyV2lkdGgsY2xpZW50SGVpZ2h0OkVkKHRoaXMpLGNsaWVudFdpZHRoOmNiKHRoaXMpfX0sc2Nyb2xsSW50b1ZpZXc6aWEoZnVuY3Rpb24oYyxlKXtudWxsPT1jPyhjPVxue2Zyb206dGhpcy5kb2Muc2VsLnByaW1hcnkoKS5oZWFkLHRvOm51bGx9LG51bGw9PWUmJihlPXRoaXMub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pKTpcIm51bWJlclwiPT10eXBlb2YgYz9jPXtmcm9tOnQoYywwKSx0bzpudWxsfTpudWxsPT1jLmZyb20mJihjPXtmcm9tOmMsdG86bnVsbH0pO2MudG98fChjLnRvPWMuZnJvbSk7Yy5tYXJnaW49ZXx8MDtudWxsIT1jLmZyb20ubGluZT8oT2ModGhpcyksdGhpcy5jdXJPcC5zY3JvbGxUb1Bvcz1jKTprZih0aGlzLGMuZnJvbSxjLnRvLGMubWFyZ2luKX0pLHNldFNpemU6aWEoZnVuY3Rpb24oYyxlKXt2YXIgZj10aGlzLGc9ZnVuY3Rpb24oayl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGt8fC9eXFxkKyQvLnRlc3QoU3RyaW5nKGspKT9rK1wicHhcIjprfTtudWxsIT1jJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUud2lkdGg9ZyhjKSk7bnVsbCE9ZSYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdodD1nKGUpKTt0aGlzLm9wdGlvbnMubGluZVdyYXBwaW5nJiZcblllKHRoaXMpO3ZhciBoPXRoaXMuZGlzcGxheS52aWV3RnJvbTt0aGlzLmRvYy5pdGVyKGgsdGhpcy5kaXNwbGF5LnZpZXdUbyxmdW5jdGlvbihrKXtpZihrLndpZGdldHMpZm9yKHZhciBsPTA7bDxrLndpZGdldHMubGVuZ3RoO2wrKylpZihrLndpZGdldHNbbF0ubm9IU2Nyb2xsKXtTYShmLGgsXCJ3aWRnZXRcIik7YnJlYWt9KytofSk7dGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMDtXKHRoaXMsXCJyZWZyZXNoXCIsdGhpcyl9KSxvcGVyYXRpb246ZnVuY3Rpb24oYyl7cmV0dXJuIHJhKHRoaXMsYyl9LHN0YXJ0T3BlcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGxiKHRoaXMpfSxlbmRPcGVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gbWIodGhpcyl9LHJlZnJlc2g6aWEoZnVuY3Rpb24oKXt2YXIgYz10aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDttYSh0aGlzKTt0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwO1ViKHRoaXMpO1diKHRoaXMsdGhpcy5kb2Muc2Nyb2xsTGVmdCx0aGlzLmRvYy5zY3JvbGxUb3ApO1xuWGQodGhpcy5kaXNwbGF5KTsobnVsbD09Y3x8LjU8TWF0aC5hYnMoYy12Yih0aGlzLmRpc3BsYXkpKXx8dGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZykmJk5kKHRoaXMpO1codGhpcyxcInJlZnJlc2hcIix0aGlzKX0pLHN3YXBEb2M6aWEoZnVuY3Rpb24oYyl7dmFyIGU9dGhpcy5kb2M7ZS5jbT1udWxsO3RoaXMuc3RhdGUuc2VsZWN0aW5nVGV4dCYmdGhpcy5zdGF0ZS5zZWxlY3RpbmdUZXh0KCk7emYodGhpcyxjKTtVYih0aGlzKTt0aGlzLmRpc3BsYXkuaW5wdXQucmVzZXQoKTtXYih0aGlzLGMuc2Nyb2xsTGVmdCxjLnNjcm9sbFRvcCk7dGhpcy5jdXJPcC5mb3JjZVNjcm9sbD0hMDthYSh0aGlzLFwic3dhcERvY1wiLHRoaXMsZSk7cmV0dXJuIGV9KSxwaHJhc2U6ZnVuY3Rpb24oYyl7dmFyIGU9dGhpcy5vcHRpb25zLnBocmFzZXM7cmV0dXJuIGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGMpP2VbY106Y30sZ2V0SW5wdXRGaWVsZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKX0sXG5nZXRXcmFwcGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sZ2V0U2Nyb2xsZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcn0sZ2V0R3V0dGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc319O3BiKGEpO2EucmVnaXN0ZXJIZWxwZXI9ZnVuY3Rpb24oYyxlLGYpe2QuaGFzT3duUHJvcGVydHkoYyl8fChkW2NdPWFbY109e19nbG9iYWw6W119KTtkW2NdW2VdPWZ9O2EucmVnaXN0ZXJHbG9iYWxIZWxwZXI9ZnVuY3Rpb24oYyxlLGYsZyl7YS5yZWdpc3RlckhlbHBlcihjLGUsZyk7ZFtjXS5fZ2xvYmFsLnB1c2goe3ByZWQ6Zix2YWw6Z30pfX0pKFUpO3ZhciBJaD1cIml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciBjb25zdHJ1Y3RvclwiLnNwbGl0KFwiIFwiKSx1Yztmb3IodWMgaW4gb2EucHJvdG90eXBlKW9hLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSh1YykmJlxuMD5lYShJaCx1YykmJihVLnByb3RvdHlwZVt1Y109ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KG9hLnByb3RvdHlwZVt1Y10pKTtwYihvYSk7VS5pbnB1dFN0eWxlcz17dGV4dGFyZWE6Vixjb250ZW50ZWRpdGFibGU6T307VS5kZWZpbmVNb2RlPWZ1bmN0aW9uKGEpe1UuZGVmYXVsdHMubW9kZXx8XCJudWxsXCI9PWF8fChVLmRlZmF1bHRzLm1vZGU9YSk7RGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtVLmRlZmluZU1JTUU9ZnVuY3Rpb24oYSxiKXtxYlthXT1ifTtVLmRlZmluZU1vZGUoXCJudWxsXCIsZnVuY3Rpb24oKXtyZXR1cm57dG9rZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc2tpcFRvRW5kKCl9fX0pO1UuZGVmaW5lTUlNRShcInRleHQvcGxhaW5cIixcIm51bGxcIik7VS5kZWZpbmVFeHRlbnNpb249ZnVuY3Rpb24oYSxiKXtVLnByb3RvdHlwZVthXT1ifTtVLmRlZmluZURvY0V4dGVuc2lvbj1mdW5jdGlvbihhLGIpe29hLnByb3RvdHlwZVthXT1cbmJ9O1UuZnJvbVRleHRBcmVhPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZCgpe2EudmFsdWU9aC5nZXRWYWx1ZSgpfWI9Yj9aYShiKTp7fTtiLnZhbHVlPWEudmFsdWU7IWIudGFiaW5kZXgmJmEudGFiSW5kZXgmJihiLnRhYmluZGV4PWEudGFiSW5kZXgpOyFiLnBsYWNlaG9sZGVyJiZhLnBsYWNlaG9sZGVyJiYoYi5wbGFjZWhvbGRlcj1hLnBsYWNlaG9sZGVyKTtpZihudWxsPT1iLmF1dG9mb2N1cyl7dmFyIGM9a2EoYS5vd25lckRvY3VtZW50KTtiLmF1dG9mb2N1cz1jPT1hfHxudWxsIT1hLmdldEF0dHJpYnV0ZShcImF1dG9mb2N1c1wiKSYmYz09ZG9jdW1lbnQuYm9keX1pZihhLmZvcm0mJih6KGEuZm9ybSxcInN1Ym1pdFwiLGQpLCFiLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpKXt2YXIgZT1hLmZvcm07dmFyIGY9ZS5zdWJtaXQ7dHJ5e3ZhciBnPWUuc3VibWl0PWZ1bmN0aW9uKCl7ZCgpO2Uuc3VibWl0PWY7ZS5zdWJtaXQoKTtlLnN1Ym1pdD1nfX1jYXRjaChrKXt9fWIuZmluaXNoSW5pdD1cbmZ1bmN0aW9uKGspe2suc2F2ZT1kO2suZ2V0VGV4dEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gYX07ay50b1RleHRBcmVhPWZ1bmN0aW9uKCl7ay50b1RleHRBcmVhPWlzTmFOO2QoKTthLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoay5nZXRXcmFwcGVyRWxlbWVudCgpKTthLnN0eWxlLmRpc3BsYXk9XCJcIjthLmZvcm0mJih0YShhLmZvcm0sXCJzdWJtaXRcIixkKSxiLmxlYXZlU3VibWl0TWV0aG9kQWxvbmV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuZm9ybS5zdWJtaXR8fChhLmZvcm0uc3VibWl0PWYpKX19O2Euc3R5bGUuZGlzcGxheT1cIm5vbmVcIjt2YXIgaD1VKGZ1bmN0aW9uKGspe3JldHVybiBhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGssYS5uZXh0U2libGluZyl9LGIpO3JldHVybiBofTsoZnVuY3Rpb24oYSl7YS5vZmY9dGE7YS5vbj16O2Eud2hlZWxFdmVudFBpeGVscz1aZzthLkRvYz1vYTthLnNwbGl0TGluZXM9bmU7YS5jb3VudENvbHVtbj13YTthLmZpbmRDb2x1bW49aGQ7YS5pc1dvcmRDaGFyPVxuamQ7YS5QYXNzPVpjO2Euc2lnbmFsPVc7YS5MaW5lPXpiO2EuY2hhbmdlRW5kPVRhO2Euc2Nyb2xsYmFyTW9kZWw9cGY7YS5Qb3M9dDthLmNtcFBvcz1CO2EubW9kZXM9bWQ7YS5taW1lTW9kZXM9cWI7YS5yZXNvbHZlTW9kZT16YzthLmdldE1vZGU9bmQ7YS5tb2RlRXh0ZW5zaW9ucz1yYjthLmV4dGVuZE1vZGU9RWc7YS5jb3B5U3RhdGU9JGE7YS5zdGFydFN0YXRlPXdlO2EuaW5uZXJNb2RlPW9kO2EuY29tbWFuZHM9amM7YS5rZXlNYXA9aWM7YS5rZXlOYW1lPWFnO2EuaXNNb2RpZmllcktleT1ZZjthLmxvb2t1cEtleT1GYjthLm5vcm1hbGl6ZUtleU1hcD1qaDthLlN0cmluZ1N0cmVhbT1YO2EuU2hhcmVkVGV4dE1hcmtlcj1oYzthLlRleHRNYXJrZXI9VmE7YS5MaW5lV2lkZ2V0PWdjO2EuZV9wcmV2ZW50RGVmYXVsdD1sYTthLmVfc3RvcFByb3BhZ2F0aW9uPXVlO2EuZV9zdG9wPU1iO2EuYWRkQ2xhc3M9WWE7YS5jb250YWlucz1qYTthLnJtQ2xhc3M9amI7YS5rZXlOYW1lcz1XYX0pKFUpO1xuVS52ZXJzaW9uPVwiNS42NS45XCI7cmV0dXJuIFV9KTtcbiIsIihmdW5jdGlvbih2KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT92KHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSx2KTp2KENvZGVNaXJyb3IpfSkoZnVuY3Rpb24odil7di5kZWZpbmVNb2RlKFwiamF2YXNjcmlwdFwiLGZ1bmN0aW9uKFVhLEEpe3ZhciBwLHcsZjtmdW5jdGlvbiB1KGEsYixkKXtWPWE7Y2E9ZDtyZXR1cm4gYn1mdW5jdGlvbiBJKGEsYil7dmFyIGQ9YS5uZXh0KCk7aWYoJ1wiJz09ZHx8XCInXCI9PWQpcmV0dXJuIGIudG9rZW5pemU9VmEoZCksYi50b2tlbml6ZShhLGIpO2lmKFwiLlwiPT1kJiZhLm1hdGNoKC9eXFxkW1xcZF9dKig/OltlRV1bK1xcLV0/W1xcZF9dKyk/LykpcmV0dXJuIHUoXCJudW1iZXJcIixcIm51bWJlclwiKTtpZihcIi5cIj09ZCYmYS5tYXRjaChcIi4uXCIpKXJldHVybiB1KFwic3ByZWFkXCIsXCJtZXRhXCIpO1xuaWYoL1tcXFtcXF17fVxcKFxcKSw7OlxcLl0vLnRlc3QoZCkpcmV0dXJuIHUoZCk7aWYoXCI9XCI9PWQmJmEuZWF0KFwiPlwiKSlyZXR1cm4gdShcIj0+XCIsXCJvcGVyYXRvclwiKTtpZihcIjBcIj09ZCYmYS5tYXRjaCgvXig/OnhbXFxkQS1GYS1mX10rfG9bMC03X10rfGJbMDFfXSspbj8vKSlyZXR1cm4gdShcIm51bWJlclwiLFwibnVtYmVyXCIpO2lmKC9cXGQvLnRlc3QoZCkpcmV0dXJuIGEubWF0Y2goL15bXFxkX10qKD86bnwoPzpcXC5bXFxkX10qKT8oPzpbZUVdWytcXC1dP1tcXGRfXSspPyk/LyksdShcIm51bWJlclwiLFwibnVtYmVyXCIpO2lmKFwiL1wiPT1kKXtpZihhLmVhdChcIipcIikpcmV0dXJuIGIudG9rZW5pemU9ZGEsZGEoYSxiKTtpZihhLmVhdChcIi9cIikpcmV0dXJuIGEuc2tpcFRvRW5kKCksdShcImNvbW1lbnRcIixcImNvbW1lbnRcIik7aWYoQWEoYSxiLDEpKXthOmZvcih2YXIgZT1iPSExO251bGwhPShkPWEubmV4dCgpKTspe2lmKCFiKXtpZihcIi9cIj09ZCYmIWUpYnJlYWsgYTtcIltcIj09ZD9lPSEwOmUmJlwiXVwiPT1kJiYoZT1cbiExKX1iPSFiJiZcIlxcXFxcIj09ZH1hLm1hdGNoKC9eXFxiKChbZ2lteXVzXSkoPyFbZ2lteXVzXSpcXDIpKStcXGIvKTtyZXR1cm4gdShcInJlZ2V4cFwiLFwic3RyaW5nLTJcIil9YS5lYXQoXCI9XCIpO3JldHVybiB1KFwib3BlcmF0b3JcIixcIm9wZXJhdG9yXCIsYS5jdXJyZW50KCkpfWlmKFwiYFwiPT1kKXJldHVybiBiLnRva2VuaXplPVcsVyhhLGIpO2lmKFwiI1wiPT1kJiZcIiFcIj09YS5wZWVrKCkpcmV0dXJuIGEuc2tpcFRvRW5kKCksdShcIm1ldGFcIixcIm1ldGFcIik7aWYoXCIjXCI9PWQmJmEuZWF0V2hpbGUoZWEpKXJldHVybiB1KFwidmFyaWFibGVcIixcInByb3BlcnR5XCIpO2lmKFwiPFwiPT1kJiZhLm1hdGNoKFwiIS0tXCIpfHxcIi1cIj09ZCYmYS5tYXRjaChcIi0+XCIpJiYhL1xcUy8udGVzdChhLnN0cmluZy5zbGljZSgwLGEuc3RhcnQpKSlyZXR1cm4gYS5za2lwVG9FbmQoKSx1KFwiY29tbWVudFwiLFwiY29tbWVudFwiKTtpZihCYS50ZXN0KGQpKXJldHVyblwiPlwiPT1kJiZiLmxleGljYWwmJlwiPlwiPT1iLmxleGljYWwudHlwZXx8KGEuZWF0KFwiPVwiKT9cblwiIVwiIT1kJiZcIj1cIiE9ZHx8YS5lYXQoXCI9XCIpOi9bPD4qK1xcLXwmP10vLnRlc3QoZCkmJihhLmVhdChkKSxcIj5cIj09ZCYmYS5lYXQoZCkpKSxcIj9cIj09ZCYmYS5lYXQoXCIuXCIpP3UoXCIuXCIpOnUoXCJvcGVyYXRvclwiLFwib3BlcmF0b3JcIixhLmN1cnJlbnQoKSk7aWYoZWEudGVzdChkKSl7YS5lYXRXaGlsZShlYSk7ZD1hLmN1cnJlbnQoKTtpZihcIi5cIiE9Yi5sYXN0VHlwZSl7aWYoQ2EucHJvcGVydHlJc0VudW1lcmFibGUoZCkpcmV0dXJuIGE9Q2FbZF0sdShhLnR5cGUsYS5zdHlsZSxkKTtpZihcImFzeW5jXCI9PWQmJmEubWF0Y2goL14oXFxzfFxcL1xcKihbXipdfFxcKig/IVxcLykpKj9cXCpcXC8pKltcXFtcXChcXHddLywhMSkpcmV0dXJuIHUoXCJhc3luY1wiLFwia2V5d29yZFwiLGQpfXJldHVybiB1KFwidmFyaWFibGVcIixcInZhcmlhYmxlXCIsZCl9fWZ1bmN0aW9uIFZhKGEpe3JldHVybiBmdW5jdGlvbihiLGQpe3ZhciBlPSExLGg7aWYoZmEmJlwiQFwiPT1iLnBlZWsoKSYmYi5tYXRjaChXYSkpcmV0dXJuIGQudG9rZW5pemU9XG5JLHUoXCJqc29ubGQta2V5d29yZFwiLFwibWV0YVwiKTtmb3IoO251bGwhPShoPWIubmV4dCgpKSYmKGghPWF8fGUpOyllPSFlJiZcIlxcXFxcIj09aDtlfHwoZC50b2tlbml6ZT1JKTtyZXR1cm4gdShcInN0cmluZ1wiLFwic3RyaW5nXCIpfX1mdW5jdGlvbiBkYShhLGIpe2Zvcih2YXIgZD0hMSxlO2U9YS5uZXh0KCk7KXtpZihcIi9cIj09ZSYmZCl7Yi50b2tlbml6ZT1JO2JyZWFrfWQ9XCIqXCI9PWV9cmV0dXJuIHUoXCJjb21tZW50XCIsXCJjb21tZW50XCIpfWZ1bmN0aW9uIFcoYSxiKXtmb3IodmFyIGQ9ITEsZTtudWxsIT0oZT1hLm5leHQoKSk7KXtpZighZCYmKFwiYFwiPT1lfHxcIiRcIj09ZSYmYS5lYXQoXCJ7XCIpKSl7Yi50b2tlbml6ZT1JO2JyZWFrfWQ9IWQmJlwiXFxcXFwiPT1lfXJldHVybiB1KFwicXVhc2lcIixcInN0cmluZy0yXCIsYS5jdXJyZW50KCkpfWZ1bmN0aW9uIHFhKGEsYil7Yi5mYXRBcnJvd0F0JiYoYi5mYXRBcnJvd0F0PW51bGwpO3ZhciBkPWEuc3RyaW5nLmluZGV4T2YoXCI9PlwiLGEuc3RhcnQpO2lmKCEoMD5cbmQpKXtpZihyKXt2YXIgZT0vOlxccyooPzpcXHcrKD86PFtePl0qPnxcXFtcXF0pP3xcXHtbXn1dKlxcfSlcXHMqJC8uZXhlYyhhLnN0cmluZy5zbGljZShhLnN0YXJ0LGQpKTtlJiYoZD1lLmluZGV4KX1lPTA7dmFyIGg9ITE7Zm9yKC0tZDswPD1kOy0tZCl7dmFyIG09YS5zdHJpbmcuY2hhckF0KGQpLHk9XCIoW3t9XSlcIi5pbmRleE9mKG0pO2lmKDA8PXkmJjM+eSl7aWYoIWUpeysrZDticmVha31pZigwPT0tLWUpe1wiKFwiPT1tJiYoaD0hMCk7YnJlYWt9fWVsc2UgaWYoMzw9eSYmNj55KSsrZTtlbHNlIGlmKGVhLnRlc3QobSkpaD0hMDtlbHNlIGlmKC9bXCInXFwvYF0vLnRlc3QobSkpZm9yKDs7LS1kKXtpZigwPT1kKXJldHVybjtpZihhLnN0cmluZy5jaGFyQXQoZC0xKT09bSYmXCJcXFxcXCIhPWEuc3RyaW5nLmNoYXJBdChkLTIpKXtkLS07YnJlYWt9fWVsc2UgaWYoaCYmIWUpeysrZDticmVha319aCYmIWUmJihiLmZhdEFycm93QXQ9ZCl9fWZ1bmN0aW9uIERhKGEsYixkLGUsaCxtKXt0aGlzLmluZGVudGVkPVxuYTt0aGlzLmNvbHVtbj1iO3RoaXMudHlwZT1kO3RoaXMucHJldj1oO3RoaXMuaW5mbz1tO251bGwhPWUmJih0aGlzLmFsaWduPWUpfWZ1bmN0aW9uIEVhKGEsYixkLGUsaCl7dmFyIG09YS5jYztwPWE7dz1oO2Y9bnVsbDtyYT1tO1g9YjthLmxleGljYWwuaGFzT3duUHJvcGVydHkoXCJhbGlnblwiKXx8KGEubGV4aWNhbC5hbGlnbj0hMCk7Zm9yKDs7KWlmKChtLmxlbmd0aD9tLnBvcCgpOko/dDp4KShkLGUpKXtmb3IoO20ubGVuZ3RoJiZtW20ubGVuZ3RoLTFdLmxleDspbS5wb3AoKSgpO2lmKGYpcmV0dXJuIGY7aWYoZD1cInZhcmlhYmxlXCI9PWQpYTppZihGYSl7Zm9yKGQ9YS5sb2NhbFZhcnM7ZDtkPWQubmV4dClpZihkLm5hbWU9PWUpe2Q9ITA7YnJlYWsgYX1mb3IoYT1hLmNvbnRleHQ7YTthPWEucHJldilmb3IoZD1hLnZhcnM7ZDtkPWQubmV4dClpZihkLm5hbWU9PWUpe2Q9ITA7YnJlYWsgYX1kPXZvaWQgMH1lbHNlIGQ9ITE7cmV0dXJuIGQ/XCJ2YXJpYWJsZS0yXCI6Yn19ZnVuY3Rpb24gaygpe2Zvcih2YXIgYT1cbmFyZ3VtZW50cy5sZW5ndGgtMTswPD1hO2EtLSlyYS5wdXNoKGFyZ3VtZW50c1thXSl9ZnVuY3Rpb24gYygpe2suYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiEwfWZ1bmN0aW9uIHNhKGEsYil7Zm9yKDtiO2I9Yi5uZXh0KWlmKGIubmFtZT09YSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBPKGEpe3ZhciBiPXA7Zj1cImRlZlwiO2lmKEZhKXtpZihiLmNvbnRleHQpaWYoXCJ2YXJcIj09Yi5sZXhpY2FsLmluZm8mJmIuY29udGV4dCYmYi5jb250ZXh0LmJsb2NrKXt2YXIgZD1HYShhLGIuY29udGV4dCk7aWYobnVsbCE9ZCl7Yi5jb250ZXh0PWQ7cmV0dXJufX1lbHNlIGlmKCFzYShhLGIubG9jYWxWYXJzKSl7Yi5sb2NhbFZhcnM9bmV3IFkoYSxiLmxvY2FsVmFycyk7cmV0dXJufUEuZ2xvYmFsVmFycyYmIXNhKGEsYi5nbG9iYWxWYXJzKSYmKGIuZ2xvYmFsVmFycz1uZXcgWShhLGIuZ2xvYmFsVmFycykpfX1mdW5jdGlvbiBHYShhLGIpe3JldHVybiBiP2IuYmxvY2s/KGE9R2EoYSxcbmIucHJldikpP2E9PWIucHJldj9iOm5ldyBaKGEsYi52YXJzLCEwKTpudWxsOnNhKGEsYi52YXJzKT9iOm5ldyBaKGIucHJldixuZXcgWShhLGIudmFycyksITEpOm51bGx9ZnVuY3Rpb24gaGEoYSl7cmV0dXJuXCJwdWJsaWNcIj09YXx8XCJwcml2YXRlXCI9PWF8fFwicHJvdGVjdGVkXCI9PWF8fFwiYWJzdHJhY3RcIj09YXx8XCJyZWFkb25seVwiPT1hfWZ1bmN0aW9uIFooYSxiLGQpe3RoaXMucHJldj1hO3RoaXMudmFycz1iO3RoaXMuYmxvY2s9ZH1mdW5jdGlvbiBZKGEsYil7dGhpcy5uYW1lPWE7dGhpcy5uZXh0PWJ9ZnVuY3Rpb24gSygpe3AuY29udGV4dD1uZXcgWihwLmNvbnRleHQscC5sb2NhbFZhcnMsITEpO3AubG9jYWxWYXJzPVhhfWZ1bmN0aW9uIGlhKCl7cC5jb250ZXh0PW5ldyBaKHAuY29udGV4dCxwLmxvY2FsVmFycywhMCk7cC5sb2NhbFZhcnM9bnVsbH1mdW5jdGlvbiBDKCl7cC5sb2NhbFZhcnM9cC5jb250ZXh0LnZhcnM7cC5jb250ZXh0PXAuY29udGV4dC5wcmV2fWZ1bmN0aW9uIGwoYSxcbmIpe3ZhciBkPWZ1bmN0aW9uKCl7dmFyIGU9cCxoPWUuaW5kZW50ZWQ7aWYoXCJzdGF0XCI9PWUubGV4aWNhbC50eXBlKWg9ZS5sZXhpY2FsLmluZGVudGVkO2Vsc2UgZm9yKHZhciBtPWUubGV4aWNhbDttJiZcIilcIj09bS50eXBlJiZtLmFsaWduO209bS5wcmV2KWg9bS5pbmRlbnRlZDtlLmxleGljYWw9bmV3IERhKGgsdy5jb2x1bW4oKSxhLG51bGwsZS5sZXhpY2FsLGIpfTtkLmxleD0hMDtyZXR1cm4gZH1mdW5jdGlvbiBnKCl7dmFyIGE9cDthLmxleGljYWwucHJldiYmKFwiKVwiPT1hLmxleGljYWwudHlwZSYmKGEuaW5kZW50ZWQ9YS5sZXhpY2FsLmluZGVudGVkKSxhLmxleGljYWw9YS5sZXhpY2FsLnByZXYpfWZ1bmN0aW9uIG4oYSl7ZnVuY3Rpb24gYihkKXtyZXR1cm4gZD09YT9jKCk6XCI7XCI9PWF8fFwifVwiPT1kfHxcIilcIj09ZHx8XCJdXCI9PWQ/aygpOmMoYil9cmV0dXJuIGJ9ZnVuY3Rpb24geChhLGIpe3JldHVyblwidmFyXCI9PWE/YyhsKFwidmFyZGVmXCIsYiksdGEsbihcIjtcIiksZyk6XCJrZXl3b3JkIGFcIj09XG5hP2MobChcImZvcm1cIiksdWEseCxnKTpcImtleXdvcmQgYlwiPT1hP2MobChcImZvcm1cIikseCxnKTpcImtleXdvcmQgZFwiPT1hP3cubWF0Y2goL15cXHMqJC8sITEpP2MoKTpjKGwoXCJzdGF0XCIpLFAsbihcIjtcIiksZyk6XCJkZWJ1Z2dlclwiPT1hP2MobihcIjtcIikpOlwie1wiPT1hP2MobChcIn1cIiksaWEsamEsZyxDKTpcIjtcIj09YT9jKCk6XCJpZlwiPT1hPyhcImVsc2VcIj09cC5sZXhpY2FsLmluZm8mJnAuY2NbcC5jYy5sZW5ndGgtMV09PWcmJnAuY2MucG9wKCkoKSxjKGwoXCJmb3JtXCIpLHVhLHgsZyxIYSkpOlwiZnVuY3Rpb25cIj09YT9jKEcpOlwiZm9yXCI9PWE/YyhsKFwiZm9ybVwiKSxpYSxJYSx4LEMsZyk6XCJjbGFzc1wiPT1hfHxyJiZcImludGVyZmFjZVwiPT1iPyhmPVwia2V5d29yZFwiLGMobChcImZvcm1cIixcImNsYXNzXCI9PWE/YTpiKSxKYSxnKSk6XCJ2YXJpYWJsZVwiPT1hP3ImJlwiZGVjbGFyZVwiPT1iPyhmPVwia2V5d29yZFwiLGMoeCkpOnImJihcIm1vZHVsZVwiPT1ifHxcImVudW1cIj09Ynx8XCJ0eXBlXCI9PWIpJiZ3Lm1hdGNoKC9eXFxzKlxcdy8sXG4hMSk/KGY9XCJrZXl3b3JkXCIsXCJlbnVtXCI9PWI/YyhLYSk6XCJ0eXBlXCI9PWI/YyhMYSxuKFwib3BlcmF0b3JcIikscSxuKFwiO1wiKSk6YyhsKFwiZm9ybVwiKSxELG4oXCJ7XCIpLGwoXCJ9XCIpLGphLGcsZykpOnImJlwibmFtZXNwYWNlXCI9PWI/KGY9XCJrZXl3b3JkXCIsYyhsKFwiZm9ybVwiKSx0LHgsZykpOnImJlwiYWJzdHJhY3RcIj09Yj8oZj1cImtleXdvcmRcIixjKHgpKTpjKGwoXCJzdGF0XCIpLFlhKTpcInN3aXRjaFwiPT1hP2MobChcImZvcm1cIiksdWEsbihcIntcIiksbChcIn1cIixcInN3aXRjaFwiKSxpYSxqYSxnLGcsQyk6XCJjYXNlXCI9PWE/Yyh0LG4oXCI6XCIpKTpcImRlZmF1bHRcIj09YT9jKG4oXCI6XCIpKTpcImNhdGNoXCI9PWE/YyhsKFwiZm9ybVwiKSxLLFphLHgsZyxDKTpcImV4cG9ydFwiPT1hP2MobChcInN0YXRcIiksJGEsZyk6XCJpbXBvcnRcIj09YT9jKGwoXCJzdGF0XCIpLGFiLGcpOlwiYXN5bmNcIj09YT9jKHgpOlwiQFwiPT1iP2ModCx4KTprKGwoXCJzdGF0XCIpLHQsbihcIjtcIiksZyl9ZnVuY3Rpb24gWmEoYSl7aWYoXCIoXCI9PWEpcmV0dXJuIGMoTCxcbm4oXCIpXCIpKX1mdW5jdGlvbiB0KGEsYil7cmV0dXJuIE1hKGEsYiwhMSl9ZnVuY3Rpb24gQihhLGIpe3JldHVybiBNYShhLGIsITApfWZ1bmN0aW9uIHVhKGEpe3JldHVyblwiKFwiIT1hP2soKTpjKGwoXCIpXCIpLFAsbihcIilcIiksZyl9ZnVuY3Rpb24gTWEoYSxiLGQpe2lmKHAuZmF0QXJyb3dBdD09dy5zdGFydCl7dmFyIGU9ZD9OYTpPYTtpZihcIihcIj09YSlyZXR1cm4gYyhLLGwoXCIpXCIpLHooTCxcIilcIiksZyxuKFwiPT5cIiksZSxDKTtpZihcInZhcmlhYmxlXCI9PWEpcmV0dXJuIGsoSyxELG4oXCI9PlwiKSxlLEMpfWU9ZD9ROk07cmV0dXJuIGJiLmhhc093blByb3BlcnR5KGEpP2MoZSk6XCJmdW5jdGlvblwiPT1hP2MoRyxlKTpcImNsYXNzXCI9PWF8fHImJlwiaW50ZXJmYWNlXCI9PWI/KGY9XCJrZXl3b3JkXCIsYyhsKFwiZm9ybVwiKSxjYixnKSk6XCJrZXl3b3JkIGNcIj09YXx8XCJhc3luY1wiPT1hP2MoZD9COnQpOlwiKFwiPT1hP2MobChcIilcIiksUCxuKFwiKVwiKSxnLGUpOlwib3BlcmF0b3JcIj09YXx8XCJzcHJlYWRcIj09YT9jKGQ/XG5COnQpOlwiW1wiPT1hP2MobChcIl1cIiksZGIsZyxlKTpcIntcIj09YT9hYShrYSxcIn1cIixudWxsLGUpOlwicXVhc2lcIj09YT9rKGxhLGUpOlwibmV3XCI9PWE/YyhlYihkKSk6YygpfWZ1bmN0aW9uIFAoYSl7cmV0dXJuIGEubWF0Y2goL1s7XFx9XFwpXFxdLF0vKT9rKCk6ayh0KX1mdW5jdGlvbiBNKGEsYil7cmV0dXJuXCIsXCI9PWE/YyhQKTpRKGEsYiwhMSl9ZnVuY3Rpb24gUShhLGIsZCl7dmFyIGU9MD09ZD9NOlEsaD0wPT1kP3Q6QjtpZihcIj0+XCI9PWEpcmV0dXJuIGMoSyxkP05hOk9hLEMpO2lmKFwib3BlcmF0b3JcIj09YSlyZXR1cm4vXFwrXFwrfC0tLy50ZXN0KGIpfHxyJiZcIiFcIj09Yj9jKGUpOnImJlwiPFwiPT1iJiZ3Lm1hdGNoKC9eKFtePD5dfDxbXjw+XSo+KSo+XFxzKlxcKC8sITEpP2MobChcIj5cIikseihxLFwiPlwiKSxnLGUpOlwiP1wiPT1iP2ModCxuKFwiOlwiKSxoKTpjKGgpO2lmKFwicXVhc2lcIj09YSlyZXR1cm4gayhsYSxlKTtpZihcIjtcIiE9YSl7aWYoXCIoXCI9PWEpcmV0dXJuIGFhKEIsXCIpXCIsXCJjYWxsXCIsZSk7aWYoXCIuXCI9PVxuYSlyZXR1cm4gYyhmYixlKTtpZihcIltcIj09YSlyZXR1cm4gYyhsKFwiXVwiKSxQLG4oXCJdXCIpLGcsZSk7aWYociYmXCJhc1wiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMocSxlKTtpZihcInJlZ2V4cFwiPT1hKXJldHVybiBwLmxhc3RUeXBlPWY9XCJvcGVyYXRvclwiLHcuYmFja1VwKHcucG9zLXcuc3RhcnQtMSksYyhoKX19ZnVuY3Rpb24gbGEoYSxiKXtyZXR1cm5cInF1YXNpXCIhPWE/aygpOlwiJHtcIiE9Yi5zbGljZShiLmxlbmd0aC0yKT9jKGxhKTpjKFAsZ2IpfWZ1bmN0aW9uIGdiKGEpe2lmKFwifVwiPT1hKXJldHVybiBmPVwic3RyaW5nLTJcIixwLnRva2VuaXplPVcsYyhsYSl9ZnVuY3Rpb24gT2EoYSl7cWEodyxwKTtyZXR1cm4gayhcIntcIj09YT94OnQpfWZ1bmN0aW9uIE5hKGEpe3FhKHcscCk7cmV0dXJuIGsoXCJ7XCI9PWE/eDpCKX1mdW5jdGlvbiBlYihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuXCIuXCI9PWI/YyhhP2hiOmliKTpcInZhcmlhYmxlXCI9PWImJnI/YyhqYixhP1E6TSk6ayhhP0I6dCl9fVxuZnVuY3Rpb24gaWIoYSxiKXtpZihcInRhcmdldFwiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMoTSl9ZnVuY3Rpb24gaGIoYSxiKXtpZihcInRhcmdldFwiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMoUSl9ZnVuY3Rpb24gWWEoYSl7cmV0dXJuXCI6XCI9PWE/YyhnLHgpOmsoTSxuKFwiO1wiKSxnKX1mdW5jdGlvbiBmYihhKXtpZihcInZhcmlhYmxlXCI9PWEpcmV0dXJuIGY9XCJwcm9wZXJ0eVwiLGMoKX1mdW5jdGlvbiBrYShhLGIpe2lmKFwiYXN5bmNcIj09YSlyZXR1cm4gZj1cInByb3BlcnR5XCIsYyhrYSk7aWYoXCJ2YXJpYWJsZVwiPT1hfHxcImtleXdvcmRcIj09WCl7Zj1cInByb3BlcnR5XCI7aWYoXCJnZXRcIj09Ynx8XCJzZXRcIj09YilyZXR1cm4gYyhrYik7dmFyIGQ7ciYmcC5mYXRBcnJvd0F0PT13LnN0YXJ0JiYoZD13Lm1hdGNoKC9eXFxzKjpcXHMqLywhMSkpJiYocC5mYXRBcnJvd0F0PXcucG9zK2RbMF0ubGVuZ3RoKTtyZXR1cm4gYyhOKX1pZihcIm51bWJlclwiPT1hfHxcInN0cmluZ1wiPT1hKXJldHVybiBmPWZhP1wicHJvcGVydHlcIjpcblgrXCIgcHJvcGVydHlcIixjKE4pO2lmKFwianNvbmxkLWtleXdvcmRcIj09YSlyZXR1cm4gYyhOKTtpZihyJiZoYShiKSlyZXR1cm4gZj1cImtleXdvcmRcIixjKGthKTtpZihcIltcIj09YSlyZXR1cm4gYyh0LFIsbihcIl1cIiksTik7aWYoXCJzcHJlYWRcIj09YSlyZXR1cm4gYyhCLE4pO2lmKFwiKlwiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMoa2EpO2lmKFwiOlwiPT1hKXJldHVybiBrKE4pfWZ1bmN0aW9uIGtiKGEpe2lmKFwidmFyaWFibGVcIiE9YSlyZXR1cm4gayhOKTtmPVwicHJvcGVydHlcIjtyZXR1cm4gYyhHKX1mdW5jdGlvbiBOKGEpe2lmKFwiOlwiPT1hKXJldHVybiBjKEIpO2lmKFwiKFwiPT1hKXJldHVybiBrKEcpfWZ1bmN0aW9uIHooYSxiLGQpe2Z1bmN0aW9uIGUoaCxtKXtyZXR1cm4oZD8tMTxkLmluZGV4T2YoaCk6XCIsXCI9PWgpPyhoPXAubGV4aWNhbCxcImNhbGxcIj09aC5pbmZvJiYoaC5wb3M9KGgucG9zfHwwKSsxKSxjKGZ1bmN0aW9uKHksdmEpe3JldHVybiB5PT1ifHx2YT09Yj9rKCk6ayhhKX0sZSkpOlxuaD09Ynx8bT09Yj9jKCk6ZCYmLTE8ZC5pbmRleE9mKFwiO1wiKT9rKGEpOmMobihiKSl9cmV0dXJuIGZ1bmN0aW9uKGgsbSl7cmV0dXJuIGg9PWJ8fG09PWI/YygpOmsoYSxlKX19ZnVuY3Rpb24gYWEoYSxiLGQpe2Zvcih2YXIgZT0zO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspcmEucHVzaChhcmd1bWVudHNbZV0pO3JldHVybiBjKGwoYixkKSx6KGEsYiksZyl9ZnVuY3Rpb24gamEoYSl7cmV0dXJuXCJ9XCI9PWE/YygpOmsoeCxqYSl9ZnVuY3Rpb24gUihhLGIpe2lmKHIpe2lmKFwiOlwiPT1hKXJldHVybiBjKHEpO2lmKFwiP1wiPT1iKXJldHVybiBjKFIpfX1mdW5jdGlvbiBsYihhLGIpe2lmKHImJihcIjpcIj09YXx8XCJpblwiPT1iKSlyZXR1cm4gYyhxKX1mdW5jdGlvbiBQYShhKXtpZihyJiZcIjpcIj09YSlyZXR1cm4gdy5tYXRjaCgvXlxccypcXHcrXFxzK2lzXFxiLywhMSk/Yyh0LG1iLHEpOmMocSl9ZnVuY3Rpb24gbWIoYSxiKXtpZihcImlzXCI9PWIpcmV0dXJuIGY9XCJrZXl3b3JkXCIsYygpfWZ1bmN0aW9uIHEoYSxcbmIpe2lmKFwia2V5b2ZcIj09Ynx8XCJ0eXBlb2ZcIj09Ynx8XCJpbmZlclwiPT1ifHxcInJlYWRvbmx5XCI9PWIpcmV0dXJuIGY9XCJrZXl3b3JkXCIsYyhcInR5cGVvZlwiPT1iP0I6cSk7aWYoXCJ2YXJpYWJsZVwiPT1hfHxcInZvaWRcIj09YilyZXR1cm4gZj1cInR5cGVcIixjKEUpO2lmKFwifFwiPT1ifHxcIiZcIj09YilyZXR1cm4gYyhxKTtpZihcInN0cmluZ1wiPT1hfHxcIm51bWJlclwiPT1hfHxcImF0b21cIj09YSlyZXR1cm4gYyhFKTtpZihcIltcIj09YSlyZXR1cm4gYyhsKFwiXVwiKSx6KHEsXCJdXCIsXCIsXCIpLGcsRSk7aWYoXCJ7XCI9PWEpcmV0dXJuIGMobChcIn1cIiksd2EsZyxFKTtpZihcIihcIj09YSlyZXR1cm4gYyh6KHhhLFwiKVwiKSxuYixFKTtpZihcIjxcIj09YSlyZXR1cm4gYyh6KHEsXCI+XCIpLHEpO2lmKFwicXVhc2lcIj09YSlyZXR1cm4gayh5YSxFKX1mdW5jdGlvbiBuYihhKXtpZihcIj0+XCI9PWEpcmV0dXJuIGMocSl9ZnVuY3Rpb24gd2EoYSl7cmV0dXJuIGEubWF0Y2goL1tcXH1cXClcXF1dLyk/YygpOlwiLFwiPT1hfHxcIjtcIj09YT9jKHdhKTpcbmsoYmEsd2EpfWZ1bmN0aW9uIGJhKGEsYil7aWYoXCJ2YXJpYWJsZVwiPT1hfHxcImtleXdvcmRcIj09WClyZXR1cm4gZj1cInByb3BlcnR5XCIsYyhiYSk7aWYoXCI/XCI9PWJ8fFwibnVtYmVyXCI9PWF8fFwic3RyaW5nXCI9PWEpcmV0dXJuIGMoYmEpO2lmKFwiOlwiPT1hKXJldHVybiBjKHEpO2lmKFwiW1wiPT1hKXJldHVybiBjKG4oXCJ2YXJpYWJsZVwiKSxsYixuKFwiXVwiKSxiYSk7aWYoXCIoXCI9PWEpcmV0dXJuIGsoUyxiYSk7aWYoIWEubWF0Y2goL1s7XFx9XFwpXFxdLF0vKSlyZXR1cm4gYygpfWZ1bmN0aW9uIHlhKGEsYil7cmV0dXJuXCJxdWFzaVwiIT1hP2soKTpcIiR7XCIhPWIuc2xpY2UoYi5sZW5ndGgtMik/Yyh5YSk6YyhxLG9iKX1mdW5jdGlvbiBvYihhKXtpZihcIn1cIj09YSlyZXR1cm4gZj1cInN0cmluZy0yXCIscC50b2tlbml6ZT1XLGMoeWEpfWZ1bmN0aW9uIHhhKGEsYil7cmV0dXJuXCJ2YXJpYWJsZVwiPT1hJiZ3Lm1hdGNoKC9eXFxzKls/Ol0vLCExKXx8XCI/XCI9PWI/Yyh4YSk6XCI6XCI9PWE/YyhxKTpcInNwcmVhZFwiPT1cbmE/Yyh4YSk6ayhxKX1mdW5jdGlvbiBFKGEsYil7aWYoXCI8XCI9PWIpcmV0dXJuIGMobChcIj5cIikseihxLFwiPlwiKSxnLEUpO2lmKFwifFwiPT1ifHxcIi5cIj09YXx8XCImXCI9PWIpcmV0dXJuIGMocSk7aWYoXCJbXCI9PWEpcmV0dXJuIGMocSxuKFwiXVwiKSxFKTtpZihcImV4dGVuZHNcIj09Ynx8XCJpbXBsZW1lbnRzXCI9PWIpcmV0dXJuIGY9XCJrZXl3b3JkXCIsYyhxKTtpZihcIj9cIj09YilyZXR1cm4gYyhxLG4oXCI6XCIpLHEpfWZ1bmN0aW9uIGpiKGEsYil7aWYoXCI8XCI9PWIpcmV0dXJuIGMobChcIj5cIikseihxLFwiPlwiKSxnLEUpfWZ1bmN0aW9uIG1hKCl7cmV0dXJuIGsocSxwYil9ZnVuY3Rpb24gcGIoYSxiKXtpZihcIj1cIj09YilyZXR1cm4gYyhxKX1mdW5jdGlvbiB0YShhLGIpe3JldHVyblwiZW51bVwiPT1iPyhmPVwia2V5d29yZFwiLGMoS2EpKTprKEQsUixILHFiKX1mdW5jdGlvbiBEKGEsYil7aWYociYmaGEoYikpcmV0dXJuIGY9XCJrZXl3b3JkXCIsYyhEKTtpZihcInZhcmlhYmxlXCI9PWEpcmV0dXJuIE8oYiksYygpO1xuaWYoXCJzcHJlYWRcIj09YSlyZXR1cm4gYyhEKTtpZihcIltcIj09YSlyZXR1cm4gYWEocmIsXCJdXCIpO2lmKFwie1wiPT1hKXJldHVybiBhYShRYSxcIn1cIil9ZnVuY3Rpb24gUWEoYSxiKXtpZihcInZhcmlhYmxlXCI9PWEmJiF3Lm1hdGNoKC9eXFxzKjovLCExKSlyZXR1cm4gTyhiKSxjKEgpO1widmFyaWFibGVcIj09YSYmKGY9XCJwcm9wZXJ0eVwiKTtyZXR1cm5cInNwcmVhZFwiPT1hP2MoRCk6XCJ9XCI9PWE/aygpOlwiW1wiPT1hP2ModCxuKFwiXVwiKSxuKFwiOlwiKSxRYSk6YyhuKFwiOlwiKSxELEgpfWZ1bmN0aW9uIHJiKCl7cmV0dXJuIGsoRCxIKX1mdW5jdGlvbiBIKGEsYil7aWYoXCI9XCI9PWIpcmV0dXJuIGMoQil9ZnVuY3Rpb24gcWIoYSl7aWYoXCIsXCI9PWEpcmV0dXJuIGModGEpfWZ1bmN0aW9uIEhhKGEsYil7aWYoXCJrZXl3b3JkIGJcIj09YSYmXCJlbHNlXCI9PWIpcmV0dXJuIGMobChcImZvcm1cIixcImVsc2VcIikseCxnKX1mdW5jdGlvbiBJYShhLGIpe2lmKFwiYXdhaXRcIj09YilyZXR1cm4gYyhJYSk7aWYoXCIoXCI9PWEpcmV0dXJuIGMobChcIilcIiksXG5zYixnKX1mdW5jdGlvbiBzYihhKXtyZXR1cm5cInZhclwiPT1hP2ModGEsVCk6XCJ2YXJpYWJsZVwiPT1hP2MoVCk6ayhUKX1mdW5jdGlvbiBUKGEsYil7cmV0dXJuXCIpXCI9PWE/YygpOlwiO1wiPT1hP2MoVCk6XCJpblwiPT1ifHxcIm9mXCI9PWI/KGY9XCJrZXl3b3JkXCIsYyh0LFQpKTprKHQsVCl9ZnVuY3Rpb24gRyhhLGIpe2lmKFwiKlwiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMoRyk7aWYoXCJ2YXJpYWJsZVwiPT1hKXJldHVybiBPKGIpLGMoRyk7aWYoXCIoXCI9PWEpcmV0dXJuIGMoSyxsKFwiKVwiKSx6KEwsXCIpXCIpLGcsUGEseCxDKTtpZihyJiZcIjxcIj09YilyZXR1cm4gYyhsKFwiPlwiKSx6KG1hLFwiPlwiKSxnLEcpfWZ1bmN0aW9uIFMoYSxiKXtpZihcIipcIj09YilyZXR1cm4gZj1cImtleXdvcmRcIixjKFMpO2lmKFwidmFyaWFibGVcIj09YSlyZXR1cm4gTyhiKSxjKFMpO2lmKFwiKFwiPT1hKXJldHVybiBjKEssbChcIilcIikseihMLFwiKVwiKSxnLFBhLEMpO2lmKHImJlwiPFwiPT1iKXJldHVybiBjKGwoXCI+XCIpLHoobWEsXCI+XCIpLFxuZyxTKX1mdW5jdGlvbiBMYShhLGIpe2lmKFwia2V5d29yZFwiPT1hfHxcInZhcmlhYmxlXCI9PWEpcmV0dXJuIGY9XCJ0eXBlXCIsYyhMYSk7aWYoXCI8XCI9PWIpcmV0dXJuIGMobChcIj5cIikseihtYSxcIj5cIiksZyl9ZnVuY3Rpb24gTChhLGIpe1wiQFwiPT1iJiZjKHQsTCk7cmV0dXJuXCJzcHJlYWRcIj09YT9jKEwpOnImJmhhKGIpPyhmPVwia2V5d29yZFwiLGMoTCkpOnImJlwidGhpc1wiPT1hP2MoUixIKTprKEQsUixIKX1mdW5jdGlvbiBjYihhLGIpe3JldHVyblwidmFyaWFibGVcIj09YT9KYShhLGIpOm5hKGEsYil9ZnVuY3Rpb24gSmEoYSxiKXtpZihcInZhcmlhYmxlXCI9PWEpcmV0dXJuIE8oYiksYyhuYSl9ZnVuY3Rpb24gbmEoYSxiKXtpZihcIjxcIj09YilyZXR1cm4gYyhsKFwiPlwiKSx6KG1hLFwiPlwiKSxnLG5hKTtpZihcImV4dGVuZHNcIj09Ynx8XCJpbXBsZW1lbnRzXCI9PWJ8fHImJlwiLFwiPT1hKXJldHVyblwiaW1wbGVtZW50c1wiPT1iJiYoZj1cImtleXdvcmRcIiksYyhyP3E6dCxuYSk7aWYoXCJ7XCI9PWEpcmV0dXJuIGMobChcIn1cIiksXG5GLGcpfWZ1bmN0aW9uIEYoYSxiKXtpZihcImFzeW5jXCI9PWF8fFwidmFyaWFibGVcIj09YSYmKFwic3RhdGljXCI9PWJ8fFwiZ2V0XCI9PWJ8fFwic2V0XCI9PWJ8fHImJmhhKGIpKSYmdy5tYXRjaCgvXlxccytbXFx3JFxceGExLVxcdWZmZmZdLywhMSkpcmV0dXJuIGY9XCJrZXl3b3JkXCIsYyhGKTtpZihcInZhcmlhYmxlXCI9PWF8fFwia2V5d29yZFwiPT1YKXJldHVybiBmPVwicHJvcGVydHlcIixjKG9hLEYpO2lmKFwibnVtYmVyXCI9PWF8fFwic3RyaW5nXCI9PWEpcmV0dXJuIGMob2EsRik7aWYoXCJbXCI9PWEpcmV0dXJuIGModCxSLG4oXCJdXCIpLG9hLEYpO2lmKFwiKlwiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMoRik7aWYociYmXCIoXCI9PWEpcmV0dXJuIGsoUyxGKTtpZihcIjtcIj09YXx8XCIsXCI9PWEpcmV0dXJuIGMoRik7aWYoXCJ9XCI9PWEpcmV0dXJuIGMoKTtpZihcIkBcIj09YilyZXR1cm4gYyh0LEYpfWZ1bmN0aW9uIG9hKGEsYil7aWYoXCIhXCI9PWJ8fFwiP1wiPT1iKXJldHVybiBjKG9hKTtpZihcIjpcIj09YSlyZXR1cm4gYyhxLEgpO1xuaWYoXCI9XCI9PWIpcmV0dXJuIGMoQik7YT1wLmxleGljYWwucHJldjtyZXR1cm4gayhhJiZcImludGVyZmFjZVwiPT1hLmluZm8/UzpHKX1mdW5jdGlvbiAkYShhLGIpe3JldHVyblwiKlwiPT1iPyhmPVwia2V5d29yZFwiLGMoemEsbihcIjtcIikpKTpcImRlZmF1bHRcIj09Yj8oZj1cImtleXdvcmRcIixjKHQsbihcIjtcIikpKTpcIntcIj09YT9jKHooUmEsXCJ9XCIpLHphLG4oXCI7XCIpKTprKHgpfWZ1bmN0aW9uIFJhKGEsYil7aWYoXCJhc1wiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMobihcInZhcmlhYmxlXCIpKTtpZihcInZhcmlhYmxlXCI9PWEpcmV0dXJuIGsoQixSYSl9ZnVuY3Rpb24gYWIoYSl7cmV0dXJuXCJzdHJpbmdcIj09YT9jKCk6XCIoXCI9PWE/ayh0KTpcIi5cIj09YT9rKE0pOmsocGEsU2EsemEpfWZ1bmN0aW9uIHBhKGEsYil7aWYoXCJ7XCI9PWEpcmV0dXJuIGFhKHBhLFwifVwiKTtcInZhcmlhYmxlXCI9PWEmJk8oYik7XCIqXCI9PWImJihmPVwia2V5d29yZFwiKTtyZXR1cm4gYyh0Yil9ZnVuY3Rpb24gU2EoYSl7aWYoXCIsXCI9PWEpcmV0dXJuIGMocGEsXG5TYSl9ZnVuY3Rpb24gdGIoYSxiKXtpZihcImFzXCI9PWIpcmV0dXJuIGY9XCJrZXl3b3JkXCIsYyhwYSl9ZnVuY3Rpb24gemEoYSxiKXtpZihcImZyb21cIj09YilyZXR1cm4gZj1cImtleXdvcmRcIixjKHQpfWZ1bmN0aW9uIGRiKGEpe3JldHVyblwiXVwiPT1hP2MoKTprKHooQixcIl1cIikpfWZ1bmN0aW9uIEthKCl7cmV0dXJuIGsobChcImZvcm1cIiksRCxuKFwie1wiKSxsKFwifVwiKSx6KHViLFwifVwiKSxnLGcpfWZ1bmN0aW9uIHViKCl7cmV0dXJuIGsoRCxIKX1mdW5jdGlvbiBBYShhLGIsZCl7cmV0dXJuIGIudG9rZW5pemU9PUkmJi9eKD86b3BlcmF0b3J8c29mfGtleXdvcmQgW2JjZF18Y2FzZXxuZXd8ZXhwb3J0fGRlZmF1bHR8c3ByZWFkfFtcXFt7fVxcKCw7Ol18PT4pJC8udGVzdChiLmxhc3RUeXBlKXx8XCJxdWFzaVwiPT1iLmxhc3RUeXBlJiYvXFx7XFxzKiQvLnRlc3QoYS5zdHJpbmcuc2xpY2UoMCxhLnBvcy0oZHx8MCkpKX12YXIgVT1VYS5pbmRlbnRVbml0LFRhPUEuc3RhdGVtZW50SW5kZW50LGZhPUEuanNvbmxkLFxuSj1BLmpzb258fGZhLEZhPSExIT09QS50cmFja1Njb3BlLHI9QS50eXBlc2NyaXB0LGVhPUEud29yZENoYXJhY3RlcnN8fC9bXFx3JFxceGExLVxcdWZmZmZdLyxDYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEodmEpe3JldHVybnt0eXBlOnZhLHN0eWxlOlwia2V5d29yZFwifX12YXIgYj1hKFwia2V5d29yZCBhXCIpLGQ9YShcImtleXdvcmQgYlwiKSxlPWEoXCJrZXl3b3JkIGNcIiksaD1hKFwia2V5d29yZCBkXCIpLG09YShcIm9wZXJhdG9yXCIpLHk9e3R5cGU6XCJhdG9tXCIsc3R5bGU6XCJhdG9tXCJ9O3JldHVybntcImlmXCI6YShcImlmXCIpLFwid2hpbGVcIjpiLFwid2l0aFwiOmIsXCJlbHNlXCI6ZCxcImRvXCI6ZCxcInRyeVwiOmQsXCJmaW5hbGx5XCI6ZCxcInJldHVyblwiOmgsXCJicmVha1wiOmgsXCJjb250aW51ZVwiOmgsXCJuZXdcIjphKFwibmV3XCIpLFwiZGVsZXRlXCI6ZSxcInZvaWRcIjplLFwidGhyb3dcIjplLFwiZGVidWdnZXJcIjphKFwiZGVidWdnZXJcIiksXCJ2YXJcIjphKFwidmFyXCIpLFwiY29uc3RcIjphKFwidmFyXCIpLGxldDphKFwidmFyXCIpLFwiZnVuY3Rpb25cIjphKFwiZnVuY3Rpb25cIiksXG5cImNhdGNoXCI6YShcImNhdGNoXCIpLFwiZm9yXCI6YShcImZvclwiKSxcInN3aXRjaFwiOmEoXCJzd2l0Y2hcIiksXCJjYXNlXCI6YShcImNhc2VcIiksXCJkZWZhdWx0XCI6YShcImRlZmF1bHRcIiksXCJpblwiOm0sXCJ0eXBlb2ZcIjptLFwiaW5zdGFuY2VvZlwiOm0sXCJ0cnVlXCI6eSxcImZhbHNlXCI6eSxcIm51bGxcIjp5LHVuZGVmaW5lZDp5LE5hTjp5LEluZmluaXR5OnksXCJ0aGlzXCI6YShcInRoaXNcIiksXCJjbGFzc1wiOmEoXCJjbGFzc1wiKSxcInN1cGVyXCI6YShcImF0b21cIikseWllbGQ6ZSxcImV4cG9ydFwiOmEoXCJleHBvcnRcIiksXCJpbXBvcnRcIjphKFwiaW1wb3J0XCIpLFwiZXh0ZW5kc1wiOmUsYXdhaXQ6ZX19KCksQmE9L1srXFwtKiYlPTw+IT98fl5AXS8sV2E9L15AKGNvbnRleHR8aWR8dmFsdWV8bGFuZ3VhZ2V8dHlwZXxjb250YWluZXJ8bGlzdHxzZXR8cmV2ZXJzZXxpbmRleHxiYXNlfHZvY2FifGdyYXBoKVwiLyxWLGNhLGJiPXthdG9tOiEwLG51bWJlcjohMCx2YXJpYWJsZTohMCxzdHJpbmc6ITAscmVnZXhwOiEwLFwidGhpc1wiOiEwLFwiaW1wb3J0XCI6ITAsXG5cImpzb25sZC1rZXl3b3JkXCI6ITB9O3ZhciByYT1mPXA9bnVsbDt2YXIgWD13PXZvaWQgMDt2YXIgWGE9bmV3IFkoXCJ0aGlzXCIsbmV3IFkoXCJhcmd1bWVudHNcIixudWxsKSk7Sy5sZXg9aWEubGV4PSEwO0MubGV4PSEwO2cubGV4PSEwO3JldHVybntzdGFydFN0YXRlOmZ1bmN0aW9uKGEpe2E9e3Rva2VuaXplOkksbGFzdFR5cGU6XCJzb2ZcIixjYzpbXSxsZXhpY2FsOm5ldyBEYSgoYXx8MCktVSwwLFwiYmxvY2tcIiwhMSksbG9jYWxWYXJzOkEubG9jYWxWYXJzLGNvbnRleHQ6QS5sb2NhbFZhcnMmJm5ldyBaKG51bGwsbnVsbCwhMSksaW5kZW50ZWQ6YXx8MH07QS5nbG9iYWxWYXJzJiZcIm9iamVjdFwiPT10eXBlb2YgQS5nbG9iYWxWYXJzJiYoYS5nbG9iYWxWYXJzPUEuZ2xvYmFsVmFycyk7cmV0dXJuIGF9LHRva2VuOmZ1bmN0aW9uKGEsYil7YS5zb2woKSYmKGIubGV4aWNhbC5oYXNPd25Qcm9wZXJ0eShcImFsaWduXCIpfHwoYi5sZXhpY2FsLmFsaWduPSExKSxiLmluZGVudGVkPWEuaW5kZW50YXRpb24oKSxcbnFhKGEsYikpO2lmKGIudG9rZW5pemUhPWRhJiZhLmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7dmFyIGQ9Yi50b2tlbml6ZShhLGIpO2lmKFwiY29tbWVudFwiPT1WKXJldHVybiBkO2IubGFzdFR5cGU9XCJvcGVyYXRvclwiIT1WfHxcIisrXCIhPWNhJiZcIi0tXCIhPWNhP1Y6XCJpbmNkZWNcIjtyZXR1cm4gRWEoYixkLFYsY2EsYSl9LGluZGVudDpmdW5jdGlvbihhLGIpe2lmKGEudG9rZW5pemU9PWRhfHxhLnRva2VuaXplPT1XKXJldHVybiB2LlBhc3M7aWYoYS50b2tlbml6ZSE9SSlyZXR1cm4gMDt2YXIgZD1iJiZiLmNoYXJBdCgwKSxlPWEubGV4aWNhbCxoO2lmKCEvXlxccyplbHNlXFxiLy50ZXN0KGIpKWZvcih2YXIgbT1hLmNjLmxlbmd0aC0xOzA8PW07LS1tKXt2YXIgeT1hLmNjW21dO2lmKHk9PWcpZT1lLnByZXY7ZWxzZSBpZih5IT1IYSYmeSE9QylicmVha31mb3IoOyEoXCJzdGF0XCIhPWUudHlwZSYmXCJmb3JtXCIhPWUudHlwZXx8XCJ9XCIhPWQmJighKGg9YS5jY1thLmNjLmxlbmd0aC0xXSl8fGghPVxuTSYmaCE9UXx8L15bLFxcLj0rXFwtKjo/W1xcKF0vLnRlc3QoYikpKTspZT1lLnByZXY7VGEmJlwiKVwiPT1lLnR5cGUmJlwic3RhdFwiPT1lLnByZXYudHlwZSYmKGU9ZS5wcmV2KTtoPWUudHlwZTttPWQ9PWg7cmV0dXJuXCJ2YXJkZWZcIj09aD9lLmluZGVudGVkKyhcIm9wZXJhdG9yXCI9PWEubGFzdFR5cGV8fFwiLFwiPT1hLmxhc3RUeXBlP2UuaW5mby5sZW5ndGgrMTowKTpcImZvcm1cIj09aCYmXCJ7XCI9PWQ/ZS5pbmRlbnRlZDpcImZvcm1cIj09aD9lLmluZGVudGVkK1U6XCJzdGF0XCI9PWg/KGQ9ZS5pbmRlbnRlZCxhPVwib3BlcmF0b3JcIj09YS5sYXN0VHlwZXx8XCIsXCI9PWEubGFzdFR5cGV8fEJhLnRlc3QoYi5jaGFyQXQoMCkpfHwvWywuXS8udGVzdChiLmNoYXJBdCgwKSksZCsoYT9UYXx8VTowKSk6XCJzd2l0Y2hcIiE9ZS5pbmZvfHxtfHwwPT1BLmRvdWJsZUluZGVudFN3aXRjaD9lLmFsaWduP2UuY29sdW1uKyhtPzA6MSk6ZS5pbmRlbnRlZCsobT8wOlUpOmUuaW5kZW50ZWQrKC9eKD86Y2FzZXxkZWZhdWx0KVxcYi8udGVzdChiKT9cblU6MipVKX0sZWxlY3RyaWNJbnB1dDovXlxccyooPzpjYXNlIC4qPzp8ZGVmYXVsdDp8XFx7fFxcfSkkLyxibG9ja0NvbW1lbnRTdGFydDpKP251bGw6XCIvKlwiLGJsb2NrQ29tbWVudEVuZDpKP251bGw6XCIqL1wiLGJsb2NrQ29tbWVudENvbnRpbnVlOko/bnVsbDpcIiAqIFwiLGxpbmVDb21tZW50Oko/bnVsbDpcIi8vXCIsZm9sZDpcImJyYWNlXCIsY2xvc2VCcmFja2V0czpcIigpW117fScnXFxcIlxcXCJgYFwiLGhlbHBlclR5cGU6Sj9cImpzb25cIjpcImphdmFzY3JpcHRcIixqc29ubGRNb2RlOmZhLGpzb25Nb2RlOkosZXhwcmVzc2lvbkFsbG93ZWQ6QWEsc2tpcEV4cHJlc3Npb246ZnVuY3Rpb24oYSl7RWEoYSxcImF0b21cIixcImF0b21cIixcInRydWVcIixuZXcgdi5TdHJpbmdTdHJlYW0oXCJcIiwyLG51bGwpKX19fSk7di5yZWdpc3RlckhlbHBlcihcIndvcmRDaGFyc1wiLFwiamF2YXNjcmlwdFwiLC9bXFx3JF0vKTt2LmRlZmluZU1JTUUoXCJ0ZXh0L2phdmFzY3JpcHRcIixcImphdmFzY3JpcHRcIik7di5kZWZpbmVNSU1FKFwidGV4dC9lY21hc2NyaXB0XCIsXG5cImphdmFzY3JpcHRcIik7di5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiLFwiamF2YXNjcmlwdFwiKTt2LmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHRcIixcImphdmFzY3JpcHRcIik7di5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdFwiLFwiamF2YXNjcmlwdFwiKTt2LmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9qc29uXCIse25hbWU6XCJqYXZhc2NyaXB0XCIsanNvbjohMH0pO3YuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3gtanNvblwiLHtuYW1lOlwiamF2YXNjcmlwdFwiLGpzb246ITB9KTt2LmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9tYW5pZmVzdCtqc29uXCIse25hbWU6XCJqYXZhc2NyaXB0XCIsanNvbjohMH0pO3YuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2xkK2pzb25cIix7bmFtZTpcImphdmFzY3JpcHRcIixqc29ubGQ6ITB9KTt2LmRlZmluZU1JTUUoXCJ0ZXh0L3R5cGVzY3JpcHRcIix7bmFtZTpcImphdmFzY3JpcHRcIix0eXBlc2NyaXB0OiEwfSk7di5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vdHlwZXNjcmlwdFwiLFxue25hbWU6XCJqYXZhc2NyaXB0XCIsdHlwZXNjcmlwdDohMH0pfSk7XG4iLCIvKipcbiAqIFNsaWNlIHJlZmVyZW5jZS5cbiAqL1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcblxuLyoqXG4gKiBCaW5kIGBvYmpgIHRvIGBmbmAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IGZuIG9yIHN0cmluZ1xuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBmbil7XG4gIGlmICgnc3RyaW5nJyA9PSB0eXBlb2YgZm4pIGZuID0gb2JqW2ZuXTtcbiAgaWYgKCdmdW5jdGlvbicgIT0gdHlwZW9mIGZuKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmQoKSByZXF1aXJlcyBhIGZ1bmN0aW9uJyk7XG4gIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICByZXR1cm4gZm4uYXBwbHkob2JqLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgfVxufTtcbiIsIlxyXG4vKipcclxuICogRXhwb3NlIGBFbWl0dGVyYC5cclxuICovXHJcblxyXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICBtb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGEgbmV3IGBFbWl0dGVyYC5cclxuICpcclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5mdW5jdGlvbiBFbWl0dGVyKG9iaikge1xyXG4gIGlmIChvYmopIHJldHVybiBtaXhpbihvYmopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1peGluIHRoZSBlbWl0dGVyIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKiBAYXBpIHByaXZhdGVcclxuICovXHJcblxyXG5mdW5jdGlvbiBtaXhpbihvYmopIHtcclxuICBmb3IgKHZhciBrZXkgaW4gRW1pdHRlci5wcm90b3R5cGUpIHtcclxuICAgIG9ialtrZXldID0gRW1pdHRlci5wcm90b3R5cGVba2V5XTtcclxuICB9XHJcbiAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLyoqXHJcbiAqIExpc3RlbiBvbiB0aGUgZ2l2ZW4gYGV2ZW50YCB3aXRoIGBmbmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLm9uID1cclxuRW1pdHRlci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XHJcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xyXG4gICh0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdID0gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXSlcclxuICAgIC5wdXNoKGZuKTtcclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGFuIGBldmVudGAgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgYSBzaW5nbGVcclxuICogdGltZSB0aGVuIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXHJcbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XHJcbiAgZnVuY3Rpb24gb24oKSB7XHJcbiAgICB0aGlzLm9mZihldmVudCwgb24pO1xyXG4gICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICB9XHJcblxyXG4gIG9uLmZuID0gZm47XHJcbiAgdGhpcy5vbihldmVudCwgb24pO1xyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgZm9yIGBldmVudGAgb3IgYWxsXHJcbiAqIHJlZ2lzdGVyZWQgY2FsbGJhY2tzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuXHJcbiAgLy8gYWxsXHJcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgdGhpcy5fY2FsbGJhY2tzID0ge307XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIHNwZWNpZmljIGV2ZW50XHJcbiAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgaWYgKCFjYWxsYmFja3MpIHJldHVybiB0aGlzO1xyXG5cclxuICAvLyByZW1vdmUgYWxsIGhhbmRsZXJzXHJcbiAgaWYgKDEgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBzcGVjaWZpYyBoYW5kbGVyXHJcbiAgdmFyIGNiO1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjYiA9IGNhbGxiYWNrc1tpXTtcclxuICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XHJcbiAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUmVtb3ZlIGV2ZW50IHNwZWNpZmljIGFycmF5cyBmb3IgZXZlbnQgdHlwZXMgdGhhdCBub1xyXG4gIC8vIG9uZSBpcyBzdWJzY3JpYmVkIGZvciB0byBhdm9pZCBtZW1vcnkgbGVhay5cclxuICBpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbWl0IGBldmVudGAgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7TWl4ZWR9IC4uLlxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbihldmVudCl7XHJcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xyXG5cclxuICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSlcclxuICAgICwgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XTtcclxuXHJcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbGxiYWNrcykge1xyXG4gICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xyXG4gICAgICBjYWxsYmFja3NbaV0uYXBwbHkodGhpcywgYXJncyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYXJyYXkgb2YgY2FsbGJhY2tzIGZvciBgZXZlbnRgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHJldHVybiB7QXJyYXl9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQpe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB0aGlzIGVtaXR0ZXIgaGFzIGBldmVudGAgaGFuZGxlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcclxuICByZXR1cm4gISEgdGhpcy5saXN0ZW5lcnMoZXZlbnQpLmxlbmd0aDtcclxufTtcclxuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGEsIGIpe1xuICB2YXIgZm4gPSBmdW5jdGlvbigpe307XG4gIGZuLnByb3RvdHlwZSA9IGIucHJvdG90eXBlO1xuICBhLnByb3RvdHlwZSA9IG5ldyBmbjtcbiAgYS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBhO1xufTsiLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSByZWFkeVxuXG5mdW5jdGlvbiByZWFkeSAoY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RvY3VtZW50LXJlYWR5IG9ubHkgcnVucyBpbiB0aGUgYnJvd3NlcicpXG4gIH1cbiAgdmFyIHN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZVxuICBpZiAoc3RhdGUgPT09ICdjb21wbGV0ZScgfHwgc3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChjYWxsYmFjaywgMClcbiAgfVxuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiBvbkxvYWQgKCkge1xuICAgIGNhbGxiYWNrKClcbiAgfSlcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBzZWxmO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctZnVuY1xuICB9XG59KSgpO1xuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vc29ja2V0Jyk7XG5cbi8qKlxuICogRXhwb3J0cyBwYXJzZXJcbiAqXG4gKiBAYXBpIHB1YmxpY1xuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMucGFyc2VyID0gcmVxdWlyZSgnZW5naW5lLmlvLXBhcnNlcicpO1xuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciB0cmFuc3BvcnRzID0gcmVxdWlyZSgnLi90cmFuc3BvcnRzL2luZGV4Jyk7XG52YXIgRW1pdHRlciA9IHJlcXVpcmUoJ2NvbXBvbmVudC1lbWl0dGVyJyk7XG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdlbmdpbmUuaW8tY2xpZW50OnNvY2tldCcpO1xudmFyIGluZGV4ID0gcmVxdWlyZSgnaW5kZXhvZicpO1xudmFyIHBhcnNlciA9IHJlcXVpcmUoJ2VuZ2luZS5pby1wYXJzZXInKTtcbnZhciBwYXJzZXVyaSA9IHJlcXVpcmUoJ3BhcnNldXJpJyk7XG52YXIgcGFyc2VxcyA9IHJlcXVpcmUoJ3BhcnNlcXMnKTtcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNvY2tldDtcblxuLyoqXG4gKiBTb2NrZXQgY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSB1cmkgb3Igb3B0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gU29ja2V0ICh1cmksIG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNvY2tldCkpIHJldHVybiBuZXcgU29ja2V0KHVyaSwgb3B0cyk7XG5cbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgaWYgKHVyaSAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHVyaSkge1xuICAgIG9wdHMgPSB1cmk7XG4gICAgdXJpID0gbnVsbDtcbiAgfVxuXG4gIGlmICh1cmkpIHtcbiAgICB1cmkgPSBwYXJzZXVyaSh1cmkpO1xuICAgIG9wdHMuaG9zdG5hbWUgPSB1cmkuaG9zdDtcbiAgICBvcHRzLnNlY3VyZSA9IHVyaS5wcm90b2NvbCA9PT0gJ2h0dHBzJyB8fCB1cmkucHJvdG9jb2wgPT09ICd3c3MnO1xuICAgIG9wdHMucG9ydCA9IHVyaS5wb3J0O1xuICAgIGlmICh1cmkucXVlcnkpIG9wdHMucXVlcnkgPSB1cmkucXVlcnk7XG4gIH0gZWxzZSBpZiAob3B0cy5ob3N0KSB7XG4gICAgb3B0cy5ob3N0bmFtZSA9IHBhcnNldXJpKG9wdHMuaG9zdCkuaG9zdDtcbiAgfVxuXG4gIHRoaXMuc2VjdXJlID0gbnVsbCAhPSBvcHRzLnNlY3VyZSA/IG9wdHMuc2VjdXJlXG4gICAgOiAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiAnaHR0cHM6JyA9PT0gbG9jYXRpb24ucHJvdG9jb2wpO1xuXG4gIGlmIChvcHRzLmhvc3RuYW1lICYmICFvcHRzLnBvcnQpIHtcbiAgICAvLyBpZiBubyBwb3J0IGlzIHNwZWNpZmllZCBtYW51YWxseSwgdXNlIHRoZSBwcm90b2NvbCBkZWZhdWx0XG4gICAgb3B0cy5wb3J0ID0gdGhpcy5zZWN1cmUgPyAnNDQzJyA6ICc4MCc7XG4gIH1cblxuICB0aGlzLmFnZW50ID0gb3B0cy5hZ2VudCB8fCBmYWxzZTtcbiAgdGhpcy5ob3N0bmFtZSA9IG9wdHMuaG9zdG5hbWUgfHxcbiAgICAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyA/IGxvY2F0aW9uLmhvc3RuYW1lIDogJ2xvY2FsaG9zdCcpO1xuICB0aGlzLnBvcnQgPSBvcHRzLnBvcnQgfHwgKHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9jYXRpb24ucG9ydFxuICAgICAgPyBsb2NhdGlvbi5wb3J0XG4gICAgICA6ICh0aGlzLnNlY3VyZSA/IDQ0MyA6IDgwKSk7XG4gIHRoaXMucXVlcnkgPSBvcHRzLnF1ZXJ5IHx8IHt9O1xuICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB0aGlzLnF1ZXJ5KSB0aGlzLnF1ZXJ5ID0gcGFyc2Vxcy5kZWNvZGUodGhpcy5xdWVyeSk7XG4gIHRoaXMudXBncmFkZSA9IGZhbHNlICE9PSBvcHRzLnVwZ3JhZGU7XG4gIHRoaXMucGF0aCA9IChvcHRzLnBhdGggfHwgJy9lbmdpbmUuaW8nKS5yZXBsYWNlKC9cXC8kLywgJycpICsgJy8nO1xuICB0aGlzLmZvcmNlSlNPTlAgPSAhIW9wdHMuZm9yY2VKU09OUDtcbiAgdGhpcy5qc29ucCA9IGZhbHNlICE9PSBvcHRzLmpzb25wO1xuICB0aGlzLmZvcmNlQmFzZTY0ID0gISFvcHRzLmZvcmNlQmFzZTY0O1xuICB0aGlzLmVuYWJsZXNYRFIgPSAhIW9wdHMuZW5hYmxlc1hEUjtcbiAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZSAhPT0gb3B0cy53aXRoQ3JlZGVudGlhbHM7XG4gIHRoaXMudGltZXN0YW1wUGFyYW0gPSBvcHRzLnRpbWVzdGFtcFBhcmFtIHx8ICd0JztcbiAgdGhpcy50aW1lc3RhbXBSZXF1ZXN0cyA9IG9wdHMudGltZXN0YW1wUmVxdWVzdHM7XG4gIHRoaXMudHJhbnNwb3J0cyA9IG9wdHMudHJhbnNwb3J0cyB8fCBbJ3BvbGxpbmcnLCAnd2Vic29ja2V0J107XG4gIHRoaXMudHJhbnNwb3J0T3B0aW9ucyA9IG9wdHMudHJhbnNwb3J0T3B0aW9ucyB8fCB7fTtcbiAgdGhpcy5yZWFkeVN0YXRlID0gJyc7XG4gIHRoaXMud3JpdGVCdWZmZXIgPSBbXTtcbiAgdGhpcy5wcmV2QnVmZmVyTGVuID0gMDtcbiAgdGhpcy5wb2xpY3lQb3J0ID0gb3B0cy5wb2xpY3lQb3J0IHx8IDg0MztcbiAgdGhpcy5yZW1lbWJlclVwZ3JhZGUgPSBvcHRzLnJlbWVtYmVyVXBncmFkZSB8fCBmYWxzZTtcbiAgdGhpcy5iaW5hcnlUeXBlID0gbnVsbDtcbiAgdGhpcy5vbmx5QmluYXJ5VXBncmFkZXMgPSBvcHRzLm9ubHlCaW5hcnlVcGdyYWRlcztcbiAgdGhpcy5wZXJNZXNzYWdlRGVmbGF0ZSA9IGZhbHNlICE9PSBvcHRzLnBlck1lc3NhZ2VEZWZsYXRlID8gKG9wdHMucGVyTWVzc2FnZURlZmxhdGUgfHwge30pIDogZmFsc2U7XG5cbiAgaWYgKHRydWUgPT09IHRoaXMucGVyTWVzc2FnZURlZmxhdGUpIHRoaXMucGVyTWVzc2FnZURlZmxhdGUgPSB7fTtcbiAgaWYgKHRoaXMucGVyTWVzc2FnZURlZmxhdGUgJiYgbnVsbCA9PSB0aGlzLnBlck1lc3NhZ2VEZWZsYXRlLnRocmVzaG9sZCkge1xuICAgIHRoaXMucGVyTWVzc2FnZURlZmxhdGUudGhyZXNob2xkID0gMTAyNDtcbiAgfVxuXG4gIC8vIFNTTCBvcHRpb25zIGZvciBOb2RlLmpzIGNsaWVudFxuICB0aGlzLnBmeCA9IG9wdHMucGZ4IHx8IHVuZGVmaW5lZDtcbiAgdGhpcy5rZXkgPSBvcHRzLmtleSB8fCB1bmRlZmluZWQ7XG4gIHRoaXMucGFzc3BocmFzZSA9IG9wdHMucGFzc3BocmFzZSB8fCB1bmRlZmluZWQ7XG4gIHRoaXMuY2VydCA9IG9wdHMuY2VydCB8fCB1bmRlZmluZWQ7XG4gIHRoaXMuY2EgPSBvcHRzLmNhIHx8IHVuZGVmaW5lZDtcbiAgdGhpcy5jaXBoZXJzID0gb3B0cy5jaXBoZXJzIHx8IHVuZGVmaW5lZDtcbiAgdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQgPSBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdHMucmVqZWN0VW5hdXRob3JpemVkO1xuICB0aGlzLmZvcmNlTm9kZSA9ICEhb3B0cy5mb3JjZU5vZGU7XG5cbiAgLy8gZGV0ZWN0IFJlYWN0TmF0aXZlIGVudmlyb25tZW50XG4gIHRoaXMuaXNSZWFjdE5hdGl2ZSA9ICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdzdHJpbmcnICYmIG5hdmlnYXRvci5wcm9kdWN0LnRvTG93ZXJDYXNlKCkgPT09ICdyZWFjdG5hdGl2ZScpO1xuXG4gIC8vIG90aGVyIG9wdGlvbnMgZm9yIE5vZGUuanMgb3IgUmVhY3ROYXRpdmUgY2xpZW50XG4gIGlmICh0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5pc1JlYWN0TmF0aXZlKSB7XG4gICAgaWYgKG9wdHMuZXh0cmFIZWFkZXJzICYmIE9iamVjdC5rZXlzKG9wdHMuZXh0cmFIZWFkZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmV4dHJhSGVhZGVycyA9IG9wdHMuZXh0cmFIZWFkZXJzO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmxvY2FsQWRkcmVzcykge1xuICAgICAgdGhpcy5sb2NhbEFkZHJlc3MgPSBvcHRzLmxvY2FsQWRkcmVzcztcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgb24gaGFuZHNoYWtlXG4gIHRoaXMuaWQgPSBudWxsO1xuICB0aGlzLnVwZ3JhZGVzID0gbnVsbDtcbiAgdGhpcy5waW5nSW50ZXJ2YWwgPSBudWxsO1xuICB0aGlzLnBpbmdUaW1lb3V0ID0gbnVsbDtcblxuICAvLyBzZXQgb24gaGVhcnRiZWF0XG4gIHRoaXMucGluZ0ludGVydmFsVGltZXIgPSBudWxsO1xuICB0aGlzLnBpbmdUaW1lb3V0VGltZXIgPSBudWxsO1xuXG4gIHRoaXMub3BlbigpO1xufVxuXG5Tb2NrZXQucHJpb3JXZWJzb2NrZXRTdWNjZXNzID0gZmFsc2U7XG5cbi8qKlxuICogTWl4IGluIGBFbWl0dGVyYC5cbiAqL1xuXG5FbWl0dGVyKFNvY2tldC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIFByb3RvY29sIHZlcnNpb24uXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Tb2NrZXQucHJvdG9jb2wgPSBwYXJzZXIucHJvdG9jb2w7IC8vIHRoaXMgaXMgYW4gaW50XG5cbi8qKlxuICogRXhwb3NlIGRlcHMgZm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5XG4gKiBhbmQgc3RhbmRhbG9uZSBicm93c2VyIGFjY2Vzcy5cbiAqL1xuXG5Tb2NrZXQuU29ja2V0ID0gU29ja2V0O1xuU29ja2V0LlRyYW5zcG9ydCA9IHJlcXVpcmUoJy4vdHJhbnNwb3J0Jyk7XG5Tb2NrZXQudHJhbnNwb3J0cyA9IHJlcXVpcmUoJy4vdHJhbnNwb3J0cy9pbmRleCcpO1xuU29ja2V0LnBhcnNlciA9IHJlcXVpcmUoJ2VuZ2luZS5pby1wYXJzZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRyYW5zcG9ydCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHJhbnNwb3J0IG5hbWVcbiAqIEByZXR1cm4ge1RyYW5zcG9ydH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUuY3JlYXRlVHJhbnNwb3J0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVidWcoJ2NyZWF0aW5nIHRyYW5zcG9ydCBcIiVzXCInLCBuYW1lKTtcbiAgdmFyIHF1ZXJ5ID0gY2xvbmUodGhpcy5xdWVyeSk7XG5cbiAgLy8gYXBwZW5kIGVuZ2luZS5pbyBwcm90b2NvbCBpZGVudGlmaWVyXG4gIHF1ZXJ5LkVJTyA9IHBhcnNlci5wcm90b2NvbDtcblxuICAvLyB0cmFuc3BvcnQgbmFtZVxuICBxdWVyeS50cmFuc3BvcnQgPSBuYW1lO1xuXG4gIC8vIHBlci10cmFuc3BvcnQgb3B0aW9uc1xuICB2YXIgb3B0aW9ucyA9IHRoaXMudHJhbnNwb3J0T3B0aW9uc1tuYW1lXSB8fCB7fTtcblxuICAvLyBzZXNzaW9uIGlkIGlmIHdlIGFscmVhZHkgaGF2ZSBvbmVcbiAgaWYgKHRoaXMuaWQpIHF1ZXJ5LnNpZCA9IHRoaXMuaWQ7XG5cbiAgdmFyIHRyYW5zcG9ydCA9IG5ldyB0cmFuc3BvcnRzW25hbWVdKHtcbiAgICBxdWVyeTogcXVlcnksXG4gICAgc29ja2V0OiB0aGlzLFxuICAgIGFnZW50OiBvcHRpb25zLmFnZW50IHx8IHRoaXMuYWdlbnQsXG4gICAgaG9zdG5hbWU6IG9wdGlvbnMuaG9zdG5hbWUgfHwgdGhpcy5ob3N0bmFtZSxcbiAgICBwb3J0OiBvcHRpb25zLnBvcnQgfHwgdGhpcy5wb3J0LFxuICAgIHNlY3VyZTogb3B0aW9ucy5zZWN1cmUgfHwgdGhpcy5zZWN1cmUsXG4gICAgcGF0aDogb3B0aW9ucy5wYXRoIHx8IHRoaXMucGF0aCxcbiAgICBmb3JjZUpTT05QOiBvcHRpb25zLmZvcmNlSlNPTlAgfHwgdGhpcy5mb3JjZUpTT05QLFxuICAgIGpzb25wOiBvcHRpb25zLmpzb25wIHx8IHRoaXMuanNvbnAsXG4gICAgZm9yY2VCYXNlNjQ6IG9wdGlvbnMuZm9yY2VCYXNlNjQgfHwgdGhpcy5mb3JjZUJhc2U2NCxcbiAgICBlbmFibGVzWERSOiBvcHRpb25zLmVuYWJsZXNYRFIgfHwgdGhpcy5lbmFibGVzWERSLFxuICAgIHdpdGhDcmVkZW50aWFsczogb3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgfHwgdGhpcy53aXRoQ3JlZGVudGlhbHMsXG4gICAgdGltZXN0YW1wUmVxdWVzdHM6IG9wdGlvbnMudGltZXN0YW1wUmVxdWVzdHMgfHwgdGhpcy50aW1lc3RhbXBSZXF1ZXN0cyxcbiAgICB0aW1lc3RhbXBQYXJhbTogb3B0aW9ucy50aW1lc3RhbXBQYXJhbSB8fCB0aGlzLnRpbWVzdGFtcFBhcmFtLFxuICAgIHBvbGljeVBvcnQ6IG9wdGlvbnMucG9saWN5UG9ydCB8fCB0aGlzLnBvbGljeVBvcnQsXG4gICAgcGZ4OiBvcHRpb25zLnBmeCB8fCB0aGlzLnBmeCxcbiAgICBrZXk6IG9wdGlvbnMua2V5IHx8IHRoaXMua2V5LFxuICAgIHBhc3NwaHJhc2U6IG9wdGlvbnMucGFzc3BocmFzZSB8fCB0aGlzLnBhc3NwaHJhc2UsXG4gICAgY2VydDogb3B0aW9ucy5jZXJ0IHx8IHRoaXMuY2VydCxcbiAgICBjYTogb3B0aW9ucy5jYSB8fCB0aGlzLmNhLFxuICAgIGNpcGhlcnM6IG9wdGlvbnMuY2lwaGVycyB8fCB0aGlzLmNpcGhlcnMsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiBvcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZCB8fCB0aGlzLnJlamVjdFVuYXV0aG9yaXplZCxcbiAgICBwZXJNZXNzYWdlRGVmbGF0ZTogb3B0aW9ucy5wZXJNZXNzYWdlRGVmbGF0ZSB8fCB0aGlzLnBlck1lc3NhZ2VEZWZsYXRlLFxuICAgIGV4dHJhSGVhZGVyczogb3B0aW9ucy5leHRyYUhlYWRlcnMgfHwgdGhpcy5leHRyYUhlYWRlcnMsXG4gICAgZm9yY2VOb2RlOiBvcHRpb25zLmZvcmNlTm9kZSB8fCB0aGlzLmZvcmNlTm9kZSxcbiAgICBsb2NhbEFkZHJlc3M6IG9wdGlvbnMubG9jYWxBZGRyZXNzIHx8IHRoaXMubG9jYWxBZGRyZXNzLFxuICAgIHJlcXVlc3RUaW1lb3V0OiBvcHRpb25zLnJlcXVlc3RUaW1lb3V0IHx8IHRoaXMucmVxdWVzdFRpbWVvdXQsXG4gICAgcHJvdG9jb2xzOiBvcHRpb25zLnByb3RvY29scyB8fCB2b2lkICgwKSxcbiAgICBpc1JlYWN0TmF0aXZlOiB0aGlzLmlzUmVhY3ROYXRpdmVcbiAgfSk7XG5cbiAgcmV0dXJuIHRyYW5zcG9ydDtcbn07XG5cbmZ1bmN0aW9uIGNsb25lIChvYmopIHtcbiAgdmFyIG8gPSB7fTtcbiAgZm9yICh2YXIgaSBpbiBvYmopIHtcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICBvW2ldID0gb2JqW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0cmFuc3BvcnQgdG8gdXNlIGFuZCBzdGFydHMgcHJvYmUuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblNvY2tldC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRyYW5zcG9ydDtcbiAgaWYgKHRoaXMucmVtZW1iZXJVcGdyYWRlICYmIFNvY2tldC5wcmlvcldlYnNvY2tldFN1Y2Nlc3MgJiYgdGhpcy50cmFuc3BvcnRzLmluZGV4T2YoJ3dlYnNvY2tldCcpICE9PSAtMSkge1xuICAgIHRyYW5zcG9ydCA9ICd3ZWJzb2NrZXQnO1xuICB9IGVsc2UgaWYgKDAgPT09IHRoaXMudHJhbnNwb3J0cy5sZW5ndGgpIHtcbiAgICAvLyBFbWl0IGVycm9yIG9uIG5leHQgdGljayBzbyBpdCBjYW4gYmUgbGlzdGVuZWQgdG9cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgJ05vIHRyYW5zcG9ydHMgYXZhaWxhYmxlJyk7XG4gICAgfSwgMCk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIHRyYW5zcG9ydCA9IHRoaXMudHJhbnNwb3J0c1swXTtcbiAgfVxuICB0aGlzLnJlYWR5U3RhdGUgPSAnb3BlbmluZyc7XG5cbiAgLy8gUmV0cnkgd2l0aCB0aGUgbmV4dCB0cmFuc3BvcnQgaWYgdGhlIHRyYW5zcG9ydCBpcyBkaXNhYmxlZCAoanNvbnA6IGZhbHNlKVxuICB0cnkge1xuICAgIHRyYW5zcG9ydCA9IHRoaXMuY3JlYXRlVHJhbnNwb3J0KHRyYW5zcG9ydCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aGlzLnRyYW5zcG9ydHMuc2hpZnQoKTtcbiAgICB0aGlzLm9wZW4oKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cmFuc3BvcnQub3BlbigpO1xuICB0aGlzLnNldFRyYW5zcG9ydCh0cmFuc3BvcnQpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHRyYW5zcG9ydC4gRGlzYWJsZXMgdGhlIGV4aXN0aW5nIG9uZSAoaWYgYW55KS5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLnNldFRyYW5zcG9ydCA9IGZ1bmN0aW9uICh0cmFuc3BvcnQpIHtcbiAgZGVidWcoJ3NldHRpbmcgdHJhbnNwb3J0ICVzJywgdHJhbnNwb3J0Lm5hbWUpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKHRoaXMudHJhbnNwb3J0KSB7XG4gICAgZGVidWcoJ2NsZWFyaW5nIGV4aXN0aW5nIHRyYW5zcG9ydCAlcycsIHRoaXMudHJhbnNwb3J0Lm5hbWUpO1xuICAgIHRoaXMudHJhbnNwb3J0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gc2V0IHVwIHRyYW5zcG9ydFxuICB0aGlzLnRyYW5zcG9ydCA9IHRyYW5zcG9ydDtcblxuICAvLyBzZXQgdXAgdHJhbnNwb3J0IGxpc3RlbmVyc1xuICB0cmFuc3BvcnRcbiAgLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLm9uRHJhaW4oKTtcbiAgfSlcbiAgLm9uKCdwYWNrZXQnLCBmdW5jdGlvbiAocGFja2V0KSB7XG4gICAgc2VsZi5vblBhY2tldChwYWNrZXQpO1xuICB9KVxuICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGUpIHtcbiAgICBzZWxmLm9uRXJyb3IoZSk7XG4gIH0pXG4gIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5vbkNsb3NlKCd0cmFuc3BvcnQgY2xvc2UnKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFByb2JlcyBhIHRyYW5zcG9ydC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHJhbnNwb3J0IG5hbWVcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUucHJvYmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICBkZWJ1ZygncHJvYmluZyB0cmFuc3BvcnQgXCIlc1wiJywgbmFtZSk7XG4gIHZhciB0cmFuc3BvcnQgPSB0aGlzLmNyZWF0ZVRyYW5zcG9ydChuYW1lLCB7IHByb2JlOiAxIH0pO1xuICB2YXIgZmFpbGVkID0gZmFsc2U7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBTb2NrZXQucHJpb3JXZWJzb2NrZXRTdWNjZXNzID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gb25UcmFuc3BvcnRPcGVuICgpIHtcbiAgICBpZiAoc2VsZi5vbmx5QmluYXJ5VXBncmFkZXMpIHtcbiAgICAgIHZhciB1cGdyYWRlTG9zZXNCaW5hcnkgPSAhdGhpcy5zdXBwb3J0c0JpbmFyeSAmJiBzZWxmLnRyYW5zcG9ydC5zdXBwb3J0c0JpbmFyeTtcbiAgICAgIGZhaWxlZCA9IGZhaWxlZCB8fCB1cGdyYWRlTG9zZXNCaW5hcnk7XG4gICAgfVxuICAgIGlmIChmYWlsZWQpIHJldHVybjtcblxuICAgIGRlYnVnKCdwcm9iZSB0cmFuc3BvcnQgXCIlc1wiIG9wZW5lZCcsIG5hbWUpO1xuICAgIHRyYW5zcG9ydC5zZW5kKFt7IHR5cGU6ICdwaW5nJywgZGF0YTogJ3Byb2JlJyB9XSk7XG4gICAgdHJhbnNwb3J0Lm9uY2UoJ3BhY2tldCcsIGZ1bmN0aW9uIChtc2cpIHtcbiAgICAgIGlmIChmYWlsZWQpIHJldHVybjtcbiAgICAgIGlmICgncG9uZycgPT09IG1zZy50eXBlICYmICdwcm9iZScgPT09IG1zZy5kYXRhKSB7XG4gICAgICAgIGRlYnVnKCdwcm9iZSB0cmFuc3BvcnQgXCIlc1wiIHBvbmcnLCBuYW1lKTtcbiAgICAgICAgc2VsZi51cGdyYWRpbmcgPSB0cnVlO1xuICAgICAgICBzZWxmLmVtaXQoJ3VwZ3JhZGluZycsIHRyYW5zcG9ydCk7XG4gICAgICAgIGlmICghdHJhbnNwb3J0KSByZXR1cm47XG4gICAgICAgIFNvY2tldC5wcmlvcldlYnNvY2tldFN1Y2Nlc3MgPSAnd2Vic29ja2V0JyA9PT0gdHJhbnNwb3J0Lm5hbWU7XG5cbiAgICAgICAgZGVidWcoJ3BhdXNpbmcgY3VycmVudCB0cmFuc3BvcnQgXCIlc1wiJywgc2VsZi50cmFuc3BvcnQubmFtZSk7XG4gICAgICAgIHNlbGYudHJhbnNwb3J0LnBhdXNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZmFpbGVkKSByZXR1cm47XG4gICAgICAgICAgaWYgKCdjbG9zZWQnID09PSBzZWxmLnJlYWR5U3RhdGUpIHJldHVybjtcbiAgICAgICAgICBkZWJ1ZygnY2hhbmdpbmcgdHJhbnNwb3J0IGFuZCBzZW5kaW5nIHVwZ3JhZGUgcGFja2V0Jyk7XG5cbiAgICAgICAgICBjbGVhbnVwKCk7XG5cbiAgICAgICAgICBzZWxmLnNldFRyYW5zcG9ydCh0cmFuc3BvcnQpO1xuICAgICAgICAgIHRyYW5zcG9ydC5zZW5kKFt7IHR5cGU6ICd1cGdyYWRlJyB9XSk7XG4gICAgICAgICAgc2VsZi5lbWl0KCd1cGdyYWRlJywgdHJhbnNwb3J0KTtcbiAgICAgICAgICB0cmFuc3BvcnQgPSBudWxsO1xuICAgICAgICAgIHNlbGYudXBncmFkaW5nID0gZmFsc2U7XG4gICAgICAgICAgc2VsZi5mbHVzaCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYnVnKCdwcm9iZSB0cmFuc3BvcnQgXCIlc1wiIGZhaWxlZCcsIG5hbWUpO1xuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdwcm9iZSBlcnJvcicpO1xuICAgICAgICBlcnIudHJhbnNwb3J0ID0gdHJhbnNwb3J0Lm5hbWU7XG4gICAgICAgIHNlbGYuZW1pdCgndXBncmFkZUVycm9yJywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZyZWV6ZVRyYW5zcG9ydCAoKSB7XG4gICAgaWYgKGZhaWxlZCkgcmV0dXJuO1xuXG4gICAgLy8gQW55IGNhbGxiYWNrIGNhbGxlZCBieSB0cmFuc3BvcnQgc2hvdWxkIGJlIGlnbm9yZWQgc2luY2Ugbm93XG4gICAgZmFpbGVkID0gdHJ1ZTtcblxuICAgIGNsZWFudXAoKTtcblxuICAgIHRyYW5zcG9ydC5jbG9zZSgpO1xuICAgIHRyYW5zcG9ydCA9IG51bGw7XG4gIH1cblxuICAvLyBIYW5kbGUgYW55IGVycm9yIHRoYXQgaGFwcGVucyB3aGlsZSBwcm9iaW5nXG4gIGZ1bmN0aW9uIG9uZXJyb3IgKGVycikge1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigncHJvYmUgZXJyb3I6ICcgKyBlcnIpO1xuICAgIGVycm9yLnRyYW5zcG9ydCA9IHRyYW5zcG9ydC5uYW1lO1xuXG4gICAgZnJlZXplVHJhbnNwb3J0KCk7XG5cbiAgICBkZWJ1ZygncHJvYmUgdHJhbnNwb3J0IFwiJXNcIiBmYWlsZWQgYmVjYXVzZSBvZiBlcnJvcjogJXMnLCBuYW1lLCBlcnIpO1xuXG4gICAgc2VsZi5lbWl0KCd1cGdyYWRlRXJyb3InLCBlcnJvcik7XG4gIH1cblxuICBmdW5jdGlvbiBvblRyYW5zcG9ydENsb3NlICgpIHtcbiAgICBvbmVycm9yKCd0cmFuc3BvcnQgY2xvc2VkJyk7XG4gIH1cblxuICAvLyBXaGVuIHRoZSBzb2NrZXQgaXMgY2xvc2VkIHdoaWxlIHdlJ3JlIHByb2JpbmdcbiAgZnVuY3Rpb24gb25jbG9zZSAoKSB7XG4gICAgb25lcnJvcignc29ja2V0IGNsb3NlZCcpO1xuICB9XG5cbiAgLy8gV2hlbiB0aGUgc29ja2V0IGlzIHVwZ3JhZGVkIHdoaWxlIHdlJ3JlIHByb2JpbmdcbiAgZnVuY3Rpb24gb251cGdyYWRlICh0bykge1xuICAgIGlmICh0cmFuc3BvcnQgJiYgdG8ubmFtZSAhPT0gdHJhbnNwb3J0Lm5hbWUpIHtcbiAgICAgIGRlYnVnKCdcIiVzXCIgd29ya3MgLSBhYm9ydGluZyBcIiVzXCInLCB0by5uYW1lLCB0cmFuc3BvcnQubmFtZSk7XG4gICAgICBmcmVlemVUcmFuc3BvcnQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgYWxsIGxpc3RlbmVycyBvbiB0aGUgdHJhbnNwb3J0IGFuZCBvbiBzZWxmXG4gIGZ1bmN0aW9uIGNsZWFudXAgKCkge1xuICAgIHRyYW5zcG9ydC5yZW1vdmVMaXN0ZW5lcignb3BlbicsIG9uVHJhbnNwb3J0T3Blbik7XG4gICAgdHJhbnNwb3J0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIHRyYW5zcG9ydC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvblRyYW5zcG9ydENsb3NlKTtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoJ3VwZ3JhZGluZycsIG9udXBncmFkZSk7XG4gIH1cblxuICB0cmFuc3BvcnQub25jZSgnb3BlbicsIG9uVHJhbnNwb3J0T3Blbik7XG4gIHRyYW5zcG9ydC5vbmNlKCdlcnJvcicsIG9uZXJyb3IpO1xuICB0cmFuc3BvcnQub25jZSgnY2xvc2UnLCBvblRyYW5zcG9ydENsb3NlKTtcblxuICB0aGlzLm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIHRoaXMub25jZSgndXBncmFkaW5nJywgb251cGdyYWRlKTtcblxuICB0cmFuc3BvcnQub3BlbigpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBjb25uZWN0aW9uIGlzIGRlZW1lZCBvcGVuLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vbk9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdzb2NrZXQgb3BlbicpO1xuICB0aGlzLnJlYWR5U3RhdGUgPSAnb3Blbic7XG4gIFNvY2tldC5wcmlvcldlYnNvY2tldFN1Y2Nlc3MgPSAnd2Vic29ja2V0JyA9PT0gdGhpcy50cmFuc3BvcnQubmFtZTtcbiAgdGhpcy5lbWl0KCdvcGVuJyk7XG4gIHRoaXMuZmx1c2goKTtcblxuICAvLyB3ZSBjaGVjayBmb3IgYHJlYWR5U3RhdGVgIGluIGNhc2UgYW4gYG9wZW5gXG4gIC8vIGxpc3RlbmVyIGFscmVhZHkgY2xvc2VkIHRoZSBzb2NrZXRcbiAgaWYgKCdvcGVuJyA9PT0gdGhpcy5yZWFkeVN0YXRlICYmIHRoaXMudXBncmFkZSAmJiB0aGlzLnRyYW5zcG9ydC5wYXVzZSkge1xuICAgIGRlYnVnKCdzdGFydGluZyB1cGdyYWRlIHByb2JlcycpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy51cGdyYWRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHJvYmUodGhpcy51cGdyYWRlc1tpXSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSBwYWNrZXQuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vblBhY2tldCA9IGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgaWYgKCdvcGVuaW5nJyA9PT0gdGhpcy5yZWFkeVN0YXRlIHx8ICdvcGVuJyA9PT0gdGhpcy5yZWFkeVN0YXRlIHx8XG4gICAgICAnY2xvc2luZycgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgIGRlYnVnKCdzb2NrZXQgcmVjZWl2ZTogdHlwZSBcIiVzXCIsIGRhdGEgXCIlc1wiJywgcGFja2V0LnR5cGUsIHBhY2tldC5kYXRhKTtcblxuICAgIHRoaXMuZW1pdCgncGFja2V0JywgcGFja2V0KTtcblxuICAgIC8vIFNvY2tldCBpcyBsaXZlIC0gYW55IHBhY2tldCBjb3VudHNcbiAgICB0aGlzLmVtaXQoJ2hlYXJ0YmVhdCcpO1xuXG4gICAgc3dpdGNoIChwYWNrZXQudHlwZSkge1xuICAgICAgY2FzZSAnb3Blbic6XG4gICAgICAgIHRoaXMub25IYW5kc2hha2UoSlNPTi5wYXJzZShwYWNrZXQuZGF0YSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncG9uZyc6XG4gICAgICAgIHRoaXMuc2V0UGluZygpO1xuICAgICAgICB0aGlzLmVtaXQoJ3BvbmcnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignc2VydmVyIGVycm9yJyk7XG4gICAgICAgIGVyci5jb2RlID0gcGFja2V0LmRhdGE7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbWVzc2FnZSc6XG4gICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIHBhY2tldC5kYXRhKTtcbiAgICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlJywgcGFja2V0LmRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZGVidWcoJ3BhY2tldCByZWNlaXZlZCB3aXRoIHNvY2tldCByZWFkeVN0YXRlIFwiJXNcIicsIHRoaXMucmVhZHlTdGF0ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gaGFuZHNoYWtlIGNvbXBsZXRpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGhhbmRzaGFrZSBvYmpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUub25IYW5kc2hha2UgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLmVtaXQoJ2hhbmRzaGFrZScsIGRhdGEpO1xuICB0aGlzLmlkID0gZGF0YS5zaWQ7XG4gIHRoaXMudHJhbnNwb3J0LnF1ZXJ5LnNpZCA9IGRhdGEuc2lkO1xuICB0aGlzLnVwZ3JhZGVzID0gdGhpcy5maWx0ZXJVcGdyYWRlcyhkYXRhLnVwZ3JhZGVzKTtcbiAgdGhpcy5waW5nSW50ZXJ2YWwgPSBkYXRhLnBpbmdJbnRlcnZhbDtcbiAgdGhpcy5waW5nVGltZW91dCA9IGRhdGEucGluZ1RpbWVvdXQ7XG4gIHRoaXMub25PcGVuKCk7XG4gIC8vIEluIGNhc2Ugb3BlbiBoYW5kbGVyIGNsb3NlcyBzb2NrZXRcbiAgaWYgKCdjbG9zZWQnID09PSB0aGlzLnJlYWR5U3RhdGUpIHJldHVybjtcbiAgdGhpcy5zZXRQaW5nKCk7XG5cbiAgLy8gUHJvbG9uZyBsaXZlbmVzcyBvZiBzb2NrZXQgb24gaGVhcnRiZWF0XG4gIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ2hlYXJ0YmVhdCcsIHRoaXMub25IZWFydGJlYXQpO1xuICB0aGlzLm9uKCdoZWFydGJlYXQnLCB0aGlzLm9uSGVhcnRiZWF0KTtcbn07XG5cbi8qKlxuICogUmVzZXRzIHBpbmcgdGltZW91dC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLm9uSGVhcnRiZWF0ID0gZnVuY3Rpb24gKHRpbWVvdXQpIHtcbiAgY2xlYXJUaW1lb3V0KHRoaXMucGluZ1RpbWVvdXRUaW1lcik7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5waW5nVGltZW91dFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCdjbG9zZWQnID09PSBzZWxmLnJlYWR5U3RhdGUpIHJldHVybjtcbiAgICBzZWxmLm9uQ2xvc2UoJ3BpbmcgdGltZW91dCcpO1xuICB9LCB0aW1lb3V0IHx8IChzZWxmLnBpbmdJbnRlcnZhbCArIHNlbGYucGluZ1RpbWVvdXQpKTtcbn07XG5cbi8qKlxuICogUGluZ3Mgc2VydmVyIGV2ZXJ5IGB0aGlzLnBpbmdJbnRlcnZhbGAgYW5kIGV4cGVjdHMgcmVzcG9uc2VcbiAqIHdpdGhpbiBgdGhpcy5waW5nVGltZW91dGAgb3IgY2xvc2VzIGNvbm5lY3Rpb24uXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5zZXRQaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGNsZWFyVGltZW91dChzZWxmLnBpbmdJbnRlcnZhbFRpbWVyKTtcbiAgc2VsZi5waW5nSW50ZXJ2YWxUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCd3cml0aW5nIHBpbmcgcGFja2V0IC0gZXhwZWN0aW5nIHBvbmcgd2l0aGluICVzbXMnLCBzZWxmLnBpbmdUaW1lb3V0KTtcbiAgICBzZWxmLnBpbmcoKTtcbiAgICBzZWxmLm9uSGVhcnRiZWF0KHNlbGYucGluZ1RpbWVvdXQpO1xuICB9LCBzZWxmLnBpbmdJbnRlcnZhbCk7XG59O1xuXG4vKipcbiogU2VuZHMgYSBwaW5nIHBhY2tldC5cbipcbiogQGFwaSBwcml2YXRlXG4qL1xuXG5Tb2NrZXQucHJvdG90eXBlLnBpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5zZW5kUGFja2V0KCdwaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIHNlbGYuZW1pdCgncGluZycpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIG9uIGBkcmFpbmAgZXZlbnRcbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLm9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMud3JpdGVCdWZmZXIuc3BsaWNlKDAsIHRoaXMucHJldkJ1ZmZlckxlbik7XG5cbiAgLy8gc2V0dGluZyBwcmV2QnVmZmVyTGVuID0gMCBpcyB2ZXJ5IGltcG9ydGFudFxuICAvLyBmb3IgZXhhbXBsZSwgd2hlbiB1cGdyYWRpbmcsIHVwZ3JhZGUgcGFja2V0IGlzIHNlbnQgb3ZlcixcbiAgLy8gYW5kIGEgbm9uemVybyBwcmV2QnVmZmVyTGVuIGNvdWxkIGNhdXNlIHByb2JsZW1zIG9uIGBkcmFpbmBcbiAgdGhpcy5wcmV2QnVmZmVyTGVuID0gMDtcblxuICBpZiAoMCA9PT0gdGhpcy53cml0ZUJ1ZmZlci5sZW5ndGgpIHtcbiAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5mbHVzaCgpO1xuICB9XG59O1xuXG4vKipcbiAqIEZsdXNoIHdyaXRlIGJ1ZmZlcnMuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCdjbG9zZWQnICE9PSB0aGlzLnJlYWR5U3RhdGUgJiYgdGhpcy50cmFuc3BvcnQud3JpdGFibGUgJiZcbiAgICAhdGhpcy51cGdyYWRpbmcgJiYgdGhpcy53cml0ZUJ1ZmZlci5sZW5ndGgpIHtcbiAgICBkZWJ1ZygnZmx1c2hpbmcgJWQgcGFja2V0cyBpbiBzb2NrZXQnLCB0aGlzLndyaXRlQnVmZmVyLmxlbmd0aCk7XG4gICAgdGhpcy50cmFuc3BvcnQuc2VuZCh0aGlzLndyaXRlQnVmZmVyKTtcbiAgICAvLyBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgbGVuZ3RoIG9mIHdyaXRlQnVmZmVyXG4gICAgLy8gc3BsaWNlIHdyaXRlQnVmZmVyIGFuZCBjYWxsYmFja0J1ZmZlciBvbiBgZHJhaW5gXG4gICAgdGhpcy5wcmV2QnVmZmVyTGVuID0gdGhpcy53cml0ZUJ1ZmZlci5sZW5ndGg7XG4gICAgdGhpcy5lbWl0KCdmbHVzaCcpO1xuICB9XG59O1xuXG4vKipcbiAqIFNlbmRzIGEgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMuXG4gKiBAcmV0dXJuIHtTb2NrZXR9IGZvciBjaGFpbmluZy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS53cml0ZSA9XG5Tb2NrZXQucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbiAobXNnLCBvcHRpb25zLCBmbikge1xuICB0aGlzLnNlbmRQYWNrZXQoJ21lc3NhZ2UnLCBtc2csIG9wdGlvbnMsIGZuKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNlbmRzIGEgcGFja2V0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYWNrZXQgdHlwZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUuc2VuZFBhY2tldCA9IGZ1bmN0aW9uICh0eXBlLCBkYXRhLCBvcHRpb25zLCBmbikge1xuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGRhdGEpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2Ygb3B0aW9ucykge1xuICAgIGZuID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gbnVsbDtcbiAgfVxuXG4gIGlmICgnY2xvc2luZycgPT09IHRoaXMucmVhZHlTdGF0ZSB8fCAnY2xvc2VkJyA9PT0gdGhpcy5yZWFkeVN0YXRlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuY29tcHJlc3MgPSBmYWxzZSAhPT0gb3B0aW9ucy5jb21wcmVzcztcblxuICB2YXIgcGFja2V0ID0ge1xuICAgIHR5cGU6IHR5cGUsXG4gICAgZGF0YTogZGF0YSxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH07XG4gIHRoaXMuZW1pdCgncGFja2V0Q3JlYXRlJywgcGFja2V0KTtcbiAgdGhpcy53cml0ZUJ1ZmZlci5wdXNoKHBhY2tldCk7XG4gIGlmIChmbikgdGhpcy5vbmNlKCdmbHVzaCcsIGZuKTtcbiAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24uXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCdvcGVuaW5nJyA9PT0gdGhpcy5yZWFkeVN0YXRlIHx8ICdvcGVuJyA9PT0gdGhpcy5yZWFkeVN0YXRlKSB7XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gJ2Nsb3NpbmcnO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMud3JpdGVCdWZmZXIubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9uY2UoJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy51cGdyYWRpbmcpIHtcbiAgICAgICAgICB3YWl0Rm9yVXBncmFkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy51cGdyYWRpbmcpIHtcbiAgICAgIHdhaXRGb3JVcGdyYWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2UgKCkge1xuICAgIHNlbGYub25DbG9zZSgnZm9yY2VkIGNsb3NlJyk7XG4gICAgZGVidWcoJ3NvY2tldCBjbG9zaW5nIC0gdGVsbGluZyB0cmFuc3BvcnQgdG8gY2xvc2UnKTtcbiAgICBzZWxmLnRyYW5zcG9ydC5jbG9zZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW51cEFuZENsb3NlICgpIHtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKCd1cGdyYWRlJywgY2xlYW51cEFuZENsb3NlKTtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKCd1cGdyYWRlRXJyb3InLCBjbGVhbnVwQW5kQ2xvc2UpO1xuICAgIGNsb3NlKCk7XG4gIH1cblxuICBmdW5jdGlvbiB3YWl0Rm9yVXBncmFkZSAoKSB7XG4gICAgLy8gd2FpdCBmb3IgdXBncmFkZSB0byBmaW5pc2ggc2luY2Ugd2UgY2FuJ3Qgc2VuZCBwYWNrZXRzIHdoaWxlIHBhdXNpbmcgYSB0cmFuc3BvcnRcbiAgICBzZWxmLm9uY2UoJ3VwZ3JhZGUnLCBjbGVhbnVwQW5kQ2xvc2UpO1xuICAgIHNlbGYub25jZSgndXBncmFkZUVycm9yJywgY2xlYW51cEFuZENsb3NlKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiB0cmFuc3BvcnQgZXJyb3JcbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLm9uRXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gIGRlYnVnKCdzb2NrZXQgZXJyb3IgJWonLCBlcnIpO1xuICBTb2NrZXQucHJpb3JXZWJzb2NrZXRTdWNjZXNzID0gZmFsc2U7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB0aGlzLm9uQ2xvc2UoJ3RyYW5zcG9ydCBlcnJvcicsIGVycik7XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIHRyYW5zcG9ydCBjbG9zZS5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLm9uQ2xvc2UgPSBmdW5jdGlvbiAocmVhc29uLCBkZXNjKSB7XG4gIGlmICgnb3BlbmluZycgPT09IHRoaXMucmVhZHlTdGF0ZSB8fCAnb3BlbicgPT09IHRoaXMucmVhZHlTdGF0ZSB8fCAnY2xvc2luZycgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgIGRlYnVnKCdzb2NrZXQgY2xvc2Ugd2l0aCByZWFzb246IFwiJXNcIicsIHJlYXNvbik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgLy8gY2xlYXIgdGltZXJzXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMucGluZ0ludGVydmFsVGltZXIpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnBpbmdUaW1lb3V0VGltZXIpO1xuXG4gICAgLy8gc3RvcCBldmVudCBmcm9tIGZpcmluZyBhZ2FpbiBmb3IgdHJhbnNwb3J0XG4gICAgdGhpcy50cmFuc3BvcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCdjbG9zZScpO1xuXG4gICAgLy8gZW5zdXJlIHRyYW5zcG9ydCB3b24ndCBzdGF5IG9wZW5cbiAgICB0aGlzLnRyYW5zcG9ydC5jbG9zZSgpO1xuXG4gICAgLy8gaWdub3JlIGZ1cnRoZXIgdHJhbnNwb3J0IGNvbW11bmljYXRpb25cbiAgICB0aGlzLnRyYW5zcG9ydC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIC8vIHNldCByZWFkeSBzdGF0ZVxuICAgIHRoaXMucmVhZHlTdGF0ZSA9ICdjbG9zZWQnO1xuXG4gICAgLy8gY2xlYXIgc2Vzc2lvbiBpZFxuICAgIHRoaXMuaWQgPSBudWxsO1xuXG4gICAgLy8gZW1pdCBjbG9zZSBldmVudFxuICAgIHRoaXMuZW1pdCgnY2xvc2UnLCByZWFzb24sIGRlc2MpO1xuXG4gICAgLy8gY2xlYW4gYnVmZmVycyBhZnRlciwgc28gdXNlcnMgY2FuIHN0aWxsXG4gICAgLy8gZ3JhYiB0aGUgYnVmZmVycyBvbiBgY2xvc2VgIGV2ZW50XG4gICAgc2VsZi53cml0ZUJ1ZmZlciA9IFtdO1xuICAgIHNlbGYucHJldkJ1ZmZlckxlbiA9IDA7XG4gIH1cbn07XG5cbi8qKlxuICogRmlsdGVycyB1cGdyYWRlcywgcmV0dXJuaW5nIG9ubHkgdGhvc2UgbWF0Y2hpbmcgY2xpZW50IHRyYW5zcG9ydHMuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gc2VydmVyIHVwZ3JhZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5maWx0ZXJVcGdyYWRlcyA9IGZ1bmN0aW9uICh1cGdyYWRlcykge1xuICB2YXIgZmlsdGVyZWRVcGdyYWRlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgaiA9IHVwZ3JhZGVzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgIGlmICh+aW5kZXgodGhpcy50cmFuc3BvcnRzLCB1cGdyYWRlc1tpXSkpIGZpbHRlcmVkVXBncmFkZXMucHVzaCh1cGdyYWRlc1tpXSk7XG4gIH1cbiAgcmV0dXJuIGZpbHRlcmVkVXBncmFkZXM7XG59O1xuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBwYXJzZXIgPSByZXF1aXJlKCdlbmdpbmUuaW8tcGFyc2VyJyk7XG52YXIgRW1pdHRlciA9IHJlcXVpcmUoJ2NvbXBvbmVudC1lbWl0dGVyJyk7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc3BvcnQ7XG5cbi8qKlxuICogVHJhbnNwb3J0IGFic3RyYWN0IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gVHJhbnNwb3J0IChvcHRzKSB7XG4gIHRoaXMucGF0aCA9IG9wdHMucGF0aDtcbiAgdGhpcy5ob3N0bmFtZSA9IG9wdHMuaG9zdG5hbWU7XG4gIHRoaXMucG9ydCA9IG9wdHMucG9ydDtcbiAgdGhpcy5zZWN1cmUgPSBvcHRzLnNlY3VyZTtcbiAgdGhpcy5xdWVyeSA9IG9wdHMucXVlcnk7XG4gIHRoaXMudGltZXN0YW1wUGFyYW0gPSBvcHRzLnRpbWVzdGFtcFBhcmFtO1xuICB0aGlzLnRpbWVzdGFtcFJlcXVlc3RzID0gb3B0cy50aW1lc3RhbXBSZXF1ZXN0cztcbiAgdGhpcy5yZWFkeVN0YXRlID0gJyc7XG4gIHRoaXMuYWdlbnQgPSBvcHRzLmFnZW50IHx8IGZhbHNlO1xuICB0aGlzLnNvY2tldCA9IG9wdHMuc29ja2V0O1xuICB0aGlzLmVuYWJsZXNYRFIgPSBvcHRzLmVuYWJsZXNYRFI7XG4gIHRoaXMud2l0aENyZWRlbnRpYWxzID0gb3B0cy53aXRoQ3JlZGVudGlhbHM7XG5cbiAgLy8gU1NMIG9wdGlvbnMgZm9yIE5vZGUuanMgY2xpZW50XG4gIHRoaXMucGZ4ID0gb3B0cy5wZng7XG4gIHRoaXMua2V5ID0gb3B0cy5rZXk7XG4gIHRoaXMucGFzc3BocmFzZSA9IG9wdHMucGFzc3BocmFzZTtcbiAgdGhpcy5jZXJ0ID0gb3B0cy5jZXJ0O1xuICB0aGlzLmNhID0gb3B0cy5jYTtcbiAgdGhpcy5jaXBoZXJzID0gb3B0cy5jaXBoZXJzO1xuICB0aGlzLnJlamVjdFVuYXV0aG9yaXplZCA9IG9wdHMucmVqZWN0VW5hdXRob3JpemVkO1xuICB0aGlzLmZvcmNlTm9kZSA9IG9wdHMuZm9yY2VOb2RlO1xuXG4gIC8vIHJlc3VsdHMgb2YgUmVhY3ROYXRpdmUgZW52aXJvbm1lbnQgZGV0ZWN0aW9uXG4gIHRoaXMuaXNSZWFjdE5hdGl2ZSA9IG9wdHMuaXNSZWFjdE5hdGl2ZTtcblxuICAvLyBvdGhlciBvcHRpb25zIGZvciBOb2RlLmpzIGNsaWVudFxuICB0aGlzLmV4dHJhSGVhZGVycyA9IG9wdHMuZXh0cmFIZWFkZXJzO1xuICB0aGlzLmxvY2FsQWRkcmVzcyA9IG9wdHMubG9jYWxBZGRyZXNzO1xufVxuXG4vKipcbiAqIE1peCBpbiBgRW1pdHRlcmAuXG4gKi9cblxuRW1pdHRlcihUcmFuc3BvcnQucHJvdG90eXBlKTtcblxuLyoqXG4gKiBFbWl0cyBhbiBlcnJvci5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtUcmFuc3BvcnR9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5UcmFuc3BvcnQucHJvdG90eXBlLm9uRXJyb3IgPSBmdW5jdGlvbiAobXNnLCBkZXNjKSB7XG4gIHZhciBlcnIgPSBuZXcgRXJyb3IobXNnKTtcbiAgZXJyLnR5cGUgPSAnVHJhbnNwb3J0RXJyb3InO1xuICBlcnIuZGVzY3JpcHRpb24gPSBkZXNjO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE9wZW5zIHRoZSB0cmFuc3BvcnQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5UcmFuc3BvcnQucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gIGlmICgnY2xvc2VkJyA9PT0gdGhpcy5yZWFkeVN0YXRlIHx8ICcnID09PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSAnb3BlbmluZyc7XG4gICAgdGhpcy5kb09wZW4oKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbG9zZXMgdGhlIHRyYW5zcG9ydC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5UcmFuc3BvcnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICBpZiAoJ29wZW5pbmcnID09PSB0aGlzLnJlYWR5U3RhdGUgfHwgJ29wZW4nID09PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICB0aGlzLmRvQ2xvc2UoKTtcbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZW5kcyBtdWx0aXBsZSBwYWNrZXRzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHBhY2tldHNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblRyYW5zcG9ydC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChwYWNrZXRzKSB7XG4gIGlmICgnb3BlbicgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgIHRoaXMud3JpdGUocGFja2V0cyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc3BvcnQgbm90IG9wZW4nKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBvcGVuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuVHJhbnNwb3J0LnByb3RvdHlwZS5vbk9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucmVhZHlTdGF0ZSA9ICdvcGVuJztcbiAgdGhpcy53cml0YWJsZSA9IHRydWU7XG4gIHRoaXMuZW1pdCgnb3BlbicpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2l0aCBkYXRhLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5UcmFuc3BvcnQucHJvdG90eXBlLm9uRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHZhciBwYWNrZXQgPSBwYXJzZXIuZGVjb2RlUGFja2V0KGRhdGEsIHRoaXMuc29ja2V0LmJpbmFyeVR5cGUpO1xuICB0aGlzLm9uUGFja2V0KHBhY2tldCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aXRoIGEgZGVjb2RlZCBwYWNrZXQuXG4gKi9cblxuVHJhbnNwb3J0LnByb3RvdHlwZS5vblBhY2tldCA9IGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgdGhpcy5lbWl0KCdwYWNrZXQnLCBwYWNrZXQpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBjbG9zZS5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5UcmFuc3BvcnQucHJvdG90eXBlLm9uQ2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucmVhZHlTdGF0ZSA9ICdjbG9zZWQnO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG59O1xuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIFhNTEh0dHBSZXF1ZXN0ID0gcmVxdWlyZSgnLi94bWxodHRwcmVxdWVzdCcpO1xudmFyIFhIUiA9IHJlcXVpcmUoJy4vcG9sbGluZy14aHInKTtcbnZhciBKU09OUCA9IHJlcXVpcmUoJy4vcG9sbGluZy1qc29ucCcpO1xudmFyIHdlYnNvY2tldCA9IHJlcXVpcmUoJy4vd2Vic29ja2V0Jyk7XG5cbi8qKlxuICogRXhwb3J0IHRyYW5zcG9ydHMuXG4gKi9cblxuZXhwb3J0cy5wb2xsaW5nID0gcG9sbGluZztcbmV4cG9ydHMud2Vic29ja2V0ID0gd2Vic29ja2V0O1xuXG4vKipcbiAqIFBvbGxpbmcgdHJhbnNwb3J0IHBvbHltb3JwaGljIGNvbnN0cnVjdG9yLlxuICogRGVjaWRlcyBvbiB4aHIgdnMganNvbnAgYmFzZWQgb24gZmVhdHVyZSBkZXRlY3Rpb24uXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcG9sbGluZyAob3B0cykge1xuICB2YXIgeGhyO1xuICB2YXIgeGQgPSBmYWxzZTtcbiAgdmFyIHhzID0gZmFsc2U7XG4gIHZhciBqc29ucCA9IGZhbHNlICE9PSBvcHRzLmpzb25wO1xuXG4gIGlmICh0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIGlzU1NMID0gJ2h0dHBzOicgPT09IGxvY2F0aW9uLnByb3RvY29sO1xuICAgIHZhciBwb3J0ID0gbG9jYXRpb24ucG9ydDtcblxuICAgIC8vIHNvbWUgdXNlciBhZ2VudHMgaGF2ZSBlbXB0eSBgbG9jYXRpb24ucG9ydGBcbiAgICBpZiAoIXBvcnQpIHtcbiAgICAgIHBvcnQgPSBpc1NTTCA/IDQ0MyA6IDgwO1xuICAgIH1cblxuICAgIHhkID0gb3B0cy5ob3N0bmFtZSAhPT0gbG9jYXRpb24uaG9zdG5hbWUgfHwgcG9ydCAhPT0gb3B0cy5wb3J0O1xuICAgIHhzID0gb3B0cy5zZWN1cmUgIT09IGlzU1NMO1xuICB9XG5cbiAgb3B0cy54ZG9tYWluID0geGQ7XG4gIG9wdHMueHNjaGVtZSA9IHhzO1xuICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Qob3B0cyk7XG5cbiAgaWYgKCdvcGVuJyBpbiB4aHIgJiYgIW9wdHMuZm9yY2VKU09OUCkge1xuICAgIHJldHVybiBuZXcgWEhSKG9wdHMpO1xuICB9IGVsc2Uge1xuICAgIGlmICghanNvbnApIHRocm93IG5ldyBFcnJvcignSlNPTlAgZGlzYWJsZWQnKTtcbiAgICByZXR1cm4gbmV3IEpTT05QKG9wdHMpO1xuICB9XG59XG4iLCIvKipcbiAqIE1vZHVsZSByZXF1aXJlbWVudHMuXG4gKi9cblxudmFyIFBvbGxpbmcgPSByZXF1aXJlKCcuL3BvbGxpbmcnKTtcbnZhciBpbmhlcml0ID0gcmVxdWlyZSgnY29tcG9uZW50LWluaGVyaXQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vZ2xvYmFsVGhpcycpO1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gSlNPTlBQb2xsaW5nO1xuXG4vKipcbiAqIENhY2hlZCByZWd1bGFyIGV4cHJlc3Npb25zLlxuICovXG5cbnZhciByTmV3bGluZSA9IC9cXG4vZztcbnZhciByRXNjYXBlZE5ld2xpbmUgPSAvXFxcXG4vZztcblxuLyoqXG4gKiBHbG9iYWwgSlNPTlAgY2FsbGJhY2tzLlxuICovXG5cbnZhciBjYWxsYmFja3M7XG5cbi8qKlxuICogTm9vcC5cbiAqL1xuXG5mdW5jdGlvbiBlbXB0eSAoKSB7IH1cblxuLyoqXG4gKiBKU09OUCBQb2xsaW5nIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBKU09OUFBvbGxpbmcgKG9wdHMpIHtcbiAgUG9sbGluZy5jYWxsKHRoaXMsIG9wdHMpO1xuXG4gIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5IHx8IHt9O1xuXG4gIC8vIGRlZmluZSBnbG9iYWwgY2FsbGJhY2tzIGFycmF5IGlmIG5vdCBwcmVzZW50XG4gIC8vIHdlIGRvIHRoaXMgaGVyZSAobGF6aWx5KSB0byBhdm9pZCB1bm5lZWRlZCBnbG9iYWwgcG9sbHV0aW9uXG4gIGlmICghY2FsbGJhY2tzKSB7XG4gICAgLy8gd2UgbmVlZCB0byBjb25zaWRlciBtdWx0aXBsZSBlbmdpbmVzIGluIHRoZSBzYW1lIHBhZ2VcbiAgICBjYWxsYmFja3MgPSBnbG9iYWxUaGlzLl9fX2VpbyA9IChnbG9iYWxUaGlzLl9fX2VpbyB8fCBbXSk7XG4gIH1cblxuICAvLyBjYWxsYmFjayBpZGVudGlmaWVyXG4gIHRoaXMuaW5kZXggPSBjYWxsYmFja3MubGVuZ3RoO1xuXG4gIC8vIGFkZCBjYWxsYmFjayB0byBqc29ucCBnbG9iYWxcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBjYWxsYmFja3MucHVzaChmdW5jdGlvbiAobXNnKSB7XG4gICAgc2VsZi5vbkRhdGEobXNnKTtcbiAgfSk7XG5cbiAgLy8gYXBwZW5kIHRvIHF1ZXJ5IHN0cmluZ1xuICB0aGlzLnF1ZXJ5LmogPSB0aGlzLmluZGV4O1xuXG4gIC8vIHByZXZlbnQgc3B1cmlvdXMgZXJyb3JzIGZyb20gYmVpbmcgZW1pdHRlZCB3aGVuIHRoZSB3aW5kb3cgaXMgdW5sb2FkZWRcbiAgaWYgKHR5cGVvZiBhZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbGYuc2NyaXB0KSBzZWxmLnNjcmlwdC5vbmVycm9yID0gZW1wdHk7XG4gICAgfSwgZmFsc2UpO1xuICB9XG59XG5cbi8qKlxuICogSW5oZXJpdHMgZnJvbSBQb2xsaW5nLlxuICovXG5cbmluaGVyaXQoSlNPTlBQb2xsaW5nLCBQb2xsaW5nKTtcblxuLypcbiAqIEpTT05QIG9ubHkgc3VwcG9ydHMgYmluYXJ5IGFzIGJhc2U2NCBlbmNvZGVkIHN0cmluZ3NcbiAqL1xuXG5KU09OUFBvbGxpbmcucHJvdG90eXBlLnN1cHBvcnRzQmluYXJ5ID0gZmFsc2U7XG5cbi8qKlxuICogQ2xvc2VzIHRoZSBzb2NrZXQuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuSlNPTlBQb2xsaW5nLnByb3RvdHlwZS5kb0Nsb3NlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5zY3JpcHQpIHtcbiAgICB0aGlzLnNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc2NyaXB0KTtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gIH1cblxuICBpZiAodGhpcy5mb3JtKSB7XG4gICAgdGhpcy5mb3JtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mb3JtKTtcbiAgICB0aGlzLmZvcm0gPSBudWxsO1xuICAgIHRoaXMuaWZyYW1lID0gbnVsbDtcbiAgfVxuXG4gIFBvbGxpbmcucHJvdG90eXBlLmRvQ2xvc2UuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgcG9sbCBjeWNsZS5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5KU09OUFBvbGxpbmcucHJvdG90eXBlLmRvUG9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cbiAgaWYgKHRoaXMuc2NyaXB0KSB7XG4gICAgdGhpcy5zY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnNjcmlwdCk7XG4gICAgdGhpcy5zY3JpcHQgPSBudWxsO1xuICB9XG5cbiAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgc2NyaXB0LnNyYyA9IHRoaXMudXJpKCk7XG4gIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICBzZWxmLm9uRXJyb3IoJ2pzb25wIHBvbGwgZXJyb3InLCBlKTtcbiAgfTtcblxuICB2YXIgaW5zZXJ0QXQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XG4gIGlmIChpbnNlcnRBdCkge1xuICAgIGluc2VydEF0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNjcmlwdCwgaW5zZXJ0QXQpO1xuICB9IGVsc2Uge1xuICAgIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH1cbiAgdGhpcy5zY3JpcHQgPSBzY3JpcHQ7XG5cbiAgdmFyIGlzVUFnZWNrbyA9ICd1bmRlZmluZWQnICE9PSB0eXBlb2YgbmF2aWdhdG9yICYmIC9nZWNrby9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbiAgaWYgKGlzVUFnZWNrbykge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICAgIH0sIDEwMCk7XG4gIH1cbn07XG5cbi8qKlxuICogV3JpdGVzIHdpdGggYSBoaWRkZW4gaWZyYW1lLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhIHRvIHNlbmRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxlZCB1cG9uIGZsdXNoLlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuSlNPTlBQb2xsaW5nLnByb3RvdHlwZS5kb1dyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGZuKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAoIXRoaXMuZm9ybSkge1xuICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuICAgIHZhciBhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICB2YXIgaWQgPSB0aGlzLmlmcmFtZUlkID0gJ2Vpb19pZnJhbWVfJyArIHRoaXMuaW5kZXg7XG4gICAgdmFyIGlmcmFtZTtcblxuICAgIGZvcm0uY2xhc3NOYW1lID0gJ3NvY2tldGlvJztcbiAgICBmb3JtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBmb3JtLnN0eWxlLnRvcCA9ICctMTAwMHB4JztcbiAgICBmb3JtLnN0eWxlLmxlZnQgPSAnLTEwMDBweCc7XG4gICAgZm9ybS50YXJnZXQgPSBpZDtcbiAgICBmb3JtLm1ldGhvZCA9ICdQT1NUJztcbiAgICBmb3JtLnNldEF0dHJpYnV0ZSgnYWNjZXB0LWNoYXJzZXQnLCAndXRmLTgnKTtcbiAgICBhcmVhLm5hbWUgPSAnZCc7XG4gICAgZm9ybS5hcHBlbmRDaGlsZChhcmVhKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pO1xuXG4gICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB0aGlzLmFyZWEgPSBhcmVhO1xuICB9XG5cbiAgdGhpcy5mb3JtLmFjdGlvbiA9IHRoaXMudXJpKCk7XG5cbiAgZnVuY3Rpb24gY29tcGxldGUgKCkge1xuICAgIGluaXRJZnJhbWUoKTtcbiAgICBmbigpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdElmcmFtZSAoKSB7XG4gICAgaWYgKHNlbGYuaWZyYW1lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxmLmZvcm0ucmVtb3ZlQ2hpbGQoc2VsZi5pZnJhbWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzZWxmLm9uRXJyb3IoJ2pzb25wIHBvbGxpbmcgaWZyYW1lIHJlbW92YWwgZXJyb3InLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gaWU2IGR5bmFtaWMgaWZyYW1lcyB3aXRoIHRhcmdldD1cIlwiIHN1cHBvcnQgKHRoYW5rcyBDaHJpcyBMYW1iYWNoZXIpXG4gICAgICB2YXIgaHRtbCA9ICc8aWZyYW1lIHNyYz1cImphdmFzY3JpcHQ6MFwiIG5hbWU9XCInICsgc2VsZi5pZnJhbWVJZCArICdcIj4nO1xuICAgICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgIGlmcmFtZS5uYW1lID0gc2VsZi5pZnJhbWVJZDtcbiAgICAgIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDowJztcbiAgICB9XG5cbiAgICBpZnJhbWUuaWQgPSBzZWxmLmlmcmFtZUlkO1xuXG4gICAgc2VsZi5mb3JtLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gICAgc2VsZi5pZnJhbWUgPSBpZnJhbWU7XG4gIH1cblxuICBpbml0SWZyYW1lKCk7XG5cbiAgLy8gZXNjYXBlIFxcbiB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY29udmVydGVkIGludG8gXFxyXFxuIGJ5IHNvbWUgVUFzXG4gIC8vIGRvdWJsZSBlc2NhcGluZyBpcyByZXF1aXJlZCBmb3IgZXNjYXBlZCBuZXcgbGluZXMgYmVjYXVzZSB1bmVzY2FwaW5nIG9mIG5ldyBsaW5lcyBjYW4gYmUgZG9uZSBzYWZlbHkgb24gc2VydmVyLXNpZGVcbiAgZGF0YSA9IGRhdGEucmVwbGFjZShyRXNjYXBlZE5ld2xpbmUsICdcXFxcXFxuJyk7XG4gIHRoaXMuYXJlYS52YWx1ZSA9IGRhdGEucmVwbGFjZShyTmV3bGluZSwgJ1xcXFxuJyk7XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmZvcm0uc3VibWl0KCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgaWYgKHRoaXMuaWZyYW1lLmF0dGFjaEV2ZW50KSB7XG4gICAgdGhpcy5pZnJhbWUub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbGYuaWZyYW1lLnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaWZyYW1lLm9ubG9hZCA9IGNvbXBsZXRlO1xuICB9XG59O1xuIiwiLyogZ2xvYmFsIGF0dGFjaEV2ZW50ICovXG5cbi8qKlxuICogTW9kdWxlIHJlcXVpcmVtZW50cy5cbiAqL1xuXG52YXIgWE1MSHR0cFJlcXVlc3QgPSByZXF1aXJlKCcuL3htbGh0dHByZXF1ZXN0Jyk7XG52YXIgUG9sbGluZyA9IHJlcXVpcmUoJy4vcG9sbGluZycpO1xudmFyIEVtaXR0ZXIgPSByZXF1aXJlKCdjb21wb25lbnQtZW1pdHRlcicpO1xudmFyIGluaGVyaXQgPSByZXF1aXJlKCdjb21wb25lbnQtaW5oZXJpdCcpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnZW5naW5lLmlvLWNsaWVudDpwb2xsaW5nLXhocicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9nbG9iYWxUaGlzJyk7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBYSFI7XG5tb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gUmVxdWVzdDtcblxuLyoqXG4gKiBFbXB0eSBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGVtcHR5ICgpIHt9XG5cbi8qKlxuICogWEhSIFBvbGxpbmcgY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gWEhSIChvcHRzKSB7XG4gIFBvbGxpbmcuY2FsbCh0aGlzLCBvcHRzKTtcbiAgdGhpcy5yZXF1ZXN0VGltZW91dCA9IG9wdHMucmVxdWVzdFRpbWVvdXQ7XG4gIHRoaXMuZXh0cmFIZWFkZXJzID0gb3B0cy5leHRyYUhlYWRlcnM7XG5cbiAgaWYgKHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgaXNTU0wgPSAnaHR0cHM6JyA9PT0gbG9jYXRpb24ucHJvdG9jb2w7XG4gICAgdmFyIHBvcnQgPSBsb2NhdGlvbi5wb3J0O1xuXG4gICAgLy8gc29tZSB1c2VyIGFnZW50cyBoYXZlIGVtcHR5IGBsb2NhdGlvbi5wb3J0YFxuICAgIGlmICghcG9ydCkge1xuICAgICAgcG9ydCA9IGlzU1NMID8gNDQzIDogODA7XG4gICAgfVxuXG4gICAgdGhpcy54ZCA9ICh0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnICYmIG9wdHMuaG9zdG5hbWUgIT09IGxvY2F0aW9uLmhvc3RuYW1lKSB8fFxuICAgICAgcG9ydCAhPT0gb3B0cy5wb3J0O1xuICAgIHRoaXMueHMgPSBvcHRzLnNlY3VyZSAhPT0gaXNTU0w7XG4gIH1cbn1cblxuLyoqXG4gKiBJbmhlcml0cyBmcm9tIFBvbGxpbmcuXG4gKi9cblxuaW5oZXJpdChYSFIsIFBvbGxpbmcpO1xuXG4vKipcbiAqIFhIUiBzdXBwb3J0cyBiaW5hcnlcbiAqL1xuXG5YSFIucHJvdG90eXBlLnN1cHBvcnRzQmluYXJ5ID0gdHJ1ZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5YSFIucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiAob3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgb3B0cy51cmkgPSB0aGlzLnVyaSgpO1xuICBvcHRzLnhkID0gdGhpcy54ZDtcbiAgb3B0cy54cyA9IHRoaXMueHM7XG4gIG9wdHMuYWdlbnQgPSB0aGlzLmFnZW50IHx8IGZhbHNlO1xuICBvcHRzLnN1cHBvcnRzQmluYXJ5ID0gdGhpcy5zdXBwb3J0c0JpbmFyeTtcbiAgb3B0cy5lbmFibGVzWERSID0gdGhpcy5lbmFibGVzWERSO1xuICBvcHRzLndpdGhDcmVkZW50aWFscyA9IHRoaXMud2l0aENyZWRlbnRpYWxzO1xuXG4gIC8vIFNTTCBvcHRpb25zIGZvciBOb2RlLmpzIGNsaWVudFxuICBvcHRzLnBmeCA9IHRoaXMucGZ4O1xuICBvcHRzLmtleSA9IHRoaXMua2V5O1xuICBvcHRzLnBhc3NwaHJhc2UgPSB0aGlzLnBhc3NwaHJhc2U7XG4gIG9wdHMuY2VydCA9IHRoaXMuY2VydDtcbiAgb3B0cy5jYSA9IHRoaXMuY2E7XG4gIG9wdHMuY2lwaGVycyA9IHRoaXMuY2lwaGVycztcbiAgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPSB0aGlzLnJlamVjdFVuYXV0aG9yaXplZDtcbiAgb3B0cy5yZXF1ZXN0VGltZW91dCA9IHRoaXMucmVxdWVzdFRpbWVvdXQ7XG5cbiAgLy8gb3RoZXIgb3B0aW9ucyBmb3IgTm9kZS5qcyBjbGllbnRcbiAgb3B0cy5leHRyYUhlYWRlcnMgPSB0aGlzLmV4dHJhSGVhZGVycztcblxuICByZXR1cm4gbmV3IFJlcXVlc3Qob3B0cyk7XG59O1xuXG4vKipcbiAqIFNlbmRzIGRhdGEuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGEgdG8gc2VuZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxlZCB1cG9uIGZsdXNoLlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuWEhSLnByb3RvdHlwZS5kb1dyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGZuKSB7XG4gIHZhciBpc0JpbmFyeSA9IHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJyAmJiBkYXRhICE9PSB1bmRlZmluZWQ7XG4gIHZhciByZXEgPSB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6ICdQT1NUJywgZGF0YTogZGF0YSwgaXNCaW5hcnk6IGlzQmluYXJ5IH0pO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHJlcS5vbignc3VjY2VzcycsIGZuKTtcbiAgcmVxLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBzZWxmLm9uRXJyb3IoJ3hociBwb3N0IGVycm9yJywgZXJyKTtcbiAgfSk7XG4gIHRoaXMuc2VuZFhociA9IHJlcTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgcG9sbCBjeWNsZS5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5YSFIucHJvdG90eXBlLmRvUG9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgZGVidWcoJ3hociBwb2xsJyk7XG4gIHZhciByZXEgPSB0aGlzLnJlcXVlc3QoKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXEub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHNlbGYub25EYXRhKGRhdGEpO1xuICB9KTtcbiAgcmVxLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBzZWxmLm9uRXJyb3IoJ3hociBwb2xsIGVycm9yJywgZXJyKTtcbiAgfSk7XG4gIHRoaXMucG9sbFhociA9IHJlcTtcbn07XG5cbi8qKlxuICogUmVxdWVzdCBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3QgKG9wdHMpIHtcbiAgdGhpcy5tZXRob2QgPSBvcHRzLm1ldGhvZCB8fCAnR0VUJztcbiAgdGhpcy51cmkgPSBvcHRzLnVyaTtcbiAgdGhpcy54ZCA9ICEhb3B0cy54ZDtcbiAgdGhpcy54cyA9ICEhb3B0cy54cztcbiAgdGhpcy5hc3luYyA9IGZhbHNlICE9PSBvcHRzLmFzeW5jO1xuICB0aGlzLmRhdGEgPSB1bmRlZmluZWQgIT09IG9wdHMuZGF0YSA/IG9wdHMuZGF0YSA6IG51bGw7XG4gIHRoaXMuYWdlbnQgPSBvcHRzLmFnZW50O1xuICB0aGlzLmlzQmluYXJ5ID0gb3B0cy5pc0JpbmFyeTtcbiAgdGhpcy5zdXBwb3J0c0JpbmFyeSA9IG9wdHMuc3VwcG9ydHNCaW5hcnk7XG4gIHRoaXMuZW5hYmxlc1hEUiA9IG9wdHMuZW5hYmxlc1hEUjtcbiAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBvcHRzLndpdGhDcmVkZW50aWFscztcbiAgdGhpcy5yZXF1ZXN0VGltZW91dCA9IG9wdHMucmVxdWVzdFRpbWVvdXQ7XG5cbiAgLy8gU1NMIG9wdGlvbnMgZm9yIE5vZGUuanMgY2xpZW50XG4gIHRoaXMucGZ4ID0gb3B0cy5wZng7XG4gIHRoaXMua2V5ID0gb3B0cy5rZXk7XG4gIHRoaXMucGFzc3BocmFzZSA9IG9wdHMucGFzc3BocmFzZTtcbiAgdGhpcy5jZXJ0ID0gb3B0cy5jZXJ0O1xuICB0aGlzLmNhID0gb3B0cy5jYTtcbiAgdGhpcy5jaXBoZXJzID0gb3B0cy5jaXBoZXJzO1xuICB0aGlzLnJlamVjdFVuYXV0aG9yaXplZCA9IG9wdHMucmVqZWN0VW5hdXRob3JpemVkO1xuXG4gIC8vIG90aGVyIG9wdGlvbnMgZm9yIE5vZGUuanMgY2xpZW50XG4gIHRoaXMuZXh0cmFIZWFkZXJzID0gb3B0cy5leHRyYUhlYWRlcnM7XG5cbiAgdGhpcy5jcmVhdGUoKTtcbn1cblxuLyoqXG4gKiBNaXggaW4gYEVtaXR0ZXJgLlxuICovXG5cbkVtaXR0ZXIoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFhIUiBvYmplY3QgYW5kIHNlbmRzIHRoZSByZXF1ZXN0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdHMgPSB7IGFnZW50OiB0aGlzLmFnZW50LCB4ZG9tYWluOiB0aGlzLnhkLCB4c2NoZW1lOiB0aGlzLnhzLCBlbmFibGVzWERSOiB0aGlzLmVuYWJsZXNYRFIgfTtcblxuICAvLyBTU0wgb3B0aW9ucyBmb3IgTm9kZS5qcyBjbGllbnRcbiAgb3B0cy5wZnggPSB0aGlzLnBmeDtcbiAgb3B0cy5rZXkgPSB0aGlzLmtleTtcbiAgb3B0cy5wYXNzcGhyYXNlID0gdGhpcy5wYXNzcGhyYXNlO1xuICBvcHRzLmNlcnQgPSB0aGlzLmNlcnQ7XG4gIG9wdHMuY2EgPSB0aGlzLmNhO1xuICBvcHRzLmNpcGhlcnMgPSB0aGlzLmNpcGhlcnM7XG4gIG9wdHMucmVqZWN0VW5hdXRob3JpemVkID0gdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQ7XG5cbiAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KG9wdHMpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdHJ5IHtcbiAgICBkZWJ1ZygneGhyIG9wZW4gJXM6ICVzJywgdGhpcy5tZXRob2QsIHRoaXMudXJpKTtcbiAgICB4aHIub3Blbih0aGlzLm1ldGhvZCwgdGhpcy51cmksIHRoaXMuYXN5bmMpO1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5leHRyYUhlYWRlcnMpIHtcbiAgICAgICAgeGhyLnNldERpc2FibGVIZWFkZXJDaGVjayAmJiB4aHIuc2V0RGlzYWJsZUhlYWRlckNoZWNrKHRydWUpO1xuICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuZXh0cmFIZWFkZXJzKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZXh0cmFIZWFkZXJzLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihpLCB0aGlzLmV4dHJhSGVhZGVyc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge31cblxuICAgIGlmICgnUE9TVCcgPT09IHRoaXMubWV0aG9kKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy5pc0JpbmFyeSkge1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICcqLyonKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgLy8gaWU2IGNoZWNrXG4gICAgaWYgKCd3aXRoQ3JlZGVudGlhbHMnIGluIHhocikge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRoaXMud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlcXVlc3RUaW1lb3V0KSB7XG4gICAgICB4aHIudGltZW91dCA9IHRoaXMucmVxdWVzdFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzWERSKCkpIHtcbiAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYub25Mb2FkKCk7XG4gICAgICB9O1xuICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYub25FcnJvcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gMikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0NvbnRlbnQtVHlwZScpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc3VwcG9ydHNCaW5hcnkgJiYgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtOyBjaGFyc2V0PVVURi04Jykge1xuICAgICAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG4gICAgICAgIGlmICg0ICE9PSB4aHIucmVhZHlTdGF0ZSkgcmV0dXJuO1xuICAgICAgICBpZiAoMjAwID09PSB4aHIuc3RhdHVzIHx8IDEyMjMgPT09IHhoci5zdGF0dXMpIHtcbiAgICAgICAgICBzZWxmLm9uTG9hZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgYGVycm9yYCBldmVudCBoYW5kbGVyIHRoYXQncyB1c2VyLXNldFxuICAgICAgICAgIC8vIGRvZXMgbm90IHRocm93IGluIHRoZSBzYW1lIHRpY2sgYW5kIGdldHMgY2F1Z2h0IGhlcmVcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYub25FcnJvcih0eXBlb2YgeGhyLnN0YXR1cyA9PT0gJ251bWJlcicgPyB4aHIuc3RhdHVzIDogMCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgZGVidWcoJ3hociBkYXRhICVzJywgdGhpcy5kYXRhKTtcbiAgICB4aHIuc2VuZCh0aGlzLmRhdGEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gTmVlZCB0byBkZWZlciBzaW5jZSAuY3JlYXRlKCkgaXMgY2FsbGVkIGRpcmVjdGx5IGZocm9tIHRoZSBjb25zdHJ1Y3RvclxuICAgIC8vIGFuZCB0aHVzIHRoZSAnZXJyb3InIGV2ZW50IGNhbiBvbmx5IGJlIG9ubHkgYm91bmQgKmFmdGVyKiB0aGlzIGV4Y2VwdGlvblxuICAgIC8vIG9jY3Vycy4gIFRoZXJlZm9yZSwgYWxzbywgd2UgY2Fubm90IHRocm93IGhlcmUgYXQgYWxsLlxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5vbkVycm9yKGUpO1xuICAgIH0sIDApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5pbmRleCA9IFJlcXVlc3QucmVxdWVzdHNDb3VudCsrO1xuICAgIFJlcXVlc3QucmVxdWVzdHNbdGhpcy5pbmRleF0gPSB0aGlzO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIHN1Y2Nlc3NmdWwgcmVzcG9uc2UuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUub25TdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVtaXQoJ3N1Y2Nlc3MnKTtcbiAgdGhpcy5jbGVhbnVwKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiB3ZSBoYXZlIGRhdGEuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5lbWl0KCdkYXRhJywgZGF0YSk7XG4gIHRoaXMub25TdWNjZXNzKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIGVycm9yLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLm9uRXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB0aGlzLmNsZWFudXAodHJ1ZSk7XG59O1xuXG4vKipcbiAqIENsZWFucyB1cCBob3VzZS5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbGVhbnVwID0gZnVuY3Rpb24gKGZyb21FcnJvcikge1xuICBpZiAoJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiB0aGlzLnhociB8fCBudWxsID09PSB0aGlzLnhocikge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyB4bWxodHRwcmVxdWVzdFxuICBpZiAodGhpcy5oYXNYRFIoKSkge1xuICAgIHRoaXMueGhyLm9ubG9hZCA9IHRoaXMueGhyLm9uZXJyb3IgPSBlbXB0eTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTtcbiAgfVxuXG4gIGlmIChmcm9tRXJyb3IpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkZWxldGUgUmVxdWVzdC5yZXF1ZXN0c1t0aGlzLmluZGV4XTtcbiAgfVxuXG4gIHRoaXMueGhyID0gbnVsbDtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gbG9hZC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5vbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBkYXRhO1xuICB0cnkge1xuICAgIHZhciBjb250ZW50VHlwZTtcbiAgICB0cnkge1xuICAgICAgY29udGVudFR5cGUgPSB0aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcignQ29udGVudC1UeXBlJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICBpZiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtOyBjaGFyc2V0PVVURi04Jykge1xuICAgICAgZGF0YSA9IHRoaXMueGhyLnJlc3BvbnNlIHx8IHRoaXMueGhyLnJlc3BvbnNlVGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IHRoaXMueGhyLnJlc3BvbnNlVGV4dDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aGlzLm9uRXJyb3IoZSk7XG4gIH1cbiAgaWYgKG51bGwgIT0gZGF0YSkge1xuICAgIHRoaXMub25EYXRhKGRhdGEpO1xuICB9XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGl0IGhhcyBYRG9tYWluUmVxdWVzdC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5oYXNYRFIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0eXBlb2YgWERvbWFpblJlcXVlc3QgIT09ICd1bmRlZmluZWQnICYmICF0aGlzLnhzICYmIHRoaXMuZW5hYmxlc1hEUjtcbn07XG5cbi8qKlxuICogQWJvcnRzIHRoZSByZXF1ZXN0LlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2xlYW51cCgpO1xufTtcblxuLyoqXG4gKiBBYm9ydHMgcGVuZGluZyByZXF1ZXN0cyB3aGVuIHVubG9hZGluZyB0aGUgd2luZG93LiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50XG4gKiBtZW1vcnkgbGVha3MgKGUuZy4gd2hlbiB1c2luZyBJRSkgYW5kIHRvIGVuc3VyZSB0aGF0IG5vIHNwdXJpb3VzIGVycm9yIGlzXG4gKiBlbWl0dGVkLlxuICovXG5cblJlcXVlc3QucmVxdWVzdHNDb3VudCA9IDA7XG5SZXF1ZXN0LnJlcXVlc3RzID0ge307XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gIGlmICh0eXBlb2YgYXR0YWNoRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhdHRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxvYWRIYW5kbGVyKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciB0ZXJtaW5hdGlvbkV2ZW50ID0gJ29ucGFnZWhpZGUnIGluIGdsb2JhbFRoaXMgPyAncGFnZWhpZGUnIDogJ3VubG9hZCc7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcih0ZXJtaW5hdGlvbkV2ZW50LCB1bmxvYWRIYW5kbGVyLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5sb2FkSGFuZGxlciAoKSB7XG4gIGZvciAodmFyIGkgaW4gUmVxdWVzdC5yZXF1ZXN0cykge1xuICAgIGlmIChSZXF1ZXN0LnJlcXVlc3RzLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICBSZXF1ZXN0LnJlcXVlc3RzW2ldLmFib3J0KCk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIFRyYW5zcG9ydCA9IHJlcXVpcmUoJy4uL3RyYW5zcG9ydCcpO1xudmFyIHBhcnNlcXMgPSByZXF1aXJlKCdwYXJzZXFzJyk7XG52YXIgcGFyc2VyID0gcmVxdWlyZSgnZW5naW5lLmlvLXBhcnNlcicpO1xudmFyIGluaGVyaXQgPSByZXF1aXJlKCdjb21wb25lbnQtaW5oZXJpdCcpO1xudmFyIHllYXN0ID0gcmVxdWlyZSgneWVhc3QnKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ2VuZ2luZS5pby1jbGllbnQ6cG9sbGluZycpO1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gUG9sbGluZztcblxuLyoqXG4gKiBJcyBYSFIyIHN1cHBvcnRlZD9cbiAqL1xuXG52YXIgaGFzWEhSMiA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBYTUxIdHRwUmVxdWVzdCA9IHJlcXVpcmUoJy4veG1saHR0cHJlcXVlc3QnKTtcbiAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCh7IHhkb21haW46IGZhbHNlIH0pO1xuICByZXR1cm4gbnVsbCAhPSB4aHIucmVzcG9uc2VUeXBlO1xufSkoKTtcblxuLyoqXG4gKiBQb2xsaW5nIGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gUG9sbGluZyAob3B0cykge1xuICB2YXIgZm9yY2VCYXNlNjQgPSAob3B0cyAmJiBvcHRzLmZvcmNlQmFzZTY0KTtcbiAgaWYgKCFoYXNYSFIyIHx8IGZvcmNlQmFzZTY0KSB7XG4gICAgdGhpcy5zdXBwb3J0c0JpbmFyeSA9IGZhbHNlO1xuICB9XG4gIFRyYW5zcG9ydC5jYWxsKHRoaXMsIG9wdHMpO1xufVxuXG4vKipcbiAqIEluaGVyaXRzIGZyb20gVHJhbnNwb3J0LlxuICovXG5cbmluaGVyaXQoUG9sbGluZywgVHJhbnNwb3J0KTtcblxuLyoqXG4gKiBUcmFuc3BvcnQgbmFtZS5cbiAqL1xuXG5Qb2xsaW5nLnByb3RvdHlwZS5uYW1lID0gJ3BvbGxpbmcnO1xuXG4vKipcbiAqIE9wZW5zIHRoZSBzb2NrZXQgKHRyaWdnZXJzIHBvbGxpbmcpLiBXZSB3cml0ZSBhIFBJTkcgbWVzc2FnZSB0byBkZXRlcm1pbmVcbiAqIHdoZW4gdGhlIHRyYW5zcG9ydCBpcyBvcGVuLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblBvbGxpbmcucHJvdG90eXBlLmRvT3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5wb2xsKCk7XG59O1xuXG4vKipcbiAqIFBhdXNlcyBwb2xsaW5nLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIHVwb24gYnVmZmVycyBhcmUgZmx1c2hlZCBhbmQgdHJhbnNwb3J0IGlzIHBhdXNlZFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUG9sbGluZy5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAob25QYXVzZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5yZWFkeVN0YXRlID0gJ3BhdXNpbmcnO1xuXG4gIGZ1bmN0aW9uIHBhdXNlICgpIHtcbiAgICBkZWJ1ZygncGF1c2VkJyk7XG4gICAgc2VsZi5yZWFkeVN0YXRlID0gJ3BhdXNlZCc7XG4gICAgb25QYXVzZSgpO1xuICB9XG5cbiAgaWYgKHRoaXMucG9sbGluZyB8fCAhdGhpcy53cml0YWJsZSkge1xuICAgIHZhciB0b3RhbCA9IDA7XG5cbiAgICBpZiAodGhpcy5wb2xsaW5nKSB7XG4gICAgICBkZWJ1Zygnd2UgYXJlIGN1cnJlbnRseSBwb2xsaW5nIC0gd2FpdGluZyB0byBwYXVzZScpO1xuICAgICAgdG90YWwrKztcbiAgICAgIHRoaXMub25jZSgncG9sbENvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1ZygncHJlLXBhdXNlIHBvbGxpbmcgY29tcGxldGUnKTtcbiAgICAgICAgLS10b3RhbCB8fCBwYXVzZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndyaXRhYmxlKSB7XG4gICAgICBkZWJ1Zygnd2UgYXJlIGN1cnJlbnRseSB3cml0aW5nIC0gd2FpdGluZyB0byBwYXVzZScpO1xuICAgICAgdG90YWwrKztcbiAgICAgIHRoaXMub25jZSgnZHJhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdwcmUtcGF1c2Ugd3JpdGluZyBjb21wbGV0ZScpO1xuICAgICAgICAtLXRvdGFsIHx8IHBhdXNlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGF1c2UoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTdGFydHMgcG9sbGluZyBjeWNsZS5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblBvbGxpbmcucHJvdG90eXBlLnBvbGwgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdwb2xsaW5nJyk7XG4gIHRoaXMucG9sbGluZyA9IHRydWU7XG4gIHRoaXMuZG9Qb2xsKCk7XG4gIHRoaXMuZW1pdCgncG9sbCcpO1xufTtcblxuLyoqXG4gKiBPdmVybG9hZHMgb25EYXRhIHRvIGRldGVjdCBwYXlsb2Fkcy5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Qb2xsaW5nLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGRlYnVnKCdwb2xsaW5nIGdvdCBkYXRhICVzJywgZGF0YSk7XG4gIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIChwYWNrZXQsIGluZGV4LCB0b3RhbCkge1xuICAgIC8vIGlmIGl0cyB0aGUgZmlyc3QgbWVzc2FnZSB3ZSBjb25zaWRlciB0aGUgdHJhbnNwb3J0IG9wZW5cbiAgICBpZiAoJ29wZW5pbmcnID09PSBzZWxmLnJlYWR5U3RhdGUgJiYgcGFja2V0LnR5cGUgPT09ICdvcGVuJykge1xuICAgICAgc2VsZi5vbk9wZW4oKTtcbiAgICB9XG5cbiAgICAvLyBpZiBpdHMgYSBjbG9zZSBwYWNrZXQsIHdlIGNsb3NlIHRoZSBvbmdvaW5nIHJlcXVlc3RzXG4gICAgaWYgKCdjbG9zZScgPT09IHBhY2tldC50eXBlKSB7XG4gICAgICBzZWxmLm9uQ2xvc2UoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UgYnlwYXNzIG9uRGF0YSBhbmQgaGFuZGxlIHRoZSBtZXNzYWdlXG4gICAgc2VsZi5vblBhY2tldChwYWNrZXQpO1xuICB9O1xuXG4gIC8vIGRlY29kZSBwYXlsb2FkXG4gIHBhcnNlci5kZWNvZGVQYXlsb2FkKGRhdGEsIHRoaXMuc29ja2V0LmJpbmFyeVR5cGUsIGNhbGxiYWNrKTtcblxuICAvLyBpZiBhbiBldmVudCBkaWQgbm90IHRyaWdnZXIgY2xvc2luZ1xuICBpZiAoJ2Nsb3NlZCcgIT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgIC8vIGlmIHdlIGdvdCBkYXRhIHdlJ3JlIG5vdCBwb2xsaW5nXG4gICAgdGhpcy5wb2xsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdwb2xsQ29tcGxldGUnKTtcblxuICAgIGlmICgnb3BlbicgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgICAgdGhpcy5wb2xsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdpZ25vcmluZyBwb2xsIC0gdHJhbnNwb3J0IHN0YXRlIFwiJXNcIicsIHRoaXMucmVhZHlTdGF0ZSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEZvciBwb2xsaW5nLCBzZW5kIGEgY2xvc2UgcGFja2V0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblBvbGxpbmcucHJvdG90eXBlLmRvQ2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmdW5jdGlvbiBjbG9zZSAoKSB7XG4gICAgZGVidWcoJ3dyaXRpbmcgY2xvc2UgcGFja2V0Jyk7XG4gICAgc2VsZi53cml0ZShbeyB0eXBlOiAnY2xvc2UnIH1dKTtcbiAgfVxuXG4gIGlmICgnb3BlbicgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgIGRlYnVnKCd0cmFuc3BvcnQgb3BlbiAtIGNsb3NpbmcnKTtcbiAgICBjbG9zZSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIGluIGNhc2Ugd2UncmUgdHJ5aW5nIHRvIGNsb3NlIHdoaWxlXG4gICAgLy8gaGFuZHNoYWtpbmcgaXMgaW4gcHJvZ3Jlc3MgKEdILTE2NClcbiAgICBkZWJ1ZygndHJhbnNwb3J0IG5vdCBvcGVuIC0gZGVmZXJyaW5nIGNsb3NlJyk7XG4gICAgdGhpcy5vbmNlKCdvcGVuJywgY2xvc2UpO1xuICB9XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHBhY2tldHMgcGF5bG9hZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIHBhY2tldHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRyYWluIGNhbGxiYWNrXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Qb2xsaW5nLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChwYWNrZXRzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB2YXIgY2FsbGJhY2tmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBzZWxmLmVtaXQoJ2RyYWluJyk7XG4gIH07XG5cbiAgcGFyc2VyLmVuY29kZVBheWxvYWQocGFja2V0cywgdGhpcy5zdXBwb3J0c0JpbmFyeSwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBzZWxmLmRvV3JpdGUoZGF0YSwgY2FsbGJhY2tmbik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdXJpIGZvciBjb25uZWN0aW9uLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblBvbGxpbmcucHJvdG90eXBlLnVyaSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB7fTtcbiAgdmFyIHNjaGVtYSA9IHRoaXMuc2VjdXJlID8gJ2h0dHBzJyA6ICdodHRwJztcbiAgdmFyIHBvcnQgPSAnJztcblxuICAvLyBjYWNoZSBidXN0aW5nIGlzIGZvcmNlZFxuICBpZiAoZmFsc2UgIT09IHRoaXMudGltZXN0YW1wUmVxdWVzdHMpIHtcbiAgICBxdWVyeVt0aGlzLnRpbWVzdGFtcFBhcmFtXSA9IHllYXN0KCk7XG4gIH1cblxuICBpZiAoIXRoaXMuc3VwcG9ydHNCaW5hcnkgJiYgIXF1ZXJ5LnNpZCkge1xuICAgIHF1ZXJ5LmI2NCA9IDE7XG4gIH1cblxuICBxdWVyeSA9IHBhcnNlcXMuZW5jb2RlKHF1ZXJ5KTtcblxuICAvLyBhdm9pZCBwb3J0IGlmIGRlZmF1bHQgZm9yIHNjaGVtYVxuICBpZiAodGhpcy5wb3J0ICYmICgoJ2h0dHBzJyA9PT0gc2NoZW1hICYmIE51bWJlcih0aGlzLnBvcnQpICE9PSA0NDMpIHx8XG4gICAgICgnaHR0cCcgPT09IHNjaGVtYSAmJiBOdW1iZXIodGhpcy5wb3J0KSAhPT0gODApKSkge1xuICAgIHBvcnQgPSAnOicgKyB0aGlzLnBvcnQ7XG4gIH1cblxuICAvLyBwcmVwZW5kID8gdG8gcXVlcnlcbiAgaWYgKHF1ZXJ5Lmxlbmd0aCkge1xuICAgIHF1ZXJ5ID0gJz8nICsgcXVlcnk7XG4gIH1cblxuICB2YXIgaXB2NiA9IHRoaXMuaG9zdG5hbWUuaW5kZXhPZignOicpICE9PSAtMTtcbiAgcmV0dXJuIHNjaGVtYSArICc6Ly8nICsgKGlwdjYgPyAnWycgKyB0aGlzLmhvc3RuYW1lICsgJ10nIDogdGhpcy5ob3N0bmFtZSkgKyBwb3J0ICsgdGhpcy5wYXRoICsgcXVlcnk7XG59O1xuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBUcmFuc3BvcnQgPSByZXF1aXJlKCcuLi90cmFuc3BvcnQnKTtcbnZhciBwYXJzZXIgPSByZXF1aXJlKCdlbmdpbmUuaW8tcGFyc2VyJyk7XG52YXIgcGFyc2VxcyA9IHJlcXVpcmUoJ3BhcnNlcXMnKTtcbnZhciBpbmhlcml0ID0gcmVxdWlyZSgnY29tcG9uZW50LWluaGVyaXQnKTtcbnZhciB5ZWFzdCA9IHJlcXVpcmUoJ3llYXN0Jyk7XG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdlbmdpbmUuaW8tY2xpZW50OndlYnNvY2tldCcpO1xuXG52YXIgQnJvd3NlcldlYlNvY2tldCwgTm9kZVdlYlNvY2tldDtcblxuaWYgKHR5cGVvZiBXZWJTb2NrZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gIEJyb3dzZXJXZWJTb2NrZXQgPSBXZWJTb2NrZXQ7XG59IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICBCcm93c2VyV2ViU29ja2V0ID0gc2VsZi5XZWJTb2NrZXQgfHwgc2VsZi5Nb3pXZWJTb2NrZXQ7XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICB0cnkge1xuICAgIE5vZGVXZWJTb2NrZXQgPSByZXF1aXJlKCd3cycpO1xuICB9IGNhdGNoIChlKSB7IH1cbn1cblxuLyoqXG4gKiBHZXQgZWl0aGVyIHRoZSBgV2ViU29ja2V0YCBvciBgTW96V2ViU29ja2V0YCBnbG9iYWxzXG4gKiBpbiB0aGUgYnJvd3NlciBvciB0cnkgdG8gcmVzb2x2ZSBXZWJTb2NrZXQtY29tcGF0aWJsZVxuICogaW50ZXJmYWNlIGV4cG9zZWQgYnkgYHdzYCBmb3IgTm9kZS1saWtlIGVudmlyb25tZW50LlxuICovXG5cbnZhciBXZWJTb2NrZXRJbXBsID0gQnJvd3NlcldlYlNvY2tldCB8fCBOb2RlV2ViU29ja2V0O1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gV1M7XG5cbi8qKlxuICogV2ViU29ja2V0IHRyYW5zcG9ydCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAYXBpIHtPYmplY3R9IGNvbm5lY3Rpb24gb3B0aW9uc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBXUyAob3B0cykge1xuICB2YXIgZm9yY2VCYXNlNjQgPSAob3B0cyAmJiBvcHRzLmZvcmNlQmFzZTY0KTtcbiAgaWYgKGZvcmNlQmFzZTY0KSB7XG4gICAgdGhpcy5zdXBwb3J0c0JpbmFyeSA9IGZhbHNlO1xuICB9XG4gIHRoaXMucGVyTWVzc2FnZURlZmxhdGUgPSBvcHRzLnBlck1lc3NhZ2VEZWZsYXRlO1xuICB0aGlzLnVzaW5nQnJvd3NlcldlYlNvY2tldCA9IEJyb3dzZXJXZWJTb2NrZXQgJiYgIW9wdHMuZm9yY2VOb2RlO1xuICB0aGlzLnByb3RvY29scyA9IG9wdHMucHJvdG9jb2xzO1xuICBpZiAoIXRoaXMudXNpbmdCcm93c2VyV2ViU29ja2V0KSB7XG4gICAgV2ViU29ja2V0SW1wbCA9IE5vZGVXZWJTb2NrZXQ7XG4gIH1cbiAgVHJhbnNwb3J0LmNhbGwodGhpcywgb3B0cyk7XG59XG5cbi8qKlxuICogSW5oZXJpdHMgZnJvbSBUcmFuc3BvcnQuXG4gKi9cblxuaW5oZXJpdChXUywgVHJhbnNwb3J0KTtcblxuLyoqXG4gKiBUcmFuc3BvcnQgbmFtZS5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbldTLnByb3RvdHlwZS5uYW1lID0gJ3dlYnNvY2tldCc7XG5cbi8qXG4gKiBXZWJTb2NrZXRzIHN1cHBvcnQgYmluYXJ5XG4gKi9cblxuV1MucHJvdG90eXBlLnN1cHBvcnRzQmluYXJ5ID0gdHJ1ZTtcblxuLyoqXG4gKiBPcGVucyBzb2NrZXQuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuV1MucHJvdG90eXBlLmRvT3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmNoZWNrKCkpIHtcbiAgICAvLyBsZXQgcHJvYmUgdGltZW91dFxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB1cmkgPSB0aGlzLnVyaSgpO1xuICB2YXIgcHJvdG9jb2xzID0gdGhpcy5wcm90b2NvbHM7XG5cbiAgdmFyIG9wdHMgPSB7fTtcblxuICBpZiAoIXRoaXMuaXNSZWFjdE5hdGl2ZSkge1xuICAgIG9wdHMuYWdlbnQgPSB0aGlzLmFnZW50O1xuICAgIG9wdHMucGVyTWVzc2FnZURlZmxhdGUgPSB0aGlzLnBlck1lc3NhZ2VEZWZsYXRlO1xuXG4gICAgLy8gU1NMIG9wdGlvbnMgZm9yIE5vZGUuanMgY2xpZW50XG4gICAgb3B0cy5wZnggPSB0aGlzLnBmeDtcbiAgICBvcHRzLmtleSA9IHRoaXMua2V5O1xuICAgIG9wdHMucGFzc3BocmFzZSA9IHRoaXMucGFzc3BocmFzZTtcbiAgICBvcHRzLmNlcnQgPSB0aGlzLmNlcnQ7XG4gICAgb3B0cy5jYSA9IHRoaXMuY2E7XG4gICAgb3B0cy5jaXBoZXJzID0gdGhpcy5jaXBoZXJzO1xuICAgIG9wdHMucmVqZWN0VW5hdXRob3JpemVkID0gdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQ7XG4gIH1cblxuICBpZiAodGhpcy5leHRyYUhlYWRlcnMpIHtcbiAgICBvcHRzLmhlYWRlcnMgPSB0aGlzLmV4dHJhSGVhZGVycztcbiAgfVxuICBpZiAodGhpcy5sb2NhbEFkZHJlc3MpIHtcbiAgICBvcHRzLmxvY2FsQWRkcmVzcyA9IHRoaXMubG9jYWxBZGRyZXNzO1xuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLndzID1cbiAgICAgIHRoaXMudXNpbmdCcm93c2VyV2ViU29ja2V0ICYmICF0aGlzLmlzUmVhY3ROYXRpdmVcbiAgICAgICAgPyBwcm90b2NvbHNcbiAgICAgICAgICA/IG5ldyBXZWJTb2NrZXRJbXBsKHVyaSwgcHJvdG9jb2xzKVxuICAgICAgICAgIDogbmV3IFdlYlNvY2tldEltcGwodXJpKVxuICAgICAgICA6IG5ldyBXZWJTb2NrZXRJbXBsKHVyaSwgcHJvdG9jb2xzLCBvcHRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG5cbiAgaWYgKHRoaXMud3MuYmluYXJ5VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zdXBwb3J0c0JpbmFyeSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMud3Muc3VwcG9ydHMgJiYgdGhpcy53cy5zdXBwb3J0cy5iaW5hcnkpIHtcbiAgICB0aGlzLnN1cHBvcnRzQmluYXJ5ID0gdHJ1ZTtcbiAgICB0aGlzLndzLmJpbmFyeVR5cGUgPSAnbm9kZWJ1ZmZlcic7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53cy5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgfVxuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbn07XG5cbi8qKlxuICogQWRkcyBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIHNvY2tldFxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbldTLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMud3Mub25vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgIHNlbGYub25PcGVuKCk7XG4gIH07XG4gIHRoaXMud3Mub25jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLm9uQ2xvc2UoKTtcbiAgfTtcbiAgdGhpcy53cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICBzZWxmLm9uRGF0YShldi5kYXRhKTtcbiAgfTtcbiAgdGhpcy53cy5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICBzZWxmLm9uRXJyb3IoJ3dlYnNvY2tldCBlcnJvcicsIGUpO1xuICB9O1xufTtcblxuLyoqXG4gKiBXcml0ZXMgZGF0YSB0byBzb2NrZXQuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgb2YgcGFja2V0cy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbldTLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChwYWNrZXRzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuXG4gIC8vIGVuY29kZVBhY2tldCBlZmZpY2llbnQgYXMgaXQgdXNlcyBXUyBmcmFtaW5nXG4gIC8vIG5vIG5lZWQgZm9yIGVuY29kZVBheWxvYWRcbiAgdmFyIHRvdGFsID0gcGFja2V0cy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdG90YWw7IGkgPCBsOyBpKyspIHtcbiAgICAoZnVuY3Rpb24gKHBhY2tldCkge1xuICAgICAgcGFyc2VyLmVuY29kZVBhY2tldChwYWNrZXQsIHNlbGYuc3VwcG9ydHNCaW5hcnksIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICghc2VsZi51c2luZ0Jyb3dzZXJXZWJTb2NrZXQpIHtcbiAgICAgICAgICAvLyBhbHdheXMgY3JlYXRlIGEgbmV3IG9iamVjdCAoR0gtNDM3KVxuICAgICAgICAgIHZhciBvcHRzID0ge307XG4gICAgICAgICAgaWYgKHBhY2tldC5vcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRzLmNvbXByZXNzID0gcGFja2V0Lm9wdGlvbnMuY29tcHJlc3M7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlbGYucGVyTWVzc2FnZURlZmxhdGUpIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSAnc3RyaW5nJyA9PT0gdHlwZW9mIGRhdGEgPyBCdWZmZXIuYnl0ZUxlbmd0aChkYXRhKSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGxlbiA8IHNlbGYucGVyTWVzc2FnZURlZmxhdGUudGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgIG9wdHMuY29tcHJlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb21ldGltZXMgdGhlIHdlYnNvY2tldCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCBidXQgdGhlIGJyb3dzZXIgZGlkbid0XG4gICAgICAgIC8vIGhhdmUgYSBjaGFuY2Ugb2YgaW5mb3JtaW5nIHVzIGFib3V0IGl0IHlldCwgaW4gdGhhdCBjYXNlIHNlbmQgd2lsbFxuICAgICAgICAvLyB0aHJvdyBhbiBlcnJvclxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChzZWxmLnVzaW5nQnJvd3NlcldlYlNvY2tldCkge1xuICAgICAgICAgICAgLy8gVHlwZUVycm9yIGlzIHRocm93biB3aGVuIHBhc3NpbmcgdGhlIHNlY29uZCBhcmd1bWVudCBvbiBTYWZhcmlcbiAgICAgICAgICAgIHNlbGYud3Muc2VuZChkYXRhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZi53cy5zZW5kKGRhdGEsIG9wdHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGRlYnVnKCd3ZWJzb2NrZXQgY2xvc2VkIGJlZm9yZSBvbmNsb3NlIGV2ZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAtLXRvdGFsIHx8IGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pKHBhY2tldHNbaV0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZG9uZSAoKSB7XG4gICAgc2VsZi5lbWl0KCdmbHVzaCcpO1xuXG4gICAgLy8gZmFrZSBkcmFpblxuICAgIC8vIGRlZmVyIHRvIG5leHQgdGljayB0byBhbGxvdyBTb2NrZXQgdG8gY2xlYXIgd3JpdGVCdWZmZXJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYud3JpdGFibGUgPSB0cnVlO1xuICAgICAgc2VsZi5lbWl0KCdkcmFpbicpO1xuICAgIH0sIDApO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIGNsb3NlXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuV1MucHJvdG90eXBlLm9uQ2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIFRyYW5zcG9ydC5wcm90b3R5cGUub25DbG9zZS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBDbG9zZXMgc29ja2V0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbldTLnByb3RvdHlwZS5kb0Nsb3NlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIHRoaXMud3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy53cy5jbG9zZSgpO1xuICB9XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB1cmkgZm9yIGNvbm5lY3Rpb24uXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuV1MucHJvdG90eXBlLnVyaSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB7fTtcbiAgdmFyIHNjaGVtYSA9IHRoaXMuc2VjdXJlID8gJ3dzcycgOiAnd3MnO1xuICB2YXIgcG9ydCA9ICcnO1xuXG4gIC8vIGF2b2lkIHBvcnQgaWYgZGVmYXVsdCBmb3Igc2NoZW1hXG4gIGlmICh0aGlzLnBvcnQgJiYgKCgnd3NzJyA9PT0gc2NoZW1hICYmIE51bWJlcih0aGlzLnBvcnQpICE9PSA0NDMpIHx8XG4gICAgKCd3cycgPT09IHNjaGVtYSAmJiBOdW1iZXIodGhpcy5wb3J0KSAhPT0gODApKSkge1xuICAgIHBvcnQgPSAnOicgKyB0aGlzLnBvcnQ7XG4gIH1cblxuICAvLyBhcHBlbmQgdGltZXN0YW1wIHRvIFVSSVxuICBpZiAodGhpcy50aW1lc3RhbXBSZXF1ZXN0cykge1xuICAgIHF1ZXJ5W3RoaXMudGltZXN0YW1wUGFyYW1dID0geWVhc3QoKTtcbiAgfVxuXG4gIC8vIGNvbW11bmljYXRlIGJpbmFyeSBzdXBwb3J0IGNhcGFiaWxpdGllc1xuICBpZiAoIXRoaXMuc3VwcG9ydHNCaW5hcnkpIHtcbiAgICBxdWVyeS5iNjQgPSAxO1xuICB9XG5cbiAgcXVlcnkgPSBwYXJzZXFzLmVuY29kZShxdWVyeSk7XG5cbiAgLy8gcHJlcGVuZCA/IHRvIHF1ZXJ5XG4gIGlmIChxdWVyeS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9ICc/JyArIHF1ZXJ5O1xuICB9XG5cbiAgdmFyIGlwdjYgPSB0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSAhPT0gLTE7XG4gIHJldHVybiBzY2hlbWEgKyAnOi8vJyArIChpcHY2ID8gJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyA6IHRoaXMuaG9zdG5hbWUpICsgcG9ydCArIHRoaXMucGF0aCArIHF1ZXJ5O1xufTtcblxuLyoqXG4gKiBGZWF0dXJlIGRldGVjdGlvbiBmb3IgV2ViU29ja2V0LlxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHdoZXRoZXIgdGhpcyB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5XUy5wcm90b3R5cGUuY2hlY2sgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhIVdlYlNvY2tldEltcGwgJiYgISgnX19pbml0aWFsaXplJyBpbiBXZWJTb2NrZXRJbXBsICYmIHRoaXMubmFtZSA9PT0gV1MucHJvdG90eXBlLm5hbWUpO1xufTtcbiIsIi8vIGJyb3dzZXIgc2hpbSBmb3IgeG1saHR0cHJlcXVlc3QgbW9kdWxlXG5cbnZhciBoYXNDT1JTID0gcmVxdWlyZSgnaGFzLWNvcnMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vZ2xvYmFsVGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRzKSB7XG4gIHZhciB4ZG9tYWluID0gb3B0cy54ZG9tYWluO1xuXG4gIC8vIHNjaGVtZSBtdXN0IGJlIHNhbWUgd2hlbiB1c2lnbiBYRG9tYWluUmVxdWVzdFxuICAvLyBodHRwOi8vYmxvZ3MubXNkbi5jb20vYi9pZWludGVybmFscy9hcmNoaXZlLzIwMTAvMDUvMTMveGRvbWFpbnJlcXVlc3QtcmVzdHJpY3Rpb25zLWxpbWl0YXRpb25zLWFuZC13b3JrYXJvdW5kcy5hc3B4XG4gIHZhciB4c2NoZW1lID0gb3B0cy54c2NoZW1lO1xuXG4gIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZsb3cgb2Ygbm90IHNlbmRpbmcgY29va2llLCB0aGVyZWZvcmUgaXQgc2hvdWxkIGJlIGRpc2FibGVkIGFzIGEgZGVmYXVsdC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0F1dG9tYXR0aWMvZW5naW5lLmlvLWNsaWVudC9wdWxsLzIxN1xuICB2YXIgZW5hYmxlc1hEUiA9IG9wdHMuZW5hYmxlc1hEUjtcblxuICAvLyBYTUxIdHRwUmVxdWVzdCBjYW4gYmUgZGlzYWJsZWQgb24gSUVcbiAgdHJ5IHtcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAmJiAoIXhkb21haW4gfHwgaGFzQ09SUykpIHtcbiAgICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHsgfVxuXG4gIC8vIFVzZSBYRG9tYWluUmVxdWVzdCBmb3IgSUU4IGlmIGVuYWJsZXNYRFIgaXMgdHJ1ZVxuICAvLyBiZWNhdXNlIGxvYWRpbmcgYmFyIGtlZXBzIGZsYXNoaW5nIHdoZW4gdXNpbmcganNvbnAtcG9sbGluZ1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20veXVqaW9zYWthL3NvY2tlLmlvLWllOC1sb2FkaW5nLWV4YW1wbGVcbiAgdHJ5IHtcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBYRG9tYWluUmVxdWVzdCAmJiAheHNjaGVtZSAmJiBlbmFibGVzWERSKSB7XG4gICAgICByZXR1cm4gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7IH1cblxuICBpZiAoIXhkb21haW4pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBnbG9iYWxUaGlzW1snQWN0aXZlJ10uY29uY2F0KCdPYmplY3QnKS5qb2luKCdYJyldKCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xuICAgIH0gY2F0Y2ggKGUpIHsgfVxuICB9XG59O1xuIiwiLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGVidWcnKTtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSAndW5kZWZpbmVkJyAhPSB0eXBlb2YgY2hyb21lXG4gICAgICAgICAgICAgICAmJiAndW5kZWZpbmVkJyAhPSB0eXBlb2YgY2hyb21lLnN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgID8gY2hyb21lLnN0b3JhZ2UubG9jYWxcbiAgICAgICAgICAgICAgICAgIDogbG9jYWxzdG9yYWdlKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuICAnIzAwMDBDQycsICcjMDAwMEZGJywgJyMwMDMzQ0MnLCAnIzAwMzNGRicsICcjMDA2NkNDJywgJyMwMDY2RkYnLCAnIzAwOTlDQycsXG4gICcjMDA5OUZGJywgJyMwMENDMDAnLCAnIzAwQ0MzMycsICcjMDBDQzY2JywgJyMwMENDOTknLCAnIzAwQ0NDQycsICcjMDBDQ0ZGJyxcbiAgJyMzMzAwQ0MnLCAnIzMzMDBGRicsICcjMzMzM0NDJywgJyMzMzMzRkYnLCAnIzMzNjZDQycsICcjMzM2NkZGJywgJyMzMzk5Q0MnLFxuICAnIzMzOTlGRicsICcjMzNDQzAwJywgJyMzM0NDMzMnLCAnIzMzQ0M2NicsICcjMzNDQzk5JywgJyMzM0NDQ0MnLCAnIzMzQ0NGRicsXG4gICcjNjYwMENDJywgJyM2NjAwRkYnLCAnIzY2MzNDQycsICcjNjYzM0ZGJywgJyM2NkNDMDAnLCAnIzY2Q0MzMycsICcjOTkwMENDJyxcbiAgJyM5OTAwRkYnLCAnIzk5MzNDQycsICcjOTkzM0ZGJywgJyM5OUNDMDAnLCAnIzk5Q0MzMycsICcjQ0MwMDAwJywgJyNDQzAwMzMnLFxuICAnI0NDMDA2NicsICcjQ0MwMDk5JywgJyNDQzAwQ0MnLCAnI0NDMDBGRicsICcjQ0MzMzAwJywgJyNDQzMzMzMnLCAnI0NDMzM2NicsXG4gICcjQ0MzMzk5JywgJyNDQzMzQ0MnLCAnI0NDMzNGRicsICcjQ0M2NjAwJywgJyNDQzY2MzMnLCAnI0NDOTkwMCcsICcjQ0M5OTMzJyxcbiAgJyNDQ0NDMDAnLCAnI0NDQ0MzMycsICcjRkYwMDAwJywgJyNGRjAwMzMnLCAnI0ZGMDA2NicsICcjRkYwMDk5JywgJyNGRjAwQ0MnLFxuICAnI0ZGMDBGRicsICcjRkYzMzAwJywgJyNGRjMzMzMnLCAnI0ZGMzM2NicsICcjRkYzMzk5JywgJyNGRjMzQ0MnLCAnI0ZGMzNGRicsXG4gICcjRkY2NjAwJywgJyNGRjY2MzMnLCAnI0ZGOTkwMCcsICcjRkY5OTMzJywgJyNGRkNDMDAnLCAnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuICAvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG4gIC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG4gIC8vIGV4cGxpY2l0bHlcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gaXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcbiAgLy8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcbiAgcmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG4gICAgLy8gaXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuICAgICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG4gICAgLy8gaXMgZmlyZWZveCA+PSB2MzE/XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG4gICAgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpIHx8XG4gICAgLy8gZG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24odikge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVyci5tZXNzYWdlO1xuICB9XG59O1xuXG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG4gIHZhciB1c2VDb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblxuICBhcmdzWzBdID0gKHVzZUNvbG9ycyA/ICclYycgOiAnJylcbiAgICArIHRoaXMubmFtZXNwYWNlXG4gICAgKyAodXNlQ29sb3JzID8gJyAlYycgOiAnICcpXG4gICAgKyBhcmdzWzBdXG4gICAgKyAodXNlQ29sb3JzID8gJyVjICcgOiAnICcpXG4gICAgKyAnKycgKyBleHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cbiAgaWYgKCF1c2VDb2xvcnMpIHJldHVybjtcblxuICB2YXIgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG4gIGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpXG5cbiAgLy8gdGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcbiAgLy8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxhc3RDID0gMDtcbiAgYXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgaWYgKCclJScgPT09IG1hdGNoKSByZXR1cm47XG4gICAgaW5kZXgrKztcbiAgICBpZiAoJyVjJyA9PT0gbWF0Y2gpIHtcbiAgICAgIC8vIHdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuICAgICAgLy8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcbiAgICAgIGxhc3RDID0gaW5kZXg7XG4gICAgfVxuICB9KTtcblxuICBhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5sb2coKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmxvZ2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gbG9nKCkge1xuICAvLyB0aGlzIGhhY2tlcnkgaXMgcmVxdWlyZWQgZm9yIElFOC85LCB3aGVyZVxuICAvLyB0aGUgYGNvbnNvbGUubG9nYCBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgJ2FwcGx5J1xuICByZXR1cm4gJ29iamVjdCcgPT09IHR5cGVvZiBjb25zb2xlXG4gICAgJiYgY29uc29sZS5sb2dcbiAgICAmJiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlLmxvZywgY29uc29sZSwgYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG4gIHRyeSB7XG4gICAgaWYgKG51bGwgPT0gbmFtZXNwYWNlcykge1xuICAgICAgZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5kZWJ1ZyA9IG5hbWVzcGFjZXM7XG4gICAgfVxuICB9IGNhdGNoKGUpIHt9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9hZCgpIHtcbiAgdmFyIHI7XG4gIHRyeSB7XG4gICAgciA9IGV4cG9ydHMuc3RvcmFnZS5kZWJ1ZztcbiAgfSBjYXRjaChlKSB7fVxuXG4gIC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcbiAgaWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG4gICAgciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuICB9XG5cbiAgcmV0dXJuIHI7XG59XG5cbi8qKlxuICogRW5hYmxlIG5hbWVzcGFjZXMgbGlzdGVkIGluIGBsb2NhbFN0b3JhZ2UuZGVidWdgIGluaXRpYWxseS5cbiAqL1xuXG5leHBvcnRzLmVuYWJsZShsb2FkKCkpO1xuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZTtcbiAgfSBjYXRjaCAoZSkge31cbn1cbiIsIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICpcbiAqIEV4cG9zZSBgZGVidWcoKWAgYXMgdGhlIG1vZHVsZS5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVEZWJ1Zy5kZWJ1ZyA9IGNyZWF0ZURlYnVnWydkZWZhdWx0J10gPSBjcmVhdGVEZWJ1ZztcbmV4cG9ydHMuY29lcmNlID0gY29lcmNlO1xuZXhwb3J0cy5kaXNhYmxlID0gZGlzYWJsZTtcbmV4cG9ydHMuZW5hYmxlID0gZW5hYmxlO1xuZXhwb3J0cy5lbmFibGVkID0gZW5hYmxlZDtcbmV4cG9ydHMuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXG4vKipcbiAqIEFjdGl2ZSBgZGVidWdgIGluc3RhbmNlcy5cbiAqL1xuZXhwb3J0cy5pbnN0YW5jZXMgPSBbXTtcblxuLyoqXG4gKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cbiAqL1xuXG5leHBvcnRzLm5hbWVzID0gW107XG5leHBvcnRzLnNraXBzID0gW107XG5cbi8qKlxuICogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuICpcbiAqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMgPSB7fTtcblxuLyoqXG4gKiBTZWxlY3QgYSBjb2xvci5cbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuICB2YXIgaGFzaCA9IDAsIGk7XG5cbiAgZm9yIChpIGluIG5hbWVzcGFjZSkge1xuICAgIGhhc2ggID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcbiAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICB9XG5cbiAgcmV0dXJuIGV4cG9ydHMuY29sb3JzW01hdGguYWJzKGhhc2gpICUgZXhwb3J0cy5jb2xvcnMubGVuZ3RoXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cbiAgdmFyIHByZXZUaW1lO1xuXG4gIGZ1bmN0aW9uIGRlYnVnKCkge1xuICAgIC8vIGRpc2FibGVkP1xuICAgIGlmICghZGVidWcuZW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgdmFyIHNlbGYgPSBkZWJ1ZztcblxuICAgIC8vIHNldCBgZGlmZmAgdGltZXN0YW1wXG4gICAgdmFyIGN1cnIgPSArbmV3IERhdGUoKTtcbiAgICB2YXIgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuICAgIHNlbGYuZGlmZiA9IG1zO1xuICAgIHNlbGYucHJldiA9IHByZXZUaW1lO1xuICAgIHNlbGYuY3VyciA9IGN1cnI7XG4gICAgcHJldlRpbWUgPSBjdXJyO1xuXG4gICAgLy8gdHVybiB0aGUgYGFyZ3VtZW50c2AgaW50byBhIHByb3BlciBBcnJheVxuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBhcmdzWzBdID0gZXhwb3J0cy5jb2VyY2UoYXJnc1swXSk7XG5cbiAgICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBhcmdzWzBdKSB7XG4gICAgICAvLyBhbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuICAgICAgYXJncy51bnNoaWZ0KCclTycpO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgZnVuY3Rpb24obWF0Y2gsIGZvcm1hdCkge1xuICAgICAgLy8gaWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuICAgICAgaWYgKG1hdGNoID09PSAnJSUnKSByZXR1cm4gbWF0Y2g7XG4gICAgICBpbmRleCsrO1xuICAgICAgdmFyIGZvcm1hdHRlciA9IGV4cG9ydHMuZm9ybWF0dGVyc1tmb3JtYXRdO1xuICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBmb3JtYXR0ZXIpIHtcbiAgICAgICAgdmFyIHZhbCA9IGFyZ3NbaW5kZXhdO1xuICAgICAgICBtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cbiAgICAgICAgLy8gbm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuICAgICAgICBhcmdzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGluZGV4LS07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG5cbiAgICAvLyBhcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuICAgIGV4cG9ydHMuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG4gICAgdmFyIGxvZ0ZuID0gZGVidWcubG9nIHx8IGV4cG9ydHMubG9nIHx8IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XG4gICAgbG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gIH1cblxuICBkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG4gIGRlYnVnLmVuYWJsZWQgPSBleHBvcnRzLmVuYWJsZWQobmFtZXNwYWNlKTtcbiAgZGVidWcudXNlQ29sb3JzID0gZXhwb3J0cy51c2VDb2xvcnMoKTtcbiAgZGVidWcuY29sb3IgPSBzZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuICBkZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuICAvLyBlbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGV4cG9ydHMuaW5pdCkge1xuICAgIGV4cG9ydHMuaW5pdChkZWJ1Zyk7XG4gIH1cblxuICBleHBvcnRzLmluc3RhbmNlcy5wdXNoKGRlYnVnKTtcblxuICByZXR1cm4gZGVidWc7XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKCkge1xuICB2YXIgaW5kZXggPSBleHBvcnRzLmluc3RhbmNlcy5pbmRleE9mKHRoaXMpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgZXhwb3J0cy5pbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG4gKiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG4gIGV4cG9ydHMuc2F2ZShuYW1lc3BhY2VzKTtcblxuICBleHBvcnRzLm5hbWVzID0gW107XG4gIGV4cG9ydHMuc2tpcHMgPSBbXTtcblxuICB2YXIgaTtcbiAgdmFyIHNwbGl0ID0gKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMgOiAnJykuc3BsaXQoL1tcXHMsXSsvKTtcbiAgdmFyIGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoIXNwbGl0W2ldKSBjb250aW51ZTsgLy8gaWdub3JlIGVtcHR5IHN0cmluZ3NcbiAgICBuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcbiAgICBpZiAobmFtZXNwYWNlc1swXSA9PT0gJy0nKSB7XG4gICAgICBleHBvcnRzLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzLnN1YnN0cigxKSArICckJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IGV4cG9ydHMuaW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGluc3RhbmNlID0gZXhwb3J0cy5pbnN0YW5jZXNbaV07XG4gICAgaW5zdGFuY2UuZW5hYmxlZCA9IGV4cG9ydHMuZW5hYmxlZChpbnN0YW5jZS5uYW1lc3BhY2UpO1xuICB9XG59XG5cbi8qKlxuICogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkaXNhYmxlKCkge1xuICBleHBvcnRzLmVuYWJsZSgnJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcbiAgaWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGksIGxlbjtcbiAgZm9yIChpID0gMCwgbGVuID0gZXhwb3J0cy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChleHBvcnRzLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZm9yIChpID0gMCwgbGVuID0gZXhwb3J0cy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChleHBvcnRzLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29lcmNlIGB2YWxgLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICogQHJldHVybiB7TWl4ZWR9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjb2VyY2UodmFsKSB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcbiAgcmV0dXJuIHZhbDtcbn1cbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbCkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigoPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIGlmIChtcyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtcyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICByZXR1cm4gcGx1cmFsKG1zLCBkLCAnZGF5JykgfHxcbiAgICBwbHVyYWwobXMsIGgsICdob3VyJykgfHxcbiAgICBwbHVyYWwobXMsIG0sICdtaW51dGUnKSB8fFxuICAgIHBsdXJhbChtcywgcywgJ3NlY29uZCcpIHx8XG4gICAgbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG4sIG5hbWUpIHtcbiAgaWYgKG1zIDwgbikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobXMgPCBuICogMS41KSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IobXMgLyBuKSArICcgJyArIG5hbWU7XG4gIH1cbiAgcmV0dXJuIE1hdGguY2VpbChtcyAvIG4pICsgJyAnICsgbmFtZSArICdzJztcbn1cbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xudmFyIGhhc0JpbmFyeSA9IHJlcXVpcmUoJ2hhcy1iaW5hcnkyJyk7XG52YXIgc2xpY2VCdWZmZXIgPSByZXF1aXJlKCdhcnJheWJ1ZmZlci5zbGljZScpO1xudmFyIGFmdGVyID0gcmVxdWlyZSgnYWZ0ZXInKTtcbnZhciB1dGY4ID0gcmVxdWlyZSgnLi91dGY4Jyk7XG5cbnZhciBiYXNlNjRlbmNvZGVyO1xuaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgYmFzZTY0ZW5jb2RlciA9IHJlcXVpcmUoJ2Jhc2U2NC1hcnJheWJ1ZmZlcicpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHdlIGFyZSBydW5uaW5nIGFuIGFuZHJvaWQgYnJvd3Nlci4gVGhhdCByZXF1aXJlcyB1cyB0byB1c2VcbiAqIEFycmF5QnVmZmVyIHdpdGggcG9sbGluZyB0cmFuc3BvcnRzLi4uXG4gKlxuICogaHR0cDovL2doaW5kYS5uZXQvanBlZy1ibG9iLWFqYXgtYW5kcm9pZC9cbiAqL1xuXG52YXIgaXNBbmRyb2lkID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL0FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKipcbiAqIENoZWNrIGlmIHdlIGFyZSBydW5uaW5nIGluIFBoYW50b21KUy5cbiAqIFVwbG9hZGluZyBhIEJsb2Igd2l0aCBQaGFudG9tSlMgZG9lcyBub3Qgd29yayBjb3JyZWN0bHksIGFzIHJlcG9ydGVkIGhlcmU6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJpeWEvcGhhbnRvbWpzL2lzc3Vlcy8xMTM5NVxuICogQHR5cGUgYm9vbGVhblxuICovXG52YXIgaXNQaGFudG9tSlMgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvUGhhbnRvbUpTL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuLyoqXG4gKiBXaGVuIHRydWUsIGF2b2lkcyB1c2luZyBCbG9icyB0byBlbmNvZGUgcGF5bG9hZHMuXG4gKiBAdHlwZSBib29sZWFuXG4gKi9cbnZhciBkb250U2VuZEJsb2JzID0gaXNBbmRyb2lkIHx8IGlzUGhhbnRvbUpTO1xuXG4vKipcbiAqIEN1cnJlbnQgcHJvdG9jb2wgdmVyc2lvbi5cbiAqL1xuXG5leHBvcnRzLnByb3RvY29sID0gMztcblxuLyoqXG4gKiBQYWNrZXQgdHlwZXMuXG4gKi9cblxudmFyIHBhY2tldHMgPSBleHBvcnRzLnBhY2tldHMgPSB7XG4gICAgb3BlbjogICAgIDAgICAgLy8gbm9uLXdzXG4gICwgY2xvc2U6ICAgIDEgICAgLy8gbm9uLXdzXG4gICwgcGluZzogICAgIDJcbiAgLCBwb25nOiAgICAgM1xuICAsIG1lc3NhZ2U6ICA0XG4gICwgdXBncmFkZTogIDVcbiAgLCBub29wOiAgICAgNlxufTtcblxudmFyIHBhY2tldHNsaXN0ID0ga2V5cyhwYWNrZXRzKTtcblxuLyoqXG4gKiBQcmVtYWRlIGVycm9yIHBhY2tldC5cbiAqL1xuXG52YXIgZXJyID0geyB0eXBlOiAnZXJyb3InLCBkYXRhOiAncGFyc2VyIGVycm9yJyB9O1xuXG4vKipcbiAqIENyZWF0ZSBhIGJsb2IgYXBpIGV2ZW4gZm9yIGJsb2IgYnVpbGRlciB3aGVuIHZlbmRvciBwcmVmaXhlcyBleGlzdFxuICovXG5cbnZhciBCbG9iID0gcmVxdWlyZSgnYmxvYicpO1xuXG4vKipcbiAqIEVuY29kZXMgYSBwYWNrZXQuXG4gKlxuICogICAgIDxwYWNrZXQgdHlwZSBpZD4gWyA8ZGF0YT4gXVxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgIDVoZWxsbyB3b3JsZFxuICogICAgIDNcbiAqICAgICA0XG4gKlxuICogQmluYXJ5IGlzIGVuY29kZWQgaW4gYW4gaWRlbnRpY2FsIHByaW5jaXBsZVxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuZW5jb2RlUGFja2V0ID0gZnVuY3Rpb24gKHBhY2tldCwgc3VwcG9ydHNCaW5hcnksIHV0ZjhlbmNvZGUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygc3VwcG9ydHNCaW5hcnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IHN1cHBvcnRzQmluYXJ5O1xuICAgIHN1cHBvcnRzQmluYXJ5ID0gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHV0ZjhlbmNvZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IHV0ZjhlbmNvZGU7XG4gICAgdXRmOGVuY29kZSA9IG51bGw7XG4gIH1cblxuICB2YXIgZGF0YSA9IChwYWNrZXQuZGF0YSA9PT0gdW5kZWZpbmVkKVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiBwYWNrZXQuZGF0YS5idWZmZXIgfHwgcGFja2V0LmRhdGE7XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGVuY29kZUFycmF5QnVmZmVyKHBhY2tldCwgc3VwcG9ydHNCaW5hcnksIGNhbGxiYWNrKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICByZXR1cm4gZW5jb2RlQmxvYihwYWNrZXQsIHN1cHBvcnRzQmluYXJ5LCBjYWxsYmFjayk7XG4gIH1cblxuICAvLyBtaWdodCBiZSBhbiBvYmplY3Qgd2l0aCB7IGJhc2U2NDogdHJ1ZSwgZGF0YTogZGF0YUFzQmFzZTY0U3RyaW5nIH1cbiAgaWYgKGRhdGEgJiYgZGF0YS5iYXNlNjQpIHtcbiAgICByZXR1cm4gZW5jb2RlQmFzZTY0T2JqZWN0KHBhY2tldCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLy8gU2VuZGluZyBkYXRhIGFzIGEgdXRmLTggc3RyaW5nXG4gIHZhciBlbmNvZGVkID0gcGFja2V0c1twYWNrZXQudHlwZV07XG5cbiAgLy8gZGF0YSBmcmFnbWVudCBpcyBvcHRpb25hbFxuICBpZiAodW5kZWZpbmVkICE9PSBwYWNrZXQuZGF0YSkge1xuICAgIGVuY29kZWQgKz0gdXRmOGVuY29kZSA/IHV0ZjguZW5jb2RlKFN0cmluZyhwYWNrZXQuZGF0YSksIHsgc3RyaWN0OiBmYWxzZSB9KSA6IFN0cmluZyhwYWNrZXQuZGF0YSk7XG4gIH1cblxuICByZXR1cm4gY2FsbGJhY2soJycgKyBlbmNvZGVkKTtcblxufTtcblxuZnVuY3Rpb24gZW5jb2RlQmFzZTY0T2JqZWN0KHBhY2tldCwgY2FsbGJhY2spIHtcbiAgLy8gcGFja2V0IGRhdGEgaXMgYW4gb2JqZWN0IHsgYmFzZTY0OiB0cnVlLCBkYXRhOiBkYXRhQXNCYXNlNjRTdHJpbmcgfVxuICB2YXIgbWVzc2FnZSA9ICdiJyArIGV4cG9ydHMucGFja2V0c1twYWNrZXQudHlwZV0gKyBwYWNrZXQuZGF0YS5kYXRhO1xuICByZXR1cm4gY2FsbGJhY2sobWVzc2FnZSk7XG59XG5cbi8qKlxuICogRW5jb2RlIHBhY2tldCBoZWxwZXJzIGZvciBiaW5hcnkgdHlwZXNcbiAqL1xuXG5mdW5jdGlvbiBlbmNvZGVBcnJheUJ1ZmZlcihwYWNrZXQsIHN1cHBvcnRzQmluYXJ5LCBjYWxsYmFjaykge1xuICBpZiAoIXN1cHBvcnRzQmluYXJ5KSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuZW5jb2RlQmFzZTY0UGFja2V0KHBhY2tldCwgY2FsbGJhY2spO1xuICB9XG5cbiAgdmFyIGRhdGEgPSBwYWNrZXQuZGF0YTtcbiAgdmFyIGNvbnRlbnRBcnJheSA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICB2YXIgcmVzdWx0QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMSArIGRhdGEuYnl0ZUxlbmd0aCk7XG5cbiAgcmVzdWx0QnVmZmVyWzBdID0gcGFja2V0c1twYWNrZXQudHlwZV07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGVudEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0QnVmZmVyW2krMV0gPSBjb250ZW50QXJyYXlbaV07XG4gIH1cblxuICByZXR1cm4gY2FsbGJhY2socmVzdWx0QnVmZmVyLmJ1ZmZlcik7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUJsb2JBc0FycmF5QnVmZmVyKHBhY2tldCwgc3VwcG9ydHNCaW5hcnksIGNhbGxiYWNrKSB7XG4gIGlmICghc3VwcG9ydHNCaW5hcnkpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5lbmNvZGVCYXNlNjRQYWNrZXQocGFja2V0LCBjYWxsYmFjayk7XG4gIH1cblxuICB2YXIgZnIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICBmci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICBleHBvcnRzLmVuY29kZVBhY2tldCh7IHR5cGU6IHBhY2tldC50eXBlLCBkYXRhOiBmci5yZXN1bHQgfSwgc3VwcG9ydHNCaW5hcnksIHRydWUsIGNhbGxiYWNrKTtcbiAgfTtcbiAgcmV0dXJuIGZyLnJlYWRBc0FycmF5QnVmZmVyKHBhY2tldC5kYXRhKTtcbn1cblxuZnVuY3Rpb24gZW5jb2RlQmxvYihwYWNrZXQsIHN1cHBvcnRzQmluYXJ5LCBjYWxsYmFjaykge1xuICBpZiAoIXN1cHBvcnRzQmluYXJ5KSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuZW5jb2RlQmFzZTY0UGFja2V0KHBhY2tldCwgY2FsbGJhY2spO1xuICB9XG5cbiAgaWYgKGRvbnRTZW5kQmxvYnMpIHtcbiAgICByZXR1cm4gZW5jb2RlQmxvYkFzQXJyYXlCdWZmZXIocGFja2V0LCBzdXBwb3J0c0JpbmFyeSwgY2FsbGJhY2spO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IG5ldyBVaW50OEFycmF5KDEpO1xuICBsZW5ndGhbMF0gPSBwYWNrZXRzW3BhY2tldC50eXBlXTtcbiAgdmFyIGJsb2IgPSBuZXcgQmxvYihbbGVuZ3RoLmJ1ZmZlciwgcGFja2V0LmRhdGFdKTtcblxuICByZXR1cm4gY2FsbGJhY2soYmxvYik7XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIHBhY2tldCB3aXRoIGJpbmFyeSBkYXRhIGluIGEgYmFzZTY0IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWNrZXQsIGhhcyBgdHlwZWAgYW5kIGBkYXRhYFxuICogQHJldHVybiB7U3RyaW5nfSBiYXNlNjQgZW5jb2RlZCBtZXNzYWdlXG4gKi9cblxuZXhwb3J0cy5lbmNvZGVCYXNlNjRQYWNrZXQgPSBmdW5jdGlvbihwYWNrZXQsIGNhbGxiYWNrKSB7XG4gIHZhciBtZXNzYWdlID0gJ2InICsgZXhwb3J0cy5wYWNrZXRzW3BhY2tldC50eXBlXTtcbiAgaWYgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBwYWNrZXQuZGF0YSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICB2YXIgZnIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIGZyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGI2NCA9IGZyLnJlc3VsdC5zcGxpdCgnLCcpWzFdO1xuICAgICAgY2FsbGJhY2sobWVzc2FnZSArIGI2NCk7XG4gICAgfTtcbiAgICByZXR1cm4gZnIucmVhZEFzRGF0YVVSTChwYWNrZXQuZGF0YSk7XG4gIH1cblxuICB2YXIgYjY0ZGF0YTtcbiAgdHJ5IHtcbiAgICBiNjRkYXRhID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheShwYWNrZXQuZGF0YSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gaVBob25lIFNhZmFyaSBkb2Vzbid0IGxldCB5b3UgYXBwbHkgd2l0aCB0eXBlZCBhcnJheXNcbiAgICB2YXIgdHlwZWQgPSBuZXcgVWludDhBcnJheShwYWNrZXQuZGF0YSk7XG4gICAgdmFyIGJhc2ljID0gbmV3IEFycmF5KHR5cGVkLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZC5sZW5ndGg7IGkrKykge1xuICAgICAgYmFzaWNbaV0gPSB0eXBlZFtpXTtcbiAgICB9XG4gICAgYjY0ZGF0YSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYmFzaWMpO1xuICB9XG4gIG1lc3NhZ2UgKz0gYnRvYShiNjRkYXRhKTtcbiAgcmV0dXJuIGNhbGxiYWNrKG1lc3NhZ2UpO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIGEgcGFja2V0LiBDaGFuZ2VzIGZvcm1hdCB0byBCbG9iIGlmIHJlcXVlc3RlZC5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHdpdGggYHR5cGVgIGFuZCBgZGF0YWAgKGlmIGFueSlcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuZGVjb2RlUGFja2V0ID0gZnVuY3Rpb24gKGRhdGEsIGJpbmFyeVR5cGUsIHV0ZjhkZWNvZGUpIHtcbiAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBlcnI7XG4gIH1cbiAgLy8gU3RyaW5nIGRhdGFcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIGlmIChkYXRhLmNoYXJBdCgwKSA9PT0gJ2InKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5kZWNvZGVCYXNlNjRQYWNrZXQoZGF0YS5zdWJzdHIoMSksIGJpbmFyeVR5cGUpO1xuICAgIH1cblxuICAgIGlmICh1dGY4ZGVjb2RlKSB7XG4gICAgICBkYXRhID0gdHJ5RGVjb2RlKGRhdGEpO1xuICAgICAgaWYgKGRhdGEgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciB0eXBlID0gZGF0YS5jaGFyQXQoMCk7XG5cbiAgICBpZiAoTnVtYmVyKHR5cGUpICE9IHR5cGUgfHwgIXBhY2tldHNsaXN0W3R5cGVdKSB7XG4gICAgICByZXR1cm4gZXJyO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IHBhY2tldHNsaXN0W3R5cGVdLCBkYXRhOiBkYXRhLnN1YnN0cmluZygxKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBwYWNrZXRzbGlzdFt0eXBlXSB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBhc0FycmF5ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gIHZhciB0eXBlID0gYXNBcnJheVswXTtcbiAgdmFyIHJlc3QgPSBzbGljZUJ1ZmZlcihkYXRhLCAxKTtcbiAgaWYgKEJsb2IgJiYgYmluYXJ5VHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgcmVzdCA9IG5ldyBCbG9iKFtyZXN0XSk7XG4gIH1cbiAgcmV0dXJuIHsgdHlwZTogcGFja2V0c2xpc3RbdHlwZV0sIGRhdGE6IHJlc3QgfTtcbn07XG5cbmZ1bmN0aW9uIHRyeURlY29kZShkYXRhKSB7XG4gIHRyeSB7XG4gICAgZGF0YSA9IHV0ZjguZGVjb2RlKGRhdGEsIHsgc3RyaWN0OiBmYWxzZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIGEgcGFja2V0IGVuY29kZWQgaW4gYSBiYXNlNjQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGJhc2U2NCBlbmNvZGVkIG1lc3NhZ2VcbiAqIEByZXR1cm4ge09iamVjdH0gd2l0aCBgdHlwZWAgYW5kIGBkYXRhYCAoaWYgYW55KVxuICovXG5cbmV4cG9ydHMuZGVjb2RlQmFzZTY0UGFja2V0ID0gZnVuY3Rpb24obXNnLCBiaW5hcnlUeXBlKSB7XG4gIHZhciB0eXBlID0gcGFja2V0c2xpc3RbbXNnLmNoYXJBdCgwKV07XG4gIGlmICghYmFzZTY0ZW5jb2Rlcikge1xuICAgIHJldHVybiB7IHR5cGU6IHR5cGUsIGRhdGE6IHsgYmFzZTY0OiB0cnVlLCBkYXRhOiBtc2cuc3Vic3RyKDEpIH0gfTtcbiAgfVxuXG4gIHZhciBkYXRhID0gYmFzZTY0ZW5jb2Rlci5kZWNvZGUobXNnLnN1YnN0cigxKSk7XG5cbiAgaWYgKGJpbmFyeVR5cGUgPT09ICdibG9iJyAmJiBCbG9iKSB7XG4gICAgZGF0YSA9IG5ldyBCbG9iKFtkYXRhXSk7XG4gIH1cblxuICByZXR1cm4geyB0eXBlOiB0eXBlLCBkYXRhOiBkYXRhIH07XG59O1xuXG4vKipcbiAqIEVuY29kZXMgbXVsdGlwbGUgbWVzc2FnZXMgKHBheWxvYWQpLlxuICpcbiAqICAgICA8bGVuZ3RoPjpkYXRhXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgMTE6aGVsbG8gd29ybGQyOmhpXG4gKlxuICogSWYgYW55IGNvbnRlbnRzIGFyZSBiaW5hcnksIHRoZXkgd2lsbCBiZSBlbmNvZGVkIGFzIGJhc2U2NCBzdHJpbmdzLiBCYXNlNjRcbiAqIGVuY29kZWQgc3RyaW5ncyBhcmUgbWFya2VkIHdpdGggYSBiIGJlZm9yZSB0aGUgbGVuZ3RoIHNwZWNpZmllclxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHBhY2tldHNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuZW5jb2RlUGF5bG9hZCA9IGZ1bmN0aW9uIChwYWNrZXRzLCBzdXBwb3J0c0JpbmFyeSwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBzdXBwb3J0c0JpbmFyeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gc3VwcG9ydHNCaW5hcnk7XG4gICAgc3VwcG9ydHNCaW5hcnkgPSBudWxsO1xuICB9XG5cbiAgdmFyIGlzQmluYXJ5ID0gaGFzQmluYXJ5KHBhY2tldHMpO1xuXG4gIGlmIChzdXBwb3J0c0JpbmFyeSAmJiBpc0JpbmFyeSkge1xuICAgIGlmIChCbG9iICYmICFkb250U2VuZEJsb2JzKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5lbmNvZGVQYXlsb2FkQXNCbG9iKHBhY2tldHMsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwb3J0cy5lbmNvZGVQYXlsb2FkQXNBcnJheUJ1ZmZlcihwYWNrZXRzLCBjYWxsYmFjayk7XG4gIH1cblxuICBpZiAoIXBhY2tldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCcwOicpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0TGVuZ3RoSGVhZGVyKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gbWVzc2FnZS5sZW5ndGggKyAnOicgKyBtZXNzYWdlO1xuICB9XG5cbiAgZnVuY3Rpb24gZW5jb2RlT25lKHBhY2tldCwgZG9uZUNhbGxiYWNrKSB7XG4gICAgZXhwb3J0cy5lbmNvZGVQYWNrZXQocGFja2V0LCAhaXNCaW5hcnkgPyBmYWxzZSA6IHN1cHBvcnRzQmluYXJ5LCBmYWxzZSwgZnVuY3Rpb24obWVzc2FnZSkge1xuICAgICAgZG9uZUNhbGxiYWNrKG51bGwsIHNldExlbmd0aEhlYWRlcihtZXNzYWdlKSk7XG4gICAgfSk7XG4gIH1cblxuICBtYXAocGFja2V0cywgZW5jb2RlT25lLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICByZXR1cm4gY2FsbGJhY2socmVzdWx0cy5qb2luKCcnKSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBBc3luYyBhcnJheSBtYXAgdXNpbmcgYWZ0ZXJcbiAqL1xuXG5mdW5jdGlvbiBtYXAoYXJ5LCBlYWNoLCBkb25lKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoYXJ5Lmxlbmd0aCk7XG4gIHZhciBuZXh0ID0gYWZ0ZXIoYXJ5Lmxlbmd0aCwgZG9uZSk7XG5cbiAgdmFyIGVhY2hXaXRoSW5kZXggPSBmdW5jdGlvbihpLCBlbCwgY2IpIHtcbiAgICBlYWNoKGVsLCBmdW5jdGlvbihlcnJvciwgbXNnKSB7XG4gICAgICByZXN1bHRbaV0gPSBtc2c7XG4gICAgICBjYihlcnJvciwgcmVzdWx0KTtcbiAgICB9KTtcbiAgfTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkrKykge1xuICAgIGVhY2hXaXRoSW5kZXgoaSwgYXJ5W2ldLCBuZXh0KTtcbiAgfVxufVxuXG4vKlxuICogRGVjb2RlcyBkYXRhIHdoZW4gYSBwYXlsb2FkIGlzIG1heWJlIGV4cGVjdGVkLiBQb3NzaWJsZSBiaW5hcnkgY29udGVudHMgYXJlXG4gKiBkZWNvZGVkIGZyb20gdGhlaXIgYmFzZTY0IHJlcHJlc2VudGF0aW9uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGEsIGNhbGxiYWNrIG1ldGhvZFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmRlY29kZVBheWxvYWQgPSBmdW5jdGlvbiAoZGF0YSwgYmluYXJ5VHlwZSwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBleHBvcnRzLmRlY29kZVBheWxvYWRBc0JpbmFyeShkYXRhLCBiaW5hcnlUeXBlLCBjYWxsYmFjayk7XG4gIH1cblxuICBpZiAodHlwZW9mIGJpbmFyeVR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGJpbmFyeVR5cGU7XG4gICAgYmluYXJ5VHlwZSA9IG51bGw7XG4gIH1cblxuICB2YXIgcGFja2V0O1xuICBpZiAoZGF0YSA9PT0gJycpIHtcbiAgICAvLyBwYXJzZXIgZXJyb3IgLSBpZ25vcmluZyBwYXlsb2FkXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgMCwgMSk7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gJycsIG4sIG1zZztcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGRhdGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGNociA9IGRhdGEuY2hhckF0KGkpO1xuXG4gICAgaWYgKGNociAhPT0gJzonKSB7XG4gICAgICBsZW5ndGggKz0gY2hyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGxlbmd0aCA9PT0gJycgfHwgKGxlbmd0aCAhPSAobiA9IE51bWJlcihsZW5ndGgpKSkpIHtcbiAgICAgIC8vIHBhcnNlciBlcnJvciAtIGlnbm9yaW5nIHBheWxvYWRcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIDAsIDEpO1xuICAgIH1cblxuICAgIG1zZyA9IGRhdGEuc3Vic3RyKGkgKyAxLCBuKTtcblxuICAgIGlmIChsZW5ndGggIT0gbXNnLmxlbmd0aCkge1xuICAgICAgLy8gcGFyc2VyIGVycm9yIC0gaWdub3JpbmcgcGF5bG9hZFxuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgMCwgMSk7XG4gICAgfVxuXG4gICAgaWYgKG1zZy5sZW5ndGgpIHtcbiAgICAgIHBhY2tldCA9IGV4cG9ydHMuZGVjb2RlUGFja2V0KG1zZywgYmluYXJ5VHlwZSwgZmFsc2UpO1xuXG4gICAgICBpZiAoZXJyLnR5cGUgPT09IHBhY2tldC50eXBlICYmIGVyci5kYXRhID09PSBwYWNrZXQuZGF0YSkge1xuICAgICAgICAvLyBwYXJzZXIgZXJyb3IgaW4gaW5kaXZpZHVhbCBwYWNrZXQgLSBpZ25vcmluZyBwYXlsb2FkXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIDAsIDEpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmV0ID0gY2FsbGJhY2socGFja2V0LCBpICsgbiwgbCk7XG4gICAgICBpZiAoZmFsc2UgPT09IHJldCkgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkdmFuY2UgY3Vyc29yXG4gICAgaSArPSBuO1xuICAgIGxlbmd0aCA9ICcnO1xuICB9XG5cbiAgaWYgKGxlbmd0aCAhPT0gJycpIHtcbiAgICAvLyBwYXJzZXIgZXJyb3IgLSBpZ25vcmluZyBwYXlsb2FkXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgMCwgMSk7XG4gIH1cblxufTtcblxuLyoqXG4gKiBFbmNvZGVzIG11bHRpcGxlIG1lc3NhZ2VzIChwYXlsb2FkKSBhcyBiaW5hcnkuXG4gKlxuICogPDEgPSBiaW5hcnksIDAgPSBzdHJpbmc+PG51bWJlciBmcm9tIDAtOT48bnVtYmVyIGZyb20gMC05PlsuLi5dPG51bWJlclxuICogMjU1PjxkYXRhPlxuICpcbiAqIEV4YW1wbGU6XG4gKiAxIDMgMjU1IDEgMiAzLCBpZiB0aGUgYmluYXJ5IGNvbnRlbnRzIGFyZSBpbnRlcnByZXRlZCBhcyA4IGJpdCBpbnRlZ2Vyc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHBhY2tldHNcbiAqIEByZXR1cm4ge0FycmF5QnVmZmVyfSBlbmNvZGVkIHBheWxvYWRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuZW5jb2RlUGF5bG9hZEFzQXJyYXlCdWZmZXIgPSBmdW5jdGlvbihwYWNrZXRzLCBjYWxsYmFjaykge1xuICBpZiAoIXBhY2tldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBBcnJheUJ1ZmZlcigwKSk7XG4gIH1cblxuICBmdW5jdGlvbiBlbmNvZGVPbmUocGFja2V0LCBkb25lQ2FsbGJhY2spIHtcbiAgICBleHBvcnRzLmVuY29kZVBhY2tldChwYWNrZXQsIHRydWUsIHRydWUsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiBkb25lQ2FsbGJhY2sobnVsbCwgZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBtYXAocGFja2V0cywgZW5jb2RlT25lLCBmdW5jdGlvbihlcnIsIGVuY29kZWRQYWNrZXRzKSB7XG4gICAgdmFyIHRvdGFsTGVuZ3RoID0gZW5jb2RlZFBhY2tldHMucmVkdWNlKGZ1bmN0aW9uKGFjYywgcCkge1xuICAgICAgdmFyIGxlbjtcbiAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpe1xuICAgICAgICBsZW4gPSBwLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHAuYnl0ZUxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2MgKyBsZW4udG9TdHJpbmcoKS5sZW5ndGggKyBsZW4gKyAyOyAvLyBzdHJpbmcvYmluYXJ5IGlkZW50aWZpZXIgKyBzZXBhcmF0b3IgPSAyXG4gICAgfSwgMCk7XG5cbiAgICB2YXIgcmVzdWx0QXJyYXkgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7XG5cbiAgICB2YXIgYnVmZmVySW5kZXggPSAwO1xuICAgIGVuY29kZWRQYWNrZXRzLmZvckVhY2goZnVuY3Rpb24ocCkge1xuICAgICAgdmFyIGlzU3RyaW5nID0gdHlwZW9mIHAgPT09ICdzdHJpbmcnO1xuICAgICAgdmFyIGFiID0gcDtcbiAgICAgIGlmIChpc1N0cmluZykge1xuICAgICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KHAubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmlld1tpXSA9IHAuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICBhYiA9IHZpZXcuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTdHJpbmcpIHsgLy8gbm90IHRydWUgYmluYXJ5XG4gICAgICAgIHJlc3VsdEFycmF5W2J1ZmZlckluZGV4KytdID0gMDtcbiAgICAgIH0gZWxzZSB7IC8vIHRydWUgYmluYXJ5XG4gICAgICAgIHJlc3VsdEFycmF5W2J1ZmZlckluZGV4KytdID0gMTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxlblN0ciA9IGFiLmJ5dGVMZW5ndGgudG9TdHJpbmcoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuU3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdEFycmF5W2J1ZmZlckluZGV4KytdID0gcGFyc2VJbnQobGVuU3RyW2ldKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdEFycmF5W2J1ZmZlckluZGV4KytdID0gMjU1O1xuXG4gICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHRBcnJheVtidWZmZXJJbmRleCsrXSA9IHZpZXdbaV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FsbGJhY2socmVzdWx0QXJyYXkuYnVmZmVyKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEVuY29kZSBhcyBCbG9iXG4gKi9cblxuZXhwb3J0cy5lbmNvZGVQYXlsb2FkQXNCbG9iID0gZnVuY3Rpb24ocGFja2V0cywgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gZW5jb2RlT25lKHBhY2tldCwgZG9uZUNhbGxiYWNrKSB7XG4gICAgZXhwb3J0cy5lbmNvZGVQYWNrZXQocGFja2V0LCB0cnVlLCB0cnVlLCBmdW5jdGlvbihlbmNvZGVkKSB7XG4gICAgICB2YXIgYmluYXJ5SWRlbnRpZmllciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgYmluYXJ5SWRlbnRpZmllclswXSA9IDE7XG4gICAgICBpZiAodHlwZW9mIGVuY29kZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZC5sZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2aWV3W2ldID0gZW5jb2RlZC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIGVuY29kZWQgPSB2aWV3LmJ1ZmZlcjtcbiAgICAgICAgYmluYXJ5SWRlbnRpZmllclswXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW4gPSAoZW5jb2RlZCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKVxuICAgICAgICA/IGVuY29kZWQuYnl0ZUxlbmd0aFxuICAgICAgICA6IGVuY29kZWQuc2l6ZTtcblxuICAgICAgdmFyIGxlblN0ciA9IGxlbi50b1N0cmluZygpO1xuICAgICAgdmFyIGxlbmd0aEFyeSA9IG5ldyBVaW50OEFycmF5KGxlblN0ci5sZW5ndGggKyAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuU3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxlbmd0aEFyeVtpXSA9IHBhcnNlSW50KGxlblN0cltpXSk7XG4gICAgICB9XG4gICAgICBsZW5ndGhBcnlbbGVuU3RyLmxlbmd0aF0gPSAyNTU7XG5cbiAgICAgIGlmIChCbG9iKSB7XG4gICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2JpbmFyeUlkZW50aWZpZXIuYnVmZmVyLCBsZW5ndGhBcnkuYnVmZmVyLCBlbmNvZGVkXSk7XG4gICAgICAgIGRvbmVDYWxsYmFjayhudWxsLCBibG9iKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG1hcChwYWNrZXRzLCBlbmNvZGVPbmUsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgQmxvYihyZXN1bHRzKSk7XG4gIH0pO1xufTtcblxuLypcbiAqIERlY29kZXMgZGF0YSB3aGVuIGEgcGF5bG9hZCBpcyBtYXliZSBleHBlY3RlZC4gU3RyaW5ncyBhcmUgZGVjb2RlZCBieVxuICogaW50ZXJwcmV0aW5nIGVhY2ggYnl0ZSBhcyBhIGtleSBjb2RlIGZvciBlbnRyaWVzIG1hcmtlZCB0byBzdGFydCB3aXRoIDAuIFNlZVxuICogZGVzY3JpcHRpb24gb2YgZW5jb2RlUGF5bG9hZEFzQmluYXJ5XG4gKlxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gZGF0YSwgY2FsbGJhY2sgbWV0aG9kXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuZGVjb2RlUGF5bG9hZEFzQmluYXJ5ID0gZnVuY3Rpb24gKGRhdGEsIGJpbmFyeVR5cGUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgYmluYXJ5VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gYmluYXJ5VHlwZTtcbiAgICBiaW5hcnlUeXBlID0gbnVsbDtcbiAgfVxuXG4gIHZhciBidWZmZXJUYWlsID0gZGF0YTtcbiAgdmFyIGJ1ZmZlcnMgPSBbXTtcblxuICB3aGlsZSAoYnVmZmVyVGFpbC5ieXRlTGVuZ3RoID4gMCkge1xuICAgIHZhciB0YWlsQXJyYXkgPSBuZXcgVWludDhBcnJheShidWZmZXJUYWlsKTtcbiAgICB2YXIgaXNTdHJpbmcgPSB0YWlsQXJyYXlbMF0gPT09IDA7XG4gICAgdmFyIG1zZ0xlbmd0aCA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IDsgaSsrKSB7XG4gICAgICBpZiAodGFpbEFycmF5W2ldID09PSAyNTUpIGJyZWFrO1xuXG4gICAgICAvLyAzMTAgPSBjaGFyIGxlbmd0aCBvZiBOdW1iZXIuTUFYX1ZBTFVFXG4gICAgICBpZiAobXNnTGVuZ3RoLmxlbmd0aCA+IDMxMCkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCAwLCAxKTtcbiAgICAgIH1cblxuICAgICAgbXNnTGVuZ3RoICs9IHRhaWxBcnJheVtpXTtcbiAgICB9XG5cbiAgICBidWZmZXJUYWlsID0gc2xpY2VCdWZmZXIoYnVmZmVyVGFpbCwgMiArIG1zZ0xlbmd0aC5sZW5ndGgpO1xuICAgIG1zZ0xlbmd0aCA9IHBhcnNlSW50KG1zZ0xlbmd0aCk7XG5cbiAgICB2YXIgbXNnID0gc2xpY2VCdWZmZXIoYnVmZmVyVGFpbCwgMCwgbXNnTGVuZ3RoKTtcbiAgICBpZiAoaXNTdHJpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1zZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkobXNnKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlQaG9uZSBTYWZhcmkgZG9lc24ndCBsZXQgeW91IGFwcGx5IHRvIHR5cGVkIGFycmF5c1xuICAgICAgICB2YXIgdHlwZWQgPSBuZXcgVWludDhBcnJheShtc2cpO1xuICAgICAgICBtc2cgPSAnJztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG1zZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHR5cGVkW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGJ1ZmZlcnMucHVzaChtc2cpO1xuICAgIGJ1ZmZlclRhaWwgPSBzbGljZUJ1ZmZlcihidWZmZXJUYWlsLCBtc2dMZW5ndGgpO1xuICB9XG5cbiAgdmFyIHRvdGFsID0gYnVmZmVycy5sZW5ndGg7XG4gIGJ1ZmZlcnMuZm9yRWFjaChmdW5jdGlvbihidWZmZXIsIGkpIHtcbiAgICBjYWxsYmFjayhleHBvcnRzLmRlY29kZVBhY2tldChidWZmZXIsIGJpbmFyeVR5cGUsIHRydWUpLCBpLCB0b3RhbCk7XG4gIH0pO1xufTtcbiIsIlxuLyoqXG4gKiBHZXRzIHRoZSBrZXlzIGZvciBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybiB7QXJyYXl9IGtleXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyAob2JqKXtcbiAgdmFyIGFyciA9IFtdO1xuICB2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuICBmb3IgKHZhciBpIGluIG9iaikge1xuICAgIGlmIChoYXMuY2FsbChvYmosIGkpKSB7XG4gICAgICBhcnIucHVzaChpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3V0ZjhqcyB2Mi4xLjIgYnkgQG1hdGhpYXMgKi9cblxudmFyIHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbi8vIFRha2VuIGZyb20gaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlXG5mdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZykge1xuXHR2YXIgb3V0cHV0ID0gW107XG5cdHZhciBjb3VudGVyID0gMDtcblx0dmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG5cdHZhciB2YWx1ZTtcblx0dmFyIGV4dHJhO1xuXHR3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuXHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHQvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcblx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdG91dHB1dC5wdXNoKCgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHQvLyBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXJcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG91dHB1dDtcbn1cblxuLy8gVGFrZW4gZnJvbSBodHRwczovL210aHMuYmUvcHVueWNvZGVcbmZ1bmN0aW9uIHVjczJlbmNvZGUoYXJyYXkpIHtcblx0dmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0dmFyIGluZGV4ID0gLTE7XG5cdHZhciB2YWx1ZTtcblx0dmFyIG91dHB1dCA9ICcnO1xuXHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuXHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApO1xuXHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdH1cblx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlKTtcblx0fVxuXHRyZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBjaGVja1NjYWxhclZhbHVlKGNvZGVQb2ludCwgc3RyaWN0KSB7XG5cdGlmIChjb2RlUG9pbnQgPj0gMHhEODAwICYmIGNvZGVQb2ludCA8PSAweERGRkYpIHtcblx0XHRpZiAoc3RyaWN0KSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcblx0XHRcdFx0J0xvbmUgc3Vycm9nYXRlIFUrJyArIGNvZGVQb2ludC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArXG5cdFx0XHRcdCcgaXMgbm90IGEgc2NhbGFyIHZhbHVlJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ5dGUoY29kZVBvaW50LCBzaGlmdCkge1xuXHRyZXR1cm4gc3RyaW5nRnJvbUNoYXJDb2RlKCgoY29kZVBvaW50ID4+IHNoaWZ0KSAmIDB4M0YpIHwgMHg4MCk7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUNvZGVQb2ludChjb2RlUG9pbnQsIHN0cmljdCkge1xuXHRpZiAoKGNvZGVQb2ludCAmIDB4RkZGRkZGODApID09IDApIHsgLy8gMS1ieXRlIHNlcXVlbmNlXG5cdFx0cmV0dXJuIHN0cmluZ0Zyb21DaGFyQ29kZShjb2RlUG9pbnQpO1xuXHR9XG5cdHZhciBzeW1ib2wgPSAnJztcblx0aWYgKChjb2RlUG9pbnQgJiAweEZGRkZGODAwKSA9PSAwKSB7IC8vIDItYnl0ZSBzZXF1ZW5jZVxuXHRcdHN5bWJvbCA9IHN0cmluZ0Zyb21DaGFyQ29kZSgoKGNvZGVQb2ludCA+PiA2KSAmIDB4MUYpIHwgMHhDMCk7XG5cdH1cblx0ZWxzZSBpZiAoKGNvZGVQb2ludCAmIDB4RkZGRjAwMDApID09IDApIHsgLy8gMy1ieXRlIHNlcXVlbmNlXG5cdFx0aWYgKCFjaGVja1NjYWxhclZhbHVlKGNvZGVQb2ludCwgc3RyaWN0KSkge1xuXHRcdFx0Y29kZVBvaW50ID0gMHhGRkZEO1xuXHRcdH1cblx0XHRzeW1ib2wgPSBzdHJpbmdGcm9tQ2hhckNvZGUoKChjb2RlUG9pbnQgPj4gMTIpICYgMHgwRikgfCAweEUwKTtcblx0XHRzeW1ib2wgKz0gY3JlYXRlQnl0ZShjb2RlUG9pbnQsIDYpO1xuXHR9XG5cdGVsc2UgaWYgKChjb2RlUG9pbnQgJiAweEZGRTAwMDAwKSA9PSAwKSB7IC8vIDQtYnl0ZSBzZXF1ZW5jZVxuXHRcdHN5bWJvbCA9IHN0cmluZ0Zyb21DaGFyQ29kZSgoKGNvZGVQb2ludCA+PiAxOCkgJiAweDA3KSB8IDB4RjApO1xuXHRcdHN5bWJvbCArPSBjcmVhdGVCeXRlKGNvZGVQb2ludCwgMTIpO1xuXHRcdHN5bWJvbCArPSBjcmVhdGVCeXRlKGNvZGVQb2ludCwgNik7XG5cdH1cblx0c3ltYm9sICs9IHN0cmluZ0Zyb21DaGFyQ29kZSgoY29kZVBvaW50ICYgMHgzRikgfCAweDgwKTtcblx0cmV0dXJuIHN5bWJvbDtcbn1cblxuZnVuY3Rpb24gdXRmOGVuY29kZShzdHJpbmcsIG9wdHMpIHtcblx0b3B0cyA9IG9wdHMgfHwge307XG5cdHZhciBzdHJpY3QgPSBmYWxzZSAhPT0gb3B0cy5zdHJpY3Q7XG5cblx0dmFyIGNvZGVQb2ludHMgPSB1Y3MyZGVjb2RlKHN0cmluZyk7XG5cdHZhciBsZW5ndGggPSBjb2RlUG9pbnRzLmxlbmd0aDtcblx0dmFyIGluZGV4ID0gLTE7XG5cdHZhciBjb2RlUG9pbnQ7XG5cdHZhciBieXRlU3RyaW5nID0gJyc7XG5cdHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG5cdFx0Y29kZVBvaW50ID0gY29kZVBvaW50c1tpbmRleF07XG5cdFx0Ynl0ZVN0cmluZyArPSBlbmNvZGVDb2RlUG9pbnQoY29kZVBvaW50LCBzdHJpY3QpO1xuXHR9XG5cdHJldHVybiBieXRlU3RyaW5nO1xufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuZnVuY3Rpb24gcmVhZENvbnRpbnVhdGlvbkJ5dGUoKSB7XG5cdGlmIChieXRlSW5kZXggPj0gYnl0ZUNvdW50KSB7XG5cdFx0dGhyb3cgRXJyb3IoJ0ludmFsaWQgYnl0ZSBpbmRleCcpO1xuXHR9XG5cblx0dmFyIGNvbnRpbnVhdGlvbkJ5dGUgPSBieXRlQXJyYXlbYnl0ZUluZGV4XSAmIDB4RkY7XG5cdGJ5dGVJbmRleCsrO1xuXG5cdGlmICgoY29udGludWF0aW9uQnl0ZSAmIDB4QzApID09IDB4ODApIHtcblx0XHRyZXR1cm4gY29udGludWF0aW9uQnl0ZSAmIDB4M0Y7XG5cdH1cblxuXHQvLyBJZiB3ZSBlbmQgdXAgaGVyZSwgaXTigJlzIG5vdCBhIGNvbnRpbnVhdGlvbiBieXRlXG5cdHRocm93IEVycm9yKCdJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlJyk7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVN5bWJvbChzdHJpY3QpIHtcblx0dmFyIGJ5dGUxO1xuXHR2YXIgYnl0ZTI7XG5cdHZhciBieXRlMztcblx0dmFyIGJ5dGU0O1xuXHR2YXIgY29kZVBvaW50O1xuXG5cdGlmIChieXRlSW5kZXggPiBieXRlQ291bnQpIHtcblx0XHR0aHJvdyBFcnJvcignSW52YWxpZCBieXRlIGluZGV4Jyk7XG5cdH1cblxuXHRpZiAoYnl0ZUluZGV4ID09IGJ5dGVDb3VudCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIFJlYWQgZmlyc3QgYnl0ZVxuXHRieXRlMSA9IGJ5dGVBcnJheVtieXRlSW5kZXhdICYgMHhGRjtcblx0Ynl0ZUluZGV4Kys7XG5cblx0Ly8gMS1ieXRlIHNlcXVlbmNlIChubyBjb250aW51YXRpb24gYnl0ZXMpXG5cdGlmICgoYnl0ZTEgJiAweDgwKSA9PSAwKSB7XG5cdFx0cmV0dXJuIGJ5dGUxO1xuXHR9XG5cblx0Ly8gMi1ieXRlIHNlcXVlbmNlXG5cdGlmICgoYnl0ZTEgJiAweEUwKSA9PSAweEMwKSB7XG5cdFx0Ynl0ZTIgPSByZWFkQ29udGludWF0aW9uQnl0ZSgpO1xuXHRcdGNvZGVQb2ludCA9ICgoYnl0ZTEgJiAweDFGKSA8PCA2KSB8IGJ5dGUyO1xuXHRcdGlmIChjb2RlUG9pbnQgPj0gMHg4MCkge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgRXJyb3IoJ0ludmFsaWQgY29udGludWF0aW9uIGJ5dGUnKTtcblx0XHR9XG5cdH1cblxuXHQvLyAzLWJ5dGUgc2VxdWVuY2UgKG1heSBpbmNsdWRlIHVucGFpcmVkIHN1cnJvZ2F0ZXMpXG5cdGlmICgoYnl0ZTEgJiAweEYwKSA9PSAweEUwKSB7XG5cdFx0Ynl0ZTIgPSByZWFkQ29udGludWF0aW9uQnl0ZSgpO1xuXHRcdGJ5dGUzID0gcmVhZENvbnRpbnVhdGlvbkJ5dGUoKTtcblx0XHRjb2RlUG9pbnQgPSAoKGJ5dGUxICYgMHgwRikgPDwgMTIpIHwgKGJ5dGUyIDw8IDYpIHwgYnl0ZTM7XG5cdFx0aWYgKGNvZGVQb2ludCA+PSAweDA4MDApIHtcblx0XHRcdHJldHVybiBjaGVja1NjYWxhclZhbHVlKGNvZGVQb2ludCwgc3RyaWN0KSA/IGNvZGVQb2ludCA6IDB4RkZGRDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgRXJyb3IoJ0ludmFsaWQgY29udGludWF0aW9uIGJ5dGUnKTtcblx0XHR9XG5cdH1cblxuXHQvLyA0LWJ5dGUgc2VxdWVuY2Vcblx0aWYgKChieXRlMSAmIDB4RjgpID09IDB4RjApIHtcblx0XHRieXRlMiA9IHJlYWRDb250aW51YXRpb25CeXRlKCk7XG5cdFx0Ynl0ZTMgPSByZWFkQ29udGludWF0aW9uQnl0ZSgpO1xuXHRcdGJ5dGU0ID0gcmVhZENvbnRpbnVhdGlvbkJ5dGUoKTtcblx0XHRjb2RlUG9pbnQgPSAoKGJ5dGUxICYgMHgwNykgPDwgMHgxMikgfCAoYnl0ZTIgPDwgMHgwQykgfFxuXHRcdFx0KGJ5dGUzIDw8IDB4MDYpIHwgYnl0ZTQ7XG5cdFx0aWYgKGNvZGVQb2ludCA+PSAweDAxMDAwMCAmJiBjb2RlUG9pbnQgPD0gMHgxMEZGRkYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQ7XG5cdFx0fVxuXHR9XG5cblx0dGhyb3cgRXJyb3IoJ0ludmFsaWQgVVRGLTggZGV0ZWN0ZWQnKTtcbn1cblxudmFyIGJ5dGVBcnJheTtcbnZhciBieXRlQ291bnQ7XG52YXIgYnl0ZUluZGV4O1xuZnVuY3Rpb24gdXRmOGRlY29kZShieXRlU3RyaW5nLCBvcHRzKSB7XG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXHR2YXIgc3RyaWN0ID0gZmFsc2UgIT09IG9wdHMuc3RyaWN0O1xuXG5cdGJ5dGVBcnJheSA9IHVjczJkZWNvZGUoYnl0ZVN0cmluZyk7XG5cdGJ5dGVDb3VudCA9IGJ5dGVBcnJheS5sZW5ndGg7XG5cdGJ5dGVJbmRleCA9IDA7XG5cdHZhciBjb2RlUG9pbnRzID0gW107XG5cdHZhciB0bXA7XG5cdHdoaWxlICgodG1wID0gZGVjb2RlU3ltYm9sKHN0cmljdCkpICE9PSBmYWxzZSkge1xuXHRcdGNvZGVQb2ludHMucHVzaCh0bXApO1xuXHR9XG5cdHJldHVybiB1Y3MyZW5jb2RlKGNvZGVQb2ludHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0dmVyc2lvbjogJzIuMS4yJyxcblx0ZW5jb2RlOiB1dGY4ZW5jb2RlLFxuXHRkZWNvZGU6IHV0ZjhkZWNvZGVcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQHR5cGVkZWYge3sgW2tleTogc3RyaW5nXTogYW55IH19IEV4dGVuc2lvbnNcbiAqIEB0eXBlZGVmIHtFcnJvcn0gRXJyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZVxuICovXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IG9ialxuICogQHBhcmFtIHtFeHRlbnNpb25zfSBwcm9wc1xuICogQHJldHVybnMge0Vycm9yICYgRXh0ZW5zaW9uc31cbiAqL1xuZnVuY3Rpb24gYXNzaWduKG9iaiwgcHJvcHMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wc1trZXldLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHthbnl9IGVyciAtIEFuIEVycm9yXG4gKiBAcGFyYW0ge3N0cmluZ3xFeHRlbnNpb25zfSBjb2RlIC0gQSBzdHJpbmcgY29kZSBvciBwcm9wcyB0byBzZXQgb24gdGhlIGVycm9yXG4gKiBAcGFyYW0ge0V4dGVuc2lvbnN9IFtwcm9wc10gLSBQcm9wcyB0byBzZXQgb24gdGhlIGVycm9yXG4gKiBAcmV0dXJucyB7RXJyb3IgJiBFeHRlbnNpb25zfVxuICovXG5mdW5jdGlvbiBjcmVhdGVFcnJvcihlcnIsIGNvZGUsIHByb3BzKSB7XG4gICAgaWYgKCFlcnIgfHwgdHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHBhc3MgYW4gRXJyb3IgdG8gZXJyLWNvZGUnKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgIHByb3BzID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2RlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBwcm9wcyA9IGNvZGU7XG4gICAgICAgIGNvZGUgPSAnJztcbiAgICB9XG5cbiAgICBpZiAoY29kZSkge1xuICAgICAgICBwcm9wcy5jb2RlID0gY29kZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXNzaWduKGVyciwgcHJvcHMpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgcHJvcHMubWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICBwcm9wcy5zdGFjayA9IGVyci5zdGFjaztcblxuICAgICAgICBjb25zdCBFcnJDbGFzcyA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgIEVyckNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGVycikpO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gYXNzaWduKG5ldyBFcnJDbGFzcygpLCBwcm9wcyk7XG5cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlRXJyb3I7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdpZnlcbnN0cmluZ2lmeS5kZWZhdWx0ID0gc3RyaW5naWZ5XG5zdHJpbmdpZnkuc3RhYmxlID0gZGV0ZXJtaW5pc3RpY1N0cmluZ2lmeVxuc3RyaW5naWZ5LnN0YWJsZVN0cmluZ2lmeSA9IGRldGVybWluaXN0aWNTdHJpbmdpZnlcblxudmFyIExJTUlUX1JFUExBQ0VfTk9ERSA9ICdbLi4uXSdcbnZhciBDSVJDVUxBUl9SRVBMQUNFX05PREUgPSAnW0NpcmN1bGFyXSdcblxudmFyIGFyciA9IFtdXG52YXIgcmVwbGFjZXJTdGFjayA9IFtdXG5cbmZ1bmN0aW9uIGRlZmF1bHRPcHRpb25zICgpIHtcbiAgcmV0dXJuIHtcbiAgICBkZXB0aExpbWl0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICBlZGdlc0xpbWl0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICB9XG59XG5cbi8vIFJlZ3VsYXIgc3RyaW5naWZ5XG5mdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgcmVwbGFjZXIsIHNwYWNlciwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKClcbiAgfVxuXG4gIGRlY2lyYyhvYmosICcnLCAwLCBbXSwgdW5kZWZpbmVkLCAwLCBvcHRpb25zKVxuICB2YXIgcmVzXG4gIHRyeSB7XG4gICAgaWYgKHJlcGxhY2VyU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICByZXMgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IEpTT04uc3RyaW5naWZ5KG9iaiwgcmVwbGFjZUdldHRlclZhbHVlcyhyZXBsYWNlciksIHNwYWNlcilcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoJ1t1bmFibGUgdG8gc2VyaWFsaXplLCBjaXJjdWxhciByZWZlcmVuY2UgaXMgdG9vIGNvbXBsZXggdG8gYW5hbHl6ZV0nKVxuICB9IGZpbmFsbHkge1xuICAgIHdoaWxlIChhcnIubGVuZ3RoICE9PSAwKSB7XG4gICAgICB2YXIgcGFydCA9IGFyci5wb3AoKVxuICAgICAgaWYgKHBhcnQubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJ0WzBdLCBwYXJ0WzFdLCBwYXJ0WzNdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydFswXVtwYXJ0WzFdXSA9IHBhcnRbMl1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzZXRSZXBsYWNlIChyZXBsYWNlLCB2YWwsIGssIHBhcmVudCkge1xuICB2YXIgcHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIGspXG4gIGlmIChwcm9wZXJ0eURlc2NyaXB0b3IuZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvcGVydHlEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwgaywgeyB2YWx1ZTogcmVwbGFjZSB9KVxuICAgICAgYXJyLnB1c2goW3BhcmVudCwgaywgdmFsLCBwcm9wZXJ0eURlc2NyaXB0b3JdKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXBsYWNlclN0YWNrLnB1c2goW3ZhbCwgaywgcmVwbGFjZV0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcmVudFtrXSA9IHJlcGxhY2VcbiAgICBhcnIucHVzaChbcGFyZW50LCBrLCB2YWxdKVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY2lyYyAodmFsLCBrLCBlZGdlSW5kZXgsIHN0YWNrLCBwYXJlbnQsIGRlcHRoLCBvcHRpb25zKSB7XG4gIGRlcHRoICs9IDFcbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0YWNrW2ldID09PSB2YWwpIHtcbiAgICAgICAgc2V0UmVwbGFjZShDSVJDVUxBUl9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5kZXB0aExpbWl0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgZGVwdGggPiBvcHRpb25zLmRlcHRoTGltaXRcbiAgICApIHtcbiAgICAgIHNldFJlcGxhY2UoTElNSVRfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvcHRpb25zLmVkZ2VzTGltaXQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBlZGdlSW5kZXggKyAxID4gb3B0aW9ucy5lZGdlc0xpbWl0XG4gICAgKSB7XG4gICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbClcbiAgICAvLyBPcHRpbWl6ZSBmb3IgQXJyYXlzLiBCaWcgYXJyYXlzIGNvdWxkIGtpbGwgdGhlIHBlcmZvcm1hbmNlIG90aGVyd2lzZSFcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRlY2lyYyh2YWxbaV0sIGksIGksIHN0YWNrLCB2YWwsIGRlcHRoLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbClcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldXG4gICAgICAgIGRlY2lyYyh2YWxba2V5XSwga2V5LCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhY2sucG9wKClcbiAgfVxufVxuXG4vLyBTdGFibGUtc3RyaW5naWZ5XG5mdW5jdGlvbiBjb21wYXJlRnVuY3Rpb24gKGEsIGIpIHtcbiAgaWYgKGEgPCBiKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKGEgPiBiKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICByZXR1cm4gMFxufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmlzdGljU3RyaW5naWZ5IChvYmosIHJlcGxhY2VyLCBzcGFjZXIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucygpXG4gIH1cblxuICB2YXIgdG1wID0gZGV0ZXJtaW5pc3RpY0RlY2lyYyhvYmosICcnLCAwLCBbXSwgdW5kZWZpbmVkLCAwLCBvcHRpb25zKSB8fCBvYmpcbiAgdmFyIHJlc1xuICB0cnkge1xuICAgIGlmIChyZXBsYWNlclN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzID0gSlNPTi5zdHJpbmdpZnkodG1wLCByZXBsYWNlciwgc3BhY2VyKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBKU09OLnN0cmluZ2lmeSh0bXAsIHJlcGxhY2VHZXR0ZXJWYWx1ZXMocmVwbGFjZXIpLCBzcGFjZXIpXG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCdbdW5hYmxlIHRvIHNlcmlhbGl6ZSwgY2lyY3VsYXIgcmVmZXJlbmNlIGlzIHRvbyBjb21wbGV4IHRvIGFuYWx5emVdJylcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBFbnN1cmUgdGhhdCB3ZSByZXN0b3JlIHRoZSBvYmplY3QgYXMgaXQgd2FzLlxuICAgIHdoaWxlIChhcnIubGVuZ3RoICE9PSAwKSB7XG4gICAgICB2YXIgcGFydCA9IGFyci5wb3AoKVxuICAgICAgaWYgKHBhcnQubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJ0WzBdLCBwYXJ0WzFdLCBwYXJ0WzNdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydFswXVtwYXJ0WzFdXSA9IHBhcnRbMl1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmlzdGljRGVjaXJjICh2YWwsIGssIGVkZ2VJbmRleCwgc3RhY2ssIHBhcmVudCwgZGVwdGgsIG9wdGlvbnMpIHtcbiAgZGVwdGggKz0gMVxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc3RhY2tbaV0gPT09IHZhbCkge1xuICAgICAgICBzZXRSZXBsYWNlKENJUkNVTEFSX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvcHRpb25zLmRlcHRoTGltaXQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBkZXB0aCA+IG9wdGlvbnMuZGVwdGhMaW1pdFxuICAgICkge1xuICAgICAgc2V0UmVwbGFjZShMSU1JVF9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdGlvbnMuZWRnZXNMaW1pdCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIGVkZ2VJbmRleCArIDEgPiBvcHRpb25zLmVkZ2VzTGltaXRcbiAgICApIHtcbiAgICAgIHNldFJlcGxhY2UoTElNSVRfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsKVxuICAgIC8vIE9wdGltaXplIGZvciBBcnJheXMuIEJpZyBhcnJheXMgY291bGQga2lsbCB0aGUgcGVyZm9ybWFuY2Ugb3RoZXJ3aXNlIVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGV0ZXJtaW5pc3RpY0RlY2lyYyh2YWxbaV0sIGksIGksIHN0YWNrLCB2YWwsIGRlcHRoLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2JqZWN0IGluIHRoZSByZXF1aXJlZCB3YXlcbiAgICAgIHZhciB0bXAgPSB7fVxuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpLnNvcnQoY29tcGFyZUZ1bmN0aW9uKVxuICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV1cbiAgICAgICAgZGV0ZXJtaW5pc3RpY0RlY2lyYyh2YWxba2V5XSwga2V5LCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgICAgdG1wW2tleV0gPSB2YWxba2V5XVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwYXJlbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFyci5wdXNoKFtwYXJlbnQsIGssIHZhbF0pXG4gICAgICAgIHBhcmVudFtrXSA9IHRtcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRtcFxuICAgICAgfVxuICAgIH1cbiAgICBzdGFjay5wb3AoKVxuICB9XG59XG5cbi8vIHdyYXBzIHJlcGxhY2VyIGZ1bmN0aW9uIHRvIGhhbmRsZSB2YWx1ZXMgd2UgY291bGRuJ3QgcmVwbGFjZVxuLy8gYW5kIG1hcmsgdGhlbSBhcyByZXBsYWNlZCB2YWx1ZVxuZnVuY3Rpb24gcmVwbGFjZUdldHRlclZhbHVlcyAocmVwbGFjZXIpIHtcbiAgcmVwbGFjZXIgPVxuICAgIHR5cGVvZiByZXBsYWNlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gcmVwbGFjZXJcbiAgICAgIDogZnVuY3Rpb24gKGssIHYpIHtcbiAgICAgICAgcmV0dXJuIHZcbiAgICAgIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbCkge1xuICAgIGlmIChyZXBsYWNlclN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwbGFjZXJTdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IHJlcGxhY2VyU3RhY2tbaV1cbiAgICAgICAgaWYgKHBhcnRbMV0gPT09IGtleSAmJiBwYXJ0WzBdID09PSB2YWwpIHtcbiAgICAgICAgICB2YWwgPSBwYXJ0WzJdXG4gICAgICAgICAgcmVwbGFjZXJTdGFjay5zcGxpY2UoaSwgMSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuY2FsbCh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gTWF0aC5tYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJncy5wdXNoKCckJyArIGkpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsIi8vIG9yaWdpbmFsbHkgcHVsbGVkIG91dCBvZiBzaW1wbGUtcGVlclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldEJyb3dzZXJSVEMgKCkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbFxuICB2YXIgd3J0YyA9IHtcbiAgICBSVENQZWVyQ29ubmVjdGlvbjogZ2xvYmFsVGhpcy5SVENQZWVyQ29ubmVjdGlvbiB8fCBnbG9iYWxUaGlzLm1velJUQ1BlZXJDb25uZWN0aW9uIHx8XG4gICAgICBnbG9iYWxUaGlzLndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uLFxuICAgIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjogZ2xvYmFsVGhpcy5SVENTZXNzaW9uRGVzY3JpcHRpb24gfHxcbiAgICAgIGdsb2JhbFRoaXMubW96UlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHx8IGdsb2JhbFRoaXMud2Via2l0UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLFxuICAgIFJUQ0ljZUNhbmRpZGF0ZTogZ2xvYmFsVGhpcy5SVENJY2VDYW5kaWRhdGUgfHwgZ2xvYmFsVGhpcy5tb3pSVENJY2VDYW5kaWRhdGUgfHxcbiAgICAgIGdsb2JhbFRoaXMud2Via2l0UlRDSWNlQ2FuZGlkYXRlXG4gIH1cbiAgaWYgKCF3cnRjLlJUQ1BlZXJDb25uZWN0aW9uKSByZXR1cm4gbnVsbFxuICByZXR1cm4gd3J0Y1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5kZWZpbmVkO1xuXG52YXIgJFN5bnRheEVycm9yID0gU3ludGF4RXJyb3I7XG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG52YXIgZ2V0RXZhbGxlZENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKGV4cHJlc3Npb25TeW50YXgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gJEZ1bmN0aW9uKCdcInVzZSBzdHJpY3RcIjsgcmV0dXJuICgnICsgZXhwcmVzc2lvblN5bnRheCArICcpLmNvbnN0cnVjdG9yOycpKCk7XG5cdH0gY2F0Y2ggKGUpIHt9XG59O1xuXG52YXIgJGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoe30sICcnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdCRnT1BEID0gbnVsbDsgLy8gdGhpcyBpcyBJRSA4LCB3aGljaCBoYXMgYSBicm9rZW4gZ09QRFxuXHR9XG59XG5cbnZhciB0aHJvd1R5cGVFcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoKTtcbn07XG52YXIgVGhyb3dUeXBlRXJyb3IgPSAkZ09QRFxuXHQ/IChmdW5jdGlvbiAoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnMsIG5vLWNhbGxlciwgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0XHRhcmd1bWVudHMuY2FsbGVlOyAvLyBJRSA4IGRvZXMgbm90IHRocm93IGhlcmVcblx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHR9IGNhdGNoIChjYWxsZWVUaHJvd3MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIElFIDggdGhyb3dzIG9uIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJndW1lbnRzLCAnJylcblx0XHRcdFx0cmV0dXJuICRnT1BEKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDtcblx0XHRcdH0gY2F0Y2ggKGdPUER0aHJvd3MpIHtcblx0XHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSgpKVxuXHQ6IHRocm93VHlwZUVycm9yO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBoYXNQcm90byA9IHJlcXVpcmUoJ2hhcy1wcm90bycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCAoXG5cdGhhc1Byb3RvXG5cdFx0PyBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuXHRcdDogbnVsbFxuKTtcblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyB8fCAhZ2V0UHJvdG8gPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogbmVlZHNFdmFsLFxuXHQnJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyVCaWdJbnQlJzogdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQsXG5cdCclQmlnSW50NjRBcnJheSUnOiB0eXBlb2YgQmlnSW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQ2NEFycmF5LFxuXHQnJUJpZ1VpbnQ2NEFycmF5JSc6IHR5cGVvZiBCaWdVaW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdVaW50NjRBcnJheSxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzIHx8ICFnZXRQcm90byA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBNYXAoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJU1hdGglJzogTWF0aCxcblx0JyVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJU9iamVjdCUnOiBPYmplY3QsXG5cdCclcGFyc2VGbG9hdCUnOiBwYXJzZUZsb2F0LFxuXHQnJXBhcnNlSW50JSc6IHBhcnNlSW50LFxuXHQnJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCclUmFuZ2VFcnJvciUnOiBSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6IFJlZmVyZW5jZUVycm9yLFxuXHQnJVJlZmxlY3QlJzogdHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUmVmbGVjdCxcblx0JyVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJVNldCUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNldCxcblx0JyVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyB8fCAhZ2V0UHJvdG8gPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgU2V0KClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlciUnOiB0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2hhcmVkQXJyYXlCdWZmZXIsXG5cdCclU3RyaW5nJSc6IFN0cmluZyxcblx0JyVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzICYmIGdldFByb3RvID8gZ2V0UHJvdG8oJydbU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVTeW1ib2wlJzogaGFzU3ltYm9scyA/IFN5bWJvbCA6IHVuZGVmaW5lZCxcblx0JyVTeW50YXhFcnJvciUnOiAkU3ludGF4RXJyb3IsXG5cdCclVGhyb3dUeXBlRXJyb3IlJzogVGhyb3dUeXBlRXJyb3IsXG5cdCclVHlwZWRBcnJheSUnOiBUeXBlZEFycmF5LFxuXHQnJVR5cGVFcnJvciUnOiAkVHlwZUVycm9yLFxuXHQnJVVpbnQ4QXJyYXklJzogdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhBcnJheSxcblx0JyVVaW50OENsYW1wZWRBcnJheSUnOiB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhDbGFtcGVkQXJyYXksXG5cdCclVWludDE2QXJyYXklJzogdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQxNkFycmF5LFxuXHQnJVVpbnQzMkFycmF5JSc6IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MzJBcnJheSxcblx0JyVVUklFcnJvciUnOiBVUklFcnJvcixcblx0JyVXZWFrTWFwJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAsXG5cdCclV2Vha1JlZiUnOiB0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrUmVmLFxuXHQnJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldFxufTtcblxuaWYgKGdldFByb3RvKSB7XG5cdHRyeSB7XG5cdFx0bnVsbC5lcnJvcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNoYWRvd3JlYWxtL3B1bGwvMzg0I2lzc3VlY29tbWVudC0xMzY0MjY0MjI5XG5cdFx0dmFyIGVycm9yUHJvdG8gPSBnZXRQcm90byhnZXRQcm90byhlKSk7XG5cdFx0SU5UUklOU0lDU1snJUVycm9yLnByb3RvdHlwZSUnXSA9IGVycm9yUHJvdG87XG5cdH1cbn1cblxudmFyIGRvRXZhbCA9IGZ1bmN0aW9uIGRvRXZhbChuYW1lKSB7XG5cdHZhciB2YWx1ZTtcblx0aWYgKG5hbWUgPT09ICclQXN5bmNGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2Z1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3IlJykge1xuXHRcdHZhciBmbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJyk7XG5cdFx0aWYgKGZuKSB7XG5cdFx0XHR2YWx1ZSA9IGZuLnByb3RvdHlwZTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJScpIHtcblx0XHR2YXIgZ2VuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3IlJyk7XG5cdFx0aWYgKGdlbiAmJiBnZXRQcm90bykge1xuXHRcdFx0dmFsdWUgPSBnZXRQcm90byhnZW4ucHJvdG90eXBlKTtcblx0XHR9XG5cdH1cblxuXHRJTlRSSU5TSUNTW25hbWVdID0gdmFsdWU7XG5cblx0cmV0dXJuIHZhbHVlO1xufTtcblxudmFyIExFR0FDWV9BTElBU0VTID0ge1xuXHQnJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b3R5cGUlJzogWydBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvX2VudHJpZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZW50cmllcyddLFxuXHQnJUFycmF5UHJvdG9fZm9yRWFjaCUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdmb3JFYWNoJ10sXG5cdCclQXJyYXlQcm90b19rZXlzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2tleXMnXSxcblx0JyVBcnJheVByb3RvX3ZhbHVlcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICd2YWx1ZXMnXSxcblx0JyVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IFsnQXN5bmNGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVCb29sZWFuUHJvdG90eXBlJSc6IFsnQm9vbGVhbicsICdwcm90b3R5cGUnXSxcblx0JyVEYXRhVmlld1Byb3RvdHlwZSUnOiBbJ0RhdGFWaWV3JywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGVQcm90b3R5cGUlJzogWydEYXRlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUVycm9yUHJvdG90eXBlJSc6IFsnRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRXZhbEVycm9yUHJvdG90eXBlJSc6IFsnRXZhbEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0MzJBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDY0QXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDY0QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRnVuY3Rpb25Qcm90b3R5cGUlJzogWydGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3IlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3JQcm90b3R5cGUlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclSW50OEFycmF5UHJvdG90eXBlJSc6IFsnSW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDE2QXJyYXlQcm90b3R5cGUlJzogWydJbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDMyQXJyYXlQcm90b3R5cGUlJzogWydJbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUpTT05QYXJzZSUnOiBbJ0pTT04nLCAncGFyc2UnXSxcblx0JyVKU09OU3RyaW5naWZ5JSc6IFsnSlNPTicsICdzdHJpbmdpZnknXSxcblx0JyVNYXBQcm90b3R5cGUlJzogWydNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclTnVtYmVyUHJvdG90eXBlJSc6IFsnTnVtYmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJU9iamVjdFByb3RvdHlwZSUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnXSxcblx0JyVPYmpQcm90b190b1N0cmluZyUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndG9TdHJpbmcnXSxcblx0JyVPYmpQcm90b192YWx1ZU9mJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd2YWx1ZU9mJ10sXG5cdCclUHJvbWlzZVByb3RvdHlwZSUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJ10sXG5cdCclUHJvbWlzZVByb3RvX3RoZW4lJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZScsICd0aGVuJ10sXG5cdCclUHJvbWlzZV9hbGwlJzogWydQcm9taXNlJywgJ2FsbCddLFxuXHQnJVByb21pc2VfcmVqZWN0JSc6IFsnUHJvbWlzZScsICdyZWplY3QnXSxcblx0JyVQcm9taXNlX3Jlc29sdmUlJzogWydQcm9taXNlJywgJ3Jlc29sdmUnXSxcblx0JyVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFsnUmFuZ2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBbJ1JlZmVyZW5jZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZ0V4cFByb3RvdHlwZSUnOiBbJ1JlZ0V4cCcsICdwcm90b3R5cGUnXSxcblx0JyVTZXRQcm90b3R5cGUlJzogWydTZXQnLCAncHJvdG90eXBlJ10sXG5cdCclU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydTaGFyZWRBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVTdHJpbmdQcm90b3R5cGUlJzogWydTdHJpbmcnLCAncHJvdG90eXBlJ10sXG5cdCclU3ltYm9sUHJvdG90eXBlJSc6IFsnU3ltYm9sJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bnRheEVycm9yUHJvdG90eXBlJSc6IFsnU3ludGF4RXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZWRBcnJheVByb3RvdHlwZSUnOiBbJ1R5cGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZUVycm9yUHJvdG90eXBlJSc6IFsnVHlwZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4QXJyYXlQcm90b3R5cGUlJzogWydVaW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhDbGFtcGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDE2QXJyYXlQcm90b3R5cGUlJzogWydVaW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVSSUVycm9yUHJvdG90eXBlJSc6IFsnVVJJRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha01hcFByb3RvdHlwZSUnOiBbJ1dlYWtNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha1NldFByb3RvdHlwZSUnOiBbJ1dlYWtTZXQnLCAncHJvdG90eXBlJ11cbn07XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJ2hhcycpO1xudmFyICRjb25jYXQgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgQXJyYXkucHJvdG90eXBlLmNvbmNhdCk7XG52YXIgJHNwbGljZUFwcGx5ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmFwcGx5LCBBcnJheS5wcm90b3R5cGUuc3BsaWNlKTtcbnZhciAkcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyICRzdHJTbGljZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnNsaWNlKTtcbnZhciAkZXhlYyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBSZWdFeHAucHJvdG90eXBlLmV4ZWMpO1xuXG4vKiBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi80LjE3LjE1L2Rpc3QvbG9kYXNoLmpzI0w2NzM1LUw2NzQ0ICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXiUuW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JSQpKS9nO1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nOyAvKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBmdW5jdGlvbiBzdHJpbmdUb1BhdGgoc3RyaW5nKSB7XG5cdHZhciBmaXJzdCA9ICRzdHJTbGljZShzdHJpbmcsIDAsIDEpO1xuXHR2YXIgbGFzdCA9ICRzdHJTbGljZShzdHJpbmcsIC0xKTtcblx0aWYgKGZpcnN0ID09PSAnJScgJiYgbGFzdCAhPT0gJyUnKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCcpO1xuXHR9IGVsc2UgaWYgKGxhc3QgPT09ICclJyAmJiBmaXJzdCAhPT0gJyUnKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCcpO1xuXHR9XG5cdHZhciByZXN1bHQgPSBbXTtcblx0JHJlcGxhY2Uoc3RyaW5nLCByZVByb3BOYW1lLCBmdW5jdGlvbiAobWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuXHRcdHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHF1b3RlID8gJHJlcGxhY2Uoc3ViU3RyaW5nLCByZUVzY2FwZUNoYXIsICckMScpIDogbnVtYmVyIHx8IG1hdGNoO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG4vKiBlbmQgYWRhcHRhdGlvbiAqL1xuXG52YXIgZ2V0QmFzZUludHJpbnNpYyA9IGZ1bmN0aW9uIGdldEJhc2VJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWNOYW1lID0gbmFtZTtcblx0dmFyIGFsaWFzO1xuXHRpZiAoaGFzT3duKExFR0FDWV9BTElBU0VTLCBpbnRyaW5zaWNOYW1lKSkge1xuXHRcdGFsaWFzID0gTEVHQUNZX0FMSUFTRVNbaW50cmluc2ljTmFtZV07XG5cdFx0aW50cmluc2ljTmFtZSA9ICclJyArIGFsaWFzWzBdICsgJyUnO1xuXHR9XG5cblx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNOYW1lKSkge1xuXHRcdHZhciB2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljTmFtZV07XG5cdFx0aWYgKHZhbHVlID09PSBuZWVkc0V2YWwpIHtcblx0XHRcdHZhbHVlID0gZG9FdmFsKGludHJpbnNpY05hbWUpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyAmJiAhYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YWxpYXM6IGFsaWFzLFxuXHRcdFx0bmFtZTogaW50cmluc2ljTmFtZSxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cblxuXHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0IScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZS5sZW5ndGggPT09IDApIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFsbG93TWlzc2luZyAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiYWxsb3dNaXNzaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0fVxuXG5cdGlmICgkZXhlYygvXiU/W14lXSolPyQvLCBuYW1lKSA9PT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2AlYCBtYXkgbm90IGJlIHByZXNlbnQgYW55d2hlcmUgYnV0IGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW50cmluc2ljIG5hbWUnKTtcblx0fVxuXHR2YXIgcGFydHMgPSBzdHJpbmdUb1BhdGgobmFtZSk7XG5cdHZhciBpbnRyaW5zaWNCYXNlTmFtZSA9IHBhcnRzLmxlbmd0aCA+IDAgPyBwYXJ0c1swXSA6ICcnO1xuXG5cdHZhciBpbnRyaW5zaWMgPSBnZXRCYXNlSW50cmluc2ljKCclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnLCBhbGxvd01pc3NpbmcpO1xuXHR2YXIgaW50cmluc2ljUmVhbE5hbWUgPSBpbnRyaW5zaWMubmFtZTtcblx0dmFyIHZhbHVlID0gaW50cmluc2ljLnZhbHVlO1xuXHR2YXIgc2tpcEZ1cnRoZXJDYWNoaW5nID0gZmFsc2U7XG5cblx0dmFyIGFsaWFzID0gaW50cmluc2ljLmFsaWFzO1xuXHRpZiAoYWxpYXMpIHtcblx0XHRpbnRyaW5zaWNCYXNlTmFtZSA9IGFsaWFzWzBdO1xuXHRcdCRzcGxpY2VBcHBseShwYXJ0cywgJGNvbmNhdChbMCwgMV0sIGFsaWFzKSk7XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMSwgaXNPd24gPSB0cnVlOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHR2YXIgcGFydCA9IHBhcnRzW2ldO1xuXHRcdHZhciBmaXJzdCA9ICRzdHJTbGljZShwYXJ0LCAwLCAxKTtcblx0XHR2YXIgbGFzdCA9ICRzdHJTbGljZShwYXJ0LCAtMSk7XG5cdFx0aWYgKFxuXHRcdFx0KFxuXHRcdFx0XHQoZmlyc3QgPT09ICdcIicgfHwgZmlyc3QgPT09IFwiJ1wiIHx8IGZpcnN0ID09PSAnYCcpXG5cdFx0XHRcdHx8IChsYXN0ID09PSAnXCInIHx8IGxhc3QgPT09IFwiJ1wiIHx8IGxhc3QgPT09ICdgJylcblx0XHRcdClcblx0XHRcdCYmIGZpcnN0ICE9PSBsYXN0XG5cdFx0KSB7XG5cdFx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzJyk7XG5cdFx0fVxuXHRcdGlmIChwYXJ0ID09PSAnY29uc3RydWN0b3InIHx8ICFpc093bikge1xuXHRcdFx0c2tpcEZ1cnRoZXJDYWNoaW5nID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpbnRyaW5zaWNCYXNlTmFtZSArPSAnLicgKyBwYXJ0O1xuXHRcdGludHJpbnNpY1JlYWxOYW1lID0gJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJSc7XG5cblx0XHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY1JlYWxOYW1lKSkge1xuXHRcdFx0dmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcblx0XHRcdGlmICghKHBhcnQgaW4gdmFsdWUpKSB7XG5cdFx0XHRcdGlmICghYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Jhc2UgaW50cmluc2ljIGZvciAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZvaWQgdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCRnT1BEICYmIChpICsgMSkgPj0gcGFydHMubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBkZXNjID0gJGdPUEQodmFsdWUsIHBhcnQpO1xuXHRcdFx0XHRpc093biA9ICEhZGVzYztcblxuXHRcdFx0XHQvLyBCeSBjb252ZW50aW9uLCB3aGVuIGEgZGF0YSBwcm9wZXJ0eSBpcyBjb252ZXJ0ZWQgdG8gYW4gYWNjZXNzb3Jcblx0XHRcdFx0Ly8gcHJvcGVydHkgdG8gZW11bGF0ZSBhIGRhdGEgcHJvcGVydHkgdGhhdCBkb2VzIG5vdCBzdWZmZXIgZnJvbVxuXHRcdFx0XHQvLyB0aGUgb3ZlcnJpZGUgbWlzdGFrZSwgdGhhdCBhY2Nlc3NvcidzIGdldHRlciBpcyBtYXJrZWQgd2l0aFxuXHRcdFx0XHQvLyBhbiBgb3JpZ2luYWxWYWx1ZWAgcHJvcGVydHkuIEhlcmUsIHdoZW4gd2UgZGV0ZWN0IHRoaXMsIHdlXG5cdFx0XHRcdC8vIHVwaG9sZCB0aGUgaWxsdXNpb24gYnkgcHJldGVuZGluZyB0byBzZWUgdGhhdCBvcmlnaW5hbCBkYXRhXG5cdFx0XHRcdC8vIHByb3BlcnR5LCBpLmUuLCByZXR1cm5pbmcgdGhlIHZhbHVlIHJhdGhlciB0aGFuIHRoZSBnZXR0ZXJcblx0XHRcdFx0Ly8gaXRzZWxmLlxuXHRcdFx0XHRpZiAoaXNPd24gJiYgJ2dldCcgaW4gZGVzYyAmJiAhKCdvcmlnaW5hbFZhbHVlJyBpbiBkZXNjLmdldCkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGRlc2MuZ2V0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlzT3duID0gaGFzT3duKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT3duICYmICFza2lwRnVydGhlckNhY2hpbmcpIHtcblx0XHRcdFx0SU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufTtcbiIsInZhciB0b3BMZXZlbCA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDpcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9XG52YXIgbWluRG9jID0gcmVxdWlyZSgnbWluLWRvY3VtZW50Jyk7XG5cbnZhciBkb2NjeTtcblxuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkb2NjeSA9IGRvY3VtZW50O1xufSBlbHNlIHtcbiAgICBkb2NjeSA9IHRvcExldmVsWydfX0dMT0JBTF9ET0NVTUVOVF9DQUNIRUA0J107XG5cbiAgICBpZiAoIWRvY2N5KSB7XG4gICAgICAgIGRvY2N5ID0gdG9wTGV2ZWxbJ19fR0xPQkFMX0RPQ1VNRU5UX0NBQ0hFQDQnXSA9IG1pbkRvYztcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZG9jY3k7XG4iLCJ2YXIgd2luO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHdpbiA9IHdpbmRvdztcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHdpbiA9IGdsb2JhbDtcbn0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpe1xuICAgIHdpbiA9IHNlbGY7XG59IGVsc2Uge1xuICAgIHdpbiA9IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdpbjtcbiIsIi8qIGdsb2JhbCBCbG9iIEZpbGUgKi9cblxuLypcbiAqIE1vZHVsZSByZXF1aXJlbWVudHMuXG4gKi9cblxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgd2l0aE5hdGl2ZUJsb2IgPSB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHRvU3RyaW5nLmNhbGwoQmxvYikgPT09ICdbb2JqZWN0IEJsb2JDb25zdHJ1Y3Rvcl0nO1xudmFyIHdpdGhOYXRpdmVGaWxlID0gdHlwZW9mIEZpbGUgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBGaWxlICE9PSAndW5kZWZpbmVkJyAmJiB0b1N0cmluZy5jYWxsKEZpbGUpID09PSAnW29iamVjdCBGaWxlQ29uc3RydWN0b3JdJztcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc0JpbmFyeTtcblxuLyoqXG4gKiBDaGVja3MgZm9yIGJpbmFyeSBkYXRhLlxuICpcbiAqIFN1cHBvcnRzIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEJsb2IgYW5kIEZpbGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFueXRoaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGhhc0JpbmFyeSAob2JqKSB7XG4gIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGhhc0JpbmFyeShvYmpbaV0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoKHR5cGVvZiBCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgQnVmZmVyLmlzQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB8fFxuICAgICh0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8XG4gICAgKHdpdGhOYXRpdmVCbG9iICYmIG9iaiBpbnN0YW5jZW9mIEJsb2IpIHx8XG4gICAgKHdpdGhOYXRpdmVGaWxlICYmIG9iaiBpbnN0YW5jZW9mIEZpbGUpXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vQXV0b21hdHRpYy9oYXMtYmluYXJ5L3B1bGwvNFxuICBpZiAob2JqLnRvSlNPTiAmJiB0eXBlb2Ygb2JqLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJyAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGhhc0JpbmFyeShvYmoudG9KU09OKCksIHRydWUpO1xuICB9XG5cbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpICYmIGhhc0JpbmFyeShvYmpba2V5XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICpcbiAqIExvZ2ljIGJvcnJvd2VkIGZyb20gTW9kZXJuaXpyOlxuICpcbiAqICAgLSBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL21hc3Rlci9mZWF0dXJlLWRldGVjdHMvY29ycy5qc1xuICovXG5cbnRyeSB7XG4gIG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICd3aXRoQ3JlZGVudGlhbHMnIGluIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xufSBjYXRjaCAoZXJyKSB7XG4gIC8vIGlmIFhNTEh0dHAgc3VwcG9ydCBpcyBkaXNhYmxlZCBpbiBJRSB0aGVuIGl0IHdpbGwgdGhyb3dcbiAgLy8gd2hlbiB0cnlpbmcgdG8gY3JlYXRlXG4gIG1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB0ZXN0ID0ge1xuXHRmb286IHt9XG59O1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNQcm90bygpIHtcblx0cmV0dXJuIHsgX19wcm90b19fOiB0ZXN0IH0uZm9vID09PSB0ZXN0LmZvbyAmJiAhKHsgX19wcm90b19fOiBudWxsIH0gaW5zdGFuY2VvZiAkT2JqZWN0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBvcmlnU3ltYm9sID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sO1xudmFyIGhhc1N5bWJvbFNoYW0gPSByZXF1aXJlKCcuL3NoYW1zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzTmF0aXZlU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sKCdmb28nKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sKCdiYXInKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0cmV0dXJuIGhhc1N5bWJvbFNoYW0oKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBhdHRyaWJ1dGVUb1Byb3BlcnR5XG5cbnZhciB0cmFuc2Zvcm0gPSB7XG4gICdjbGFzcyc6ICdjbGFzc05hbWUnLFxuICAnZm9yJzogJ2h0bWxGb3InLFxuICAnaHR0cC1lcXVpdic6ICdodHRwRXF1aXYnXG59XG5cbmZ1bmN0aW9uIGF0dHJpYnV0ZVRvUHJvcGVydHkgKGgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YWdOYW1lLCBhdHRycywgY2hpbGRyZW4pIHtcbiAgICBmb3IgKHZhciBhdHRyIGluIGF0dHJzKSB7XG4gICAgICBpZiAoYXR0ciBpbiB0cmFuc2Zvcm0pIHtcbiAgICAgICAgYXR0cnNbdHJhbnNmb3JtW2F0dHJdXSA9IGF0dHJzW2F0dHJdXG4gICAgICAgIGRlbGV0ZSBhdHRyc1thdHRyXVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaCh0YWdOYW1lLCBhdHRycywgY2hpbGRyZW4pXG4gIH1cbn1cbiIsInZhciBhdHRyVG9Qcm9wID0gcmVxdWlyZSgnaHlwZXJzY3JpcHQtYXR0cmlidXRlLXRvLXByb3BlcnR5JylcblxudmFyIFZBUiA9IDAsIFRFWFQgPSAxLCBPUEVOID0gMiwgQ0xPU0UgPSAzLCBBVFRSID0gNFxudmFyIEFUVFJfS0VZID0gNSwgQVRUUl9LRVlfVyA9IDZcbnZhciBBVFRSX1ZBTFVFX1cgPSA3LCBBVFRSX1ZBTFVFID0gOFxudmFyIEFUVFJfVkFMVUVfU1EgPSA5LCBBVFRSX1ZBTFVFX0RRID0gMTBcbnZhciBBVFRSX0VRID0gMTEsIEFUVFJfQlJFQUsgPSAxMlxudmFyIENPTU1FTlQgPSAxM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoLCBvcHRzKSB7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9XG4gIHZhciBjb25jYXQgPSBvcHRzLmNvbmNhdCB8fCBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBTdHJpbmcoYSkgKyBTdHJpbmcoYilcbiAgfVxuICBpZiAob3B0cy5hdHRyVG9Qcm9wICE9PSBmYWxzZSkge1xuICAgIGggPSBhdHRyVG9Qcm9wKGgpXG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZ3MpIHtcbiAgICB2YXIgc3RhdGUgPSBURVhULCByZWcgPSAnJ1xuICAgIHZhciBhcmdsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgdmFyIHBhcnRzID0gW11cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPCBhcmdsZW4gLSAxKSB7XG4gICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaSsxXVxuICAgICAgICB2YXIgcCA9IHBhcnNlKHN0cmluZ3NbaV0pXG4gICAgICAgIHZhciB4c3RhdGUgPSBzdGF0ZVxuICAgICAgICBpZiAoeHN0YXRlID09PSBBVFRSX1ZBTFVFX0RRKSB4c3RhdGUgPSBBVFRSX1ZBTFVFXG4gICAgICAgIGlmICh4c3RhdGUgPT09IEFUVFJfVkFMVUVfU1EpIHhzdGF0ZSA9IEFUVFJfVkFMVUVcbiAgICAgICAgaWYgKHhzdGF0ZSA9PT0gQVRUUl9WQUxVRV9XKSB4c3RhdGUgPSBBVFRSX1ZBTFVFXG4gICAgICAgIGlmICh4c3RhdGUgPT09IEFUVFIpIHhzdGF0ZSA9IEFUVFJfS0VZXG4gICAgICAgIGlmICh4c3RhdGUgPT09IE9QRU4pIHtcbiAgICAgICAgICBpZiAocmVnID09PSAnLycpIHtcbiAgICAgICAgICAgIHAucHVzaChbIE9QRU4sICcvJywgYXJnIF0pXG4gICAgICAgICAgICByZWcgPSAnJ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwLnB1c2goWyBPUEVOLCBhcmcgXSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoeHN0YXRlID09PSBDT01NRU5UICYmIG9wdHMuY29tbWVudHMpIHtcbiAgICAgICAgICByZWcgKz0gU3RyaW5nKGFyZylcbiAgICAgICAgfSBlbHNlIGlmICh4c3RhdGUgIT09IENPTU1FTlQpIHtcbiAgICAgICAgICBwLnB1c2goWyBWQVIsIHhzdGF0ZSwgYXJnIF0pXG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaC5hcHBseShwYXJ0cywgcClcbiAgICAgIH0gZWxzZSBwYXJ0cy5wdXNoLmFwcGx5KHBhcnRzLCBwYXJzZShzdHJpbmdzW2ldKSlcbiAgICB9XG5cbiAgICB2YXIgdHJlZSA9IFtudWxsLHt9LFtdXVxuICAgIHZhciBzdGFjayA9IFtbdHJlZSwtMV1dXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGN1ciA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXVswXVxuICAgICAgdmFyIHAgPSBwYXJ0c1tpXSwgcyA9IHBbMF1cbiAgICAgIGlmIChzID09PSBPUEVOICYmIC9eXFwvLy50ZXN0KHBbMV0pKSB7XG4gICAgICAgIHZhciBpeCA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXVsxXVxuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMSkge1xuICAgICAgICAgIHN0YWNrLnBvcCgpXG4gICAgICAgICAgc3RhY2tbc3RhY2subGVuZ3RoLTFdWzBdWzJdW2l4XSA9IGgoXG4gICAgICAgICAgICBjdXJbMF0sIGN1clsxXSwgY3VyWzJdLmxlbmd0aCA/IGN1clsyXSA6IHVuZGVmaW5lZFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzID09PSBPUEVOKSB7XG4gICAgICAgIHZhciBjID0gW3BbMV0se30sW11dXG4gICAgICAgIGN1clsyXS5wdXNoKGMpXG4gICAgICAgIHN0YWNrLnB1c2goW2MsY3VyWzJdLmxlbmd0aC0xXSlcbiAgICAgIH0gZWxzZSBpZiAocyA9PT0gQVRUUl9LRVkgfHwgKHMgPT09IFZBUiAmJiBwWzFdID09PSBBVFRSX0tFWSkpIHtcbiAgICAgICAgdmFyIGtleSA9ICcnXG4gICAgICAgIHZhciBjb3B5S2V5XG4gICAgICAgIGZvciAoOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocGFydHNbaV1bMF0gPT09IEFUVFJfS0VZKSB7XG4gICAgICAgICAgICBrZXkgPSBjb25jYXQoa2V5LCBwYXJ0c1tpXVsxXSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcnRzW2ldWzBdID09PSBWQVIgJiYgcGFydHNbaV1bMV0gPT09IEFUVFJfS0VZKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcnRzW2ldWzJdID09PSAnb2JqZWN0JyAmJiAha2V5KSB7XG4gICAgICAgICAgICAgIGZvciAoY29weUtleSBpbiBwYXJ0c1tpXVsyXSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0c1tpXVsyXS5oYXNPd25Qcm9wZXJ0eShjb3B5S2V5KSAmJiAhY3VyWzFdW2NvcHlLZXldKSB7XG4gICAgICAgICAgICAgICAgICBjdXJbMV1bY29weUtleV0gPSBwYXJ0c1tpXVsyXVtjb3B5S2V5XVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAga2V5ID0gY29uY2F0KGtleSwgcGFydHNbaV1bMl0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzW2ldWzBdID09PSBBVFRSX0VRKSBpKytcbiAgICAgICAgdmFyIGogPSBpXG4gICAgICAgIGZvciAoOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocGFydHNbaV1bMF0gPT09IEFUVFJfVkFMVUUgfHwgcGFydHNbaV1bMF0gPT09IEFUVFJfS0VZKSB7XG4gICAgICAgICAgICBpZiAoIWN1clsxXVtrZXldKSBjdXJbMV1ba2V5XSA9IHN0cmZuKHBhcnRzW2ldWzFdKVxuICAgICAgICAgICAgZWxzZSBwYXJ0c1tpXVsxXT09PVwiXCIgfHwgKGN1clsxXVtrZXldID0gY29uY2F0KGN1clsxXVtrZXldLCBwYXJ0c1tpXVsxXSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFydHNbaV1bMF0gPT09IFZBUlxuICAgICAgICAgICYmIChwYXJ0c1tpXVsxXSA9PT0gQVRUUl9WQUxVRSB8fCBwYXJ0c1tpXVsxXSA9PT0gQVRUUl9LRVkpKSB7XG4gICAgICAgICAgICBpZiAoIWN1clsxXVtrZXldKSBjdXJbMV1ba2V5XSA9IHN0cmZuKHBhcnRzW2ldWzJdKVxuICAgICAgICAgICAgZWxzZSBwYXJ0c1tpXVsyXT09PVwiXCIgfHwgKGN1clsxXVtrZXldID0gY29uY2F0KGN1clsxXVtrZXldLCBwYXJ0c1tpXVsyXSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCAmJiAhY3VyWzFdW2tleV0gJiYgaSA9PT0galxuICAgICAgICAgICAgJiYgKHBhcnRzW2ldWzBdID09PSBDTE9TRSB8fCBwYXJ0c1tpXVswXSA9PT0gQVRUUl9CUkVBSykpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNib29sZWFuLWF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIGlzIGZhbHN5LCBub3Qgd2VsbCBiZWhhdmVkIHZhbHVlIGluIGJyb3dzZXJcbiAgICAgICAgICAgICAgY3VyWzFdW2tleV0gPSBrZXkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcnRzW2ldWzBdID09PSBDTE9TRSkge1xuICAgICAgICAgICAgICBpLS1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHMgPT09IEFUVFJfS0VZKSB7XG4gICAgICAgIGN1clsxXVtwWzFdXSA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAocyA9PT0gVkFSICYmIHBbMV0gPT09IEFUVFJfS0VZKSB7XG4gICAgICAgIGN1clsxXVtwWzJdXSA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAocyA9PT0gQ0xPU0UpIHtcbiAgICAgICAgaWYgKHNlbGZDbG9zaW5nKGN1clswXSkgJiYgc3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGl4ID0gc3RhY2tbc3RhY2subGVuZ3RoLTFdWzFdXG4gICAgICAgICAgc3RhY2sucG9wKClcbiAgICAgICAgICBzdGFja1tzdGFjay5sZW5ndGgtMV1bMF1bMl1baXhdID0gaChcbiAgICAgICAgICAgIGN1clswXSwgY3VyWzFdLCBjdXJbMl0ubGVuZ3RoID8gY3VyWzJdIDogdW5kZWZpbmVkXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHMgPT09IFZBUiAmJiBwWzFdID09PSBURVhUKSB7XG4gICAgICAgIGlmIChwWzJdID09PSB1bmRlZmluZWQgfHwgcFsyXSA9PT0gbnVsbCkgcFsyXSA9ICcnXG4gICAgICAgIGVsc2UgaWYgKCFwWzJdKSBwWzJdID0gY29uY2F0KCcnLCBwWzJdKVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwWzJdWzBdKSkge1xuICAgICAgICAgIGN1clsyXS5wdXNoLmFwcGx5KGN1clsyXSwgcFsyXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJbMl0ucHVzaChwWzJdKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHMgPT09IFRFWFQpIHtcbiAgICAgICAgY3VyWzJdLnB1c2gocFsxXSlcbiAgICAgIH0gZWxzZSBpZiAocyA9PT0gQVRUUl9FUSB8fCBzID09PSBBVFRSX0JSRUFLKSB7XG4gICAgICAgIC8vIG5vLW9wXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaGFuZGxlZDogJyArIHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRyZWVbMl0ubGVuZ3RoID4gMSAmJiAvXlxccyokLy50ZXN0KHRyZWVbMl1bMF0pKSB7XG4gICAgICB0cmVlWzJdLnNoaWZ0KClcbiAgICB9XG5cbiAgICBpZiAodHJlZVsyXS5sZW5ndGggPiAyXG4gICAgfHwgKHRyZWVbMl0ubGVuZ3RoID09PSAyICYmIC9cXFMvLnRlc3QodHJlZVsyXVsxXSkpKSB7XG4gICAgICBpZiAob3B0cy5jcmVhdGVGcmFnbWVudCkgcmV0dXJuIG9wdHMuY3JlYXRlRnJhZ21lbnQodHJlZVsyXSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ211bHRpcGxlIHJvb3QgZWxlbWVudHMgbXVzdCBiZSB3cmFwcGVkIGluIGFuIGVuY2xvc2luZyB0YWcnXG4gICAgICApXG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHRyZWVbMl1bMF0pICYmIHR5cGVvZiB0cmVlWzJdWzBdWzBdID09PSAnc3RyaW5nJ1xuICAgICYmIEFycmF5LmlzQXJyYXkodHJlZVsyXVswXVsyXSkpIHtcbiAgICAgIHRyZWVbMl1bMF0gPSBoKHRyZWVbMl1bMF1bMF0sIHRyZWVbMl1bMF1bMV0sIHRyZWVbMl1bMF1bMl0pXG4gICAgfVxuICAgIHJldHVybiB0cmVlWzJdWzBdXG5cbiAgICBmdW5jdGlvbiBwYXJzZSAoc3RyKSB7XG4gICAgICB2YXIgcmVzID0gW11cbiAgICAgIGlmIChzdGF0ZSA9PT0gQVRUUl9WQUxVRV9XKSBzdGF0ZSA9IEFUVFJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJBdChpKVxuICAgICAgICBpZiAoc3RhdGUgPT09IFRFWFQgJiYgYyA9PT0gJzwnKSB7XG4gICAgICAgICAgaWYgKHJlZy5sZW5ndGgpIHJlcy5wdXNoKFtURVhULCByZWddKVxuICAgICAgICAgIHJlZyA9ICcnXG4gICAgICAgICAgc3RhdGUgPSBPUEVOXG4gICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJz4nICYmICFxdW90KHN0YXRlKSAmJiBzdGF0ZSAhPT0gQ09NTUVOVCkge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gT1BFTiAmJiByZWcubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXMucHVzaChbT1BFTixyZWddKVxuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFJfS0VZKSB7XG4gICAgICAgICAgICByZXMucHVzaChbQVRUUl9LRVkscmVnXSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX1ZBTFVFICYmIHJlZy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKFtBVFRSX1ZBTFVFLHJlZ10pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcy5wdXNoKFtDTE9TRV0pXG4gICAgICAgICAgcmVnID0gJydcbiAgICAgICAgICBzdGF0ZSA9IFRFWFRcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQ09NTUVOVCAmJiAvLSQvLnRlc3QocmVnKSAmJiBjID09PSAnLScpIHtcbiAgICAgICAgICBpZiAob3B0cy5jb21tZW50cykge1xuICAgICAgICAgICAgcmVzLnB1c2goW0FUVFJfVkFMVUUscmVnLnN1YnN0cigwLCByZWcubGVuZ3RoIC0gMSldKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWcgPSAnJ1xuICAgICAgICAgIHN0YXRlID0gVEVYVFxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBPUEVOICYmIC9eIS0tJC8udGVzdChyZWcpKSB7XG4gICAgICAgICAgaWYgKG9wdHMuY29tbWVudHMpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKFtPUEVOLCByZWddLFtBVFRSX0tFWSwnY29tbWVudCddLFtBVFRSX0VRXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVnID0gY1xuICAgICAgICAgIHN0YXRlID0gQ09NTUVOVFxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBURVhUIHx8IHN0YXRlID09PSBDT01NRU5UKSB7XG4gICAgICAgICAgcmVnICs9IGNcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gT1BFTiAmJiBjID09PSAnLycgJiYgcmVnLmxlbmd0aCkge1xuICAgICAgICAgIC8vIG5vLW9wLCBzZWxmIGNsb3NpbmcgdGFnIHdpdGhvdXQgYSBzcGFjZSA8YnIvPlxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBPUEVOICYmIC9cXHMvLnRlc3QoYykpIHtcbiAgICAgICAgICBpZiAocmVnLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzLnB1c2goW09QRU4sIHJlZ10pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZyA9ICcnXG4gICAgICAgICAgc3RhdGUgPSBBVFRSXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IE9QRU4pIHtcbiAgICAgICAgICByZWcgKz0gY1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSICYmIC9bXlxcc1wiJz0vXS8udGVzdChjKSkge1xuICAgICAgICAgIHN0YXRlID0gQVRUUl9LRVlcbiAgICAgICAgICByZWcgPSBjXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFIgJiYgL1xccy8udGVzdChjKSkge1xuICAgICAgICAgIGlmIChyZWcubGVuZ3RoKSByZXMucHVzaChbQVRUUl9LRVkscmVnXSlcbiAgICAgICAgICByZXMucHVzaChbQVRUUl9CUkVBS10pXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFJfS0VZICYmIC9cXHMvLnRlc3QoYykpIHtcbiAgICAgICAgICByZXMucHVzaChbQVRUUl9LRVkscmVnXSlcbiAgICAgICAgICByZWcgPSAnJ1xuICAgICAgICAgIHN0YXRlID0gQVRUUl9LRVlfV1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX0tFWSAmJiBjID09PSAnPScpIHtcbiAgICAgICAgICByZXMucHVzaChbQVRUUl9LRVkscmVnXSxbQVRUUl9FUV0pXG4gICAgICAgICAgcmVnID0gJydcbiAgICAgICAgICBzdGF0ZSA9IEFUVFJfVkFMVUVfV1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX0tFWSkge1xuICAgICAgICAgIHJlZyArPSBjXG4gICAgICAgIH0gZWxzZSBpZiAoKHN0YXRlID09PSBBVFRSX0tFWV9XIHx8IHN0YXRlID09PSBBVFRSKSAmJiBjID09PSAnPScpIHtcbiAgICAgICAgICByZXMucHVzaChbQVRUUl9FUV0pXG4gICAgICAgICAgc3RhdGUgPSBBVFRSX1ZBTFVFX1dcbiAgICAgICAgfSBlbHNlIGlmICgoc3RhdGUgPT09IEFUVFJfS0VZX1cgfHwgc3RhdGUgPT09IEFUVFIpICYmICEvXFxzLy50ZXN0KGMpKSB7XG4gICAgICAgICAgcmVzLnB1c2goW0FUVFJfQlJFQUtdKVxuICAgICAgICAgIGlmICgvW1xcdy1dLy50ZXN0KGMpKSB7XG4gICAgICAgICAgICByZWcgKz0gY1xuICAgICAgICAgICAgc3RhdGUgPSBBVFRSX0tFWVxuICAgICAgICAgIH0gZWxzZSBzdGF0ZSA9IEFUVFJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9WQUxVRV9XICYmIGMgPT09ICdcIicpIHtcbiAgICAgICAgICBzdGF0ZSA9IEFUVFJfVkFMVUVfRFFcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9WQUxVRV9XICYmIGMgPT09IFwiJ1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBBVFRSX1ZBTFVFX1NRXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFJfVkFMVUVfRFEgJiYgYyA9PT0gJ1wiJykge1xuICAgICAgICAgIHJlcy5wdXNoKFtBVFRSX1ZBTFVFLHJlZ10sW0FUVFJfQlJFQUtdKVxuICAgICAgICAgIHJlZyA9ICcnXG4gICAgICAgICAgc3RhdGUgPSBBVFRSXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFJfVkFMVUVfU1EgJiYgYyA9PT0gXCInXCIpIHtcbiAgICAgICAgICByZXMucHVzaChbQVRUUl9WQUxVRSxyZWddLFtBVFRSX0JSRUFLXSlcbiAgICAgICAgICByZWcgPSAnJ1xuICAgICAgICAgIHN0YXRlID0gQVRUUlxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX1ZBTFVFX1cgJiYgIS9cXHMvLnRlc3QoYykpIHtcbiAgICAgICAgICBzdGF0ZSA9IEFUVFJfVkFMVUVcbiAgICAgICAgICBpLS1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9WQUxVRSAmJiAvXFxzLy50ZXN0KGMpKSB7XG4gICAgICAgICAgcmVzLnB1c2goW0FUVFJfVkFMVUUscmVnXSxbQVRUUl9CUkVBS10pXG4gICAgICAgICAgcmVnID0gJydcbiAgICAgICAgICBzdGF0ZSA9IEFUVFJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9WQUxVRSB8fCBzdGF0ZSA9PT0gQVRUUl9WQUxVRV9TUVxuICAgICAgICB8fCBzdGF0ZSA9PT0gQVRUUl9WQUxVRV9EUSkge1xuICAgICAgICAgIHJlZyArPSBjXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZSA9PT0gVEVYVCAmJiByZWcubGVuZ3RoKSB7XG4gICAgICAgIHJlcy5wdXNoKFtURVhULHJlZ10pXG4gICAgICAgIHJlZyA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX1ZBTFVFICYmIHJlZy5sZW5ndGgpIHtcbiAgICAgICAgcmVzLnB1c2goW0FUVFJfVkFMVUUscmVnXSlcbiAgICAgICAgcmVnID0gJydcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFJfVkFMVUVfRFEgJiYgcmVnLmxlbmd0aCkge1xuICAgICAgICByZXMucHVzaChbQVRUUl9WQUxVRSxyZWddKVxuICAgICAgICByZWcgPSAnJ1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9WQUxVRV9TUSAmJiByZWcubGVuZ3RoKSB7XG4gICAgICAgIHJlcy5wdXNoKFtBVFRSX1ZBTFVFLHJlZ10pXG4gICAgICAgIHJlZyA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX0tFWSkge1xuICAgICAgICByZXMucHVzaChbQVRUUl9LRVkscmVnXSlcbiAgICAgICAgcmVnID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdHJmbiAoeCkge1xuICAgIGlmICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHhcbiAgICBlbHNlIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHJldHVybiB4XG4gICAgZWxzZSBpZiAoeCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHJldHVybiB4XG4gICAgZWxzZSBpZiAoeCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQpIHJldHVybiB4XG4gICAgZWxzZSByZXR1cm4gY29uY2F0KCcnLCB4KVxuICB9XG59XG5cbmZ1bmN0aW9uIHF1b3QgKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZSA9PT0gQVRUUl9WQUxVRV9TUSB8fCBzdGF0ZSA9PT0gQVRUUl9WQUxVRV9EUVxufVxuXG52YXIgY2xvc2VSRSA9IFJlZ0V4cCgnXignICsgW1xuICAnYXJlYScsICdiYXNlJywgJ2Jhc2Vmb250JywgJ2Jnc291bmQnLCAnYnInLCAnY29sJywgJ2NvbW1hbmQnLCAnZW1iZWQnLFxuICAnZnJhbWUnLCAnaHInLCAnaW1nJywgJ2lucHV0JywgJ2lzaW5kZXgnLCAna2V5Z2VuJywgJ2xpbmsnLCAnbWV0YScsICdwYXJhbScsXG4gICdzb3VyY2UnLCAndHJhY2snLCAnd2JyJywgJyEtLScsXG4gIC8vIFNWRyBUQUdTXG4gICdhbmltYXRlJywgJ2FuaW1hdGVUcmFuc2Zvcm0nLCAnY2lyY2xlJywgJ2N1cnNvcicsICdkZXNjJywgJ2VsbGlwc2UnLFxuICAnZmVCbGVuZCcsICdmZUNvbG9yTWF0cml4JywgJ2ZlQ29tcG9zaXRlJyxcbiAgJ2ZlQ29udm9sdmVNYXRyaXgnLCAnZmVEaWZmdXNlTGlnaHRpbmcnLCAnZmVEaXNwbGFjZW1lbnRNYXAnLFxuICAnZmVEaXN0YW50TGlnaHQnLCAnZmVGbG9vZCcsICdmZUZ1bmNBJywgJ2ZlRnVuY0InLCAnZmVGdW5jRycsICdmZUZ1bmNSJyxcbiAgJ2ZlR2F1c3NpYW5CbHVyJywgJ2ZlSW1hZ2UnLCAnZmVNZXJnZU5vZGUnLCAnZmVNb3JwaG9sb2d5JyxcbiAgJ2ZlT2Zmc2V0JywgJ2ZlUG9pbnRMaWdodCcsICdmZVNwZWN1bGFyTGlnaHRpbmcnLCAnZmVTcG90TGlnaHQnLCAnZmVUaWxlJyxcbiAgJ2ZlVHVyYnVsZW5jZScsICdmb250LWZhY2UtZm9ybWF0JywgJ2ZvbnQtZmFjZS1uYW1lJywgJ2ZvbnQtZmFjZS11cmknLFxuICAnZ2x5cGgnLCAnZ2x5cGhSZWYnLCAnaGtlcm4nLCAnaW1hZ2UnLCAnbGluZScsICdtaXNzaW5nLWdseXBoJywgJ21wYXRoJyxcbiAgJ3BhdGgnLCAncG9seWdvbicsICdwb2x5bGluZScsICdyZWN0JywgJ3NldCcsICdzdG9wJywgJ3RyZWYnLCAndXNlJywgJ3ZpZXcnLFxuICAndmtlcm4nXG5dLmpvaW4oJ3wnKSArICcpKD86W1xcLiNdW2EtekEtWjAtOVxcdTAwN0YtXFx1RkZGRl86LV0rKSokJylcbmZ1bmN0aW9uIHNlbGZDbG9zaW5nICh0YWcpIHsgcmV0dXJuIGNsb3NlUkUudGVzdCh0YWcpIH1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIF9jbGFzc0NhbGxDaGVjayA9IHJlcXVpcmUoJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcbnZhciBfY3JlYXRlQ2xhc3MgPSByZXF1aXJlKCdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdExlZ2FjeSAoZSkgeyByZXR1cm4gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ2RlZmF1bHQnIGluIGUgPyBlIDogeyAnZGVmYXVsdCc6IGUgfTsgfVxuXG52YXIgX2NsYXNzQ2FsbENoZWNrX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShfY2xhc3NDYWxsQ2hlY2spO1xudmFyIF9jcmVhdGVDbGFzc19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koX2NyZWF0ZUNsYXNzKTtcblxudmFyIGFyciA9IFtdO1xudmFyIGVhY2ggPSBhcnIuZm9yRWFjaDtcbnZhciBzbGljZSA9IGFyci5zbGljZTtcbmZ1bmN0aW9uIGRlZmF1bHRzKG9iaikge1xuICBlYWNoLmNhbGwoc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLCBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKG9ialtwcm9wXSA9PT0gdW5kZWZpbmVkKSBvYmpbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbnZhciBmaWVsZENvbnRlbnRSZWdFeHAgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSskLztcblxudmFyIHNlcmlhbGl6ZUNvb2tpZSA9IGZ1bmN0aW9uIHNlcmlhbGl6ZUNvb2tpZShuYW1lLCB2YWwsIG9wdGlvbnMpIHtcbiAgdmFyIG9wdCA9IG9wdGlvbnMgfHwge307XG4gIG9wdC5wYXRoID0gb3B0LnBhdGggfHwgJy8nO1xuICB2YXIgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsKTtcbiAgdmFyIHN0ciA9IFwiXCIuY29uY2F0KG5hbWUsIFwiPVwiKS5jb25jYXQodmFsdWUpO1xuXG4gIGlmIChvcHQubWF4QWdlID4gMCkge1xuICAgIHZhciBtYXhBZ2UgPSBvcHQubWF4QWdlIC0gMDtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKG1heEFnZSkpIHRocm93IG5ldyBFcnJvcignbWF4QWdlIHNob3VsZCBiZSBhIE51bWJlcicpO1xuICAgIHN0ciArPSBcIjsgTWF4LUFnZT1cIi5jb25jYXQoTWF0aC5mbG9vcihtYXhBZ2UpKTtcbiAgfVxuXG4gIGlmIChvcHQuZG9tYWluKSB7XG4gICAgaWYgKCFmaWVsZENvbnRlbnRSZWdFeHAudGVzdChvcHQuZG9tYWluKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIGRvbWFpbiBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgc3RyICs9IFwiOyBEb21haW49XCIuY29uY2F0KG9wdC5kb21haW4pO1xuICB9XG5cbiAgaWYgKG9wdC5wYXRoKSB7XG4gICAgaWYgKCFmaWVsZENvbnRlbnRSZWdFeHAudGVzdChvcHQucGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBwYXRoIGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gXCI7IFBhdGg9XCIuY29uY2F0KG9wdC5wYXRoKTtcbiAgfVxuXG4gIGlmIChvcHQuZXhwaXJlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0LmV4cGlyZXMudG9VVENTdHJpbmcgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBleHBpcmVzIGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gXCI7IEV4cGlyZXM9XCIuY29uY2F0KG9wdC5leHBpcmVzLnRvVVRDU3RyaW5nKCkpO1xuICB9XG5cbiAgaWYgKG9wdC5odHRwT25seSkgc3RyICs9ICc7IEh0dHBPbmx5JztcbiAgaWYgKG9wdC5zZWN1cmUpIHN0ciArPSAnOyBTZWN1cmUnO1xuXG4gIGlmIChvcHQuc2FtZVNpdGUpIHtcbiAgICB2YXIgc2FtZVNpdGUgPSB0eXBlb2Ygb3B0LnNhbWVTaXRlID09PSAnc3RyaW5nJyA/IG9wdC5zYW1lU2l0ZS50b0xvd2VyQ2FzZSgpIDogb3B0LnNhbWVTaXRlO1xuXG4gICAgc3dpdGNoIChzYW1lU2l0ZSkge1xuICAgICAgY2FzZSB0cnVlOlxuICAgICAgICBzdHIgKz0gJzsgU2FtZVNpdGU9U3RyaWN0JztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xheCc6XG4gICAgICAgIHN0ciArPSAnOyBTYW1lU2l0ZT1MYXgnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3RyaWN0JzpcbiAgICAgICAgc3RyICs9ICc7IFNhbWVTaXRlPVN0cmljdCc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdub25lJzpcbiAgICAgICAgc3RyICs9ICc7IFNhbWVTaXRlPU5vbmUnO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIHNhbWVTaXRlIGlzIGludmFsaWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxudmFyIGNvb2tpZSA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUobmFtZSwgdmFsdWUsIG1pbnV0ZXMsIGRvbWFpbikge1xuICAgIHZhciBjb29raWVPcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB7XG4gICAgICBwYXRoOiAnLycsXG4gICAgICBzYW1lU2l0ZTogJ3N0cmljdCdcbiAgICB9O1xuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIGNvb2tpZU9wdGlvbnMuZXhwaXJlcyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb29raWVPcHRpb25zLmV4cGlyZXMuc2V0VGltZShjb29raWVPcHRpb25zLmV4cGlyZXMuZ2V0VGltZSgpICsgbWludXRlcyAqIDYwICogMTAwMCk7XG4gICAgfVxuXG4gICAgaWYgKGRvbWFpbikgY29va2llT3B0aW9ucy5kb21haW4gPSBkb21haW47XG4gICAgZG9jdW1lbnQuY29va2llID0gc2VyaWFsaXplQ29va2llKG5hbWUsIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksIGNvb2tpZU9wdGlvbnMpO1xuICB9LFxuICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICB2YXIgbmFtZUVRID0gXCJcIi5jb25jYXQobmFtZSwgXCI9XCIpO1xuICAgIHZhciBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBjYVtpXTtcblxuICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09PSAnICcpIHtcbiAgICAgICAgYyA9IGMuc3Vic3RyaW5nKDEsIGMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGMuaW5kZXhPZihuYW1lRVEpID09PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgdGhpcy5jcmVhdGUobmFtZSwgJycsIC0xKTtcbiAgfVxufTtcbnZhciBjb29raWUkMSA9IHtcbiAgbmFtZTogJ2Nvb2tpZScsXG4gIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKG9wdGlvbnMpIHtcbiAgICB2YXIgZm91bmQ7XG5cbiAgICBpZiAob3B0aW9ucy5sb29rdXBDb29raWUgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIGMgPSBjb29raWUucmVhZChvcHRpb25zLmxvb2t1cENvb2tpZSk7XG4gICAgICBpZiAoYykgZm91bmQgPSBjO1xuICAgIH1cblxuICAgIHJldHVybiBmb3VuZDtcbiAgfSxcbiAgY2FjaGVVc2VyTGFuZ3VhZ2U6IGZ1bmN0aW9uIGNhY2hlVXNlckxhbmd1YWdlKGxuZywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmxvb2t1cENvb2tpZSAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb29raWUuY3JlYXRlKG9wdGlvbnMubG9va3VwQ29va2llLCBsbmcsIG9wdGlvbnMuY29va2llTWludXRlcywgb3B0aW9ucy5jb29raWVEb21haW4sIG9wdGlvbnMuY29va2llT3B0aW9ucyk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcXVlcnlzdHJpbmcgPSB7XG4gIG5hbWU6ICdxdWVyeXN0cmluZycsXG4gIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKG9wdGlvbnMpIHtcbiAgICB2YXIgZm91bmQ7XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBzZWFyY2ggPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuXG4gICAgICBpZiAoIXdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggJiYgd2luZG93LmxvY2F0aW9uLmhhc2ggJiYgd2luZG93LmxvY2F0aW9uLmhhc2guaW5kZXhPZignPycpID4gLTEpIHtcbiAgICAgICAgc2VhcmNoID0gd2luZG93LmxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKHdpbmRvdy5sb2NhdGlvbi5oYXNoLmluZGV4T2YoJz8nKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBxdWVyeSA9IHNlYXJjaC5zdWJzdHJpbmcoMSk7XG4gICAgICB2YXIgcGFyYW1zID0gcXVlcnkuc3BsaXQoJyYnKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBvcyA9IHBhcmFtc1tpXS5pbmRleE9mKCc9Jyk7XG5cbiAgICAgICAgaWYgKHBvcyA+IDApIHtcbiAgICAgICAgICB2YXIga2V5ID0gcGFyYW1zW2ldLnN1YnN0cmluZygwLCBwb3MpO1xuXG4gICAgICAgICAgaWYgKGtleSA9PT0gb3B0aW9ucy5sb29rdXBRdWVyeXN0cmluZykge1xuICAgICAgICAgICAgZm91bmQgPSBwYXJhbXNbaV0uc3Vic3RyaW5nKHBvcyArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxufTtcblxudmFyIGhhc0xvY2FsU3RvcmFnZVN1cHBvcnQgPSBudWxsO1xuXG52YXIgbG9jYWxTdG9yYWdlQXZhaWxhYmxlID0gZnVuY3Rpb24gbG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkge1xuICBpZiAoaGFzTG9jYWxTdG9yYWdlU3VwcG9ydCAhPT0gbnVsbCkgcmV0dXJuIGhhc0xvY2FsU3RvcmFnZVN1cHBvcnQ7XG5cbiAgdHJ5IHtcbiAgICBoYXNMb2NhbFN0b3JhZ2VTdXBwb3J0ID0gd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYWxTdG9yYWdlICE9PSBudWxsO1xuICAgIHZhciB0ZXN0S2V5ID0gJ2kxOG5leHQudHJhbnNsYXRlLmJvbyc7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRlc3RLZXksICdmb28nKTtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGVzdEtleSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYXNMb2NhbFN0b3JhZ2VTdXBwb3J0ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaGFzTG9jYWxTdG9yYWdlU3VwcG9ydDtcbn07XG5cbnZhciBsb2NhbFN0b3JhZ2UgPSB7XG4gIG5hbWU6ICdsb2NhbFN0b3JhZ2UnLFxuICBsb29rdXA6IGZ1bmN0aW9uIGxvb2t1cChvcHRpb25zKSB7XG4gICAgdmFyIGZvdW5kO1xuXG4gICAgaWYgKG9wdGlvbnMubG9va3VwTG9jYWxTdG9yYWdlICYmIGxvY2FsU3RvcmFnZUF2YWlsYWJsZSgpKSB7XG4gICAgICB2YXIgbG5nID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKG9wdGlvbnMubG9va3VwTG9jYWxTdG9yYWdlKTtcbiAgICAgIGlmIChsbmcpIGZvdW5kID0gbG5nO1xuICAgIH1cblxuICAgIHJldHVybiBmb3VuZDtcbiAgfSxcbiAgY2FjaGVVc2VyTGFuZ3VhZ2U6IGZ1bmN0aW9uIGNhY2hlVXNlckxhbmd1YWdlKGxuZywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmxvb2t1cExvY2FsU3RvcmFnZSAmJiBsb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSkge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKG9wdGlvbnMubG9va3VwTG9jYWxTdG9yYWdlLCBsbmcpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIGhhc1Nlc3Npb25TdG9yYWdlU3VwcG9ydCA9IG51bGw7XG5cbnZhciBzZXNzaW9uU3RvcmFnZUF2YWlsYWJsZSA9IGZ1bmN0aW9uIHNlc3Npb25TdG9yYWdlQXZhaWxhYmxlKCkge1xuICBpZiAoaGFzU2Vzc2lvblN0b3JhZ2VTdXBwb3J0ICE9PSBudWxsKSByZXR1cm4gaGFzU2Vzc2lvblN0b3JhZ2VTdXBwb3J0O1xuXG4gIHRyeSB7XG4gICAgaGFzU2Vzc2lvblN0b3JhZ2VTdXBwb3J0ID0gd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgIT09IG51bGw7XG4gICAgdmFyIHRlc3RLZXkgPSAnaTE4bmV4dC50cmFuc2xhdGUuYm9vJztcbiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0ZXN0S2V5LCAnZm9vJyk7XG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGVzdEtleSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYXNTZXNzaW9uU3RvcmFnZVN1cHBvcnQgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNTZXNzaW9uU3RvcmFnZVN1cHBvcnQ7XG59O1xuXG52YXIgc2Vzc2lvblN0b3JhZ2UgPSB7XG4gIG5hbWU6ICdzZXNzaW9uU3RvcmFnZScsXG4gIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKG9wdGlvbnMpIHtcbiAgICB2YXIgZm91bmQ7XG5cbiAgICBpZiAob3B0aW9ucy5sb29rdXBTZXNzaW9uU3RvcmFnZSAmJiBzZXNzaW9uU3RvcmFnZUF2YWlsYWJsZSgpKSB7XG4gICAgICB2YXIgbG5nID0gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0ob3B0aW9ucy5sb29rdXBTZXNzaW9uU3RvcmFnZSk7XG4gICAgICBpZiAobG5nKSBmb3VuZCA9IGxuZztcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH0sXG4gIGNhY2hlVXNlckxhbmd1YWdlOiBmdW5jdGlvbiBjYWNoZVVzZXJMYW5ndWFnZShsbmcsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5sb29rdXBTZXNzaW9uU3RvcmFnZSAmJiBzZXNzaW9uU3RvcmFnZUF2YWlsYWJsZSgpKSB7XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShvcHRpb25zLmxvb2t1cFNlc3Npb25TdG9yYWdlLCBsbmcpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIG5hdmlnYXRvciQxID0ge1xuICBuYW1lOiAnbmF2aWdhdG9yJyxcbiAgbG9va3VwOiBmdW5jdGlvbiBsb29rdXAob3B0aW9ucykge1xuICAgIHZhciBmb3VuZCA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAobmF2aWdhdG9yLmxhbmd1YWdlcykge1xuICAgICAgICAvLyBjaHJvbWUgb25seTsgbm90IGFuIGFycmF5LCBzbyBjYW4ndCB1c2UgLnB1c2guYXBwbHkgaW5zdGVhZCBvZiBpdGVyYXRpbmdcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZm91bmQucHVzaChuYXZpZ2F0b3IubGFuZ3VhZ2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkge1xuICAgICAgICBmb3VuZC5wdXNoKG5hdmlnYXRvci51c2VyTGFuZ3VhZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7XG4gICAgICAgIGZvdW5kLnB1c2gobmF2aWdhdG9yLmxhbmd1YWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQubGVuZ3RoID4gMCA/IGZvdW5kIDogdW5kZWZpbmVkO1xuICB9XG59O1xuXG52YXIgaHRtbFRhZyA9IHtcbiAgbmFtZTogJ2h0bWxUYWcnLFxuICBsb29rdXA6IGZ1bmN0aW9uIGxvb2t1cChvcHRpb25zKSB7XG4gICAgdmFyIGZvdW5kO1xuICAgIHZhciBodG1sVGFnID0gb3B0aW9ucy5odG1sVGFnIHx8ICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogbnVsbCk7XG5cbiAgICBpZiAoaHRtbFRhZyAmJiB0eXBlb2YgaHRtbFRhZy5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZvdW5kID0gaHRtbFRhZy5nZXRBdHRyaWJ1dGUoJ2xhbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cbn07XG5cbnZhciBwYXRoID0ge1xuICBuYW1lOiAncGF0aCcsXG4gIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKG9wdGlvbnMpIHtcbiAgICB2YXIgZm91bmQ7XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvXFwvKFthLXpBLVotXSopL2cpO1xuXG4gICAgICBpZiAobGFuZ3VhZ2UgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9va3VwRnJvbVBhdGhJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGxhbmd1YWdlW29wdGlvbnMubG9va3VwRnJvbVBhdGhJbmRleF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvdW5kID0gbGFuZ3VhZ2Vbb3B0aW9ucy5sb29rdXBGcm9tUGF0aEluZGV4XS5yZXBsYWNlKCcvJywgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvdW5kID0gbGFuZ3VhZ2VbMF0ucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxufTtcblxudmFyIHN1YmRvbWFpbiA9IHtcbiAgbmFtZTogJ3N1YmRvbWFpbicsXG4gIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKG9wdGlvbnMpIHtcbiAgICAvLyBJZiBnaXZlbiBnZXQgdGhlIHN1YmRvbWFpbiBpbmRleCBlbHNlIDFcbiAgICB2YXIgbG9va3VwRnJvbVN1YmRvbWFpbkluZGV4ID0gdHlwZW9mIG9wdGlvbnMubG9va3VwRnJvbVN1YmRvbWFpbkluZGV4ID09PSAnbnVtYmVyJyA/IG9wdGlvbnMubG9va3VwRnJvbVN1YmRvbWFpbkluZGV4ICsgMSA6IDE7IC8vIGdldCBhbGwgbWF0Y2hlcyBpZiB3aW5kb3cubG9jYXRpb24uIGlzIGV4aXN0aW5nXG4gICAgLy8gZmlyc3QgaXRlbSBvZiBtYXRjaCBpcyB0aGUgbWF0Y2ggaXRzZWxmIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBmaXJzdCBncm91cCBtYWNodCB3aGljaCBzb3VsZCBiZSB0aGUgZmlyc3Qgc3ViZG9tYWluIG1hdGNoXG4gICAgLy8gaXMgdGhlIGhvc3RuYW1lIG5vIHB1YmxpYyBkb21haW4gZ2V0IHRoZSBvciBvcHRpb24gb2YgbG9jYWxob3N0XG5cbiAgICB2YXIgbGFuZ3VhZ2UgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICYmIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZS5tYXRjaCgvXihcXHd7Miw1fSlcXC4oKFthLXowLTktXXsxLDYzfVxcLlthLXpdezIsNn0pfGxvY2FsaG9zdCkvaSk7IC8vIGlmIHRoZXJlIGlzIG5vIG1hdGNoIChudWxsKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBpZiAoIWxhbmd1YWdlKSByZXR1cm4gdW5kZWZpbmVkOyAvLyByZXR1cm4gdGhlIGdpdmVuIGdyb3VwIG1hdGNoXG5cbiAgICByZXR1cm4gbGFuZ3VhZ2VbbG9va3VwRnJvbVN1YmRvbWFpbkluZGV4XTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdHMoKSB7XG4gIHJldHVybiB7XG4gICAgb3JkZXI6IFsncXVlcnlzdHJpbmcnLCAnY29va2llJywgJ2xvY2FsU3RvcmFnZScsICdzZXNzaW9uU3RvcmFnZScsICduYXZpZ2F0b3InLCAnaHRtbFRhZyddLFxuICAgIGxvb2t1cFF1ZXJ5c3RyaW5nOiAnbG5nJyxcbiAgICBsb29rdXBDb29raWU6ICdpMThuZXh0JyxcbiAgICBsb29rdXBMb2NhbFN0b3JhZ2U6ICdpMThuZXh0TG5nJyxcbiAgICBsb29rdXBTZXNzaW9uU3RvcmFnZTogJ2kxOG5leHRMbmcnLFxuICAgIC8vIGNhY2hlIHVzZXIgbGFuZ3VhZ2VcbiAgICBjYWNoZXM6IFsnbG9jYWxTdG9yYWdlJ10sXG4gICAgZXhjbHVkZUNhY2hlRm9yOiBbJ2NpbW9kZSddIC8vIGNvb2tpZU1pbnV0ZXM6IDEwLFxuICAgIC8vIGNvb2tpZURvbWFpbjogJ215RG9tYWluJ1xuXG4gIH07XG59XG5cbnZhciBCcm93c2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQnJvd3NlcihzZXJ2aWNlcykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVja19fZGVmYXVsdFtcImRlZmF1bHRcIl0odGhpcywgQnJvd3Nlcik7XG5cbiAgICB0aGlzLnR5cGUgPSAnbGFuZ3VhZ2VEZXRlY3Rvcic7XG4gICAgdGhpcy5kZXRlY3RvcnMgPSB7fTtcbiAgICB0aGlzLmluaXQoc2VydmljZXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzX19kZWZhdWx0W1wiZGVmYXVsdFwiXShCcm93c2VyLCBbe1xuICAgIGtleTogXCJpbml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoc2VydmljZXMpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBpMThuT3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB0aGlzLnNlcnZpY2VzID0gc2VydmljZXM7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBkZWZhdWx0cyhvcHRpb25zLCB0aGlzLm9wdGlvbnMgfHwge30sIGdldERlZmF1bHRzKCkpOyAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmxvb2t1cEZyb21VcmxJbmRleCkgdGhpcy5vcHRpb25zLmxvb2t1cEZyb21QYXRoSW5kZXggPSB0aGlzLm9wdGlvbnMubG9va3VwRnJvbVVybEluZGV4O1xuICAgICAgdGhpcy5pMThuT3B0aW9ucyA9IGkxOG5PcHRpb25zO1xuICAgICAgdGhpcy5hZGREZXRlY3Rvcihjb29raWUkMSk7XG4gICAgICB0aGlzLmFkZERldGVjdG9yKHF1ZXJ5c3RyaW5nKTtcbiAgICAgIHRoaXMuYWRkRGV0ZWN0b3IobG9jYWxTdG9yYWdlKTtcbiAgICAgIHRoaXMuYWRkRGV0ZWN0b3Ioc2Vzc2lvblN0b3JhZ2UpO1xuICAgICAgdGhpcy5hZGREZXRlY3RvcihuYXZpZ2F0b3IkMSk7XG4gICAgICB0aGlzLmFkZERldGVjdG9yKGh0bWxUYWcpO1xuICAgICAgdGhpcy5hZGREZXRlY3RvcihwYXRoKTtcbiAgICAgIHRoaXMuYWRkRGV0ZWN0b3Ioc3ViZG9tYWluKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkRGV0ZWN0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkRGV0ZWN0b3IoZGV0ZWN0b3IpIHtcbiAgICAgIHRoaXMuZGV0ZWN0b3JzW2RldGVjdG9yLm5hbWVdID0gZGV0ZWN0b3I7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRldGVjdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXRlY3QoZGV0ZWN0aW9uT3JkZXIpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICghZGV0ZWN0aW9uT3JkZXIpIGRldGVjdGlvbk9yZGVyID0gdGhpcy5vcHRpb25zLm9yZGVyO1xuICAgICAgdmFyIGRldGVjdGVkID0gW107XG4gICAgICBkZXRlY3Rpb25PcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChkZXRlY3Rvck5hbWUpIHtcbiAgICAgICAgaWYgKF90aGlzLmRldGVjdG9yc1tkZXRlY3Rvck5hbWVdKSB7XG4gICAgICAgICAgdmFyIGxvb2t1cCA9IF90aGlzLmRldGVjdG9yc1tkZXRlY3Rvck5hbWVdLmxvb2t1cChfdGhpcy5vcHRpb25zKTtcblxuICAgICAgICAgIGlmIChsb29rdXAgJiYgdHlwZW9mIGxvb2t1cCA9PT0gJ3N0cmluZycpIGxvb2t1cCA9IFtsb29rdXBdO1xuICAgICAgICAgIGlmIChsb29rdXApIGRldGVjdGVkID0gZGV0ZWN0ZWQuY29uY2F0KGxvb2t1cCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRCZXN0TWF0Y2hGcm9tQ29kZXMpIHJldHVybiBkZXRlY3RlZDsgLy8gbmV3IGkxOG5leHQgdjE5LjUuMFxuXG4gICAgICByZXR1cm4gZGV0ZWN0ZWQubGVuZ3RoID4gMCA/IGRldGVjdGVkWzBdIDogbnVsbDsgLy8gYSBsaXR0bGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjYWNoZVVzZXJMYW5ndWFnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjYWNoZVVzZXJMYW5ndWFnZShsbmcsIGNhY2hlcykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghY2FjaGVzKSBjYWNoZXMgPSB0aGlzLm9wdGlvbnMuY2FjaGVzO1xuICAgICAgaWYgKCFjYWNoZXMpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXhjbHVkZUNhY2hlRm9yICYmIHRoaXMub3B0aW9ucy5leGNsdWRlQ2FjaGVGb3IuaW5kZXhPZihsbmcpID4gLTEpIHJldHVybjtcbiAgICAgIGNhY2hlcy5mb3JFYWNoKGZ1bmN0aW9uIChjYWNoZU5hbWUpIHtcbiAgICAgICAgaWYgKF90aGlzMi5kZXRlY3RvcnNbY2FjaGVOYW1lXSkgX3RoaXMyLmRldGVjdG9yc1tjYWNoZU5hbWVdLmNhY2hlVXNlckxhbmd1YWdlKGxuZywgX3RoaXMyLm9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEJyb3dzZXI7XG59KCk7XG5cbkJyb3dzZXIudHlwZSA9ICdsYW5ndWFnZURldGVjdG9yJztcblxubW9kdWxlLmV4cG9ydHMgPSBCcm93c2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3R5cGVvZiA9IHJlcXVpcmUoJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mJyk7XG52YXIgX2NsYXNzQ2FsbENoZWNrID0gcmVxdWlyZSgnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xudmFyIF9jcmVhdGVDbGFzcyA9IHJlcXVpcmUoJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcbnZhciBfYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZSgnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnKTtcbnZhciBfaW5oZXJpdHMgPSByZXF1aXJlKCdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJyk7XG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gPSByZXF1aXJlKCdAYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mJyk7XG52YXIgX2RlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eScpO1xudmFyIF90b0FycmF5ID0gcmVxdWlyZSgnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0FycmF5Jyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdExlZ2FjeSAoZSkgeyByZXR1cm4gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ2RlZmF1bHQnIGluIGUgPyBlIDogeyAnZGVmYXVsdCc6IGUgfTsgfVxuXG52YXIgX3R5cGVvZl9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koX3R5cGVvZik7XG52YXIgX2NsYXNzQ2FsbENoZWNrX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShfY2xhc3NDYWxsQ2hlY2spO1xudmFyIF9jcmVhdGVDbGFzc19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koX2NyZWF0ZUNsYXNzKTtcbnZhciBfYXNzZXJ0VGhpc0luaXRpYWxpemVkX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKTtcbnZhciBfaW5oZXJpdHNfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF9pbmhlcml0cyk7XG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKTtcbnZhciBfZ2V0UHJvdG90eXBlT2ZfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF9nZXRQcm90b3R5cGVPZik7XG52YXIgX2RlZmluZVByb3BlcnR5X19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShfZGVmaW5lUHJvcGVydHkpO1xudmFyIF90b0FycmF5X19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShfdG9BcnJheSk7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHlfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG52YXIgY29uc29sZUxvZ2dlciA9IHtcbiAgdHlwZTogJ2xvZ2dlcicsXG4gIGxvZzogZnVuY3Rpb24gbG9nKGFyZ3MpIHtcbiAgICB0aGlzLm91dHB1dCgnbG9nJywgYXJncyk7XG4gIH0sXG4gIHdhcm46IGZ1bmN0aW9uIHdhcm4oYXJncykge1xuICAgIHRoaXMub3V0cHV0KCd3YXJuJywgYXJncyk7XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcihhcmdzKSB7XG4gICAgdGhpcy5vdXRwdXQoJ2Vycm9yJywgYXJncyk7XG4gIH0sXG4gIG91dHB1dDogZnVuY3Rpb24gb3V0cHV0KHR5cGUsIGFyZ3MpIHtcbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlW3R5cGVdKSBjb25zb2xlW3R5cGVdLmFwcGx5KGNvbnNvbGUsIGFyZ3MpO1xuICB9XG59O1xuXG52YXIgTG9nZ2VyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMb2dnZXIoY29uY3JldGVMb2dnZXIpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2tfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLCBMb2dnZXIpO1xuXG4gICAgdGhpcy5pbml0KGNvbmNyZXRlTG9nZ2VyLCBvcHRpb25zKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzc19fZGVmYXVsdFsnZGVmYXVsdCddKExvZ2dlciwgW3tcbiAgICBrZXk6IFwiaW5pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KGNvbmNyZXRlTG9nZ2VyKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB0aGlzLnByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8ICdpMThuZXh0Oic7XG4gICAgICB0aGlzLmxvZ2dlciA9IGNvbmNyZXRlTG9nZ2VyIHx8IGNvbnNvbGVMb2dnZXI7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5kZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldERlYnVnXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldERlYnVnKGJvb2wpIHtcbiAgICAgIHRoaXMuZGVidWcgPSBib29sO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9nKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ2xvZycsICcnLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwid2FyblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3YXJuKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZm9yd2FyZChhcmdzLCAnd2FybicsICcnLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXJyb3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICdlcnJvcicsICcnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVwcmVjYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlcHJlY2F0ZSgpIHtcbiAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ3dhcm4nLCAnV0FSTklORyBERVBSRUNBVEVEOiAnLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9yd2FyZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3J3YXJkKGFyZ3MsIGx2bCwgcHJlZml4LCBkZWJ1Z09ubHkpIHtcbiAgICAgIGlmIChkZWJ1Z09ubHkgJiYgIXRoaXMuZGVidWcpIHJldHVybiBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykgYXJnc1swXSA9IFwiXCIuY29uY2F0KHByZWZpeCkuY29uY2F0KHRoaXMucHJlZml4LCBcIiBcIikuY29uY2F0KGFyZ3NbMF0pO1xuICAgICAgcmV0dXJuIHRoaXMubG9nZ2VyW2x2bF0oYXJncyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNyZWF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUobW9kdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIG5ldyBMb2dnZXIodGhpcy5sb2dnZXIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwge1xuICAgICAgICBwcmVmaXg6IFwiXCIuY29uY2F0KHRoaXMucHJlZml4LCBcIjpcIikuY29uY2F0KG1vZHVsZU5hbWUsIFwiOlwiKVxuICAgICAgfSksIHRoaXMub3B0aW9ucykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbG9uZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZShvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLm9wdGlvbnM7XG4gICAgICBvcHRpb25zLnByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8IHRoaXMucHJlZml4O1xuICAgICAgcmV0dXJuIG5ldyBMb2dnZXIodGhpcy5sb2dnZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMb2dnZXI7XG59KCk7XG5cbnZhciBiYXNlTG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG52YXIgRXZlbnRFbWl0dGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrX19kZWZhdWx0WydkZWZhdWx0J10odGhpcywgRXZlbnRFbWl0dGVyKTtcblxuICAgIHRoaXMub2JzZXJ2ZXJzID0ge307XG4gIH1cblxuICBfY3JlYXRlQ2xhc3NfX2RlZmF1bHRbJ2RlZmF1bHQnXShFdmVudEVtaXR0ZXIsIFt7XG4gICAga2V5OiBcIm9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2ZW50cywgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIF90aGlzLm9ic2VydmVyc1tldmVudF0gPSBfdGhpcy5vYnNlcnZlcnNbZXZlbnRdIHx8IFtdO1xuXG4gICAgICAgIF90aGlzLm9ic2VydmVyc1tldmVudF0ucHVzaChsaXN0ZW5lcik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvZmZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb2ZmKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgICAgaWYgKCF0aGlzLm9ic2VydmVyc1tldmVudF0pIHJldHVybjtcblxuICAgICAgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgICBkZWxldGUgdGhpcy5vYnNlcnZlcnNbZXZlbnRdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMub2JzZXJ2ZXJzW2V2ZW50XSA9IHRoaXMub2JzZXJ2ZXJzW2V2ZW50XS5maWx0ZXIoZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgcmV0dXJuIGwgIT09IGxpc3RlbmVyO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVtaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub2JzZXJ2ZXJzW2V2ZW50XSkge1xuICAgICAgICB2YXIgY2xvbmVkID0gW10uY29uY2F0KHRoaXMub2JzZXJ2ZXJzW2V2ZW50XSk7XG4gICAgICAgIGNsb25lZC5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICAgIG9ic2VydmVyLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vYnNlcnZlcnNbJyonXSkge1xuICAgICAgICB2YXIgX2Nsb25lZCA9IFtdLmNvbmNhdCh0aGlzLm9ic2VydmVyc1snKiddKTtcblxuICAgICAgICBfY2xvbmVkLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuYXBwbHkob2JzZXJ2ZXIsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV2ZW50RW1pdHRlcjtcbn0oKTtcblxuZnVuY3Rpb24gZGVmZXIoKSB7XG4gIHZhciByZXM7XG4gIHZhciByZWo7XG4gIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlcyA9IHJlc29sdmU7XG4gICAgcmVqID0gcmVqZWN0O1xuICB9KTtcbiAgcHJvbWlzZS5yZXNvbHZlID0gcmVzO1xuICBwcm9taXNlLnJlamVjdCA9IHJlajtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5mdW5jdGlvbiBtYWtlU3RyaW5nKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAnJztcbiAgcmV0dXJuICcnICsgb2JqZWN0O1xufVxuZnVuY3Rpb24gY29weShhLCBzLCB0KSB7XG4gIGEuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgIGlmIChzW21dKSB0W21dID0gc1ttXTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoLCBFbXB0eSkge1xuICBmdW5jdGlvbiBjbGVhbktleShrZXkpIHtcbiAgICByZXR1cm4ga2V5ICYmIGtleS5pbmRleE9mKCcjIyMnKSA+IC0xID8ga2V5LnJlcGxhY2UoLyMjIy9nLCAnLicpIDoga2V5O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuTm90VHJhdmVyc2VEZWVwZXIoKSB7XG4gICAgcmV0dXJuICFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICB2YXIgc3RhY2sgPSB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycgPyBbXS5jb25jYXQocGF0aCkgOiBwYXRoLnNwbGl0KCcuJyk7XG5cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDEpIHtcbiAgICBpZiAoY2FuTm90VHJhdmVyc2VEZWVwZXIoKSkgcmV0dXJuIHt9O1xuICAgIHZhciBrZXkgPSBjbGVhbktleShzdGFjay5zaGlmdCgpKTtcbiAgICBpZiAoIW9iamVjdFtrZXldICYmIEVtcHR5KSBvYmplY3Rba2V5XSA9IG5ldyBFbXB0eSgpO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3QgPSB7fTtcbiAgICB9XG4gIH1cblxuICBpZiAoY2FuTm90VHJhdmVyc2VEZWVwZXIoKSkgcmV0dXJuIHt9O1xuICByZXR1cm4ge1xuICAgIG9iajogb2JqZWN0LFxuICAgIGs6IGNsZWFuS2V5KHN0YWNrLnNoaWZ0KCkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNldFBhdGgob2JqZWN0LCBwYXRoLCBuZXdWYWx1ZSkge1xuICB2YXIgX2dldExhc3RPZlBhdGggPSBnZXRMYXN0T2ZQYXRoKG9iamVjdCwgcGF0aCwgT2JqZWN0KSxcbiAgICAgIG9iaiA9IF9nZXRMYXN0T2ZQYXRoLm9iaixcbiAgICAgIGsgPSBfZ2V0TGFzdE9mUGF0aC5rO1xuXG4gIG9ialtrXSA9IG5ld1ZhbHVlO1xufVxuZnVuY3Rpb24gcHVzaFBhdGgob2JqZWN0LCBwYXRoLCBuZXdWYWx1ZSwgY29uY2F0KSB7XG4gIHZhciBfZ2V0TGFzdE9mUGF0aDIgPSBnZXRMYXN0T2ZQYXRoKG9iamVjdCwgcGF0aCwgT2JqZWN0KSxcbiAgICAgIG9iaiA9IF9nZXRMYXN0T2ZQYXRoMi5vYmosXG4gICAgICBrID0gX2dldExhc3RPZlBhdGgyLms7XG5cbiAgb2JqW2tdID0gb2JqW2tdIHx8IFtdO1xuICBpZiAoY29uY2F0KSBvYmpba10gPSBvYmpba10uY29uY2F0KG5ld1ZhbHVlKTtcbiAgaWYgKCFjb25jYXQpIG9ialtrXS5wdXNoKG5ld1ZhbHVlKTtcbn1cbmZ1bmN0aW9uIGdldFBhdGgob2JqZWN0LCBwYXRoKSB7XG4gIHZhciBfZ2V0TGFzdE9mUGF0aDMgPSBnZXRMYXN0T2ZQYXRoKG9iamVjdCwgcGF0aCksXG4gICAgICBvYmogPSBfZ2V0TGFzdE9mUGF0aDMub2JqLFxuICAgICAgayA9IF9nZXRMYXN0T2ZQYXRoMy5rO1xuXG4gIGlmICghb2JqKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gb2JqW2tdO1xufVxuZnVuY3Rpb24gZ2V0UGF0aFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFBhdGgoZGF0YSwga2V5KTtcblxuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBnZXRQYXRoKGRlZmF1bHREYXRhLCBrZXkpO1xufVxuZnVuY3Rpb24gZGVlcEV4dGVuZCh0YXJnZXQsIHNvdXJjZSwgb3ZlcndyaXRlKSB7XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgaWYgKHByb3AgIT09ICdfX3Byb3RvX18nICYmIHByb3AgIT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIGlmIChwcm9wIGluIHRhcmdldCkge1xuICAgICAgICBpZiAodHlwZW9mIHRhcmdldFtwcm9wXSA9PT0gJ3N0cmluZycgfHwgdGFyZ2V0W3Byb3BdIGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiBzb3VyY2VbcHJvcF0gPT09ICdzdHJpbmcnIHx8IHNvdXJjZVtwcm9wXSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWVwRXh0ZW5kKHRhcmdldFtwcm9wXSwgc291cmNlW3Byb3BdLCBvdmVyd3JpdGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cbmZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCAnXFxcXCQmJyk7XG59XG52YXIgX2VudGl0eU1hcCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjMzk7JyxcbiAgJy8nOiAnJiN4MkY7J1xufTtcbmZ1bmN0aW9uIGVzY2FwZShkYXRhKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGF0YS5yZXBsYWNlKC9bJjw+XCInXFwvXS9nLCBmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIF9lbnRpdHlNYXBbc107XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cbnZhciBpc0lFMTAgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudERhdGEgPT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50ICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSA+IC0xO1xudmFyIGNoYXJzID0gWycgJywgJywnLCAnPycsICchJywgJzsnXTtcbmZ1bmN0aW9uIGxvb2tzTGlrZU9iamVjdFBhdGgoa2V5LCBuc1NlcGFyYXRvciwga2V5U2VwYXJhdG9yKSB7XG4gIG5zU2VwYXJhdG9yID0gbnNTZXBhcmF0b3IgfHwgJyc7XG4gIGtleVNlcGFyYXRvciA9IGtleVNlcGFyYXRvciB8fCAnJztcbiAgdmFyIHBvc3NpYmxlQ2hhcnMgPSBjaGFycy5maWx0ZXIoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gbnNTZXBhcmF0b3IuaW5kZXhPZihjKSA8IDAgJiYga2V5U2VwYXJhdG9yLmluZGV4T2YoYykgPCAwO1xuICB9KTtcbiAgaWYgKHBvc3NpYmxlQ2hhcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiKFwiLmNvbmNhdChwb3NzaWJsZUNoYXJzLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjID09PSAnPycgPyAnXFxcXD8nIDogYztcbiAgfSkuam9pbignfCcpLCBcIilcIikpO1xuICB2YXIgbWF0Y2hlZCA9ICFyLnRlc3Qoa2V5KTtcblxuICBpZiAoIW1hdGNoZWQpIHtcbiAgICB2YXIga2kgPSBrZXkuaW5kZXhPZihrZXlTZXBhcmF0b3IpO1xuXG4gICAgaWYgKGtpID4gMCAmJiAhci50ZXN0KGtleS5zdWJzdHJpbmcoMCwga2kpKSkge1xuICAgICAgbWF0Y2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIG93bktleXMkMShvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkMSh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzJDEoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHlfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzJDEoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZl9fZGVmYXVsdFsnZGVmYXVsdCddKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2ZfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBkZWVwRmluZChvYmosIHBhdGgpIHtcbiAgdmFyIGtleVNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJy4nO1xuICBpZiAoIW9iaikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKG9ialtwYXRoXSkgcmV0dXJuIG9ialtwYXRoXTtcbiAgdmFyIHBhdGhzID0gcGF0aC5zcGxpdChrZXlTZXBhcmF0b3IpO1xuICB2YXIgY3VycmVudCA9IG9iajtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50W3BhdGhzW2ldXSA9PT0gJ3N0cmluZycgJiYgaSArIDEgPCBwYXRocy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRbcGF0aHNbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBqID0gMjtcbiAgICAgIHZhciBwID0gcGF0aHMuc2xpY2UoaSwgaSArIGopLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICAgIHZhciBtaXggPSBjdXJyZW50W3BdO1xuXG4gICAgICB3aGlsZSAobWl4ID09PSB1bmRlZmluZWQgJiYgcGF0aHMubGVuZ3RoID4gaSArIGopIHtcbiAgICAgICAgaisrO1xuICAgICAgICBwID0gcGF0aHMuc2xpY2UoaSwgaSArIGopLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICAgICAgbWl4ID0gY3VycmVudFtwXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1peCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKG1peCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGlmIChwYXRoLmVuZHNXaXRoKHApKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWl4ID09PSAnc3RyaW5nJykgcmV0dXJuIG1peDtcbiAgICAgICAgaWYgKHAgJiYgdHlwZW9mIG1peFtwXSA9PT0gJ3N0cmluZycpIHJldHVybiBtaXhbcF07XG4gICAgICB9XG5cbiAgICAgIHZhciBqb2luZWRQYXRoID0gcGF0aHMuc2xpY2UoaSArIGopLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICAgIGlmIChqb2luZWRQYXRoKSByZXR1cm4gZGVlcEZpbmQobWl4LCBqb2luZWRQYXRoLCBrZXlTZXBhcmF0b3IpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjdXJyZW50ID0gY3VycmVudFtwYXRoc1tpXV07XG4gIH1cblxuICByZXR1cm4gY3VycmVudDtcbn1cblxudmFyIFJlc291cmNlU3RvcmUgPSBmdW5jdGlvbiAoX0V2ZW50RW1pdHRlcikge1xuICBfaW5oZXJpdHNfX2RlZmF1bHRbJ2RlZmF1bHQnXShSZXNvdXJjZVN0b3JlLCBfRXZlbnRFbWl0dGVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFJlc291cmNlU3RvcmUpO1xuXG4gIGZ1bmN0aW9uIFJlc291cmNlU3RvcmUoZGF0YSkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgICBuczogWyd0cmFuc2xhdGlvbiddLFxuICAgICAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nXG4gICAgfTtcblxuICAgIF9jbGFzc0NhbGxDaGVja19fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMsIFJlc291cmNlU3RvcmUpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcblxuICAgIGlmIChpc0lFMTApIHtcbiAgICAgIEV2ZW50RW1pdHRlci5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRfX2RlZmF1bHRbJ2RlZmF1bHQnXShfdGhpcykpO1xuICAgIH1cblxuICAgIF90aGlzLmRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKF90aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIF90aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yID0gJy4nO1xuICAgIH1cblxuICAgIGlmIChfdGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3NfX2RlZmF1bHRbJ2RlZmF1bHQnXShSZXNvdXJjZVN0b3JlLCBbe1xuICAgIGtleTogXCJhZGROYW1lc3BhY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZE5hbWVzcGFjZXMobnMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihucykgPCAwKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ucy5wdXNoKG5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlTmFtZXNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VzKG5zKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihucyk7XG5cbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZXNvdXJjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNvdXJjZShsbmcsIG5zLCBrZXkpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcbiAgICAgIHZhciBrZXlTZXBhcmF0b3IgPSBvcHRpb25zLmtleVNlcGFyYXRvciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5rZXlTZXBhcmF0b3IgOiB0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yO1xuICAgICAgdmFyIGlnbm9yZUpTT05TdHJ1Y3R1cmUgPSBvcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZSA6IHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlO1xuICAgICAgdmFyIHBhdGggPSBbbG5nLCBuc107XG4gICAgICBpZiAoa2V5ICYmIHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aC5jb25jYXQoa2V5KTtcbiAgICAgIGlmIChrZXkgJiYgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHBhdGggPSBwYXRoLmNvbmNhdChrZXlTZXBhcmF0b3IgPyBrZXkuc3BsaXQoa2V5U2VwYXJhdG9yKSA6IGtleSk7XG5cbiAgICAgIGlmIChsbmcuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aCA9IGxuZy5zcGxpdCgnLicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0UGF0aCh0aGlzLmRhdGEsIHBhdGgpO1xuICAgICAgaWYgKHJlc3VsdCB8fCAhaWdub3JlSlNPTlN0cnVjdHVyZSB8fCB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcmV0dXJuIHJlc3VsdDtcbiAgICAgIHJldHVybiBkZWVwRmluZCh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhW2xuZ10gJiYgdGhpcy5kYXRhW2xuZ11bbnNdLCBrZXksIGtleVNlcGFyYXRvcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFJlc291cmNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJlc291cmNlKGxuZywgbnMsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB7XG4gICAgICAgIHNpbGVudDogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIGlmIChrZXlTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkga2V5U2VwYXJhdG9yID0gJy4nO1xuICAgICAgdmFyIHBhdGggPSBbbG5nLCBuc107XG4gICAgICBpZiAoa2V5KSBwYXRoID0gcGF0aC5jb25jYXQoa2V5U2VwYXJhdG9yID8ga2V5LnNwbGl0KGtleVNlcGFyYXRvcikgOiBrZXkpO1xuXG4gICAgICBpZiAobG5nLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGggPSBsbmcuc3BsaXQoJy4nKTtcbiAgICAgICAgdmFsdWUgPSBucztcbiAgICAgICAgbnMgPSBwYXRoWzFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFkZE5hbWVzcGFjZXMobnMpO1xuICAgICAgc2V0UGF0aCh0aGlzLmRhdGEsIHBhdGgsIHZhbHVlKTtcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMuZW1pdCgnYWRkZWQnLCBsbmcsIG5zLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkUmVzb3VyY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJlc291cmNlcyhsbmcsIG5zLCByZXNvdXJjZXMpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7XG4gICAgICAgIHNpbGVudDogZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIG0gaW4gcmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb3VyY2VzW21dID09PSAnc3RyaW5nJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHJlc291cmNlc1ttXSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHRoaXMuYWRkUmVzb3VyY2UobG5nLCBucywgbSwgcmVzb3VyY2VzW21dLCB7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLmVtaXQoJ2FkZGVkJywgbG5nLCBucywgcmVzb3VyY2VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkUmVzb3VyY2VCdW5kbGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUmVzb3VyY2VCdW5kbGUobG5nLCBucywgcmVzb3VyY2VzLCBkZWVwLCBvdmVyd3JpdGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB7XG4gICAgICAgIHNpbGVudDogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIgcGF0aCA9IFtsbmcsIG5zXTtcblxuICAgICAgaWYgKGxuZy5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoID0gbG5nLnNwbGl0KCcuJyk7XG4gICAgICAgIGRlZXAgPSByZXNvdXJjZXM7XG4gICAgICAgIHJlc291cmNlcyA9IG5zO1xuICAgICAgICBucyA9IHBhdGhbMV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRkTmFtZXNwYWNlcyhucyk7XG4gICAgICB2YXIgcGFjayA9IGdldFBhdGgodGhpcy5kYXRhLCBwYXRoKSB8fCB7fTtcblxuICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgZGVlcEV4dGVuZChwYWNrLCByZXNvdXJjZXMsIG92ZXJ3cml0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWNrID0gX29iamVjdFNwcmVhZCQxKF9vYmplY3RTcHJlYWQkMSh7fSwgcGFjayksIHJlc291cmNlcyk7XG4gICAgICB9XG5cbiAgICAgIHNldFBhdGgodGhpcy5kYXRhLCBwYXRoLCBwYWNrKTtcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMuZW1pdCgnYWRkZWQnLCBsbmcsIG5zLCByZXNvdXJjZXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW1vdmVSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgICBpZiAodGhpcy5oYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSkge1xuICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2xuZ11bbnNdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZU5hbWVzcGFjZXMobnMpO1xuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVkJywgbG5nLCBucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc1Jlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc1Jlc291cmNlQnVuZGxlKGxuZywgbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKGxuZywgbnMpICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFJlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlc291cmNlQnVuZGxlKGxuZywgbnMpIHtcbiAgICAgIGlmICghbnMpIG5zID0gdGhpcy5vcHRpb25zLmRlZmF1bHROUztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSA9PT0gJ3YxJykgcmV0dXJuIF9vYmplY3RTcHJlYWQkMShfb2JqZWN0U3ByZWFkJDEoe30sIHt9KSwgdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKSk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGF0YUJ5TGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGF0YUJ5TGFuZ3VhZ2UobG5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhW2xuZ107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnMobG5nKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0RGF0YUJ5TGFuZ3VhZ2UobG5nKTtcbiAgICAgIHZhciBuID0gZGF0YSAmJiBPYmplY3Qua2V5cyhkYXRhKSB8fCBbXTtcbiAgICAgIHJldHVybiAhIW4uZmluZChmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gZGF0YVt2XSAmJiBPYmplY3Qua2V5cyhkYXRhW3ZdKS5sZW5ndGggPiAwO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvSlNPTlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBSZXNvdXJjZVN0b3JlO1xufShFdmVudEVtaXR0ZXIpO1xuXG52YXIgcG9zdFByb2Nlc3NvciA9IHtcbiAgcHJvY2Vzc29yczoge30sXG4gIGFkZFBvc3RQcm9jZXNzb3I6IGZ1bmN0aW9uIGFkZFBvc3RQcm9jZXNzb3IobW9kdWxlKSB7XG4gICAgdGhpcy5wcm9jZXNzb3JzW21vZHVsZS5uYW1lXSA9IG1vZHVsZTtcbiAgfSxcbiAgaGFuZGxlOiBmdW5jdGlvbiBoYW5kbGUocHJvY2Vzc29ycywgdmFsdWUsIGtleSwgb3B0aW9ucywgdHJhbnNsYXRvcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBwcm9jZXNzb3JzLmZvckVhY2goZnVuY3Rpb24gKHByb2Nlc3Nvcikge1xuICAgICAgaWYgKF90aGlzLnByb2Nlc3NvcnNbcHJvY2Vzc29yXSkgdmFsdWUgPSBfdGhpcy5wcm9jZXNzb3JzW3Byb2Nlc3Nvcl0ucHJvY2Vzcyh2YWx1ZSwga2V5LCBvcHRpb25zLCB0cmFuc2xhdG9yKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIG93bktleXMkMihvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkMih0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzJDIoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHlfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzJDIoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlciQxKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDEoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2ZfX2RlZmF1bHRbJ2RlZmF1bHQnXShEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mX19kZWZhdWx0WydkZWZhdWx0J10odGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19kZWZhdWx0WydkZWZhdWx0J10odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDEoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxudmFyIGNoZWNrZWRMb2FkZWRGb3IgPSB7fTtcblxudmFyIFRyYW5zbGF0b3IgPSBmdW5jdGlvbiAoX0V2ZW50RW1pdHRlcikge1xuICBfaW5oZXJpdHNfX2RlZmF1bHRbJ2RlZmF1bHQnXShUcmFuc2xhdG9yLCBfRXZlbnRFbWl0dGVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyJDEoVHJhbnNsYXRvcik7XG5cbiAgZnVuY3Rpb24gVHJhbnNsYXRvcihzZXJ2aWNlcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVja19fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMsIFRyYW5zbGF0b3IpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcblxuICAgIGlmIChpc0lFMTApIHtcbiAgICAgIEV2ZW50RW1pdHRlci5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRfX2RlZmF1bHRbJ2RlZmF1bHQnXShfdGhpcykpO1xuICAgIH1cblxuICAgIGNvcHkoWydyZXNvdXJjZVN0b3JlJywgJ2xhbmd1YWdlVXRpbHMnLCAncGx1cmFsUmVzb2x2ZXInLCAnaW50ZXJwb2xhdG9yJywgJ2JhY2tlbmRDb25uZWN0b3InLCAnaTE4bkZvcm1hdCcsICd1dGlscyddLCBzZXJ2aWNlcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZF9fZGVmYXVsdFsnZGVmYXVsdCddKF90aGlzKSk7XG4gICAgX3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAoX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPSAnLic7XG4gICAgfVxuXG4gICAgX3RoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ3RyYW5zbGF0b3InKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3NfX2RlZmF1bHRbJ2RlZmF1bHQnXShUcmFuc2xhdG9yLCBbe1xuICAgIGtleTogXCJjaGFuZ2VMYW5ndWFnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFuZ2VMYW5ndWFnZShsbmcpIHtcbiAgICAgIGlmIChsbmcpIHRoaXMubGFuZ3VhZ2UgPSBsbmc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImV4aXN0c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBleGlzdHMoa2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgICBpbnRlcnBvbGF0aW9uOiB7fVxuICAgICAgfTtcblxuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZShrZXksIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkICYmIHJlc29sdmVkLnJlcyAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleHRyYWN0RnJvbUtleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBleHRyYWN0RnJvbUtleShrZXksIG9wdGlvbnMpIHtcbiAgICAgIHZhciBuc1NlcGFyYXRvciA9IG9wdGlvbnMubnNTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNTZXBhcmF0b3IgOiB0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7XG4gICAgICBpZiAobnNTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkgbnNTZXBhcmF0b3IgPSAnOic7XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIHZhciBuYW1lc3BhY2VzID0gb3B0aW9ucy5ucyB8fCB0aGlzLm9wdGlvbnMuZGVmYXVsdE5TIHx8IFtdO1xuICAgICAgdmFyIHdvdWxkQ2hlY2tGb3JOc0luS2V5ID0gbnNTZXBhcmF0b3IgJiYga2V5LmluZGV4T2YobnNTZXBhcmF0b3IpID4gLTE7XG4gICAgICB2YXIgc2VlbXNOYXR1cmFsTGFuZ3VhZ2UgPSAhdGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkS2V5U2VwYXJhdG9yICYmICFvcHRpb25zLmtleVNlcGFyYXRvciAmJiAhdGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkTnNTZXBhcmF0b3IgJiYgIW9wdGlvbnMubnNTZXBhcmF0b3IgJiYgIWxvb2tzTGlrZU9iamVjdFBhdGgoa2V5LCBuc1NlcGFyYXRvciwga2V5U2VwYXJhdG9yKTtcblxuICAgICAgaWYgKHdvdWxkQ2hlY2tGb3JOc0luS2V5ICYmICFzZWVtc05hdHVyYWxMYW5ndWFnZSkge1xuICAgICAgICB2YXIgbSA9IGtleS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtcblxuICAgICAgICBpZiAobSAmJiBtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBuYW1lc3BhY2VzOiBuYW1lc3BhY2VzXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJ0cyA9IGtleS5zcGxpdChuc1NlcGFyYXRvcik7XG4gICAgICAgIGlmIChuc1NlcGFyYXRvciAhPT0ga2V5U2VwYXJhdG9yIHx8IG5zU2VwYXJhdG9yID09PSBrZXlTZXBhcmF0b3IgJiYgdGhpcy5vcHRpb25zLm5zLmluZGV4T2YocGFydHNbMF0pID4gLTEpIG5hbWVzcGFjZXMgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICAgICBrZXkgPSBwYXJ0cy5qb2luKGtleVNlcGFyYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycpIG5hbWVzcGFjZXMgPSBbbmFtZXNwYWNlc107XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgbmFtZXNwYWNlczogbmFtZXNwYWNlc1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidHJhbnNsYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRyYW5zbGF0ZShrZXlzLCBvcHRpb25zLCBsYXN0S2V5KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKF90eXBlb2ZfX2RlZmF1bHRbJ2RlZmF1bHQnXShvcHRpb25zKSAhPT0gJ29iamVjdCcgJiYgdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKSB7XG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoYXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gICAgICBpZiAoa2V5cyA9PT0gdW5kZWZpbmVkIHx8IGtleXMgPT09IG51bGwpIHJldHVybiAnJztcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShrZXlzKSkga2V5cyA9IFtTdHJpbmcoa2V5cyldO1xuICAgICAgdmFyIHJldHVybkRldGFpbHMgPSBvcHRpb25zLnJldHVybkRldGFpbHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMucmV0dXJuRGV0YWlscyA6IHRoaXMub3B0aW9ucy5yZXR1cm5EZXRhaWxzO1xuICAgICAgdmFyIGtleVNlcGFyYXRvciA9IG9wdGlvbnMua2V5U2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmtleVNlcGFyYXRvciA6IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG5cbiAgICAgIHZhciBfdGhpcyRleHRyYWN0RnJvbUtleSA9IHRoaXMuZXh0cmFjdEZyb21LZXkoa2V5c1trZXlzLmxlbmd0aCAtIDFdLCBvcHRpb25zKSxcbiAgICAgICAgICBrZXkgPSBfdGhpcyRleHRyYWN0RnJvbUtleS5rZXksXG4gICAgICAgICAgbmFtZXNwYWNlcyA9IF90aGlzJGV4dHJhY3RGcm9tS2V5Lm5hbWVzcGFjZXM7XG5cbiAgICAgIHZhciBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzW25hbWVzcGFjZXMubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgbG5nID0gb3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZTtcbiAgICAgIHZhciBhcHBlbmROYW1lc3BhY2VUb0NJTW9kZSA9IG9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGUgfHwgdGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlO1xuXG4gICAgICBpZiAobG5nICYmIGxuZy50b0xvd2VyQ2FzZSgpID09PSAnY2ltb2RlJykge1xuICAgICAgICBpZiAoYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGUpIHtcbiAgICAgICAgICB2YXIgbnNTZXBhcmF0b3IgPSBvcHRpb25zLm5zU2VwYXJhdG9yIHx8IHRoaXMub3B0aW9ucy5uc1NlcGFyYXRvcjtcblxuICAgICAgICAgIGlmIChyZXR1cm5EZXRhaWxzKSB7XG4gICAgICAgICAgICByZXNvbHZlZC5yZXMgPSBcIlwiLmNvbmNhdChuYW1lc3BhY2UpLmNvbmNhdChuc1NlcGFyYXRvcikuY29uY2F0KGtleSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWVzcGFjZSkuY29uY2F0KG5zU2VwYXJhdG9yKS5jb25jYXQoa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXR1cm5EZXRhaWxzKSB7XG4gICAgICAgICAgcmVzb2x2ZWQucmVzID0ga2V5O1xuICAgICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZShrZXlzLCBvcHRpb25zKTtcbiAgICAgIHZhciByZXMgPSByZXNvbHZlZCAmJiByZXNvbHZlZC5yZXM7XG4gICAgICB2YXIgcmVzVXNlZEtleSA9IHJlc29sdmVkICYmIHJlc29sdmVkLnVzZWRLZXkgfHwga2V5O1xuICAgICAgdmFyIHJlc0V4YWN0VXNlZEtleSA9IHJlc29sdmVkICYmIHJlc29sdmVkLmV4YWN0VXNlZEtleSB8fCBrZXk7XG4gICAgICB2YXIgcmVzVHlwZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkocmVzKTtcbiAgICAgIHZhciBub09iamVjdCA9IFsnW29iamVjdCBOdW1iZXJdJywgJ1tvYmplY3QgRnVuY3Rpb25dJywgJ1tvYmplY3QgUmVnRXhwXSddO1xuICAgICAgdmFyIGpvaW5BcnJheXMgPSBvcHRpb25zLmpvaW5BcnJheXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuam9pbkFycmF5cyA6IHRoaXMub3B0aW9ucy5qb2luQXJyYXlzO1xuICAgICAgdmFyIGhhbmRsZUFzT2JqZWN0SW5JMThuRm9ybWF0ID0gIXRoaXMuaTE4bkZvcm1hdCB8fCB0aGlzLmkxOG5Gb3JtYXQuaGFuZGxlQXNPYmplY3Q7XG4gICAgICB2YXIgaGFuZGxlQXNPYmplY3QgPSB0eXBlb2YgcmVzICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcmVzICE9PSAnYm9vbGVhbicgJiYgdHlwZW9mIHJlcyAhPT0gJ251bWJlcic7XG5cbiAgICAgIGlmIChoYW5kbGVBc09iamVjdEluSTE4bkZvcm1hdCAmJiByZXMgJiYgaGFuZGxlQXNPYmplY3QgJiYgbm9PYmplY3QuaW5kZXhPZihyZXNUeXBlKSA8IDAgJiYgISh0eXBlb2Ygam9pbkFycmF5cyA9PT0gJ3N0cmluZycgJiYgcmVzVHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJykpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnJldHVybk9iamVjdHMgJiYgIXRoaXMub3B0aW9ucy5yZXR1cm5PYmplY3RzKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdhY2Nlc3NpbmcgYW4gb2JqZWN0IC0gYnV0IHJldHVybk9iamVjdHMgb3B0aW9ucyBpcyBub3QgZW5hYmxlZCEnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgciA9IHRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXIgPyB0aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyKHJlc1VzZWRLZXksIHJlcywgX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgICBuczogbmFtZXNwYWNlc1xuICAgICAgICAgIH0pKSA6IFwia2V5ICdcIi5jb25jYXQoa2V5LCBcIiAoXCIpLmNvbmNhdCh0aGlzLmxhbmd1YWdlLCBcIiknIHJldHVybmVkIGFuIG9iamVjdCBpbnN0ZWFkIG9mIHN0cmluZy5cIik7XG5cbiAgICAgICAgICBpZiAocmV0dXJuRGV0YWlscykge1xuICAgICAgICAgICAgcmVzb2x2ZWQucmVzID0gcjtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXlTZXBhcmF0b3IpIHtcbiAgICAgICAgICB2YXIgcmVzVHlwZUlzQXJyYXkgPSByZXNUeXBlID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgICAgICAgIHZhciBjb3B5ID0gcmVzVHlwZUlzQXJyYXkgPyBbXSA6IHt9O1xuICAgICAgICAgIHZhciBuZXdLZXlUb1VzZSA9IHJlc1R5cGVJc0FycmF5ID8gcmVzRXhhY3RVc2VkS2V5IDogcmVzVXNlZEtleTtcblxuICAgICAgICAgIGZvciAodmFyIG0gaW4gcmVzKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgbSkpIHtcbiAgICAgICAgICAgICAgdmFyIGRlZXBLZXkgPSBcIlwiLmNvbmNhdChuZXdLZXlUb1VzZSkuY29uY2F0KGtleVNlcGFyYXRvcikuY29uY2F0KG0pO1xuICAgICAgICAgICAgICBjb3B5W21dID0gdGhpcy50cmFuc2xhdGUoZGVlcEtleSwgX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgb3B0aW9ucyksIHtcbiAgICAgICAgICAgICAgICBqb2luQXJyYXlzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBuczogbmFtZXNwYWNlc1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIGlmIChjb3B5W21dID09PSBkZWVwS2V5KSBjb3B5W21dID0gcmVzW21dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlcyA9IGNvcHk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaGFuZGxlQXNPYmplY3RJbkkxOG5Gb3JtYXQgJiYgdHlwZW9mIGpvaW5BcnJheXMgPT09ICdzdHJpbmcnICYmIHJlc1R5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgcmVzID0gcmVzLmpvaW4oam9pbkFycmF5cyk7XG4gICAgICAgIGlmIChyZXMpIHJlcyA9IHRoaXMuZXh0ZW5kVHJhbnNsYXRpb24ocmVzLCBrZXlzLCBvcHRpb25zLCBsYXN0S2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB1c2VkRGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICB2YXIgdXNlZEtleSA9IGZhbHNlO1xuICAgICAgICB2YXIgbmVlZHNQbHVyYWxIYW5kbGluZyA9IG9wdGlvbnMuY291bnQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5jb3VudCAhPT0gJ3N0cmluZyc7XG4gICAgICAgIHZhciBoYXNEZWZhdWx0VmFsdWUgPSBUcmFuc2xhdG9yLmhhc0RlZmF1bHRWYWx1ZShvcHRpb25zKTtcbiAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZVN1ZmZpeCA9IG5lZWRzUGx1cmFsSGFuZGxpbmcgPyB0aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChsbmcsIG9wdGlvbnMuY291bnQsIG9wdGlvbnMpIDogJyc7XG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBvcHRpb25zW1wiZGVmYXVsdFZhbHVlXCIuY29uY2F0KGRlZmF1bHRWYWx1ZVN1ZmZpeCldIHx8IG9wdGlvbnMuZGVmYXVsdFZhbHVlO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkTG9va3VwKHJlcykgJiYgaGFzRGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgdXNlZERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgIHJlcyA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkTG9va3VwKHJlcykpIHtcbiAgICAgICAgICB1c2VkS2V5ID0gdHJ1ZTtcbiAgICAgICAgICByZXMgPSBrZXk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5ID0gb3B0aW9ucy5taXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXkgfHwgdGhpcy5vcHRpb25zLm1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleTtcbiAgICAgICAgdmFyIHJlc0Zvck1pc3NpbmcgPSBtaXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXkgJiYgdXNlZEtleSA/IHVuZGVmaW5lZCA6IHJlcztcbiAgICAgICAgdmFyIHVwZGF0ZU1pc3NpbmcgPSBoYXNEZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlICE9PSByZXMgJiYgdGhpcy5vcHRpb25zLnVwZGF0ZU1pc3Npbmc7XG5cbiAgICAgICAgaWYgKHVzZWRLZXkgfHwgdXNlZERlZmF1bHQgfHwgdXBkYXRlTWlzc2luZykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyh1cGRhdGVNaXNzaW5nID8gJ3VwZGF0ZUtleScgOiAnbWlzc2luZ0tleScsIGxuZywgbmFtZXNwYWNlLCBrZXksIHVwZGF0ZU1pc3NpbmcgPyBkZWZhdWx0VmFsdWUgOiByZXMpO1xuXG4gICAgICAgICAgaWYgKGtleVNlcGFyYXRvcikge1xuICAgICAgICAgICAgdmFyIGZrID0gdGhpcy5yZXNvbHZlKGtleSwgX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgICAgIGtleVNlcGFyYXRvcjogZmFsc2VcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmIChmayAmJiBmay5yZXMpIHRoaXMubG9nZ2VyLndhcm4oJ1NlZW1zIHRoZSBsb2FkZWQgdHJhbnNsYXRpb25zIHdlcmUgaW4gZmxhdCBKU09OIGZvcm1hdCBpbnN0ZWFkIG9mIG5lc3RlZC4gRWl0aGVyIHNldCBrZXlTZXBhcmF0b3I6IGZhbHNlIG9uIGluaXQgb3IgbWFrZSBzdXJlIHlvdXIgdHJhbnNsYXRpb25zIGFyZSBwdWJsaXNoZWQgaW4gbmVzdGVkIGZvcm1hdC4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbG5ncyA9IFtdO1xuICAgICAgICAgIHZhciBmYWxsYmFja0xuZ3MgPSB0aGlzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcsIG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2UpO1xuXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvID09PSAnZmFsbGJhY2snICYmIGZhbGxiYWNrTG5ncyAmJiBmYWxsYmFja0xuZ3NbMF0pIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFsbGJhY2tMbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGxuZ3MucHVzaChmYWxsYmFja0xuZ3NbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8gPT09ICdhbGwnKSB7XG4gICAgICAgICAgICBsbmdzID0gdGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG5ncy5wdXNoKG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzZW5kID0gZnVuY3Rpb24gc2VuZChsLCBrLCBzcGVjaWZpY0RlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIGRlZmF1bHRGb3JNaXNzaW5nID0gaGFzRGVmYXVsdFZhbHVlICYmIHNwZWNpZmljRGVmYXVsdFZhbHVlICE9PSByZXMgPyBzcGVjaWZpY0RlZmF1bHRWYWx1ZSA6IHJlc0Zvck1pc3Npbmc7XG5cbiAgICAgICAgICAgIGlmIChfdGhpczIub3B0aW9ucy5taXNzaW5nS2V5SGFuZGxlcikge1xuICAgICAgICAgICAgICBfdGhpczIub3B0aW9ucy5taXNzaW5nS2V5SGFuZGxlcihsLCBuYW1lc3BhY2UsIGssIGRlZmF1bHRGb3JNaXNzaW5nLCB1cGRhdGVNaXNzaW5nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX3RoaXMyLmJhY2tlbmRDb25uZWN0b3IgJiYgX3RoaXMyLmJhY2tlbmRDb25uZWN0b3Iuc2F2ZU1pc3NpbmcpIHtcbiAgICAgICAgICAgICAgX3RoaXMyLmJhY2tlbmRDb25uZWN0b3Iuc2F2ZU1pc3NpbmcobCwgbmFtZXNwYWNlLCBrLCBkZWZhdWx0Rm9yTWlzc2luZywgdXBkYXRlTWlzc2luZywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF90aGlzMi5lbWl0KCdtaXNzaW5nS2V5JywgbCwgbmFtZXNwYWNlLCBrLCByZXMpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nUGx1cmFscyAmJiBuZWVkc1BsdXJhbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICAgIGxuZ3MuZm9yRWFjaChmdW5jdGlvbiAobGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4ZXMobGFuZ3VhZ2UsIG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgc2VuZChbbGFuZ3VhZ2VdLCBrZXkgKyBzdWZmaXgsIG9wdGlvbnNbXCJkZWZhdWx0VmFsdWVcIi5jb25jYXQoc3VmZml4KV0gfHwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZW5kKGxuZ3MsIGtleSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXMgPSB0aGlzLmV4dGVuZFRyYW5zbGF0aW9uKHJlcywga2V5cywgb3B0aW9ucywgcmVzb2x2ZWQsIGxhc3RLZXkpO1xuICAgICAgICBpZiAodXNlZEtleSAmJiByZXMgPT09IGtleSAmJiB0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5KSByZXMgPSBcIlwiLmNvbmNhdChuYW1lc3BhY2UsIFwiOlwiKS5jb25jYXQoa2V5KTtcblxuICAgICAgICBpZiAoKHVzZWRLZXkgfHwgdXNlZERlZmF1bHQpICYmIHRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJICE9PSAndjEnKSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcih0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5ID8gXCJcIi5jb25jYXQobmFtZXNwYWNlLCBcIjpcIikuY29uY2F0KGtleSkgOiBrZXksIHVzZWREZWZhdWx0ID8gcmVzIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIocmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVybkRldGFpbHMpIHtcbiAgICAgICAgcmVzb2x2ZWQucmVzID0gcmVzO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImV4dGVuZFRyYW5zbGF0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGV4dGVuZFRyYW5zbGF0aW9uKHJlcywga2V5LCBvcHRpb25zLCByZXNvbHZlZCwgbGFzdEtleSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmkxOG5Gb3JtYXQgJiYgdGhpcy5pMThuRm9ybWF0LnBhcnNlKSB7XG4gICAgICAgIHJlcyA9IHRoaXMuaTE4bkZvcm1hdC5wYXJzZShyZXMsIF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMpLCBvcHRpb25zKSwgcmVzb2x2ZWQudXNlZExuZywgcmVzb2x2ZWQudXNlZE5TLCByZXNvbHZlZC51c2VkS2V5LCB7XG4gICAgICAgICAgcmVzb2x2ZWQ6IHJlc29sdmVkXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5za2lwSW50ZXJwb2xhdGlvbikge1xuICAgICAgICBpZiAob3B0aW9ucy5pbnRlcnBvbGF0aW9uKSB0aGlzLmludGVycG9sYXRvci5pbml0KF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIG9wdGlvbnMpLCB7XG4gICAgICAgICAgaW50ZXJwb2xhdGlvbjogX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24pLCBvcHRpb25zLmludGVycG9sYXRpb24pXG4gICAgICAgIH0pKTtcbiAgICAgICAgdmFyIHNraXBPblZhcmlhYmxlcyA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnICYmIChvcHRpb25zICYmIG9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiBvcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzIDogdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzKTtcbiAgICAgICAgdmFyIG5lc3RCZWY7XG5cbiAgICAgICAgaWYgKHNraXBPblZhcmlhYmxlcykge1xuICAgICAgICAgIHZhciBuYiA9IHJlcy5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtcbiAgICAgICAgICBuZXN0QmVmID0gbmIgJiYgbmIubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRhdGEgPSBvcHRpb25zLnJlcGxhY2UgJiYgdHlwZW9mIG9wdGlvbnMucmVwbGFjZSAhPT0gJ3N0cmluZycgPyBvcHRpb25zLnJlcGxhY2UgOiBvcHRpb25zO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcykgZGF0YSA9IF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMpLCBkYXRhKTtcbiAgICAgICAgcmVzID0gdGhpcy5pbnRlcnBvbGF0b3IuaW50ZXJwb2xhdGUocmVzLCBkYXRhLCBvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlLCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoc2tpcE9uVmFyaWFibGVzKSB7XG4gICAgICAgICAgdmFyIG5hID0gcmVzLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO1xuICAgICAgICAgIHZhciBuZXN0QWZ0ID0gbmEgJiYgbmEubGVuZ3RoO1xuICAgICAgICAgIGlmIChuZXN0QmVmIDwgbmVzdEFmdCkgb3B0aW9ucy5uZXN0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5uZXN0ICE9PSBmYWxzZSkgcmVzID0gdGhpcy5pbnRlcnBvbGF0b3IubmVzdChyZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxhc3RLZXkgJiYgbGFzdEtleVswXSA9PT0gYXJnc1swXSAmJiAhb3B0aW9ucy5jb250ZXh0KSB7XG4gICAgICAgICAgICBfdGhpczMubG9nZ2VyLndhcm4oXCJJdCBzZWVtcyB5b3UgYXJlIG5lc3RpbmcgcmVjdXJzaXZlbHkga2V5OiBcIi5jb25jYXQoYXJnc1swXSwgXCIgaW4ga2V5OiBcIikuY29uY2F0KGtleVswXSkpO1xuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gX3RoaXMzLnRyYW5zbGF0ZS5hcHBseShfdGhpczMsIGFyZ3MuY29uY2F0KFtrZXldKSk7XG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy5pbnRlcnBvbGF0aW9uKSB0aGlzLmludGVycG9sYXRvci5yZXNldCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zdFByb2Nlc3MgPSBvcHRpb25zLnBvc3RQcm9jZXNzIHx8IHRoaXMub3B0aW9ucy5wb3N0UHJvY2VzcztcbiAgICAgIHZhciBwb3N0UHJvY2Vzc29yTmFtZXMgPSB0eXBlb2YgcG9zdFByb2Nlc3MgPT09ICdzdHJpbmcnID8gW3Bvc3RQcm9jZXNzXSA6IHBvc3RQcm9jZXNzO1xuXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQgJiYgcmVzICE9PSBudWxsICYmIHBvc3RQcm9jZXNzb3JOYW1lcyAmJiBwb3N0UHJvY2Vzc29yTmFtZXMubGVuZ3RoICYmIG9wdGlvbnMuYXBwbHlQb3N0UHJvY2Vzc29yICE9PSBmYWxzZSkge1xuICAgICAgICByZXMgPSBwb3N0UHJvY2Vzc29yLmhhbmRsZShwb3N0UHJvY2Vzc29yTmFtZXMsIHJlcywga2V5LCB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkID8gX29iamVjdFNwcmVhZCQyKHtcbiAgICAgICAgICBpMThuUmVzb2x2ZWQ6IHJlc29sdmVkXG4gICAgICAgIH0sIG9wdGlvbnMpIDogb3B0aW9ucywgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlc29sdmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzb2x2ZShrZXlzKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIGZvdW5kO1xuICAgICAgdmFyIHVzZWRLZXk7XG4gICAgICB2YXIgZXhhY3RVc2VkS2V5O1xuICAgICAgdmFyIHVzZWRMbmc7XG4gICAgICB2YXIgdXNlZE5TO1xuICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJykga2V5cyA9IFtrZXlzXTtcbiAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICBpZiAoX3RoaXM0LmlzVmFsaWRMb29rdXAoZm91bmQpKSByZXR1cm47XG5cbiAgICAgICAgdmFyIGV4dHJhY3RlZCA9IF90aGlzNC5leHRyYWN0RnJvbUtleShrLCBvcHRpb25zKTtcblxuICAgICAgICB2YXIga2V5ID0gZXh0cmFjdGVkLmtleTtcbiAgICAgICAgdXNlZEtleSA9IGtleTtcbiAgICAgICAgdmFyIG5hbWVzcGFjZXMgPSBleHRyYWN0ZWQubmFtZXNwYWNlcztcbiAgICAgICAgaWYgKF90aGlzNC5vcHRpb25zLmZhbGxiYWNrTlMpIG5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzLmNvbmNhdChfdGhpczQub3B0aW9ucy5mYWxsYmFja05TKTtcbiAgICAgICAgdmFyIG5lZWRzUGx1cmFsSGFuZGxpbmcgPSBvcHRpb25zLmNvdW50ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY291bnQgIT09ICdzdHJpbmcnO1xuXG4gICAgICAgIHZhciBuZWVkc1plcm9TdWZmaXhMb29rdXAgPSBuZWVkc1BsdXJhbEhhbmRsaW5nICYmICFvcHRpb25zLm9yZGluYWwgJiYgb3B0aW9ucy5jb3VudCA9PT0gMCAmJiBfdGhpczQucGx1cmFsUmVzb2x2ZXIuc2hvdWxkVXNlSW50bEFwaSgpO1xuXG4gICAgICAgIHZhciBuZWVkc0NvbnRleHRIYW5kbGluZyA9IG9wdGlvbnMuY29udGV4dCAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAnbnVtYmVyJykgJiYgb3B0aW9ucy5jb250ZXh0ICE9PSAnJztcbiAgICAgICAgdmFyIGNvZGVzID0gb3B0aW9ucy5sbmdzID8gb3B0aW9ucy5sbmdzIDogX3RoaXM0Lmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KG9wdGlvbnMubG5nIHx8IF90aGlzNC5sYW5ndWFnZSwgb3B0aW9ucy5mYWxsYmFja0xuZyk7XG4gICAgICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbiAobnMpIHtcbiAgICAgICAgICBpZiAoX3RoaXM0LmlzVmFsaWRMb29rdXAoZm91bmQpKSByZXR1cm47XG4gICAgICAgICAgdXNlZE5TID0gbnM7XG5cbiAgICAgICAgICBpZiAoIWNoZWNrZWRMb2FkZWRGb3JbXCJcIi5jb25jYXQoY29kZXNbMF0sIFwiLVwiKS5jb25jYXQobnMpXSAmJiBfdGhpczQudXRpbHMgJiYgX3RoaXM0LnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSAmJiAhX3RoaXM0LnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSh1c2VkTlMpKSB7XG4gICAgICAgICAgICBjaGVja2VkTG9hZGVkRm9yW1wiXCIuY29uY2F0KGNvZGVzWzBdLCBcIi1cIikuY29uY2F0KG5zKV0gPSB0cnVlO1xuXG4gICAgICAgICAgICBfdGhpczQubG9nZ2VyLndhcm4oXCJrZXkgXFxcIlwiLmNvbmNhdCh1c2VkS2V5LCBcIlxcXCIgZm9yIGxhbmd1YWdlcyBcXFwiXCIpLmNvbmNhdChjb2Rlcy5qb2luKCcsICcpLCBcIlxcXCIgd29uJ3QgZ2V0IHJlc29sdmVkIGFzIG5hbWVzcGFjZSBcXFwiXCIpLmNvbmNhdCh1c2VkTlMsIFwiXFxcIiB3YXMgbm90IHlldCBsb2FkZWRcIiksICdUaGlzIG1lYW5zIHNvbWV0aGluZyBJUyBXUk9ORyBpbiB5b3VyIHNldHVwLiBZb3UgYWNjZXNzIHRoZSB0IGZ1bmN0aW9uIGJlZm9yZSBpMThuZXh0LmluaXQgLyBpMThuZXh0LmxvYWROYW1lc3BhY2UgLyBpMThuZXh0LmNoYW5nZUxhbmd1YWdlIHdhcyBkb25lLiBXYWl0IGZvciB0aGUgY2FsbGJhY2sgb3IgUHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBhY2Nlc3NpbmcgaXQhISEnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXM0LmlzVmFsaWRMb29rdXAoZm91bmQpKSByZXR1cm47XG4gICAgICAgICAgICB1c2VkTG5nID0gY29kZTtcbiAgICAgICAgICAgIHZhciBmaW5hbEtleXMgPSBba2V5XTtcblxuICAgICAgICAgICAgaWYgKF90aGlzNC5pMThuRm9ybWF0ICYmIF90aGlzNC5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMpIHtcbiAgICAgICAgICAgICAgX3RoaXM0LmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cyhmaW5hbEtleXMsIGtleSwgY29kZSwgbnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHBsdXJhbFN1ZmZpeDtcbiAgICAgICAgICAgICAgaWYgKG5lZWRzUGx1cmFsSGFuZGxpbmcpIHBsdXJhbFN1ZmZpeCA9IF90aGlzNC5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgoY29kZSwgb3B0aW9ucy5jb3VudCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIHZhciB6ZXJvU3VmZml4ID0gXCJcIi5jb25jYXQoX3RoaXM0Lm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yLCBcInplcm9cIik7XG5cbiAgICAgICAgICAgICAgaWYgKG5lZWRzUGx1cmFsSGFuZGxpbmcpIHtcbiAgICAgICAgICAgICAgICBmaW5hbEtleXMucHVzaChrZXkgKyBwbHVyYWxTdWZmaXgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRzWmVyb1N1ZmZpeExvb2t1cCkge1xuICAgICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goa2V5ICsgemVyb1N1ZmZpeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG5lZWRzQ29udGV4dEhhbmRsaW5nKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHRLZXkgPSBcIlwiLmNvbmNhdChrZXkpLmNvbmNhdChfdGhpczQub3B0aW9ucy5jb250ZXh0U2VwYXJhdG9yKS5jb25jYXQob3B0aW9ucy5jb250ZXh0KTtcbiAgICAgICAgICAgICAgICBmaW5hbEtleXMucHVzaChjb250ZXh0S2V5KTtcblxuICAgICAgICAgICAgICAgIGlmIChuZWVkc1BsdXJhbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICAgICAgICBmaW5hbEtleXMucHVzaChjb250ZXh0S2V5ICsgcGx1cmFsU3VmZml4KTtcblxuICAgICAgICAgICAgICAgICAgaWYgKG5lZWRzWmVyb1N1ZmZpeExvb2t1cCkge1xuICAgICAgICAgICAgICAgICAgICBmaW5hbEtleXMucHVzaChjb250ZXh0S2V5ICsgemVyb1N1ZmZpeCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwb3NzaWJsZUtleTtcblxuICAgICAgICAgICAgd2hpbGUgKHBvc3NpYmxlS2V5ID0gZmluYWxLZXlzLnBvcCgpKSB7XG4gICAgICAgICAgICAgIGlmICghX3RoaXM0LmlzVmFsaWRMb29rdXAoZm91bmQpKSB7XG4gICAgICAgICAgICAgICAgZXhhY3RVc2VkS2V5ID0gcG9zc2libGVLZXk7XG4gICAgICAgICAgICAgICAgZm91bmQgPSBfdGhpczQuZ2V0UmVzb3VyY2UoY29kZSwgbnMsIHBvc3NpYmxlS2V5LCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzOiBmb3VuZCxcbiAgICAgICAgdXNlZEtleTogdXNlZEtleSxcbiAgICAgICAgZXhhY3RVc2VkS2V5OiBleGFjdFVzZWRLZXksXG4gICAgICAgIHVzZWRMbmc6IHVzZWRMbmcsXG4gICAgICAgIHVzZWROUzogdXNlZE5TXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc1ZhbGlkTG9va3VwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzVmFsaWRMb29rdXAocmVzKSB7XG4gICAgICByZXR1cm4gcmVzICE9PSB1bmRlZmluZWQgJiYgISghdGhpcy5vcHRpb25zLnJldHVybk51bGwgJiYgcmVzID09PSBudWxsKSAmJiAhKCF0aGlzLm9wdGlvbnMucmV0dXJuRW1wdHlTdHJpbmcgJiYgcmVzID09PSAnJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFJlc291cmNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlc291cmNlKGNvZGUsIG5zLCBrZXkpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcbiAgICAgIGlmICh0aGlzLmkxOG5Gb3JtYXQgJiYgdGhpcy5pMThuRm9ybWF0LmdldFJlc291cmNlKSByZXR1cm4gdGhpcy5pMThuRm9ybWF0LmdldFJlc291cmNlKGNvZGUsIG5zLCBrZXksIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdG9yZS5nZXRSZXNvdXJjZShjb2RlLCBucywga2V5LCBvcHRpb25zKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJoYXNEZWZhdWx0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzRGVmYXVsdFZhbHVlKG9wdGlvbnMpIHtcbiAgICAgIHZhciBwcmVmaXggPSAnZGVmYXVsdFZhbHVlJztcblxuICAgICAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pICYmIHByZWZpeCA9PT0gb3B0aW9uLnN1YnN0cmluZygwLCBwcmVmaXgubGVuZ3RoKSAmJiB1bmRlZmluZWQgIT09IG9wdGlvbnNbb3B0aW9uXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVHJhbnNsYXRvcjtcbn0oRXZlbnRFbWl0dGVyKTtcblxuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn1cblxudmFyIExhbmd1YWdlVXRpbCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGFuZ3VhZ2VVdGlsKG9wdGlvbnMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2tfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLCBMYW5ndWFnZVV0aWwpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN1cHBvcnRlZExuZ3MgPSB0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyB8fCBmYWxzZTtcbiAgICB0aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdsYW5ndWFnZVV0aWxzJyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3NfX2RlZmF1bHRbJ2RlZmF1bHQnXShMYW5ndWFnZVV0aWwsIFt7XG4gICAga2V5OiBcImdldFNjcmlwdFBhcnRGcm9tQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSkge1xuICAgICAgaWYgKCFjb2RlIHx8IGNvZGUuaW5kZXhPZignLScpIDwgMCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgcCA9IGNvZGUuc3BsaXQoJy0nKTtcbiAgICAgIGlmIChwLmxlbmd0aCA9PT0gMikgcmV0dXJuIG51bGw7XG4gICAgICBwLnBvcCgpO1xuICAgICAgaWYgKHBbcC5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpID09PSAneCcpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHAuam9pbignLScpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSkge1xuICAgICAgaWYgKCFjb2RlIHx8IGNvZGUuaW5kZXhPZignLScpIDwgMCkgcmV0dXJuIGNvZGU7XG4gICAgICB2YXIgcCA9IGNvZGUuc3BsaXQoJy0nKTtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShwWzBdKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0TGFuZ3VhZ2VDb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSB7XG4gICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgICAgdmFyIHNwZWNpYWxDYXNlcyA9IFsnaGFucycsICdoYW50JywgJ2xhdG4nLCAnY3lybCcsICdjYW5zJywgJ21vbmcnLCAnYXJhYiddO1xuICAgICAgICB2YXIgcCA9IGNvZGUuc3BsaXQoJy0nKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvd2VyQ2FzZUxuZykge1xuICAgICAgICAgIHAgPSBwLm1hcChmdW5jdGlvbiAocGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChwLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHBbMF0gPSBwWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcFsxXSA9IHBbMV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBpZiAoc3BlY2lhbENhc2VzLmluZGV4T2YocFsxXS50b0xvd2VyQ2FzZSgpKSA+IC0xKSBwWzFdID0gY2FwaXRhbGl6ZShwWzFdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHAubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgcFswXSA9IHBbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAocFsxXS5sZW5ndGggPT09IDIpIHBbMV0gPSBwWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHBbMF0gIT09ICdzZ24nICYmIHBbMl0ubGVuZ3RoID09PSAyKSBwWzJdID0gcFsyXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGlmIChzcGVjaWFsQ2FzZXMuaW5kZXhPZihwWzFdLnRvTG93ZXJDYXNlKCkpID4gLTEpIHBbMV0gPSBjYXBpdGFsaXplKHBbMV0udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgaWYgKHNwZWNpYWxDYXNlcy5pbmRleE9mKHBbMl0udG9Mb3dlckNhc2UoKSkgPiAtMSkgcFsyXSA9IGNhcGl0YWxpemUocFsyXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwLmpvaW4oJy0nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jbGVhbkNvZGUgfHwgdGhpcy5vcHRpb25zLmxvd2VyQ2FzZUxuZyA/IGNvZGUudG9Mb3dlckNhc2UoKSA6IGNvZGU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzU3VwcG9ydGVkQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1N1cHBvcnRlZENvZGUoY29kZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkID09PSAnbGFuZ3VhZ2VPbmx5JyB8fCB0aGlzLm9wdGlvbnMubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzKSB7XG4gICAgICAgIGNvZGUgPSB0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIXRoaXMuc3VwcG9ydGVkTG5ncyB8fCAhdGhpcy5zdXBwb3J0ZWRMbmdzLmxlbmd0aCB8fCB0aGlzLnN1cHBvcnRlZExuZ3MuaW5kZXhPZihjb2RlKSA+IC0xO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRCZXN0TWF0Y2hGcm9tQ29kZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QmVzdE1hdGNoRnJvbUNvZGVzKGNvZGVzKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoIWNvZGVzKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBmb3VuZDtcbiAgICAgIGNvZGVzLmZvckVhY2goZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm47XG5cbiAgICAgICAgdmFyIGNsZWFuZWRMbmcgPSBfdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSk7XG5cbiAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MgfHwgX3RoaXMuaXNTdXBwb3J0ZWRDb2RlKGNsZWFuZWRMbmcpKSBmb3VuZCA9IGNsZWFuZWRMbmc7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFmb3VuZCAmJiB0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncykge1xuICAgICAgICBjb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgICAgaWYgKGZvdW5kKSByZXR1cm47XG5cbiAgICAgICAgICB2YXIgbG5nT25seSA9IF90aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpO1xuXG4gICAgICAgICAgaWYgKF90aGlzLmlzU3VwcG9ydGVkQ29kZShsbmdPbmx5KSkgcmV0dXJuIGZvdW5kID0gbG5nT25seTtcbiAgICAgICAgICBmb3VuZCA9IF90aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncy5maW5kKGZ1bmN0aW9uIChzdXBwb3J0ZWRMbmcpIHtcbiAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRMbmcuaW5kZXhPZihsbmdPbmx5KSA9PT0gMCkgcmV0dXJuIHN1cHBvcnRlZExuZztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gdGhpcy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZylbMF07XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZhbGxiYWNrQ29kZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmFsbGJhY2tDb2RlcyhmYWxsYmFja3MsIGNvZGUpIHtcbiAgICAgIGlmICghZmFsbGJhY2tzKSByZXR1cm4gW107XG4gICAgICBpZiAodHlwZW9mIGZhbGxiYWNrcyA9PT0gJ2Z1bmN0aW9uJykgZmFsbGJhY2tzID0gZmFsbGJhY2tzKGNvZGUpO1xuICAgICAgaWYgKHR5cGVvZiBmYWxsYmFja3MgPT09ICdzdHJpbmcnKSBmYWxsYmFja3MgPSBbZmFsbGJhY2tzXTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGZhbGxiYWNrcykgPT09ICdbb2JqZWN0IEFycmF5XScpIHJldHVybiBmYWxsYmFja3M7XG4gICAgICBpZiAoIWNvZGUpIHJldHVybiBmYWxsYmFja3NbXCJkZWZhdWx0XCJdIHx8IFtdO1xuICAgICAgdmFyIGZvdW5kID0gZmFsbGJhY2tzW2NvZGVdO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKV07XG4gICAgICBpZiAoIWZvdW5kKSBmb3VuZCA9IGZhbGxiYWNrc1tcImRlZmF1bHRcIl07XG4gICAgICByZXR1cm4gZm91bmQgfHwgW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvUmVzb2x2ZUhpZXJhcmNoeVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1Jlc29sdmVIaWVyYXJjaHkoY29kZSwgZmFsbGJhY2tDb2RlKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGZhbGxiYWNrQ29kZXMgPSB0aGlzLmdldEZhbGxiYWNrQ29kZXMoZmFsbGJhY2tDb2RlIHx8IHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyB8fCBbXSwgY29kZSk7XG4gICAgICB2YXIgY29kZXMgPSBbXTtcblxuICAgICAgdmFyIGFkZENvZGUgPSBmdW5jdGlvbiBhZGRDb2RlKGMpIHtcbiAgICAgICAgaWYgKCFjKSByZXR1cm47XG5cbiAgICAgICAgaWYgKF90aGlzMi5pc1N1cHBvcnRlZENvZGUoYykpIHtcbiAgICAgICAgICBjb2Rlcy5wdXNoKGMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzMi5sb2dnZXIud2FybihcInJlamVjdGluZyBsYW5ndWFnZSBjb2RlIG5vdCBmb3VuZCBpbiBzdXBwb3J0ZWRMbmdzOiBcIi5jb25jYXQoYykpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkICE9PSAnbGFuZ3VhZ2VPbmx5JykgYWRkQ29kZSh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCAhPT0gJ2xhbmd1YWdlT25seScgJiYgdGhpcy5vcHRpb25zLmxvYWQgIT09ICdjdXJyZW50T25seScpIGFkZENvZGUodGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSkpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvYWQgIT09ICdjdXJyZW50T25seScpIGFkZENvZGUodGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICBhZGRDb2RlKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGNvZGUpKTtcbiAgICAgIH1cblxuICAgICAgZmFsbGJhY2tDb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChmYykge1xuICAgICAgICBpZiAoY29kZXMuaW5kZXhPZihmYykgPCAwKSBhZGRDb2RlKF90aGlzMi5mb3JtYXRMYW5ndWFnZUNvZGUoZmMpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvZGVzO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMYW5ndWFnZVV0aWw7XG59KCk7XG5cbnZhciBzZXRzID0gW3tcbiAgbG5nczogWydhY2gnLCAnYWsnLCAnYW0nLCAnYXJuJywgJ2JyJywgJ2ZpbCcsICdndW4nLCAnbG4nLCAnbWZlJywgJ21nJywgJ21pJywgJ29jJywgJ3B0JywgJ3B0LUJSJywgJ3RnJywgJ3RsJywgJ3RpJywgJ3RyJywgJ3V6JywgJ3dhJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiAxXG59LCB7XG4gIGxuZ3M6IFsnYWYnLCAnYW4nLCAnYXN0JywgJ2F6JywgJ2JnJywgJ2JuJywgJ2NhJywgJ2RhJywgJ2RlJywgJ2RldicsICdlbCcsICdlbicsICdlbycsICdlcycsICdldCcsICdldScsICdmaScsICdmbycsICdmdXInLCAnZnknLCAnZ2wnLCAnZ3UnLCAnaGEnLCAnaGknLCAnaHUnLCAnaHknLCAnaWEnLCAnaXQnLCAna2snLCAna24nLCAna3UnLCAnbGInLCAnbWFpJywgJ21sJywgJ21uJywgJ21yJywgJ25haCcsICduYXAnLCAnbmInLCAnbmUnLCAnbmwnLCAnbm4nLCAnbm8nLCAnbnNvJywgJ3BhJywgJ3BhcCcsICdwbXMnLCAncHMnLCAncHQtUFQnLCAncm0nLCAnc2NvJywgJ3NlJywgJ3NpJywgJ3NvJywgJ3NvbicsICdzcScsICdzdicsICdzdycsICd0YScsICd0ZScsICd0aycsICd1cicsICd5byddLFxuICBucjogWzEsIDJdLFxuICBmYzogMlxufSwge1xuICBsbmdzOiBbJ2F5JywgJ2JvJywgJ2NnZycsICdmYScsICdodCcsICdpZCcsICdqYScsICdqYm8nLCAna2EnLCAna20nLCAna28nLCAna3knLCAnbG8nLCAnbXMnLCAnc2FoJywgJ3N1JywgJ3RoJywgJ3R0JywgJ3VnJywgJ3ZpJywgJ3dvJywgJ3poJ10sXG4gIG5yOiBbMV0sXG4gIGZjOiAzXG59LCB7XG4gIGxuZ3M6IFsnYmUnLCAnYnMnLCAnY25yJywgJ2R6JywgJ2hyJywgJ3J1JywgJ3NyJywgJ3VrJ10sXG4gIG5yOiBbMSwgMiwgNV0sXG4gIGZjOiA0XG59LCB7XG4gIGxuZ3M6IFsnYXInXSxcbiAgbnI6IFswLCAxLCAyLCAzLCAxMSwgMTAwXSxcbiAgZmM6IDVcbn0sIHtcbiAgbG5nczogWydjcycsICdzayddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogNlxufSwge1xuICBsbmdzOiBbJ2NzYicsICdwbCddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogN1xufSwge1xuICBsbmdzOiBbJ2N5J10sXG4gIG5yOiBbMSwgMiwgMywgOF0sXG4gIGZjOiA4XG59LCB7XG4gIGxuZ3M6IFsnZnInXSxcbiAgbnI6IFsxLCAyXSxcbiAgZmM6IDlcbn0sIHtcbiAgbG5nczogWydnYSddLFxuICBucjogWzEsIDIsIDMsIDcsIDExXSxcbiAgZmM6IDEwXG59LCB7XG4gIGxuZ3M6IFsnZ2QnXSxcbiAgbnI6IFsxLCAyLCAzLCAyMF0sXG4gIGZjOiAxMVxufSwge1xuICBsbmdzOiBbJ2lzJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiAxMlxufSwge1xuICBsbmdzOiBbJ2p2J10sXG4gIG5yOiBbMCwgMV0sXG4gIGZjOiAxM1xufSwge1xuICBsbmdzOiBbJ2t3J10sXG4gIG5yOiBbMSwgMiwgMywgNF0sXG4gIGZjOiAxNFxufSwge1xuICBsbmdzOiBbJ2x0J10sXG4gIG5yOiBbMSwgMiwgMTBdLFxuICBmYzogMTVcbn0sIHtcbiAgbG5nczogWydsdiddLFxuICBucjogWzEsIDIsIDBdLFxuICBmYzogMTZcbn0sIHtcbiAgbG5nczogWydtayddLFxuICBucjogWzEsIDJdLFxuICBmYzogMTdcbn0sIHtcbiAgbG5nczogWydtbmsnXSxcbiAgbnI6IFswLCAxLCAyXSxcbiAgZmM6IDE4XG59LCB7XG4gIGxuZ3M6IFsnbXQnXSxcbiAgbnI6IFsxLCAyLCAxMSwgMjBdLFxuICBmYzogMTlcbn0sIHtcbiAgbG5nczogWydvciddLFxuICBucjogWzIsIDFdLFxuICBmYzogMlxufSwge1xuICBsbmdzOiBbJ3JvJ10sXG4gIG5yOiBbMSwgMiwgMjBdLFxuICBmYzogMjBcbn0sIHtcbiAgbG5nczogWydzbCddLFxuICBucjogWzUsIDEsIDIsIDNdLFxuICBmYzogMjFcbn0sIHtcbiAgbG5nczogWydoZScsICdpdyddLFxuICBucjogWzEsIDIsIDIwLCAyMV0sXG4gIGZjOiAyMlxufV07XG52YXIgX3J1bGVzUGx1cmFsc1R5cGVzID0ge1xuICAxOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPiAxKTtcbiAgfSxcbiAgMjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICE9IDEpO1xuICB9LFxuICAzOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgNDogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgPT0gMSAmJiBuICUgMTAwICE9IDExID8gMCA6IG4gJSAxMCA+PSAyICYmIG4gJSAxMCA8PSA0ICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDU6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAwID8gMCA6IG4gPT0gMSA/IDEgOiBuID09IDIgPyAyIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTAgPyAzIDogbiAlIDEwMCA+PSAxMSA/IDQgOiA1KTtcbiAgfSxcbiAgNjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA+PSAyICYmIG4gPD0gNCA/IDEgOiAyKTtcbiAgfSxcbiAgNzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiAlIDEwID49IDIgJiYgbiAlIDEwIDw9IDQgJiYgKG4gJSAxMDAgPCAxMCB8fCBuICUgMTAwID49IDIwKSA/IDEgOiAyKTtcbiAgfSxcbiAgODogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA9PSAyID8gMSA6IG4gIT0gOCAmJiBuICE9IDExID8gMiA6IDMpO1xuICB9LFxuICA5OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPj0gMik7XG4gIH0sXG4gIDEwOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogbiA8IDcgPyAyIDogbiA8IDExID8gMyA6IDQpO1xuICB9LFxuICAxMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgfHwgbiA9PSAxMSA/IDAgOiBuID09IDIgfHwgbiA9PSAxMiA/IDEgOiBuID4gMiAmJiBuIDwgMjAgPyAyIDogMyk7XG4gIH0sXG4gIDEyOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCAhPSAxIHx8IG4gJSAxMDAgPT0gMTEpO1xuICB9LFxuICAxMzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICE9PSAwKTtcbiAgfSxcbiAgMTQ6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiBuID09IDMgPyAyIDogMyk7XG4gIH0sXG4gIDE1OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogbiAlIDEwID49IDIgJiYgKG4gJSAxMDAgPCAxMCB8fCBuICUgMTAwID49IDIwKSA/IDEgOiAyKTtcbiAgfSxcbiAgMTY6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiBuICE9PSAwID8gMSA6IDIpO1xuICB9LFxuICAxNzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgfHwgbiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiAxKTtcbiAgfSxcbiAgMTg6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAwID8gMCA6IG4gPT0gMSA/IDEgOiAyKTtcbiAgfSxcbiAgMTk6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMCB8fCBuICUgMTAwID4gMSAmJiBuICUgMTAwIDwgMTEgPyAxIDogbiAlIDEwMCA+IDEwICYmIG4gJSAxMDAgPCAyMCA/IDIgOiAzKTtcbiAgfSxcbiAgMjA6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMCB8fCBuICUgMTAwID4gMCAmJiBuICUgMTAwIDwgMjAgPyAxIDogMik7XG4gIH0sXG4gIDIxOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMDAgPT0gMSA/IDEgOiBuICUgMTAwID09IDIgPyAyIDogbiAlIDEwMCA9PSAzIHx8IG4gJSAxMDAgPT0gNCA/IDMgOiAwKTtcbiAgfSxcbiAgMjI6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiAobiA8IDAgfHwgbiA+IDEwKSAmJiBuICUgMTAgPT0gMCA/IDIgOiAzKTtcbiAgfVxufTtcbnZhciBkZXByZWNhdGVkSnNvblZlcnNpb25zID0gWyd2MScsICd2MicsICd2MyddO1xudmFyIHN1ZmZpeGVzT3JkZXIgPSB7XG4gIHplcm86IDAsXG4gIG9uZTogMSxcbiAgdHdvOiAyLFxuICBmZXc6IDMsXG4gIG1hbnk6IDQsXG4gIG90aGVyOiA1XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSdWxlcygpIHtcbiAgdmFyIHJ1bGVzID0ge307XG4gIHNldHMuZm9yRWFjaChmdW5jdGlvbiAoc2V0KSB7XG4gICAgc2V0LmxuZ3MuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgcnVsZXNbbF0gPSB7XG4gICAgICAgIG51bWJlcnM6IHNldC5ucixcbiAgICAgICAgcGx1cmFsczogX3J1bGVzUGx1cmFsc1R5cGVzW3NldC5mY11cbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gcnVsZXM7XG59XG5cbnZhciBQbHVyYWxSZXNvbHZlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGx1cmFsUmVzb2x2ZXIobGFuZ3VhZ2VVdGlscykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVja19fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMsIFBsdXJhbFJlc29sdmVyKTtcblxuICAgIHRoaXMubGFuZ3VhZ2VVdGlscyA9IGxhbmd1YWdlVXRpbHM7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdwbHVyYWxSZXNvbHZlcicpO1xuXG4gICAgaWYgKCghdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OIHx8IHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3Y0JykgJiYgKHR5cGVvZiBJbnRsID09PSAndW5kZWZpbmVkJyB8fCAhSW50bC5QbHVyYWxSdWxlcykpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9ICd2Myc7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignWW91ciBlbnZpcm9ubWVudCBzZWVtcyBub3QgdG8gYmUgSW50bCBBUEkgY29tcGF0aWJsZSwgdXNlIGFuIEludGwuUGx1cmFsUnVsZXMgcG9seWZpbGwuIFdpbGwgZmFsbGJhY2sgdG8gdGhlIGNvbXBhdGliaWxpdHlKU09OIHYzIGZvcm1hdCBoYW5kbGluZy4nKTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bGVzID0gY3JlYXRlUnVsZXMoKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzc19fZGVmYXVsdFsnZGVmYXVsdCddKFBsdXJhbFJlc29sdmVyLCBbe1xuICAgIGtleTogXCJhZGRSdWxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJ1bGUobG5nLCBvYmopIHtcbiAgICAgIHRoaXMucnVsZXNbbG5nXSA9IG9iajtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UnVsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSdWxlKGNvZGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgaWYgKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLlBsdXJhbFJ1bGVzKGNvZGUsIHtcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMub3JkaW5hbCA/ICdvcmRpbmFsJyA6ICdjYXJkaW5hbCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoX3VudXNlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydWxlc1tjb2RlXSB8fCB0aGlzLnJ1bGVzW3RoaXMubGFuZ3VhZ2VVdGlscy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKV07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm5lZWRzUGx1cmFsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5lZWRzUGx1cmFsKGNvZGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBydWxlID0gdGhpcy5nZXRSdWxlKGNvZGUsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUgJiYgcnVsZS5yZXNvbHZlZE9wdGlvbnMoKS5wbHVyYWxDYXRlZ29yaWVzLmxlbmd0aCA+IDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBydWxlICYmIHJ1bGUubnVtYmVycy5sZW5ndGggPiAxO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRQbHVyYWxGb3Jtc09mS2V5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBsdXJhbEZvcm1zT2ZLZXkoY29kZSwga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdWZmaXhlcyhjb2RlLCBvcHRpb25zKS5tYXAoZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoa2V5KS5jb25jYXQoc3VmZml4KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTdWZmaXhlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWZmaXhlcyhjb2RlKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgcnVsZSA9IHRoaXMuZ2V0UnVsZShjb2RlLCBvcHRpb25zKTtcblxuICAgICAgaWYgKCFydWxlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKSB7XG4gICAgICAgIHJldHVybiBydWxlLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMuc29ydChmdW5jdGlvbiAocGx1cmFsQ2F0ZWdvcnkxLCBwbHVyYWxDYXRlZ29yeTIpIHtcbiAgICAgICAgICByZXR1cm4gc3VmZml4ZXNPcmRlcltwbHVyYWxDYXRlZ29yeTFdIC0gc3VmZml4ZXNPcmRlcltwbHVyYWxDYXRlZ29yeTJdO1xuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKHBsdXJhbENhdGVnb3J5KSB7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KF90aGlzLm9wdGlvbnMucHJlcGVuZCkuY29uY2F0KHBsdXJhbENhdGVnb3J5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBydWxlLm51bWJlcnMubWFwKGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmdldFN1ZmZpeChjb2RlLCBudW1iZXIsIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFN1ZmZpeFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWZmaXgoY29kZSwgY291bnQpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgIHZhciBydWxlID0gdGhpcy5nZXRSdWxlKGNvZGUsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAocnVsZSkge1xuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpIHtcbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodGhpcy5vcHRpb25zLnByZXBlbmQpLmNvbmNhdChydWxlLnNlbGVjdChjb3VudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKHJ1bGUsIGNvdW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dnZXIud2FybihcIm5vIHBsdXJhbCBydWxlIGZvdW5kIGZvcjogXCIuY29uY2F0KGNvZGUpKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZShydWxlLCBjb3VudCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBpZHggPSBydWxlLm5vQWJzID8gcnVsZS5wbHVyYWxzKGNvdW50KSA6IHJ1bGUucGx1cmFscyhNYXRoLmFicyhjb3VudCkpO1xuICAgICAgdmFyIHN1ZmZpeCA9IHJ1bGUubnVtYmVyc1tpZHhdO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4ICYmIHJ1bGUubnVtYmVycy5sZW5ndGggPT09IDIgJiYgcnVsZS5udW1iZXJzWzBdID09PSAxKSB7XG4gICAgICAgIGlmIChzdWZmaXggPT09IDIpIHtcbiAgICAgICAgICBzdWZmaXggPSAncGx1cmFsJztcbiAgICAgICAgfSBlbHNlIGlmIChzdWZmaXggPT09IDEpIHtcbiAgICAgICAgICBzdWZmaXggPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcmV0dXJuU3VmZml4ID0gZnVuY3Rpb24gcmV0dXJuU3VmZml4KCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMucHJlcGVuZCAmJiBzdWZmaXgudG9TdHJpbmcoKSA/IF90aGlzMi5vcHRpb25zLnByZXBlbmQgKyBzdWZmaXgudG9TdHJpbmcoKSA6IHN1ZmZpeC50b1N0cmluZygpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3YxJykge1xuICAgICAgICBpZiAoc3VmZml4ID09PSAxKSByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0eXBlb2Ygc3VmZml4ID09PSAnbnVtYmVyJykgcmV0dXJuIFwiX3BsdXJhbF9cIi5jb25jYXQoc3VmZml4LnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3YyJykge1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCAmJiBydWxlLm51bWJlcnMubGVuZ3RoID09PSAyICYmIHJ1bGUubnVtYmVyc1swXSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucHJlcGVuZCAmJiBpZHgudG9TdHJpbmcoKSA/IHRoaXMub3B0aW9ucy5wcmVwZW5kICsgaWR4LnRvU3RyaW5nKCkgOiBpZHgudG9TdHJpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hvdWxkVXNlSW50bEFwaVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRVc2VJbnRsQXBpKCkge1xuICAgICAgcmV0dXJuICFkZXByZWNhdGVkSnNvblZlcnNpb25zLmluY2x1ZGVzKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBsdXJhbFJlc29sdmVyO1xufSgpO1xuXG5mdW5jdGlvbiBvd25LZXlzJDMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDModGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5X19kZWZhdWx0WydkZWZhdWx0J10odGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG52YXIgSW50ZXJwb2xhdG9yID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJbnRlcnBvbGF0b3IoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrX19kZWZhdWx0WydkZWZhdWx0J10odGhpcywgSW50ZXJwb2xhdG9yKTtcblxuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ2ludGVycG9sYXRvcicpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLmZvcm1hdCA9IG9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiBvcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0IHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG5cbiAgICB0aGlzLmluaXQob3B0aW9ucyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3NfX2RlZmF1bHRbJ2RlZmF1bHQnXShJbnRlcnBvbGF0b3IsIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIGlmICghb3B0aW9ucy5pbnRlcnBvbGF0aW9uKSBvcHRpb25zLmludGVycG9sYXRpb24gPSB7XG4gICAgICAgIGVzY2FwZVZhbHVlOiB0cnVlXG4gICAgICB9O1xuICAgICAgdmFyIGlPcHRzID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uO1xuICAgICAgdGhpcy5lc2NhcGUgPSBpT3B0cy5lc2NhcGUgIT09IHVuZGVmaW5lZCA/IGlPcHRzLmVzY2FwZSA6IGVzY2FwZTtcbiAgICAgIHRoaXMuZXNjYXBlVmFsdWUgPSBpT3B0cy5lc2NhcGVWYWx1ZSAhPT0gdW5kZWZpbmVkID8gaU9wdHMuZXNjYXBlVmFsdWUgOiB0cnVlO1xuICAgICAgdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlID0gaU9wdHMudXNlUmF3VmFsdWVUb0VzY2FwZSAhPT0gdW5kZWZpbmVkID8gaU9wdHMudXNlUmF3VmFsdWVUb0VzY2FwZSA6IGZhbHNlO1xuICAgICAgdGhpcy5wcmVmaXggPSBpT3B0cy5wcmVmaXggPyByZWdleEVzY2FwZShpT3B0cy5wcmVmaXgpIDogaU9wdHMucHJlZml4RXNjYXBlZCB8fCAne3snO1xuICAgICAgdGhpcy5zdWZmaXggPSBpT3B0cy5zdWZmaXggPyByZWdleEVzY2FwZShpT3B0cy5zdWZmaXgpIDogaU9wdHMuc3VmZml4RXNjYXBlZCB8fCAnfX0nO1xuICAgICAgdGhpcy5mb3JtYXRTZXBhcmF0b3IgPSBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgPyBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgOiBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgfHwgJywnO1xuICAgICAgdGhpcy51bmVzY2FwZVByZWZpeCA9IGlPcHRzLnVuZXNjYXBlU3VmZml4ID8gJycgOiBpT3B0cy51bmVzY2FwZVByZWZpeCB8fCAnLSc7XG4gICAgICB0aGlzLnVuZXNjYXBlU3VmZml4ID0gdGhpcy51bmVzY2FwZVByZWZpeCA/ICcnIDogaU9wdHMudW5lc2NhcGVTdWZmaXggfHwgJyc7XG4gICAgICB0aGlzLm5lc3RpbmdQcmVmaXggPSBpT3B0cy5uZXN0aW5nUHJlZml4ID8gcmVnZXhFc2NhcGUoaU9wdHMubmVzdGluZ1ByZWZpeCkgOiBpT3B0cy5uZXN0aW5nUHJlZml4RXNjYXBlZCB8fCByZWdleEVzY2FwZSgnJHQoJyk7XG4gICAgICB0aGlzLm5lc3RpbmdTdWZmaXggPSBpT3B0cy5uZXN0aW5nU3VmZml4ID8gcmVnZXhFc2NhcGUoaU9wdHMubmVzdGluZ1N1ZmZpeCkgOiBpT3B0cy5uZXN0aW5nU3VmZml4RXNjYXBlZCB8fCByZWdleEVzY2FwZSgnKScpO1xuICAgICAgdGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvciA9IGlPcHRzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yID8gaU9wdHMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3IgOiBpT3B0cy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvciB8fCAnLCc7XG4gICAgICB0aGlzLm1heFJlcGxhY2VzID0gaU9wdHMubWF4UmVwbGFjZXMgPyBpT3B0cy5tYXhSZXBsYWNlcyA6IDEwMDA7XG4gICAgICB0aGlzLmFsd2F5c0Zvcm1hdCA9IGlPcHRzLmFsd2F5c0Zvcm1hdCAhPT0gdW5kZWZpbmVkID8gaU9wdHMuYWx3YXlzRm9ybWF0IDogZmFsc2U7XG4gICAgICB0aGlzLnJlc2V0UmVnRXhwKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlc2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucykgdGhpcy5pbml0KHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlc2V0UmVnRXhwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0UmVnRXhwKCkge1xuICAgICAgdmFyIHJlZ2V4cFN0ciA9IFwiXCIuY29uY2F0KHRoaXMucHJlZml4LCBcIiguKz8pXCIpLmNvbmNhdCh0aGlzLnN1ZmZpeCk7XG4gICAgICB0aGlzLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwU3RyLCAnZycpO1xuICAgICAgdmFyIHJlZ2V4cFVuZXNjYXBlU3RyID0gXCJcIi5jb25jYXQodGhpcy5wcmVmaXgpLmNvbmNhdCh0aGlzLnVuZXNjYXBlUHJlZml4LCBcIiguKz8pXCIpLmNvbmNhdCh0aGlzLnVuZXNjYXBlU3VmZml4KS5jb25jYXQodGhpcy5zdWZmaXgpO1xuICAgICAgdGhpcy5yZWdleHBVbmVzY2FwZSA9IG5ldyBSZWdFeHAocmVnZXhwVW5lc2NhcGVTdHIsICdnJyk7XG4gICAgICB2YXIgbmVzdGluZ1JlZ2V4cFN0ciA9IFwiXCIuY29uY2F0KHRoaXMubmVzdGluZ1ByZWZpeCwgXCIoLis/KVwiKS5jb25jYXQodGhpcy5uZXN0aW5nU3VmZml4KTtcbiAgICAgIHRoaXMubmVzdGluZ1JlZ2V4cCA9IG5ldyBSZWdFeHAobmVzdGluZ1JlZ2V4cFN0ciwgJ2cnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW50ZXJwb2xhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW50ZXJwb2xhdGUoc3RyLCBkYXRhLCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBtYXRjaDtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIHZhciByZXBsYWNlcztcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzIHx8IHt9O1xuXG4gICAgICBmdW5jdGlvbiByZWdleFNhZmUodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwucmVwbGFjZSgvXFwkL2csICckJCQkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBoYW5kbGVGb3JtYXQgPSBmdW5jdGlvbiBoYW5kbGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihfdGhpcy5mb3JtYXRTZXBhcmF0b3IpIDwgMCkge1xuICAgICAgICAgIHZhciBwYXRoID0gZ2V0UGF0aFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwga2V5KTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuYWx3YXlzRm9ybWF0ID8gX3RoaXMuZm9ybWF0KHBhdGgsIHVuZGVmaW5lZCwgbG5nLCBfb2JqZWN0U3ByZWFkJDMoX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgb3B0aW9ucyksIGRhdGEpLCB7fSwge1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbmtleToga2V5XG4gICAgICAgICAgfSkpIDogcGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwID0ga2V5LnNwbGl0KF90aGlzLmZvcm1hdFNlcGFyYXRvcik7XG4gICAgICAgIHZhciBrID0gcC5zaGlmdCgpLnRyaW0oKTtcbiAgICAgICAgdmFyIGYgPSBwLmpvaW4oX3RoaXMuZm9ybWF0U2VwYXJhdG9yKS50cmltKCk7XG4gICAgICAgIHJldHVybiBfdGhpcy5mb3JtYXQoZ2V0UGF0aFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwgayksIGYsIGxuZywgX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoe30sIG9wdGlvbnMpLCBkYXRhKSwge30sIHtcbiAgICAgICAgICBpbnRlcnBvbGF0aW9ua2V5OiBrXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucmVzZXRSZWdFeHAoKTtcbiAgICAgIHZhciBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIgPSBvcHRpb25zICYmIG9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyIHx8IHRoaXMub3B0aW9ucy5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI7XG4gICAgICB2YXIgc2tpcE9uVmFyaWFibGVzID0gb3B0aW9ucyAmJiBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyA6IHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcztcbiAgICAgIHZhciB0b2RvcyA9IFt7XG4gICAgICAgIHJlZ2V4OiB0aGlzLnJlZ2V4cFVuZXNjYXBlLFxuICAgICAgICBzYWZlVmFsdWU6IGZ1bmN0aW9uIHNhZmVWYWx1ZSh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVnZXhTYWZlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgcmVnZXg6IHRoaXMucmVnZXhwLFxuICAgICAgICBzYWZlVmFsdWU6IGZ1bmN0aW9uIHNhZmVWYWx1ZSh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZXNjYXBlVmFsdWUgPyByZWdleFNhZmUoX3RoaXMuZXNjYXBlKHZhbCkpIDogcmVnZXhTYWZlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgICAgdG9kb3MuZm9yRWFjaChmdW5jdGlvbiAodG9kbykge1xuICAgICAgICByZXBsYWNlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKG1hdGNoID0gdG9kby5yZWdleC5leGVjKHN0cikpIHtcbiAgICAgICAgICB2YXIgbWF0Y2hlZFZhciA9IG1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgICB2YWx1ZSA9IGhhbmRsZUZvcm1hdChtYXRjaGVkVmFyKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB2YXIgdGVtcCA9IG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcihzdHIsIG1hdGNoLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB0eXBlb2YgdGVtcCA9PT0gJ3N0cmluZycgPyB0ZW1wIDogJyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShtYXRjaGVkVmFyKSkge1xuICAgICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChza2lwT25WYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBtYXRjaFswXTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdGhpcy5sb2dnZXIud2FybihcIm1pc3NlZCB0byBwYXNzIGluIHZhcmlhYmxlIFwiLmNvbmNhdChtYXRjaGVkVmFyLCBcIiBmb3IgaW50ZXJwb2xhdGluZyBcIikuY29uY2F0KHN0cikpO1xuXG4gICAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmICFfdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG1ha2VTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzYWZlVmFsdWUgPSB0b2RvLnNhZmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHNhZmVWYWx1ZSk7XG5cbiAgICAgICAgICBpZiAoc2tpcE9uVmFyaWFibGVzKSB7XG4gICAgICAgICAgICB0b2RvLnJlZ2V4Lmxhc3RJbmRleCArPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB0b2RvLnJlZ2V4Lmxhc3RJbmRleCAtPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvZG8ucmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXBsYWNlcysrO1xuXG4gICAgICAgICAgaWYgKHJlcGxhY2VzID49IF90aGlzLm1heFJlcGxhY2VzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibmVzdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBuZXN0KHN0ciwgZmMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB2YXIgbWF0Y2g7XG4gICAgICB2YXIgdmFsdWU7XG5cbiAgICAgIHZhciBjbG9uZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCQzKHt9LCBvcHRpb25zKTtcblxuICAgICAgY2xvbmVkT3B0aW9ucy5hcHBseVBvc3RQcm9jZXNzb3IgPSBmYWxzZTtcbiAgICAgIGRlbGV0ZSBjbG9uZWRPcHRpb25zLmRlZmF1bHRWYWx1ZTtcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlSGFzT3B0aW9ucyhrZXksIGluaGVyaXRlZE9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNlcCA9IHRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihzZXApIDwgMCkgcmV0dXJuIGtleTtcbiAgICAgICAgdmFyIGMgPSBrZXkuc3BsaXQobmV3IFJlZ0V4cChcIlwiLmNvbmNhdChzZXAsIFwiWyBdKntcIikpKTtcbiAgICAgICAgdmFyIG9wdGlvbnNTdHJpbmcgPSBcIntcIi5jb25jYXQoY1sxXSk7XG4gICAgICAgIGtleSA9IGNbMF07XG4gICAgICAgIG9wdGlvbnNTdHJpbmcgPSB0aGlzLmludGVycG9sYXRlKG9wdGlvbnNTdHJpbmcsIGNsb25lZE9wdGlvbnMpO1xuICAgICAgICB2YXIgbWF0Y2hlZFNpbmdsZVF1b3RlcyA9IG9wdGlvbnNTdHJpbmcubWF0Y2goLycvZyk7XG4gICAgICAgIHZhciBtYXRjaGVkRG91YmxlUXVvdGVzID0gb3B0aW9uc1N0cmluZy5tYXRjaCgvXCIvZyk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWRTaW5nbGVRdW90ZXMgJiYgbWF0Y2hlZFNpbmdsZVF1b3Rlcy5sZW5ndGggJSAyID09PSAwICYmICFtYXRjaGVkRG91YmxlUXVvdGVzIHx8IG1hdGNoZWREb3VibGVRdW90ZXMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICAgIG9wdGlvbnNTdHJpbmcgPSBvcHRpb25zU3RyaW5nLnJlcGxhY2UoLycvZywgJ1wiJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb25lZE9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnNTdHJpbmcpO1xuICAgICAgICAgIGlmIChpbmhlcml0ZWRPcHRpb25zKSBjbG9uZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgaW5oZXJpdGVkT3B0aW9ucyksIGNsb25lZE9wdGlvbnMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcImZhaWxlZCBwYXJzaW5nIG9wdGlvbnMgc3RyaW5nIGluIG5lc3RpbmcgZm9yIGtleSBcIi5jb25jYXQoa2V5KSwgZSk7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGtleSkuY29uY2F0KHNlcCkuY29uY2F0KG9wdGlvbnNTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIGNsb25lZE9wdGlvbnMuZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobWF0Y2ggPSB0aGlzLm5lc3RpbmdSZWdleHAuZXhlYyhzdHIpKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXJzID0gW107XG4gICAgICAgIHZhciBkb1JlZHVjZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChtYXRjaFswXS5pbmRleE9mKHRoaXMuZm9ybWF0U2VwYXJhdG9yKSAhPT0gLTEgJiYgIS97Lip9Ly50ZXN0KG1hdGNoWzFdKSkge1xuICAgICAgICAgIHZhciByID0gbWF0Y2hbMV0uc3BsaXQodGhpcy5mb3JtYXRTZXBhcmF0b3IpLm1hcChmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0udHJpbSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1hdGNoWzFdID0gci5zaGlmdCgpO1xuICAgICAgICAgIGZvcm1hdHRlcnMgPSByO1xuICAgICAgICAgIGRvUmVkdWNlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gZmMoaGFuZGxlSGFzT3B0aW9ucy5jYWxsKHRoaXMsIG1hdGNoWzFdLnRyaW0oKSwgY2xvbmVkT3B0aW9ucyksIGNsb25lZE9wdGlvbnMpO1xuICAgICAgICBpZiAodmFsdWUgJiYgbWF0Y2hbMF0gPT09IHN0ciAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB2YWx1ZSA9IG1ha2VTdHJpbmcodmFsdWUpO1xuXG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwibWlzc2VkIHRvIHJlc29sdmUgXCIuY29uY2F0KG1hdGNoWzFdLCBcIiBmb3IgbmVzdGluZyBcIikuY29uY2F0KHN0cikpO1xuICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZG9SZWR1Y2UpIHtcbiAgICAgICAgICB2YWx1ZSA9IGZvcm1hdHRlcnMucmVkdWNlKGZ1bmN0aW9uICh2LCBmKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLmZvcm1hdCh2LCBmLCBvcHRpb25zLmxuZywgX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgICAgIGludGVycG9sYXRpb25rZXk6IG1hdGNoWzFdLnRyaW0oKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0sIHZhbHVlLnRyaW0oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShtYXRjaFswXSwgdmFsdWUpO1xuICAgICAgICB0aGlzLnJlZ2V4cC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBJbnRlcnBvbGF0b3I7XG59KCk7XG5cbmZ1bmN0aW9uIG93bktleXMkNChvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkNCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzJDQoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHlfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzJDQoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIHBhcnNlRm9ybWF0U3RyKGZvcm1hdFN0cikge1xuICB2YXIgZm9ybWF0TmFtZSA9IGZvcm1hdFN0ci50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgdmFyIGZvcm1hdE9wdGlvbnMgPSB7fTtcblxuICBpZiAoZm9ybWF0U3RyLmluZGV4T2YoJygnKSA+IC0xKSB7XG4gICAgdmFyIHAgPSBmb3JtYXRTdHIuc3BsaXQoJygnKTtcbiAgICBmb3JtYXROYW1lID0gcFswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICB2YXIgb3B0U3RyID0gcFsxXS5zdWJzdHJpbmcoMCwgcFsxXS5sZW5ndGggLSAxKTtcblxuICAgIGlmIChmb3JtYXROYW1lID09PSAnY3VycmVuY3knICYmIG9wdFN0ci5pbmRleE9mKCc6JykgPCAwKSB7XG4gICAgICBpZiAoIWZvcm1hdE9wdGlvbnMuY3VycmVuY3kpIGZvcm1hdE9wdGlvbnMuY3VycmVuY3kgPSBvcHRTdHIudHJpbSgpO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0TmFtZSA9PT0gJ3JlbGF0aXZldGltZScgJiYgb3B0U3RyLmluZGV4T2YoJzonKSA8IDApIHtcbiAgICAgIGlmICghZm9ybWF0T3B0aW9ucy5yYW5nZSkgZm9ybWF0T3B0aW9ucy5yYW5nZSA9IG9wdFN0ci50cmltKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvcHRzID0gb3B0U3RyLnNwbGl0KCc7Jyk7XG4gICAgICBvcHRzLmZvckVhY2goZnVuY3Rpb24gKG9wdCkge1xuICAgICAgICBpZiAoIW9wdCkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBfb3B0JHNwbGl0ID0gb3B0LnNwbGl0KCc6JyksXG4gICAgICAgICAgICBfb3B0JHNwbGl0MiA9IF90b0FycmF5X19kZWZhdWx0WydkZWZhdWx0J10oX29wdCRzcGxpdCksXG4gICAgICAgICAgICBrZXkgPSBfb3B0JHNwbGl0MlswXSxcbiAgICAgICAgICAgIHJlc3QgPSBfb3B0JHNwbGl0Mi5zbGljZSgxKTtcblxuICAgICAgICB2YXIgdmFsID0gcmVzdC5qb2luKCc6JykudHJpbSgpLnJlcGxhY2UoL14nK3wnKyQvZywgJycpO1xuICAgICAgICBpZiAoIWZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0pIGZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0gPSB2YWw7XG4gICAgICAgIGlmICh2YWwgPT09ICdmYWxzZScpIGZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0gPSBmYWxzZTtcbiAgICAgICAgaWYgKHZhbCA9PT0gJ3RydWUnKSBmb3JtYXRPcHRpb25zW2tleS50cmltKCldID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFpc05hTih2YWwpKSBmb3JtYXRPcHRpb25zW2tleS50cmltKCldID0gcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdE5hbWU6IGZvcm1hdE5hbWUsXG4gICAgZm9ybWF0T3B0aW9uczogZm9ybWF0T3B0aW9uc1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDYWNoZWRGb3JtYXR0ZXIoZm4pIHtcbiAgdmFyIGNhY2hlID0ge307XG4gIHJldHVybiBmdW5jdGlvbiBpbnZva2VGb3JtYXR0ZXIodmFsLCBsbmcsIG9wdGlvbnMpIHtcbiAgICB2YXIga2V5ID0gbG5nICsgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyk7XG4gICAgdmFyIGZvcm1hdHRlciA9IGNhY2hlW2tleV07XG5cbiAgICBpZiAoIWZvcm1hdHRlcikge1xuICAgICAgZm9ybWF0dGVyID0gZm4obG5nLCBvcHRpb25zKTtcbiAgICAgIGNhY2hlW2tleV0gPSBmb3JtYXR0ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlcih2YWwpO1xuICB9O1xufVxuXG52YXIgRm9ybWF0dGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGb3JtYXR0ZXIoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrX19kZWZhdWx0WydkZWZhdWx0J10odGhpcywgRm9ybWF0dGVyKTtcblxuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ2Zvcm1hdHRlcicpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5mb3JtYXRzID0ge1xuICAgICAgbnVtYmVyOiBjcmVhdGVDYWNoZWRGb3JtYXR0ZXIoZnVuY3Rpb24gKGxuZywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxuZywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsKTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgY3VycmVuY3k6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG5nLCBfb2JqZWN0U3ByZWFkJDQoX29iamVjdFNwcmVhZCQ0KHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5J1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsKTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgZGF0ZXRpbWU6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsbmcsIF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucykpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbCk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIHJlbGF0aXZldGltZTogY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZ1bmN0aW9uIChsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsbmcsIF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucykpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbCwgb3B0aW9ucy5yYW5nZSB8fCAnZGF5Jyk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIGxpc3Q6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KGxuZywgX29iamVjdFNwcmVhZCQ0KHt9LCBvcHRpb25zKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsKTtcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgfTtcbiAgICB0aGlzLmluaXQob3B0aW9ucyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3NfX2RlZmF1bHRbJ2RlZmF1bHQnXShGb3JtYXR0ZXIsIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdChzZXJ2aWNlcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICAgICAgaW50ZXJwb2xhdGlvbjoge31cbiAgICAgIH07XG4gICAgICB2YXIgaU9wdHMgPSBvcHRpb25zLmludGVycG9sYXRpb247XG4gICAgICB0aGlzLmZvcm1hdFNlcGFyYXRvciA9IGlPcHRzLmZvcm1hdFNlcGFyYXRvciA/IGlPcHRzLmZvcm1hdFNlcGFyYXRvciA6IGlPcHRzLmZvcm1hdFNlcGFyYXRvciB8fCAnLCc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQobmFtZSwgZmMpIHtcbiAgICAgIHRoaXMuZm9ybWF0c1tuYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpXSA9IGZjO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRDYWNoZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkQ2FjaGVkKG5hbWUsIGZjKSB7XG4gICAgICB0aGlzLmZvcm1hdHNbbmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKV0gPSBjcmVhdGVDYWNoZWRGb3JtYXR0ZXIoZmMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb3JtYXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBfZm9ybWF0LCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBmb3JtYXRzID0gX2Zvcm1hdC5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcik7XG5cbiAgICAgIHZhciByZXN1bHQgPSBmb3JtYXRzLnJlZHVjZShmdW5jdGlvbiAobWVtLCBmKSB7XG4gICAgICAgIHZhciBfcGFyc2VGb3JtYXRTdHIgPSBwYXJzZUZvcm1hdFN0cihmKSxcbiAgICAgICAgICAgIGZvcm1hdE5hbWUgPSBfcGFyc2VGb3JtYXRTdHIuZm9ybWF0TmFtZSxcbiAgICAgICAgICAgIGZvcm1hdE9wdGlvbnMgPSBfcGFyc2VGb3JtYXRTdHIuZm9ybWF0T3B0aW9ucztcblxuICAgICAgICBpZiAoX3RoaXMuZm9ybWF0c1tmb3JtYXROYW1lXSkge1xuICAgICAgICAgIHZhciBmb3JtYXR0ZWQgPSBtZW07XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHZhbE9wdGlvbnMgPSBvcHRpb25zICYmIG9wdGlvbnMuZm9ybWF0UGFyYW1zICYmIG9wdGlvbnMuZm9ybWF0UGFyYW1zW29wdGlvbnMuaW50ZXJwb2xhdGlvbmtleV0gfHwge307XG4gICAgICAgICAgICB2YXIgbCA9IHZhbE9wdGlvbnMubG9jYWxlIHx8IHZhbE9wdGlvbnMubG5nIHx8IG9wdGlvbnMubG9jYWxlIHx8IG9wdGlvbnMubG5nIHx8IGxuZztcbiAgICAgICAgICAgIGZvcm1hdHRlZCA9IF90aGlzLmZvcm1hdHNbZm9ybWF0TmFtZV0obWVtLCBsLCBfb2JqZWN0U3ByZWFkJDQoX29iamVjdFNwcmVhZCQ0KF9vYmplY3RTcHJlYWQkNCh7fSwgZm9ybWF0T3B0aW9ucyksIG9wdGlvbnMpLCB2YWxPcHRpb25zKSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIF90aGlzLmxvZ2dlci53YXJuKGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmxvZ2dlci53YXJuKFwidGhlcmUgd2FzIG5vIGZvcm1hdCBmdW5jdGlvbiBmb3IgXCIuY29uY2F0KGZvcm1hdE5hbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZW07XG4gICAgICB9LCB2YWx1ZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBGb3JtYXR0ZXI7XG59KCk7XG5cbmZ1bmN0aW9uIG93bktleXMkNShvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkNSh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzJDUoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHlfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzJDUoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlciQyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDIoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2ZfX2RlZmF1bHRbJ2RlZmF1bHQnXShEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mX19kZWZhdWx0WydkZWZhdWx0J10odGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19kZWZhdWx0WydkZWZhdWx0J10odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDIoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiByZW1vdmVQZW5kaW5nKHEsIG5hbWUpIHtcbiAgaWYgKHEucGVuZGluZ1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZGVsZXRlIHEucGVuZGluZ1tuYW1lXTtcbiAgICBxLnBlbmRpbmdDb3VudC0tO1xuICB9XG59XG5cbnZhciBDb25uZWN0b3IgPSBmdW5jdGlvbiAoX0V2ZW50RW1pdHRlcikge1xuICBfaW5oZXJpdHNfX2RlZmF1bHRbJ2RlZmF1bHQnXShDb25uZWN0b3IsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIkMihDb25uZWN0b3IpO1xuXG4gIGZ1bmN0aW9uIENvbm5lY3RvcihiYWNrZW5kLCBzdG9yZSwgc2VydmljZXMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2tfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLCBDb25uZWN0b3IpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcblxuICAgIGlmIChpc0lFMTApIHtcbiAgICAgIEV2ZW50RW1pdHRlci5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRfX2RlZmF1bHRbJ2RlZmF1bHQnXShfdGhpcykpO1xuICAgIH1cblxuICAgIF90aGlzLmJhY2tlbmQgPSBiYWNrZW5kO1xuICAgIF90aGlzLnN0b3JlID0gc3RvcmU7XG4gICAgX3RoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICBfdGhpcy5sYW5ndWFnZVV0aWxzID0gc2VydmljZXMubGFuZ3VhZ2VVdGlscztcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBfdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgnYmFja2VuZENvbm5lY3RvcicpO1xuICAgIF90aGlzLndhaXRpbmdSZWFkcyA9IFtdO1xuICAgIF90aGlzLm1heFBhcmFsbGVsUmVhZHMgPSBvcHRpb25zLm1heFBhcmFsbGVsUmVhZHMgfHwgMTA7XG4gICAgX3RoaXMucmVhZGluZ0NhbGxzID0gMDtcbiAgICBfdGhpcy5tYXhSZXRyaWVzID0gb3B0aW9ucy5tYXhSZXRyaWVzID49IDAgPyBvcHRpb25zLm1heFJldHJpZXMgOiA1O1xuICAgIF90aGlzLnJldHJ5VGltZW91dCA9IG9wdGlvbnMucmV0cnlUaW1lb3V0ID49IDEgPyBvcHRpb25zLnJldHJ5VGltZW91dCA6IDM1MDtcbiAgICBfdGhpcy5zdGF0ZSA9IHt9O1xuICAgIF90aGlzLnF1ZXVlID0gW107XG5cbiAgICBpZiAoX3RoaXMuYmFja2VuZCAmJiBfdGhpcy5iYWNrZW5kLmluaXQpIHtcbiAgICAgIF90aGlzLmJhY2tlbmQuaW5pdChzZXJ2aWNlcywgb3B0aW9ucy5iYWNrZW5kLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3NfX2RlZmF1bHRbJ2RlZmF1bHQnXShDb25uZWN0b3IsIFt7XG4gICAga2V5OiBcInF1ZXVlTG9hZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBxdWV1ZUxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciB0b0xvYWQgPSB7fTtcbiAgICAgIHZhciBwZW5kaW5nID0ge307XG4gICAgICB2YXIgdG9Mb2FkTGFuZ3VhZ2VzID0ge307XG4gICAgICB2YXIgdG9Mb2FkTmFtZXNwYWNlcyA9IHt9O1xuICAgICAgbGFuZ3VhZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxuZykge1xuICAgICAgICB2YXIgaGFzQWxsTmFtZXNwYWNlcyA9IHRydWU7XG4gICAgICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbiAobnMpIHtcbiAgICAgICAgICB2YXIgbmFtZSA9IFwiXCIuY29uY2F0KGxuZywgXCJ8XCIpLmNvbmNhdChucyk7XG5cbiAgICAgICAgICBpZiAoIW9wdGlvbnMucmVsb2FkICYmIF90aGlzMi5zdG9yZS5oYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlW25hbWVdID0gMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzMi5zdGF0ZVtuYW1lXSA8IDApIDsgZWxzZSBpZiAoX3RoaXMyLnN0YXRlW25hbWVdID09PSAxKSB7XG4gICAgICAgICAgICBpZiAocGVuZGluZ1tuYW1lXSA9PT0gdW5kZWZpbmVkKSBwZW5kaW5nW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlW25hbWVdID0gMTtcbiAgICAgICAgICAgIGhhc0FsbE5hbWVzcGFjZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZW5kaW5nW25hbWVdID09PSB1bmRlZmluZWQpIHBlbmRpbmdbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRvTG9hZFtuYW1lXSA9PT0gdW5kZWZpbmVkKSB0b0xvYWRbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRvTG9hZE5hbWVzcGFjZXNbbnNdID09PSB1bmRlZmluZWQpIHRvTG9hZE5hbWVzcGFjZXNbbnNdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc0FsbE5hbWVzcGFjZXMpIHRvTG9hZExhbmd1YWdlc1tsbmddID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXModG9Mb2FkKS5sZW5ndGggfHwgT2JqZWN0LmtleXMocGVuZGluZykubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucXVldWUucHVzaCh7XG4gICAgICAgICAgcGVuZGluZzogcGVuZGluZyxcbiAgICAgICAgICBwZW5kaW5nQ291bnQ6IE9iamVjdC5rZXlzKHBlbmRpbmcpLmxlbmd0aCxcbiAgICAgICAgICBsb2FkZWQ6IHt9LFxuICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0xvYWQ6IE9iamVjdC5rZXlzKHRvTG9hZCksXG4gICAgICAgIHBlbmRpbmc6IE9iamVjdC5rZXlzKHBlbmRpbmcpLFxuICAgICAgICB0b0xvYWRMYW5ndWFnZXM6IE9iamVjdC5rZXlzKHRvTG9hZExhbmd1YWdlcyksXG4gICAgICAgIHRvTG9hZE5hbWVzcGFjZXM6IE9iamVjdC5rZXlzKHRvTG9hZE5hbWVzcGFjZXMpXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZGVkKG5hbWUsIGVyciwgZGF0YSkge1xuICAgICAgdmFyIHMgPSBuYW1lLnNwbGl0KCd8Jyk7XG4gICAgICB2YXIgbG5nID0gc1swXTtcbiAgICAgIHZhciBucyA9IHNbMV07XG4gICAgICBpZiAoZXJyKSB0aGlzLmVtaXQoJ2ZhaWxlZExvYWRpbmcnLCBsbmcsIG5zLCBlcnIpO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLnN0b3JlLmFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXRlW25hbWVdID0gZXJyID8gLTEgOiAyO1xuICAgICAgdmFyIGxvYWRlZCA9IHt9O1xuICAgICAgdGhpcy5xdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7XG4gICAgICAgIHB1c2hQYXRoKHEubG9hZGVkLCBbbG5nXSwgbnMpO1xuICAgICAgICByZW1vdmVQZW5kaW5nKHEsIG5hbWUpO1xuICAgICAgICBpZiAoZXJyKSBxLmVycm9ycy5wdXNoKGVycik7XG5cbiAgICAgICAgaWYgKHEucGVuZGluZ0NvdW50ID09PSAwICYmICFxLmRvbmUpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhxLmxvYWRlZCkuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgaWYgKCFsb2FkZWRbbF0pIGxvYWRlZFtsXSA9IHt9O1xuICAgICAgICAgICAgdmFyIGxvYWRlZEtleXMgPSBxLmxvYWRlZFtsXTtcblxuICAgICAgICAgICAgaWYgKGxvYWRlZEtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGxvYWRlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAobnMpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9hZGVkW2xdW25zXSA9PT0gdW5kZWZpbmVkKSBsb2FkZWRbbF1bbnNdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcS5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChxLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHEuY2FsbGJhY2socS5lcnJvcnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxLmNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgbG9hZGVkKTtcbiAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLmZpbHRlcihmdW5jdGlvbiAocSkge1xuICAgICAgICByZXR1cm4gIXEuZG9uZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWFkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWQobG5nLCBucywgZmNOYW1lKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHRyaWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAwO1xuICAgICAgdmFyIHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRoaXMucmV0cnlUaW1lb3V0O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgPyBhcmd1bWVudHNbNV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWxuZy5sZW5ndGgpIHJldHVybiBjYWxsYmFjayhudWxsLCB7fSk7XG5cbiAgICAgIGlmICh0aGlzLnJlYWRpbmdDYWxscyA+PSB0aGlzLm1heFBhcmFsbGVsUmVhZHMpIHtcbiAgICAgICAgdGhpcy53YWl0aW5nUmVhZHMucHVzaCh7XG4gICAgICAgICAgbG5nOiBsbmcsXG4gICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgIGZjTmFtZTogZmNOYW1lLFxuICAgICAgICAgIHRyaWVkOiB0cmllZCxcbiAgICAgICAgICB3YWl0OiB3YWl0LFxuICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlYWRpbmdDYWxscysrO1xuICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZFtmY05hbWVdKGxuZywgbnMsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgX3RoaXMzLnJlYWRpbmdDYWxscy0tO1xuXG4gICAgICAgIGlmIChfdGhpczMud2FpdGluZ1JlYWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IF90aGlzMy53YWl0aW5nUmVhZHMuc2hpZnQoKTtcblxuICAgICAgICAgIF90aGlzMy5yZWFkKG5leHQubG5nLCBuZXh0Lm5zLCBuZXh0LmZjTmFtZSwgbmV4dC50cmllZCwgbmV4dC53YWl0LCBuZXh0LmNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnIgJiYgZGF0YSAmJiB0cmllZCA8IF90aGlzMy5tYXhSZXRyaWVzKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczMucmVhZC5jYWxsKF90aGlzMywgbG5nLCBucywgZmNOYW1lLCB0cmllZCArIDEsIHdhaXQgKiAyLCBjYWxsYmFjayk7XG4gICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwcmVwYXJlTG9hZGluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCF0aGlzLmJhY2tlbmQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignTm8gYmFja2VuZCB3YXMgYWRkZWQgdmlhIGkxOG5leHQudXNlLiBXaWxsIG5vdCBsb2FkIHJlc291cmNlcy4nKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbGFuZ3VhZ2VzID09PSAnc3RyaW5nJykgbGFuZ3VhZ2VzID0gdGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShsYW5ndWFnZXMpO1xuICAgICAgaWYgKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJykgbmFtZXNwYWNlcyA9IFtuYW1lc3BhY2VzXTtcbiAgICAgIHZhciB0b0xvYWQgPSB0aGlzLnF1ZXVlTG9hZChsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIG9wdGlvbnMsIGNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF0b0xvYWQudG9Mb2FkLmxlbmd0aCkge1xuICAgICAgICBpZiAoIXRvTG9hZC5wZW5kaW5nLmxlbmd0aCkgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRvTG9hZC50b0xvYWQuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBfdGhpczQubG9hZE9uZShuYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy5wcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIHt9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbG9hZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy5wcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIHtcbiAgICAgICAgcmVsb2FkOiB0cnVlXG4gICAgICB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRPbmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZE9uZShuYW1lKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIHByZWZpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG4gICAgICB2YXIgcyA9IG5hbWUuc3BsaXQoJ3wnKTtcbiAgICAgIHZhciBsbmcgPSBzWzBdO1xuICAgICAgdmFyIG5zID0gc1sxXTtcbiAgICAgIHRoaXMucmVhZChsbmcsIG5zLCAncmVhZCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgIGlmIChlcnIpIF90aGlzNS5sb2dnZXIud2FybihcIlwiLmNvbmNhdChwcmVmaXgsIFwibG9hZGluZyBuYW1lc3BhY2UgXCIpLmNvbmNhdChucywgXCIgZm9yIGxhbmd1YWdlIFwiKS5jb25jYXQobG5nLCBcIiBmYWlsZWRcIiksIGVycik7XG4gICAgICAgIGlmICghZXJyICYmIGRhdGEpIF90aGlzNS5sb2dnZXIubG9nKFwiXCIuY29uY2F0KHByZWZpeCwgXCJsb2FkZWQgbmFtZXNwYWNlIFwiKS5jb25jYXQobnMsIFwiIGZvciBsYW5ndWFnZSBcIikuY29uY2F0KGxuZyksIGRhdGEpO1xuXG4gICAgICAgIF90aGlzNS5sb2FkZWQobmFtZSwgZXJyLCBkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzYXZlTWlzc2luZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzYXZlTWlzc2luZyhsYW5ndWFnZXMsIG5hbWVzcGFjZSwga2V5LCBmYWxsYmFja1ZhbHVlLCBpc1VwZGF0ZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHt9O1xuXG4gICAgICBpZiAodGhpcy5zZXJ2aWNlcy51dGlscyAmJiB0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSAmJiAhdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UobmFtZXNwYWNlKSkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiZGlkIG5vdCBzYXZlIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGFzIHRoZSBuYW1lc3BhY2UgXFxcIlwiKS5jb25jYXQobmFtZXNwYWNlLCBcIlxcXCIgd2FzIG5vdCB5ZXQgbG9hZGVkXCIpLCAnVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCB8fCBrZXkgPT09ICcnKSByZXR1cm47XG5cbiAgICAgIGlmICh0aGlzLmJhY2tlbmQgJiYgdGhpcy5iYWNrZW5kLmNyZWF0ZSkge1xuICAgICAgICB0aGlzLmJhY2tlbmQuY3JlYXRlKGxhbmd1YWdlcywgbmFtZXNwYWNlLCBrZXksIGZhbGxiYWNrVmFsdWUsIG51bGwsIF9vYmplY3RTcHJlYWQkNShfb2JqZWN0U3ByZWFkJDUoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgIGlzVXBkYXRlOiBpc1VwZGF0ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghbGFuZ3VhZ2VzIHx8ICFsYW5ndWFnZXNbMF0pIHJldHVybjtcbiAgICAgIHRoaXMuc3RvcmUuYWRkUmVzb3VyY2UobGFuZ3VhZ2VzWzBdLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbm5lY3Rvcjtcbn0oRXZlbnRFbWl0dGVyKTtcblxuZnVuY3Rpb24gZ2V0KCkge1xuICByZXR1cm4ge1xuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBpbml0SW1tZWRpYXRlOiB0cnVlLFxuICAgIG5zOiBbJ3RyYW5zbGF0aW9uJ10sXG4gICAgZGVmYXVsdE5TOiBbJ3RyYW5zbGF0aW9uJ10sXG4gICAgZmFsbGJhY2tMbmc6IFsnZGV2J10sXG4gICAgZmFsbGJhY2tOUzogZmFsc2UsXG4gICAgc3VwcG9ydGVkTG5nczogZmFsc2UsXG4gICAgbm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzOiBmYWxzZSxcbiAgICBsb2FkOiAnYWxsJyxcbiAgICBwcmVsb2FkOiBmYWxzZSxcbiAgICBzaW1wbGlmeVBsdXJhbFN1ZmZpeDogdHJ1ZSxcbiAgICBrZXlTZXBhcmF0b3I6ICcuJyxcbiAgICBuc1NlcGFyYXRvcjogJzonLFxuICAgIHBsdXJhbFNlcGFyYXRvcjogJ18nLFxuICAgIGNvbnRleHRTZXBhcmF0b3I6ICdfJyxcbiAgICBwYXJ0aWFsQnVuZGxlZExhbmd1YWdlczogZmFsc2UsXG4gICAgc2F2ZU1pc3Npbmc6IGZhbHNlLFxuICAgIHVwZGF0ZU1pc3Npbmc6IGZhbHNlLFxuICAgIHNhdmVNaXNzaW5nVG86ICdmYWxsYmFjaycsXG4gICAgc2F2ZU1pc3NpbmdQbHVyYWxzOiB0cnVlLFxuICAgIG1pc3NpbmdLZXlIYW5kbGVyOiBmYWxzZSxcbiAgICBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI6IGZhbHNlLFxuICAgIHBvc3RQcm9jZXNzOiBmYWxzZSxcbiAgICBwb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZDogZmFsc2UsXG4gICAgcmV0dXJuTnVsbDogdHJ1ZSxcbiAgICByZXR1cm5FbXB0eVN0cmluZzogdHJ1ZSxcbiAgICByZXR1cm5PYmplY3RzOiBmYWxzZSxcbiAgICBqb2luQXJyYXlzOiBmYWxzZSxcbiAgICByZXR1cm5lZE9iamVjdEhhbmRsZXI6IGZhbHNlLFxuICAgIHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6IGZhbHNlLFxuICAgIGFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleTogZmFsc2UsXG4gICAgYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU6IGZhbHNlLFxuICAgIG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGUoYXJncykge1xuICAgICAgdmFyIHJldCA9IHt9O1xuICAgICAgaWYgKF90eXBlb2ZfX2RlZmF1bHRbJ2RlZmF1bHQnXShhcmdzWzFdKSA9PT0gJ29iamVjdCcpIHJldCA9IGFyZ3NbMV07XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnKSByZXQuZGVmYXVsdFZhbHVlID0gYXJnc1sxXTtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1syXSA9PT0gJ3N0cmluZycpIHJldC50RGVzY3JpcHRpb24gPSBhcmdzWzJdO1xuXG4gICAgICBpZiAoX3R5cGVvZl9fZGVmYXVsdFsnZGVmYXVsdCddKGFyZ3NbMl0pID09PSAnb2JqZWN0JyB8fCBfdHlwZW9mX19kZWZhdWx0WydkZWZhdWx0J10oYXJnc1szXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gYXJnc1szXSB8fCBhcmdzWzJdO1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXRba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBpbnRlcnBvbGF0aW9uOiB7XG4gICAgICBlc2NhcGVWYWx1ZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBfZm9ybWF0LCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICAgIHByZWZpeDogJ3t7JyxcbiAgICAgIHN1ZmZpeDogJ319JyxcbiAgICAgIGZvcm1hdFNlcGFyYXRvcjogJywnLFxuICAgICAgdW5lc2NhcGVQcmVmaXg6ICctJyxcbiAgICAgIG5lc3RpbmdQcmVmaXg6ICckdCgnLFxuICAgICAgbmVzdGluZ1N1ZmZpeDogJyknLFxuICAgICAgbmVzdGluZ09wdGlvbnNTZXBhcmF0b3I6ICcsJyxcbiAgICAgIG1heFJlcGxhY2VzOiAxMDAwLFxuICAgICAgc2tpcE9uVmFyaWFibGVzOiB0cnVlXG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5ucyA9PT0gJ3N0cmluZycpIG9wdGlvbnMubnMgPSBbb3B0aW9ucy5uc107XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5mYWxsYmFja0xuZyA9PT0gJ3N0cmluZycpIG9wdGlvbnMuZmFsbGJhY2tMbmcgPSBbb3B0aW9ucy5mYWxsYmFja0xuZ107XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5mYWxsYmFja05TID09PSAnc3RyaW5nJykgb3B0aW9ucy5mYWxsYmFja05TID0gW29wdGlvbnMuZmFsbGJhY2tOU107XG5cbiAgaWYgKG9wdGlvbnMuc3VwcG9ydGVkTG5ncyAmJiBvcHRpb25zLnN1cHBvcnRlZExuZ3MuaW5kZXhPZignY2ltb2RlJykgPCAwKSB7XG4gICAgb3B0aW9ucy5zdXBwb3J0ZWRMbmdzID0gb3B0aW9ucy5zdXBwb3J0ZWRMbmdzLmNvbmNhdChbJ2NpbW9kZSddKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBvd25LZXlzJDYob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDYodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQ2KE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5X19kZWZhdWx0WydkZWZhdWx0J10odGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQ2KE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIkMyhEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQzKCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mX19kZWZhdWx0WydkZWZhdWx0J10oRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZl9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQzKCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIGJpbmRNZW1iZXJGdW5jdGlvbnMoaW5zdCkge1xuICB2YXIgbWVtcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnN0KSk7XG4gIG1lbXMuZm9yRWFjaChmdW5jdGlvbiAobWVtKSB7XG4gICAgaWYgKHR5cGVvZiBpbnN0W21lbV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluc3RbbWVtXSA9IGluc3RbbWVtXS5iaW5kKGluc3QpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBJMThuID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzX19kZWZhdWx0WydkZWZhdWx0J10oSTE4biwgX0V2ZW50RW1pdHRlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlciQzKEkxOG4pO1xuXG4gIGZ1bmN0aW9uIEkxOG4oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrX19kZWZhdWx0WydkZWZhdWx0J10odGhpcywgSTE4bik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuXG4gICAgaWYgKGlzSUUxMCkge1xuICAgICAgRXZlbnRFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZF9fZGVmYXVsdFsnZGVmYXVsdCddKF90aGlzKSk7XG4gICAgfVxuXG4gICAgX3RoaXMub3B0aW9ucyA9IHRyYW5zZm9ybU9wdGlvbnMob3B0aW9ucyk7XG4gICAgX3RoaXMuc2VydmljZXMgPSB7fTtcbiAgICBfdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyO1xuICAgIF90aGlzLm1vZHVsZXMgPSB7XG4gICAgICBleHRlcm5hbDogW11cbiAgICB9O1xuICAgIGJpbmRNZW1iZXJGdW5jdGlvbnMoX2Fzc2VydFRoaXNJbml0aWFsaXplZF9fZGVmYXVsdFsnZGVmYXVsdCddKF90aGlzKSk7XG5cbiAgICBpZiAoY2FsbGJhY2sgJiYgIV90aGlzLmlzSW5pdGlhbGl6ZWQgJiYgIW9wdGlvbnMuaXNDbG9uZSkge1xuICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGUpIHtcbiAgICAgICAgX3RoaXMuaW5pdChvcHRpb25zLCBjYWxsYmFjayk7XG5cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19kZWZhdWx0WydkZWZhdWx0J10oX3RoaXMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRfX2RlZmF1bHRbJ2RlZmF1bHQnXShfdGhpcykpO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuaW5pdChvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3NfX2RlZmF1bHRbJ2RlZmF1bHQnXShJMThuLCBbe1xuICAgIGtleTogXCJpbml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLmRlZmF1bHROUyAmJiBvcHRpb25zLmRlZmF1bHROUyAhPT0gZmFsc2UgJiYgb3B0aW9ucy5ucykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgb3B0aW9ucy5kZWZhdWx0TlMgPSBvcHRpb25zLm5zO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubnMuaW5kZXhPZigndHJhbnNsYXRpb24nKSA8IDApIHtcbiAgICAgICAgICBvcHRpb25zLmRlZmF1bHROUyA9IG9wdGlvbnMubnNbMF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGRlZk9wdHMgPSBnZXQoKTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoX29iamVjdFNwcmVhZCQ2KHt9LCBkZWZPcHRzKSwgdGhpcy5vcHRpb25zKSwgdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSAhPT0gJ3YxJykge1xuICAgICAgICB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiA9IF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoe30sIGRlZk9wdHMuaW50ZXJwb2xhdGlvbiksIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMua2V5U2VwYXJhdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkS2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLm5zU2VwYXJhdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkTnNTZXBhcmF0b3IgPSBvcHRpb25zLm5zU2VwYXJhdG9yO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjcmVhdGVDbGFzc09uRGVtYW5kKENsYXNzT3JPYmplY3QpIHtcbiAgICAgICAgaWYgKCFDbGFzc09yT2JqZWN0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiBDbGFzc09yT2JqZWN0ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gbmV3IENsYXNzT3JPYmplY3QoKTtcbiAgICAgICAgcmV0dXJuIENsYXNzT3JPYmplY3Q7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmlzQ2xvbmUpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5sb2dnZXIpIHtcbiAgICAgICAgICBiYXNlTG9nZ2VyLmluaXQoY3JlYXRlQ2xhc3NPbkRlbWFuZCh0aGlzLm1vZHVsZXMubG9nZ2VyKSwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYXNlTG9nZ2VyLmluaXQobnVsbCwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmb3JtYXR0ZXI7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZXIgPSB0aGlzLm1vZHVsZXMuZm9ybWF0dGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGZvcm1hdHRlciA9IEZvcm1hdHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsdSA9IG5ldyBMYW5ndWFnZVV0aWwodGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5zdG9yZSA9IG5ldyBSZXNvdXJjZVN0b3JlKHRoaXMub3B0aW9ucy5yZXNvdXJjZXMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHZhciBzID0gdGhpcy5zZXJ2aWNlcztcbiAgICAgICAgcy5sb2dnZXIgPSBiYXNlTG9nZ2VyO1xuICAgICAgICBzLnJlc291cmNlU3RvcmUgPSB0aGlzLnN0b3JlO1xuICAgICAgICBzLmxhbmd1YWdlVXRpbHMgPSBsdTtcbiAgICAgICAgcy5wbHVyYWxSZXNvbHZlciA9IG5ldyBQbHVyYWxSZXNvbHZlcihsdSwge1xuICAgICAgICAgIHByZXBlbmQ6IHRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IsXG4gICAgICAgICAgY29tcGF0aWJpbGl0eUpTT046IHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTixcbiAgICAgICAgICBzaW1wbGlmeVBsdXJhbFN1ZmZpeDogdGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgKCF0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQgfHwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0ID09PSBkZWZPcHRzLmludGVycG9sYXRpb24uZm9ybWF0KSkge1xuICAgICAgICAgIHMuZm9ybWF0dGVyID0gY3JlYXRlQ2xhc3NPbkRlbWFuZChmb3JtYXR0ZXIpO1xuICAgICAgICAgIHMuZm9ybWF0dGVyLmluaXQocywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQgPSBzLmZvcm1hdHRlci5mb3JtYXQuYmluZChzLmZvcm1hdHRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBzLmludGVycG9sYXRvciA9IG5ldyBJbnRlcnBvbGF0b3IodGhpcy5vcHRpb25zKTtcbiAgICAgICAgcy51dGlscyA9IHtcbiAgICAgICAgICBoYXNMb2FkZWROYW1lc3BhY2U6IHRoaXMuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQodGhpcylcbiAgICAgICAgfTtcbiAgICAgICAgcy5iYWNrZW5kQ29ubmVjdG9yID0gbmV3IENvbm5lY3RvcihjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5iYWNrZW5kKSwgcy5yZXNvdXJjZVN0b3JlLCBzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBzLmJhY2tlbmRDb25uZWN0b3Iub24oJyonLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczIuZW1pdC5hcHBseShfdGhpczIsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yKSB7XG4gICAgICAgICAgcy5sYW5ndWFnZURldGVjdG9yID0gY3JlYXRlQ2xhc3NPbkRlbWFuZCh0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3Rvcik7XG4gICAgICAgICAgcy5sYW5ndWFnZURldGVjdG9yLmluaXQocywgdGhpcy5vcHRpb25zLmRldGVjdGlvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCkge1xuICAgICAgICAgIHMuaTE4bkZvcm1hdCA9IGNyZWF0ZUNsYXNzT25EZW1hbmQodGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQpO1xuICAgICAgICAgIGlmIChzLmkxOG5Gb3JtYXQuaW5pdCkgcy5pMThuRm9ybWF0LmluaXQodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRvcih0aGlzLnNlcnZpY2VzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0b3Iub24oJyonLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczIuZW1pdC5hcHBseShfdGhpczIsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubW9kdWxlcy5leHRlcm5hbC5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgaWYgKG0uaW5pdCkgbS5pbml0KF90aGlzMik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm1hdCA9IHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdDtcbiAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gbm9vcDtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyAmJiAhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yICYmICF0aGlzLm9wdGlvbnMubG5nKSB7XG4gICAgICAgIHZhciBjb2RlcyA9IHRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyk7XG4gICAgICAgIGlmIChjb2Rlcy5sZW5ndGggPiAwICYmIGNvZGVzWzBdICE9PSAnZGV2JykgdGhpcy5vcHRpb25zLmxuZyA9IGNvZGVzWzBdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiAhdGhpcy5vcHRpb25zLmxuZykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdpbml0OiBubyBsYW5ndWFnZURldGVjdG9yIGlzIHVzZWQgYW5kIG5vIGxuZyBpcyBkZWZpbmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdG9yZUFwaSA9IFsnZ2V0UmVzb3VyY2UnLCAnaGFzUmVzb3VyY2VCdW5kbGUnLCAnZ2V0UmVzb3VyY2VCdW5kbGUnLCAnZ2V0RGF0YUJ5TGFuZ3VhZ2UnXTtcbiAgICAgIHN0b3JlQXBpLmZvckVhY2goZnVuY3Rpb24gKGZjTmFtZSkge1xuICAgICAgICBfdGhpczJbZmNOYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMyJHN0b3JlO1xuXG4gICAgICAgICAgcmV0dXJuIChfdGhpczIkc3RvcmUgPSBfdGhpczIuc3RvcmUpW2ZjTmFtZV0uYXBwbHkoX3RoaXMyJHN0b3JlLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB2YXIgc3RvcmVBcGlDaGFpbmVkID0gWydhZGRSZXNvdXJjZScsICdhZGRSZXNvdXJjZXMnLCAnYWRkUmVzb3VyY2VCdW5kbGUnLCAncmVtb3ZlUmVzb3VyY2VCdW5kbGUnXTtcbiAgICAgIHN0b3JlQXBpQ2hhaW5lZC5mb3JFYWNoKGZ1bmN0aW9uIChmY05hbWUpIHtcbiAgICAgICAgX3RoaXMyW2ZjTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzMiRzdG9yZTI7XG5cbiAgICAgICAgICAoX3RoaXMyJHN0b3JlMiA9IF90aGlzMi5zdG9yZSlbZmNOYW1lXS5hcHBseShfdGhpczIkc3RvcmUyLCBhcmd1bWVudHMpO1xuXG4gICAgICAgICAgcmV0dXJuIF90aGlzMjtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGRlZmVycmVkID0gZGVmZXIoKTtcblxuICAgICAgdmFyIGxvYWQgPSBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgICB2YXIgZmluaXNoID0gZnVuY3Rpb24gZmluaXNoKGVyciwgdCkge1xuICAgICAgICAgIGlmIChfdGhpczIuaXNJbml0aWFsaXplZCAmJiAhX3RoaXMyLmluaXRpYWxpemVkU3RvcmVPbmNlKSBfdGhpczIubG9nZ2VyLndhcm4oJ2luaXQ6IGkxOG5leHQgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4gWW91IHNob3VsZCBjYWxsIGluaXQganVzdCBvbmNlIScpO1xuICAgICAgICAgIF90aGlzMi5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIV90aGlzMi5vcHRpb25zLmlzQ2xvbmUpIF90aGlzMi5sb2dnZXIubG9nKCdpbml0aWFsaXplZCcsIF90aGlzMi5vcHRpb25zKTtcblxuICAgICAgICAgIF90aGlzMi5lbWl0KCdpbml0aWFsaXplZCcsIF90aGlzMi5vcHRpb25zKTtcblxuICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUodCk7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCB0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoX3RoaXMyLmxhbmd1YWdlcyAmJiBfdGhpczIub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJICE9PSAndjEnICYmICFfdGhpczIuaXNJbml0aWFsaXplZCkgcmV0dXJuIGZpbmlzaChudWxsLCBfdGhpczIudC5iaW5kKF90aGlzMikpO1xuXG4gICAgICAgIF90aGlzMi5jaGFuZ2VMYW5ndWFnZShfdGhpczIub3B0aW9ucy5sbmcsIGZpbmlzaCk7XG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnJlc291cmNlcyB8fCAhdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGUpIHtcbiAgICAgICAgbG9hZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VGltZW91dChsb2FkLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkUmVzb3VyY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRSZXNvdXJjZXMobGFuZ3VhZ2UpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5vb3A7XG4gICAgICB2YXIgdXNlZENhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICB2YXIgdXNlZExuZyA9IHR5cGVvZiBsYW5ndWFnZSA9PT0gJ3N0cmluZycgPyBsYW5ndWFnZSA6IHRoaXMubGFuZ3VhZ2U7XG4gICAgICBpZiAodHlwZW9mIGxhbmd1YWdlID09PSAnZnVuY3Rpb24nKSB1c2VkQ2FsbGJhY2sgPSBsYW5ndWFnZTtcblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzIHx8IHRoaXMub3B0aW9ucy5wYXJ0aWFsQnVuZGxlZExhbmd1YWdlcykge1xuICAgICAgICBpZiAodXNlZExuZyAmJiB1c2VkTG5nLnRvTG93ZXJDYXNlKCkgPT09ICdjaW1vZGUnKSByZXR1cm4gdXNlZENhbGxiYWNrKCk7XG4gICAgICAgIHZhciB0b0xvYWQgPSBbXTtcblxuICAgICAgICB2YXIgYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKGxuZykge1xuICAgICAgICAgIGlmICghbG5nKSByZXR1cm47XG5cbiAgICAgICAgICB2YXIgbG5ncyA9IF90aGlzMy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShsbmcpO1xuXG4gICAgICAgICAgbG5ncy5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICBpZiAodG9Mb2FkLmluZGV4T2YobCkgPCAwKSB0b0xvYWQucHVzaChsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIXVzZWRMbmcpIHtcbiAgICAgICAgICB2YXIgZmFsbGJhY2tzID0gdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTtcbiAgICAgICAgICBmYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcGVuZChsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBlbmQodXNlZExuZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnByZWxvYWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucHJlbG9hZC5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwZW5kKGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmxvYWQodG9Mb2FkLCB0aGlzLm9wdGlvbnMubnMsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKCFlICYmICFfdGhpczMucmVzb2x2ZWRMYW5ndWFnZSAmJiBfdGhpczMubGFuZ3VhZ2UpIF90aGlzMy5zZXRSZXNvbHZlZExhbmd1YWdlKF90aGlzMy5sYW5ndWFnZSk7XG4gICAgICAgICAgdXNlZENhbGxiYWNrKGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVzZWRDYWxsYmFjayhudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVsb2FkUmVzb3VyY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbG9hZFJlc291cmNlcyhsbmdzLCBucywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gICAgICBpZiAoIWxuZ3MpIGxuZ3MgPSB0aGlzLmxhbmd1YWdlcztcbiAgICAgIGlmICghbnMpIG5zID0gdGhpcy5vcHRpb25zLm5zO1xuICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBub29wO1xuICAgICAgdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnJlbG9hZChsbmdzLCBucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVzZShtb2R1bGUpIHtcbiAgICAgIGlmICghbW9kdWxlKSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBhcmUgcGFzc2luZyBhbiB1bmRlZmluZWQgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKScpO1xuICAgICAgaWYgKCFtb2R1bGUudHlwZSkgdGhyb3cgbmV3IEVycm9yKCdZb3UgYXJlIHBhc3NpbmcgYSB3cm9uZyBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpJyk7XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2JhY2tlbmQnKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5iYWNrZW5kID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdsb2dnZXInIHx8IG1vZHVsZS5sb2cgJiYgbW9kdWxlLndhcm4gJiYgbW9kdWxlLmVycm9yKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5sb2dnZXIgPSBtb2R1bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2xhbmd1YWdlRGV0ZWN0b3InKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdpMThuRm9ybWF0Jykge1xuICAgICAgICB0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCA9IG1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAncG9zdFByb2Nlc3NvcicpIHtcbiAgICAgICAgcG9zdFByb2Nlc3Nvci5hZGRQb3N0UHJvY2Vzc29yKG1vZHVsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2Zvcm1hdHRlcicpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmZvcm1hdHRlciA9IG1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnM3JkUGFydHknKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKG1vZHVsZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRSZXNvbHZlZExhbmd1YWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFJlc29sdmVkTGFuZ3VhZ2UobCkge1xuICAgICAgaWYgKCFsIHx8ICF0aGlzLmxhbmd1YWdlcykgcmV0dXJuO1xuICAgICAgaWYgKFsnY2ltb2RlJywgJ2RldiddLmluZGV4T2YobCkgPiAtMSkgcmV0dXJuO1xuXG4gICAgICBmb3IgKHZhciBsaSA9IDA7IGxpIDwgdGhpcy5sYW5ndWFnZXMubGVuZ3RoOyBsaSsrKSB7XG4gICAgICAgIHZhciBsbmdJbkxuZ3MgPSB0aGlzLmxhbmd1YWdlc1tsaV07XG4gICAgICAgIGlmIChbJ2NpbW9kZScsICdkZXYnXS5pbmRleE9mKGxuZ0luTG5ncykgPiAtMSkgY29udGludWU7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RvcmUuaGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zKGxuZ0luTG5ncykpIHtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkTGFuZ3VhZ2UgPSBsbmdJbkxuZ3M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2hhbmdlTGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlTGFuZ3VhZ2UobG5nLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG8gPSBsbmc7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuICAgICAgdGhpcy5lbWl0KCdsYW5ndWFnZUNoYW5naW5nJywgbG5nKTtcblxuICAgICAgdmFyIHNldExuZ1Byb3BzID0gZnVuY3Rpb24gc2V0TG5nUHJvcHMobCkge1xuICAgICAgICBfdGhpczQubGFuZ3VhZ2UgPSBsO1xuICAgICAgICBfdGhpczQubGFuZ3VhZ2VzID0gX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGwpO1xuICAgICAgICBfdGhpczQucmVzb2x2ZWRMYW5ndWFnZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBfdGhpczQuc2V0UmVzb2x2ZWRMYW5ndWFnZShsKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBkb25lID0gZnVuY3Rpb24gZG9uZShlcnIsIGwpIHtcbiAgICAgICAgaWYgKGwpIHtcbiAgICAgICAgICBzZXRMbmdQcm9wcyhsKTtcblxuICAgICAgICAgIF90aGlzNC50cmFuc2xhdG9yLmNoYW5nZUxhbmd1YWdlKGwpO1xuXG4gICAgICAgICAgX3RoaXM0LmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgX3RoaXM0LmVtaXQoJ2xhbmd1YWdlQ2hhbmdlZCcsIGwpO1xuXG4gICAgICAgICAgX3RoaXM0LmxvZ2dlci5sb2coJ2xhbmd1YWdlQ2hhbmdlZCcsIGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzNC5pc0xhbmd1YWdlQ2hhbmdpbmdUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmVycmVkLnJlc29sdmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQudC5hcHBseShfdGhpczQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVyciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQudC5hcHBseShfdGhpczQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgdmFyIHNldExuZyA9IGZ1bmN0aW9uIHNldExuZyhsbmdzKSB7XG4gICAgICAgIGlmICghbG5nICYmICFsbmdzICYmIF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yKSBsbmdzID0gW107XG4gICAgICAgIHZhciBsID0gdHlwZW9mIGxuZ3MgPT09ICdzdHJpbmcnID8gbG5ncyA6IF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEJlc3RNYXRjaEZyb21Db2RlcyhsbmdzKTtcblxuICAgICAgICBpZiAobCkge1xuICAgICAgICAgIGlmICghX3RoaXM0Lmxhbmd1YWdlKSB7XG4gICAgICAgICAgICBzZXRMbmdQcm9wcyhsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIV90aGlzNC50cmFuc2xhdG9yLmxhbmd1YWdlKSBfdGhpczQudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShsKTtcbiAgICAgICAgICBpZiAoX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IpIF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmNhY2hlVXNlckxhbmd1YWdlKGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXM0LmxvYWRSZXNvdXJjZXMobCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGRvbmUoZXJyLCBsKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoIWxuZyAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYykge1xuICAgICAgICBzZXRMbmcodGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIWxuZyAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jKSB7XG4gICAgICAgIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5kZXRlY3Qoc2V0TG5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldExuZyhsbmcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZpeGVkVFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaXhlZFQobG5nLCBucywga2V5UHJlZml4KSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIGZpeGVkVCA9IGZ1bmN0aW9uIGZpeGVkVChrZXksIG9wdHMpIHtcbiAgICAgICAgdmFyIG9wdGlvbnM7XG5cbiAgICAgICAgaWYgKF90eXBlb2ZfX2RlZmF1bHRbJ2RlZmF1bHQnXShvcHRzKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAyID8gX2xlbjMgLSAyIDogMCksIF9rZXkzID0gMjsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICAgICAgcmVzdFtfa2V5MyAtIDJdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcHRpb25zID0gX3RoaXM1Lm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoW2tleSwgb3B0c10uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25zID0gX29iamVjdFNwcmVhZCQ2KHt9LCBvcHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMubG5nID0gb3B0aW9ucy5sbmcgfHwgZml4ZWRULmxuZztcbiAgICAgICAgb3B0aW9ucy5sbmdzID0gb3B0aW9ucy5sbmdzIHx8IGZpeGVkVC5sbmdzO1xuICAgICAgICBvcHRpb25zLm5zID0gb3B0aW9ucy5ucyB8fCBmaXhlZFQubnM7XG4gICAgICAgIG9wdGlvbnMua2V5UHJlZml4ID0gb3B0aW9ucy5rZXlQcmVmaXggfHwga2V5UHJlZml4IHx8IGZpeGVkVC5rZXlQcmVmaXg7XG4gICAgICAgIHZhciBrZXlTZXBhcmF0b3IgPSBfdGhpczUub3B0aW9ucy5rZXlTZXBhcmF0b3IgfHwgJy4nO1xuICAgICAgICB2YXIgcmVzdWx0S2V5ID0gb3B0aW9ucy5rZXlQcmVmaXggPyBcIlwiLmNvbmNhdChvcHRpb25zLmtleVByZWZpeCkuY29uY2F0KGtleVNlcGFyYXRvcikuY29uY2F0KGtleSkgOiBrZXk7XG4gICAgICAgIHJldHVybiBfdGhpczUudChyZXN1bHRLZXksIG9wdGlvbnMpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBsbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZpeGVkVC5sbmcgPSBsbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXhlZFQubG5ncyA9IGxuZztcbiAgICAgIH1cblxuICAgICAgZml4ZWRULm5zID0gbnM7XG4gICAgICBmaXhlZFQua2V5UHJlZml4ID0ga2V5UHJlZml4O1xuICAgICAgcmV0dXJuIGZpeGVkVDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0KCkge1xuICAgICAgdmFyIF90aGlzJHRyYW5zbGF0b3I7XG5cbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0b3IgJiYgKF90aGlzJHRyYW5zbGF0b3IgPSB0aGlzLnRyYW5zbGF0b3IpLnRyYW5zbGF0ZS5hcHBseShfdGhpcyR0cmFuc2xhdG9yLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleGlzdHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXhpc3RzKCkge1xuICAgICAgdmFyIF90aGlzJHRyYW5zbGF0b3IyO1xuXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdG9yICYmIChfdGhpcyR0cmFuc2xhdG9yMiA9IHRoaXMudHJhbnNsYXRvcikuZXhpc3RzLmFwcGx5KF90aGlzJHRyYW5zbGF0b3IyLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXREZWZhdWx0TmFtZXNwYWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldERlZmF1bHROYW1lc3BhY2UobnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kZWZhdWx0TlMgPSBucztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzTG9hZGVkTmFtZXNwYWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0xvYWRlZE5hbWVzcGFjZShucykge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuZXh0IHdhcyBub3QgaW5pdGlhbGl6ZWQnLCB0aGlzLmxhbmd1YWdlcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmxhbmd1YWdlcyB8fCAhdGhpcy5sYW5ndWFnZXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2hhc0xvYWRlZE5hbWVzcGFjZTogaTE4bi5sYW5ndWFnZXMgd2VyZSB1bmRlZmluZWQgb3IgZW1wdHknLCB0aGlzLmxhbmd1YWdlcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxuZyA9IHRoaXMucmVzb2x2ZWRMYW5ndWFnZSB8fCB0aGlzLmxhbmd1YWdlc1swXTtcbiAgICAgIHZhciBmYWxsYmFja0xuZyA9IHRoaXMub3B0aW9ucyA/IHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyA6IGZhbHNlO1xuICAgICAgdmFyIGxhc3RMbmcgPSB0aGlzLmxhbmd1YWdlc1t0aGlzLmxhbmd1YWdlcy5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChsbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHJldHVybiB0cnVlO1xuXG4gICAgICB2YXIgbG9hZE5vdFBlbmRpbmcgPSBmdW5jdGlvbiBsb2FkTm90UGVuZGluZyhsLCBuKSB7XG4gICAgICAgIHZhciBsb2FkU3RhdGUgPSBfdGhpczYuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5zdGF0ZVtcIlwiLmNvbmNhdChsLCBcInxcIikuY29uY2F0KG4pXTtcblxuICAgICAgICByZXR1cm4gbG9hZFN0YXRlID09PSAtMSB8fCBsb2FkU3RhdGUgPT09IDI7XG4gICAgICB9O1xuXG4gICAgICBpZiAob3B0aW9ucy5wcmVjaGVjaykge1xuICAgICAgICB2YXIgcHJlUmVzdWx0ID0gb3B0aW9ucy5wcmVjaGVjayh0aGlzLCBsb2FkTm90UGVuZGluZyk7XG4gICAgICAgIGlmIChwcmVSZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHByZVJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobG5nLCBucykpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IuYmFja2VuZCB8fCB0aGlzLm9wdGlvbnMucmVzb3VyY2VzICYmICF0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGxvYWROb3RQZW5kaW5nKGxuZywgbnMpICYmICghZmFsbGJhY2tMbmcgfHwgbG9hZE5vdFBlbmRpbmcobGFzdExuZywgbnMpKSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWROYW1lc3BhY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWROYW1lc3BhY2VzKG5zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG5cbiAgICAgIGlmICghdGhpcy5vcHRpb25zLm5zKSB7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBucyA9PT0gJ3N0cmluZycpIG5zID0gW25zXTtcbiAgICAgIG5zLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgaWYgKF90aGlzNy5vcHRpb25zLm5zLmluZGV4T2YobikgPCAwKSBfdGhpczcub3B0aW9ucy5ucy5wdXNoKG4pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMoZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkTGFuZ3VhZ2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRMYW5ndWFnZXMobG5ncywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gICAgICBpZiAodHlwZW9mIGxuZ3MgPT09ICdzdHJpbmcnKSBsbmdzID0gW2xuZ3NdO1xuICAgICAgdmFyIHByZWxvYWRlZCA9IHRoaXMub3B0aW9ucy5wcmVsb2FkIHx8IFtdO1xuICAgICAgdmFyIG5ld0xuZ3MgPSBsbmdzLmZpbHRlcihmdW5jdGlvbiAobG5nKSB7XG4gICAgICAgIHJldHVybiBwcmVsb2FkZWQuaW5kZXhPZihsbmcpIDwgMDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW5ld0xuZ3MubGVuZ3RoKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMucHJlbG9hZCA9IHByZWxvYWRlZC5jb25jYXQobmV3TG5ncyk7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMoZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkaXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlyKGxuZykge1xuICAgICAgaWYgKCFsbmcpIGxuZyA9IHRoaXMucmVzb2x2ZWRMYW5ndWFnZSB8fCAodGhpcy5sYW5ndWFnZXMgJiYgdGhpcy5sYW5ndWFnZXMubGVuZ3RoID4gMCA/IHRoaXMubGFuZ3VhZ2VzWzBdIDogdGhpcy5sYW5ndWFnZSk7XG4gICAgICBpZiAoIWxuZykgcmV0dXJuICdydGwnO1xuICAgICAgdmFyIHJ0bExuZ3MgPSBbJ2FyJywgJ3NodScsICdzcXInLCAnc3NoJywgJ3hhYScsICd5aGQnLCAneXVkJywgJ2FhbycsICdhYmgnLCAnYWJ2JywgJ2FjbScsICdhY3EnLCAnYWN3JywgJ2FjeCcsICdhY3knLCAnYWRmJywgJ2FkcycsICdhZWInLCAnYWVjJywgJ2FmYicsICdhanAnLCAnYXBjJywgJ2FwZCcsICdhcmInLCAnYXJxJywgJ2FycycsICdhcnknLCAnYXJ6JywgJ2F1eicsICdhdmwnLCAnYXloJywgJ2F5bCcsICdheW4nLCAnYXlwJywgJ2JieicsICdwZ2EnLCAnaGUnLCAnaXcnLCAncHMnLCAncGJ0JywgJ3BidScsICdwc3QnLCAncHJwJywgJ3ByZCcsICd1ZycsICd1cicsICd5ZGQnLCAneWRzJywgJ3lpaCcsICdqaScsICd5aScsICdoYm8nLCAnbWVuJywgJ3htbicsICdmYScsICdqcHInLCAncGVvJywgJ3BlcycsICdwcnMnLCAnZHYnLCAnc2FtJywgJ2NrYiddO1xuICAgICAgcmV0dXJuIHJ0bExuZ3MuaW5kZXhPZih0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUobG5nKSkgPiAtMSB8fCBsbmcudG9Mb3dlckNhc2UoKS5pbmRleE9mKCctYXJhYicpID4gMSA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsb25lSW5zdGFuY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmVJbnN0YW5jZSgpIHtcbiAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5vb3A7XG5cbiAgICAgIHZhciBtZXJnZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCQ2KF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoe30sIHRoaXMub3B0aW9ucyksIG9wdGlvbnMpLCB7XG4gICAgICAgIGlzQ2xvbmU6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY2xvbmUgPSBuZXcgSTE4bihtZXJnZWRPcHRpb25zKTtcblxuICAgICAgaWYgKG9wdGlvbnMuZGVidWcgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLnByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsb25lLmxvZ2dlciA9IGNsb25lLmxvZ2dlci5jbG9uZShvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1lbWJlcnNUb0NvcHkgPSBbJ3N0b3JlJywgJ3NlcnZpY2VzJywgJ2xhbmd1YWdlJ107XG4gICAgICBtZW1iZXJzVG9Db3B5LmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgY2xvbmVbbV0gPSBfdGhpczhbbV07XG4gICAgICB9KTtcbiAgICAgIGNsb25lLnNlcnZpY2VzID0gX29iamVjdFNwcmVhZCQ2KHt9LCB0aGlzLnNlcnZpY2VzKTtcbiAgICAgIGNsb25lLnNlcnZpY2VzLnV0aWxzID0ge1xuICAgICAgICBoYXNMb2FkZWROYW1lc3BhY2U6IGNsb25lLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKGNsb25lKVxuICAgICAgfTtcbiAgICAgIGNsb25lLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRvcihjbG9uZS5zZXJ2aWNlcywgY2xvbmUub3B0aW9ucyk7XG4gICAgICBjbG9uZS50cmFuc2xhdG9yLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCA+IDEgPyBfbGVuNCAtIDEgOiAwKSwgX2tleTQgPSAxOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5NCAtIDFdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb25lLmVtaXQuYXBwbHkoY2xvbmUsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIH0pO1xuICAgICAgY2xvbmUuaW5pdChtZXJnZWRPcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICBjbG9uZS50cmFuc2xhdG9yLm9wdGlvbnMgPSBjbG9uZS5vcHRpb25zO1xuICAgICAgY2xvbmUudHJhbnNsYXRvci5iYWNrZW5kQ29ubmVjdG9yLnNlcnZpY2VzLnV0aWxzID0ge1xuICAgICAgICBoYXNMb2FkZWROYW1lc3BhY2U6IGNsb25lLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKGNsb25lKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9KU09OXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlLFxuICAgICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgICByZXNvbHZlZExhbmd1YWdlOiB0aGlzLnJlc29sdmVkTGFuZ3VhZ2VcbiAgICAgIH07XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEkxOG47XG59KEV2ZW50RW1pdHRlcik7XG5cbl9kZWZpbmVQcm9wZXJ0eV9fZGVmYXVsdFsnZGVmYXVsdCddKEkxOG4sIFwiY3JlYXRlSW5zdGFuY2VcIiwgZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbmV3IEkxOG4ob3B0aW9ucywgY2FsbGJhY2spO1xufSk7XG5cbnZhciBpbnN0YW5jZSA9IEkxOG4uY3JlYXRlSW5zdGFuY2UoKTtcbmluc3RhbmNlLmNyZWF0ZUluc3RhbmNlID0gSTE4bi5jcmVhdGVJbnN0YW5jZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnN0YW5jZTtcbiIsIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCJcbnZhciBpbmRleE9mID0gW10uaW5kZXhPZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhcnIsIG9iail7XG4gIGlmIChpbmRleE9mKSByZXR1cm4gYXJyLmluZGV4T2Yob2JqKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoYXJyW2ldID09PSBvYmopIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn07IiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKiBnbG9iYWxzIGRlZmluZSAqL1xuLypcbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuVGhlIGZvbGxvd2luZyBiYXRjaGVzIGFyZSBlcXVpdmFsZW50OlxuXG52YXIgYmVhdXRpZnlfanMgPSByZXF1aXJlKCdqcy1iZWF1dGlmeScpO1xudmFyIGJlYXV0aWZ5X2pzID0gcmVxdWlyZSgnanMtYmVhdXRpZnknKS5qcztcbnZhciBiZWF1dGlmeV9qcyA9IHJlcXVpcmUoJ2pzLWJlYXV0aWZ5JykuanNfYmVhdXRpZnk7XG5cbnZhciBiZWF1dGlmeV9jc3MgPSByZXF1aXJlKCdqcy1iZWF1dGlmeScpLmNzcztcbnZhciBiZWF1dGlmeV9jc3MgPSByZXF1aXJlKCdqcy1iZWF1dGlmeScpLmNzc19iZWF1dGlmeTtcblxudmFyIGJlYXV0aWZ5X2h0bWwgPSByZXF1aXJlKCdqcy1iZWF1dGlmeScpLmh0bWw7XG52YXIgYmVhdXRpZnlfaHRtbCA9IHJlcXVpcmUoJ2pzLWJlYXV0aWZ5JykuaHRtbF9iZWF1dGlmeTtcblxuQWxsIG1ldGhvZHMgcmV0dXJuZWQgYWNjZXB0IHR3byBhcmd1bWVudHMsIHRoZSBzb3VyY2Ugc3RyaW5nIGFuZCBhbiBvcHRpb25zIG9iamVjdC5cbioqL1xuXG5mdW5jdGlvbiBnZXRfYmVhdXRpZnkoanNfYmVhdXRpZnksIGNzc19iZWF1dGlmeSwgaHRtbF9iZWF1dGlmeSkge1xuICAvLyB0aGUgZGVmYXVsdCBpcyBqc1xuICB2YXIgYmVhdXRpZnkgPSBmdW5jdGlvbihzcmMsIGNvbmZpZykge1xuICAgIHJldHVybiBqc19iZWF1dGlmeS5qc19iZWF1dGlmeShzcmMsIGNvbmZpZyk7XG4gIH07XG5cbiAgLy8gc2hvcnQgYWxpYXNlc1xuICBiZWF1dGlmeS5qcyA9IGpzX2JlYXV0aWZ5LmpzX2JlYXV0aWZ5O1xuICBiZWF1dGlmeS5jc3MgPSBjc3NfYmVhdXRpZnkuY3NzX2JlYXV0aWZ5O1xuICBiZWF1dGlmeS5odG1sID0gaHRtbF9iZWF1dGlmeS5odG1sX2JlYXV0aWZ5O1xuXG4gIC8vIGxlZ2FjeSBhbGlhc2VzXG4gIGJlYXV0aWZ5LmpzX2JlYXV0aWZ5ID0ganNfYmVhdXRpZnkuanNfYmVhdXRpZnk7XG4gIGJlYXV0aWZ5LmNzc19iZWF1dGlmeSA9IGNzc19iZWF1dGlmeS5jc3NfYmVhdXRpZnk7XG4gIGJlYXV0aWZ5Lmh0bWxfYmVhdXRpZnkgPSBodG1sX2JlYXV0aWZ5Lmh0bWxfYmVhdXRpZnk7XG5cbiAgcmV0dXJuIGJlYXV0aWZ5O1xufVxuXG5pZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgLy8gQWRkIHN1cHBvcnQgZm9yIEFNRCAoIGh0dHBzOi8vZ2l0aHViLmNvbS9hbWRqcy9hbWRqcy1hcGkvd2lraS9BTUQjZGVmaW5lYW1kLXByb3BlcnR5LSApXG4gIGRlZmluZShbXG4gICAgXCIuL2xpYi9iZWF1dGlmeVwiLFxuICAgIFwiLi9saWIvYmVhdXRpZnktY3NzXCIsXG4gICAgXCIuL2xpYi9iZWF1dGlmeS1odG1sXCJcbiAgXSwgZnVuY3Rpb24oanNfYmVhdXRpZnksIGNzc19iZWF1dGlmeSwgaHRtbF9iZWF1dGlmeSkge1xuICAgIHJldHVybiBnZXRfYmVhdXRpZnkoanNfYmVhdXRpZnksIGNzc19iZWF1dGlmeSwgaHRtbF9iZWF1dGlmeSk7XG4gIH0pO1xufSBlbHNlIHtcbiAgKGZ1bmN0aW9uKG1vZCkge1xuICAgIHZhciBiZWF1dGlmaWVyID0gcmVxdWlyZSgnLi9zcmMvaW5kZXgnKTtcbiAgICBiZWF1dGlmaWVyLmpzX2JlYXV0aWZ5ID0gYmVhdXRpZmllci5qcztcbiAgICBiZWF1dGlmaWVyLmNzc19iZWF1dGlmeSA9IGJlYXV0aWZpZXIuY3NzO1xuICAgIGJlYXV0aWZpZXIuaHRtbF9iZWF1dGlmeSA9IGJlYXV0aWZpZXIuaHRtbDtcblxuICAgIG1vZC5leHBvcnRzID0gZ2V0X2JlYXV0aWZ5KGJlYXV0aWZpZXIsIGJlYXV0aWZpZXIsIGJlYXV0aWZpZXIpO1xuXG4gIH0pKG1vZHVsZSk7XG59IiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gRGlyZWN0aXZlcyhzdGFydF9ibG9ja19wYXR0ZXJuLCBlbmRfYmxvY2tfcGF0dGVybikge1xuICBzdGFydF9ibG9ja19wYXR0ZXJuID0gdHlwZW9mIHN0YXJ0X2Jsb2NrX3BhdHRlcm4gPT09ICdzdHJpbmcnID8gc3RhcnRfYmxvY2tfcGF0dGVybiA6IHN0YXJ0X2Jsb2NrX3BhdHRlcm4uc291cmNlO1xuICBlbmRfYmxvY2tfcGF0dGVybiA9IHR5cGVvZiBlbmRfYmxvY2tfcGF0dGVybiA9PT0gJ3N0cmluZycgPyBlbmRfYmxvY2tfcGF0dGVybiA6IGVuZF9ibG9ja19wYXR0ZXJuLnNvdXJjZTtcbiAgdGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybiA9IG5ldyBSZWdFeHAoc3RhcnRfYmxvY2tfcGF0dGVybiArIC8gYmVhdXRpZnkoIFxcdytbOl1cXHcrKSsgLy5zb3VyY2UgKyBlbmRfYmxvY2tfcGF0dGVybiwgJ2cnKTtcbiAgdGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuID0gLyAoXFx3KylbOl0oXFx3KykvZztcblxuICB0aGlzLl9fZGlyZWN0aXZlc19lbmRfaWdub3JlX3BhdHRlcm4gPSBuZXcgUmVnRXhwKHN0YXJ0X2Jsb2NrX3BhdHRlcm4gKyAvXFxzYmVhdXRpZnlcXHNpZ25vcmU6ZW5kXFxzLy5zb3VyY2UgKyBlbmRfYmxvY2tfcGF0dGVybiwgJ2cnKTtcbn1cblxuRGlyZWN0aXZlcy5wcm90b3R5cGUuZ2V0X2RpcmVjdGl2ZXMgPSBmdW5jdGlvbih0ZXh0KSB7XG4gIGlmICghdGV4dC5tYXRjaCh0aGlzLl9fZGlyZWN0aXZlc19ibG9ja19wYXR0ZXJuKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGRpcmVjdGl2ZXMgPSB7fTtcbiAgdGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBkaXJlY3RpdmVfbWF0Y2ggPSB0aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyh0ZXh0KTtcblxuICB3aGlsZSAoZGlyZWN0aXZlX21hdGNoKSB7XG4gICAgZGlyZWN0aXZlc1tkaXJlY3RpdmVfbWF0Y2hbMV1dID0gZGlyZWN0aXZlX21hdGNoWzJdO1xuICAgIGRpcmVjdGl2ZV9tYXRjaCA9IHRoaXMuX19kaXJlY3RpdmVfcGF0dGVybi5leGVjKHRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRpcmVjdGl2ZXM7XG59O1xuXG5EaXJlY3RpdmVzLnByb3RvdHlwZS5yZWFkSWdub3JlZCA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dC5yZWFkVW50aWxBZnRlcih0aGlzLl9fZGlyZWN0aXZlc19lbmRfaWdub3JlX3BhdHRlcm4pO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cy5EaXJlY3RpdmVzID0gRGlyZWN0aXZlcztcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBfaGFzX3N0aWNreSA9IFJlZ0V4cC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJ3N0aWNreScpO1xuXG5mdW5jdGlvbiBJbnB1dFNjYW5uZXIoaW5wdXRfc3RyaW5nKSB7XG4gIHRoaXMuX19pbnB1dCA9IGlucHV0X3N0cmluZyB8fCAnJztcbiAgdGhpcy5fX2lucHV0X2xlbmd0aCA9IHRoaXMuX19pbnB1dC5sZW5ndGg7XG4gIHRoaXMuX19wb3NpdGlvbiA9IDA7XG59XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9fcG9zaXRpb24gPSAwO1xufTtcblxuSW5wdXRTY2FubmVyLnByb3RvdHlwZS5iYWNrID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9fcG9zaXRpb24gPiAwKSB7XG4gICAgdGhpcy5fX3Bvc2l0aW9uIC09IDE7XG4gIH1cbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUuaGFzTmV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fX3Bvc2l0aW9uIDwgdGhpcy5fX2lucHV0X2xlbmd0aDtcbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsID0gbnVsbDtcbiAgaWYgKHRoaXMuaGFzTmV4dCgpKSB7XG4gICAgdmFsID0gdGhpcy5fX2lucHV0LmNoYXJBdCh0aGlzLl9fcG9zaXRpb24pO1xuICAgIHRoaXMuX19wb3NpdGlvbiArPSAxO1xuICB9XG4gIHJldHVybiB2YWw7XG59O1xuXG5JbnB1dFNjYW5uZXIucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbihpbmRleCkge1xuICB2YXIgdmFsID0gbnVsbDtcbiAgaW5kZXggPSBpbmRleCB8fCAwO1xuICBpbmRleCArPSB0aGlzLl9fcG9zaXRpb247XG4gIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5fX2lucHV0X2xlbmd0aCkge1xuICAgIHZhbCA9IHRoaXMuX19pbnB1dC5jaGFyQXQoaW5kZXgpO1xuICB9XG4gIHJldHVybiB2YWw7XG59O1xuXG4vLyBUaGlzIGlzIGEgSmF2YVNjcmlwdCBvbmx5IGhlbHBlciBmdW5jdGlvbiAobm90IGluIHB5dGhvbilcbi8vIEphdmFzY3JpcHQgZG9lc24ndCBoYXZlIGEgbWF0Y2ggbWV0aG9kXG4vLyBhbmQgbm90IGFsbCBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0IFwic3RpY2t5XCIgZmxhZy5cbi8vIElmIHRoZXkgZG8gbm90IHN1cHBvcnQgc3RpY2t5IHRoZW4gYm90aCB0aGlzLm1hdGNoKCkgYW5kIHRoaXMudGVzdCgpIG1ldGhvZFxuLy8gbXVzdCBnZXQgdGhlIG1hdGNoIGFuZCBjaGVjayB0aGUgaW5kZXggb2YgdGhlIG1hdGNoLlxuLy8gSWYgc3RpY2t5IGlzIHN1cHBvcnRlZCBhbmQgc2V0LCB0aGlzIG1ldGhvZCB3aWxsIHVzZSBpdC5cbi8vIE90aGVyd2lzZSBpdCB3aWxsIGNoZWNrIHRoYXQgZ2xvYmFsIGlzIHNldCwgYW5kIGZhbGwgYmFjayB0byB0aGUgc2xvd2VyIG1ldGhvZC5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUuX19tYXRjaCA9IGZ1bmN0aW9uKHBhdHRlcm4sIGluZGV4KSB7XG4gIHBhdHRlcm4ubGFzdEluZGV4ID0gaW5kZXg7XG4gIHZhciBwYXR0ZXJuX21hdGNoID0gcGF0dGVybi5leGVjKHRoaXMuX19pbnB1dCk7XG5cbiAgaWYgKHBhdHRlcm5fbWF0Y2ggJiYgIShyZWdleHBfaGFzX3N0aWNreSAmJiBwYXR0ZXJuLnN0aWNreSkpIHtcbiAgICBpZiAocGF0dGVybl9tYXRjaC5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIHBhdHRlcm5fbWF0Y2ggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXR0ZXJuX21hdGNoO1xufTtcblxuSW5wdXRTY2FubmVyLnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24ocGF0dGVybiwgaW5kZXgpIHtcbiAgaW5kZXggPSBpbmRleCB8fCAwO1xuICBpbmRleCArPSB0aGlzLl9fcG9zaXRpb247XG5cbiAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLl9faW5wdXRfbGVuZ3RoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5fX21hdGNoKHBhdHRlcm4sIGluZGV4KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUudGVzdENoYXIgPSBmdW5jdGlvbihwYXR0ZXJuLCBpbmRleCkge1xuICAvLyB0ZXN0IG9uZSBjaGFyYWN0ZXIgcmVnZXggbWF0Y2hcbiAgdmFyIHZhbCA9IHRoaXMucGVlayhpbmRleCk7XG4gIHBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiBwYXR0ZXJuLnRlc3QodmFsKTtcbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbihwYXR0ZXJuKSB7XG4gIHZhciBwYXR0ZXJuX21hdGNoID0gdGhpcy5fX21hdGNoKHBhdHRlcm4sIHRoaXMuX19wb3NpdGlvbik7XG4gIGlmIChwYXR0ZXJuX21hdGNoKSB7XG4gICAgdGhpcy5fX3Bvc2l0aW9uICs9IHBhdHRlcm5fbWF0Y2hbMF0ubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIHBhdHRlcm5fbWF0Y2ggPSBudWxsO1xuICB9XG4gIHJldHVybiBwYXR0ZXJuX21hdGNoO1xufTtcblxuSW5wdXRTY2FubmVyLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24oc3RhcnRpbmdfcGF0dGVybiwgdW50aWxfcGF0dGVybiwgdW50aWxfYWZ0ZXIpIHtcbiAgdmFyIHZhbCA9ICcnO1xuICB2YXIgbWF0Y2g7XG4gIGlmIChzdGFydGluZ19wYXR0ZXJuKSB7XG4gICAgbWF0Y2ggPSB0aGlzLm1hdGNoKHN0YXJ0aW5nX3BhdHRlcm4pO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgdmFsICs9IG1hdGNoWzBdO1xuICAgIH1cbiAgfVxuICBpZiAodW50aWxfcGF0dGVybiAmJiAobWF0Y2ggfHwgIXN0YXJ0aW5nX3BhdHRlcm4pKSB7XG4gICAgdmFsICs9IHRoaXMucmVhZFVudGlsKHVudGlsX3BhdHRlcm4sIHVudGlsX2FmdGVyKTtcbiAgfVxuICByZXR1cm4gdmFsO1xufTtcblxuSW5wdXRTY2FubmVyLnByb3RvdHlwZS5yZWFkVW50aWwgPSBmdW5jdGlvbihwYXR0ZXJuLCB1bnRpbF9hZnRlcikge1xuICB2YXIgdmFsID0gJyc7XG4gIHZhciBtYXRjaF9pbmRleCA9IHRoaXMuX19wb3NpdGlvbjtcbiAgcGF0dGVybi5sYXN0SW5kZXggPSB0aGlzLl9fcG9zaXRpb247XG4gIHZhciBwYXR0ZXJuX21hdGNoID0gcGF0dGVybi5leGVjKHRoaXMuX19pbnB1dCk7XG4gIGlmIChwYXR0ZXJuX21hdGNoKSB7XG4gICAgbWF0Y2hfaW5kZXggPSBwYXR0ZXJuX21hdGNoLmluZGV4O1xuICAgIGlmICh1bnRpbF9hZnRlcikge1xuICAgICAgbWF0Y2hfaW5kZXggKz0gcGF0dGVybl9tYXRjaFswXS5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG1hdGNoX2luZGV4ID0gdGhpcy5fX2lucHV0X2xlbmd0aDtcbiAgfVxuXG4gIHZhbCA9IHRoaXMuX19pbnB1dC5zdWJzdHJpbmcodGhpcy5fX3Bvc2l0aW9uLCBtYXRjaF9pbmRleCk7XG4gIHRoaXMuX19wb3NpdGlvbiA9IG1hdGNoX2luZGV4O1xuICByZXR1cm4gdmFsO1xufTtcblxuSW5wdXRTY2FubmVyLnByb3RvdHlwZS5yZWFkVW50aWxBZnRlciA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgcmV0dXJuIHRoaXMucmVhZFVudGlsKHBhdHRlcm4sIHRydWUpO1xufTtcblxuSW5wdXRTY2FubmVyLnByb3RvdHlwZS5nZXRfcmVnZXhwID0gZnVuY3Rpb24ocGF0dGVybiwgbWF0Y2hfZnJvbSkge1xuICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgdmFyIGZsYWdzID0gJ2cnO1xuICBpZiAobWF0Y2hfZnJvbSAmJiByZWdleHBfaGFzX3N0aWNreSkge1xuICAgIGZsYWdzID0gJ3knO1xuICB9XG4gIC8vIHN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byByZWdleHBcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSBcInN0cmluZ1wiICYmIHBhdHRlcm4gIT09ICcnKSB7XG4gICAgLy8gcmVzdWx0ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpLCBmbGFncyk7XG4gICAgcmVzdWx0ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gIH0gZWxzZSBpZiAocGF0dGVybikge1xuICAgIHJlc3VsdCA9IG5ldyBSZWdFeHAocGF0dGVybi5zb3VyY2UsIGZsYWdzKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuSW5wdXRTY2FubmVyLnByb3RvdHlwZS5nZXRfbGl0ZXJhbF9yZWdleHAgPSBmdW5jdGlvbihsaXRlcmFsX3N0cmluZykge1xuICByZXR1cm4gUmVnRXhwKGxpdGVyYWxfc3RyaW5nLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpKTtcbn07XG5cbi8qIGNzcyBiZWF1dGlmaWVyIGxlZ2FjeSBoZWxwZXJzICovXG5JbnB1dFNjYW5uZXIucHJvdG90eXBlLnBlZWtVbnRpbEFmdGVyID0gZnVuY3Rpb24ocGF0dGVybikge1xuICB2YXIgc3RhcnQgPSB0aGlzLl9fcG9zaXRpb247XG4gIHZhciB2YWwgPSB0aGlzLnJlYWRVbnRpbEFmdGVyKHBhdHRlcm4pO1xuICB0aGlzLl9fcG9zaXRpb24gPSBzdGFydDtcbiAgcmV0dXJuIHZhbDtcbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUubG9va0JhY2sgPSBmdW5jdGlvbih0ZXN0VmFsKSB7XG4gIHZhciBzdGFydCA9IHRoaXMuX19wb3NpdGlvbiAtIDE7XG4gIHJldHVybiBzdGFydCA+PSB0ZXN0VmFsLmxlbmd0aCAmJiB0aGlzLl9faW5wdXQuc3Vic3RyaW5nKHN0YXJ0IC0gdGVzdFZhbC5sZW5ndGgsIHN0YXJ0KVxuICAgIC50b0xvd2VyQ2FzZSgpID09PSB0ZXN0VmFsO1xufTtcblxubW9kdWxlLmV4cG9ydHMuSW5wdXRTY2FubmVyID0gSW5wdXRTY2FubmVyO1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gT3B0aW9ucyhvcHRpb25zLCBtZXJnZV9jaGlsZF9maWVsZCkge1xuICB0aGlzLnJhd19vcHRpb25zID0gX21lcmdlT3B0cyhvcHRpb25zLCBtZXJnZV9jaGlsZF9maWVsZCk7XG5cbiAgLy8gU3VwcG9ydCBwYXNzaW5nIHRoZSBzb3VyY2UgdGV4dCBiYWNrIHdpdGggbm8gY2hhbmdlXG4gIHRoaXMuZGlzYWJsZWQgPSB0aGlzLl9nZXRfYm9vbGVhbignZGlzYWJsZWQnKTtcblxuICB0aGlzLmVvbCA9IHRoaXMuX2dldF9jaGFyYWN0ZXJzKCdlb2wnLCAnYXV0bycpO1xuICB0aGlzLmVuZF93aXRoX25ld2xpbmUgPSB0aGlzLl9nZXRfYm9vbGVhbignZW5kX3dpdGhfbmV3bGluZScpO1xuICB0aGlzLmluZGVudF9zaXplID0gdGhpcy5fZ2V0X251bWJlcignaW5kZW50X3NpemUnLCA0KTtcbiAgdGhpcy5pbmRlbnRfY2hhciA9IHRoaXMuX2dldF9jaGFyYWN0ZXJzKCdpbmRlbnRfY2hhcicsICcgJyk7XG4gIHRoaXMuaW5kZW50X2xldmVsID0gdGhpcy5fZ2V0X251bWJlcignaW5kZW50X2xldmVsJyk7XG5cbiAgdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lcyA9IHRoaXMuX2dldF9ib29sZWFuKCdwcmVzZXJ2ZV9uZXdsaW5lcycsIHRydWUpO1xuICB0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcyA9IHRoaXMuX2dldF9udW1iZXIoJ21heF9wcmVzZXJ2ZV9uZXdsaW5lcycsIDMyNzg2KTtcbiAgaWYgKCF0aGlzLnByZXNlcnZlX25ld2xpbmVzKSB7XG4gICAgdGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXMgPSAwO1xuICB9XG5cbiAgdGhpcy5pbmRlbnRfd2l0aF90YWJzID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2luZGVudF93aXRoX3RhYnMnLCB0aGlzLmluZGVudF9jaGFyID09PSAnXFx0Jyk7XG4gIGlmICh0aGlzLmluZGVudF93aXRoX3RhYnMpIHtcbiAgICB0aGlzLmluZGVudF9jaGFyID0gJ1xcdCc7XG5cbiAgICAvLyBpbmRlbnRfc2l6ZSBiZWhhdmlvciBjaGFuZ2VkIGFmdGVyIDEuOC42XG4gICAgLy8gSXQgdXNlZCB0byBiZSB0aGF0IGluZGVudF9zaXplIHdvdWxkIGJlXG4gICAgLy8gc2V0IHRvIDEgZm9yIGluZGVudF93aXRoX3RhYnMuIFRoYXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhbmRcbiAgICAvLyBhY3R1YWxseSBkb2Vzbid0IG1ha2Ugc2Vuc2UgLSB3aHkgbm90IHVzZSBzcGFjZXM/IEZ1cnRoZXIsXG4gICAgLy8gdGhhdCBtaWdodCBwcm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IgLSB0YWJzIGJlaW5nIHVzZWRcbiAgICAvLyBmb3Igc2luZ2xlLWNvbHVtbiBhbGlnbm1lbnQuIFNvLCB3aGVuIGluZGVudF93aXRoX3RhYnMgaXMgdHJ1ZVxuICAgIC8vIGFuZCBpbmRlbnRfc2l6ZSBpcyAxLCByZXNldCBpbmRlbnRfc2l6ZSB0byA0LlxuICAgIGlmICh0aGlzLmluZGVudF9zaXplID09PSAxKSB7XG4gICAgICB0aGlzLmluZGVudF9zaXplID0gNDtcbiAgICB9XG4gIH1cblxuICAvLyBCYWNrd2FyZHMgY29tcGF0IHdpdGggMS4zLnhcbiAgdGhpcy53cmFwX2xpbmVfbGVuZ3RoID0gdGhpcy5fZ2V0X251bWJlcignd3JhcF9saW5lX2xlbmd0aCcsIHRoaXMuX2dldF9udW1iZXIoJ21heF9jaGFyJykpO1xuXG4gIHRoaXMuaW5kZW50X2VtcHR5X2xpbmVzID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2luZGVudF9lbXB0eV9saW5lcycpO1xuXG4gIC8vIHZhbGlkIHRlbXBsYXRpbmcgbGFuZ3VhZ2VzIFsnZGphbmdvJywgJ2VyYicsICdoYW5kbGViYXJzJywgJ3BocCcsICdzbWFydHknXVxuICAvLyBGb3Igbm93LCAnYXV0bycgPSBhbGwgb2ZmIGZvciBqYXZhc2NyaXB0LCBhbGwgb24gZm9yIGh0bWwgKGFuZCBpbmxpbmUgamF2YXNjcmlwdCkuXG4gIC8vIG90aGVyIHZhbHVlcyBpZ25vcmVkXG4gIHRoaXMudGVtcGxhdGluZyA9IHRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgndGVtcGxhdGluZycsIFsnYXV0bycsICdub25lJywgJ2RqYW5nbycsICdlcmInLCAnaGFuZGxlYmFycycsICdwaHAnLCAnc21hcnR5J10sIFsnYXV0byddKTtcbn1cblxuT3B0aW9ucy5wcm90b3R5cGUuX2dldF9hcnJheSA9IGZ1bmN0aW9uKG5hbWUsIGRlZmF1bHRfdmFsdWUpIHtcbiAgdmFyIG9wdGlvbl92YWx1ZSA9IHRoaXMucmF3X29wdGlvbnNbbmFtZV07XG4gIHZhciByZXN1bHQgPSBkZWZhdWx0X3ZhbHVlIHx8IFtdO1xuICBpZiAodHlwZW9mIG9wdGlvbl92YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAob3B0aW9uX3ZhbHVlICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb25fdmFsdWUuY29uY2F0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXN1bHQgPSBvcHRpb25fdmFsdWUuY29uY2F0KCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25fdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVzdWx0ID0gb3B0aW9uX3ZhbHVlLnNwbGl0KC9bXmEtekEtWjAtOV9cXC9cXC1dKy8pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5PcHRpb25zLnByb3RvdHlwZS5fZ2V0X2Jvb2xlYW4gPSBmdW5jdGlvbihuYW1lLCBkZWZhdWx0X3ZhbHVlKSB7XG4gIHZhciBvcHRpb25fdmFsdWUgPSB0aGlzLnJhd19vcHRpb25zW25hbWVdO1xuICB2YXIgcmVzdWx0ID0gb3B0aW9uX3ZhbHVlID09PSB1bmRlZmluZWQgPyAhIWRlZmF1bHRfdmFsdWUgOiAhIW9wdGlvbl92YWx1ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk9wdGlvbnMucHJvdG90eXBlLl9nZXRfY2hhcmFjdGVycyA9IGZ1bmN0aW9uKG5hbWUsIGRlZmF1bHRfdmFsdWUpIHtcbiAgdmFyIG9wdGlvbl92YWx1ZSA9IHRoaXMucmF3X29wdGlvbnNbbmFtZV07XG4gIHZhciByZXN1bHQgPSBkZWZhdWx0X3ZhbHVlIHx8ICcnO1xuICBpZiAodHlwZW9mIG9wdGlvbl92YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSBvcHRpb25fdmFsdWUucmVwbGFjZSgvXFxcXHIvLCAnXFxyJykucmVwbGFjZSgvXFxcXG4vLCAnXFxuJykucmVwbGFjZSgvXFxcXHQvLCAnXFx0Jyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk9wdGlvbnMucHJvdG90eXBlLl9nZXRfbnVtYmVyID0gZnVuY3Rpb24obmFtZSwgZGVmYXVsdF92YWx1ZSkge1xuICB2YXIgb3B0aW9uX3ZhbHVlID0gdGhpcy5yYXdfb3B0aW9uc1tuYW1lXTtcbiAgZGVmYXVsdF92YWx1ZSA9IHBhcnNlSW50KGRlZmF1bHRfdmFsdWUsIDEwKTtcbiAgaWYgKGlzTmFOKGRlZmF1bHRfdmFsdWUpKSB7XG4gICAgZGVmYXVsdF92YWx1ZSA9IDA7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHBhcnNlSW50KG9wdGlvbl92YWx1ZSwgMTApO1xuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xuICAgIHJlc3VsdCA9IGRlZmF1bHRfdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk9wdGlvbnMucHJvdG90eXBlLl9nZXRfc2VsZWN0aW9uID0gZnVuY3Rpb24obmFtZSwgc2VsZWN0aW9uX2xpc3QsIGRlZmF1bHRfdmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdChuYW1lLCBzZWxlY3Rpb25fbGlzdCwgZGVmYXVsdF92YWx1ZSk7XG4gIGlmIChyZXN1bHQubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJJbnZhbGlkIE9wdGlvbiBWYWx1ZTogVGhlIG9wdGlvbiAnXCIgKyBuYW1lICsgXCInIGNhbiBvbmx5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcXG5cIiArXG4gICAgICBzZWxlY3Rpb25fbGlzdCArIFwiXFxuWW91IHBhc3NlZCBpbjogJ1wiICsgdGhpcy5yYXdfb3B0aW9uc1tuYW1lXSArIFwiJ1wiKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRbMF07XG59O1xuXG5cbk9wdGlvbnMucHJvdG90eXBlLl9nZXRfc2VsZWN0aW9uX2xpc3QgPSBmdW5jdGlvbihuYW1lLCBzZWxlY3Rpb25fbGlzdCwgZGVmYXVsdF92YWx1ZSkge1xuICBpZiAoIXNlbGVjdGlvbl9saXN0IHx8IHNlbGVjdGlvbl9saXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdGlvbiBsaXN0IGNhbm5vdCBiZSBlbXB0eS5cIik7XG4gIH1cblxuICBkZWZhdWx0X3ZhbHVlID0gZGVmYXVsdF92YWx1ZSB8fCBbc2VsZWN0aW9uX2xpc3RbMF1dO1xuICBpZiAoIXRoaXMuX2lzX3ZhbGlkX3NlbGVjdGlvbihkZWZhdWx0X3ZhbHVlLCBzZWxlY3Rpb25fbGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIERlZmF1bHQgVmFsdWUhXCIpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2dldF9hcnJheShuYW1lLCBkZWZhdWx0X3ZhbHVlKTtcbiAgaWYgKCF0aGlzLl9pc192YWxpZF9zZWxlY3Rpb24ocmVzdWx0LCBzZWxlY3Rpb25fbGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkludmFsaWQgT3B0aW9uIFZhbHVlOiBUaGUgb3B0aW9uICdcIiArIG5hbWUgKyBcIicgY2FuIGNvbnRhaW4gb25seSB0aGUgZm9sbG93aW5nIHZhbHVlczpcXG5cIiArXG4gICAgICBzZWxlY3Rpb25fbGlzdCArIFwiXFxuWW91IHBhc3NlZCBpbjogJ1wiICsgdGhpcy5yYXdfb3B0aW9uc1tuYW1lXSArIFwiJ1wiKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5PcHRpb25zLnByb3RvdHlwZS5faXNfdmFsaWRfc2VsZWN0aW9uID0gZnVuY3Rpb24ocmVzdWx0LCBzZWxlY3Rpb25fbGlzdCkge1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCAmJiBzZWxlY3Rpb25fbGlzdC5sZW5ndGggJiZcbiAgICAhcmVzdWx0LnNvbWUoZnVuY3Rpb24oaXRlbSkgeyByZXR1cm4gc2VsZWN0aW9uX2xpc3QuaW5kZXhPZihpdGVtKSA9PT0gLTE7IH0pO1xufTtcblxuXG4vLyBtZXJnZXMgY2hpbGQgb3B0aW9ucyB1cCB3aXRoIHRoZSBwYXJlbnQgb3B0aW9ucyBvYmplY3Rcbi8vIEV4YW1wbGU6IG9iaiA9IHthOiAxLCBiOiB7YTogMn19XG4vLyAgICAgICAgICBtZXJnZU9wdHMob2JqLCAnYicpXG4vL1xuLy8gICAgICAgICAgUmV0dXJuczoge2E6IDJ9XG5mdW5jdGlvbiBfbWVyZ2VPcHRzKGFsbE9wdGlvbnMsIGNoaWxkRmllbGROYW1lKSB7XG4gIHZhciBmaW5hbE9wdHMgPSB7fTtcbiAgYWxsT3B0aW9ucyA9IF9ub3JtYWxpemVPcHRzKGFsbE9wdGlvbnMpO1xuICB2YXIgbmFtZTtcblxuICBmb3IgKG5hbWUgaW4gYWxsT3B0aW9ucykge1xuICAgIGlmIChuYW1lICE9PSBjaGlsZEZpZWxkTmFtZSkge1xuICAgICAgZmluYWxPcHRzW25hbWVdID0gYWxsT3B0aW9uc1tuYW1lXTtcbiAgICB9XG4gIH1cblxuICAvL21lcmdlIGluIHRoZSBwZXIgdHlwZSBzZXR0aW5ncyBmb3IgdGhlIGNoaWxkRmllbGROYW1lXG4gIGlmIChjaGlsZEZpZWxkTmFtZSAmJiBhbGxPcHRpb25zW2NoaWxkRmllbGROYW1lXSkge1xuICAgIGZvciAobmFtZSBpbiBhbGxPcHRpb25zW2NoaWxkRmllbGROYW1lXSkge1xuICAgICAgZmluYWxPcHRzW25hbWVdID0gYWxsT3B0aW9uc1tjaGlsZEZpZWxkTmFtZV1bbmFtZV07XG4gICAgfVxuICB9XG4gIHJldHVybiBmaW5hbE9wdHM7XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVPcHRzKG9wdGlvbnMpIHtcbiAgdmFyIGNvbnZlcnRlZE9wdHMgPSB7fTtcbiAgdmFyIGtleTtcblxuICBmb3IgKGtleSBpbiBvcHRpb25zKSB7XG4gICAgdmFyIG5ld0tleSA9IGtleS5yZXBsYWNlKC8tL2csIFwiX1wiKTtcbiAgICBjb252ZXJ0ZWRPcHRzW25ld0tleV0gPSBvcHRpb25zW2tleV07XG4gIH1cbiAgcmV0dXJuIGNvbnZlcnRlZE9wdHM7XG59XG5cbm1vZHVsZS5leHBvcnRzLk9wdGlvbnMgPSBPcHRpb25zO1xubW9kdWxlLmV4cG9ydHMubm9ybWFsaXplT3B0cyA9IF9ub3JtYWxpemVPcHRzO1xubW9kdWxlLmV4cG9ydHMubWVyZ2VPcHRzID0gX21lcmdlT3B0cztcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBPdXRwdXRMaW5lKHBhcmVudCkge1xuICB0aGlzLl9fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fY2hhcmFjdGVyX2NvdW50ID0gMDtcbiAgLy8gdXNlIGluZGVudF9jb3VudCBhcyBhIG1hcmtlciBmb3IgdGhpcy5fX2xpbmVzIHRoYXQgaGF2ZSBwcmVzZXJ2ZWQgaW5kZW50YXRpb25cbiAgdGhpcy5fX2luZGVudF9jb3VudCA9IC0xO1xuICB0aGlzLl9fYWxpZ25tZW50X2NvdW50ID0gMDtcbiAgdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXggPSAwO1xuICB0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQgPSAwO1xuICB0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQgPSAtMTtcbiAgdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50ID0gMDtcblxuICB0aGlzLl9faXRlbXMgPSBbXTtcbn1cblxuT3V0cHV0TGluZS5wcm90b3R5cGUuY2xvbmVfZW1wdHkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGxpbmUgPSBuZXcgT3V0cHV0TGluZSh0aGlzLl9fcGFyZW50KTtcbiAgbGluZS5zZXRfaW5kZW50KHRoaXMuX19pbmRlbnRfY291bnQsIHRoaXMuX19hbGlnbm1lbnRfY291bnQpO1xuICByZXR1cm4gbGluZTtcbn07XG5cbk91dHB1dExpbmUucHJvdG90eXBlLml0ZW0gPSBmdW5jdGlvbihpbmRleCkge1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHRoaXMuX19pdGVtc1t0aGlzLl9faXRlbXMubGVuZ3RoICsgaW5kZXhdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLl9faXRlbXNbaW5kZXhdO1xuICB9XG59O1xuXG5PdXRwdXRMaW5lLnByb3RvdHlwZS5oYXNfbWF0Y2ggPSBmdW5jdGlvbihwYXR0ZXJuKSB7XG4gIGZvciAodmFyIGxhc3RDaGVja2VkT3V0cHV0ID0gdGhpcy5fX2l0ZW1zLmxlbmd0aCAtIDE7IGxhc3RDaGVja2VkT3V0cHV0ID49IDA7IGxhc3RDaGVja2VkT3V0cHV0LS0pIHtcbiAgICBpZiAodGhpcy5fX2l0ZW1zW2xhc3RDaGVja2VkT3V0cHV0XS5tYXRjaChwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbk91dHB1dExpbmUucHJvdG90eXBlLnNldF9pbmRlbnQgPSBmdW5jdGlvbihpbmRlbnQsIGFsaWdubWVudCkge1xuICBpZiAodGhpcy5pc19lbXB0eSgpKSB7XG4gICAgdGhpcy5fX2luZGVudF9jb3VudCA9IGluZGVudCB8fCAwO1xuICAgIHRoaXMuX19hbGlnbm1lbnRfY291bnQgPSBhbGlnbm1lbnQgfHwgMDtcbiAgICB0aGlzLl9fY2hhcmFjdGVyX2NvdW50ID0gdGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3NpemUodGhpcy5fX2luZGVudF9jb3VudCwgdGhpcy5fX2FsaWdubWVudF9jb3VudCk7XG4gIH1cbn07XG5cbk91dHB1dExpbmUucHJvdG90eXBlLl9zZXRfd3JhcF9wb2ludCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fX3BhcmVudC53cmFwX2xpbmVfbGVuZ3RoKSB7XG4gICAgdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXggPSB0aGlzLl9faXRlbXMubGVuZ3RoO1xuICAgIHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudCA9IHRoaXMuX19jaGFyYWN0ZXJfY291bnQ7XG4gICAgdGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50ID0gdGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19pbmRlbnRfY291bnQ7XG4gICAgdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50ID0gdGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19hbGlnbm1lbnRfY291bnQ7XG4gIH1cbn07XG5cbk91dHB1dExpbmUucHJvdG90eXBlLl9zaG91bGRfd3JhcCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXggJiZcbiAgICB0aGlzLl9fY2hhcmFjdGVyX2NvdW50ID4gdGhpcy5fX3BhcmVudC53cmFwX2xpbmVfbGVuZ3RoICYmXG4gICAgdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50ID4gdGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19jaGFyYWN0ZXJfY291bnQ7XG59O1xuXG5PdXRwdXRMaW5lLnByb3RvdHlwZS5fYWxsb3dfd3JhcCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc2hvdWxkX3dyYXAoKSkge1xuICAgIHRoaXMuX19wYXJlbnQuYWRkX25ld19saW5lKCk7XG4gICAgdmFyIG5leHQgPSB0aGlzLl9fcGFyZW50LmN1cnJlbnRfbGluZTtcbiAgICBuZXh0LnNldF9pbmRlbnQodGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50LCB0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQpO1xuICAgIG5leHQuX19pdGVtcyA9IHRoaXMuX19pdGVtcy5zbGljZSh0aGlzLl9fd3JhcF9wb2ludF9pbmRleCk7XG4gICAgdGhpcy5fX2l0ZW1zID0gdGhpcy5fX2l0ZW1zLnNsaWNlKDAsIHRoaXMuX193cmFwX3BvaW50X2luZGV4KTtcblxuICAgIG5leHQuX19jaGFyYWN0ZXJfY291bnQgKz0gdGhpcy5fX2NoYXJhY3Rlcl9jb3VudCAtIHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudDtcbiAgICB0aGlzLl9fY2hhcmFjdGVyX2NvdW50ID0gdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50O1xuXG4gICAgaWYgKG5leHQuX19pdGVtc1swXSA9PT0gXCIgXCIpIHtcbiAgICAgIG5leHQuX19pdGVtcy5zcGxpY2UoMCwgMSk7XG4gICAgICBuZXh0Ll9fY2hhcmFjdGVyX2NvdW50IC09IDE7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbk91dHB1dExpbmUucHJvdG90eXBlLmlzX2VtcHR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9faXRlbXMubGVuZ3RoID09PSAwO1xufTtcblxuT3V0cHV0TGluZS5wcm90b3R5cGUubGFzdCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuaXNfZW1wdHkoKSkge1xuICAgIHJldHVybiB0aGlzLl9faXRlbXNbdGhpcy5fX2l0ZW1zLmxlbmd0aCAtIDFdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5PdXRwdXRMaW5lLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oaXRlbSkge1xuICB0aGlzLl9faXRlbXMucHVzaChpdGVtKTtcbiAgdmFyIGxhc3RfbmV3bGluZV9pbmRleCA9IGl0ZW0ubGFzdEluZGV4T2YoJ1xcbicpO1xuICBpZiAobGFzdF9uZXdsaW5lX2luZGV4ICE9PSAtMSkge1xuICAgIHRoaXMuX19jaGFyYWN0ZXJfY291bnQgPSBpdGVtLmxlbmd0aCAtIGxhc3RfbmV3bGluZV9pbmRleDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9fY2hhcmFjdGVyX2NvdW50ICs9IGl0ZW0ubGVuZ3RoO1xuICB9XG59O1xuXG5PdXRwdXRMaW5lLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW0gPSBudWxsO1xuICBpZiAoIXRoaXMuaXNfZW1wdHkoKSkge1xuICAgIGl0ZW0gPSB0aGlzLl9faXRlbXMucG9wKCk7XG4gICAgdGhpcy5fX2NoYXJhY3Rlcl9jb3VudCAtPSBpdGVtLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gaXRlbTtcbn07XG5cblxuT3V0cHV0TGluZS5wcm90b3R5cGUuX3JlbW92ZV9pbmRlbnQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX19pbmRlbnRfY291bnQgPiAwKSB7XG4gICAgdGhpcy5fX2luZGVudF9jb3VudCAtPSAxO1xuICAgIHRoaXMuX19jaGFyYWN0ZXJfY291bnQgLT0gdGhpcy5fX3BhcmVudC5pbmRlbnRfc2l6ZTtcbiAgfVxufTtcblxuT3V0cHV0TGluZS5wcm90b3R5cGUuX3JlbW92ZV93cmFwX2luZGVudCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50ID4gMCkge1xuICAgIHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudCAtPSAxO1xuICB9XG59O1xuT3V0cHV0TGluZS5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uKCkge1xuICB3aGlsZSAodGhpcy5sYXN0KCkgPT09ICcgJykge1xuICAgIHRoaXMuX19pdGVtcy5wb3AoKTtcbiAgICB0aGlzLl9fY2hhcmFjdGVyX2NvdW50IC09IDE7XG4gIH1cbn07XG5cbk91dHB1dExpbmUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoaXMuaXNfZW1wdHkoKSkge1xuICAgIGlmICh0aGlzLl9fcGFyZW50LmluZGVudF9lbXB0eV9saW5lcykge1xuICAgICAgcmVzdWx0ID0gdGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3N0cmluZyh0aGlzLl9faW5kZW50X2NvdW50KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3N0cmluZyh0aGlzLl9faW5kZW50X2NvdW50LCB0aGlzLl9fYWxpZ25tZW50X2NvdW50KTtcbiAgICByZXN1bHQgKz0gdGhpcy5fX2l0ZW1zLmpvaW4oJycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5mdW5jdGlvbiBJbmRlbnRTdHJpbmdDYWNoZShvcHRpb25zLCBiYXNlSW5kZW50U3RyaW5nKSB7XG4gIHRoaXMuX19jYWNoZSA9IFsnJ107XG4gIHRoaXMuX19pbmRlbnRfc2l6ZSA9IG9wdGlvbnMuaW5kZW50X3NpemU7XG4gIHRoaXMuX19pbmRlbnRfc3RyaW5nID0gb3B0aW9ucy5pbmRlbnRfY2hhcjtcbiAgaWYgKCFvcHRpb25zLmluZGVudF93aXRoX3RhYnMpIHtcbiAgICB0aGlzLl9faW5kZW50X3N0cmluZyA9IG5ldyBBcnJheShvcHRpb25zLmluZGVudF9zaXplICsgMSkuam9pbihvcHRpb25zLmluZGVudF9jaGFyKTtcbiAgfVxuXG4gIC8vIFNldCB0byBudWxsIHRvIGNvbnRpbnVlIHN1cHBvcnQgZm9yIGF1dG8gZGV0ZWN0aW9uIG9mIGJhc2UgaW5kZW50XG4gIGJhc2VJbmRlbnRTdHJpbmcgPSBiYXNlSW5kZW50U3RyaW5nIHx8ICcnO1xuICBpZiAob3B0aW9ucy5pbmRlbnRfbGV2ZWwgPiAwKSB7XG4gICAgYmFzZUluZGVudFN0cmluZyA9IG5ldyBBcnJheShvcHRpb25zLmluZGVudF9sZXZlbCArIDEpLmpvaW4odGhpcy5fX2luZGVudF9zdHJpbmcpO1xuICB9XG5cbiAgdGhpcy5fX2Jhc2Vfc3RyaW5nID0gYmFzZUluZGVudFN0cmluZztcbiAgdGhpcy5fX2Jhc2Vfc3RyaW5nX2xlbmd0aCA9IGJhc2VJbmRlbnRTdHJpbmcubGVuZ3RoO1xufVxuXG5JbmRlbnRTdHJpbmdDYWNoZS5wcm90b3R5cGUuZ2V0X2luZGVudF9zaXplID0gZnVuY3Rpb24oaW5kZW50LCBjb2x1bW4pIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuX19iYXNlX3N0cmluZ19sZW5ndGg7XG4gIGNvbHVtbiA9IGNvbHVtbiB8fCAwO1xuICBpZiAoaW5kZW50IDwgMCkge1xuICAgIHJlc3VsdCA9IDA7XG4gIH1cbiAgcmVzdWx0ICs9IGluZGVudCAqIHRoaXMuX19pbmRlbnRfc2l6ZTtcbiAgcmVzdWx0ICs9IGNvbHVtbjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbkluZGVudFN0cmluZ0NhY2hlLnByb3RvdHlwZS5nZXRfaW5kZW50X3N0cmluZyA9IGZ1bmN0aW9uKGluZGVudF9sZXZlbCwgY29sdW1uKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLl9fYmFzZV9zdHJpbmc7XG4gIGNvbHVtbiA9IGNvbHVtbiB8fCAwO1xuICBpZiAoaW5kZW50X2xldmVsIDwgMCkge1xuICAgIGluZGVudF9sZXZlbCA9IDA7XG4gICAgcmVzdWx0ID0gJyc7XG4gIH1cbiAgY29sdW1uICs9IGluZGVudF9sZXZlbCAqIHRoaXMuX19pbmRlbnRfc2l6ZTtcbiAgdGhpcy5fX2Vuc3VyZV9jYWNoZShjb2x1bW4pO1xuICByZXN1bHQgKz0gdGhpcy5fX2NhY2hlW2NvbHVtbl07XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5JbmRlbnRTdHJpbmdDYWNoZS5wcm90b3R5cGUuX19lbnN1cmVfY2FjaGUgPSBmdW5jdGlvbihjb2x1bW4pIHtcbiAgd2hpbGUgKGNvbHVtbiA+PSB0aGlzLl9fY2FjaGUubGVuZ3RoKSB7XG4gICAgdGhpcy5fX2FkZF9jb2x1bW4oKTtcbiAgfVxufTtcblxuSW5kZW50U3RyaW5nQ2FjaGUucHJvdG90eXBlLl9fYWRkX2NvbHVtbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29sdW1uID0gdGhpcy5fX2NhY2hlLmxlbmd0aDtcbiAgdmFyIGluZGVudCA9IDA7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoaXMuX19pbmRlbnRfc2l6ZSAmJiBjb2x1bW4gPj0gdGhpcy5fX2luZGVudF9zaXplKSB7XG4gICAgaW5kZW50ID0gTWF0aC5mbG9vcihjb2x1bW4gLyB0aGlzLl9faW5kZW50X3NpemUpO1xuICAgIGNvbHVtbiAtPSBpbmRlbnQgKiB0aGlzLl9faW5kZW50X3NpemU7XG4gICAgcmVzdWx0ID0gbmV3IEFycmF5KGluZGVudCArIDEpLmpvaW4odGhpcy5fX2luZGVudF9zdHJpbmcpO1xuICB9XG4gIGlmIChjb2x1bW4pIHtcbiAgICByZXN1bHQgKz0gbmV3IEFycmF5KGNvbHVtbiArIDEpLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHRoaXMuX19jYWNoZS5wdXNoKHJlc3VsdCk7XG59O1xuXG5mdW5jdGlvbiBPdXRwdXQob3B0aW9ucywgYmFzZUluZGVudFN0cmluZykge1xuICB0aGlzLl9faW5kZW50X2NhY2hlID0gbmV3IEluZGVudFN0cmluZ0NhY2hlKG9wdGlvbnMsIGJhc2VJbmRlbnRTdHJpbmcpO1xuICB0aGlzLnJhdyA9IGZhbHNlO1xuICB0aGlzLl9lbmRfd2l0aF9uZXdsaW5lID0gb3B0aW9ucy5lbmRfd2l0aF9uZXdsaW5lO1xuICB0aGlzLmluZGVudF9zaXplID0gb3B0aW9ucy5pbmRlbnRfc2l6ZTtcbiAgdGhpcy53cmFwX2xpbmVfbGVuZ3RoID0gb3B0aW9ucy53cmFwX2xpbmVfbGVuZ3RoO1xuICB0aGlzLmluZGVudF9lbXB0eV9saW5lcyA9IG9wdGlvbnMuaW5kZW50X2VtcHR5X2xpbmVzO1xuICB0aGlzLl9fbGluZXMgPSBbXTtcbiAgdGhpcy5wcmV2aW91c19saW5lID0gbnVsbDtcbiAgdGhpcy5jdXJyZW50X2xpbmUgPSBudWxsO1xuICB0aGlzLm5leHRfbGluZSA9IG5ldyBPdXRwdXRMaW5lKHRoaXMpO1xuICB0aGlzLnNwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNlO1xuICB0aGlzLm5vbl9icmVha2luZ19zcGFjZSA9IGZhbHNlO1xuICB0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQgPSBmYWxzZTtcbiAgLy8gaW5pdGlhbGl6ZVxuICB0aGlzLl9fYWRkX291dHB1dGxpbmUoKTtcbn1cblxuT3V0cHV0LnByb3RvdHlwZS5fX2FkZF9vdXRwdXRsaW5lID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMucHJldmlvdXNfbGluZSA9IHRoaXMuY3VycmVudF9saW5lO1xuICB0aGlzLmN1cnJlbnRfbGluZSA9IHRoaXMubmV4dF9saW5lLmNsb25lX2VtcHR5KCk7XG4gIHRoaXMuX19saW5lcy5wdXNoKHRoaXMuY3VycmVudF9saW5lKTtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUuZ2V0X2xpbmVfbnVtYmVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9fbGluZXMubGVuZ3RoO1xufTtcblxuT3V0cHV0LnByb3RvdHlwZS5nZXRfaW5kZW50X3N0cmluZyA9IGZ1bmN0aW9uKGluZGVudCwgY29sdW1uKSB7XG4gIHJldHVybiB0aGlzLl9faW5kZW50X2NhY2hlLmdldF9pbmRlbnRfc3RyaW5nKGluZGVudCwgY29sdW1uKTtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUuZ2V0X2luZGVudF9zaXplID0gZnVuY3Rpb24oaW5kZW50LCBjb2x1bW4pIHtcbiAgcmV0dXJuIHRoaXMuX19pbmRlbnRfY2FjaGUuZ2V0X2luZGVudF9zaXplKGluZGVudCwgY29sdW1uKTtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUuaXNfZW1wdHkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLnByZXZpb3VzX2xpbmUgJiYgdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKTtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUuYWRkX25ld19saW5lID0gZnVuY3Rpb24oZm9yY2VfbmV3bGluZSkge1xuICAvLyBuZXZlciBuZXdsaW5lIGF0IHRoZSBzdGFydCBvZiBmaWxlXG4gIC8vIG90aGVyd2lzZSwgbmV3bGluZSBvbmx5IGlmIHdlIGRpZG4ndCBqdXN0IGFkZCBvbmUgb3Igd2UncmUgZm9yY2VkXG4gIGlmICh0aGlzLmlzX2VtcHR5KCkgfHxcbiAgICAoIWZvcmNlX25ld2xpbmUgJiYgdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBpZiByYXcgb3V0cHV0IGlzIGVuYWJsZWQsIGRvbid0IHByaW50IGFkZGl0aW9uYWwgbmV3bGluZXMsXG4gIC8vIGJ1dCBzdGlsbCByZXR1cm4gVHJ1ZSBhcyB0aG91Z2ggeW91IGhhZFxuICBpZiAoIXRoaXMucmF3KSB7XG4gICAgdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLmdldF9jb2RlID0gZnVuY3Rpb24oZW9sKSB7XG4gIHRoaXMudHJpbSh0cnVlKTtcblxuICAvLyBoYW5kbGUgc29tZSBlZGdlIGNhc2VzIHdoZXJlIHRoZSBsYXN0IHRva2Vuc1xuICAvLyBoYXMgdGV4dCB0aGF0IGVuZHMgd2l0aCBuZXdsaW5lKHMpXG4gIHZhciBsYXN0X2l0ZW0gPSB0aGlzLmN1cnJlbnRfbGluZS5wb3AoKTtcbiAgaWYgKGxhc3RfaXRlbSkge1xuICAgIGlmIChsYXN0X2l0ZW1bbGFzdF9pdGVtLmxlbmd0aCAtIDFdID09PSAnXFxuJykge1xuICAgICAgbGFzdF9pdGVtID0gbGFzdF9pdGVtLnJlcGxhY2UoL1xcbiskL2csICcnKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50X2xpbmUucHVzaChsYXN0X2l0ZW0pO1xuICB9XG5cbiAgaWYgKHRoaXMuX2VuZF93aXRoX25ld2xpbmUpIHtcbiAgICB0aGlzLl9fYWRkX291dHB1dGxpbmUoKTtcbiAgfVxuXG4gIHZhciBzd2VldF9jb2RlID0gdGhpcy5fX2xpbmVzLmpvaW4oJ1xcbicpO1xuXG4gIGlmIChlb2wgIT09ICdcXG4nKSB7XG4gICAgc3dlZXRfY29kZSA9IHN3ZWV0X2NvZGUucmVwbGFjZSgvW1xcbl0vZywgZW9sKTtcbiAgfVxuICByZXR1cm4gc3dlZXRfY29kZTtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUuc2V0X3dyYXBfcG9pbnQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5jdXJyZW50X2xpbmUuX3NldF93cmFwX3BvaW50KCk7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLnNldF9pbmRlbnQgPSBmdW5jdGlvbihpbmRlbnQsIGFsaWdubWVudCkge1xuICBpbmRlbnQgPSBpbmRlbnQgfHwgMDtcbiAgYWxpZ25tZW50ID0gYWxpZ25tZW50IHx8IDA7XG5cbiAgLy8gTmV4dCBsaW5lIHN0b3JlcyBhbGlnbm1lbnQgdmFsdWVzXG4gIHRoaXMubmV4dF9saW5lLnNldF9pbmRlbnQoaW5kZW50LCBhbGlnbm1lbnQpO1xuXG4gIC8vIE5ldmVyIGluZGVudCB5b3VyIGZpcnN0IG91dHB1dCBpbmRlbnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlXG4gIGlmICh0aGlzLl9fbGluZXMubGVuZ3RoID4gMSkge1xuICAgIHRoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQoaW5kZW50LCBhbGlnbm1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdGhpcy5jdXJyZW50X2xpbmUuc2V0X2luZGVudCgpO1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLmFkZF9yYXdfdG9rZW4gPSBmdW5jdGlvbih0b2tlbikge1xuICBmb3IgKHZhciB4ID0gMDsgeCA8IHRva2VuLm5ld2xpbmVzOyB4KyspIHtcbiAgICB0aGlzLl9fYWRkX291dHB1dGxpbmUoKTtcbiAgfVxuICB0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KC0xKTtcbiAgdGhpcy5jdXJyZW50X2xpbmUucHVzaCh0b2tlbi53aGl0ZXNwYWNlX2JlZm9yZSk7XG4gIHRoaXMuY3VycmVudF9saW5lLnB1c2godG9rZW4udGV4dCk7XG4gIHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuID0gZmFsc2U7XG4gIHRoaXMubm9uX2JyZWFraW5nX3NwYWNlID0gZmFsc2U7XG4gIHRoaXMucHJldmlvdXNfdG9rZW5fd3JhcHBlZCA9IGZhbHNlO1xufTtcblxuT3V0cHV0LnByb3RvdHlwZS5hZGRfdG9rZW4gPSBmdW5jdGlvbihwcmludGFibGVfdG9rZW4pIHtcbiAgdGhpcy5fX2FkZF9zcGFjZV9iZWZvcmVfdG9rZW4oKTtcbiAgdGhpcy5jdXJyZW50X2xpbmUucHVzaChwcmludGFibGVfdG9rZW4pO1xuICB0aGlzLnNwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNlO1xuICB0aGlzLm5vbl9icmVha2luZ19zcGFjZSA9IGZhbHNlO1xuICB0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQgPSB0aGlzLmN1cnJlbnRfbGluZS5fYWxsb3dfd3JhcCgpO1xufTtcblxuT3V0cHV0LnByb3RvdHlwZS5fX2FkZF9zcGFjZV9iZWZvcmVfdG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuICYmICF0aGlzLmp1c3RfYWRkZWRfbmV3bGluZSgpKSB7XG4gICAgaWYgKCF0aGlzLm5vbl9icmVha2luZ19zcGFjZSkge1xuICAgICAgdGhpcy5zZXRfd3JhcF9wb2ludCgpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRfbGluZS5wdXNoKCcgJyk7XG4gIH1cbn07XG5cbk91dHB1dC5wcm90b3R5cGUucmVtb3ZlX2luZGVudCA9IGZ1bmN0aW9uKGluZGV4KSB7XG4gIHZhciBvdXRwdXRfbGVuZ3RoID0gdGhpcy5fX2xpbmVzLmxlbmd0aDtcbiAgd2hpbGUgKGluZGV4IDwgb3V0cHV0X2xlbmd0aCkge1xuICAgIHRoaXMuX19saW5lc1tpbmRleF0uX3JlbW92ZV9pbmRlbnQoKTtcbiAgICBpbmRleCsrO1xuICB9XG4gIHRoaXMuY3VycmVudF9saW5lLl9yZW1vdmVfd3JhcF9pbmRlbnQoKTtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uKGVhdF9uZXdsaW5lcykge1xuICBlYXRfbmV3bGluZXMgPSAoZWF0X25ld2xpbmVzID09PSB1bmRlZmluZWQpID8gZmFsc2UgOiBlYXRfbmV3bGluZXM7XG5cbiAgdGhpcy5jdXJyZW50X2xpbmUudHJpbSgpO1xuXG4gIHdoaWxlIChlYXRfbmV3bGluZXMgJiYgdGhpcy5fX2xpbmVzLmxlbmd0aCA+IDEgJiZcbiAgICB0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpKSB7XG4gICAgdGhpcy5fX2xpbmVzLnBvcCgpO1xuICAgIHRoaXMuY3VycmVudF9saW5lID0gdGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGggLSAxXTtcbiAgICB0aGlzLmN1cnJlbnRfbGluZS50cmltKCk7XG4gIH1cblxuICB0aGlzLnByZXZpb3VzX2xpbmUgPSB0aGlzLl9fbGluZXMubGVuZ3RoID4gMSA/XG4gICAgdGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGggLSAyXSA6IG51bGw7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLmp1c3RfYWRkZWRfbmV3bGluZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKTtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUuanVzdF9hZGRlZF9ibGFua2xpbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuaXNfZW1wdHkoKSB8fFxuICAgICh0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpICYmIHRoaXMucHJldmlvdXNfbGluZS5pc19lbXB0eSgpKTtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUuZW5zdXJlX2VtcHR5X2xpbmVfYWJvdmUgPSBmdW5jdGlvbihzdGFydHNfd2l0aCwgZW5kc193aXRoKSB7XG4gIHZhciBpbmRleCA9IHRoaXMuX19saW5lcy5sZW5ndGggLSAyO1xuICB3aGlsZSAoaW5kZXggPj0gMCkge1xuICAgIHZhciBwb3RlbnRpYWxFbXB0eUxpbmUgPSB0aGlzLl9fbGluZXNbaW5kZXhdO1xuICAgIGlmIChwb3RlbnRpYWxFbXB0eUxpbmUuaXNfZW1wdHkoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChwb3RlbnRpYWxFbXB0eUxpbmUuaXRlbSgwKS5pbmRleE9mKHN0YXJ0c193aXRoKSAhPT0gMCAmJlxuICAgICAgcG90ZW50aWFsRW1wdHlMaW5lLml0ZW0oLTEpICE9PSBlbmRzX3dpdGgpIHtcbiAgICAgIHRoaXMuX19saW5lcy5zcGxpY2UoaW5kZXggKyAxLCAwLCBuZXcgT3V0cHV0TGluZSh0aGlzKSk7XG4gICAgICB0aGlzLnByZXZpb3VzX2xpbmUgPSB0aGlzLl9fbGluZXNbdGhpcy5fX2xpbmVzLmxlbmd0aCAtIDJdO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4LS07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLk91dHB1dCA9IE91dHB1dDtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIFBhdHRlcm4oaW5wdXRfc2Nhbm5lciwgcGFyZW50KSB7XG4gIHRoaXMuX2lucHV0ID0gaW5wdXRfc2Nhbm5lcjtcbiAgdGhpcy5fc3RhcnRpbmdfcGF0dGVybiA9IG51bGw7XG4gIHRoaXMuX21hdGNoX3BhdHRlcm4gPSBudWxsO1xuICB0aGlzLl91bnRpbF9wYXR0ZXJuID0gbnVsbDtcbiAgdGhpcy5fdW50aWxfYWZ0ZXIgPSBmYWxzZTtcblxuICBpZiAocGFyZW50KSB7XG4gICAgdGhpcy5fc3RhcnRpbmdfcGF0dGVybiA9IHRoaXMuX2lucHV0LmdldF9yZWdleHAocGFyZW50Ll9zdGFydGluZ19wYXR0ZXJuLCB0cnVlKTtcbiAgICB0aGlzLl9tYXRjaF9wYXR0ZXJuID0gdGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChwYXJlbnQuX21hdGNoX3BhdHRlcm4sIHRydWUpO1xuICAgIHRoaXMuX3VudGlsX3BhdHRlcm4gPSB0aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHBhcmVudC5fdW50aWxfcGF0dGVybik7XG4gICAgdGhpcy5fdW50aWxfYWZ0ZXIgPSBwYXJlbnQuX3VudGlsX2FmdGVyO1xuICB9XG59XG5cblBhdHRlcm4ucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2lucHV0LnJlYWQodGhpcy5fc3RhcnRpbmdfcGF0dGVybik7XG4gIGlmICghdGhpcy5fc3RhcnRpbmdfcGF0dGVybiB8fCByZXN1bHQpIHtcbiAgICByZXN1bHQgKz0gdGhpcy5faW5wdXQucmVhZCh0aGlzLl9tYXRjaF9wYXR0ZXJuLCB0aGlzLl91bnRpbF9wYXR0ZXJuLCB0aGlzLl91bnRpbF9hZnRlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblBhdHRlcm4ucHJvdG90eXBlLnJlYWRfbWF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMuX21hdGNoX3BhdHRlcm4pO1xufTtcblxuUGF0dGVybi5wcm90b3R5cGUudW50aWxfYWZ0ZXIgPSBmdW5jdGlvbihwYXR0ZXJuKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLl9jcmVhdGUoKTtcbiAgcmVzdWx0Ll91bnRpbF9hZnRlciA9IHRydWU7XG4gIHJlc3VsdC5fdW50aWxfcGF0dGVybiA9IHRoaXMuX2lucHV0LmdldF9yZWdleHAocGF0dGVybik7XG4gIHJlc3VsdC5fdXBkYXRlKCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5QYXR0ZXJuLnByb3RvdHlwZS51bnRpbCA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2NyZWF0ZSgpO1xuICByZXN1bHQuX3VudGlsX2FmdGVyID0gZmFsc2U7XG4gIHJlc3VsdC5fdW50aWxfcGF0dGVybiA9IHRoaXMuX2lucHV0LmdldF9yZWdleHAocGF0dGVybik7XG4gIHJlc3VsdC5fdXBkYXRlKCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5QYXR0ZXJuLnByb3RvdHlwZS5zdGFydGluZ193aXRoID0gZnVuY3Rpb24ocGF0dGVybikge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5fY3JlYXRlKCk7XG4gIHJlc3VsdC5fc3RhcnRpbmdfcGF0dGVybiA9IHRoaXMuX2lucHV0LmdldF9yZWdleHAocGF0dGVybiwgdHJ1ZSk7XG4gIHJlc3VsdC5fdXBkYXRlKCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5QYXR0ZXJuLnByb3RvdHlwZS5tYXRjaGluZyA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2NyZWF0ZSgpO1xuICByZXN1bHQuX21hdGNoX3BhdHRlcm4gPSB0aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHBhdHRlcm4sIHRydWUpO1xuICByZXN1bHQuX3VwZGF0ZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuUGF0dGVybi5wcm90b3R5cGUuX2NyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFBhdHRlcm4odGhpcy5faW5wdXQsIHRoaXMpO1xufTtcblxuUGF0dGVybi5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uKCkge307XG5cbm1vZHVsZS5leHBvcnRzLlBhdHRlcm4gPSBQYXR0ZXJuO1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBhdHRlcm4gPSByZXF1aXJlKCcuL3BhdHRlcm4nKS5QYXR0ZXJuO1xuXG5cbnZhciB0ZW1wbGF0ZV9uYW1lcyA9IHtcbiAgZGphbmdvOiBmYWxzZSxcbiAgZXJiOiBmYWxzZSxcbiAgaGFuZGxlYmFyczogZmFsc2UsXG4gIHBocDogZmFsc2UsXG4gIHNtYXJ0eTogZmFsc2Vcbn07XG5cbi8vIFRoaXMgbGV0cyB0ZW1wbGF0ZXMgYXBwZWFyIGFueXdoZXJlIHdlIHdvdWxkIGRvIGEgcmVhZFVudGlsXG4vLyBUaGUgY29zdCBpcyBoaWdoZXIgYnV0IGl0IGlzIHBheSB0byBwbGF5LlxuZnVuY3Rpb24gVGVtcGxhdGFibGVQYXR0ZXJuKGlucHV0X3NjYW5uZXIsIHBhcmVudCkge1xuICBQYXR0ZXJuLmNhbGwodGhpcywgaW5wdXRfc2Nhbm5lciwgcGFyZW50KTtcbiAgdGhpcy5fX3RlbXBsYXRlX3BhdHRlcm4gPSBudWxsO1xuICB0aGlzLl9kaXNhYmxlZCA9IE9iamVjdC5hc3NpZ24oe30sIHRlbXBsYXRlX25hbWVzKTtcbiAgdGhpcy5fZXhjbHVkZWQgPSBPYmplY3QuYXNzaWduKHt9LCB0ZW1wbGF0ZV9uYW1lcyk7XG5cbiAgaWYgKHBhcmVudCkge1xuICAgIHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuID0gdGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChwYXJlbnQuX190ZW1wbGF0ZV9wYXR0ZXJuKTtcbiAgICB0aGlzLl9leGNsdWRlZCA9IE9iamVjdC5hc3NpZ24odGhpcy5fZXhjbHVkZWQsIHBhcmVudC5fZXhjbHVkZWQpO1xuICAgIHRoaXMuX2Rpc2FibGVkID0gT2JqZWN0LmFzc2lnbih0aGlzLl9kaXNhYmxlZCwgcGFyZW50Ll9kaXNhYmxlZCk7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBuZXcgUGF0dGVybihpbnB1dF9zY2FubmVyKTtcbiAgdGhpcy5fX3BhdHRlcm5zID0ge1xuICAgIGhhbmRsZWJhcnNfY29tbWVudDogcGF0dGVybi5zdGFydGluZ193aXRoKC97eyEtLS8pLnVudGlsX2FmdGVyKC8tLX19LyksXG4gICAgaGFuZGxlYmFyc191bmVzY2FwZWQ6IHBhdHRlcm4uc3RhcnRpbmdfd2l0aCgve3t7LykudW50aWxfYWZ0ZXIoL319fS8pLFxuICAgIGhhbmRsZWJhcnM6IHBhdHRlcm4uc3RhcnRpbmdfd2l0aCgve3svKS51bnRpbF9hZnRlcigvfX0vKSxcbiAgICBwaHA6IHBhdHRlcm4uc3RhcnRpbmdfd2l0aCgvPFxcPyg/Ols9IF18cGhwKS8pLnVudGlsX2FmdGVyKC9cXD8+LyksXG4gICAgZXJiOiBwYXR0ZXJuLnN0YXJ0aW5nX3dpdGgoLzwlW14lXS8pLnVudGlsX2FmdGVyKC9bXiVdJT4vKSxcbiAgICAvLyBkamFuZ28gY29mbGljdHMgd2l0aCBoYW5kbGViYXJzIGEgYml0LlxuICAgIGRqYW5nbzogcGF0dGVybi5zdGFydGluZ193aXRoKC97JS8pLnVudGlsX2FmdGVyKC8lfS8pLFxuICAgIGRqYW5nb192YWx1ZTogcGF0dGVybi5zdGFydGluZ193aXRoKC97ey8pLnVudGlsX2FmdGVyKC99fS8pLFxuICAgIGRqYW5nb19jb21tZW50OiBwYXR0ZXJuLnN0YXJ0aW5nX3dpdGgoL3sjLykudW50aWxfYWZ0ZXIoLyN9LyksXG4gICAgc21hcnR5OiBwYXR0ZXJuLnN0YXJ0aW5nX3dpdGgoL3soPz1bXn17XFxzXFxuXSkvKS51bnRpbF9hZnRlcigvW15cXHNcXG5dfS8pLFxuICAgIHNtYXJ0eV9jb21tZW50OiBwYXR0ZXJuLnN0YXJ0aW5nX3dpdGgoL3tcXCovKS51bnRpbF9hZnRlcigvXFwqfS8pLFxuICAgIHNtYXJ0eV9saXRlcmFsOiBwYXR0ZXJuLnN0YXJ0aW5nX3dpdGgoL3tsaXRlcmFsfS8pLnVudGlsX2FmdGVyKC97XFwvbGl0ZXJhbH0vKVxuICB9O1xufVxuVGVtcGxhdGFibGVQYXR0ZXJuLnByb3RvdHlwZSA9IG5ldyBQYXR0ZXJuKCk7XG5cblRlbXBsYXRhYmxlUGF0dGVybi5wcm90b3R5cGUuX2NyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRlbXBsYXRhYmxlUGF0dGVybih0aGlzLl9pbnB1dCwgdGhpcyk7XG59O1xuXG5UZW1wbGF0YWJsZVBhdHRlcm4ucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fX3NldF90ZW1wbGF0ZWRfcGF0dGVybigpO1xufTtcblxuVGVtcGxhdGFibGVQYXR0ZXJuLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24obGFuZ3VhZ2UpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2NyZWF0ZSgpO1xuICByZXN1bHQuX2Rpc2FibGVkW2xhbmd1YWdlXSA9IHRydWU7XG4gIHJlc3VsdC5fdXBkYXRlKCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5UZW1wbGF0YWJsZVBhdHRlcm4ucHJvdG90eXBlLnJlYWRfb3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2NyZWF0ZSgpO1xuICBmb3IgKHZhciBsYW5ndWFnZSBpbiB0ZW1wbGF0ZV9uYW1lcykge1xuICAgIHJlc3VsdC5fZGlzYWJsZWRbbGFuZ3VhZ2VdID0gb3B0aW9ucy50ZW1wbGF0aW5nLmluZGV4T2YobGFuZ3VhZ2UpID09PSAtMTtcbiAgfVxuICByZXN1bHQuX3VwZGF0ZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVGVtcGxhdGFibGVQYXR0ZXJuLnByb3RvdHlwZS5leGNsdWRlID0gZnVuY3Rpb24obGFuZ3VhZ2UpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2NyZWF0ZSgpO1xuICByZXN1bHQuX2V4Y2x1ZGVkW2xhbmd1YWdlXSA9IHRydWU7XG4gIHJlc3VsdC5fdXBkYXRlKCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5UZW1wbGF0YWJsZVBhdHRlcm4ucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhpcy5fbWF0Y2hfcGF0dGVybikge1xuICAgIHJlc3VsdCA9IHRoaXMuX2lucHV0LnJlYWQodGhpcy5fc3RhcnRpbmdfcGF0dGVybik7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdGhpcy5faW5wdXQucmVhZCh0aGlzLl9zdGFydGluZ19wYXR0ZXJuLCB0aGlzLl9fdGVtcGxhdGVfcGF0dGVybik7XG4gIH1cbiAgdmFyIG5leHQgPSB0aGlzLl9yZWFkX3RlbXBsYXRlKCk7XG4gIHdoaWxlIChuZXh0KSB7XG4gICAgaWYgKHRoaXMuX21hdGNoX3BhdHRlcm4pIHtcbiAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQucmVhZCh0aGlzLl9tYXRjaF9wYXR0ZXJuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5yZWFkVW50aWwodGhpcy5fX3RlbXBsYXRlX3BhdHRlcm4pO1xuICAgIH1cbiAgICByZXN1bHQgKz0gbmV4dDtcbiAgICBuZXh0ID0gdGhpcy5fcmVhZF90ZW1wbGF0ZSgpO1xuICB9XG5cbiAgaWYgKHRoaXMuX3VudGlsX2FmdGVyKSB7XG4gICAgcmVzdWx0ICs9IHRoaXMuX2lucHV0LnJlYWRVbnRpbEFmdGVyKHRoaXMuX3VudGlsX3BhdHRlcm4pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5UZW1wbGF0YWJsZVBhdHRlcm4ucHJvdG90eXBlLl9fc2V0X3RlbXBsYXRlZF9wYXR0ZXJuID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdO1xuXG4gIGlmICghdGhpcy5fZGlzYWJsZWQucGhwKSB7XG4gICAgaXRlbXMucHVzaCh0aGlzLl9fcGF0dGVybnMucGhwLl9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSk7XG4gIH1cbiAgaWYgKCF0aGlzLl9kaXNhYmxlZC5oYW5kbGViYXJzKSB7XG4gICAgaXRlbXMucHVzaCh0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFycy5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpO1xuICB9XG4gIGlmICghdGhpcy5fZGlzYWJsZWQuZXJiKSB7XG4gICAgaXRlbXMucHVzaCh0aGlzLl9fcGF0dGVybnMuZXJiLl9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSk7XG4gIH1cbiAgaWYgKCF0aGlzLl9kaXNhYmxlZC5kamFuZ28pIHtcbiAgICBpdGVtcy5wdXNoKHRoaXMuX19wYXR0ZXJucy5kamFuZ28uX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKTtcbiAgICAvLyBUaGUgc3RhcnRpbmcgcGF0dGVybiBmb3IgZGphbmdvIGlzIG1vcmUgY29tcGxleCBiZWNhdXNlIGl0IGhhcyBkaWZmZXJlbnRcbiAgICAvLyBwYXR0ZXJucyBmb3IgdmFsdWUsIGNvbW1lbnQsIGFuZCBvdGhlciBzZWN0aW9uc1xuICAgIGl0ZW1zLnB1c2godGhpcy5fX3BhdHRlcm5zLmRqYW5nb192YWx1ZS5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpO1xuICAgIGl0ZW1zLnB1c2godGhpcy5fX3BhdHRlcm5zLmRqYW5nb19jb21tZW50Ll9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSk7XG4gIH1cbiAgaWYgKCF0aGlzLl9kaXNhYmxlZC5zbWFydHkpIHtcbiAgICBpdGVtcy5wdXNoKHRoaXMuX19wYXR0ZXJucy5zbWFydHkuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKTtcbiAgfVxuXG4gIGlmICh0aGlzLl91bnRpbF9wYXR0ZXJuKSB7XG4gICAgaXRlbXMucHVzaCh0aGlzLl91bnRpbF9wYXR0ZXJuLnNvdXJjZSk7XG4gIH1cbiAgdGhpcy5fX3RlbXBsYXRlX3BhdHRlcm4gPSB0aGlzLl9pbnB1dC5nZXRfcmVnZXhwKCcoPzonICsgaXRlbXMuam9pbignfCcpICsgJyknKTtcbn07XG5cblRlbXBsYXRhYmxlUGF0dGVybi5wcm90b3R5cGUuX3JlYWRfdGVtcGxhdGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSAnJztcbiAgdmFyIGMgPSB0aGlzLl9pbnB1dC5wZWVrKCk7XG4gIGlmIChjID09PSAnPCcpIHtcbiAgICB2YXIgcGVlazEgPSB0aGlzLl9pbnB1dC5wZWVrKDEpO1xuICAgIC8vaWYgd2UncmUgaW4gYSBjb21tZW50LCBkbyBzb21ldGhpbmcgc3BlY2lhbFxuICAgIC8vIFdlIHRyZWF0IGFsbCBjb21tZW50cyBhcyBsaXRlcmFscywgZXZlbiBtb3JlIHRoYW4gcHJlZm9ybWF0dGVkIHRhZ3NcbiAgICAvLyB3ZSBqdXN0IGxvb2sgZm9yIHRoZSBhcHByb3ByaWF0ZSBjbG9zZSB0YWdcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkLnBocCAmJiAhdGhpcy5fZXhjbHVkZWQucGhwICYmIHBlZWsxID09PSAnPycpIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nIHx8XG4gICAgICAgIHRoaXMuX19wYXR0ZXJucy5waHAucmVhZCgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkLmVyYiAmJiAhdGhpcy5fZXhjbHVkZWQuZXJiICYmIHBlZWsxID09PSAnJScpIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nIHx8XG4gICAgICAgIHRoaXMuX19wYXR0ZXJucy5lcmIucmVhZCgpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjID09PSAneycpIHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkLmhhbmRsZWJhcnMgJiYgIXRoaXMuX2V4Y2x1ZGVkLmhhbmRsZWJhcnMpIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nIHx8XG4gICAgICAgIHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX2NvbW1lbnQucmVhZCgpO1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHJlc3VsdGluZ19zdHJpbmcgfHxcbiAgICAgICAgdGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfdW5lc2NhcGVkLnJlYWQoKTtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nIHx8XG4gICAgICAgIHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzLnJlYWQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZC5kamFuZ28pIHtcbiAgICAgIC8vIGRqYW5nbyBjb2ZsaWN0cyB3aXRoIGhhbmRsZWJhcnMgYSBiaXQuXG4gICAgICBpZiAoIXRoaXMuX2V4Y2x1ZGVkLmRqYW5nbyAmJiAhdGhpcy5fZXhjbHVkZWQuaGFuZGxlYmFycykge1xuICAgICAgICByZXN1bHRpbmdfc3RyaW5nID0gcmVzdWx0aW5nX3N0cmluZyB8fFxuICAgICAgICAgIHRoaXMuX19wYXR0ZXJucy5kamFuZ29fdmFsdWUucmVhZCgpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9leGNsdWRlZC5kamFuZ28pIHtcbiAgICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHJlc3VsdGluZ19zdHJpbmcgfHxcbiAgICAgICAgICB0aGlzLl9fcGF0dGVybnMuZGphbmdvX2NvbW1lbnQucmVhZCgpO1xuICAgICAgICByZXN1bHRpbmdfc3RyaW5nID0gcmVzdWx0aW5nX3N0cmluZyB8fFxuICAgICAgICAgIHRoaXMuX19wYXR0ZXJucy5kamFuZ28ucmVhZCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkLnNtYXJ0eSkge1xuICAgICAgLy8gc21hcnR5IGNhbm5vdCBiZSBlbmFibGVkIHdpdGggZGphbmdvIG9yIGhhbmRsZWJhcnMgZW5hYmxlZFxuICAgICAgaWYgKHRoaXMuX2Rpc2FibGVkLmRqYW5nbyAmJiB0aGlzLl9kaXNhYmxlZC5oYW5kbGViYXJzKSB7XG4gICAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nIHx8XG4gICAgICAgICAgdGhpcy5fX3BhdHRlcm5zLnNtYXJ0eV9jb21tZW50LnJlYWQoKTtcbiAgICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHJlc3VsdGluZ19zdHJpbmcgfHxcbiAgICAgICAgICB0aGlzLl9fcGF0dGVybnMuc21hcnR5X2xpdGVyYWwucmVhZCgpO1xuICAgICAgICByZXN1bHRpbmdfc3RyaW5nID0gcmVzdWx0aW5nX3N0cmluZyB8fFxuICAgICAgICAgIHRoaXMuX19wYXR0ZXJucy5zbWFydHkucmVhZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0aW5nX3N0cmluZztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMuVGVtcGxhdGFibGVQYXR0ZXJuID0gVGVtcGxhdGFibGVQYXR0ZXJuO1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gVG9rZW4odHlwZSwgdGV4dCwgbmV3bGluZXMsIHdoaXRlc3BhY2VfYmVmb3JlKSB7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMudGV4dCA9IHRleHQ7XG5cbiAgLy8gY29tbWVudHNfYmVmb3JlIGFyZVxuICAvLyBjb21tZW50cyB0aGF0IGhhdmUgYSBuZXcgbGluZSBiZWZvcmUgdGhlbVxuICAvLyBhbmQgbWF5IG9yIG1heSBub3QgaGF2ZSBhIG5ld2xpbmUgYWZ0ZXJcbiAgLy8gdGhpcyBpcyBhIHNldCBvZiBjb21tZW50cyBiZWZvcmVcbiAgdGhpcy5jb21tZW50c19iZWZvcmUgPSBudWxsOyAvKiBpbmxpbmUgY29tbWVudCovXG5cblxuICAvLyB0aGlzLmNvbW1lbnRzX2FmdGVyID0gIG5ldyBUb2tlblN0cmVhbSgpOyAvLyBubyBuZXcgbGluZSBiZWZvcmUgYW5kIG5ld2xpbmUgYWZ0ZXJcbiAgdGhpcy5uZXdsaW5lcyA9IG5ld2xpbmVzIHx8IDA7XG4gIHRoaXMud2hpdGVzcGFjZV9iZWZvcmUgPSB3aGl0ZXNwYWNlX2JlZm9yZSB8fCAnJztcbiAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLnByZXZpb3VzID0gbnVsbDtcbiAgdGhpcy5vcGVuZWQgPSBudWxsO1xuICB0aGlzLmNsb3NlZCA9IG51bGw7XG4gIHRoaXMuZGlyZWN0aXZlcyA9IG51bGw7XG59XG5cblxubW9kdWxlLmV4cG9ydHMuVG9rZW4gPSBUb2tlbjtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBJbnB1dFNjYW5uZXIgPSByZXF1aXJlKCcuLi9jb3JlL2lucHV0c2Nhbm5lcicpLklucHV0U2Nhbm5lcjtcbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4uL2NvcmUvdG9rZW4nKS5Ub2tlbjtcbnZhciBUb2tlblN0cmVhbSA9IHJlcXVpcmUoJy4uL2NvcmUvdG9rZW5zdHJlYW0nKS5Ub2tlblN0cmVhbTtcbnZhciBXaGl0ZXNwYWNlUGF0dGVybiA9IHJlcXVpcmUoJy4vd2hpdGVzcGFjZXBhdHRlcm4nKS5XaGl0ZXNwYWNlUGF0dGVybjtcblxudmFyIFRPS0VOID0ge1xuICBTVEFSVDogJ1RLX1NUQVJUJyxcbiAgUkFXOiAnVEtfUkFXJyxcbiAgRU9GOiAnVEtfRU9GJ1xufTtcblxudmFyIFRva2VuaXplciA9IGZ1bmN0aW9uKGlucHV0X3N0cmluZywgb3B0aW9ucykge1xuICB0aGlzLl9pbnB1dCA9IG5ldyBJbnB1dFNjYW5uZXIoaW5wdXRfc3RyaW5nKTtcbiAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHRoaXMuX190b2tlbnMgPSBudWxsO1xuXG4gIHRoaXMuX3BhdHRlcm5zID0ge307XG4gIHRoaXMuX3BhdHRlcm5zLndoaXRlc3BhY2UgPSBuZXcgV2hpdGVzcGFjZVBhdHRlcm4odGhpcy5faW5wdXQpO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9pbnB1dC5yZXN0YXJ0KCk7XG4gIHRoaXMuX190b2tlbnMgPSBuZXcgVG9rZW5TdHJlYW0oKTtcblxuICB0aGlzLl9yZXNldCgpO1xuXG4gIHZhciBjdXJyZW50O1xuICB2YXIgcHJldmlvdXMgPSBuZXcgVG9rZW4oVE9LRU4uU1RBUlQsICcnKTtcbiAgdmFyIG9wZW5fdG9rZW4gPSBudWxsO1xuICB2YXIgb3Blbl9zdGFjayA9IFtdO1xuICB2YXIgY29tbWVudHMgPSBuZXcgVG9rZW5TdHJlYW0oKTtcblxuICB3aGlsZSAocHJldmlvdXMudHlwZSAhPT0gVE9LRU4uRU9GKSB7XG4gICAgY3VycmVudCA9IHRoaXMuX2dldF9uZXh0X3Rva2VuKHByZXZpb3VzLCBvcGVuX3Rva2VuKTtcbiAgICB3aGlsZSAodGhpcy5faXNfY29tbWVudChjdXJyZW50KSkge1xuICAgICAgY29tbWVudHMuYWRkKGN1cnJlbnQpO1xuICAgICAgY3VycmVudCA9IHRoaXMuX2dldF9uZXh0X3Rva2VuKHByZXZpb3VzLCBvcGVuX3Rva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbW1lbnRzLmlzRW1wdHkoKSkge1xuICAgICAgY3VycmVudC5jb21tZW50c19iZWZvcmUgPSBjb21tZW50cztcbiAgICAgIGNvbW1lbnRzID0gbmV3IFRva2VuU3RyZWFtKCk7XG4gICAgfVxuXG4gICAgY3VycmVudC5wYXJlbnQgPSBvcGVuX3Rva2VuO1xuXG4gICAgaWYgKHRoaXMuX2lzX29wZW5pbmcoY3VycmVudCkpIHtcbiAgICAgIG9wZW5fc3RhY2sucHVzaChvcGVuX3Rva2VuKTtcbiAgICAgIG9wZW5fdG9rZW4gPSBjdXJyZW50O1xuICAgIH0gZWxzZSBpZiAob3Blbl90b2tlbiAmJiB0aGlzLl9pc19jbG9zaW5nKGN1cnJlbnQsIG9wZW5fdG9rZW4pKSB7XG4gICAgICBjdXJyZW50Lm9wZW5lZCA9IG9wZW5fdG9rZW47XG4gICAgICBvcGVuX3Rva2VuLmNsb3NlZCA9IGN1cnJlbnQ7XG4gICAgICBvcGVuX3Rva2VuID0gb3Blbl9zdGFjay5wb3AoKTtcbiAgICAgIGN1cnJlbnQucGFyZW50ID0gb3Blbl90b2tlbjtcbiAgICB9XG5cbiAgICBjdXJyZW50LnByZXZpb3VzID0gcHJldmlvdXM7XG4gICAgcHJldmlvdXMubmV4dCA9IGN1cnJlbnQ7XG5cbiAgICB0aGlzLl9fdG9rZW5zLmFkZChjdXJyZW50KTtcbiAgICBwcmV2aW91cyA9IGN1cnJlbnQ7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fX3Rva2Vucztcbn07XG5cblxuVG9rZW5pemVyLnByb3RvdHlwZS5faXNfZmlyc3RfdG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX190b2tlbnMuaXNFbXB0eSgpO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHt9O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9nZXRfbmV4dF90b2tlbiA9IGZ1bmN0aW9uKHByZXZpb3VzX3Rva2VuLCBvcGVuX3Rva2VuKSB7IC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbiAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTtcbiAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9pbnB1dC5yZWFkKC8uKy9nKTtcbiAgaWYgKHJlc3VsdGluZ19zdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlJBVywgcmVzdWx0aW5nX3N0cmluZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5FT0YsICcnKTtcbiAgfVxufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5faXNfY29tbWVudCA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHsgLy8ganNoaW50IHVudXNlZDpmYWxzZVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc19vcGVuaW5nID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikgeyAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX2lzX2Nsb3NpbmcgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuLCBvcGVuX3Rva2VuKSB7IC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlX3Rva2VuID0gZnVuY3Rpb24odHlwZSwgdGV4dCkge1xuICB2YXIgdG9rZW4gPSBuZXcgVG9rZW4odHlwZSwgdGV4dCxcbiAgICB0aGlzLl9wYXR0ZXJucy53aGl0ZXNwYWNlLm5ld2xpbmVfY291bnQsXG4gICAgdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZS53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbik7XG4gIHJldHVybiB0b2tlbjtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRXaGl0ZXNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9wYXR0ZXJucy53aGl0ZXNwYWNlLnJlYWQoKTtcbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6ZXI7XG5tb2R1bGUuZXhwb3J0cy5UT0tFTiA9IFRPS0VOO1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gVG9rZW5TdHJlYW0ocGFyZW50X3Rva2VuKSB7XG4gIC8vIHByaXZhdGVcbiAgdGhpcy5fX3Rva2VucyA9IFtdO1xuICB0aGlzLl9fdG9rZW5zX2xlbmd0aCA9IHRoaXMuX190b2tlbnMubGVuZ3RoO1xuICB0aGlzLl9fcG9zaXRpb24gPSAwO1xuICB0aGlzLl9fcGFyZW50X3Rva2VuID0gcGFyZW50X3Rva2VuO1xufVxuXG5Ub2tlblN0cmVhbS5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9fcG9zaXRpb24gPSAwO1xufTtcblxuVG9rZW5TdHJlYW0ucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX190b2tlbnNfbGVuZ3RoID09PSAwO1xufTtcblxuVG9rZW5TdHJlYW0ucHJvdG90eXBlLmhhc05leHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX19wb3NpdGlvbiA8IHRoaXMuX190b2tlbnNfbGVuZ3RoO1xufTtcblxuVG9rZW5TdHJlYW0ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbCA9IG51bGw7XG4gIGlmICh0aGlzLmhhc05leHQoKSkge1xuICAgIHZhbCA9IHRoaXMuX190b2tlbnNbdGhpcy5fX3Bvc2l0aW9uXTtcbiAgICB0aGlzLl9fcG9zaXRpb24gKz0gMTtcbiAgfVxuICByZXR1cm4gdmFsO1xufTtcblxuVG9rZW5TdHJlYW0ucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbihpbmRleCkge1xuICB2YXIgdmFsID0gbnVsbDtcbiAgaW5kZXggPSBpbmRleCB8fCAwO1xuICBpbmRleCArPSB0aGlzLl9fcG9zaXRpb247XG4gIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5fX3Rva2Vuc19sZW5ndGgpIHtcbiAgICB2YWwgPSB0aGlzLl9fdG9rZW5zW2luZGV4XTtcbiAgfVxuICByZXR1cm4gdmFsO1xufTtcblxuVG9rZW5TdHJlYW0ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gIGlmICh0aGlzLl9fcGFyZW50X3Rva2VuKSB7XG4gICAgdG9rZW4ucGFyZW50ID0gdGhpcy5fX3BhcmVudF90b2tlbjtcbiAgfVxuICB0aGlzLl9fdG9rZW5zLnB1c2godG9rZW4pO1xuICB0aGlzLl9fdG9rZW5zX2xlbmd0aCArPSAxO1xufTtcblxubW9kdWxlLmV4cG9ydHMuVG9rZW5TdHJlYW0gPSBUb2tlblN0cmVhbTtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBQYXR0ZXJuID0gcmVxdWlyZSgnLi4vY29yZS9wYXR0ZXJuJykuUGF0dGVybjtcblxuZnVuY3Rpb24gV2hpdGVzcGFjZVBhdHRlcm4oaW5wdXRfc2Nhbm5lciwgcGFyZW50KSB7XG4gIFBhdHRlcm4uY2FsbCh0aGlzLCBpbnB1dF9zY2FubmVyLCBwYXJlbnQpO1xuICBpZiAocGFyZW50KSB7XG4gICAgdGhpcy5fbGluZV9yZWdleHAgPSB0aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHBhcmVudC5fbGluZV9yZWdleHApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX19zZXRfd2hpdGVzcGFjZV9wYXR0ZXJucygnJywgJycpO1xuICB9XG5cbiAgdGhpcy5uZXdsaW5lX2NvdW50ID0gMDtcbiAgdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbiA9ICcnO1xufVxuV2hpdGVzcGFjZVBhdHRlcm4ucHJvdG90eXBlID0gbmV3IFBhdHRlcm4oKTtcblxuV2hpdGVzcGFjZVBhdHRlcm4ucHJvdG90eXBlLl9fc2V0X3doaXRlc3BhY2VfcGF0dGVybnMgPSBmdW5jdGlvbih3aGl0ZXNwYWNlX2NoYXJzLCBuZXdsaW5lX2NoYXJzKSB7XG4gIHdoaXRlc3BhY2VfY2hhcnMgKz0gJ1xcXFx0ICc7XG4gIG5ld2xpbmVfY2hhcnMgKz0gJ1xcXFxuXFxcXHInO1xuXG4gIHRoaXMuX21hdGNoX3BhdHRlcm4gPSB0aGlzLl9pbnB1dC5nZXRfcmVnZXhwKFxuICAgICdbJyArIHdoaXRlc3BhY2VfY2hhcnMgKyBuZXdsaW5lX2NoYXJzICsgJ10rJywgdHJ1ZSk7XG4gIHRoaXMuX25ld2xpbmVfcmVnZXhwID0gdGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChcbiAgICAnXFxcXHJcXFxcbnxbJyArIG5ld2xpbmVfY2hhcnMgKyAnXScpO1xufTtcblxuV2hpdGVzcGFjZVBhdHRlcm4ucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5uZXdsaW5lX2NvdW50ID0gMDtcbiAgdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbiA9ICcnO1xuXG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5faW5wdXQucmVhZCh0aGlzLl9tYXRjaF9wYXR0ZXJuKTtcbiAgaWYgKHJlc3VsdGluZ19zdHJpbmcgPT09ICcgJykge1xuICAgIHRoaXMud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW4gPSAnICc7XG4gIH0gZWxzZSBpZiAocmVzdWx0aW5nX3N0cmluZykge1xuICAgIHZhciBtYXRjaGVzID0gdGhpcy5fX3NwbGl0KHRoaXMuX25ld2xpbmVfcmVnZXhwLCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICB0aGlzLm5ld2xpbmVfY291bnQgPSBtYXRjaGVzLmxlbmd0aCAtIDE7XG4gICAgdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbiA9IG1hdGNoZXNbdGhpcy5uZXdsaW5lX2NvdW50XTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRpbmdfc3RyaW5nO1xufTtcblxuV2hpdGVzcGFjZVBhdHRlcm4ucHJvdG90eXBlLm1hdGNoaW5nID0gZnVuY3Rpb24od2hpdGVzcGFjZV9jaGFycywgbmV3bGluZV9jaGFycykge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5fY3JlYXRlKCk7XG4gIHJlc3VsdC5fX3NldF93aGl0ZXNwYWNlX3BhdHRlcm5zKHdoaXRlc3BhY2VfY2hhcnMsIG5ld2xpbmVfY2hhcnMpO1xuICByZXN1bHQuX3VwZGF0ZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuV2hpdGVzcGFjZVBhdHRlcm4ucHJvdG90eXBlLl9jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBXaGl0ZXNwYWNlUGF0dGVybih0aGlzLl9pbnB1dCwgdGhpcyk7XG59O1xuXG5XaGl0ZXNwYWNlUGF0dGVybi5wcm90b3R5cGUuX19zcGxpdCA9IGZ1bmN0aW9uKHJlZ2V4cCwgaW5wdXRfc3RyaW5nKSB7XG4gIHJlZ2V4cC5sYXN0SW5kZXggPSAwO1xuICB2YXIgc3RhcnRfaW5kZXggPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBuZXh0X21hdGNoID0gcmVnZXhwLmV4ZWMoaW5wdXRfc3RyaW5nKTtcbiAgd2hpbGUgKG5leHRfbWF0Y2gpIHtcbiAgICByZXN1bHQucHVzaChpbnB1dF9zdHJpbmcuc3Vic3RyaW5nKHN0YXJ0X2luZGV4LCBuZXh0X21hdGNoLmluZGV4KSk7XG4gICAgc3RhcnRfaW5kZXggPSBuZXh0X21hdGNoLmluZGV4ICsgbmV4dF9tYXRjaFswXS5sZW5ndGg7XG4gICAgbmV4dF9tYXRjaCA9IHJlZ2V4cC5leGVjKGlucHV0X3N0cmluZyk7XG4gIH1cblxuICBpZiAoc3RhcnRfaW5kZXggPCBpbnB1dF9zdHJpbmcubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnB1c2goaW5wdXRfc3RyaW5nLnN1YnN0cmluZyhzdGFydF9pbmRleCwgaW5wdXRfc3RyaW5nLmxlbmd0aCkpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMuV2hpdGVzcGFjZVBhdHRlcm4gPSBXaGl0ZXNwYWNlUGF0dGVybjtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBPcHRpb25zID0gcmVxdWlyZSgnLi9vcHRpb25zJykuT3B0aW9ucztcbnZhciBPdXRwdXQgPSByZXF1aXJlKCcuLi9jb3JlL291dHB1dCcpLk91dHB1dDtcbnZhciBJbnB1dFNjYW5uZXIgPSByZXF1aXJlKCcuLi9jb3JlL2lucHV0c2Nhbm5lcicpLklucHV0U2Nhbm5lcjtcbnZhciBEaXJlY3RpdmVzID0gcmVxdWlyZSgnLi4vY29yZS9kaXJlY3RpdmVzJykuRGlyZWN0aXZlcztcblxudmFyIGRpcmVjdGl2ZXNfY29yZSA9IG5ldyBEaXJlY3RpdmVzKC9cXC9cXCovLCAvXFwqXFwvLyk7XG5cbnZhciBsaW5lQnJlYWsgPSAvXFxyXFxufFtcXHJcXG5dLztcbnZhciBhbGxMaW5lQnJlYWtzID0gL1xcclxcbnxbXFxyXFxuXS9nO1xuXG4vLyB0b2tlbml6ZXJcbnZhciB3aGl0ZXNwYWNlQ2hhciA9IC9cXHMvO1xudmFyIHdoaXRlc3BhY2VQYXR0ZXJuID0gLyg/Olxcc3xcXG4pKy9nO1xudmFyIGJsb2NrX2NvbW1lbnRfcGF0dGVybiA9IC9cXC9cXCooPzpbXFxzXFxTXSo/KSgoPzpcXCpcXC8pfCQpL2c7XG52YXIgY29tbWVudF9wYXR0ZXJuID0gL1xcL1xcLyg/OlteXFxuXFxyXFx1MjAyOFxcdTIwMjldKikvZztcblxuZnVuY3Rpb24gQmVhdXRpZmllcihzb3VyY2VfdGV4dCwgb3B0aW9ucykge1xuICB0aGlzLl9zb3VyY2VfdGV4dCA9IHNvdXJjZV90ZXh0IHx8ICcnO1xuICAvLyBBbGxvdyB0aGUgc2V0dGluZyBvZiBsYW5ndWFnZS9maWxlLXR5cGUgc3BlY2lmaWMgb3B0aW9uc1xuICAvLyB3aXRoIGluaGVyaXRhbmNlIG9mIG92ZXJhbGwgc2V0dGluZ3NcbiAgdGhpcy5fb3B0aW9ucyA9IG5ldyBPcHRpb25zKG9wdGlvbnMpO1xuICB0aGlzLl9jaCA9IG51bGw7XG4gIHRoaXMuX2lucHV0ID0gbnVsbDtcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQXQtcnVsZVxuICB0aGlzLk5FU1RFRF9BVF9SVUxFID0ge1xuICAgIFwicGFnZVwiOiB0cnVlLFxuICAgIFwiZm9udC1mYWNlXCI6IHRydWUsXG4gICAgXCJrZXlmcmFtZXNcIjogdHJ1ZSxcbiAgICAvLyBhbHNvIGluIENPTkRJVElPTkFMX0dST1VQX1JVTEUgYmVsb3dcbiAgICBcIm1lZGlhXCI6IHRydWUsXG4gICAgXCJzdXBwb3J0c1wiOiB0cnVlLFxuICAgIFwiZG9jdW1lbnRcIjogdHJ1ZVxuICB9O1xuICB0aGlzLkNPTkRJVElPTkFMX0dST1VQX1JVTEUgPSB7XG4gICAgXCJtZWRpYVwiOiB0cnVlLFxuICAgIFwic3VwcG9ydHNcIjogdHJ1ZSxcbiAgICBcImRvY3VtZW50XCI6IHRydWVcbiAgfTtcbiAgdGhpcy5OT05fU0VNSUNPTE9OX05FV0xJTkVfUFJPUEVSVFkgPSBbXG4gICAgXCJncmlkLXRlbXBsYXRlLWFyZWFzXCIsXG4gICAgXCJncmlkLXRlbXBsYXRlXCJcbiAgXTtcblxufVxuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5lYXRTdHJpbmcgPSBmdW5jdGlvbihlbmRDaGFycykge1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHRoaXMuX2NoID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICB3aGlsZSAodGhpcy5fY2gpIHtcbiAgICByZXN1bHQgKz0gdGhpcy5fY2g7XG4gICAgaWYgKHRoaXMuX2NoID09PSBcIlxcXFxcIikge1xuICAgICAgcmVzdWx0ICs9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICB9IGVsc2UgaWYgKGVuZENoYXJzLmluZGV4T2YodGhpcy5fY2gpICE9PSAtMSB8fCB0aGlzLl9jaCA9PT0gXCJcXG5cIikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX2NoID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBTa2lwcyBhbnkgd2hpdGUgc3BhY2UgaW4gdGhlIHNvdXJjZSB0ZXh0IGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4vLyBXaGVuIGFsbG93QXRMZWFzdE9uZU5ld0xpbmUgaXMgdHJ1ZSwgd2lsbCBvdXRwdXQgbmV3IGxpbmVzIGZvciBlYWNoXG4vLyBuZXdsaW5lIGNoYXJhY3RlciBmb3VuZDsgaWYgdGhlIHVzZXIgaGFzIHByZXNlcnZlX25ld2xpbmVzIG9mZiwgb25seVxuLy8gdGhlIGZpcnN0IG5ld2xpbmUgd2lsbCBiZSBvdXRwdXRcbkJlYXV0aWZpZXIucHJvdG90eXBlLmVhdFdoaXRlc3BhY2UgPSBmdW5jdGlvbihhbGxvd0F0TGVhc3RPbmVOZXdMaW5lKSB7XG4gIHZhciByZXN1bHQgPSB3aGl0ZXNwYWNlQ2hhci50ZXN0KHRoaXMuX2lucHV0LnBlZWsoKSk7XG4gIHZhciBuZXdsaW5lX2NvdW50ID0gMDtcbiAgd2hpbGUgKHdoaXRlc3BhY2VDaGFyLnRlc3QodGhpcy5faW5wdXQucGVlaygpKSkge1xuICAgIHRoaXMuX2NoID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgIGlmIChhbGxvd0F0TGVhc3RPbmVOZXdMaW5lICYmIHRoaXMuX2NoID09PSAnXFxuJykge1xuICAgICAgaWYgKG5ld2xpbmVfY291bnQgPT09IDAgfHwgbmV3bGluZV9jb3VudCA8IHRoaXMuX29wdGlvbnMubWF4X3ByZXNlcnZlX25ld2xpbmVzKSB7XG4gICAgICAgIG5ld2xpbmVfY291bnQrKztcbiAgICAgICAgdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIE5lc3RlZCBwc2V1ZG8tY2xhc3MgaWYgd2UgYXJlIGluc2lkZVJ1bGVcbi8vIGFuZCB0aGUgbmV4dCBzcGVjaWFsIGNoYXJhY3RlciBmb3VuZCBvcGVuc1xuLy8gYSBuZXcgYmxvY2tcbkJlYXV0aWZpZXIucHJvdG90eXBlLmZvdW5kTmVzdGVkUHNldWRvQ2xhc3MgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG9wZW5QYXJlbiA9IDA7XG4gIHZhciBpID0gMTtcbiAgdmFyIGNoID0gdGhpcy5faW5wdXQucGVlayhpKTtcbiAgd2hpbGUgKGNoKSB7XG4gICAgaWYgKGNoID09PSBcIntcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJygnKSB7XG4gICAgICAvLyBwc2V1ZG9jbGFzc2VzIGNhbiBjb250YWluICgpXG4gICAgICBvcGVuUGFyZW4gKz0gMTtcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnKScpIHtcbiAgICAgIGlmIChvcGVuUGFyZW4gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb3BlblBhcmVuIC09IDE7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCI7XCIgfHwgY2ggPT09IFwifVwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGkrKztcbiAgICBjaCA9IHRoaXMuX2lucHV0LnBlZWsoaSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUucHJpbnRfc3RyaW5nID0gZnVuY3Rpb24ob3V0cHV0X3N0cmluZykge1xuICB0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLl9pbmRlbnRMZXZlbCk7XG4gIHRoaXMuX291dHB1dC5ub25fYnJlYWtpbmdfc3BhY2UgPSB0cnVlO1xuICB0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKG91dHB1dF9zdHJpbmcpO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUucHJlc2VydmVTaW5nbGVTcGFjZSA9IGZ1bmN0aW9uKGlzQWZ0ZXJTcGFjZSkge1xuICBpZiAoaXNBZnRlclNwYWNlKSB7XG4gICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gIH1cbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmluZGVudCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9pbmRlbnRMZXZlbCsrO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUub3V0ZGVudCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5faW5kZW50TGV2ZWwgPiAwKSB7XG4gICAgdGhpcy5faW5kZW50TGV2ZWwtLTtcbiAgfVxufTtcblxuLypfX19fX19fX19fX19fX19fX19fX18tLS0tLS0tLS0tLS0tLS0tLS0tLV9fX19fX19fX19fX19fX19fX19fXyovXG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmJlYXV0aWZ5ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9vcHRpb25zLmRpc2FibGVkKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZV90ZXh0O1xuICB9XG5cbiAgdmFyIHNvdXJjZV90ZXh0ID0gdGhpcy5fc291cmNlX3RleHQ7XG4gIHZhciBlb2wgPSB0aGlzLl9vcHRpb25zLmVvbDtcbiAgaWYgKGVvbCA9PT0gJ2F1dG8nKSB7XG4gICAgZW9sID0gJ1xcbic7XG4gICAgaWYgKHNvdXJjZV90ZXh0ICYmIGxpbmVCcmVhay50ZXN0KHNvdXJjZV90ZXh0IHx8ICcnKSkge1xuICAgICAgZW9sID0gc291cmNlX3RleHQubWF0Y2gobGluZUJyZWFrKVswXTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIEhBQ0s6IG5ld2xpbmUgcGFyc2luZyBpbmNvbnNpc3RlbnQuIFRoaXMgYnJ1dGUgZm9yY2Ugbm9ybWFsaXplcyB0aGUgdGhpcy5faW5wdXQuXG4gIHNvdXJjZV90ZXh0ID0gc291cmNlX3RleHQucmVwbGFjZShhbGxMaW5lQnJlYWtzLCAnXFxuJyk7XG5cbiAgLy8gcmVzZXRcbiAgdmFyIGJhc2VJbmRlbnRTdHJpbmcgPSBzb3VyY2VfdGV4dC5tYXRjaCgvXltcXHQgXSovKVswXTtcblxuICB0aGlzLl9vdXRwdXQgPSBuZXcgT3V0cHV0KHRoaXMuX29wdGlvbnMsIGJhc2VJbmRlbnRTdHJpbmcpO1xuICB0aGlzLl9pbnB1dCA9IG5ldyBJbnB1dFNjYW5uZXIoc291cmNlX3RleHQpO1xuICB0aGlzLl9pbmRlbnRMZXZlbCA9IDA7XG4gIHRoaXMuX25lc3RlZExldmVsID0gMDtcblxuICB0aGlzLl9jaCA9IG51bGw7XG4gIHZhciBwYXJlbkxldmVsID0gMDtcblxuICB2YXIgaW5zaWRlUnVsZSA9IGZhbHNlO1xuICAvLyBUaGlzIGlzIHRoZSB2YWx1ZSBzaWRlIG9mIGEgcHJvcGVydHkgdmFsdWUgcGFpciAoYmx1ZSBpbiB0aGUgZm9sbG93aW5nIGV4KVxuICAvLyBsYWJlbCB7IGNvbnRlbnQ6IGJsdWUgfVxuICB2YXIgaW5zaWRlUHJvcGVydHlWYWx1ZSA9IGZhbHNlO1xuICB2YXIgZW50ZXJpbmdDb25kaXRpb25hbEdyb3VwID0gZmFsc2U7XG4gIHZhciBpbnNpZGVOb25OZXN0ZWRBdFJ1bGUgPSBmYWxzZTtcbiAgdmFyIGluc2lkZVNjc3NNYXAgPSBmYWxzZTtcbiAgdmFyIHRvcENoYXJhY3RlciA9IHRoaXMuX2NoO1xuICB2YXIgaW5zaWRlTm9uU2VtaUNvbG9uVmFsdWVzID0gZmFsc2U7XG4gIHZhciB3aGl0ZXNwYWNlO1xuICB2YXIgaXNBZnRlclNwYWNlO1xuICB2YXIgcHJldmlvdXNfY2g7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB3aGl0ZXNwYWNlID0gdGhpcy5faW5wdXQucmVhZCh3aGl0ZXNwYWNlUGF0dGVybik7XG4gICAgaXNBZnRlclNwYWNlID0gd2hpdGVzcGFjZSAhPT0gJyc7XG4gICAgcHJldmlvdXNfY2ggPSB0b3BDaGFyYWN0ZXI7XG4gICAgdGhpcy5fY2ggPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgaWYgKHRoaXMuX2NoID09PSAnXFxcXCcgJiYgdGhpcy5faW5wdXQuaGFzTmV4dCgpKSB7XG4gICAgICB0aGlzLl9jaCArPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgfVxuICAgIHRvcENoYXJhY3RlciA9IHRoaXMuX2NoO1xuXG4gICAgaWYgKCF0aGlzLl9jaCkge1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gJy8nICYmIHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gJyonKSB7XG4gICAgICAvLyAvKiBjc3MgY29tbWVudCAqL1xuICAgICAgLy8gQWx3YXlzIHN0YXJ0IGJsb2NrIGNvbW1lbnRzIG9uIGEgbmV3IGxpbmUuXG4gICAgICAvLyBUaGlzIGhhbmRsZXMgc2NlbmFyaW9zIHdoZXJlIGEgYmxvY2sgY29tbWVudCBpbW1lZGlhdGVseVxuICAgICAgLy8gZm9sbG93cyBhIHByb3BlcnR5IGRlZmluaXRpb24gb24gdGhlIHNhbWUgbGluZSBvciB3aGVyZVxuICAgICAgLy8gbWluaWZpZWQgY29kZSBpcyBiZWluZyBiZWF1dGlmaWVkLlxuICAgICAgdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpO1xuICAgICAgdGhpcy5faW5wdXQuYmFjaygpO1xuXG4gICAgICB2YXIgY29tbWVudCA9IHRoaXMuX2lucHV0LnJlYWQoYmxvY2tfY29tbWVudF9wYXR0ZXJuKTtcblxuICAgICAgLy8gSGFuZGxlIGlnbm9yZSBkaXJlY3RpdmVcbiAgICAgIHZhciBkaXJlY3RpdmVzID0gZGlyZWN0aXZlc19jb3JlLmdldF9kaXJlY3RpdmVzKGNvbW1lbnQpO1xuICAgICAgaWYgKGRpcmVjdGl2ZXMgJiYgZGlyZWN0aXZlcy5pZ25vcmUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgY29tbWVudCArPSBkaXJlY3RpdmVzX2NvcmUucmVhZElnbm9yZWQodGhpcy5faW5wdXQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByaW50X3N0cmluZyhjb21tZW50KTtcblxuICAgICAgLy8gRW5zdXJlcyBhbnkgbmV3IGxpbmVzIGZvbGxvd2luZyB0aGUgY29tbWVudCBhcmUgcHJlc2VydmVkXG4gICAgICB0aGlzLmVhdFdoaXRlc3BhY2UodHJ1ZSk7XG5cbiAgICAgIC8vIEJsb2NrIGNvbW1lbnRzIGFyZSBmb2xsb3dlZCBieSBhIG5ldyBsaW5lIHNvIHRoZXkgZG9uJ3RcbiAgICAgIC8vIHNoYXJlIGEgbGluZSB3aXRoIG90aGVyIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnLycgJiYgdGhpcy5faW5wdXQucGVlaygpID09PSAnLycpIHtcbiAgICAgIC8vIC8vIHNpbmdsZSBsaW5lIGNvbW1lbnRcbiAgICAgIC8vIFByZXNlcnZlcyB0aGUgc3BhY2UgYmVmb3JlIGEgY29tbWVudFxuICAgICAgLy8gb24gdGhlIHNhbWUgbGluZSBhcyBhIHJ1bGVcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgdGhpcy5faW5wdXQuYmFjaygpO1xuICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5faW5wdXQucmVhZChjb21tZW50X3BhdHRlcm4pKTtcblxuICAgICAgLy8gRW5zdXJlcyBhbnkgbmV3IGxpbmVzIGZvbGxvd2luZyB0aGUgY29tbWVudCBhcmUgcHJlc2VydmVkXG4gICAgICB0aGlzLmVhdFdoaXRlc3BhY2UodHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gJyQnKSB7XG4gICAgICB0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoaXNBZnRlclNwYWNlKTtcblxuICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuXG4gICAgICAvLyBzdHJpcCB0cmFpbGluZyBzcGFjZSwgaWYgcHJlc2VudCwgZm9yIGhhc2ggcHJvcGVydHkgY2hlY2tzXG4gICAgICB2YXIgdmFyaWFibGUgPSB0aGlzLl9pbnB1dC5wZWVrVW50aWxBZnRlcigvWzogLDt7fSgpW1xcXVxcLz0nXCJdL2cpO1xuXG4gICAgICBpZiAodmFyaWFibGUubWF0Y2goL1sgOl0kLykpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBhIHZhcmlhYmxlIG9yIHBzZXVkby1jbGFzcywgYWRkIGl0IGFuZCBpbnNlcnQgb25lIHNwYWNlIGJlZm9yZSBjb250aW51aW5nXG4gICAgICAgIHZhcmlhYmxlID0gdGhpcy5lYXRTdHJpbmcoXCI6IFwiKS5yZXBsYWNlKC9cXHMkLywgJycpO1xuICAgICAgICB0aGlzLnByaW50X3N0cmluZyh2YXJpYWJsZSk7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlLnJlcGxhY2UoL1xccyQvLCAnJyk7XG5cbiAgICAgIC8vIG1pZ2h0IGJlIHNhc3MgdmFyaWFibGVcbiAgICAgIGlmIChwYXJlbkxldmVsID09PSAwICYmIHZhcmlhYmxlLmluZGV4T2YoJzonKSAhPT0gLTEpIHtcbiAgICAgICAgaW5zaWRlUHJvcGVydHlWYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5kZW50KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gJ0AnKSB7XG4gICAgICB0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoaXNBZnRlclNwYWNlKTtcblxuICAgICAgLy8gZGVhbCB3aXRoIGxlc3MgcHJvcGVydHkgbWl4aW5zIEB7Li4ufVxuICAgICAgaWYgKHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gJ3snKSB7XG4gICAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoICsgdGhpcy5lYXRTdHJpbmcoJ30nKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7XG5cbiAgICAgICAgLy8gc3RyaXAgdHJhaWxpbmcgc3BhY2UsIGlmIHByZXNlbnQsIGZvciBoYXNoIHByb3BlcnR5IGNoZWNrc1xuICAgICAgICB2YXIgdmFyaWFibGVPclJ1bGUgPSB0aGlzLl9pbnB1dC5wZWVrVW50aWxBZnRlcigvWzogLDt7fSgpW1xcXVxcLz0nXCJdL2cpO1xuXG4gICAgICAgIGlmICh2YXJpYWJsZU9yUnVsZS5tYXRjaCgvWyA6XSQvKSkge1xuICAgICAgICAgIC8vIHdlIGhhdmUgYSB2YXJpYWJsZSBvciBwc2V1ZG8tY2xhc3MsIGFkZCBpdCBhbmQgaW5zZXJ0IG9uZSBzcGFjZSBiZWZvcmUgY29udGludWluZ1xuICAgICAgICAgIHZhcmlhYmxlT3JSdWxlID0gdGhpcy5lYXRTdHJpbmcoXCI6IFwiKS5yZXBsYWNlKC9cXHMkLywgJycpO1xuICAgICAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHZhcmlhYmxlT3JSdWxlKTtcbiAgICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhcmlhYmxlT3JSdWxlID0gdmFyaWFibGVPclJ1bGUucmVwbGFjZSgvXFxzJC8sICcnKTtcblxuICAgICAgICAvLyBtaWdodCBiZSBsZXNzIHZhcmlhYmxlXG4gICAgICAgIGlmIChwYXJlbkxldmVsID09PSAwICYmIHZhcmlhYmxlT3JSdWxlLmluZGV4T2YoJzonKSAhPT0gLTEpIHtcbiAgICAgICAgICBpbnNpZGVQcm9wZXJ0eVZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmluZGVudCgpO1xuXG4gICAgICAgICAgLy8gbWlnaHQgYmUgYSBuZXN0aW5nIGF0LXJ1bGVcbiAgICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZU9yUnVsZSBpbiB0aGlzLk5FU1RFRF9BVF9SVUxFKSB7XG4gICAgICAgICAgdGhpcy5fbmVzdGVkTGV2ZWwgKz0gMTtcbiAgICAgICAgICBpZiAodmFyaWFibGVPclJ1bGUgaW4gdGhpcy5DT05ESVRJT05BTF9HUk9VUF9SVUxFKSB7XG4gICAgICAgICAgICBlbnRlcmluZ0NvbmRpdGlvbmFsR3JvdXAgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIG1pZ2h0IGJlIGEgbm9uLW5lc3RlZCBhdC1ydWxlXG4gICAgICAgIH0gZWxzZSBpZiAocGFyZW5MZXZlbCA9PT0gMCAmJiAhaW5zaWRlUHJvcGVydHlWYWx1ZSkge1xuICAgICAgICAgIGluc2lkZU5vbk5lc3RlZEF0UnVsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnIycgJiYgdGhpcy5faW5wdXQucGVlaygpID09PSAneycpIHtcbiAgICAgIHRoaXMucHJlc2VydmVTaW5nbGVTcGFjZShpc0FmdGVyU3BhY2UpO1xuICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2ggKyB0aGlzLmVhdFN0cmluZygnfScpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAneycpIHtcbiAgICAgIGlmIChpbnNpZGVQcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgIGluc2lkZVByb3BlcnR5VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vdXRkZW50KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIG5vbiBuZXN0ZWQgYXQgcnVsZSBiZWNvbWVzIG5lc3RlZFxuICAgICAgaW5zaWRlTm9uTmVzdGVkQXRSdWxlID0gZmFsc2U7XG5cbiAgICAgIC8vIHdoZW4gZW50ZXJpbmcgY29uZGl0aW9uYWwgZ3JvdXBzLCBvbmx5IHJ1bGVzZXRzIGFyZSBhbGxvd2VkXG4gICAgICBpZiAoZW50ZXJpbmdDb25kaXRpb25hbEdyb3VwKSB7XG4gICAgICAgIGVudGVyaW5nQ29uZGl0aW9uYWxHcm91cCA9IGZhbHNlO1xuICAgICAgICBpbnNpZGVSdWxlID0gKHRoaXMuX2luZGVudExldmVsID49IHRoaXMuX25lc3RlZExldmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSwgZGVjbGFyYXRpb25zIGFyZSBhbHNvIGFsbG93ZWRcbiAgICAgICAgaW5zaWRlUnVsZSA9ICh0aGlzLl9pbmRlbnRMZXZlbCA+PSB0aGlzLl9uZXN0ZWRMZXZlbCAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX29wdGlvbnMubmV3bGluZV9iZXR3ZWVuX3J1bGVzICYmIGluc2lkZVJ1bGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX291dHB1dC5wcmV2aW91c19saW5lICYmIHRoaXMuX291dHB1dC5wcmV2aW91c19saW5lLml0ZW0oLTEpICE9PSAneycpIHtcbiAgICAgICAgICB0aGlzLl9vdXRwdXQuZW5zdXJlX2VtcHR5X2xpbmVfYWJvdmUoJy8nLCAnLCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuXG4gICAgICAvLyBUaGUgZGlmZmVyZW5jZSBpbiBwcmludF9zdHJpbmcgYW5kIGluZGVudCBvcmRlciBpcyBuZWNlc3NhcnkgdG8gaW5kZW50IHRoZSAneycgY29ycmVjdGx5XG4gICAgICBpZiAodGhpcy5fb3B0aW9ucy5icmFjZV9zdHlsZSA9PT0gJ2V4cGFuZCcpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpO1xuICAgICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7XG4gICAgICAgIHRoaXMuaW5kZW50KCk7XG4gICAgICAgIHRoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuX2luZGVudExldmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluc2lkZSBtaXhpbiBhbmQgZmlyc3QgcGFyYW0gaXMgb2JqZWN0XG4gICAgICAgIGlmIChwcmV2aW91c19jaCA9PT0gJygnKSB7XG4gICAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzX2NoICE9PSAnLCcpIHtcbiAgICAgICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKHRydWUpO1xuICAgICAgdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fY2ggPT09ICd9Jykge1xuICAgICAgdGhpcy5vdXRkZW50KCk7XG4gICAgICB0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCk7XG4gICAgICBpZiAocHJldmlvdXNfY2ggPT09ICd7Jykge1xuICAgICAgICB0aGlzLl9vdXRwdXQudHJpbSh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc2lkZVByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgdGhpcy5vdXRkZW50KCk7XG4gICAgICAgIGluc2lkZVByb3BlcnR5VmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcbiAgICAgIGluc2lkZVJ1bGUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLl9uZXN0ZWRMZXZlbCkge1xuICAgICAgICB0aGlzLl9uZXN0ZWRMZXZlbC0tO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVhdFdoaXRlc3BhY2UodHJ1ZSk7XG4gICAgICB0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCk7XG5cbiAgICAgIGlmICh0aGlzLl9vcHRpb25zLm5ld2xpbmVfYmV0d2Vlbl9ydWxlcyAmJiAhdGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfYmxhbmtsaW5lKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lucHV0LnBlZWsoKSAhPT0gJ30nKSB7XG4gICAgICAgICAgdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gJyknKSB7XG4gICAgICAgIHRoaXMuX291dHB1dC50cmltKHRydWUpO1xuICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5icmFjZV9zdHlsZSA9PT0gXCJleHBhbmRcIikge1xuICAgICAgICAgIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSBcIjpcIikge1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuTk9OX1NFTUlDT0xPTl9ORVdMSU5FX1BST1BFUlRZLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dC5sb29rQmFjayh0aGlzLk5PTl9TRU1JQ09MT05fTkVXTElORV9QUk9QRVJUWVtpXSkpIHtcbiAgICAgICAgICBpbnNpZGVOb25TZW1pQ29sb25WYWx1ZXMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgoaW5zaWRlUnVsZSB8fCBlbnRlcmluZ0NvbmRpdGlvbmFsR3JvdXApICYmICEodGhpcy5faW5wdXQubG9va0JhY2soXCImXCIpIHx8IHRoaXMuZm91bmROZXN0ZWRQc2V1ZG9DbGFzcygpKSAmJiAhdGhpcy5faW5wdXQubG9va0JhY2soXCIoXCIpICYmICFpbnNpZGVOb25OZXN0ZWRBdFJ1bGUgJiYgcGFyZW5MZXZlbCA9PT0gMCkge1xuICAgICAgICAvLyAncHJvcGVydHk6IHZhbHVlJyBkZWxpbWl0ZXJcbiAgICAgICAgLy8gd2hpY2ggY291bGQgYmUgaW4gYSBjb25kaXRpb25hbCBncm91cCBxdWVyeVxuXG4gICAgICAgIHRoaXMucHJpbnRfc3RyaW5nKCc6Jyk7XG4gICAgICAgIGlmICghaW5zaWRlUHJvcGVydHlWYWx1ZSkge1xuICAgICAgICAgIGluc2lkZVByb3BlcnR5VmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZWF0V2hpdGVzcGFjZSh0cnVlKTtcbiAgICAgICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzYXNzL2xlc3MgcGFyZW50IHJlZmVyZW5jZSBkb24ndCB1c2UgYSBzcGFjZVxuICAgICAgICAvLyBzYXNzIG5lc3RlZCBwc2V1ZG8tY2xhc3MgZG9uJ3QgdXNlIGEgc3BhY2VcblxuICAgICAgICAvLyBwcmVzZXJ2ZSBzcGFjZSBiZWZvcmUgcHNldWRvY2xhc3Nlcy9wc2V1ZG9lbGVtZW50cywgYXMgaXQgbWVhbnMgXCJpbiBhbnkgY2hpbGRcIlxuICAgICAgICBpZiAodGhpcy5faW5wdXQubG9va0JhY2soXCIgXCIpKSB7XG4gICAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gXCI6XCIpIHtcbiAgICAgICAgICAvLyBwc2V1ZG8tZWxlbWVudFxuICAgICAgICAgIHRoaXMuX2NoID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgICAgIHRoaXMucHJpbnRfc3RyaW5nKFwiOjpcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcHNldWRvLWNsYXNzXG4gICAgICAgICAgdGhpcy5wcmludF9zdHJpbmcoJzonKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5fY2ggPT09ICdcIicgfHwgdGhpcy5fY2ggPT09ICdcXCcnKSB7XG4gICAgICB2YXIgcHJlc2VydmVRdW90ZVNwYWNlID0gcHJldmlvdXNfY2ggPT09ICdcIicgfHwgcHJldmlvdXNfY2ggPT09ICdcXCcnO1xuICAgICAgdGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKHByZXNlcnZlUXVvdGVTcGFjZSB8fCBpc0FmdGVyU3BhY2UpO1xuICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2ggKyB0aGlzLmVhdFN0cmluZyh0aGlzLl9jaCkpO1xuICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fY2ggPT09ICc7Jykge1xuICAgICAgaW5zaWRlTm9uU2VtaUNvbG9uVmFsdWVzID0gZmFsc2U7XG4gICAgICBpZiAocGFyZW5MZXZlbCA9PT0gMCkge1xuICAgICAgICBpZiAoaW5zaWRlUHJvcGVydHlWYWx1ZSkge1xuICAgICAgICAgIHRoaXMub3V0ZGVudCgpO1xuICAgICAgICAgIGluc2lkZVByb3BlcnR5VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbnNpZGVOb25OZXN0ZWRBdFJ1bGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuICAgICAgICB0aGlzLmVhdFdoaXRlc3BhY2UodHJ1ZSk7XG5cbiAgICAgICAgLy8gVGhpcyBtYWludGFpbnMgc2luZ2xlIGxpbmUgY29tbWVudHMgb24gdGhlIHNhbWVcbiAgICAgICAgLy8gbGluZS4gQmxvY2sgY29tbWVudHMgYXJlIGFsc28gYWZmZWN0ZWQsIGJ1dFxuICAgICAgICAvLyBhIG5ldyBsaW5lIGlzIGFsd2F5cyBvdXRwdXQgYmVmb3JlIG9uZSBpbnNpZGVcbiAgICAgICAgLy8gdGhhdCBzZWN0aW9uXG4gICAgICAgIGlmICh0aGlzLl9pbnB1dC5wZWVrKCkgIT09ICcvJykge1xuICAgICAgICAgIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuICAgICAgICB0aGlzLmVhdFdoaXRlc3BhY2UodHJ1ZSk7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5fY2ggPT09ICcoJykgeyAvLyBtYXkgYmUgYSB1cmxcbiAgICAgIGlmICh0aGlzLl9pbnB1dC5sb29rQmFjayhcInVybFwiKSkge1xuICAgICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7XG4gICAgICAgIHRoaXMuZWF0V2hpdGVzcGFjZSgpO1xuICAgICAgICBwYXJlbkxldmVsKys7XG4gICAgICAgIHRoaXMuaW5kZW50KCk7XG4gICAgICAgIHRoaXMuX2NoID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgICBpZiAodGhpcy5fY2ggPT09ICcpJyB8fCB0aGlzLl9jaCA9PT0gJ1wiJyB8fCB0aGlzLl9jaCA9PT0gJ1xcJycpIHtcbiAgICAgICAgICB0aGlzLl9pbnB1dC5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2gpIHtcbiAgICAgICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCArIHRoaXMuZWF0U3RyaW5nKCcpJykpO1xuICAgICAgICAgIGlmIChwYXJlbkxldmVsKSB7XG4gICAgICAgICAgICBwYXJlbkxldmVsLS07XG4gICAgICAgICAgICB0aGlzLm91dGRlbnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBzcGFjZV9uZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuX2lucHV0Lmxvb2tCYWNrKFwid2l0aFwiKSkge1xuICAgICAgICAgIC8vIGxvb2sgYmFjayBpcyBub3QgYW4gYWNjdXJhdGUgc29sdXRpb24sIHdlIG5lZWQgdG9rZW5zIHRvIGNvbmZpcm0gd2l0aG91dCB3aGl0ZXNwYWNlc1xuICAgICAgICAgIHNwYWNlX25lZWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKGlzQWZ0ZXJTcGFjZSB8fCBzcGFjZV9uZWVkZWQpO1xuICAgICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7XG5cbiAgICAgICAgLy8gaGFuZGxlIHNjc3Mvc2FzcyBtYXBcbiAgICAgICAgaWYgKGluc2lkZVByb3BlcnR5VmFsdWUgJiYgcHJldmlvdXNfY2ggPT09IFwiJFwiICYmIHRoaXMuX29wdGlvbnMuc2VsZWN0b3Jfc2VwYXJhdG9yX25ld2xpbmUpIHtcbiAgICAgICAgICB0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCk7XG4gICAgICAgICAgaW5zaWRlU2Nzc01hcCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKCk7XG4gICAgICAgICAgcGFyZW5MZXZlbCsrO1xuICAgICAgICAgIHRoaXMuaW5kZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnKScpIHtcbiAgICAgIGlmIChwYXJlbkxldmVsKSB7XG4gICAgICAgIHBhcmVuTGV2ZWwtLTtcbiAgICAgICAgdGhpcy5vdXRkZW50KCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5zaWRlU2Nzc01hcCAmJiB0aGlzLl9pbnB1dC5wZWVrKCkgPT09IFwiO1wiICYmIHRoaXMuX29wdGlvbnMuc2VsZWN0b3Jfc2VwYXJhdG9yX25ld2xpbmUpIHtcbiAgICAgICAgaW5zaWRlU2Nzc01hcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm91dGRlbnQoKTtcbiAgICAgICAgdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fY2ggPT09ICcsJykge1xuICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKHRydWUpO1xuICAgICAgaWYgKHRoaXMuX29wdGlvbnMuc2VsZWN0b3Jfc2VwYXJhdG9yX25ld2xpbmUgJiYgKCFpbnNpZGVQcm9wZXJ0eVZhbHVlIHx8IGluc2lkZVNjc3NNYXApICYmIHBhcmVuTGV2ZWwgPT09IDAgJiYgIWluc2lkZU5vbk5lc3RlZEF0UnVsZSkge1xuICAgICAgICB0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCh0aGlzLl9jaCA9PT0gJz4nIHx8IHRoaXMuX2NoID09PSAnKycgfHwgdGhpcy5fY2ggPT09ICd+JykgJiYgIWluc2lkZVByb3BlcnR5VmFsdWUgJiYgcGFyZW5MZXZlbCA9PT0gMCkge1xuICAgICAgLy9oYW5kbGUgY29tYmluYXRvciBzcGFjaW5nXG4gICAgICBpZiAodGhpcy5fb3B0aW9ucy5zcGFjZV9hcm91bmRfY29tYmluYXRvcikge1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcbiAgICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKCk7XG4gICAgICAgIC8vIHNxdWFzaCBleHRyYSB3aGl0ZXNwYWNlXG4gICAgICAgIGlmICh0aGlzLl9jaCAmJiB3aGl0ZXNwYWNlQ2hhci50ZXN0KHRoaXMuX2NoKSkge1xuICAgICAgICAgIHRoaXMuX2NoID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnXScpIHtcbiAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnWycpIHtcbiAgICAgIHRoaXMucHJlc2VydmVTaW5nbGVTcGFjZShpc0FmdGVyU3BhY2UpO1xuICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fY2ggPT09ICc9JykgeyAvLyBubyB3aGl0ZXNwYWNlIGJlZm9yZSBvciBhZnRlclxuICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKCk7XG4gICAgICB0aGlzLnByaW50X3N0cmluZygnPScpO1xuICAgICAgaWYgKHdoaXRlc3BhY2VDaGFyLnRlc3QodGhpcy5fY2gpKSB7XG4gICAgICAgIHRoaXMuX2NoID0gJyc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gJyEnICYmICF0aGlzLl9pbnB1dC5sb29rQmFjayhcIlxcXFxcIikpIHsgLy8gIWltcG9ydGFudFxuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmVzZXJ2ZUFmdGVyU3BhY2UgPSBwcmV2aW91c19jaCA9PT0gJ1wiJyB8fCBwcmV2aW91c19jaCA9PT0gJ1xcJyc7XG4gICAgICB0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UocHJlc2VydmVBZnRlclNwYWNlIHx8IGlzQWZ0ZXJTcGFjZSk7XG4gICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7XG5cbiAgICAgIGlmICghdGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfbmV3bGluZSgpICYmIHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gJ1xcbicgJiYgaW5zaWRlTm9uU2VtaUNvbG9uVmFsdWVzKSB7XG4gICAgICAgIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgc3dlZXRDb2RlID0gdGhpcy5fb3V0cHV0LmdldF9jb2RlKGVvbCk7XG5cbiAgcmV0dXJuIHN3ZWV0Q29kZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLkJlYXV0aWZpZXIgPSBCZWF1dGlmaWVyO1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEJlYXV0aWZpZXIgPSByZXF1aXJlKCcuL2JlYXV0aWZpZXInKS5CZWF1dGlmaWVyLFxuICBPcHRpb25zID0gcmVxdWlyZSgnLi9vcHRpb25zJykuT3B0aW9ucztcblxuZnVuY3Rpb24gY3NzX2JlYXV0aWZ5KHNvdXJjZV90ZXh0LCBvcHRpb25zKSB7XG4gIHZhciBiZWF1dGlmaWVyID0gbmV3IEJlYXV0aWZpZXIoc291cmNlX3RleHQsIG9wdGlvbnMpO1xuICByZXR1cm4gYmVhdXRpZmllci5iZWF1dGlmeSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNzc19iZWF1dGlmeTtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgT3B0aW9ucygpO1xufTtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBCYXNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2NvcmUvb3B0aW9ucycpLk9wdGlvbnM7XG5cbmZ1bmN0aW9uIE9wdGlvbnMob3B0aW9ucykge1xuICBCYXNlT3B0aW9ucy5jYWxsKHRoaXMsIG9wdGlvbnMsICdjc3MnKTtcblxuICB0aGlzLnNlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ3NlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lJywgdHJ1ZSk7XG4gIHRoaXMubmV3bGluZV9iZXR3ZWVuX3J1bGVzID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ25ld2xpbmVfYmV0d2Vlbl9ydWxlcycsIHRydWUpO1xuICB2YXIgc3BhY2VfYXJvdW5kX3NlbGVjdG9yX3NlcGFyYXRvciA9IHRoaXMuX2dldF9ib29sZWFuKCdzcGFjZV9hcm91bmRfc2VsZWN0b3Jfc2VwYXJhdG9yJyk7XG4gIHRoaXMuc3BhY2VfYXJvdW5kX2NvbWJpbmF0b3IgPSB0aGlzLl9nZXRfYm9vbGVhbignc3BhY2VfYXJvdW5kX2NvbWJpbmF0b3InKSB8fCBzcGFjZV9hcm91bmRfc2VsZWN0b3Jfc2VwYXJhdG9yO1xuXG4gIHZhciBicmFjZV9zdHlsZV9zcGxpdCA9IHRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgnYnJhY2Vfc3R5bGUnLCBbJ2NvbGxhcHNlJywgJ2V4cGFuZCcsICdlbmQtZXhwYW5kJywgJ25vbmUnLCAncHJlc2VydmUtaW5saW5lJ10pO1xuICB0aGlzLmJyYWNlX3N0eWxlID0gJ2NvbGxhcHNlJztcbiAgZm9yICh2YXIgYnMgPSAwOyBicyA8IGJyYWNlX3N0eWxlX3NwbGl0Lmxlbmd0aDsgYnMrKykge1xuICAgIGlmIChicmFjZV9zdHlsZV9zcGxpdFtic10gIT09ICdleHBhbmQnKSB7XG4gICAgICAvLyBkZWZhdWx0IHRvIGNvbGxhcHNlLCBhcyBvbmx5IGNvbGxhcHNlfGV4cGFuZCBpcyBpbXBsZW1lbnRlZCBmb3Igbm93XG4gICAgICB0aGlzLmJyYWNlX3N0eWxlID0gJ2NvbGxhcHNlJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5icmFjZV9zdHlsZSA9IGJyYWNlX3N0eWxlX3NwbGl0W2JzXTtcbiAgICB9XG4gIH1cbn1cbk9wdGlvbnMucHJvdG90eXBlID0gbmV3IEJhc2VPcHRpb25zKCk7XG5cblxuXG5tb2R1bGUuZXhwb3J0cy5PcHRpb25zID0gT3B0aW9ucztcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBPcHRpb25zID0gcmVxdWlyZSgnLi4vaHRtbC9vcHRpb25zJykuT3B0aW9ucztcbnZhciBPdXRwdXQgPSByZXF1aXJlKCcuLi9jb3JlL291dHB1dCcpLk91dHB1dDtcbnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi9odG1sL3Rva2VuaXplcicpLlRva2VuaXplcjtcbnZhciBUT0tFTiA9IHJlcXVpcmUoJy4uL2h0bWwvdG9rZW5pemVyJykuVE9LRU47XG5cbnZhciBsaW5lQnJlYWsgPSAvXFxyXFxufFtcXHJcXG5dLztcbnZhciBhbGxMaW5lQnJlYWtzID0gL1xcclxcbnxbXFxyXFxuXS9nO1xuXG52YXIgUHJpbnRlciA9IGZ1bmN0aW9uKG9wdGlvbnMsIGJhc2VfaW5kZW50X3N0cmluZykgeyAvL2hhbmRsZXMgaW5wdXQvb3V0cHV0IGFuZCBzb21lIG90aGVyIHByaW50aW5nIGZ1bmN0aW9uc1xuXG4gIHRoaXMuaW5kZW50X2xldmVsID0gMDtcbiAgdGhpcy5hbGlnbm1lbnRfc2l6ZSA9IDA7XG4gIHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzID0gb3B0aW9ucy5tYXhfcHJlc2VydmVfbmV3bGluZXM7XG4gIHRoaXMucHJlc2VydmVfbmV3bGluZXMgPSBvcHRpb25zLnByZXNlcnZlX25ld2xpbmVzO1xuXG4gIHRoaXMuX291dHB1dCA9IG5ldyBPdXRwdXQob3B0aW9ucywgYmFzZV9pbmRlbnRfc3RyaW5nKTtcblxufTtcblxuUHJpbnRlci5wcm90b3R5cGUuY3VycmVudF9saW5lX2hhc19tYXRjaCA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgcmV0dXJuIHRoaXMuX291dHB1dC5jdXJyZW50X2xpbmUuaGFzX21hdGNoKHBhdHRlcm4pO1xufTtcblxuUHJpbnRlci5wcm90b3R5cGUuc2V0X3NwYWNlX2JlZm9yZV90b2tlbiA9IGZ1bmN0aW9uKHZhbHVlLCBub25fYnJlYWtpbmcpIHtcbiAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHZhbHVlO1xuICB0aGlzLl9vdXRwdXQubm9uX2JyZWFraW5nX3NwYWNlID0gbm9uX2JyZWFraW5nO1xufTtcblxuUHJpbnRlci5wcm90b3R5cGUuc2V0X3dyYXBfcG9pbnQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fb3V0cHV0LnNldF9pbmRlbnQodGhpcy5pbmRlbnRfbGV2ZWwsIHRoaXMuYWxpZ25tZW50X3NpemUpO1xuICB0aGlzLl9vdXRwdXQuc2V0X3dyYXBfcG9pbnQoKTtcbn07XG5cblxuUHJpbnRlci5wcm90b3R5cGUuYWRkX3Jhd190b2tlbiA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gIHRoaXMuX291dHB1dC5hZGRfcmF3X3Rva2VuKHRva2VuKTtcbn07XG5cblByaW50ZXIucHJvdG90eXBlLnByaW50X3ByZXNlcnZlZF9uZXdsaW5lcyA9IGZ1bmN0aW9uKHJhd190b2tlbikge1xuICB2YXIgbmV3bGluZXMgPSAwO1xuICBpZiAocmF3X3Rva2VuLnR5cGUgIT09IFRPS0VOLlRFWFQgJiYgcmF3X3Rva2VuLnByZXZpb3VzLnR5cGUgIT09IFRPS0VOLlRFWFQpIHtcbiAgICBuZXdsaW5lcyA9IHJhd190b2tlbi5uZXdsaW5lcyA/IDEgOiAwO1xuICB9XG5cbiAgaWYgKHRoaXMucHJlc2VydmVfbmV3bGluZXMpIHtcbiAgICBuZXdsaW5lcyA9IHJhd190b2tlbi5uZXdsaW5lcyA8IHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzICsgMSA/IHJhd190b2tlbi5uZXdsaW5lcyA6IHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzICsgMTtcbiAgfVxuICBmb3IgKHZhciBuID0gMDsgbiA8IG5ld2xpbmVzOyBuKyspIHtcbiAgICB0aGlzLnByaW50X25ld2xpbmUobiA+IDApO1xuICB9XG5cbiAgcmV0dXJuIG5ld2xpbmVzICE9PSAwO1xufTtcblxuUHJpbnRlci5wcm90b3R5cGUudHJhdmVyc2Vfd2hpdGVzcGFjZSA9IGZ1bmN0aW9uKHJhd190b2tlbikge1xuICBpZiAocmF3X3Rva2VuLndoaXRlc3BhY2VfYmVmb3JlIHx8IHJhd190b2tlbi5uZXdsaW5lcykge1xuICAgIGlmICghdGhpcy5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXMocmF3X3Rva2VuKSkge1xuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cblByaW50ZXIucHJvdG90eXBlLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX291dHB1dC5wcmV2aW91c190b2tlbl93cmFwcGVkO1xufTtcblxuUHJpbnRlci5wcm90b3R5cGUucHJpbnRfbmV3bGluZSA9IGZ1bmN0aW9uKGZvcmNlKSB7XG4gIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoZm9yY2UpO1xufTtcblxuUHJpbnRlci5wcm90b3R5cGUucHJpbnRfdG9rZW4gPSBmdW5jdGlvbih0b2tlbikge1xuICBpZiAodG9rZW4udGV4dCkge1xuICAgIHRoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuaW5kZW50X2xldmVsLCB0aGlzLmFsaWdubWVudF9zaXplKTtcbiAgICB0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKHRva2VuLnRleHQpO1xuICB9XG59O1xuXG5QcmludGVyLnByb3RvdHlwZS5pbmRlbnQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5pbmRlbnRfbGV2ZWwrKztcbn07XG5cblByaW50ZXIucHJvdG90eXBlLmdldF9mdWxsX2luZGVudCA9IGZ1bmN0aW9uKGxldmVsKSB7XG4gIGxldmVsID0gdGhpcy5pbmRlbnRfbGV2ZWwgKyAobGV2ZWwgfHwgMCk7XG4gIGlmIChsZXZlbCA8IDEpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fb3V0cHV0LmdldF9pbmRlbnRfc3RyaW5nKGxldmVsKTtcbn07XG5cbnZhciBnZXRfdHlwZV9hdHRyaWJ1dGUgPSBmdW5jdGlvbihzdGFydF90b2tlbikge1xuICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgdmFyIHJhd190b2tlbiA9IHN0YXJ0X3Rva2VuLm5leHQ7XG5cbiAgLy8gU2VhcmNoIGF0dHJpYnV0ZXMgZm9yIGEgdHlwZSBhdHRyaWJ1dGVcbiAgd2hpbGUgKHJhd190b2tlbi50eXBlICE9PSBUT0tFTi5FT0YgJiYgc3RhcnRfdG9rZW4uY2xvc2VkICE9PSByYXdfdG9rZW4pIHtcbiAgICBpZiAocmF3X3Rva2VuLnR5cGUgPT09IFRPS0VOLkFUVFJJQlVURSAmJiByYXdfdG9rZW4udGV4dCA9PT0gJ3R5cGUnKSB7XG4gICAgICBpZiAocmF3X3Rva2VuLm5leHQgJiYgcmF3X3Rva2VuLm5leHQudHlwZSA9PT0gVE9LRU4uRVFVQUxTICYmXG4gICAgICAgIHJhd190b2tlbi5uZXh0Lm5leHQgJiYgcmF3X3Rva2VuLm5leHQubmV4dC50eXBlID09PSBUT0tFTi5WQUxVRSkge1xuICAgICAgICByZXN1bHQgPSByYXdfdG9rZW4ubmV4dC5uZXh0LnRleHQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmF3X3Rva2VuID0gcmF3X3Rva2VuLm5leHQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGdldF9jdXN0b21fYmVhdXRpZmllcl9uYW1lID0gZnVuY3Rpb24odGFnX2NoZWNrLCByYXdfdG9rZW4pIHtcbiAgdmFyIHR5cGVBdHRyaWJ1dGUgPSBudWxsO1xuICB2YXIgcmVzdWx0ID0gbnVsbDtcblxuICBpZiAoIXJhd190b2tlbi5jbG9zZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0YWdfY2hlY2sgPT09ICdzY3JpcHQnKSB7XG4gICAgdHlwZUF0dHJpYnV0ZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICB9IGVsc2UgaWYgKHRhZ19jaGVjayA9PT0gJ3N0eWxlJykge1xuICAgIHR5cGVBdHRyaWJ1dGUgPSAndGV4dC9jc3MnO1xuICB9XG5cbiAgdHlwZUF0dHJpYnV0ZSA9IGdldF90eXBlX2F0dHJpYnV0ZShyYXdfdG9rZW4pIHx8IHR5cGVBdHRyaWJ1dGU7XG5cbiAgLy8gRm9yIHNjcmlwdCBhbmQgc3R5bGUgdGFncyB0aGF0IGhhdmUgYSB0eXBlIGF0dHJpYnV0ZSwgb25seSBlbmFibGUgY3VzdG9tIGJlYXV0aWZpZXJzIGZvciBtYXRjaGluZyB2YWx1ZXNcbiAgLy8gRm9yIHRob3NlIHdpdGhvdXQgYSB0eXBlIGF0dHJpYnV0ZSB1c2UgZGVmYXVsdDtcbiAgaWYgKHR5cGVBdHRyaWJ1dGUuc2VhcmNoKCd0ZXh0L2NzcycpID4gLTEpIHtcbiAgICByZXN1bHQgPSAnY3NzJztcbiAgfSBlbHNlIGlmICh0eXBlQXR0cmlidXRlLnNlYXJjaCgvbW9kdWxlfCgodGV4dHxhcHBsaWNhdGlvbnxkb2pvKVxcLyh4LSk/KGphdmFzY3JpcHR8ZWNtYXNjcmlwdHxqc2NyaXB0fGxpdmVzY3JpcHR8KGxkXFwrKT9qc29ufG1ldGhvZHxhc3BlY3QpKS8pID4gLTEpIHtcbiAgICByZXN1bHQgPSAnamF2YXNjcmlwdCc7XG4gIH0gZWxzZSBpZiAodHlwZUF0dHJpYnV0ZS5zZWFyY2goLyh0ZXh0fGFwcGxpY2F0aW9ufGRvam8pXFwvKHgtKT8oaHRtbCkvKSA+IC0xKSB7XG4gICAgcmVzdWx0ID0gJ2h0bWwnO1xuICB9IGVsc2UgaWYgKHR5cGVBdHRyaWJ1dGUuc2VhcmNoKC90ZXN0XFwvbnVsbC8pID4gLTEpIHtcbiAgICAvLyBUZXN0IG9ubHkgbWltZS10eXBlIGZvciB0ZXN0aW5nIHRoZSBiZWF1dGlmaWVyIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYmVhdXRpZmluZyBmdW5jdGlvblxuICAgIHJlc3VsdCA9ICdudWxsJztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5mdW5jdGlvbiBpbl9hcnJheSh3aGF0LCBhcnIpIHtcbiAgcmV0dXJuIGFyci5pbmRleE9mKHdoYXQpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gVGFnRnJhbWUocGFyZW50LCBwYXJzZXJfdG9rZW4sIGluZGVudF9sZXZlbCkge1xuICB0aGlzLnBhcmVudCA9IHBhcmVudCB8fCBudWxsO1xuICB0aGlzLnRhZyA9IHBhcnNlcl90b2tlbiA/IHBhcnNlcl90b2tlbi50YWdfbmFtZSA6ICcnO1xuICB0aGlzLmluZGVudF9sZXZlbCA9IGluZGVudF9sZXZlbCB8fCAwO1xuICB0aGlzLnBhcnNlcl90b2tlbiA9IHBhcnNlcl90b2tlbiB8fCBudWxsO1xufVxuXG5mdW5jdGlvbiBUYWdTdGFjayhwcmludGVyKSB7XG4gIHRoaXMuX3ByaW50ZXIgPSBwcmludGVyO1xuICB0aGlzLl9jdXJyZW50X2ZyYW1lID0gbnVsbDtcbn1cblxuVGFnU3RhY2sucHJvdG90eXBlLmdldF9wYXJzZXJfdG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2N1cnJlbnRfZnJhbWUgPyB0aGlzLl9jdXJyZW50X2ZyYW1lLnBhcnNlcl90b2tlbiA6IG51bGw7XG59O1xuXG5UYWdTdGFjay5wcm90b3R5cGUucmVjb3JkX3RhZyA9IGZ1bmN0aW9uKHBhcnNlcl90b2tlbikgeyAvL2Z1bmN0aW9uIHRvIHJlY29yZCBhIHRhZyBhbmQgaXRzIHBhcmVudCBpbiB0aGlzLnRhZ3MgT2JqZWN0XG4gIHZhciBuZXdfZnJhbWUgPSBuZXcgVGFnRnJhbWUodGhpcy5fY3VycmVudF9mcmFtZSwgcGFyc2VyX3Rva2VuLCB0aGlzLl9wcmludGVyLmluZGVudF9sZXZlbCk7XG4gIHRoaXMuX2N1cnJlbnRfZnJhbWUgPSBuZXdfZnJhbWU7XG59O1xuXG5UYWdTdGFjay5wcm90b3R5cGUuX3RyeV9wb3BfZnJhbWUgPSBmdW5jdGlvbihmcmFtZSkgeyAvL2Z1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBvcGVuaW5nIHRhZyB0byB0aGUgY29ycmVzcG9uZGluZyBjbG9zZXJcbiAgdmFyIHBhcnNlcl90b2tlbiA9IG51bGw7XG5cbiAgaWYgKGZyYW1lKSB7XG4gICAgcGFyc2VyX3Rva2VuID0gZnJhbWUucGFyc2VyX3Rva2VuO1xuICAgIHRoaXMuX3ByaW50ZXIuaW5kZW50X2xldmVsID0gZnJhbWUuaW5kZW50X2xldmVsO1xuICAgIHRoaXMuX2N1cnJlbnRfZnJhbWUgPSBmcmFtZS5wYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gcGFyc2VyX3Rva2VuO1xufTtcblxuVGFnU3RhY2sucHJvdG90eXBlLl9nZXRfZnJhbWUgPSBmdW5jdGlvbih0YWdfbGlzdCwgc3RvcF9saXN0KSB7IC8vZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIG9wZW5pbmcgdGFnIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNsb3NlclxuICB2YXIgZnJhbWUgPSB0aGlzLl9jdXJyZW50X2ZyYW1lO1xuXG4gIHdoaWxlIChmcmFtZSkgeyAvL3RpbGwgd2UgcmVhY2ggJycgKHRoZSBpbml0aWFsIHZhbHVlKTtcbiAgICBpZiAodGFnX2xpc3QuaW5kZXhPZihmcmFtZS50YWcpICE9PSAtMSkgeyAvL2lmIHRoaXMgaXMgaXQgdXNlIGl0XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKHN0b3BfbGlzdCAmJiBzdG9wX2xpc3QuaW5kZXhPZihmcmFtZS50YWcpICE9PSAtMSkge1xuICAgICAgZnJhbWUgPSBudWxsO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZyYW1lID0gZnJhbWUucGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufTtcblxuVGFnU3RhY2sucHJvdG90eXBlLnRyeV9wb3AgPSBmdW5jdGlvbih0YWcsIHN0b3BfbGlzdCkgeyAvL2Z1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBvcGVuaW5nIHRhZyB0byB0aGUgY29ycmVzcG9uZGluZyBjbG9zZXJcbiAgdmFyIGZyYW1lID0gdGhpcy5fZ2V0X2ZyYW1lKFt0YWddLCBzdG9wX2xpc3QpO1xuICByZXR1cm4gdGhpcy5fdHJ5X3BvcF9mcmFtZShmcmFtZSk7XG59O1xuXG5UYWdTdGFjay5wcm90b3R5cGUuaW5kZW50X3RvX3RhZyA9IGZ1bmN0aW9uKHRhZ19saXN0KSB7XG4gIHZhciBmcmFtZSA9IHRoaXMuX2dldF9mcmFtZSh0YWdfbGlzdCk7XG4gIGlmIChmcmFtZSkge1xuICAgIHRoaXMuX3ByaW50ZXIuaW5kZW50X2xldmVsID0gZnJhbWUuaW5kZW50X2xldmVsO1xuICB9XG59O1xuXG5mdW5jdGlvbiBCZWF1dGlmaWVyKHNvdXJjZV90ZXh0LCBvcHRpb25zLCBqc19iZWF1dGlmeSwgY3NzX2JlYXV0aWZ5KSB7XG4gIC8vV3JhcHBlciBmdW5jdGlvbiB0byBpbnZva2UgYWxsIHRoZSBuZWNlc3NhcnkgY29uc3RydWN0b3JzIGFuZCBkZWFsIHdpdGggdGhlIG91dHB1dC5cbiAgdGhpcy5fc291cmNlX3RleHQgPSBzb3VyY2VfdGV4dCB8fCAnJztcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHRoaXMuX2pzX2JlYXV0aWZ5ID0ganNfYmVhdXRpZnk7XG4gIHRoaXMuX2Nzc19iZWF1dGlmeSA9IGNzc19iZWF1dGlmeTtcbiAgdGhpcy5fdGFnX3N0YWNrID0gbnVsbDtcblxuICAvLyBBbGxvdyB0aGUgc2V0dGluZyBvZiBsYW5ndWFnZS9maWxlLXR5cGUgc3BlY2lmaWMgb3B0aW9uc1xuICAvLyB3aXRoIGluaGVyaXRhbmNlIG9mIG92ZXJhbGwgc2V0dGluZ3NcbiAgdmFyIG9wdGlvbkh0bWwgPSBuZXcgT3B0aW9ucyhvcHRpb25zLCAnaHRtbCcpO1xuXG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25IdG1sO1xuXG4gIHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZSA9IHRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzLnN1YnN0cigwLCAnZm9yY2UnLmxlbmd0aCkgPT09ICdmb3JjZSc7XG4gIHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZV9leHBhbmRfbXVsdGlsaW5lID0gKHRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzID09PSAnZm9yY2UtZXhwYW5kLW11bHRpbGluZScpO1xuICB0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfYWxpZ25lZCA9ICh0aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcyA9PT0gJ2ZvcmNlLWFsaWduZWQnKTtcbiAgdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2FsaWduZWRfbXVsdGlwbGUgPSAodGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXMgPT09ICdhbGlnbmVkLW11bHRpcGxlJyk7XG4gIHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZSA9IHRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzLnN1YnN0cigwLCAncHJlc2VydmUnLmxlbmd0aCkgPT09ICdwcmVzZXJ2ZSc7XG4gIHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZV9hbGlnbmVkID0gKHRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzID09PSAncHJlc2VydmUtYWxpZ25lZCcpO1xufVxuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5iZWF1dGlmeSA9IGZ1bmN0aW9uKCkge1xuXG4gIC8vIGlmIGRpc2FibGVkLCByZXR1cm4gdGhlIGlucHV0IHVuY2hhbmdlZC5cbiAgaWYgKHRoaXMuX29wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlX3RleHQ7XG4gIH1cblxuICB2YXIgc291cmNlX3RleHQgPSB0aGlzLl9zb3VyY2VfdGV4dDtcbiAgdmFyIGVvbCA9IHRoaXMuX29wdGlvbnMuZW9sO1xuICBpZiAodGhpcy5fb3B0aW9ucy5lb2wgPT09ICdhdXRvJykge1xuICAgIGVvbCA9ICdcXG4nO1xuICAgIGlmIChzb3VyY2VfdGV4dCAmJiBsaW5lQnJlYWsudGVzdChzb3VyY2VfdGV4dCkpIHtcbiAgICAgIGVvbCA9IHNvdXJjZV90ZXh0Lm1hdGNoKGxpbmVCcmVhaylbMF07XG4gICAgfVxuICB9XG5cbiAgLy8gSEFDSzogbmV3bGluZSBwYXJzaW5nIGluY29uc2lzdGVudC4gVGhpcyBicnV0ZSBmb3JjZSBub3JtYWxpemVzIHRoZSBpbnB1dC5cbiAgc291cmNlX3RleHQgPSBzb3VyY2VfdGV4dC5yZXBsYWNlKGFsbExpbmVCcmVha3MsICdcXG4nKTtcblxuICB2YXIgYmFzZUluZGVudFN0cmluZyA9IHNvdXJjZV90ZXh0Lm1hdGNoKC9eW1xcdCBdKi8pWzBdO1xuXG4gIHZhciBsYXN0X3Rva2VuID0ge1xuICAgIHRleHQ6ICcnLFxuICAgIHR5cGU6ICcnXG4gIH07XG5cbiAgdmFyIGxhc3RfdGFnX3Rva2VuID0gbmV3IFRhZ09wZW5QYXJzZXJUb2tlbigpO1xuXG4gIHZhciBwcmludGVyID0gbmV3IFByaW50ZXIodGhpcy5fb3B0aW9ucywgYmFzZUluZGVudFN0cmluZyk7XG4gIHZhciB0b2tlbnMgPSBuZXcgVG9rZW5pemVyKHNvdXJjZV90ZXh0LCB0aGlzLl9vcHRpb25zKS50b2tlbml6ZSgpO1xuXG4gIHRoaXMuX3RhZ19zdGFjayA9IG5ldyBUYWdTdGFjayhwcmludGVyKTtcblxuICB2YXIgcGFyc2VyX3Rva2VuID0gbnVsbDtcbiAgdmFyIHJhd190b2tlbiA9IHRva2Vucy5uZXh0KCk7XG4gIHdoaWxlIChyYXdfdG9rZW4udHlwZSAhPT0gVE9LRU4uRU9GKSB7XG5cbiAgICBpZiAocmF3X3Rva2VuLnR5cGUgPT09IFRPS0VOLlRBR19PUEVOIHx8IHJhd190b2tlbi50eXBlID09PSBUT0tFTi5DT01NRU5UKSB7XG4gICAgICBwYXJzZXJfdG9rZW4gPSB0aGlzLl9oYW5kbGVfdGFnX29wZW4ocHJpbnRlciwgcmF3X3Rva2VuLCBsYXN0X3RhZ190b2tlbiwgbGFzdF90b2tlbiwgdG9rZW5zKTtcbiAgICAgIGxhc3RfdGFnX3Rva2VuID0gcGFyc2VyX3Rva2VuO1xuICAgIH0gZWxzZSBpZiAoKHJhd190b2tlbi50eXBlID09PSBUT0tFTi5BVFRSSUJVVEUgfHwgcmF3X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVRVUFMUyB8fCByYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uVkFMVUUpIHx8XG4gICAgICAocmF3X3Rva2VuLnR5cGUgPT09IFRPS0VOLlRFWFQgJiYgIWxhc3RfdGFnX3Rva2VuLnRhZ19jb21wbGV0ZSkpIHtcbiAgICAgIHBhcnNlcl90b2tlbiA9IHRoaXMuX2hhbmRsZV9pbnNpZGVfdGFnKHByaW50ZXIsIHJhd190b2tlbiwgbGFzdF90YWdfdG9rZW4sIGxhc3RfdG9rZW4pO1xuICAgIH0gZWxzZSBpZiAocmF3X3Rva2VuLnR5cGUgPT09IFRPS0VOLlRBR19DTE9TRSkge1xuICAgICAgcGFyc2VyX3Rva2VuID0gdGhpcy5faGFuZGxlX3RhZ19jbG9zZShwcmludGVyLCByYXdfdG9rZW4sIGxhc3RfdGFnX3Rva2VuKTtcbiAgICB9IGVsc2UgaWYgKHJhd190b2tlbi50eXBlID09PSBUT0tFTi5URVhUKSB7XG4gICAgICBwYXJzZXJfdG9rZW4gPSB0aGlzLl9oYW5kbGVfdGV4dChwcmludGVyLCByYXdfdG9rZW4sIGxhc3RfdGFnX3Rva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcy4gUHJpbnQgdGhlIHJhdyB0b2tlblxuICAgICAgcHJpbnRlci5hZGRfcmF3X3Rva2VuKHJhd190b2tlbik7XG4gICAgfVxuXG4gICAgbGFzdF90b2tlbiA9IHBhcnNlcl90b2tlbjtcblxuICAgIHJhd190b2tlbiA9IHRva2Vucy5uZXh0KCk7XG4gIH1cbiAgdmFyIHN3ZWV0X2NvZGUgPSBwcmludGVyLl9vdXRwdXQuZ2V0X2NvZGUoZW9sKTtcblxuICByZXR1cm4gc3dlZXRfY29kZTtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLl9oYW5kbGVfdGFnX2Nsb3NlID0gZnVuY3Rpb24ocHJpbnRlciwgcmF3X3Rva2VuLCBsYXN0X3RhZ190b2tlbikge1xuICB2YXIgcGFyc2VyX3Rva2VuID0ge1xuICAgIHRleHQ6IHJhd190b2tlbi50ZXh0LFxuICAgIHR5cGU6IHJhd190b2tlbi50eXBlXG4gIH07XG4gIHByaW50ZXIuYWxpZ25tZW50X3NpemUgPSAwO1xuICBsYXN0X3RhZ190b2tlbi50YWdfY29tcGxldGUgPSB0cnVlO1xuXG4gIHByaW50ZXIuc2V0X3NwYWNlX2JlZm9yZV90b2tlbihyYXdfdG9rZW4ubmV3bGluZXMgfHwgcmF3X3Rva2VuLndoaXRlc3BhY2VfYmVmb3JlICE9PSAnJywgdHJ1ZSk7XG4gIGlmIChsYXN0X3RhZ190b2tlbi5pc191bmZvcm1hdHRlZCkge1xuICAgIHByaW50ZXIuYWRkX3Jhd190b2tlbihyYXdfdG9rZW4pO1xuICB9IGVsc2Uge1xuICAgIGlmIChsYXN0X3RhZ190b2tlbi50YWdfc3RhcnRfY2hhciA9PT0gJzwnKSB7XG4gICAgICBwcmludGVyLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4ocmF3X3Rva2VuLnRleHRbMF0gPT09ICcvJywgdHJ1ZSk7IC8vIHNwYWNlIGJlZm9yZSAvPiwgbm8gc3BhY2UgYmVmb3JlID5cbiAgICAgIGlmICh0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfZXhwYW5kX211bHRpbGluZSAmJiBsYXN0X3RhZ190b2tlbi5oYXNfd3JhcHBlZF9hdHRycykge1xuICAgICAgICBwcmludGVyLnByaW50X25ld2xpbmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmludGVyLnByaW50X3Rva2VuKHJhd190b2tlbik7XG5cbiAgfVxuXG4gIGlmIChsYXN0X3RhZ190b2tlbi5pbmRlbnRfY29udGVudCAmJlxuICAgICEobGFzdF90YWdfdG9rZW4uaXNfdW5mb3JtYXR0ZWQgfHwgbGFzdF90YWdfdG9rZW4uaXNfY29udGVudF91bmZvcm1hdHRlZCkpIHtcbiAgICBwcmludGVyLmluZGVudCgpO1xuXG4gICAgLy8gb25seSBpbmRlbnQgb25jZSBwZXIgb3BlbmVkIHRhZ1xuICAgIGxhc3RfdGFnX3Rva2VuLmluZGVudF9jb250ZW50ID0gZmFsc2U7XG4gIH1cblxuICBpZiAoIWxhc3RfdGFnX3Rva2VuLmlzX2lubGluZV9lbGVtZW50ICYmXG4gICAgIShsYXN0X3RhZ190b2tlbi5pc191bmZvcm1hdHRlZCB8fCBsYXN0X3RhZ190b2tlbi5pc19jb250ZW50X3VuZm9ybWF0dGVkKSkge1xuICAgIHByaW50ZXIuc2V0X3dyYXBfcG9pbnQoKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZXJfdG9rZW47XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5faGFuZGxlX2luc2lkZV90YWcgPSBmdW5jdGlvbihwcmludGVyLCByYXdfdG9rZW4sIGxhc3RfdGFnX3Rva2VuLCBsYXN0X3Rva2VuKSB7XG4gIHZhciB3cmFwcGVkID0gbGFzdF90YWdfdG9rZW4uaGFzX3dyYXBwZWRfYXR0cnM7XG4gIHZhciBwYXJzZXJfdG9rZW4gPSB7XG4gICAgdGV4dDogcmF3X3Rva2VuLnRleHQsXG4gICAgdHlwZTogcmF3X3Rva2VuLnR5cGVcbiAgfTtcblxuICBwcmludGVyLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4ocmF3X3Rva2VuLm5ld2xpbmVzIHx8IHJhd190b2tlbi53aGl0ZXNwYWNlX2JlZm9yZSAhPT0gJycsIHRydWUpO1xuICBpZiAobGFzdF90YWdfdG9rZW4uaXNfdW5mb3JtYXR0ZWQpIHtcbiAgICBwcmludGVyLmFkZF9yYXdfdG9rZW4ocmF3X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChsYXN0X3RhZ190b2tlbi50YWdfc3RhcnRfY2hhciA9PT0gJ3snICYmIHJhd190b2tlbi50eXBlID09PSBUT0tFTi5URVhUKSB7XG4gICAgLy8gRm9yIHRoZSBpbnNpZGVzIG9mIGhhbmRsZWJhcnMgYWxsb3cgbmV3bGluZXMgb3IgYSBzaW5nbGUgc3BhY2UgYmV0d2VlbiBvcGVuIGFuZCBjb250ZW50c1xuICAgIGlmIChwcmludGVyLnByaW50X3ByZXNlcnZlZF9uZXdsaW5lcyhyYXdfdG9rZW4pKSB7XG4gICAgICByYXdfdG9rZW4ubmV3bGluZXMgPSAwO1xuICAgICAgcHJpbnRlci5hZGRfcmF3X3Rva2VuKHJhd190b2tlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50ZXIucHJpbnRfdG9rZW4ocmF3X3Rva2VuKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJhd190b2tlbi50eXBlID09PSBUT0tFTi5BVFRSSUJVVEUpIHtcbiAgICAgIHByaW50ZXIuc2V0X3NwYWNlX2JlZm9yZV90b2tlbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHJhd190b2tlbi50eXBlID09PSBUT0tFTi5FUVVBTFMpIHsgLy9ubyBzcGFjZSBiZWZvcmUgPVxuICAgICAgcHJpbnRlci5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHJhd190b2tlbi50eXBlID09PSBUT0tFTi5WQUxVRSAmJiByYXdfdG9rZW4ucHJldmlvdXMudHlwZSA9PT0gVE9LRU4uRVFVQUxTKSB7IC8vbm8gc3BhY2UgYmVmb3JlIHZhbHVlXG4gICAgICBwcmludGVyLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4oZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChyYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uQVRUUklCVVRFICYmIGxhc3RfdGFnX3Rva2VuLnRhZ19zdGFydF9jaGFyID09PSAnPCcpIHtcbiAgICAgIGlmICh0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmUgfHwgdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX3ByZXNlcnZlX2FsaWduZWQpIHtcbiAgICAgICAgcHJpbnRlci50cmF2ZXJzZV93aGl0ZXNwYWNlKHJhd190b2tlbik7XG4gICAgICAgIHdyYXBwZWQgPSB3cmFwcGVkIHx8IHJhd190b2tlbi5uZXdsaW5lcyAhPT0gMDtcbiAgICAgIH1cblxuICAgICAgLy8gV3JhcCBmb3IgJ2ZvcmNlJyBvcHRpb25zLCBhbmQgaWYgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGlzIGF0IGxlYXN0IHRoYXQgc3BlY2lmaWVkIGluICd3cmFwX2F0dHJpYnV0ZXNfbWluX2F0dHJzJzpcbiAgICAgIC8vIDEuIGFsd2F5cyB3cmFwIHRoZSBzZWNvbmQgYW5kIGJleW9uZCBhdHRyaWJ1dGVzXG4gICAgICAvLyAyLiB3cmFwIHRoZSBmaXJzdCBhdHRyaWJ1dGUgb25seSBpZiAnZm9yY2UtZXhwYW5kLW11bHRpbGluZScgaXMgc3BlY2lmaWVkXG4gICAgICBpZiAodGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlICYmXG4gICAgICAgIGxhc3RfdGFnX3Rva2VuLmF0dHJfY291bnQgPj0gdGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXNfbWluX2F0dHJzICYmXG4gICAgICAgIChsYXN0X3Rva2VuLnR5cGUgIT09IFRPS0VOLlRBR19PUEVOIHx8IC8vIGllLiBzZWNvbmQgYXR0cmlidXRlIGFuZCBiZXlvbmRcbiAgICAgICAgICB0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfZXhwYW5kX211bHRpbGluZSkpIHtcbiAgICAgICAgcHJpbnRlci5wcmludF9uZXdsaW5lKGZhbHNlKTtcbiAgICAgICAgd3JhcHBlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHByaW50ZXIucHJpbnRfdG9rZW4ocmF3X3Rva2VuKTtcbiAgICB3cmFwcGVkID0gd3JhcHBlZCB8fCBwcmludGVyLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQoKTtcbiAgICBsYXN0X3RhZ190b2tlbi5oYXNfd3JhcHBlZF9hdHRycyA9IHdyYXBwZWQ7XG4gIH1cbiAgcmV0dXJuIHBhcnNlcl90b2tlbjtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLl9oYW5kbGVfdGV4dCA9IGZ1bmN0aW9uKHByaW50ZXIsIHJhd190b2tlbiwgbGFzdF90YWdfdG9rZW4pIHtcbiAgdmFyIHBhcnNlcl90b2tlbiA9IHtcbiAgICB0ZXh0OiByYXdfdG9rZW4udGV4dCxcbiAgICB0eXBlOiAnVEtfQ09OVEVOVCdcbiAgfTtcbiAgaWYgKGxhc3RfdGFnX3Rva2VuLmN1c3RvbV9iZWF1dGlmaWVyX25hbWUpIHsgLy9jaGVjayBpZiB3ZSBuZWVkIHRvIGZvcm1hdCBqYXZhc2NyaXB0XG4gICAgdGhpcy5fcHJpbnRfY3VzdG9tX2JlYXRpZmllcl90ZXh0KHByaW50ZXIsIHJhd190b2tlbiwgbGFzdF90YWdfdG9rZW4pO1xuICB9IGVsc2UgaWYgKGxhc3RfdGFnX3Rva2VuLmlzX3VuZm9ybWF0dGVkIHx8IGxhc3RfdGFnX3Rva2VuLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpIHtcbiAgICBwcmludGVyLmFkZF9yYXdfdG9rZW4ocmF3X3Rva2VuKTtcbiAgfSBlbHNlIHtcbiAgICBwcmludGVyLnRyYXZlcnNlX3doaXRlc3BhY2UocmF3X3Rva2VuKTtcbiAgICBwcmludGVyLnByaW50X3Rva2VuKHJhd190b2tlbik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlcl90b2tlbjtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLl9wcmludF9jdXN0b21fYmVhdGlmaWVyX3RleHQgPSBmdW5jdGlvbihwcmludGVyLCByYXdfdG9rZW4sIGxhc3RfdGFnX3Rva2VuKSB7XG4gIHZhciBsb2NhbCA9IHRoaXM7XG4gIGlmIChyYXdfdG9rZW4udGV4dCAhPT0gJycpIHtcblxuICAgIHZhciB0ZXh0ID0gcmF3X3Rva2VuLnRleHQsXG4gICAgICBfYmVhdXRpZmllcixcbiAgICAgIHNjcmlwdF9pbmRlbnRfbGV2ZWwgPSAxLFxuICAgICAgcHJlID0gJycsXG4gICAgICBwb3N0ID0gJyc7XG4gICAgaWYgKGxhc3RfdGFnX3Rva2VuLmN1c3RvbV9iZWF1dGlmaWVyX25hbWUgPT09ICdqYXZhc2NyaXB0JyAmJiB0eXBlb2YgdGhpcy5fanNfYmVhdXRpZnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIF9iZWF1dGlmaWVyID0gdGhpcy5fanNfYmVhdXRpZnk7XG4gICAgfSBlbHNlIGlmIChsYXN0X3RhZ190b2tlbi5jdXN0b21fYmVhdXRpZmllcl9uYW1lID09PSAnY3NzJyAmJiB0eXBlb2YgdGhpcy5fY3NzX2JlYXV0aWZ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBfYmVhdXRpZmllciA9IHRoaXMuX2Nzc19iZWF1dGlmeTtcbiAgICB9IGVsc2UgaWYgKGxhc3RfdGFnX3Rva2VuLmN1c3RvbV9iZWF1dGlmaWVyX25hbWUgPT09ICdodG1sJykge1xuICAgICAgX2JlYXV0aWZpZXIgPSBmdW5jdGlvbihodG1sX3NvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgYmVhdXRpZmllciA9IG5ldyBCZWF1dGlmaWVyKGh0bWxfc291cmNlLCBvcHRpb25zLCBsb2NhbC5fanNfYmVhdXRpZnksIGxvY2FsLl9jc3NfYmVhdXRpZnkpO1xuICAgICAgICByZXR1cm4gYmVhdXRpZmllci5iZWF1dGlmeSgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy5pbmRlbnRfc2NyaXB0cyA9PT0gXCJrZWVwXCIpIHtcbiAgICAgIHNjcmlwdF9pbmRlbnRfbGV2ZWwgPSAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fb3B0aW9ucy5pbmRlbnRfc2NyaXB0cyA9PT0gXCJzZXBhcmF0ZVwiKSB7XG4gICAgICBzY3JpcHRfaW5kZW50X2xldmVsID0gLXByaW50ZXIuaW5kZW50X2xldmVsO1xuICAgIH1cblxuICAgIHZhciBpbmRlbnRhdGlvbiA9IHByaW50ZXIuZ2V0X2Z1bGxfaW5kZW50KHNjcmlwdF9pbmRlbnRfbGV2ZWwpO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGVtcHR5IGxpbmUgYXQgdGhlIGVuZCBvZiB0aGlzIHRleHQsIHN0cmlwIGl0XG4gICAgLy8gd2UnbGwgYmUgYWRkaW5nIG9uZSBiYWNrIGFmdGVyIHRoZSB0ZXh0IGJ1dCBiZWZvcmUgdGhlIGNvbnRhaW5pbmcgdGFnLlxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcblsgXFx0XSokLywgJycpO1xuXG4gICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGNvbnRlbnQgaXMgd3JhcHBlZCBpbiBhIGNvbW1lbnQgb3IgY2RhdGEuXG4gICAgaWYgKGxhc3RfdGFnX3Rva2VuLmN1c3RvbV9iZWF1dGlmaWVyX25hbWUgIT09ICdodG1sJyAmJlxuICAgICAgdGV4dFswXSA9PT0gJzwnICYmIHRleHQubWF0Y2goL14oPCEtLXw8IVxcW0NEQVRBXFxbKS8pKSB7XG4gICAgICB2YXIgbWF0Y2hlZCA9IC9eKDwhLS1bXlxcbl0qfDwhXFxbQ0RBVEFcXFspKFxcbj8pKFsgXFx0XFxuXSopKFtcXHNcXFNdKikoLS0+fF1dPikkLy5leGVjKHRleHQpO1xuXG4gICAgICAvLyBpZiB3ZSBzdGFydCB0byB3cmFwIGJ1dCBkb24ndCBmaW5pc2gsIHByaW50IHJhd1xuICAgICAgaWYgKCFtYXRjaGVkKSB7XG4gICAgICAgIHByaW50ZXIuYWRkX3Jhd190b2tlbihyYXdfdG9rZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHByZSA9IGluZGVudGF0aW9uICsgbWF0Y2hlZFsxXSArICdcXG4nO1xuICAgICAgdGV4dCA9IG1hdGNoZWRbNF07XG4gICAgICBpZiAobWF0Y2hlZFs1XSkge1xuICAgICAgICBwb3N0ID0gaW5kZW50YXRpb24gKyBtYXRjaGVkWzVdO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZW1wdHkgbGluZSBhdCB0aGUgZW5kIG9mIHRoaXMgdGV4dCwgc3RyaXAgaXRcbiAgICAgIC8vIHdlJ2xsIGJlIGFkZGluZyBvbmUgYmFjayBhZnRlciB0aGUgdGV4dCBidXQgYmVmb3JlIHRoZSBjb250YWluaW5nIHRhZy5cbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcblsgXFx0XSokLywgJycpO1xuXG4gICAgICBpZiAobWF0Y2hlZFsyXSB8fCBtYXRjaGVkWzNdLmluZGV4T2YoJ1xcbicpICE9PSAtMSkge1xuICAgICAgICAvLyBpZiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgbm9uLWNvbW1lbnQgdGV4dCBoYXMgc3BhY2VzXG4gICAgICAgIC8vIHVzZSB0aGF0IGFzIHRoZSBiYXNpcyBmb3IgaW5kZW50aW5nIGluIG51bGwgY2FzZS5cbiAgICAgICAgbWF0Y2hlZCA9IG1hdGNoZWRbM10ubWF0Y2goL1sgXFx0XSskLyk7XG4gICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgcmF3X3Rva2VuLndoaXRlc3BhY2VfYmVmb3JlID0gbWF0Y2hlZFswXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBpZiAoX2JlYXV0aWZpZXIpIHtcblxuICAgICAgICAvLyBjYWxsIHRoZSBCZWF1dGlmaWVyIGlmIGF2YWxpYWJsZVxuICAgICAgICB2YXIgQ2hpbGRfb3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMuZW9sID0gJ1xcbic7XG4gICAgICAgIH07XG4gICAgICAgIENoaWxkX29wdGlvbnMucHJvdG90eXBlID0gdGhpcy5fb3B0aW9ucy5yYXdfb3B0aW9ucztcbiAgICAgICAgdmFyIGNoaWxkX29wdGlvbnMgPSBuZXcgQ2hpbGRfb3B0aW9ucygpO1xuICAgICAgICB0ZXh0ID0gX2JlYXV0aWZpZXIoaW5kZW50YXRpb24gKyB0ZXh0LCBjaGlsZF9vcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNpbXBseSBpbmRlbnQgdGhlIHN0cmluZyBvdGhlcndpc2VcbiAgICAgICAgdmFyIHdoaXRlID0gcmF3X3Rva2VuLndoaXRlc3BhY2VfYmVmb3JlO1xuICAgICAgICBpZiAod2hpdGUpIHtcbiAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcbignICsgd2hpdGUgKyAnKT8nLCAnZycpLCAnXFxuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0ZXh0ID0gaW5kZW50YXRpb24gKyB0ZXh0LnJlcGxhY2UoL1xcbi9nLCAnXFxuJyArIGluZGVudGF0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJlKSB7XG4gICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgdGV4dCA9IHByZSArIHBvc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ID0gcHJlICsgdGV4dCArICdcXG4nICsgcG9zdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmludGVyLnByaW50X25ld2xpbmUoZmFsc2UpO1xuICAgIGlmICh0ZXh0KSB7XG4gICAgICByYXdfdG9rZW4udGV4dCA9IHRleHQ7XG4gICAgICByYXdfdG9rZW4ud2hpdGVzcGFjZV9iZWZvcmUgPSAnJztcbiAgICAgIHJhd190b2tlbi5uZXdsaW5lcyA9IDA7XG4gICAgICBwcmludGVyLmFkZF9yYXdfdG9rZW4ocmF3X3Rva2VuKTtcbiAgICAgIHByaW50ZXIucHJpbnRfbmV3bGluZSh0cnVlKTtcbiAgICB9XG4gIH1cbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLl9oYW5kbGVfdGFnX29wZW4gPSBmdW5jdGlvbihwcmludGVyLCByYXdfdG9rZW4sIGxhc3RfdGFnX3Rva2VuLCBsYXN0X3Rva2VuLCB0b2tlbnMpIHtcbiAgdmFyIHBhcnNlcl90b2tlbiA9IHRoaXMuX2dldF90YWdfb3Blbl90b2tlbihyYXdfdG9rZW4pO1xuXG4gIGlmICgobGFzdF90YWdfdG9rZW4uaXNfdW5mb3JtYXR0ZWQgfHwgbGFzdF90YWdfdG9rZW4uaXNfY29udGVudF91bmZvcm1hdHRlZCkgJiZcbiAgICAhbGFzdF90YWdfdG9rZW4uaXNfZW1wdHlfZWxlbWVudCAmJlxuICAgIHJhd190b2tlbi50eXBlID09PSBUT0tFTi5UQUdfT1BFTiAmJiAhcGFyc2VyX3Rva2VuLmlzX3N0YXJ0X3RhZykge1xuICAgIC8vIEVuZCBlbGVtZW50IHRhZ3MgZm9yIHVuZm9ybWF0dGVkIG9yIGNvbnRlbnRfdW5mb3JtYXR0ZWQgZWxlbWVudHNcbiAgICAvLyBhcmUgcHJpbnRlZCByYXcgdG8ga2VlcCBhbnkgbmV3bGluZXMgaW5zaWRlIHRoZW0gZXhhY3RseSB0aGUgc2FtZS5cbiAgICBwcmludGVyLmFkZF9yYXdfdG9rZW4ocmF3X3Rva2VuKTtcbiAgICBwYXJzZXJfdG9rZW4uc3RhcnRfdGFnX3Rva2VuID0gdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AocGFyc2VyX3Rva2VuLnRhZ19uYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBwcmludGVyLnRyYXZlcnNlX3doaXRlc3BhY2UocmF3X3Rva2VuKTtcbiAgICB0aGlzLl9zZXRfdGFnX3Bvc2l0aW9uKHByaW50ZXIsIHJhd190b2tlbiwgcGFyc2VyX3Rva2VuLCBsYXN0X3RhZ190b2tlbiwgbGFzdF90b2tlbik7XG4gICAgaWYgKCFwYXJzZXJfdG9rZW4uaXNfaW5saW5lX2VsZW1lbnQpIHtcbiAgICAgIHByaW50ZXIuc2V0X3dyYXBfcG9pbnQoKTtcbiAgICB9XG4gICAgcHJpbnRlci5wcmludF90b2tlbihyYXdfdG9rZW4pO1xuICB9XG5cbiAgLy8gY291bnQgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzXG4gIGlmIChwYXJzZXJfdG9rZW4uaXNfc3RhcnRfdGFnICYmIHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZSkge1xuICAgIHZhciBwZWVrX2luZGV4ID0gMDtcbiAgICB2YXIgcGVla190b2tlbjtcbiAgICBkbyB7XG4gICAgICBwZWVrX3Rva2VuID0gdG9rZW5zLnBlZWsocGVla19pbmRleCk7XG4gICAgICBpZiAocGVla190b2tlbi50eXBlID09PSBUT0tFTi5BVFRSSUJVVEUpIHtcbiAgICAgICAgcGFyc2VyX3Rva2VuLmF0dHJfY291bnQgKz0gMTtcbiAgICAgIH1cbiAgICAgIHBlZWtfaW5kZXggKz0gMTtcbiAgICB9IHdoaWxlIChwZWVrX3Rva2VuLnR5cGUgIT09IFRPS0VOLkVPRiAmJiBwZWVrX3Rva2VuLnR5cGUgIT09IFRPS0VOLlRBR19DTE9TRSk7XG4gIH1cblxuICAvL2luZGVudCBhdHRyaWJ1dGVzIGFuIGF1dG8sIGZvcmNlZCwgYWxpZ25lZCBvciBmb3JjZWQtYWxpZ24gbGluZS13cmFwXG4gIGlmICh0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfYWxpZ25lZCB8fCB0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfYWxpZ25lZF9tdWx0aXBsZSB8fCB0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmVfYWxpZ25lZCkge1xuICAgIHBhcnNlcl90b2tlbi5hbGlnbm1lbnRfc2l6ZSA9IHJhd190b2tlbi50ZXh0Lmxlbmd0aCArIDE7XG4gIH1cblxuICBpZiAoIXBhcnNlcl90b2tlbi50YWdfY29tcGxldGUgJiYgIXBhcnNlcl90b2tlbi5pc191bmZvcm1hdHRlZCkge1xuICAgIHByaW50ZXIuYWxpZ25tZW50X3NpemUgPSBwYXJzZXJfdG9rZW4uYWxpZ25tZW50X3NpemU7XG4gIH1cblxuICByZXR1cm4gcGFyc2VyX3Rva2VuO1xufTtcblxudmFyIFRhZ09wZW5QYXJzZXJUb2tlbiA9IGZ1bmN0aW9uKHBhcmVudCwgcmF3X3Rva2VuKSB7XG4gIHRoaXMucGFyZW50ID0gcGFyZW50IHx8IG51bGw7XG4gIHRoaXMudGV4dCA9ICcnO1xuICB0aGlzLnR5cGUgPSAnVEtfVEFHX09QRU4nO1xuICB0aGlzLnRhZ19uYW1lID0gJyc7XG4gIHRoaXMuaXNfaW5saW5lX2VsZW1lbnQgPSBmYWxzZTtcbiAgdGhpcy5pc191bmZvcm1hdHRlZCA9IGZhbHNlO1xuICB0aGlzLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5pc19lbXB0eV9lbGVtZW50ID0gZmFsc2U7XG4gIHRoaXMuaXNfc3RhcnRfdGFnID0gZmFsc2U7XG4gIHRoaXMuaXNfZW5kX3RhZyA9IGZhbHNlO1xuICB0aGlzLmluZGVudF9jb250ZW50ID0gZmFsc2U7XG4gIHRoaXMubXVsdGlsaW5lX2NvbnRlbnQgPSBmYWxzZTtcbiAgdGhpcy5jdXN0b21fYmVhdXRpZmllcl9uYW1lID0gbnVsbDtcbiAgdGhpcy5zdGFydF90YWdfdG9rZW4gPSBudWxsO1xuICB0aGlzLmF0dHJfY291bnQgPSAwO1xuICB0aGlzLmhhc193cmFwcGVkX2F0dHJzID0gZmFsc2U7XG4gIHRoaXMuYWxpZ25tZW50X3NpemUgPSAwO1xuICB0aGlzLnRhZ19jb21wbGV0ZSA9IGZhbHNlO1xuICB0aGlzLnRhZ19zdGFydF9jaGFyID0gJyc7XG4gIHRoaXMudGFnX2NoZWNrID0gJyc7XG5cbiAgaWYgKCFyYXdfdG9rZW4pIHtcbiAgICB0aGlzLnRhZ19jb21wbGV0ZSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZ19jaGVja19tYXRjaDtcblxuICAgIHRoaXMudGFnX3N0YXJ0X2NoYXIgPSByYXdfdG9rZW4udGV4dFswXTtcbiAgICB0aGlzLnRleHQgPSByYXdfdG9rZW4udGV4dDtcblxuICAgIGlmICh0aGlzLnRhZ19zdGFydF9jaGFyID09PSAnPCcpIHtcbiAgICAgIHRhZ19jaGVja19tYXRjaCA9IHJhd190b2tlbi50ZXh0Lm1hdGNoKC9ePChbXlxccz5dKikvKTtcbiAgICAgIHRoaXMudGFnX2NoZWNrID0gdGFnX2NoZWNrX21hdGNoID8gdGFnX2NoZWNrX21hdGNoWzFdIDogJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ19jaGVja19tYXRjaCA9IHJhd190b2tlbi50ZXh0Lm1hdGNoKC9ee3t+Pyg/OltcXF5dfCNcXCo/KT8oW15cXHN9XSspLyk7XG4gICAgICB0aGlzLnRhZ19jaGVjayA9IHRhZ19jaGVja19tYXRjaCA/IHRhZ19jaGVja19tYXRjaFsxXSA6ICcnO1xuXG4gICAgICAvLyBoYW5kbGUgXCJ7eyM+IG15UGFydGlhbH19XCIgb3IgXCJ7e34jPiBteVBhcnRpYWx9fVwiXG4gICAgICBpZiAoKHJhd190b2tlbi50ZXh0LnN0YXJ0c1dpdGgoJ3t7Iz4nKSB8fCByYXdfdG9rZW4udGV4dC5zdGFydHNXaXRoKCd7e34jPicpKSAmJiB0aGlzLnRhZ19jaGVja1swXSA9PT0gJz4nKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZ19jaGVjayA9PT0gJz4nICYmIHJhd190b2tlbi5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy50YWdfY2hlY2sgPSByYXdfdG9rZW4ubmV4dC50ZXh0LnNwbGl0KCcgJylbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50YWdfY2hlY2sgPSByYXdfdG9rZW4udGV4dC5zcGxpdCgnPicpWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50YWdfY2hlY2sgPSB0aGlzLnRhZ19jaGVjay50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKHJhd190b2tlbi50eXBlID09PSBUT0tFTi5DT01NRU5UKSB7XG4gICAgICB0aGlzLnRhZ19jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5pc19zdGFydF90YWcgPSB0aGlzLnRhZ19jaGVjay5jaGFyQXQoMCkgIT09ICcvJztcbiAgICB0aGlzLnRhZ19uYW1lID0gIXRoaXMuaXNfc3RhcnRfdGFnID8gdGhpcy50YWdfY2hlY2suc3Vic3RyKDEpIDogdGhpcy50YWdfY2hlY2s7XG4gICAgdGhpcy5pc19lbmRfdGFnID0gIXRoaXMuaXNfc3RhcnRfdGFnIHx8XG4gICAgICAocmF3X3Rva2VuLmNsb3NlZCAmJiByYXdfdG9rZW4uY2xvc2VkLnRleHQgPT09ICcvPicpO1xuXG4gICAgLy8gaWYgd2hpdGVzcGFjZSBoYW5kbGVyIH4gaW5jbHVkZWQgKGkuZS4ge3t+I2lmIHRydWV9fSksIGhhbmRsZWJhcnMgdGFncyBzdGFydCBhdCBwb3MgMyBub3QgcG9zIDJcbiAgICB2YXIgaGFuZGxlYmFyX3N0YXJ0cyA9IDI7XG4gICAgaWYgKHRoaXMudGFnX3N0YXJ0X2NoYXIgPT09ICd7JyAmJiB0aGlzLnRleHQubGVuZ3RoID49IDMpIHtcbiAgICAgIGlmICh0aGlzLnRleHQuY2hhckF0KDIpID09PSAnficpIHtcbiAgICAgICAgaGFuZGxlYmFyX3N0YXJ0cyA9IDM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlYmFycyB0YWdzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCAjIG9yIF4gYXJlIHNpbmdsZV90YWdzLCBhbmQgc28gYWxzbyBzdGFydCBhbmQgZW5kLlxuICAgIHRoaXMuaXNfZW5kX3RhZyA9IHRoaXMuaXNfZW5kX3RhZyB8fFxuICAgICAgKHRoaXMudGFnX3N0YXJ0X2NoYXIgPT09ICd7JyAmJiAodGhpcy50ZXh0Lmxlbmd0aCA8IDMgfHwgKC9bXiNcXF5dLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaGFuZGxlYmFyX3N0YXJ0cykpKSkpO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5fZ2V0X3RhZ19vcGVuX3Rva2VuID0gZnVuY3Rpb24ocmF3X3Rva2VuKSB7IC8vZnVuY3Rpb24gdG8gZ2V0IGEgZnVsbCB0YWcgYW5kIHBhcnNlIGl0cyB0eXBlXG4gIHZhciBwYXJzZXJfdG9rZW4gPSBuZXcgVGFnT3BlblBhcnNlclRva2VuKHRoaXMuX3RhZ19zdGFjay5nZXRfcGFyc2VyX3Rva2VuKCksIHJhd190b2tlbik7XG5cbiAgcGFyc2VyX3Rva2VuLmFsaWdubWVudF9zaXplID0gdGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXNfaW5kZW50X3NpemU7XG5cbiAgcGFyc2VyX3Rva2VuLmlzX2VuZF90YWcgPSBwYXJzZXJfdG9rZW4uaXNfZW5kX3RhZyB8fFxuICAgIGluX2FycmF5KHBhcnNlcl90b2tlbi50YWdfY2hlY2ssIHRoaXMuX29wdGlvbnMudm9pZF9lbGVtZW50cyk7XG5cbiAgcGFyc2VyX3Rva2VuLmlzX2VtcHR5X2VsZW1lbnQgPSBwYXJzZXJfdG9rZW4udGFnX2NvbXBsZXRlIHx8XG4gICAgKHBhcnNlcl90b2tlbi5pc19zdGFydF90YWcgJiYgcGFyc2VyX3Rva2VuLmlzX2VuZF90YWcpO1xuXG4gIHBhcnNlcl90b2tlbi5pc191bmZvcm1hdHRlZCA9ICFwYXJzZXJfdG9rZW4udGFnX2NvbXBsZXRlICYmIGluX2FycmF5KHBhcnNlcl90b2tlbi50YWdfY2hlY2ssIHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWQpO1xuICBwYXJzZXJfdG9rZW4uaXNfY29udGVudF91bmZvcm1hdHRlZCA9ICFwYXJzZXJfdG9rZW4uaXNfZW1wdHlfZWxlbWVudCAmJiBpbl9hcnJheShwYXJzZXJfdG9rZW4udGFnX2NoZWNrLCB0aGlzLl9vcHRpb25zLmNvbnRlbnRfdW5mb3JtYXR0ZWQpO1xuICBwYXJzZXJfdG9rZW4uaXNfaW5saW5lX2VsZW1lbnQgPSBpbl9hcnJheShwYXJzZXJfdG9rZW4udGFnX25hbWUsIHRoaXMuX29wdGlvbnMuaW5saW5lKSB8fCBwYXJzZXJfdG9rZW4udGFnX25hbWUuaW5jbHVkZXMoXCItXCIpIHx8IHBhcnNlcl90b2tlbi50YWdfc3RhcnRfY2hhciA9PT0gJ3snO1xuXG4gIHJldHVybiBwYXJzZXJfdG9rZW47XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5fc2V0X3RhZ19wb3NpdGlvbiA9IGZ1bmN0aW9uKHByaW50ZXIsIHJhd190b2tlbiwgcGFyc2VyX3Rva2VuLCBsYXN0X3RhZ190b2tlbiwgbGFzdF90b2tlbikge1xuXG4gIGlmICghcGFyc2VyX3Rva2VuLmlzX2VtcHR5X2VsZW1lbnQpIHtcbiAgICBpZiAocGFyc2VyX3Rva2VuLmlzX2VuZF90YWcpIHsgLy90aGlzIHRhZyBpcyBhIGRvdWJsZSB0YWcgc28gY2hlY2sgZm9yIHRhZy1lbmRpbmdcbiAgICAgIHBhcnNlcl90b2tlbi5zdGFydF90YWdfdG9rZW4gPSB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcChwYXJzZXJfdG9rZW4udGFnX25hbWUpOyAvL3JlbW92ZSBpdCBhbmQgYWxsIGFuY2VzdG9yc1xuICAgIH0gZWxzZSB7IC8vIGl0J3MgYSBzdGFydC10YWdcbiAgICAgIC8vIGNoZWNrIGlmIHRoaXMgdGFnIGlzIHN0YXJ0aW5nIGFuIGVsZW1lbnQgdGhhdCBoYXMgb3B0aW9uYWwgZW5kIGVsZW1lbnRcbiAgICAgIC8vIGFuZCBkbyBhbiBlbmRpbmcgbmVlZGVkXG4gICAgICBpZiAodGhpcy5fZG9fb3B0aW9uYWxfZW5kX2VsZW1lbnQocGFyc2VyX3Rva2VuKSkge1xuICAgICAgICBpZiAoIXBhcnNlcl90b2tlbi5pc19pbmxpbmVfZWxlbWVudCkge1xuICAgICAgICAgIHByaW50ZXIucHJpbnRfbmV3bGluZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fdGFnX3N0YWNrLnJlY29yZF90YWcocGFyc2VyX3Rva2VuKTsgLy9wdXNoIGl0IG9uIHRoZSB0YWcgc3RhY2tcblxuICAgICAgaWYgKChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdzY3JpcHQnIHx8IHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ3N0eWxlJykgJiZcbiAgICAgICAgIShwYXJzZXJfdG9rZW4uaXNfdW5mb3JtYXR0ZWQgfHwgcGFyc2VyX3Rva2VuLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpKSB7XG4gICAgICAgIHBhcnNlcl90b2tlbi5jdXN0b21fYmVhdXRpZmllcl9uYW1lID0gZ2V0X2N1c3RvbV9iZWF1dGlmaWVyX25hbWUocGFyc2VyX3Rva2VuLnRhZ19jaGVjaywgcmF3X3Rva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaW5fYXJyYXkocGFyc2VyX3Rva2VuLnRhZ19jaGVjaywgdGhpcy5fb3B0aW9ucy5leHRyYV9saW5lcnMpKSB7IC8vY2hlY2sgaWYgdGhpcyBkb3VibGUgbmVlZHMgYW4gZXh0cmEgbGluZVxuICAgIHByaW50ZXIucHJpbnRfbmV3bGluZShmYWxzZSk7XG4gICAgaWYgKCFwcmludGVyLl9vdXRwdXQuanVzdF9hZGRlZF9ibGFua2xpbmUoKSkge1xuICAgICAgcHJpbnRlci5wcmludF9uZXdsaW5lKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJzZXJfdG9rZW4uaXNfZW1wdHlfZWxlbWVudCkgeyAvL2lmIHRoaXMgdGFnIG5hbWUgaXMgYSBzaW5nbGUgdGFnIHR5cGUgKGVpdGhlciBpbiB0aGUgbGlzdCBvciBoYXMgYSBjbG9zaW5nIC8pXG5cbiAgICAvLyBpZiB5b3UgaGl0IGFuIGVsc2UgY2FzZSwgcmVzZXQgdGhlIGluZGVudCBsZXZlbCBpZiB5b3UgYXJlIGluc2lkZSBhbjpcbiAgICAvLyAnaWYnLCAndW5sZXNzJywgb3IgJ2VhY2gnIGJsb2NrLlxuICAgIGlmIChwYXJzZXJfdG9rZW4udGFnX3N0YXJ0X2NoYXIgPT09ICd7JyAmJiBwYXJzZXJfdG9rZW4udGFnX2NoZWNrID09PSAnZWxzZScpIHtcbiAgICAgIHRoaXMuX3RhZ19zdGFjay5pbmRlbnRfdG9fdGFnKFsnaWYnLCAndW5sZXNzJywgJ2VhY2gnXSk7XG4gICAgICBwYXJzZXJfdG9rZW4uaW5kZW50X2NvbnRlbnQgPSB0cnVlO1xuICAgICAgLy8gRG9uJ3QgYWRkIGEgbmV3bGluZSBpZiBvcGVuaW5nIHt7I2lmfX0gdGFnIGlzIG9uIHRoZSBjdXJyZW50IGxpbmVcbiAgICAgIHZhciBmb3VuZElmT25DdXJyZW50TGluZSA9IHByaW50ZXIuY3VycmVudF9saW5lX2hhc19tYXRjaCgve3sjaWYvKTtcbiAgICAgIGlmICghZm91bmRJZk9uQ3VycmVudExpbmUpIHtcbiAgICAgICAgcHJpbnRlci5wcmludF9uZXdsaW5lKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEb24ndCBhZGQgYSBuZXdsaW5lIGJlZm9yZSBlbGVtZW50cyB0aGF0IHNob3VsZCByZW1haW4gd2hlcmUgdGhleSBhcmUuXG4gICAgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJyEtLScgJiYgbGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5UQUdfQ0xPU0UgJiZcbiAgICAgIGxhc3RfdGFnX3Rva2VuLmlzX2VuZF90YWcgJiYgcGFyc2VyX3Rva2VuLnRleHQuaW5kZXhPZignXFxuJykgPT09IC0xKSB7XG4gICAgICAvL0RvIG5vdGhpbmcuIExlYXZlIGNvbW1lbnRzIG9uIHNhbWUgbGluZS5cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEocGFyc2VyX3Rva2VuLmlzX2lubGluZV9lbGVtZW50IHx8IHBhcnNlcl90b2tlbi5pc191bmZvcm1hdHRlZCkpIHtcbiAgICAgICAgcHJpbnRlci5wcmludF9uZXdsaW5lKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NhbGNsdWF0ZV9wYXJlbnRfbXVsdGlsaW5lKHByaW50ZXIsIHBhcnNlcl90b2tlbik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHBhcnNlcl90b2tlbi5pc19lbmRfdGFnKSB7IC8vdGhpcyB0YWcgaXMgYSBkb3VibGUgdGFnIHNvIGNoZWNrIGZvciB0YWctZW5kaW5nXG4gICAgdmFyIGRvX2VuZF9leHBhbmQgPSBmYWxzZTtcblxuICAgIC8vIGRlY2lkaW5nIHdoZXRoZXIgYSBibG9jayBpcyBtdWx0aWxpbmUgc2hvdWxkIG5vdCBiZSB0aGlzIGhhcmRcbiAgICBkb19lbmRfZXhwYW5kID0gcGFyc2VyX3Rva2VuLnN0YXJ0X3RhZ190b2tlbiAmJiBwYXJzZXJfdG9rZW4uc3RhcnRfdGFnX3Rva2VuLm11bHRpbGluZV9jb250ZW50O1xuICAgIGRvX2VuZF9leHBhbmQgPSBkb19lbmRfZXhwYW5kIHx8ICghcGFyc2VyX3Rva2VuLmlzX2lubGluZV9lbGVtZW50ICYmXG4gICAgICAhKGxhc3RfdGFnX3Rva2VuLmlzX2lubGluZV9lbGVtZW50IHx8IGxhc3RfdGFnX3Rva2VuLmlzX3VuZm9ybWF0dGVkKSAmJlxuICAgICAgIShsYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlRBR19DTE9TRSAmJiBwYXJzZXJfdG9rZW4uc3RhcnRfdGFnX3Rva2VuID09PSBsYXN0X3RhZ190b2tlbikgJiZcbiAgICAgIGxhc3RfdG9rZW4udHlwZSAhPT0gJ1RLX0NPTlRFTlQnXG4gICAgKTtcblxuICAgIGlmIChwYXJzZXJfdG9rZW4uaXNfY29udGVudF91bmZvcm1hdHRlZCB8fCBwYXJzZXJfdG9rZW4uaXNfdW5mb3JtYXR0ZWQpIHtcbiAgICAgIGRvX2VuZF9leHBhbmQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZG9fZW5kX2V4cGFuZCkge1xuICAgICAgcHJpbnRlci5wcmludF9uZXdsaW5lKGZhbHNlKTtcbiAgICB9XG4gIH0gZWxzZSB7IC8vIGl0J3MgYSBzdGFydC10YWdcbiAgICBwYXJzZXJfdG9rZW4uaW5kZW50X2NvbnRlbnQgPSAhcGFyc2VyX3Rva2VuLmN1c3RvbV9iZWF1dGlmaWVyX25hbWU7XG5cbiAgICBpZiAocGFyc2VyX3Rva2VuLnRhZ19zdGFydF9jaGFyID09PSAnPCcpIHtcbiAgICAgIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdodG1sJykge1xuICAgICAgICBwYXJzZXJfdG9rZW4uaW5kZW50X2NvbnRlbnQgPSB0aGlzLl9vcHRpb25zLmluZGVudF9pbm5lcl9odG1sO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdoZWFkJykge1xuICAgICAgICBwYXJzZXJfdG9rZW4uaW5kZW50X2NvbnRlbnQgPSB0aGlzLl9vcHRpb25zLmluZGVudF9oZWFkX2lubmVyX2h0bWw7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ2JvZHknKSB7XG4gICAgICAgIHBhcnNlcl90b2tlbi5pbmRlbnRfY29udGVudCA9IHRoaXMuX29wdGlvbnMuaW5kZW50X2JvZHlfaW5uZXJfaHRtbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShwYXJzZXJfdG9rZW4uaXNfaW5saW5lX2VsZW1lbnQgfHwgcGFyc2VyX3Rva2VuLmlzX3VuZm9ybWF0dGVkKSAmJlxuICAgICAgKGxhc3RfdG9rZW4udHlwZSAhPT0gJ1RLX0NPTlRFTlQnIHx8IHBhcnNlcl90b2tlbi5pc19jb250ZW50X3VuZm9ybWF0dGVkKSkge1xuICAgICAgcHJpbnRlci5wcmludF9uZXdsaW5lKGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jYWxjbHVhdGVfcGFyZW50X211bHRpbGluZShwcmludGVyLCBwYXJzZXJfdG9rZW4pO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5fY2FsY2x1YXRlX3BhcmVudF9tdWx0aWxpbmUgPSBmdW5jdGlvbihwcmludGVyLCBwYXJzZXJfdG9rZW4pIHtcbiAgaWYgKHBhcnNlcl90b2tlbi5wYXJlbnQgJiYgcHJpbnRlci5fb3V0cHV0Lmp1c3RfYWRkZWRfbmV3bGluZSgpICYmXG4gICAgISgocGFyc2VyX3Rva2VuLmlzX2lubGluZV9lbGVtZW50IHx8IHBhcnNlcl90b2tlbi5pc191bmZvcm1hdHRlZCkgJiYgcGFyc2VyX3Rva2VuLnBhcmVudC5pc19pbmxpbmVfZWxlbWVudCkpIHtcbiAgICBwYXJzZXJfdG9rZW4ucGFyZW50Lm11bHRpbGluZV9jb250ZW50ID0gdHJ1ZTtcbiAgfVxufTtcblxuLy9UbyBiZSB1c2VkIGZvciA8cD4gdGFnIHNwZWNpYWwgY2FzZTpcbnZhciBwX2Nsb3NlcnMgPSBbJ2FkZHJlc3MnLCAnYXJ0aWNsZScsICdhc2lkZScsICdibG9ja3F1b3RlJywgJ2RldGFpbHMnLCAnZGl2JywgJ2RsJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWRlcicsICdocicsICdtYWluJywgJ21lbnUnLCAnbmF2JywgJ29sJywgJ3AnLCAncHJlJywgJ3NlY3Rpb24nLCAndGFibGUnLCAndWwnXTtcbnZhciBwX3BhcmVudF9leGNsdWRlcyA9IFsnYScsICdhdWRpbycsICdkZWwnLCAnaW5zJywgJ21hcCcsICdub3NjcmlwdCcsICd2aWRlbyddO1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5fZG9fb3B0aW9uYWxfZW5kX2VsZW1lbnQgPSBmdW5jdGlvbihwYXJzZXJfdG9rZW4pIHtcbiAgdmFyIHJlc3VsdCA9IG51bGw7XG4gIC8vIE5PVEU6IGNhc2VzIG9mIFwiaWYgdGhlcmUgaXMgbm8gbW9yZSBjb250ZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudFwiXG4gIC8vIGFyZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGJlYXV0aWZpZXIuXG4gIC8vIEl0IGFzc3VtZXMgcGFyZW50IG9yIGFuY2VzdG9yIGNsb3NlIHRhZyBjbG9zZXMgYWxsIGNoaWxkcmVuLlxuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvc3ludGF4Lmh0bWwjb3B0aW9uYWwtdGFnc1xuICBpZiAocGFyc2VyX3Rva2VuLmlzX2VtcHR5X2VsZW1lbnQgfHwgIXBhcnNlcl90b2tlbi5pc19zdGFydF90YWcgfHwgIXBhcnNlcl90b2tlbi5wYXJlbnQpIHtcbiAgICByZXR1cm47XG5cbiAgfVxuXG4gIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdib2R5Jykge1xuICAgIC8vIEEgaGVhZCBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBoZWFkIGVsZW1lbnQgaXMgbm90IGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgc3BhY2UgY2hhcmFjdGVyIG9yIGEgY29tbWVudC5cbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ2hlYWQnKTtcblxuICAgIC8vfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdib2R5Jykge1xuICAgIC8vIERPTkU6IEEgYm9keSBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBib2R5IGVsZW1lbnQgaXMgbm90IGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgY29tbWVudC5cblxuICB9IGVsc2UgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ2xpJykge1xuICAgIC8vIEFuIGxpIGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGxpIGVsZW1lbnQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW5vdGhlciBsaSBlbGVtZW50IG9yIGlmIHRoZXJlIGlzIG5vIG1vcmUgY29udGVudCBpbiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCdsaScsIFsnb2wnLCAndWwnLCAnbWVudSddKTtcblxuICB9IGVsc2UgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ2RkJyB8fCBwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdkdCcpIHtcbiAgICAvLyBBIGRkIGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGRkIGVsZW1lbnQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW5vdGhlciBkZCBlbGVtZW50IG9yIGEgZHQgZWxlbWVudCwgb3IgaWYgdGhlcmUgaXMgbm8gbW9yZSBjb250ZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAvLyBBIGR0IGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGR0IGVsZW1lbnQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW5vdGhlciBkdCBlbGVtZW50IG9yIGEgZGQgZWxlbWVudC5cbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ2R0JywgWydkbCddKTtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ2RkJywgWydkbCddKTtcblxuXG4gIH0gZWxzZSBpZiAocGFyc2VyX3Rva2VuLnBhcmVudC50YWdfbmFtZSA9PT0gJ3AnICYmIHBfY2xvc2Vycy5pbmRleE9mKHBhcnNlcl90b2tlbi50YWdfbmFtZSkgIT09IC0xKSB7XG4gICAgLy8gSU1QT1JUQU5UOiB0aGlzIGVsc2UtaWYgd29ya3MgYmVjYXVzZSBwX2Nsb3NlcnMgaGFzIG5vIG92ZXJsYXAgd2l0aCBhbnkgb3RoZXIgZWxlbWVudCB3ZSBsb29rIGZvciBpbiB0aGlzIG1ldGhvZFxuICAgIC8vIGNoZWNrIGZvciB0aGUgcGFyZW50IGVsZW1lbnQgaXMgYW4gSFRNTCBlbGVtZW50IHRoYXQgaXMgbm90IGFuIDxhPiwgPGF1ZGlvPiwgPGRlbD4sIDxpbnM+LCA8bWFwPiwgPG5vc2NyaXB0Piwgb3IgPHZpZGVvPiBlbGVtZW50LCAgb3IgYW4gYXV0b25vbW91cyBjdXN0b20gZWxlbWVudC5cbiAgICAvLyBUbyBkbyB0aGlzIHJpZ2h0LCB0aGlzIG5lZWRzIHRvIGJlIGNvZGVkIGFzIGFuIGluY2x1c2lvbiBvZiB0aGUgaW52ZXJzZSBvZiB0aGUgZXhjbHVzaW9uIGFib3ZlLlxuICAgIC8vIEJ1dCB0byBzdGFydCB3aXRoIChpZiB3ZSBpZ25vcmUgXCJhdXRvbm9tb3VzIGN1c3RvbSBlbGVtZW50c1wiKSB0aGUgZXhjbHVzaW9uIHdvdWxkIGJlIGZpbmUuXG4gICAgdmFyIHBfcGFyZW50ID0gcGFyc2VyX3Rva2VuLnBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwX3BhcmVudCB8fCBwX3BhcmVudF9leGNsdWRlcy5pbmRleE9mKHBfcGFyZW50LnRhZ19uYW1lKSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgncCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdycCcgfHwgcGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAncnQnKSB7XG4gICAgLy8gQW4gcnQgZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgcnQgZWxlbWVudCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbiBydCBvciBycCBlbGVtZW50LCBvciBpZiB0aGVyZSBpcyBubyBtb3JlIGNvbnRlbnQgaW4gdGhlIHBhcmVudCBlbGVtZW50LlxuICAgIC8vIEFuIHJwIGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIHJwIGVsZW1lbnQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW4gcnQgb3IgcnAgZWxlbWVudCwgb3IgaWYgdGhlcmUgaXMgbm8gbW9yZSBjb250ZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ3J0JywgWydydWJ5JywgJ3J0YyddKTtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ3JwJywgWydydWJ5JywgJ3J0YyddKTtcblxuICB9IGVsc2UgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ29wdGdyb3VwJykge1xuICAgIC8vIEFuIG9wdGdyb3VwIGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIG9wdGdyb3VwIGVsZW1lbnQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW5vdGhlciBvcHRncm91cCBlbGVtZW50LCBvciBpZiB0aGVyZSBpcyBubyBtb3JlIGNvbnRlbnQgaW4gdGhlIHBhcmVudCBlbGVtZW50LlxuICAgIC8vIEFuIG9wdGlvbiBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBvcHRpb24gZWxlbWVudCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbm90aGVyIG9wdGlvbiBlbGVtZW50LCBvciBpZiBpdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbiBvcHRncm91cCBlbGVtZW50LCBvciBpZiB0aGVyZSBpcyBubyBtb3JlIGNvbnRlbnQgaW4gdGhlIHBhcmVudCBlbGVtZW50LlxuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgnb3B0Z3JvdXAnLCBbJ3NlbGVjdCddKTtcbiAgICAvL3Jlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgnb3B0aW9uJywgWydzZWxlY3QnXSk7XG5cbiAgfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdvcHRpb24nKSB7XG4gICAgLy8gQW4gb3B0aW9uIGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIG9wdGlvbiBlbGVtZW50IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFub3RoZXIgb3B0aW9uIGVsZW1lbnQsIG9yIGlmIGl0IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFuIG9wdGdyb3VwIGVsZW1lbnQsIG9yIGlmIHRoZXJlIGlzIG5vIG1vcmUgY29udGVudCBpbiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCdvcHRpb24nLCBbJ3NlbGVjdCcsICdkYXRhbGlzdCcsICdvcHRncm91cCddKTtcblxuICB9IGVsc2UgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ2NvbGdyb3VwJykge1xuICAgIC8vIERPTkU6IEEgY29sZ3JvdXAgZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgY29sZ3JvdXAgZWxlbWVudCBpcyBub3QgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBzcGFjZSBjaGFyYWN0ZXIgb3IgYSBjb21tZW50LlxuICAgIC8vIEEgY2FwdGlvbiBlbGVtZW50J3MgZW5kIHRhZyBtYXkgYmUgb21taXR0ZWQgaWYgYSBjb2xncm91cCwgdGhlYWQsIHRmb290LCB0Ym9keSwgb3IgdHIgZWxlbWVudCBpcyBzdGFydGVkLlxuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgnY2FwdGlvbicsIFsndGFibGUnXSk7XG5cbiAgfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICd0aGVhZCcpIHtcbiAgICAvLyBBIGNvbGdyb3VwIGVsZW1lbnQncyBlbmQgdGFnIG1heSBiZSBvbW1pdHRlZCBpZiBhIHRoZWFkLCB0Zm9vdCwgdGJvZHksIG9yIHRyIGVsZW1lbnQgaXMgc3RhcnRlZC5cbiAgICAvLyBBIGNhcHRpb24gZWxlbWVudCdzIGVuZCB0YWcgbWF5IGJlIG9tbWl0dGVkIGlmIGEgY29sZ3JvdXAsIHRoZWFkLCB0Zm9vdCwgdGJvZHksIG9yIHRyIGVsZW1lbnQgaXMgc3RhcnRlZC5cbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ2NhcHRpb24nLCBbJ3RhYmxlJ10pO1xuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgnY29sZ3JvdXAnLCBbJ3RhYmxlJ10pO1xuXG4gICAgLy99IGVsc2UgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ2NhcHRpb24nKSB7XG4gICAgLy8gRE9ORTogQSBjYXB0aW9uIGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGNhcHRpb24gZWxlbWVudCBpcyBub3QgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBzcGFjZSBjaGFyYWN0ZXIgb3IgYSBjb21tZW50LlxuXG4gIH0gZWxzZSBpZiAocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAndGJvZHknIHx8IHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ3Rmb290Jykge1xuICAgIC8vIEEgdGhlYWQgZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgdGhlYWQgZWxlbWVudCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRib2R5IG9yIHRmb290IGVsZW1lbnQuXG4gICAgLy8gQSB0Ym9keSBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSB0Ym9keSBlbGVtZW50IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgdGJvZHkgb3IgdGZvb3QgZWxlbWVudCwgb3IgaWYgdGhlcmUgaXMgbm8gbW9yZSBjb250ZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAvLyBBIGNvbGdyb3VwIGVsZW1lbnQncyBlbmQgdGFnIG1heSBiZSBvbW1pdHRlZCBpZiBhIHRoZWFkLCB0Zm9vdCwgdGJvZHksIG9yIHRyIGVsZW1lbnQgaXMgc3RhcnRlZC5cbiAgICAvLyBBIGNhcHRpb24gZWxlbWVudCdzIGVuZCB0YWcgbWF5IGJlIG9tbWl0dGVkIGlmIGEgY29sZ3JvdXAsIHRoZWFkLCB0Zm9vdCwgdGJvZHksIG9yIHRyIGVsZW1lbnQgaXMgc3RhcnRlZC5cbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ2NhcHRpb24nLCBbJ3RhYmxlJ10pO1xuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgnY29sZ3JvdXAnLCBbJ3RhYmxlJ10pO1xuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgndGhlYWQnLCBbJ3RhYmxlJ10pO1xuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgndGJvZHknLCBbJ3RhYmxlJ10pO1xuXG4gICAgLy99IGVsc2UgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ3Rmb290Jykge1xuICAgIC8vIERPTkU6IEEgdGZvb3QgZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGVyZSBpcyBubyBtb3JlIGNvbnRlbnQgaW4gdGhlIHBhcmVudCBlbGVtZW50LlxuXG4gIH0gZWxzZSBpZiAocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAndHInKSB7XG4gICAgLy8gQSB0ciBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSB0ciBlbGVtZW50IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFub3RoZXIgdHIgZWxlbWVudCwgb3IgaWYgdGhlcmUgaXMgbm8gbW9yZSBjb250ZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAvLyBBIGNvbGdyb3VwIGVsZW1lbnQncyBlbmQgdGFnIG1heSBiZSBvbW1pdHRlZCBpZiBhIHRoZWFkLCB0Zm9vdCwgdGJvZHksIG9yIHRyIGVsZW1lbnQgaXMgc3RhcnRlZC5cbiAgICAvLyBBIGNhcHRpb24gZWxlbWVudCdzIGVuZCB0YWcgbWF5IGJlIG9tbWl0dGVkIGlmIGEgY29sZ3JvdXAsIHRoZWFkLCB0Zm9vdCwgdGJvZHksIG9yIHRyIGVsZW1lbnQgaXMgc3RhcnRlZC5cbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ2NhcHRpb24nLCBbJ3RhYmxlJ10pO1xuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgnY29sZ3JvdXAnLCBbJ3RhYmxlJ10pO1xuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgndHInLCBbJ3RhYmxlJywgJ3RoZWFkJywgJ3Rib2R5JywgJ3Rmb290J10pO1xuXG4gIH0gZWxzZSBpZiAocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAndGgnIHx8IHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ3RkJykge1xuICAgIC8vIEEgdGQgZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgdGQgZWxlbWVudCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRkIG9yIHRoIGVsZW1lbnQsIG9yIGlmIHRoZXJlIGlzIG5vIG1vcmUgY29udGVudCBpbiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgLy8gQSB0aCBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSB0aCBlbGVtZW50IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgdGQgb3IgdGggZWxlbWVudCwgb3IgaWYgdGhlcmUgaXMgbm8gbW9yZSBjb250ZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ3RkJywgWyd0YWJsZScsICd0aGVhZCcsICd0Ym9keScsICd0Zm9vdCcsICd0ciddKTtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ3RoJywgWyd0YWJsZScsICd0aGVhZCcsICd0Ym9keScsICd0Zm9vdCcsICd0ciddKTtcbiAgfVxuXG4gIC8vIFN0YXJ0IGVsZW1lbnQgb21pc3Npb24gbm90IGhhbmRsZWQgY3VycmVudGx5XG4gIC8vIEEgaGVhZCBlbGVtZW504oCZcyBzdGFydCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGVsZW1lbnQgaXMgZW1wdHksIG9yIGlmIHRoZSBmaXJzdCB0aGluZyBpbnNpZGUgdGhlIGhlYWQgZWxlbWVudCBpcyBhbiBlbGVtZW50LlxuICAvLyBBIHRib2R5IGVsZW1lbnTigJlzIHN0YXJ0IHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgZmlyc3QgdGhpbmcgaW5zaWRlIHRoZSB0Ym9keSBlbGVtZW50IGlzIGEgdHIgZWxlbWVudCwgYW5kIGlmIHRoZSBlbGVtZW50IGlzIG5vdCBpbW1lZGlhdGVseSBwcmVjZWRlZCBieSBhIHRib2R5LCB0aGVhZCwgb3IgdGZvb3QgZWxlbWVudCB3aG9zZSBlbmQgdGFnIGhhcyBiZWVuIG9taXR0ZWQuIChJdCBjYW7igJl0IGJlIG9taXR0ZWQgaWYgdGhlIGVsZW1lbnQgaXMgZW1wdHkuKVxuICAvLyBBIGNvbGdyb3VwIGVsZW1lbnTigJlzIHN0YXJ0IHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgZmlyc3QgdGhpbmcgaW5zaWRlIHRoZSBjb2xncm91cCBlbGVtZW50IGlzIGEgY29sIGVsZW1lbnQsIGFuZCBpZiB0aGUgZWxlbWVudCBpcyBub3QgaW1tZWRpYXRlbHkgcHJlY2VkZWQgYnkgYW5vdGhlciBjb2xncm91cCBlbGVtZW50IHdob3NlIGVuZCB0YWcgaGFzIGJlZW4gb21pdHRlZC4gKEl0IGNhbuKAmXQgYmUgb21pdHRlZCBpZiB0aGUgZWxlbWVudCBpcyBlbXB0eS4pXG5cbiAgLy8gRml4IHVwIHRoZSBwYXJlbnQgb2YgdGhlIHBhcnNlciB0b2tlblxuICBwYXJzZXJfdG9rZW4ucGFyZW50ID0gdGhpcy5fdGFnX3N0YWNrLmdldF9wYXJzZXJfdG9rZW4oKTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMuQmVhdXRpZmllciA9IEJlYXV0aWZpZXI7XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQmVhdXRpZmllciA9IHJlcXVpcmUoJy4vYmVhdXRpZmllcicpLkJlYXV0aWZpZXIsXG4gIE9wdGlvbnMgPSByZXF1aXJlKCcuL29wdGlvbnMnKS5PcHRpb25zO1xuXG5mdW5jdGlvbiBzdHlsZV9odG1sKGh0bWxfc291cmNlLCBvcHRpb25zLCBqc19iZWF1dGlmeSwgY3NzX2JlYXV0aWZ5KSB7XG4gIHZhciBiZWF1dGlmaWVyID0gbmV3IEJlYXV0aWZpZXIoaHRtbF9zb3VyY2UsIG9wdGlvbnMsIGpzX2JlYXV0aWZ5LCBjc3NfYmVhdXRpZnkpO1xuICByZXR1cm4gYmVhdXRpZmllci5iZWF1dGlmeSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlX2h0bWw7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IE9wdGlvbnMoKTtcbn07XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQmFzZU9wdGlvbnMgPSByZXF1aXJlKCcuLi9jb3JlL29wdGlvbnMnKS5PcHRpb25zO1xuXG5mdW5jdGlvbiBPcHRpb25zKG9wdGlvbnMpIHtcbiAgQmFzZU9wdGlvbnMuY2FsbCh0aGlzLCBvcHRpb25zLCAnaHRtbCcpO1xuICBpZiAodGhpcy50ZW1wbGF0aW5nLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnRlbXBsYXRpbmdbMF0gPT09ICdhdXRvJykge1xuICAgIHRoaXMudGVtcGxhdGluZyA9IFsnZGphbmdvJywgJ2VyYicsICdoYW5kbGViYXJzJywgJ3BocCddO1xuICB9XG5cbiAgdGhpcy5pbmRlbnRfaW5uZXJfaHRtbCA9IHRoaXMuX2dldF9ib29sZWFuKCdpbmRlbnRfaW5uZXJfaHRtbCcpO1xuICB0aGlzLmluZGVudF9ib2R5X2lubmVyX2h0bWwgPSB0aGlzLl9nZXRfYm9vbGVhbignaW5kZW50X2JvZHlfaW5uZXJfaHRtbCcsIHRydWUpO1xuICB0aGlzLmluZGVudF9oZWFkX2lubmVyX2h0bWwgPSB0aGlzLl9nZXRfYm9vbGVhbignaW5kZW50X2hlYWRfaW5uZXJfaHRtbCcsIHRydWUpO1xuXG4gIHRoaXMuaW5kZW50X2hhbmRsZWJhcnMgPSB0aGlzLl9nZXRfYm9vbGVhbignaW5kZW50X2hhbmRsZWJhcnMnLCB0cnVlKTtcbiAgdGhpcy53cmFwX2F0dHJpYnV0ZXMgPSB0aGlzLl9nZXRfc2VsZWN0aW9uKCd3cmFwX2F0dHJpYnV0ZXMnLFxuICAgIFsnYXV0bycsICdmb3JjZScsICdmb3JjZS1hbGlnbmVkJywgJ2ZvcmNlLWV4cGFuZC1tdWx0aWxpbmUnLCAnYWxpZ25lZC1tdWx0aXBsZScsICdwcmVzZXJ2ZScsICdwcmVzZXJ2ZS1hbGlnbmVkJ10pO1xuICB0aGlzLndyYXBfYXR0cmlidXRlc19taW5fYXR0cnMgPSB0aGlzLl9nZXRfbnVtYmVyKCd3cmFwX2F0dHJpYnV0ZXNfbWluX2F0dHJzJywgMik7XG4gIHRoaXMud3JhcF9hdHRyaWJ1dGVzX2luZGVudF9zaXplID0gdGhpcy5fZ2V0X251bWJlcignd3JhcF9hdHRyaWJ1dGVzX2luZGVudF9zaXplJywgdGhpcy5pbmRlbnRfc2l6ZSk7XG4gIHRoaXMuZXh0cmFfbGluZXJzID0gdGhpcy5fZ2V0X2FycmF5KCdleHRyYV9saW5lcnMnLCBbJ2hlYWQnLCAnYm9keScsICcvaHRtbCddKTtcblxuICAvLyBCbG9jayB2cyBpbmxpbmUgZWxlbWVudHNcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9CbG9jay1sZXZlbF9lbGVtZW50c1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0lubGluZV9lbGVtZW50c1xuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZG9tLmh0bWwjcGhyYXNpbmctY29udGVudFxuICB0aGlzLmlubGluZSA9IHRoaXMuX2dldF9hcnJheSgnaW5saW5lJywgW1xuICAgICdhJywgJ2FiYnInLCAnYXJlYScsICdhdWRpbycsICdiJywgJ2JkaScsICdiZG8nLCAnYnInLCAnYnV0dG9uJywgJ2NhbnZhcycsICdjaXRlJyxcbiAgICAnY29kZScsICdkYXRhJywgJ2RhdGFsaXN0JywgJ2RlbCcsICdkZm4nLCAnZW0nLCAnZW1iZWQnLCAnaScsICdpZnJhbWUnLCAnaW1nJyxcbiAgICAnaW5wdXQnLCAnaW5zJywgJ2tiZCcsICdrZXlnZW4nLCAnbGFiZWwnLCAnbWFwJywgJ21hcmsnLCAnbWF0aCcsICdtZXRlcicsICdub3NjcmlwdCcsXG4gICAgJ29iamVjdCcsICdvdXRwdXQnLCAncHJvZ3Jlc3MnLCAncScsICdydWJ5JywgJ3MnLCAnc2FtcCcsIC8qICdzY3JpcHQnLCAqLyAnc2VsZWN0JywgJ3NtYWxsJyxcbiAgICAnc3BhbicsICdzdHJvbmcnLCAnc3ViJywgJ3N1cCcsICdzdmcnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGltZScsICd1JywgJ3ZhcicsXG4gICAgJ3ZpZGVvJywgJ3dicicsICd0ZXh0JyxcbiAgICAvLyBvYnNvbGV0ZSBpbmxpbmUgdGFnc1xuICAgICdhY3JvbnltJywgJ2JpZycsICdzdHJpa2UnLCAndHQnXG4gIF0pO1xuICB0aGlzLnZvaWRfZWxlbWVudHMgPSB0aGlzLl9nZXRfYXJyYXkoJ3ZvaWRfZWxlbWVudHMnLCBbXG4gICAgLy8gSFRMTSB2b2lkIGVsZW1lbnRzIC0gYWthIHNlbGYtY2xvc2luZyB0YWdzIC0gYWthIHNpbmdsZXRvbnNcbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvaHRtbC93Zy9kcmFmdHMvaHRtbC9tYXN0ZXIvc3ludGF4Lmh0bWwjdm9pZC1lbGVtZW50c1xuICAgICdhcmVhJywgJ2Jhc2UnLCAnYnInLCAnY29sJywgJ2VtYmVkJywgJ2hyJywgJ2ltZycsICdpbnB1dCcsICdrZXlnZW4nLFxuICAgICdsaW5rJywgJ21lbnVpdGVtJywgJ21ldGEnLCAncGFyYW0nLCAnc291cmNlJywgJ3RyYWNrJywgJ3dicicsXG4gICAgLy8gTk9URTogT3B0aW9uYWwgdGFncyBhcmUgdG9vIGNvbXBsZXggZm9yIGEgc2ltcGxlIGxpc3RcbiAgICAvLyB0aGV5IGFyZSBoYXJkIGNvZGVkIGluIF9kb19vcHRpb25hbF9lbmRfZWxlbWVudFxuXG4gICAgLy8gRG9jdHlwZSBhbmQgeG1sIGVsZW1lbnRzXG4gICAgJyFkb2N0eXBlJywgJz94bWwnLFxuXG4gICAgLy8gb2Jzb2xldGUgdGFnc1xuICAgIC8vIGJhc2Vmb250OiBodHRwczovL3d3dy5jb21wdXRlcmhvcGUuY29tL2phcmdvbi9oL2h0bWwtYmFzZWZvbnQtdGFnLmh0bVxuICAgIC8vIGlzbmRleDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lzaW5kZXhcbiAgICAnYmFzZWZvbnQnLCAnaXNpbmRleCdcbiAgXSk7XG4gIHRoaXMudW5mb3JtYXR0ZWQgPSB0aGlzLl9nZXRfYXJyYXkoJ3VuZm9ybWF0dGVkJywgW10pO1xuICB0aGlzLmNvbnRlbnRfdW5mb3JtYXR0ZWQgPSB0aGlzLl9nZXRfYXJyYXkoJ2NvbnRlbnRfdW5mb3JtYXR0ZWQnLCBbXG4gICAgJ3ByZScsICd0ZXh0YXJlYSdcbiAgXSk7XG4gIHRoaXMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIgPSB0aGlzLl9nZXRfY2hhcmFjdGVycygndW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXInKTtcbiAgdGhpcy5pbmRlbnRfc2NyaXB0cyA9IHRoaXMuX2dldF9zZWxlY3Rpb24oJ2luZGVudF9zY3JpcHRzJywgWydub3JtYWwnLCAna2VlcCcsICdzZXBhcmF0ZSddKTtcblxufVxuT3B0aW9ucy5wcm90b3R5cGUgPSBuZXcgQmFzZU9wdGlvbnMoKTtcblxuXG5cbm1vZHVsZS5leHBvcnRzLk9wdGlvbnMgPSBPcHRpb25zO1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEJhc2VUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3Rva2VuaXplcicpLlRva2VuaXplcjtcbnZhciBCQVNFVE9LRU4gPSByZXF1aXJlKCcuLi9jb3JlL3Rva2VuaXplcicpLlRPS0VOO1xudmFyIERpcmVjdGl2ZXMgPSByZXF1aXJlKCcuLi9jb3JlL2RpcmVjdGl2ZXMnKS5EaXJlY3RpdmVzO1xudmFyIFRlbXBsYXRhYmxlUGF0dGVybiA9IHJlcXVpcmUoJy4uL2NvcmUvdGVtcGxhdGFibGVwYXR0ZXJuJykuVGVtcGxhdGFibGVQYXR0ZXJuO1xudmFyIFBhdHRlcm4gPSByZXF1aXJlKCcuLi9jb3JlL3BhdHRlcm4nKS5QYXR0ZXJuO1xuXG52YXIgVE9LRU4gPSB7XG4gIFRBR19PUEVOOiAnVEtfVEFHX09QRU4nLFxuICBUQUdfQ0xPU0U6ICdUS19UQUdfQ0xPU0UnLFxuICBBVFRSSUJVVEU6ICdUS19BVFRSSUJVVEUnLFxuICBFUVVBTFM6ICdUS19FUVVBTFMnLFxuICBWQUxVRTogJ1RLX1ZBTFVFJyxcbiAgQ09NTUVOVDogJ1RLX0NPTU1FTlQnLFxuICBURVhUOiAnVEtfVEVYVCcsXG4gIFVOS05PV046ICdUS19VTktOT1dOJyxcbiAgU1RBUlQ6IEJBU0VUT0tFTi5TVEFSVCxcbiAgUkFXOiBCQVNFVE9LRU4uUkFXLFxuICBFT0Y6IEJBU0VUT0tFTi5FT0Zcbn07XG5cbnZhciBkaXJlY3RpdmVzX2NvcmUgPSBuZXcgRGlyZWN0aXZlcygvPFxcIS0tLywgLy0tPi8pO1xuXG52YXIgVG9rZW5pemVyID0gZnVuY3Rpb24oaW5wdXRfc3RyaW5nLCBvcHRpb25zKSB7XG4gIEJhc2VUb2tlbml6ZXIuY2FsbCh0aGlzLCBpbnB1dF9zdHJpbmcsIG9wdGlvbnMpO1xuICB0aGlzLl9jdXJyZW50X3RhZ19uYW1lID0gJyc7XG5cbiAgLy8gV29yZHMgZW5kIGF0IHdoaXRlc3BhY2Ugb3Igd2hlbiBhIHRhZyBzdGFydHNcbiAgLy8gaWYgd2UgYXJlIGluZGVudGluZyBoYW5kbGViYXJzLCB0aGV5IGFyZSBjb25zaWRlcmVkIHRhZ3NcbiAgdmFyIHRlbXBsYXRhYmxlX3JlYWRlciA9IG5ldyBUZW1wbGF0YWJsZVBhdHRlcm4odGhpcy5faW5wdXQpLnJlYWRfb3B0aW9ucyh0aGlzLl9vcHRpb25zKTtcbiAgdmFyIHBhdHRlcm5fcmVhZGVyID0gbmV3IFBhdHRlcm4odGhpcy5faW5wdXQpO1xuXG4gIHRoaXMuX19wYXR0ZXJucyA9IHtcbiAgICB3b3JkOiB0ZW1wbGF0YWJsZV9yZWFkZXIudW50aWwoL1tcXG5cXHJcXHQgPF0vKSxcbiAgICBzaW5nbGVfcXVvdGU6IHRlbXBsYXRhYmxlX3JlYWRlci51bnRpbF9hZnRlcigvJy8pLFxuICAgIGRvdWJsZV9xdW90ZTogdGVtcGxhdGFibGVfcmVhZGVyLnVudGlsX2FmdGVyKC9cIi8pLFxuICAgIGF0dHJpYnV0ZTogdGVtcGxhdGFibGVfcmVhZGVyLnVudGlsKC9bXFxuXFxyXFx0ID0+XXxcXC8+LyksXG4gICAgZWxlbWVudF9uYW1lOiB0ZW1wbGF0YWJsZV9yZWFkZXIudW50aWwoL1tcXG5cXHJcXHQgPlxcL10vKSxcblxuICAgIGhhbmRsZWJhcnNfY29tbWVudDogcGF0dGVybl9yZWFkZXIuc3RhcnRpbmdfd2l0aCgve3shLS0vKS51bnRpbF9hZnRlcigvLS19fS8pLFxuICAgIGhhbmRsZWJhcnM6IHBhdHRlcm5fcmVhZGVyLnN0YXJ0aW5nX3dpdGgoL3t7LykudW50aWxfYWZ0ZXIoL319LyksXG4gICAgaGFuZGxlYmFyc19vcGVuOiBwYXR0ZXJuX3JlYWRlci51bnRpbCgvW1xcblxcclxcdCB9XS8pLFxuICAgIGhhbmRsZWJhcnNfcmF3X2Nsb3NlOiBwYXR0ZXJuX3JlYWRlci51bnRpbCgvfX0vKSxcbiAgICBjb21tZW50OiBwYXR0ZXJuX3JlYWRlci5zdGFydGluZ193aXRoKC88IS0tLykudW50aWxfYWZ0ZXIoLy0tPi8pLFxuICAgIGNkYXRhOiBwYXR0ZXJuX3JlYWRlci5zdGFydGluZ193aXRoKC88IVxcW0NEQVRBXFxbLykudW50aWxfYWZ0ZXIoL11dPi8pLFxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmRpdGlvbmFsX2NvbW1lbnRcbiAgICBjb25kaXRpb25hbF9jb21tZW50OiBwYXR0ZXJuX3JlYWRlci5zdGFydGluZ193aXRoKC88IVxcWy8pLnVudGlsX2FmdGVyKC9dPi8pLFxuICAgIHByb2Nlc3Npbmc6IHBhdHRlcm5fcmVhZGVyLnN0YXJ0aW5nX3dpdGgoLzxcXD8vKS51bnRpbF9hZnRlcigvXFw/Pi8pXG4gIH07XG5cbiAgaWYgKHRoaXMuX29wdGlvbnMuaW5kZW50X2hhbmRsZWJhcnMpIHtcbiAgICB0aGlzLl9fcGF0dGVybnMud29yZCA9IHRoaXMuX19wYXR0ZXJucy53b3JkLmV4Y2x1ZGUoJ2hhbmRsZWJhcnMnKTtcbiAgfVxuXG4gIHRoaXMuX3VuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyID0gbnVsbDtcblxuICBpZiAodGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcikge1xuICAgIHZhciBsaXRlcmFsX3JlZ2V4cCA9IHRoaXMuX2lucHV0LmdldF9saXRlcmFsX3JlZ2V4cCh0aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyKTtcbiAgICB0aGlzLl9fcGF0dGVybnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIgPVxuICAgICAgcGF0dGVybl9yZWFkZXIubWF0Y2hpbmcobGl0ZXJhbF9yZWdleHApXG4gICAgICAudW50aWxfYWZ0ZXIobGl0ZXJhbF9yZWdleHApO1xuICB9XG59O1xuVG9rZW5pemVyLnByb3RvdHlwZSA9IG5ldyBCYXNlVG9rZW5pemVyKCk7XG5cblRva2VuaXplci5wcm90b3R5cGUuX2lzX2NvbW1lbnQgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7IC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbiAgcmV0dXJuIGZhbHNlOyAvL2N1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uQ09NTUVOVCB8fCBjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlVOS05PV047XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc19vcGVuaW5nID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICByZXR1cm4gY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5UQUdfT1BFTjtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX2lzX2Nsb3NpbmcgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuLCBvcGVuX3Rva2VuKSB7XG4gIHJldHVybiBjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlRBR19DTE9TRSAmJlxuICAgIChvcGVuX3Rva2VuICYmIChcbiAgICAgICgoY3VycmVudF90b2tlbi50ZXh0ID09PSAnPicgfHwgY3VycmVudF90b2tlbi50ZXh0ID09PSAnLz4nKSAmJiBvcGVuX3Rva2VuLnRleHRbMF0gPT09ICc8JykgfHxcbiAgICAgIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICd9fScgJiYgb3Blbl90b2tlbi50ZXh0WzBdID09PSAneycgJiYgb3Blbl90b2tlbi50ZXh0WzFdID09PSAneycpKSk7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jdXJyZW50X3RhZ19uYW1lID0gJyc7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9nZXRfbmV4dF90b2tlbiA9IGZ1bmN0aW9uKHByZXZpb3VzX3Rva2VuLCBvcGVuX3Rva2VuKSB7IC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbiAgdmFyIHRva2VuID0gbnVsbDtcbiAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTtcbiAgdmFyIGMgPSB0aGlzLl9pbnB1dC5wZWVrKCk7XG5cbiAgaWYgKGMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLkVPRiwgJycpO1xuICB9XG5cbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9yZWFkX29wZW5faGFuZGxlYmFycyhjLCBvcGVuX3Rva2VuKTtcbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9yZWFkX2F0dHJpYnV0ZShjLCBwcmV2aW91c190b2tlbiwgb3Blbl90b2tlbik7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9jbG9zZShjLCBvcGVuX3Rva2VuKTtcbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9yZWFkX3Jhd19jb250ZW50KGMsIHByZXZpb3VzX3Rva2VuLCBvcGVuX3Rva2VuKTtcbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9yZWFkX2NvbnRlbnRfd29yZChjKTtcbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9yZWFkX2NvbW1lbnRfb3JfY2RhdGEoYyk7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9wcm9jZXNzaW5nKGMpO1xuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX3JlYWRfb3BlbihjLCBvcGVuX3Rva2VuKTtcbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uVU5LTk9XTiwgdGhpcy5faW5wdXQubmV4dCgpKTtcblxuICByZXR1cm4gdG9rZW47XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX2NvbW1lbnRfb3JfY2RhdGEgPSBmdW5jdGlvbihjKSB7IC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbiAgdmFyIHRva2VuID0gbnVsbDtcbiAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSBudWxsO1xuICB2YXIgZGlyZWN0aXZlcyA9IG51bGw7XG5cbiAgaWYgKGMgPT09ICc8Jykge1xuICAgIHZhciBwZWVrMSA9IHRoaXMuX2lucHV0LnBlZWsoMSk7XG4gICAgLy8gV2UgdHJlYXQgYWxsIGNvbW1lbnRzIGFzIGxpdGVyYWxzLCBldmVuIG1vcmUgdGhhbiBwcmVmb3JtYXR0ZWQgdGFnc1xuICAgIC8vIHdlIG9ubHkgbG9vayBmb3IgdGhlIGFwcHJvcHJpYXRlIGNsb3NpbmcgbWFya2VyXG4gICAgaWYgKHBlZWsxID09PSAnIScpIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMuY29tbWVudC5yZWFkKCk7XG5cbiAgICAgIC8vIG9ubHkgcHJvY2VzcyBkaXJlY3RpdmUgb24gaHRtbCBjb21tZW50c1xuICAgICAgaWYgKHJlc3VsdGluZ19zdHJpbmcpIHtcbiAgICAgICAgZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXNfY29yZS5nZXRfZGlyZWN0aXZlcyhyZXN1bHRpbmdfc3RyaW5nKTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZXMgJiYgZGlyZWN0aXZlcy5pZ25vcmUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICByZXN1bHRpbmdfc3RyaW5nICs9IGRpcmVjdGl2ZXNfY29yZS5yZWFkSWdub3JlZCh0aGlzLl9pbnB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMuY2RhdGEucmVhZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHRpbmdfc3RyaW5nKSB7XG4gICAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5DT01NRU5ULCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICAgIHRva2VuLmRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2tlbjtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRfcHJvY2Vzc2luZyA9IGZ1bmN0aW9uKGMpIHsgLy8ganNoaW50IHVudXNlZDpmYWxzZVxuICB2YXIgdG9rZW4gPSBudWxsO1xuICB2YXIgcmVzdWx0aW5nX3N0cmluZyA9IG51bGw7XG4gIHZhciBkaXJlY3RpdmVzID0gbnVsbDtcblxuICBpZiAoYyA9PT0gJzwnKSB7XG4gICAgdmFyIHBlZWsxID0gdGhpcy5faW5wdXQucGVlaygxKTtcbiAgICBpZiAocGVlazEgPT09ICchJyB8fCBwZWVrMSA9PT0gJz8nKSB7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmNvbmRpdGlvbmFsX2NvbW1lbnQucmVhZCgpO1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHJlc3VsdGluZ19zdHJpbmcgfHwgdGhpcy5fX3BhdHRlcm5zLnByb2Nlc3NpbmcucmVhZCgpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRpbmdfc3RyaW5nKSB7XG4gICAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5DT01NRU5ULCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICAgIHRva2VuLmRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2tlbjtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRfb3BlbiA9IGZ1bmN0aW9uKGMsIG9wZW5fdG9rZW4pIHtcbiAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSBudWxsO1xuICB2YXIgdG9rZW4gPSBudWxsO1xuICBpZiAoIW9wZW5fdG9rZW4pIHtcbiAgICBpZiAoYyA9PT0gJzwnKSB7XG5cbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgICBpZiAodGhpcy5faW5wdXQucGVlaygpID09PSAnLycpIHtcbiAgICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgICB9XG4gICAgICByZXN1bHRpbmdfc3RyaW5nICs9IHRoaXMuX19wYXR0ZXJucy5lbGVtZW50X25hbWUucmVhZCgpO1xuICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uVEFHX09QRU4sIHJlc3VsdGluZ19zdHJpbmcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9rZW47XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX29wZW5faGFuZGxlYmFycyA9IGZ1bmN0aW9uKGMsIG9wZW5fdG9rZW4pIHtcbiAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSBudWxsO1xuICB2YXIgdG9rZW4gPSBudWxsO1xuICBpZiAoIW9wZW5fdG9rZW4pIHtcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5pbmRlbnRfaGFuZGxlYmFycyAmJiBjID09PSAneycgJiYgdGhpcy5faW5wdXQucGVlaygxKSA9PT0gJ3snKSB7XG4gICAgICBpZiAodGhpcy5faW5wdXQucGVlaygyKSA9PT0gJyEnKSB7XG4gICAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFyc19jb21tZW50LnJlYWQoKTtcbiAgICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHJlc3VsdGluZ19zdHJpbmcgfHwgdGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnMucmVhZCgpO1xuICAgICAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5DT01NRU5ULCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFyc19vcGVuLnJlYWQoKTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uVEFHX09QRU4sIHJlc3VsdGluZ19zdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG9rZW47XG59O1xuXG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRfY2xvc2UgPSBmdW5jdGlvbihjLCBvcGVuX3Rva2VuKSB7XG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gbnVsbDtcbiAgdmFyIHRva2VuID0gbnVsbDtcbiAgaWYgKG9wZW5fdG9rZW4pIHtcbiAgICBpZiAob3Blbl90b2tlbi50ZXh0WzBdID09PSAnPCcgJiYgKGMgPT09ICc+JyB8fCAoYyA9PT0gJy8nICYmIHRoaXMuX2lucHV0LnBlZWsoMSkgPT09ICc+JykpKSB7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgaWYgKGMgPT09ICcvJykgeyAvLyAgZm9yIGNsb3NlIHRhZyBcIi8+XCJcbiAgICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgICB9XG4gICAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5UQUdfQ0xPU0UsIHJlc3VsdGluZ19zdHJpbmcpO1xuICAgIH0gZWxzZSBpZiAob3Blbl90b2tlbi50ZXh0WzBdID09PSAneycgJiYgYyA9PT0gJ30nICYmIHRoaXMuX2lucHV0LnBlZWsoMSkgPT09ICd9Jykge1xuICAgICAgdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uVEFHX0NMT1NFLCAnfX0nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9rZW47XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX2F0dHJpYnV0ZSA9IGZ1bmN0aW9uKGMsIHByZXZpb3VzX3Rva2VuLCBvcGVuX3Rva2VuKSB7XG4gIHZhciB0b2tlbiA9IG51bGw7XG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gJyc7XG4gIGlmIChvcGVuX3Rva2VuICYmIG9wZW5fdG9rZW4udGV4dFswXSA9PT0gJzwnKSB7XG5cbiAgICBpZiAoYyA9PT0gJz0nKSB7XG4gICAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5FUVVBTFMsIHRoaXMuX2lucHV0Lm5leHQoKSk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnXCInIHx8IGMgPT09IFwiJ1wiKSB7XG4gICAgICB2YXIgY29udGVudCA9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgIGlmIChjID09PSAnXCInKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gdGhpcy5fX3BhdHRlcm5zLmRvdWJsZV9xdW90ZS5yZWFkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZW50ICs9IHRoaXMuX19wYXR0ZXJucy5zaW5nbGVfcXVvdGUucmVhZCgpO1xuICAgICAgfVxuICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uVkFMVUUsIGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmF0dHJpYnV0ZS5yZWFkKCk7XG5cbiAgICAgIGlmIChyZXN1bHRpbmdfc3RyaW5nKSB7XG4gICAgICAgIGlmIChwcmV2aW91c190b2tlbi50eXBlID09PSBUT0tFTi5FUVVBTFMpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5WQUxVRSwgcmVzdWx0aW5nX3N0cmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uQVRUUklCVVRFLCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG9rZW47XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc19jb250ZW50X3VuZm9ybWF0dGVkID0gZnVuY3Rpb24odGFnX25hbWUpIHtcbiAgLy8gdm9pZF9lbGVtZW50cyBoYXZlIG5vIGNvbnRlbnQgYW5kIHNvIGNhbm5vdCBoYXZlIHVuZm9ybWF0dGVkIGNvbnRlbnRcbiAgLy8gc2NyaXB0IGFuZCBzdHlsZSB0YWdzIHNob3VsZCBhbHdheXMgYmUgcmVhZCBhcyB1bmZvcm1hdHRlZCBjb250ZW50XG4gIC8vIGZpbmFsbHkgY29udGVudF91bmZvcm1hdHRlZCBhbmQgdW5mb3JtYXR0ZWQgZWxlbWVudCBjb250ZW50cyBhcmUgdW5mb3JtYXR0ZWRcbiAgcmV0dXJuIHRoaXMuX29wdGlvbnMudm9pZF9lbGVtZW50cy5pbmRleE9mKHRhZ19uYW1lKSA9PT0gLTEgJiZcbiAgICAodGhpcy5fb3B0aW9ucy5jb250ZW50X3VuZm9ybWF0dGVkLmluZGV4T2YodGFnX25hbWUpICE9PSAtMSB8fFxuICAgICAgdGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZC5pbmRleE9mKHRhZ19uYW1lKSAhPT0gLTEpO1xufTtcblxuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX3Jhd19jb250ZW50ID0gZnVuY3Rpb24oYywgcHJldmlvdXNfdG9rZW4sIG9wZW5fdG9rZW4pIHsgLy8ganNoaW50IHVudXNlZDpmYWxzZVxuICB2YXIgcmVzdWx0aW5nX3N0cmluZyA9ICcnO1xuICBpZiAob3Blbl90b2tlbiAmJiBvcGVuX3Rva2VuLnRleHRbMF0gPT09ICd7Jykge1xuICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFyc19yYXdfY2xvc2UucmVhZCgpO1xuICB9IGVsc2UgaWYgKHByZXZpb3VzX3Rva2VuLnR5cGUgPT09IFRPS0VOLlRBR19DTE9TRSAmJlxuICAgIHByZXZpb3VzX3Rva2VuLm9wZW5lZC50ZXh0WzBdID09PSAnPCcgJiYgcHJldmlvdXNfdG9rZW4udGV4dFswXSAhPT0gJy8nKSB7XG4gICAgLy8gXl4gZW1wdHkgdGFnIGhhcyBubyBjb250ZW50IFxuICAgIHZhciB0YWdfbmFtZSA9IHByZXZpb3VzX3Rva2VuLm9wZW5lZC50ZXh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0YWdfbmFtZSA9PT0gJ3NjcmlwdCcgfHwgdGFnX25hbWUgPT09ICdzdHlsZScpIHtcbiAgICAgIC8vIFNjcmlwdCBhbmQgc3R5bGUgdGFncyBhcmUgYWxsb3dlZCB0byBoYXZlIGNvbW1lbnRzIHdyYXBwaW5nIHRoZWlyIGNvbnRlbnRcbiAgICAgIC8vIG9yIGp1c3QgaGF2ZSByZWd1bGFyIGNvbnRlbnQuXG4gICAgICB2YXIgdG9rZW4gPSB0aGlzLl9yZWFkX2NvbW1lbnRfb3JfY2RhdGEoYyk7XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgdG9rZW4udHlwZSA9IFRPS0VOLlRFWFQ7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9pbnB1dC5yZWFkVW50aWwobmV3IFJlZ0V4cCgnPC8nICsgdGFnX25hbWUgKyAnW1xcXFxuXFxcXHJcXFxcdCBdKj8+JywgJ2lnJykpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faXNfY29udGVudF91bmZvcm1hdHRlZCh0YWdfbmFtZSkpIHtcblxuICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX2lucHV0LnJlYWRVbnRpbChuZXcgUmVnRXhwKCc8LycgKyB0YWdfbmFtZSArICdbXFxcXG5cXFxcclxcXFx0IF0qPz4nLCAnaWcnKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlc3VsdGluZ19zdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlRFWFQsIHJlc3VsdGluZ19zdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX2NvbnRlbnRfd29yZCA9IGZ1bmN0aW9uKGMpIHtcbiAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSAnJztcbiAgaWYgKHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIpIHtcbiAgICBpZiAoYyA9PT0gdGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlclswXSkge1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX19wYXR0ZXJucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlci5yZWFkKCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZXN1bHRpbmdfc3RyaW5nKSB7XG4gICAgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX19wYXR0ZXJucy53b3JkLnJlYWQoKTtcbiAgfVxuICBpZiAocmVzdWx0aW5nX3N0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uVEVYVCwgcmVzdWx0aW5nX3N0cmluZyk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLlRva2VuaXplciA9IFRva2VuaXplcjtcbm1vZHVsZS5leHBvcnRzLlRPS0VOID0gVE9LRU47XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIganNfYmVhdXRpZnkgPSByZXF1aXJlKCcuL2phdmFzY3JpcHQvaW5kZXgnKTtcbnZhciBjc3NfYmVhdXRpZnkgPSByZXF1aXJlKCcuL2Nzcy9pbmRleCcpO1xudmFyIGh0bWxfYmVhdXRpZnkgPSByZXF1aXJlKCcuL2h0bWwvaW5kZXgnKTtcblxuZnVuY3Rpb24gc3R5bGVfaHRtbChodG1sX3NvdXJjZSwgb3B0aW9ucywganMsIGNzcykge1xuICBqcyA9IGpzIHx8IGpzX2JlYXV0aWZ5O1xuICBjc3MgPSBjc3MgfHwgY3NzX2JlYXV0aWZ5O1xuICByZXR1cm4gaHRtbF9iZWF1dGlmeShodG1sX3NvdXJjZSwgb3B0aW9ucywganMsIGNzcyk7XG59XG5zdHlsZV9odG1sLmRlZmF1bHRPcHRpb25zID0gaHRtbF9iZWF1dGlmeS5kZWZhdWx0T3B0aW9ucztcblxubW9kdWxlLmV4cG9ydHMuanMgPSBqc19iZWF1dGlmeTtcbm1vZHVsZS5leHBvcnRzLmNzcyA9IGNzc19iZWF1dGlmeTtcbm1vZHVsZS5leHBvcnRzLmh0bWwgPSBzdHlsZV9odG1sO1xuIiwiLyoganNoaW50IG5vZGU6IHRydWUsIGN1cmx5OiBmYWxzZSAqL1xuLy8gUGFydHMgb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUgaXMgdGFrZW4gZnJvbSBhY29ybi5cbi8vXG4vLyBBY29ybiB3YXMgd3JpdHRlbiBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCByZWxlYXNlZCB1bmRlciBhbiBNSVRcbi8vIGxpY2Vuc2UuIFRoZSBVbmljb2RlIHJlZ2V4cHMgKGZvciBpZGVudGlmaWVycyBhbmQgd2hpdGVzcGFjZSkgd2VyZVxuLy8gdGFrZW4gZnJvbSBbRXNwcmltYV0oaHR0cDovL2VzcHJpbWEub3JnKSBieSBBcml5YSBIaWRheWF0LlxuLy9cbi8vIEdpdCByZXBvc2l0b3JpZXMgZm9yIEFjb3JuIGFyZSBhdmFpbGFibGUgYXRcbi8vXG4vLyAgICAgaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvYWNvcm5cbi8vICAgICBodHRwczovL2dpdGh1Yi5jb20vbWFyaWpuaC9hY29ybi5naXRcblxuLy8gIyMgQ2hhcmFjdGVyIGNhdGVnb3JpZXNcblxuXG4ndXNlIHN0cmljdCc7XG5cbi8vIGFjb3JuIHVzZWQgY2hhciBjb2RlcyB0byBzcXVlZXplIHRoZSBsYXN0IGJpdCBvZiBwZXJmb3JtYW5jZSBvdXRcbi8vIEJlYXV0aWZpZXIgaXMgb2theSB3aXRob3V0IHRoYXQsIHNvIHdlJ3JlIHVzaW5nIHJlZ2V4XG4vLyBwZXJtaXQgIyAoMjMpLCAkICgzNiksIGFuZCBAICg2NCkuIEAgaXMgdXNlZCBpbiBFUzcgZGVjb3JhdG9ycy5cbi8vIDY1IHRocm91Z2ggOTEgYXJlIHVwcGVyY2FzZSBsZXR0ZXJzLlxuLy8gcGVybWl0IF8gKDk1KS5cbi8vIDk3IHRocm91Z2ggMTIzIGFyZSBsb3dlcmNhc2UgbGV0dGVycy5cbnZhciBiYXNlQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyA9IFwiXFxcXHgyM1xcXFx4MjRcXFxceDQwXFxcXHg0MS1cXFxceDVhXFxcXHg1ZlxcXFx4NjEtXFxcXHg3YVwiO1xuXG4vLyBpbnNpZGUgYW4gaWRlbnRpZmllciBAIGlzIG5vdCBhbGxvd2VkIGJ1dCAwLTkgYXJlLlxudmFyIGJhc2VBU0NJSWlkZW50aWZpZXJDaGFycyA9IFwiXFxcXHgyNFxcXFx4MzAtXFxcXHgzOVxcXFx4NDEtXFxcXHg1YVxcXFx4NWZcXFxceDYxLVxcXFx4N2FcIjtcblxuLy8gQmlnIHVnbHkgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IG1hdGNoIGNoYXJhY3RlcnMgaW4gdGhlXG4vLyB3aGl0ZXNwYWNlLCBpZGVudGlmaWVyLCBhbmQgaWRlbnRpZmllci1zdGFydCBjYXRlZ29yaWVzLiBUaGVzZVxuLy8gYXJlIG9ubHkgYXBwbGllZCB3aGVuIGEgY2hhcmFjdGVyIGlzIGZvdW5kIHRvIGFjdHVhbGx5IGhhdmUgYVxuLy8gY29kZSBwb2ludCBhYm92ZSAxMjguXG52YXIgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyA9IFwiXFxcXHhhYVxcXFx4YjVcXFxceGJhXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGY2XFxcXHhmOC1cXFxcdTAyYzFcXFxcdTAyYzYtXFxcXHUwMmQxXFxcXHUwMmUwLVxcXFx1MDJlNFxcXFx1MDJlY1xcXFx1MDJlZVxcXFx1MDM3MC1cXFxcdTAzNzRcXFxcdTAzNzZcXFxcdTAzNzdcXFxcdTAzN2EtXFxcXHUwMzdkXFxcXHUwMzg2XFxcXHUwMzg4LVxcXFx1MDM4YVxcXFx1MDM4Y1xcXFx1MDM4ZS1cXFxcdTAzYTFcXFxcdTAzYTMtXFxcXHUwM2Y1XFxcXHUwM2Y3LVxcXFx1MDQ4MVxcXFx1MDQ4YS1cXFxcdTA1MjdcXFxcdTA1MzEtXFxcXHUwNTU2XFxcXHUwNTU5XFxcXHUwNTYxLVxcXFx1MDU4N1xcXFx1MDVkMC1cXFxcdTA1ZWFcXFxcdTA1ZjAtXFxcXHUwNWYyXFxcXHUwNjIwLVxcXFx1MDY0YVxcXFx1MDY2ZVxcXFx1MDY2ZlxcXFx1MDY3MS1cXFxcdTA2ZDNcXFxcdTA2ZDVcXFxcdTA2ZTVcXFxcdTA2ZTZcXFxcdTA2ZWVcXFxcdTA2ZWZcXFxcdTA2ZmEtXFxcXHUwNmZjXFxcXHUwNmZmXFxcXHUwNzEwXFxcXHUwNzEyLVxcXFx1MDcyZlxcXFx1MDc0ZC1cXFxcdTA3YTVcXFxcdTA3YjFcXFxcdTA3Y2EtXFxcXHUwN2VhXFxcXHUwN2Y0XFxcXHUwN2Y1XFxcXHUwN2ZhXFxcXHUwODAwLVxcXFx1MDgxNVxcXFx1MDgxYVxcXFx1MDgyNFxcXFx1MDgyOFxcXFx1MDg0MC1cXFxcdTA4NThcXFxcdTA4YTBcXFxcdTA4YTItXFxcXHUwOGFjXFxcXHUwOTA0LVxcXFx1MDkzOVxcXFx1MDkzZFxcXFx1MDk1MFxcXFx1MDk1OC1cXFxcdTA5NjFcXFxcdTA5NzEtXFxcXHUwOTc3XFxcXHUwOTc5LVxcXFx1MDk3ZlxcXFx1MDk4NS1cXFxcdTA5OGNcXFxcdTA5OGZcXFxcdTA5OTBcXFxcdTA5OTMtXFxcXHUwOWE4XFxcXHUwOWFhLVxcXFx1MDliMFxcXFx1MDliMlxcXFx1MDliNi1cXFxcdTA5YjlcXFxcdTA5YmRcXFxcdTA5Y2VcXFxcdTA5ZGNcXFxcdTA5ZGRcXFxcdTA5ZGYtXFxcXHUwOWUxXFxcXHUwOWYwXFxcXHUwOWYxXFxcXHUwYTA1LVxcXFx1MGEwYVxcXFx1MGEwZlxcXFx1MGExMFxcXFx1MGExMy1cXFxcdTBhMjhcXFxcdTBhMmEtXFxcXHUwYTMwXFxcXHUwYTMyXFxcXHUwYTMzXFxcXHUwYTM1XFxcXHUwYTM2XFxcXHUwYTM4XFxcXHUwYTM5XFxcXHUwYTU5LVxcXFx1MGE1Y1xcXFx1MGE1ZVxcXFx1MGE3Mi1cXFxcdTBhNzRcXFxcdTBhODUtXFxcXHUwYThkXFxcXHUwYThmLVxcXFx1MGE5MVxcXFx1MGE5My1cXFxcdTBhYThcXFxcdTBhYWEtXFxcXHUwYWIwXFxcXHUwYWIyXFxcXHUwYWIzXFxcXHUwYWI1LVxcXFx1MGFiOVxcXFx1MGFiZFxcXFx1MGFkMFxcXFx1MGFlMFxcXFx1MGFlMVxcXFx1MGIwNS1cXFxcdTBiMGNcXFxcdTBiMGZcXFxcdTBiMTBcXFxcdTBiMTMtXFxcXHUwYjI4XFxcXHUwYjJhLVxcXFx1MGIzMFxcXFx1MGIzMlxcXFx1MGIzM1xcXFx1MGIzNS1cXFxcdTBiMzlcXFxcdTBiM2RcXFxcdTBiNWNcXFxcdTBiNWRcXFxcdTBiNWYtXFxcXHUwYjYxXFxcXHUwYjcxXFxcXHUwYjgzXFxcXHUwYjg1LVxcXFx1MGI4YVxcXFx1MGI4ZS1cXFxcdTBiOTBcXFxcdTBiOTItXFxcXHUwYjk1XFxcXHUwYjk5XFxcXHUwYjlhXFxcXHUwYjljXFxcXHUwYjllXFxcXHUwYjlmXFxcXHUwYmEzXFxcXHUwYmE0XFxcXHUwYmE4LVxcXFx1MGJhYVxcXFx1MGJhZS1cXFxcdTBiYjlcXFxcdTBiZDBcXFxcdTBjMDUtXFxcXHUwYzBjXFxcXHUwYzBlLVxcXFx1MGMxMFxcXFx1MGMxMi1cXFxcdTBjMjhcXFxcdTBjMmEtXFxcXHUwYzMzXFxcXHUwYzM1LVxcXFx1MGMzOVxcXFx1MGMzZFxcXFx1MGM1OFxcXFx1MGM1OVxcXFx1MGM2MFxcXFx1MGM2MVxcXFx1MGM4NS1cXFxcdTBjOGNcXFxcdTBjOGUtXFxcXHUwYzkwXFxcXHUwYzkyLVxcXFx1MGNhOFxcXFx1MGNhYS1cXFxcdTBjYjNcXFxcdTBjYjUtXFxcXHUwY2I5XFxcXHUwY2JkXFxcXHUwY2RlXFxcXHUwY2UwXFxcXHUwY2UxXFxcXHUwY2YxXFxcXHUwY2YyXFxcXHUwZDA1LVxcXFx1MGQwY1xcXFx1MGQwZS1cXFxcdTBkMTBcXFxcdTBkMTItXFxcXHUwZDNhXFxcXHUwZDNkXFxcXHUwZDRlXFxcXHUwZDYwXFxcXHUwZDYxXFxcXHUwZDdhLVxcXFx1MGQ3ZlxcXFx1MGQ4NS1cXFxcdTBkOTZcXFxcdTBkOWEtXFxcXHUwZGIxXFxcXHUwZGIzLVxcXFx1MGRiYlxcXFx1MGRiZFxcXFx1MGRjMC1cXFxcdTBkYzZcXFxcdTBlMDEtXFxcXHUwZTMwXFxcXHUwZTMyXFxcXHUwZTMzXFxcXHUwZTQwLVxcXFx1MGU0NlxcXFx1MGU4MVxcXFx1MGU4MlxcXFx1MGU4NFxcXFx1MGU4N1xcXFx1MGU4OFxcXFx1MGU4YVxcXFx1MGU4ZFxcXFx1MGU5NC1cXFxcdTBlOTdcXFxcdTBlOTktXFxcXHUwZTlmXFxcXHUwZWExLVxcXFx1MGVhM1xcXFx1MGVhNVxcXFx1MGVhN1xcXFx1MGVhYVxcXFx1MGVhYlxcXFx1MGVhZC1cXFxcdTBlYjBcXFxcdTBlYjJcXFxcdTBlYjNcXFxcdTBlYmRcXFxcdTBlYzAtXFxcXHUwZWM0XFxcXHUwZWM2XFxcXHUwZWRjLVxcXFx1MGVkZlxcXFx1MGYwMFxcXFx1MGY0MC1cXFxcdTBmNDdcXFxcdTBmNDktXFxcXHUwZjZjXFxcXHUwZjg4LVxcXFx1MGY4Y1xcXFx1MTAwMC1cXFxcdTEwMmFcXFxcdTEwM2ZcXFxcdTEwNTAtXFxcXHUxMDU1XFxcXHUxMDVhLVxcXFx1MTA1ZFxcXFx1MTA2MVxcXFx1MTA2NVxcXFx1MTA2NlxcXFx1MTA2ZS1cXFxcdTEwNzBcXFxcdTEwNzUtXFxcXHUxMDgxXFxcXHUxMDhlXFxcXHUxMGEwLVxcXFx1MTBjNVxcXFx1MTBjN1xcXFx1MTBjZFxcXFx1MTBkMC1cXFxcdTEwZmFcXFxcdTEwZmMtXFxcXHUxMjQ4XFxcXHUxMjRhLVxcXFx1MTI0ZFxcXFx1MTI1MC1cXFxcdTEyNTZcXFxcdTEyNThcXFxcdTEyNWEtXFxcXHUxMjVkXFxcXHUxMjYwLVxcXFx1MTI4OFxcXFx1MTI4YS1cXFxcdTEyOGRcXFxcdTEyOTAtXFxcXHUxMmIwXFxcXHUxMmIyLVxcXFx1MTJiNVxcXFx1MTJiOC1cXFxcdTEyYmVcXFxcdTEyYzBcXFxcdTEyYzItXFxcXHUxMmM1XFxcXHUxMmM4LVxcXFx1MTJkNlxcXFx1MTJkOC1cXFxcdTEzMTBcXFxcdTEzMTItXFxcXHUxMzE1XFxcXHUxMzE4LVxcXFx1MTM1YVxcXFx1MTM4MC1cXFxcdTEzOGZcXFxcdTEzYTAtXFxcXHUxM2Y0XFxcXHUxNDAxLVxcXFx1MTY2Y1xcXFx1MTY2Zi1cXFxcdTE2N2ZcXFxcdTE2ODEtXFxcXHUxNjlhXFxcXHUxNmEwLVxcXFx1MTZlYVxcXFx1MTZlZS1cXFxcdTE2ZjBcXFxcdTE3MDAtXFxcXHUxNzBjXFxcXHUxNzBlLVxcXFx1MTcxMVxcXFx1MTcyMC1cXFxcdTE3MzFcXFxcdTE3NDAtXFxcXHUxNzUxXFxcXHUxNzYwLVxcXFx1MTc2Y1xcXFx1MTc2ZS1cXFxcdTE3NzBcXFxcdTE3ODAtXFxcXHUxN2IzXFxcXHUxN2Q3XFxcXHUxN2RjXFxcXHUxODIwLVxcXFx1MTg3N1xcXFx1MTg4MC1cXFxcdTE4YThcXFxcdTE4YWFcXFxcdTE4YjAtXFxcXHUxOGY1XFxcXHUxOTAwLVxcXFx1MTkxY1xcXFx1MTk1MC1cXFxcdTE5NmRcXFxcdTE5NzAtXFxcXHUxOTc0XFxcXHUxOTgwLVxcXFx1MTlhYlxcXFx1MTljMS1cXFxcdTE5YzdcXFxcdTFhMDAtXFxcXHUxYTE2XFxcXHUxYTIwLVxcXFx1MWE1NFxcXFx1MWFhN1xcXFx1MWIwNS1cXFxcdTFiMzNcXFxcdTFiNDUtXFxcXHUxYjRiXFxcXHUxYjgzLVxcXFx1MWJhMFxcXFx1MWJhZVxcXFx1MWJhZlxcXFx1MWJiYS1cXFxcdTFiZTVcXFxcdTFjMDAtXFxcXHUxYzIzXFxcXHUxYzRkLVxcXFx1MWM0ZlxcXFx1MWM1YS1cXFxcdTFjN2RcXFxcdTFjZTktXFxcXHUxY2VjXFxcXHUxY2VlLVxcXFx1MWNmMVxcXFx1MWNmNVxcXFx1MWNmNlxcXFx1MWQwMC1cXFxcdTFkYmZcXFxcdTFlMDAtXFxcXHUxZjE1XFxcXHUxZjE4LVxcXFx1MWYxZFxcXFx1MWYyMC1cXFxcdTFmNDVcXFxcdTFmNDgtXFxcXHUxZjRkXFxcXHUxZjUwLVxcXFx1MWY1N1xcXFx1MWY1OVxcXFx1MWY1YlxcXFx1MWY1ZFxcXFx1MWY1Zi1cXFxcdTFmN2RcXFxcdTFmODAtXFxcXHUxZmI0XFxcXHUxZmI2LVxcXFx1MWZiY1xcXFx1MWZiZVxcXFx1MWZjMi1cXFxcdTFmYzRcXFxcdTFmYzYtXFxcXHUxZmNjXFxcXHUxZmQwLVxcXFx1MWZkM1xcXFx1MWZkNi1cXFxcdTFmZGJcXFxcdTFmZTAtXFxcXHUxZmVjXFxcXHUxZmYyLVxcXFx1MWZmNFxcXFx1MWZmNi1cXFxcdTFmZmNcXFxcdTIwNzFcXFxcdTIwN2ZcXFxcdTIwOTAtXFxcXHUyMDljXFxcXHUyMTAyXFxcXHUyMTA3XFxcXHUyMTBhLVxcXFx1MjExM1xcXFx1MjExNVxcXFx1MjExOS1cXFxcdTIxMWRcXFxcdTIxMjRcXFxcdTIxMjZcXFxcdTIxMjhcXFxcdTIxMmEtXFxcXHUyMTJkXFxcXHUyMTJmLVxcXFx1MjEzOVxcXFx1MjEzYy1cXFxcdTIxM2ZcXFxcdTIxNDUtXFxcXHUyMTQ5XFxcXHUyMTRlXFxcXHUyMTYwLVxcXFx1MjE4OFxcXFx1MmMwMC1cXFxcdTJjMmVcXFxcdTJjMzAtXFxcXHUyYzVlXFxcXHUyYzYwLVxcXFx1MmNlNFxcXFx1MmNlYi1cXFxcdTJjZWVcXFxcdTJjZjJcXFxcdTJjZjNcXFxcdTJkMDAtXFxcXHUyZDI1XFxcXHUyZDI3XFxcXHUyZDJkXFxcXHUyZDMwLVxcXFx1MmQ2N1xcXFx1MmQ2ZlxcXFx1MmQ4MC1cXFxcdTJkOTZcXFxcdTJkYTAtXFxcXHUyZGE2XFxcXHUyZGE4LVxcXFx1MmRhZVxcXFx1MmRiMC1cXFxcdTJkYjZcXFxcdTJkYjgtXFxcXHUyZGJlXFxcXHUyZGMwLVxcXFx1MmRjNlxcXFx1MmRjOC1cXFxcdTJkY2VcXFxcdTJkZDAtXFxcXHUyZGQ2XFxcXHUyZGQ4LVxcXFx1MmRkZVxcXFx1MmUyZlxcXFx1MzAwNS1cXFxcdTMwMDdcXFxcdTMwMjEtXFxcXHUzMDI5XFxcXHUzMDMxLVxcXFx1MzAzNVxcXFx1MzAzOC1cXFxcdTMwM2NcXFxcdTMwNDEtXFxcXHUzMDk2XFxcXHUzMDlkLVxcXFx1MzA5ZlxcXFx1MzBhMS1cXFxcdTMwZmFcXFxcdTMwZmMtXFxcXHUzMGZmXFxcXHUzMTA1LVxcXFx1MzEyZFxcXFx1MzEzMS1cXFxcdTMxOGVcXFxcdTMxYTAtXFxcXHUzMWJhXFxcXHUzMWYwLVxcXFx1MzFmZlxcXFx1MzQwMC1cXFxcdTRkYjVcXFxcdTRlMDAtXFxcXHU5ZmNjXFxcXHVhMDAwLVxcXFx1YTQ4Y1xcXFx1YTRkMC1cXFxcdWE0ZmRcXFxcdWE1MDAtXFxcXHVhNjBjXFxcXHVhNjEwLVxcXFx1YTYxZlxcXFx1YTYyYVxcXFx1YTYyYlxcXFx1YTY0MC1cXFxcdWE2NmVcXFxcdWE2N2YtXFxcXHVhNjk3XFxcXHVhNmEwLVxcXFx1YTZlZlxcXFx1YTcxNy1cXFxcdWE3MWZcXFxcdWE3MjItXFxcXHVhNzg4XFxcXHVhNzhiLVxcXFx1YTc4ZVxcXFx1YTc5MC1cXFxcdWE3OTNcXFxcdWE3YTAtXFxcXHVhN2FhXFxcXHVhN2Y4LVxcXFx1YTgwMVxcXFx1YTgwMy1cXFxcdWE4MDVcXFxcdWE4MDctXFxcXHVhODBhXFxcXHVhODBjLVxcXFx1YTgyMlxcXFx1YTg0MC1cXFxcdWE4NzNcXFxcdWE4ODItXFxcXHVhOGIzXFxcXHVhOGYyLVxcXFx1YThmN1xcXFx1YThmYlxcXFx1YTkwYS1cXFxcdWE5MjVcXFxcdWE5MzAtXFxcXHVhOTQ2XFxcXHVhOTYwLVxcXFx1YTk3Y1xcXFx1YTk4NC1cXFxcdWE5YjJcXFxcdWE5Y2ZcXFxcdWFhMDAtXFxcXHVhYTI4XFxcXHVhYTQwLVxcXFx1YWE0MlxcXFx1YWE0NC1cXFxcdWFhNGJcXFxcdWFhNjAtXFxcXHVhYTc2XFxcXHVhYTdhXFxcXHVhYTgwLVxcXFx1YWFhZlxcXFx1YWFiMVxcXFx1YWFiNVxcXFx1YWFiNlxcXFx1YWFiOS1cXFxcdWFhYmRcXFxcdWFhYzBcXFxcdWFhYzJcXFxcdWFhZGItXFxcXHVhYWRkXFxcXHVhYWUwLVxcXFx1YWFlYVxcXFx1YWFmMi1cXFxcdWFhZjRcXFxcdWFiMDEtXFxcXHVhYjA2XFxcXHVhYjA5LVxcXFx1YWIwZVxcXFx1YWIxMS1cXFxcdWFiMTZcXFxcdWFiMjAtXFxcXHVhYjI2XFxcXHVhYjI4LVxcXFx1YWIyZVxcXFx1YWJjMC1cXFxcdWFiZTJcXFxcdWFjMDAtXFxcXHVkN2EzXFxcXHVkN2IwLVxcXFx1ZDdjNlxcXFx1ZDdjYi1cXFxcdWQ3ZmJcXFxcdWY5MDAtXFxcXHVmYTZkXFxcXHVmYTcwLVxcXFx1ZmFkOVxcXFx1ZmIwMC1cXFxcdWZiMDZcXFxcdWZiMTMtXFxcXHVmYjE3XFxcXHVmYjFkXFxcXHVmYjFmLVxcXFx1ZmIyOFxcXFx1ZmIyYS1cXFxcdWZiMzZcXFxcdWZiMzgtXFxcXHVmYjNjXFxcXHVmYjNlXFxcXHVmYjQwXFxcXHVmYjQxXFxcXHVmYjQzXFxcXHVmYjQ0XFxcXHVmYjQ2LVxcXFx1ZmJiMVxcXFx1ZmJkMy1cXFxcdWZkM2RcXFxcdWZkNTAtXFxcXHVmZDhmXFxcXHVmZDkyLVxcXFx1ZmRjN1xcXFx1ZmRmMC1cXFxcdWZkZmJcXFxcdWZlNzAtXFxcXHVmZTc0XFxcXHVmZTc2LVxcXFx1ZmVmY1xcXFx1ZmYyMS1cXFxcdWZmM2FcXFxcdWZmNDEtXFxcXHVmZjVhXFxcXHVmZjY2LVxcXFx1ZmZiZVxcXFx1ZmZjMi1cXFxcdWZmYzdcXFxcdWZmY2EtXFxcXHVmZmNmXFxcXHVmZmQyLVxcXFx1ZmZkN1xcXFx1ZmZkYS1cXFxcdWZmZGNcIjtcbnZhciBub25BU0NJSWlkZW50aWZpZXJDaGFycyA9IFwiXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1MDQ4My1cXFxcdTA0ODdcXFxcdTA1OTEtXFxcXHUwNWJkXFxcXHUwNWJmXFxcXHUwNWMxXFxcXHUwNWMyXFxcXHUwNWM0XFxcXHUwNWM1XFxcXHUwNWM3XFxcXHUwNjEwLVxcXFx1MDYxYVxcXFx1MDYyMC1cXFxcdTA2NDlcXFxcdTA2NzItXFxcXHUwNmQzXFxcXHUwNmU3LVxcXFx1MDZlOFxcXFx1MDZmYi1cXFxcdTA2ZmNcXFxcdTA3MzAtXFxcXHUwNzRhXFxcXHUwODAwLVxcXFx1MDgxNFxcXFx1MDgxYi1cXFxcdTA4MjNcXFxcdTA4MjUtXFxcXHUwODI3XFxcXHUwODI5LVxcXFx1MDgyZFxcXFx1MDg0MC1cXFxcdTA4NTdcXFxcdTA4ZTQtXFxcXHUwOGZlXFxcXHUwOTAwLVxcXFx1MDkwM1xcXFx1MDkzYS1cXFxcdTA5M2NcXFxcdTA5M2UtXFxcXHUwOTRmXFxcXHUwOTUxLVxcXFx1MDk1N1xcXFx1MDk2Mi1cXFxcdTA5NjNcXFxcdTA5NjYtXFxcXHUwOTZmXFxcXHUwOTgxLVxcXFx1MDk4M1xcXFx1MDliY1xcXFx1MDliZS1cXFxcdTA5YzRcXFxcdTA5YzdcXFxcdTA5YzhcXFxcdTA5ZDdcXFxcdTA5ZGYtXFxcXHUwOWUwXFxcXHUwYTAxLVxcXFx1MGEwM1xcXFx1MGEzY1xcXFx1MGEzZS1cXFxcdTBhNDJcXFxcdTBhNDdcXFxcdTBhNDhcXFxcdTBhNGItXFxcXHUwYTRkXFxcXHUwYTUxXFxcXHUwYTY2LVxcXFx1MGE3MVxcXFx1MGE3NVxcXFx1MGE4MS1cXFxcdTBhODNcXFxcdTBhYmNcXFxcdTBhYmUtXFxcXHUwYWM1XFxcXHUwYWM3LVxcXFx1MGFjOVxcXFx1MGFjYi1cXFxcdTBhY2RcXFxcdTBhZTItXFxcXHUwYWUzXFxcXHUwYWU2LVxcXFx1MGFlZlxcXFx1MGIwMS1cXFxcdTBiMDNcXFxcdTBiM2NcXFxcdTBiM2UtXFxcXHUwYjQ0XFxcXHUwYjQ3XFxcXHUwYjQ4XFxcXHUwYjRiLVxcXFx1MGI0ZFxcXFx1MGI1NlxcXFx1MGI1N1xcXFx1MGI1Zi1cXFxcdTBiNjBcXFxcdTBiNjYtXFxcXHUwYjZmXFxcXHUwYjgyXFxcXHUwYmJlLVxcXFx1MGJjMlxcXFx1MGJjNi1cXFxcdTBiYzhcXFxcdTBiY2EtXFxcXHUwYmNkXFxcXHUwYmQ3XFxcXHUwYmU2LVxcXFx1MGJlZlxcXFx1MGMwMS1cXFxcdTBjMDNcXFxcdTBjNDYtXFxcXHUwYzQ4XFxcXHUwYzRhLVxcXFx1MGM0ZFxcXFx1MGM1NVxcXFx1MGM1NlxcXFx1MGM2Mi1cXFxcdTBjNjNcXFxcdTBjNjYtXFxcXHUwYzZmXFxcXHUwYzgyXFxcXHUwYzgzXFxcXHUwY2JjXFxcXHUwY2JlLVxcXFx1MGNjNFxcXFx1MGNjNi1cXFxcdTBjYzhcXFxcdTBjY2EtXFxcXHUwY2NkXFxcXHUwY2Q1XFxcXHUwY2Q2XFxcXHUwY2UyLVxcXFx1MGNlM1xcXFx1MGNlNi1cXFxcdTBjZWZcXFxcdTBkMDJcXFxcdTBkMDNcXFxcdTBkNDYtXFxcXHUwZDQ4XFxcXHUwZDU3XFxcXHUwZDYyLVxcXFx1MGQ2M1xcXFx1MGQ2Ni1cXFxcdTBkNmZcXFxcdTBkODJcXFxcdTBkODNcXFxcdTBkY2FcXFxcdTBkY2YtXFxcXHUwZGQ0XFxcXHUwZGQ2XFxcXHUwZGQ4LVxcXFx1MGRkZlxcXFx1MGRmMlxcXFx1MGRmM1xcXFx1MGUzNC1cXFxcdTBlM2FcXFxcdTBlNDAtXFxcXHUwZTQ1XFxcXHUwZTUwLVxcXFx1MGU1OVxcXFx1MGViNC1cXFxcdTBlYjlcXFxcdTBlYzgtXFxcXHUwZWNkXFxcXHUwZWQwLVxcXFx1MGVkOVxcXFx1MGYxOFxcXFx1MGYxOVxcXFx1MGYyMC1cXFxcdTBmMjlcXFxcdTBmMzVcXFxcdTBmMzdcXFxcdTBmMzlcXFxcdTBmNDEtXFxcXHUwZjQ3XFxcXHUwZjcxLVxcXFx1MGY4NFxcXFx1MGY4Ni1cXFxcdTBmODdcXFxcdTBmOGQtXFxcXHUwZjk3XFxcXHUwZjk5LVxcXFx1MGZiY1xcXFx1MGZjNlxcXFx1MTAwMC1cXFxcdTEwMjlcXFxcdTEwNDAtXFxcXHUxMDQ5XFxcXHUxMDY3LVxcXFx1MTA2ZFxcXFx1MTA3MS1cXFxcdTEwNzRcXFxcdTEwODItXFxcXHUxMDhkXFxcXHUxMDhmLVxcXFx1MTA5ZFxcXFx1MTM1ZC1cXFxcdTEzNWZcXFxcdTE3MGUtXFxcXHUxNzEwXFxcXHUxNzIwLVxcXFx1MTczMFxcXFx1MTc0MC1cXFxcdTE3NTBcXFxcdTE3NzJcXFxcdTE3NzNcXFxcdTE3ODAtXFxcXHUxN2IyXFxcXHUxN2RkXFxcXHUxN2UwLVxcXFx1MTdlOVxcXFx1MTgwYi1cXFxcdTE4MGRcXFxcdTE4MTAtXFxcXHUxODE5XFxcXHUxOTIwLVxcXFx1MTkyYlxcXFx1MTkzMC1cXFxcdTE5M2JcXFxcdTE5NTEtXFxcXHUxOTZkXFxcXHUxOWIwLVxcXFx1MTljMFxcXFx1MTljOC1cXFxcdTE5YzlcXFxcdTE5ZDAtXFxcXHUxOWQ5XFxcXHUxYTAwLVxcXFx1MWExNVxcXFx1MWEyMC1cXFxcdTFhNTNcXFxcdTFhNjAtXFxcXHUxYTdjXFxcXHUxYTdmLVxcXFx1MWE4OVxcXFx1MWE5MC1cXFxcdTFhOTlcXFxcdTFiNDYtXFxcXHUxYjRiXFxcXHUxYjUwLVxcXFx1MWI1OVxcXFx1MWI2Yi1cXFxcdTFiNzNcXFxcdTFiYjAtXFxcXHUxYmI5XFxcXHUxYmU2LVxcXFx1MWJmM1xcXFx1MWMwMC1cXFxcdTFjMjJcXFxcdTFjNDAtXFxcXHUxYzQ5XFxcXHUxYzViLVxcXFx1MWM3ZFxcXFx1MWNkMC1cXFxcdTFjZDJcXFxcdTFkMDAtXFxcXHUxZGJlXFxcXHUxZTAxLVxcXFx1MWYxNVxcXFx1MjAwY1xcXFx1MjAwZFxcXFx1MjAzZlxcXFx1MjA0MFxcXFx1MjA1NFxcXFx1MjBkMC1cXFxcdTIwZGNcXFxcdTIwZTFcXFxcdTIwZTUtXFxcXHUyMGYwXFxcXHUyZDgxLVxcXFx1MmQ5NlxcXFx1MmRlMC1cXFxcdTJkZmZcXFxcdTMwMjEtXFxcXHUzMDI4XFxcXHUzMDk5XFxcXHUzMDlhXFxcXHVhNjQwLVxcXFx1YTY2ZFxcXFx1YTY3NC1cXFxcdWE2N2RcXFxcdWE2OWZcXFxcdWE2ZjAtXFxcXHVhNmYxXFxcXHVhN2Y4LVxcXFx1YTgwMFxcXFx1YTgwNlxcXFx1YTgwYlxcXFx1YTgyMy1cXFxcdWE4MjdcXFxcdWE4ODAtXFxcXHVhODgxXFxcXHVhOGI0LVxcXFx1YThjNFxcXFx1YThkMC1cXFxcdWE4ZDlcXFxcdWE4ZjMtXFxcXHVhOGY3XFxcXHVhOTAwLVxcXFx1YTkwOVxcXFx1YTkyNi1cXFxcdWE5MmRcXFxcdWE5MzAtXFxcXHVhOTQ1XFxcXHVhOTgwLVxcXFx1YTk4M1xcXFx1YTliMy1cXFxcdWE5YzBcXFxcdWFhMDAtXFxcXHVhYTI3XFxcXHVhYTQwLVxcXFx1YWE0MVxcXFx1YWE0Yy1cXFxcdWFhNGRcXFxcdWFhNTAtXFxcXHVhYTU5XFxcXHVhYTdiXFxcXHVhYWUwLVxcXFx1YWFlOVxcXFx1YWFmMi1cXFxcdWFhZjNcXFxcdWFiYzAtXFxcXHVhYmUxXFxcXHVhYmVjXFxcXHVhYmVkXFxcXHVhYmYwLVxcXFx1YWJmOVxcXFx1ZmIyMC1cXFxcdWZiMjhcXFxcdWZlMDAtXFxcXHVmZTBmXFxcXHVmZTIwLVxcXFx1ZmUyNlxcXFx1ZmUzM1xcXFx1ZmUzNFxcXFx1ZmU0ZC1cXFxcdWZlNGZcXFxcdWZmMTAtXFxcXHVmZjE5XFxcXHVmZjNmXCI7XG4vL3ZhciBub25BU0NJSWlkZW50aWZpZXJTdGFydCA9IG5ldyBSZWdFeHAoXCJbXCIgKyBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzICsgXCJdXCIpO1xuLy92YXIgbm9uQVNDSUlpZGVudGlmaWVyID0gbmV3IFJlZ0V4cChcIltcIiArIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgKyBub25BU0NJSWlkZW50aWZpZXJDaGFycyArIFwiXVwiKTtcblxudmFyIGlkZW50aWZpZXJTdGFydCA9IFwiKD86XFxcXFxcXFx1WzAtOWEtZkEtRl17NH18W1wiICsgYmFzZUFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgKyBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzICsgXCJdKVwiO1xudmFyIGlkZW50aWZpZXJDaGFycyA9IFwiKD86XFxcXFxcXFx1WzAtOWEtZkEtRl17NH18W1wiICsgYmFzZUFTQ0lJaWRlbnRpZmllckNoYXJzICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyArIG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzICsgXCJdKSpcIjtcblxuZXhwb3J0cy5pZGVudGlmaWVyID0gbmV3IFJlZ0V4cChpZGVudGlmaWVyU3RhcnQgKyBpZGVudGlmaWVyQ2hhcnMsICdnJyk7XG5leHBvcnRzLmlkZW50aWZpZXJTdGFydCA9IG5ldyBSZWdFeHAoaWRlbnRpZmllclN0YXJ0KTtcbmV4cG9ydHMuaWRlbnRpZmllck1hdGNoID0gbmV3IFJlZ0V4cChcIig/OlxcXFxcXFxcdVswLTlhLWZBLUZdezR9fFtcIiArIGJhc2VBU0NJSWlkZW50aWZpZXJDaGFycyArIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgKyBub25BU0NJSWlkZW50aWZpZXJDaGFycyArIFwiXSkrXCIpO1xuXG52YXIgbm9uQVNDSUl3aGl0ZXNwYWNlID0gL1tcXHUxNjgwXFx1MTgwZVxcdTIwMDAtXFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdWZlZmZdLzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbi8vIFdoZXRoZXIgYSBzaW5nbGUgY2hhcmFjdGVyIGRlbm90ZXMgYSBuZXdsaW5lLlxuXG5leHBvcnRzLm5ld2xpbmUgPSAvW1xcblxcclxcdTIwMjhcXHUyMDI5XS87XG5cbi8vIE1hdGNoZXMgYSB3aG9sZSBsaW5lIGJyZWFrICh3aGVyZSBDUkxGIGlzIGNvbnNpZGVyZWQgYSBzaW5nbGVcbi8vIGxpbmUgYnJlYWspLiBVc2VkIHRvIGNvdW50IGxpbmVzLlxuXG4vLyBpbiBqYXZhc2NyaXB0LCB0aGVzZSB0d28gZGlmZmVyXG4vLyBpbiBweXRob24gdGhleSBhcmUgdGhlIHNhbWUsIGRpZmZlcmVudCBtZXRob2RzIGFyZSBjYWxsZWQgb24gdGhlbVxuZXhwb3J0cy5saW5lQnJlYWsgPSBuZXcgUmVnRXhwKCdcXHJcXG58JyArIGV4cG9ydHMubmV3bGluZS5zb3VyY2UpO1xuZXhwb3J0cy5hbGxMaW5lQnJlYWtzID0gbmV3IFJlZ0V4cChleHBvcnRzLmxpbmVCcmVhay5zb3VyY2UsICdnJyk7XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgT3V0cHV0ID0gcmVxdWlyZSgnLi4vY29yZS9vdXRwdXQnKS5PdXRwdXQ7XG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLi9jb3JlL3Rva2VuJykuVG9rZW47XG52YXIgYWNvcm4gPSByZXF1aXJlKCcuL2Fjb3JuJyk7XG52YXIgT3B0aW9ucyA9IHJlcXVpcmUoJy4vb3B0aW9ucycpLk9wdGlvbnM7XG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi90b2tlbml6ZXInKS5Ub2tlbml6ZXI7XG52YXIgbGluZV9zdGFydGVycyA9IHJlcXVpcmUoJy4vdG9rZW5pemVyJykubGluZV9zdGFydGVycztcbnZhciBwb3NpdGlvbmFibGVfb3BlcmF0b3JzID0gcmVxdWlyZSgnLi90b2tlbml6ZXInKS5wb3NpdGlvbmFibGVfb3BlcmF0b3JzO1xudmFyIFRPS0VOID0gcmVxdWlyZSgnLi90b2tlbml6ZXInKS5UT0tFTjtcblxuXG5mdW5jdGlvbiBpbl9hcnJheSh3aGF0LCBhcnIpIHtcbiAgcmV0dXJuIGFyci5pbmRleE9mKHdoYXQpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gbHRyaW0ocykge1xuICByZXR1cm4gcy5yZXBsYWNlKC9eXFxzKy9nLCAnJyk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTWFwRnJvbVN0cmluZ3MobGlzdCkge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZvciAodmFyIHggPSAwOyB4IDwgbGlzdC5sZW5ndGg7IHgrKykge1xuICAgIC8vIG1ha2UgdGhlIG1hcHBlZCBuYW1lcyB1bmRlcnNjb3JlZCBpbnN0ZWFkIG9mIGRhc2hcbiAgICByZXN1bHRbbGlzdFt4XS5yZXBsYWNlKC8tL2csICdfJyldID0gbGlzdFt4XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZXNlcnZlZF93b3JkKHRva2VuLCB3b3JkKSB7XG4gIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlID09PSBUT0tFTi5SRVNFUlZFRCAmJiB0b2tlbi50ZXh0ID09PSB3b3JkO1xufVxuXG5mdW5jdGlvbiByZXNlcnZlZF9hcnJheSh0b2tlbiwgd29yZHMpIHtcbiAgcmV0dXJuIHRva2VuICYmIHRva2VuLnR5cGUgPT09IFRPS0VOLlJFU0VSVkVEICYmIGluX2FycmF5KHRva2VuLnRleHQsIHdvcmRzKTtcbn1cbi8vIFVuc3VyZSBvZiB3aGF0IHRoZXkgbWVhbiwgYnV0IHRoZXkgd29yay4gV29ydGggY2xlYW5pbmcgdXAgaW4gZnV0dXJlLlxudmFyIHNwZWNpYWxfd29yZHMgPSBbJ2Nhc2UnLCAncmV0dXJuJywgJ2RvJywgJ2lmJywgJ3Rocm93JywgJ2Vsc2UnLCAnYXdhaXQnLCAnYnJlYWsnLCAnY29udGludWUnLCAnYXN5bmMnXTtcblxudmFyIHZhbGlkUG9zaXRpb25WYWx1ZXMgPSBbJ2JlZm9yZS1uZXdsaW5lJywgJ2FmdGVyLW5ld2xpbmUnLCAncHJlc2VydmUtbmV3bGluZSddO1xuXG4vLyBHZW5lcmF0ZSBtYXAgZnJvbSBhcnJheVxudmFyIE9QRVJBVE9SX1BPU0lUSU9OID0gZ2VuZXJhdGVNYXBGcm9tU3RyaW5ncyh2YWxpZFBvc2l0aW9uVmFsdWVzKTtcblxudmFyIE9QRVJBVE9SX1BPU0lUSU9OX0JFRk9SRV9PUl9QUkVTRVJWRSA9IFtPUEVSQVRPUl9QT1NJVElPTi5iZWZvcmVfbmV3bGluZSwgT1BFUkFUT1JfUE9TSVRJT04ucHJlc2VydmVfbmV3bGluZV07XG5cbnZhciBNT0RFID0ge1xuICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVtZW50JywgLy8gJ0JMT0NLJ1xuICBTdGF0ZW1lbnQ6ICdTdGF0ZW1lbnQnLCAvLyAnU1RBVEVNRU5UJ1xuICBPYmplY3RMaXRlcmFsOiAnT2JqZWN0TGl0ZXJhbCcsIC8vICdPQkpFQ1QnLFxuICBBcnJheUxpdGVyYWw6ICdBcnJheUxpdGVyYWwnLCAvLydbRVhQUkVTU0lPTl0nLFxuICBGb3JJbml0aWFsaXplcjogJ0ZvckluaXRpYWxpemVyJywgLy8nKEZPUi1FWFBSRVNTSU9OKScsXG4gIENvbmRpdGlvbmFsOiAnQ29uZGl0aW9uYWwnLCAvLycoQ09ORC1FWFBSRVNTSU9OKScsXG4gIEV4cHJlc3Npb246ICdFeHByZXNzaW9uJyAvLycoRVhQUkVTU0lPTiknXG59O1xuXG5mdW5jdGlvbiByZW1vdmVfcmVkdW5kYW50X2luZGVudGF0aW9uKG91dHB1dCwgZnJhbWUpIHtcbiAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBlZmZlY3RpdmUgYnV0IGhhcyBzb21lIGlzc3VlczpcbiAgLy8gICAgIC0gY2FuIGNhdXNlIGxpbmUgd3JhcCB0byBoYXBwZW4gdG9vIHNvb24gZHVlIHRvIGluZGVudCByZW1vdmFsXG4gIC8vICAgICAgICAgICBhZnRlciB3cmFwIHBvaW50cyBhcmUgY2FsY3VsYXRlZFxuICAvLyBUaGVzZSBpc3N1ZXMgYXJlIG1pbm9yIGNvbXBhcmVkIHRvIHVnbHkgaW5kZW50YXRpb24uXG5cbiAgaWYgKGZyYW1lLm11bHRpbGluZV9mcmFtZSB8fFxuICAgIGZyYW1lLm1vZGUgPT09IE1PREUuRm9ySW5pdGlhbGl6ZXIgfHxcbiAgICBmcmFtZS5tb2RlID09PSBNT0RFLkNvbmRpdGlvbmFsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gcmVtb3ZlIG9uZSBpbmRlbnQgZnJvbSBlYWNoIGxpbmUgaW5zaWRlIHRoaXMgc2VjdGlvblxuICBvdXRwdXQucmVtb3ZlX2luZGVudChmcmFtZS5zdGFydF9saW5lX2luZGV4KTtcbn1cblxuLy8gd2UgY291bGQgdXNlIGp1c3Qgc3RyaW5nLnNwbGl0LCBidXRcbi8vIElFIGRvZXNuJ3QgbGlrZSByZXR1cm5pbmcgZW1wdHkgc3RyaW5nc1xuZnVuY3Rpb24gc3BsaXRfbGluZWJyZWFrcyhzKSB7XG4gIC8vcmV0dXJuIHMuc3BsaXQoL1xceDBkXFx4MGF8XFx4MGEvKTtcblxuICBzID0gcy5yZXBsYWNlKGFjb3JuLmFsbExpbmVCcmVha3MsICdcXG4nKTtcbiAgdmFyIG91dCA9IFtdLFxuICAgIGlkeCA9IHMuaW5kZXhPZihcIlxcblwiKTtcbiAgd2hpbGUgKGlkeCAhPT0gLTEpIHtcbiAgICBvdXQucHVzaChzLnN1YnN0cmluZygwLCBpZHgpKTtcbiAgICBzID0gcy5zdWJzdHJpbmcoaWR4ICsgMSk7XG4gICAgaWR4ID0gcy5pbmRleE9mKFwiXFxuXCIpO1xuICB9XG4gIGlmIChzLmxlbmd0aCkge1xuICAgIG91dC5wdXNoKHMpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIGlzX2FycmF5KG1vZGUpIHtcbiAgcmV0dXJuIG1vZGUgPT09IE1PREUuQXJyYXlMaXRlcmFsO1xufVxuXG5mdW5jdGlvbiBpc19leHByZXNzaW9uKG1vZGUpIHtcbiAgcmV0dXJuIGluX2FycmF5KG1vZGUsIFtNT0RFLkV4cHJlc3Npb24sIE1PREUuRm9ySW5pdGlhbGl6ZXIsIE1PREUuQ29uZGl0aW9uYWxdKTtcbn1cblxuZnVuY3Rpb24gYWxsX2xpbmVzX3N0YXJ0X3dpdGgobGluZXMsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xuICAgIGlmIChsaW5lLmNoYXJBdCgwKSAhPT0gYykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZWFjaF9saW5lX21hdGNoZXNfaW5kZW50KGxpbmVzLCBpbmRlbnQpIHtcbiAgdmFyIGkgPSAwLFxuICAgIGxlbiA9IGxpbmVzLmxlbmd0aCxcbiAgICBsaW5lO1xuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgbGluZSA9IGxpbmVzW2ldO1xuICAgIC8vIGFsbG93IGVtcHR5IGxpbmVzIHRvIHBhc3MgdGhyb3VnaFxuICAgIGlmIChsaW5lICYmIGxpbmUuaW5kZXhPZihpbmRlbnQpICE9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5cbmZ1bmN0aW9uIEJlYXV0aWZpZXIoc291cmNlX3RleHQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHRoaXMuX3NvdXJjZV90ZXh0ID0gc291cmNlX3RleHQgfHwgJyc7XG5cbiAgdGhpcy5fb3V0cHV0ID0gbnVsbDtcbiAgdGhpcy5fdG9rZW5zID0gbnVsbDtcbiAgdGhpcy5fbGFzdF9sYXN0X3RleHQgPSBudWxsO1xuICB0aGlzLl9mbGFncyA9IG51bGw7XG4gIHRoaXMuX3ByZXZpb3VzX2ZsYWdzID0gbnVsbDtcblxuICB0aGlzLl9mbGFnX3N0b3JlID0gbnVsbDtcbiAgdGhpcy5fb3B0aW9ucyA9IG5ldyBPcHRpb25zKG9wdGlvbnMpO1xufVxuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5jcmVhdGVfZmxhZ3MgPSBmdW5jdGlvbihmbGFnc19iYXNlLCBtb2RlKSB7XG4gIHZhciBuZXh0X2luZGVudF9sZXZlbCA9IDA7XG4gIGlmIChmbGFnc19iYXNlKSB7XG4gICAgbmV4dF9pbmRlbnRfbGV2ZWwgPSBmbGFnc19iYXNlLmluZGVudGF0aW9uX2xldmVsO1xuICAgIGlmICghdGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfbmV3bGluZSgpICYmXG4gICAgICBmbGFnc19iYXNlLmxpbmVfaW5kZW50X2xldmVsID4gbmV4dF9pbmRlbnRfbGV2ZWwpIHtcbiAgICAgIG5leHRfaW5kZW50X2xldmVsID0gZmxhZ3NfYmFzZS5saW5lX2luZGVudF9sZXZlbDtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dF9mbGFncyA9IHtcbiAgICBtb2RlOiBtb2RlLFxuICAgIHBhcmVudDogZmxhZ3NfYmFzZSxcbiAgICBsYXN0X3Rva2VuOiBmbGFnc19iYXNlID8gZmxhZ3NfYmFzZS5sYXN0X3Rva2VuIDogbmV3IFRva2VuKFRPS0VOLlNUQVJUX0JMT0NLLCAnJyksIC8vIGxhc3QgdG9rZW4gdGV4dFxuICAgIGxhc3Rfd29yZDogZmxhZ3NfYmFzZSA/IGZsYWdzX2Jhc2UubGFzdF93b3JkIDogJycsIC8vIGxhc3QgVE9LRU4uV09SRCBwYXNzZWRcbiAgICBkZWNsYXJhdGlvbl9zdGF0ZW1lbnQ6IGZhbHNlLFxuICAgIGRlY2xhcmF0aW9uX2Fzc2lnbm1lbnQ6IGZhbHNlLFxuICAgIG11bHRpbGluZV9mcmFtZTogZmFsc2UsXG4gICAgaW5saW5lX2ZyYW1lOiBmYWxzZSxcbiAgICBpZl9ibG9jazogZmFsc2UsXG4gICAgZWxzZV9ibG9jazogZmFsc2UsXG4gICAgY2xhc3Nfc3RhcnRfYmxvY2s6IGZhbHNlLCAvLyBjbGFzcyBBIHsgSU5TSURFIEhFUkUgfSBvciBjbGFzcyBCIGV4dGVuZHMgQyB7IElOU0lERSBIRVJFIH1cbiAgICBkb19ibG9jazogZmFsc2UsXG4gICAgZG9fd2hpbGU6IGZhbHNlLFxuICAgIGltcG9ydF9ibG9jazogZmFsc2UsXG4gICAgaW5fY2FzZV9zdGF0ZW1lbnQ6IGZhbHNlLCAvLyBzd2l0Y2goLi4peyBJTlNJREUgSEVSRSB9XG4gICAgaW5fY2FzZTogZmFsc2UsIC8vIHdlJ3JlIG9uIHRoZSBleGFjdCBsaW5lIHdpdGggXCJjYXNlIDA6XCJcbiAgICBjYXNlX2JvZHk6IGZhbHNlLCAvLyB0aGUgaW5kZW50ZWQgY2FzZS1hY3Rpb24gYmxvY2tcbiAgICBjYXNlX2Jsb2NrOiBmYWxzZSwgLy8gdGhlIGluZGVudGVkIGNhc2UtYWN0aW9uIGJsb2NrIGlzIHdyYXBwZWQgd2l0aCB7fVxuICAgIGluZGVudGF0aW9uX2xldmVsOiBuZXh0X2luZGVudF9sZXZlbCxcbiAgICBhbGlnbm1lbnQ6IDAsXG4gICAgbGluZV9pbmRlbnRfbGV2ZWw6IGZsYWdzX2Jhc2UgPyBmbGFnc19iYXNlLmxpbmVfaW5kZW50X2xldmVsIDogbmV4dF9pbmRlbnRfbGV2ZWwsXG4gICAgc3RhcnRfbGluZV9pbmRleDogdGhpcy5fb3V0cHV0LmdldF9saW5lX251bWJlcigpLFxuICAgIHRlcm5hcnlfZGVwdGg6IDBcbiAgfTtcbiAgcmV0dXJuIG5leHRfZmxhZ3M7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbihzb3VyY2VfdGV4dCkge1xuICB2YXIgYmFzZUluZGVudFN0cmluZyA9IHNvdXJjZV90ZXh0Lm1hdGNoKC9eW1xcdCBdKi8pWzBdO1xuXG4gIHRoaXMuX2xhc3RfbGFzdF90ZXh0ID0gJyc7IC8vIHByZS1sYXN0IHRva2VuIHRleHRcbiAgdGhpcy5fb3V0cHV0ID0gbmV3IE91dHB1dCh0aGlzLl9vcHRpb25zLCBiYXNlSW5kZW50U3RyaW5nKTtcblxuICAvLyBJZiB0ZXN0aW5nIHRoZSBpZ25vcmUgZGlyZWN0aXZlLCBzdGFydCB3aXRoIG91dHB1dCBkaXNhYmxlIHNldCB0byB0cnVlXG4gIHRoaXMuX291dHB1dC5yYXcgPSB0aGlzLl9vcHRpb25zLnRlc3Rfb3V0cHV0X3JhdztcblxuXG4gIC8vIFN0YWNrIG9mIHBhcnNpbmcvZm9ybWF0dGluZyBzdGF0ZXMsIGluY2x1ZGluZyBNT0RFLlxuICAvLyBXZSB0b2tlbml6ZSwgcGFyc2UsIGFuZCBvdXRwdXQgaW4gYW4gYWxtb3N0IHB1cmVseSBhIGZvcndhcmQtb25seSBzdHJlYW0gb2YgdG9rZW4gaW5wdXRcbiAgLy8gYW5kIGZvcm1hdHRlZCBvdXRwdXQuICBUaGlzIG1ha2VzIHRoZSBiZWF1dGlmaWVyIGxlc3MgYWNjdXJhdGUgdGhhbiBmdWxsIHBhcnNlcnNcbiAgLy8gYnV0IGFsc28gZmFyIG1vcmUgdG9sZXJhbnQgb2Ygc3ludGF4IGVycm9ycy5cbiAgLy9cbiAgLy8gRm9yIGV4YW1wbGUsIHRoZSBkZWZhdWx0IG1vZGUgaXMgTU9ERS5CbG9ja1N0YXRlbWVudC4gSWYgd2Ugc2VlIGEgJ3snIHdlIHB1c2ggYSBuZXcgZnJhbWUgb2YgdHlwZVxuICAvLyBNT0RFLkJsb2NrU3RhdGVtZW50IG9uIHRoZSB0aGUgc3RhY2ssIGV2ZW4gdGhvdWdoIGl0IGNvdWxkIGJlIG9iamVjdCBsaXRlcmFsLiAgSWYgd2UgbGF0ZXJcbiAgLy8gZW5jb3VudGVyIGEgXCI6XCIsIHdlJ2xsIHN3aXRjaCB0byB0byBNT0RFLk9iamVjdExpdGVyYWwuICBJZiB3ZSB0aGVuIHNlZSBhIFwiO1wiLFxuICAvLyBtb3N0IGZ1bGwgcGFyc2VycyB3b3VsZCBkaWUsIGJ1dCB0aGUgYmVhdXRpZmllciBncmFjZWZ1bGx5IGZhbGxzIGJhY2sgdG9cbiAgLy8gTU9ERS5CbG9ja1N0YXRlbWVudCBhbmQgY29udGludWVzIG9uLlxuICB0aGlzLl9mbGFnX3N0b3JlID0gW107XG4gIHRoaXMuc2V0X21vZGUoTU9ERS5CbG9ja1N0YXRlbWVudCk7XG4gIHZhciB0b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKHNvdXJjZV90ZXh0LCB0aGlzLl9vcHRpb25zKTtcbiAgdGhpcy5fdG9rZW5zID0gdG9rZW5pemVyLnRva2VuaXplKCk7XG4gIHJldHVybiBzb3VyY2VfdGV4dDtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmJlYXV0aWZ5ID0gZnVuY3Rpb24oKSB7XG4gIC8vIGlmIGRpc2FibGVkLCByZXR1cm4gdGhlIGlucHV0IHVuY2hhbmdlZC5cbiAgaWYgKHRoaXMuX29wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlX3RleHQ7XG4gIH1cblxuICB2YXIgc3dlZXRfY29kZTtcbiAgdmFyIHNvdXJjZV90ZXh0ID0gdGhpcy5fcmVzZXQodGhpcy5fc291cmNlX3RleHQpO1xuXG4gIHZhciBlb2wgPSB0aGlzLl9vcHRpb25zLmVvbDtcbiAgaWYgKHRoaXMuX29wdGlvbnMuZW9sID09PSAnYXV0bycpIHtcbiAgICBlb2wgPSAnXFxuJztcbiAgICBpZiAoc291cmNlX3RleHQgJiYgYWNvcm4ubGluZUJyZWFrLnRlc3Qoc291cmNlX3RleHQgfHwgJycpKSB7XG4gICAgICBlb2wgPSBzb3VyY2VfdGV4dC5tYXRjaChhY29ybi5saW5lQnJlYWspWzBdO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50X3Rva2VuID0gdGhpcy5fdG9rZW5zLm5leHQoKTtcbiAgd2hpbGUgKGN1cnJlbnRfdG9rZW4pIHtcbiAgICB0aGlzLmhhbmRsZV90b2tlbihjdXJyZW50X3Rva2VuKTtcblxuICAgIHRoaXMuX2xhc3RfbGFzdF90ZXh0ID0gdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0O1xuICAgIHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4gPSBjdXJyZW50X3Rva2VuO1xuXG4gICAgY3VycmVudF90b2tlbiA9IHRoaXMuX3Rva2Vucy5uZXh0KCk7XG4gIH1cblxuICBzd2VldF9jb2RlID0gdGhpcy5fb3V0cHV0LmdldF9jb2RlKGVvbCk7XG5cbiAgcmV0dXJuIHN3ZWV0X2NvZGU7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5oYW5kbGVfdG9rZW4gPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpIHtcbiAgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uU1RBUlRfRVhQUikge1xuICAgIHRoaXMuaGFuZGxlX3N0YXJ0X2V4cHIoY3VycmVudF90b2tlbik7XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5FTkRfRVhQUikge1xuICAgIHRoaXMuaGFuZGxlX2VuZF9leHByKGN1cnJlbnRfdG9rZW4pO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uU1RBUlRfQkxPQ0spIHtcbiAgICB0aGlzLmhhbmRsZV9zdGFydF9ibG9jayhjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVORF9CTE9DSykge1xuICAgIHRoaXMuaGFuZGxlX2VuZF9ibG9jayhjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLldPUkQpIHtcbiAgICB0aGlzLmhhbmRsZV93b3JkKGN1cnJlbnRfdG9rZW4pO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uUkVTRVJWRUQpIHtcbiAgICB0aGlzLmhhbmRsZV93b3JkKGN1cnJlbnRfdG9rZW4pO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uU0VNSUNPTE9OKSB7XG4gICAgdGhpcy5oYW5kbGVfc2VtaWNvbG9uKGN1cnJlbnRfdG9rZW4pO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uU1RSSU5HKSB7XG4gICAgdGhpcy5oYW5kbGVfc3RyaW5nKGN1cnJlbnRfdG9rZW4pO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uRVFVQUxTKSB7XG4gICAgdGhpcy5oYW5kbGVfZXF1YWxzKGN1cnJlbnRfdG9rZW4pO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uT1BFUkFUT1IpIHtcbiAgICB0aGlzLmhhbmRsZV9vcGVyYXRvcihjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLkNPTU1BKSB7XG4gICAgdGhpcy5oYW5kbGVfY29tbWEoY3VycmVudF90b2tlbik7XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5CTE9DS19DT01NRU5UKSB7XG4gICAgdGhpcy5oYW5kbGVfYmxvY2tfY29tbWVudChjdXJyZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uQ09NTUVOVCkge1xuICAgIHRoaXMuaGFuZGxlX2NvbW1lbnQoY3VycmVudF90b2tlbiwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLkRPVCkge1xuICAgIHRoaXMuaGFuZGxlX2RvdChjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVPRikge1xuICAgIHRoaXMuaGFuZGxlX2VvZihjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlVOS05PV04pIHtcbiAgICB0aGlzLmhhbmRsZV91bmtub3duKGN1cnJlbnRfdG9rZW4sIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oYW5kbGVfdW5rbm93bihjdXJyZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5oYW5kbGVfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpIHtcbiAgdmFyIG5ld2xpbmVzID0gY3VycmVudF90b2tlbi5uZXdsaW5lcztcbiAgdmFyIGtlZXBfd2hpdGVzcGFjZSA9IHRoaXMuX29wdGlvbnMua2VlcF9hcnJheV9pbmRlbnRhdGlvbiAmJiBpc19hcnJheSh0aGlzLl9mbGFncy5tb2RlKTtcblxuICBpZiAoY3VycmVudF90b2tlbi5jb21tZW50c19iZWZvcmUpIHtcbiAgICB2YXIgY29tbWVudF90b2tlbiA9IGN1cnJlbnRfdG9rZW4uY29tbWVudHNfYmVmb3JlLm5leHQoKTtcbiAgICB3aGlsZSAoY29tbWVudF90b2tlbikge1xuICAgICAgLy8gVGhlIGNsZWFuZXN0IGhhbmRsaW5nIG9mIGlubGluZSBjb21tZW50cyBpcyB0byB0cmVhdCB0aGVtIGFzIHRob3VnaCB0aGV5IGFyZW4ndCB0aGVyZS5cbiAgICAgIC8vIEp1c3QgY29udGludWUgZm9ybWF0dGluZyBhbmQgdGhlIGJlaGF2aW9yIHNob3VsZCBiZSBsb2dpY2FsLlxuICAgICAgLy8gQWxzbyBpZ25vcmUgdW5rbm93biB0b2tlbnMuICBBZ2FpbiwgdGhpcyBzaG91bGQgcmVzdWx0IGluIGJldHRlciBiZWhhdmlvci5cbiAgICAgIHRoaXMuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzKGNvbW1lbnRfdG9rZW4sIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG4gICAgICB0aGlzLmhhbmRsZV90b2tlbihjb21tZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICAgICAgY29tbWVudF90b2tlbiA9IGN1cnJlbnRfdG9rZW4uY29tbWVudHNfYmVmb3JlLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoa2VlcF93aGl0ZXNwYWNlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdsaW5lczsgaSArPSAxKSB7XG4gICAgICB0aGlzLnByaW50X25ld2xpbmUoaSA+IDAsIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLl9vcHRpb25zLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcyAmJiBuZXdsaW5lcyA+IHRoaXMuX29wdGlvbnMubWF4X3ByZXNlcnZlX25ld2xpbmVzKSB7XG4gICAgICBuZXdsaW5lcyA9IHRoaXMuX29wdGlvbnMubWF4X3ByZXNlcnZlX25ld2xpbmVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9vcHRpb25zLnByZXNlcnZlX25ld2xpbmVzKSB7XG4gICAgICBpZiAobmV3bGluZXMgPiAxKSB7XG4gICAgICAgIHRoaXMucHJpbnRfbmV3bGluZShmYWxzZSwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBuZXdsaW5lczsgaiArPSAxKSB7XG4gICAgICAgICAgdGhpcy5wcmludF9uZXdsaW5lKHRydWUsIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxufTtcblxudmFyIG5ld2xpbmVfcmVzdHJpY3RlZF90b2tlbnMgPSBbJ2FzeW5jJywgJ2JyZWFrJywgJ2NvbnRpbnVlJywgJ3JldHVybicsICd0aHJvdycsICd5aWVsZCddO1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lID0gZnVuY3Rpb24oY3VycmVudF90b2tlbiwgZm9yY2VfbGluZXdyYXApIHtcbiAgZm9yY2VfbGluZXdyYXAgPSAoZm9yY2VfbGluZXdyYXAgPT09IHVuZGVmaW5lZCkgPyBmYWxzZSA6IGZvcmNlX2xpbmV3cmFwO1xuXG4gIC8vIE5ldmVyIHdyYXAgdGhlIGZpcnN0IHRva2VuIG9uIGEgbGluZVxuICBpZiAodGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfbmV3bGluZSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNob3VsZFByZXNlcnZlT3JGb3JjZSA9ICh0aGlzLl9vcHRpb25zLnByZXNlcnZlX25ld2xpbmVzICYmIGN1cnJlbnRfdG9rZW4ubmV3bGluZXMpIHx8IGZvcmNlX2xpbmV3cmFwO1xuICB2YXIgb3BlcmF0b3JMb2dpY0FwcGxpZXMgPSBpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQsIHBvc2l0aW9uYWJsZV9vcGVyYXRvcnMpIHx8XG4gICAgaW5fYXJyYXkoY3VycmVudF90b2tlbi50ZXh0LCBwb3NpdGlvbmFibGVfb3BlcmF0b3JzKTtcblxuICBpZiAob3BlcmF0b3JMb2dpY0FwcGxpZXMpIHtcbiAgICB2YXIgc2hvdWxkUHJpbnRPcGVyYXRvck5ld2xpbmUgPSAoXG4gICAgICAgIGluX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCwgcG9zaXRpb25hYmxlX29wZXJhdG9ycykgJiZcbiAgICAgICAgaW5fYXJyYXkodGhpcy5fb3B0aW9ucy5vcGVyYXRvcl9wb3NpdGlvbiwgT1BFUkFUT1JfUE9TSVRJT05fQkVGT1JFX09SX1BSRVNFUlZFKVxuICAgICAgKSB8fFxuICAgICAgaW5fYXJyYXkoY3VycmVudF90b2tlbi50ZXh0LCBwb3NpdGlvbmFibGVfb3BlcmF0b3JzKTtcbiAgICBzaG91bGRQcmVzZXJ2ZU9yRm9yY2UgPSBzaG91bGRQcmVzZXJ2ZU9yRm9yY2UgJiYgc2hvdWxkUHJpbnRPcGVyYXRvck5ld2xpbmU7XG4gIH1cblxuICBpZiAoc2hvdWxkUHJlc2VydmVPckZvcmNlKSB7XG4gICAgdGhpcy5wcmludF9uZXdsaW5lKGZhbHNlLCB0cnVlKTtcbiAgfSBlbHNlIGlmICh0aGlzLl9vcHRpb25zLndyYXBfbGluZV9sZW5ndGgpIHtcbiAgICBpZiAocmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgbmV3bGluZV9yZXN0cmljdGVkX3Rva2VucykpIHtcbiAgICAgIC8vIFRoZXNlIHRva2VucyBzaG91bGQgbmV2ZXIgaGF2ZSBhIG5ld2xpbmUgaW5zZXJ0ZWRcbiAgICAgIC8vIGJldHdlZW4gdGhlbSBhbmQgdGhlIGZvbGxvd2luZyBleHByZXNzaW9uLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9vdXRwdXQuc2V0X3dyYXBfcG9pbnQoKTtcbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUucHJpbnRfbmV3bGluZSA9IGZ1bmN0aW9uKGZvcmNlX25ld2xpbmUsIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncykge1xuICBpZiAoIXByZXNlcnZlX3N0YXRlbWVudF9mbGFncykge1xuICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgIT09ICc7JyAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgIT09ICcsJyAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgIT09ICc9JyAmJiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlICE9PSBUT0tFTi5PUEVSQVRPUiB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICctLScgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnKysnKSkge1xuICAgICAgdmFyIG5leHRfdG9rZW4gPSB0aGlzLl90b2tlbnMucGVlaygpO1xuICAgICAgd2hpbGUgKHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50ICYmXG4gICAgICAgICEodGhpcy5fZmxhZ3MuaWZfYmxvY2sgJiYgcmVzZXJ2ZWRfd29yZChuZXh0X3Rva2VuLCAnZWxzZScpKSAmJlxuICAgICAgICAhdGhpcy5fZmxhZ3MuZG9fYmxvY2spIHtcbiAgICAgICAgdGhpcy5yZXN0b3JlX21vZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZShmb3JjZV9uZXdsaW5lKSkge1xuICAgIHRoaXMuX2ZsYWdzLm11bHRpbGluZV9mcmFtZSA9IHRydWU7XG4gIH1cbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLnByaW50X3Rva2VuX2xpbmVfaW5kZW50YXRpb24gPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIGlmICh0aGlzLl9vdXRwdXQuanVzdF9hZGRlZF9uZXdsaW5lKCkpIHtcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5rZWVwX2FycmF5X2luZGVudGF0aW9uICYmXG4gICAgICBjdXJyZW50X3Rva2VuLm5ld2xpbmVzICYmXG4gICAgICAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnWycgfHwgaXNfYXJyYXkodGhpcy5fZmxhZ3MubW9kZSkpKSB7XG4gICAgICB0aGlzLl9vdXRwdXQuY3VycmVudF9saW5lLnNldF9pbmRlbnQoLTEpO1xuICAgICAgdGhpcy5fb3V0cHV0LmN1cnJlbnRfbGluZS5wdXNoKGN1cnJlbnRfdG9rZW4ud2hpdGVzcGFjZV9iZWZvcmUpO1xuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fb3V0cHV0LnNldF9pbmRlbnQodGhpcy5fZmxhZ3MuaW5kZW50YXRpb25fbGV2ZWwsIHRoaXMuX2ZsYWdzLmFsaWdubWVudCkpIHtcbiAgICAgIHRoaXMuX2ZsYWdzLmxpbmVfaW5kZW50X2xldmVsID0gdGhpcy5fZmxhZ3MuaW5kZW50YXRpb25fbGV2ZWw7XG4gICAgfVxuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5wcmludF90b2tlbiA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHtcbiAgaWYgKHRoaXMuX291dHB1dC5yYXcpIHtcbiAgICB0aGlzLl9vdXRwdXQuYWRkX3Jhd190b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5fb3B0aW9ucy5jb21tYV9maXJzdCAmJiBjdXJyZW50X3Rva2VuLnByZXZpb3VzICYmIGN1cnJlbnRfdG9rZW4ucHJldmlvdXMudHlwZSA9PT0gVE9LRU4uQ09NTUEgJiZcbiAgICB0aGlzLl9vdXRwdXQuanVzdF9hZGRlZF9uZXdsaW5lKCkpIHtcbiAgICBpZiAodGhpcy5fb3V0cHV0LnByZXZpb3VzX2xpbmUubGFzdCgpID09PSAnLCcpIHtcbiAgICAgIHZhciBwb3BwZWQgPSB0aGlzLl9vdXRwdXQucHJldmlvdXNfbGluZS5wb3AoKTtcbiAgICAgIC8vIGlmIHRoZSBjb21tYSB3YXMgYWxyZWFkeSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsXG4gICAgICAvLyBwdWxsIGJhY2sgb250byB0aGF0IGxpbmUgYW5kIHJlcHJpbnQgdGhlIGluZGVudGF0aW9uXG4gICAgICBpZiAodGhpcy5fb3V0cHV0LnByZXZpb3VzX2xpbmUuaXNfZW1wdHkoKSkge1xuICAgICAgICB0aGlzLl9vdXRwdXQucHJldmlvdXNfbGluZS5wdXNoKHBvcHBlZCk7XG4gICAgICAgIHRoaXMuX291dHB1dC50cmltKHRydWUpO1xuICAgICAgICB0aGlzLl9vdXRwdXQuY3VycmVudF9saW5lLnBvcCgpO1xuICAgICAgICB0aGlzLl9vdXRwdXQudHJpbSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgdGhlIGNvbW1hIGluIGZyb250IG9mIHRoZSBuZXh0IHRva2VuXG4gICAgICB0aGlzLnByaW50X3Rva2VuX2xpbmVfaW5kZW50YXRpb24oY3VycmVudF90b2tlbik7XG4gICAgICB0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKCcsJyk7XG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnByaW50X3Rva2VuX2xpbmVfaW5kZW50YXRpb24oY3VycmVudF90b2tlbik7XG4gIHRoaXMuX291dHB1dC5ub25fYnJlYWtpbmdfc3BhY2UgPSB0cnVlO1xuICB0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKGN1cnJlbnRfdG9rZW4udGV4dCk7XG4gIGlmICh0aGlzLl9vdXRwdXQucHJldmlvdXNfdG9rZW5fd3JhcHBlZCkge1xuICAgIHRoaXMuX2ZsYWdzLm11bHRpbGluZV9mcmFtZSA9IHRydWU7XG4gIH1cbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmluZGVudCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9mbGFncy5pbmRlbnRhdGlvbl9sZXZlbCArPSAxO1xuICB0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLl9mbGFncy5pbmRlbnRhdGlvbl9sZXZlbCwgdGhpcy5fZmxhZ3MuYWxpZ25tZW50KTtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmRlaW5kZW50ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9mbGFncy5pbmRlbnRhdGlvbl9sZXZlbCA+IDAgJiZcbiAgICAoKCF0aGlzLl9mbGFncy5wYXJlbnQpIHx8IHRoaXMuX2ZsYWdzLmluZGVudGF0aW9uX2xldmVsID4gdGhpcy5fZmxhZ3MucGFyZW50LmluZGVudGF0aW9uX2xldmVsKSkge1xuICAgIHRoaXMuX2ZsYWdzLmluZGVudGF0aW9uX2xldmVsIC09IDE7XG4gICAgdGhpcy5fb3V0cHV0LnNldF9pbmRlbnQodGhpcy5fZmxhZ3MuaW5kZW50YXRpb25fbGV2ZWwsIHRoaXMuX2ZsYWdzLmFsaWdubWVudCk7XG4gIH1cbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLnNldF9tb2RlID0gZnVuY3Rpb24obW9kZSkge1xuICBpZiAodGhpcy5fZmxhZ3MpIHtcbiAgICB0aGlzLl9mbGFnX3N0b3JlLnB1c2godGhpcy5fZmxhZ3MpO1xuICAgIHRoaXMuX3ByZXZpb3VzX2ZsYWdzID0gdGhpcy5fZmxhZ3M7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fcHJldmlvdXNfZmxhZ3MgPSB0aGlzLmNyZWF0ZV9mbGFncyhudWxsLCBtb2RlKTtcbiAgfVxuXG4gIHRoaXMuX2ZsYWdzID0gdGhpcy5jcmVhdGVfZmxhZ3ModGhpcy5fcHJldmlvdXNfZmxhZ3MsIG1vZGUpO1xuICB0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLl9mbGFncy5pbmRlbnRhdGlvbl9sZXZlbCwgdGhpcy5fZmxhZ3MuYWxpZ25tZW50KTtcbn07XG5cblxuQmVhdXRpZmllci5wcm90b3R5cGUucmVzdG9yZV9tb2RlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9mbGFnX3N0b3JlLmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLl9wcmV2aW91c19mbGFncyA9IHRoaXMuX2ZsYWdzO1xuICAgIHRoaXMuX2ZsYWdzID0gdGhpcy5fZmxhZ19zdG9yZS5wb3AoKTtcbiAgICBpZiAodGhpcy5fcHJldmlvdXNfZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQpIHtcbiAgICAgIHJlbW92ZV9yZWR1bmRhbnRfaW5kZW50YXRpb24odGhpcy5fb3V0cHV0LCB0aGlzLl9wcmV2aW91c19mbGFncyk7XG4gICAgfVxuICAgIHRoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuX2ZsYWdzLmluZGVudGF0aW9uX2xldmVsLCB0aGlzLl9mbGFncy5hbGlnbm1lbnQpO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5zdGFydF9vZl9vYmplY3RfcHJvcGVydHkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2ZsYWdzLnBhcmVudC5tb2RlID09PSBNT0RFLk9iamVjdExpdGVyYWwgJiYgdGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQgJiYgKFxuICAgICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICc6JyAmJiB0aGlzLl9mbGFncy50ZXJuYXJ5X2RlcHRoID09PSAwKSB8fCAocmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgWydnZXQnLCAnc2V0J10pKSk7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5zdGFydF9vZl9zdGF0ZW1lbnQgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIHZhciBzdGFydCA9IGZhbHNlO1xuICBzdGFydCA9IHN0YXJ0IHx8IHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIFsndmFyJywgJ2xldCcsICdjb25zdCddKSAmJiBjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLldPUkQ7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgcmVzZXJ2ZWRfd29yZCh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLCAnZG8nKTtcbiAgc3RhcnQgPSBzdGFydCB8fCAoISh0aGlzLl9mbGFncy5wYXJlbnQubW9kZSA9PT0gTU9ERS5PYmplY3RMaXRlcmFsICYmIHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50KSkgJiYgcmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgbmV3bGluZV9yZXN0cmljdGVkX3Rva2VucykgJiYgIWN1cnJlbnRfdG9rZW4ubmV3bGluZXM7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgcmVzZXJ2ZWRfd29yZCh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLCAnZWxzZScpICYmXG4gICAgIShyZXNlcnZlZF93b3JkKGN1cnJlbnRfdG9rZW4sICdpZicpICYmICFjdXJyZW50X3Rva2VuLmNvbW1lbnRzX2JlZm9yZSk7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0VYUFIgJiYgKHRoaXMuX3ByZXZpb3VzX2ZsYWdzLm1vZGUgPT09IE1PREUuRm9ySW5pdGlhbGl6ZXIgfHwgdGhpcy5fcHJldmlvdXNfZmxhZ3MubW9kZSA9PT0gTU9ERS5Db25kaXRpb25hbCkpO1xuICBzdGFydCA9IHN0YXJ0IHx8ICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLldPUkQgJiYgdGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5CbG9ja1N0YXRlbWVudCAmJlxuICAgICF0aGlzLl9mbGFncy5pbl9jYXNlICYmXG4gICAgIShjdXJyZW50X3Rva2VuLnRleHQgPT09ICctLScgfHwgY3VycmVudF90b2tlbi50ZXh0ID09PSAnKysnKSAmJlxuICAgIHRoaXMuX2xhc3RfbGFzdF90ZXh0ICE9PSAnZnVuY3Rpb24nICYmXG4gICAgY3VycmVudF90b2tlbi50eXBlICE9PSBUT0tFTi5XT1JEICYmIGN1cnJlbnRfdG9rZW4udHlwZSAhPT0gVE9LRU4uUkVTRVJWRUQpO1xuICBzdGFydCA9IHN0YXJ0IHx8ICh0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLk9iamVjdExpdGVyYWwgJiYgKFxuICAgICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICc6JyAmJiB0aGlzLl9mbGFncy50ZXJuYXJ5X2RlcHRoID09PSAwKSB8fCByZXNlcnZlZF9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLCBbJ2dldCcsICdzZXQnXSkpKTtcblxuICBpZiAoc3RhcnQpIHtcbiAgICB0aGlzLnNldF9tb2RlKE1PREUuU3RhdGVtZW50KTtcbiAgICB0aGlzLmluZGVudCgpO1xuXG4gICAgdGhpcy5oYW5kbGVfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoY3VycmVudF90b2tlbiwgdHJ1ZSk7XG5cbiAgICAvLyBJc3N1ZSAjMjc2OlxuICAgIC8vIElmIHN0YXJ0aW5nIGEgbmV3IHN0YXRlbWVudCB3aXRoIFtpZiwgZm9yLCB3aGlsZSwgZG9dLCBwdXNoIHRvIGEgbmV3IGxpbmUuXG4gICAgLy8gaWYgKGEpIGlmIChiKSBpZihjKSBkKCk7IGVsc2UgZSgpOyBlbHNlIGYoKTtcbiAgICBpZiAoIXRoaXMuc3RhcnRfb2Zfb2JqZWN0X3Byb3BlcnR5KCkpIHtcbiAgICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuLFxuICAgICAgICByZXNlcnZlZF9hcnJheShjdXJyZW50X3Rva2VuLCBbJ2RvJywgJ2ZvcicsICdpZicsICd3aGlsZSddKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV9zdGFydF9leHByID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICAvLyBUaGUgY29uZGl0aW9uYWwgc3RhcnRzIHRoZSBzdGF0ZW1lbnQgaWYgYXBwcm9wcmlhdGUuXG4gIGlmICghdGhpcy5zdGFydF9vZl9zdGF0ZW1lbnQoY3VycmVudF90b2tlbikpIHtcbiAgICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjdXJyZW50X3Rva2VuKTtcbiAgfVxuXG4gIHZhciBuZXh0X21vZGUgPSBNT0RFLkV4cHJlc3Npb247XG4gIGlmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICdbJykge1xuXG4gICAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uV09SRCB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICcpJykge1xuICAgICAgLy8gdGhpcyBpcyBhcnJheSBpbmRleCBzcGVjaWZpZXIsIGJyZWFrIGltbWVkaWF0ZWx5XG4gICAgICAvLyBhW3hdLCBmbigpW3hdXG4gICAgICBpZiAocmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgbGluZV9zdGFydGVycykpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuICAgICAgdGhpcy5zZXRfbW9kZShuZXh0X21vZGUpO1xuICAgICAgdGhpcy5pbmRlbnQoKTtcbiAgICAgIGlmICh0aGlzLl9vcHRpb25zLnNwYWNlX2luX3BhcmVuKSB7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5leHRfbW9kZSA9IE1PREUuQXJyYXlMaXRlcmFsO1xuICAgIGlmIChpc19hcnJheSh0aGlzLl9mbGFncy5tb2RlKSkge1xuICAgICAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJ1snIHx8XG4gICAgICAgICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICcsJyAmJiAodGhpcy5fbGFzdF9sYXN0X3RleHQgPT09ICddJyB8fCB0aGlzLl9sYXN0X2xhc3RfdGV4dCA9PT0gJ30nKSkpIHtcbiAgICAgICAgLy8gXSwgWyBnb2VzIHRvIG5ldyBsaW5lXG4gICAgICAgIC8vIH0sIFsgZ29lcyB0byBuZXcgbGluZVxuICAgICAgICBpZiAoIXRoaXMuX29wdGlvbnMua2VlcF9hcnJheV9pbmRlbnRhdGlvbikge1xuICAgICAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUsIFtUT0tFTi5TVEFSVF9FWFBSLCBUT0tFTi5FTkRfRVhQUiwgVE9LRU4uV09SRCwgVE9LRU4uT1BFUkFUT1IsIFRPS0VOLkRPVF0pKSB7XG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uUkVTRVJWRUQpIHtcbiAgICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICdmb3InKSB7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0aGlzLl9vcHRpb25zLnNwYWNlX2JlZm9yZV9jb25kaXRpb25hbDtcbiAgICAgICAgbmV4dF9tb2RlID0gTU9ERS5Gb3JJbml0aWFsaXplcjtcbiAgICAgIH0gZWxzZSBpZiAoaW5fYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0LCBbJ2lmJywgJ3doaWxlJywgJ3N3aXRjaCddKSkge1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdGhpcy5fb3B0aW9ucy5zcGFjZV9iZWZvcmVfY29uZGl0aW9uYWw7XG4gICAgICAgIG5leHRfbW9kZSA9IE1PREUuQ29uZGl0aW9uYWw7XG4gICAgICB9IGVsc2UgaWYgKGluX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3Rfd29yZCwgWydhd2FpdCcsICdhc3luYyddKSkge1xuICAgICAgICAvLyBTaG91bGQgYmUgYSBzcGFjZSBiZXR3ZWVuIGF3YWl0IGFuZCBhbiBJSUZFLCBvciBhc3luYyBhbmQgYW4gYXJyb3cgZnVuY3Rpb25cbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJ2ltcG9ydCcgJiYgY3VycmVudF90b2tlbi53aGl0ZXNwYWNlX2JlZm9yZSA9PT0gJycpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQsIGxpbmVfc3RhcnRlcnMpIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJ2NhdGNoJykge1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uRVFVQUxTIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uT1BFUkFUT1IpIHtcbiAgICAgIC8vIFN1cHBvcnQgb2YgdGhpcyBraW5kIG9mIG5ld2xpbmUgcHJlc2VydmF0aW9uLlxuICAgICAgLy8gYSA9IChiICYmXG4gICAgICAvLyAgICAgKGMgfHwgZCkpO1xuICAgICAgaWYgKCF0aGlzLnN0YXJ0X29mX29iamVjdF9wcm9wZXJ0eSgpKSB7XG4gICAgICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uV09SRCkge1xuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNlO1xuXG4gICAgICAvLyBmdW5jdGlvbiBuYW1lKCkgdnMgZnVuY3Rpb24gbmFtZSAoKVxuICAgICAgLy8gZnVuY3Rpb24qIG5hbWUoKSB2cyBmdW5jdGlvbiogbmFtZSAoKVxuICAgICAgLy8gYXN5bmMgbmFtZSgpIHZzIGFzeW5jIG5hbWUgKClcbiAgICAgIC8vIEluIEVTNiwgeW91IGNhbiBhbHNvIGRlZmluZSB0aGUgbWV0aG9kIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0XG4gICAgICAvLyB2YXIgb2JqID0ge2E6IGZ1bmN0aW9uKCkge319XG4gICAgICAvLyBJdCBjYW4gYmUgYWJicmV2aWF0ZWRcbiAgICAgIC8vIHZhciBvYmogPSB7YSgpIHt9fVxuICAgICAgLy8gdmFyIG9iaiA9IHsgYSgpIHt9fSB2cyB2YXIgb2JqID0geyBhICgpIHt9fVxuICAgICAgLy8gdmFyIG9iaiA9IHsgKiBhKCkge319IHZzIHZhciBvYmogPSB7ICogYSAoKSB7fX1cbiAgICAgIHZhciBwZWVrX2JhY2tfdHdvID0gdGhpcy5fdG9rZW5zLnBlZWsoLTMpO1xuICAgICAgaWYgKHRoaXMuX29wdGlvbnMuc3BhY2VfYWZ0ZXJfbmFtZWRfZnVuY3Rpb24gJiYgcGVla19iYWNrX3R3bykge1xuICAgICAgICAvLyBwZWVrIHN0YXJ0cyBhdCBuZXh0IGNoYXJhY3RlciBzbyAtMSBpcyBjdXJyZW50IHRva2VuXG4gICAgICAgIHZhciBwZWVrX2JhY2tfdGhyZWUgPSB0aGlzLl90b2tlbnMucGVlaygtNCk7XG4gICAgICAgIGlmIChyZXNlcnZlZF9hcnJheShwZWVrX2JhY2tfdHdvLCBbJ2FzeW5jJywgJ2Z1bmN0aW9uJ10pIHx8XG4gICAgICAgICAgKHBlZWtfYmFja190d28udGV4dCA9PT0gJyonICYmIHJlc2VydmVkX2FycmF5KHBlZWtfYmFja190aHJlZSwgWydhc3luYycsICdmdW5jdGlvbiddKSkpIHtcbiAgICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLk9iamVjdExpdGVyYWwpIHtcbiAgICAgICAgICBpZiAoKHBlZWtfYmFja190d28udGV4dCA9PT0gJ3snIHx8IHBlZWtfYmFja190d28udGV4dCA9PT0gJywnKSB8fFxuICAgICAgICAgICAgKHBlZWtfYmFja190d28udGV4dCA9PT0gJyonICYmIChwZWVrX2JhY2tfdGhyZWUudGV4dCA9PT0gJ3snIHx8IHBlZWtfYmFja190aHJlZS50ZXh0ID09PSAnLCcpKSkge1xuICAgICAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLnBhcmVudCAmJiB0aGlzLl9mbGFncy5wYXJlbnQuY2xhc3Nfc3RhcnRfYmxvY2spIHtcbiAgICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdXBwb3J0IHByZXNlcnZpbmcgd3JhcHBlZCBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uc1xuICAgICAgLy8gYS5iKCdjJyxcbiAgICAgIC8vICAgICAoKSA9PiBkLmVcbiAgICAgIC8vIClcbiAgICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgICB9XG5cbiAgICAvLyBmdW5jdGlvbigpIHZzIGZ1bmN0aW9uICgpXG4gICAgLy8geWllbGQqKCkgdnMgeWllbGQqICgpXG4gICAgLy8gZnVuY3Rpb24qKCkgdnMgZnVuY3Rpb24qICgpXG4gICAgaWYgKCh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlJFU0VSVkVEICYmICh0aGlzLl9mbGFncy5sYXN0X3dvcmQgPT09ICdmdW5jdGlvbicgfHwgdGhpcy5fZmxhZ3MubGFzdF93b3JkID09PSAndHlwZW9mJykpIHx8XG4gICAgICAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnKicgJiZcbiAgICAgICAgKGluX2FycmF5KHRoaXMuX2xhc3RfbGFzdF90ZXh0LCBbJ2Z1bmN0aW9uJywgJ3lpZWxkJ10pIHx8XG4gICAgICAgICAgKHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuT2JqZWN0TGl0ZXJhbCAmJiBpbl9hcnJheSh0aGlzLl9sYXN0X2xhc3RfdGV4dCwgWyd7JywgJywnXSkpKSkpIHtcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0aGlzLl9vcHRpb25zLnNwYWNlX2FmdGVyX2Fub25fZnVuY3Rpb247XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJzsnIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uU1RBUlRfQkxPQ0spIHtcbiAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVORF9FWFBSIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uU1RBUlRfRVhQUiB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVORF9CTE9DSyB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICcuJyB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkNPTU1BKSB7XG4gICAgLy8gZG8gbm90aGluZyBvbiAoKCBhbmQgKSggYW5kIF1bIGFuZCBdKCBhbmQgLihcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3aGV0aGVyIGZvcmNpbmcgdGhpcyBpcyByZXF1aXJlZC4gIFJldmlldyBmYWlsaW5nIHRlc3RzIHdoZW4gcmVtb3ZlZC5cbiAgICB0aGlzLmFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUoY3VycmVudF90b2tlbiwgY3VycmVudF90b2tlbi5uZXdsaW5lcyk7XG4gIH1cblxuICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuICB0aGlzLnNldF9tb2RlKG5leHRfbW9kZSk7XG4gIGlmICh0aGlzLl9vcHRpb25zLnNwYWNlX2luX3BhcmVuKSB7XG4gICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gIH1cblxuICAvLyBJbiBhbGwgY2FzZXMsIGlmIHdlIG5ld2xpbmUgd2hpbGUgaW5zaWRlIGFuIGV4cHJlc3Npb24gaXQgc2hvdWxkIGJlIGluZGVudGVkLlxuICB0aGlzLmluZGVudCgpO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX2VuZF9leHByID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICAvLyBzdGF0ZW1lbnRzIGluc2lkZSBleHByZXNzaW9ucyBhcmUgbm90IHZhbGlkIHN5bnRheCwgYnV0Li4uXG4gIC8vIHN0YXRlbWVudHMgbXVzdCBhbGwgYmUgY2xvc2VkIHdoZW4gdGhlaXIgY29udGFpbmVyIGNsb3Nlc1xuICB3aGlsZSAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnJlc3RvcmVfbW9kZSgpO1xuICB9XG5cbiAgdGhpcy5oYW5kbGVfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoY3VycmVudF90b2tlbik7XG5cbiAgaWYgKHRoaXMuX2ZsYWdzLm11bHRpbGluZV9mcmFtZSkge1xuICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuLFxuICAgICAgY3VycmVudF90b2tlbi50ZXh0ID09PSAnXScgJiYgaXNfYXJyYXkodGhpcy5fZmxhZ3MubW9kZSkgJiYgIXRoaXMuX29wdGlvbnMua2VlcF9hcnJheV9pbmRlbnRhdGlvbik7XG4gIH1cblxuICBpZiAodGhpcy5fb3B0aW9ucy5zcGFjZV9pbl9wYXJlbikge1xuICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0VYUFIgJiYgIXRoaXMuX29wdGlvbnMuc3BhY2VfaW5fZW1wdHlfcGFyZW4pIHtcbiAgICAgIC8vICgpIFtdIG5vIGlubmVyIHNwYWNlIGluIGVtcHR5IHBhcmVucyBsaWtlIHRoZXNlLCBldmVyLCByZWYgIzMyMFxuICAgICAgdGhpcy5fb3V0cHV0LnRyaW0oKTtcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgfVxuICB9XG4gIHRoaXMuZGVpbmRlbnQoKTtcbiAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgdGhpcy5yZXN0b3JlX21vZGUoKTtcblxuICByZW1vdmVfcmVkdW5kYW50X2luZGVudGF0aW9uKHRoaXMuX291dHB1dCwgdGhpcy5fcHJldmlvdXNfZmxhZ3MpO1xuXG4gIC8vIGRvIHt9IHdoaWxlICgpIC8vIG5vIHN0YXRlbWVudCByZXF1aXJlZCBhZnRlclxuICBpZiAodGhpcy5fZmxhZ3MuZG9fd2hpbGUgJiYgdGhpcy5fcHJldmlvdXNfZmxhZ3MubW9kZSA9PT0gTU9ERS5Db25kaXRpb25hbCkge1xuICAgIHRoaXMuX3ByZXZpb3VzX2ZsYWdzLm1vZGUgPSBNT0RFLkV4cHJlc3Npb247XG4gICAgdGhpcy5fZmxhZ3MuZG9fYmxvY2sgPSBmYWxzZTtcbiAgICB0aGlzLl9mbGFncy5kb193aGlsZSA9IGZhbHNlO1xuXG4gIH1cbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV9zdGFydF9ibG9jayA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHtcbiAgdGhpcy5oYW5kbGVfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoY3VycmVudF90b2tlbik7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIE9iamVjdExpdGVyYWxcbiAgdmFyIG5leHRfdG9rZW4gPSB0aGlzLl90b2tlbnMucGVlaygpO1xuICB2YXIgc2Vjb25kX3Rva2VuID0gdGhpcy5fdG9rZW5zLnBlZWsoMSk7XG4gIGlmICh0aGlzLl9mbGFncy5sYXN0X3dvcmQgPT09ICdzd2l0Y2gnICYmIHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0VYUFIpIHtcbiAgICB0aGlzLnNldF9tb2RlKE1PREUuQmxvY2tTdGF0ZW1lbnQpO1xuICAgIHRoaXMuX2ZsYWdzLmluX2Nhc2Vfc3RhdGVtZW50ID0gdHJ1ZTtcbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5jYXNlX2JvZHkpIHtcbiAgICB0aGlzLnNldF9tb2RlKE1PREUuQmxvY2tTdGF0ZW1lbnQpO1xuICB9IGVsc2UgaWYgKHNlY29uZF90b2tlbiAmJiAoXG4gICAgICAoaW5fYXJyYXkoc2Vjb25kX3Rva2VuLnRleHQsIFsnOicsICcsJ10pICYmIGluX2FycmF5KG5leHRfdG9rZW4udHlwZSwgW1RPS0VOLlNUUklORywgVE9LRU4uV09SRCwgVE9LRU4uUkVTRVJWRURdKSkgfHxcbiAgICAgIChpbl9hcnJheShuZXh0X3Rva2VuLnRleHQsIFsnZ2V0JywgJ3NldCcsICcuLi4nXSkgJiYgaW5fYXJyYXkoc2Vjb25kX3Rva2VuLnR5cGUsIFtUT0tFTi5XT1JELCBUT0tFTi5SRVNFUlZFRF0pKVxuICAgICkpIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IFR5cGVTY3JpcHQsYnV0IHdlIGRpZG4ndCBicmVhayBpdCBmb3IgYSB2ZXJ5IGxvbmcgdGltZS5cbiAgICAvLyBXZSdsbCB0cnkgdG8ga2VlcCBub3QgYnJlYWtpbmcgaXQuXG4gICAgaWYgKGluX2FycmF5KHRoaXMuX2xhc3RfbGFzdF90ZXh0LCBbJ2NsYXNzJywgJ2ludGVyZmFjZSddKSAmJiAhaW5fYXJyYXkoc2Vjb25kX3Rva2VuLnRleHQsIFsnOicsICcsJ10pKSB7XG4gICAgICB0aGlzLnNldF9tb2RlKE1PREUuQmxvY2tTdGF0ZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldF9tb2RlKE1PREUuT2JqZWN0TGl0ZXJhbCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uT1BFUkFUT1IgJiYgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnPT4nKSB7XG4gICAgLy8gYXJyb3cgZnVuY3Rpb246IChwYXJhbTEsIHBhcmFtTikgPT4geyBzdGF0ZW1lbnRzIH1cbiAgICB0aGlzLnNldF9tb2RlKE1PREUuQmxvY2tTdGF0ZW1lbnQpO1xuICB9IGVsc2UgaWYgKGluX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSwgW1RPS0VOLkVRVUFMUywgVE9LRU4uU1RBUlRfRVhQUiwgVE9LRU4uQ09NTUEsIFRPS0VOLk9QRVJBVE9SXSkgfHxcbiAgICByZXNlcnZlZF9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLCBbJ3JldHVybicsICd0aHJvdycsICdpbXBvcnQnLCAnZGVmYXVsdCddKVxuICApIHtcbiAgICAvLyBEZXRlY3Rpbmcgc2hvcnRoYW5kIGZ1bmN0aW9uIHN5bnRheCBpcyBkaWZmaWN1bHQgYnkgc2Nhbm5pbmcgZm9yd2FyZCxcbiAgICAvLyAgICAgc28gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuXG4gICAgLy8gSWYgdGhlIGJsb2NrIGlzIGJlaW5nIHJldHVybmVkLCBpbXBvcnRlZCwgZXhwb3J0IGRlZmF1bHQsIHBhc3NlZCBhcyBhcmcsXG4gICAgLy8gICAgIGFzc2lnbmVkIHdpdGggPSBvciBhc3NpZ25lZCBpbiBhIG5lc3RlZCBvYmplY3QsIHRyZWF0IGFzIGFuIE9iamVjdExpdGVyYWwuXG4gICAgdGhpcy5zZXRfbW9kZShNT0RFLk9iamVjdExpdGVyYWwpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc2V0X21vZGUoTU9ERS5CbG9ja1N0YXRlbWVudCk7XG4gIH1cblxuICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbikge1xuICAgIGlmIChyZXNlcnZlZF9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnByZXZpb3VzLCBbJ2NsYXNzJywgJ2V4dGVuZHMnXSkpIHtcbiAgICAgIHRoaXMuX2ZsYWdzLmNsYXNzX3N0YXJ0X2Jsb2NrID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZW1wdHlfYnJhY2VzID0gIW5leHRfdG9rZW4uY29tbWVudHNfYmVmb3JlICYmIG5leHRfdG9rZW4udGV4dCA9PT0gJ30nO1xuICB2YXIgZW1wdHlfYW5vbnltb3VzX2Z1bmN0aW9uID0gZW1wdHlfYnJhY2VzICYmIHRoaXMuX2ZsYWdzLmxhc3Rfd29yZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0VYUFI7XG5cbiAgaWYgKHRoaXMuX29wdGlvbnMuYnJhY2VfcHJlc2VydmVfaW5saW5lKSAvLyBjaGVjayBmb3IgaW5saW5lLCBzZXQgaW5saW5lX2ZyYW1lIGlmIHNvXG4gIHtcbiAgICAvLyBzZWFyY2ggZm9yd2FyZCBmb3IgYSBuZXdsaW5lIHdhbnRlZCBpbnNpZGUgdGhpcyBibG9ja1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNoZWNrX3Rva2VuID0gbnVsbDtcbiAgICB0aGlzLl9mbGFncy5pbmxpbmVfZnJhbWUgPSB0cnVlO1xuICAgIGRvIHtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICBjaGVja190b2tlbiA9IHRoaXMuX3Rva2Vucy5wZWVrKGluZGV4IC0gMSk7XG4gICAgICBpZiAoY2hlY2tfdG9rZW4ubmV3bGluZXMpIHtcbiAgICAgICAgdGhpcy5fZmxhZ3MuaW5saW5lX2ZyYW1lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGNoZWNrX3Rva2VuLnR5cGUgIT09IFRPS0VOLkVPRiAmJlxuICAgICAgIShjaGVja190b2tlbi50eXBlID09PSBUT0tFTi5FTkRfQkxPQ0sgJiYgY2hlY2tfdG9rZW4ub3BlbmVkID09PSBjdXJyZW50X3Rva2VuKSk7XG4gIH1cblxuICBpZiAoKHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGUgPT09IFwiZXhwYW5kXCIgfHxcbiAgICAgICh0aGlzLl9vcHRpb25zLmJyYWNlX3N0eWxlID09PSBcIm5vbmVcIiAmJiBjdXJyZW50X3Rva2VuLm5ld2xpbmVzKSkgJiZcbiAgICAhdGhpcy5fZmxhZ3MuaW5saW5lX2ZyYW1lKSB7XG4gICAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSAhPT0gVE9LRU4uT1BFUkFUT1IgJiZcbiAgICAgIChlbXB0eV9hbm9ueW1vdXNfZnVuY3Rpb24gfHxcbiAgICAgICAgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5FUVVBTFMgfHxcbiAgICAgICAgKHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIHNwZWNpYWxfd29yZHMpICYmIHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCAhPT0gJ2Vsc2UnKSkpIHtcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByaW50X25ld2xpbmUoZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgfSBlbHNlIHsgLy8gY29sbGFwc2UgfHwgaW5saW5lX2ZyYW1lXG4gICAgaWYgKGlzX2FycmF5KHRoaXMuX3ByZXZpb3VzX2ZsYWdzLm1vZGUpICYmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0VYUFIgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5DT01NQSkpIHtcbiAgICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkNPTU1BIHx8IHRoaXMuX29wdGlvbnMuc3BhY2VfaW5fcGFyZW4pIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkNPTU1BIHx8ICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0VYUFIgJiYgdGhpcy5fZmxhZ3MuaW5saW5lX2ZyYW1lKSkge1xuICAgICAgICB0aGlzLmFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUoY3VycmVudF90b2tlbik7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzX2ZsYWdzLm11bHRpbGluZV9mcmFtZSA9IHRoaXMuX3ByZXZpb3VzX2ZsYWdzLm11bHRpbGluZV9mcmFtZSB8fCB0aGlzLl9mbGFncy5tdWx0aWxpbmVfZnJhbWU7XG4gICAgICAgIHRoaXMuX2ZsYWdzLm11bHRpbGluZV9mcmFtZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlICE9PSBUT0tFTi5PUEVSQVRPUiAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgIT09IFRPS0VOLlNUQVJUX0VYUFIpIHtcbiAgICAgIGlmIChpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUsIFtUT0tFTi5TVEFSVF9CTE9DSywgVE9LRU4uU0VNSUNPTE9OXSkgJiYgIXRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSkge1xuICAgICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuICB0aGlzLmluZGVudCgpO1xuXG4gIC8vIEV4Y2VwdCBmb3Igc3BlY2lmaWMgY2FzZXMsIG9wZW4gYnJhY2VzIGFyZSBmb2xsb3dlZCBieSBhIG5ldyBsaW5lLlxuICBpZiAoIWVtcHR5X2JyYWNlcyAmJiAhKHRoaXMuX29wdGlvbnMuYnJhY2VfcHJlc2VydmVfaW5saW5lICYmIHRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSkpIHtcbiAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX2VuZF9ibG9jayA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHtcbiAgLy8gc3RhdGVtZW50cyBtdXN0IGFsbCBiZSBjbG9zZWQgd2hlbiB0aGVpciBjb250YWluZXIgY2xvc2VzXG4gIHRoaXMuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzKGN1cnJlbnRfdG9rZW4pO1xuXG4gIHdoaWxlICh0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLlN0YXRlbWVudCkge1xuICAgIHRoaXMucmVzdG9yZV9tb2RlKCk7XG4gIH1cblxuICB2YXIgZW1wdHlfYnJhY2VzID0gdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5TVEFSVF9CTE9DSztcblxuICBpZiAodGhpcy5fZmxhZ3MuaW5saW5lX2ZyYW1lICYmICFlbXB0eV9icmFjZXMpIHsgLy8gdHJ5IGlubGluZV9mcmFtZSAob25seSBzZXQgaWYgdGhpcy5fb3B0aW9ucy5icmFjZXMtcHJlc2VydmUtaW5saW5lKSBmaXJzdFxuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGUgPT09IFwiZXhwYW5kXCIpIHtcbiAgICBpZiAoIWVtcHR5X2JyYWNlcykge1xuICAgICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHNraXAge31cbiAgICBpZiAoIWVtcHR5X2JyYWNlcykge1xuICAgICAgaWYgKGlzX2FycmF5KHRoaXMuX2ZsYWdzLm1vZGUpICYmIHRoaXMuX29wdGlvbnMua2VlcF9hcnJheV9pbmRlbnRhdGlvbikge1xuICAgICAgICAvLyB3ZSBSRUFMTFkgbmVlZCBhIG5ld2xpbmUgaGVyZSwgYnV0IG5ld2xpbmVyIHdvdWxkIHNraXAgdGhhdFxuICAgICAgICB0aGlzLl9vcHRpb25zLmtlZXBfYXJyYXlfaW5kZW50YXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgICAgIHRoaXMuX29wdGlvbnMua2VlcF9hcnJheV9pbmRlbnRhdGlvbiA9IHRydWU7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB0aGlzLnJlc3RvcmVfbW9kZSgpO1xuICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX3dvcmQgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlJFU0VSVkVEKSB7XG4gICAgaWYgKGluX2FycmF5KGN1cnJlbnRfdG9rZW4udGV4dCwgWydzZXQnLCAnZ2V0J10pICYmIHRoaXMuX2ZsYWdzLm1vZGUgIT09IE1PREUuT2JqZWN0TGl0ZXJhbCkge1xuICAgICAgY3VycmVudF90b2tlbi50eXBlID0gVE9LRU4uV09SRDtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJ2ltcG9ydCcgJiYgaW5fYXJyYXkodGhpcy5fdG9rZW5zLnBlZWsoKS50ZXh0LCBbJygnLCAnLiddKSkge1xuICAgICAgY3VycmVudF90b2tlbi50eXBlID0gVE9LRU4uV09SRDtcbiAgICB9IGVsc2UgaWYgKGluX2FycmF5KGN1cnJlbnRfdG9rZW4udGV4dCwgWydhcycsICdmcm9tJ10pICYmICF0aGlzLl9mbGFncy5pbXBvcnRfYmxvY2spIHtcbiAgICAgIGN1cnJlbnRfdG9rZW4udHlwZSA9IFRPS0VOLldPUkQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLk9iamVjdExpdGVyYWwpIHtcbiAgICAgIHZhciBuZXh0X3Rva2VuID0gdGhpcy5fdG9rZW5zLnBlZWsoKTtcbiAgICAgIGlmIChuZXh0X3Rva2VuLnRleHQgPT09ICc6Jykge1xuICAgICAgICBjdXJyZW50X3Rva2VuLnR5cGUgPSBUT0tFTi5XT1JEO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnN0YXJ0X29mX3N0YXRlbWVudChjdXJyZW50X3Rva2VuKSkge1xuICAgIC8vIFRoZSBjb25kaXRpb25hbCBzdGFydHMgdGhlIHN0YXRlbWVudCBpZiBhcHByb3ByaWF0ZS5cbiAgICBpZiAocmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgWyd2YXInLCAnbGV0JywgJ2NvbnN0J10pICYmIGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uV09SRCkge1xuICAgICAgdGhpcy5fZmxhZ3MuZGVjbGFyYXRpb25fc3RhdGVtZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi5uZXdsaW5lcyAmJiAhaXNfZXhwcmVzc2lvbih0aGlzLl9mbGFncy5tb2RlKSAmJlxuICAgICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgIT09IFRPS0VOLk9QRVJBVE9SIHx8ICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICctLScgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnKysnKSkgJiZcbiAgICB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgIT09IFRPS0VOLkVRVUFMUyAmJlxuICAgICh0aGlzLl9vcHRpb25zLnByZXNlcnZlX25ld2xpbmVzIHx8ICFyZXNlcnZlZF9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLCBbJ3ZhcicsICdsZXQnLCAnY29uc3QnLCAnc2V0JywgJ2dldCddKSkpIHtcbiAgICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjdXJyZW50X3Rva2VuKTtcbiAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjdXJyZW50X3Rva2VuKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9mbGFncy5kb19ibG9jayAmJiAhdGhpcy5fZmxhZ3MuZG9fd2hpbGUpIHtcbiAgICBpZiAocmVzZXJ2ZWRfd29yZChjdXJyZW50X3Rva2VuLCAnd2hpbGUnKSkge1xuICAgICAgLy8gZG8ge30gIyMgd2hpbGUgKClcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgdGhpcy5fZmxhZ3MuZG9fd2hpbGUgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkbyB7fSBzaG91bGQgYWx3YXlzIGhhdmUgd2hpbGUgYXMgdGhlIG5leHQgd29yZC5cbiAgICAgIC8vIGlmIHdlIGRvbid0IHNlZSB0aGUgZXhwZWN0ZWQgd2hpbGUsIHJlY292ZXJcbiAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgICAgdGhpcy5fZmxhZ3MuZG9fYmxvY2sgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiBtYXkgYmUgZm9sbG93ZWQgYnkgZWxzZSwgb3Igbm90XG4gIC8vIEJhcmUvaW5saW5lIGlmcyBhcmUgdHJpY2t5XG4gIC8vIE5lZWQgdG8gdW53aW5kIHRoZSBtb2RlcyBjb3JyZWN0bHk6IGlmIChhKSBpZiAoYikgYygpOyBlbHNlIGQoKTsgZWxzZSBlKCk7XG4gIGlmICh0aGlzLl9mbGFncy5pZl9ibG9jaykge1xuICAgIGlmICghdGhpcy5fZmxhZ3MuZWxzZV9ibG9jayAmJiByZXNlcnZlZF93b3JkKGN1cnJlbnRfdG9rZW4sICdlbHNlJykpIHtcbiAgICAgIHRoaXMuX2ZsYWdzLmVsc2VfYmxvY2sgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aGlsZSAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQpIHtcbiAgICAgICAgdGhpcy5yZXN0b3JlX21vZGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZsYWdzLmlmX2Jsb2NrID0gZmFsc2U7XG4gICAgICB0aGlzLl9mbGFncy5lbHNlX2Jsb2NrID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuX2ZsYWdzLmluX2Nhc2Vfc3RhdGVtZW50ICYmIHJlc2VydmVkX2FycmF5KGN1cnJlbnRfdG9rZW4sIFsnY2FzZScsICdkZWZhdWx0J10pKSB7XG4gICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgaWYgKCF0aGlzLl9mbGFncy5jYXNlX2Jsb2NrICYmICh0aGlzLl9mbGFncy5jYXNlX2JvZHkgfHwgdGhpcy5fb3B0aW9ucy5qc2xpbnRfaGFwcHkpKSB7XG4gICAgICAvLyBzd2l0Y2ggY2FzZXMgZm9sbG93aW5nIG9uZSBhbm90aGVyXG4gICAgICB0aGlzLmRlaW5kZW50KCk7XG4gICAgfVxuICAgIHRoaXMuX2ZsYWdzLmNhc2VfYm9keSA9IGZhbHNlO1xuXG4gICAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgICB0aGlzLl9mbGFncy5pbl9jYXNlID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5DT01NQSB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0VYUFIgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5FUVVBTFMgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5PUEVSQVRPUikge1xuICAgIGlmICghdGhpcy5zdGFydF9vZl9vYmplY3RfcHJvcGVydHkoKSkge1xuICAgICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXNlcnZlZF93b3JkKGN1cnJlbnRfdG9rZW4sICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKGluX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCwgWyd9JywgJzsnXSkgfHxcbiAgICAgICh0aGlzLl9vdXRwdXQuanVzdF9hZGRlZF9uZXdsaW5lKCkgJiYgIShpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQsIFsnKCcsICdbJywgJ3snLCAnOicsICc9JywgJywnXSkgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5PUEVSQVRPUikpKSB7XG4gICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgYSBuaWNlIGNsZWFuIHNwYWNlIG9mIGF0IGxlYXN0IG9uZSBibGFuayBsaW5lXG4gICAgICAvLyBiZWZvcmUgYSBuZXcgZnVuY3Rpb24gZGVmaW5pdGlvblxuICAgICAgaWYgKCF0aGlzLl9vdXRwdXQuanVzdF9hZGRlZF9ibGFua2xpbmUoKSAmJiAhY3VycmVudF90b2tlbi5jb21tZW50c19iZWZvcmUpIHtcbiAgICAgICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgICAgIHRoaXMucHJpbnRfbmV3bGluZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uUkVTRVJWRUQgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5XT1JEKSB7XG4gICAgICBpZiAocmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgWydnZXQnLCAnc2V0JywgJ25ldycsICdleHBvcnQnXSkgfHxcbiAgICAgICAgcmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgbmV3bGluZV9yZXN0cmljdGVkX3Rva2VucykpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHJlc2VydmVkX3dvcmQodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgJ2RlZmF1bHQnKSAmJiB0aGlzLl9sYXN0X2xhc3RfdGV4dCA9PT0gJ2V4cG9ydCcpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJ2RlY2xhcmUnKSB7XG4gICAgICAgIC8vIGFjY29tb2RhdGVzIFR5cGVzY3JpcHQgZGVjbGFyZSBmdW5jdGlvbiBmb3JtYXR0aW5nXG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLk9QRVJBVE9SIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJz0nKSB7XG4gICAgICAvLyBmb28gPSBmdW5jdGlvblxuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghdGhpcy5fZmxhZ3MubXVsdGlsaW5lX2ZyYW1lICYmIChpc19leHByZXNzaW9uKHRoaXMuX2ZsYWdzLm1vZGUpIHx8IGlzX2FycmF5KHRoaXMuX2ZsYWdzLm1vZGUpKSkge1xuICAgICAgLy8gKGZ1bmN0aW9uXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgIH1cblxuICAgIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gICAgdGhpcy5fZmxhZ3MubGFzdF93b3JkID0gY3VycmVudF90b2tlbi50ZXh0O1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcmVmaXggPSAnTk9ORSc7XG5cbiAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0JMT0NLKSB7XG5cbiAgICBpZiAodGhpcy5fcHJldmlvdXNfZmxhZ3MuaW5saW5lX2ZyYW1lKSB7XG4gICAgICBwcmVmaXggPSAnU1BBQ0UnO1xuICAgIH0gZWxzZSBpZiAoIXJlc2VydmVkX2FycmF5KGN1cnJlbnRfdG9rZW4sIFsnZWxzZScsICdjYXRjaCcsICdmaW5hbGx5JywgJ2Zyb20nXSkpIHtcbiAgICAgIHByZWZpeCA9ICdORVdMSU5FJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGUgPT09IFwiZXhwYW5kXCIgfHxcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5icmFjZV9zdHlsZSA9PT0gXCJlbmQtZXhwYW5kXCIgfHxcbiAgICAgICAgKHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGUgPT09IFwibm9uZVwiICYmIGN1cnJlbnRfdG9rZW4ubmV3bGluZXMpKSB7XG4gICAgICAgIHByZWZpeCA9ICdORVdMSU5FJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWZpeCA9ICdTUEFDRSc7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNFTUlDT0xPTiAmJiB0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLkJsb2NrU3RhdGVtZW50KSB7XG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgZm9yIFNUQVRFTUVOVCBhcyB3ZWxsP1xuICAgIHByZWZpeCA9ICdORVdMSU5FJztcbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNFTUlDT0xPTiAmJiBpc19leHByZXNzaW9uKHRoaXMuX2ZsYWdzLm1vZGUpKSB7XG4gICAgcHJlZml4ID0gJ1NQQUNFJztcbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUUklORykge1xuICAgIHByZWZpeCA9ICdORVdMSU5FJztcbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlJFU0VSVkVEIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uV09SRCB8fFxuICAgICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICcqJyAmJlxuICAgICAgKGluX2FycmF5KHRoaXMuX2xhc3RfbGFzdF90ZXh0LCBbJ2Z1bmN0aW9uJywgJ3lpZWxkJ10pIHx8XG4gICAgICAgICh0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLk9iamVjdExpdGVyYWwgJiYgaW5fYXJyYXkodGhpcy5fbGFzdF9sYXN0X3RleHQsIFsneycsICcsJ10pKSkpKSB7XG4gICAgcHJlZml4ID0gJ1NQQUNFJztcbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0JMT0NLKSB7XG4gICAgaWYgKHRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSkge1xuICAgICAgcHJlZml4ID0gJ1NQQUNFJztcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ID0gJ05FV0xJTkUnO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVORF9FWFBSKSB7XG4gICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgcHJlZml4ID0gJ05FV0xJTkUnO1xuICB9XG5cbiAgaWYgKHJlc2VydmVkX2FycmF5KGN1cnJlbnRfdG9rZW4sIGxpbmVfc3RhcnRlcnMpICYmIHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCAhPT0gJyknKSB7XG4gICAgaWYgKHRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICdlbHNlJyB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICdleHBvcnQnKSB7XG4gICAgICBwcmVmaXggPSAnU1BBQ0UnO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXggPSAnTkVXTElORSc7XG4gICAgfVxuXG4gIH1cblxuICBpZiAocmVzZXJ2ZWRfYXJyYXkoY3VycmVudF90b2tlbiwgWydlbHNlJywgJ2NhdGNoJywgJ2ZpbmFsbHknXSkpIHtcbiAgICBpZiAoKCEodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5FTkRfQkxPQ0sgJiYgdGhpcy5fcHJldmlvdXNfZmxhZ3MubW9kZSA9PT0gTU9ERS5CbG9ja1N0YXRlbWVudCkgfHxcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5icmFjZV9zdHlsZSA9PT0gXCJleHBhbmRcIiB8fFxuICAgICAgICB0aGlzLl9vcHRpb25zLmJyYWNlX3N0eWxlID09PSBcImVuZC1leHBhbmRcIiB8fFxuICAgICAgICAodGhpcy5fb3B0aW9ucy5icmFjZV9zdHlsZSA9PT0gXCJub25lXCIgJiYgY3VycmVudF90b2tlbi5uZXdsaW5lcykpICYmXG4gICAgICAhdGhpcy5fZmxhZ3MuaW5saW5lX2ZyYW1lKSB7XG4gICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3V0cHV0LnRyaW0odHJ1ZSk7XG4gICAgICB2YXIgbGluZSA9IHRoaXMuX291dHB1dC5jdXJyZW50X2xpbmU7XG4gICAgICAvLyBJZiB3ZSB0cmltbWVkIGFuZCB0aGVyZSdzIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgY2xvc2UgYmxvY2sgYmVmb3JlIHVzXG4gICAgICAvLyBwdXQgYSBuZXdsaW5lIGJhY2sgaW4uICBIYW5kbGVzICd9IC8vIGNvbW1lbnQnIHNjZW5hcmlvLlxuICAgICAgaWYgKGxpbmUubGFzdCgpICE9PSAnfScpIHtcbiAgICAgICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJlZml4ID09PSAnTkVXTElORScpIHtcbiAgICBpZiAocmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgc3BlY2lhbF93b3JkcykpIHtcbiAgICAgIC8vIG5vIG5ld2xpbmUgYmV0d2VlbiAncmV0dXJuIG5ubidcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnZGVjbGFyZScgJiYgcmVzZXJ2ZWRfYXJyYXkoY3VycmVudF90b2tlbiwgWyd2YXInLCAnbGV0JywgJ2NvbnN0J10pKSB7XG4gICAgICAvLyBhY2NvbW9kYXRlcyBUeXBlc2NyaXB0IGRlY2xhcmUgZm9ybWF0dGluZ1xuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgIT09IFRPS0VOLkVORF9FWFBSKSB7XG4gICAgICBpZiAoKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSAhPT0gVE9LRU4uU1RBUlRfRVhQUiB8fCAhcmVzZXJ2ZWRfYXJyYXkoY3VycmVudF90b2tlbiwgWyd2YXInLCAnbGV0JywgJ2NvbnN0J10pKSAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgIT09ICc6Jykge1xuICAgICAgICAvLyBubyBuZWVkIHRvIGZvcmNlIG5ld2xpbmUgb24gJ3Zhcic6IGZvciAodmFyIHggPSAwLi4uKVxuICAgICAgICBpZiAocmVzZXJ2ZWRfd29yZChjdXJyZW50X3Rva2VuLCAnaWYnKSAmJiByZXNlcnZlZF93b3JkKGN1cnJlbnRfdG9rZW4ucHJldmlvdXMsICdlbHNlJykpIHtcbiAgICAgICAgICAvLyBubyBuZXdsaW5lIGZvciB9IGVsc2UgaWYge1xuICAgICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXNlcnZlZF9hcnJheShjdXJyZW50X3Rva2VuLCBsaW5lX3N0YXJ0ZXJzKSAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgIT09ICcpJykge1xuICAgICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLm11bHRpbGluZV9mcmFtZSAmJiBpc19hcnJheSh0aGlzLl9mbGFncy5tb2RlKSAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICcsJyAmJiB0aGlzLl9sYXN0X2xhc3RfdGV4dCA9PT0gJ30nKSB7XG4gICAgdGhpcy5wcmludF9uZXdsaW5lKCk7IC8vIH0sIGluIGxpc3RzIGdldCBhIG5ld2xpbmUgdHJlYXRtZW50XG4gIH0gZWxzZSBpZiAocHJlZml4ID09PSAnU1BBQ0UnKSB7XG4gICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnRfdG9rZW4ucHJldmlvdXMgJiYgKGN1cnJlbnRfdG9rZW4ucHJldmlvdXMudHlwZSA9PT0gVE9LRU4uV09SRCB8fCBjdXJyZW50X3Rva2VuLnByZXZpb3VzLnR5cGUgPT09IFRPS0VOLlJFU0VSVkVEKSkge1xuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICB9XG4gIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gIHRoaXMuX2ZsYWdzLmxhc3Rfd29yZCA9IGN1cnJlbnRfdG9rZW4udGV4dDtcblxuICBpZiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5SRVNFUlZFRCkge1xuICAgIGlmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICdkbycpIHtcbiAgICAgIHRoaXMuX2ZsYWdzLmRvX2Jsb2NrID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJ2lmJykge1xuICAgICAgdGhpcy5fZmxhZ3MuaWZfYmxvY2sgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnaW1wb3J0Jykge1xuICAgICAgdGhpcy5fZmxhZ3MuaW1wb3J0X2Jsb2NrID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLmltcG9ydF9ibG9jayAmJiByZXNlcnZlZF93b3JkKGN1cnJlbnRfdG9rZW4sICdmcm9tJykpIHtcbiAgICAgIHRoaXMuX2ZsYWdzLmltcG9ydF9ibG9jayA9IGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX3NlbWljb2xvbiA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHtcbiAgaWYgKHRoaXMuc3RhcnRfb2Zfc3RhdGVtZW50KGN1cnJlbnRfdG9rZW4pKSB7XG4gICAgLy8gVGhlIGNvbmRpdGlvbmFsIHN0YXJ0cyB0aGUgc3RhdGVtZW50IGlmIGFwcHJvcHJpYXRlLlxuICAgIC8vIFNlbWljb2xvbiBjYW4gYmUgdGhlIHN0YXJ0IChhbmQgZW5kKSBvZiBhIHN0YXRlbWVudFxuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjdXJyZW50X3Rva2VuKTtcbiAgfVxuXG4gIHZhciBuZXh0X3Rva2VuID0gdGhpcy5fdG9rZW5zLnBlZWsoKTtcbiAgd2hpbGUgKHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50ICYmXG4gICAgISh0aGlzLl9mbGFncy5pZl9ibG9jayAmJiByZXNlcnZlZF93b3JkKG5leHRfdG9rZW4sICdlbHNlJykpICYmXG4gICAgIXRoaXMuX2ZsYWdzLmRvX2Jsb2NrKSB7XG4gICAgdGhpcy5yZXN0b3JlX21vZGUoKTtcbiAgfVxuXG4gIC8vIGhhY2t5IGJ1dCBlZmZlY3RpdmUgZm9yIHRoZSBtb21lbnRcbiAgaWYgKHRoaXMuX2ZsYWdzLmltcG9ydF9ibG9jaykge1xuICAgIHRoaXMuX2ZsYWdzLmltcG9ydF9ibG9jayA9IGZhbHNlO1xuICB9XG4gIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5oYW5kbGVfc3RyaW5nID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICBpZiAoY3VycmVudF90b2tlbi50ZXh0LnN0YXJ0c1dpdGgoXCJgXCIpICYmIGN1cnJlbnRfdG9rZW4ubmV3bGluZXMgPT09IDAgJiYgY3VycmVudF90b2tlbi53aGl0ZXNwYWNlX2JlZm9yZSA9PT0gJycgJiYgKGN1cnJlbnRfdG9rZW4ucHJldmlvdXMudGV4dCA9PT0gJyknIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uV09SRCkpIHtcbiAgICAvL0NvbmRpdGlvbmFsIGZvciBkZXRlY3RpZ24gYmFja3RpY2sgc3RyaW5nc1xuICB9IGVsc2UgaWYgKHRoaXMuc3RhcnRfb2Zfc3RhdGVtZW50KGN1cnJlbnRfdG9rZW4pKSB7XG4gICAgLy8gVGhlIGNvbmRpdGlvbmFsIHN0YXJ0cyB0aGUgc3RhdGVtZW50IGlmIGFwcHJvcHJpYXRlLlxuICAgIC8vIE9uZSBkaWZmZXJlbmNlIC0gc3RyaW5ncyB3YW50IGF0IGxlYXN0IGEgc3BhY2UgYmVmb3JlXG4gICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oYW5kbGVfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoY3VycmVudF90b2tlbik7XG4gICAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uUkVTRVJWRUQgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5XT1JEIHx8IHRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSkge1xuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkNPTU1BIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uU1RBUlRfRVhQUiB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVRVUFMUyB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLk9QRVJBVE9SKSB7XG4gICAgICBpZiAoIXRoaXMuc3RhcnRfb2Zfb2JqZWN0X3Byb3BlcnR5KCkpIHtcbiAgICAgICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKGN1cnJlbnRfdG9rZW4udGV4dC5zdGFydHNXaXRoKFwiYFwiKSAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVORF9FWFBSICYmIChjdXJyZW50X3Rva2VuLnByZXZpb3VzLnRleHQgPT09ICddJyB8fCBjdXJyZW50X3Rva2VuLnByZXZpb3VzLnRleHQgPT09ICcpJykgJiYgY3VycmVudF90b2tlbi5uZXdsaW5lcyA9PT0gMCkpIHtcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV9lcXVhbHMgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIGlmICh0aGlzLnN0YXJ0X29mX3N0YXRlbWVudChjdXJyZW50X3Rva2VuKSkge1xuICAgIC8vIFRoZSBjb25kaXRpb25hbCBzdGFydHMgdGhlIHN0YXRlbWVudCBpZiBhcHByb3ByaWF0ZS5cbiAgfSBlbHNlIHtcbiAgICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjdXJyZW50X3Rva2VuKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9mbGFncy5kZWNsYXJhdGlvbl9zdGF0ZW1lbnQpIHtcbiAgICAvLyBqdXN0IGdvdCBhbiAnPScgaW4gYSB2YXItbGluZSwgZGlmZmVyZW50IGZvcm1hdHRpbmcvbGluZS1icmVha2luZywgZXRjIHdpbGwgbm93IGJlIGRvbmVcbiAgICB0aGlzLl9mbGFncy5kZWNsYXJhdGlvbl9hc3NpZ25tZW50ID0gdHJ1ZTtcbiAgfVxuICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5oYW5kbGVfY29tbWEgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIHRoaXMuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzKGN1cnJlbnRfdG9rZW4sIHRydWUpO1xuXG4gIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICBpZiAodGhpcy5fZmxhZ3MuZGVjbGFyYXRpb25fc3RhdGVtZW50KSB7XG4gICAgaWYgKGlzX2V4cHJlc3Npb24odGhpcy5fZmxhZ3MucGFyZW50Lm1vZGUpKSB7XG4gICAgICAvLyBkbyBub3QgYnJlYWsgb24gY29tbWEsIGZvcih2YXIgYSA9IDEsIGIgPSAyKVxuICAgICAgdGhpcy5fZmxhZ3MuZGVjbGFyYXRpb25fYXNzaWdubWVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9mbGFncy5kZWNsYXJhdGlvbl9hc3NpZ25tZW50KSB7XG4gICAgICB0aGlzLl9mbGFncy5kZWNsYXJhdGlvbl9hc3NpZ25tZW50ID0gZmFsc2U7XG4gICAgICB0aGlzLnByaW50X25ld2xpbmUoZmFsc2UsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fb3B0aW9ucy5jb21tYV9maXJzdCkge1xuICAgICAgLy8gZm9yIGNvbW1hLWZpcnN0LCB3ZSB3YW50IHRvIGFsbG93IGEgbmV3bGluZSBiZWZvcmUgdGhlIGNvbW1hXG4gICAgICAvLyB0byB0dXJuIGludG8gYSBuZXdsaW5lIGFmdGVyIHRoZSBjb21tYSwgd2hpY2ggd2Ugd2lsbCBmaXh1cCBsYXRlclxuICAgICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLk9iamVjdExpdGVyYWwgfHxcbiAgICAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQgJiYgdGhpcy5fZmxhZ3MucGFyZW50Lm1vZGUgPT09IE1PREUuT2JqZWN0TGl0ZXJhbCkpIHtcbiAgICBpZiAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQpIHtcbiAgICAgIHRoaXMucmVzdG9yZV9tb2RlKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9mbGFncy5pbmxpbmVfZnJhbWUpIHtcbiAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLl9vcHRpb25zLmNvbW1hX2ZpcnN0KSB7XG4gICAgLy8gRVhQUiBvciBET19CTE9DS1xuICAgIC8vIGZvciBjb21tYS1maXJzdCwgd2Ugd2FudCB0byBhbGxvdyBhIG5ld2xpbmUgYmVmb3JlIHRoZSBjb21tYVxuICAgIC8vIHRvIHR1cm4gaW50byBhIG5ld2xpbmUgYWZ0ZXIgdGhlIGNvbW1hLCB3aGljaCB3ZSB3aWxsIGZpeHVwIGxhdGVyXG4gICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5oYW5kbGVfb3BlcmF0b3IgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIHZhciBpc0dlbmVyYXRvckFzdGVyaXNrID0gY3VycmVudF90b2tlbi50ZXh0ID09PSAnKicgJiZcbiAgICAocmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgWydmdW5jdGlvbicsICd5aWVsZCddKSB8fFxuICAgICAgKGluX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSwgW1RPS0VOLlNUQVJUX0JMT0NLLCBUT0tFTi5DT01NQSwgVE9LRU4uRU5EX0JMT0NLLCBUT0tFTi5TRU1JQ09MT05dKSlcbiAgICApO1xuICB2YXIgaXNVbmFyeSA9IGluX2FycmF5KGN1cnJlbnRfdG9rZW4udGV4dCwgWyctJywgJysnXSkgJiYgKFxuICAgIGluX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSwgW1RPS0VOLlNUQVJUX0JMT0NLLCBUT0tFTi5TVEFSVF9FWFBSLCBUT0tFTi5FUVVBTFMsIFRPS0VOLk9QRVJBVE9SXSkgfHxcbiAgICBpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQsIGxpbmVfc3RhcnRlcnMpIHx8XG4gICAgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnLCdcbiAgKTtcblxuICBpZiAodGhpcy5zdGFydF9vZl9zdGF0ZW1lbnQoY3VycmVudF90b2tlbikpIHtcbiAgICAvLyBUaGUgY29uZGl0aW9uYWwgc3RhcnRzIHRoZSBzdGF0ZW1lbnQgaWYgYXBwcm9wcmlhdGUuXG4gIH0gZWxzZSB7XG4gICAgdmFyIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyA9ICFpc0dlbmVyYXRvckFzdGVyaXNrO1xuICAgIHRoaXMuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzKGN1cnJlbnRfdG9rZW4sIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG4gIH1cblxuICAvLyBoYWNrIGZvciBhY3Rpb25zY3JpcHQncyBpbXBvcnQgLio7XG4gIGlmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICcqJyAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkRPVCkge1xuICAgIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJzo6Jykge1xuICAgIC8vIG5vIHNwYWNlcyBhcm91bmQgZXhvdGljIG5hbWVzcGFjaW5nIHN5bnRheCBvcGVyYXRvclxuICAgIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQWxsb3cgbGluZSB3cmFwcGluZyBiZXR3ZWVuIG9wZXJhdG9ycyB3aGVuIG9wZXJhdG9yX3Bvc2l0aW9uIGlzXG4gIC8vICAgc2V0IHRvIGJlZm9yZSBvciBwcmVzZXJ2ZVxuICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5PUEVSQVRPUiAmJiBpbl9hcnJheSh0aGlzLl9vcHRpb25zLm9wZXJhdG9yX3Bvc2l0aW9uLCBPUEVSQVRPUl9QT1NJVElPTl9CRUZPUkVfT1JfUFJFU0VSVkUpKSB7XG4gICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICB9XG5cbiAgaWYgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJzonICYmIHRoaXMuX2ZsYWdzLmluX2Nhc2UpIHtcbiAgICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuXG4gICAgdGhpcy5fZmxhZ3MuaW5fY2FzZSA9IGZhbHNlO1xuICAgIHRoaXMuX2ZsYWdzLmNhc2VfYm9keSA9IHRydWU7XG4gICAgaWYgKHRoaXMuX3Rva2Vucy5wZWVrKCkudHlwZSAhPT0gVE9LRU4uU1RBUlRfQkxPQ0spIHtcbiAgICAgIHRoaXMuaW5kZW50KCk7XG4gICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICAgIHRoaXMuX2ZsYWdzLmNhc2VfYmxvY2sgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZmxhZ3MuY2FzZV9ibG9jayA9IHRydWU7XG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNwYWNlX2JlZm9yZSA9IHRydWU7XG4gIHZhciBzcGFjZV9hZnRlciA9IHRydWU7XG4gIHZhciBpbl90ZXJuYXJ5ID0gZmFsc2U7XG4gIGlmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICc6Jykge1xuICAgIGlmICh0aGlzLl9mbGFncy50ZXJuYXJ5X2RlcHRoID09PSAwKSB7XG4gICAgICAvLyBDb2xvbiBpcyBpbnZhbGlkIGphdmFzY3JpcHQgb3V0c2lkZSBvZiB0ZXJuYXJ5IGFuZCBvYmplY3QsIGJ1dCBkbyBvdXIgYmVzdCB0byBndWVzcyB3aGF0IHdhcyBtZWFudC5cbiAgICAgIHNwYWNlX2JlZm9yZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9mbGFncy50ZXJuYXJ5X2RlcHRoIC09IDE7XG4gICAgICBpbl90ZXJuYXJ5ID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnPycpIHtcbiAgICB0aGlzLl9mbGFncy50ZXJuYXJ5X2RlcHRoICs9IDE7XG4gIH1cblxuICAvLyBsZXQncyBoYW5kbGUgdGhlIG9wZXJhdG9yX3Bvc2l0aW9uIG9wdGlvbiBwcmlvciB0byBhbnkgY29uZmxpY3RpbmcgbG9naWNcbiAgaWYgKCFpc1VuYXJ5ICYmICFpc0dlbmVyYXRvckFzdGVyaXNrICYmIHRoaXMuX29wdGlvbnMucHJlc2VydmVfbmV3bGluZXMgJiYgaW5fYXJyYXkoY3VycmVudF90b2tlbi50ZXh0LCBwb3NpdGlvbmFibGVfb3BlcmF0b3JzKSkge1xuICAgIHZhciBpc0NvbG9uID0gY3VycmVudF90b2tlbi50ZXh0ID09PSAnOic7XG4gICAgdmFyIGlzVGVybmFyeUNvbG9uID0gKGlzQ29sb24gJiYgaW5fdGVybmFyeSk7XG4gICAgdmFyIGlzT3RoZXJDb2xvbiA9IChpc0NvbG9uICYmICFpbl90ZXJuYXJ5KTtcblxuICAgIHN3aXRjaCAodGhpcy5fb3B0aW9ucy5vcGVyYXRvcl9wb3NpdGlvbikge1xuICAgICAgY2FzZSBPUEVSQVRPUl9QT1NJVElPTi5iZWZvcmVfbmV3bGluZTpcbiAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgOiBhbmQgaXQncyBub3QgYSB0ZXJuYXJ5IHN0YXRlbWVudCB0aGVuIHdlIHNldCBzcGFjZV9iZWZvcmUgdG8gZmFsc2VcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9ICFpc090aGVyQ29sb247XG5cbiAgICAgICAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcblxuICAgICAgICBpZiAoIWlzQ29sb24gfHwgaXNUZXJuYXJ5Q29sb24pIHtcbiAgICAgICAgICB0aGlzLmFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUoY3VycmVudF90b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYXNlIE9QRVJBVE9SX1BPU0lUSU9OLmFmdGVyX25ld2xpbmU6XG4gICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHRva2VuIGlzIGFueXRoaW5nIGJ1dCBjb2xvbiwgb3IgKHZpYSBkZWR1Y3Rpb24pIGl0J3MgYSBjb2xvbiBhbmQgaW4gYSB0ZXJuYXJ5IHN0YXRlbWVudCxcbiAgICAgICAgLy8gICB0aGVuIHByaW50IGEgbmV3bGluZS5cblxuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIWlzQ29sb24gfHwgaXNUZXJuYXJ5Q29sb24pIHtcbiAgICAgICAgICBpZiAodGhpcy5fdG9rZW5zLnBlZWsoKS5uZXdsaW5lcykge1xuICAgICAgICAgICAgdGhpcy5wcmludF9uZXdsaW5lKGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuXG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNhc2UgT1BFUkFUT1JfUE9TSVRJT04ucHJlc2VydmVfbmV3bGluZTpcbiAgICAgICAgaWYgKCFpc090aGVyQ29sb24pIHtcbiAgICAgICAgICB0aGlzLmFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUoY3VycmVudF90b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB3ZSBqdXN0IGFkZGVkIGEgbmV3bGluZSwgb3IgdGhlIGN1cnJlbnQgdG9rZW4gaXMgOiBhbmQgaXQncyBub3QgYSB0ZXJuYXJ5IHN0YXRlbWVudCxcbiAgICAgICAgLy8gICB0aGVuIHdlIHNldCBzcGFjZV9iZWZvcmUgdG8gZmFsc2VcbiAgICAgICAgc3BhY2VfYmVmb3JlID0gISh0aGlzLl9vdXRwdXQuanVzdF9hZGRlZF9uZXdsaW5lKCkgfHwgaXNPdGhlckNvbG9uKTtcblxuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gc3BhY2VfYmVmb3JlO1xuICAgICAgICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc0dlbmVyYXRvckFzdGVyaXNrKSB7XG4gICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICAgIHNwYWNlX2JlZm9yZSA9IGZhbHNlO1xuICAgIHZhciBuZXh0X3Rva2VuID0gdGhpcy5fdG9rZW5zLnBlZWsoKTtcbiAgICBzcGFjZV9hZnRlciA9IG5leHRfdG9rZW4gJiYgaW5fYXJyYXkobmV4dF90b2tlbi50eXBlLCBbVE9LRU4uV09SRCwgVE9LRU4uUkVTRVJWRURdKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICcuLi4nKSB7XG4gICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICAgIHNwYWNlX2JlZm9yZSA9IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uU1RBUlRfQkxPQ0s7XG4gICAgc3BhY2VfYWZ0ZXIgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChpbl9hcnJheShjdXJyZW50X3Rva2VuLnRleHQsIFsnLS0nLCAnKysnLCAnIScsICd+J10pIHx8IGlzVW5hcnkpIHtcbiAgICAvLyB1bmFyeSBvcGVyYXRvcnMgKGFuZCBiaW5hcnkgKy8tIHByZXRlbmRpbmcgdG8gYmUgdW5hcnkpIHNwZWNpYWwgY2FzZXNcbiAgICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5DT01NQSB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0VYUFIpIHtcbiAgICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgICB9XG5cbiAgICBzcGFjZV9iZWZvcmUgPSBmYWxzZTtcbiAgICBzcGFjZV9hZnRlciA9IGZhbHNlO1xuXG4gICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTcuOS4xXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBuZXdsaW5lIGJldHdlZW4gLS0gb3IgKysgYW5kIGFueXRoaW5nIGVsc2Ugd2Ugc2hvdWxkIHByZXNlcnZlIGl0LlxuICAgIGlmIChjdXJyZW50X3Rva2VuLm5ld2xpbmVzICYmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICctLScgfHwgY3VycmVudF90b2tlbi50ZXh0ID09PSAnKysnIHx8IGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJ34nKSkge1xuICAgICAgdmFyIG5ld19saW5lX25lZWRlZCA9IHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIHNwZWNpYWxfd29yZHMpICYmIGN1cnJlbnRfdG9rZW4ubmV3bGluZXM7XG4gICAgICBpZiAobmV3X2xpbmVfbmVlZGVkICYmICh0aGlzLl9wcmV2aW91c19mbGFncy5pZl9ibG9jayB8fCB0aGlzLl9wcmV2aW91c19mbGFncy5lbHNlX2Jsb2NrKSkge1xuICAgICAgICB0aGlzLnJlc3RvcmVfbW9kZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcmludF9uZXdsaW5lKG5ld19saW5lX25lZWRlZCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJzsnICYmIGlzX2V4cHJlc3Npb24odGhpcy5fZmxhZ3MubW9kZSkpIHtcbiAgICAgIC8vIGZvciAoOzsgKytpKVxuICAgICAgLy8gICAgICAgIF5eXlxuICAgICAgc3BhY2VfYmVmb3JlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5SRVNFUlZFRCkge1xuICAgICAgc3BhY2VfYmVmb3JlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0VYUFIpIHtcbiAgICAgIHNwYWNlX2JlZm9yZSA9ICEodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnXScgJiYgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJy0tJyB8fCBjdXJyZW50X3Rva2VuLnRleHQgPT09ICcrKycpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uT1BFUkFUT1IpIHtcbiAgICAgIC8vIGErKyArICsrYjtcbiAgICAgIC8vIGEgLSAtYlxuICAgICAgc3BhY2VfYmVmb3JlID0gaW5fYXJyYXkoY3VycmVudF90b2tlbi50ZXh0LCBbJy0tJywgJy0nLCAnKysnLCAnKyddKSAmJiBpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQsIFsnLS0nLCAnLScsICcrKycsICcrJ10pO1xuICAgICAgLy8gKyBhbmQgLSBhcmUgbm90IHVuYXJ5IHdoZW4gcHJlY2VlZGVkIGJ5IC0tIG9yICsrIG9wZXJhdG9yXG4gICAgICAvLyBhLS0gKyBiXG4gICAgICAvLyBhICogK2JcbiAgICAgIC8vIGEgLSAtYlxuICAgICAgaWYgKGluX2FycmF5KGN1cnJlbnRfdG9rZW4udGV4dCwgWycrJywgJy0nXSkgJiYgaW5fYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0LCBbJy0tJywgJysrJ10pKSB7XG4gICAgICAgIHNwYWNlX2FmdGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIGlmICgoKHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuQmxvY2tTdGF0ZW1lbnQgJiYgIXRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSkgfHwgdGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQpICYmXG4gICAgICAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAneycgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnOycpKSB7XG4gICAgICAvLyB7IGZvbzsgLS1pIH1cbiAgICAgIC8vIGZvbygpOyAtLWJhcjtcbiAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuIHx8IHNwYWNlX2JlZm9yZTtcbiAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHNwYWNlX2FmdGVyO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX2Jsb2NrX2NvbW1lbnQgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpIHtcbiAgaWYgKHRoaXMuX291dHB1dC5yYXcpIHtcbiAgICB0aGlzLl9vdXRwdXQuYWRkX3Jhd190b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgICBpZiAoY3VycmVudF90b2tlbi5kaXJlY3RpdmVzICYmIGN1cnJlbnRfdG9rZW4uZGlyZWN0aXZlcy5wcmVzZXJ2ZSA9PT0gJ2VuZCcpIHtcbiAgICAgIC8vIElmIHdlJ3JlIHRlc3RpbmcgdGhlIHJhdyBvdXRwdXQgYmVoYXZpb3IsIGRvIG5vdCBhbGxvdyBhIGRpcmVjdGl2ZSB0byB0dXJuIGl0IG9mZi5cbiAgICAgIHRoaXMuX291dHB1dC5yYXcgPSB0aGlzLl9vcHRpb25zLnRlc3Rfb3V0cHV0X3JhdztcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGN1cnJlbnRfdG9rZW4uZGlyZWN0aXZlcykge1xuICAgIHRoaXMucHJpbnRfbmV3bGluZShmYWxzZSwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcbiAgICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuICAgIGlmIChjdXJyZW50X3Rva2VuLmRpcmVjdGl2ZXMucHJlc2VydmUgPT09ICdzdGFydCcpIHtcbiAgICAgIHRoaXMuX291dHB1dC5yYXcgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnByaW50X25ld2xpbmUoZmFsc2UsIHRydWUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGlubGluZSBibG9ja1xuICBpZiAoIWFjb3JuLm5ld2xpbmUudGVzdChjdXJyZW50X3Rva2VuLnRleHQpICYmICFjdXJyZW50X3Rva2VuLm5ld2xpbmVzKSB7XG4gICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5wcmludF9ibG9ja19jb21tbWVudChjdXJyZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5wcmludF9ibG9ja19jb21tbWVudCA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4sIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncykge1xuICB2YXIgbGluZXMgPSBzcGxpdF9saW5lYnJlYWtzKGN1cnJlbnRfdG9rZW4udGV4dCk7XG4gIHZhciBqOyAvLyBpdGVyYXRvciBmb3IgdGhpcyBjYXNlXG4gIHZhciBqYXZhZG9jID0gZmFsc2U7XG4gIHZhciBzdGFybGVzcyA9IGZhbHNlO1xuICB2YXIgbGFzdEluZGVudCA9IGN1cnJlbnRfdG9rZW4ud2hpdGVzcGFjZV9iZWZvcmU7XG4gIHZhciBsYXN0SW5kZW50TGVuZ3RoID0gbGFzdEluZGVudC5sZW5ndGg7XG5cbiAgLy8gYmxvY2sgY29tbWVudCBzdGFydHMgd2l0aCBhIG5ldyBsaW5lXG4gIHRoaXMucHJpbnRfbmV3bGluZShmYWxzZSwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcblxuICAvLyBmaXJzdCBsaW5lIGFsd2F5cyBpbmRlbnRlZFxuICB0aGlzLnByaW50X3Rva2VuX2xpbmVfaW5kZW50YXRpb24oY3VycmVudF90b2tlbik7XG4gIHRoaXMuX291dHB1dC5hZGRfdG9rZW4obGluZXNbMF0pO1xuICB0aGlzLnByaW50X25ld2xpbmUoZmFsc2UsIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG5cblxuICBpZiAobGluZXMubGVuZ3RoID4gMSkge1xuICAgIGxpbmVzID0gbGluZXMuc2xpY2UoMSk7XG4gICAgamF2YWRvYyA9IGFsbF9saW5lc19zdGFydF93aXRoKGxpbmVzLCAnKicpO1xuICAgIHN0YXJsZXNzID0gZWFjaF9saW5lX21hdGNoZXNfaW5kZW50KGxpbmVzLCBsYXN0SW5kZW50KTtcblxuICAgIGlmIChqYXZhZG9jKSB7XG4gICAgICB0aGlzLl9mbGFncy5hbGlnbm1lbnQgPSAxO1xuICAgIH1cblxuICAgIGZvciAoaiA9IDA7IGogPCBsaW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGphdmFkb2MpIHtcbiAgICAgICAgLy8gamF2YWRvYzogcmVmb3JtYXQgYW5kIHJlLWluZGVudFxuICAgICAgICB0aGlzLnByaW50X3Rva2VuX2xpbmVfaW5kZW50YXRpb24oY3VycmVudF90b2tlbik7XG4gICAgICAgIHRoaXMuX291dHB1dC5hZGRfdG9rZW4obHRyaW0obGluZXNbal0pKTtcbiAgICAgIH0gZWxzZSBpZiAoc3Rhcmxlc3MgJiYgbGluZXNbal0pIHtcbiAgICAgICAgLy8gc3Rhcmxlc3M6IHJlLWluZGVudCBub24tZW1wdHkgY29udGVudCwgYXZvaWRpbmcgdHJpbVxuICAgICAgICB0aGlzLnByaW50X3Rva2VuX2xpbmVfaW5kZW50YXRpb24oY3VycmVudF90b2tlbik7XG4gICAgICAgIHRoaXMuX291dHB1dC5hZGRfdG9rZW4obGluZXNbal0uc3Vic3RyaW5nKGxhc3RJbmRlbnRMZW5ndGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5vcm1hbCBjb21tZW50cyBvdXRwdXQgcmF3XG4gICAgICAgIHRoaXMuX291dHB1dC5jdXJyZW50X2xpbmUuc2V0X2luZGVudCgtMSk7XG4gICAgICAgIHRoaXMuX291dHB1dC5hZGRfdG9rZW4obGluZXNbal0pO1xuICAgICAgfVxuXG4gICAgICAvLyBmb3IgY29tbWVudHMgb24gdGhlaXIgb3duIGxpbmUgb3IgIG1vcmUgdGhhbiBvbmUgbGluZSwgbWFrZSBzdXJlIHRoZXJlJ3MgYSBuZXcgbGluZSBhZnRlclxuICAgICAgdGhpcy5wcmludF9uZXdsaW5lKGZhbHNlLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZsYWdzLmFsaWdubWVudCA9IDA7XG4gIH1cbn07XG5cblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX2NvbW1lbnQgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpIHtcbiAgaWYgKGN1cnJlbnRfdG9rZW4ubmV3bGluZXMpIHtcbiAgICB0aGlzLnByaW50X25ld2xpbmUoZmFsc2UsIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fb3V0cHV0LnRyaW0odHJ1ZSk7XG4gIH1cblxuICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgdGhpcy5wcmludF9uZXdsaW5lKGZhbHNlLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX2RvdCA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHtcbiAgaWYgKHRoaXMuc3RhcnRfb2Zfc3RhdGVtZW50KGN1cnJlbnRfdG9rZW4pKSB7XG4gICAgLy8gVGhlIGNvbmRpdGlvbmFsIHN0YXJ0cyB0aGUgc3RhdGVtZW50IGlmIGFwcHJvcHJpYXRlLlxuICB9IGVsc2Uge1xuICAgIHRoaXMuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzKGN1cnJlbnRfdG9rZW4sIHRydWUpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dC5tYXRjaCgnXlswLTldKyQnKSkge1xuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICB9XG5cbiAgaWYgKHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIHNwZWNpYWxfd29yZHMpKSB7XG4gICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIC8vIGFsbG93IHByZXNlcnZlZCBuZXdsaW5lcyBiZWZvcmUgZG90cyBpbiBnZW5lcmFsXG4gICAgLy8gZm9yY2UgbmV3bGluZXMgb24gZG90cyBhZnRlciBjbG9zZSBwYXJlbiB3aGVuIGJyZWFrX2NoYWluZWQgLSBmb3IgYmFyKCkuYmF6KClcbiAgICB0aGlzLmFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUoY3VycmVudF90b2tlbixcbiAgICAgIHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJyknICYmIHRoaXMuX29wdGlvbnMuYnJlYWtfY2hhaW5lZF9tZXRob2RzKTtcbiAgfVxuXG4gIC8vIE9ubHkgdW5pbmRlbnQgY2hhaW5lZCBtZXRob2QgZG90IGlmIHRoaXMgZG90IHN0YXJ0cyBhIG5ldyBsaW5lLlxuICAvLyBPdGhlcndpc2UgdGhlIGF1dG9tYXRpYyBleHRyYSBpbmRlbnRhdGlvbiByZW1vdmFsIHdpbGwgaGFuZGxlIHRoZSBvdmVyIGluZGVudFxuICBpZiAodGhpcy5fb3B0aW9ucy51bmluZGVudF9jaGFpbmVkX21ldGhvZHMgJiYgdGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfbmV3bGluZSgpKSB7XG4gICAgdGhpcy5kZWluZGVudCgpO1xuICB9XG5cbiAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV91bmtub3duID0gZnVuY3Rpb24oY3VycmVudF90b2tlbiwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKSB7XG4gIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG5cbiAgaWYgKGN1cnJlbnRfdG9rZW4udGV4dFtjdXJyZW50X3Rva2VuLnRleHQubGVuZ3RoIC0gMV0gPT09ICdcXG4nKSB7XG4gICAgdGhpcy5wcmludF9uZXdsaW5lKGZhbHNlLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5oYW5kbGVfZW9mID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICAvLyBVbndpbmQgYW55IG9wZW4gc3RhdGVtZW50c1xuICB3aGlsZSAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnJlc3RvcmVfbW9kZSgpO1xuICB9XG4gIHRoaXMuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzKGN1cnJlbnRfdG9rZW4pO1xufTtcblxubW9kdWxlLmV4cG9ydHMuQmVhdXRpZmllciA9IEJlYXV0aWZpZXI7XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQmVhdXRpZmllciA9IHJlcXVpcmUoJy4vYmVhdXRpZmllcicpLkJlYXV0aWZpZXIsXG4gIE9wdGlvbnMgPSByZXF1aXJlKCcuL29wdGlvbnMnKS5PcHRpb25zO1xuXG5mdW5jdGlvbiBqc19iZWF1dGlmeShqc19zb3VyY2VfdGV4dCwgb3B0aW9ucykge1xuICB2YXIgYmVhdXRpZmllciA9IG5ldyBCZWF1dGlmaWVyKGpzX3NvdXJjZV90ZXh0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGJlYXV0aWZpZXIuYmVhdXRpZnkoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBqc19iZWF1dGlmeTtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgT3B0aW9ucygpO1xufTtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBCYXNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2NvcmUvb3B0aW9ucycpLk9wdGlvbnM7XG5cbnZhciB2YWxpZFBvc2l0aW9uVmFsdWVzID0gWydiZWZvcmUtbmV3bGluZScsICdhZnRlci1uZXdsaW5lJywgJ3ByZXNlcnZlLW5ld2xpbmUnXTtcblxuZnVuY3Rpb24gT3B0aW9ucyhvcHRpb25zKSB7XG4gIEJhc2VPcHRpb25zLmNhbGwodGhpcywgb3B0aW9ucywgJ2pzJyk7XG5cbiAgLy8gY29tcGF0aWJpbGl0eSwgcmVcbiAgdmFyIHJhd19icmFjZV9zdHlsZSA9IHRoaXMucmF3X29wdGlvbnMuYnJhY2Vfc3R5bGUgfHwgbnVsbDtcbiAgaWYgKHJhd19icmFjZV9zdHlsZSA9PT0gXCJleHBhbmQtc3RyaWN0XCIpIHsgLy9ncmFjZWZ1bCBoYW5kbGluZyBvZiBkZXByZWNhdGVkIG9wdGlvblxuICAgIHRoaXMucmF3X29wdGlvbnMuYnJhY2Vfc3R5bGUgPSBcImV4cGFuZFwiO1xuICB9IGVsc2UgaWYgKHJhd19icmFjZV9zdHlsZSA9PT0gXCJjb2xsYXBzZS1wcmVzZXJ2ZS1pbmxpbmVcIikgeyAvL2dyYWNlZnVsIGhhbmRsaW5nIG9mIGRlcHJlY2F0ZWQgb3B0aW9uXG4gICAgdGhpcy5yYXdfb3B0aW9ucy5icmFjZV9zdHlsZSA9IFwiY29sbGFwc2UscHJlc2VydmUtaW5saW5lXCI7XG4gIH0gZWxzZSBpZiAodGhpcy5yYXdfb3B0aW9ucy5icmFjZXNfb25fb3duX2xpbmUgIT09IHVuZGVmaW5lZCkgeyAvL2dyYWNlZnVsIGhhbmRsaW5nIG9mIGRlcHJlY2F0ZWQgb3B0aW9uXG4gICAgdGhpcy5yYXdfb3B0aW9ucy5icmFjZV9zdHlsZSA9IHRoaXMucmF3X29wdGlvbnMuYnJhY2VzX29uX293bl9saW5lID8gXCJleHBhbmRcIiA6IFwiY29sbGFwc2VcIjtcbiAgICAvLyB9IGVsc2UgaWYgKCFyYXdfYnJhY2Vfc3R5bGUpIHsgLy9Ob3RoaW5nIGV4aXN0cyB0byBzZXQgaXRcbiAgICAvLyAgIHJhd19icmFjZV9zdHlsZSA9IFwiY29sbGFwc2VcIjtcbiAgfVxuXG4gIC8vcHJlc2VydmUtaW5saW5lIGluIGRlbGltaXRlZCBzdHJpbmcgd2lsbCB0cmlnZ2VyIGJyYWNlX3ByZXNlcnZlX2lubGluZSwgZXZlcnl0aGluZ1xuICAvL2Vsc2UgaXMgY29uc2lkZXJlZCBhIGJyYWNlX3N0eWxlIGFuZCB0aGUgbGFzdCBvbmUgb25seSB3aWxsIGhhdmUgYW4gZWZmZWN0XG5cbiAgdmFyIGJyYWNlX3N0eWxlX3NwbGl0ID0gdGhpcy5fZ2V0X3NlbGVjdGlvbl9saXN0KCdicmFjZV9zdHlsZScsIFsnY29sbGFwc2UnLCAnZXhwYW5kJywgJ2VuZC1leHBhbmQnLCAnbm9uZScsICdwcmVzZXJ2ZS1pbmxpbmUnXSk7XG5cbiAgdGhpcy5icmFjZV9wcmVzZXJ2ZV9pbmxpbmUgPSBmYWxzZTsgLy9EZWZhdWx0cyBpbiBjYXNlIG9uZSBvciBvdGhlciB3YXMgbm90IHNwZWNpZmllZCBpbiBtZXRhLW9wdGlvblxuICB0aGlzLmJyYWNlX3N0eWxlID0gXCJjb2xsYXBzZVwiO1xuXG4gIGZvciAodmFyIGJzID0gMDsgYnMgPCBicmFjZV9zdHlsZV9zcGxpdC5sZW5ndGg7IGJzKyspIHtcbiAgICBpZiAoYnJhY2Vfc3R5bGVfc3BsaXRbYnNdID09PSBcInByZXNlcnZlLWlubGluZVwiKSB7XG4gICAgICB0aGlzLmJyYWNlX3ByZXNlcnZlX2lubGluZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnJhY2Vfc3R5bGUgPSBicmFjZV9zdHlsZV9zcGxpdFtic107XG4gICAgfVxuICB9XG5cbiAgdGhpcy51bmluZGVudF9jaGFpbmVkX21ldGhvZHMgPSB0aGlzLl9nZXRfYm9vbGVhbigndW5pbmRlbnRfY2hhaW5lZF9tZXRob2RzJyk7XG4gIHRoaXMuYnJlYWtfY2hhaW5lZF9tZXRob2RzID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2JyZWFrX2NoYWluZWRfbWV0aG9kcycpO1xuICB0aGlzLnNwYWNlX2luX3BhcmVuID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ3NwYWNlX2luX3BhcmVuJyk7XG4gIHRoaXMuc3BhY2VfaW5fZW1wdHlfcGFyZW4gPSB0aGlzLl9nZXRfYm9vbGVhbignc3BhY2VfaW5fZW1wdHlfcGFyZW4nKTtcbiAgdGhpcy5qc2xpbnRfaGFwcHkgPSB0aGlzLl9nZXRfYm9vbGVhbignanNsaW50X2hhcHB5Jyk7XG4gIHRoaXMuc3BhY2VfYWZ0ZXJfYW5vbl9mdW5jdGlvbiA9IHRoaXMuX2dldF9ib29sZWFuKCdzcGFjZV9hZnRlcl9hbm9uX2Z1bmN0aW9uJyk7XG4gIHRoaXMuc3BhY2VfYWZ0ZXJfbmFtZWRfZnVuY3Rpb24gPSB0aGlzLl9nZXRfYm9vbGVhbignc3BhY2VfYWZ0ZXJfbmFtZWRfZnVuY3Rpb24nKTtcbiAgdGhpcy5rZWVwX2FycmF5X2luZGVudGF0aW9uID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2tlZXBfYXJyYXlfaW5kZW50YXRpb24nKTtcbiAgdGhpcy5zcGFjZV9iZWZvcmVfY29uZGl0aW9uYWwgPSB0aGlzLl9nZXRfYm9vbGVhbignc3BhY2VfYmVmb3JlX2NvbmRpdGlvbmFsJywgdHJ1ZSk7XG4gIHRoaXMudW5lc2NhcGVfc3RyaW5ncyA9IHRoaXMuX2dldF9ib29sZWFuKCd1bmVzY2FwZV9zdHJpbmdzJyk7XG4gIHRoaXMuZTR4ID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2U0eCcpO1xuICB0aGlzLmNvbW1hX2ZpcnN0ID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2NvbW1hX2ZpcnN0Jyk7XG4gIHRoaXMub3BlcmF0b3JfcG9zaXRpb24gPSB0aGlzLl9nZXRfc2VsZWN0aW9uKCdvcGVyYXRvcl9wb3NpdGlvbicsIHZhbGlkUG9zaXRpb25WYWx1ZXMpO1xuXG4gIC8vIEZvciB0ZXN0aW5nIG9mIGJlYXV0aWZ5IHByZXNlcnZlOnN0YXJ0IGRpcmVjdGl2ZVxuICB0aGlzLnRlc3Rfb3V0cHV0X3JhdyA9IHRoaXMuX2dldF9ib29sZWFuKCd0ZXN0X291dHB1dF9yYXcnKTtcblxuICAvLyBmb3JjZSB0aGlzLl9vcHRpb25zLnNwYWNlX2FmdGVyX2Fub25fZnVuY3Rpb24gdG8gdHJ1ZSBpZiB0aGlzLl9vcHRpb25zLmpzbGludF9oYXBweVxuICBpZiAodGhpcy5qc2xpbnRfaGFwcHkpIHtcbiAgICB0aGlzLnNwYWNlX2FmdGVyX2Fub25fZnVuY3Rpb24gPSB0cnVlO1xuICB9XG5cbn1cbk9wdGlvbnMucHJvdG90eXBlID0gbmV3IEJhc2VPcHRpb25zKCk7XG5cblxuXG5tb2R1bGUuZXhwb3J0cy5PcHRpb25zID0gT3B0aW9ucztcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBJbnB1dFNjYW5uZXIgPSByZXF1aXJlKCcuLi9jb3JlL2lucHV0c2Nhbm5lcicpLklucHV0U2Nhbm5lcjtcbnZhciBCYXNlVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vY29yZS90b2tlbml6ZXInKS5Ub2tlbml6ZXI7XG52YXIgQkFTRVRPS0VOID0gcmVxdWlyZSgnLi4vY29yZS90b2tlbml6ZXInKS5UT0tFTjtcbnZhciBEaXJlY3RpdmVzID0gcmVxdWlyZSgnLi4vY29yZS9kaXJlY3RpdmVzJykuRGlyZWN0aXZlcztcbnZhciBhY29ybiA9IHJlcXVpcmUoJy4vYWNvcm4nKTtcbnZhciBQYXR0ZXJuID0gcmVxdWlyZSgnLi4vY29yZS9wYXR0ZXJuJykuUGF0dGVybjtcbnZhciBUZW1wbGF0YWJsZVBhdHRlcm4gPSByZXF1aXJlKCcuLi9jb3JlL3RlbXBsYXRhYmxlcGF0dGVybicpLlRlbXBsYXRhYmxlUGF0dGVybjtcblxuXG5mdW5jdGlvbiBpbl9hcnJheSh3aGF0LCBhcnIpIHtcbiAgcmV0dXJuIGFyci5pbmRleE9mKHdoYXQpICE9PSAtMTtcbn1cblxuXG52YXIgVE9LRU4gPSB7XG4gIFNUQVJUX0VYUFI6ICdUS19TVEFSVF9FWFBSJyxcbiAgRU5EX0VYUFI6ICdUS19FTkRfRVhQUicsXG4gIFNUQVJUX0JMT0NLOiAnVEtfU1RBUlRfQkxPQ0snLFxuICBFTkRfQkxPQ0s6ICdUS19FTkRfQkxPQ0snLFxuICBXT1JEOiAnVEtfV09SRCcsXG4gIFJFU0VSVkVEOiAnVEtfUkVTRVJWRUQnLFxuICBTRU1JQ09MT046ICdUS19TRU1JQ09MT04nLFxuICBTVFJJTkc6ICdUS19TVFJJTkcnLFxuICBFUVVBTFM6ICdUS19FUVVBTFMnLFxuICBPUEVSQVRPUjogJ1RLX09QRVJBVE9SJyxcbiAgQ09NTUE6ICdUS19DT01NQScsXG4gIEJMT0NLX0NPTU1FTlQ6ICdUS19CTE9DS19DT01NRU5UJyxcbiAgQ09NTUVOVDogJ1RLX0NPTU1FTlQnLFxuICBET1Q6ICdUS19ET1QnLFxuICBVTktOT1dOOiAnVEtfVU5LTk9XTicsXG4gIFNUQVJUOiBCQVNFVE9LRU4uU1RBUlQsXG4gIFJBVzogQkFTRVRPS0VOLlJBVyxcbiAgRU9GOiBCQVNFVE9LRU4uRU9GXG59O1xuXG5cbnZhciBkaXJlY3RpdmVzX2NvcmUgPSBuZXcgRGlyZWN0aXZlcygvXFwvXFwqLywgL1xcKlxcLy8pO1xuXG52YXIgbnVtYmVyX3BhdHRlcm4gPSAvMFt4WF1bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl9dKm4/fDBbb09dWzAxMjM0NTY3X10qbj98MFtiQl1bMDFfXSpuP3xcXGRbXFxkX10qbnwoPzpcXC5cXGRbXFxkX10qfFxcZFtcXGRfXSpcXC4/W1xcZF9dKikoPzpbZUVdWystXT9bXFxkX10rKT8vO1xuXG52YXIgZGlnaXQgPSAvWzAtOV0vO1xuXG4vLyBEb3QgXCIuXCIgbXVzdCBiZSBkaXN0aW5ndWlzaGVkIGZyb20gXCIuLi5cIiBhbmQgZGVjaW1hbFxudmFyIGRvdF9wYXR0ZXJuID0gL1teXFxkXFwuXS87XG5cbnZhciBwb3NpdGlvbmFibGVfb3BlcmF0b3JzID0gKFxuICBcIj4+PiA9PT0gIT09ICYmPSA/Pz0gfHw9IFwiICtcbiAgXCI8PCAmJiA+PSAqKiAhPSA9PSA8PSA+PiB8fCA/PyB8PiBcIiArXG4gIFwiPCAvIC0gKyA+IDogJiAlID8gXiB8ICpcIikuc3BsaXQoJyAnKTtcblxuLy8gSU1QT1JUQU5UOiB0aGlzIG11c3QgYmUgc29ydGVkIGxvbmdlc3QgdG8gc2hvcnRlc3Qgb3IgdG9rZW5pemluZyBtYW55IG5vdCB3b3JrLlxuLy8gQWxzbywgeW91IG11c3QgdXBkYXRlIHBvc3NpdGlvbmFibGUgb3BlcmF0b3JzIHNlcGFyYXRlbHkgZnJvbSBwdW5jdFxudmFyIHB1bmN0ID1cbiAgXCI+Pj49IFwiICtcbiAgXCIuLi4gPj49IDw8PSA9PT0gPj4+ICE9PSAqKj0gJiY9ID8/PSB8fD0gXCIgK1xuICBcIj0+IF49IDo6IC89IDw8IDw9ID09ICYmIC09ID49ID4+ICE9IC0tICs9ICoqIHx8ID8/ICsrICU9ICY9ICo9IHw9IHw+IFwiICtcbiAgXCI9ICEgPyA+IDwgOiAvIF4gLSArICogJiAlIH4gfFwiO1xuXG5wdW5jdCA9IHB1bmN0LnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXS9nLCBcIlxcXFwkJlwiKTtcbi8vID8uIGJ1dCBub3QgaWYgZm9sbG93ZWQgYnkgYSBudW1iZXIgXG5wdW5jdCA9ICdcXFxcP1xcXFwuKD8hXFxcXGQpICcgKyBwdW5jdDtcbnB1bmN0ID0gcHVuY3QucmVwbGFjZSgvIC9nLCAnfCcpO1xuXG52YXIgcHVuY3RfcGF0dGVybiA9IG5ldyBSZWdFeHAocHVuY3QpO1xuXG4vLyB3b3JkcyB3aGljaCBzaG91bGQgYWx3YXlzIHN0YXJ0IG9uIG5ldyBsaW5lLlxudmFyIGxpbmVfc3RhcnRlcnMgPSAnY29udGludWUsdHJ5LHRocm93LHJldHVybix2YXIsbGV0LGNvbnN0LGlmLHN3aXRjaCxjYXNlLGRlZmF1bHQsZm9yLHdoaWxlLGJyZWFrLGZ1bmN0aW9uLGltcG9ydCxleHBvcnQnLnNwbGl0KCcsJyk7XG52YXIgcmVzZXJ2ZWRfd29yZHMgPSBsaW5lX3N0YXJ0ZXJzLmNvbmNhdChbJ2RvJywgJ2luJywgJ29mJywgJ2Vsc2UnLCAnZ2V0JywgJ3NldCcsICduZXcnLCAnY2F0Y2gnLCAnZmluYWxseScsICd0eXBlb2YnLCAneWllbGQnLCAnYXN5bmMnLCAnYXdhaXQnLCAnZnJvbScsICdhcycsICdjbGFzcycsICdleHRlbmRzJ10pO1xudmFyIHJlc2VydmVkX3dvcmRfcGF0dGVybiA9IG5ldyBSZWdFeHAoJ14oPzonICsgcmVzZXJ2ZWRfd29yZHMuam9pbignfCcpICsgJykkJyk7XG5cbi8vIHZhciB0ZW1wbGF0ZV9wYXR0ZXJuID0gLyg/Oig/OjxcXD9waHB8PFxcPz0pW1xcc1xcU10qP1xcPz4pfCg/OjwlW1xcc1xcU10qPyU+KS9nO1xuXG52YXIgaW5faHRtbF9jb21tZW50O1xuXG52YXIgVG9rZW5pemVyID0gZnVuY3Rpb24oaW5wdXRfc3RyaW5nLCBvcHRpb25zKSB7XG4gIEJhc2VUb2tlbml6ZXIuY2FsbCh0aGlzLCBpbnB1dF9zdHJpbmcsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX3BhdHRlcm5zLndoaXRlc3BhY2UgPSB0aGlzLl9wYXR0ZXJucy53aGl0ZXNwYWNlLm1hdGNoaW5nKFxuICAgIC9cXHUwMEEwXFx1MTY4MFxcdTE4MGVcXHUyMDAwLVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHVmZWZmLy5zb3VyY2UsXG4gICAgL1xcdTIwMjhcXHUyMDI5Ly5zb3VyY2UpO1xuXG4gIHZhciBwYXR0ZXJuX3JlYWRlciA9IG5ldyBQYXR0ZXJuKHRoaXMuX2lucHV0KTtcbiAgdmFyIHRlbXBsYXRhYmxlID0gbmV3IFRlbXBsYXRhYmxlUGF0dGVybih0aGlzLl9pbnB1dClcbiAgICAucmVhZF9vcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuXG4gIHRoaXMuX19wYXR0ZXJucyA9IHtcbiAgICB0ZW1wbGF0ZTogdGVtcGxhdGFibGUsXG4gICAgaWRlbnRpZmllcjogdGVtcGxhdGFibGUuc3RhcnRpbmdfd2l0aChhY29ybi5pZGVudGlmaWVyKS5tYXRjaGluZyhhY29ybi5pZGVudGlmaWVyTWF0Y2gpLFxuICAgIG51bWJlcjogcGF0dGVybl9yZWFkZXIubWF0Y2hpbmcobnVtYmVyX3BhdHRlcm4pLFxuICAgIHB1bmN0OiBwYXR0ZXJuX3JlYWRlci5tYXRjaGluZyhwdW5jdF9wYXR0ZXJuKSxcbiAgICAvLyBjb21tZW50IGVuZHMganVzdCBiZWZvcmUgbmVhcmVzdCBsaW5lZmVlZCBvciBlbmQgb2YgZmlsZVxuICAgIGNvbW1lbnQ6IHBhdHRlcm5fcmVhZGVyLnN0YXJ0aW5nX3dpdGgoL1xcL1xcLy8pLnVudGlsKC9bXFxuXFxyXFx1MjAyOFxcdTIwMjldLyksXG4gICAgLy8gIC8qIC4uLiAqLyBjb21tZW50IGVuZHMgd2l0aCBuZWFyZXN0ICovIG9yIGVuZCBvZiBmaWxlXG4gICAgYmxvY2tfY29tbWVudDogcGF0dGVybl9yZWFkZXIuc3RhcnRpbmdfd2l0aCgvXFwvXFwqLykudW50aWxfYWZ0ZXIoL1xcKlxcLy8pLFxuICAgIGh0bWxfY29tbWVudF9zdGFydDogcGF0dGVybl9yZWFkZXIubWF0Y2hpbmcoLzwhLS0vKSxcbiAgICBodG1sX2NvbW1lbnRfZW5kOiBwYXR0ZXJuX3JlYWRlci5tYXRjaGluZygvLS0+LyksXG4gICAgaW5jbHVkZTogcGF0dGVybl9yZWFkZXIuc3RhcnRpbmdfd2l0aCgvI2luY2x1ZGUvKS51bnRpbF9hZnRlcihhY29ybi5saW5lQnJlYWspLFxuICAgIHNoZWJhbmc6IHBhdHRlcm5fcmVhZGVyLnN0YXJ0aW5nX3dpdGgoLyMhLykudW50aWxfYWZ0ZXIoYWNvcm4ubGluZUJyZWFrKSxcbiAgICB4bWw6IHBhdHRlcm5fcmVhZGVyLm1hdGNoaW5nKC9bXFxzXFxTXSo/PChcXC8/KShbLWEtekEtWjowLTlfLl0rfHtbXn1dKz99fCFcXFtDREFUQVxcW1teXFxdXSo/XFxdXFxdfCkoXFxzKntbXn1dKz99fFxccytbLWEtekEtWjowLTlfLl0rfFxccytbLWEtekEtWjowLTlfLl0rXFxzKj1cXHMqKCdbXiddKid8XCJbXlwiXSpcInx7KFtee31dfHtbXn1dKz99KSs/fSkpKlxccyooXFwvPylcXHMqPi8pLFxuICAgIHNpbmdsZV9xdW90ZTogdGVtcGxhdGFibGUudW50aWwoL1snXFxcXFxcblxcclxcdTIwMjhcXHUyMDI5XS8pLFxuICAgIGRvdWJsZV9xdW90ZTogdGVtcGxhdGFibGUudW50aWwoL1tcIlxcXFxcXG5cXHJcXHUyMDI4XFx1MjAyOV0vKSxcbiAgICB0ZW1wbGF0ZV90ZXh0OiB0ZW1wbGF0YWJsZS51bnRpbCgvW2BcXFxcJF0vKSxcbiAgICB0ZW1wbGF0ZV9leHByZXNzaW9uOiB0ZW1wbGF0YWJsZS51bnRpbCgvW2B9XFxcXF0vKVxuICB9O1xuXG59O1xuVG9rZW5pemVyLnByb3RvdHlwZSA9IG5ldyBCYXNlVG9rZW5pemVyKCk7XG5cblRva2VuaXplci5wcm90b3R5cGUuX2lzX2NvbW1lbnQgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIHJldHVybiBjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLkNPTU1FTlQgfHwgY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5CTE9DS19DT01NRU5UIHx8IGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uVU5LTk9XTjtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX2lzX29wZW5pbmcgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIHJldHVybiBjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0JMT0NLIHx8IGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uU1RBUlRfRVhQUjtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX2lzX2Nsb3NpbmcgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuLCBvcGVuX3Rva2VuKSB7XG4gIHJldHVybiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5FTkRfQkxPQ0sgfHwgY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5FTkRfRVhQUikgJiZcbiAgICAob3Blbl90b2tlbiAmJiAoXG4gICAgICAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnXScgJiYgb3Blbl90b2tlbi50ZXh0ID09PSAnWycpIHx8XG4gICAgICAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnKScgJiYgb3Blbl90b2tlbi50ZXh0ID09PSAnKCcpIHx8XG4gICAgICAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnfScgJiYgb3Blbl90b2tlbi50ZXh0ID09PSAneycpKSk7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uKCkge1xuICBpbl9odG1sX2NvbW1lbnQgPSBmYWxzZTtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX2dldF9uZXh0X3Rva2VuID0gZnVuY3Rpb24ocHJldmlvdXNfdG9rZW4sIG9wZW5fdG9rZW4pIHsgLy8ganNoaW50IHVudXNlZDpmYWxzZVxuICB2YXIgdG9rZW4gPSBudWxsO1xuICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpO1xuICB2YXIgYyA9IHRoaXMuX2lucHV0LnBlZWsoKTtcblxuICBpZiAoYyA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uRU9GLCAnJyk7XG4gIH1cblxuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX3JlYWRfbm9uX2phdmFzY3JpcHQoYyk7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9zdHJpbmcoYyk7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9wYWlyKGMsIHRoaXMuX2lucHV0LnBlZWsoMSkpOyAvLyBJc3N1ZSAjMjA2MiBoYWNrIGZvciByZWNvcmQgdHlwZSAnI3snXG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF93b3JkKHByZXZpb3VzX3Rva2VuKTtcbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9yZWFkX3NpbmdsZXMoYyk7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9jb21tZW50KGMpO1xuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX3JlYWRfcmVnZXhwKGMsIHByZXZpb3VzX3Rva2VuKTtcbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9yZWFkX3htbChjLCBwcmV2aW91c190b2tlbik7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9wdW5jdHVhdGlvbigpO1xuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5VTktOT1dOLCB0aGlzLl9pbnB1dC5uZXh0KCkpO1xuXG4gIHJldHVybiB0b2tlbjtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRfd29yZCA9IGZ1bmN0aW9uKHByZXZpb3VzX3Rva2VuKSB7XG4gIHZhciByZXN1bHRpbmdfc3RyaW5nO1xuICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmlkZW50aWZpZXIucmVhZCgpO1xuICBpZiAocmVzdWx0aW5nX3N0cmluZyAhPT0gJycpIHtcbiAgICByZXN1bHRpbmdfc3RyaW5nID0gcmVzdWx0aW5nX3N0cmluZy5yZXBsYWNlKGFjb3JuLmFsbExpbmVCcmVha3MsICdcXG4nKTtcbiAgICBpZiAoIShwcmV2aW91c190b2tlbi50eXBlID09PSBUT0tFTi5ET1QgfHxcbiAgICAgICAgKHByZXZpb3VzX3Rva2VuLnR5cGUgPT09IFRPS0VOLlJFU0VSVkVEICYmIChwcmV2aW91c190b2tlbi50ZXh0ID09PSAnc2V0JyB8fCBwcmV2aW91c190b2tlbi50ZXh0ID09PSAnZ2V0JykpKSAmJlxuICAgICAgcmVzZXJ2ZWRfd29yZF9wYXR0ZXJuLnRlc3QocmVzdWx0aW5nX3N0cmluZykpIHtcbiAgICAgIGlmICgocmVzdWx0aW5nX3N0cmluZyA9PT0gJ2luJyB8fCByZXN1bHRpbmdfc3RyaW5nID09PSAnb2YnKSAmJlxuICAgICAgICAocHJldmlvdXNfdG9rZW4udHlwZSA9PT0gVE9LRU4uV09SRCB8fCBwcmV2aW91c190b2tlbi50eXBlID09PSBUT0tFTi5TVFJJTkcpKSB7IC8vIGhhY2sgZm9yICdpbicgYW5kICdvZicgb3BlcmF0b3JzXG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uT1BFUkFUT1IsIHJlc3VsdGluZ19zdHJpbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5SRVNFUlZFRCwgcmVzdWx0aW5nX3N0cmluZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uV09SRCwgcmVzdWx0aW5nX3N0cmluZyk7XG4gIH1cblxuICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLm51bWJlci5yZWFkKCk7XG4gIGlmIChyZXN1bHRpbmdfc3RyaW5nICE9PSAnJykge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uV09SRCwgcmVzdWx0aW5nX3N0cmluZyk7XG4gIH1cbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRfc2luZ2xlcyA9IGZ1bmN0aW9uKGMpIHtcbiAgdmFyIHRva2VuID0gbnVsbDtcbiAgaWYgKGMgPT09ICcoJyB8fCBjID09PSAnWycpIHtcbiAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5TVEFSVF9FWFBSLCBjKTtcbiAgfSBlbHNlIGlmIChjID09PSAnKScgfHwgYyA9PT0gJ10nKSB7XG4gICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uRU5EX0VYUFIsIGMpO1xuICB9IGVsc2UgaWYgKGMgPT09ICd7Jykge1xuICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlNUQVJUX0JMT0NLLCBjKTtcbiAgfSBlbHNlIGlmIChjID09PSAnfScpIHtcbiAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5FTkRfQkxPQ0ssIGMpO1xuICB9IGVsc2UgaWYgKGMgPT09ICc7Jykge1xuICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlNFTUlDT0xPTiwgYyk7XG4gIH0gZWxzZSBpZiAoYyA9PT0gJy4nICYmIGRvdF9wYXR0ZXJuLnRlc3QodGhpcy5faW5wdXQucGVlaygxKSkpIHtcbiAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5ET1QsIGMpO1xuICB9IGVsc2UgaWYgKGMgPT09ICcsJykge1xuICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLkNPTU1BLCBjKTtcbiAgfVxuXG4gIGlmICh0b2tlbikge1xuICAgIHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgfVxuICByZXR1cm4gdG9rZW47XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX3BhaXIgPSBmdW5jdGlvbihjLCBkKSB7XG4gIHZhciB0b2tlbiA9IG51bGw7XG4gIGlmIChjID09PSAnIycgJiYgZCA9PT0gJ3snKSB7XG4gICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uU1RBUlRfQkxPQ0ssIGMgKyBkKTtcbiAgfVxuXG4gIGlmICh0b2tlbikge1xuICAgIHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gIH1cbiAgcmV0dXJuIHRva2VuO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVhZF9wdW5jdHVhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX19wYXR0ZXJucy5wdW5jdC5yZWFkKCk7XG5cbiAgaWYgKHJlc3VsdGluZ19zdHJpbmcgIT09ICcnKSB7XG4gICAgaWYgKHJlc3VsdGluZ19zdHJpbmcgPT09ICc9Jykge1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5FUVVBTFMsIHJlc3VsdGluZ19zdHJpbmcpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0aW5nX3N0cmluZyA9PT0gJz8uJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5ET1QsIHJlc3VsdGluZ19zdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLk9QRVJBVE9SLCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICB9XG4gIH1cbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRfbm9uX2phdmFzY3JpcHQgPSBmdW5jdGlvbihjKSB7XG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gJyc7XG5cbiAgaWYgKGMgPT09ICcjJykge1xuICAgIGlmICh0aGlzLl9pc19maXJzdF90b2tlbigpKSB7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLnNoZWJhbmcucmVhZCgpO1xuXG4gICAgICBpZiAocmVzdWx0aW5nX3N0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlVOS05PV04sIHJlc3VsdGluZ19zdHJpbmcudHJpbSgpICsgJ1xcbicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhhbmRsZXMgZXh0ZW5kc2NyaXB0ICNpbmNsdWRlc1xuICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMuaW5jbHVkZS5yZWFkKCk7XG5cbiAgICBpZiAocmVzdWx0aW5nX3N0cmluZykge1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5VTktOT1dOLCByZXN1bHRpbmdfc3RyaW5nLnRyaW0oKSArICdcXG4nKTtcbiAgICB9XG5cbiAgICBjID0gdGhpcy5faW5wdXQubmV4dCgpO1xuXG4gICAgLy8gU3BpZGVybW9ua2V5LXNwZWNpZmljIHNoYXJwIHZhcmlhYmxlcyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcy4gQ29uc2lkZXJlZCBvYnNvbGV0ZS5cbiAgICB2YXIgc2hhcnAgPSAnIyc7XG4gICAgaWYgKHRoaXMuX2lucHV0Lmhhc05leHQoKSAmJiB0aGlzLl9pbnB1dC50ZXN0Q2hhcihkaWdpdCkpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgYyA9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgICAgc2hhcnAgKz0gYztcbiAgICAgIH0gd2hpbGUgKHRoaXMuX2lucHV0Lmhhc05leHQoKSAmJiBjICE9PSAnIycgJiYgYyAhPT0gJz0nKTtcbiAgICAgIGlmIChjID09PSAnIycpIHtcbiAgICAgICAgLy9cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQucGVlaygpID09PSAnWycgJiYgdGhpcy5faW5wdXQucGVlaygxKSA9PT0gJ10nKSB7XG4gICAgICAgIHNoYXJwICs9ICdbXSc7XG4gICAgICAgIHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgICAgdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dC5wZWVrKCkgPT09ICd7JyAmJiB0aGlzLl9pbnB1dC5wZWVrKDEpID09PSAnfScpIHtcbiAgICAgICAgc2hhcnAgKz0gJ3t9JztcbiAgICAgICAgdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgICB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLldPUkQsIHNoYXJwKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dC5iYWNrKCk7XG5cbiAgfSBlbHNlIGlmIChjID09PSAnPCcgJiYgdGhpcy5faXNfZmlyc3RfdG9rZW4oKSkge1xuICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMuaHRtbF9jb21tZW50X3N0YXJ0LnJlYWQoKTtcbiAgICBpZiAocmVzdWx0aW5nX3N0cmluZykge1xuICAgICAgd2hpbGUgKHRoaXMuX2lucHV0Lmhhc05leHQoKSAmJiAhdGhpcy5faW5wdXQudGVzdENoYXIoYWNvcm4ubmV3bGluZSkpIHtcbiAgICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgICB9XG4gICAgICBpbl9odG1sX2NvbW1lbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5DT01NRU5ULCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaW5faHRtbF9jb21tZW50ICYmIGMgPT09ICctJykge1xuICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMuaHRtbF9jb21tZW50X2VuZC5yZWFkKCk7XG4gICAgaWYgKHJlc3VsdGluZ19zdHJpbmcpIHtcbiAgICAgIGluX2h0bWxfY29tbWVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5DT01NRU5ULCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRfY29tbWVudCA9IGZ1bmN0aW9uKGMpIHtcbiAgdmFyIHRva2VuID0gbnVsbDtcbiAgaWYgKGMgPT09ICcvJykge1xuICAgIHZhciBjb21tZW50ID0gJyc7XG4gICAgaWYgKHRoaXMuX2lucHV0LnBlZWsoMSkgPT09ICcqJykge1xuICAgICAgLy8gcGVlayBmb3IgY29tbWVudCAvKiAuLi4gKi9cbiAgICAgIGNvbW1lbnQgPSB0aGlzLl9fcGF0dGVybnMuYmxvY2tfY29tbWVudC5yZWFkKCk7XG4gICAgICB2YXIgZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXNfY29yZS5nZXRfZGlyZWN0aXZlcyhjb21tZW50KTtcbiAgICAgIGlmIChkaXJlY3RpdmVzICYmIGRpcmVjdGl2ZXMuaWdub3JlID09PSAnc3RhcnQnKSB7XG4gICAgICAgIGNvbW1lbnQgKz0gZGlyZWN0aXZlc19jb3JlLnJlYWRJZ25vcmVkKHRoaXMuX2lucHV0KTtcbiAgICAgIH1cbiAgICAgIGNvbW1lbnQgPSBjb21tZW50LnJlcGxhY2UoYWNvcm4uYWxsTGluZUJyZWFrcywgJ1xcbicpO1xuICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uQkxPQ0tfQ09NTUVOVCwgY29tbWVudCk7XG4gICAgICB0b2tlbi5kaXJlY3RpdmVzID0gZGlyZWN0aXZlcztcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0LnBlZWsoMSkgPT09ICcvJykge1xuICAgICAgLy8gcGVlayBmb3IgY29tbWVudCAvLyAuLi5cbiAgICAgIGNvbW1lbnQgPSB0aGlzLl9fcGF0dGVybnMuY29tbWVudC5yZWFkKCk7XG4gICAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5DT01NRU5ULCBjb21tZW50KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRva2VuO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVhZF9zdHJpbmcgPSBmdW5jdGlvbihjKSB7XG4gIGlmIChjID09PSAnYCcgfHwgYyA9PT0gXCInXCIgfHwgYyA9PT0gJ1wiJykge1xuICAgIHZhciByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgIHRoaXMuaGFzX2NoYXJfZXNjYXBlcyA9IGZhbHNlO1xuXG4gICAgaWYgKGMgPT09ICdgJykge1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSB0aGlzLl9yZWFkX3N0cmluZ19yZWN1cnNpdmUoJ2AnLCB0cnVlLCAnJHsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSB0aGlzLl9yZWFkX3N0cmluZ19yZWN1cnNpdmUoYyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzX2NoYXJfZXNjYXBlcyAmJiB0aGlzLl9vcHRpb25zLnVuZXNjYXBlX3N0cmluZ3MpIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSB1bmVzY2FwZV9zdHJpbmcocmVzdWx0aW5nX3N0cmluZyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gYykge1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcmVzdWx0aW5nX3N0cmluZyA9IHJlc3VsdGluZ19zdHJpbmcucmVwbGFjZShhY29ybi5hbGxMaW5lQnJlYWtzLCAnXFxuJyk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlNUUklORywgcmVzdWx0aW5nX3N0cmluZyk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX2FsbG93X3JlZ2V4cF9vcl94bWwgPSBmdW5jdGlvbihwcmV2aW91c190b2tlbikge1xuICAvLyByZWdleCBhbmQgeG1sIGNhbiBvbmx5IGFwcGVhciBpbiBzcGVjaWZpYyBsb2NhdGlvbnMgZHVyaW5nIHBhcnNpbmdcbiAgcmV0dXJuIChwcmV2aW91c190b2tlbi50eXBlID09PSBUT0tFTi5SRVNFUlZFRCAmJiBpbl9hcnJheShwcmV2aW91c190b2tlbi50ZXh0LCBbJ3JldHVybicsICdjYXNlJywgJ3Rocm93JywgJ2Vsc2UnLCAnZG8nLCAndHlwZW9mJywgJ3lpZWxkJ10pKSB8fFxuICAgIChwcmV2aW91c190b2tlbi50eXBlID09PSBUT0tFTi5FTkRfRVhQUiAmJiBwcmV2aW91c190b2tlbi50ZXh0ID09PSAnKScgJiZcbiAgICAgIHByZXZpb3VzX3Rva2VuLm9wZW5lZC5wcmV2aW91cy50eXBlID09PSBUT0tFTi5SRVNFUlZFRCAmJiBpbl9hcnJheShwcmV2aW91c190b2tlbi5vcGVuZWQucHJldmlvdXMudGV4dCwgWydpZicsICd3aGlsZScsICdmb3InXSkpIHx8XG4gICAgKGluX2FycmF5KHByZXZpb3VzX3Rva2VuLnR5cGUsIFtUT0tFTi5DT01NRU5ULCBUT0tFTi5TVEFSVF9FWFBSLCBUT0tFTi5TVEFSVF9CTE9DSywgVE9LRU4uU1RBUlQsXG4gICAgICBUT0tFTi5FTkRfQkxPQ0ssIFRPS0VOLk9QRVJBVE9SLCBUT0tFTi5FUVVBTFMsIFRPS0VOLkVPRiwgVE9LRU4uU0VNSUNPTE9OLCBUT0tFTi5DT01NQVxuICAgIF0pKTtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRfcmVnZXhwID0gZnVuY3Rpb24oYywgcHJldmlvdXNfdG9rZW4pIHtcblxuICBpZiAoYyA9PT0gJy8nICYmIHRoaXMuX2FsbG93X3JlZ2V4cF9vcl94bWwocHJldmlvdXNfdG9rZW4pKSB7XG4gICAgLy8gaGFuZGxlIHJlZ2V4cFxuICAgIC8vXG4gICAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgdmFyIGVzYyA9IGZhbHNlO1xuXG4gICAgdmFyIGluX2NoYXJfY2xhc3MgPSBmYWxzZTtcbiAgICB3aGlsZSAodGhpcy5faW5wdXQuaGFzTmV4dCgpICYmXG4gICAgICAoKGVzYyB8fCBpbl9jaGFyX2NsYXNzIHx8IHRoaXMuX2lucHV0LnBlZWsoKSAhPT0gYykgJiZcbiAgICAgICAgIXRoaXMuX2lucHV0LnRlc3RDaGFyKGFjb3JuLm5ld2xpbmUpKSkge1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSB0aGlzLl9pbnB1dC5wZWVrKCk7XG4gICAgICBpZiAoIWVzYykge1xuICAgICAgICBlc2MgPSB0aGlzLl9pbnB1dC5wZWVrKCkgPT09ICdcXFxcJztcbiAgICAgICAgaWYgKHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gJ1snKSB7XG4gICAgICAgICAgaW5fY2hhcl9jbGFzcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQucGVlaygpID09PSAnXScpIHtcbiAgICAgICAgICBpbl9jaGFyX2NsYXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVzYyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5faW5wdXQubmV4dCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbnB1dC5wZWVrKCkgPT09IGMpIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gdGhpcy5faW5wdXQubmV4dCgpO1xuXG4gICAgICAvLyByZWdleHBzIG1heSBoYXZlIG1vZGlmaWVycyAvcmVnZXhwL01PRCAsIHNvIGZldGNoIHRob3NlLCB0b29cbiAgICAgIC8vIE9ubHkgW2dpbV0gYXJlIHZhbGlkLCBidXQgaWYgdGhlIHVzZXIgcHV0cyBpbiBnYXJiYWdlLCBkbyB3aGF0IHdlIGNhbiB0byB0YWtlIGl0LlxuICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSB0aGlzLl9pbnB1dC5yZWFkKGFjb3JuLmlkZW50aWZpZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlNUUklORywgcmVzdWx0aW5nX3N0cmluZyk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX3htbCA9IGZ1bmN0aW9uKGMsIHByZXZpb3VzX3Rva2VuKSB7XG5cbiAgaWYgKHRoaXMuX29wdGlvbnMuZTR4ICYmIGMgPT09IFwiPFwiICYmIHRoaXMuX2FsbG93X3JlZ2V4cF9vcl94bWwocHJldmlvdXNfdG9rZW4pKSB7XG4gICAgdmFyIHhtbFN0ciA9ICcnO1xuICAgIHZhciBtYXRjaCA9IHRoaXMuX19wYXR0ZXJucy54bWwucmVhZF9tYXRjaCgpO1xuICAgIC8vIGhhbmRsZSBlNHggeG1sIGxpdGVyYWxzXG4gICAgLy9cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIC8vIFRyaW0gcm9vdCB0YWcgdG8gYXR0ZW1wdCB0b1xuICAgICAgdmFyIHJvb3RUYWcgPSBtYXRjaFsyXS5yZXBsYWNlKC9ee1xccysvLCAneycpLnJlcGxhY2UoL1xccyt9JC8sICd9Jyk7XG4gICAgICB2YXIgaXNDdXJseVJvb3QgPSByb290VGFnLmluZGV4T2YoJ3snKSA9PT0gMDtcbiAgICAgIHZhciBkZXB0aCA9IDA7XG4gICAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgdmFyIGlzRW5kVGFnID0gISFtYXRjaFsxXTtcbiAgICAgICAgdmFyIHRhZ05hbWUgPSBtYXRjaFsyXTtcbiAgICAgICAgdmFyIGlzU2luZ2xldG9uVGFnID0gKCEhbWF0Y2hbbWF0Y2gubGVuZ3RoIC0gMV0pIHx8ICh0YWdOYW1lLnNsaWNlKDAsIDgpID09PSBcIiFbQ0RBVEFbXCIpO1xuICAgICAgICBpZiAoIWlzU2luZ2xldG9uVGFnICYmXG4gICAgICAgICAgKHRhZ05hbWUgPT09IHJvb3RUYWcgfHwgKGlzQ3VybHlSb290ICYmIHRhZ05hbWUucmVwbGFjZSgvXntcXHMrLywgJ3snKS5yZXBsYWNlKC9cXHMrfSQvLCAnfScpKSkpIHtcbiAgICAgICAgICBpZiAoaXNFbmRUYWcpIHtcbiAgICAgICAgICAgIC0tZGVwdGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICsrZGVwdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHhtbFN0ciArPSBtYXRjaFswXTtcbiAgICAgICAgaWYgKGRlcHRoIDw9IDApIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBtYXRjaCA9IHRoaXMuX19wYXR0ZXJucy54bWwucmVhZF9tYXRjaCgpO1xuICAgICAgfVxuICAgICAgLy8gaWYgd2UgZGlkbid0IGNsb3NlIGNvcnJlY3RseSwga2VlcCB1bmZvcm1hdHRlZC5cbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgeG1sU3RyICs9IHRoaXMuX2lucHV0Lm1hdGNoKC9bXFxzXFxTXSovZylbMF07XG4gICAgICB9XG4gICAgICB4bWxTdHIgPSB4bWxTdHIucmVwbGFjZShhY29ybi5hbGxMaW5lQnJlYWtzLCAnXFxuJyk7XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlNUUklORywgeG1sU3RyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmZ1bmN0aW9uIHVuZXNjYXBlX3N0cmluZyhzKSB7XG4gIC8vIFlvdSB0aGluayB0aGF0IGEgcmVnZXggd291bGQgd29yayBmb3IgdGhpc1xuICAvLyByZXR1cm4gcy5yZXBsYWNlKC9cXFxceChbMC05YS1mXXsyfSkvZ2ksIGZ1bmN0aW9uKG1hdGNoLCB2YWwpIHtcbiAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh2YWwsIDE2KSk7XG4gIC8vICAgICB9KVxuICAvLyBIb3dldmVyLCBkZWFsaW5nIHdpdGggJ1xceGZmJywgJ1xcXFx4ZmYnLCAnXFxcXFxceGZmJyBtYWtlcyB0aGlzIG1vcmUgZnVuLlxuICB2YXIgb3V0ID0gJycsXG4gICAgZXNjYXBlZCA9IDA7XG5cbiAgdmFyIGlucHV0X3NjYW4gPSBuZXcgSW5wdXRTY2FubmVyKHMpO1xuICB2YXIgbWF0Y2hlZCA9IG51bGw7XG5cbiAgd2hpbGUgKGlucHV0X3NjYW4uaGFzTmV4dCgpKSB7XG4gICAgLy8gS2VlcCBhbnkgd2hpdGVzcGFjZSwgbm9uLXNsYXNoIGNoYXJhY3RlcnNcbiAgICAvLyBhbHNvIGtlZXAgc2xhc2ggcGFpcnMuXG4gICAgbWF0Y2hlZCA9IGlucHV0X3NjYW4ubWF0Y2goLyhbXFxzXXxbXlxcXFxdfFxcXFxcXFxcKSsvZyk7XG5cbiAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgb3V0ICs9IG1hdGNoZWRbMF07XG4gICAgfVxuXG4gICAgaWYgKGlucHV0X3NjYW4ucGVlaygpID09PSAnXFxcXCcpIHtcbiAgICAgIGlucHV0X3NjYW4ubmV4dCgpO1xuICAgICAgaWYgKGlucHV0X3NjYW4ucGVlaygpID09PSAneCcpIHtcbiAgICAgICAgbWF0Y2hlZCA9IGlucHV0X3NjYW4ubWF0Y2goL3goWzAtOUEtRmEtZl17Mn0pL2cpO1xuICAgICAgfSBlbHNlIGlmIChpbnB1dF9zY2FuLnBlZWsoKSA9PT0gJ3UnKSB7XG4gICAgICAgIG1hdGNoZWQgPSBpbnB1dF9zY2FuLm1hdGNoKC91KFswLTlBLUZhLWZdezR9KS9nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnXFxcXCc7XG4gICAgICAgIGlmIChpbnB1dF9zY2FuLmhhc05leHQoKSkge1xuICAgICAgICAgIG91dCArPSBpbnB1dF9zY2FuLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlcmUncyBzb21lIGVycm9yIGRlY29kaW5nLCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZ1xuICAgICAgaWYgKCFtYXRjaGVkKSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfVxuXG4gICAgICBlc2NhcGVkID0gcGFyc2VJbnQobWF0Y2hlZFsxXSwgMTYpO1xuXG4gICAgICBpZiAoZXNjYXBlZCA+IDB4N2UgJiYgZXNjYXBlZCA8PSAweGZmICYmIG1hdGNoZWRbMF0uaW5kZXhPZigneCcpID09PSAwKSB7XG4gICAgICAgIC8vIHdlIGJhaWwgb3V0IG9uIFxceDdmLi5cXHhmZixcbiAgICAgICAgLy8gbGVhdmluZyB3aG9sZSBzdHJpbmcgZXNjYXBlZCxcbiAgICAgICAgLy8gYXMgaXQncyBwcm9iYWJseSBjb21wbGV0ZWx5IGJpbmFyeVxuICAgICAgICByZXR1cm4gcztcbiAgICAgIH0gZWxzZSBpZiAoZXNjYXBlZCA+PSAweDAwICYmIGVzY2FwZWQgPCAweDIwKSB7XG4gICAgICAgIC8vIGxlYXZlIDB4MDAuLi4weDFmIGVzY2FwZWRcbiAgICAgICAgb3V0ICs9ICdcXFxcJyArIG1hdGNoZWRbMF07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChlc2NhcGVkID09PSAweDIyIHx8IGVzY2FwZWQgPT09IDB4MjcgfHwgZXNjYXBlZCA9PT0gMHg1Yykge1xuICAgICAgICAvLyBzaW5nbGUtcXVvdGUsIGFwb3N0cm9waGUsIGJhY2tzbGFzaCAtIGVzY2FwZSB0aGVzZVxuICAgICAgICBvdXQgKz0gJ1xcXFwnICsgU3RyaW5nLmZyb21DaGFyQ29kZShlc2NhcGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGVzY2FwZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbi8vIGhhbmRsZSBzdHJpbmdcbi8vXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX3N0cmluZ19yZWN1cnNpdmUgPSBmdW5jdGlvbihkZWxpbWl0ZXIsIGFsbG93X3VuZXNjYXBlZF9uZXdsaW5lcywgc3RhcnRfc3ViKSB7XG4gIHZhciBjdXJyZW50X2NoYXI7XG4gIHZhciBwYXR0ZXJuO1xuICBpZiAoZGVsaW1pdGVyID09PSAnXFwnJykge1xuICAgIHBhdHRlcm4gPSB0aGlzLl9fcGF0dGVybnMuc2luZ2xlX3F1b3RlO1xuICB9IGVsc2UgaWYgKGRlbGltaXRlciA9PT0gJ1wiJykge1xuICAgIHBhdHRlcm4gPSB0aGlzLl9fcGF0dGVybnMuZG91YmxlX3F1b3RlO1xuICB9IGVsc2UgaWYgKGRlbGltaXRlciA9PT0gJ2AnKSB7XG4gICAgcGF0dGVybiA9IHRoaXMuX19wYXR0ZXJucy50ZW1wbGF0ZV90ZXh0O1xuICB9IGVsc2UgaWYgKGRlbGltaXRlciA9PT0gJ30nKSB7XG4gICAgcGF0dGVybiA9IHRoaXMuX19wYXR0ZXJucy50ZW1wbGF0ZV9leHByZXNzaW9uO1xuICB9XG5cbiAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSBwYXR0ZXJuLnJlYWQoKTtcbiAgdmFyIG5leHQgPSAnJztcbiAgd2hpbGUgKHRoaXMuX2lucHV0Lmhhc05leHQoKSkge1xuICAgIG5leHQgPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT09IGRlbGltaXRlciB8fFxuICAgICAgKCFhbGxvd191bmVzY2FwZWRfbmV3bGluZXMgJiYgYWNvcm4ubmV3bGluZS50ZXN0KG5leHQpKSkge1xuICAgICAgdGhpcy5faW5wdXQuYmFjaygpO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSAnXFxcXCcgJiYgdGhpcy5faW5wdXQuaGFzTmV4dCgpKSB7XG4gICAgICBjdXJyZW50X2NoYXIgPSB0aGlzLl9pbnB1dC5wZWVrKCk7XG5cbiAgICAgIGlmIChjdXJyZW50X2NoYXIgPT09ICd4JyB8fCBjdXJyZW50X2NoYXIgPT09ICd1Jykge1xuICAgICAgICB0aGlzLmhhc19jaGFyX2VzY2FwZXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50X2NoYXIgPT09ICdcXHInICYmIHRoaXMuX2lucHV0LnBlZWsoMSkgPT09ICdcXG4nKSB7XG4gICAgICAgIHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgIH1cbiAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgIH0gZWxzZSBpZiAoc3RhcnRfc3ViKSB7XG4gICAgICBpZiAoc3RhcnRfc3ViID09PSAnJHsnICYmIG5leHQgPT09ICckJyAmJiB0aGlzLl9pbnB1dC5wZWVrKCkgPT09ICd7Jykge1xuICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXJ0X3N1YiA9PT0gbmV4dCkge1xuICAgICAgICBpZiAoZGVsaW1pdGVyID09PSAnYCcpIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX3JlYWRfc3RyaW5nX3JlY3Vyc2l2ZSgnfScsIGFsbG93X3VuZXNjYXBlZF9uZXdsaW5lcywgJ2AnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX3JlYWRfc3RyaW5nX3JlY3Vyc2l2ZSgnYCcsIGFsbG93X3VuZXNjYXBlZF9uZXdsaW5lcywgJyR7Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0Lmhhc05leHQoKSkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIG5leHQgKz0gcGF0dGVybi5yZWFkKCk7XG4gICAgcmVzdWx0aW5nX3N0cmluZyArPSBuZXh0O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdGluZ19zdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6ZXI7XG5tb2R1bGUuZXhwb3J0cy5UT0tFTiA9IFRPS0VOO1xubW9kdWxlLmV4cG9ydHMucG9zaXRpb25hYmxlX29wZXJhdG9ycyA9IHBvc2l0aW9uYWJsZV9vcGVyYXRvcnMuc2xpY2UoKTtcbm1vZHVsZS5leHBvcnRzLmxpbmVfc3RhcnRlcnMgPSBsaW5lX3N0YXJ0ZXJzLnNsaWNlKCk7XG4iLCJhc3NlcnQubm90RXF1YWwgPSBub3RFcXVhbFxuYXNzZXJ0Lm5vdE9rID0gbm90T2tcbmFzc2VydC5lcXVhbCA9IGVxdWFsXG5hc3NlcnQub2sgPSBhc3NlcnRcblxubW9kdWxlLmV4cG9ydHMgPSBhc3NlcnRcblxuZnVuY3Rpb24gZXF1YWwgKGEsIGIsIG0pIHtcbiAgYXNzZXJ0KGEgPT0gYiwgbSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbn1cblxuZnVuY3Rpb24gbm90RXF1YWwgKGEsIGIsIG0pIHtcbiAgYXNzZXJ0KGEgIT0gYiwgbSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbn1cblxuZnVuY3Rpb24gbm90T2sgKHQsIG0pIHtcbiAgYXNzZXJ0KCF0LCBtKVxufVxuXG5mdW5jdGlvbiBhc3NlcnQgKHQsIG0pIHtcbiAgaWYgKCF0KSB0aHJvdyBuZXcgRXJyb3IobSB8fCAnQXNzZXJ0aW9uRXJyb3InKVxufVxuIiwidmFyIHNwbGljZSA9IHJlcXVpcmUoJ3JlbW92ZS1hcnJheS1pdGVtcycpXG52YXIgbmFub3RpbWluZyA9IHJlcXVpcmUoJ25hbm90aW1pbmcnKVxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbm1vZHVsZS5leHBvcnRzID0gTmFub2J1c1xuXG5mdW5jdGlvbiBOYW5vYnVzIChuYW1lKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOYW5vYnVzKSkgcmV0dXJuIG5ldyBOYW5vYnVzKG5hbWUpXG5cbiAgdGhpcy5fbmFtZSA9IG5hbWUgfHwgJ25hbm9idXMnXG4gIHRoaXMuX3N0YXJMaXN0ZW5lcnMgPSBbXVxuICB0aGlzLl9saXN0ZW5lcnMgPSB7fVxufVxuXG5OYW5vYnVzLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICBhc3NlcnQub2sodHlwZW9mIGV2ZW50TmFtZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGV2ZW50TmFtZSA9PT0gJ3N5bWJvbCcsICduYW5vYnVzLmVtaXQ6IGV2ZW50TmFtZSBzaG91bGQgYmUgdHlwZSBzdHJpbmcgb3Igc3ltYm9sJylcblxuICB2YXIgZGF0YSA9IFtdXG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBkYXRhLnB1c2goYXJndW1lbnRzW2ldKVxuICB9XG5cbiAgdmFyIGVtaXRUaW1pbmcgPSBuYW5vdGltaW5nKHRoaXMuX25hbWUgKyBcIignXCIgKyBldmVudE5hbWUudG9TdHJpbmcoKSArIFwiJylcIilcbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldmVudE5hbWVdXG4gIGlmIChsaXN0ZW5lcnMgJiYgbGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLl9lbWl0KHRoaXMuX2xpc3RlbmVyc1tldmVudE5hbWVdLCBkYXRhKVxuICB9XG5cbiAgaWYgKHRoaXMuX3N0YXJMaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHRoaXMuX2VtaXQodGhpcy5fc3Rhckxpc3RlbmVycywgZXZlbnROYW1lLCBkYXRhLCBlbWl0VGltaW5nLnV1aWQpXG4gIH1cbiAgZW1pdFRpbWluZygpXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuTmFub2J1cy5wcm90b3R5cGUub24gPSBOYW5vYnVzLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gIGFzc2VydC5vayh0eXBlb2YgZXZlbnROYW1lID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZXZlbnROYW1lID09PSAnc3ltYm9sJywgJ25hbm9idXMub246IGV2ZW50TmFtZSBzaG91bGQgYmUgdHlwZSBzdHJpbmcgb3Igc3ltYm9sJylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBsaXN0ZW5lciwgJ2Z1bmN0aW9uJywgJ25hbm9idXMub246IGxpc3RlbmVyIHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcblxuICBpZiAoZXZlbnROYW1lID09PSAnKicpIHtcbiAgICB0aGlzLl9zdGFyTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXSkgdGhpcy5fbGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBbXVxuICAgIHRoaXMuX2xpc3RlbmVyc1tldmVudE5hbWVdLnB1c2gobGlzdGVuZXIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuTmFub2J1cy5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHtcbiAgYXNzZXJ0Lm9rKHR5cGVvZiBldmVudE5hbWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBldmVudE5hbWUgPT09ICdzeW1ib2wnLCAnbmFub2J1cy5wcmVwZW5kTGlzdGVuZXI6IGV2ZW50TmFtZSBzaG91bGQgYmUgdHlwZSBzdHJpbmcgb3Igc3ltYm9sJylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBsaXN0ZW5lciwgJ2Z1bmN0aW9uJywgJ25hbm9idXMucHJlcGVuZExpc3RlbmVyOiBsaXN0ZW5lciBzaG91bGQgYmUgdHlwZSBmdW5jdGlvbicpXG5cbiAgaWYgKGV2ZW50TmFtZSA9PT0gJyonKSB7XG4gICAgdGhpcy5fc3Rhckxpc3RlbmVycy51bnNoaWZ0KGxpc3RlbmVyKVxuICB9IGVsc2Uge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzW2V2ZW50TmFtZV0pIHRoaXMuX2xpc3RlbmVyc1tldmVudE5hbWVdID0gW11cbiAgICB0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXS51bnNoaWZ0KGxpc3RlbmVyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbk5hbm9idXMucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICBhc3NlcnQub2sodHlwZW9mIGV2ZW50TmFtZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGV2ZW50TmFtZSA9PT0gJ3N5bWJvbCcsICduYW5vYnVzLm9uY2U6IGV2ZW50TmFtZSBzaG91bGQgYmUgdHlwZSBzdHJpbmcgb3Igc3ltYm9sJylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBsaXN0ZW5lciwgJ2Z1bmN0aW9uJywgJ25hbm9idXMub25jZTogbGlzdGVuZXIgc2hvdWxkIGJlIHR5cGUgZnVuY3Rpb24nKVxuXG4gIHZhciBzZWxmID0gdGhpc1xuICB0aGlzLm9uKGV2ZW50TmFtZSwgb25jZSlcbiAgZnVuY3Rpb24gb25jZSAoKSB7XG4gICAgbGlzdGVuZXIuYXBwbHkoc2VsZiwgYXJndW1lbnRzKVxuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lLCBvbmNlKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbk5hbm9idXMucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICBhc3NlcnQub2sodHlwZW9mIGV2ZW50TmFtZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGV2ZW50TmFtZSA9PT0gJ3N5bWJvbCcsICduYW5vYnVzLnByZXBlbmRPbmNlTGlzdGVuZXI6IGV2ZW50TmFtZSBzaG91bGQgYmUgdHlwZSBzdHJpbmcgb3Igc3ltYm9sJylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBsaXN0ZW5lciwgJ2Z1bmN0aW9uJywgJ25hbm9idXMucHJlcGVuZE9uY2VMaXN0ZW5lcjogbGlzdGVuZXIgc2hvdWxkIGJlIHR5cGUgZnVuY3Rpb24nKVxuXG4gIHZhciBzZWxmID0gdGhpc1xuICB0aGlzLnByZXBlbmRMaXN0ZW5lcihldmVudE5hbWUsIG9uY2UpXG4gIGZ1bmN0aW9uIG9uY2UgKCkge1xuICAgIGxpc3RlbmVyLmFwcGx5KHNlbGYsIGFyZ3VtZW50cylcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgb25jZSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5OYW5vYnVzLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gIGFzc2VydC5vayh0eXBlb2YgZXZlbnROYW1lID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZXZlbnROYW1lID09PSAnc3ltYm9sJywgJ25hbm9idXMucmVtb3ZlTGlzdGVuZXI6IGV2ZW50TmFtZSBzaG91bGQgYmUgdHlwZSBzdHJpbmcgb3Igc3ltYm9sJylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBsaXN0ZW5lciwgJ2Z1bmN0aW9uJywgJ25hbm9idXMucmVtb3ZlTGlzdGVuZXI6IGxpc3RlbmVyIHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcblxuICBpZiAoZXZlbnROYW1lID09PSAnKicpIHtcbiAgICB0aGlzLl9zdGFyTGlzdGVuZXJzID0gdGhpcy5fc3Rhckxpc3RlbmVycy5zbGljZSgpXG4gICAgcmV0dXJuIHJlbW92ZSh0aGlzLl9zdGFyTGlzdGVuZXJzLCBsaXN0ZW5lcilcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2xpc3RlbmVyc1tldmVudE5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2ZW50TmFtZV0gPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXS5zbGljZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbW92ZSh0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXSwgbGlzdGVuZXIpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUgKGFyciwgbGlzdGVuZXIpIHtcbiAgICBpZiAoIWFycikgcmV0dXJuXG4gICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YobGlzdGVuZXIpXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgc3BsaWNlKGFyciwgaW5kZXgsIDEpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5OYW5vYnVzLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gIGlmIChldmVudE5hbWUpIHtcbiAgICBpZiAoZXZlbnROYW1lID09PSAnKicpIHtcbiAgICAgIHRoaXMuX3N0YXJMaXN0ZW5lcnMgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXSA9IFtdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX3N0YXJMaXN0ZW5lcnMgPSBbXVxuICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9XG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuTmFub2J1cy5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICB2YXIgbGlzdGVuZXJzID0gZXZlbnROYW1lICE9PSAnKidcbiAgICA/IHRoaXMuX2xpc3RlbmVyc1tldmVudE5hbWVdXG4gICAgOiB0aGlzLl9zdGFyTGlzdGVuZXJzXG5cbiAgdmFyIHJldCA9IFtdXG4gIGlmIChsaXN0ZW5lcnMpIHtcbiAgICB2YXIgaWxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlsZW5ndGg7IGkrKykgcmV0LnB1c2gobGlzdGVuZXJzW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuTmFub2J1cy5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbiAoYXJyLCBldmVudE5hbWUsIGRhdGEsIHV1aWQpIHtcbiAgaWYgKHR5cGVvZiBhcnIgPT09ICd1bmRlZmluZWQnKSByZXR1cm5cbiAgaWYgKGFyci5sZW5ndGggPT09IDApIHJldHVyblxuICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGF0YSA9IGV2ZW50TmFtZVxuICAgIGV2ZW50TmFtZSA9IG51bGxcbiAgfVxuXG4gIGlmIChldmVudE5hbWUpIHtcbiAgICBpZiAodXVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhID0gW2V2ZW50TmFtZV0uY29uY2F0KGRhdGEsIHV1aWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBbZXZlbnROYW1lXS5jb25jYXQoZGF0YSlcbiAgICB9XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGxpc3RlbmVyID0gYXJyW2ldXG4gICAgbGlzdGVuZXIuYXBwbHkobGlzdGVuZXIsIGRhdGEpXG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIFJlbW92ZSBhIHJhbmdlIG9mIGl0ZW1zIGZyb20gYW4gYXJyYXlcbiAqXG4gKiBAZnVuY3Rpb24gcmVtb3ZlSXRlbXNcbiAqIEBwYXJhbSB7QXJyYXk8Kj59IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZW1vdmVJdGVtcyAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpIHtcbiAgdmFyIGksIGxlbmd0aCA9IGFyci5sZW5ndGhcblxuICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICByZW1vdmVDb3VudCA9IChzdGFydElkeCArIHJlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoIC0gc3RhcnRJZHggOiByZW1vdmVDb3VudClcblxuICB2YXIgbGVuID0gbGVuZ3RoIC0gcmVtb3ZlQ291bnRcblxuICBmb3IgKGkgPSBzdGFydElkeDsgaSA8IGxlbjsgKytpKSB7XG4gICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF1cbiAgfVxuXG4gIGFyci5sZW5ndGggPSBsZW5cbn1cbiIsImNvbnN0IGRvY3VtZW50ID0gcmVxdWlyZSgnZ2xvYmFsL2RvY3VtZW50JylcbmNvbnN0IG5hbm90aW1pbmcgPSByZXF1aXJlKCduYW5vdGltaW5nJylcbmNvbnN0IG1vcnBoID0gcmVxdWlyZSgnbmFub21vcnBoJylcbmNvbnN0IG9ubG9hZCA9IHJlcXVpcmUoJ29uLWxvYWQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3QgT0xfS0VZX0lEID0gb25sb2FkLktFWV9JRFxuY29uc3QgT0xfQVRUUl9JRCA9IG9ubG9hZC5LRVlfQVRUUlxuXG5tb2R1bGUuZXhwb3J0cyA9IE5hbm9jb21wb25lbnRcblxuZnVuY3Rpb24gbWFrZUlEICgpIHtcbiAgcmV0dXJuICduY2lkLScgKyBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpXG59XG5cbk5hbm9jb21wb25lbnQubWFrZUlEID0gbWFrZUlEXG5cbmZ1bmN0aW9uIE5hbm9jb21wb25lbnQgKG5hbWUpIHtcbiAgdGhpcy5faGFzV2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgdGhpcy5faWQgPSBudWxsIC8vIHJlcHJlc2VudHMgdGhlIGlkIG9mIHRoZSByb290IG5vZGVcbiAgdGhpcy5fbmNJRCA9IG51bGwgLy8gaW50ZXJuYWwgbmFub2NvbXBvbmVudCBpZFxuICB0aGlzLl9vbElEID0gbnVsbFxuICB0aGlzLl9wcm94eSA9IG51bGxcbiAgdGhpcy5fbG9hZGVkID0gZmFsc2UgLy8gVXNlZCB0byBkZWJvdW5jZSBvbi1sb2FkIHdoZW4gY2hpbGQtcmVvcmRlcmluZ1xuICB0aGlzLl9yb290Tm9kZU5hbWUgPSBudWxsXG4gIHRoaXMuX25hbWUgPSBuYW1lIHx8ICduYW5vY29tcG9uZW50J1xuICB0aGlzLl9yZXJlbmRlciA9IGZhbHNlXG5cbiAgdGhpcy5faGFuZGxlTG9hZCA9IHRoaXMuX2hhbmRsZUxvYWQuYmluZCh0aGlzKVxuICB0aGlzLl9oYW5kbGVVbmxvYWQgPSB0aGlzLl9oYW5kbGVVbmxvYWQuYmluZCh0aGlzKVxuXG4gIHRoaXMuX2FyZ3VtZW50cyA9IFtdXG5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VsZW1lbnQnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGYuX2lkKVxuICAgICAgaWYgKGVsKSByZXR1cm4gZWwuZGF0YXNldC5uYW5vY29tcG9uZW50ID09PSBzZWxmLl9uY0lEID8gZWwgOiB1bmRlZmluZWRcbiAgICB9XG4gIH0pXG59XG5cbk5hbm9jb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcmVuZGVyVGltaW5nID0gbmFub3RpbWluZyh0aGlzLl9uYW1lICsgJy5yZW5kZXInKVxuICBjb25zdCBzZWxmID0gdGhpc1xuICBjb25zdCBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpXG4gIGxldCBlbFxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldXG4gIGlmICghdGhpcy5faGFzV2luZG93KSB7XG4gICAgY29uc3QgY3JlYXRlVGltaW5nID0gbmFub3RpbWluZyh0aGlzLl9uYW1lICsgJy5jcmVhdGUnKVxuICAgIGVsID0gdGhpcy5jcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgY3JlYXRlVGltaW5nKClcbiAgICByZW5kZXJUaW1pbmcoKVxuICAgIHJldHVybiBlbFxuICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudCkge1xuICAgIGVsID0gdGhpcy5lbGVtZW50IC8vIHJldGFpbiByZWZlcmVuY2UsIGFzIHRoZSBJRCBtaWdodCBjaGFuZ2Ugb24gcmVuZGVyXG4gICAgY29uc3QgdXBkYXRlVGltaW5nID0gbmFub3RpbWluZyh0aGlzLl9uYW1lICsgJy51cGRhdGUnKVxuICAgIGNvbnN0IHNob3VsZFVwZGF0ZSA9IHRoaXMuX3JlcmVuZGVyIHx8IHRoaXMudXBkYXRlLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgdXBkYXRlVGltaW5nKClcbiAgICBpZiAodGhpcy5fcmVyZW5kZXIpIHRoaXMuX3JlcmVuZGVyID0gZmFsc2VcbiAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICBjb25zdCBkZXNpcmVkSHRtbCA9IHRoaXMuX2hhbmRsZVJlbmRlcihhcmdzKVxuICAgICAgY29uc3QgbW9ycGhUaW1pbmcgPSBuYW5vdGltaW5nKHRoaXMuX25hbWUgKyAnLm1vcnBoJylcbiAgICAgIG1vcnBoKGVsLCBkZXNpcmVkSHRtbClcbiAgICAgIG1vcnBoVGltaW5nKClcbiAgICAgIGlmICh0aGlzLmFmdGVydXBkYXRlKSB0aGlzLmFmdGVydXBkYXRlKGVsKVxuICAgIH1cbiAgICBpZiAoIXRoaXMuX3Byb3h5KSB7IHRoaXMuX3Byb3h5ID0gdGhpcy5fY3JlYXRlUHJveHkoKSB9XG4gICAgcmVuZGVyVGltaW5nKClcbiAgICByZXR1cm4gdGhpcy5fcHJveHlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9yZXNldCgpXG4gICAgZWwgPSB0aGlzLl9oYW5kbGVSZW5kZXIoYXJncylcbiAgICBpZiAodGhpcy5iZWZvcmVyZW5kZXIpIHRoaXMuYmVmb3JlcmVuZGVyKGVsKVxuICAgIGlmICh0aGlzLmxvYWQgfHwgdGhpcy51bmxvYWQgfHwgdGhpcy5hZnRlcnJlb3JkZXIpIHtcbiAgICAgIG9ubG9hZChlbCwgc2VsZi5faGFuZGxlTG9hZCwgc2VsZi5faGFuZGxlVW5sb2FkLCBzZWxmLl9uY0lEKVxuICAgICAgdGhpcy5fb2xJRCA9IGVsLmRhdGFzZXRbT0xfS0VZX0lEXVxuICAgIH1cbiAgICByZW5kZXJUaW1pbmcoKVxuICAgIHJldHVybiBlbFxuICB9XG59XG5cbk5hbm9jb21wb25lbnQucHJvdG90eXBlLnJlcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICBhc3NlcnQodGhpcy5lbGVtZW50LCAnbmFub2NvbXBvbmVudDogY2FudCByZXJlbmRlciBvbiBhbiB1bm1vdW50ZWQgZG9tIG5vZGUnKVxuICB0aGlzLl9yZXJlbmRlciA9IHRydWVcbiAgdGhpcy5yZW5kZXIuYXBwbHkodGhpcywgdGhpcy5fYXJndW1lbnRzKVxufVxuXG5OYW5vY29tcG9uZW50LnByb3RvdHlwZS5faGFuZGxlUmVuZGVyID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgY29uc3QgY3JlYXRlRWxlbWVudFRpbWluZyA9IG5hbm90aW1pbmcodGhpcy5fbmFtZSArICcuY3JlYXRlRWxlbWVudCcpXG4gIGNvbnN0IGVsID0gdGhpcy5jcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3MpXG4gIGNyZWF0ZUVsZW1lbnRUaW1pbmcoKVxuICBpZiAoIXRoaXMuX3Jvb3ROb2RlTmFtZSkgdGhpcy5fcm9vdE5vZGVOYW1lID0gZWwubm9kZU5hbWVcbiAgYXNzZXJ0KGVsIGluc3RhbmNlb2Ygd2luZG93LkVsZW1lbnQsICduYW5vY29tcG9uZW50OiBjcmVhdGVFbGVtZW50IHNob3VsZCByZXR1cm4gYSBzaW5nbGUgRE9NIG5vZGUnKVxuICBhc3NlcnQodGhpcy5fcm9vdE5vZGVOYW1lID09PSBlbC5ub2RlTmFtZSwgJ25hbm9jb21wb25lbnQ6IHJvb3Qgbm9kZSB0eXBlcyBjYW5ub3QgZGlmZmVyIGJldHdlZW4gcmUtcmVuZGVycycpXG4gIHRoaXMuX2FyZ3VtZW50cyA9IGFyZ3NcbiAgcmV0dXJuIHRoaXMuX2JyYW5kTm9kZSh0aGlzLl9lbnN1cmVJRChlbCkpXG59XG5cbk5hbm9jb21wb25lbnQucHJvdG90eXBlLl9jcmVhdGVQcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcHJveHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuX3Jvb3ROb2RlTmFtZSlcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5fYnJhbmROb2RlKHByb3h5KVxuICBwcm94eS5pZCA9IHRoaXMuX2lkXG4gIHByb3h5LnNldEF0dHJpYnV0ZSgnZGF0YS1wcm94eScsICcnKVxuICBwcm94eS5pc1NhbWVOb2RlID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuIChlbCAmJiBlbC5kYXRhc2V0Lm5hbm9jb21wb25lbnQgPT09IHNlbGYuX25jSUQpXG4gIH1cbiAgcmV0dXJuIHByb3h5XG59XG5cbk5hbm9jb21wb25lbnQucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fbmNJRCA9IE5hbm9jb21wb25lbnQubWFrZUlEKClcbiAgdGhpcy5fb2xJRCA9IG51bGxcbiAgdGhpcy5faWQgPSBudWxsXG4gIHRoaXMuX3Byb3h5ID0gbnVsbFxuICB0aGlzLl9yb290Tm9kZU5hbWUgPSBudWxsXG59XG5cbk5hbm9jb21wb25lbnQucHJvdG90eXBlLl9icmFuZE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1uYW5vY29tcG9uZW50JywgdGhpcy5fbmNJRClcbiAgaWYgKHRoaXMuX29sSUQpIG5vZGUuc2V0QXR0cmlidXRlKE9MX0FUVFJfSUQsIHRoaXMuX29sSUQpXG4gIHJldHVybiBub2RlXG59XG5cbk5hbm9jb21wb25lbnQucHJvdG90eXBlLl9lbnN1cmVJRCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmIChub2RlLmlkKSB0aGlzLl9pZCA9IG5vZGUuaWRcbiAgZWxzZSBub2RlLmlkID0gdGhpcy5faWQgPSB0aGlzLl9uY0lEXG4gIC8vIFVwZGF0ZSBwcm94eSBub2RlIElEIGlmIGl0IGNoYW5nZWRcbiAgaWYgKHRoaXMuX3Byb3h5ICYmIHRoaXMuX3Byb3h5LmlkICE9PSB0aGlzLl9pZCkgdGhpcy5fcHJveHkuaWQgPSB0aGlzLl9pZFxuICByZXR1cm4gbm9kZVxufVxuXG5OYW5vY29tcG9uZW50LnByb3RvdHlwZS5faGFuZGxlTG9hZCA9IGZ1bmN0aW9uIChlbCkge1xuICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgaWYgKHRoaXMuYWZ0ZXJyZW9yZGVyKSB0aGlzLmFmdGVycmVvcmRlcihlbClcbiAgICByZXR1cm4gLy8gRGVib3VuY2UgY2hpbGQtcmVvcmRlcnNcbiAgfVxuICB0aGlzLl9sb2FkZWQgPSB0cnVlXG4gIGlmICh0aGlzLmxvYWQpIHRoaXMubG9hZChlbClcbn1cblxuTmFub2NvbXBvbmVudC5wcm90b3R5cGUuX2hhbmRsZVVubG9hZCA9IGZ1bmN0aW9uIChlbCkge1xuICBpZiAodGhpcy5lbGVtZW50KSByZXR1cm4gLy8gRGVib3VuY2UgY2hpbGQtcmVvcmRlcnNcbiAgdGhpcy5fbG9hZGVkID0gZmFsc2VcbiAgaWYgKHRoaXMudW5sb2FkKSB0aGlzLnVubG9hZChlbClcbn1cblxuTmFub2NvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCduYW5vY29tcG9uZW50OiBjcmVhdGVFbGVtZW50IHNob3VsZCBiZSBpbXBsZW1lbnRlZCEnKVxufVxuXG5OYW5vY29tcG9uZW50LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcignbmFub2NvbXBvbmVudDogdXBkYXRlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCEnKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBhc3NlcnRcblxuY2xhc3MgQXNzZXJ0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InXG5cbi8qKlxuICogTWluaW1hbCBhc3NlcnQgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2FueX0gdCBWYWx1ZSB0byBjaGVjayBpZiBmYWxzeVxuICogQHBhcmFtICB7c3RyaW5nPX0gbSBPcHRpb25hbCBhc3NlcnRpb24gZXJyb3IgbWVzc2FnZVxuICogQHRocm93cyB7QXNzZXJ0aW9uRXJyb3J9XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCAodCwgbSkge1xuICBpZiAoIXQpIHtcbiAgICB2YXIgZXJyID0gbmV3IEFzc2VydGlvbkVycm9yKG0pXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIGFzc2VydClcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuIiwidmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbnZhciBzYWZlRXh0ZXJuYWxMaW5rID0gLyhub29wZW5lcnxub3JlZmVycmVyKSAobm9vcGVuZXJ8bm9yZWZlcnJlcikvXG52YXIgcHJvdG9jb2xMaW5rID0gL15bXFx3LV9dKzovXG5cbm1vZHVsZS5leHBvcnRzID0gaHJlZlxuXG5mdW5jdGlvbiBocmVmIChjYiwgcm9vdCkge1xuICBhc3NlcnQubm90RXF1YWwodHlwZW9mIHdpbmRvdywgJ3VuZGVmaW5lZCcsICduYW5vaHJlZjogZXhwZWN0ZWQgd2luZG93IHRvIGV4aXN0JylcblxuICByb290ID0gcm9vdCB8fCB3aW5kb3cuZG9jdW1lbnRcblxuICBhc3NlcnQuZXF1YWwodHlwZW9mIGNiLCAnZnVuY3Rpb24nLCAnbmFub2hyZWY6IGNiIHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiByb290LCAnb2JqZWN0JywgJ25hbm9ocmVmOiByb290IHNob3VsZCBiZSB0eXBlIG9iamVjdCcpXG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoKGUuYnV0dG9uICYmIGUuYnV0dG9uICE9PSAwKSB8fFxuICAgICAgZS5jdHJsS2V5IHx8IGUubWV0YUtleSB8fCBlLmFsdEtleSB8fCBlLnNoaWZ0S2V5IHx8XG4gICAgICBlLmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVyblxuXG4gICAgdmFyIGFuY2hvciA9IChmdW5jdGlvbiB0cmF2ZXJzZSAobm9kZSkge1xuICAgICAgaWYgKCFub2RlIHx8IG5vZGUgPT09IHJvb3QpIHJldHVyblxuICAgICAgaWYgKG5vZGUubG9jYWxOYW1lICE9PSAnYScgfHwgbm9kZS5ocmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRyYXZlcnNlKG5vZGUucGFyZW50Tm9kZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlXG4gICAgfSkoZS50YXJnZXQpXG5cbiAgICBpZiAoIWFuY2hvcikgcmV0dXJuXG5cbiAgICBpZiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sICE9PSBhbmNob3IucHJvdG9jb2wgfHxcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSBhbmNob3IuaG9zdG5hbWUgfHxcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnBvcnQgIT09IGFuY2hvci5wb3J0IHx8XG4gICAgICBhbmNob3IuaGFzQXR0cmlidXRlKCdkYXRhLW5hbm9ocmVmLWlnbm9yZScpIHx8XG4gICAgICBhbmNob3IuaGFzQXR0cmlidXRlKCdkb3dubG9hZCcpIHx8XG4gICAgICAoYW5jaG9yLmdldEF0dHJpYnV0ZSgndGFyZ2V0JykgPT09ICdfYmxhbmsnICYmXG4gICAgICAgIHNhZmVFeHRlcm5hbExpbmsudGVzdChhbmNob3IuZ2V0QXR0cmlidXRlKCdyZWwnKSkpIHx8XG4gICAgICBwcm90b2NvbExpbmsudGVzdChhbmNob3IuZ2V0QXR0cmlidXRlKCdocmVmJykpKSByZXR1cm5cblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGNiKGFuY2hvcilcbiAgfSlcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgdHJhaWxpbmdOZXdsaW5lUmVnZXggPSAvXFxuW1xcc10rJC9cbnZhciBsZWFkaW5nTmV3bGluZVJlZ2V4ID0gL15cXG5bXFxzXSsvXG52YXIgdHJhaWxpbmdTcGFjZVJlZ2V4ID0gL1tcXHNdKyQvXG52YXIgbGVhZGluZ1NwYWNlUmVnZXggPSAvXltcXHNdKy9cbnZhciBtdWx0aVNwYWNlUmVnZXggPSAvW1xcblxcc10rL2dcblxudmFyIFRFWFRfVEFHUyA9IFtcbiAgJ2EnLCAnYWJicicsICdiJywgJ2JkaScsICdiZG8nLCAnYnInLCAnY2l0ZScsICdkYXRhJywgJ2RmbicsICdlbScsICdpJyxcbiAgJ2tiZCcsICdtYXJrJywgJ3EnLCAncnAnLCAncnQnLCAncnRjJywgJ3J1YnknLCAncycsICdhbXAnLCAnc21hbGwnLCAnc3BhbicsXG4gICdzdHJvbmcnLCAnc3ViJywgJ3N1cCcsICd0aW1lJywgJ3UnLCAndmFyJywgJ3dicidcbl1cblxudmFyIFZFUkJBVElNX1RBR1MgPSBbXG4gICdjb2RlJywgJ3ByZScsICd0ZXh0YXJlYSdcbl1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhcHBlbmRDaGlsZCAoZWwsIGNoaWxkcykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRzKSkgcmV0dXJuXG5cbiAgdmFyIG5vZGVOYW1lID0gZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIHZhciBoYWRUZXh0ID0gZmFsc2VcbiAgdmFyIHZhbHVlLCBsZWFkZXJcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2hpbGRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBjaGlsZHNbaV1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgYXBwZW5kQ2hpbGQoZWwsIG5vZGUpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ251bWJlcicgfHxcbiAgICAgIHR5cGVvZiBub2RlID09PSAnYm9vbGVhbicgfHxcbiAgICAgIHR5cGVvZiBub2RlID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICBub2RlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgbm9kZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgbm9kZSA9IG5vZGUudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHZhciBsYXN0Q2hpbGQgPSBlbC5jaGlsZE5vZGVzW2VsLmNoaWxkTm9kZXMubGVuZ3RoIC0gMV1cblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0ZXh0IG5vZGVzXG4gICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgaGFkVGV4dCA9IHRydWVcblxuICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYWQgdGV4dCwgYXBwZW5kIHRvIHRoZSBleGlzdGluZyB0ZXh0XG4gICAgICBpZiAobGFzdENoaWxkICYmIGxhc3RDaGlsZC5ub2RlTmFtZSA9PT0gJyN0ZXh0Jykge1xuICAgICAgICBsYXN0Q2hpbGQubm9kZVZhbHVlICs9IG5vZGVcblxuICAgICAgLy8gV2UgZGlkbid0IGhhdmUgYSB0ZXh0IG5vZGUgeWV0LCBjcmVhdGUgb25lXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gZWwub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2RlKVxuICAgICAgICBlbC5hcHBlbmRDaGlsZChub2RlKVxuICAgICAgICBsYXN0Q2hpbGQgPSBub2RlXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGxhc3Qgb2YgdGhlIGNoaWxkIG5vZGVzLCBtYWtlIHN1cmUgd2UgY2xvc2UgaXQgb3V0XG4gICAgICAvLyByaWdodFxuICAgICAgaWYgKGkgPT09IGxlbiAtIDEpIHtcbiAgICAgICAgaGFkVGV4dCA9IGZhbHNlXG4gICAgICAgIC8vIFRyaW0gdGhlIGNoaWxkIHRleHQgbm9kZXMgaWYgdGhlIGN1cnJlbnQgbm9kZSBpc24ndCBhXG4gICAgICAgIC8vIG5vZGUgd2hlcmUgd2hpdGVzcGFjZSBtYXR0ZXJzLlxuICAgICAgICBpZiAoVEVYVF9UQUdTLmluZGV4T2Yobm9kZU5hbWUpID09PSAtMSAmJlxuICAgICAgICAgIFZFUkJBVElNX1RBR1MuaW5kZXhPZihub2RlTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgdmFsdWUgPSBsYXN0Q2hpbGQubm9kZVZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZShsZWFkaW5nTmV3bGluZVJlZ2V4LCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRyYWlsaW5nU3BhY2VSZWdleCwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0cmFpbGluZ05ld2xpbmVSZWdleCwgJycpXG4gICAgICAgICAgICAucmVwbGFjZShtdWx0aVNwYWNlUmVnZXgsICcgJylcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVDaGlsZChsYXN0Q2hpbGQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZC5ub2RlVmFsdWUgPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChWRVJCQVRJTV9UQUdTLmluZGV4T2Yobm9kZU5hbWUpID09PSAtMSkge1xuICAgICAgICAgIC8vIFRoZSB2ZXJ5IGZpcnN0IG5vZGUgaW4gdGhlIGxpc3Qgc2hvdWxkIG5vdCBoYXZlIGxlYWRpbmdcbiAgICAgICAgICAvLyB3aGl0ZXNwYWNlLiBTaWJsaW5nIHRleHQgbm9kZXMgc2hvdWxkIGhhdmUgd2hpdGVzcGFjZSBpZiB0aGVyZVxuICAgICAgICAgIC8vIHdhcyBhbnkuXG4gICAgICAgICAgbGVhZGVyID0gaSA9PT0gMCA/ICcnIDogJyAnXG4gICAgICAgICAgdmFsdWUgPSBsYXN0Q2hpbGQubm9kZVZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZShsZWFkaW5nTmV3bGluZVJlZ2V4LCBsZWFkZXIpXG4gICAgICAgICAgICAucmVwbGFjZShsZWFkaW5nU3BhY2VSZWdleCwgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UodHJhaWxpbmdTcGFjZVJlZ2V4LCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRyYWlsaW5nTmV3bGluZVJlZ2V4LCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKG11bHRpU3BhY2VSZWdleCwgJyAnKVxuICAgICAgICAgIGxhc3RDaGlsZC5ub2RlVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgRE9NIG5vZGVzXG4gICAgfSBlbHNlIGlmIChub2RlICYmIG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIC8vIElmIHRoZSBsYXN0IG5vZGUgd2FzIGEgdGV4dCBub2RlLCBtYWtlIHN1cmUgaXQgaXMgcHJvcGVybHkgY2xvc2VkIG91dFxuICAgICAgaWYgKGhhZFRleHQpIHtcbiAgICAgICAgaGFkVGV4dCA9IGZhbHNlXG5cbiAgICAgICAgLy8gVHJpbSB0aGUgY2hpbGQgdGV4dCBub2RlcyBpZiB0aGUgY3VycmVudCBub2RlIGlzbid0IGFcbiAgICAgICAgLy8gdGV4dCBub2RlIG9yIGEgY29kZSBub2RlXG4gICAgICAgIGlmIChURVhUX1RBR1MuaW5kZXhPZihub2RlTmFtZSkgPT09IC0xICYmXG4gICAgICAgICAgVkVSQkFUSU1fVEFHUy5pbmRleE9mKG5vZGVOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICB2YWx1ZSA9IGxhc3RDaGlsZC5ub2RlVmFsdWVcbiAgICAgICAgICAgIC5yZXBsYWNlKGxlYWRpbmdOZXdsaW5lUmVnZXgsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UodHJhaWxpbmdOZXdsaW5lUmVnZXgsICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKG11bHRpU3BhY2VSZWdleCwgJyAnKVxuXG4gICAgICAgICAgLy8gUmVtb3ZlIGVtcHR5IHRleHQgbm9kZXMsIGFwcGVuZCBvdGhlcndpc2VcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVDaGlsZChsYXN0Q2hpbGQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZC5ub2RlVmFsdWUgPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgLy8gVHJpbSB0aGUgY2hpbGQgbm9kZXMgYnV0IHByZXNlcnZlIHRoZSBhcHByb3ByaWF0ZSB3aGl0ZXNwYWNlXG4gICAgICAgIH0gZWxzZSBpZiAoVkVSQkFUSU1fVEFHUy5pbmRleE9mKG5vZGVOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICB2YWx1ZSA9IGxhc3RDaGlsZC5ub2RlVmFsdWVcbiAgICAgICAgICAgIC5yZXBsYWNlKGxlYWRpbmdTcGFjZVJlZ2V4LCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZShsZWFkaW5nTmV3bGluZVJlZ2V4LCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRyYWlsaW5nTmV3bGluZVJlZ2V4LCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZShtdWx0aVNwYWNlUmVnZXgsICcgJylcbiAgICAgICAgICBsYXN0Q2hpbGQubm9kZVZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSB0aGUgbGFzdCBub2RlbmFtZVxuICAgICAgdmFyIF9ub2RlTmFtZSA9IG5vZGUubm9kZU5hbWVcbiAgICAgIGlmIChfbm9kZU5hbWUpIG5vZGVOYW1lID0gX25vZGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgICAgLy8gQXBwZW5kIHRoZSBub2RlIHRvIHRoZSBET01cbiAgICAgIGVsLmFwcGVuZENoaWxkKG5vZGUpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdhc3luYycsICdhdXRvZm9jdXMnLCAnYXV0b3BsYXknLCAnY2hlY2tlZCcsICdjb250cm9scycsICdkZWZhdWx0JyxcbiAgJ2RlZmF1bHRjaGVja2VkJywgJ2RlZmVyJywgJ2Rpc2FibGVkJywgJ2Zvcm1ub3ZhbGlkYXRlJywgJ2hpZGRlbicsXG4gICdpc21hcCcsICdsb29wJywgJ211bHRpcGxlJywgJ211dGVkJywgJ25vdmFsaWRhdGUnLCAnb3BlbicsICdwbGF5c2lubGluZScsXG4gICdyZWFkb25seScsICdyZXF1aXJlZCcsICdyZXZlcnNlZCcsICdzZWxlY3RlZCdcbl1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kb20nKShkb2N1bWVudClcbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2luZGV0ZXJtaW5hdGUnXG5dXG4iLCIndXNlIHN0cmljdCdcblxudmFyIGh5cGVyeCA9IHJlcXVpcmUoJ2h5cGVyeCcpXG52YXIgYXBwZW5kQ2hpbGQgPSByZXF1aXJlKCcuL2FwcGVuZC1jaGlsZCcpXG52YXIgU1ZHX1RBR1MgPSByZXF1aXJlKCcuL3N2Zy10YWdzJylcbnZhciBCT09MX1BST1BTID0gcmVxdWlyZSgnLi9ib29sLXByb3BzJylcbi8vIFByb3BzIHRoYXQgbmVlZCB0byBiZSBzZXQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gd2l0aCBlbC5zZXRBdHRyaWJ1dGUoKVxudmFyIERJUkVDVF9QUk9QUyA9IHJlcXVpcmUoJy4vZGlyZWN0LXByb3BzJylcblxudmFyIFNWR05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJ1xudmFyIFhMSU5LTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaydcblxudmFyIENPTU1FTlRfVEFHID0gJyEtLSdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9jdW1lbnQpIHtcbiAgZnVuY3Rpb24gbmFub0h0bWxDcmVhdGVFbGVtZW50ICh0YWcsIHByb3BzLCBjaGlsZHJlbikge1xuICAgIHZhciBlbFxuXG4gICAgLy8gSWYgYW4gc3ZnIHRhZywgaXQgbmVlZHMgYSBuYW1lc3BhY2VcbiAgICBpZiAoU1ZHX1RBR1MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgcHJvcHMubmFtZXNwYWNlID0gU1ZHTlNcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBhcmUgdXNpbmcgYSBuYW1lc3BhY2VcbiAgICB2YXIgbnMgPSBmYWxzZVxuICAgIGlmIChwcm9wcy5uYW1lc3BhY2UpIHtcbiAgICAgIG5zID0gcHJvcHMubmFtZXNwYWNlXG4gICAgICBkZWxldGUgcHJvcHMubmFtZXNwYWNlXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgYXJlIGV4dGVuZGluZyBhIGJ1aWx0aW4gZWxlbWVudFxuICAgIHZhciBpc0N1c3RvbUVsZW1lbnQgPSBmYWxzZVxuICAgIGlmIChwcm9wcy5pcykge1xuICAgICAgaXNDdXN0b21FbGVtZW50ID0gcHJvcHMuaXNcbiAgICAgIGRlbGV0ZSBwcm9wcy5pc1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgZWxlbWVudFxuICAgIGlmIChucykge1xuICAgICAgaWYgKGlzQ3VzdG9tRWxlbWVudCkge1xuICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgdGFnLCB7IGlzOiBpc0N1c3RvbUVsZW1lbnQgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCB0YWcpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0YWcgPT09IENPTU1FTlRfVEFHKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChwcm9wcy5jb21tZW50KVxuICAgIH0gZWxzZSBpZiAoaXNDdXN0b21FbGVtZW50KSB7XG4gICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnLCB7IGlzOiBpc0N1c3RvbUVsZW1lbnQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZylcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHByb3BlcnRpZXNcbiAgICBmb3IgKHZhciBwIGluIHByb3BzKSB7XG4gICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocCkpIHtcbiAgICAgICAgdmFyIGtleSA9IHAudG9Mb3dlckNhc2UoKVxuICAgICAgICB2YXIgdmFsID0gcHJvcHNbcF1cbiAgICAgICAgLy8gTm9ybWFsaXplIGNsYXNzTmFtZVxuICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3NuYW1lJykge1xuICAgICAgICAgIGtleSA9ICdjbGFzcydcbiAgICAgICAgICBwID0gJ2NsYXNzJ1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBmb3IgYXR0cmlidXRlIGdldHMgdHJhbnNmb3JtZWQgdG8gaHRtbEZvciwgYnV0IHdlIGp1c3Qgc2V0IGFzIGZvclxuICAgICAgICBpZiAocCA9PT0gJ2h0bWxGb3InKSB7XG4gICAgICAgICAgcCA9ICdmb3InXG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBwcm9wZXJ0eSBpcyBib29sZWFuLCBzZXQgaXRzZWxmIHRvIHRoZSBrZXlcbiAgICAgICAgaWYgKEJPT0xfUFJPUFMuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgIGlmIChTdHJpbmcodmFsKSA9PT0gJ3RydWUnKSB2YWwgPSBrZXlcbiAgICAgICAgICBlbHNlIGlmIChTdHJpbmcodmFsKSA9PT0gJ2ZhbHNlJykgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBhIHByb3BlcnR5IHByZWZlcnMgYmVpbmcgc2V0IGRpcmVjdGx5IHZzIHNldEF0dHJpYnV0ZVxuICAgICAgICBpZiAoa2V5LnNsaWNlKDAsIDIpID09PSAnb24nIHx8IERJUkVDVF9QUk9QUy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgZWxbcF0gPSB2YWxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobnMpIHtcbiAgICAgICAgICAgIGlmIChwID09PSAneGxpbms6aHJlZicpIHtcbiAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlTlMoWExJTktOUywgcCwgdmFsKVxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXnhtbG5zKCR8OikvaS50ZXN0KHApKSB7XG4gICAgICAgICAgICAgIC8vIHNraXAgeG1sbnMgZGVmaW5pdGlvbnNcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZU5TKG51bGwsIHAsIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKHAsIHZhbClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBlbmRDaGlsZChlbCwgY2hpbGRyZW4pXG4gICAgcmV0dXJuIGVsXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVGcmFnbWVudCAobm9kZXMpIHtcbiAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobm9kZXNbaV0gPT0gbnVsbCkgY29udGludWVcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGVzW2ldKSkge1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjcmVhdGVGcmFnbWVudChub2Rlc1tpXSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIG5vZGVzW2ldID09PSAnc3RyaW5nJykgbm9kZXNbaV0gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2Rlc1tpXSlcbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQobm9kZXNbaV0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudFxuICB9XG5cbiAgdmFyIGV4cG9ydHMgPSBoeXBlcngobmFub0h0bWxDcmVhdGVFbGVtZW50LCB7XG4gICAgY29tbWVudHM6IHRydWUsXG4gICAgY3JlYXRlRnJhZ21lbnQ6IGNyZWF0ZUZyYWdtZW50XG4gIH0pXG4gIGV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHNcbiAgZXhwb3J0cy5jcmVhdGVDb21tZW50ID0gbmFub0h0bWxDcmVhdGVFbGVtZW50XG4gIHJldHVybiBleHBvcnRzXG59XG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gbmFub2h0bWxSYXdCcm93c2VyICh0YWcpIHtcbiAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgZWwuaW5uZXJIVE1MID0gdGFnXG4gIHJldHVybiB0b0FycmF5KGVsLmNoaWxkTm9kZXMpXG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkgKGFycikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcnIpID8gYXJyIDogW10uc2xpY2UuY2FsbChhcnIpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmFub2h0bWxSYXdCcm93c2VyXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdzdmcnLCAnYWx0R2x5cGgnLCAnYWx0R2x5cGhEZWYnLCAnYWx0R2x5cGhJdGVtJywgJ2FuaW1hdGUnLCAnYW5pbWF0ZUNvbG9yJyxcbiAgJ2FuaW1hdGVNb3Rpb24nLCAnYW5pbWF0ZVRyYW5zZm9ybScsICdjaXJjbGUnLCAnY2xpcFBhdGgnLCAnY29sb3ItcHJvZmlsZScsXG4gICdjdXJzb3InLCAnZGVmcycsICdkZXNjJywgJ2VsbGlwc2UnLCAnZmVCbGVuZCcsICdmZUNvbG9yTWF0cml4JyxcbiAgJ2ZlQ29tcG9uZW50VHJhbnNmZXInLCAnZmVDb21wb3NpdGUnLCAnZmVDb252b2x2ZU1hdHJpeCcsXG4gICdmZURpZmZ1c2VMaWdodGluZycsICdmZURpc3BsYWNlbWVudE1hcCcsICdmZURpc3RhbnRMaWdodCcsICdmZUZsb29kJyxcbiAgJ2ZlRnVuY0EnLCAnZmVGdW5jQicsICdmZUZ1bmNHJywgJ2ZlRnVuY1InLCAnZmVHYXVzc2lhbkJsdXInLCAnZmVJbWFnZScsXG4gICdmZU1lcmdlJywgJ2ZlTWVyZ2VOb2RlJywgJ2ZlTW9ycGhvbG9neScsICdmZU9mZnNldCcsICdmZVBvaW50TGlnaHQnLFxuICAnZmVTcGVjdWxhckxpZ2h0aW5nJywgJ2ZlU3BvdExpZ2h0JywgJ2ZlVGlsZScsICdmZVR1cmJ1bGVuY2UnLCAnZmlsdGVyJyxcbiAgJ2ZvbnQnLCAnZm9udC1mYWNlJywgJ2ZvbnQtZmFjZS1mb3JtYXQnLCAnZm9udC1mYWNlLW5hbWUnLCAnZm9udC1mYWNlLXNyYycsXG4gICdmb250LWZhY2UtdXJpJywgJ2ZvcmVpZ25PYmplY3QnLCAnZycsICdnbHlwaCcsICdnbHlwaFJlZicsICdoa2VybicsICdpbWFnZScsXG4gICdsaW5lJywgJ2xpbmVhckdyYWRpZW50JywgJ21hcmtlcicsICdtYXNrJywgJ21ldGFkYXRhJywgJ21pc3NpbmctZ2x5cGgnLFxuICAnbXBhdGgnLCAncGF0aCcsICdwYXR0ZXJuJywgJ3BvbHlnb24nLCAncG9seWxpbmUnLCAncmFkaWFsR3JhZGllbnQnLCAncmVjdCcsXG4gICdzZXQnLCAnc3RvcCcsICdzd2l0Y2gnLCAnc3ltYm9sJywgJ3RleHQnLCAndGV4dFBhdGgnLCAndGl0bGUnLCAndHJlZicsXG4gICd0c3BhbicsICd1c2UnLCAndmlldycsICd2a2Vybidcbl1cbiIsIi8vIFRoaXMgZmlsZSByZXBsYWNlcyBgZm9ybWF0LmpzYCBpbiBidW5kbGVycyBsaWtlIHdlYnBhY2sgb3IgUm9sbHVwLFxuLy8gYWNjb3JkaW5nIHRvIGBicm93c2VyYCBjb25maWcgaW4gYHBhY2thZ2UuanNvbmAuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJhbmRvbSwgYWxwaGFiZXQsIHNpemUpIHtcbiAgLy8gV2UgY2Fu4oCZdCB1c2UgYnl0ZXMgYmlnZ2VyIHRoYW4gdGhlIGFscGhhYmV0LiBUbyBtYWtlIGJ5dGVzIHZhbHVlcyBjbG9zZXJcbiAgLy8gdG8gdGhlIGFscGhhYmV0LCB3ZSBhcHBseSBiaXRtYXNrIG9uIHRoZW0uIFdlIGxvb2sgZm9yIHRoZSBjbG9zZXN0XG4gIC8vIGAyICoqIHggLSAxYCBudW1iZXIsIHdoaWNoIHdpbGwgYmUgYmlnZ2VyIHRoYW4gYWxwaGFiZXQgc2l6ZS4gSWYgd2UgaGF2ZVxuICAvLyAzMCBzeW1ib2xzIGluIHRoZSBhbHBoYWJldCwgd2Ugd2lsbCB0YWtlIDMxICgwMDAxMTExMSkuXG4gIC8vIFdlIGRvIG5vdCB1c2UgZmFzdGVyIE1hdGguY2x6MzIsIGJlY2F1c2UgaXQgaXMgbm90IGF2YWlsYWJsZSBpbiBicm93c2Vycy5cbiAgdmFyIG1hc2sgPSAoMiA8PCBNYXRoLmxvZyhhbHBoYWJldC5sZW5ndGggLSAxKSAvIE1hdGguTE4yKSAtIDFcbiAgLy8gQml0bWFzayBpcyBub3QgYSBwZXJmZWN0IHNvbHV0aW9uIChpbiBvdXIgZXhhbXBsZSBpdCB3aWxsIHBhc3MgMzEgYnl0ZXMsXG4gIC8vIHdoaWNoIGlzIGJpZ2dlciB0aGFuIHRoZSBhbHBoYWJldCkuIEFzIGEgcmVzdWx0LCB3ZSB3aWxsIG5lZWQgbW9yZSBieXRlcyxcbiAgLy8gdGhhbiBJRCBzaXplLCBiZWNhdXNlIHdlIHdpbGwgcmVmdXNlIGJ5dGVzIGJpZ2dlciB0aGFuIHRoZSBhbHBoYWJldC5cblxuICAvLyBFdmVyeSBoYXJkd2FyZSByYW5kb20gZ2VuZXJhdG9yIGNhbGwgaXMgY29zdGx5LFxuICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gd2FpdCBmb3IgZW50cm9weSBjb2xsZWN0aW9uLiBUaGlzIGlzIHdoeSBvZnRlbiBpdCB3aWxsXG4gIC8vIGJlIGZhc3RlciB0byBhc2sgZm9yIGZldyBleHRyYSBieXRlcyBpbiBhZHZhbmNlLCB0byBhdm9pZCBhZGRpdGlvbmFsIGNhbGxzLlxuXG4gIC8vIEhlcmUgd2UgY2FsY3VsYXRlIGhvdyBtYW55IHJhbmRvbSBieXRlcyBzaG91bGQgd2UgY2FsbCBpbiBhZHZhbmNlLlxuICAvLyBJdCBkZXBlbmRzIG9uIElEIGxlbmd0aCwgbWFzayAvIGFscGhhYmV0IHNpemUgYW5kIG1hZ2ljIG51bWJlciAxLjZcbiAgLy8gKHdoaWNoIHdhcyBzZWxlY3RlZCBhY2NvcmRpbmcgYmVuY2htYXJrcykuXG5cbiAgLy8gLX5mID0+IE1hdGguY2VpbChmKSBpZiBuIGlzIGZsb2F0IG51bWJlclxuICAvLyAtfmkgPT4gaSArIDEgaWYgbiBpcyBpbnRlZ2VyIG51bWJlclxuICB2YXIgc3RlcCA9IC1+KDEuNiAqIG1hc2sgKiBzaXplIC8gYWxwaGFiZXQubGVuZ3RoKVxuICB2YXIgaWQgPSAnJ1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIGJ5dGVzID0gcmFuZG9tKHN0ZXApXG4gICAgLy8gQ29tcGFjdCBhbHRlcm5hdGl2ZSBmb3IgYGZvciAodmFyIGkgPSAwOyBpIDwgc3RlcDsgaSsrKWBcbiAgICB2YXIgaSA9IHN0ZXBcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAvLyBJZiByYW5kb20gYnl0ZSBpcyBiaWdnZXIgdGhhbiBhbHBoYWJldCBldmVuIGFmdGVyIGJpdG1hc2ssXG4gICAgICAvLyB3ZSByZWZ1c2UgaXQgYnkgYHx8ICcnYC5cbiAgICAgIGlkICs9IGFscGhhYmV0W2J5dGVzW2ldICYgbWFza10gfHwgJydcbiAgICAgIC8vIE1vcmUgY29tcGFjdCB0aGFuIGBpZC5sZW5ndGggKyAxID09PSBzaXplYFxuICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gK3NpemUpIHJldHVybiBpZFxuICAgIH1cbiAgfVxufVxuIiwidmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbnZhciBlbW9qaXMgPSB7XG4gIHRyYWNlOiAn8J+UjScsXG4gIGRlYnVnOiAn8J+QmycsXG4gIGluZm86ICfinKgnLFxuICB3YXJuOiAn4pqg77iPJyxcbiAgZXJyb3I6ICfwn5qoJyxcbiAgZmF0YWw6ICfwn5KAJ1xufVxuXG52YXIgbGV2ZWxzID0ge1xuICB0cmFjZTogMTAsXG4gIGRlYnVnOiAyMCxcbiAgaW5mbzogMzAsXG4gIHdhcm46IDQwLFxuICBlcnJvcjogNTAsXG4gIGZhdGFsOiA2MFxufVxuXG52YXIgZGVmYXVsdENvbG9ycyA9IHtcbiAgZm9yZWdyb3VuZDogJyNkM2MwYzgnLFxuICBiYWNrZ3JvdW5kOiAnIzJkMmQyZCcsXG4gIGJsYWNrOiAnIzJkMmQyZCcsXG4gIHJlZDogJyNmMjc3N2EnLFxuICBncmVlbjogJyM5OWNjOTknLFxuICB5ZWxsb3c6ICcjZmZjYzY2JyxcbiAgYmx1ZTogJyM2Njk5Y2MnLFxuICBtYWdlbnRhOiAnI2NjOTljYycsXG4gIGN5YW46ICcjNjZjY2NjJyxcbiAgd2hpdGU6ICcjZDNkMGM4JyxcbiAgYnJpZ2h0QmxhY2s6ICcjNzQ3MzY5J1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE5hbm9sb2dnZXJcblxuZnVuY3Rpb24gTmFub2xvZ2dlciAobmFtZSwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTmFub2xvZ2dlcikpIHJldHVybiBuZXcgTmFub2xvZ2dlcihuYW1lLCBvcHRzKVxuXG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygb3B0cywgJ29iamVjdCcsICduYW5vbG9nZ2VyOiBvcHRzIHNob3VsZCBiZSB0eXBlIG9iamVjdCcpXG5cbiAgdGhpcy5fbmFtZSA9IG5hbWUgfHwgJydcbiAgdGhpcy5fY29sb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbG9ycywgb3B0cy5jb2xvcnMgfHwge30pXG5cbiAgdHJ5IHtcbiAgICB0aGlzLmxvZ0xldmVsID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dMZXZlbCcpIHx8ICdpbmZvJ1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5sb2dMZXZlbCA9ICdpbmZvJ1xuICB9XG5cbiAgdGhpcy5fbG9nTGV2ZWwgPSBsZXZlbHNbdGhpcy5sb2dMZXZlbF1cbn1cblxuTmFub2xvZ2dlci5wcm90b3R5cGUudHJhY2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcmdzID0gWyAndHJhY2UnIF1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSlcbiAgdGhpcy5fcHJpbnQuYXBwbHkodGhpcywgYXJncylcbn1cblxuTmFub2xvZ2dlci5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcmdzID0gWyAnZGVidWcnIF1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSlcbiAgdGhpcy5fcHJpbnQuYXBwbHkodGhpcywgYXJncylcbn1cblxuTmFub2xvZ2dlci5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFyZ3MgPSBbICdpbmZvJyBdXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pXG4gIHRoaXMuX3ByaW50LmFwcGx5KHRoaXMsIGFyZ3MpXG59XG5cbk5hbm9sb2dnZXIucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcmdzID0gWyAnd2FybicgXVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKVxuICB0aGlzLl9wcmludC5hcHBseSh0aGlzLCBhcmdzKVxufVxuXG5OYW5vbG9nZ2VyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFyZ3MgPSBbICdlcnJvcicgXVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKVxuICB0aGlzLl9wcmludC5hcHBseSh0aGlzLCBhcmdzKVxufVxuXG5OYW5vbG9nZ2VyLnByb3RvdHlwZS5mYXRhbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFyZ3MgPSBbICdmYXRhbCcgXVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKVxuICB0aGlzLl9wcmludC5hcHBseSh0aGlzLCBhcmdzKVxufVxuXG5OYW5vbG9nZ2VyLnByb3RvdHlwZS5fcHJpbnQgPSBmdW5jdGlvbiAobGV2ZWwpIHtcbiAgaWYgKGxldmVsc1tsZXZlbF0gPCB0aGlzLl9sb2dMZXZlbCkgcmV0dXJuXG5cbiAgdmFyIHRpbWUgPSBnZXRUaW1lU3RhbXAoKVxuICB2YXIgZW1vamkgPSBlbW9qaXNbbGV2ZWxdXG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSB8fCAndW5rbm93bidcblxuICB2YXIgbXNnQ29sb3IgPSAobGV2ZWwgPT09ICdlcnJvcicgfHwgbGV2ZWwuZmF0YWwpXG4gICAgPyB0aGlzLl9jb2xvcnMucmVkXG4gICAgOiBsZXZlbCA9PT0gJ3dhcm4nXG4gICAgICA/IHRoaXMuX2NvbG9ycy55ZWxsb3dcbiAgICAgIDogdGhpcy5fY29sb3JzLmdyZWVuXG5cbiAgdmFyIG9ianMgPSBbXVxuICB2YXIgYXJncyA9IFsgbnVsbCBdXG4gIHZhciBtc2cgPSAnJWMlcyAnICsgZW1vamkgKyAnICVjJXMnXG5cbiAgYXJncy5wdXNoKGNvbG9yKHRoaXMuX2NvbG9ycy5icmlnaHRCbGFjayksIHRpbWUpXG4gIGFyZ3MucHVzaChjb2xvcih0aGlzLl9jb2xvcnMubWFnZW50YSksIG5hbWUpXG5cbiAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV1cbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChpID09PSAxKSB7XG4gICAgICAgIC8vIGZpcnN0IHN0cmluZyBhcmd1bWVudCBpcyBpbiBjb2xvclxuICAgICAgICBtc2cgKz0gJyAlYyVzJ1xuICAgICAgICBhcmdzLnB1c2goY29sb3IobXNnQ29sb3IpKVxuICAgICAgICBhcmdzLnB1c2goYXJnKVxuICAgICAgfSBlbHNlIGlmICgvbXMkLy50ZXN0KGFyZykpIHtcbiAgICAgICAgLy8gYXJndW1lbnRzIGZpbmlzaGluZyB3aXRoICdtcycsIGdyZXkgb3V0XG4gICAgICAgIG1zZyArPSAnICVjJXMnXG4gICAgICAgIGFyZ3MucHVzaChjb2xvcih0aGlzLl9jb2xvcnMuYnJpZ2h0QmxhY2spKVxuICAgICAgICBhcmdzLnB1c2goYXJnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9ybWFsIGNvbG9yc1xuICAgICAgICBtc2cgKz0gJyAlYyVzJ1xuICAgICAgICBhcmdzLnB1c2goY29sb3IodGhpcy5fY29sb3JzLndoaXRlKSlcbiAgICAgICAgYXJncy5wdXNoKGFyZylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgICBtc2cgKz0gJyAlYyVkJ1xuICAgICAgYXJncy5wdXNoKGNvbG9yKHRoaXMuX2NvbG9ycy5tYWdlbnRhKSlcbiAgICAgIGFyZ3MucHVzaChhcmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9ianMucHVzaChhcmcpXG4gICAgfVxuICB9XG5cbiAgYXJnc1swXSA9IG1zZ1xuICBvYmpzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgIGFyZ3MucHVzaChvYmopXG4gIH0pXG5cbiAgLy8gSW4gSUUvRWRnZSBjb25zb2xlIGZ1bmN0aW9ucyBkb24ndCBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlXG4gIC8vIHNvIHRoaXMgaXMgbmVjZXNzYXJ5IHRvIGdldCBhbGwgdGhlIGFyZ3MgYXBwbGllZC5cbiAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmFwcGx5KGNvbnNvbGUubG9nLCBbY29uc29sZSwgYXJnc10pXG59XG5cbmZ1bmN0aW9uIGNvbG9yIChjb2xvcikge1xuICByZXR1cm4gJ2NvbG9yOiAnICsgY29sb3IgKyAnOydcbn1cblxuZnVuY3Rpb24gZ2V0VGltZVN0YW1wICgpIHtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpXG4gIHZhciBob3VycyA9IHBhZChkYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKSlcbiAgdmFyIG1pbnV0ZXMgPSBwYWQoZGF0ZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSlcbiAgdmFyIHNlY29uZHMgPSBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSlcbiAgcmV0dXJuIGhvdXJzICsgJzonICsgbWludXRlcyArICc6JyArIHNlY29uZHNcbn1cblxuZnVuY3Rpb24gcGFkIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5sZW5ndGggIT09IDIgPyAwICsgc3RyIDogc3RyXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IExSVVxuXG5mdW5jdGlvbiBMUlUgKG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExSVSkpIHJldHVybiBuZXcgTFJVKG9wdHMpXG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ251bWJlcicpIG9wdHMgPSB7bWF4OiBvcHRzfVxuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICB0aGlzLmNhY2hlID0ge31cbiAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbFxuICB0aGlzLmxlbmd0aCA9IDBcbiAgdGhpcy5tYXggPSBvcHRzLm1heCB8fCAxMDAwXG4gIHRoaXMubWF4QWdlID0gb3B0cy5tYXhBZ2UgfHwgMFxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTFJVLnByb3RvdHlwZSwgJ2tleXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jYWNoZSkgfVxufSlcblxuTFJVLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jYWNoZSA9IHt9XG4gIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGxcbiAgdGhpcy5sZW5ndGggPSAwXG59XG5cbkxSVS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnICsga2V5XG4gIGlmICghdGhpcy5jYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm5cblxuICB2YXIgZWxlbWVudCA9IHRoaXMuY2FjaGVba2V5XVxuICBkZWxldGUgdGhpcy5jYWNoZVtrZXldXG4gIHRoaXMuX3VubGluayhrZXksIGVsZW1lbnQucHJldiwgZWxlbWVudC5uZXh0KVxuICByZXR1cm4gZWxlbWVudC52YWx1ZVxufVxuXG5MUlUucHJvdG90eXBlLl91bmxpbmsgPSBmdW5jdGlvbiAoa2V5LCBwcmV2LCBuZXh0KSB7XG4gIHRoaXMubGVuZ3RoLS1cblxuICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoaXMuaGVhZCA9PT0ga2V5KSB7XG4gICAgICB0aGlzLmhlYWQgPSBwcmV2XG4gICAgICB0aGlzLmNhY2hlW3RoaXMuaGVhZF0ubmV4dCA9IG51bGxcbiAgICB9IGVsc2UgaWYgKHRoaXMudGFpbCA9PT0ga2V5KSB7XG4gICAgICB0aGlzLnRhaWwgPSBuZXh0XG4gICAgICB0aGlzLmNhY2hlW3RoaXMudGFpbF0ucHJldiA9IG51bGxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYWNoZVtwcmV2XS5uZXh0ID0gbmV4dFxuICAgICAgdGhpcy5jYWNoZVtuZXh0XS5wcmV2ID0gcHJldlxuICAgIH1cbiAgfVxufVxuXG5MUlUucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIGlmICghdGhpcy5jYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm5cblxuICB2YXIgZWxlbWVudCA9IHRoaXMuY2FjaGVba2V5XVxuXG4gIGlmICghdGhpcy5fY2hlY2tBZ2Uoa2V5LCBlbGVtZW50KSkgcmV0dXJuXG4gIHJldHVybiBlbGVtZW50LnZhbHVlXG59XG5cbkxSVS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJyArIGtleVxuXG4gIHZhciBlbGVtZW50XG5cbiAgaWYgKHRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgIGVsZW1lbnQgPSB0aGlzLmNhY2hlW2tleV1cbiAgICBlbGVtZW50LnZhbHVlID0gdmFsdWVcbiAgICBpZiAodGhpcy5tYXhBZ2UpIGVsZW1lbnQubW9kaWZpZWQgPSBEYXRlLm5vdygpXG5cbiAgICAvLyBJZiBpdCdzIGFscmVhZHkgdGhlIGhlYWQsIHRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIGRvOlxuICAgIGlmIChrZXkgPT09IHRoaXMuaGVhZCkgcmV0dXJuIHZhbHVlXG4gICAgdGhpcy5fdW5saW5rKGtleSwgZWxlbWVudC5wcmV2LCBlbGVtZW50Lm5leHQpXG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudCA9IHt2YWx1ZTogdmFsdWUsIG1vZGlmaWVkOiAwLCBuZXh0OiBudWxsLCBwcmV2OiBudWxsfVxuICAgIGlmICh0aGlzLm1heEFnZSkgZWxlbWVudC5tb2RpZmllZCA9IERhdGUubm93KClcbiAgICB0aGlzLmNhY2hlW2tleV0gPSBlbGVtZW50XG5cbiAgICAvLyBFdmljdGlvbiBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSBrZXkgZGlkbid0IGFscmVhZHkgZXhpc3Q6XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSB0aGlzLm1heCkgdGhpcy5ldmljdCgpXG4gIH1cblxuICB0aGlzLmxlbmd0aCsrXG4gIGVsZW1lbnQubmV4dCA9IG51bGxcbiAgZWxlbWVudC5wcmV2ID0gdGhpcy5oZWFkXG5cbiAgaWYgKHRoaXMuaGVhZCkgdGhpcy5jYWNoZVt0aGlzLmhlYWRdLm5leHQgPSBrZXlcbiAgdGhpcy5oZWFkID0ga2V5XG5cbiAgaWYgKCF0aGlzLnRhaWwpIHRoaXMudGFpbCA9IGtleVxuICByZXR1cm4gdmFsdWVcbn1cblxuTFJVLnByb3RvdHlwZS5fY2hlY2tBZ2UgPSBmdW5jdGlvbiAoa2V5LCBlbGVtZW50KSB7XG4gIGlmICh0aGlzLm1heEFnZSAmJiAoRGF0ZS5ub3coKSAtIGVsZW1lbnQubW9kaWZpZWQpID4gdGhpcy5tYXhBZ2UpIHtcbiAgICB0aGlzLnJlbW92ZShrZXkpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuTFJVLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykga2V5ID0gJycgKyBrZXlcbiAgaWYgKCF0aGlzLmNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHJldHVyblxuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5jYWNoZVtrZXldXG5cbiAgaWYgKCF0aGlzLl9jaGVja0FnZShrZXksIGVsZW1lbnQpKSByZXR1cm5cblxuICBpZiAodGhpcy5oZWFkICE9PSBrZXkpIHtcbiAgICBpZiAoa2V5ID09PSB0aGlzLnRhaWwpIHtcbiAgICAgIHRoaXMudGFpbCA9IGVsZW1lbnQubmV4dFxuICAgICAgdGhpcy5jYWNoZVt0aGlzLnRhaWxdLnByZXYgPSBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNldCBwcmV2Lm5leHQgLT4gZWxlbWVudC5uZXh0OlxuICAgICAgdGhpcy5jYWNoZVtlbGVtZW50LnByZXZdLm5leHQgPSBlbGVtZW50Lm5leHRcbiAgICB9XG5cbiAgICAvLyBTZXQgZWxlbWVudC5uZXh0LnByZXYgLT4gZWxlbWVudC5wcmV2OlxuICAgIHRoaXMuY2FjaGVbZWxlbWVudC5uZXh0XS5wcmV2ID0gZWxlbWVudC5wcmV2XG5cbiAgICAvLyBFbGVtZW50IGlzIHRoZSBuZXcgaGVhZFxuICAgIHRoaXMuY2FjaGVbdGhpcy5oZWFkXS5uZXh0ID0ga2V5XG4gICAgZWxlbWVudC5wcmV2ID0gdGhpcy5oZWFkXG4gICAgZWxlbWVudC5uZXh0ID0gbnVsbFxuICAgIHRoaXMuaGVhZCA9IGtleVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQudmFsdWVcbn1cblxuTFJVLnByb3RvdHlwZS5ldmljdCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLnRhaWwpIHJldHVyblxuICB0aGlzLnJlbW92ZSh0aGlzLnRhaWwpXG59XG4iLCJ2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbmFub2Fzc2VydCcpXG52YXIgbW9ycGggPSByZXF1aXJlKCcuL2xpYi9tb3JwaCcpXG5cbnZhciBURVhUX05PREUgPSAzXG4vLyB2YXIgREVCVUcgPSBmYWxzZVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hbm9tb3JwaFxuXG4vLyBNb3JwaCBvbmUgdHJlZSBpbnRvIGFub3RoZXIgdHJlZVxuLy9cbi8vIG5vIHBhcmVudFxuLy8gICAtPiBzYW1lOiBkaWZmIGFuZCB3YWxrIGNoaWxkcmVuXG4vLyAgIC0+IG5vdCBzYW1lOiByZXBsYWNlIGFuZCByZXR1cm5cbi8vIG9sZCBub2RlIGRvZXNuJ3QgZXhpc3Rcbi8vICAgLT4gaW5zZXJ0IG5ldyBub2RlXG4vLyBuZXcgbm9kZSBkb2Vzbid0IGV4aXN0XG4vLyAgIC0+IGRlbGV0ZSBvbGQgbm9kZVxuLy8gbm9kZXMgYXJlIG5vdCB0aGUgc2FtZVxuLy8gICAtPiBkaWZmIG5vZGVzIGFuZCBhcHBseSBwYXRjaCB0byBvbGQgbm9kZVxuLy8gbm9kZXMgYXJlIHRoZSBzYW1lXG4vLyAgIC0+IHdhbGsgYWxsIGNoaWxkIG5vZGVzIGFuZCBhcHBlbmQgdG8gb2xkIG5vZGVcbmZ1bmN0aW9uIG5hbm9tb3JwaCAob2xkVHJlZSwgbmV3VHJlZSwgb3B0aW9ucykge1xuICAvLyBpZiAoREVCVUcpIHtcbiAgLy8gICBjb25zb2xlLmxvZyhcbiAgLy8gICAnbmFub21vcnBoXFxub2xkXFxuICAlc1xcbm5ld1xcbiAgJXMnLFxuICAvLyAgIG9sZFRyZWUgJiYgb2xkVHJlZS5vdXRlckhUTUwsXG4gIC8vICAgbmV3VHJlZSAmJiBuZXdUcmVlLm91dGVySFRNTFxuICAvLyApXG4gIC8vIH1cbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBvbGRUcmVlLCAnb2JqZWN0JywgJ25hbm9tb3JwaDogb2xkVHJlZSBzaG91bGQgYmUgYW4gb2JqZWN0JylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBuZXdUcmVlLCAnb2JqZWN0JywgJ25hbm9tb3JwaDogbmV3VHJlZSBzaG91bGQgYmUgYW4gb2JqZWN0JylcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNoaWxkcmVuT25seSkge1xuICAgIHVwZGF0ZUNoaWxkcmVuKG5ld1RyZWUsIG9sZFRyZWUpXG4gICAgcmV0dXJuIG9sZFRyZWVcbiAgfVxuXG4gIGFzc2VydC5ub3RFcXVhbChcbiAgICBuZXdUcmVlLm5vZGVUeXBlLFxuICAgIDExLFxuICAgICduYW5vbW9ycGg6IG5ld1RyZWUgc2hvdWxkIGhhdmUgb25lIHJvb3Qgbm9kZSAod2hpY2ggaXMgbm90IGEgRG9jdW1lbnRGcmFnbWVudCknXG4gIClcblxuICByZXR1cm4gd2FsayhuZXdUcmVlLCBvbGRUcmVlKVxufVxuXG4vLyBXYWxrIGFuZCBtb3JwaCBhIGRvbSB0cmVlXG5mdW5jdGlvbiB3YWxrIChuZXdOb2RlLCBvbGROb2RlKSB7XG4gIC8vIGlmIChERUJVRykge1xuICAvLyAgIGNvbnNvbGUubG9nKFxuICAvLyAgICd3YWxrXFxub2xkXFxuICAlc1xcbm5ld1xcbiAgJXMnLFxuICAvLyAgIG9sZE5vZGUgJiYgb2xkTm9kZS5vdXRlckhUTUwsXG4gIC8vICAgbmV3Tm9kZSAmJiBuZXdOb2RlLm91dGVySFRNTFxuICAvLyApXG4gIC8vIH1cbiAgaWYgKCFvbGROb2RlKSB7XG4gICAgcmV0dXJuIG5ld05vZGVcbiAgfSBlbHNlIGlmICghbmV3Tm9kZSkge1xuICAgIHJldHVybiBudWxsXG4gIH0gZWxzZSBpZiAobmV3Tm9kZS5pc1NhbWVOb2RlICYmIG5ld05vZGUuaXNTYW1lTm9kZShvbGROb2RlKSkge1xuICAgIHJldHVybiBvbGROb2RlXG4gIH0gZWxzZSBpZiAobmV3Tm9kZS50YWdOYW1lICE9PSBvbGROb2RlLnRhZ05hbWUgfHwgZ2V0Q29tcG9uZW50SWQobmV3Tm9kZSkgIT09IGdldENvbXBvbmVudElkKG9sZE5vZGUpKSB7XG4gICAgcmV0dXJuIG5ld05vZGVcbiAgfSBlbHNlIHtcbiAgICBtb3JwaChuZXdOb2RlLCBvbGROb2RlKVxuICAgIHVwZGF0ZUNoaWxkcmVuKG5ld05vZGUsIG9sZE5vZGUpXG4gICAgcmV0dXJuIG9sZE5vZGVcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRJZCAobm9kZSkge1xuICByZXR1cm4gbm9kZS5kYXRhc2V0ID8gbm9kZS5kYXRhc2V0Lm5hbm9tb3JwaENvbXBvbmVudElkIDogdW5kZWZpbmVkXG59XG5cbi8vIFVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgZWxlbWVudHNcbi8vIChvYmosIG9iaikgLT4gbnVsbFxuZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4gKG5ld05vZGUsIG9sZE5vZGUpIHtcbiAgLy8gaWYgKERFQlVHKSB7XG4gIC8vICAgY29uc29sZS5sb2coXG4gIC8vICAgJ3VwZGF0ZUNoaWxkcmVuXFxub2xkXFxuICAlc1xcbm5ld1xcbiAgJXMnLFxuICAvLyAgIG9sZE5vZGUgJiYgb2xkTm9kZS5vdXRlckhUTUwsXG4gIC8vICAgbmV3Tm9kZSAmJiBuZXdOb2RlLm91dGVySFRNTFxuICAvLyApXG4gIC8vIH1cbiAgdmFyIG9sZENoaWxkLCBuZXdDaGlsZCwgbW9ycGhlZCwgb2xkTWF0Y2hcblxuICAvLyBUaGUgb2Zmc2V0IGlzIG9ubHkgZXZlciBpbmNyZWFzZWQsIGFuZCB1c2VkIGZvciBbaSAtIG9mZnNldF0gaW4gdGhlIGxvb3BcbiAgdmFyIG9mZnNldCA9IDBcblxuICBmb3IgKHZhciBpID0gMDsgOyBpKyspIHtcbiAgICBvbGRDaGlsZCA9IG9sZE5vZGUuY2hpbGROb2Rlc1tpXVxuICAgIG5ld0NoaWxkID0gbmV3Tm9kZS5jaGlsZE5vZGVzW2kgLSBvZmZzZXRdXG4gICAgLy8gaWYgKERFQlVHKSB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhcbiAgICAvLyAgICc9PT1cXG4tIG9sZFxcbiAgJXNcXG4tIG5ld1xcbiAgJXMnLFxuICAgIC8vICAgb2xkQ2hpbGQgJiYgb2xkQ2hpbGQub3V0ZXJIVE1MLFxuICAgIC8vICAgbmV3Q2hpbGQgJiYgbmV3Q2hpbGQub3V0ZXJIVE1MXG4gICAgLy8gKVxuICAgIC8vIH1cbiAgICAvLyBCb3RoIG5vZGVzIGFyZSBlbXB0eSwgZG8gbm90aGluZ1xuICAgIGlmICghb2xkQ2hpbGQgJiYgIW5ld0NoaWxkKSB7XG4gICAgICBicmVha1xuXG4gICAgLy8gVGhlcmUgaXMgbm8gbmV3IGNoaWxkLCByZW1vdmUgb2xkXG4gICAgfSBlbHNlIGlmICghbmV3Q2hpbGQpIHtcbiAgICAgIG9sZE5vZGUucmVtb3ZlQ2hpbGQob2xkQ2hpbGQpXG4gICAgICBpLS1cblxuICAgIC8vIFRoZXJlIGlzIG5vIG9sZCBjaGlsZCwgYWRkIG5ld1xuICAgIH0gZWxzZSBpZiAoIW9sZENoaWxkKSB7XG4gICAgICBvbGROb2RlLmFwcGVuZENoaWxkKG5ld0NoaWxkKVxuICAgICAgb2Zmc2V0KytcblxuICAgIC8vIEJvdGggbm9kZXMgYXJlIHRoZSBzYW1lLCBtb3JwaFxuICAgIH0gZWxzZSBpZiAoc2FtZShuZXdDaGlsZCwgb2xkQ2hpbGQpKSB7XG4gICAgICBtb3JwaGVkID0gd2FsayhuZXdDaGlsZCwgb2xkQ2hpbGQpXG4gICAgICBpZiAobW9ycGhlZCAhPT0gb2xkQ2hpbGQpIHtcbiAgICAgICAgb2xkTm9kZS5yZXBsYWNlQ2hpbGQobW9ycGhlZCwgb2xkQ2hpbGQpXG4gICAgICAgIG9mZnNldCsrXG4gICAgICB9XG5cbiAgICAvLyBCb3RoIG5vZGVzIGRvIG5vdCBzaGFyZSBhbiBJRCBvciBhIHBsYWNlaG9sZGVyLCB0cnkgcmVvcmRlclxuICAgIH0gZWxzZSB7XG4gICAgICBvbGRNYXRjaCA9IG51bGxcblxuICAgICAgLy8gVHJ5IGFuZCBmaW5kIGEgc2ltaWxhciBub2RlIHNvbWV3aGVyZSBpbiB0aGUgdHJlZVxuICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBvbGROb2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHNhbWUob2xkTm9kZS5jaGlsZE5vZGVzW2pdLCBuZXdDaGlsZCkpIHtcbiAgICAgICAgICBvbGRNYXRjaCA9IG9sZE5vZGUuY2hpbGROb2Rlc1tqXVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlcmUgd2FzIGEgbm9kZSB3aXRoIHRoZSBzYW1lIElEIG9yIHBsYWNlaG9sZGVyIGluIHRoZSBvbGQgbGlzdFxuICAgICAgaWYgKG9sZE1hdGNoKSB7XG4gICAgICAgIG1vcnBoZWQgPSB3YWxrKG5ld0NoaWxkLCBvbGRNYXRjaClcbiAgICAgICAgaWYgKG1vcnBoZWQgIT09IG9sZE1hdGNoKSBvZmZzZXQrK1xuICAgICAgICBvbGROb2RlLmluc2VydEJlZm9yZShtb3JwaGVkLCBvbGRDaGlsZClcblxuICAgICAgLy8gSXQncyBzYWZlIHRvIG1vcnBoIHR3byBub2RlcyBpbi1wbGFjZSBpZiBuZWl0aGVyIGhhcyBhbiBJRFxuICAgICAgfSBlbHNlIGlmICghbmV3Q2hpbGQuaWQgJiYgIW9sZENoaWxkLmlkKSB7XG4gICAgICAgIG1vcnBoZWQgPSB3YWxrKG5ld0NoaWxkLCBvbGRDaGlsZClcbiAgICAgICAgaWYgKG1vcnBoZWQgIT09IG9sZENoaWxkKSB7XG4gICAgICAgICAgb2xkTm9kZS5yZXBsYWNlQ2hpbGQobW9ycGhlZCwgb2xkQ2hpbGQpXG4gICAgICAgICAgb2Zmc2V0KytcbiAgICAgICAgfVxuXG4gICAgICAvLyBJbnNlcnQgdGhlIG5vZGUgYXQgdGhlIGluZGV4IGlmIHdlIGNvdWxkbid0IG1vcnBoIG9yIGZpbmQgYSBtYXRjaGluZyBub2RlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGROb2RlLmluc2VydEJlZm9yZShuZXdDaGlsZCwgb2xkQ2hpbGQpXG4gICAgICAgIG9mZnNldCsrXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhbWUgKGEsIGIpIHtcbiAgaWYgKGEuaWQpIHJldHVybiBhLmlkID09PSBiLmlkXG4gIGlmIChhLmlzU2FtZU5vZGUpIHJldHVybiBhLmlzU2FtZU5vZGUoYilcbiAgaWYgKGEudGFnTmFtZSAhPT0gYi50YWdOYW1lKSByZXR1cm4gZmFsc2VcbiAgaWYgKGEudHlwZSA9PT0gVEVYVF9OT0RFKSByZXR1cm4gYS5ub2RlVmFsdWUgPT09IGIubm9kZVZhbHVlXG4gIHJldHVybiBmYWxzZVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBbXG4gIC8vIGF0dHJpYnV0ZSBldmVudHMgKGNhbiBiZSBzZXQgd2l0aCBhdHRyaWJ1dGVzKVxuICAnb25jbGljaycsXG4gICdvbmRibGNsaWNrJyxcbiAgJ29ubW91c2Vkb3duJyxcbiAgJ29ubW91c2V1cCcsXG4gICdvbm1vdXNlb3ZlcicsXG4gICdvbm1vdXNlbW92ZScsXG4gICdvbm1vdXNlb3V0JyxcbiAgJ29ubW91c2VlbnRlcicsXG4gICdvbm1vdXNlbGVhdmUnLFxuICAnb250b3VjaGNhbmNlbCcsXG4gICdvbnRvdWNoZW5kJyxcbiAgJ29udG91Y2htb3ZlJyxcbiAgJ29udG91Y2hzdGFydCcsXG4gICdvbmRyYWdzdGFydCcsXG4gICdvbmRyYWcnLFxuICAnb25kcmFnZW50ZXInLFxuICAnb25kcmFnbGVhdmUnLFxuICAnb25kcmFnb3ZlcicsXG4gICdvbmRyb3AnLFxuICAnb25kcmFnZW5kJyxcbiAgJ29ua2V5ZG93bicsXG4gICdvbmtleXByZXNzJyxcbiAgJ29ua2V5dXAnLFxuICAnb251bmxvYWQnLFxuICAnb25hYm9ydCcsXG4gICdvbmVycm9yJyxcbiAgJ29ucmVzaXplJyxcbiAgJ29uc2Nyb2xsJyxcbiAgJ29uc2VsZWN0JyxcbiAgJ29uY2hhbmdlJyxcbiAgJ29uc3VibWl0JyxcbiAgJ29ucmVzZXQnLFxuICAnb25mb2N1cycsXG4gICdvbmJsdXInLFxuICAnb25pbnB1dCcsXG4gICdvbmFuaW1hdGlvbmVuZCcsXG4gICdvbmFuaW1hdGlvbml0ZXJhdGlvbicsXG4gICdvbmFuaW1hdGlvbnN0YXJ0JyxcbiAgLy8gb3RoZXIgY29tbW9uIGV2ZW50c1xuICAnb25jb250ZXh0bWVudScsXG4gICdvbmZvY3VzaW4nLFxuICAnb25mb2N1c291dCdcbl1cbiIsInZhciBldmVudHMgPSByZXF1aXJlKCcuL2V2ZW50cycpXG52YXIgZXZlbnRzTGVuZ3RoID0gZXZlbnRzLmxlbmd0aFxuXG52YXIgRUxFTUVOVF9OT0RFID0gMVxudmFyIFRFWFRfTk9ERSA9IDNcbnZhciBDT01NRU5UX05PREUgPSA4XG5cbm1vZHVsZS5leHBvcnRzID0gbW9ycGhcblxuLy8gZGlmZiBlbGVtZW50cyBhbmQgYXBwbHkgdGhlIHJlc3VsdGluZyBwYXRjaCB0byB0aGUgb2xkIG5vZGVcbi8vIChvYmosIG9iaikgLT4gbnVsbFxuZnVuY3Rpb24gbW9ycGggKG5ld05vZGUsIG9sZE5vZGUpIHtcbiAgdmFyIG5vZGVUeXBlID0gbmV3Tm9kZS5ub2RlVHlwZVxuICB2YXIgbm9kZU5hbWUgPSBuZXdOb2RlLm5vZGVOYW1lXG5cbiAgaWYgKG5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICBjb3B5QXR0cnMobmV3Tm9kZSwgb2xkTm9kZSlcbiAgfVxuXG4gIGlmIChub2RlVHlwZSA9PT0gVEVYVF9OT0RFIHx8IG5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBpZiAob2xkTm9kZS5ub2RlVmFsdWUgIT09IG5ld05vZGUubm9kZVZhbHVlKSB7XG4gICAgICBvbGROb2RlLm5vZGVWYWx1ZSA9IG5ld05vZGUubm9kZVZhbHVlXG4gICAgfVxuICB9XG5cbiAgLy8gU29tZSBET00gbm9kZXMgYXJlIHdlaXJkXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXRyaWNrLXN0ZWVsZS1pZGVtL21vcnBoZG9tL2Jsb2IvbWFzdGVyL3NyYy9zcGVjaWFsRWxIYW5kbGVycy5qc1xuICBpZiAobm9kZU5hbWUgPT09ICdJTlBVVCcpIHVwZGF0ZUlucHV0KG5ld05vZGUsIG9sZE5vZGUpXG4gIGVsc2UgaWYgKG5vZGVOYW1lID09PSAnT1BUSU9OJykgdXBkYXRlT3B0aW9uKG5ld05vZGUsIG9sZE5vZGUpXG4gIGVsc2UgaWYgKG5vZGVOYW1lID09PSAnVEVYVEFSRUEnKSB1cGRhdGVUZXh0YXJlYShuZXdOb2RlLCBvbGROb2RlKVxuXG4gIGNvcHlFdmVudHMobmV3Tm9kZSwgb2xkTm9kZSlcbn1cblxuZnVuY3Rpb24gY29weUF0dHJzIChuZXdOb2RlLCBvbGROb2RlKSB7XG4gIHZhciBvbGRBdHRycyA9IG9sZE5vZGUuYXR0cmlidXRlc1xuICB2YXIgbmV3QXR0cnMgPSBuZXdOb2RlLmF0dHJpYnV0ZXNcbiAgdmFyIGF0dHJOYW1lc3BhY2VVUkkgPSBudWxsXG4gIHZhciBhdHRyVmFsdWUgPSBudWxsXG4gIHZhciBmcm9tVmFsdWUgPSBudWxsXG4gIHZhciBhdHRyTmFtZSA9IG51bGxcbiAgdmFyIGF0dHIgPSBudWxsXG5cbiAgZm9yICh2YXIgaSA9IG5ld0F0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgYXR0ciA9IG5ld0F0dHJzW2ldXG4gICAgYXR0ck5hbWUgPSBhdHRyLm5hbWVcbiAgICBhdHRyTmFtZXNwYWNlVVJJID0gYXR0ci5uYW1lc3BhY2VVUklcbiAgICBhdHRyVmFsdWUgPSBhdHRyLnZhbHVlXG4gICAgaWYgKGF0dHJOYW1lc3BhY2VVUkkpIHtcbiAgICAgIGF0dHJOYW1lID0gYXR0ci5sb2NhbE5hbWUgfHwgYXR0ck5hbWVcbiAgICAgIGZyb21WYWx1ZSA9IG9sZE5vZGUuZ2V0QXR0cmlidXRlTlMoYXR0ck5hbWVzcGFjZVVSSSwgYXR0ck5hbWUpXG4gICAgICBpZiAoZnJvbVZhbHVlICE9PSBhdHRyVmFsdWUpIHtcbiAgICAgICAgb2xkTm9kZS5zZXRBdHRyaWJ1dGVOUyhhdHRyTmFtZXNwYWNlVVJJLCBhdHRyTmFtZSwgYXR0clZhbHVlKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9sZE5vZGUuaGFzQXR0cmlidXRlKGF0dHJOYW1lKSkge1xuICAgICAgICBvbGROb2RlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0clZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJvbVZhbHVlID0gb2xkTm9kZS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpXG4gICAgICAgIGlmIChmcm9tVmFsdWUgIT09IGF0dHJWYWx1ZSkge1xuICAgICAgICAgIC8vIGFwcGFyZW50bHkgdmFsdWVzIGFyZSBhbHdheXMgY2FzdCB0byBzdHJpbmdzLCBhaCB3ZWxsXG4gICAgICAgICAgaWYgKGF0dHJWYWx1ZSA9PT0gJ251bGwnIHx8IGF0dHJWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9sZE5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvbGROb2RlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0clZhbHVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSBhbnkgZXh0cmEgYXR0cmlidXRlcyBmb3VuZCBvbiB0aGUgb3JpZ2luYWwgRE9NIGVsZW1lbnQgdGhhdFxuICAvLyB3ZXJlbid0IGZvdW5kIG9uIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAgZm9yICh2YXIgaiA9IG9sZEF0dHJzLmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgYXR0ciA9IG9sZEF0dHJzW2pdXG4gICAgaWYgKGF0dHIuc3BlY2lmaWVkICE9PSBmYWxzZSkge1xuICAgICAgYXR0ck5hbWUgPSBhdHRyLm5hbWVcbiAgICAgIGF0dHJOYW1lc3BhY2VVUkkgPSBhdHRyLm5hbWVzcGFjZVVSSVxuXG4gICAgICBpZiAoYXR0ck5hbWVzcGFjZVVSSSkge1xuICAgICAgICBhdHRyTmFtZSA9IGF0dHIubG9jYWxOYW1lIHx8IGF0dHJOYW1lXG4gICAgICAgIGlmICghbmV3Tm9kZS5oYXNBdHRyaWJ1dGVOUyhhdHRyTmFtZXNwYWNlVVJJLCBhdHRyTmFtZSkpIHtcbiAgICAgICAgICBvbGROb2RlLnJlbW92ZUF0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIW5ld05vZGUuaGFzQXR0cmlidXRlTlMobnVsbCwgYXR0ck5hbWUpKSB7XG4gICAgICAgICAgb2xkTm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29weUV2ZW50cyAobmV3Tm9kZSwgb2xkTm9kZSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50c0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGV2ID0gZXZlbnRzW2ldXG4gICAgaWYgKG5ld05vZGVbZXZdKSB7ICAgICAgICAgICAvLyBpZiBuZXcgZWxlbWVudCBoYXMgYSB3aGl0ZWxpc3RlZCBhdHRyaWJ1dGVcbiAgICAgIG9sZE5vZGVbZXZdID0gbmV3Tm9kZVtldl0gIC8vIHVwZGF0ZSBleGlzdGluZyBlbGVtZW50XG4gICAgfSBlbHNlIGlmIChvbGROb2RlW2V2XSkgeyAgICAvLyBpZiBleGlzdGluZyBlbGVtZW50IGhhcyBpdCBhbmQgbmV3IG9uZSBkb2VzbnRcbiAgICAgIG9sZE5vZGVbZXZdID0gdW5kZWZpbmVkICAgIC8vIHJlbW92ZSBpdCBmcm9tIGV4aXN0aW5nIGVsZW1lbnRcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9uIChuZXdOb2RlLCBvbGROb2RlKSB7XG4gIHVwZGF0ZUF0dHJpYnV0ZShuZXdOb2RlLCBvbGROb2RlLCAnc2VsZWN0ZWQnKVxufVxuXG4vLyBUaGUgXCJ2YWx1ZVwiIGF0dHJpYnV0ZSBpcyBzcGVjaWFsIGZvciB0aGUgPGlucHV0PiBlbGVtZW50IHNpbmNlIGl0IHNldHMgdGhlXG4vLyBpbml0aWFsIHZhbHVlLiBDaGFuZ2luZyB0aGUgXCJ2YWx1ZVwiIGF0dHJpYnV0ZSB3aXRob3V0IGNoYW5naW5nIHRoZSBcInZhbHVlXCJcbi8vIHByb3BlcnR5IHdpbGwgaGF2ZSBubyBlZmZlY3Qgc2luY2UgaXQgaXMgb25seSB1c2VkIHRvIHRoZSBzZXQgdGhlIGluaXRpYWxcbi8vIHZhbHVlLiBTaW1pbGFyIGZvciB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlLCBhbmQgXCJkaXNhYmxlZFwiLlxuZnVuY3Rpb24gdXBkYXRlSW5wdXQgKG5ld05vZGUsIG9sZE5vZGUpIHtcbiAgdmFyIG5ld1ZhbHVlID0gbmV3Tm9kZS52YWx1ZVxuICB2YXIgb2xkVmFsdWUgPSBvbGROb2RlLnZhbHVlXG5cbiAgdXBkYXRlQXR0cmlidXRlKG5ld05vZGUsIG9sZE5vZGUsICdjaGVja2VkJylcbiAgdXBkYXRlQXR0cmlidXRlKG5ld05vZGUsIG9sZE5vZGUsICdkaXNhYmxlZCcpXG5cbiAgLy8gVGhlIFwiaW5kZXRlcm1pbmF0ZVwiIHByb3BlcnR5IGNhbiBub3QgYmUgc2V0IHVzaW5nIGFuIEhUTUwgYXR0cmlidXRlLlxuICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0L2NoZWNrYm94XG4gIGlmIChuZXdOb2RlLmluZGV0ZXJtaW5hdGUgIT09IG9sZE5vZGUuaW5kZXRlcm1pbmF0ZSkge1xuICAgIG9sZE5vZGUuaW5kZXRlcm1pbmF0ZSA9IG5ld05vZGUuaW5kZXRlcm1pbmF0ZVxuICB9XG5cbiAgLy8gUGVyc2lzdCBmaWxlIHZhbHVlIHNpbmNlIGZpbGUgaW5wdXRzIGNhbid0IGJlIGNoYW5nZWQgcHJvZ3JhbWF0aWNhbGx5XG4gIGlmIChvbGROb2RlLnR5cGUgPT09ICdmaWxlJykgcmV0dXJuXG5cbiAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgIG9sZE5vZGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsIG5ld1ZhbHVlKVxuICAgIG9sZE5vZGUudmFsdWUgPSBuZXdWYWx1ZVxuICB9XG5cbiAgaWYgKG5ld1ZhbHVlID09PSAnbnVsbCcpIHtcbiAgICBvbGROb2RlLnZhbHVlID0gJydcbiAgICBvbGROb2RlLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKVxuICB9XG5cbiAgaWYgKCFuZXdOb2RlLmhhc0F0dHJpYnV0ZU5TKG51bGwsICd2YWx1ZScpKSB7XG4gICAgb2xkTm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJylcbiAgfSBlbHNlIGlmIChvbGROb2RlLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAvLyB0aGlzIGlzIHNvIGVsZW1lbnRzIGxpa2Ugc2xpZGVyIG1vdmUgdGhlaXIgVUkgdGhpbmd5XG4gICAgb2xkTm9kZS52YWx1ZSA9IG5ld1ZhbHVlXG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dGFyZWEgKG5ld05vZGUsIG9sZE5vZGUpIHtcbiAgdmFyIG5ld1ZhbHVlID0gbmV3Tm9kZS52YWx1ZVxuICBpZiAobmV3VmFsdWUgIT09IG9sZE5vZGUudmFsdWUpIHtcbiAgICBvbGROb2RlLnZhbHVlID0gbmV3VmFsdWVcbiAgfVxuXG4gIGlmIChvbGROb2RlLmZpcnN0Q2hpbGQgJiYgb2xkTm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAvLyBOZWVkZWQgZm9yIElFLiBBcHBhcmVudGx5IElFIHNldHMgdGhlIHBsYWNlaG9sZGVyIGFzIHRoZVxuICAgIC8vIG5vZGUgdmFsdWUgYW5kIHZpc2UgdmVyc2EuIFRoaXMgaWdub3JlcyBhbiBlbXB0eSB1cGRhdGUuXG4gICAgaWYgKG5ld1ZhbHVlID09PSAnJyAmJiBvbGROb2RlLmZpcnN0Q2hpbGQubm9kZVZhbHVlID09PSBvbGROb2RlLnBsYWNlaG9sZGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBvbGROb2RlLmZpcnN0Q2hpbGQubm9kZVZhbHVlID0gbmV3VmFsdWVcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGUgKG5ld05vZGUsIG9sZE5vZGUsIG5hbWUpIHtcbiAgaWYgKG5ld05vZGVbbmFtZV0gIT09IG9sZE5vZGVbbmFtZV0pIHtcbiAgICBvbGROb2RlW25hbWVdID0gbmV3Tm9kZVtuYW1lXVxuICAgIGlmIChuZXdOb2RlW25hbWVdKSB7XG4gICAgICBvbGROb2RlLnNldEF0dHJpYnV0ZShuYW1lLCAnJylcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkTm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSlcbiAgICB9XG4gIH1cbn1cbiIsInZhciByZWcgPSAvKFtePz0mXSspKD0oW14mXSopKT8vZ1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbm1vZHVsZS5leHBvcnRzID0gcXNcblxuZnVuY3Rpb24gcXMgKHVybCkge1xuICBhc3NlcnQuZXF1YWwodHlwZW9mIHVybCwgJ3N0cmluZycsICduYW5vcXVlcnk6IHVybCBzaG91bGQgYmUgdHlwZSBzdHJpbmcnKVxuXG4gIHZhciBvYmogPSB7fVxuICB1cmwucmVwbGFjZSgvXi4qXFw/LywgJycpLnJlcGxhY2UocmVnLCBmdW5jdGlvbiAoYTAsIGExLCBhMiwgYTMpIHtcbiAgICB2YXIgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoYTMpXG4gICAgdmFyIGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChhMSlcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ialtrZXldKSkgb2JqW2tleV0ucHVzaCh2YWx1ZSlcbiAgICAgIGVsc2Ugb2JqW2tleV0gPSBbb2JqW2tleV0sIHZhbHVlXVxuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba2V5XSA9IHZhbHVlXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBvYmpcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxubW9kdWxlLmV4cG9ydHMgPSBuYW5vcmFmXG5cbi8vIE9ubHkgY2FsbCBSQUYgd2hlbiBuZWVkZWRcbi8vIChmbiwgZm4/KSAtPiBmblxuZnVuY3Rpb24gbmFub3JhZiAocmVuZGVyLCByYWYpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiByZW5kZXIsICdmdW5jdGlvbicsICduYW5vcmFmOiByZW5kZXIgc2hvdWxkIGJlIGEgZnVuY3Rpb24nKVxuICBhc3NlcnQub2sodHlwZW9mIHJhZiA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgcmFmID09PSAndW5kZWZpbmVkJywgJ25hbm9yYWY6IHJhZiBzaG91bGQgYmUgYSBmdW5jdGlvbiBvciB1bmRlZmluZWQnKVxuXG4gIGlmICghcmFmKSByYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gIHZhciByZWRyYXdTY2hlZHVsZWQgPSBmYWxzZVxuICB2YXIgYXJncyA9IG51bGxcblxuICByZXR1cm4gZnVuY3Rpb24gZnJhbWUgKCkge1xuICAgIGlmIChhcmdzID09PSBudWxsICYmICFyZWRyYXdTY2hlZHVsZWQpIHtcbiAgICAgIHJlZHJhd1NjaGVkdWxlZCA9IHRydWVcblxuICAgICAgcmFmKGZ1bmN0aW9uIHJlZHJhdyAoKSB7XG4gICAgICAgIHJlZHJhd1NjaGVkdWxlZCA9IGZhbHNlXG5cbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3MubGVuZ3RoXG4gICAgICAgIHZhciBfYXJncyA9IG5ldyBBcnJheShsZW5ndGgpXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIF9hcmdzW2ldID0gYXJnc1tpXVxuXG4gICAgICAgIHJlbmRlci5hcHBseShyZW5kZXIsIF9hcmdzKVxuICAgICAgICBhcmdzID0gbnVsbFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhcmdzID0gYXJndW1lbnRzXG4gIH1cbn1cbiIsInZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxudmFyIHdheWZhcmVyID0gcmVxdWlyZSgnd2F5ZmFyZXInKVxuXG4vLyBlbGVjdHJvbiBzdXBwb3J0XG52YXIgaXNMb2NhbEZpbGUgPSAoL2ZpbGU6XFwvXFwvLy50ZXN0KFxuICB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJlxuICB3aW5kb3cubG9jYXRpb24gJiZcbiAgd2luZG93LmxvY2F0aW9uLm9yaWdpblxuKSlcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbnZhciBlbGVjdHJvbiA9ICdeKGZpbGU6XFwvXFwvfFxcLykoLipcXC5odG1sP1xcLz8pPydcbnZhciBwcm90b2NvbCA9ICdeKGh0dHAocyk/KDpcXC9cXC8pKT8od3d3XFwuKT8nXG52YXIgZG9tYWluID0gJ1thLXpBLVowLTktX1xcLl0rKDpbMC05XXsxLDV9KT8oXFwvezF9KT8nXG52YXIgcXMgPSAnW1xcP10uKiQnXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5cbnZhciBzdHJpcEVsZWN0cm9uID0gbmV3IFJlZ0V4cChlbGVjdHJvbilcbnZhciBwcmVmaXggPSBuZXcgUmVnRXhwKHByb3RvY29sICsgZG9tYWluKVxudmFyIG5vcm1hbGl6ZSA9IG5ldyBSZWdFeHAoJyMnKVxudmFyIHN1ZmZpeCA9IG5ldyBSZWdFeHAocXMpXG5cbm1vZHVsZS5leHBvcnRzID0gTmFub3JvdXRlclxuXG5mdW5jdGlvbiBOYW5vcm91dGVyIChvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOYW5vcm91dGVyKSkgcmV0dXJuIG5ldyBOYW5vcm91dGVyKG9wdHMpXG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIHRoaXMucm91dGVyID0gd2F5ZmFyZXIob3B0cy5kZWZhdWx0IHx8ICcvNDA0Jylcbn1cblxuTmFub3JvdXRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAocm91dGVuYW1lLCBsaXN0ZW5lcikge1xuICBhc3NlcnQuZXF1YWwodHlwZW9mIHJvdXRlbmFtZSwgJ3N0cmluZycpXG4gIHJvdXRlbmFtZSA9IHJvdXRlbmFtZS5yZXBsYWNlKC9eWyMvXS8sICcnKVxuICB0aGlzLnJvdXRlci5vbihyb3V0ZW5hbWUsIGxpc3RlbmVyKVxufVxuXG5OYW5vcm91dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKHJvdXRlbmFtZSkge1xuICBhc3NlcnQuZXF1YWwodHlwZW9mIHJvdXRlbmFtZSwgJ3N0cmluZycpXG4gIHJvdXRlbmFtZSA9IHBhdGhuYW1lKHJvdXRlbmFtZSwgaXNMb2NhbEZpbGUpXG4gIHJldHVybiB0aGlzLnJvdXRlci5lbWl0KHJvdXRlbmFtZSlcbn1cblxuTmFub3JvdXRlci5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbiAocm91dGVuYW1lKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygcm91dGVuYW1lLCAnc3RyaW5nJylcbiAgcm91dGVuYW1lID0gcGF0aG5hbWUocm91dGVuYW1lLCBpc0xvY2FsRmlsZSlcbiAgcmV0dXJuIHRoaXMucm91dGVyLm1hdGNoKHJvdXRlbmFtZSlcbn1cblxuLy8gcmVwbGFjZSBldmVyeXRoaW5nIGluIGEgcm91dGUgYnV0IHRoZSBwYXRobmFtZSBhbmQgaGFzaFxuZnVuY3Rpb24gcGF0aG5hbWUgKHJvdXRlbmFtZSwgaXNFbGVjdHJvbikge1xuICBpZiAoaXNFbGVjdHJvbikgcm91dGVuYW1lID0gcm91dGVuYW1lLnJlcGxhY2Uoc3RyaXBFbGVjdHJvbiwgJycpXG4gIGVsc2Ugcm91dGVuYW1lID0gcm91dGVuYW1lLnJlcGxhY2UocHJlZml4LCAnJylcbiAgcmV0dXJuIGRlY29kZVVSSShyb3V0ZW5hbWUucmVwbGFjZShzdWZmaXgsICcnKS5yZXBsYWNlKG5vcm1hbGl6ZSwgJy8nKSlcbn1cbiIsInZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG52YXIgaGFzV2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcblxuZnVuY3Rpb24gY3JlYXRlU2NoZWR1bGVyICgpIHtcbiAgdmFyIHNjaGVkdWxlclxuICBpZiAoaGFzV2luZG93KSB7XG4gICAgaWYgKCF3aW5kb3cuX25hbm9TY2hlZHVsZXIpIHdpbmRvdy5fbmFub1NjaGVkdWxlciA9IG5ldyBOYW5vU2NoZWR1bGVyKHRydWUpXG4gICAgc2NoZWR1bGVyID0gd2luZG93Ll9uYW5vU2NoZWR1bGVyXG4gIH0gZWxzZSB7XG4gICAgc2NoZWR1bGVyID0gbmV3IE5hbm9TY2hlZHVsZXIoKVxuICB9XG4gIHJldHVybiBzY2hlZHVsZXJcbn1cblxuZnVuY3Rpb24gTmFub1NjaGVkdWxlciAoaGFzV2luZG93KSB7XG4gIHRoaXMuaGFzV2luZG93ID0gaGFzV2luZG93XG4gIHRoaXMuaGFzSWRsZSA9IHRoaXMuaGFzV2luZG93ICYmIHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrXG4gIHRoaXMubWV0aG9kID0gdGhpcy5oYXNJZGxlID8gd2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2suYmluZCh3aW5kb3cpIDogdGhpcy5zZXRUaW1lb3V0XG4gIHRoaXMuc2NoZWR1bGVkID0gZmFsc2VcbiAgdGhpcy5xdWV1ZSA9IFtdXG59XG5cbk5hbm9TY2hlZHVsZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ25hbm9zY2hlZHVsZXIucHVzaDogY2Igc2hvdWxkIGJlIHR5cGUgZnVuY3Rpb24nKVxuXG4gIHRoaXMucXVldWUucHVzaChjYilcbiAgdGhpcy5zY2hlZHVsZSgpXG59XG5cbk5hbm9TY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5zY2hlZHVsZWQpIHJldHVyblxuXG4gIHRoaXMuc2NoZWR1bGVkID0gdHJ1ZVxuICB2YXIgc2VsZiA9IHRoaXNcbiAgdGhpcy5tZXRob2QoZnVuY3Rpb24gKGlkbGVEZWFkbGluZSkge1xuICAgIHZhciBjYlxuICAgIHdoaWxlIChzZWxmLnF1ZXVlLmxlbmd0aCAmJiBpZGxlRGVhZGxpbmUudGltZVJlbWFpbmluZygpID4gMCkge1xuICAgICAgY2IgPSBzZWxmLnF1ZXVlLnNoaWZ0KClcbiAgICAgIGNiKGlkbGVEZWFkbGluZSlcbiAgICB9XG4gICAgc2VsZi5zY2hlZHVsZWQgPSBmYWxzZVxuICAgIGlmIChzZWxmLnF1ZXVlLmxlbmd0aCkgc2VsZi5zY2hlZHVsZSgpXG4gIH0pXG59XG5cbk5hbm9TY2hlZHVsZXIucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgc2V0VGltZW91dChjYiwgMCwge1xuICAgIHRpbWVSZW1haW5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVNjaGVkdWxlclxuIiwidmFyIHNjaGVkdWxlciA9IHJlcXVpcmUoJ25hbm9zY2hlZHVsZXInKSgpXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxudmFyIHBlcmZcbm5hbm90aW1pbmcuZGlzYWJsZWQgPSB0cnVlXG50cnkge1xuICBwZXJmID0gd2luZG93LnBlcmZvcm1hbmNlXG4gIG5hbm90aW1pbmcuZGlzYWJsZWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLkRJU0FCTEVfTkFOT1RJTUlORyA9PT0gJ3RydWUnIHx8ICFwZXJmLm1hcmtcbn0gY2F0Y2ggKGUpIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hbm90aW1pbmdcblxuZnVuY3Rpb24gbmFub3RpbWluZyAobmFtZSkge1xuICBhc3NlcnQuZXF1YWwodHlwZW9mIG5hbWUsICdzdHJpbmcnLCAnbmFub3RpbWluZzogbmFtZSBzaG91bGQgYmUgdHlwZSBzdHJpbmcnKVxuXG4gIGlmIChuYW5vdGltaW5nLmRpc2FibGVkKSByZXR1cm4gbm9vcFxuXG4gIHZhciB1dWlkID0gKHBlcmYubm93KCkgKiAxMDAwMCkudG9GaXhlZCgpICUgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgdmFyIHN0YXJ0TmFtZSA9ICdzdGFydC0nICsgdXVpZCArICctJyArIG5hbWVcbiAgcGVyZi5tYXJrKHN0YXJ0TmFtZSlcblxuICBmdW5jdGlvbiBlbmQgKGNiKSB7XG4gICAgdmFyIGVuZE5hbWUgPSAnZW5kLScgKyB1dWlkICsgJy0nICsgbmFtZVxuICAgIHBlcmYubWFyayhlbmROYW1lKVxuXG4gICAgc2NoZWR1bGVyLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGVyciA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtZWFzdXJlTmFtZSA9IG5hbWUgKyAnIFsnICsgdXVpZCArICddJ1xuICAgICAgICBwZXJmLm1lYXN1cmUobWVhc3VyZU5hbWUsIHN0YXJ0TmFtZSwgZW5kTmFtZSlcbiAgICAgICAgcGVyZi5jbGVhck1hcmtzKHN0YXJ0TmFtZSlcbiAgICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZE5hbWUpXG4gICAgICB9IGNhdGNoIChlKSB7IGVyciA9IGUgfVxuICAgICAgaWYgKGNiKSBjYihlcnIsIG5hbWUpXG4gICAgfSlcbiAgfVxuXG4gIGVuZC51dWlkID0gdXVpZFxuICByZXR1cm4gZW5kXG59XG5cbmZ1bmN0aW9uIG5vb3AgKGNiKSB7XG4gIGlmIChjYikge1xuICAgIHNjaGVkdWxlci5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNiKG5ldyBFcnJvcignbmFub3RpbWluZzogcGVyZm9ybWFuY2UgQVBJIHVuYXZhaWxhYmxlJykpXG4gICAgfSlcbiAgfVxufVxuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsInZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdENoYW5nZUNhbGxzaXRlXG5cbmZ1bmN0aW9uIG9iamVjdENoYW5nZUNhbGxzaXRlICh0YXJnZXQsIGNhbGxiYWNrKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgdGFyZ2V0LCAnb2JqZWN0JywgJ29iamVjdC1jaGFuZ2UtY2FsbHNpdGU6IHRhcmdldCBzaG91bGQgYmUgdHlwZSBvYmplY3QnKVxuICBhc3NlcnQuZXF1YWwodHlwZW9mIGNhbGxiYWNrLCAnZnVuY3Rpb24nLCAnb2JqZWN0LWNoYW5nZS1jYWxsc2l0ZTogY2FsbGJhY2sgc2hvdWxkIGJlIHR5cGUgZnVuY3Rpb24nKVxuXG4gIHJldHVybiBuZXcgUHJveHkodGFyZ2V0LCB7XG4gICAgc2V0OiBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWx1ZSkge1xuICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigpXG4gICAgICB2YXIgdHJhY2UgPSBzdHJpcChlcnIuc3RhY2spXG4gICAgICBjYWxsYmFjayhwcm9wLCB2YWx1ZSwgdHJhY2UpXG4gICAgICBvYmpbcHJvcF0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuICAgIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBwcm9wKSB7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKClcbiAgICAgIHZhciB0cmFjZSA9IHN0cmlwKGVyci5zdGFjaylcbiAgICAgIGNhbGxiYWNrKHByb3AsIHVuZGVmaW5lZCwgdHJhY2UpXG4gICAgICBpZiAocHJvcCBpbiB0YXJnZXQpIHtcbiAgICAgICAgZGVsZXRlIHRhcmdldFtwcm9wXVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBzdHJpcCAoc3RyKSB7XG4gIHZhciBhcnIgPSBzdHIuc3BsaXQoJ1xcbicpXG4gIGFyciA9IGFyci5sZW5ndGggPiAyID8gYXJyLnNsaWNlKDIpIDogYXJyXG4gIGFyclswXSA9IGFyclswXS5yZXBsYWNlKC9eIHs0fWF0IC8sICcnKVxuICByZXR1cm4gJ1xcbicgKyBhcnIuam9pbignXFxuJylcbn1cbiIsInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyICRtYXRjaCA9IFN0cmluZy5wcm90b3R5cGUubWF0Y2g7XG52YXIgJHNsaWNlID0gU3RyaW5nLnByb3RvdHlwZS5zbGljZTtcbnZhciAkcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcbnZhciAkdG9VcHBlckNhc2UgPSBTdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlO1xudmFyICR0b0xvd2VyQ2FzZSA9IFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2U7XG52YXIgJHRlc3QgPSBSZWdFeHAucHJvdG90eXBlLnRlc3Q7XG52YXIgJGNvbmNhdCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQ7XG52YXIgJGpvaW4gPSBBcnJheS5wcm90b3R5cGUuam9pbjtcbnZhciAkYXJyU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgJGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xuLy8gaWUsIGBoYXMtdG9zdHJpbmd0YWcvc2hhbXNcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnICYmICh0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBoYXNTaGFtbWVkU3ltYm9scyA/ICdvYmplY3QnIDogJ3N5bWJvbCcpXG4gICAgPyBTeW1ib2wudG9TdHJpbmdUYWdcbiAgICA6IG51bGw7XG52YXIgaXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxudmFyIGdQTyA9ICh0eXBlb2YgUmVmbGVjdCA9PT0gJ2Z1bmN0aW9uJyA/IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgOiBPYmplY3QuZ2V0UHJvdG90eXBlT2YpIHx8IChcbiAgICBbXS5fX3Byb3RvX18gPT09IEFycmF5LnByb3RvdHlwZSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG4gICAgICAgID8gZnVuY3Rpb24gKE8pIHtcbiAgICAgICAgICAgIHJldHVybiBPLl9fcHJvdG9fXzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbFxuKTtcblxuZnVuY3Rpb24gYWRkTnVtZXJpY1NlcGFyYXRvcihudW0sIHN0cikge1xuICAgIGlmIChcbiAgICAgICAgbnVtID09PSBJbmZpbml0eVxuICAgICAgICB8fCBudW0gPT09IC1JbmZpbml0eVxuICAgICAgICB8fCBudW0gIT09IG51bVxuICAgICAgICB8fCAobnVtICYmIG51bSA+IC0xMDAwICYmIG51bSA8IDEwMDApXG4gICAgICAgIHx8ICR0ZXN0LmNhbGwoL2UvLCBzdHIpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHZhciBzZXBSZWdleCA9IC9bMC05XSg/PSg/OlswLTldezN9KSsoPyFbMC05XSkpL2c7XG4gICAgaWYgKHR5cGVvZiBudW0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIHZhciBpbnQgPSBudW0gPCAwID8gLSRmbG9vcigtbnVtKSA6ICRmbG9vcihudW0pOyAvLyB0cnVuYyhudW0pXG4gICAgICAgIGlmIChpbnQgIT09IG51bSkge1xuICAgICAgICAgICAgdmFyIGludFN0ciA9IFN0cmluZyhpbnQpO1xuICAgICAgICAgICAgdmFyIGRlYyA9ICRzbGljZS5jYWxsKHN0ciwgaW50U3RyLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgcmV0dXJuICRyZXBsYWNlLmNhbGwoaW50U3RyLCBzZXBSZWdleCwgJyQmXycpICsgJy4nICsgJHJlcGxhY2UuY2FsbCgkcmVwbGFjZS5jYWxsKGRlYywgLyhbMC05XXszfSkvZywgJyQmXycpLCAvXyQvLCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwoc3RyLCBzZXBSZWdleCwgJyQmXycpO1xufVxuXG52YXIgdXRpbEluc3BlY3QgPSByZXF1aXJlKCcuL3V0aWwuaW5zcGVjdCcpO1xudmFyIGluc3BlY3RDdXN0b20gPSB1dGlsSW5zcGVjdC5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGlzU3ltYm9sKGluc3BlY3RDdXN0b20pID8gaW5zcGVjdEN1c3RvbSA6IG51bGw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5zcGVjdF8ob2JqLCBvcHRpb25zLCBkZXB0aCwgc2Vlbikge1xuICAgIHZhciBvcHRzID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmIChoYXMob3B0cywgJ3F1b3RlU3R5bGUnKSAmJiAob3B0cy5xdW90ZVN0eWxlICE9PSAnc2luZ2xlJyAmJiBvcHRzLnF1b3RlU3R5bGUgIT09ICdkb3VibGUnKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJxdW90ZVN0eWxlXCIgbXVzdCBiZSBcInNpbmdsZVwiIG9yIFwiZG91YmxlXCInKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgICBoYXMob3B0cywgJ21heFN0cmluZ0xlbmd0aCcpICYmICh0eXBlb2Ygb3B0cy5tYXhTdHJpbmdMZW5ndGggPT09ICdudW1iZXInXG4gICAgICAgICAgICA/IG9wdHMubWF4U3RyaW5nTGVuZ3RoIDwgMCAmJiBvcHRzLm1heFN0cmluZ0xlbmd0aCAhPT0gSW5maW5pdHlcbiAgICAgICAgICAgIDogb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IG51bGxcbiAgICAgICAgKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJtYXhTdHJpbmdMZW5ndGhcIiwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBJbmZpbml0eSwgb3IgYG51bGxgJyk7XG4gICAgfVxuICAgIHZhciBjdXN0b21JbnNwZWN0ID0gaGFzKG9wdHMsICdjdXN0b21JbnNwZWN0JykgPyBvcHRzLmN1c3RvbUluc3BlY3QgOiB0cnVlO1xuICAgIGlmICh0eXBlb2YgY3VzdG9tSW5zcGVjdCAhPT0gJ2Jvb2xlYW4nICYmIGN1c3RvbUluc3BlY3QgIT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcImN1c3RvbUluc3BlY3RcIiwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYHRydWVgLCBgZmFsc2VgLCBvciBgXFwnc3ltYm9sXFwnYCcpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdpbmRlbnQnKVxuICAgICAgICAmJiBvcHRzLmluZGVudCAhPT0gbnVsbFxuICAgICAgICAmJiBvcHRzLmluZGVudCAhPT0gJ1xcdCdcbiAgICAgICAgJiYgIShwYXJzZUludChvcHRzLmluZGVudCwgMTApID09PSBvcHRzLmluZGVudCAmJiBvcHRzLmluZGVudCA+IDApXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcImluZGVudFwiIG11c3QgYmUgXCJcXFxcdFwiLCBhbiBpbnRlZ2VyID4gMCwgb3IgYG51bGxgJyk7XG4gICAgfVxuICAgIGlmIChoYXMob3B0cywgJ251bWVyaWNTZXBhcmF0b3InKSAmJiB0eXBlb2Ygb3B0cy5udW1lcmljU2VwYXJhdG9yICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibnVtZXJpY1NlcGFyYXRvclwiLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBgdHJ1ZWAgb3IgYGZhbHNlYCcpO1xuICAgIH1cbiAgICB2YXIgbnVtZXJpY1NlcGFyYXRvciA9IG9wdHMubnVtZXJpY1NlcGFyYXRvcjtcblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgfVxuICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gb2JqID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGluc3BlY3RTdHJpbmcob2JqLCBvcHRzKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChvYmogPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eSAvIG9iaiA+IDAgPyAnMCcgOiAnLTAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdHIgPSBTdHJpbmcob2JqKTtcbiAgICAgICAgcmV0dXJuIG51bWVyaWNTZXBhcmF0b3IgPyBhZGROdW1lcmljU2VwYXJhdG9yKG9iaiwgc3RyKSA6IHN0cjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHZhciBiaWdJbnRTdHIgPSBTdHJpbmcob2JqKSArICduJztcbiAgICAgICAgcmV0dXJuIG51bWVyaWNTZXBhcmF0b3IgPyBhZGROdW1lcmljU2VwYXJhdG9yKG9iaiwgYmlnSW50U3RyKSA6IGJpZ0ludFN0cjtcbiAgICB9XG5cbiAgICB2YXIgbWF4RGVwdGggPSB0eXBlb2Ygb3B0cy5kZXB0aCA9PT0gJ3VuZGVmaW5lZCcgPyA1IDogb3B0cy5kZXB0aDtcbiAgICBpZiAodHlwZW9mIGRlcHRoID09PSAndW5kZWZpbmVkJykgeyBkZXB0aCA9IDA7IH1cbiAgICBpZiAoZGVwdGggPj0gbWF4RGVwdGggJiYgbWF4RGVwdGggPiAwICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KG9iaikgPyAnW0FycmF5XScgOiAnW09iamVjdF0nO1xuICAgIH1cblxuICAgIHZhciBpbmRlbnQgPSBnZXRJbmRlbnQob3B0cywgZGVwdGgpO1xuXG4gICAgaWYgKHR5cGVvZiBzZWVuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzZWVuID0gW107XG4gICAgfSBlbHNlIGlmIChpbmRleE9mKHNlZW4sIG9iaikgPj0gMCkge1xuICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3BlY3QodmFsdWUsIGZyb20sIG5vSW5kZW50KSB7XG4gICAgICAgIGlmIChmcm9tKSB7XG4gICAgICAgICAgICBzZWVuID0gJGFyclNsaWNlLmNhbGwoc2Vlbik7XG4gICAgICAgICAgICBzZWVuLnB1c2goZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vSW5kZW50KSB7XG4gICAgICAgICAgICB2YXIgbmV3T3B0cyA9IHtcbiAgICAgICAgICAgICAgICBkZXB0aDogb3B0cy5kZXB0aFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChoYXMob3B0cywgJ3F1b3RlU3R5bGUnKSkge1xuICAgICAgICAgICAgICAgIG5ld09wdHMucXVvdGVTdHlsZSA9IG9wdHMucXVvdGVTdHlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgbmV3T3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zcGVjdF8odmFsdWUsIG9wdHMsIGRlcHRoICsgMSwgc2Vlbik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicgJiYgIWlzUmVnRXhwKG9iaikpIHsgLy8gaW4gb2xkZXIgZW5naW5lcywgcmVnZXhlcyBhcmUgY2FsbGFibGVcbiAgICAgICAgdmFyIG5hbWUgPSBuYW1lT2Yob2JqKTtcbiAgICAgICAgdmFyIGtleXMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIHJldHVybiAnW0Z1bmN0aW9uJyArIChuYW1lID8gJzogJyArIG5hbWUgOiAnIChhbm9ueW1vdXMpJykgKyAnXScgKyAoa2V5cy5sZW5ndGggPiAwID8gJyB7ICcgKyAkam9pbi5jYWxsKGtleXMsICcsICcpICsgJyB9JyA6ICcnKTtcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKG9iaikpIHtcbiAgICAgICAgdmFyIHN5bVN0cmluZyA9IGhhc1NoYW1tZWRTeW1ib2xzID8gJHJlcGxhY2UuY2FsbChTdHJpbmcob2JqKSwgL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArICR0b0xvd2VyQ2FzZS5jYWxsKFN0cmluZyhvYmoubm9kZU5hbWUpKTtcbiAgICAgICAgdmFyIGF0dHJzID0gb2JqLmF0dHJpYnV0ZXMgfHwgW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHMgKz0gJyAnICsgYXR0cnNbaV0ubmFtZSArICc9JyArIHdyYXBRdW90ZXMocXVvdGUoYXR0cnNbaV0udmFsdWUpLCAnZG91YmxlJywgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcyArPSAnPic7XG4gICAgICAgIGlmIChvYmouY2hpbGROb2RlcyAmJiBvYmouY2hpbGROb2Rlcy5sZW5ndGgpIHsgcyArPSAnLi4uJzsgfVxuICAgICAgICBzICs9ICc8LycgKyAkdG9Mb3dlckNhc2UuY2FsbChTdHJpbmcob2JqLm5vZGVOYW1lKSkgKyAnPic7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgICAgIGlmIChvYmoubGVuZ3RoID09PSAwKSB7IHJldHVybiAnW10nOyB9XG4gICAgICAgIHZhciB4cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKGluZGVudCAmJiAhc2luZ2xlTGluZVZhbHVlcyh4cykpIHtcbiAgICAgICAgICAgIHJldHVybiAnWycgKyBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkgKyAnXSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdbICcgKyAkam9pbi5jYWxsKHhzLCAnLCAnKSArICcgXSc7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKG9iaikpIHtcbiAgICAgICAgdmFyIHBhcnRzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoISgnY2F1c2UnIGluIEVycm9yLnByb3RvdHlwZSkgJiYgJ2NhdXNlJyBpbiBvYmogJiYgIWlzRW51bWVyYWJsZS5jYWxsKG9iaiwgJ2NhdXNlJykpIHtcbiAgICAgICAgICAgIHJldHVybiAneyBbJyArIFN0cmluZyhvYmopICsgJ10gJyArICRqb2luLmNhbGwoJGNvbmNhdC5jYWxsKCdbY2F1c2VdOiAnICsgaW5zcGVjdChvYmouY2F1c2UpLCBwYXJ0cyksICcsICcpICsgJyB9JztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7IHJldHVybiAnWycgKyBTdHJpbmcob2JqKSArICddJzsgfVxuICAgICAgICByZXR1cm4gJ3sgWycgKyBTdHJpbmcob2JqKSArICddICcgKyAkam9pbi5jYWxsKHBhcnRzLCAnLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicgJiYgdXRpbEluc3BlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlsSW5zcGVjdChvYmosIHsgZGVwdGg6IG1heERlcHRoIC0gZGVwdGggfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tSW5zcGVjdCAhPT0gJ3N5bWJvbCcgJiYgdHlwZW9mIG9iai5pbnNwZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLmluc3BlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNNYXAob2JqKSkge1xuICAgICAgICB2YXIgbWFwUGFydHMgPSBbXTtcbiAgICAgICAgaWYgKG1hcEZvckVhY2gpIHtcbiAgICAgICAgICAgIG1hcEZvckVhY2guY2FsbChvYmosIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgaWYgKHNldEZvckVhY2gpIHtcbiAgICAgICAgICAgIHNldEZvckVhY2guY2FsbChvYmosIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHNldFBhcnRzLnB1c2goaW5zcGVjdCh2YWx1ZSwgb2JqKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mKCdTZXQnLCBzZXRTaXplLmNhbGwob2JqKSwgc2V0UGFydHMsIGluZGVudCk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtNYXAob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha01hcCcpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrU2V0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtTZXQnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1JlZihvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrUmVmJyk7XG4gICAgfVxuICAgIGlmIChpc051bWJlcihvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChOdW1iZXIob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoaXNCaWdJbnQob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoYmlnSW50VmFsdWVPZi5jYWxsKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQm9vbGVhbihvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoYm9vbGVhblZhbHVlT2YuY2FsbChvYmopKTtcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KFN0cmluZyhvYmopKSk7XG4gICAgfVxuICAgIGlmICghaXNEYXRlKG9iaikgJiYgIWlzUmVnRXhwKG9iaikpIHtcbiAgICAgICAgdmFyIHlzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICB2YXIgaXNQbGFpbk9iamVjdCA9IGdQTyA/IGdQTyhvYmopID09PSBPYmplY3QucHJvdG90eXBlIDogb2JqIGluc3RhbmNlb2YgT2JqZWN0IHx8IG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuICAgICAgICB2YXIgcHJvdG9UYWcgPSBvYmogaW5zdGFuY2VvZiBPYmplY3QgPyAnJyA6ICdudWxsIHByb3RvdHlwZSc7XG4gICAgICAgIHZhciBzdHJpbmdUYWcgPSAhaXNQbGFpbk9iamVjdCAmJiB0b1N0cmluZ1RhZyAmJiBPYmplY3Qob2JqKSA9PT0gb2JqICYmIHRvU3RyaW5nVGFnIGluIG9iaiA/ICRzbGljZS5jYWxsKHRvU3RyKG9iaiksIDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyAkam9pbi5jYWxsKCRjb25jYXQuY2FsbChbXSwgc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSksICc6ICcpICsgJ10gJyA6ICcnKTtcbiAgICAgICAgaWYgKHlzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gdGFnICsgJ3t9JzsgfVxuICAgICAgICBpZiAoaW5kZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFnICsgJ3snICsgaW5kZW50ZWRKb2luKHlzLCBpbmRlbnQpICsgJ30nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWcgKyAneyAnICsgJGpvaW4uY2FsbCh5cywgJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwoU3RyaW5nKHMpLCAvXCIvZywgJyZxdW90OycpO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5KG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRGF0ZShvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IERhdGVdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzUmVnRXhwKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Vycm9yKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzU3RyaW5nKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgU3RyaW5nXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc051bWJlcihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IE51bWJlcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNCb29sZWFuKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuXG4vLyBTeW1ib2wgYW5kIEJpZ0ludCBkbyBoYXZlIFN5bWJvbC50b1N0cmluZ1RhZyBieSBzcGVjLCBzbyB0aGF0IGNhbid0IGJlIHVzZWQgdG8gZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlc1xuZnVuY3Rpb24gaXNTeW1ib2wob2JqKSB7XG4gICAgaWYgKGhhc1NoYW1tZWRTeW1ib2xzKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqIGluc3RhbmNlb2YgU3ltYm9sO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8ICFzeW1Ub1N0cmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHN5bVRvU3RyaW5nLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQmlnSW50KG9iaikge1xuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8ICFiaWdJbnRWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgYmlnSW50VmFsdWVPZi5jYWxsKG9iaik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSB8fCBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBrZXkgaW4gdGhpczsgfTtcbmZ1bmN0aW9uIGhhcyhvYmosIGtleSkge1xuICAgIHJldHVybiBoYXNPd24uY2FsbChvYmosIGtleSk7XG59XG5cbmZ1bmN0aW9uIHRvU3RyKG9iaikge1xuICAgIHJldHVybiBvYmplY3RUb1N0cmluZy5jYWxsKG9iaik7XG59XG5cbmZ1bmN0aW9uIG5hbWVPZihmKSB7XG4gICAgaWYgKGYubmFtZSkgeyByZXR1cm4gZi5uYW1lOyB9XG4gICAgdmFyIG0gPSAkbWF0Y2guY2FsbChmdW5jdGlvblRvU3RyaW5nLmNhbGwoZiksIC9eZnVuY3Rpb25cXHMqKFtcXHckXSspLyk7XG4gICAgaWYgKG0pIHsgcmV0dXJuIG1bMV07IH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICAgIGlmICh4cy5pbmRleE9mKSB7IHJldHVybiB4cy5pbmRleE9mKHgpOyB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKHhzW2ldID09PSB4KSB7IHJldHVybiBpOyB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gaXNNYXAoeCkge1xuICAgIGlmICghbWFwU2l6ZSB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBtYXBTaXplLmNhbGwoeCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzZXRTaXplLmNhbGwoeCk7XG4gICAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrTWFwKHgpIHtcbiAgICBpZiAoIXdlYWtNYXBIYXMgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgd2Vha01hcEhhcy5jYWxsKHgsIHdlYWtNYXBIYXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2Vha1NldEhhcy5jYWxsKHgsIHdlYWtTZXRIYXMpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFdlYWtNYXA7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1dlYWtSZWYoeCkge1xuICAgIGlmICghd2Vha1JlZkRlcmVmIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtSZWZEZXJlZi5jYWxsKHgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNTZXQoeCkge1xuICAgIGlmICghc2V0U2l6ZSB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBzZXRTaXplLmNhbGwoeCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtYXBTaXplLmNhbGwoeCk7XG4gICAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrU2V0KHgpIHtcbiAgICBpZiAoIXdlYWtTZXRIYXMgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgd2Vha1NldEhhcy5jYWxsKHgsIHdlYWtTZXRIYXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2Vha01hcEhhcy5jYWxsKHgsIHdlYWtNYXBIYXMpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFdlYWtTZXQ7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnQoeCkge1xuICAgIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgeCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIHgubm9kZU5hbWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB4LmdldEF0dHJpYnV0ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaW5zcGVjdFN0cmluZyhzdHIsIG9wdHMpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA+IG9wdHMubWF4U3RyaW5nTGVuZ3RoKSB7XG4gICAgICAgIHZhciByZW1haW5pbmcgPSBzdHIubGVuZ3RoIC0gb3B0cy5tYXhTdHJpbmdMZW5ndGg7XG4gICAgICAgIHZhciB0cmFpbGVyID0gJy4uLiAnICsgcmVtYWluaW5nICsgJyBtb3JlIGNoYXJhY3RlcicgKyAocmVtYWluaW5nID4gMSA/ICdzJyA6ICcnKTtcbiAgICAgICAgcmV0dXJuIGluc3BlY3RTdHJpbmcoJHNsaWNlLmNhbGwoc3RyLCAwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9ICRyZXBsYWNlLmNhbGwoJHJlcGxhY2UuY2FsbChzdHIsIC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLCAvW1xceDAwLVxceDFmXS9nLCBsb3dieXRlKTtcbiAgICByZXR1cm4gd3JhcFF1b3RlcyhzLCAnc2luZ2xlJywgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIGxvd2J5dGUoYykge1xuICAgIHZhciBuID0gYy5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB4ID0ge1xuICAgICAgICA4OiAnYicsXG4gICAgICAgIDk6ICd0JyxcbiAgICAgICAgMTA6ICduJyxcbiAgICAgICAgMTI6ICdmJyxcbiAgICAgICAgMTM6ICdyJ1xuICAgIH1bbl07XG4gICAgaWYgKHgpIHsgcmV0dXJuICdcXFxcJyArIHg7IH1cbiAgICByZXR1cm4gJ1xcXFx4JyArIChuIDwgMHgxMCA/ICcwJyA6ICcnKSArICR0b1VwcGVyQ2FzZS5jYWxsKG4udG9TdHJpbmcoMTYpKTtcbn1cblxuZnVuY3Rpb24gbWFya0JveGVkKHN0cikge1xuICAgIHJldHVybiAnT2JqZWN0KCcgKyBzdHIgKyAnKSc7XG59XG5cbmZ1bmN0aW9uIHdlYWtDb2xsZWN0aW9uT2YodHlwZSkge1xuICAgIHJldHVybiB0eXBlICsgJyB7ID8gfSc7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZih0eXBlLCBzaXplLCBlbnRyaWVzLCBpbmRlbnQpIHtcbiAgICB2YXIgam9pbmVkRW50cmllcyA9IGluZGVudCA/IGluZGVudGVkSm9pbihlbnRyaWVzLCBpbmRlbnQpIDogJGpvaW4uY2FsbChlbnRyaWVzLCAnLCAnKTtcbiAgICByZXR1cm4gdHlwZSArICcgKCcgKyBzaXplICsgJykgeycgKyBqb2luZWRFbnRyaWVzICsgJ30nO1xufVxuXG5mdW5jdGlvbiBzaW5nbGVMaW5lVmFsdWVzKHhzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5kZXhPZih4c1tpXSwgJ1xcbicpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKSB7XG4gICAgdmFyIGJhc2VJbmRlbnQ7XG4gICAgaWYgKG9wdHMuaW5kZW50ID09PSAnXFx0Jykge1xuICAgICAgICBiYXNlSW5kZW50ID0gJ1xcdCc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0cy5pbmRlbnQgPT09ICdudW1iZXInICYmIG9wdHMuaW5kZW50ID4gMCkge1xuICAgICAgICBiYXNlSW5kZW50ID0gJGpvaW4uY2FsbChBcnJheShvcHRzLmluZGVudCArIDEpLCAnICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiAkam9pbi5jYWxsKEFycmF5KGRlcHRoICsgMSksIGJhc2VJbmRlbnQpXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaW5kZW50ZWRKb2luKHhzLCBpbmRlbnQpIHtcbiAgICBpZiAoeHMubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuICAgIHZhciBsaW5lSm9pbmVyID0gJ1xcbicgKyBpbmRlbnQucHJldiArIGluZGVudC5iYXNlO1xuICAgIHJldHVybiBsaW5lSm9pbmVyICsgJGpvaW4uY2FsbCh4cywgJywnICsgbGluZUpvaW5lcikgKyAnXFxuJyArIGluZGVudC5wcmV2O1xufVxuXG5mdW5jdGlvbiBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCkge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkob2JqKTtcbiAgICB2YXIgeHMgPSBbXTtcbiAgICBpZiAoaXNBcnIpIHtcbiAgICAgICAgeHMubGVuZ3RoID0gb2JqLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHhzW2ldID0gaGFzKG9iaiwgaSkgPyBpbnNwZWN0KG9ialtpXSwgb2JqKSA6ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBzeW1zID0gdHlwZW9mIGdPUFMgPT09ICdmdW5jdGlvbicgPyBnT1BTKG9iaikgOiBbXTtcbiAgICB2YXIgc3ltTWFwO1xuICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scykge1xuICAgICAgICBzeW1NYXAgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzeW1zLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBzeW1NYXBbJyQnICsgc3ltc1trXV0gPSBzeW1zW2tdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgIGlmICghaGFzKG9iaiwga2V5KSkgeyBjb250aW51ZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICBpZiAoaXNBcnIgJiYgU3RyaW5nKE51bWJlcihrZXkpKSA9PT0ga2V5ICYmIGtleSA8IG9iai5sZW5ndGgpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGhhc1NoYW1tZWRTeW1ib2xzICYmIHN5bU1hcFsnJCcgKyBrZXldIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRvIHByZXZlbnQgc2hhbW1lZCBTeW1ib2xzLCB3aGljaCBhcmUgc3RvcmVkIGFzIHN0cmluZ3MsIGZyb20gYmVpbmcgaW5jbHVkZWQgaW4gdGhlIHN0cmluZyBrZXkgc2VjdGlvblxuICAgICAgICAgICAgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoJHRlc3QuY2FsbCgvW15cXHckXS8sIGtleSkpIHtcbiAgICAgICAgICAgIHhzLnB1c2goaW5zcGVjdChrZXksIG9iaikgKyAnOiAnICsgaW5zcGVjdChvYmpba2V5XSwgb2JqKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4cy5wdXNoKGtleSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGdPUFMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzeW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoaXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW1zW2pdKSkge1xuICAgICAgICAgICAgICAgIHhzLnB1c2goJ1snICsgaW5zcGVjdChzeW1zW2pdKSArICddOiAnICsgaW5zcGVjdChvYmpbc3ltc1tqXV0sIG9iaikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB4cztcbn1cbiIsIi8qIGdsb2JhbCBNdXRhdGlvbk9ic2VydmVyICovXG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCdnbG9iYWwvZG9jdW1lbnQnKVxudmFyIHdpbmRvdyA9IHJlcXVpcmUoJ2dsb2JhbC93aW5kb3cnKVxudmFyIHdhdGNoID0gT2JqZWN0LmNyZWF0ZShudWxsKVxudmFyIEtFWV9JRCA9ICdvbmxvYWRpZCcgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKVxudmFyIEtFWV9BVFRSID0gJ2RhdGEtJyArIEtFWV9JRFxudmFyIElOREVYID0gMFxuXG5pZiAod2luZG93ICYmIHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKSB7XG4gIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMod2F0Y2gpLmxlbmd0aCA8IDEpIHJldHVyblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobXV0YXRpb25zW2ldLmF0dHJpYnV0ZU5hbWUgPT09IEtFWV9BVFRSKSB7XG4gICAgICAgIGVhY2hBdHRyKG11dGF0aW9uc1tpXSwgdHVybm9uLCB0dXJub2ZmKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgZWFjaE11dGF0aW9uKG11dGF0aW9uc1tpXS5yZW1vdmVkTm9kZXMsIGZ1bmN0aW9uIChpbmRleCwgZWwpIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoZWwpKSB0dXJub2ZmKGluZGV4LCBlbClcbiAgICAgIH0pXG4gICAgICBlYWNoTXV0YXRpb24obXV0YXRpb25zW2ldLmFkZGVkTm9kZXMsIGZ1bmN0aW9uIChpbmRleCwgZWwpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyhlbCkpIHR1cm5vbihpbmRleCwgZWwpXG4gICAgICB9KVxuICAgIH1cbiAgfSlcblxuICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwge1xuICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICBzdWJ0cmVlOiB0cnVlLFxuICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgYXR0cmlidXRlT2xkVmFsdWU6IHRydWUsXG4gICAgYXR0cmlidXRlRmlsdGVyOiBbS0VZX0FUVFJdXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gb25sb2FkIChlbCwgb24sIG9mZiwgY2FsbGVyKSB7XG4gIG9uID0gb24gfHwgZnVuY3Rpb24gKCkge31cbiAgb2ZmID0gb2ZmIHx8IGZ1bmN0aW9uICgpIHt9XG4gIGVsLnNldEF0dHJpYnV0ZShLRVlfQVRUUiwgJ28nICsgSU5ERVgpXG4gIHdhdGNoWydvJyArIElOREVYXSA9IFtvbiwgb2ZmLCAwLCBjYWxsZXIgfHwgb25sb2FkLmNhbGxlcl1cbiAgSU5ERVggKz0gMVxuICByZXR1cm4gZWxcbn1cblxubW9kdWxlLmV4cG9ydHMuS0VZX0FUVFIgPSBLRVlfQVRUUlxubW9kdWxlLmV4cG9ydHMuS0VZX0lEID0gS0VZX0lEXG5cbmZ1bmN0aW9uIHR1cm5vbiAoaW5kZXgsIGVsKSB7XG4gIGlmICh3YXRjaFtpbmRleF1bMF0gJiYgd2F0Y2hbaW5kZXhdWzJdID09PSAwKSB7XG4gICAgd2F0Y2hbaW5kZXhdWzBdKGVsKVxuICAgIHdhdGNoW2luZGV4XVsyXSA9IDFcbiAgfVxufVxuXG5mdW5jdGlvbiB0dXJub2ZmIChpbmRleCwgZWwpIHtcbiAgaWYgKHdhdGNoW2luZGV4XVsxXSAmJiB3YXRjaFtpbmRleF1bMl0gPT09IDEpIHtcbiAgICB3YXRjaFtpbmRleF1bMV0oZWwpXG4gICAgd2F0Y2hbaW5kZXhdWzJdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIGVhY2hBdHRyIChtdXRhdGlvbiwgb24sIG9mZikge1xuICB2YXIgbmV3VmFsdWUgPSBtdXRhdGlvbi50YXJnZXQuZ2V0QXR0cmlidXRlKEtFWV9BVFRSKVxuICBpZiAoc2FtZU9yaWdpbihtdXRhdGlvbi5vbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgd2F0Y2hbbmV3VmFsdWVdID0gd2F0Y2hbbXV0YXRpb24ub2xkVmFsdWVdXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHdhdGNoW211dGF0aW9uLm9sZFZhbHVlXSkge1xuICAgIG9mZihtdXRhdGlvbi5vbGRWYWx1ZSwgbXV0YXRpb24udGFyZ2V0KVxuICB9XG4gIGlmICh3YXRjaFtuZXdWYWx1ZV0pIHtcbiAgICBvbihuZXdWYWx1ZSwgbXV0YXRpb24udGFyZ2V0KVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICBpZiAoIW9sZFZhbHVlIHx8ICFuZXdWYWx1ZSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB3YXRjaFtvbGRWYWx1ZV1bM10gPT09IHdhdGNoW25ld1ZhbHVlXVszXVxufVxuXG5mdW5jdGlvbiBlYWNoTXV0YXRpb24gKG5vZGVzLCBmbikge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHdhdGNoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5vZGVzW2ldICYmIG5vZGVzW2ldLmdldEF0dHJpYnV0ZSAmJiBub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoS0VZX0FUVFIpKSB7XG4gICAgICB2YXIgb25sb2FkaWQgPSBub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoS0VZX0FUVFIpXG4gICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKG9ubG9hZGlkID09PSBrKSB7XG4gICAgICAgICAgZm4oaywgbm9kZXNbaV0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChub2Rlc1tpXSAmJiBub2Rlc1tpXS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVhY2hNdXRhdGlvbihub2Rlc1tpXS5jaGlsZE5vZGVzLCBmbilcbiAgICB9XG4gIH1cbn1cbiIsInZhciBzY2hlZHVsZXIgPSByZXF1aXJlKCduYW5vc2NoZWR1bGVyJykoKVxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbnZhciBlbnRyeVR5cGVzID0gW1xuICAnZnJhbWUnLFxuICAnbWVhc3VyZScsXG4gICduYXZpZ2F0aW9uJyxcbiAgJ3Jlc291cmNlJyxcbiAgJ2xvbmd0YXNrJ1xuXVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9uUGVyZm9ybWFuY2VcblxuZnVuY3Rpb24gb25QZXJmb3JtYW5jZSAoY2IpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ29uLXBlcmZvcm1hbmNlOiBjYiBzaG91bGQgYmUgdHlwZSBmdW5jdGlvbicpXG5cbiAgdmFyIFBlcmZvcm1hbmNlT2JzZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuUGVyZm9ybWFuY2VPYnNlcnZlclxuICBpZiAoIVBlcmZvcm1hbmNlT2JzZXJ2ZXIpIHJldHVyblxuXG4gIC8vIEVuYWJsZSBzaW5nbGV0b24uXG4gIGlmICh3aW5kb3cuX29ucGVyZm9ybWFuY2UpIHtcbiAgICB3aW5kb3cuX29ucGVyZm9ybWFuY2UucHVzaChjYilcbiAgICByZXR1cm4gc3RvcFxuICB9XG5cbiAgd2luZG93Ll9vbnBlcmZvcm1hbmNlID0gW2NiXVxuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihwYXJzZUVudHJpZXMpXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIHBhcnNlRW50cmllcyh3aW5kb3cucGVyZm9ybWFuY2UpXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh7IGVudHJ5VHlwZXM6IGVudHJ5VHlwZXMgfSlcbiAgfSwgMClcblxuICByZXR1cm4gc3RvcFxuXG4gIGZ1bmN0aW9uIHN0b3AgKCkge1xuICAgIHdpbmRvdy5fb25wZXJmb3JtYW5jZS5zcGxpY2Uod2luZG93Ll9vbnBlcmZvcm1hbmNlLmluZGV4T2YoY2IpLCAxKVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VFbnRyaWVzIChsaXN0KSB7XG4gICAgbGlzdC5nZXRFbnRyaWVzKCkuZm9yRWFjaChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgIHNjaGVkdWxlci5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2xlYXIoZW50cnkpXG4gICAgICAgIHdpbmRvdy5fb25wZXJmb3JtYW5jZS5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgIGNiKGVudHJ5KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLy8gTmF2aWdhdGlvbiwgbG9uZ3Rhc2sgYW5kIGZyYW1lIGRvbid0IGhhdmUgYSBjbGVhciBtZXRob2QgKHlldClcbiAgLy8gUmVzb3VyY2UgdGltaW5ncyBjYW4gb25seSBiZSBjbGVhcmVkIGluIGJ1bGtcbiAgLy8gc2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGVyZm9ybWFuY2UvY2xlYXJNZWFzdXJlc1xuICBmdW5jdGlvbiBjbGVhciAoZW50cnkpIHtcbiAgICB2YXIgdHlwZSA9IGVudHJ5LmVudHJ5VHlwZVxuICAgIGlmICh0eXBlID09PSAnbWVhc3VyZScpIHdpbmRvdy5wZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzKGVudHJ5Lm5hbWUpXG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3Jlc291cmNlJykgd2luZG93LnBlcmZvcm1hbmNlLmNsZWFyUmVzb3VyY2VUaW1pbmdzKClcbiAgfVxufVxuIiwiLyoqXG4gKiBDb21waWxlcyBhIHF1ZXJ5c3RyaW5nXG4gKiBSZXR1cm5zIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHN0ciA9ICcnO1xuXG4gIGZvciAodmFyIGkgaW4gb2JqKSB7XG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgaWYgKHN0ci5sZW5ndGgpIHN0ciArPSAnJic7XG4gICAgICBzdHIgKz0gZW5jb2RlVVJJQ29tcG9uZW50KGkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtpXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cbi8qKlxuICogUGFyc2VzIGEgc2ltcGxlIHF1ZXJ5c3RyaW5nIGludG8gYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHFzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uKHFzKXtcbiAgdmFyIHFyeSA9IHt9O1xuICB2YXIgcGFpcnMgPSBxcy5zcGxpdCgnJicpO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHBhaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBwYWlyID0gcGFpcnNbaV0uc3BsaXQoJz0nKTtcbiAgICBxcnlbZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMF0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyWzFdKTtcbiAgfVxuICByZXR1cm4gcXJ5O1xufTtcbiIsIi8qKlxuICogUGFyc2VzIGFuIFVSSVxuICpcbiAqIEBhdXRob3IgU3RldmVuIExldml0aGFuIDxzdGV2ZW5sZXZpdGhhbi5jb20+IChNSVQgbGljZW5zZSlcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbnZhciByZSA9IC9eKD86KD8hW146QF0rOlteOkBcXC9dKkApKGh0dHB8aHR0cHN8d3N8d3NzKTpcXC9cXC8pPygoPzooKFteOkBdKikoPzo6KFteOkBdKikpPyk/QCk/KCg/OlthLWYwLTldezAsNH06KXsyLDd9W2EtZjAtOV17MCw0fXxbXjpcXC8/I10qKSg/OjooXFxkKikpPykoKChcXC8oPzpbXj8jXSg/IVtePyNcXC9dKlxcLltePyNcXC8uXSsoPzpbPyNdfCQpKSkqXFwvPyk/KFtePyNcXC9dKikpKD86XFw/KFteI10qKSk/KD86IyguKikpPykvO1xuXG52YXIgcGFydHMgPSBbXG4gICAgJ3NvdXJjZScsICdwcm90b2NvbCcsICdhdXRob3JpdHknLCAndXNlckluZm8nLCAndXNlcicsICdwYXNzd29yZCcsICdob3N0JywgJ3BvcnQnLCAncmVsYXRpdmUnLCAncGF0aCcsICdkaXJlY3RvcnknLCAnZmlsZScsICdxdWVyeScsICdhbmNob3InXG5dO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNldXJpKHN0cikge1xuICAgIHZhciBzcmMgPSBzdHIsXG4gICAgICAgIGIgPSBzdHIuaW5kZXhPZignWycpLFxuICAgICAgICBlID0gc3RyLmluZGV4T2YoJ10nKTtcblxuICAgIGlmIChiICE9IC0xICYmIGUgIT0gLTEpIHtcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBiKSArIHN0ci5zdWJzdHJpbmcoYiwgZSkucmVwbGFjZSgvOi9nLCAnOycpICsgc3RyLnN1YnN0cmluZyhlLCBzdHIubGVuZ3RoKTtcbiAgICB9XG5cbiAgICB2YXIgbSA9IHJlLmV4ZWMoc3RyIHx8ICcnKSxcbiAgICAgICAgdXJpID0ge30sXG4gICAgICAgIGkgPSAxNDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdXJpW3BhcnRzW2ldXSA9IG1baV0gfHwgJyc7XG4gICAgfVxuXG4gICAgaWYgKGIgIT0gLTEgJiYgZSAhPSAtMSkge1xuICAgICAgICB1cmkuc291cmNlID0gc3JjO1xuICAgICAgICB1cmkuaG9zdCA9IHVyaS5ob3N0LnN1YnN0cmluZygxLCB1cmkuaG9zdC5sZW5ndGggLSAxKS5yZXBsYWNlKC87L2csICc6Jyk7XG4gICAgICAgIHVyaS5hdXRob3JpdHkgPSB1cmkuYXV0aG9yaXR5LnJlcGxhY2UoJ1snLCAnJykucmVwbGFjZSgnXScsICcnKS5yZXBsYWNlKC87L2csICc6Jyk7XG4gICAgICAgIHVyaS5pcHY2dXJpID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB1cmkucGF0aE5hbWVzID0gcGF0aE5hbWVzKHVyaSwgdXJpWydwYXRoJ10pO1xuICAgIHVyaS5xdWVyeUtleSA9IHF1ZXJ5S2V5KHVyaSwgdXJpWydxdWVyeSddKTtcblxuICAgIHJldHVybiB1cmk7XG59O1xuXG5mdW5jdGlvbiBwYXRoTmFtZXMob2JqLCBwYXRoKSB7XG4gICAgdmFyIHJlZ3ggPSAvXFwvezIsOX0vZyxcbiAgICAgICAgbmFtZXMgPSBwYXRoLnJlcGxhY2UocmVneCwgXCIvXCIpLnNwbGl0KFwiL1wiKTtcblxuICAgIGlmIChwYXRoLnN1YnN0cigwLCAxKSA9PSAnLycgfHwgcGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbmFtZXMuc3BsaWNlKDAsIDEpO1xuICAgIH1cbiAgICBpZiAocGF0aC5zdWJzdHIocGF0aC5sZW5ndGggLSAxLCAxKSA9PSAnLycpIHtcbiAgICAgICAgbmFtZXMuc3BsaWNlKG5hbWVzLmxlbmd0aCAtIDEsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBuYW1lcztcbn1cblxuZnVuY3Rpb24gcXVlcnlLZXkodXJpLCBxdWVyeSkge1xuICAgIHZhciBkYXRhID0ge307XG5cbiAgICBxdWVyeS5yZXBsYWNlKC8oPzpefCYpKFteJj1dKik9PyhbXiZdKikvZywgZnVuY3Rpb24gKCQwLCAkMSwgJDIpIHtcbiAgICAgICAgaWYgKCQxKSB7XG4gICAgICAgICAgICBkYXRhWyQxXSA9ICQyO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcGx1Y2tlclxuXG5mdW5jdGlvbiBwbHVja2VyKHBhdGgsIG9iamVjdCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+PSAyXG4gICAgPyBwbHVjayhwYXRoKShvYmplY3QpXG4gICAgOiBwbHVjayhwYXRoKVxufVxuXG5mdW5jdGlvbiBwbHVjayhwYXRoKSB7XG4gIHBhdGggPSB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZydcbiAgICA/IFN0cmluZyhwYXRoKS50cmltKCkuc3BsaXQoJy4nKVxuICAgIDogcGF0aFxuXG4gIGlmIChwYXRoLmxlbmd0aCA8IDIpIHtcbiAgICBwYXRoID0gcGF0aFswXVxuICAgIHJldHVybiBwbHVja1NpbmdsZVxuICB9IGVsc2Uge1xuICAgIHZhciBsID0gcGF0aC5sZW5ndGhcbiAgICByZXR1cm4gcGx1Y2tQYXRoXG4gIH1cblxuICBmdW5jdGlvbiBwbHVja1NpbmdsZShvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0W3BhdGhdXG4gIH1cblxuICBmdW5jdGlvbiBwbHVja1BhdGgob2JqZWN0KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAndW5kZWZpbmVkJykgYnJlYWtcblxuICAgICAgb2JqZWN0ID0gb2JqZWN0W3BhdGhbaV1dXG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdFxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHByZXR0aWVyQnl0ZXNcblxuZnVuY3Rpb24gcHJldHRpZXJCeXRlcyAobnVtKSB7XG4gIGlmICh0eXBlb2YgbnVtICE9PSAnbnVtYmVyJyB8fCBpc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBudW1iZXIsIGdvdCAnICsgdHlwZW9mIG51bSlcbiAgfVxuXG4gIHZhciBuZWcgPSBudW0gPCAwXG4gIHZhciB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddXG5cbiAgaWYgKG5lZykge1xuICAgIG51bSA9IC1udW1cbiAgfVxuXG4gIGlmIChudW0gPCAxKSB7XG4gICAgcmV0dXJuIChuZWcgPyAnLScgOiAnJykgKyBudW0gKyAnIEInXG4gIH1cblxuICB2YXIgZXhwb25lbnQgPSBNYXRoLm1pbihNYXRoLmZsb29yKE1hdGgubG9nKG51bSkgLyBNYXRoLmxvZygxMDAwKSksIHVuaXRzLmxlbmd0aCAtIDEpXG4gIG51bSA9IE51bWJlcihudW0gLyBNYXRoLnBvdygxMDAwLCBleHBvbmVudCkpXG4gIHZhciB1bml0ID0gdW5pdHNbZXhwb25lbnRdXG5cbiAgaWYgKG51bSA+PSAxMCB8fCBudW0gJSAxID09PSAwKSB7XG4gICAgLy8gRG8gbm90IHNob3cgZGVjaW1hbHMgd2hlbiB0aGUgbnVtYmVyIGlzIHR3by1kaWdpdCwgb3IgaWYgdGhlIG51bWJlciBoYXMgbm9cbiAgICAvLyBkZWNpbWFsIGNvbXBvbmVudC5cbiAgICByZXR1cm4gKG5lZyA/ICctJyA6ICcnKSArIG51bS50b0ZpeGVkKDApICsgJyAnICsgdW5pdFxuICB9IGVsc2Uge1xuICAgIHJldHVybiAobmVnID8gJy0nIDogJycpICsgbnVtLnRvRml4ZWQoMSkgKyAnICcgKyB1bml0XG4gIH1cbn1cbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xudmFyIHBlcmNlbnRUd2VudGllcyA9IC8lMjAvZztcblxudmFyIEZvcm1hdCA9IHtcbiAgICBSRkMxNzM4OiAnUkZDMTczOCcsXG4gICAgUkZDMzk4NjogJ1JGQzM5ODYnXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAnZGVmYXVsdCc6IEZvcm1hdC5SRkMzOTg2LFxuICAgIGZvcm1hdHRlcnM6IHtcbiAgICAgICAgUkZDMTczODogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZS5jYWxsKHZhbHVlLCBwZXJjZW50VHdlbnRpZXMsICcrJyk7XG4gICAgICAgIH0sXG4gICAgICAgIFJGQzM5ODY6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFJGQzE3Mzg6IEZvcm1hdC5SRkMxNzM4LFxuICAgIFJGQzM5ODY6IEZvcm1hdC5SRkMzOTg2XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9zdHJpbmdpZnknKTtcbnZhciBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGZvcm1hdHM6IGZvcm1hdHMsXG4gICAgcGFyc2U6IHBhcnNlLFxuICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gICAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgICBhbGxvd1Byb3RvdHlwZXM6IGZhbHNlLFxuICAgIGFsbG93U3BhcnNlOiBmYWxzZSxcbiAgICBhcnJheUxpbWl0OiAyMCxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgY29tbWE6IGZhbHNlLFxuICAgIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBkZXB0aDogNSxcbiAgICBpZ25vcmVRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiBmYWxzZSxcbiAgICBwYXJhbWV0ZXJMaW1pdDogMTAwMCxcbiAgICBwYXJzZUFycmF5czogdHJ1ZSxcbiAgICBwbGFpbk9iamVjdHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBpbnRlcnByZXROdW1lcmljRW50aXRpZXMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mIyhcXGQrKTsvZywgZnVuY3Rpb24gKCQwLCBudW1iZXJTdHIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobnVtYmVyU3RyLCAxMCkpO1xuICAgIH0pO1xufTtcblxudmFyIHBhcnNlQXJyYXlWYWx1ZSA9IGZ1bmN0aW9uICh2YWwsIG9wdGlvbnMpIHtcbiAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIG9wdGlvbnMuY29tbWEgJiYgdmFsLmluZGV4T2YoJywnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB2YWwuc3BsaXQoJywnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xufTtcblxuLy8gVGhpcyBpcyB3aGF0IGJyb3dzZXJzIHdpbGwgc3VibWl0IHdoZW4gdGhlIOKckyBjaGFyYWN0ZXIgb2NjdXJzIGluIGFuXG4vLyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgYm9keSBhbmQgdGhlIGVuY29kaW5nIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmdcbi8vIHRoZSBmb3JtIGlzIGlzby04ODU5LTEsIG9yIHdoZW4gdGhlIHN1Ym1pdHRlZCBmb3JtIGhhcyBhbiBhY2NlcHQtY2hhcnNldFxuLy8gYXR0cmlidXRlIG9mIGlzby04ODU5LTEuIFByZXN1bWFibHkgYWxzbyB3aXRoIG90aGVyIGNoYXJzZXRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbi8vIHRoZSDinJMgY2hhcmFjdGVyLCBzdWNoIGFzIHVzLWFzY2lpLlxudmFyIGlzb1NlbnRpbmVsID0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0InOyAvLyBlbmNvZGVVUklDb21wb25lbnQoJyYjMTAwMDM7JylcblxuLy8gVGhlc2UgYXJlIHRoZSBwZXJjZW50LWVuY29kZWQgdXRmLTggb2N0ZXRzIHJlcHJlc2VudGluZyBhIGNoZWNrbWFyaywgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0IGFjdHVhbGx5IGlzIHV0Zi04IGVuY29kZWQuXG52YXIgY2hhcnNldFNlbnRpbmVsID0gJ3V0Zjg9JUUyJTlDJTkzJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCfinJMnKVxuXG52YXIgcGFyc2VWYWx1ZXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nVmFsdWVzKHN0ciwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuXG4gICAgdmFyIGNsZWFuU3RyID0gb3B0aW9ucy5pZ25vcmVRdWVyeVByZWZpeCA/IHN0ci5yZXBsYWNlKC9eXFw/LywgJycpIDogc3RyO1xuICAgIHZhciBsaW1pdCA9IG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09IEluZmluaXR5ID8gdW5kZWZpbmVkIDogb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdDtcbiAgICB2YXIgcGFydHMgPSBjbGVhblN0ci5zcGxpdChvcHRpb25zLmRlbGltaXRlciwgbGltaXQpO1xuICAgIHZhciBza2lwSW5kZXggPSAtMTsgLy8gS2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgdXRmOCBzZW50aW5lbCB3YXMgZm91bmRcbiAgICB2YXIgaTtcblxuICAgIHZhciBjaGFyc2V0ID0gb3B0aW9ucy5jaGFyc2V0O1xuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKCd1dGY4PScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzW2ldID09PSBjaGFyc2V0U2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICd1dGYtOCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0c1tpXSA9PT0gaXNvU2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICdpc28tODg1OS0xJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2tpcEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBpID0gcGFydHMubGVuZ3RoOyAvLyBUaGUgZXNsaW50IHNldHRpbmdzIGRvIG5vdCBhbGxvdyBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoaSA9PT0gc2tpcEluZGV4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICAgIHZhciBicmFja2V0RXF1YWxzUG9zID0gcGFydC5pbmRleE9mKCddPScpO1xuICAgICAgICB2YXIgcG9zID0gYnJhY2tldEVxdWFsc1BvcyA9PT0gLTEgPyBwYXJ0LmluZGV4T2YoJz0nKSA6IGJyYWNrZXRFcXVhbHNQb3MgKyAxO1xuXG4gICAgICAgIHZhciBrZXksIHZhbDtcbiAgICAgICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAna2V5Jyk7XG4gICAgICAgICAgICB2YWwgPSBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA/IG51bGwgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKDAsIHBvcyksIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICdrZXknKTtcbiAgICAgICAgICAgIHZhbCA9IHV0aWxzLm1heWJlTWFwKFxuICAgICAgICAgICAgICAgIHBhcnNlQXJyYXlWYWx1ZShwYXJ0LnNsaWNlKHBvcyArIDEpLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZW5jb2RlZFZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5kZWNvZGVyKGVuY29kZWRWYWwsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsICYmIG9wdGlvbnMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzICYmIGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgdmFsID0gaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzKHZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydC5pbmRleE9mKCdbXT0nKSA+IC0xKSB7XG4gICAgICAgICAgICB2YWwgPSBpc0FycmF5KHZhbCkgPyBbdmFsXSA6IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdXRpbHMuY29tYmluZShvYmpba2V5XSwgdmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBwYXJzZU9iamVjdCA9IGZ1bmN0aW9uIChjaGFpbiwgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpIHtcbiAgICB2YXIgbGVhZiA9IHZhbHVlc1BhcnNlZCA/IHZhbCA6IHBhcnNlQXJyYXlWYWx1ZSh2YWwsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgaSA9IGNoYWluLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBvYmo7XG4gICAgICAgIHZhciByb290ID0gY2hhaW5baV07XG5cbiAgICAgICAgaWYgKHJvb3QgPT09ICdbXScgJiYgb3B0aW9ucy5wYXJzZUFycmF5cykge1xuICAgICAgICAgICAgb2JqID0gW10uY29uY2F0KGxlYWYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgICAgICAgICB2YXIgY2xlYW5Sb290ID0gcm9vdC5jaGFyQXQoMCkgPT09ICdbJyAmJiByb290LmNoYXJBdChyb290Lmxlbmd0aCAtIDEpID09PSAnXScgPyByb290LnNsaWNlKDEsIC0xKSA6IHJvb3Q7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBwYXJzZUludChjbGVhblJvb3QsIDEwKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5wYXJzZUFycmF5cyAmJiBjbGVhblJvb3QgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgb2JqID0geyAwOiBsZWFmIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICFpc05hTihpbmRleClcbiAgICAgICAgICAgICAgICAmJiByb290ICE9PSBjbGVhblJvb3RcbiAgICAgICAgICAgICAgICAmJiBTdHJpbmcoaW5kZXgpID09PSBjbGVhblJvb3RcbiAgICAgICAgICAgICAgICAmJiBpbmRleCA+PSAwXG4gICAgICAgICAgICAgICAgJiYgKG9wdGlvbnMucGFyc2VBcnJheXMgJiYgaW5kZXggPD0gb3B0aW9ucy5hcnJheUxpbWl0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gW107XG4gICAgICAgICAgICAgICAgb2JqW2luZGV4XSA9IGxlYWY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsZWFuUm9vdCAhPT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgICAgICAgICBvYmpbY2xlYW5Sb290XSA9IGxlYWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZWFmID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFmO1xufTtcblxudmFyIHBhcnNlS2V5cyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdLZXlzKGdpdmVuS2V5LCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCkge1xuICAgIGlmICghZ2l2ZW5LZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyYW5zZm9ybSBkb3Qgbm90YXRpb24gdG8gYnJhY2tldCBub3RhdGlvblxuICAgIHZhciBrZXkgPSBvcHRpb25zLmFsbG93RG90cyA/IGdpdmVuS2V5LnJlcGxhY2UoL1xcLihbXi5bXSspL2csICdbJDFdJykgOiBnaXZlbktleTtcblxuICAgIC8vIFRoZSByZWdleCBjaHVua3NcblxuICAgIHZhciBicmFja2V0cyA9IC8oXFxbW15bXFxdXSpdKS87XG4gICAgdmFyIGNoaWxkID0gLyhcXFtbXltcXF1dKl0pL2c7XG5cbiAgICAvLyBHZXQgdGhlIHBhcmVudFxuXG4gICAgdmFyIHNlZ21lbnQgPSBvcHRpb25zLmRlcHRoID4gMCAmJiBicmFja2V0cy5leGVjKGtleSk7XG4gICAgdmFyIHBhcmVudCA9IHNlZ21lbnQgPyBrZXkuc2xpY2UoMCwgc2VnbWVudC5pbmRleCkgOiBrZXk7XG5cbiAgICAvLyBTdGFzaCB0aGUgcGFyZW50IGlmIGl0IGV4aXN0c1xuXG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGFyZW4ndCB1c2luZyBwbGFpbiBvYmplY3RzLCBvcHRpb25hbGx5IHByZWZpeCBrZXlzIHRoYXQgd291bGQgb3ZlcndyaXRlIG9iamVjdCBwcm90b3R5cGUgcHJvcGVydGllc1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzLnB1c2gocGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggY2hpbGRyZW4gYXBwZW5kaW5nIHRvIHRoZSBhcnJheSB1bnRpbCB3ZSBoaXQgZGVwdGhcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAob3B0aW9ucy5kZXB0aCA+IDAgJiYgKHNlZ21lbnQgPSBjaGlsZC5leGVjKGtleSkpICE9PSBudWxsICYmIGkgPCBvcHRpb25zLmRlcHRoKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzZWdtZW50WzFdLnNsaWNlKDEsIC0xKSkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5wdXNoKHNlZ21lbnRbMV0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGp1c3QgYWRkIHdoYXRldmVyIGlzIGxlZnRcblxuICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIGtleXMucHVzaCgnWycgKyBrZXkuc2xpY2Uoc2VnbWVudC5pbmRleCkgKyAnXScpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU9iamVjdChrZXlzLCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCk7XG59O1xuXG52YXIgbm9ybWFsaXplUGFyc2VPcHRpb25zID0gZnVuY3Rpb24gbm9ybWFsaXplUGFyc2VPcHRpb25zKG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmRlY29kZXIgIT09IG51bGwgJiYgb3B0cy5kZWNvZGVyICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdHMuZGVjb2RlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEZWNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5jaGFyc2V0ICE9PSAndW5kZWZpbmVkJyAmJiBvcHRzLmNoYXJzZXQgIT09ICd1dGYtOCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNoYXJzZXQgb3B0aW9uIG11c3QgYmUgZWl0aGVyIHV0Zi04LCBpc28tODg1OS0xLCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgdmFyIGNoYXJzZXQgPSB0eXBlb2Ygb3B0cy5jaGFyc2V0ID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmNoYXJzZXQgOiBvcHRzLmNoYXJzZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhbGxvd0RvdHM6IHR5cGVvZiBvcHRzLmFsbG93RG90cyA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5hbGxvd0RvdHMgOiAhIW9wdHMuYWxsb3dEb3RzLFxuICAgICAgICBhbGxvd1Byb3RvdHlwZXM6IHR5cGVvZiBvcHRzLmFsbG93UHJvdG90eXBlcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hbGxvd1Byb3RvdHlwZXMgOiBkZWZhdWx0cy5hbGxvd1Byb3RvdHlwZXMsXG4gICAgICAgIGFsbG93U3BhcnNlOiB0eXBlb2Ygb3B0cy5hbGxvd1NwYXJzZSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hbGxvd1NwYXJzZSA6IGRlZmF1bHRzLmFsbG93U3BhcnNlLFxuICAgICAgICBhcnJheUxpbWl0OiB0eXBlb2Ygb3B0cy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgY29tbWE6IHR5cGVvZiBvcHRzLmNvbW1hID09PSAnYm9vbGVhbicgPyBvcHRzLmNvbW1hIDogZGVmYXVsdHMuY29tbWEsXG4gICAgICAgIGRlY29kZXI6IHR5cGVvZiBvcHRzLmRlY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRlY29kZXIgOiBkZWZhdWx0cy5kZWNvZGVyLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3N0cmluZycgfHwgdXRpbHMuaXNSZWdFeHAob3B0cy5kZWxpbWl0ZXIpID8gb3B0cy5kZWxpbWl0ZXIgOiBkZWZhdWx0cy5kZWxpbWl0ZXIsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvbiwgbm8tZXh0cmEtcGFyZW5zXG4gICAgICAgIGRlcHRoOiAodHlwZW9mIG9wdHMuZGVwdGggPT09ICdudW1iZXInIHx8IG9wdHMuZGVwdGggPT09IGZhbHNlKSA/ICtvcHRzLmRlcHRoIDogZGVmYXVsdHMuZGVwdGgsXG4gICAgICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiBvcHRzLmlnbm9yZVF1ZXJ5UHJlZml4ID09PSB0cnVlLFxuICAgICAgICBpbnRlcnByZXROdW1lcmljRW50aXRpZXM6IHR5cGVvZiBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgOiBkZWZhdWx0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMsXG4gICAgICAgIHBhcmFtZXRlckxpbWl0OiB0eXBlb2Ygb3B0cy5wYXJhbWV0ZXJMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRzLnBhcmFtZXRlckxpbWl0IDogZGVmYXVsdHMucGFyYW1ldGVyTGltaXQsXG4gICAgICAgIHBhcnNlQXJyYXlzOiBvcHRzLnBhcnNlQXJyYXlzICE9PSBmYWxzZSxcbiAgICAgICAgcGxhaW5PYmplY3RzOiB0eXBlb2Ygb3B0cy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdHMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cyk7XG5cbiAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09IG51bGwgfHwgdHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIH1cblxuICAgIHZhciB0ZW1wT2JqID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBwYXJzZVZhbHVlcyhzdHIsIG9wdGlvbnMpIDogc3RyO1xuICAgIHZhciBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUga2V5cyBhbmQgc2V0dXAgdGhlIG5ldyBvYmplY3RcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGVtcE9iaik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YXIgbmV3T2JqID0gcGFyc2VLZXlzKGtleSwgdGVtcE9ialtrZXldLCBvcHRpb25zLCB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyk7XG4gICAgICAgIG9iaiA9IHV0aWxzLm1lcmdlKG9iaiwgbmV3T2JqLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hbGxvd1NwYXJzZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiB1dGlscy5jb21wYWN0KG9iaik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0U2lkZUNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGFycmF5UHJlZml4R2VuZXJhdG9ycyA9IHtcbiAgICBicmFja2V0czogZnVuY3Rpb24gYnJhY2tldHMocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyAnW10nO1xuICAgIH0sXG4gICAgY29tbWE6ICdjb21tYScsXG4gICAgaW5kaWNlczogZnVuY3Rpb24gaW5kaWNlcyhwcmVmaXgsIGtleSkge1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1snICsga2V5ICsgJ10nO1xuICAgIH0sXG4gICAgcmVwZWF0OiBmdW5jdGlvbiByZXBlYXQocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgfVxufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xudmFyIHB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbnZhciBwdXNoVG9BcnJheSA9IGZ1bmN0aW9uIChhcnIsIHZhbHVlT3JBcnJheSkge1xuICAgIHB1c2guYXBwbHkoYXJyLCBpc0FycmF5KHZhbHVlT3JBcnJheSkgPyB2YWx1ZU9yQXJyYXkgOiBbdmFsdWVPckFycmF5XSk7XG59O1xuXG52YXIgdG9JU08gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGRlZmF1bHRGb3JtYXQgPSBmb3JtYXRzWydkZWZhdWx0J107XG52YXIgZGVmYXVsdHMgPSB7XG4gICAgYWRkUXVlcnlQcmVmaXg6IGZhbHNlLFxuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgY2hhcnNldDogJ3V0Zi04JyxcbiAgICBjaGFyc2V0U2VudGluZWw6IGZhbHNlLFxuICAgIGRlbGltaXRlcjogJyYnLFxuICAgIGVuY29kZTogdHJ1ZSxcbiAgICBlbmNvZGVyOiB1dGlscy5lbmNvZGUsXG4gICAgZW5jb2RlVmFsdWVzT25seTogZmFsc2UsXG4gICAgZm9ybWF0OiBkZWZhdWx0Rm9ybWF0LFxuICAgIGZvcm1hdHRlcjogZm9ybWF0cy5mb3JtYXR0ZXJzW2RlZmF1bHRGb3JtYXRdLFxuICAgIC8vIGRlcHJlY2F0ZWRcbiAgICBpbmRpY2VzOiBmYWxzZSxcbiAgICBzZXJpYWxpemVEYXRlOiBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRvSVNPLmNhbGwoZGF0ZSk7XG4gICAgfSxcbiAgICBza2lwTnVsbHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBpc05vbk51bGxpc2hQcmltaXRpdmUgPSBmdW5jdGlvbiBpc05vbk51bGxpc2hQcmltaXRpdmUodikge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZydcbiAgICAgICAgfHwgdHlwZW9mIHYgPT09ICdudW1iZXInXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnYm9vbGVhbidcbiAgICAgICAgfHwgdHlwZW9mIHYgPT09ICdzeW1ib2wnXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnYmlnaW50Jztcbn07XG5cbnZhciBzZW50aW5lbCA9IHt9O1xuXG52YXIgc3RyaW5naWZ5ID0gZnVuY3Rpb24gc3RyaW5naWZ5KFxuICAgIG9iamVjdCxcbiAgICBwcmVmaXgsXG4gICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICBjb21tYVJvdW5kVHJpcCxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgc2tpcE51bGxzLFxuICAgIGVuY29kZXIsXG4gICAgZmlsdGVyLFxuICAgIHNvcnQsXG4gICAgYWxsb3dEb3RzLFxuICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgZm9ybWF0LFxuICAgIGZvcm1hdHRlcixcbiAgICBlbmNvZGVWYWx1ZXNPbmx5LFxuICAgIGNoYXJzZXQsXG4gICAgc2lkZUNoYW5uZWxcbikge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG5cbiAgICB2YXIgdG1wU2MgPSBzaWRlQ2hhbm5lbDtcbiAgICB2YXIgc3RlcCA9IDA7XG4gICAgdmFyIGZpbmRGbGFnID0gZmFsc2U7XG4gICAgd2hpbGUgKCh0bXBTYyA9IHRtcFNjLmdldChzZW50aW5lbCkpICE9PSB2b2lkIHVuZGVmaW5lZCAmJiAhZmluZEZsYWcpIHtcbiAgICAgICAgLy8gV2hlcmUgb2JqZWN0IGxhc3QgYXBwZWFyZWQgaW4gdGhlIHJlZiB0cmVlXG4gICAgICAgIHZhciBwb3MgPSB0bXBTYy5nZXQob2JqZWN0KTtcbiAgICAgICAgc3RlcCArPSAxO1xuICAgICAgICBpZiAodHlwZW9mIHBvcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChwb3MgPT09IHN0ZXApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ3ljbGljIG9iamVjdCB2YWx1ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaW5kRmxhZyA9IHRydWU7IC8vIEJyZWFrIHdoaWxlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0bXBTYy5nZXQoc2VudGluZWwpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgc3RlcCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvYmogPSBmaWx0ZXIocHJlZml4LCBvYmopO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBvYmogPSBzZXJpYWxpemVEYXRlKG9iaik7XG4gICAgfSBlbHNlIGlmIChnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmogPSB1dGlscy5tYXliZU1hcChvYmosIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoc3RyaWN0TnVsbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlciAmJiAhZW5jb2RlVmFsdWVzT25seSA/IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAna2V5JywgZm9ybWF0KSA6IHByZWZpeDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9iaiA9ICcnO1xuICAgIH1cblxuICAgIGlmIChpc05vbk51bGxpc2hQcmltaXRpdmUob2JqKSB8fCB1dGlscy5pc0J1ZmZlcihvYmopKSB7XG4gICAgICAgIGlmIChlbmNvZGVyKSB7XG4gICAgICAgICAgICB2YXIga2V5VmFsdWUgPSBlbmNvZGVWYWx1ZXNPbmx5ID8gcHJlZml4IDogZW5jb2RlcihwcmVmaXgsIGRlZmF1bHRzLmVuY29kZXIsIGNoYXJzZXQsICdrZXknLCBmb3JtYXQpO1xuICAgICAgICAgICAgcmV0dXJuIFtmb3JtYXR0ZXIoa2V5VmFsdWUpICsgJz0nICsgZm9ybWF0dGVyKGVuY29kZXIob2JqLCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAndmFsdWUnLCBmb3JtYXQpKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtmb3JtYXR0ZXIocHJlZml4KSArICc9JyArIGZvcm1hdHRlcihTdHJpbmcob2JqKSldO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIHZhciBvYmpLZXlzO1xuICAgIGlmIChnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGlzQXJyYXkob2JqKSkge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGpvaW4gZWxlbWVudHMgaW5cbiAgICAgICAgaWYgKGVuY29kZVZhbHVlc09ubHkgJiYgZW5jb2Rlcikge1xuICAgICAgICAgICAgb2JqID0gdXRpbHMubWF5YmVNYXAob2JqLCBlbmNvZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBvYmpLZXlzID0gW3sgdmFsdWU6IG9iai5sZW5ndGggPiAwID8gb2JqLmpvaW4oJywnKSB8fCBudWxsIDogdm9pZCB1bmRlZmluZWQgfV07XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KGZpbHRlcikpIHtcbiAgICAgICAgb2JqS2V5cyA9IGZpbHRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIG9iaktleXMgPSBzb3J0ID8ga2V5cy5zb3J0KHNvcnQpIDoga2V5cztcbiAgICB9XG5cbiAgICB2YXIgYWRqdXN0ZWRQcmVmaXggPSBjb21tYVJvdW5kVHJpcCAmJiBpc0FycmF5KG9iaikgJiYgb2JqLmxlbmd0aCA9PT0gMSA/IHByZWZpeCArICdbXScgOiBwcmVmaXg7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iaktleXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbal07XG4gICAgICAgIHZhciB2YWx1ZSA9IHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkudmFsdWUgIT09ICd1bmRlZmluZWQnID8ga2V5LnZhbHVlIDogb2JqW2tleV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIga2V5UHJlZml4ID0gaXNBcnJheShvYmopXG4gICAgICAgICAgICA/IHR5cGVvZiBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnZnVuY3Rpb24nID8gZ2VuZXJhdGVBcnJheVByZWZpeChhZGp1c3RlZFByZWZpeCwga2V5KSA6IGFkanVzdGVkUHJlZml4XG4gICAgICAgICAgICA6IGFkanVzdGVkUHJlZml4ICsgKGFsbG93RG90cyA/ICcuJyArIGtleSA6ICdbJyArIGtleSArICddJyk7XG5cbiAgICAgICAgc2lkZUNoYW5uZWwuc2V0KG9iamVjdCwgc3RlcCk7XG4gICAgICAgIHZhciB2YWx1ZVNpZGVDaGFubmVsID0gZ2V0U2lkZUNoYW5uZWwoKTtcbiAgICAgICAgdmFsdWVTaWRlQ2hhbm5lbC5zZXQoc2VudGluZWwsIHNpZGVDaGFubmVsKTtcbiAgICAgICAgcHVzaFRvQXJyYXkodmFsdWVzLCBzdHJpbmdpZnkoXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGtleVByZWZpeCxcbiAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgICAgICBjb21tYVJvdW5kVHJpcCxcbiAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgIHNraXBOdWxscyxcbiAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgZW5jb2RlVmFsdWVzT25seSAmJiBpc0FycmF5KG9iaikgPyBudWxsIDogZW5jb2RlcixcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICBzZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgICAgIGNoYXJzZXQsXG4gICAgICAgICAgICB2YWx1ZVNpZGVDaGFubmVsXG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG59O1xuXG52YXIgbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZW5jb2RlciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0VuY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRzLmNoYXJzZXQgfHwgZGVmYXVsdHMuY2hhcnNldDtcbiAgICBpZiAodHlwZW9mIG9wdHMuY2hhcnNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAndXRmLTgnICYmIG9wdHMuY2hhcnNldCAhPT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNbJ2RlZmF1bHQnXTtcbiAgICBpZiAodHlwZW9mIG9wdHMuZm9ybWF0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoIWhhcy5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycywgb3B0cy5mb3JtYXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGZvcm1hdCBvcHRpb24gcHJvdmlkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybWF0ID0gb3B0cy5mb3JtYXQ7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXRzLmZvcm1hdHRlcnNbZm9ybWF0XTtcblxuICAgIHZhciBmaWx0ZXIgPSBkZWZhdWx0cy5maWx0ZXI7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJyB8fCBpc0FycmF5KG9wdHMuZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBvcHRzLmZpbHRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhZGRRdWVyeVByZWZpeDogdHlwZW9mIG9wdHMuYWRkUXVlcnlQcmVmaXggPT09ICdib29sZWFuJyA/IG9wdHMuYWRkUXVlcnlQcmVmaXggOiBkZWZhdWx0cy5hZGRRdWVyeVByZWZpeCxcbiAgICAgICAgYWxsb3dEb3RzOiB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cyxcbiAgICAgICAgY2hhcnNldDogY2hhcnNldCxcbiAgICAgICAgY2hhcnNldFNlbnRpbmVsOiB0eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWwgPT09ICdib29sZWFuJyA/IG9wdHMuY2hhcnNldFNlbnRpbmVsIDogZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kZWxpbWl0ZXIgOiBvcHRzLmRlbGltaXRlcixcbiAgICAgICAgZW5jb2RlOiB0eXBlb2Ygb3B0cy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlLFxuICAgICAgICBlbmNvZGVyOiB0eXBlb2Ygb3B0cy5lbmNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5lbmNvZGVyIDogZGVmYXVsdHMuZW5jb2RlcixcbiAgICAgICAgZW5jb2RlVmFsdWVzT25seTogdHlwZW9mIG9wdHMuZW5jb2RlVmFsdWVzT25seSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGVWYWx1ZXNPbmx5IDogZGVmYXVsdHMuZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIGZvcm1hdDogZm9ybWF0LFxuICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcixcbiAgICAgICAgc2VyaWFsaXplRGF0ZTogdHlwZW9mIG9wdHMuc2VyaWFsaXplRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuc2VyaWFsaXplRGF0ZSA6IGRlZmF1bHRzLnNlcmlhbGl6ZURhdGUsXG4gICAgICAgIHNraXBOdWxsczogdHlwZW9mIG9wdHMuc2tpcE51bGxzID09PSAnYm9vbGVhbicgPyBvcHRzLnNraXBOdWxscyA6IGRlZmF1bHRzLnNraXBOdWxscyxcbiAgICAgICAgc29ydDogdHlwZW9mIG9wdHMuc29ydCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuc29ydCA6IG51bGwsXG4gICAgICAgIHN0cmljdE51bGxIYW5kbGluZzogdHlwZW9mIG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nID09PSAnYm9vbGVhbicgPyBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA6IGRlZmF1bHRzLnN0cmljdE51bGxIYW5kbGluZ1xuICAgIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG9wdHMpIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuICAgIHZhciBvcHRpb25zID0gbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyhvcHRzKTtcblxuICAgIHZhciBvYmpLZXlzO1xuICAgIHZhciBmaWx0ZXI7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmogPSBmaWx0ZXIoJycsIG9iaik7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KG9wdGlvbnMuZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcbiAgICAgICAgb2JqS2V5cyA9IGZpbHRlcjtcbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5Rm9ybWF0O1xuICAgIGlmIChvcHRzICYmIG9wdHMuYXJyYXlGb3JtYXQgaW4gYXJyYXlQcmVmaXhHZW5lcmF0b3JzKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0cy5hcnJheUZvcm1hdDtcbiAgICB9IGVsc2UgaWYgKG9wdHMgJiYgJ2luZGljZXMnIGluIG9wdHMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmluZGljZXMgPyAnaW5kaWNlcycgOiAncmVwZWF0JztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheUZvcm1hdCA9ICdpbmRpY2VzJztcbiAgICB9XG5cbiAgICB2YXIgZ2VuZXJhdGVBcnJheVByZWZpeCA9IGFycmF5UHJlZml4R2VuZXJhdG9yc1thcnJheUZvcm1hdF07XG4gICAgaWYgKG9wdHMgJiYgJ2NvbW1hUm91bmRUcmlwJyBpbiBvcHRzICYmIHR5cGVvZiBvcHRzLmNvbW1hUm91bmRUcmlwICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGNvbW1hUm91bmRUcmlwYCBtdXN0IGJlIGEgYm9vbGVhbiwgb3IgYWJzZW50Jyk7XG4gICAgfVxuICAgIHZhciBjb21tYVJvdW5kVHJpcCA9IGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgb3B0cyAmJiBvcHRzLmNvbW1hUm91bmRUcmlwO1xuXG4gICAgaWYgKCFvYmpLZXlzKSB7XG4gICAgICAgIG9iaktleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICAgICAgb2JqS2V5cy5zb3J0KG9wdGlvbnMuc29ydCk7XG4gICAgfVxuXG4gICAgdmFyIHNpZGVDaGFubmVsID0gZ2V0U2lkZUNoYW5uZWwoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbaV07XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2tpcE51bGxzICYmIG9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwdXNoVG9BcnJheShrZXlzLCBzdHJpbmdpZnkoXG4gICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgICAgICBjb21tYVJvdW5kVHJpcCxcbiAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgb3B0aW9ucy5za2lwTnVsbHMsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZSA/IG9wdGlvbnMuZW5jb2RlciA6IG51bGwsXG4gICAgICAgICAgICBvcHRpb25zLmZpbHRlcixcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydCxcbiAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dEb3RzLFxuICAgICAgICAgICAgb3B0aW9ucy5zZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXQsXG4gICAgICAgICAgICBvcHRpb25zLmZvcm1hdHRlcixcbiAgICAgICAgICAgIG9wdGlvbnMuZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgICAgIG9wdGlvbnMuY2hhcnNldCxcbiAgICAgICAgICAgIHNpZGVDaGFubmVsXG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIHZhciBqb2luZWQgPSBrZXlzLmpvaW4ob3B0aW9ucy5kZWxpbWl0ZXIpO1xuICAgIHZhciBwcmVmaXggPSBvcHRpb25zLmFkZFF1ZXJ5UHJlZml4ID09PSB0cnVlID8gJz8nIDogJyc7XG5cbiAgICBpZiAob3B0aW9ucy5jaGFyc2V0U2VudGluZWwpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgICAgICAvLyBlbmNvZGVVUklDb21wb25lbnQoJyYjMTAwMDM7JyksIHRoZSBcIm51bWVyaWMgZW50aXR5XCIgcmVwcmVzZW50YXRpb24gb2YgYSBjaGVja21hcmtcbiAgICAgICAgICAgIHByZWZpeCArPSAndXRmOD0lMjYlMjMxMDAwMyUzQiYnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCfinJMnKVxuICAgICAgICAgICAgcHJlZml4ICs9ICd1dGY4PSVFMiU5QyU5MyYnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvaW5lZC5sZW5ndGggPiAwID8gcHJlZml4ICsgam9pbmVkIDogJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxudmFyIGhleFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgICAgIGFycmF5LnB1c2goJyUnICsgKChpIDwgMTYgPyAnMCcgOiAnJykgKyBpLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufSgpKTtcblxudmFyIGNvbXBhY3RRdWV1ZSA9IGZ1bmN0aW9uIGNvbXBhY3RRdWV1ZShxdWV1ZSkge1xuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhciBpdGVtID0gcXVldWUucG9wKCk7XG4gICAgICAgIHZhciBvYmogPSBpdGVtLm9ialtpdGVtLnByb3BdO1xuXG4gICAgICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHZhciBjb21wYWN0ZWQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvYmoubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ialtqXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGFjdGVkLnB1c2gob2JqW2pdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0ub2JqW2l0ZW0ucHJvcF0gPSBjb21wYWN0ZWQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgYXJyYXlUb09iamVjdCA9IGZ1bmN0aW9uIGFycmF5VG9PYmplY3Qoc291cmNlLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBvYmpbaV0gPSBzb3VyY2VbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxudmFyIG1lcmdlID0gZnVuY3Rpb24gbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICB0YXJnZXQucHVzaChzb3VyY2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zICYmIChvcHRpb25zLnBsYWluT2JqZWN0cyB8fCBvcHRpb25zLmFsbG93UHJvdG90eXBlcykpIHx8ICFoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W3NvdXJjZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFt0YXJnZXQsIHNvdXJjZV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBbdGFyZ2V0XS5jb25jYXQoc291cmNlKTtcbiAgICB9XG5cbiAgICB2YXIgbWVyZ2VUYXJnZXQgPSB0YXJnZXQ7XG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiAhaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIG1lcmdlVGFyZ2V0ID0gYXJyYXlUb09iamVjdCh0YXJnZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5KHRhcmdldCkgJiYgaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIHNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG4gICAgICAgICAgICBpZiAoaGFzLmNhbGwodGFyZ2V0LCBpKSkge1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXRJdGVtID0gdGFyZ2V0W2ldO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRJdGVtICYmIHR5cGVvZiB0YXJnZXRJdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBtZXJnZSh0YXJnZXRJdGVtLCBpdGVtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICAgICAgaWYgKGhhcy5jYWxsKGFjYywga2V5KSkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBtZXJnZShhY2Nba2V5XSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG1lcmdlVGFyZ2V0KTtcbn07XG5cbnZhciBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ25TaW5nbGVTb3VyY2UodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIGFjY1trZXldID0gc291cmNlW2tleV07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgdGFyZ2V0KTtcbn07XG5cbnZhciBkZWNvZGUgPSBmdW5jdGlvbiAoc3RyLCBkZWNvZGVyLCBjaGFyc2V0KSB7XG4gICAgdmFyIHN0cldpdGhvdXRQbHVzID0gc3RyLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgIGlmIChjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgLy8gdW5lc2NhcGUgbmV2ZXIgdGhyb3dzLCBubyB0cnkuLi5jYXRjaCBuZWVkZWQ6XG4gICAgICAgIHJldHVybiBzdHJXaXRob3V0UGx1cy5yZXBsYWNlKC8lWzAtOWEtZl17Mn0vZ2ksIHVuZXNjYXBlKTtcbiAgICB9XG4gICAgLy8gdXRmLThcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cldpdGhvdXRQbHVzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBzdHJXaXRob3V0UGx1cztcbiAgICB9XG59O1xuXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0ciwgZGVmYXVsdEVuY29kZXIsIGNoYXJzZXQsIGtpbmQsIGZvcm1hdCkge1xuICAgIC8vIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEJyaWFuIFdoaXRlIChtc2NkZXgpIGZvciB0aGUgaW8uanMgY29yZSBxdWVyeXN0cmluZyBsaWJyYXJ5LlxuICAgIC8vIEl0IGhhcyBiZWVuIGFkYXB0ZWQgaGVyZSBmb3Igc3RyaWN0ZXIgYWRoZXJlbmNlIHRvIFJGQyAzOTg2XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gc3RyO1xuICAgIGlmICh0eXBlb2Ygc3RyID09PSAnc3ltYm9sJykge1xuICAgICAgICBzdHJpbmcgPSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3RyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0cmluZyA9IFN0cmluZyhzdHIpO1xuICAgIH1cblxuICAgIGlmIChjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZShzdHJpbmcpLnJlcGxhY2UoLyV1WzAtOWEtZl17NH0vZ2ksIGZ1bmN0aW9uICgkMCkge1xuICAgICAgICAgICAgcmV0dXJuICclMjYlMjMnICsgcGFyc2VJbnQoJDAuc2xpY2UoMiksIDE2KSArICclM0InO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjID09PSAweDJEIC8vIC1cbiAgICAgICAgICAgIHx8IGMgPT09IDB4MkUgLy8gLlxuICAgICAgICAgICAgfHwgYyA9PT0gMHg1RiAvLyBfXG4gICAgICAgICAgICB8fCBjID09PSAweDdFIC8vIH5cbiAgICAgICAgICAgIHx8IChjID49IDB4MzAgJiYgYyA8PSAweDM5KSAvLyAwLTlcbiAgICAgICAgICAgIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDVBKSAvLyBhLXpcbiAgICAgICAgICAgIHx8IChjID49IDB4NjEgJiYgYyA8PSAweDdBKSAvLyBBLVpcbiAgICAgICAgICAgIHx8IChmb3JtYXQgPT09IGZvcm1hdHMuUkZDMTczOCAmJiAoYyA9PT0gMHgyOCB8fCBjID09PSAweDI5KSkgLy8gKCApXG4gICAgICAgICkge1xuICAgICAgICAgICAgb3V0ICs9IHN0cmluZy5jaGFyQXQoaSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgaGV4VGFibGVbY107XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIChoZXhUYWJsZVsweEMwIHwgKGMgPj4gNildICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweEQ4MDAgfHwgYyA+PSAweEUwMDApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIChoZXhUYWJsZVsweEUwIHwgKGMgPj4gMTIpXSArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV0gKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpICs9IDE7XG4gICAgICAgIGMgPSAweDEwMDAwICsgKCgoYyAmIDB4M0ZGKSA8PCAxMCkgfCAoc3RyaW5nLmNoYXJDb2RlQXQoaSkgJiAweDNGRikpO1xuICAgICAgICAvKiBlc2xpbnQgb3BlcmF0b3ItbGluZWJyZWFrOiBbMiwgXCJiZWZvcmVcIl0gKi9cbiAgICAgICAgb3V0ICs9IGhleFRhYmxlWzB4RjAgfCAoYyA+PiAxOCldXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gMTIpICYgMHgzRildXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV1cbiAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG52YXIgY29tcGFjdCA9IGZ1bmN0aW9uIGNvbXBhY3QodmFsdWUpIHtcbiAgICB2YXIgcXVldWUgPSBbeyBvYmo6IHsgbzogdmFsdWUgfSwgcHJvcDogJ28nIH1dO1xuICAgIHZhciByZWZzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBpdGVtID0gcXVldWVbaV07XG4gICAgICAgIHZhciBvYmogPSBpdGVtLm9ialtpdGVtLnByb3BdO1xuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tqXTtcbiAgICAgICAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgJiYgcmVmcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcXVldWUucHVzaCh7IG9iajogb2JqLCBwcm9wOiBrZXkgfSk7XG4gICAgICAgICAgICAgICAgcmVmcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wYWN0UXVldWUocXVldWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIGlzUmVnRXhwID0gZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBSZWdFeHBdJztcbn07XG5cbnZhciBpc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyKG9iaikge1xuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gISEob2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKSk7XG59O1xuXG52YXIgY29tYmluZSA9IGZ1bmN0aW9uIGNvbWJpbmUoYSwgYikge1xuICAgIHJldHVybiBbXS5jb25jYXQoYSwgYik7XG59O1xuXG52YXIgbWF5YmVNYXAgPSBmdW5jdGlvbiBtYXliZU1hcCh2YWwsIGZuKSB7XG4gICAgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgbWFwcGVkID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBtYXBwZWQucHVzaChmbih2YWxbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFwcGVkO1xuICAgIH1cbiAgICByZXR1cm4gZm4odmFsKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFycmF5VG9PYmplY3Q6IGFycmF5VG9PYmplY3QsXG4gICAgYXNzaWduOiBhc3NpZ24sXG4gICAgY29tYmluZTogY29tYmluZSxcbiAgICBjb21wYWN0OiBjb21wYWN0LFxuICAgIGRlY29kZTogZGVjb2RlLFxuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgICBpc1JlZ0V4cDogaXNSZWdFeHAsXG4gICAgbWF5YmVNYXA6IG1heWJlTWFwLFxuICAgIG1lcmdlOiBtZXJnZVxufTtcbiIsIi8qISBxdWV1ZS1taWNyb3Rhc2suIE1JVCBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmxldCBwcm9taXNlXG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nXG4gID8gcXVldWVNaWNyb3Rhc2suYmluZCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbiAgLy8gcmV1c2UgcmVzb2x2ZWQgcHJvbWlzZSwgYW5kIGFsbG9jYXRlIGl0IGxhemlseVxuICA6IGNiID0+IChwcm9taXNlIHx8IChwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCkpKVxuICAgIC50aGVuKGNiKVxuICAgIC5jYXRjaChlcnIgPT4gc2V0VGltZW91dCgoKSA9PiB7IHRocm93IGVyciB9LCAwKSlcbiIsIid1c2Ugc3RyaWN0J1xuXG4vLyBsaW1pdCBvZiBDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKClcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DcnlwdG8vZ2V0UmFuZG9tVmFsdWVzXG52YXIgTUFYX0JZVEVTID0gNjU1MzZcblxuLy8gTm9kZSBzdXBwb3J0cyByZXF1ZXN0aW5nIHVwIHRvIHRoaXMgbnVtYmVyIG9mIGJ5dGVzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvbGliL2ludGVybmFsL2NyeXB0by9yYW5kb20uanMjTDQ4XG52YXIgTUFYX1VJTlQzMiA9IDQyOTQ5NjcyOTVcblxuZnVuY3Rpb24gb2xkQnJvd3NlciAoKSB7XG4gIHRocm93IG5ldyBFcnJvcignU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExJylcbn1cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG52YXIgY3J5cHRvID0gZ2xvYmFsLmNyeXB0byB8fCBnbG9iYWwubXNDcnlwdG9cblxuaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmFuZG9tQnl0ZXNcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gb2xkQnJvd3NlclxufVxuXG5mdW5jdGlvbiByYW5kb21CeXRlcyAoc2l6ZSwgY2IpIHtcbiAgLy8gcGhhbnRvbWpzIG5lZWRzIHRvIHRocm93XG4gIGlmIChzaXplID4gTUFYX1VJTlQzMikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMnKVxuXG4gIHZhciBieXRlcyA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShzaXplKVxuXG4gIGlmIChzaXplID4gMCkgeyAgLy8gZ2V0UmFuZG9tVmFsdWVzIGZhaWxzIG9uIElFIGlmIHNpemUgPT0gMFxuICAgIGlmIChzaXplID4gTUFYX0JZVEVTKSB7IC8vIHRoaXMgaXMgdGhlIG1heCBieXRlcyBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzXG4gICAgICAvLyBjYW4gZG8gYXQgb25jZSBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3dpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzXG4gICAgICBmb3IgKHZhciBnZW5lcmF0ZWQgPSAwOyBnZW5lcmF0ZWQgPCBzaXplOyBnZW5lcmF0ZWQgKz0gTUFYX0JZVEVTKSB7XG4gICAgICAgIC8vIGJ1ZmZlci5zbGljZSBhdXRvbWF0aWNhbGx5IGNoZWNrcyBpZiB0aGUgZW5kIGlzIHBhc3QgdGhlIGVuZCBvZlxuICAgICAgICAvLyB0aGUgYnVmZmVyIHNvIHdlIGRvbid0IGhhdmUgdG8gaGVyZVxuICAgICAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGJ5dGVzLnNsaWNlKGdlbmVyYXRlZCwgZ2VuZXJhdGVkICsgTUFYX0JZVEVTKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhieXRlcylcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgY2IobnVsbCwgYnl0ZXMpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlbW92ZSBhIHJhbmdlIG9mIGl0ZW1zIGZyb20gYW4gYXJyYXlcbiAqXG4gKiBAZnVuY3Rpb24gcmVtb3ZlSXRlbXNcbiAqIEBwYXJhbSB7QXJyYXk8Kj59IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRJZHggVGhlIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGZyb20gKGluY2x1c2l2ZSlcbiAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlSXRlbXMgKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KSB7XG4gIHZhciBpLCBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gIGlmIChzdGFydElkeCA+PSBsZW5ndGggfHwgcmVtb3ZlQ291bnQgPD0gMCB8fCBzdGFydElkeCA8IDApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHJlbW92ZUNvdW50ID0gKHN0YXJ0SWR4ICsgcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGggLSBzdGFydElkeCA6IHJlbW92ZUNvdW50KTtcblxuICB2YXIgbGVuID0gbGVuZ3RoIC0gcmVtb3ZlQ291bnQ7XG5cbiAgZm9yIChpID0gc3RhcnRJZHg7IGkgPCBsZW47ICsraSkge1xuICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICB9XG5cbiAgYXJyLmxlbmd0aCA9IGxlbjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZW1vdmVJdGVtcztcbiIsIi8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm9kZS9uby1kZXByZWNhdGVkLWFwaSAqL1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpXG52YXIgQnVmZmVyID0gYnVmZmVyLkJ1ZmZlclxuXG4vLyBhbHRlcm5hdGl2ZSB0byB1c2luZyBPYmplY3Qua2V5cyBmb3Igb2xkIGJyb3dzZXJzXG5mdW5jdGlvbiBjb3B5UHJvcHMgKHNyYywgZHN0KSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBkc3Rba2V5XSA9IHNyY1trZXldXG4gIH1cbn1cbmlmIChCdWZmZXIuZnJvbSAmJiBCdWZmZXIuYWxsb2MgJiYgQnVmZmVyLmFsbG9jVW5zYWZlICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBidWZmZXJcbn0gZWxzZSB7XG4gIC8vIENvcHkgcHJvcGVydGllcyBmcm9tIHJlcXVpcmUoJ2J1ZmZlcicpXG4gIGNvcHlQcm9wcyhidWZmZXIsIGV4cG9ydHMpXG4gIGV4cG9ydHMuQnVmZmVyID0gU2FmZUJ1ZmZlclxufVxuXG5mdW5jdGlvbiBTYWZlQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQnVmZmVyLnByb3RvdHlwZSlcblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHNjcm9sbFRvQW5jaG9yXG5cbmZ1bmN0aW9uIHNjcm9sbFRvQW5jaG9yIChhbmNob3IsIG9wdGlvbnMpIHtcbiAgaWYgKGFuY2hvcikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGFuY2hvcilcbiAgICAgIGlmIChlbCkgZWwuc2Nyb2xsSW50b1ZpZXcob3B0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2luZGV4Jyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByYW5kb21Gcm9tU2VlZCA9IHJlcXVpcmUoJy4vcmFuZG9tL3JhbmRvbS1mcm9tLXNlZWQnKTtcblxudmFyIE9SSUdJTkFMID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXy0nO1xudmFyIGFscGhhYmV0O1xudmFyIHByZXZpb3VzU2VlZDtcblxudmFyIHNodWZmbGVkO1xuXG5mdW5jdGlvbiByZXNldCgpIHtcbiAgICBzaHVmZmxlZCA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzZXRDaGFyYWN0ZXJzKF9hbHBoYWJldF8pIHtcbiAgICBpZiAoIV9hbHBoYWJldF8pIHtcbiAgICAgICAgaWYgKGFscGhhYmV0ICE9PSBPUklHSU5BTCkge1xuICAgICAgICAgICAgYWxwaGFiZXQgPSBPUklHSU5BTDtcbiAgICAgICAgICAgIHJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChfYWxwaGFiZXRfID09PSBhbHBoYWJldCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKF9hbHBoYWJldF8ubGVuZ3RoICE9PSBPUklHSU5BTC5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXN0b20gYWxwaGFiZXQgZm9yIHNob3J0aWQgbXVzdCBiZSAnICsgT1JJR0lOQUwubGVuZ3RoICsgJyB1bmlxdWUgY2hhcmFjdGVycy4gWW91IHN1Ym1pdHRlZCAnICsgX2FscGhhYmV0Xy5sZW5ndGggKyAnIGNoYXJhY3RlcnM6ICcgKyBfYWxwaGFiZXRfKTtcbiAgICB9XG5cbiAgICB2YXIgdW5pcXVlID0gX2FscGhhYmV0Xy5zcGxpdCgnJykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0sIGluZCwgYXJyKXtcbiAgICAgICByZXR1cm4gaW5kICE9PSBhcnIubGFzdEluZGV4T2YoaXRlbSk7XG4gICAgfSk7XG5cbiAgICBpZiAodW5pcXVlLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N1c3RvbSBhbHBoYWJldCBmb3Igc2hvcnRpZCBtdXN0IGJlICcgKyBPUklHSU5BTC5sZW5ndGggKyAnIHVuaXF1ZSBjaGFyYWN0ZXJzLiBUaGVzZSBjaGFyYWN0ZXJzIHdlcmUgbm90IHVuaXF1ZTogJyArIHVuaXF1ZS5qb2luKCcsICcpKTtcbiAgICB9XG5cbiAgICBhbHBoYWJldCA9IF9hbHBoYWJldF87XG4gICAgcmVzZXQoKTtcbn1cblxuZnVuY3Rpb24gY2hhcmFjdGVycyhfYWxwaGFiZXRfKSB7XG4gICAgc2V0Q2hhcmFjdGVycyhfYWxwaGFiZXRfKTtcbiAgICByZXR1cm4gYWxwaGFiZXQ7XG59XG5cbmZ1bmN0aW9uIHNldFNlZWQoc2VlZCkge1xuICAgIHJhbmRvbUZyb21TZWVkLnNlZWQoc2VlZCk7XG4gICAgaWYgKHByZXZpb3VzU2VlZCAhPT0gc2VlZCkge1xuICAgICAgICByZXNldCgpO1xuICAgICAgICBwcmV2aW91c1NlZWQgPSBzZWVkO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2h1ZmZsZSgpIHtcbiAgICBpZiAoIWFscGhhYmV0KSB7XG4gICAgICAgIHNldENoYXJhY3RlcnMoT1JJR0lOQUwpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VBcnJheSA9IGFscGhhYmV0LnNwbGl0KCcnKTtcbiAgICB2YXIgdGFyZ2V0QXJyYXkgPSBbXTtcbiAgICB2YXIgciA9IHJhbmRvbUZyb21TZWVkLm5leHRWYWx1ZSgpO1xuICAgIHZhciBjaGFyYWN0ZXJJbmRleDtcblxuICAgIHdoaWxlIChzb3VyY2VBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHIgPSByYW5kb21Gcm9tU2VlZC5uZXh0VmFsdWUoKTtcbiAgICAgICAgY2hhcmFjdGVySW5kZXggPSBNYXRoLmZsb29yKHIgKiBzb3VyY2VBcnJheS5sZW5ndGgpO1xuICAgICAgICB0YXJnZXRBcnJheS5wdXNoKHNvdXJjZUFycmF5LnNwbGljZShjaGFyYWN0ZXJJbmRleCwgMSlbMF0pO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0QXJyYXkuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGdldFNodWZmbGVkKCkge1xuICAgIGlmIChzaHVmZmxlZCkge1xuICAgICAgICByZXR1cm4gc2h1ZmZsZWQ7XG4gICAgfVxuICAgIHNodWZmbGVkID0gc2h1ZmZsZSgpO1xuICAgIHJldHVybiBzaHVmZmxlZDtcbn1cblxuLyoqXG4gKiBsb29rdXAgc2h1ZmZsZWQgbGV0dGVyXG4gKiBAcGFyYW0gaW5kZXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGxvb2t1cChpbmRleCkge1xuICAgIHZhciBhbHBoYWJldFNodWZmbGVkID0gZ2V0U2h1ZmZsZWQoKTtcbiAgICByZXR1cm4gYWxwaGFiZXRTaHVmZmxlZFtpbmRleF07XG59XG5cbmZ1bmN0aW9uIGdldCAoKSB7XG4gIHJldHVybiBhbHBoYWJldCB8fCBPUklHSU5BTDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZ2V0OiBnZXQsXG4gICAgY2hhcmFjdGVyczogY2hhcmFjdGVycyxcbiAgICBzZWVkOiBzZXRTZWVkLFxuICAgIGxvb2t1cDogbG9va3VwLFxuICAgIHNodWZmbGVkOiBnZXRTaHVmZmxlZFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdlbmVyYXRlID0gcmVxdWlyZSgnLi9nZW5lcmF0ZScpO1xudmFyIGFscGhhYmV0ID0gcmVxdWlyZSgnLi9hbHBoYWJldCcpO1xuXG4vLyBJZ25vcmUgYWxsIG1pbGxpc2Vjb25kcyBiZWZvcmUgYSBjZXJ0YWluIHRpbWUgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBkYXRlIGVudHJvcHkgd2l0aG91dCBzYWNyaWZpY2luZyB1bmlxdWVuZXNzLlxuLy8gVGhpcyBudW1iZXIgc2hvdWxkIGJlIHVwZGF0ZWQgZXZlcnkgeWVhciBvciBzbyB0byBrZWVwIHRoZSBnZW5lcmF0ZWQgaWQgc2hvcnQuXG4vLyBUbyByZWdlbmVyYXRlIGBuZXcgRGF0ZSgpIC0gMGAgYW5kIGJ1bXAgdGhlIHZlcnNpb24uIEFsd2F5cyBidW1wIHRoZSB2ZXJzaW9uIVxudmFyIFJFRFVDRV9USU1FID0gMTU2Nzc1MjgwMjA2MjtcblxuLy8gZG9uJ3QgY2hhbmdlIHVubGVzcyB3ZSBjaGFuZ2UgdGhlIGFsZ29zIG9yIFJFRFVDRV9USU1FXG4vLyBtdXN0IGJlIGFuIGludGVnZXIgYW5kIGxlc3MgdGhhbiAxNlxudmFyIHZlcnNpb24gPSA3O1xuXG4vLyBDb3VudGVyIGlzIHVzZWQgd2hlbiBzaG9ydGlkIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiBvbmUgc2Vjb25kLlxudmFyIGNvdW50ZXI7XG5cbi8vIFJlbWVtYmVyIHRoZSBsYXN0IHRpbWUgc2hvcnRpZCB3YXMgY2FsbGVkIGluIGNhc2UgY291bnRlciBpcyBuZWVkZWQuXG52YXIgcHJldmlvdXNTZWNvbmRzO1xuXG4vKipcbiAqIEdlbmVyYXRlIHVuaXF1ZSBpZFxuICogUmV0dXJucyBzdHJpbmcgaWRcbiAqL1xuZnVuY3Rpb24gYnVpbGQoY2x1c3RlcldvcmtlcklkKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuXG4gICAgdmFyIHNlY29uZHMgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gUkVEVUNFX1RJTUUpICogMC4wMDEpO1xuXG4gICAgaWYgKHNlY29uZHMgPT09IHByZXZpb3VzU2Vjb25kcykge1xuICAgICAgICBjb3VudGVyKys7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY291bnRlciA9IDA7XG4gICAgICAgIHByZXZpb3VzU2Vjb25kcyA9IHNlY29uZHM7XG4gICAgfVxuXG4gICAgc3RyID0gc3RyICsgZ2VuZXJhdGUodmVyc2lvbik7XG4gICAgc3RyID0gc3RyICsgZ2VuZXJhdGUoY2x1c3RlcldvcmtlcklkKTtcbiAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgc3RyID0gc3RyICsgZ2VuZXJhdGUoY291bnRlcik7XG4gICAgfVxuICAgIHN0ciA9IHN0ciArIGdlbmVyYXRlKHNlY29uZHMpO1xuICAgIHJldHVybiBzdHI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbHBoYWJldCA9IHJlcXVpcmUoJy4vYWxwaGFiZXQnKTtcbnZhciByYW5kb20gPSByZXF1aXJlKCcuL3JhbmRvbS9yYW5kb20tYnl0ZScpO1xudmFyIGZvcm1hdCA9IHJlcXVpcmUoJ25hbm9pZC9mb3JtYXQnKTtcblxuZnVuY3Rpb24gZ2VuZXJhdGUobnVtYmVyKSB7XG4gICAgdmFyIGxvb3BDb3VudGVyID0gMDtcbiAgICB2YXIgZG9uZTtcblxuICAgIHZhciBzdHIgPSAnJztcblxuICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgICBzdHIgPSBzdHIgKyBmb3JtYXQocmFuZG9tLCBhbHBoYWJldC5nZXQoKSwgMSk7XG4gICAgICAgIGRvbmUgPSBudW1iZXIgPCAoTWF0aC5wb3coMTYsIGxvb3BDb3VudGVyICsgMSApICk7XG4gICAgICAgIGxvb3BDb3VudGVyKys7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGU7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbHBoYWJldCA9IHJlcXVpcmUoJy4vYWxwaGFiZXQnKTtcbnZhciBidWlsZCA9IHJlcXVpcmUoJy4vYnVpbGQnKTtcbnZhciBpc1ZhbGlkID0gcmVxdWlyZSgnLi9pcy12YWxpZCcpO1xuXG4vLyBpZiB5b3UgYXJlIHVzaW5nIGNsdXN0ZXIgb3IgbXVsdGlwbGUgc2VydmVycyB1c2UgdGhpcyB0byBtYWtlIGVhY2ggaW5zdGFuY2Vcbi8vIGhhcyBhIHVuaXF1ZSB2YWx1ZSBmb3Igd29ya2VyXG4vLyBOb3RlOiBJIGRvbid0IGtub3cgaWYgdGhpcyBpcyBhdXRvbWF0aWNhbGx5IHNldCB3aGVuIHVzaW5nIHRoaXJkXG4vLyBwYXJ0eSBjbHVzdGVyIHNvbHV0aW9ucyBzdWNoIGFzIHBtMi5cbnZhciBjbHVzdGVyV29ya2VySWQgPSByZXF1aXJlKCcuL3V0aWwvY2x1c3Rlci13b3JrZXItaWQnKSB8fCAwO1xuXG4vKipcbiAqIFNldCB0aGUgc2VlZC5cbiAqIEhpZ2hseSByZWNvbW1lbmRlZCBpZiB5b3UgZG9uJ3Qgd2FudCBwZW9wbGUgdG8gdHJ5IHRvIGZpZ3VyZSBvdXQgeW91ciBpZCBzY2hlbWEuXG4gKiBleHBvc2VkIGFzIHNob3J0aWQuc2VlZChpbnQpXG4gKiBAcGFyYW0gc2VlZCBJbnRlZ2VyIHZhbHVlIHRvIHNlZWQgdGhlIHJhbmRvbSBhbHBoYWJldC4gIEFMV0FZUyBVU0UgVEhFIFNBTUUgU0VFRCBvciB5b3UgbWlnaHQgZ2V0IG92ZXJsYXBzLlxuICovXG5mdW5jdGlvbiBzZWVkKHNlZWRWYWx1ZSkge1xuICAgIGFscGhhYmV0LnNlZWQoc2VlZFZhbHVlKTtcbiAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjbHVzdGVyIHdvcmtlciBvciBtYWNoaW5lIGlkXG4gKiBleHBvc2VkIGFzIHNob3J0aWQud29ya2VyKGludClcbiAqIEBwYXJhbSB3b3JrZXJJZCB3b3JrZXIgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyLiAgTnVtYmVyIGxlc3MgdGhhbiAxNiBpcyByZWNvbW1lbmRlZC5cbiAqIHJldHVybnMgc2hvcnRpZCBtb2R1bGUgc28gaXQgY2FuIGJlIGNoYWluZWQuXG4gKi9cbmZ1bmN0aW9uIHdvcmtlcih3b3JrZXJJZCkge1xuICAgIGNsdXN0ZXJXb3JrZXJJZCA9IHdvcmtlcklkO1xuICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLyoqXG4gKlxuICogc2V0cyBuZXcgY2hhcmFjdGVycyB0byB1c2UgaW4gdGhlIGFscGhhYmV0XG4gKiByZXR1cm5zIHRoZSBzaHVmZmxlZCBhbHBoYWJldFxuICovXG5mdW5jdGlvbiBjaGFyYWN0ZXJzKG5ld0NoYXJhY3RlcnMpIHtcbiAgICBpZiAobmV3Q2hhcmFjdGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFscGhhYmV0LmNoYXJhY3RlcnMobmV3Q2hhcmFjdGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFscGhhYmV0LnNodWZmbGVkKCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgdW5pcXVlIGlkXG4gKiBSZXR1cm5zIHN0cmluZyBpZFxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZSgpIHtcbiAgcmV0dXJuIGJ1aWxkKGNsdXN0ZXJXb3JrZXJJZCk7XG59XG5cbi8vIEV4cG9ydCBhbGwgb3RoZXIgZnVuY3Rpb25zIGFzIHByb3BlcnRpZXMgb2YgdGhlIGdlbmVyYXRlIGZ1bmN0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlO1xubW9kdWxlLmV4cG9ydHMuZ2VuZXJhdGUgPSBnZW5lcmF0ZTtcbm1vZHVsZS5leHBvcnRzLnNlZWQgPSBzZWVkO1xubW9kdWxlLmV4cG9ydHMud29ya2VyID0gd29ya2VyO1xubW9kdWxlLmV4cG9ydHMuY2hhcmFjdGVycyA9IGNoYXJhY3RlcnM7XG5tb2R1bGUuZXhwb3J0cy5pc1ZhbGlkID0gaXNWYWxpZDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbHBoYWJldCA9IHJlcXVpcmUoJy4vYWxwaGFiZXQnKTtcblxuZnVuY3Rpb24gaXNTaG9ydElkKGlkKSB7XG4gICAgaWYgKCFpZCB8fCB0eXBlb2YgaWQgIT09ICdzdHJpbmcnIHx8IGlkLmxlbmd0aCA8IDYgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgbm9uQWxwaGFiZXRpYyA9IG5ldyBSZWdFeHAoJ1teJyArXG4gICAgICBhbHBoYWJldC5nZXQoKS5yZXBsYWNlKC9bfFxcXFx7fSgpW1xcXV4kKyo/Li1dL2csICdcXFxcJCYnKSArXG4gICAgJ10nKTtcbiAgICByZXR1cm4gIW5vbkFscGhhYmV0aWMudGVzdChpZCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTaG9ydElkO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3J5cHRvID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgKHdpbmRvdy5jcnlwdG8gfHwgd2luZG93Lm1zQ3J5cHRvKTsgLy8gSUUgMTEgdXNlcyB3aW5kb3cubXNDcnlwdG9cblxudmFyIHJhbmRvbUJ5dGU7XG5cbmlmICghY3J5cHRvIHx8ICFjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgcmFuZG9tQnl0ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgICAgICAgdmFyIGJ5dGVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBieXRlcztcbiAgICB9O1xufSBlbHNlIHtcbiAgICByYW5kb21CeXRlID0gZnVuY3Rpb24oc2l6ZSkge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShzaXplKSk7XG4gICAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByYW5kb21CeXRlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBGb3VuZCB0aGlzIHNlZWQtYmFzZWQgcmFuZG9tIGdlbmVyYXRvciBzb21ld2hlcmVcbi8vIEJhc2VkIG9uIFRoZSBDZW50cmFsIFJhbmRvbWl6ZXIgMS4zIChDKSAxOTk3IGJ5IFBhdWwgSG91bGUgKGhvdWxlQG1zYy5jb3JuZWxsLmVkdSlcblxudmFyIHNlZWQgPSAxO1xuXG4vKipcbiAqIHJldHVybiBhIHJhbmRvbSBudW1iZXIgYmFzZWQgb24gYSBzZWVkXG4gKiBAcGFyYW0gc2VlZFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0TmV4dFZhbHVlKCkge1xuICAgIHNlZWQgPSAoc2VlZCAqIDkzMDEgKyA0OTI5NykgJSAyMzMyODA7XG4gICAgcmV0dXJuIHNlZWQvKDIzMzI4MC4wKTtcbn1cblxuZnVuY3Rpb24gc2V0U2VlZChfc2VlZF8pIHtcbiAgICBzZWVkID0gX3NlZWRfO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBuZXh0VmFsdWU6IGdldE5leHRWYWx1ZSxcbiAgICBzZWVkOiBzZXRTZWVkXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IDA7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGluc3BlY3QgPSByZXF1aXJlKCdvYmplY3QtaW5zcGVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcbnZhciAkV2Vha01hcCA9IEdldEludHJpbnNpYygnJVdlYWtNYXAlJywgdHJ1ZSk7XG52YXIgJE1hcCA9IEdldEludHJpbnNpYygnJU1hcCUnLCB0cnVlKTtcblxudmFyICR3ZWFrTWFwR2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcFNldCA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuc2V0JywgdHJ1ZSk7XG52YXIgJHdlYWtNYXBIYXMgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmhhcycsIHRydWUpO1xudmFyICRtYXBHZXQgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuZ2V0JywgdHJ1ZSk7XG52YXIgJG1hcFNldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkbWFwSGFzID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLmhhcycsIHRydWUpO1xuXG4vKlxuICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIGxpc3QgcmV0dXJuaW5nIHRoZSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlXG4gKiBnaXZlbiBrZXkuXG4gKlxuICogVGhhdCBub2RlIGlzIGFsc28gbW92ZWQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXQgaWYgaXQncyBhY2Nlc3NlZFxuICogYWdhaW4gd2UgZG9uJ3QgbmVlZCB0byB0cmF2ZXJzZSB0aGUgd2hvbGUgbGlzdC4gQnkgZG9pbmcgc28sIGFsbCB0aGUgcmVjZW50bHlcbiAqIHVzZWQgbm9kZXMgY2FuIGJlIGFjY2Vzc2VkIHJlbGF0aXZlbHkgcXVpY2tseS5cbiAqL1xudmFyIGxpc3RHZXROb2RlID0gZnVuY3Rpb24gKGxpc3QsIGtleSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5cdGZvciAodmFyIHByZXYgPSBsaXN0LCBjdXJyOyAoY3VyciA9IHByZXYubmV4dCkgIT09IG51bGw7IHByZXYgPSBjdXJyKSB7XG5cdFx0aWYgKGN1cnIua2V5ID09PSBrZXkpIHtcblx0XHRcdHByZXYubmV4dCA9IGN1cnIubmV4dDtcblx0XHRcdGN1cnIubmV4dCA9IGxpc3QubmV4dDtcblx0XHRcdGxpc3QubmV4dCA9IGN1cnI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRcdHJldHVybiBjdXJyO1xuXHRcdH1cblx0fVxufTtcblxudmFyIGxpc3RHZXQgPSBmdW5jdGlvbiAob2JqZWN0cywga2V5KSB7XG5cdHZhciBub2RlID0gbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcblx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZTtcbn07XG52YXIgbGlzdFNldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXksIHZhbHVlKSB7XG5cdHZhciBub2RlID0gbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcblx0aWYgKG5vZGUpIHtcblx0XHRub2RlLnZhbHVlID0gdmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gUHJlcGVuZCB0aGUgbmV3IG5vZGUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuXHRcdG9iamVjdHMubmV4dCA9IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHRuZXh0OiBvYmplY3RzLm5leHQsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG59O1xudmFyIGxpc3RIYXMgPSBmdW5jdGlvbiAob2JqZWN0cywga2V5KSB7XG5cdHJldHVybiAhIWxpc3RHZXROb2RlKG9iamVjdHMsIGtleSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFNpZGVDaGFubmVsKCkge1xuXHR2YXIgJHdtO1xuXHR2YXIgJG07XG5cdHZhciAkbztcblx0dmFyIGNoYW5uZWwgPSB7XG5cdFx0YXNzZXJ0OiBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRpZiAoIWNoYW5uZWwuaGFzKGtleSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1NpZGUgY2hhbm5lbCBkb2VzIG5vdCBjb250YWluICcgKyBpbnNwZWN0KGtleSkpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Z2V0OiBmdW5jdGlvbiAoa2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICgkd20pIHtcblx0XHRcdFx0XHRyZXR1cm4gJHdlYWtNYXBHZXQoJHdtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCRNYXApIHtcblx0XHRcdFx0aWYgKCRtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICRtYXBHZXQoJG0sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgkbykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxvbmVseS1pZlxuXHRcdFx0XHRcdHJldHVybiBsaXN0R2V0KCRvLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRoYXM6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICgkd20pIHtcblx0XHRcdFx0XHRyZXR1cm4gJHdlYWtNYXBIYXMoJHdtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCRNYXApIHtcblx0XHRcdFx0aWYgKCRtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICRtYXBIYXMoJG0sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgkbykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxvbmVseS1pZlxuXHRcdFx0XHRcdHJldHVybiBsaXN0SGFzKCRvLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRpZiAoJFdlYWtNYXAgJiYga2V5ICYmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRpZiAoISR3bSkge1xuXHRcdFx0XHRcdCR3bSA9IG5ldyAkV2Vha01hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCR3ZWFrTWFwU2V0KCR3bSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKCRNYXApIHtcblx0XHRcdFx0aWYgKCEkbSkge1xuXHRcdFx0XHRcdCRtID0gbmV3ICRNYXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQkbWFwU2V0KCRtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICghJG8pIHtcblx0XHRcdFx0XHQvKlxuXHRcdFx0XHRcdCAqIEluaXRpYWxpemUgdGhlIGxpbmtlZCBsaXN0IGFzIGFuIGVtcHR5IG5vZGUsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZVxuXHRcdFx0XHRcdCAqIHRvIHNwZWNpYWwtY2FzZSBoYW5kbGluZyBvZiB0aGUgZmlyc3Qgbm9kZTogd2UgY2FuIGFsd2F5cyByZWZlciB0b1xuXHRcdFx0XHRcdCAqIGl0IGFzIChwcmV2aW91cyBub2RlKS5uZXh0LCBpbnN0ZWFkIG9mIHNvbWV0aGluZyBsaWtlIChsaXN0KS5oZWFkXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0JG8gPSB7IGtleToge30sIG5leHQ6IG51bGwgfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0U2V0KCRvLCBrZXksIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHJldHVybiBjaGFubmVsO1xufTtcbiIsIi8qISBzaW1wbGUtcGVlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzaW1wbGUtcGVlcicpXG5jb25zdCBnZXRCcm93c2VyUlRDID0gcmVxdWlyZSgnZ2V0LWJyb3dzZXItcnRjJylcbmNvbnN0IHJhbmRvbWJ5dGVzID0gcmVxdWlyZSgncmFuZG9tYnl0ZXMnKVxuY29uc3Qgc3RyZWFtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJylcbmNvbnN0IHF1ZXVlTWljcm90YXNrID0gcmVxdWlyZSgncXVldWUtbWljcm90YXNrJykgLy8gVE9ETzogcmVtb3ZlIHdoZW4gTm9kZSAxMCBpcyBub3Qgc3VwcG9ydGVkXG5jb25zdCBlcnJDb2RlID0gcmVxdWlyZSgnZXJyLWNvZGUnKVxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbmNvbnN0IE1BWF9CVUZGRVJFRF9BTU9VTlQgPSA2NCAqIDEwMjRcbmNvbnN0IElDRUNPTVBMRVRFX1RJTUVPVVQgPSA1ICogMTAwMFxuY29uc3QgQ0hBTk5FTF9DTE9TSU5HX1RJTUVPVVQgPSA1ICogMTAwMFxuXG4vLyBIQUNLOiBGaWx0ZXIgdHJpY2tsZSBsaW5lcyB3aGVuIHRyaWNrbGUgaXMgZGlzYWJsZWQgIzM1NFxuZnVuY3Rpb24gZmlsdGVyVHJpY2tsZSAoc2RwKSB7XG4gIHJldHVybiBzZHAucmVwbGFjZSgvYT1pY2Utb3B0aW9uczp0cmlja2xlXFxzXFxuL2csICcnKVxufVxuXG5mdW5jdGlvbiB3YXJuIChtZXNzYWdlKSB7XG4gIGNvbnNvbGUud2FybihtZXNzYWdlKVxufVxuXG4vKipcbiAqIFdlYlJUQyBwZWVyIGNvbm5lY3Rpb24uIFNhbWUgQVBJIGFzIG5vZGUgY29yZSBgbmV0LlNvY2tldGAsIHBsdXMgYSBmZXcgZXh0cmEgbWV0aG9kcy5cbiAqIER1cGxleCBzdHJlYW0uXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICovXG5jbGFzcyBQZWVyIGV4dGVuZHMgc3RyZWFtLkR1cGxleCB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgYWxsb3dIYWxmT3BlbjogZmFsc2VcbiAgICB9LCBvcHRzKVxuXG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXMuX2lkID0gcmFuZG9tYnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpLnNsaWNlKDAsIDcpXG4gICAgdGhpcy5fZGVidWcoJ25ldyBwZWVyICVvJywgb3B0cylcblxuICAgIHRoaXMuY2hhbm5lbE5hbWUgPSBvcHRzLmluaXRpYXRvclxuICAgICAgPyBvcHRzLmNoYW5uZWxOYW1lIHx8IHJhbmRvbWJ5dGVzKDIwKS50b1N0cmluZygnaGV4JylcbiAgICAgIDogbnVsbFxuXG4gICAgdGhpcy5pbml0aWF0b3IgPSBvcHRzLmluaXRpYXRvciB8fCBmYWxzZVxuICAgIHRoaXMuY2hhbm5lbENvbmZpZyA9IG9wdHMuY2hhbm5lbENvbmZpZyB8fCBQZWVyLmNoYW5uZWxDb25maWdcbiAgICB0aGlzLmNoYW5uZWxOZWdvdGlhdGVkID0gdGhpcy5jaGFubmVsQ29uZmlnLm5lZ290aWF0ZWRcbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIFBlZXIuY29uZmlnLCBvcHRzLmNvbmZpZylcbiAgICB0aGlzLm9mZmVyT3B0aW9ucyA9IG9wdHMub2ZmZXJPcHRpb25zIHx8IHt9XG4gICAgdGhpcy5hbnN3ZXJPcHRpb25zID0gb3B0cy5hbnN3ZXJPcHRpb25zIHx8IHt9XG4gICAgdGhpcy5zZHBUcmFuc2Zvcm0gPSBvcHRzLnNkcFRyYW5zZm9ybSB8fCAoc2RwID0+IHNkcClcbiAgICB0aGlzLnN0cmVhbXMgPSBvcHRzLnN0cmVhbXMgfHwgKG9wdHMuc3RyZWFtID8gW29wdHMuc3RyZWFtXSA6IFtdKSAvLyBzdXBwb3J0IG9sZCBcInN0cmVhbVwiIG9wdGlvblxuICAgIHRoaXMudHJpY2tsZSA9IG9wdHMudHJpY2tsZSAhPT0gdW5kZWZpbmVkID8gb3B0cy50cmlja2xlIDogdHJ1ZVxuICAgIHRoaXMuYWxsb3dIYWxmVHJpY2tsZSA9IG9wdHMuYWxsb3dIYWxmVHJpY2tsZSAhPT0gdW5kZWZpbmVkID8gb3B0cy5hbGxvd0hhbGZUcmlja2xlIDogZmFsc2VcbiAgICB0aGlzLmljZUNvbXBsZXRlVGltZW91dCA9IG9wdHMuaWNlQ29tcGxldGVUaW1lb3V0IHx8IElDRUNPTVBMRVRFX1RJTUVPVVRcblxuICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2VcbiAgICB0aGlzLmRlc3Ryb3lpbmcgPSBmYWxzZVxuICAgIHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlXG5cbiAgICB0aGlzLnJlbW90ZUFkZHJlc3MgPSB1bmRlZmluZWRcbiAgICB0aGlzLnJlbW90ZUZhbWlseSA9IHVuZGVmaW5lZFxuICAgIHRoaXMucmVtb3RlUG9ydCA9IHVuZGVmaW5lZFxuICAgIHRoaXMubG9jYWxBZGRyZXNzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5sb2NhbEZhbWlseSA9IHVuZGVmaW5lZFxuICAgIHRoaXMubG9jYWxQb3J0ID0gdW5kZWZpbmVkXG5cbiAgICB0aGlzLl93cnRjID0gKG9wdHMud3J0YyAmJiB0eXBlb2Ygb3B0cy53cnRjID09PSAnb2JqZWN0JylcbiAgICAgID8gb3B0cy53cnRjXG4gICAgICA6IGdldEJyb3dzZXJSVEMoKVxuXG4gICAgaWYgKCF0aGlzLl93cnRjKSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ05vIFdlYlJUQyBzdXBwb3J0OiBTcGVjaWZ5IGBvcHRzLndydGNgIG9wdGlvbiBpbiB0aGlzIGVudmlyb25tZW50JyksICdFUlJfV0VCUlRDX1NVUFBPUlQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ05vIFdlYlJUQyBzdXBwb3J0OiBOb3QgYSBzdXBwb3J0ZWQgYnJvd3NlcicpLCAnRVJSX1dFQlJUQ19TVVBQT1JUJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wY1JlYWR5ID0gZmFsc2VcbiAgICB0aGlzLl9jaGFubmVsUmVhZHkgPSBmYWxzZVxuICAgIHRoaXMuX2ljZUNvbXBsZXRlID0gZmFsc2UgLy8gaWNlIGNhbmRpZGF0ZSB0cmlja2xlIGRvbmUgKGdvdCBudWxsIGNhbmRpZGF0ZSlcbiAgICB0aGlzLl9pY2VDb21wbGV0ZVRpbWVyID0gbnVsbCAvLyBzZW5kIGFuIG9mZmVyL2Fuc3dlciBhbnl3YXkgYWZ0ZXIgc29tZSB0aW1lb3V0XG4gICAgdGhpcy5fY2hhbm5lbCA9IG51bGxcbiAgICB0aGlzLl9wZW5kaW5nQ2FuZGlkYXRlcyA9IFtdXG5cbiAgICB0aGlzLl9pc05lZ290aWF0aW5nID0gZmFsc2UgLy8gaXMgdGhpcyBwZWVyIHdhaXRpbmcgZm9yIG5lZ290aWF0aW9uIHRvIGNvbXBsZXRlP1xuICAgIHRoaXMuX2ZpcnN0TmVnb3RpYXRpb24gPSB0cnVlXG4gICAgdGhpcy5fYmF0Y2hlZE5lZ290aWF0aW9uID0gZmFsc2UgLy8gYmF0Y2ggc3luY2hyb25vdXMgbmVnb3RpYXRpb25zXG4gICAgdGhpcy5fcXVldWVkTmVnb3RpYXRpb24gPSBmYWxzZSAvLyBpcyB0aGVyZSBhIHF1ZXVlZCBuZWdvdGlhdGlvbiByZXF1ZXN0P1xuICAgIHRoaXMuX3NlbmRlcnNBd2FpdGluZ1N0YWJsZSA9IFtdXG4gICAgdGhpcy5fc2VuZGVyTWFwID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fY2xvc2luZ0ludGVydmFsID0gbnVsbFxuXG4gICAgdGhpcy5fcmVtb3RlVHJhY2tzID0gW11cbiAgICB0aGlzLl9yZW1vdGVTdHJlYW1zID0gW11cblxuICAgIHRoaXMuX2NodW5rID0gbnVsbFxuICAgIHRoaXMuX2NiID0gbnVsbFxuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbFxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX3BjID0gbmV3ICh0aGlzLl93cnRjLlJUQ1BlZXJDb25uZWN0aW9uKSh0aGlzLmNvbmZpZylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKGVyciwgJ0VSUl9QQ19DT05TVFJVQ1RPUicpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gV2UgcHJlZmVyIGZlYXR1cmUgZGV0ZWN0aW9uIHdoZW5ldmVyIHBvc3NpYmxlLCBidXQgc29tZXRpbWVzIHRoYXQncyBub3RcbiAgICAvLyBwb3NzaWJsZSBmb3IgY2VydGFpbiBpbXBsZW1lbnRhdGlvbnMuXG4gICAgdGhpcy5faXNSZWFjdE5hdGl2ZVdlYnJ0YyA9IHR5cGVvZiB0aGlzLl9wYy5fcGVlckNvbm5lY3Rpb25JZCA9PT0gJ251bWJlcidcblxuICAgIHRoaXMuX3BjLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fb25JY2VTdGF0ZUNoYW5nZSgpXG4gICAgfVxuICAgIHRoaXMuX3BjLm9uaWNlZ2F0aGVyaW5nc3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9vbkljZVN0YXRlQ2hhbmdlKClcbiAgICB9XG4gICAgdGhpcy5fcGMub25jb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9vbkNvbm5lY3Rpb25TdGF0ZUNoYW5nZSgpXG4gICAgfVxuICAgIHRoaXMuX3BjLm9uc2lnbmFsaW5nc3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9vblNpZ25hbGluZ1N0YXRlQ2hhbmdlKClcbiAgICB9XG4gICAgdGhpcy5fcGMub25pY2VjYW5kaWRhdGUgPSBldmVudCA9PiB7XG4gICAgICB0aGlzLl9vbkljZUNhbmRpZGF0ZShldmVudClcbiAgICB9XG5cbiAgICAvLyBIQUNLOiBGaXggZm9yIG9kZCBGaXJlZm94IGJlaGF2aW9yLCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3Mvc2ltcGxlLXBlZXIvcHVsbC83ODNcbiAgICBpZiAodHlwZW9mIHRoaXMuX3BjLnBlZXJJZGVudGl0eSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuX3BjLnBlZXJJZGVudGl0eS5jYXRjaChlcnIgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShlcnIsICdFUlJfUENfUEVFUl9JREVOVElUWScpKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBPdGhlciBzcGVjIGV2ZW50cywgdW51c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb246XG4gICAgLy8gLSBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZVxuICAgIC8vIC0gb25pY2VjYW5kaWRhdGVlcnJvclxuICAgIC8vIC0gb25maW5nZXJwcmludGZhaWx1cmVcbiAgICAvLyAtIG9ubmVnb3RpYXRpb25uZWVkZWRcblxuICAgIGlmICh0aGlzLmluaXRpYXRvciB8fCB0aGlzLmNoYW5uZWxOZWdvdGlhdGVkKSB7XG4gICAgICB0aGlzLl9zZXR1cERhdGEoe1xuICAgICAgICBjaGFubmVsOiB0aGlzLl9wYy5jcmVhdGVEYXRhQ2hhbm5lbCh0aGlzLmNoYW5uZWxOYW1lLCB0aGlzLmNoYW5uZWxDb25maWcpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wYy5vbmRhdGFjaGFubmVsID0gZXZlbnQgPT4ge1xuICAgICAgICB0aGlzLl9zZXR1cERhdGEoZXZlbnQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RyZWFtcykge1xuICAgICAgdGhpcy5zdHJlYW1zLmZvckVhY2goc3RyZWFtID0+IHtcbiAgICAgICAgdGhpcy5hZGRTdHJlYW0oc3RyZWFtKVxuICAgICAgfSlcbiAgICB9XG4gICAgdGhpcy5fcGMub250cmFjayA9IGV2ZW50ID0+IHtcbiAgICAgIHRoaXMuX29uVHJhY2soZXZlbnQpXG4gICAgfVxuXG4gICAgdGhpcy5fZGVidWcoJ2luaXRpYWwgbmVnb3RpYXRpb24nKVxuICAgIHRoaXMuX25lZWRzTmVnb3RpYXRpb24oKVxuXG4gICAgdGhpcy5fb25GaW5pc2hCb3VuZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX29uRmluaXNoKClcbiAgICB9XG4gICAgdGhpcy5vbmNlKCdmaW5pc2gnLCB0aGlzLl9vbkZpbmlzaEJvdW5kKVxuICB9XG5cbiAgZ2V0IGJ1ZmZlclNpemUgKCkge1xuICAgIHJldHVybiAodGhpcy5fY2hhbm5lbCAmJiB0aGlzLl9jaGFubmVsLmJ1ZmZlcmVkQW1vdW50KSB8fCAwXG4gIH1cblxuICAvLyBIQUNLOiBpdCdzIHBvc3NpYmxlIGNoYW5uZWwucmVhZHlTdGF0ZSBpcyBcImNsb3NpbmdcIiBiZWZvcmUgcGVlci5kZXN0cm95KCkgZmlyZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODgyNzQzXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiAodGhpcy5fY29ubmVjdGVkICYmIHRoaXMuX2NoYW5uZWwucmVhZHlTdGF0ZSA9PT0gJ29wZW4nKVxuICB9XG5cbiAgYWRkcmVzcyAoKSB7XG4gICAgcmV0dXJuIHsgcG9ydDogdGhpcy5sb2NhbFBvcnQsIGZhbWlseTogdGhpcy5sb2NhbEZhbWlseSwgYWRkcmVzczogdGhpcy5sb2NhbEFkZHJlc3MgfVxuICB9XG5cbiAgc2lnbmFsIChkYXRhKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWluZykgcmV0dXJuXG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignY2Fubm90IHNpZ25hbCBhZnRlciBwZWVyIGlzIGRlc3Ryb3llZCcpLCAnRVJSX0RFU1RST1lFRCcpXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBkYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fZGVidWcoJ3NpZ25hbCgpJylcblxuICAgIGlmIChkYXRhLnJlbmVnb3RpYXRlICYmIHRoaXMuaW5pdGlhdG9yKSB7XG4gICAgICB0aGlzLl9kZWJ1ZygnZ290IHJlcXVlc3QgdG8gcmVuZWdvdGlhdGUnKVxuICAgICAgdGhpcy5fbmVlZHNOZWdvdGlhdGlvbigpXG4gICAgfVxuICAgIGlmIChkYXRhLnRyYW5zY2VpdmVyUmVxdWVzdCAmJiB0aGlzLmluaXRpYXRvcikge1xuICAgICAgdGhpcy5fZGVidWcoJ2dvdCByZXF1ZXN0IGZvciB0cmFuc2NlaXZlcicpXG4gICAgICB0aGlzLmFkZFRyYW5zY2VpdmVyKGRhdGEudHJhbnNjZWl2ZXJSZXF1ZXN0LmtpbmQsIGRhdGEudHJhbnNjZWl2ZXJSZXF1ZXN0LmluaXQpXG4gICAgfVxuICAgIGlmIChkYXRhLmNhbmRpZGF0ZSkge1xuICAgICAgaWYgKHRoaXMuX3BjLnJlbW90ZURlc2NyaXB0aW9uICYmIHRoaXMuX3BjLnJlbW90ZURlc2NyaXB0aW9uLnR5cGUpIHtcbiAgICAgICAgdGhpcy5fYWRkSWNlQ2FuZGlkYXRlKGRhdGEuY2FuZGlkYXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NhbmRpZGF0ZXMucHVzaChkYXRhLmNhbmRpZGF0ZSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuc2RwKSB7XG4gICAgICB0aGlzLl9wYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihuZXcgKHRoaXMuX3dydGMuUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKShkYXRhKSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG5cbiAgICAgICAgICB0aGlzLl9wZW5kaW5nQ2FuZGlkYXRlcy5mb3JFYWNoKGNhbmRpZGF0ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hZGRJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5fcGVuZGluZ0NhbmRpZGF0ZXMgPSBbXVxuXG4gICAgICAgICAgaWYgKHRoaXMuX3BjLnJlbW90ZURlc2NyaXB0aW9uLnR5cGUgPT09ICdvZmZlcicpIHRoaXMuX2NyZWF0ZUFuc3dlcigpXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKGVyciwgJ0VSUl9TRVRfUkVNT1RFX0RFU0NSSVBUSU9OJykpXG4gICAgICAgIH0pXG4gICAgfVxuICAgIGlmICghZGF0YS5zZHAgJiYgIWRhdGEuY2FuZGlkYXRlICYmICFkYXRhLnJlbmVnb3RpYXRlICYmICFkYXRhLnRyYW5zY2VpdmVyUmVxdWVzdCkge1xuICAgICAgdGhpcy5kZXN0cm95KGVyckNvZGUobmV3IEVycm9yKCdzaWduYWwoKSBjYWxsZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCBkYXRhJyksICdFUlJfU0lHTkFMSU5HJykpXG4gICAgfVxuICB9XG5cbiAgX2FkZEljZUNhbmRpZGF0ZSAoY2FuZGlkYXRlKSB7XG4gICAgY29uc3QgaWNlQ2FuZGlkYXRlT2JqID0gbmV3IHRoaXMuX3dydGMuUlRDSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSlcbiAgICB0aGlzLl9wYy5hZGRJY2VDYW5kaWRhdGUoaWNlQ2FuZGlkYXRlT2JqKVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGlmICghaWNlQ2FuZGlkYXRlT2JqLmFkZHJlc3MgfHwgaWNlQ2FuZGlkYXRlT2JqLmFkZHJlc3MuZW5kc1dpdGgoJy5sb2NhbCcpKSB7XG4gICAgICAgICAgd2FybignSWdub3JpbmcgdW5zdXBwb3J0ZWQgSUNFIGNhbmRpZGF0ZS4nKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKGVyciwgJ0VSUl9BRERfSUNFX0NBTkRJREFURScpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgdGV4dC9iaW5hcnkgZGF0YSB0byB0aGUgcmVtb3RlIHBlZXIuXG4gICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJWaWV3fEFycmF5QnVmZmVyfEJ1ZmZlcnxzdHJpbmd8QmxvYn0gY2h1bmtcbiAgICovXG4gIHNlbmQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWluZykgcmV0dXJuXG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignY2Fubm90IHNlbmQgYWZ0ZXIgcGVlciBpcyBkZXN0cm95ZWQnKSwgJ0VSUl9ERVNUUk9ZRUQnKVxuICAgIHRoaXMuX2NoYW5uZWwuc2VuZChjaHVuaylcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBUcmFuc2NlaXZlciB0byB0aGUgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGtpbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IGluaXRcbiAgICovXG4gIGFkZFRyYW5zY2VpdmVyIChraW5kLCBpbml0KSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWluZykgcmV0dXJuXG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignY2Fubm90IGFkZFRyYW5zY2VpdmVyIGFmdGVyIHBlZXIgaXMgZGVzdHJveWVkJyksICdFUlJfREVTVFJPWUVEJylcbiAgICB0aGlzLl9kZWJ1ZygnYWRkVHJhbnNjZWl2ZXIoKScpXG5cbiAgICBpZiAodGhpcy5pbml0aWF0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX3BjLmFkZFRyYW5zY2VpdmVyKGtpbmQsIGluaXQpXG4gICAgICAgIHRoaXMuX25lZWRzTmVnb3RpYXRpb24oKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKGVyciwgJ0VSUl9BRERfVFJBTlNDRUlWRVInKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0KCdzaWduYWwnLCB7IC8vIHJlcXVlc3QgaW5pdGlhdG9yIHRvIHJlbmVnb3RpYXRlXG4gICAgICAgIHR5cGU6ICd0cmFuc2NlaXZlclJlcXVlc3QnLFxuICAgICAgICB0cmFuc2NlaXZlclJlcXVlc3Q6IHsga2luZCwgaW5pdCB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBNZWRpYVN0cmVhbSB0byB0aGUgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gc3RyZWFtXG4gICAqL1xuICBhZGRTdHJlYW0gKHN0cmVhbSkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3lpbmcpIHJldHVyblxuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ2Nhbm5vdCBhZGRTdHJlYW0gYWZ0ZXIgcGVlciBpcyBkZXN0cm95ZWQnKSwgJ0VSUl9ERVNUUk9ZRUQnKVxuICAgIHRoaXMuX2RlYnVnKCdhZGRTdHJlYW0oKScpXG5cbiAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLmFkZFRyYWNrKHRyYWNrLCBzdHJlYW0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBNZWRpYVN0cmVhbVRyYWNrIHRvIHRoZSBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge01lZGlhU3RyZWFtVHJhY2t9IHRyYWNrXG4gICAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IHN0cmVhbVxuICAgKi9cbiAgYWRkVHJhY2sgKHRyYWNrLCBzdHJlYW0pIHtcbiAgICBpZiAodGhpcy5kZXN0cm95aW5nKSByZXR1cm5cbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHRocm93IGVyckNvZGUobmV3IEVycm9yKCdjYW5ub3QgYWRkVHJhY2sgYWZ0ZXIgcGVlciBpcyBkZXN0cm95ZWQnKSwgJ0VSUl9ERVNUUk9ZRUQnKVxuICAgIHRoaXMuX2RlYnVnKCdhZGRUcmFjaygpJylcblxuICAgIGNvbnN0IHN1Ym1hcCA9IHRoaXMuX3NlbmRlck1hcC5nZXQodHJhY2spIHx8IG5ldyBNYXAoKSAvLyBuZXN0ZWQgTWFwcyBtYXAgW3RyYWNrLCBzdHJlYW1dIHRvIHNlbmRlclxuICAgIGxldCBzZW5kZXIgPSBzdWJtYXAuZ2V0KHN0cmVhbSlcbiAgICBpZiAoIXNlbmRlcikge1xuICAgICAgc2VuZGVyID0gdGhpcy5fcGMuYWRkVHJhY2sodHJhY2ssIHN0cmVhbSlcbiAgICAgIHN1Ym1hcC5zZXQoc3RyZWFtLCBzZW5kZXIpXG4gICAgICB0aGlzLl9zZW5kZXJNYXAuc2V0KHRyYWNrLCBzdWJtYXApXG4gICAgICB0aGlzLl9uZWVkc05lZ290aWF0aW9uKClcbiAgICB9IGVsc2UgaWYgKHNlbmRlci5yZW1vdmVkKSB7XG4gICAgICB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignVHJhY2sgaGFzIGJlZW4gcmVtb3ZlZC4gWW91IHNob3VsZCBlbmFibGUvZGlzYWJsZSB0cmFja3MgdGhhdCB5b3Ugd2FudCB0byByZS1hZGQuJyksICdFUlJfU0VOREVSX1JFTU9WRUQnKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignVHJhY2sgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGF0IHN0cmVhbS4nKSwgJ0VSUl9TRU5ERVJfQUxSRUFEWV9BRERFRCcpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBNZWRpYVN0cmVhbVRyYWNrIGJ5IGFub3RoZXIgaW4gdGhlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7TWVkaWFTdHJlYW1UcmFja30gb2xkVHJhY2tcbiAgICogQHBhcmFtIHtNZWRpYVN0cmVhbVRyYWNrfSBuZXdUcmFja1xuICAgKiBAcGFyYW0ge01lZGlhU3RyZWFtfSBzdHJlYW1cbiAgICovXG4gIHJlcGxhY2VUcmFjayAob2xkVHJhY2ssIG5ld1RyYWNrLCBzdHJlYW0pIHtcbiAgICBpZiAodGhpcy5kZXN0cm95aW5nKSByZXR1cm5cbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHRocm93IGVyckNvZGUobmV3IEVycm9yKCdjYW5ub3QgcmVwbGFjZVRyYWNrIGFmdGVyIHBlZXIgaXMgZGVzdHJveWVkJyksICdFUlJfREVTVFJPWUVEJylcbiAgICB0aGlzLl9kZWJ1ZygncmVwbGFjZVRyYWNrKCknKVxuXG4gICAgY29uc3Qgc3VibWFwID0gdGhpcy5fc2VuZGVyTWFwLmdldChvbGRUcmFjaylcbiAgICBjb25zdCBzZW5kZXIgPSBzdWJtYXAgPyBzdWJtYXAuZ2V0KHN0cmVhbSkgOiBudWxsXG4gICAgaWYgKCFzZW5kZXIpIHtcbiAgICAgIHRocm93IGVyckNvZGUobmV3IEVycm9yKCdDYW5ub3QgcmVwbGFjZSB0cmFjayB0aGF0IHdhcyBuZXZlciBhZGRlZC4nKSwgJ0VSUl9UUkFDS19OT1RfQURERUQnKVxuICAgIH1cbiAgICBpZiAobmV3VHJhY2spIHRoaXMuX3NlbmRlck1hcC5zZXQobmV3VHJhY2ssIHN1Ym1hcClcblxuICAgIGlmIChzZW5kZXIucmVwbGFjZVRyYWNrICE9IG51bGwpIHtcbiAgICAgIHNlbmRlci5yZXBsYWNlVHJhY2sobmV3VHJhY2spXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKG5ldyBFcnJvcigncmVwbGFjZVRyYWNrIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyJyksICdFUlJfVU5TVVBQT1JURURfUkVQTEFDRVRSQUNLJykpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIE1lZGlhU3RyZWFtVHJhY2sgZnJvbSB0aGUgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtNZWRpYVN0cmVhbVRyYWNrfSB0cmFja1xuICAgKiBAcGFyYW0ge01lZGlhU3RyZWFtfSBzdHJlYW1cbiAgICovXG4gIHJlbW92ZVRyYWNrICh0cmFjaywgc3RyZWFtKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWluZykgcmV0dXJuXG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignY2Fubm90IHJlbW92ZVRyYWNrIGFmdGVyIHBlZXIgaXMgZGVzdHJveWVkJyksICdFUlJfREVTVFJPWUVEJylcbiAgICB0aGlzLl9kZWJ1ZygncmVtb3ZlU2VuZGVyKCknKVxuXG4gICAgY29uc3Qgc3VibWFwID0gdGhpcy5fc2VuZGVyTWFwLmdldCh0cmFjaylcbiAgICBjb25zdCBzZW5kZXIgPSBzdWJtYXAgPyBzdWJtYXAuZ2V0KHN0cmVhbSkgOiBudWxsXG4gICAgaWYgKCFzZW5kZXIpIHtcbiAgICAgIHRocm93IGVyckNvZGUobmV3IEVycm9yKCdDYW5ub3QgcmVtb3ZlIHRyYWNrIHRoYXQgd2FzIG5ldmVyIGFkZGVkLicpLCAnRVJSX1RSQUNLX05PVF9BRERFRCcpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBzZW5kZXIucmVtb3ZlZCA9IHRydWVcbiAgICAgIHRoaXMuX3BjLnJlbW92ZVRyYWNrKHNlbmRlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIubmFtZSA9PT0gJ05TX0VSUk9SX1VORVhQRUNURUQnKSB7XG4gICAgICAgIHRoaXMuX3NlbmRlcnNBd2FpdGluZ1N0YWJsZS5wdXNoKHNlbmRlcikgLy8gSEFDSzogRmlyZWZveCBtdXN0IHdhaXQgdW50aWwgKHNpZ25hbGluZ1N0YXRlID09PSBzdGFibGUpIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTExMzM4NzRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKGVyciwgJ0VSUl9SRU1PVkVfVFJBQ0snKSlcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fbmVlZHNOZWdvdGlhdGlvbigpXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgTWVkaWFTdHJlYW0gZnJvbSB0aGUgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gc3RyZWFtXG4gICAqL1xuICByZW1vdmVTdHJlYW0gKHN0cmVhbSkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3lpbmcpIHJldHVyblxuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ2Nhbm5vdCByZW1vdmVTdHJlYW0gYWZ0ZXIgcGVlciBpcyBkZXN0cm95ZWQnKSwgJ0VSUl9ERVNUUk9ZRUQnKVxuICAgIHRoaXMuX2RlYnVnKCdyZW1vdmVTZW5kZXJzKCknKVxuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgdGhpcy5yZW1vdmVUcmFjayh0cmFjaywgc3RyZWFtKVxuICAgIH0pXG4gIH1cblxuICBfbmVlZHNOZWdvdGlhdGlvbiAoKSB7XG4gICAgdGhpcy5fZGVidWcoJ19uZWVkc05lZ290aWF0aW9uJylcbiAgICBpZiAodGhpcy5fYmF0Y2hlZE5lZ290aWF0aW9uKSByZXR1cm4gLy8gYmF0Y2ggc3luY2hyb25vdXMgcmVuZWdvdGlhdGlvbnNcbiAgICB0aGlzLl9iYXRjaGVkTmVnb3RpYXRpb24gPSB0cnVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgdGhpcy5fYmF0Y2hlZE5lZ290aWF0aW9uID0gZmFsc2VcbiAgICAgIGlmICh0aGlzLmluaXRpYXRvciB8fCAhdGhpcy5fZmlyc3ROZWdvdGlhdGlvbikge1xuICAgICAgICB0aGlzLl9kZWJ1Zygnc3RhcnRpbmcgYmF0Y2hlZCBuZWdvdGlhdGlvbicpXG4gICAgICAgIHRoaXMubmVnb3RpYXRlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCdub24taW5pdGlhdG9yIGluaXRpYWwgbmVnb3RpYXRpb24gcmVxdWVzdCBkaXNjYXJkZWQnKVxuICAgICAgfVxuICAgICAgdGhpcy5fZmlyc3ROZWdvdGlhdGlvbiA9IGZhbHNlXG4gICAgfSlcbiAgfVxuXG4gIG5lZ290aWF0ZSAoKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWluZykgcmV0dXJuXG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignY2Fubm90IG5lZ290aWF0ZSBhZnRlciBwZWVyIGlzIGRlc3Ryb3llZCcpLCAnRVJSX0RFU1RST1lFRCcpXG5cbiAgICBpZiAodGhpcy5pbml0aWF0b3IpIHtcbiAgICAgIGlmICh0aGlzLl9pc05lZ290aWF0aW5nKSB7XG4gICAgICAgIHRoaXMuX3F1ZXVlZE5lZ290aWF0aW9uID0gdHJ1ZVxuICAgICAgICB0aGlzLl9kZWJ1ZygnYWxyZWFkeSBuZWdvdGlhdGluZywgcXVldWVpbmcnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGVidWcoJ3N0YXJ0IG5lZ290aWF0aW9uJylcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIEhBQ0s6IENocm9tZSBjcmFzaGVzIGlmIHdlIGltbWVkaWF0ZWx5IGNhbGwgY3JlYXRlT2ZmZXJcbiAgICAgICAgICB0aGlzLl9jcmVhdGVPZmZlcigpXG4gICAgICAgIH0sIDApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9pc05lZ290aWF0aW5nKSB7XG4gICAgICAgIHRoaXMuX3F1ZXVlZE5lZ290aWF0aW9uID0gdHJ1ZVxuICAgICAgICB0aGlzLl9kZWJ1ZygnYWxyZWFkeSBuZWdvdGlhdGluZywgcXVldWVpbmcnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGVidWcoJ3JlcXVlc3RpbmcgbmVnb3RpYXRpb24gZnJvbSBpbml0aWF0b3InKVxuICAgICAgICB0aGlzLmVtaXQoJ3NpZ25hbCcsIHsgLy8gcmVxdWVzdCBpbml0aWF0b3IgdG8gcmVuZWdvdGlhdGVcbiAgICAgICAgICB0eXBlOiAncmVuZWdvdGlhdGUnLFxuICAgICAgICAgIHJlbmVnb3RpYXRlOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2lzTmVnb3RpYXRpbmcgPSB0cnVlXG4gIH1cblxuICAvLyBUT0RPOiBEZWxldGUgdGhpcyBtZXRob2Qgb25jZSByZWFkYWJsZS1zdHJlYW0gaXMgdXBkYXRlZCB0byBjb250YWluIGEgZGVmYXVsdFxuICAvLyBpbXBsZW1lbnRhdGlvbiBvZiBkZXN0cm95KCkgdGhhdCBhdXRvbWF0aWNhbGx5IGNhbGxzIF9kZXN0cm95KClcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3JlYWRhYmxlLXN0cmVhbS9pc3N1ZXMvMjgzXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIHRoaXMuX2Rlc3Ryb3koZXJyLCAoKSA9PiB7fSlcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNiKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IHRoaXMuZGVzdHJveWluZykgcmV0dXJuXG4gICAgdGhpcy5kZXN0cm95aW5nID0gdHJ1ZVxuXG4gICAgdGhpcy5fZGVidWcoJ2Rlc3Ryb3lpbmcgKGVycm9yOiAlcyknLCBlcnIgJiYgKGVyci5tZXNzYWdlIHx8IGVycikpXG5cbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7IC8vIGFsbG93IGV2ZW50cyBjb25jdXJyZW50IHdpdGggdGhlIGNhbGwgdG8gX2Rlc3Ryb3koKSB0byBmaXJlIChzZWUgIzY5MilcbiAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZVxuICAgICAgdGhpcy5kZXN0cm95aW5nID0gZmFsc2VcblxuICAgICAgdGhpcy5fZGVidWcoJ2Rlc3Ryb3kgKGVycm9yOiAlcyknLCBlcnIgJiYgKGVyci5tZXNzYWdlIHx8IGVycikpXG5cbiAgICAgIHRoaXMucmVhZGFibGUgPSB0aGlzLndyaXRhYmxlID0gZmFsc2VcblxuICAgICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSB0aGlzLnB1c2gobnVsbClcbiAgICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCkgdGhpcy5lbmQoKVxuXG4gICAgICB0aGlzLl9jb25uZWN0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5fcGNSZWFkeSA9IGZhbHNlXG4gICAgICB0aGlzLl9jaGFubmVsUmVhZHkgPSBmYWxzZVxuICAgICAgdGhpcy5fcmVtb3RlVHJhY2tzID0gbnVsbFxuICAgICAgdGhpcy5fcmVtb3RlU3RyZWFtcyA9IG51bGxcbiAgICAgIHRoaXMuX3NlbmRlck1hcCA9IG51bGxcblxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9jbG9zaW5nSW50ZXJ2YWwpXG4gICAgICB0aGlzLl9jbG9zaW5nSW50ZXJ2YWwgPSBudWxsXG5cbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpXG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgICAgIHRoaXMuX2NodW5rID0gbnVsbFxuICAgICAgdGhpcy5fY2IgPSBudWxsXG5cbiAgICAgIGlmICh0aGlzLl9vbkZpbmlzaEJvdW5kKSB0aGlzLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCB0aGlzLl9vbkZpbmlzaEJvdW5kKVxuICAgICAgdGhpcy5fb25GaW5pc2hCb3VuZCA9IG51bGxcblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsLmNsb3NlKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXG4gICAgICAgIC8vIGFsbG93IGV2ZW50cyBjb25jdXJyZW50IHdpdGggZGVzdHJ1Y3Rpb24gdG8gYmUgaGFuZGxlZFxuICAgICAgICB0aGlzLl9jaGFubmVsLm9ubWVzc2FnZSA9IG51bGxcbiAgICAgICAgdGhpcy5fY2hhbm5lbC5vbm9wZW4gPSBudWxsXG4gICAgICAgIHRoaXMuX2NoYW5uZWwub25jbG9zZSA9IG51bGxcbiAgICAgICAgdGhpcy5fY2hhbm5lbC5vbmVycm9yID0gbnVsbFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3BjKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5fcGMuY2xvc2UoKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG5cbiAgICAgICAgLy8gYWxsb3cgZXZlbnRzIGNvbmN1cnJlbnQgd2l0aCBkZXN0cnVjdGlvbiB0byBiZSBoYW5kbGVkXG4gICAgICAgIHRoaXMuX3BjLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gbnVsbFxuICAgICAgICB0aGlzLl9wYy5vbmljZWdhdGhlcmluZ3N0YXRlY2hhbmdlID0gbnVsbFxuICAgICAgICB0aGlzLl9wYy5vbnNpZ25hbGluZ3N0YXRlY2hhbmdlID0gbnVsbFxuICAgICAgICB0aGlzLl9wYy5vbmljZWNhbmRpZGF0ZSA9IG51bGxcbiAgICAgICAgdGhpcy5fcGMub250cmFjayA9IG51bGxcbiAgICAgICAgdGhpcy5fcGMub25kYXRhY2hhbm5lbCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMuX3BjID0gbnVsbFxuICAgICAgdGhpcy5fY2hhbm5lbCA9IG51bGxcblxuICAgICAgaWYgKGVycikgdGhpcy5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIHRoaXMuZW1pdCgnY2xvc2UnKVxuICAgICAgY2IoKVxuICAgIH0pXG4gIH1cblxuICBfc2V0dXBEYXRhIChldmVudCkge1xuICAgIGlmICghZXZlbnQuY2hhbm5lbCkge1xuICAgICAgLy8gSW4gc29tZSBzaXR1YXRpb25zIGBwYy5jcmVhdGVEYXRhQ2hhbm5lbCgpYCByZXR1cm5zIGB1bmRlZmluZWRgIChpbiB3cnRjKSxcbiAgICAgIC8vIHdoaWNoIGlzIGludmFsaWQgYmVoYXZpb3IuIEhhbmRsZSBpdCBncmFjZWZ1bGx5LlxuICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL3NpbXBsZS1wZWVyL2lzc3Vlcy8xNjNcbiAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3koZXJyQ29kZShuZXcgRXJyb3IoJ0RhdGEgY2hhbm5lbCBldmVudCBpcyBtaXNzaW5nIGBjaGFubmVsYCBwcm9wZXJ0eScpLCAnRVJSX0RBVEFfQ0hBTk5FTCcpKVxuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWwgPSBldmVudC5jaGFubmVsXG4gICAgdGhpcy5fY2hhbm5lbC5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJ1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9jaGFubmVsLmJ1ZmZlcmVkQW1vdW50TG93VGhyZXNob2xkID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5fY2hhbm5lbC5idWZmZXJlZEFtb3VudExvd1RocmVzaG9sZCA9IE1BWF9CVUZGRVJFRF9BTU9VTlRcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5uZWxOYW1lID0gdGhpcy5fY2hhbm5lbC5sYWJlbFxuXG4gICAgdGhpcy5fY2hhbm5lbC5vbm1lc3NhZ2UgPSBldmVudCA9PiB7XG4gICAgICB0aGlzLl9vbkNoYW5uZWxNZXNzYWdlKGV2ZW50KVxuICAgIH1cbiAgICB0aGlzLl9jaGFubmVsLm9uYnVmZmVyZWRhbW91bnRsb3cgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9vbkNoYW5uZWxCdWZmZXJlZEFtb3VudExvdygpXG4gICAgfVxuICAgIHRoaXMuX2NoYW5uZWwub25vcGVuID0gKCkgPT4ge1xuICAgICAgdGhpcy5fb25DaGFubmVsT3BlbigpXG4gICAgfVxuICAgIHRoaXMuX2NoYW5uZWwub25jbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX29uQ2hhbm5lbENsb3NlKClcbiAgICB9XG4gICAgdGhpcy5fY2hhbm5lbC5vbmVycm9yID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgZXJyID0gZXZlbnQuZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICA/IGV2ZW50LmVycm9yXG4gICAgICAgIDogbmV3IEVycm9yKGBEYXRhY2hhbm5lbCBlcnJvcjogJHtldmVudC5tZXNzYWdlfSAke2V2ZW50LmZpbGVuYW1lfToke2V2ZW50LmxpbmVub306JHtldmVudC5jb2xub31gKVxuICAgICAgdGhpcy5kZXN0cm95KGVyckNvZGUoZXJyLCAnRVJSX0RBVEFfQ0hBTk5FTCcpKVxuICAgIH1cblxuICAgIC8vIEhBQ0s6IENocm9tZSB3aWxsIHNvbWV0aW1lcyBnZXQgc3R1Y2sgaW4gcmVhZHlTdGF0ZSBcImNsb3NpbmdcIiwgbGV0J3MgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uXG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODgyNzQzXG4gICAgbGV0IGlzQ2xvc2luZyA9IGZhbHNlXG4gICAgdGhpcy5fY2xvc2luZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4geyAvLyBObyBcIm9uY2xvc2luZ1wiIGV2ZW50XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbCAmJiB0aGlzLl9jaGFubmVsLnJlYWR5U3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgICBpZiAoaXNDbG9zaW5nKSB0aGlzLl9vbkNoYW5uZWxDbG9zZSgpIC8vIGNsb3NpbmcgdGltZWQgb3V0OiBlcXVpdmFsZW50IHRvIG9uY2xvc2UgZmlyaW5nXG4gICAgICAgIGlzQ2xvc2luZyA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzQ2xvc2luZyA9IGZhbHNlXG4gICAgICB9XG4gICAgfSwgQ0hBTk5FTF9DTE9TSU5HX1RJTUVPVVQpXG4gIH1cblxuICBfcmVhZCAoKSB7fVxuXG4gIF93cml0ZSAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuIGNiKGVyckNvZGUobmV3IEVycm9yKCdjYW5ub3Qgd3JpdGUgYWZ0ZXIgcGVlciBpcyBkZXN0cm95ZWQnKSwgJ0VSUl9EQVRBX0NIQU5ORUwnKSlcblxuICAgIGlmICh0aGlzLl9jb25uZWN0ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc2VuZChjaHVuaylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXN0cm95KGVyckNvZGUoZXJyLCAnRVJSX0RBVEFfQ0hBTk5FTCcpKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWwuYnVmZmVyZWRBbW91bnQgPiBNQVhfQlVGRkVSRURfQU1PVU5UKSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCdzdGFydCBiYWNrcHJlc3N1cmU6IGJ1ZmZlcmVkQW1vdW50ICVkJywgdGhpcy5fY2hhbm5lbC5idWZmZXJlZEFtb3VudClcbiAgICAgICAgdGhpcy5fY2IgPSBjYlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2IobnVsbClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGVidWcoJ3dyaXRlIGJlZm9yZSBjb25uZWN0JylcbiAgICAgIHRoaXMuX2NodW5rID0gY2h1bmtcbiAgICAgIHRoaXMuX2NiID0gY2JcbiAgICB9XG4gIH1cblxuICAvLyBXaGVuIHN0cmVhbSBmaW5pc2hlcyB3cml0aW5nLCBjbG9zZSBzb2NrZXQuIEhhbGYgb3BlbiBjb25uZWN0aW9ucyBhcmUgbm90XG4gIC8vIHN1cHBvcnRlZC5cbiAgX29uRmluaXNoICgpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuXG4gICAgLy8gV2FpdCBhIGJpdCBiZWZvcmUgZGVzdHJveWluZyBzbyB0aGUgc29ja2V0IGZsdXNoZXMuXG4gICAgLy8gVE9ETzogaXMgdGhlcmUgYSBtb3JlIHJlbGlhYmxlIHdheSB0byBhY2NvbXBsaXNoIHRoaXM/XG4gICAgY29uc3QgZGVzdHJveVNvb24gPSAoKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGVzdHJveSgpLCAxMDAwKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25uZWN0ZWQpIHtcbiAgICAgIGRlc3Ryb3lTb29uKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbmNlKCdjb25uZWN0JywgZGVzdHJveVNvb24pXG4gICAgfVxuICB9XG5cbiAgX3N0YXJ0SWNlQ29tcGxldGVUaW1lb3V0ICgpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuICAgIGlmICh0aGlzLl9pY2VDb21wbGV0ZVRpbWVyKSByZXR1cm5cbiAgICB0aGlzLl9kZWJ1Zygnc3RhcnRlZCBpY2VDb21wbGV0ZSB0aW1lb3V0JylcbiAgICB0aGlzLl9pY2VDb21wbGV0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2ljZUNvbXBsZXRlKSB7XG4gICAgICAgIHRoaXMuX2ljZUNvbXBsZXRlID0gdHJ1ZVxuICAgICAgICB0aGlzLl9kZWJ1ZygnaWNlQ29tcGxldGUgdGltZW91dCBjb21wbGV0ZWQnKVxuICAgICAgICB0aGlzLmVtaXQoJ2ljZVRpbWVvdXQnKVxuICAgICAgICB0aGlzLmVtaXQoJ19pY2VDb21wbGV0ZScpXG4gICAgICB9XG4gICAgfSwgdGhpcy5pY2VDb21wbGV0ZVRpbWVvdXQpXG4gIH1cblxuICBfY3JlYXRlT2ZmZXIgKCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG5cbiAgICB0aGlzLl9wYy5jcmVhdGVPZmZlcih0aGlzLm9mZmVyT3B0aW9ucylcbiAgICAgIC50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICAgICAgaWYgKCF0aGlzLnRyaWNrbGUgJiYgIXRoaXMuYWxsb3dIYWxmVHJpY2tsZSkgb2ZmZXIuc2RwID0gZmlsdGVyVHJpY2tsZShvZmZlci5zZHApXG4gICAgICAgIG9mZmVyLnNkcCA9IHRoaXMuc2RwVHJhbnNmb3JtKG9mZmVyLnNkcClcblxuICAgICAgICBjb25zdCBzZW5kT2ZmZXIgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICAgICAgICBjb25zdCBzaWduYWwgPSB0aGlzLl9wYy5sb2NhbERlc2NyaXB0aW9uIHx8IG9mZmVyXG4gICAgICAgICAgdGhpcy5fZGVidWcoJ3NpZ25hbCcpXG4gICAgICAgICAgdGhpcy5lbWl0KCdzaWduYWwnLCB7XG4gICAgICAgICAgICB0eXBlOiBzaWduYWwudHlwZSxcbiAgICAgICAgICAgIHNkcDogc2lnbmFsLnNkcFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVidWcoJ2NyZWF0ZU9mZmVyIHN1Y2Nlc3MnKVxuICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG4gICAgICAgICAgaWYgKHRoaXMudHJpY2tsZSB8fCB0aGlzLl9pY2VDb21wbGV0ZSkgc2VuZE9mZmVyKClcbiAgICAgICAgICBlbHNlIHRoaXMub25jZSgnX2ljZUNvbXBsZXRlJywgc2VuZE9mZmVyKSAvLyB3YWl0IGZvciBjYW5kaWRhdGVzXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvbkVycm9yID0gZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShlcnIsICdFUlJfU0VUX0xPQ0FMX0RFU0NSSVBUSU9OJykpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wYy5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKVxuICAgICAgICAgIC50aGVuKG9uU3VjY2VzcylcbiAgICAgICAgICAuY2F0Y2gob25FcnJvcilcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdGhpcy5kZXN0cm95KGVyckNvZGUoZXJyLCAnRVJSX0NSRUFURV9PRkZFUicpKVxuICAgICAgfSlcbiAgfVxuXG4gIF9yZXF1ZXN0TWlzc2luZ1RyYW5zY2VpdmVycyAoKSB7XG4gICAgaWYgKHRoaXMuX3BjLmdldFRyYW5zY2VpdmVycykge1xuICAgICAgdGhpcy5fcGMuZ2V0VHJhbnNjZWl2ZXJzKCkuZm9yRWFjaCh0cmFuc2NlaXZlciA9PiB7XG4gICAgICAgIGlmICghdHJhbnNjZWl2ZXIubWlkICYmIHRyYW5zY2VpdmVyLnNlbmRlci50cmFjayAmJiAhdHJhbnNjZWl2ZXIucmVxdWVzdGVkKSB7XG4gICAgICAgICAgdHJhbnNjZWl2ZXIucmVxdWVzdGVkID0gdHJ1ZSAvLyBIQUNLOiBTYWZhcmkgcmV0dXJucyBuZWdvdGlhdGVkIHRyYW5zY2VpdmVycyB3aXRoIGEgbnVsbCBtaWRcbiAgICAgICAgICB0aGlzLmFkZFRyYW5zY2VpdmVyKHRyYW5zY2VpdmVyLnNlbmRlci50cmFjay5raW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIF9jcmVhdGVBbnN3ZXIgKCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG5cbiAgICB0aGlzLl9wYy5jcmVhdGVBbnN3ZXIodGhpcy5hbnN3ZXJPcHRpb25zKVxuICAgICAgLnRoZW4oYW5zd2VyID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICAgICAgaWYgKCF0aGlzLnRyaWNrbGUgJiYgIXRoaXMuYWxsb3dIYWxmVHJpY2tsZSkgYW5zd2VyLnNkcCA9IGZpbHRlclRyaWNrbGUoYW5zd2VyLnNkcClcbiAgICAgICAgYW5zd2VyLnNkcCA9IHRoaXMuc2RwVHJhbnNmb3JtKGFuc3dlci5zZHApXG5cbiAgICAgICAgY29uc3Qgc2VuZEFuc3dlciA9ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuICAgICAgICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX3BjLmxvY2FsRGVzY3JpcHRpb24gfHwgYW5zd2VyXG4gICAgICAgICAgdGhpcy5fZGVidWcoJ3NpZ25hbCcpXG4gICAgICAgICAgdGhpcy5lbWl0KCdzaWduYWwnLCB7XG4gICAgICAgICAgICB0eXBlOiBzaWduYWwudHlwZSxcbiAgICAgICAgICAgIHNkcDogc2lnbmFsLnNkcFxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKCF0aGlzLmluaXRpYXRvcikgdGhpcy5fcmVxdWVzdE1pc3NpbmdUcmFuc2NlaXZlcnMoKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb25TdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG4gICAgICAgICAgaWYgKHRoaXMudHJpY2tsZSB8fCB0aGlzLl9pY2VDb21wbGV0ZSkgc2VuZEFuc3dlcigpXG4gICAgICAgICAgZWxzZSB0aGlzLm9uY2UoJ19pY2VDb21wbGV0ZScsIHNlbmRBbnN3ZXIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvbkVycm9yID0gZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShlcnIsICdFUlJfU0VUX0xPQ0FMX0RFU0NSSVBUSU9OJykpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wYy5zZXRMb2NhbERlc2NyaXB0aW9uKGFuc3dlcilcbiAgICAgICAgICAudGhlbihvblN1Y2Nlc3MpXG4gICAgICAgICAgLmNhdGNoKG9uRXJyb3IpXG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKGVyciwgJ0VSUl9DUkVBVEVfQU5TV0VSJykpXG4gICAgICB9KVxuICB9XG5cbiAgX29uQ29ubmVjdGlvblN0YXRlQ2hhbmdlICgpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuICAgIGlmICh0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGUgPT09ICdmYWlsZWQnKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShuZXcgRXJyb3IoJ0Nvbm5lY3Rpb24gZmFpbGVkLicpLCAnRVJSX0NPTk5FQ1RJT05fRkFJTFVSRScpKVxuICAgIH1cbiAgfVxuXG4gIF9vbkljZVN0YXRlQ2hhbmdlICgpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuICAgIGNvbnN0IGljZUNvbm5lY3Rpb25TdGF0ZSA9IHRoaXMuX3BjLmljZUNvbm5lY3Rpb25TdGF0ZVxuICAgIGNvbnN0IGljZUdhdGhlcmluZ1N0YXRlID0gdGhpcy5fcGMuaWNlR2F0aGVyaW5nU3RhdGVcblxuICAgIHRoaXMuX2RlYnVnKFxuICAgICAgJ2ljZVN0YXRlQ2hhbmdlIChjb25uZWN0aW9uOiAlcykgKGdhdGhlcmluZzogJXMpJyxcbiAgICAgIGljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgIGljZUdhdGhlcmluZ1N0YXRlXG4gICAgKVxuICAgIHRoaXMuZW1pdCgnaWNlU3RhdGVDaGFuZ2UnLCBpY2VDb25uZWN0aW9uU3RhdGUsIGljZUdhdGhlcmluZ1N0YXRlKVxuXG4gICAgaWYgKGljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nvbm5lY3RlZCcgfHwgaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY29tcGxldGVkJykge1xuICAgICAgdGhpcy5fcGNSZWFkeSA9IHRydWVcbiAgICAgIHRoaXMuX21heWJlUmVhZHkoKVxuICAgIH1cbiAgICBpZiAoaWNlQ29ubmVjdGlvblN0YXRlID09PSAnZmFpbGVkJykge1xuICAgICAgdGhpcy5kZXN0cm95KGVyckNvZGUobmV3IEVycm9yKCdJY2UgY29ubmVjdGlvbiBmYWlsZWQuJyksICdFUlJfSUNFX0NPTk5FQ1RJT05fRkFJTFVSRScpKVxuICAgIH1cbiAgICBpZiAoaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgdGhpcy5kZXN0cm95KGVyckNvZGUobmV3IEVycm9yKCdJY2UgY29ubmVjdGlvbiBjbG9zZWQuJyksICdFUlJfSUNFX0NPTk5FQ1RJT05fQ0xPU0VEJykpXG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMgKGNiKSB7XG4gICAgLy8gc3RhdHJlcG9ydHMgY2FuIGNvbWUgd2l0aCBhIHZhbHVlIGFycmF5IGluc3RlYWQgb2YgcHJvcGVydGllc1xuICAgIGNvbnN0IGZsYXR0ZW5WYWx1ZXMgPSByZXBvcnQgPT4ge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZXBvcnQudmFsdWVzKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICByZXBvcnQudmFsdWVzLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVwb3J0LCB2YWx1ZSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXBvcnRcbiAgICB9XG5cbiAgICAvLyBQcm9taXNlLWJhc2VkIGdldFN0YXRzKCkgKHN0YW5kYXJkKVxuICAgIGlmICh0aGlzLl9wYy5nZXRTdGF0cy5sZW5ndGggPT09IDAgfHwgdGhpcy5faXNSZWFjdE5hdGl2ZVdlYnJ0Yykge1xuICAgICAgdGhpcy5fcGMuZ2V0U3RhdHMoKVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcG9ydHMgPSBbXVxuICAgICAgICAgIHJlcy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICByZXBvcnRzLnB1c2goZmxhdHRlblZhbHVlcyhyZXBvcnQpKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgY2IobnVsbCwgcmVwb3J0cylcbiAgICAgICAgfSwgZXJyID0+IGNiKGVycikpXG5cbiAgICAvLyBTaW5nbGUtcGFyYW1ldGVyIGNhbGxiYWNrLWJhc2VkIGdldFN0YXRzKCkgKG5vbi1zdGFuZGFyZClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BjLmdldFN0YXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3BjLmdldFN0YXRzKHJlcyA9PiB7XG4gICAgICAgIC8vIElmIHdlIGRlc3Ryb3kgY29ubmVjdGlvbiBpbiBgY29ubmVjdGAgY2FsbGJhY2sgdGhpcyBjb2RlIG1pZ2h0IGhhcHBlbiB0byBydW4gd2hlbiBhY3R1YWwgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGNsb3NlZFxuICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuXG4gICAgICAgIGNvbnN0IHJlcG9ydHMgPSBbXVxuICAgICAgICByZXMucmVzdWx0KCkuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcG9ydCA9IHt9XG4gICAgICAgICAgcmVzdWx0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgIHJlcG9ydFtuYW1lXSA9IHJlc3VsdC5zdGF0KG5hbWUpXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXBvcnQuaWQgPSByZXN1bHQuaWRcbiAgICAgICAgICByZXBvcnQudHlwZSA9IHJlc3VsdC50eXBlXG4gICAgICAgICAgcmVwb3J0LnRpbWVzdGFtcCA9IHJlc3VsdC50aW1lc3RhbXBcbiAgICAgICAgICByZXBvcnRzLnB1c2goZmxhdHRlblZhbHVlcyhyZXBvcnQpKVxuICAgICAgICB9KVxuICAgICAgICBjYihudWxsLCByZXBvcnRzKVxuICAgICAgfSwgZXJyID0+IGNiKGVycikpXG5cbiAgICAvLyBVbmtub3duIGJyb3dzZXIsIHNraXAgZ2V0U3RhdHMoKSBzaW5jZSBpdCdzIGFueW9uZSdzIGd1ZXNzIHdoaWNoIHN0eWxlIG9mXG4gICAgLy8gZ2V0U3RhdHMoKSB0aGV5IGltcGxlbWVudC5cbiAgICB9IGVsc2Uge1xuICAgICAgY2IobnVsbCwgW10pXG4gICAgfVxuICB9XG5cbiAgX21heWJlUmVhZHkgKCkge1xuICAgIHRoaXMuX2RlYnVnKCdtYXliZVJlYWR5IHBjICVzIGNoYW5uZWwgJXMnLCB0aGlzLl9wY1JlYWR5LCB0aGlzLl9jaGFubmVsUmVhZHkpXG4gICAgaWYgKHRoaXMuX2Nvbm5lY3RlZCB8fCB0aGlzLl9jb25uZWN0aW5nIHx8ICF0aGlzLl9wY1JlYWR5IHx8ICF0aGlzLl9jaGFubmVsUmVhZHkpIHJldHVyblxuXG4gICAgdGhpcy5fY29ubmVjdGluZyA9IHRydWVcblxuICAgIC8vIEhBQ0s6IFdlIGNhbid0IHJlbHkgb24gb3JkZXIgaGVyZSwgZm9yIGRldGFpbHMgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1wbGF0Zm9ybS9ub2RlLXdlYnJ0Yy9pc3N1ZXMvMzM5XG4gICAgY29uc3QgZmluZENhbmRpZGF0ZVBhaXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuXG4gICAgICB0aGlzLmdldFN0YXRzKChlcnIsIGl0ZW1zKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG5cbiAgICAgICAgLy8gVHJlYXQgZ2V0U3RhdHMgZXJyb3IgYXMgbm9uLWZhdGFsLiBJdCdzIG5vdCBlc3NlbnRpYWwuXG4gICAgICAgIGlmIChlcnIpIGl0ZW1zID0gW11cblxuICAgICAgICBjb25zdCByZW1vdGVDYW5kaWRhdGVzID0ge31cbiAgICAgICAgY29uc3QgbG9jYWxDYW5kaWRhdGVzID0ge31cbiAgICAgICAgY29uc3QgY2FuZGlkYXRlUGFpcnMgPSB7fVxuICAgICAgICBsZXQgZm91bmRTZWxlY3RlZENhbmRpZGF0ZVBhaXIgPSBmYWxzZVxuXG4gICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgLy8gVE9ETzogT25jZSBhbGwgYnJvd3NlcnMgc3VwcG9ydCB0aGUgaHlwaGVuYXRlZCBzdGF0cyByZXBvcnQgdHlwZXMsIHJlbW92ZVxuICAgICAgICAgIC8vIHRoZSBub24taHlwZW5hdGVkIG9uZXNcbiAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSAncmVtb3RlY2FuZGlkYXRlJyB8fCBpdGVtLnR5cGUgPT09ICdyZW1vdGUtY2FuZGlkYXRlJykge1xuICAgICAgICAgICAgcmVtb3RlQ2FuZGlkYXRlc1tpdGVtLmlkXSA9IGl0ZW1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2xvY2FsY2FuZGlkYXRlJyB8fCBpdGVtLnR5cGUgPT09ICdsb2NhbC1jYW5kaWRhdGUnKSB7XG4gICAgICAgICAgICBsb2NhbENhbmRpZGF0ZXNbaXRlbS5pZF0gPSBpdGVtXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjYW5kaWRhdGVwYWlyJyB8fCBpdGVtLnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicpIHtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVBhaXJzW2l0ZW0uaWRdID0gaXRlbVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBzZXRTZWxlY3RlZENhbmRpZGF0ZVBhaXIgPSBzZWxlY3RlZENhbmRpZGF0ZVBhaXIgPT4ge1xuICAgICAgICAgIGZvdW5kU2VsZWN0ZWRDYW5kaWRhdGVQYWlyID0gdHJ1ZVxuXG4gICAgICAgICAgbGV0IGxvY2FsID0gbG9jYWxDYW5kaWRhdGVzW3NlbGVjdGVkQ2FuZGlkYXRlUGFpci5sb2NhbENhbmRpZGF0ZUlkXVxuXG4gICAgICAgICAgaWYgKGxvY2FsICYmIChsb2NhbC5pcCB8fCBsb2NhbC5hZGRyZXNzKSkge1xuICAgICAgICAgICAgLy8gU3BlY1xuICAgICAgICAgICAgdGhpcy5sb2NhbEFkZHJlc3MgPSBsb2NhbC5pcCB8fCBsb2NhbC5hZGRyZXNzXG4gICAgICAgICAgICB0aGlzLmxvY2FsUG9ydCA9IE51bWJlcihsb2NhbC5wb3J0KVxuICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWwgJiYgbG9jYWwuaXBBZGRyZXNzKSB7XG4gICAgICAgICAgICAvLyBGaXJlZm94XG4gICAgICAgICAgICB0aGlzLmxvY2FsQWRkcmVzcyA9IGxvY2FsLmlwQWRkcmVzc1xuICAgICAgICAgICAgdGhpcy5sb2NhbFBvcnQgPSBOdW1iZXIobG9jYWwucG9ydE51bWJlcilcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RlZENhbmRpZGF0ZVBhaXIuZ29vZ0xvY2FsQWRkcmVzcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIG9uY2UgQ2hyb21lIDU4IGlzIHJlbGVhc2VkXG4gICAgICAgICAgICBsb2NhbCA9IHNlbGVjdGVkQ2FuZGlkYXRlUGFpci5nb29nTG9jYWxBZGRyZXNzLnNwbGl0KCc6JylcbiAgICAgICAgICAgIHRoaXMubG9jYWxBZGRyZXNzID0gbG9jYWxbMF1cbiAgICAgICAgICAgIHRoaXMubG9jYWxQb3J0ID0gTnVtYmVyKGxvY2FsWzFdKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5sb2NhbEFkZHJlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxGYW1pbHkgPSB0aGlzLmxvY2FsQWRkcmVzcy5pbmNsdWRlcygnOicpID8gJ0lQdjYnIDogJ0lQdjQnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHJlbW90ZSA9IHJlbW90ZUNhbmRpZGF0ZXNbc2VsZWN0ZWRDYW5kaWRhdGVQYWlyLnJlbW90ZUNhbmRpZGF0ZUlkXVxuXG4gICAgICAgICAgaWYgKHJlbW90ZSAmJiAocmVtb3RlLmlwIHx8IHJlbW90ZS5hZGRyZXNzKSkge1xuICAgICAgICAgICAgLy8gU3BlY1xuICAgICAgICAgICAgdGhpcy5yZW1vdGVBZGRyZXNzID0gcmVtb3RlLmlwIHx8IHJlbW90ZS5hZGRyZXNzXG4gICAgICAgICAgICB0aGlzLnJlbW90ZVBvcnQgPSBOdW1iZXIocmVtb3RlLnBvcnQpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZW1vdGUgJiYgcmVtb3RlLmlwQWRkcmVzcykge1xuICAgICAgICAgICAgLy8gRmlyZWZveFxuICAgICAgICAgICAgdGhpcy5yZW1vdGVBZGRyZXNzID0gcmVtb3RlLmlwQWRkcmVzc1xuICAgICAgICAgICAgdGhpcy5yZW1vdGVQb3J0ID0gTnVtYmVyKHJlbW90ZS5wb3J0TnVtYmVyKVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlbGVjdGVkQ2FuZGlkYXRlUGFpci5nb29nUmVtb3RlQWRkcmVzcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIG9uY2UgQ2hyb21lIDU4IGlzIHJlbGVhc2VkXG4gICAgICAgICAgICByZW1vdGUgPSBzZWxlY3RlZENhbmRpZGF0ZVBhaXIuZ29vZ1JlbW90ZUFkZHJlc3Muc3BsaXQoJzonKVxuICAgICAgICAgICAgdGhpcy5yZW1vdGVBZGRyZXNzID0gcmVtb3RlWzBdXG4gICAgICAgICAgICB0aGlzLnJlbW90ZVBvcnQgPSBOdW1iZXIocmVtb3RlWzFdKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5yZW1vdGVBZGRyZXNzKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW90ZUZhbWlseSA9IHRoaXMucmVtb3RlQWRkcmVzcy5pbmNsdWRlcygnOicpID8gJ0lQdjYnIDogJ0lQdjQnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fZGVidWcoXG4gICAgICAgICAgICAnY29ubmVjdCBsb2NhbDogJXM6JXMgcmVtb3RlOiAlczolcycsXG4gICAgICAgICAgICB0aGlzLmxvY2FsQWRkcmVzcyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxQb3J0LFxuICAgICAgICAgICAgdGhpcy5yZW1vdGVBZGRyZXNzLFxuICAgICAgICAgICAgdGhpcy5yZW1vdGVQb3J0XG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAvLyBTcGVjLWNvbXBsaWFudFxuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0cmFuc3BvcnQnICYmIGl0ZW0uc2VsZWN0ZWRDYW5kaWRhdGVQYWlySWQpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQ2FuZGlkYXRlUGFpcihjYW5kaWRhdGVQYWlyc1tpdGVtLnNlbGVjdGVkQ2FuZGlkYXRlUGFpcklkXSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBPbGQgaW1wbGVtZW50YXRpb25zXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGl0ZW0udHlwZSA9PT0gJ2dvb2dDYW5kaWRhdGVQYWlyJyAmJiBpdGVtLmdvb2dBY3RpdmVDb25uZWN0aW9uID09PSAndHJ1ZScpIHx8XG4gICAgICAgICAgICAoKGl0ZW0udHlwZSA9PT0gJ2NhbmRpZGF0ZXBhaXInIHx8IGl0ZW0udHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJykgJiYgaXRlbS5zZWxlY3RlZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQ2FuZGlkYXRlUGFpcihpdGVtKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICAvLyBJZ25vcmUgY2FuZGlkYXRlIHBhaXIgc2VsZWN0aW9uIGluIGJyb3dzZXJzIGxpa2UgU2FmYXJpIDExIHRoYXQgZG8gbm90IGhhdmUgYW55IGxvY2FsIG9yIHJlbW90ZSBjYW5kaWRhdGVzXG4gICAgICAgIC8vIEJ1dCB3YWl0IHVudGlsIGF0IGxlYXN0IDEgY2FuZGlkYXRlIHBhaXIgaXMgYXZhaWxhYmxlXG4gICAgICAgIGlmICghZm91bmRTZWxlY3RlZENhbmRpZGF0ZVBhaXIgJiYgKCFPYmplY3Qua2V5cyhjYW5kaWRhdGVQYWlycykubGVuZ3RoIHx8IE9iamVjdC5rZXlzKGxvY2FsQ2FuZGlkYXRlcykubGVuZ3RoKSkge1xuICAgICAgICAgIHNldFRpbWVvdXQoZmluZENhbmRpZGF0ZVBhaXIsIDEwMClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9jb25uZWN0aW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl9jb25uZWN0ZWQgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY2h1bmspIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zZW5kKHRoaXMuX2NodW5rKVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdHJveShlcnJDb2RlKGVyciwgJ0VSUl9EQVRBX0NIQU5ORUwnKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY2h1bmsgPSBudWxsXG4gICAgICAgICAgdGhpcy5fZGVidWcoJ3NlbnQgY2h1bmsgZnJvbSBcIndyaXRlIGJlZm9yZSBjb25uZWN0XCInKVxuXG4gICAgICAgICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgICAgICAgIHRoaXMuX2NiID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBgYnVmZmVyZWRBbW91bnRMb3dUaHJlc2hvbGRgIGFuZCAnb25idWZmZXJlZGFtb3VudGxvdycgYXJlIHVuc3VwcG9ydGVkLFxuICAgICAgICAvLyBmYWxsYmFjayB0byB1c2luZyBzZXRJbnRlcnZhbCB0byBpbXBsZW1lbnQgYmFja3ByZXNzdXJlLlxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2NoYW5uZWwuYnVmZmVyZWRBbW91bnRMb3dUaHJlc2hvbGQgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLl9vbkludGVydmFsKCksIDE1MClcbiAgICAgICAgICBpZiAodGhpcy5faW50ZXJ2YWwudW5yZWYpIHRoaXMuX2ludGVydmFsLnVucmVmKClcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RlYnVnKCdjb25uZWN0JylcbiAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0JylcbiAgICAgIH0pXG4gICAgfVxuICAgIGZpbmRDYW5kaWRhdGVQYWlyKClcbiAgfVxuXG4gIF9vbkludGVydmFsICgpIHtcbiAgICBpZiAoIXRoaXMuX2NiIHx8ICF0aGlzLl9jaGFubmVsIHx8IHRoaXMuX2NoYW5uZWwuYnVmZmVyZWRBbW91bnQgPiBNQVhfQlVGRkVSRURfQU1PVU5UKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5fb25DaGFubmVsQnVmZmVyZWRBbW91bnRMb3coKVxuICB9XG5cbiAgX29uU2lnbmFsaW5nU3RhdGVDaGFuZ2UgKCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5fcGMuc2lnbmFsaW5nU3RhdGUgPT09ICdzdGFibGUnKSB7XG4gICAgICB0aGlzLl9pc05lZ290aWF0aW5nID0gZmFsc2VcblxuICAgICAgLy8gSEFDSzogRmlyZWZveCBkb2Vzbid0IHlldCBzdXBwb3J0IHJlbW92aW5nIHRyYWNrcyB3aGVuIHNpZ25hbGluZ1N0YXRlICE9PSAnc3RhYmxlJ1xuICAgICAgdGhpcy5fZGVidWcoJ2ZsdXNoaW5nIHNlbmRlciBxdWV1ZScsIHRoaXMuX3NlbmRlcnNBd2FpdGluZ1N0YWJsZSlcbiAgICAgIHRoaXMuX3NlbmRlcnNBd2FpdGluZ1N0YWJsZS5mb3JFYWNoKHNlbmRlciA9PiB7XG4gICAgICAgIHRoaXMuX3BjLnJlbW92ZVRyYWNrKHNlbmRlcilcbiAgICAgICAgdGhpcy5fcXVldWVkTmVnb3RpYXRpb24gPSB0cnVlXG4gICAgICB9KVxuICAgICAgdGhpcy5fc2VuZGVyc0F3YWl0aW5nU3RhYmxlID0gW11cblxuICAgICAgaWYgKHRoaXMuX3F1ZXVlZE5lZ290aWF0aW9uKSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCdmbHVzaGluZyBuZWdvdGlhdGlvbiBxdWV1ZScpXG4gICAgICAgIHRoaXMuX3F1ZXVlZE5lZ290aWF0aW9uID0gZmFsc2VcbiAgICAgICAgdGhpcy5fbmVlZHNOZWdvdGlhdGlvbigpIC8vIG5lZ290aWF0ZSBhZ2FpblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGVidWcoJ25lZ290aWF0ZWQnKVxuICAgICAgICB0aGlzLmVtaXQoJ25lZ290aWF0ZWQnKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2RlYnVnKCdzaWduYWxpbmdTdGF0ZUNoYW5nZSAlcycsIHRoaXMuX3BjLnNpZ25hbGluZ1N0YXRlKVxuICAgIHRoaXMuZW1pdCgnc2lnbmFsaW5nU3RhdGVDaGFuZ2UnLCB0aGlzLl9wYy5zaWduYWxpbmdTdGF0ZSlcbiAgfVxuXG4gIF9vbkljZUNhbmRpZGF0ZSAoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuICAgIGlmIChldmVudC5jYW5kaWRhdGUgJiYgdGhpcy50cmlja2xlKSB7XG4gICAgICB0aGlzLmVtaXQoJ3NpZ25hbCcsIHtcbiAgICAgICAgdHlwZTogJ2NhbmRpZGF0ZScsXG4gICAgICAgIGNhbmRpZGF0ZToge1xuICAgICAgICAgIGNhbmRpZGF0ZTogZXZlbnQuY2FuZGlkYXRlLmNhbmRpZGF0ZSxcbiAgICAgICAgICBzZHBNTGluZUluZGV4OiBldmVudC5jYW5kaWRhdGUuc2RwTUxpbmVJbmRleCxcbiAgICAgICAgICBzZHBNaWQ6IGV2ZW50LmNhbmRpZGF0ZS5zZHBNaWRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFldmVudC5jYW5kaWRhdGUgJiYgIXRoaXMuX2ljZUNvbXBsZXRlKSB7XG4gICAgICB0aGlzLl9pY2VDb21wbGV0ZSA9IHRydWVcbiAgICAgIHRoaXMuZW1pdCgnX2ljZUNvbXBsZXRlJylcbiAgICB9XG4gICAgLy8gYXMgc29vbiBhcyB3ZSd2ZSByZWNlaXZlZCBvbmUgdmFsaWQgY2FuZGlkYXRlIHN0YXJ0IHRpbWVvdXRcbiAgICBpZiAoZXZlbnQuY2FuZGlkYXRlKSB7XG4gICAgICB0aGlzLl9zdGFydEljZUNvbXBsZXRlVGltZW91dCgpXG4gICAgfVxuICB9XG5cbiAgX29uQ2hhbm5lbE1lc3NhZ2UgKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICBsZXQgZGF0YSA9IGV2ZW50LmRhdGFcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSlcbiAgICB0aGlzLnB1c2goZGF0YSlcbiAgfVxuXG4gIF9vbkNoYW5uZWxCdWZmZXJlZEFtb3VudExvdyAoKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8ICF0aGlzLl9jYikgcmV0dXJuXG4gICAgdGhpcy5fZGVidWcoJ2VuZGluZyBiYWNrcHJlc3N1cmU6IGJ1ZmZlcmVkQW1vdW50ICVkJywgdGhpcy5fY2hhbm5lbC5idWZmZXJlZEFtb3VudClcbiAgICBjb25zdCBjYiA9IHRoaXMuX2NiXG4gICAgdGhpcy5fY2IgPSBudWxsXG4gICAgY2IobnVsbClcbiAgfVxuXG4gIF9vbkNoYW5uZWxPcGVuICgpIHtcbiAgICBpZiAodGhpcy5fY29ubmVjdGVkIHx8IHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICB0aGlzLl9kZWJ1Zygnb24gY2hhbm5lbCBvcGVuJylcbiAgICB0aGlzLl9jaGFubmVsUmVhZHkgPSB0cnVlXG4gICAgdGhpcy5fbWF5YmVSZWFkeSgpXG4gIH1cblxuICBfb25DaGFubmVsQ2xvc2UgKCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG4gICAgdGhpcy5fZGVidWcoJ29uIGNoYW5uZWwgY2xvc2UnKVxuICAgIHRoaXMuZGVzdHJveSgpXG4gIH1cblxuICBfb25UcmFjayAoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuXG4gICAgZXZlbnQuc3RyZWFtcy5mb3JFYWNoKGV2ZW50U3RyZWFtID0+IHtcbiAgICAgIHRoaXMuX2RlYnVnKCdvbiB0cmFjaycpXG4gICAgICB0aGlzLmVtaXQoJ3RyYWNrJywgZXZlbnQudHJhY2ssIGV2ZW50U3RyZWFtKVxuXG4gICAgICB0aGlzLl9yZW1vdGVUcmFja3MucHVzaCh7XG4gICAgICAgIHRyYWNrOiBldmVudC50cmFjayxcbiAgICAgICAgc3RyZWFtOiBldmVudFN0cmVhbVxuICAgICAgfSlcblxuICAgICAgaWYgKHRoaXMuX3JlbW90ZVN0cmVhbXMuc29tZShyZW1vdGVTdHJlYW0gPT4ge1xuICAgICAgICByZXR1cm4gcmVtb3RlU3RyZWFtLmlkID09PSBldmVudFN0cmVhbS5pZFxuICAgICAgfSkpIHJldHVybiAvLyBPbmx5IGZpcmUgb25lICdzdHJlYW0nIGV2ZW50LCBldmVuIHRob3VnaCB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdHJhY2tzIHBlciBzdHJlYW1cblxuICAgICAgdGhpcy5fcmVtb3RlU3RyZWFtcy5wdXNoKGV2ZW50U3RyZWFtKVxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLl9kZWJ1Zygnb24gc3RyZWFtJylcbiAgICAgICAgdGhpcy5lbWl0KCdzdHJlYW0nLCBldmVudFN0cmVhbSkgLy8gZW5zdXJlIGFsbCB0cmFja3MgaGF2ZSBiZWVuIGFkZGVkXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBfZGVidWcgKCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgICBhcmdzWzBdID0gJ1snICsgdGhpcy5faWQgKyAnXSAnICsgYXJnc1swXVxuICAgIGRlYnVnLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH1cbn1cblxuUGVlci5XRUJSVENfU1VQUE9SVCA9ICEhZ2V0QnJvd3NlclJUQygpXG5cbi8qKlxuICogRXhwb3NlIHBlZXIgYW5kIGRhdGEgY2hhbm5lbCBjb25maWcgZm9yIG92ZXJyaWRpbmcgYWxsIFBlZXJcbiAqIGluc3RhbmNlcy4gT3RoZXJ3aXNlLCBqdXN0IHNldCBvcHRzLmNvbmZpZyBvciBvcHRzLmNoYW5uZWxDb25maWdcbiAqIHdoZW4gY29uc3RydWN0aW5nIGEgUGVlci5cbiAqL1xuUGVlci5jb25maWcgPSB7XG4gIGljZVNlcnZlcnM6IFtcbiAgICB7XG4gICAgICB1cmxzOiBbXG4gICAgICAgICdzdHVuOnN0dW4ubC5nb29nbGUuY29tOjE5MzAyJyxcbiAgICAgICAgJ3N0dW46Z2xvYmFsLnN0dW4udHdpbGlvLmNvbTozNDc4J1xuICAgICAgXVxuICAgIH1cbiAgXSxcbiAgc2RwU2VtYW50aWNzOiAndW5pZmllZC1wbGFuJ1xufVxuXG5QZWVyLmNoYW5uZWxDb25maWcgPSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBlZXJcbiIsIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLCJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zbGljZSgxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbCkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3ZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9JyArXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWwpXG4gICk7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChzdHIubGVuZ3RoID4gMTAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnd2Vla3MnOlxuICAgIGNhc2UgJ3dlZWsnOlxuICAgIGNhc2UgJ3cnOlxuICAgICAgcmV0dXJuIG4gKiB3O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10U2hvcnQobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBkLCAnZGF5Jyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBtLCAnbWludXRlJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgcywgJ3NlY29uZCcpO1xuICB9XG4gIHJldHVybiBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgdmFyIGlzUGx1cmFsID0gbXNBYnMgPj0gbiAqIDEuNTtcbiAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBuKSArICcgJyArIG5hbWUgKyAoaXNQbHVyYWwgPyAncycgOiAnJyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOyBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgY29kZXMgPSB7fTtcblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JUeXBlKGNvZGUsIG1lc3NhZ2UsIEJhc2UpIHtcbiAgaWYgKCFCYXNlKSB7XG4gICAgQmFzZSA9IEVycm9yO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TWVzc2FnZShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtZXNzYWdlKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBOb2RlRXJyb3IgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uIChfQmFzZSkge1xuICAgIF9pbmhlcml0c0xvb3NlKE5vZGVFcnJvciwgX0Jhc2UpO1xuXG4gICAgZnVuY3Rpb24gTm9kZUVycm9yKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgIHJldHVybiBfQmFzZS5jYWxsKHRoaXMsIGdldE1lc3NhZ2UoYXJnMSwgYXJnMiwgYXJnMykpIHx8IHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIE5vZGVFcnJvcjtcbiAgfShCYXNlKTtcblxuICBOb2RlRXJyb3IucHJvdG90eXBlLm5hbWUgPSBCYXNlLm5hbWU7XG4gIE5vZGVFcnJvci5wcm90b3R5cGUuY29kZSA9IGNvZGU7XG4gIGNvZGVzW2NvZGVdID0gTm9kZUVycm9yO1xufSAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92MTAuOC4wL2xpYi9pbnRlcm5hbC9lcnJvcnMuanNcblxuXG5mdW5jdGlvbiBvbmVPZihleHBlY3RlZCwgdGhpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpKSB7XG4gICAgdmFyIGxlbiA9IGV4cGVjdGVkLmxlbmd0aDtcbiAgICBleHBlY3RlZCA9IGV4cGVjdGVkLm1hcChmdW5jdGlvbiAoaSkge1xuICAgICAgcmV0dXJuIFN0cmluZyhpKTtcbiAgICB9KTtcblxuICAgIGlmIChsZW4gPiAyKSB7XG4gICAgICByZXR1cm4gXCJvbmUgb2YgXCIuY29uY2F0KHRoaW5nLCBcIiBcIikuY29uY2F0KGV4cGVjdGVkLnNsaWNlKDAsIGxlbiAtIDEpLmpvaW4oJywgJyksIFwiLCBvciBcIikgKyBleHBlY3RlZFtsZW4gLSAxXTtcbiAgICB9IGVsc2UgaWYgKGxlbiA9PT0gMikge1xuICAgICAgcmV0dXJuIFwib25lIG9mIFwiLmNvbmNhdCh0aGluZywgXCIgXCIpLmNvbmNhdChleHBlY3RlZFswXSwgXCIgb3IgXCIpLmNvbmNhdChleHBlY3RlZFsxXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIm9mIFwiLmNvbmNhdCh0aGluZywgXCIgXCIpLmNvbmNhdChleHBlY3RlZFswXSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIm9mIFwiLmNvbmNhdCh0aGluZywgXCIgXCIpLmNvbmNhdChTdHJpbmcoZXhwZWN0ZWQpKTtcbiAgfVxufSAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvc3RhcnRzV2l0aFxuXG5cbmZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyLCBzZWFyY2gsIHBvcykge1xuICByZXR1cm4gc3RyLnN1YnN0cighcG9zIHx8IHBvcyA8IDAgPyAwIDogK3Bvcywgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbn0gLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL2VuZHNXaXRoXG5cblxuZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2gsIHRoaXNfbGVuKSB7XG4gIGlmICh0aGlzX2xlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXNfbGVuID4gc3RyLmxlbmd0aCkge1xuICAgIHRoaXNfbGVuID0gc3RyLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBzdHIuc3Vic3RyaW5nKHRoaXNfbGVuIC0gc2VhcmNoLmxlbmd0aCwgdGhpc19sZW4pID09PSBzZWFyY2g7XG59IC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9pbmNsdWRlc1xuXG5cbmZ1bmN0aW9uIGluY2x1ZGVzKHN0ciwgc2VhcmNoLCBzdGFydCkge1xuICBpZiAodHlwZW9mIHN0YXJ0ICE9PSAnbnVtYmVyJykge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuXG4gIGlmIChzdGFydCArIHNlYXJjaC5sZW5ndGggPiBzdHIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHIuaW5kZXhPZihzZWFyY2gsIHN0YXJ0KSAhPT0gLTE7XG4gIH1cbn1cblxuY3JlYXRlRXJyb3JUeXBlKCdFUlJfSU5WQUxJRF9PUFRfVkFMVUUnLCBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuICdUaGUgdmFsdWUgXCInICsgdmFsdWUgKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwiJyArIG5hbWUgKyAnXCInO1xufSwgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX0lOVkFMSURfQVJHX1RZUEUnLCBmdW5jdGlvbiAobmFtZSwgZXhwZWN0ZWQsIGFjdHVhbCkge1xuICAvLyBkZXRlcm1pbmVyOiAnbXVzdCBiZScgb3IgJ211c3Qgbm90IGJlJ1xuICB2YXIgZGV0ZXJtaW5lcjtcblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJyAmJiBzdGFydHNXaXRoKGV4cGVjdGVkLCAnbm90ICcpKSB7XG4gICAgZGV0ZXJtaW5lciA9ICdtdXN0IG5vdCBiZSc7XG4gICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5yZXBsYWNlKC9ebm90IC8sICcnKTtcbiAgfSBlbHNlIHtcbiAgICBkZXRlcm1pbmVyID0gJ211c3QgYmUnO1xuICB9XG5cbiAgdmFyIG1zZztcblxuICBpZiAoZW5kc1dpdGgobmFtZSwgJyBhcmd1bWVudCcpKSB7XG4gICAgLy8gRm9yIGNhc2VzIGxpa2UgJ2ZpcnN0IGFyZ3VtZW50J1xuICAgIG1zZyA9IFwiVGhlIFwiLmNvbmNhdChuYW1lLCBcIiBcIikuY29uY2F0KGRldGVybWluZXIsIFwiIFwiKS5jb25jYXQob25lT2YoZXhwZWN0ZWQsICd0eXBlJykpO1xuICB9IGVsc2Uge1xuICAgIHZhciB0eXBlID0gaW5jbHVkZXMobmFtZSwgJy4nKSA/ICdwcm9wZXJ0eScgOiAnYXJndW1lbnQnO1xuICAgIG1zZyA9IFwiVGhlIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiIFwiKS5jb25jYXQodHlwZSwgXCIgXCIpLmNvbmNhdChkZXRlcm1pbmVyLCBcIiBcIikuY29uY2F0KG9uZU9mKGV4cGVjdGVkLCAndHlwZScpKTtcbiAgfVxuXG4gIG1zZyArPSBcIi4gUmVjZWl2ZWQgdHlwZSBcIi5jb25jYXQodHlwZW9mIGFjdHVhbCk7XG4gIHJldHVybiBtc2c7XG59LCBUeXBlRXJyb3IpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GJywgJ3N0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuICdUaGUgJyArIG5hbWUgKyAnIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQnO1xufSk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJywgJ1ByZW1hdHVyZSBjbG9zZScpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX0RFU1RST1lFRCcsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiAnQ2Fubm90IGNhbGwgJyArIG5hbWUgKyAnIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnO1xufSk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9NVUxUSVBMRV9DQUxMQkFDSycsICdDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9DQU5OT1RfUElQRScsICdDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EJywgJ3dyaXRlIGFmdGVyIGVuZCcpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX05VTExfVkFMVUVTJywgJ01heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtJywgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1VOS05PV05fRU5DT0RJTkcnLCBmdW5jdGlvbiAoYXJnKSB7XG4gIHJldHVybiAnVW5rbm93biBlbmNvZGluZzogJyArIGFyZztcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQnLCAnc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKTtcbm1vZHVsZS5leHBvcnRzLmNvZGVzID0gY29kZXM7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBEdXBsZXg7XG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV93cml0YWJsZScpO1xucmVxdWlyZSgnaW5oZXJpdHMnKShEdXBsZXgsIFJlYWRhYmxlKTtcbntcbiAgLy8gQWxsb3cgdGhlIGtleXMgYXJyYXkgdG8gYmUgR0MnZWQuXG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpO1xuICBmb3IgKHZhciB2ID0gMDsgdiA8IGtleXMubGVuZ3RoOyB2KyspIHtcbiAgICB2YXIgbWV0aG9kID0ga2V5c1t2XTtcbiAgICBpZiAoIUR1cGxleC5wcm90b3R5cGVbbWV0aG9kXSkgRHVwbGV4LnByb3RvdHlwZVttZXRob2RdID0gV3JpdGFibGUucHJvdG90eXBlW21ldGhvZF07XG4gIH1cbn1cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtcbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgdGhpcy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbiAgICB9XG4gIH1cbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVCdWZmZXInLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTtcblxuLy8gdGhlIG5vLWhhbGYtb3BlbiBlbmZvcmNlclxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIElmIHRoZSB3cml0YWJsZSBzaWRlIGVuZGVkLCB0aGVuIHdlJ3JlIG9rLlxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHByb2Nlc3MubmV4dFRpY2sob25FbmROVCwgdGhpcyk7XG59XG5mdW5jdGlvbiBvbkVuZE5UKHNlbGYpIHtcbiAgc2VsZi5lbmQoKTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7IiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgcGFzc3Rocm91Z2ggc3RyZWFtLlxuLy8gYmFzaWNhbGx5IGp1c3QgdGhlIG1vc3QgbWluaW1hbCBzb3J0IG9mIFRyYW5zZm9ybSBzdHJlYW0uXG4vLyBFdmVyeSB3cml0dGVuIGNodW5rIGdldHMgb3V0cHV0IGFzLWlzLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2g7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9fc3RyZWFtX3RyYW5zZm9ybScpO1xucmVxdWlyZSgnaW5oZXJpdHMnKShQYXNzVGhyb3VnaCwgVHJhbnNmb3JtKTtcbmZ1bmN0aW9uIFBhc3NUaHJvdWdoKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSkgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaChvcHRpb25zKTtcbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5QYXNzVGhyb3VnaC5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG51bGwsIGNodW5rKTtcbn07IiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gRUVsaXN0ZW5lckNvdW50KGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbnZhciBPdXJVaW50OEFycmF5ID0gKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDoge30pLlVpbnQ4QXJyYXkgfHwgZnVuY3Rpb24gKCkge307XG5mdW5jdGlvbiBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShjaHVuayk7XG59XG5mdW5jdGlvbiBfaXNVaW50OEFycmF5KG9iaikge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iaikgfHwgb2JqIGluc3RhbmNlb2YgT3VyVWludDhBcnJheTtcbn1cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBkZWJ1Z1V0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgZGVidWc7XG5pZiAoZGVidWdVdGlsICYmIGRlYnVnVXRpbC5kZWJ1Z2xvZykge1xuICBkZWJ1ZyA9IGRlYnVnVXRpbC5kZWJ1Z2xvZygnc3RyZWFtJyk7XG59IGVsc2Uge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uIGRlYnVnKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlckxpc3QgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvYnVmZmVyX2xpc3QnKTtcbnZhciBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95Jyk7XG52YXIgX3JlcXVpcmUgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUnKSxcbiAgZ2V0SGlnaFdhdGVyTWFyayA9IF9yZXF1aXJlLmdldEhpZ2hXYXRlck1hcms7XG52YXIgX3JlcXVpcmUkY29kZXMgPSByZXF1aXJlKCcuLi9lcnJvcnMnKS5jb2RlcyxcbiAgRVJSX0lOVkFMSURfQVJHX1RZUEUgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEID0gX3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gIEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO1xuXG4vLyBMYXp5IGxvYWRlZCB0byBpbXByb3ZlIHRoZSBzdGFydHVwIHBlcmZvcm1hbmNlLlxudmFyIFN0cmluZ0RlY29kZXI7XG52YXIgY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yO1xudmFyIGZyb207XG5yZXF1aXJlKCdpbmhlcml0cycpKFJlYWRhYmxlLCBTdHJlYW0pO1xudmFyIGVycm9yT3JEZXN0cm95ID0gZGVzdHJveUltcGwuZXJyb3JPckRlc3Ryb3k7XG52YXIga1Byb3h5RXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbikge1xuICAvLyBTYWRseSB0aGlzIGlzIG5vdCBjYWNoZWFibGUgYXMgc29tZSBsaWJyYXJpZXMgYnVuZGxlIHRoZWlyIG93blxuICAvLyBldmVudCBlbWl0dGVyIGltcGxlbWVudGF0aW9uIHdpdGggdGhlbS5cbiAgaWYgKHR5cGVvZiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKGV2ZW50LCBmbik7XG5cbiAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueVxuICAvLyB1c2VybGFuZCBvbmVzLiAgTkVWRVIgRE8gVEhJUy4gVGhpcyBpcyBoZXJlIG9ubHkgYmVjYXVzZSB0aGlzIGNvZGUgbmVlZHNcbiAgLy8gdG8gY29udGludWUgdG8gd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIE5vZGUuanMgdGhhdCBkbyBub3QgaW5jbHVkZVxuICAvLyB0aGUgcHJlcGVuZExpc3RlbmVyKCkgbWV0aG9kLiBUaGUgZ29hbCBpcyB0byBldmVudHVhbGx5IHJlbW92ZSB0aGlzIGhhY2suXG4gIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbZXZlbnRdKSBlbWl0dGVyLm9uKGV2ZW50LCBmbik7ZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbWl0dGVyLl9ldmVudHNbZXZlbnRdKSkgZW1pdHRlci5fZXZlbnRzW2V2ZW50XS51bnNoaWZ0KGZuKTtlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0gPSBbZm4sIGVtaXR0ZXIuX2V2ZW50c1tldmVudF1dO1xufVxuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0sIGlzRHVwbGV4KSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIER1cGxleCBzdHJlYW1zIGFyZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYnV0IHNoYXJlXG4gIC8vIHRoZSBzYW1lIG9wdGlvbnMgb2JqZWN0LlxuICAvLyBIb3dldmVyLCBzb21lIGNhc2VzIHJlcXVpcmUgc2V0dGluZyBvcHRpb25zIHRvIGRpZmZlcmVudFxuICAvLyB2YWx1ZXMgZm9yIHRoZSByZWFkYWJsZSBhbmQgdGhlIHdyaXRhYmxlIHNpZGVzIG9mIHRoZSBkdXBsZXggc3RyZWFtLlxuICAvLyBUaGVzZSBvcHRpb25zIGNhbiBiZSBwcm92aWRlZCBzZXBhcmF0ZWx5IGFzIHJlYWRhYmxlWFhYIGFuZCB3cml0YWJsZVhYWC5cbiAgaWYgKHR5cGVvZiBpc0R1cGxleCAhPT0gJ2Jvb2xlYW4nKSBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheVxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KTtcblxuICAvLyBBIGxpbmtlZCBsaXN0IGlzIHVzZWQgdG8gc3RvcmUgZGF0YSBjaHVua3MgaW5zdGVhZCBvZiBhbiBhcnJheSBiZWNhdXNlIHRoZVxuICAvLyBsaW5rZWQgbGlzdCBjYW4gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGJlZ2lubmluZyBmYXN0ZXIgdGhhblxuICAvLyBhcnJheS5zaGlmdCgpXG4gIHRoaXMuYnVmZmVyID0gbmV3IEJ1ZmZlckxpc3QoKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xuICB0aGlzLnBpcGVzID0gbnVsbDtcbiAgdGhpcy5waXBlc0NvdW50ID0gMDtcbiAgdGhpcy5mbG93aW5nID0gbnVsbDtcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICB0aGlzLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWFkaW5nID0gZmFsc2U7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgZXZlbnQgJ3JlYWRhYmxlJy8nZGF0YScgaXMgZW1pdHRlZFxuICAvLyBpbW1lZGlhdGVseSwgb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZVxuICAvLyBhbnkgYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3QgcmVhZCBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIHdoZW5ldmVyIHdlIHJldHVybiBudWxsLCB0aGVuIHdlIHNldCBhIGZsYWcgdG8gc2F5XG4gIC8vIHRoYXQgd2UncmUgYXdhaXRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGVtaXNzaW9uLlxuICB0aGlzLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlTGlzdGVuaW5nID0gZmFsc2U7XG4gIHRoaXMucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHRoaXMucGF1c2VkID0gdHJ1ZTtcblxuICAvLyBTaG91bGQgY2xvc2UgYmUgZW1pdHRlZCBvbiBkZXN0cm95LiBEZWZhdWx0cyB0byB0cnVlLlxuICB0aGlzLmVtaXRDbG9zZSA9IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZTtcblxuICAvLyBTaG91bGQgLmRlc3Ryb3koKSBiZSBjYWxsZWQgYWZ0ZXIgJ2VuZCcgKGFuZCBwb3RlbnRpYWxseSAnZmluaXNoJylcbiAgdGhpcy5hdXRvRGVzdHJveSA9ICEhb3B0aW9ucy5hdXRvRGVzdHJveTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB0aGUgbnVtYmVyIG9mIHdyaXRlcnMgdGhhdCBhcmUgYXdhaXRpbmcgYSBkcmFpbiBldmVudCBpbiAucGlwZSgpc1xuICB0aGlzLmF3YWl0RHJhaW4gPSAwO1xuXG4gIC8vIGlmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWRcbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuICB0aGlzLmRlY29kZXIgPSBudWxsO1xuICB0aGlzLmVuY29kaW5nID0gbnVsbDtcbiAgaWYgKG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICAgIHRoaXMuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKG9wdGlvbnMuZW5jb2RpbmcpO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nO1xuICB9XG59XG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgLy8gQ2hlY2tpbmcgZm9yIGEgU3RyZWFtLkR1cGxleCBpbnN0YW5jZSBpcyBmYXN0ZXIgaGVyZSBpbnN0ZWFkIG9mIGluc2lkZVxuICAvLyB0aGUgUmVhZGFibGVTdGF0ZSBjb25zdHJ1Y3RvciwgYXQgbGVhc3Qgd2l0aCBWOCA2LjVcbiAgdmFyIGlzRHVwbGV4ID0gdGhpcyBpbnN0YW5jZW9mIER1cGxleDtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KTtcblxuICAvLyBsZWdhY3lcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG4gIH1cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gIH1cbn0pO1xuUmVhZGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICBjYihlcnIpO1xufTtcblxuLy8gTWFudWFsbHkgc2hvdmUgc29tZXRoaW5nIGludG8gdGhlIHJlYWQoKSBidWZmZXIuXG4vLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGlnaFdhdGVyTWFyayBoYXMgbm90IGJlZW4gaGl0IHlldCxcbi8vIHNpbWlsYXIgdG8gaG93IFdyaXRhYmxlLndyaXRlKCkgcmV0dXJucyB0cnVlIGlmIHlvdSBzaG91bGRcbi8vIHdyaXRlKCkgc29tZSBtb3JlLlxuUmVhZGFibGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBza2lwQ2h1bmtDaGVjaztcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICAgICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgICB9XG4gICAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHNraXBDaHVua0NoZWNrID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlLCBza2lwQ2h1bmtDaGVjayk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIG51bGwsIHRydWUsIGZhbHNlKTtcbn07XG5mdW5jdGlvbiByZWFkYWJsZUFkZENodW5rKHN0cmVhbSwgY2h1bmssIGVuY29kaW5nLCBhZGRUb0Zyb250LCBza2lwQ2h1bmtDaGVjaykge1xuICBkZWJ1ZygncmVhZGFibGVBZGRDaHVuaycsIGNodW5rKTtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKCFza2lwQ2h1bmtDaGVjaykgZXIgPSBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKTtcbiAgICBpZiAoZXIpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXIpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuayAmJiBjaHVuay5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiAhc3RhdGUub2JqZWN0TW9kZSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2h1bmspICE9PSBCdWZmZXIucHJvdG90eXBlKSB7XG4gICAgICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7XG4gICAgICB9XG4gICAgICBpZiAoYWRkVG9Gcm9udCkge1xuICAgICAgICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCgpKTtlbHNlIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuZW5kZWQpIHtcbiAgICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRigpKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICAgICAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuay5sZW5ndGggIT09IDApIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7ZWxzZSBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlIGNhbiBwdXNoIG1vcmUgZGF0YSBpZiB3ZSBhcmUgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmsuXG4gIC8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lIG1vcmUgYnl0ZXMuXG4gIC8vIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsIHN1Y2ggYXMgdGhlIHJlcGwuXG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cbmZ1bmN0aW9uIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBhZGRUb0Zyb250KSB7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYykge1xuICAgIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICAgIHN0cmVhbS5lbWl0KCdkYXRhJywgY2h1bmspO1xuICB9IGVsc2Uge1xuICAgIC8vIHVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIGlmIChhZGRUb0Zyb250KSBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuayk7ZWxzZSBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSkgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gIH1cbiAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbn1cbmZ1bmN0aW9uIGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspIHtcbiAgdmFyIGVyO1xuICBpZiAoIV9pc1VpbnQ4QXJyYXkoY2h1bmspICYmIHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdjaHVuaycsIFsnc3RyaW5nJywgJ0J1ZmZlcicsICdVaW50OEFycmF5J10sIGNodW5rKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gIHZhciBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoZW5jKTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gZGVjb2RlcjtcbiAgLy8gSWYgc2V0RW5jb2RpbmcobnVsbCksIGRlY29kZXIuZW5jb2RpbmcgZXF1YWxzIHV0ZjhcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztcblxuICAvLyBJdGVyYXRlIG92ZXIgY3VycmVudCBidWZmZXIgdG8gY29udmVydCBhbHJlYWR5IHN0b3JlZCBCdWZmZXJzOlxuICB2YXIgcCA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQ7XG4gIHZhciBjb250ZW50ID0gJyc7XG4gIHdoaWxlIChwICE9PSBudWxsKSB7XG4gICAgY29udGVudCArPSBkZWNvZGVyLndyaXRlKHAuZGF0YSk7XG4gICAgcCA9IHAubmV4dDtcbiAgfVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpO1xuICBpZiAoY29udGVudCAhPT0gJycpIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goY29udGVudCk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDFHQlxudmFyIE1BWF9IV00gPSAweDQwMDAwMDAwO1xuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+PSBNQVhfSFdNKSB7XG4gICAgLy8gVE9ETyhyb25hZyk6IFRocm93IEVSUl9WQUxVRV9PVVRfT0ZfUkFOR0UuXG4gICAgbiA9IE1BWF9IV007XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBuZXh0IGhpZ2hlc3QgcG93ZXIgb2YgMiB0byBwcmV2ZW50IGluY3JlYXNpbmcgaHdtIGV4Y2Vzc2l2ZWx5IGluXG4gICAgLy8gdGlueSBhbW91bnRzXG4gICAgbi0tO1xuICAgIG4gfD0gbiA+Pj4gMTtcbiAgICBuIHw9IG4gPj4+IDI7XG4gICAgbiB8PSBuID4+PiA0O1xuICAgIG4gfD0gbiA+Pj4gODtcbiAgICBuIHw9IG4gPj4+IDE2O1xuICAgIG4rKztcbiAgfVxuICByZXR1cm4gbjtcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKSB7XG4gIGlmIChuIDw9IDAgfHwgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSByZXR1cm4gMDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldHVybiAxO1xuICBpZiAobiAhPT0gbikge1xuICAgIC8vIE9ubHkgZmxvdyBvbmUgYnVmZmVyIGF0IGEgdGltZVxuICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCkgcmV0dXJuIHN0YXRlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoO2Vsc2UgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgfVxuICAvLyBJZiB3ZSdyZSBhc2tpbmcgZm9yIG1vcmUgdGhhbiB0aGUgY3VycmVudCBod20sIHRoZW4gcmFpc2UgdGhlIGh3bS5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobik7XG4gIGlmIChuIDw9IHN0YXRlLmxlbmd0aCkgcmV0dXJuIG47XG4gIC8vIERvbid0IGhhdmUgZW5vdWdoXG4gIGlmICghc3RhdGUuZW5kZWQpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBzdGF0ZS5sZW5ndGg7XG59XG5cbi8vIHlvdSBjYW4gb3ZlcnJpZGUgZWl0aGVyIHRoaXMgbWV0aG9kLCBvciB0aGUgYXN5bmMgX3JlYWQobikgYmVsb3cuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIGRlYnVnKCdyZWFkJywgbik7XG4gIG4gPSBwYXJzZUludChuLCAxMCk7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBuT3JpZyA9IG47XG4gIGlmIChuICE9PSAwKSBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcblxuICAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG4gIGlmIChuID09PSAwICYmIHN0YXRlLm5lZWRSZWFkYWJsZSAmJiAoKHN0YXRlLmhpZ2hXYXRlck1hcmsgIT09IDAgPyBzdGF0ZS5sZW5ndGggPj0gc3RhdGUuaGlnaFdhdGVyTWFyayA6IHN0YXRlLmxlbmd0aCA+IDApIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtlbHNlIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBuID0gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSk7XG5cbiAgLy8gaWYgd2UndmUgZW5kZWQsIGFuZCB3ZSdyZSBub3cgY2xlYXIsIHRoZW4gZmluaXNoIGl0IHVwLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkge1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWxsIHRoZSBhY3R1YWwgY2h1bmsgZ2VuZXJhdGlvbiBsb2dpYyBuZWVkcyB0byBiZVxuICAvLyAqYmVsb3cqIHRoZSBjYWxsIHRvIF9yZWFkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGluIGNlcnRhaW5cbiAgLy8gc3ludGhldGljIHN0cmVhbSBjYXNlcywgc3VjaCBhcyBwYXNzdGhyb3VnaCBzdHJlYW1zLCBfcmVhZFxuICAvLyBtYXkgYmUgYSBjb21wbGV0ZWx5IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGljaCBtYXkgY2hhbmdlXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgcmVhZCBidWZmZXIsIHByb3ZpZGluZyBlbm91Z2ggZGF0YSB3aGVuXG4gIC8vIGJlZm9yZSB0aGVyZSB3YXMgKm5vdCogZW5vdWdoLlxuICAvL1xuICAvLyBTbywgdGhlIHN0ZXBzIGFyZTpcbiAgLy8gMS4gRmlndXJlIG91dCB3aGF0IHRoZSBzdGF0ZSBvZiB0aGluZ3Mgd2lsbCBiZSBhZnRlciB3ZSBkb1xuICAvLyBhIHJlYWQgZnJvbSB0aGUgYnVmZmVyLlxuICAvL1xuICAvLyAyLiBJZiB0aGF0IHJlc3VsdGluZyBzdGF0ZSB3aWxsIHRyaWdnZXIgYSBfcmVhZCwgdGhlbiBjYWxsIF9yZWFkLlxuICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgYXN5bmNocm9ub3VzLCBvciBzeW5jaHJvbm91cy4gIFllcywgaXQgaXNcbiAgLy8gZGVlcGx5IHVnbHkgdG8gd3JpdGUgQVBJcyB0aGlzIHdheSwgYnV0IHRoYXQgc3RpbGwgZG9lc24ndCBtZWFuXG4gIC8vIHRoYXQgdGhlIFJlYWRhYmxlIGNsYXNzIHNob3VsZCBiZWhhdmUgaW1wcm9wZXJseSwgYXMgc3RyZWFtcyBhcmVcbiAgLy8gZGVzaWduZWQgdG8gYmUgc3luYy9hc3luYyBhZ25vc3RpYy5cbiAgLy8gVGFrZSBub3RlIGlmIHRoZSBfcmVhZCBjYWxsIGlzIHN5bmMgb3IgYXN5bmMgKGllLCBpZiB0aGUgcmVhZCBjYWxsXG4gIC8vIGhhcyByZXR1cm5lZCB5ZXQpLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBvciBub3QgaXQncyBzYWZlIHRvIGVtaXRcbiAgLy8gJ3JlYWRhYmxlJyBldGMuXG4gIC8vXG4gIC8vIDMuIEFjdHVhbGx5IHB1bGwgdGhlIHJlcXVlc3RlZCBjaHVua3Mgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJldHVybi5cblxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG4gIHZhciBkb1JlYWQgPSBzdGF0ZS5uZWVkUmVhZGFibGU7XG4gIGRlYnVnKCduZWVkIHJlYWRhYmxlJywgZG9SZWFkKTtcblxuICAvLyBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBsZXNzIHRoYW4gdGhlIGhpZ2hXYXRlck1hcmssIHRoZW4gYWxzbyByZWFkIHNvbWVcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCB8fCBzdGF0ZS5sZW5ndGggLSBuIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRvUmVhZCA9IHRydWU7XG4gICAgZGVidWcoJ2xlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrJywgZG9SZWFkKTtcbiAgfVxuXG4gIC8vIGhvd2V2ZXIsIGlmIHdlJ3ZlIGVuZGVkLCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQsIGFuZCBpZiB3ZSdyZSBhbHJlYWR5XG4gIC8vIHJlYWRpbmcsIHRoZW4gaXQncyB1bm5lY2Vzc2FyeS5cbiAgaWYgKHN0YXRlLmVuZGVkIHx8IHN0YXRlLnJlYWRpbmcpIHtcbiAgICBkb1JlYWQgPSBmYWxzZTtcbiAgICBkZWJ1ZygncmVhZGluZyBvciBlbmRlZCcsIGRvUmVhZCk7XG4gIH0gZWxzZSBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKTtcbiAgICBzdGF0ZS5yZWFkaW5nID0gdHJ1ZTtcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgICAvLyBpZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSB6ZXJvLCB0aGVuIHdlICpuZWVkKiBhIHJlYWRhYmxlIGV2ZW50LlxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgLy8gY2FsbCBpbnRlcm5hbCByZWFkIG1ldGhvZFxuICAgIHRoaXMuX3JlYWQoc3RhdGUuaGlnaFdhdGVyTWFyayk7XG4gICAgc3RhdGUuc3luYyA9IGZhbHNlO1xuICAgIC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuICAgIGlmICghc3RhdGUucmVhZGluZykgbiA9IGhvd011Y2hUb1JlYWQobk9yaWcsIHN0YXRlKTtcbiAgfVxuICB2YXIgcmV0O1xuICBpZiAobiA+IDApIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKTtlbHNlIHJldCA9IG51bGw7XG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgICBuID0gMDtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5sZW5ndGggLT0gbjtcbiAgICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgfVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gICAgLy8gYXMgc29vbiBhcyB3ZSAqZG8qIGdldCBzb21ldGhpbmcgaW50byB0aGUgYnVmZmVyLlxuICAgIGlmICghc3RhdGUuZW5kZWQpIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSB0cmllZCB0byByZWFkKCkgcGFzdCB0aGUgRU9GLCB0aGVuIGVtaXQgZW5kIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgaWYgKG5PcmlnICE9PSBuICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgfVxuICBpZiAocmV0ICE9PSBudWxsKSB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuICByZXR1cm4gcmV0O1xufTtcbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1Zygnb25Fb2ZDaHVuaycpO1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBpZiAoc3RhdGUuc3luYykge1xuICAgIC8vIGlmIHdlIGFyZSBzeW5jLCB3YWl0IHVudGlsIG5leHQgdGljayB0byBlbWl0IHRoZSBkYXRhLlxuICAgIC8vIE90aGVyd2lzZSB3ZSByaXNrIGVtaXR0aW5nIGRhdGEgaW4gdGhlIGZsb3coKVxuICAgIC8vIHRoZSByZWFkYWJsZSBjb2RlIHRyaWdnZXJzIGR1cmluZyBhIHJlYWQoKSBjYWxsXG4gICAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZW1pdCAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBlbWl0UmVhZGFibGVfKHN0cmVhbSk7XG4gICAgfVxuICB9XG59XG5cbi8vIERvbid0IGVtaXQgcmVhZGFibGUgcmlnaHQgYXdheSBpbiBzeW5jIG1vZGUsIGJlY2F1c2UgdGhpcyBjYW4gdHJpZ2dlclxuLy8gYW5vdGhlciByZWFkKCkgY2FsbCA9PiBzdGFjayBvdmVyZmxvdy4gIFRoaXMgd2F5LCBpdCBtaWdodCB0cmlnZ2VyXG4vLyBhIG5leHRUaWNrIHJlY3Vyc2lvbiB3YXJuaW5nLCBidXQgdGhhdCdzIG5vdCBzbyBiYWQuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLm5lZWRSZWFkYWJsZSwgc3RhdGUuZW1pdHRlZFJlYWRhYmxlKTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO1xuICB9XG59XG5mdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdlbWl0UmVhZGFibGVfJywgc3RhdGUuZGVzdHJveWVkLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgaWYgKCFzdGF0ZS5kZXN0cm95ZWQgJiYgKHN0YXRlLmxlbmd0aCB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKTtcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFRoZSBzdHJlYW0gbmVlZHMgYW5vdGhlciByZWFkYWJsZSBldmVudCBpZlxuICAvLyAxLiBJdCBpcyBub3QgZmxvd2luZywgYXMgdGhlIGZsb3cgbWVjaGFuaXNtIHdpbGwgdGFrZVxuICAvLyAgICBjYXJlIG9mIGl0LlxuICAvLyAyLiBJdCBpcyBub3QgZW5kZWQuXG4gIC8vIDMuIEl0IGlzIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLCBzbyB3ZSBjYW4gc2NoZWR1bGVcbiAgLy8gICAgYW5vdGhlciByZWFkYWJsZSBsYXRlci5cbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gIXN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLmVuZGVkICYmIHN0YXRlLmxlbmd0aCA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICBmbG93KHN0cmVhbSk7XG59XG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhtYXliZVJlYWRNb3JlXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgLy8gQXR0ZW1wdCB0byByZWFkIG1vcmUgZGF0YSBpZiB3ZSBzaG91bGQuXG4gIC8vXG4gIC8vIFRoZSBjb25kaXRpb25zIGZvciByZWFkaW5nIG1vcmUgZGF0YSBhcmUgKG9uZSBvZik6XG4gIC8vIC0gTm90IGVub3VnaCBkYXRhIGJ1ZmZlcmVkIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKS4gVGhlIGxvb3BcbiAgLy8gICBpcyByZXNwb25zaWJsZSBmb3IgZmlsbGluZyB0aGUgYnVmZmVyIHdpdGggZW5vdWdoIGRhdGEgaWYgc3VjaCBkYXRhXG4gIC8vICAgaXMgYXZhaWxhYmxlLiBJZiBoaWdoV2F0ZXJNYXJrIGlzIDAgYW5kIHdlIGFyZSBub3QgaW4gdGhlIGZsb3dpbmcgbW9kZVxuICAvLyAgIHdlIHNob3VsZCBfbm90XyBhdHRlbXB0IHRvIGJ1ZmZlciBhbnkgZXh0cmEgZGF0YS4gV2UnbGwgZ2V0IG1vcmUgZGF0YVxuICAvLyAgIHdoZW4gdGhlIHN0cmVhbSBjb25zdW1lciBjYWxscyByZWFkKCkgaW5zdGVhZC5cbiAgLy8gLSBObyBkYXRhIGluIHRoZSBidWZmZXIsIGFuZCB0aGUgc3RyZWFtIGlzIGluIGZsb3dpbmcgbW9kZS4gSW4gdGhpcyBtb2RlXG4gIC8vICAgdGhlIGxvb3AgYmVsb3cgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHJlYWQoKSBpcyBjYWxsZWQuIEZhaWxpbmcgdG9cbiAgLy8gICBjYWxsIHJlYWQgaGVyZSB3b3VsZCBhYm9ydCB0aGUgZmxvdyBhbmQgdGhlcmUncyBubyBvdGhlciBtZWNoYW5pc20gZm9yXG4gIC8vICAgY29udGludWluZyB0aGUgZmxvdyBpZiB0aGUgc3RyZWFtIGNvbnN1bWVyIGhhcyBqdXN0IHN1YnNjcmliZWQgdG8gdGhlXG4gIC8vICAgJ2RhdGEnIGV2ZW50LlxuICAvL1xuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgY29uZGl0aW9ucyB0byBrZWVwIHJlYWRpbmcgZGF0YSwgdGhlIGZvbGxvd2luZ1xuICAvLyBjb25kaXRpb25zIHByZXZlbnQgdGhlIGRhdGEgZnJvbSBiZWluZyByZWFkOlxuICAvLyAtIFRoZSBzdHJlYW0gaGFzIGVuZGVkIChzdGF0ZS5lbmRlZCkuXG4gIC8vIC0gVGhlcmUgaXMgYWxyZWFkeSBhIHBlbmRpbmcgJ3JlYWQnIG9wZXJhdGlvbiAoc3RhdGUucmVhZGluZykuIFRoaXMgaXMgYVxuICAvLyAgIGNhc2Ugd2hlcmUgdGhlIHRoZSBzdHJlYW0gaGFzIGNhbGxlZCB0aGUgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBfcmVhZCgpXG4gIC8vICAgbWV0aG9kLCBidXQgdGhleSBhcmUgcHJvY2Vzc2luZyB0aGUgY2FsbCBhc3luY2hyb25vdXNseSBhbmQgaGF2ZSBfbm90X1xuICAvLyAgIGNhbGxlZCBwdXNoKCkgd2l0aCBuZXcgZGF0YS4gSW4gdGhpcyBjYXNlIHdlIHNraXAgcGVyZm9ybWluZyBtb3JlXG4gIC8vICAgcmVhZCgpcy4gVGhlIGV4ZWN1dGlvbiBlbmRzIGluIHRoaXMgbWV0aG9kIGFnYWluIGFmdGVyIHRoZSBfcmVhZCgpIGVuZHNcbiAgLy8gICB1cCBjYWxsaW5nIHB1c2goKSB3aXRoIG1vcmUgZGF0YS5cbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICB2YXIgbGVuID0gc3RhdGUubGVuZ3RoO1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufVxuXG4vLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIGVycm9yT3JEZXN0cm95KHRoaXMsIG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3JlYWQoKScpKTtcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG4gIHZhciBkb0VuZCA9ICghcGlwZU9wdHMgfHwgcGlwZU9wdHMuZW5kICE9PSBmYWxzZSkgJiYgZGVzdCAhPT0gcHJvY2Vzcy5zdGRvdXQgJiYgZGVzdCAhPT0gcHJvY2Vzcy5zdGRlcnI7XG4gIHZhciBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiB1bnBpcGU7XG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBwcm9jZXNzLm5leHRUaWNrKGVuZEZuKTtlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG4gIGRlc3Qub24oJ3VucGlwZScsIG9udW5waXBlKTtcbiAgZnVuY3Rpb24gb251bnBpcGUocmVhZGFibGUsIHVucGlwZUluZm8pIHtcbiAgICBkZWJ1Zygnb251bnBpcGUnKTtcbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgaWYgKHVucGlwZUluZm8gJiYgdW5waXBlSW5mby5oYXNVbnBpcGVkID09PSBmYWxzZSkge1xuICAgICAgICB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuICB2YXIgY2xlYW5lZFVwID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTtcbiAgICAvLyBjbGVhbnVwIGV2ZW50IGhhbmRsZXJzIG9uY2UgdGhlIHBpcGUgaXMgYnJva2VuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcbiAgICBjbGVhbmVkVXAgPSB0cnVlO1xuXG4gICAgLy8gaWYgdGhlIHJlYWRlciBpcyB3YWl0aW5nIGZvciBhIGRyYWluIGV2ZW50IGZyb20gdGhpc1xuICAgIC8vIHNwZWNpZmljIHdyaXRlciwgdGhlbiBpdCB3b3VsZCBjYXVzZSBpdCB0byBuZXZlciBzdGFydFxuICAgIC8vIGZsb3dpbmcgYWdhaW4uXG4gICAgLy8gU28sIGlmIHRoaXMgaXMgYXdhaXRpbmcgYSBkcmFpbiwgdGhlbiB3ZSBqdXN0IGNhbGwgaXQgbm93LlxuICAgIC8vIElmIHdlIGRvbid0IGtub3csIHRoZW4gYXNzdW1lIHRoYXQgd2UgYXJlIHdhaXRpbmcgZm9yIG9uZS5cbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiAmJiAoIWRlc3QuX3dyaXRhYmxlU3RhdGUgfHwgZGVzdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pKSBvbmRyYWluKCk7XG4gIH1cbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpO1xuICAgIHZhciByZXQgPSBkZXN0LndyaXRlKGNodW5rKTtcbiAgICBkZWJ1ZygnZGVzdC53cml0ZScsIHJldCk7XG4gICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICAgIGlmICgoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJiBzdGF0ZS5waXBlcyA9PT0gZGVzdCB8fCBzdGF0ZS5waXBlc0NvdW50ID4gMSAmJiBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KSAhPT0gLTEpICYmICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgICAgICBzdGF0ZS5hd2FpdERyYWluKys7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKSBlcnJvck9yRGVzdHJveShkZXN0LCBlcik7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG4gIHByZXBlbmRMaXN0ZW5lcihkZXN0LCAnZXJyb3InLCBvbmVycm9yKTtcblxuICAvLyBCb3RoIGNsb3NlIGFuZCBmaW5pc2ggc2hvdWxkIHRyaWdnZXIgdW5waXBlLCBidXQgb25seSBvbmNlLlxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlYnVnKCdvbmZpbmlzaCcpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfVxuXG4gIC8vIHRlbGwgdGhlIGRlc3QgdGhhdCBpdCdzIGJlaW5nIHBpcGVkIHRvXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYyk7XG5cbiAgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKTtcbiAgICBzcmMucmVzdW1lKCk7XG4gIH1cbiAgcmV0dXJuIGRlc3Q7XG59O1xuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwaXBlT25EcmFpbkZ1bmN0aW9uUmVzdWx0KCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbikgc3RhdGUuYXdhaXREcmFpbi0tO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluID09PSAwICYmIEVFbGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykpIHtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgICAgZmxvdyhzcmMpO1xuICAgIH1cbiAgfTtcbn1cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbiAoZGVzdCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgdW5waXBlSW5mbyA9IHtcbiAgICBoYXNVbnBpcGVkOiBmYWxzZVxuICB9O1xuXG4gIC8vIGlmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDApIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcykgcmV0dXJuIHRoaXM7XG4gICAgaWYgKCFkZXN0KSBkZXN0ID0gc3RhdGUucGlwZXM7XG5cbiAgICAvLyBnb3QgYSBtYXRjaC5cbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGlmIChkZXN0KSBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIHZhciBkZXN0cyA9IHN0YXRlLnBpcGVzO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5waXBlc0NvdW50O1xuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgZGVzdHNbaV0uZW1pdCgndW5waXBlJywgdGhpcywge1xuICAgICAgaGFzVW5waXBlZDogZmFsc2VcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpbmRleCA9IGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpO1xuICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGhpcztcbiAgc3RhdGUucGlwZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgc3RhdGUucGlwZXNDb3VudCAtPSAxO1xuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkgc3RhdGUucGlwZXMgPSBzdGF0ZS5waXBlc1swXTtcbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBzZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZ1xuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgLy8gdXBkYXRlIHJlYWRhYmxlTGlzdGVuaW5nIHNvIHRoYXQgcmVzdW1lKCkgbWF5IGJlIGEgbm8tb3BcbiAgICAvLyBhIGZldyBsaW5lcyBkb3duLiBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJykuXG4gICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwO1xuXG4gICAgLy8gVHJ5IHN0YXJ0IGZsb3dpbmcgb24gbmV4dCB0aWNrIGlmIHN0cmVhbSBpc24ndCBleHBsaWNpdGx5IHBhdXNlZFxuICAgIGlmIChzdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkgdGhpcy5yZXN1bWUoKTtcbiAgfSBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiAhc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcpIHtcbiAgICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgZGVidWcoJ29uIHJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5yZWFkaW5nKTtcbiAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgICAgfSBlbHNlIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IFJlYWRhYmxlLnByb3RvdHlwZS5vbjtcblJlYWRhYmxlLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChldiwgZm4pIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLCBldiwgZm4pO1xuICBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcyk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2KSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICBpZiAoZXYgPT09ICdyZWFkYWJsZScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcbmZ1bmN0aW9uIHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nKHNlbGYpIHtcbiAgdmFyIHN0YXRlID0gc2VsZi5fcmVhZGFibGVTdGF0ZTtcbiAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzZWxmLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwO1xuICBpZiAoc3RhdGUucmVzdW1lU2NoZWR1bGVkICYmICFzdGF0ZS5wYXVzZWQpIHtcbiAgICAvLyBmbG93aW5nIG5lZWRzIHRvIGJlIHNldCB0byB0cnVlIG5vdywgb3RoZXJ3aXNlXG4gICAgLy8gdGhlIHVwY29taW5nIHJlc3VtZSB3aWxsIG5vdCBmbG93LlxuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuXG4gICAgLy8gY3J1ZGUgd2F5IHRvIGNoZWNrIGlmIHdlIHNob3VsZCByZXN1bWVcbiAgfSBlbHNlIGlmIChzZWxmLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDApIHtcbiAgICBzZWxmLnJlc3VtZSgpO1xuICB9XG59XG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpO1xuICBzZWxmLnJlYWQoMCk7XG59XG5cbi8vIHBhdXNlKCkgYW5kIHJlc3VtZSgpIGFyZSByZW1uYW50cyBvZiB0aGUgbGVnYWN5IHJlYWRhYmxlIHN0cmVhbSBBUElcbi8vIElmIHRoZSB1c2VyIHVzZXMgdGhlbSwgdGhlbiBzd2l0Y2ggaW50byBvbGQgbW9kZS5cblJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICAvLyB3ZSBmbG93IG9ubHkgaWYgdGhlcmUgaXMgbm8gb25lIGxpc3RlbmluZ1xuICAgIC8vIGZvciByZWFkYWJsZSwgYnV0IHdlIHN0aWxsIGhhdmUgdG8gY2FsbFxuICAgIC8vIHJlc3VtZSgpXG4gICAgc3RhdGUuZmxvd2luZyA9ICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZztcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICByZXR1cm4gdGhpcztcbn07XG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sIHN0YXRlKSB7XG4gIGRlYnVnKCdyZXN1bWUnLCBzdGF0ZS5yZWFkaW5nKTtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gIH1cbiAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHN0cmVhbS5lbWl0KCdyZXN1bWUnKTtcbiAgZmxvdyhzdHJlYW0pO1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUucmVhZGluZykgc3RyZWFtLnJlYWQoMCk7XG59XG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpO1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZCA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcbmZ1bmN0aW9uIGZsb3coc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKTtcbiAgd2hpbGUgKHN0YXRlLmZsb3dpbmcgJiYgc3RyZWFtLnJlYWQoKSAhPT0gbnVsbCk7XG59XG5cbi8vIHdyYXAgYW4gb2xkLXN0eWxlIHN0cmVhbSBhcyB0aGUgYXN5bmMgZGF0YSBzb3VyY2UuXG4vLyBUaGlzIGlzICpub3QqIHBhcnQgb2YgdGhlIHJlYWRhYmxlIHN0cmVhbSBpbnRlcmZhY2UuXG4vLyBJdCBpcyBhbiB1Z2x5IHVuZm9ydHVuYXRlIG1lc3Mgb2YgaGlzdG9yeS5cblJlYWRhYmxlLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24gKHN0cmVhbSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgcGF1c2VkID0gZmFsc2U7XG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIF90aGlzLnB1c2goY2h1bmspO1xuICAgIH1cbiAgICBfdGhpcy5wdXNoKG51bGwpO1xuICB9KTtcbiAgc3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgZGF0YScpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuXG4gICAgLy8gZG9uJ3Qgc2tpcCBvdmVyIGZhbHN5IHZhbHVlcyBpbiBvYmplY3RNb2RlXG4gICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgJiYgKGNodW5rID09PSBudWxsIHx8IGNodW5rID09PSB1bmRlZmluZWQpKSByZXR1cm47ZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgKCFjaHVuayB8fCAhY2h1bmsubGVuZ3RoKSkgcmV0dXJuO1xuICAgIHZhciByZXQgPSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbiBtZXRob2RXcmFwKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWV0aG9kV3JhcFJldHVybkZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBrUHJveHlFdmVudHMubGVuZ3RoOyBuKyspIHtcbiAgICBzdHJlYW0ub24oa1Byb3h5RXZlbnRzW25dLCB0aGlzLmVtaXQuYmluZCh0aGlzLCBrUHJveHlFdmVudHNbbl0pKTtcbiAgfVxuXG4gIC8vIHdoZW4gd2UgdHJ5IHRvIGNvbnN1bWUgc29tZSBtb3JlIGJ5dGVzLCBzaW1wbHkgdW5wYXVzZSB0aGVcbiAgLy8gdW5kZXJseWluZyBzdHJlYW0uXG4gIHRoaXMuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIGRlYnVnKCd3cmFwcGVkIF9yZWFkJywgbik7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gdGhpcztcbn07XG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWFkYWJsZS5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2FzeW5jX2l0ZXJhdG9yJyk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IodGhpcyk7XG4gIH07XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUJ1ZmZlcicsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlRmxvd2luZycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQoc3RhdGUpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gc3RhdGU7XG4gICAgfVxuICB9XG59KTtcblxuLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVMZW5ndGgnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aDtcbiAgfVxufSk7XG5cbi8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0KG4sIHN0YXRlKSB7XG4gIC8vIG5vdGhpbmcgYnVmZmVyZWRcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIHZhciByZXQ7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKTtlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdFxuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSByZXQgPSBzdGF0ZS5idWZmZXIuam9pbignJyk7ZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmZpcnN0KCk7ZWxzZSByZXQgPSBzdGF0ZS5idWZmZXIuY29uY2F0KHN0YXRlLmxlbmd0aCk7XG4gICAgc3RhdGUuYnVmZmVyLmNsZWFyKCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBwYXJ0IG9mIGxpc3RcbiAgICByZXQgPSBzdGF0ZS5idWZmZXIuY29uc3VtZShuLCBzdGF0ZS5kZWNvZGVyKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2VuZFJlYWRhYmxlJywgc3RhdGUuZW5kRW1pdHRlZCk7XG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVuZFJlYWRhYmxlTlQsIHN0YXRlLCBzdHJlYW0pO1xuICB9XG59XG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgZGVidWcoJ2VuZFJlYWRhYmxlTlQnLCBzdGF0ZS5lbmRFbWl0dGVkLCBzdGF0ZS5sZW5ndGgpO1xuXG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgIGlmIChzdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgICAgLy8gaWYgdGhlIHdyaXRhYmxlIHNpZGUgaXMgcmVhZHkgZm9yIGF1dG9EZXN0cm95IGFzIHdlbGxcbiAgICAgIHZhciB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gICAgICBpZiAoIXdTdGF0ZSB8fCB3U3RhdGUuYXV0b0Rlc3Ryb3kgJiYgd1N0YXRlLmZpbmlzaGVkKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWFkYWJsZS5mcm9tID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBvcHRzKSB7XG4gICAgaWYgKGZyb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZnJvbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9mcm9tJyk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cyk7XG4gIH07XG59XG5mdW5jdGlvbiBpbmRleE9mKHhzLCB4KSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKHhzW2ldID09PSB4KSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gLTE7XG59IiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0sgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLFxuICBFUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzA7XG52YXIgRHVwbGV4ID0gcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xucmVxdWlyZSgnaW5oZXJpdHMnKShUcmFuc2Zvcm0sIER1cGxleCk7XG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShlciwgZGF0YSkge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG4gIGlmIChjYiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVSUl9NVUxUSVBMRV9DQUxMQkFDSygpKTtcbiAgfVxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG4gIGlmIChkYXRhICE9IG51bGwpXG4gICAgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgdGhpcy5wdXNoKGRhdGEpO1xuICBjYihlcik7XG4gIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJzLnJlYWRpbmcgPSBmYWxzZTtcbiAgaWYgKHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSB7XG4gICAgYWZ0ZXJUcmFuc2Zvcm06IGFmdGVyVHJhbnNmb3JtLmJpbmQodGhpcyksXG4gICAgbmVlZFRyYW5zZm9ybTogZmFsc2UsXG4gICAgdHJhbnNmb3JtaW5nOiBmYWxzZSxcbiAgICB3cml0ZWNiOiBudWxsLFxuICAgIHdyaXRlY2h1bms6IG51bGwsXG4gICAgd3JpdGVlbmNvZGluZzogbnVsbFxuICB9O1xuXG4gIC8vIHN0YXJ0IG91dCBhc2tpbmcgZm9yIGEgcmVhZGFibGUgZXZlbnQgb25jZSBkYXRhIGlzIHRyYW5zZm9ybWVkLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gd2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoID0gb3B0aW9ucy5mbHVzaDtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaCgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICB0aGlzLl9mbHVzaChmdW5jdGlvbiAoZXIsIGRhdGEpIHtcbiAgICAgIGRvbmUoX3RoaXMsIGVyLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBkb25lKHRoaXMsIG51bGwsIG51bGwpO1xuICB9XG59XG5UcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgcmV0dXJuIER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZyk7XG59O1xuXG4vLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHlvdSBkbyBzdHVmZiFcbi8vIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vICdjaHVuaycgaXMgYW4gaW5wdXQgY2h1bmsuXG4vL1xuLy8gQ2FsbCBgcHVzaChuZXdDaHVuaylgIHRvIHBhc3MgYWxvbmcgdHJhbnNmb3JtZWQgb3V0cHV0XG4vLyB0byB0aGUgcmVhZGFibGUgc2lkZS4gIFlvdSBtYXkgY2FsbCAncHVzaCcgemVybyBvciBtb3JlIHRpbWVzLlxuLy9cbi8vIENhbGwgYGNiKGVycilgIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhpcyBjaHVuay4gIElmIHlvdSBwYXNzXG4vLyBhbiBlcnJvciwgdGhlbiB0aGF0J2xsIHB1dCB0aGUgaHVydCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uLiAgSWYgeW91XG4vLyBuZXZlciBjYWxsIGNiKCksIHRoZW4geW91J2xsIG5ldmVyIGdldCBhbm90aGVyIGNodW5rLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfdHJhbnNmb3JtKCknKSk7XG59O1xuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmICF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB0cy50cmFuc2Zvcm1pbmcgPSB0cnVlO1xuICAgIHRoaXMuX3RyYW5zZm9ybSh0cy53cml0ZWNodW5rLCB0cy53cml0ZWVuY29kaW5nLCB0cy5hZnRlclRyYW5zZm9ybSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbWFyayB0aGF0IHdlIG5lZWQgYSB0cmFuc2Zvcm0sIHNvIHRoYXQgYW55IGRhdGEgdGhhdCBjb21lcyBpblxuICAgIC8vIHdpbGwgZ2V0IHByb2Nlc3NlZCwgbm93IHRoYXQgd2UndmUgYXNrZWQgZm9yIGl0LlxuICAgIHRzLm5lZWRUcmFuc2Zvcm0gPSB0cnVlO1xuICB9XG59O1xuVHJhbnNmb3JtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIER1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGZ1bmN0aW9uIChlcnIyKSB7XG4gICAgY2IoZXJyMik7XG4gIH0pO1xufTtcbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIGlmIChkYXRhICE9IG51bGwpXG4gICAgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgLy8gVE9ETyhCcmlkZ2VBUik6IFdyaXRlIGEgdGVzdCBmb3IgdGhlc2UgdHdvIGVycm9yIGNhc2VzXG4gIC8vIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgd3JpdGUgYnVmZmVyLCB0aGVuIHRoYXQgbWVhbnNcbiAgLy8gdGhhdCBub3RoaW5nIG1vcmUgd2lsbCBldmVyIGJlIHByb3ZpZGVkXG4gIGlmIChzdHJlYW0uX3dyaXRhYmxlU3RhdGUubGVuZ3RoKSB0aHJvdyBuZXcgRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wKCk7XG4gIGlmIChzdHJlYW0uX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZykgdGhyb3cgbmV3IEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcoKTtcbiAgcmV0dXJuIHN0cmVhbS5wdXNoKG51bGwpO1xufSIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyogPHJlcGxhY2VtZW50PiAqL1xuZnVuY3Rpb24gV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLmNodW5rID0gY2h1bms7XG4gIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgdGhpcy5jYWxsYmFjayA9IGNiO1xuICB0aGlzLm5leHQgPSBudWxsO1xufVxuXG4vLyBJdCBzZWVtcyBhIGxpbmtlZCBsaXN0IGJ1dCBpdCBpcyBub3Rcbi8vIHRoZXJlIHdpbGwgYmUgb25seSAyIG9mIHRoZXNlIGZvciBlYWNoIHN0cmVhbVxuZnVuY3Rpb24gQ29ya2VkUmVxdWVzdChzdGF0ZSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLmVudHJ5ID0gbnVsbDtcbiAgdGhpcy5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgb25Db3JrZWRGaW5pc2goX3RoaXMsIHN0YXRlKTtcbiAgfTtcbn1cbi8qIDwvcmVwbGFjZW1lbnQ+ICovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGludGVybmFsVXRpbCA9IHtcbiAgZGVwcmVjYXRlOiByZXF1aXJlKCd1dGlsLWRlcHJlY2F0ZScpXG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJyksXG4gIGdldEhpZ2hXYXRlck1hcmsgPSBfcmVxdWlyZS5nZXRIaWdoV2F0ZXJNYXJrO1xudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuY29kZXMsXG4gIEVSUl9JTlZBTElEX0FSR19UWVBFID0gX3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEID0gX3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gIEVSUl9NVUxUSVBMRV9DQUxMQkFDSyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxcbiAgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVEID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsXG4gIEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX05VTExfVkFMVUVTLFxuICBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELFxuICBFUlJfVU5LTk9XTl9FTkNPRElORyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9VTktOT1dOX0VOQ09ESU5HO1xudmFyIGVycm9yT3JEZXN0cm95ID0gZGVzdHJveUltcGwuZXJyb3JPckRlc3Ryb3k7XG5yZXF1aXJlKCdpbmhlcml0cycpKFdyaXRhYmxlLCBTdHJlYW0pO1xuZnVuY3Rpb24gbm9wKCkge31cbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbSxcbiAgLy8gZS5nLiBvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSB2cy4gb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGUsIGV0Yy5cbiAgaWYgKHR5cGVvZiBpc0R1cGxleCAhPT0gJ2Jvb2xlYW4nKSBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKClcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpO1xuXG4gIC8vIGlmIF9maW5hbCBoYXMgYmVlbiBjYWxsZWRcbiAgdGhpcy5maW5hbENhbGxlZCA9IGZhbHNlO1xuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyB3aGVuIHRydWUgYWxsIHdyaXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIC51bmNvcmsoKSBjYWxsXG4gIHRoaXMuY29ya2VkID0gMDtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uIChlcikge1xuICAgIG9ud3JpdGUoc3RyZWFtLCBlcik7XG4gIH07XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssZW5jb2RpbmcsY2IpXG4gIHRoaXMud3JpdGVjYiA9IG51bGw7XG5cbiAgLy8gdGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMDtcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBTaG91bGQgY2xvc2UgYmUgZW1pdHRlZCBvbiBkZXN0cm95LiBEZWZhdWx0cyB0byB0cnVlLlxuICB0aGlzLmVtaXRDbG9zZSA9IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZTtcblxuICAvLyBTaG91bGQgLmRlc3Ryb3koKSBiZSBjYWxsZWQgYWZ0ZXIgJ2ZpbmlzaCcgKGFuZCBwb3RlbnRpYWxseSAnZW5kJylcbiAgdGhpcy5hdXRvRGVzdHJveSA9ICEhb3B0aW9ucy5hdXRvRGVzdHJveTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgdmFyIG91dCA9IFtdO1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIG91dC5wdXNoKGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgICAgIGdldDogaW50ZXJuYWxVdGlsLmRlcHJlY2F0ZShmdW5jdGlvbiB3cml0YWJsZVN0YXRlQnVmZmVyR2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJywgJ0RFUDAwMDMnKVxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7fVxufSkoKTtcblxuLy8gVGVzdCBfd3JpdGFibGVTdGF0ZSBmb3IgaW5oZXJpdGFuY2UgdG8gYWNjb3VudCBmb3IgRHVwbGV4IHN0cmVhbXMsXG4vLyB3aG9zZSBwcm90b3R5cGUgY2hhaW4gb25seSBwb2ludHMgdG8gUmVhZGFibGUuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmhhc0luc3RhbmNlICYmIHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICByZWFsSGFzSW5zdGFuY2UgPSBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUob2JqZWN0KSB7XG4gICAgICBpZiAocmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcywgb2JqZWN0KSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodGhpcyAhPT0gV3JpdGFibGUpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gZnVuY3Rpb24gcmVhbEhhc0luc3RhbmNlKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiB0aGlzO1xuICB9O1xufVxuZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFdyaXRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41XG4gIHZhciBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiBEdXBsZXg7XG4gIGlmICghaXNEdXBsZXggJiYgIXJlYWxIYXNJbnN0YW5jZS5jYWxsKFdyaXRhYmxlLCB0aGlzKSkgcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KTtcblxuICAvLyBsZWdhY3kuXG4gIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsO1xuICB9XG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBPdGhlcndpc2UgcGVvcGxlIGNhbiBwaXBlIFdyaXRhYmxlIHN0cmVhbXMsIHdoaWNoIGlzIGp1c3Qgd3JvbmcuXG5Xcml0YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgZXJyb3JPckRlc3Ryb3kodGhpcywgbmV3IEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUoKSk7XG59O1xuZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sIGNiKSB7XG4gIHZhciBlciA9IG5ldyBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCgpO1xuICAvLyBUT0RPOiBkZWZlciBlcnJvciBldmVudHMgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IHRoZSBjYlxuICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhIHVzZXItc3VwcGxpZWQgY2h1bmsgaXMgdmFsaWQsIGVzcGVjaWFsbHkgZm9yIHRoZSBwYXJ0aWN1bGFyXG4vLyBtb2RlIHRoZSBzdHJlYW0gaXMgaW4uIEN1cnJlbnRseSB0aGlzIG1lYW5zIHRoYXQgYG51bGxgIGlzIG5ldmVyIGFjY2VwdGVkXG4vLyBhbmQgdW5kZWZpbmVkL25vbi1zdHJpbmcgdmFsdWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IG1vZGUuXG5mdW5jdGlvbiB2YWxpZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBjYikge1xuICB2YXIgZXI7XG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIGVyID0gbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJ10sIGNodW5rKTtcbiAgfVxuICBpZiAoZXIpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuICB2YXIgaXNCdWYgPSAhc3RhdGUub2JqZWN0TW9kZSAmJiBfaXNVaW50OEFycmF5KGNodW5rKTtcbiAgaWYgKGlzQnVmICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgaWYgKGlzQnVmKSBlbmNvZGluZyA9ICdidWZmZXInO2Vsc2UgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuICBpZiAoc3RhdGUuZW5kaW5nKSB3cml0ZUFmdGVyRW5kKHRoaXMsIGNiKTtlbHNlIGlmIChpc0J1ZiB8fCB2YWxpZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgY2IpKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgcmV0ID0gd3JpdGVPckJ1ZmZlcih0aGlzLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG4gIHJldHVybiByZXQ7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKys7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCEoWydoZXgnLCAndXRmOCcsICd1dGYtOCcsICdhc2NpaScsICdiaW5hcnknLCAnYmFzZTY0JywgJ3VjczInLCAndWNzLTInLCAndXRmMTZsZScsICd1dGYtMTZsZScsICdyYXcnXS5pbmRleE9mKChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpKSA+IC0xKSkgdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2RpbmcgPSBlbmNvZGluZztcbiAgcmV0dXJuIHRoaXM7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpO1xuICB9XG59KTtcbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5cbi8vIGlmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICghaXNCdWYpIHtcbiAgICB2YXIgbmV3Q2h1bmsgPSBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKTtcbiAgICBpZiAoY2h1bmsgIT09IG5ld0NodW5rKSB7XG4gICAgICBpc0J1ZiA9IHRydWU7XG4gICAgICBlbmNvZGluZyA9ICdidWZmZXInO1xuICAgICAgY2h1bmsgPSBuZXdDaHVuaztcbiAgICB9XG4gIH1cbiAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuICB2YXIgcmV0ID0gc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgLy8gd2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlO1xuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQpIHtcbiAgICB2YXIgbGFzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IHtcbiAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgIGVuY29kaW5nOiBlbmNvZGluZyxcbiAgICAgIGlzQnVmOiBpc0J1ZixcbiAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuICAgIGlmIChsYXN0KSB7XG4gICAgICBsYXN0Lm5leHQgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCArPSAxO1xuICB9IGVsc2Uge1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAoc3RhdGUuZGVzdHJveWVkKSBzdGF0ZS5vbndyaXRlKG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKSk7ZWxzZSBpZiAod3JpdGV2KSBzdHJlYW0uX3dyaXRldihjaHVuaywgc3RhdGUub253cml0ZSk7ZWxzZSBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2I7XG4gIGlmIChzeW5jKSB7XG4gICAgLy8gZGVmZXIgdGhlIGNhbGxiYWNrIGlmIHdlIGFyZSBiZWluZyBjYWxsZWQgc3luY2hyb25vdXNseVxuICAgIC8vIHRvIGF2b2lkIHBpbGluZyB1cCB0aGluZ3Mgb24gdGhlIHN0YWNrXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xuICAgIC8vIHRoaXMgY2FuIGVtaXQgZmluaXNoLCBhbmQgaXQgd2lsbCBhbHdheXMgaGFwcGVuXG4gICAgLy8gYWZ0ZXIgZXJyb3JcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZpbmlzaE1heWJlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY2FsbGVyIGV4cGVjdCB0aGlzIHRvIGhhcHBlbiBiZWZvcmUgaWZcbiAgICAvLyBpdCBpcyBhc3luY1xuICAgIGNiKGVyKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYnV0IGZpbmlzaCBtdXN0XG4gICAgLy8gYWx3YXlzIGZvbGxvdyBlcnJvclxuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgc3luYyA9IHN0YXRlLnN5bmM7XG4gIHZhciBjYiA9IHN0YXRlLndyaXRlY2I7XG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKTtcbiAgb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKTtcbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpIHx8IHN0cmVhbS5kZXN0cm95ZWQ7XG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChzeW5jKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKSB7XG4gIGlmICghZmluaXNoZWQpIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKTtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIGNiKCk7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG4vLyBNdXN0IGZvcmNlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBuZXh0VGljaywgc28gdGhhdCB3ZSBkb24ndFxuLy8gZW1pdCAnZHJhaW4nIGJlZm9yZSB0aGUgd3JpdGUoKSBjb25zdW1lciBnZXRzIHRoZSAnZmFsc2UnIHJldHVyblxuLy8gdmFsdWUsIGFuZCBoYXMgYSBjaGFuY2UgdG8gYXR0YWNoIGEgJ2RyYWluJyBsaXN0ZW5lci5cbmZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJyk7XG4gIH1cbn1cblxuLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7XG4gIHZhciBlbnRyeSA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgYWxsQnVmZmVycyA9IHRydWU7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBpZiAoIWVudHJ5LmlzQnVmKSBhbGxCdWZmZXJzID0gZmFsc2U7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBidWZmZXIuYWxsQnVmZmVycyA9IGFsbEJ1ZmZlcnM7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB0cnVlLCBzdGF0ZS5sZW5ndGgsIGJ1ZmZlciwgJycsIGhvbGRlci5maW5pc2gpO1xuXG4gICAgLy8gZG9Xcml0ZSBpcyBhbG1vc3QgYWx3YXlzIGFzeW5jLCBkZWZlciB0aGVzZSB0byBzYXZlIGEgYml0IG9mIHRpbWVcbiAgICAvLyBhcyB0aGUgaG90IHBhdGggZW5kcyB3aXRoIGRvV3JpdGVcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgICBpZiAoaG9sZGVyLm5leHQpIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IGhvbGRlci5uZXh0O1xuICAgICAgaG9sZGVyLm5leHQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdChzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBTbG93IGNhc2UsIHdyaXRlIGNodW5rcyBvbmUtYnktb25lXG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2h1bmsgPSBlbnRyeS5jaHVuaztcbiAgICAgIHZhciBlbmNvZGluZyA9IGVudHJ5LmVuY29kaW5nO1xuICAgICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLTtcbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG4gICAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBlbnRyeTtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xufVxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3dyaXRlKCknKSk7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGNodW5rO1xuICAgIGNodW5rID0gbnVsbDtcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZykgZW5kV3JpdGFibGUodGhpcywgc3RhdGUsIGNiKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlTGVuZ3RoJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGg7XG4gIH1cbn0pO1xuZnVuY3Rpb24gbmVlZEZpbmlzaChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZW5kaW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPT09IG51bGwgJiYgIXN0YXRlLmZpbmlzaGVkICYmICFzdGF0ZS53cml0aW5nO1xufVxuZnVuY3Rpb24gY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RyZWFtLl9maW5hbChmdW5jdGlvbiAoZXJyKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgaWYgKGVycikge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nICYmICFzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgICAgc3RhdGUuZmluYWxDYWxsZWQgPSB0cnVlO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsRmluYWwsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBuZWVkID0gbmVlZEZpbmlzaChzdGF0ZSk7XG4gIGlmIChuZWVkKSB7XG4gICAgcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmIChzdGF0ZS5wZW5kaW5nY2IgPT09IDApIHtcbiAgICAgIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdmaW5pc2gnKTtcbiAgICAgIGlmIChzdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGR1cGxleCBzdHJlYW1zIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZWN0XG4gICAgICAgIC8vIGlmIHRoZSByZWFkYWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsXG4gICAgICAgIHZhciByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gICAgICAgIGlmICghclN0YXRlIHx8IHJTdGF0ZS5hdXRvRGVzdHJveSAmJiByU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5lZWQ7XG59XG5mdW5jdGlvbiBlbmRXcml0YWJsZShzdHJlYW0sIHN0YXRlLCBjYikge1xuICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwcm9jZXNzLm5leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIG9uQ29ya2VkRmluaXNoKGNvcmtSZXEsIHN0YXRlLCBlcnIpIHtcbiAgdmFyIGVudHJ5ID0gY29ya1JlcS5lbnRyeTtcbiAgY29ya1JlcS5lbnRyeSA9IG51bGw7XG4gIHdoaWxlIChlbnRyeSkge1xuICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGNiKGVycik7XG4gICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICB9XG5cbiAgLy8gcmV1c2UgdGhlIGZyZWUgY29ya1JlcS5cbiAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQgPSBjb3JrUmVxO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgX09iamVjdCRzZXRQcm90b3R5cGVPO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykgeyB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7IHJldHVybiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxudmFyIGZpbmlzaGVkID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJyk7XG52YXIga0xhc3RSZXNvbHZlID0gU3ltYm9sKCdsYXN0UmVzb2x2ZScpO1xudmFyIGtMYXN0UmVqZWN0ID0gU3ltYm9sKCdsYXN0UmVqZWN0Jyk7XG52YXIga0Vycm9yID0gU3ltYm9sKCdlcnJvcicpO1xudmFyIGtFbmRlZCA9IFN5bWJvbCgnZW5kZWQnKTtcbnZhciBrTGFzdFByb21pc2UgPSBTeW1ib2woJ2xhc3RQcm9taXNlJyk7XG52YXIga0hhbmRsZVByb21pc2UgPSBTeW1ib2woJ2hhbmRsZVByb21pc2UnKTtcbnZhciBrU3RyZWFtID0gU3ltYm9sKCdzdHJlYW0nKTtcbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJSZXN1bHQodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgZG9uZTogZG9uZVxuICB9O1xufVxuZnVuY3Rpb24gcmVhZEFuZFJlc29sdmUoaXRlcikge1xuICB2YXIgcmVzb2x2ZSA9IGl0ZXJba0xhc3RSZXNvbHZlXTtcbiAgaWYgKHJlc29sdmUgIT09IG51bGwpIHtcbiAgICB2YXIgZGF0YSA9IGl0ZXJba1N0cmVhbV0ucmVhZCgpO1xuICAgIC8vIHdlIGRlZmVyIGlmIGRhdGEgaXMgbnVsbFxuICAgIC8vIHdlIGNhbiBiZSBleHBlY3RpbmcgZWl0aGVyICdlbmQnIG9yXG4gICAgLy8gJ2Vycm9yJ1xuICAgIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgICBpdGVyW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgaXRlcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgIGl0ZXJba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25SZWFkYWJsZShpdGVyKSB7XG4gIC8vIHdlIHdhaXQgZm9yIHRoZSBuZXh0IHRpY2ssIGJlY2F1c2UgaXQgbWlnaHRcbiAgLy8gZW1pdCBhbiBlcnJvciB3aXRoIHByb2Nlc3MubmV4dFRpY2tcbiAgcHJvY2Vzcy5uZXh0VGljayhyZWFkQW5kUmVzb2x2ZSwgaXRlcik7XG59XG5mdW5jdGlvbiB3cmFwRm9yTmV4dChsYXN0UHJvbWlzZSwgaXRlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxhc3RQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGl0ZXJba0VuZGVkXSkge1xuICAgICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZXJba0hhbmRsZVByb21pc2VdKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSwgcmVqZWN0KTtcbiAgfTtcbn1cbnZhciBBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uICgpIHt9KTtcbnZhciBSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoKF9PYmplY3Qkc2V0UHJvdG90eXBlTyA9IHtcbiAgZ2V0IHN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RyZWFtXTtcbiAgfSxcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIC8vIGlmIHdlIGhhdmUgZGV0ZWN0ZWQgYW4gZXJyb3IgaW4gdGhlIG1lYW53aGlsZVxuICAgIC8vIHJlamVjdCBzdHJhaWdodCBhd2F5XG4gICAgdmFyIGVycm9yID0gdGhpc1trRXJyb3JdO1xuICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHRoaXNba0VuZGVkXSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgIH1cbiAgICBpZiAodGhpc1trU3RyZWFtXS5kZXN0cm95ZWQpIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gZGVmZXIgdmlhIG5leHRUaWNrIGJlY2F1c2UgaWYgLmRlc3Ryb3koZXJyKSBpc1xuICAgICAgLy8gY2FsbGVkLCB0aGUgZXJyb3Igd2lsbCBiZSBlbWl0dGVkIHZpYSBuZXh0VGljaywgYW5kXG4gICAgICAvLyB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgdGhlcmUgaXMgbm8gZXJyb3IgbGluZ2VyaW5nIGFyb3VuZFxuICAgICAgLy8gd2FpdGluZyB0byBiZSBlbWl0dGVkLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzW2tFcnJvcl0pIHtcbiAgICAgICAgICAgIHJlamVjdChfdGhpc1trRXJyb3JdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIG11bHRpcGxlIG5leHQoKSBjYWxsc1xuICAgIC8vIHdlIHdpbGwgd2FpdCBmb3IgdGhlIHByZXZpb3VzIFByb21pc2UgdG8gZmluaXNoXG4gICAgLy8gdGhpcyBsb2dpYyBpcyBvcHRpbWl6ZWQgdG8gc3VwcG9ydCBmb3IgYXdhaXQgbG9vcHMsXG4gICAgLy8gd2hlcmUgbmV4dCgpIGlzIG9ubHkgY2FsbGVkIG9uY2UgYXQgYSB0aW1lXG4gICAgdmFyIGxhc3RQcm9taXNlID0gdGhpc1trTGFzdFByb21pc2VdO1xuICAgIHZhciBwcm9taXNlO1xuICAgIGlmIChsYXN0UHJvbWlzZSkge1xuICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHdyYXBGb3JOZXh0KGxhc3RQcm9taXNlLCB0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhc3QgcGF0aCBuZWVkZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSB0aGlzLnB1c2goKVxuICAgICAgLy8gd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBuZXh0KCkgcXVldWVcbiAgICAgIHZhciBkYXRhID0gdGhpc1trU3RyZWFtXS5yZWFkKCk7XG4gICAgICBpZiAoZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQoZGF0YSwgZmFsc2UpKTtcbiAgICAgIH1cbiAgICAgIHByb21pc2UgPSBuZXcgUHJvbWlzZSh0aGlzW2tIYW5kbGVQcm9taXNlXSk7XG4gICAgfVxuICAgIHRoaXNba0xhc3RQcm9taXNlXSA9IHByb21pc2U7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cbn0sIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JHNldFByb3RvdHlwZU8sIFN5bWJvbC5hc3luY0l0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JHNldFByb3RvdHlwZU8sIFwicmV0dXJuXCIsIGZ1bmN0aW9uIF9yZXR1cm4oKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuICAvLyBkZXN0cm95KGVyciwgY2IpIGlzIGEgcHJpdmF0ZSBBUElcbiAgLy8gd2UgY2FuIGd1YXJhbnRlZSB3ZSBoYXZlIHRoYXQgaGVyZSwgYmVjYXVzZSB3ZSBjb250cm9sIHRoZVxuICAvLyBSZWFkYWJsZSBjbGFzcyB0aGlzIGlzIGF0dGFjaGVkIHRvXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgX3RoaXMyW2tTdHJlYW1dLmRlc3Ryb3kobnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgIH0pO1xuICB9KTtcbn0pLCBfT2JqZWN0JHNldFByb3RvdHlwZU8pLCBBc3luY0l0ZXJhdG9yUHJvdG90eXBlKTtcbnZhciBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IgPSBmdW5jdGlvbiBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3Ioc3RyZWFtKSB7XG4gIHZhciBfT2JqZWN0JGNyZWF0ZTtcbiAgdmFyIGl0ZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGUsIChfT2JqZWN0JGNyZWF0ZSA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtTdHJlYW0sIHtcbiAgICB2YWx1ZTogc3RyZWFtLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtMYXN0UmVzb2x2ZSwge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtMYXN0UmVqZWN0LCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0Vycm9yLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0VuZGVkLCB7XG4gICAgdmFsdWU6IHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtIYW5kbGVQcm9taXNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGRhdGEgPSBpdGVyYXRvcltrU3RyZWFtXS5yZWFkKCk7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IHJlc29sdmU7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IHJlamVjdDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfT2JqZWN0JGNyZWF0ZSkpO1xuICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgZmluaXNoZWQoc3RyZWFtLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVyciAmJiBlcnIuY29kZSAhPT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJykge1xuICAgICAgdmFyIHJlamVjdCA9IGl0ZXJhdG9yW2tMYXN0UmVqZWN0XTtcbiAgICAgIC8vIHJlamVjdCBpZiB3ZSBhcmUgd2FpdGluZyBmb3IgZGF0YSBpbiB0aGUgUHJvbWlzZVxuICAgICAgLy8gcmV0dXJuZWQgYnkgbmV4dCgpIGFuZCBzdG9yZSB0aGUgZXJyb3JcbiAgICAgIGlmIChyZWplY3QgIT09IG51bGwpIHtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlamVjdF0gPSBudWxsO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIGl0ZXJhdG9yW2tFcnJvcl0gPSBlcnI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByZXNvbHZlID0gaXRlcmF0b3Jba0xhc3RSZXNvbHZlXTtcbiAgICBpZiAocmVzb2x2ZSAhPT0gbnVsbCkge1xuICAgICAgaXRlcmF0b3Jba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yW2tFbmRlZF0gPSB0cnVlO1xuICB9KTtcbiAgc3RyZWFtLm9uKCdyZWFkYWJsZScsIG9uUmVhZGFibGUuYmluZChudWxsLCBpdGVyYXRvcikpO1xuICByZXR1cm4gaXRlcmF0b3I7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3I7IiwiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBfdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHsgdmFyIGtleSA9IF90b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpOyByZXR1cm4gdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHsgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OyB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmIChwcmltICE9PSB1bmRlZmluZWQpIHsgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7IGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJ2J1ZmZlcicpLFxuICBCdWZmZXIgPSBfcmVxdWlyZS5CdWZmZXI7XG52YXIgX3JlcXVpcmUyID0gcmVxdWlyZSgndXRpbCcpLFxuICBpbnNwZWN0ID0gX3JlcXVpcmUyLmluc3BlY3Q7XG52YXIgY3VzdG9tID0gaW5zcGVjdCAmJiBpbnNwZWN0LmN1c3RvbSB8fCAnaW5zcGVjdCc7XG5mdW5jdGlvbiBjb3B5QnVmZmVyKHNyYywgdGFyZ2V0LCBvZmZzZXQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5jb3B5LmNhbGwoc3JjLCB0YXJnZXQsIG9mZnNldCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJ1ZmZlckxpc3QoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1ZmZlckxpc3QpO1xuICAgIHRoaXMuaGVhZCA9IG51bGw7XG4gICAgdGhpcy50YWlsID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEJ1ZmZlckxpc3QsIFt7XG4gICAga2V5OiBcInB1c2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHVzaCh2KSB7XG4gICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgIGRhdGE6IHYsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O2Vsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICAgICsrdGhpcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVuc2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5zaGlmdCh2KSB7XG4gICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgIGRhdGE6IHYsXG4gICAgICAgIG5leHQ6IHRoaXMuaGVhZFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnk7XG4gICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICAgICsrdGhpcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoaWZ0KCkge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICB2YXIgcmV0ID0gdGhpcy5oZWFkLmRhdGE7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcbiAgICAgIC0tdGhpcy5sZW5ndGg7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImpvaW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gam9pbihzKSB7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICAgICAgd2hpbGUgKHAgPSBwLm5leHQpIHJldCArPSBzICsgcC5kYXRhO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29uY2F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbmNhdChuKSB7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApO1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB3aGlsZSAocCkge1xuICAgICAgICBjb3B5QnVmZmVyKHAuZGF0YSwgcmV0LCBpKTtcbiAgICAgICAgaSArPSBwLmRhdGEubGVuZ3RoO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICB9LCB7XG4gICAga2V5OiBcImNvbnN1bWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uc3VtZShuLCBoYXNTdHJpbmdzKSB7XG4gICAgICB2YXIgcmV0O1xuICAgICAgaWYgKG4gPCB0aGlzLmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8gYHNsaWNlYCBpcyB0aGUgc2FtZSBmb3IgYnVmZmVycyBhbmQgc3RyaW5ncy5cbiAgICAgICAgcmV0ID0gdGhpcy5oZWFkLmRhdGEuc2xpY2UoMCwgbik7XG4gICAgICAgIHRoaXMuaGVhZC5kYXRhID0gdGhpcy5oZWFkLmRhdGEuc2xpY2Uobik7XG4gICAgICB9IGVsc2UgaWYgKG4gPT09IHRoaXMuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAvLyBGaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2guXG4gICAgICAgIHJldCA9IHRoaXMuc2hpZnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlc3VsdCBzcGFucyBtb3JlIHRoYW4gb25lIGJ1ZmZlci5cbiAgICAgICAgcmV0ID0gaGFzU3RyaW5ncyA/IHRoaXMuX2dldFN0cmluZyhuKSA6IHRoaXMuX2dldEJ1ZmZlcihuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpcnN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpcnN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVhZC5kYXRhO1xuICAgIH1cblxuICAgIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIH0sIHtcbiAgICBrZXk6IFwiX2dldFN0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0U3RyaW5nKG4pIHtcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIGMgPSAxO1xuICAgICAgdmFyIHJldCA9IHAuZGF0YTtcbiAgICAgIG4gLT0gcmV0Lmxlbmd0aDtcbiAgICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICAgIHZhciBzdHIgPSBwLmRhdGE7XG4gICAgICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkgcmV0ICs9IHN0cjtlbHNlIHJldCArPSBzdHIuc2xpY2UoMCwgbik7XG4gICAgICAgIG4gLT0gbmI7XG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICArK2M7XG4gICAgICAgICAgICBpZiAocC5uZXh0KSB0aGlzLmhlYWQgPSBwLm5leHQ7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBwO1xuICAgICAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgKytjO1xuICAgICAgfVxuICAgICAgdGhpcy5sZW5ndGggLT0gYztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIH0sIHtcbiAgICBrZXk6IFwiX2dldEJ1ZmZlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0QnVmZmVyKG4pIHtcbiAgICAgIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gICAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICAgIHZhciBjID0gMTtcbiAgICAgIHAuZGF0YS5jb3B5KHJldCk7XG4gICAgICBuIC09IHAuZGF0YS5sZW5ndGg7XG4gICAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgICB2YXIgYnVmID0gcC5kYXRhO1xuICAgICAgICB2YXIgbmIgPSBuID4gYnVmLmxlbmd0aCA/IGJ1Zi5sZW5ndGggOiBuO1xuICAgICAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgICAgIG4gLT0gbmI7XG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgaWYgKG5iID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgICArK2M7XG4gICAgICAgICAgICBpZiAocC5uZXh0KSB0aGlzLmhlYWQgPSBwLm5leHQ7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBwO1xuICAgICAgICAgICAgcC5kYXRhID0gYnVmLnNsaWNlKG5iKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgKytjO1xuICAgICAgfVxuICAgICAgdGhpcy5sZW5ndGggLT0gYztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsaW5rZWQgbGlzdCBvbmx5IHNob3dzIHRoZSBtaW5pbWFsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi5cbiAgfSwge1xuICAgIGtleTogY3VzdG9tLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gaW5zcGVjdCh0aGlzLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAvLyBPbmx5IGluc3BlY3Qgb25lIGxldmVsLlxuICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgLy8gSXQgc2hvdWxkIG5vdCByZWN1cnNlLlxuICAgICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQnVmZmVyTGlzdDtcbn0oKTsiLCIndXNlIHN0cmljdCc7XG5cbi8vIHVuZG9jdW1lbnRlZCBjYigpIEFQSSwgbmVlZGVkIGZvciBjb3JlLCBub3QgZm9yIHB1YmxpYyBBUElcbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICB2YXIgcmVhZGFibGVEZXN0cm95ZWQgPSB0aGlzLl9yZWFkYWJsZVN0YXRlICYmIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB2YXIgd3JpdGFibGVEZXN0cm95ZWQgPSB0aGlzLl93cml0YWJsZVN0YXRlICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICBpZiAocmVhZGFibGVEZXN0cm95ZWQgfHwgd3JpdGFibGVEZXN0cm95ZWQpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGlmIHRoaXMgaXMgYSBkdXBsZXggc3RyZWFtIG1hcmsgdGhlIHdyaXRhYmxlIHBhcnQgYXMgZGVzdHJveWVkIGFzIHdlbGxcbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cbiAgdGhpcy5fZGVzdHJveShlcnIgfHwgbnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmICghY2IgJiYgZXJyKSB7XG4gICAgICBpZiAoIV90aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQW5kQ2xvc2VOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2UgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JBbmRDbG9zZU5ULCBfdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTlQsIF90aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNiKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5mdW5jdGlvbiBlbWl0RXJyb3JBbmRDbG9zZU5UKHNlbGYsIGVycikge1xuICBlbWl0RXJyb3JOVChzZWxmLCBlcnIpO1xuICBlbWl0Q2xvc2VOVChzZWxmKTtcbn1cbmZ1bmN0aW9uIGVtaXRDbG9zZU5UKHNlbGYpIHtcbiAgaWYgKHNlbGYuX3dyaXRhYmxlU3RhdGUgJiYgIXNlbGYuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlKSByZXR1cm47XG4gIGlmIChzZWxmLl9yZWFkYWJsZVN0YXRlICYmICFzZWxmLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZSkgcmV0dXJuO1xuICBzZWxmLmVtaXQoJ2Nsb3NlJyk7XG59XG5mdW5jdGlvbiB1bmRlc3Ryb3koKSB7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRFcnJvck5UKHNlbGYsIGVycikge1xuICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn1cbmZ1bmN0aW9uIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKSB7XG4gIC8vIFdlIGhhdmUgdGVzdHMgdGhhdCByZWx5IG9uIGVycm9ycyBiZWluZyBlbWl0dGVkXG4gIC8vIGluIHRoZSBzYW1lIHRpY2ssIHNvIGNoYW5naW5nIHRoaXMgaXMgc2VtdmVyIG1ham9yLlxuICAvLyBGb3Igbm93IHdoZW4geW91IG9wdC1pbiB0byBhdXRvRGVzdHJveSB3ZSBhbGxvd1xuICAvLyB0aGUgZXJyb3IgdG8gYmUgZW1pdHRlZCBuZXh0VGljay4gSW4gYSBmdXR1cmVcbiAgLy8gc2VtdmVyIG1ham9yIHVwZGF0ZSB3ZSBzaG91bGQgY2hhbmdlIHRoZSBkZWZhdWx0IHRvIHRoaXMuXG5cbiAgdmFyIHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgaWYgKHJTdGF0ZSAmJiByU3RhdGUuYXV0b0Rlc3Ryb3kgfHwgd1N0YXRlICYmIHdTdGF0ZS5hdXRvRGVzdHJveSkgc3RyZWFtLmRlc3Ryb3koZXJyKTtlbHNlIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVzdHJveTogZGVzdHJveSxcbiAgdW5kZXN0cm95OiB1bmRlc3Ryb3ksXG4gIGVycm9yT3JEZXN0cm95OiBlcnJvck9yRGVzdHJveVxufTsiLCIvLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL2VuZC1vZi1zdHJlYW0gd2l0aFxuLy8gcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3IsIE1hdGhpYXMgQnV1cyAoQG1hZmludG9zaCkuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFID0gcmVxdWlyZSgnLi4vLi4vLi4vZXJyb3JzJykuY29kZXMuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7XG5mdW5jdGlvbiBvbmNlKGNhbGxiYWNrKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSByZXR1cm47XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9O1xufVxuZnVuY3Rpb24gbm9vcCgpIHt9XG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0uc2V0SGVhZGVyICYmIHR5cGVvZiBzdHJlYW0uYWJvcnQgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBlb3Moc3RyZWFtLCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHJldHVybiBlb3Moc3RyZWFtLCBudWxsLCBvcHRzKTtcbiAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgdmFyIHJlYWRhYmxlID0gb3B0cy5yZWFkYWJsZSB8fCBvcHRzLnJlYWRhYmxlICE9PSBmYWxzZSAmJiBzdHJlYW0ucmVhZGFibGU7XG4gIHZhciB3cml0YWJsZSA9IG9wdHMud3JpdGFibGUgfHwgb3B0cy53cml0YWJsZSAhPT0gZmFsc2UgJiYgc3RyZWFtLndyaXRhYmxlO1xuICB2YXIgb25sZWdhY3lmaW5pc2ggPSBmdW5jdGlvbiBvbmxlZ2FjeWZpbmlzaCgpIHtcbiAgICBpZiAoIXN0cmVhbS53cml0YWJsZSkgb25maW5pc2goKTtcbiAgfTtcbiAgdmFyIHdyaXRhYmxlRW5kZWQgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGUgJiYgc3RyZWFtLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkO1xuICB2YXIgb25maW5pc2ggPSBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICB3cml0YWJsZSA9IGZhbHNlO1xuICAgIHdyaXRhYmxlRW5kZWQgPSB0cnVlO1xuICAgIGlmICghcmVhZGFibGUpIGNhbGxiYWNrLmNhbGwoc3RyZWFtKTtcbiAgfTtcbiAgdmFyIHJlYWRhYmxlRW5kZWQgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ7XG4gIHZhciBvbmVuZCA9IGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIHJlYWRhYmxlID0gZmFsc2U7XG4gICAgcmVhZGFibGVFbmRlZCA9IHRydWU7XG4gICAgaWYgKCF3cml0YWJsZSkgY2FsbGJhY2suY2FsbChzdHJlYW0pO1xuICB9O1xuICB2YXIgb25lcnJvciA9IGZ1bmN0aW9uIG9uZXJyb3IoZXJyKSB7XG4gICAgY2FsbGJhY2suY2FsbChzdHJlYW0sIGVycik7XG4gIH07XG4gIHZhciBvbmNsb3NlID0gZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICB2YXIgZXJyO1xuICAgIGlmIChyZWFkYWJsZSAmJiAhcmVhZGFibGVFbmRlZCkge1xuICAgICAgaWYgKCFzdHJlYW0uX3JlYWRhYmxlU3RhdGUgfHwgIXN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRlZCkgZXJyID0gbmV3IEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFKCk7XG4gICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIGVycik7XG4gICAgfVxuICAgIGlmICh3cml0YWJsZSAmJiAhd3JpdGFibGVFbmRlZCkge1xuICAgICAgaWYgKCFzdHJlYW0uX3dyaXRhYmxlU3RhdGUgfHwgIXN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgZXJyID0gbmV3IEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFKCk7XG4gICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIGVycik7XG4gICAgfVxuICB9O1xuICB2YXIgb25yZXF1ZXN0ID0gZnVuY3Rpb24gb25yZXF1ZXN0KCkge1xuICAgIHN0cmVhbS5yZXEub24oJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgfTtcbiAgaWYgKGlzUmVxdWVzdChzdHJlYW0pKSB7XG4gICAgc3RyZWFtLm9uKCdjb21wbGV0ZScsIG9uZmluaXNoKTtcbiAgICBzdHJlYW0ub24oJ2Fib3J0Jywgb25jbG9zZSk7XG4gICAgaWYgKHN0cmVhbS5yZXEpIG9ucmVxdWVzdCgpO2Vsc2Ugc3RyZWFtLm9uKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KTtcbiAgfSBlbHNlIGlmICh3cml0YWJsZSAmJiAhc3RyZWFtLl93cml0YWJsZVN0YXRlKSB7XG4gICAgLy8gbGVnYWN5IHN0cmVhbXNcbiAgICBzdHJlYW0ub24oJ2VuZCcsIG9ubGVnYWN5ZmluaXNoKTtcbiAgICBzdHJlYW0ub24oJ2Nsb3NlJywgb25sZWdhY3lmaW5pc2gpO1xuICB9XG4gIHN0cmVhbS5vbignZW5kJywgb25lbmQpO1xuICBzdHJlYW0ub24oJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgaWYgKG9wdHMuZXJyb3IgIT09IGZhbHNlKSBzdHJlYW0ub24oJ2Vycm9yJywgb25lcnJvcik7XG4gIHN0cmVhbS5vbignY2xvc2UnLCBvbmNsb3NlKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2NvbXBsZXRlJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBvbmNsb3NlKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ3JlcXVlc3QnLCBvbnJlcXVlc3QpO1xuICAgIGlmIChzdHJlYW0ucmVxKSBzdHJlYW0ucmVxLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9ubGVnYWN5ZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBlb3M7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcignUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyJylcbn07XG4iLCIvLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL3B1bXAgd2l0aFxuLy8gcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3IsIE1hdGhpYXMgQnV1cyAoQG1hZmludG9zaCkuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVvcztcbmZ1bmN0aW9uIG9uY2UoY2FsbGJhY2spIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHJldHVybjtcbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGNhbGxiYWNrLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfTUlTU0lOR19BUkdTID0gX3JlcXVpcmUkY29kZXMuRVJSX01JU1NJTkdfQVJHUyxcbiAgRVJSX1NUUkVBTV9ERVNUUk9ZRUQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX0RFU1RST1lFRDtcbmZ1bmN0aW9uIG5vb3AoZXJyKSB7XG4gIC8vIFJldGhyb3cgdGhlIGVycm9yIGlmIGl0IGV4aXN0cyB0byBhdm9pZCBzd2FsbG93aW5nIGl0XG4gIGlmIChlcnIpIHRocm93IGVycjtcbn1cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIHN0cmVhbS5zZXRIZWFkZXIgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gIHZhciBjbG9zZWQgPSBmYWxzZTtcbiAgc3RyZWFtLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICB9KTtcbiAgaWYgKGVvcyA9PT0gdW5kZWZpbmVkKSBlb3MgPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKTtcbiAgZW9zKHN0cmVhbSwge1xuICAgIHJlYWRhYmxlOiByZWFkaW5nLFxuICAgIHdyaXRhYmxlOiB3cml0aW5nXG4gIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNhbGxiYWNrKCk7XG4gIH0pO1xuICB2YXIgZGVzdHJveWVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIGlmIChkZXN0cm95ZWQpIHJldHVybjtcbiAgICBkZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgLy8gcmVxdWVzdC5kZXN0cm95IGp1c3QgZG8gLmVuZCAtIC5hYm9ydCBpcyB3aGF0IHdlIHdhbnRcbiAgICBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHJldHVybiBzdHJlYW0uYWJvcnQoKTtcbiAgICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gc3RyZWFtLmRlc3Ryb3koKTtcbiAgICBjYWxsYmFjayhlcnIgfHwgbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCdwaXBlJykpO1xuICB9O1xufVxuZnVuY3Rpb24gY2FsbChmbikge1xuICBmbigpO1xufVxuZnVuY3Rpb24gcGlwZShmcm9tLCB0bykge1xuICByZXR1cm4gZnJvbS5waXBlKHRvKTtcbn1cbmZ1bmN0aW9uIHBvcENhbGxiYWNrKHN0cmVhbXMpIHtcbiAgaWYgKCFzdHJlYW1zLmxlbmd0aCkgcmV0dXJuIG5vb3A7XG4gIGlmICh0eXBlb2Ygc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gbm9vcDtcbiAgcmV0dXJuIHN0cmVhbXMucG9wKCk7XG59XG5mdW5jdGlvbiBwaXBlbGluZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHN0cmVhbXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgc3RyZWFtc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuICB2YXIgY2FsbGJhY2sgPSBwb3BDYWxsYmFjayhzdHJlYW1zKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RyZWFtc1swXSkpIHN0cmVhbXMgPSBzdHJlYW1zWzBdO1xuICBpZiAoc3RyZWFtcy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoJ3N0cmVhbXMnKTtcbiAgfVxuICB2YXIgZXJyb3I7XG4gIHZhciBkZXN0cm95cyA9IHN0cmVhbXMubWFwKGZ1bmN0aW9uIChzdHJlYW0sIGkpIHtcbiAgICB2YXIgcmVhZGluZyA9IGkgPCBzdHJlYW1zLmxlbmd0aCAtIDE7XG4gICAgdmFyIHdyaXRpbmcgPSBpID4gMDtcbiAgICByZXR1cm4gZGVzdHJveWVyKHN0cmVhbSwgcmVhZGluZywgd3JpdGluZywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gICAgICBpZiAoZXJyKSBkZXN0cm95cy5mb3JFYWNoKGNhbGwpO1xuICAgICAgaWYgKHJlYWRpbmcpIHJldHVybjtcbiAgICAgIGRlc3Ryb3lzLmZvckVhY2goY2FsbCk7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gc3RyZWFtcy5yZWR1Y2UocGlwZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIEVSUl9JTlZBTElEX09QVF9WQUxVRSA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLkVSUl9JTlZBTElEX09QVF9WQUxVRTtcbmZ1bmN0aW9uIGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpIHtcbiAgcmV0dXJuIG9wdGlvbnMuaGlnaFdhdGVyTWFyayAhPSBudWxsID8gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrIDogaXNEdXBsZXggPyBvcHRpb25zW2R1cGxleEtleV0gOiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0SGlnaFdhdGVyTWFyayhzdGF0ZSwgb3B0aW9ucywgZHVwbGV4S2V5LCBpc0R1cGxleCkge1xuICB2YXIgaHdtID0gaGlnaFdhdGVyTWFya0Zyb20ob3B0aW9ucywgaXNEdXBsZXgsIGR1cGxleEtleSk7XG4gIGlmIChod20gIT0gbnVsbCkge1xuICAgIGlmICghKGlzRmluaXRlKGh3bSkgJiYgTWF0aC5mbG9vcihod20pID09PSBod20pIHx8IGh3bSA8IDApIHtcbiAgICAgIHZhciBuYW1lID0gaXNEdXBsZXggPyBkdXBsZXhLZXkgOiAnaGlnaFdhdGVyTWFyayc7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfT1BUX1ZBTFVFKG5hbWUsIGh3bSk7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLmZsb29yKGh3bSk7XG4gIH1cblxuICAvLyBEZWZhdWx0IHZhbHVlXG4gIHJldHVybiBzdGF0ZS5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0SGlnaFdhdGVyTWFyazogZ2V0SGlnaFdhdGVyTWFya1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcmVhZGFibGUuanMnKTtcbmV4cG9ydHMuU3RyZWFtID0gZXhwb3J0cztcbmV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbmV4cG9ydHMuRHVwbGV4ID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9kdXBsZXguanMnKTtcbmV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbmV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG5leHBvcnRzLmZpbmlzaGVkID0gcmVxdWlyZSgnLi9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzJyk7XG5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcycpO1xuIiwiXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIHVybCA9IHJlcXVpcmUoJy4vdXJsJyk7XG52YXIgcGFyc2VyID0gcmVxdWlyZSgnc29ja2V0LmlvLXBhcnNlcicpO1xudmFyIE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXInKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tldC5pby1jbGllbnQnKTtcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBsb29rdXA7XG5cbi8qKlxuICogTWFuYWdlcnMgY2FjaGUuXG4gKi9cblxudmFyIGNhY2hlID0gZXhwb3J0cy5tYW5hZ2VycyA9IHt9O1xuXG4vKipcbiAqIExvb2tzIHVwIGFuIGV4aXN0aW5nIGBNYW5hZ2VyYCBmb3IgbXVsdGlwbGV4aW5nLlxuICogSWYgdGhlIHVzZXIgc3VtbW9uczpcbiAqXG4gKiAgIGBpbygnaHR0cDovL2xvY2FsaG9zdC9hJyk7YFxuICogICBgaW8oJ2h0dHA6Ly9sb2NhbGhvc3QvYicpO2BcbiAqXG4gKiBXZSByZXVzZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UgYmFzZWQgb24gc2FtZSBzY2hlbWUvcG9ydC9ob3N0LFxuICogYW5kIHdlIGluaXRpYWxpemUgc29ja2V0cyBmb3IgZWFjaCBuYW1lc3BhY2UuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBsb29rdXAgKHVyaSwgb3B0cykge1xuICBpZiAodHlwZW9mIHVyaSA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRzID0gdXJpO1xuICAgIHVyaSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gIHZhciBwYXJzZWQgPSB1cmwodXJpKTtcbiAgdmFyIHNvdXJjZSA9IHBhcnNlZC5zb3VyY2U7XG4gIHZhciBpZCA9IHBhcnNlZC5pZDtcbiAgdmFyIHBhdGggPSBwYXJzZWQucGF0aDtcbiAgdmFyIHNhbWVOYW1lc3BhY2UgPSBjYWNoZVtpZF0gJiYgcGF0aCBpbiBjYWNoZVtpZF0ubnNwcztcbiAgdmFyIG5ld0Nvbm5lY3Rpb24gPSBvcHRzLmZvcmNlTmV3IHx8IG9wdHNbJ2ZvcmNlIG5ldyBjb25uZWN0aW9uJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgICBmYWxzZSA9PT0gb3B0cy5tdWx0aXBsZXggfHwgc2FtZU5hbWVzcGFjZTtcblxuICB2YXIgaW87XG5cbiAgaWYgKG5ld0Nvbm5lY3Rpb24pIHtcbiAgICBkZWJ1ZygnaWdub3Jpbmcgc29ja2V0IGNhY2hlIGZvciAlcycsIHNvdXJjZSk7XG4gICAgaW8gPSBNYW5hZ2VyKHNvdXJjZSwgb3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFjYWNoZVtpZF0pIHtcbiAgICAgIGRlYnVnKCduZXcgaW8gaW5zdGFuY2UgZm9yICVzJywgc291cmNlKTtcbiAgICAgIGNhY2hlW2lkXSA9IE1hbmFnZXIoc291cmNlLCBvcHRzKTtcbiAgICB9XG4gICAgaW8gPSBjYWNoZVtpZF07XG4gIH1cbiAgaWYgKHBhcnNlZC5xdWVyeSAmJiAhb3B0cy5xdWVyeSkge1xuICAgIG9wdHMucXVlcnkgPSBwYXJzZWQucXVlcnk7XG4gIH1cbiAgcmV0dXJuIGlvLnNvY2tldChwYXJzZWQucGF0aCwgb3B0cyk7XG59XG5cbi8qKlxuICogUHJvdG9jb2wgdmVyc2lvbi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucHJvdG9jb2wgPSBwYXJzZXIucHJvdG9jb2w7XG5cbi8qKlxuICogYGNvbm5lY3RgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmlcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5jb25uZWN0ID0gbG9va3VwO1xuXG4vKipcbiAqIEV4cG9zZSBjb25zdHJ1Y3RvcnMgZm9yIHN0YW5kYWxvbmUgYnVpbGQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLk1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXInKTtcbmV4cG9ydHMuU29ja2V0ID0gcmVxdWlyZSgnLi9zb2NrZXQnKTtcbiIsIlxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBlaW8gPSByZXF1aXJlKCdlbmdpbmUuaW8tY2xpZW50Jyk7XG52YXIgU29ja2V0ID0gcmVxdWlyZSgnLi9zb2NrZXQnKTtcbnZhciBFbWl0dGVyID0gcmVxdWlyZSgnY29tcG9uZW50LWVtaXR0ZXInKTtcbnZhciBwYXJzZXIgPSByZXF1aXJlKCdzb2NrZXQuaW8tcGFyc2VyJyk7XG52YXIgb24gPSByZXF1aXJlKCcuL29uJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2NvbXBvbmVudC1iaW5kJyk7XG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NrZXQuaW8tY2xpZW50Om1hbmFnZXInKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnaW5kZXhvZicpO1xudmFyIEJhY2tvZmYgPSByZXF1aXJlKCdiYWNrbzInKTtcblxuLyoqXG4gKiBJRTYrIGhhc093blByb3BlcnR5XG4gKi9cblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hbmFnZXI7XG5cbi8qKlxuICogYE1hbmFnZXJgIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBlbmdpbmUgaW5zdGFuY2Ugb3IgZW5naW5lIHVyaS9vcHRzXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBNYW5hZ2VyICh1cmksIG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1hbmFnZXIpKSByZXR1cm4gbmV3IE1hbmFnZXIodXJpLCBvcHRzKTtcbiAgaWYgKHVyaSAmJiAoJ29iamVjdCcgPT09IHR5cGVvZiB1cmkpKSB7XG4gICAgb3B0cyA9IHVyaTtcbiAgICB1cmkgPSB1bmRlZmluZWQ7XG4gIH1cbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgb3B0cy5wYXRoID0gb3B0cy5wYXRoIHx8ICcvc29ja2V0LmlvJztcbiAgdGhpcy5uc3BzID0ge307XG4gIHRoaXMuc3VicyA9IFtdO1xuICB0aGlzLm9wdHMgPSBvcHRzO1xuICB0aGlzLnJlY29ubmVjdGlvbihvcHRzLnJlY29ubmVjdGlvbiAhPT0gZmFsc2UpO1xuICB0aGlzLnJlY29ubmVjdGlvbkF0dGVtcHRzKG9wdHMucmVjb25uZWN0aW9uQXR0ZW1wdHMgfHwgSW5maW5pdHkpO1xuICB0aGlzLnJlY29ubmVjdGlvbkRlbGF5KG9wdHMucmVjb25uZWN0aW9uRGVsYXkgfHwgMTAwMCk7XG4gIHRoaXMucmVjb25uZWN0aW9uRGVsYXlNYXgob3B0cy5yZWNvbm5lY3Rpb25EZWxheU1heCB8fCA1MDAwKTtcbiAgdGhpcy5yYW5kb21pemF0aW9uRmFjdG9yKG9wdHMucmFuZG9taXphdGlvbkZhY3RvciB8fCAwLjUpO1xuICB0aGlzLmJhY2tvZmYgPSBuZXcgQmFja29mZih7XG4gICAgbWluOiB0aGlzLnJlY29ubmVjdGlvbkRlbGF5KCksXG4gICAgbWF4OiB0aGlzLnJlY29ubmVjdGlvbkRlbGF5TWF4KCksXG4gICAgaml0dGVyOiB0aGlzLnJhbmRvbWl6YXRpb25GYWN0b3IoKVxuICB9KTtcbiAgdGhpcy50aW1lb3V0KG51bGwgPT0gb3B0cy50aW1lb3V0ID8gMjAwMDAgOiBvcHRzLnRpbWVvdXQpO1xuICB0aGlzLnJlYWR5U3RhdGUgPSAnY2xvc2VkJztcbiAgdGhpcy51cmkgPSB1cmk7XG4gIHRoaXMuY29ubmVjdGluZyA9IFtdO1xuICB0aGlzLmxhc3RQaW5nID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IGZhbHNlO1xuICB0aGlzLnBhY2tldEJ1ZmZlciA9IFtdO1xuICB2YXIgX3BhcnNlciA9IG9wdHMucGFyc2VyIHx8IHBhcnNlcjtcbiAgdGhpcy5lbmNvZGVyID0gbmV3IF9wYXJzZXIuRW5jb2RlcigpO1xuICB0aGlzLmRlY29kZXIgPSBuZXcgX3BhcnNlci5EZWNvZGVyKCk7XG4gIHRoaXMuYXV0b0Nvbm5lY3QgPSBvcHRzLmF1dG9Db25uZWN0ICE9PSBmYWxzZTtcbiAgaWYgKHRoaXMuYXV0b0Nvbm5lY3QpIHRoaXMub3BlbigpO1xufVxuXG4vKipcbiAqIFByb3BhZ2F0ZSBnaXZlbiBldmVudCB0byBzb2NrZXRzIGFuZCBlbWl0IG9uIGB0aGlzYFxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLmVtaXRBbGwgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICBmb3IgKHZhciBuc3AgaW4gdGhpcy5uc3BzKSB7XG4gICAgaWYgKGhhcy5jYWxsKHRoaXMubnNwcywgbnNwKSkge1xuICAgICAgdGhpcy5uc3BzW25zcF0uZW1pdC5hcHBseSh0aGlzLm5zcHNbbnNwXSwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogVXBkYXRlIGBzb2NrZXQuaWRgIG9mIGFsbCBzb2NrZXRzXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUudXBkYXRlU29ja2V0SWRzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBuc3AgaW4gdGhpcy5uc3BzKSB7XG4gICAgaWYgKGhhcy5jYWxsKHRoaXMubnNwcywgbnNwKSkge1xuICAgICAgdGhpcy5uc3BzW25zcF0uaWQgPSB0aGlzLmdlbmVyYXRlSWQobnNwKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogZ2VuZXJhdGUgYHNvY2tldC5pZGAgZm9yIHRoZSBnaXZlbiBgbnNwYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuc3BcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLmdlbmVyYXRlSWQgPSBmdW5jdGlvbiAobnNwKSB7XG4gIHJldHVybiAobnNwID09PSAnLycgPyAnJyA6IChuc3AgKyAnIycpKSArIHRoaXMuZW5naW5lLmlkO1xufTtcblxuLyoqXG4gKiBNaXggaW4gYEVtaXR0ZXJgLlxuICovXG5cbkVtaXR0ZXIoTWFuYWdlci5wcm90b3R5cGUpO1xuXG4vKipcbiAqIFNldHMgdGhlIGByZWNvbm5lY3Rpb25gIGNvbmZpZy5cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgaXQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgcmVjb25uZWN0XG4gKiBAcmV0dXJuIHtNYW5hZ2VyfSBzZWxmIG9yIHZhbHVlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLnJlY29ubmVjdGlvbiA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMuX3JlY29ubmVjdGlvbjtcbiAgdGhpcy5fcmVjb25uZWN0aW9uID0gISF2O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcmVjb25uZWN0aW9uIGF0dGVtcHRzIGNvbmZpZy5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbWF4IHJlY29ubmVjdGlvbiBhdHRlbXB0cyBiZWZvcmUgZ2l2aW5nIHVwXG4gKiBAcmV0dXJuIHtNYW5hZ2VyfSBzZWxmIG9yIHZhbHVlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLnJlY29ubmVjdGlvbkF0dGVtcHRzID0gZnVuY3Rpb24gKHYpIHtcbiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGhpcy5fcmVjb25uZWN0aW9uQXR0ZW1wdHM7XG4gIHRoaXMuX3JlY29ubmVjdGlvbkF0dGVtcHRzID0gdjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGRlbGF5IGJldHdlZW4gcmVjb25uZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gZGVsYXlcbiAqIEByZXR1cm4ge01hbmFnZXJ9IHNlbGYgb3IgdmFsdWVcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUucmVjb25uZWN0aW9uRGVsYXkgPSBmdW5jdGlvbiAodikge1xuICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzLl9yZWNvbm5lY3Rpb25EZWxheTtcbiAgdGhpcy5fcmVjb25uZWN0aW9uRGVsYXkgPSB2O1xuICB0aGlzLmJhY2tvZmYgJiYgdGhpcy5iYWNrb2ZmLnNldE1pbih2KTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5yYW5kb21pemF0aW9uRmFjdG9yID0gZnVuY3Rpb24gKHYpIHtcbiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGhpcy5fcmFuZG9taXphdGlvbkZhY3RvcjtcbiAgdGhpcy5fcmFuZG9taXphdGlvbkZhY3RvciA9IHY7XG4gIHRoaXMuYmFja29mZiAmJiB0aGlzLmJhY2tvZmYuc2V0Sml0dGVyKHYpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbWF4aW11bSBkZWxheSBiZXR3ZWVuIHJlY29ubmVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGRlbGF5XG4gKiBAcmV0dXJuIHtNYW5hZ2VyfSBzZWxmIG9yIHZhbHVlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLnJlY29ubmVjdGlvbkRlbGF5TWF4ID0gZnVuY3Rpb24gKHYpIHtcbiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGhpcy5fcmVjb25uZWN0aW9uRGVsYXlNYXg7XG4gIHRoaXMuX3JlY29ubmVjdGlvbkRlbGF5TWF4ID0gdjtcbiAgdGhpcy5iYWNrb2ZmICYmIHRoaXMuYmFja29mZi5zZXRNYXgodik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjb25uZWN0aW9uIHRpbWVvdXQuIGBmYWxzZWAgdG8gZGlzYWJsZVxuICpcbiAqIEByZXR1cm4ge01hbmFnZXJ9IHNlbGYgb3IgdmFsdWVcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUudGltZW91dCA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMuX3RpbWVvdXQ7XG4gIHRoaXMuX3RpbWVvdXQgPSB2O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRyeWluZyB0byByZWNvbm5lY3QgaWYgcmVjb25uZWN0aW9uIGlzIGVuYWJsZWQgYW5kIHdlIGhhdmUgbm90XG4gKiBzdGFydGVkIHJlY29ubmVjdGluZyB5ZXRcbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5tYXliZVJlY29ubmVjdE9uT3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gT25seSB0cnkgdG8gcmVjb25uZWN0IGlmIGl0J3MgdGhlIGZpcnN0IHRpbWUgd2UncmUgY29ubmVjdGluZ1xuICBpZiAoIXRoaXMucmVjb25uZWN0aW5nICYmIHRoaXMuX3JlY29ubmVjdGlvbiAmJiB0aGlzLmJhY2tvZmYuYXR0ZW1wdHMgPT09IDApIHtcbiAgICAvLyBrZWVwcyByZWNvbm5lY3Rpb24gZnJvbSBmaXJpbmcgdHdpY2UgZm9yIHRoZSBzYW1lIHJlY29ubmVjdGlvbiBsb29wXG4gICAgdGhpcy5yZWNvbm5lY3QoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHRyYW5zcG9ydCBgc29ja2V0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25hbCwgY2FsbGJhY2tcbiAqIEByZXR1cm4ge01hbmFnZXJ9IHNlbGZcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUub3BlbiA9XG5NYW5hZ2VyLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKGZuLCBvcHRzKSB7XG4gIGRlYnVnKCdyZWFkeVN0YXRlICVzJywgdGhpcy5yZWFkeVN0YXRlKTtcbiAgaWYgKH50aGlzLnJlYWR5U3RhdGUuaW5kZXhPZignb3BlbicpKSByZXR1cm4gdGhpcztcblxuICBkZWJ1Zygnb3BlbmluZyAlcycsIHRoaXMudXJpKTtcbiAgdGhpcy5lbmdpbmUgPSBlaW8odGhpcy51cmksIHRoaXMub3B0cyk7XG4gIHZhciBzb2NrZXQgPSB0aGlzLmVuZ2luZTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLnJlYWR5U3RhdGUgPSAnb3BlbmluZyc7XG4gIHRoaXMuc2tpcFJlY29ubmVjdCA9IGZhbHNlO1xuXG4gIC8vIGVtaXQgYG9wZW5gXG4gIHZhciBvcGVuU3ViID0gb24oc29ja2V0LCAnb3BlbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLm9ub3BlbigpO1xuICAgIGZuICYmIGZuKCk7XG4gIH0pO1xuXG4gIC8vIGVtaXQgYGNvbm5lY3RfZXJyb3JgXG4gIHZhciBlcnJvclN1YiA9IG9uKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkZWJ1ZygnY29ubmVjdF9lcnJvcicpO1xuICAgIHNlbGYuY2xlYW51cCgpO1xuICAgIHNlbGYucmVhZHlTdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHNlbGYuZW1pdEFsbCgnY29ubmVjdF9lcnJvcicsIGRhdGEpO1xuICAgIGlmIChmbikge1xuICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignQ29ubmVjdGlvbiBlcnJvcicpO1xuICAgICAgZXJyLmRhdGEgPSBkYXRhO1xuICAgICAgZm4oZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT25seSBkbyB0aGlzIGlmIHRoZXJlIGlzIG5vIGZuIHRvIGhhbmRsZSB0aGUgZXJyb3JcbiAgICAgIHNlbGYubWF5YmVSZWNvbm5lY3RPbk9wZW4oKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGVtaXQgYGNvbm5lY3RfdGltZW91dGBcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl90aW1lb3V0KSB7XG4gICAgdmFyIHRpbWVvdXQgPSB0aGlzLl90aW1lb3V0O1xuICAgIGRlYnVnKCdjb25uZWN0IGF0dGVtcHQgd2lsbCB0aW1lb3V0IGFmdGVyICVkJywgdGltZW91dCk7XG5cbiAgICBpZiAodGltZW91dCA9PT0gMCkge1xuICAgICAgb3BlblN1Yi5kZXN0cm95KCk7IC8vIHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gd2l0aCB0aGUgJ29wZW4nIGV2ZW50XG4gICAgfVxuXG4gICAgLy8gc2V0IHRpbWVyXG4gICAgdmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBkZWJ1ZygnY29ubmVjdCBhdHRlbXB0IHRpbWVkIG91dCBhZnRlciAlZCcsIHRpbWVvdXQpO1xuICAgICAgb3BlblN1Yi5kZXN0cm95KCk7XG4gICAgICBzb2NrZXQuY2xvc2UoKTtcbiAgICAgIHNvY2tldC5lbWl0KCdlcnJvcicsICd0aW1lb3V0Jyk7XG4gICAgICBzZWxmLmVtaXRBbGwoJ2Nvbm5lY3RfdGltZW91dCcsIHRpbWVvdXQpO1xuICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgdGhpcy5zdWJzLnB1c2goe1xuICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdGhpcy5zdWJzLnB1c2gob3BlblN1Yik7XG4gIHRoaXMuc3Vicy5wdXNoKGVycm9yU3ViKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gdHJhbnNwb3J0IG9wZW4uXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUub25vcGVuID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1Zygnb3BlbicpO1xuXG4gIC8vIGNsZWFyIG9sZCBzdWJzXG4gIHRoaXMuY2xlYW51cCgpO1xuXG4gIC8vIG1hcmsgYXMgb3BlblxuICB0aGlzLnJlYWR5U3RhdGUgPSAnb3Blbic7XG4gIHRoaXMuZW1pdCgnb3BlbicpO1xuXG4gIC8vIGFkZCBuZXcgc3Vic1xuICB2YXIgc29ja2V0ID0gdGhpcy5lbmdpbmU7XG4gIHRoaXMuc3Vicy5wdXNoKG9uKHNvY2tldCwgJ2RhdGEnLCBiaW5kKHRoaXMsICdvbmRhdGEnKSkpO1xuICB0aGlzLnN1YnMucHVzaChvbihzb2NrZXQsICdwaW5nJywgYmluZCh0aGlzLCAnb25waW5nJykpKTtcbiAgdGhpcy5zdWJzLnB1c2gob24oc29ja2V0LCAncG9uZycsIGJpbmQodGhpcywgJ29ucG9uZycpKSk7XG4gIHRoaXMuc3Vicy5wdXNoKG9uKHNvY2tldCwgJ2Vycm9yJywgYmluZCh0aGlzLCAnb25lcnJvcicpKSk7XG4gIHRoaXMuc3Vicy5wdXNoKG9uKHNvY2tldCwgJ2Nsb3NlJywgYmluZCh0aGlzLCAnb25jbG9zZScpKSk7XG4gIHRoaXMuc3Vicy5wdXNoKG9uKHRoaXMuZGVjb2RlciwgJ2RlY29kZWQnLCBiaW5kKHRoaXMsICdvbmRlY29kZWQnKSkpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBhIHBpbmcuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUub25waW5nID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxhc3RQaW5nID0gbmV3IERhdGUoKTtcbiAgdGhpcy5lbWl0QWxsKCdwaW5nJyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIGEgcGFja2V0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLm9ucG9uZyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5lbWl0QWxsKCdwb25nJywgbmV3IERhdGUoKSAtIHRoaXMubGFzdFBpbmcpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2l0aCBkYXRhLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLm9uZGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuZGVjb2Rlci5hZGQoZGF0YSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHBhcnNlciBmdWxseSBkZWNvZGVzIGEgcGFja2V0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLm9uZGVjb2RlZCA9IGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgdGhpcy5lbWl0KCdwYWNrZXQnLCBwYWNrZXQpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBzb2NrZXQgZXJyb3IuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgZGVidWcoJ2Vycm9yJywgZXJyKTtcbiAgdGhpcy5lbWl0QWxsKCdlcnJvcicsIGVycik7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgc29ja2V0IGZvciB0aGUgZ2l2ZW4gYG5zcGAuXG4gKlxuICogQHJldHVybiB7U29ja2V0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5zb2NrZXQgPSBmdW5jdGlvbiAobnNwLCBvcHRzKSB7XG4gIHZhciBzb2NrZXQgPSB0aGlzLm5zcHNbbnNwXTtcbiAgaWYgKCFzb2NrZXQpIHtcbiAgICBzb2NrZXQgPSBuZXcgU29ja2V0KHRoaXMsIG5zcCwgb3B0cyk7XG4gICAgdGhpcy5uc3BzW25zcF0gPSBzb2NrZXQ7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNvY2tldC5vbignY29ubmVjdGluZycsIG9uQ29ubmVjdGluZyk7XG4gICAgc29ja2V0Lm9uKCdjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgc29ja2V0LmlkID0gc2VsZi5nZW5lcmF0ZUlkKG5zcCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5hdXRvQ29ubmVjdCkge1xuICAgICAgLy8gbWFudWFsbHkgY2FsbCBoZXJlIHNpbmNlIGNvbm5lY3RpbmcgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIGxpc3RlbmluZ1xuICAgICAgb25Db25uZWN0aW5nKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Db25uZWN0aW5nICgpIHtcbiAgICBpZiAoIX5pbmRleE9mKHNlbGYuY29ubmVjdGluZywgc29ja2V0KSkge1xuICAgICAgc2VsZi5jb25uZWN0aW5nLnB1c2goc29ja2V0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc29ja2V0O1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBhIHNvY2tldCBjbG9zZS5cbiAqXG4gKiBAcGFyYW0ge1NvY2tldH0gc29ja2V0XG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChzb2NrZXQpIHtcbiAgdmFyIGluZGV4ID0gaW5kZXhPZih0aGlzLmNvbm5lY3RpbmcsIHNvY2tldCk7XG4gIGlmICh+aW5kZXgpIHRoaXMuY29ubmVjdGluZy5zcGxpY2UoaW5kZXgsIDEpO1xuICBpZiAodGhpcy5jb25uZWN0aW5nLmxlbmd0aCkgcmV0dXJuO1xuXG4gIHRoaXMuY2xvc2UoKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgcGFja2V0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWNrZXRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLnBhY2tldCA9IGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgZGVidWcoJ3dyaXRpbmcgcGFja2V0ICVqJywgcGFja2V0KTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAocGFja2V0LnF1ZXJ5ICYmIHBhY2tldC50eXBlID09PSAwKSBwYWNrZXQubnNwICs9ICc/JyArIHBhY2tldC5xdWVyeTtcblxuICBpZiAoIXNlbGYuZW5jb2RpbmcpIHtcbiAgICAvLyBlbmNvZGUsIHRoZW4gd3JpdGUgdG8gZW5naW5lIHdpdGggcmVzdWx0XG4gICAgc2VsZi5lbmNvZGluZyA9IHRydWU7XG4gICAgdGhpcy5lbmNvZGVyLmVuY29kZShwYWNrZXQsIGZ1bmN0aW9uIChlbmNvZGVkUGFja2V0cykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmNvZGVkUGFja2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzZWxmLmVuZ2luZS53cml0ZShlbmNvZGVkUGFja2V0c1tpXSwgcGFja2V0Lm9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgc2VsZi5lbmNvZGluZyA9IGZhbHNlO1xuICAgICAgc2VsZi5wcm9jZXNzUGFja2V0UXVldWUoKTtcbiAgICB9KTtcbiAgfSBlbHNlIHsgLy8gYWRkIHBhY2tldCB0byB0aGUgcXVldWVcbiAgICBzZWxmLnBhY2tldEJ1ZmZlci5wdXNoKHBhY2tldCk7XG4gIH1cbn07XG5cbi8qKlxuICogSWYgcGFja2V0IGJ1ZmZlciBpcyBub24tZW1wdHksIGJlZ2lucyBlbmNvZGluZyB0aGVcbiAqIG5leHQgcGFja2V0IGluIGxpbmUuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1BhY2tldFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5wYWNrZXRCdWZmZXIubGVuZ3RoID4gMCAmJiAhdGhpcy5lbmNvZGluZykge1xuICAgIHZhciBwYWNrID0gdGhpcy5wYWNrZXRCdWZmZXIuc2hpZnQoKTtcbiAgICB0aGlzLnBhY2tldChwYWNrKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDbGVhbiB1cCB0cmFuc3BvcnQgc3Vic2NyaXB0aW9ucyBhbmQgcGFja2V0IGJ1ZmZlci5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5jbGVhbnVwID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2xlYW51cCcpO1xuXG4gIHZhciBzdWJzTGVuZ3RoID0gdGhpcy5zdWJzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzTGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc3ViID0gdGhpcy5zdWJzLnNoaWZ0KCk7XG4gICAgc3ViLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHRoaXMucGFja2V0QnVmZmVyID0gW107XG4gIHRoaXMuZW5jb2RpbmcgPSBmYWxzZTtcbiAgdGhpcy5sYXN0UGluZyA9IG51bGw7XG5cbiAgdGhpcy5kZWNvZGVyLmRlc3Ryb3koKTtcbn07XG5cbi8qKlxuICogQ2xvc2UgdGhlIGN1cnJlbnQgc29ja2V0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLmNsb3NlID1cbk1hbmFnZXIucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdkaXNjb25uZWN0Jyk7XG4gIHRoaXMuc2tpcFJlY29ubmVjdCA9IHRydWU7XG4gIHRoaXMucmVjb25uZWN0aW5nID0gZmFsc2U7XG4gIGlmICgnb3BlbmluZycgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgIC8vIGBvbmNsb3NlYCB3aWxsIG5vdCBmaXJlIGJlY2F1c2VcbiAgICAvLyBhbiBvcGVuIGV2ZW50IG5ldmVyIGhhcHBlbmVkXG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gIH1cbiAgdGhpcy5iYWNrb2ZmLnJlc2V0KCk7XG4gIHRoaXMucmVhZHlTdGF0ZSA9ICdjbG9zZWQnO1xuICBpZiAodGhpcy5lbmdpbmUpIHRoaXMuZW5naW5lLmNsb3NlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIGVuZ2luZSBjbG9zZS5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5vbmNsb3NlID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICBkZWJ1Zygnb25jbG9zZScpO1xuXG4gIHRoaXMuY2xlYW51cCgpO1xuICB0aGlzLmJhY2tvZmYucmVzZXQoKTtcbiAgdGhpcy5yZWFkeVN0YXRlID0gJ2Nsb3NlZCc7XG4gIHRoaXMuZW1pdCgnY2xvc2UnLCByZWFzb24pO1xuXG4gIGlmICh0aGlzLl9yZWNvbm5lY3Rpb24gJiYgIXRoaXMuc2tpcFJlY29ubmVjdCkge1xuICAgIHRoaXMucmVjb25uZWN0KCk7XG4gIH1cbn07XG5cbi8qKlxuICogQXR0ZW1wdCBhIHJlY29ubmVjdGlvbi5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5yZWNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnJlY29ubmVjdGluZyB8fCB0aGlzLnNraXBSZWNvbm5lY3QpIHJldHVybiB0aGlzO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAodGhpcy5iYWNrb2ZmLmF0dGVtcHRzID49IHRoaXMuX3JlY29ubmVjdGlvbkF0dGVtcHRzKSB7XG4gICAgZGVidWcoJ3JlY29ubmVjdCBmYWlsZWQnKTtcbiAgICB0aGlzLmJhY2tvZmYucmVzZXQoKTtcbiAgICB0aGlzLmVtaXRBbGwoJ3JlY29ubmVjdF9mYWlsZWQnKTtcbiAgICB0aGlzLnJlY29ubmVjdGluZyA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHZhciBkZWxheSA9IHRoaXMuYmFja29mZi5kdXJhdGlvbigpO1xuICAgIGRlYnVnKCd3aWxsIHdhaXQgJWRtcyBiZWZvcmUgcmVjb25uZWN0IGF0dGVtcHQnLCBkZWxheSk7XG5cbiAgICB0aGlzLnJlY29ubmVjdGluZyA9IHRydWU7XG4gICAgdmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc2VsZi5za2lwUmVjb25uZWN0KSByZXR1cm47XG5cbiAgICAgIGRlYnVnKCdhdHRlbXB0aW5nIHJlY29ubmVjdCcpO1xuICAgICAgc2VsZi5lbWl0QWxsKCdyZWNvbm5lY3RfYXR0ZW1wdCcsIHNlbGYuYmFja29mZi5hdHRlbXB0cyk7XG4gICAgICBzZWxmLmVtaXRBbGwoJ3JlY29ubmVjdGluZycsIHNlbGYuYmFja29mZi5hdHRlbXB0cyk7XG5cbiAgICAgIC8vIGNoZWNrIGFnYWluIGZvciB0aGUgY2FzZSBzb2NrZXQgY2xvc2VkIGluIGFib3ZlIGV2ZW50c1xuICAgICAgaWYgKHNlbGYuc2tpcFJlY29ubmVjdCkgcmV0dXJuO1xuXG4gICAgICBzZWxmLm9wZW4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgZGVidWcoJ3JlY29ubmVjdCBhdHRlbXB0IGVycm9yJyk7XG4gICAgICAgICAgc2VsZi5yZWNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgICBzZWxmLnJlY29ubmVjdCgpO1xuICAgICAgICAgIHNlbGYuZW1pdEFsbCgncmVjb25uZWN0X2Vycm9yJywgZXJyLmRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlYnVnKCdyZWNvbm5lY3Qgc3VjY2VzcycpO1xuICAgICAgICAgIHNlbGYub25yZWNvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgZGVsYXkpO1xuXG4gICAgdGhpcy5zdWJzLnB1c2goe1xuICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIHN1Y2Nlc3NmdWwgcmVjb25uZWN0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLm9ucmVjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXR0ZW1wdCA9IHRoaXMuYmFja29mZi5hdHRlbXB0cztcbiAgdGhpcy5yZWNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgdGhpcy5iYWNrb2ZmLnJlc2V0KCk7XG4gIHRoaXMudXBkYXRlU29ja2V0SWRzKCk7XG4gIHRoaXMuZW1pdEFsbCgncmVjb25uZWN0JywgYXR0ZW1wdCk7XG59O1xuIiwiXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gb247XG5cbi8qKlxuICogSGVscGVyIGZvciBzdWJzY3JpcHRpb25zLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEV2ZW50RW1pdHRlcn0gb2JqIHdpdGggYEVtaXR0ZXJgIG1peGluIG9yIGBFdmVudEVtaXR0ZXJgXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gb24gKG9iaiwgZXYsIGZuKSB7XG4gIG9iai5vbihldiwgZm4pO1xuICByZXR1cm4ge1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgIG9iai5yZW1vdmVMaXN0ZW5lcihldiwgZm4pO1xuICAgIH1cbiAgfTtcbn1cbiIsIlxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBwYXJzZXIgPSByZXF1aXJlKCdzb2NrZXQuaW8tcGFyc2VyJyk7XG52YXIgRW1pdHRlciA9IHJlcXVpcmUoJ2NvbXBvbmVudC1lbWl0dGVyJyk7XG52YXIgdG9BcnJheSA9IHJlcXVpcmUoJ3RvLWFycmF5Jyk7XG52YXIgb24gPSByZXF1aXJlKCcuL29uJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2NvbXBvbmVudC1iaW5kJyk7XG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NrZXQuaW8tY2xpZW50OnNvY2tldCcpO1xudmFyIHBhcnNlcXMgPSByZXF1aXJlKCdwYXJzZXFzJyk7XG52YXIgaGFzQmluID0gcmVxdWlyZSgnaGFzLWJpbmFyeTInKTtcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBTb2NrZXQ7XG5cbi8qKlxuICogSW50ZXJuYWwgZXZlbnRzIChibGFja2xpc3RlZCkuXG4gKiBUaGVzZSBldmVudHMgY2FuJ3QgYmUgZW1pdHRlZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG52YXIgZXZlbnRzID0ge1xuICBjb25uZWN0OiAxLFxuICBjb25uZWN0X2Vycm9yOiAxLFxuICBjb25uZWN0X3RpbWVvdXQ6IDEsXG4gIGNvbm5lY3Rpbmc6IDEsXG4gIGRpc2Nvbm5lY3Q6IDEsXG4gIGVycm9yOiAxLFxuICByZWNvbm5lY3Q6IDEsXG4gIHJlY29ubmVjdF9hdHRlbXB0OiAxLFxuICByZWNvbm5lY3RfZmFpbGVkOiAxLFxuICByZWNvbm5lY3RfZXJyb3I6IDEsXG4gIHJlY29ubmVjdGluZzogMSxcbiAgcGluZzogMSxcbiAgcG9uZzogMVxufTtcblxuLyoqXG4gKiBTaG9ydGN1dCB0byBgRW1pdHRlciNlbWl0YC5cbiAqL1xuXG52YXIgZW1pdCA9IEVtaXR0ZXIucHJvdG90eXBlLmVtaXQ7XG5cbi8qKlxuICogYFNvY2tldGAgY29uc3RydWN0b3IuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBTb2NrZXQgKGlvLCBuc3AsIG9wdHMpIHtcbiAgdGhpcy5pbyA9IGlvO1xuICB0aGlzLm5zcCA9IG5zcDtcbiAgdGhpcy5qc29uID0gdGhpczsgLy8gY29tcGF0XG4gIHRoaXMuaWRzID0gMDtcbiAgdGhpcy5hY2tzID0ge307XG4gIHRoaXMucmVjZWl2ZUJ1ZmZlciA9IFtdO1xuICB0aGlzLnNlbmRCdWZmZXIgPSBbXTtcbiAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgdGhpcy5kaXNjb25uZWN0ZWQgPSB0cnVlO1xuICB0aGlzLmZsYWdzID0ge307XG4gIGlmIChvcHRzICYmIG9wdHMucXVlcnkpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gb3B0cy5xdWVyeTtcbiAgfVxuICBpZiAodGhpcy5pby5hdXRvQ29ubmVjdCkgdGhpcy5vcGVuKCk7XG59XG5cbi8qKlxuICogTWl4IGluIGBFbWl0dGVyYC5cbiAqL1xuXG5FbWl0dGVyKFNvY2tldC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIFN1YnNjcmliZSB0byBvcGVuLCBjbG9zZSBhbmQgcGFja2V0IGV2ZW50c1xuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUuc3ViRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5zdWJzKSByZXR1cm47XG5cbiAgdmFyIGlvID0gdGhpcy5pbztcbiAgdGhpcy5zdWJzID0gW1xuICAgIG9uKGlvLCAnb3BlbicsIGJpbmQodGhpcywgJ29ub3BlbicpKSxcbiAgICBvbihpbywgJ3BhY2tldCcsIGJpbmQodGhpcywgJ29ucGFja2V0JykpLFxuICAgIG9uKGlvLCAnY2xvc2UnLCBiaW5kKHRoaXMsICdvbmNsb3NlJykpXG4gIF07XG59O1xuXG4vKipcbiAqIFwiT3BlbnNcIiB0aGUgc29ja2V0LlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vcGVuID1cblNvY2tldC5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuY29ubmVjdGVkKSByZXR1cm4gdGhpcztcblxuICB0aGlzLnN1YkV2ZW50cygpO1xuICBpZiAoIXRoaXMuaW8ucmVjb25uZWN0aW5nKSB0aGlzLmlvLm9wZW4oKTsgLy8gZW5zdXJlIG9wZW5cbiAgaWYgKCdvcGVuJyA9PT0gdGhpcy5pby5yZWFkeVN0YXRlKSB0aGlzLm9ub3BlbigpO1xuICB0aGlzLmVtaXQoJ2Nvbm5lY3RpbmcnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNlbmRzIGEgYG1lc3NhZ2VgIGV2ZW50LlxuICpcbiAqIEByZXR1cm4ge1NvY2tldH0gc2VsZlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMpO1xuICBhcmdzLnVuc2hpZnQoJ21lc3NhZ2UnKTtcbiAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogT3ZlcnJpZGUgYGVtaXRgLlxuICogSWYgdGhlIGV2ZW50IGlzIGluIGBldmVudHNgLCBpdCdzIGVtaXR0ZWQgbm9ybWFsbHkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IG5hbWVcbiAqIEByZXR1cm4ge1NvY2tldH0gc2VsZlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldikpIHtcbiAgICBlbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzKTtcbiAgdmFyIHBhY2tldCA9IHtcbiAgICB0eXBlOiAodGhpcy5mbGFncy5iaW5hcnkgIT09IHVuZGVmaW5lZCA/IHRoaXMuZmxhZ3MuYmluYXJ5IDogaGFzQmluKGFyZ3MpKSA/IHBhcnNlci5CSU5BUllfRVZFTlQgOiBwYXJzZXIuRVZFTlQsXG4gICAgZGF0YTogYXJnc1xuICB9O1xuXG4gIHBhY2tldC5vcHRpb25zID0ge307XG4gIHBhY2tldC5vcHRpb25zLmNvbXByZXNzID0gIXRoaXMuZmxhZ3MgfHwgZmFsc2UgIT09IHRoaXMuZmxhZ3MuY29tcHJlc3M7XG5cbiAgLy8gZXZlbnQgYWNrIGNhbGxiYWNrXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSB7XG4gICAgZGVidWcoJ2VtaXR0aW5nIHBhY2tldCB3aXRoIGFjayBpZCAlZCcsIHRoaXMuaWRzKTtcbiAgICB0aGlzLmFja3NbdGhpcy5pZHNdID0gYXJncy5wb3AoKTtcbiAgICBwYWNrZXQuaWQgPSB0aGlzLmlkcysrO1xuICB9XG5cbiAgaWYgKHRoaXMuY29ubmVjdGVkKSB7XG4gICAgdGhpcy5wYWNrZXQocGFja2V0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnNlbmRCdWZmZXIucHVzaChwYWNrZXQpO1xuICB9XG5cbiAgdGhpcy5mbGFncyA9IHt9O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZW5kcyBhIHBhY2tldC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFja2V0XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLnBhY2tldCA9IGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgcGFja2V0Lm5zcCA9IHRoaXMubnNwO1xuICB0aGlzLmlvLnBhY2tldChwYWNrZXQpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBlbmdpbmUgYG9wZW5gLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUub25vcGVuID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygndHJhbnNwb3J0IGlzIG9wZW4gLSBjb25uZWN0aW5nJyk7XG5cbiAgLy8gd3JpdGUgY29ubmVjdCBwYWNrZXQgaWYgbmVjZXNzYXJ5XG4gIGlmICgnLycgIT09IHRoaXMubnNwKSB7XG4gICAgaWYgKHRoaXMucXVlcnkpIHtcbiAgICAgIHZhciBxdWVyeSA9IHR5cGVvZiB0aGlzLnF1ZXJ5ID09PSAnb2JqZWN0JyA/IHBhcnNlcXMuZW5jb2RlKHRoaXMucXVlcnkpIDogdGhpcy5xdWVyeTtcbiAgICAgIGRlYnVnKCdzZW5kaW5nIGNvbm5lY3QgcGFja2V0IHdpdGggcXVlcnkgJXMnLCBxdWVyeSk7XG4gICAgICB0aGlzLnBhY2tldCh7dHlwZTogcGFyc2VyLkNPTk5FQ1QsIHF1ZXJ5OiBxdWVyeX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhY2tldCh7dHlwZTogcGFyc2VyLkNPTk5FQ1R9KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gZW5naW5lIGBjbG9zZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJlYXNvblxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vbmNsb3NlID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICBkZWJ1ZygnY2xvc2UgKCVzKScsIHJlYXNvbik7XG4gIHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG4gIHRoaXMuZGlzY29ubmVjdGVkID0gdHJ1ZTtcbiAgZGVsZXRlIHRoaXMuaWQ7XG4gIHRoaXMuZW1pdCgnZGlzY29ubmVjdCcsIHJlYXNvbik7XG59O1xuXG4vKipcbiAqIENhbGxlZCB3aXRoIHNvY2tldCBwYWNrZXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhY2tldFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vbnBhY2tldCA9IGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgdmFyIHNhbWVOYW1lc3BhY2UgPSBwYWNrZXQubnNwID09PSB0aGlzLm5zcDtcbiAgdmFyIHJvb3ROYW1lc3BhY2VFcnJvciA9IHBhY2tldC50eXBlID09PSBwYXJzZXIuRVJST1IgJiYgcGFja2V0Lm5zcCA9PT0gJy8nO1xuXG4gIGlmICghc2FtZU5hbWVzcGFjZSAmJiAhcm9vdE5hbWVzcGFjZUVycm9yKSByZXR1cm47XG5cbiAgc3dpdGNoIChwYWNrZXQudHlwZSkge1xuICAgIGNhc2UgcGFyc2VyLkNPTk5FQ1Q6XG4gICAgICB0aGlzLm9uY29ubmVjdCgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHBhcnNlci5FVkVOVDpcbiAgICAgIHRoaXMub25ldmVudChwYWNrZXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHBhcnNlci5CSU5BUllfRVZFTlQ6XG4gICAgICB0aGlzLm9uZXZlbnQocGFja2V0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBwYXJzZXIuQUNLOlxuICAgICAgdGhpcy5vbmFjayhwYWNrZXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHBhcnNlci5CSU5BUllfQUNLOlxuICAgICAgdGhpcy5vbmFjayhwYWNrZXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHBhcnNlci5ESVNDT05ORUNUOlxuICAgICAgdGhpcy5vbmRpc2Nvbm5lY3QoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBwYXJzZXIuRVJST1I6XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcGFja2V0LmRhdGEpO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gYSBzZXJ2ZXIgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhY2tldFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vbmV2ZW50ID0gZnVuY3Rpb24gKHBhY2tldCkge1xuICB2YXIgYXJncyA9IHBhY2tldC5kYXRhIHx8IFtdO1xuICBkZWJ1ZygnZW1pdHRpbmcgZXZlbnQgJWonLCBhcmdzKTtcblxuICBpZiAobnVsbCAhPSBwYWNrZXQuaWQpIHtcbiAgICBkZWJ1ZygnYXR0YWNoaW5nIGFjayBjYWxsYmFjayB0byBldmVudCcpO1xuICAgIGFyZ3MucHVzaCh0aGlzLmFjayhwYWNrZXQuaWQpKTtcbiAgfVxuXG4gIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgIGVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZWNlaXZlQnVmZmVyLnB1c2goYXJncyk7XG4gIH1cbn07XG5cbi8qKlxuICogUHJvZHVjZXMgYW4gYWNrIGNhbGxiYWNrIHRvIGVtaXQgd2l0aCBhbiBldmVudC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLmFjayA9IGZ1bmN0aW9uIChpZCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBzZW50ID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gcHJldmVudCBkb3VibGUgY2FsbGJhY2tzXG4gICAgaWYgKHNlbnQpIHJldHVybjtcbiAgICBzZW50ID0gdHJ1ZTtcbiAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzKTtcbiAgICBkZWJ1Zygnc2VuZGluZyBhY2sgJWonLCBhcmdzKTtcblxuICAgIHNlbGYucGFja2V0KHtcbiAgICAgIHR5cGU6IGhhc0JpbihhcmdzKSA/IHBhcnNlci5CSU5BUllfQUNLIDogcGFyc2VyLkFDSyxcbiAgICAgIGlkOiBpZCxcbiAgICAgIGRhdGE6IGFyZ3NcbiAgICB9KTtcbiAgfTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gYSBzZXJ2ZXIgYWNrbm93bGVnZW1lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhY2tldFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vbmFjayA9IGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgdmFyIGFjayA9IHRoaXMuYWNrc1twYWNrZXQuaWRdO1xuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGFjaykge1xuICAgIGRlYnVnKCdjYWxsaW5nIGFjayAlcyB3aXRoICVqJywgcGFja2V0LmlkLCBwYWNrZXQuZGF0YSk7XG4gICAgYWNrLmFwcGx5KHRoaXMsIHBhY2tldC5kYXRhKTtcbiAgICBkZWxldGUgdGhpcy5hY2tzW3BhY2tldC5pZF07XG4gIH0gZWxzZSB7XG4gICAgZGVidWcoJ2JhZCBhY2sgJXMnLCBwYWNrZXQuaWQpO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIHNlcnZlciBjb25uZWN0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUub25jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNvbm5lY3RlZCA9IHRydWU7XG4gIHRoaXMuZGlzY29ubmVjdGVkID0gZmFsc2U7XG4gIHRoaXMuZW1pdEJ1ZmZlcmVkKCk7XG4gIHRoaXMuZW1pdCgnY29ubmVjdCcpO1xufTtcblxuLyoqXG4gKiBFbWl0IGJ1ZmZlcmVkIGV2ZW50cyAocmVjZWl2ZWQgYW5kIGVtaXR0ZWQpLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUuZW1pdEJ1ZmZlcmVkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IHRoaXMucmVjZWl2ZUJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgIGVtaXQuYXBwbHkodGhpcywgdGhpcy5yZWNlaXZlQnVmZmVyW2ldKTtcbiAgfVxuICB0aGlzLnJlY2VpdmVCdWZmZXIgPSBbXTtcblxuICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zZW5kQnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpcy5wYWNrZXQodGhpcy5zZW5kQnVmZmVyW2ldKTtcbiAgfVxuICB0aGlzLnNlbmRCdWZmZXIgPSBbXTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gc2VydmVyIGRpc2Nvbm5lY3QuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vbmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdzZXJ2ZXIgZGlzY29ubmVjdCAoJXMpJywgdGhpcy5uc3ApO1xuICB0aGlzLmRlc3Ryb3koKTtcbiAgdGhpcy5vbmNsb3NlKCdpbyBzZXJ2ZXIgZGlzY29ubmVjdCcpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBmb3JjZWQgY2xpZW50L3NlcnZlciBzaWRlIGRpc2Nvbm5lY3Rpb25zLFxuICogdGhpcyBtZXRob2QgZW5zdXJlcyB0aGUgbWFuYWdlciBzdG9wcyB0cmFja2luZyB1cyBhbmRcbiAqIHRoYXQgcmVjb25uZWN0aW9ucyBkb24ndCBnZXQgdHJpZ2dlcmVkIGZvciB0aGlzLlxuICpcbiAqIEBhcGkgcHJpdmF0ZS5cbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnN1YnMpIHtcbiAgICAvLyBjbGVhbiBzdWJzY3JpcHRpb25zIHRvIGF2b2lkIHJlY29ubmVjdGlvbnNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3Vicy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5zdWJzW2ldLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5zdWJzID0gbnVsbDtcbiAgfVxuXG4gIHRoaXMuaW8uZGVzdHJveSh0aGlzKTtcbn07XG5cbi8qKlxuICogRGlzY29ubmVjdHMgdGhlIHNvY2tldCBtYW51YWxseS5cbiAqXG4gKiBAcmV0dXJuIHtTb2NrZXR9IHNlbGZcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5jbG9zZSA9XG5Tb2NrZXQucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgIGRlYnVnKCdwZXJmb3JtaW5nIGRpc2Nvbm5lY3QgKCVzKScsIHRoaXMubnNwKTtcbiAgICB0aGlzLnBhY2tldCh7IHR5cGU6IHBhcnNlci5ESVNDT05ORUNUIH0pO1xuICB9XG5cbiAgLy8gcmVtb3ZlIHNvY2tldCBmcm9tIHBvb2xcbiAgdGhpcy5kZXN0cm95KCk7XG5cbiAgaWYgKHRoaXMuY29ubmVjdGVkKSB7XG4gICAgLy8gZmlyZSBldmVudHNcbiAgICB0aGlzLm9uY2xvc2UoJ2lvIGNsaWVudCBkaXNjb25uZWN0Jyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGNvbXByZXNzIGZsYWcuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBpZiBgdHJ1ZWAsIGNvbXByZXNzZXMgdGhlIHNlbmRpbmcgZGF0YVxuICogQHJldHVybiB7U29ja2V0fSBzZWxmXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblNvY2tldC5wcm90b3R5cGUuY29tcHJlc3MgPSBmdW5jdGlvbiAoY29tcHJlc3MpIHtcbiAgdGhpcy5mbGFncy5jb21wcmVzcyA9IGNvbXByZXNzO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgYmluYXJ5IGZsYWdcbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHdoZXRoZXIgdGhlIGVtaXR0ZWQgZGF0YSBjb250YWlucyBiaW5hcnlcbiAqIEByZXR1cm4ge1NvY2tldH0gc2VsZlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLmJpbmFyeSA9IGZ1bmN0aW9uIChiaW5hcnkpIHtcbiAgdGhpcy5mbGFncy5iaW5hcnkgPSBiaW5hcnk7XG4gIHJldHVybiB0aGlzO1xufTtcbiIsIlxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBwYXJzZXVyaSA9IHJlcXVpcmUoJ3BhcnNldXJpJyk7XG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NrZXQuaW8tY2xpZW50OnVybCcpO1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gdXJsO1xuXG4vKipcbiAqIFVSTCBwYXJzZXIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtPYmplY3R9IEFuIG9iamVjdCBtZWFudCB0byBtaW1pYyB3aW5kb3cubG9jYXRpb24uXG4gKiAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gd2luZG93LmxvY2F0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiB1cmwgKHVyaSwgbG9jKSB7XG4gIHZhciBvYmogPSB1cmk7XG5cbiAgLy8gZGVmYXVsdCB0byB3aW5kb3cubG9jYXRpb25cbiAgbG9jID0gbG9jIHx8ICh0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnICYmIGxvY2F0aW9uKTtcbiAgaWYgKG51bGwgPT0gdXJpKSB1cmkgPSBsb2MucHJvdG9jb2wgKyAnLy8nICsgbG9jLmhvc3Q7XG5cbiAgLy8gcmVsYXRpdmUgcGF0aCBzdXBwb3J0XG4gIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHVyaSkge1xuICAgIGlmICgnLycgPT09IHVyaS5jaGFyQXQoMCkpIHtcbiAgICAgIGlmICgnLycgPT09IHVyaS5jaGFyQXQoMSkpIHtcbiAgICAgICAgdXJpID0gbG9jLnByb3RvY29sICsgdXJpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJpID0gbG9jLmhvc3QgKyB1cmk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEvXihodHRwcz98d3NzPyk6XFwvXFwvLy50ZXN0KHVyaSkpIHtcbiAgICAgIGRlYnVnKCdwcm90b2NvbC1sZXNzIHVybCAlcycsIHVyaSk7XG4gICAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBsb2MpIHtcbiAgICAgICAgdXJpID0gbG9jLnByb3RvY29sICsgJy8vJyArIHVyaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVyaSA9ICdodHRwczovLycgKyB1cmk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcGFyc2VcbiAgICBkZWJ1ZygncGFyc2UgJXMnLCB1cmkpO1xuICAgIG9iaiA9IHBhcnNldXJpKHVyaSk7XG4gIH1cblxuICAvLyBtYWtlIHN1cmUgd2UgdHJlYXQgYGxvY2FsaG9zdDo4MGAgYW5kIGBsb2NhbGhvc3RgIGVxdWFsbHlcbiAgaWYgKCFvYmoucG9ydCkge1xuICAgIGlmICgvXihodHRwfHdzKSQvLnRlc3Qob2JqLnByb3RvY29sKSkge1xuICAgICAgb2JqLnBvcnQgPSAnODAnO1xuICAgIH0gZWxzZSBpZiAoL14oaHR0cHx3cylzJC8udGVzdChvYmoucHJvdG9jb2wpKSB7XG4gICAgICBvYmoucG9ydCA9ICc0NDMnO1xuICAgIH1cbiAgfVxuXG4gIG9iai5wYXRoID0gb2JqLnBhdGggfHwgJy8nO1xuXG4gIHZhciBpcHY2ID0gb2JqLmhvc3QuaW5kZXhPZignOicpICE9PSAtMTtcbiAgdmFyIGhvc3QgPSBpcHY2ID8gJ1snICsgb2JqLmhvc3QgKyAnXScgOiBvYmouaG9zdDtcblxuICAvLyBkZWZpbmUgdW5pcXVlIGlkXG4gIG9iai5pZCA9IG9iai5wcm90b2NvbCArICc6Ly8nICsgaG9zdCArICc6JyArIG9iai5wb3J0O1xuICAvLyBkZWZpbmUgaHJlZlxuICBvYmouaHJlZiA9IG9iai5wcm90b2NvbCArICc6Ly8nICsgaG9zdCArIChsb2MgJiYgbG9jLnBvcnQgPT09IG9iai5wb3J0ID8gJycgOiAoJzonICsgb2JqLnBvcnQpKTtcblxuICByZXR1cm4gb2JqO1xufVxuIiwiLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGVidWcnKTtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSAndW5kZWZpbmVkJyAhPSB0eXBlb2YgY2hyb21lXG4gICAgICAgICAgICAgICAmJiAndW5kZWZpbmVkJyAhPSB0eXBlb2YgY2hyb21lLnN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgID8gY2hyb21lLnN0b3JhZ2UubG9jYWxcbiAgICAgICAgICAgICAgICAgIDogbG9jYWxzdG9yYWdlKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuICAnIzAwMDBDQycsICcjMDAwMEZGJywgJyMwMDMzQ0MnLCAnIzAwMzNGRicsICcjMDA2NkNDJywgJyMwMDY2RkYnLCAnIzAwOTlDQycsXG4gICcjMDA5OUZGJywgJyMwMENDMDAnLCAnIzAwQ0MzMycsICcjMDBDQzY2JywgJyMwMENDOTknLCAnIzAwQ0NDQycsICcjMDBDQ0ZGJyxcbiAgJyMzMzAwQ0MnLCAnIzMzMDBGRicsICcjMzMzM0NDJywgJyMzMzMzRkYnLCAnIzMzNjZDQycsICcjMzM2NkZGJywgJyMzMzk5Q0MnLFxuICAnIzMzOTlGRicsICcjMzNDQzAwJywgJyMzM0NDMzMnLCAnIzMzQ0M2NicsICcjMzNDQzk5JywgJyMzM0NDQ0MnLCAnIzMzQ0NGRicsXG4gICcjNjYwMENDJywgJyM2NjAwRkYnLCAnIzY2MzNDQycsICcjNjYzM0ZGJywgJyM2NkNDMDAnLCAnIzY2Q0MzMycsICcjOTkwMENDJyxcbiAgJyM5OTAwRkYnLCAnIzk5MzNDQycsICcjOTkzM0ZGJywgJyM5OUNDMDAnLCAnIzk5Q0MzMycsICcjQ0MwMDAwJywgJyNDQzAwMzMnLFxuICAnI0NDMDA2NicsICcjQ0MwMDk5JywgJyNDQzAwQ0MnLCAnI0NDMDBGRicsICcjQ0MzMzAwJywgJyNDQzMzMzMnLCAnI0NDMzM2NicsXG4gICcjQ0MzMzk5JywgJyNDQzMzQ0MnLCAnI0NDMzNGRicsICcjQ0M2NjAwJywgJyNDQzY2MzMnLCAnI0NDOTkwMCcsICcjQ0M5OTMzJyxcbiAgJyNDQ0NDMDAnLCAnI0NDQ0MzMycsICcjRkYwMDAwJywgJyNGRjAwMzMnLCAnI0ZGMDA2NicsICcjRkYwMDk5JywgJyNGRjAwQ0MnLFxuICAnI0ZGMDBGRicsICcjRkYzMzAwJywgJyNGRjMzMzMnLCAnI0ZGMzM2NicsICcjRkYzMzk5JywgJyNGRjMzQ0MnLCAnI0ZGMzNGRicsXG4gICcjRkY2NjAwJywgJyNGRjY2MzMnLCAnI0ZGOTkwMCcsICcjRkY5OTMzJywgJyNGRkNDMDAnLCAnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuICAvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG4gIC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG4gIC8vIGV4cGxpY2l0bHlcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gaXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcbiAgLy8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcbiAgcmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG4gICAgLy8gaXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuICAgICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG4gICAgLy8gaXMgZmlyZWZveCA+PSB2MzE/XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG4gICAgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpIHx8XG4gICAgLy8gZG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24odikge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVyci5tZXNzYWdlO1xuICB9XG59O1xuXG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG4gIHZhciB1c2VDb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblxuICBhcmdzWzBdID0gKHVzZUNvbG9ycyA/ICclYycgOiAnJylcbiAgICArIHRoaXMubmFtZXNwYWNlXG4gICAgKyAodXNlQ29sb3JzID8gJyAlYycgOiAnICcpXG4gICAgKyBhcmdzWzBdXG4gICAgKyAodXNlQ29sb3JzID8gJyVjICcgOiAnICcpXG4gICAgKyAnKycgKyBleHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cbiAgaWYgKCF1c2VDb2xvcnMpIHJldHVybjtcblxuICB2YXIgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG4gIGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpXG5cbiAgLy8gdGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcbiAgLy8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxhc3RDID0gMDtcbiAgYXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgaWYgKCclJScgPT09IG1hdGNoKSByZXR1cm47XG4gICAgaW5kZXgrKztcbiAgICBpZiAoJyVjJyA9PT0gbWF0Y2gpIHtcbiAgICAgIC8vIHdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuICAgICAgLy8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcbiAgICAgIGxhc3RDID0gaW5kZXg7XG4gICAgfVxuICB9KTtcblxuICBhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5sb2coKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmxvZ2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gbG9nKCkge1xuICAvLyB0aGlzIGhhY2tlcnkgaXMgcmVxdWlyZWQgZm9yIElFOC85LCB3aGVyZVxuICAvLyB0aGUgYGNvbnNvbGUubG9nYCBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgJ2FwcGx5J1xuICByZXR1cm4gJ29iamVjdCcgPT09IHR5cGVvZiBjb25zb2xlXG4gICAgJiYgY29uc29sZS5sb2dcbiAgICAmJiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlLmxvZywgY29uc29sZSwgYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG4gIHRyeSB7XG4gICAgaWYgKG51bGwgPT0gbmFtZXNwYWNlcykge1xuICAgICAgZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5kZWJ1ZyA9IG5hbWVzcGFjZXM7XG4gICAgfVxuICB9IGNhdGNoKGUpIHt9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9hZCgpIHtcbiAgdmFyIHI7XG4gIHRyeSB7XG4gICAgciA9IGV4cG9ydHMuc3RvcmFnZS5kZWJ1ZztcbiAgfSBjYXRjaChlKSB7fVxuXG4gIC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcbiAgaWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG4gICAgciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuICB9XG5cbiAgcmV0dXJuIHI7XG59XG5cbi8qKlxuICogRW5hYmxlIG5hbWVzcGFjZXMgbGlzdGVkIGluIGBsb2NhbFN0b3JhZ2UuZGVidWdgIGluaXRpYWxseS5cbiAqL1xuXG5leHBvcnRzLmVuYWJsZShsb2FkKCkpO1xuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZTtcbiAgfSBjYXRjaCAoZSkge31cbn1cbiIsIi8qZ2xvYmFsIEJsb2IsRmlsZSovXG5cbi8qKlxuICogTW9kdWxlIHJlcXVpcmVtZW50c1xuICovXG5cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xudmFyIGlzQnVmID0gcmVxdWlyZSgnLi9pcy1idWZmZXInKTtcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgd2l0aE5hdGl2ZUJsb2IgPSB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHRvU3RyaW5nLmNhbGwoQmxvYikgPT09ICdbb2JqZWN0IEJsb2JDb25zdHJ1Y3Rvcl0nKTtcbnZhciB3aXRoTmF0aXZlRmlsZSA9IHR5cGVvZiBGaWxlID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgRmlsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdG9TdHJpbmcuY2FsbChGaWxlKSA9PT0gJ1tvYmplY3QgRmlsZUNvbnN0cnVjdG9yXScpO1xuXG4vKipcbiAqIFJlcGxhY2VzIGV2ZXJ5IEJ1ZmZlciB8IEFycmF5QnVmZmVyIGluIHBhY2tldCB3aXRoIGEgbnVtYmVyZWQgcGxhY2Vob2xkZXIuXG4gKiBBbnl0aGluZyB3aXRoIGJsb2JzIG9yIGZpbGVzIHNob3VsZCBiZSBmZWQgdGhyb3VnaCByZW1vdmVCbG9icyBiZWZvcmUgY29taW5nXG4gKiBoZXJlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWNrZXQgLSBzb2NrZXQuaW8gZXZlbnQgcGFja2V0XG4gKiBAcmV0dXJuIHtPYmplY3R9IHdpdGggZGVjb25zdHJ1Y3RlZCBwYWNrZXQgYW5kIGxpc3Qgb2YgYnVmZmVyc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmRlY29uc3RydWN0UGFja2V0ID0gZnVuY3Rpb24ocGFja2V0KSB7XG4gIHZhciBidWZmZXJzID0gW107XG4gIHZhciBwYWNrZXREYXRhID0gcGFja2V0LmRhdGE7XG4gIHZhciBwYWNrID0gcGFja2V0O1xuICBwYWNrLmRhdGEgPSBfZGVjb25zdHJ1Y3RQYWNrZXQocGFja2V0RGF0YSwgYnVmZmVycyk7XG4gIHBhY2suYXR0YWNobWVudHMgPSBidWZmZXJzLmxlbmd0aDsgLy8gbnVtYmVyIG9mIGJpbmFyeSAnYXR0YWNobWVudHMnXG4gIHJldHVybiB7cGFja2V0OiBwYWNrLCBidWZmZXJzOiBidWZmZXJzfTtcbn07XG5cbmZ1bmN0aW9uIF9kZWNvbnN0cnVjdFBhY2tldChkYXRhLCBidWZmZXJzKSB7XG4gIGlmICghZGF0YSkgcmV0dXJuIGRhdGE7XG5cbiAgaWYgKGlzQnVmKGRhdGEpKSB7XG4gICAgdmFyIHBsYWNlaG9sZGVyID0geyBfcGxhY2Vob2xkZXI6IHRydWUsIG51bTogYnVmZmVycy5sZW5ndGggfTtcbiAgICBidWZmZXJzLnB1c2goZGF0YSk7XG4gICAgcmV0dXJuIHBsYWNlaG9sZGVyO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICB2YXIgbmV3RGF0YSA9IG5ldyBBcnJheShkYXRhLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdEYXRhW2ldID0gX2RlY29uc3RydWN0UGFja2V0KGRhdGFbaV0sIGJ1ZmZlcnMpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3RGF0YTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgIShkYXRhIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICB2YXIgbmV3RGF0YSA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICBuZXdEYXRhW2tleV0gPSBfZGVjb25zdHJ1Y3RQYWNrZXQoZGF0YVtrZXldLCBidWZmZXJzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0RhdGE7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogUmVjb25zdHJ1Y3RzIGEgYmluYXJ5IHBhY2tldCBmcm9tIGl0cyBwbGFjZWhvbGRlciBwYWNrZXQgYW5kIGJ1ZmZlcnNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFja2V0IC0gZXZlbnQgcGFja2V0IHdpdGggcGxhY2Vob2xkZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBidWZmZXJzIC0gYmluYXJ5IGJ1ZmZlcnMgdG8gcHV0IGluIHBsYWNlaG9sZGVyIHBvc2l0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSByZWNvbnN0cnVjdGVkIHBhY2tldFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJlY29uc3RydWN0UGFja2V0ID0gZnVuY3Rpb24ocGFja2V0LCBidWZmZXJzKSB7XG4gIHBhY2tldC5kYXRhID0gX3JlY29uc3RydWN0UGFja2V0KHBhY2tldC5kYXRhLCBidWZmZXJzKTtcbiAgcGFja2V0LmF0dGFjaG1lbnRzID0gdW5kZWZpbmVkOyAvLyBubyBsb25nZXIgdXNlZnVsXG4gIHJldHVybiBwYWNrZXQ7XG59O1xuXG5mdW5jdGlvbiBfcmVjb25zdHJ1Y3RQYWNrZXQoZGF0YSwgYnVmZmVycykge1xuICBpZiAoIWRhdGEpIHJldHVybiBkYXRhO1xuXG4gIGlmIChkYXRhICYmIGRhdGEuX3BsYWNlaG9sZGVyID09PSB0cnVlKSB7XG4gICAgdmFyIGlzSW5kZXhWYWxpZCA9XG4gICAgICB0eXBlb2YgZGF0YS5udW0gPT09IFwibnVtYmVyXCIgJiZcbiAgICAgIGRhdGEubnVtID49IDAgJiZcbiAgICAgIGRhdGEubnVtIDwgYnVmZmVycy5sZW5ndGg7XG4gICAgaWYgKGlzSW5kZXhWYWxpZCkge1xuICAgICAgcmV0dXJuIGJ1ZmZlcnNbZGF0YS5udW1dOyAvLyBhcHByb3ByaWF0ZSBidWZmZXIgKHNob3VsZCBiZSBuYXR1cmFsIG9yZGVyIGFueXdheSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBhdHRhY2htZW50c1wiKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNBcnJheShkYXRhKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZGF0YVtpXSA9IF9yZWNvbnN0cnVjdFBhY2tldChkYXRhW2ldLCBidWZmZXJzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgIGRhdGFba2V5XSA9IF9yZWNvbnN0cnVjdFBhY2tldChkYXRhW2tleV0sIGJ1ZmZlcnMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IHJlbW92ZXMgQmxvYnMgb3IgRmlsZXMgZnJvbSBkYXRhIHZpYVxuICogRmlsZVJlYWRlcidzIHJlYWRBc0FycmF5QnVmZmVyIG1ldGhvZC4gVXNlZCBiZWZvcmUgZW5jb2RpbmdcbiAqIGRhdGEgYXMgbXNncGFjay4gQ2FsbHMgY2FsbGJhY2sgd2l0aCB0aGUgYmxvYmxlc3MgZGF0YS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMucmVtb3ZlQmxvYnMgPSBmdW5jdGlvbihkYXRhLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiBfcmVtb3ZlQmxvYnMob2JqLCBjdXJLZXksIGNvbnRhaW5pbmdPYmplY3QpIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIG9iajtcblxuICAgIC8vIGNvbnZlcnQgYW55IGJsb2JcbiAgICBpZiAoKHdpdGhOYXRpdmVCbG9iICYmIG9iaiBpbnN0YW5jZW9mIEJsb2IpIHx8XG4gICAgICAgICh3aXRoTmF0aXZlRmlsZSAmJiBvYmogaW5zdGFuY2VvZiBGaWxlKSkge1xuICAgICAgcGVuZGluZ0Jsb2JzKys7XG5cbiAgICAgIC8vIGFzeW5jIGZpbGVyZWFkZXJcbiAgICAgIHZhciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7IC8vIHRoaXMucmVzdWx0ID09IGFycmF5YnVmZmVyXG4gICAgICAgIGlmIChjb250YWluaW5nT2JqZWN0KSB7XG4gICAgICAgICAgY29udGFpbmluZ09iamVjdFtjdXJLZXldID0gdGhpcy5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgYmxvYmxlc3NEYXRhID0gdGhpcy5yZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBub3RoaW5nIHBlbmRpbmcgaXRzIGNhbGxiYWNrIHRpbWVcbiAgICAgICAgaWYoISAtLXBlbmRpbmdCbG9icykge1xuICAgICAgICAgIGNhbGxiYWNrKGJsb2JsZXNzRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZpbGVSZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIob2JqKTsgLy8gYmxvYiAtPiBhcnJheWJ1ZmZlclxuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmopKSB7IC8vIGhhbmRsZSBhcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgX3JlbW92ZUJsb2JzKG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFpc0J1ZihvYmopKSB7IC8vIGFuZCBvYmplY3RcbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgX3JlbW92ZUJsb2JzKG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHBlbmRpbmdCbG9icyA9IDA7XG4gIHZhciBibG9ibGVzc0RhdGEgPSBkYXRhO1xuICBfcmVtb3ZlQmxvYnMoYmxvYmxlc3NEYXRhKTtcbiAgaWYgKCFwZW5kaW5nQmxvYnMpIHtcbiAgICBjYWxsYmFjayhibG9ibGVzc0RhdGEpO1xuICB9XG59O1xuIiwiXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2V0LmlvLXBhcnNlcicpO1xudmFyIEVtaXR0ZXIgPSByZXF1aXJlKCdjb21wb25lbnQtZW1pdHRlcicpO1xudmFyIGJpbmFyeSA9IHJlcXVpcmUoJy4vYmluYXJ5Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKTtcbnZhciBpc0J1ZiA9IHJlcXVpcmUoJy4vaXMtYnVmZmVyJyk7XG5cbi8qKlxuICogUHJvdG9jb2wgdmVyc2lvbi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucHJvdG9jb2wgPSA0O1xuXG4vKipcbiAqIFBhY2tldCB0eXBlcy5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMudHlwZXMgPSBbXG4gICdDT05ORUNUJyxcbiAgJ0RJU0NPTk5FQ1QnLFxuICAnRVZFTlQnLFxuICAnQUNLJyxcbiAgJ0VSUk9SJyxcbiAgJ0JJTkFSWV9FVkVOVCcsXG4gICdCSU5BUllfQUNLJ1xuXTtcblxuLyoqXG4gKiBQYWNrZXQgdHlwZSBgY29ubmVjdGAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLkNPTk5FQ1QgPSAwO1xuXG4vKipcbiAqIFBhY2tldCB0eXBlIGBkaXNjb25uZWN0YC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuRElTQ09OTkVDVCA9IDE7XG5cbi8qKlxuICogUGFja2V0IHR5cGUgYGV2ZW50YC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuRVZFTlQgPSAyO1xuXG4vKipcbiAqIFBhY2tldCB0eXBlIGBhY2tgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5BQ0sgPSAzO1xuXG4vKipcbiAqIFBhY2tldCB0eXBlIGBlcnJvcmAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLkVSUk9SID0gNDtcblxuLyoqXG4gKiBQYWNrZXQgdHlwZSAnYmluYXJ5IGV2ZW50J1xuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5CSU5BUllfRVZFTlQgPSA1O1xuXG4vKipcbiAqIFBhY2tldCB0eXBlIGBiaW5hcnkgYWNrYC4gRm9yIGFja3Mgd2l0aCBiaW5hcnkgYXJndW1lbnRzLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5CSU5BUllfQUNLID0gNjtcblxuLyoqXG4gKiBFbmNvZGVyIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5FbmNvZGVyID0gRW5jb2RlcjtcblxuLyoqXG4gKiBEZWNvZGVyIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5EZWNvZGVyID0gRGVjb2RlcjtcblxuLyoqXG4gKiBBIHNvY2tldC5pbyBFbmNvZGVyIGluc3RhbmNlXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBFbmNvZGVyKCkge31cblxudmFyIEVSUk9SX1BBQ0tFVCA9IGV4cG9ydHMuRVJST1IgKyAnXCJlbmNvZGUgZXJyb3JcIic7XG5cbi8qKlxuICogRW5jb2RlIGEgcGFja2V0IGFzIGEgc2luZ2xlIHN0cmluZyBpZiBub24tYmluYXJ5LCBvciBhcyBhXG4gKiBidWZmZXIgc2VxdWVuY2UsIGRlcGVuZGluZyBvbiBwYWNrZXQgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gcGFja2V0IG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBmdW5jdGlvbiB0byBoYW5kbGUgZW5jb2RpbmdzIChsaWtlbHkgZW5naW5lLndyaXRlKVxuICogQHJldHVybiBDYWxscyBjYWxsYmFjayB3aXRoIEFycmF5IG9mIGVuY29kaW5nc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbihvYmosIGNhbGxiYWNrKXtcbiAgZGVidWcoJ2VuY29kaW5nIHBhY2tldCAlaicsIG9iaik7XG5cbiAgaWYgKGV4cG9ydHMuQklOQVJZX0VWRU5UID09PSBvYmoudHlwZSB8fCBleHBvcnRzLkJJTkFSWV9BQ0sgPT09IG9iai50eXBlKSB7XG4gICAgZW5jb2RlQXNCaW5hcnkob2JqLCBjYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVuY29kaW5nID0gZW5jb2RlQXNTdHJpbmcob2JqKTtcbiAgICBjYWxsYmFjayhbZW5jb2RpbmddKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbmNvZGUgcGFja2V0IGFzIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFja2V0XG4gKiBAcmV0dXJuIHtTdHJpbmd9IGVuY29kZWRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGVuY29kZUFzU3RyaW5nKG9iaikge1xuXG4gIC8vIGZpcnN0IGlzIHR5cGVcbiAgdmFyIHN0ciA9ICcnICsgb2JqLnR5cGU7XG5cbiAgLy8gYXR0YWNobWVudHMgaWYgd2UgaGF2ZSB0aGVtXG4gIGlmIChleHBvcnRzLkJJTkFSWV9FVkVOVCA9PT0gb2JqLnR5cGUgfHwgZXhwb3J0cy5CSU5BUllfQUNLID09PSBvYmoudHlwZSkge1xuICAgIHN0ciArPSBvYmouYXR0YWNobWVudHMgKyAnLSc7XG4gIH1cblxuICAvLyBpZiB3ZSBoYXZlIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4gYC9gXG4gIC8vIHdlIGFwcGVuZCBpdCBmb2xsb3dlZCBieSBhIGNvbW1hIGAsYFxuICBpZiAob2JqLm5zcCAmJiAnLycgIT09IG9iai5uc3ApIHtcbiAgICBzdHIgKz0gb2JqLm5zcCArICcsJztcbiAgfVxuXG4gIC8vIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSBpZFxuICBpZiAobnVsbCAhPSBvYmouaWQpIHtcbiAgICBzdHIgKz0gb2JqLmlkO1xuICB9XG5cbiAgLy8ganNvbiBkYXRhXG4gIGlmIChudWxsICE9IG9iai5kYXRhKSB7XG4gICAgdmFyIHBheWxvYWQgPSB0cnlTdHJpbmdpZnkob2JqLmRhdGEpO1xuICAgIGlmIChwYXlsb2FkICE9PSBmYWxzZSkge1xuICAgICAgc3RyICs9IHBheWxvYWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBFUlJPUl9QQUNLRVQ7XG4gICAgfVxuICB9XG5cbiAgZGVidWcoJ2VuY29kZWQgJWogYXMgJXMnLCBvYmosIHN0cik7XG4gIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIHRyeVN0cmluZ2lmeShzdHIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3RyKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBFbmNvZGUgcGFja2V0IGFzICdidWZmZXIgc2VxdWVuY2UnIGJ5IHJlbW92aW5nIGJsb2JzLCBhbmRcbiAqIGRlY29uc3RydWN0aW5nIHBhY2tldCBpbnRvIG9iamVjdCB3aXRoIHBsYWNlaG9sZGVycyBhbmRcbiAqIGEgbGlzdCBvZiBidWZmZXJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWNrZXRcbiAqIEByZXR1cm4ge0J1ZmZlcn0gZW5jb2RlZFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZW5jb2RlQXNCaW5hcnkob2JqLCBjYWxsYmFjaykge1xuXG4gIGZ1bmN0aW9uIHdyaXRlRW5jb2RpbmcoYmxvYmxlc3NEYXRhKSB7XG4gICAgdmFyIGRlY29uc3RydWN0aW9uID0gYmluYXJ5LmRlY29uc3RydWN0UGFja2V0KGJsb2JsZXNzRGF0YSk7XG4gICAgdmFyIHBhY2sgPSBlbmNvZGVBc1N0cmluZyhkZWNvbnN0cnVjdGlvbi5wYWNrZXQpO1xuICAgIHZhciBidWZmZXJzID0gZGVjb25zdHJ1Y3Rpb24uYnVmZmVycztcblxuICAgIGJ1ZmZlcnMudW5zaGlmdChwYWNrKTsgLy8gYWRkIHBhY2tldCBpbmZvIHRvIGJlZ2lubmluZyBvZiBkYXRhIGxpc3RcbiAgICBjYWxsYmFjayhidWZmZXJzKTsgLy8gd3JpdGUgYWxsIHRoZSBidWZmZXJzXG4gIH1cblxuICBiaW5hcnkucmVtb3ZlQmxvYnMob2JqLCB3cml0ZUVuY29kaW5nKTtcbn1cblxuLyoqXG4gKiBBIHNvY2tldC5pbyBEZWNvZGVyIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBkZWNvZGVyXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIERlY29kZXIoKSB7XG4gIHRoaXMucmVjb25zdHJ1Y3RvciA9IG51bGw7XG59XG5cbi8qKlxuICogTWl4IGluIGBFbWl0dGVyYCB3aXRoIERlY29kZXIuXG4gKi9cblxuRW1pdHRlcihEZWNvZGVyLnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGVjb2RlcyBhbiBlbmNvZGVkIHBhY2tldCBzdHJpbmcgaW50byBwYWNrZXQgSlNPTi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gb2JqIC0gZW5jb2RlZCBwYWNrZXRcbiAqIEByZXR1cm4ge09iamVjdH0gcGFja2V0XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkRlY29kZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG9iaikge1xuICB2YXIgcGFja2V0O1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodGhpcy5yZWNvbnN0cnVjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJnb3QgcGxhaW50ZXh0IGRhdGEgd2hlbiByZWNvbnN0cnVjdGluZyBhIHBhY2tldFwiKTtcbiAgICB9XG4gICAgcGFja2V0ID0gZGVjb2RlU3RyaW5nKG9iaik7XG4gICAgaWYgKGV4cG9ydHMuQklOQVJZX0VWRU5UID09PSBwYWNrZXQudHlwZSB8fCBleHBvcnRzLkJJTkFSWV9BQ0sgPT09IHBhY2tldC50eXBlKSB7IC8vIGJpbmFyeSBwYWNrZXQncyBqc29uXG4gICAgICB0aGlzLnJlY29uc3RydWN0b3IgPSBuZXcgQmluYXJ5UmVjb25zdHJ1Y3RvcihwYWNrZXQpO1xuXG4gICAgICAvLyBubyBhdHRhY2htZW50cywgbGFiZWxlZCBiaW5hcnkgYnV0IG5vIGJpbmFyeSBkYXRhIHRvIGZvbGxvd1xuICAgICAgaWYgKHRoaXMucmVjb25zdHJ1Y3Rvci5yZWNvblBhY2suYXR0YWNobWVudHMgPT09IDApIHtcbiAgICAgICAgdGhpcy5lbWl0KCdkZWNvZGVkJywgcGFja2V0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyBub24tYmluYXJ5IGZ1bGwgcGFja2V0XG4gICAgICB0aGlzLmVtaXQoJ2RlY29kZWQnLCBwYWNrZXQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0J1ZihvYmopIHx8IG9iai5iYXNlNjQpIHsgLy8gcmF3IGJpbmFyeSBkYXRhXG4gICAgaWYgKCF0aGlzLnJlY29uc3RydWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZ290IGJpbmFyeSBkYXRhIHdoZW4gbm90IHJlY29uc3RydWN0aW5nIGEgcGFja2V0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhY2tldCA9IHRoaXMucmVjb25zdHJ1Y3Rvci50YWtlQmluYXJ5RGF0YShvYmopO1xuICAgICAgaWYgKHBhY2tldCkgeyAvLyByZWNlaXZlZCBmaW5hbCBidWZmZXJcbiAgICAgICAgdGhpcy5yZWNvbnN0cnVjdG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbWl0KCdkZWNvZGVkJywgcGFja2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHR5cGU6ICcgKyBvYmopO1xuICB9XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHBhY2tldCBTdHJpbmcgKEpTT04gZGF0YSlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtPYmplY3R9IHBhY2tldFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHN0cikge1xuICB2YXIgaSA9IDA7XG4gIC8vIGxvb2sgdXAgdHlwZVxuICB2YXIgcCA9IHtcbiAgICB0eXBlOiBOdW1iZXIoc3RyLmNoYXJBdCgwKSlcbiAgfTtcblxuICBpZiAobnVsbCA9PSBleHBvcnRzLnR5cGVzW3AudHlwZV0pIHtcbiAgICByZXR1cm4gZXJyb3IoJ3Vua25vd24gcGFja2V0IHR5cGUgJyArIHAudHlwZSk7XG4gIH1cblxuICAvLyBsb29rIHVwIGF0dGFjaG1lbnRzIGlmIHR5cGUgYmluYXJ5XG4gIGlmIChleHBvcnRzLkJJTkFSWV9FVkVOVCA9PT0gcC50eXBlIHx8IGV4cG9ydHMuQklOQVJZX0FDSyA9PT0gcC50eXBlKSB7XG4gICAgdmFyIHN0YXJ0ID0gaSArIDE7XG4gICAgd2hpbGUgKHN0ci5jaGFyQXQoKytpKSAhPT0gJy0nICYmIGkgIT0gc3RyLmxlbmd0aCkge31cbiAgICB2YXIgYnVmID0gc3RyLnN1YnN0cmluZyhzdGFydCwgaSk7XG4gICAgaWYgKGJ1ZiAhPSBOdW1iZXIoYnVmKSB8fCBzdHIuY2hhckF0KGkpICE9PSAnLScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBhdHRhY2htZW50cycpO1xuICAgIH1cbiAgICBwLmF0dGFjaG1lbnRzID0gTnVtYmVyKGJ1Zik7XG4gIH1cblxuICAvLyBsb29rIHVwIG5hbWVzcGFjZSAoaWYgYW55KVxuICBpZiAoJy8nID09PSBzdHIuY2hhckF0KGkgKyAxKSkge1xuICAgIHZhciBzdGFydCA9IGkgKyAxO1xuICAgIHdoaWxlICgrK2kpIHtcbiAgICAgIHZhciBjID0gc3RyLmNoYXJBdChpKTtcbiAgICAgIGlmICgnLCcgPT09IGMpIGJyZWFrO1xuICAgICAgaWYgKGkgPT09IHN0ci5sZW5ndGgpIGJyZWFrO1xuICAgIH1cbiAgICBwLm5zcCA9IHN0ci5zdWJzdHJpbmcoc3RhcnQsIGkpO1xuICB9IGVsc2Uge1xuICAgIHAubnNwID0gJy8nO1xuICB9XG5cbiAgLy8gbG9vayB1cCBpZFxuICB2YXIgbmV4dCA9IHN0ci5jaGFyQXQoaSArIDEpO1xuICBpZiAoJycgIT09IG5leHQgJiYgTnVtYmVyKG5leHQpID09IG5leHQpIHtcbiAgICB2YXIgc3RhcnQgPSBpICsgMTtcbiAgICB3aGlsZSAoKytpKSB7XG4gICAgICB2YXIgYyA9IHN0ci5jaGFyQXQoaSk7XG4gICAgICBpZiAobnVsbCA9PSBjIHx8IE51bWJlcihjKSAhPSBjKSB7XG4gICAgICAgIC0taTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gc3RyLmxlbmd0aCkgYnJlYWs7XG4gICAgfVxuICAgIHAuaWQgPSBOdW1iZXIoc3RyLnN1YnN0cmluZyhzdGFydCwgaSArIDEpKTtcbiAgfVxuXG4gIC8vIGxvb2sgdXAganNvbiBkYXRhXG4gIGlmIChzdHIuY2hhckF0KCsraSkpIHtcbiAgICB2YXIgcGF5bG9hZCA9IHRyeVBhcnNlKHN0ci5zdWJzdHIoaSkpO1xuICAgIHZhciBpc1BheWxvYWRWYWxpZCA9IHBheWxvYWQgIT09IGZhbHNlICYmIChwLnR5cGUgPT09IGV4cG9ydHMuRVJST1IgfHwgaXNBcnJheShwYXlsb2FkKSk7XG4gICAgaWYgKGlzUGF5bG9hZFZhbGlkKSB7XG4gICAgICBwLmRhdGEgPSBwYXlsb2FkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXJyb3IoJ2ludmFsaWQgcGF5bG9hZCcpO1xuICAgIH1cbiAgfVxuXG4gIGRlYnVnKCdkZWNvZGVkICVzIGFzICVqJywgc3RyLCBwKTtcbiAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHRyeVBhcnNlKHN0cikge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cik7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRGVhbGxvY2F0ZXMgYSBwYXJzZXIncyByZXNvdXJjZXNcbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkRlY29kZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMucmVjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMucmVjb25zdHJ1Y3Rvci5maW5pc2hlZFJlY29uc3RydWN0aW9uKCk7XG4gIH1cbn07XG5cbi8qKlxuICogQSBtYW5hZ2VyIG9mIGEgYmluYXJ5IGV2ZW50J3MgJ2J1ZmZlciBzZXF1ZW5jZScuIFNob3VsZFxuICogYmUgY29uc3RydWN0ZWQgd2hlbmV2ZXIgYSBwYWNrZXQgb2YgdHlwZSBCSU5BUllfRVZFTlQgaXNcbiAqIGRlY29kZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhY2tldFxuICogQHJldHVybiB7QmluYXJ5UmVjb25zdHJ1Y3Rvcn0gaW5pdGlhbGl6ZWQgcmVjb25zdHJ1Y3RvclxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gQmluYXJ5UmVjb25zdHJ1Y3RvcihwYWNrZXQpIHtcbiAgdGhpcy5yZWNvblBhY2sgPSBwYWNrZXQ7XG4gIHRoaXMuYnVmZmVycyA9IFtdO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBiZSBjYWxsZWQgd2hlbiBiaW5hcnkgZGF0YSByZWNlaXZlZCBmcm9tIGNvbm5lY3Rpb25cbiAqIGFmdGVyIGEgQklOQVJZX0VWRU5UIHBhY2tldC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlciB8IEFycmF5QnVmZmVyfSBiaW5EYXRhIC0gdGhlIHJhdyBiaW5hcnkgZGF0YSByZWNlaXZlZFxuICogQHJldHVybiB7bnVsbCB8IE9iamVjdH0gcmV0dXJucyBudWxsIGlmIG1vcmUgYmluYXJ5IGRhdGEgaXMgZXhwZWN0ZWQgb3JcbiAqICAgYSByZWNvbnN0cnVjdGVkIHBhY2tldCBvYmplY3QgaWYgYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIHJlY2VpdmVkLlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQmluYXJ5UmVjb25zdHJ1Y3Rvci5wcm90b3R5cGUudGFrZUJpbmFyeURhdGEgPSBmdW5jdGlvbihiaW5EYXRhKSB7XG4gIHRoaXMuYnVmZmVycy5wdXNoKGJpbkRhdGEpO1xuICBpZiAodGhpcy5idWZmZXJzLmxlbmd0aCA9PT0gdGhpcy5yZWNvblBhY2suYXR0YWNobWVudHMpIHsgLy8gZG9uZSB3aXRoIGJ1ZmZlciBsaXN0XG4gICAgdmFyIHBhY2tldCA9IGJpbmFyeS5yZWNvbnN0cnVjdFBhY2tldCh0aGlzLnJlY29uUGFjaywgdGhpcy5idWZmZXJzKTtcbiAgICB0aGlzLmZpbmlzaGVkUmVjb25zdHJ1Y3Rpb24oKTtcbiAgICByZXR1cm4gcGFja2V0O1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBDbGVhbnMgdXAgYmluYXJ5IHBhY2tldCByZWNvbnN0cnVjdGlvbiB2YXJpYWJsZXMuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQmluYXJ5UmVjb25zdHJ1Y3Rvci5wcm90b3R5cGUuZmluaXNoZWRSZWNvbnN0cnVjdGlvbiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnJlY29uUGFjayA9IG51bGw7XG4gIHRoaXMuYnVmZmVycyA9IFtdO1xufTtcblxuZnVuY3Rpb24gZXJyb3IobXNnKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogZXhwb3J0cy5FUlJPUixcbiAgICBkYXRhOiAncGFyc2VyIGVycm9yOiAnICsgbXNnXG4gIH07XG59XG4iLCJcbm1vZHVsZS5leHBvcnRzID0gaXNCdWY7XG5cbnZhciB3aXRoTmF0aXZlQnVmZmVyID0gdHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgQnVmZmVyLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nO1xudmFyIHdpdGhOYXRpdmVBcnJheUJ1ZmZlciA9IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJztcblxudmFyIGlzVmlldyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgPyBBcnJheUJ1ZmZlci5pc1ZpZXcob2JqKSA6IChvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgb2JqIGlzIGEgYnVmZmVyIG9yIGFuIGFycmF5YnVmZmVyLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGlzQnVmKG9iaikge1xuICByZXR1cm4gKHdpdGhOYXRpdmVCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKG9iaikpIHx8XG4gICAgICAgICAgKHdpdGhOYXRpdmVBcnJheUJ1ZmZlciAmJiAob2JqIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgaXNWaWV3KG9iaikpKTtcbn1cbiIsIi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICpcbiAqIEV4cG9zZSBgZGVidWcoKWAgYXMgdGhlIG1vZHVsZS5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RlYnVnJyk7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZVxuICAgICAgICAgICAgICAgJiYgJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZS5zdG9yYWdlXG4gICAgICAgICAgICAgICAgICA/IGNocm9tZS5zdG9yYWdlLmxvY2FsXG4gICAgICAgICAgICAgICAgICA6IGxvY2Fsc3RvcmFnZSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcbiAgJyMwMDAwQ0MnLCAnIzAwMDBGRicsICcjMDAzM0NDJywgJyMwMDMzRkYnLCAnIzAwNjZDQycsICcjMDA2NkZGJywgJyMwMDk5Q0MnLFxuICAnIzAwOTlGRicsICcjMDBDQzAwJywgJyMwMENDMzMnLCAnIzAwQ0M2NicsICcjMDBDQzk5JywgJyMwMENDQ0MnLCAnIzAwQ0NGRicsXG4gICcjMzMwMENDJywgJyMzMzAwRkYnLCAnIzMzMzNDQycsICcjMzMzM0ZGJywgJyMzMzY2Q0MnLCAnIzMzNjZGRicsICcjMzM5OUNDJyxcbiAgJyMzMzk5RkYnLCAnIzMzQ0MwMCcsICcjMzNDQzMzJywgJyMzM0NDNjYnLCAnIzMzQ0M5OScsICcjMzNDQ0NDJywgJyMzM0NDRkYnLFxuICAnIzY2MDBDQycsICcjNjYwMEZGJywgJyM2NjMzQ0MnLCAnIzY2MzNGRicsICcjNjZDQzAwJywgJyM2NkNDMzMnLCAnIzk5MDBDQycsXG4gICcjOTkwMEZGJywgJyM5OTMzQ0MnLCAnIzk5MzNGRicsICcjOTlDQzAwJywgJyM5OUNDMzMnLCAnI0NDMDAwMCcsICcjQ0MwMDMzJyxcbiAgJyNDQzAwNjYnLCAnI0NDMDA5OScsICcjQ0MwMENDJywgJyNDQzAwRkYnLCAnI0NDMzMwMCcsICcjQ0MzMzMzJywgJyNDQzMzNjYnLFxuICAnI0NDMzM5OScsICcjQ0MzM0NDJywgJyNDQzMzRkYnLCAnI0NDNjYwMCcsICcjQ0M2NjMzJywgJyNDQzk5MDAnLCAnI0NDOTkzMycsXG4gICcjQ0NDQzAwJywgJyNDQ0NDMzMnLCAnI0ZGMDAwMCcsICcjRkYwMDMzJywgJyNGRjAwNjYnLCAnI0ZGMDA5OScsICcjRkYwMENDJyxcbiAgJyNGRjAwRkYnLCAnI0ZGMzMwMCcsICcjRkYzMzMzJywgJyNGRjMzNjYnLCAnI0ZGMzM5OScsICcjRkYzM0NDJywgJyNGRjMzRkYnLFxuICAnI0ZGNjYwMCcsICcjRkY2NjMzJywgJyNGRjk5MDAnLCAnI0ZGOTkzMycsICcjRkZDQzAwJywgJyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgLy8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuICAvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuICAvLyBleHBsaWNpdGx5XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiB3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGlzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG4gIC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG4gIHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuICAgIC8vIGlzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcbiAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuICAgIC8vIGlzIGZpcmVmb3ggPj0gdjMxP1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuICAgIC8vIGRvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcbiAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uKHYpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnIubWVzc2FnZTtcbiAgfVxufTtcblxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuICB2YXIgdXNlQ29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cbiAgYXJnc1swXSA9ICh1c2VDb2xvcnMgPyAnJWMnIDogJycpXG4gICAgKyB0aGlzLm5hbWVzcGFjZVxuICAgICsgKHVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKVxuICAgICsgYXJnc1swXVxuICAgICsgKHVzZUNvbG9ycyA/ICclYyAnIDogJyAnKVxuICAgICsgJysnICsgZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG4gIGlmICghdXNlQ29sb3JzKSByZXR1cm47XG5cbiAgdmFyIGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuICBhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKVxuXG4gIC8vIHRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG4gIC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cbiAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0QyA9IDA7XG4gIGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIGlmICgnJSUnID09PSBtYXRjaCkgcmV0dXJuO1xuICAgIGluZGV4Kys7XG4gICAgaWYgKCclYycgPT09IG1hdGNoKSB7XG4gICAgICAvLyB3ZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcbiAgICAgIC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG4gICAgICBsYXN0QyA9IGluZGV4O1xuICAgIH1cbiAgfSk7XG5cbiAgYXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUubG9nKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5sb2dgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgLy8gdGhpcyBoYWNrZXJ5IGlzIHJlcXVpcmVkIGZvciBJRTgvOSwgd2hlcmVcbiAgLy8gdGhlIGBjb25zb2xlLmxvZ2AgZnVuY3Rpb24gZG9lc24ndCBoYXZlICdhcHBseSdcbiAgcmV0dXJuICdvYmplY3QnID09PSB0eXBlb2YgY29uc29sZVxuICAgICYmIGNvbnNvbGUubG9nXG4gICAgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICB0cnkge1xuICAgIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UuZGVidWcgPSBuYW1lc3BhY2VzO1xuICAgIH1cbiAgfSBjYXRjaChlKSB7fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHZhciByO1xuICB0cnkge1xuICAgIHIgPSBleHBvcnRzLnN0b3JhZ2UuZGVidWc7XG4gIH0gY2F0Y2goZSkge31cblxuICAvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG4gIGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuICAgIHIgPSBwcm9jZXNzLmVudi5ERUJVRztcbiAgfVxuXG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIEVuYWJsZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiBgbG9jYWxTdG9yYWdlLmRlYnVnYCBpbml0aWFsbHkuXG4gKi9cblxuZXhwb3J0cy5lbmFibGUobG9hZCgpKTtcblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG4iLCJ2YXIgZmFzdFNhZmVTdHJpbmdpZnkgPSByZXF1aXJlKCdmYXN0LXNhZmUtc3RyaW5naWZ5JylcbnZhciBjb3B5ID0gcmVxdWlyZSgnY2xpcGJvYXJkLWNvcHknKVxuXG5mdW5jdGlvbiB0cnlTdHJpbmdpZnkgKG9iaikge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopXG4gIH0gY2F0Y2ggKGUpIHt9XG59XG5cbmZ1bmN0aW9uIHN0YXRlQ29weSAob2JqKSB7XG4gIHZhciBzdHIgPSB0cnlTdHJpbmdpZnkob2JqKSB8fCBmYXN0U2FmZVN0cmluZ2lmeShvYmopXG4gIGNvcHkoc3RyKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YXRlQ29weVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBpc0VuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmcgfHwgZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gJycgKyBlbmNvZGluZztcbiAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpjYXNlICd1dGY4JzpjYXNlICd1dGYtOCc6Y2FzZSAnYXNjaWknOmNhc2UgJ2JpbmFyeSc6Y2FzZSAnYmFzZTY0JzpjYXNlICd1Y3MyJzpjYXNlICd1Y3MtMic6Y2FzZSAndXRmMTZsZSc6Y2FzZSAndXRmLTE2bGUnOmNhc2UgJ3Jhdyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIGlmICghZW5jKSByZXR1cm4gJ3V0ZjgnO1xuICB2YXIgcmV0cmllZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuYykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiAndXRmOCc7XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gJ3V0ZjE2bGUnO1xuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiAnbGF0aW4xJztcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gZW5jO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHJldHJpZWQpIHJldHVybjsgLy8gdW5kZWZpbmVkXG4gICAgICAgIGVuYyA9ICgnJyArIGVuYykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0cmllZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBEbyBub3QgY2FjaGUgYEJ1ZmZlci5pc0VuY29kaW5nYCB3aGVuIGNoZWNraW5nIGVuY29kaW5nIG5hbWVzIGFzIHNvbWVcbi8vIG1vZHVsZXMgbW9ua2V5LXBhdGNoIGl0IHRvIHN1cHBvcnQgYWRkaXRpb25hbCBlbmNvZGluZ3NcbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICB2YXIgbmVuYyA9IF9ub3JtYWxpemVFbmNvZGluZyhlbmMpO1xuICBpZiAodHlwZW9mIG5lbmMgIT09ICdzdHJpbmcnICYmIChCdWZmZXIuaXNFbmNvZGluZyA9PT0gaXNFbmNvZGluZyB8fCAhaXNFbmNvZGluZyhlbmMpKSkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jKTtcbiAgcmV0dXJuIG5lbmMgfHwgZW5jO1xufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuXG5leHBvcnRzLlN0cmluZ0RlY29kZXIgPSBTdHJpbmdEZWNvZGVyO1xuZnVuY3Rpb24gU3RyaW5nRGVjb2RlcihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuICB2YXIgbmI7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgdGhpcy50ZXh0ID0gdXRmMTZUZXh0O1xuICAgICAgdGhpcy5lbmQgPSB1dGYxNkVuZDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgdGhpcy5maWxsTGFzdCA9IHV0ZjhGaWxsTGFzdDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICB0aGlzLnRleHQgPSBiYXNlNjRUZXh0O1xuICAgICAgdGhpcy5lbmQgPSBiYXNlNjRFbmQ7XG4gICAgICBuYiA9IDM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy53cml0ZSA9IHNpbXBsZVdyaXRlO1xuICAgICAgdGhpcy5lbmQgPSBzaW1wbGVFbmQ7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIHRoaXMubGFzdFRvdGFsID0gMDtcbiAgdGhpcy5sYXN0Q2hhciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuYik7XG59XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcjtcbiAgdmFyIGk7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgciA9IHRoaXMuZmlsbExhc3QoYnVmKTtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaSA9IHRoaXMubGFzdE5lZWQ7XG4gICAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgaWYgKGkgPCBidWYubGVuZ3RoKSByZXR1cm4gciA/IHIgKyB0aGlzLnRleHQoYnVmLCBpKSA6IHRoaXMudGV4dChidWYsIGkpO1xuICByZXR1cm4gciB8fCAnJztcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IHV0ZjhFbmQ7XG5cbi8vIFJldHVybnMgb25seSBjb21wbGV0ZSBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS50ZXh0ID0gdXRmOFRleHQ7XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgcGFydGlhbCBub24tVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmZpbGxMYXN0ID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufTtcblxuLy8gQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuLy8gY29udGludWF0aW9uIGJ5dGUuIElmIGFuIGludmFsaWQgYnl0ZSBpcyBkZXRlY3RlZCwgLTIgaXMgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHtcbiAgaWYgKGJ5dGUgPD0gMHg3RikgcmV0dXJuIDA7ZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtlbHNlIGlmIChieXRlID4+IDQgPT09IDB4MEUpIHJldHVybiAzO2Vsc2UgaWYgKGJ5dGUgPj4gMyA9PT0gMHgxRSkgcmV0dXJuIDQ7XG4gIHJldHVybiBieXRlID4+IDYgPT09IDB4MDIgPyAtMSA6IC0yO1xufVxuXG4vLyBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4vLyBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuLy8gbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0luY29tcGxldGUoc2VsZiwgYnVmLCBpKSB7XG4gIHZhciBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIHZhciBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSB7XG4gICAgICBpZiAobmIgPT09IDIpIG5iID0gMDtlbHNlIHNlbGYubGFzdE5lZWQgPSBuYiAtIDM7XG4gICAgfVxuICAgIHJldHVybiBuYjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy8gVmFsaWRhdGVzIGFzIG1hbnkgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIGFzXG4vLyBuZWVkZWQgb3IgYXJlIGF2YWlsYWJsZS4gSWYgd2Ugc2VlIGEgbm9uLWNvbnRpbnVhdGlvbiBieXRlIHdoZXJlIHdlIGV4cGVjdFxuLy8gb25lLCB3ZSBcInJlcGxhY2VcIiB0aGUgdmFsaWRhdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB3ZSd2ZSBzZWVuIHNvIGZhciB3aXRoXG4vLyBhIHNpbmdsZSBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2Rpbmdcbi8vIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2Vcbi8vIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4vLyBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4vLyBsb29wLlxuZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmLCBidWYsIHApIHtcbiAgaWYgKChidWZbMF0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgIHNlbGYubGFzdE5lZWQgPSAwO1xuICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgoYnVmWzJdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgICAgc2VsZi5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlci5cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdChidWYpIHtcbiAgdmFyIHAgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gIHZhciByID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYsIHApO1xuICBpZiAociAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcjtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufVxuXG4vLyBSZXR1cm5zIGFsbCBjb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyLiBJZiB0aGUgQnVmZmVyIGVuZGVkIG9uIGFcbi8vIHBhcnRpYWwgY2hhcmFjdGVyLCB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgYXJlIGJ1ZmZlcmVkIHVudGlsIHRoZSByZXF1aXJlZFxuLy8gbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUuXG5mdW5jdGlvbiB1dGY4VGV4dChidWYsIGkpIHtcbiAgdmFyIHRvdGFsID0gdXRmOENoZWNrSW5jb21wbGV0ZSh0aGlzLCBidWYsIGkpO1xuICBpZiAoIXRoaXMubGFzdE5lZWQpIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpKTtcbiAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDtcbiAgdmFyIGVuZCA9IGJ1Zi5sZW5ndGggLSAodG90YWwgLSB0aGlzLmxhc3ROZWVkKTtcbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgMCwgZW5kKTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGksIGVuZCk7XG59XG5cbi8vIEZvciBVVEYtOCwgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgYWRkZWQgd2hlbiBlbmRpbmcgb24gYSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB1dGY4RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArICdcXHVmZmZkJztcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFVURi0xNkxFIHR5cGljYWxseSBuZWVkcyB0d28gYnl0ZXMgcGVyIGNoYXJhY3RlciwgYnV0IGV2ZW4gaWYgd2UgaGF2ZSBhbiBldmVuXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGVuZCBvbiBhIGxlYWRpbmcvaGlnaFxuLy8gc3Vycm9nYXRlLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdHdvIGJ5dGVzIGluIG9yZGVyIHRvXG4vLyBkZWNvZGUgdGhlIGxhc3QgY2hhcmFjdGVyIHByb3Blcmx5LlxuZnVuY3Rpb24gdXRmMTZUZXh0KGJ1ZiwgaSkge1xuICBpZiAoKGJ1Zi5sZW5ndGggLSBpKSAlIDIgPT09IDApIHtcbiAgICB2YXIgciA9IGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGkpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgYyA9IHIuY2hhckNvZGVBdChyLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIHRoaXMubGFzdE5lZWQgPSAyO1xuICAgICAgICB0aGlzLmxhc3RUb3RhbCA9IDQ7XG4gICAgICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHIuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMTtcbiAgdGhpcy5sYXN0VG90YWwgPSAyO1xuICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGksIGJ1Zi5sZW5ndGggLSAxKTtcbn1cblxuLy8gRm9yIFVURi0xNkxFIHdlIGRvIG5vdCBleHBsaWNpdGx5IGFwcGVuZCBzcGVjaWFsIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgaWYgd2Vcbi8vIGVuZCBvbiBhIHBhcnRpYWwgY2hhcmFjdGVyLCB3ZSBzaW1wbHkgbGV0IHY4IGhhbmRsZSB0aGF0LlxuZnVuY3Rpb24gdXRmMTZFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICB2YXIgZW5kID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICAgIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygndXRmMTZsZScsIDAsIGVuZCk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRleHQoYnVmLCBpKSB7XG4gIHZhciBuID0gKGJ1Zi5sZW5ndGggLSBpKSAlIDM7XG4gIGlmIChuID09PSAwKSByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpKTtcbiAgdGhpcy5sYXN0TmVlZCA9IDMgLSBuO1xuICB0aGlzLmxhc3RUb3RhbCA9IDM7XG4gIGlmIChuID09PSAxKSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSwgYnVmLmxlbmd0aCAtIG4pO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygnYmFzZTY0JywgMCwgMyAtIHRoaXMubGFzdE5lZWQpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gUGFzcyBieXRlcyBvbiB0aHJvdWdoIGZvciBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MgKGUuZy4gYXNjaWksIGxhdGluMSwgaGV4KVxuZnVuY3Rpb24gc2ltcGxlV3JpdGUoYnVmKSB7XG4gIHJldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVuZChidWYpIHtcbiAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG59IiwiZnVuY3Rpb24gQWdlbnQoKSB7XG4gIHRoaXMuX2RlZmF1bHRzID0gW107XG59XG5cbmZvciAoY29uc3QgZm4gb2YgW1xuICAndXNlJyxcbiAgJ29uJyxcbiAgJ29uY2UnLFxuICAnc2V0JyxcbiAgJ3F1ZXJ5JyxcbiAgJ3R5cGUnLFxuICAnYWNjZXB0JyxcbiAgJ2F1dGgnLFxuICAnd2l0aENyZWRlbnRpYWxzJyxcbiAgJ3NvcnRRdWVyeScsXG4gICdyZXRyeScsXG4gICdvaycsXG4gICdyZWRpcmVjdHMnLFxuICAndGltZW91dCcsXG4gICdidWZmZXInLFxuICAnc2VyaWFsaXplJyxcbiAgJ3BhcnNlJyxcbiAgJ2NhJyxcbiAgJ2tleScsXG4gICdwZngnLFxuICAnY2VydCcsXG4gICdkaXNhYmxlVExTQ2VydHMnXG5dKSB7XG4gIC8vIERlZmF1bHQgc2V0dGluZyBmb3IgYWxsIHJlcXVlc3RzIGZyb20gdGhpcyBhZ2VudFxuICBBZ2VudC5wcm90b3R5cGVbZm5dID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9kZWZhdWx0cy5wdXNoKHsgZm4sIGFyZ3MgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59XG5cbkFnZW50LnByb3RvdHlwZS5fc2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAocmVxdWVzdCkge1xuICBmb3IgKGNvbnN0IGRlZiBvZiB0aGlzLl9kZWZhdWx0cykge1xuICAgIHJlcXVlc3RbZGVmLmZuXSguLi5kZWYuYXJncyk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQWdlbnQ7XG4iLCIvKipcbiAqIFJvb3QgcmVmZXJlbmNlIGZvciBpZnJhbWVzLlxuICovXG5cbmxldCByb290O1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIEJyb3dzZXIgd2luZG93XG4gIHJvb3QgPSB3aW5kb3c7XG59IGVsc2UgaWYgKHR5cGVvZiBzZWxmID09PSAndW5kZWZpbmVkJykge1xuICAvLyBPdGhlciBlbnZpcm9ubWVudHNcbiAgY29uc29sZS53YXJuKFxuICAgICdVc2luZyBicm93c2VyLW9ubHkgdmVyc2lvbiBvZiBzdXBlcmFnZW50IGluIG5vbi1icm93c2VyIGVudmlyb25tZW50J1xuICApO1xuICByb290ID0gdGhpcztcbn0gZWxzZSB7XG4gIC8vIFdlYiBXb3JrZXJcbiAgcm9vdCA9IHNlbGY7XG59XG5cbmNvbnN0IEVtaXR0ZXIgPSByZXF1aXJlKCdjb21wb25lbnQtZW1pdHRlcicpO1xuY29uc3Qgc2FmZVN0cmluZ2lmeSA9IHJlcXVpcmUoJ2Zhc3Qtc2FmZS1zdHJpbmdpZnknKTtcbmNvbnN0IHFzID0gcmVxdWlyZSgncXMnKTtcbmNvbnN0IFJlcXVlc3RCYXNlID0gcmVxdWlyZSgnLi9yZXF1ZXN0LWJhc2UnKTtcbmNvbnN0IHsgaXNPYmplY3QsIG1peGluLCBoYXNPd24gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbmNvbnN0IFJlc3BvbnNlQmFzZSA9IHJlcXVpcmUoJy4vcmVzcG9uc2UtYmFzZScpO1xuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50LWJhc2UnKTtcblxuLyoqXG4gKiBOb29wLlxuICovXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vKipcbiAqIEV4cG9zZSBgcmVxdWVzdGAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCB1cmwpIHtcbiAgLy8gY2FsbGJhY2tcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbmV3IGV4cG9ydHMuUmVxdWVzdCgnR0VUJywgbWV0aG9kKS5lbmQodXJsKTtcbiAgfVxuXG4gIC8vIHVybCBmaXJzdFxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBuZXcgZXhwb3J0cy5SZXF1ZXN0KCdHRVQnLCBtZXRob2QpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBleHBvcnRzLlJlcXVlc3QobWV0aG9kLCB1cmwpO1xufTtcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzO1xuXG5jb25zdCByZXF1ZXN0ID0gZXhwb3J0cztcblxuZXhwb3J0cy5SZXF1ZXN0ID0gUmVxdWVzdDtcblxuLyoqXG4gKiBEZXRlcm1pbmUgWEhSLlxuICovXG5cbnJlcXVlc3QuZ2V0WEhSID0gKCkgPT4ge1xuICBpZiAoXG4gICAgcm9vdC5YTUxIdHRwUmVxdWVzdCAmJlxuICAgICghcm9vdC5sb2NhdGlvbiB8fFxuICAgICAgcm9vdC5sb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyB8fFxuICAgICAgIXJvb3QuQWN0aXZlWE9iamVjdClcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XG4gIH0gY2F0Y2gge1xuICAgIC8qKi9cbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNc3htbDIuWE1MSFRUUC42LjAnKTtcbiAgfSBjYXRjaCB7XG4gICAgLyoqL1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQLjMuMCcpO1xuICB9IGNhdGNoIHtcbiAgICAvKiovXG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTXN4bWwyLlhNTEhUVFAnKTtcbiAgfSBjYXRjaCB7XG4gICAgLyoqL1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdCcm93c2VyLW9ubHkgdmVyc2lvbiBvZiBzdXBlcmFnZW50IGNvdWxkIG5vdCBmaW5kIFhIUicpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGFkZGVkIHRvIHN1cHBvcnQgSUUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmNvbnN0IHRyaW0gPSAnJy50cmltID8gKHMpID0+IHMudHJpbSgpIDogKHMpID0+IHMucmVwbGFjZSgvKF5cXHMqfFxccyokKS9nLCAnJyk7XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBnaXZlbiBgb2JqYC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzZXJpYWxpemUob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkgcmV0dXJuIG9iamVjdDtcbiAgY29uc3QgcGFpcnMgPSBbXTtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKGhhc093bihvYmplY3QsIGtleSkpIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBrZXksIG9iamVjdFtrZXldKTtcbiAgfVxuXG4gIHJldHVybiBwYWlycy5qb2luKCcmJyk7XG59XG5cbi8qKlxuICogSGVscHMgJ3NlcmlhbGl6ZScgd2l0aCBzZXJpYWxpemluZyBhcnJheXMuXG4gKiBNdXRhdGVzIHRoZSBwYWlycyBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYWlyc1xuICogQHBhcmFtIHtTdHJpbmd9IGtleVxuICogQHBhcmFtIHtNaXhlZH0gdmFsXG4gKi9cblxuZnVuY3Rpb24gcHVzaEVuY29kZWRLZXlWYWx1ZVBhaXIocGFpcnMsIGtleSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcGFpcnMucHVzaChlbmNvZGVVUkkoa2V5KSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG4gICAgICBwdXNoRW5jb2RlZEtleVZhbHVlUGFpcihwYWlycywga2V5LCB2KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCBzdWJrZXkgaW4gdmFsdWUpIHtcbiAgICAgIGlmIChoYXNPd24odmFsdWUsIHN1YmtleSkpXG4gICAgICAgIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBgJHtrZXl9WyR7c3Via2V5fV1gLCB2YWx1ZVtzdWJrZXldKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGFpcnMucHVzaChlbmNvZGVVUkkoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICB9XG59XG5cbi8qKlxuICogRXhwb3NlIHNlcmlhbGl6YXRpb24gbWV0aG9kLlxuICovXG5cbnJlcXVlc3Quc2VyaWFsaXplT2JqZWN0ID0gc2VyaWFsaXplO1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiB4LXd3dy1mb3JtLXVybGVuY29kZWQgYHN0cmAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7T2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2VTdHJpbmcoc3RyaW5nXykge1xuICBjb25zdCBvYmplY3QgPSB7fTtcbiAgY29uc3QgcGFpcnMgPSBzdHJpbmdfLnNwbGl0KCcmJyk7XG4gIGxldCBwYWlyO1xuICBsZXQgcG9zO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsZW5ndGhfID0gcGFpcnMubGVuZ3RoOyBpIDwgbGVuZ3RoXzsgKytpKSB7XG4gICAgcGFpciA9IHBhaXJzW2ldO1xuICAgIHBvcyA9IHBhaXIuaW5kZXhPZignPScpO1xuICAgIGlmIChwb3MgPT09IC0xKSB7XG4gICAgICBvYmplY3RbZGVjb2RlVVJJQ29tcG9uZW50KHBhaXIpXSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3RbZGVjb2RlVVJJQ29tcG9uZW50KHBhaXIuc2xpY2UoMCwgcG9zKSldID0gZGVjb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICBwYWlyLnNsaWNlKHBvcyArIDEpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59XG5cbi8qKlxuICogRXhwb3NlIHBhcnNlci5cbiAqL1xuXG5yZXF1ZXN0LnBhcnNlU3RyaW5nID0gcGFyc2VTdHJpbmc7XG5cbi8qKlxuICogRGVmYXVsdCBNSU1FIHR5cGUgbWFwLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnR5cGVzLnhtbCA9ICdhcHBsaWNhdGlvbi94bWwnO1xuICpcbiAqL1xuXG5yZXF1ZXN0LnR5cGVzID0ge1xuICBodG1sOiAndGV4dC9odG1sJyxcbiAganNvbjogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICB4bWw6ICd0ZXh0L3htbCcsXG4gIHVybGVuY29kZWQ6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICBmb3JtOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgJ2Zvcm0tZGF0YSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG4vKipcbiAqIERlZmF1bHQgc2VyaWFsaXphdGlvbiBtYXAuXG4gKlxuICogICAgIHN1cGVyYWdlbnQuc2VyaWFsaXplWydhcHBsaWNhdGlvbi94bWwnXSA9IGZ1bmN0aW9uKG9iail7XG4gKiAgICAgICByZXR1cm4gJ2dlbmVyYXRlZCB4bWwgaGVyZSc7XG4gKiAgICAgfTtcbiAqXG4gKi9cblxucmVxdWVzdC5zZXJpYWxpemUgPSB7XG4gICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOiBxcy5zdHJpbmdpZnksXG4gICdhcHBsaWNhdGlvbi9qc29uJzogc2FmZVN0cmluZ2lmeVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IHBhcnNlcnMuXG4gKlxuICogICAgIHN1cGVyYWdlbnQucGFyc2VbJ2FwcGxpY2F0aW9uL3htbCddID0gZnVuY3Rpb24oc3RyKXtcbiAqICAgICAgIHJldHVybiB7IG9iamVjdCBwYXJzZWQgZnJvbSBzdHIgfTtcbiAqICAgICB9O1xuICpcbiAqL1xuXG5yZXF1ZXN0LnBhcnNlID0ge1xuICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogcGFyc2VTdHJpbmcsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogSlNPTi5wYXJzZVxufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gaGVhZGVyIGBzdHJgIGludG9cbiAqIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBtYXBwZWQgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyKHN0cmluZ18pIHtcbiAgY29uc3QgbGluZXMgPSBzdHJpbmdfLnNwbGl0KC9cXHI/XFxuLyk7XG4gIGNvbnN0IGZpZWxkcyA9IHt9O1xuICBsZXQgaW5kZXg7XG4gIGxldCBsaW5lO1xuICBsZXQgZmllbGQ7XG4gIGxldCB2YWx1ZTtcblxuICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoXyA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbmd0aF87ICsraSkge1xuICAgIGxpbmUgPSBsaW5lc1tpXTtcbiAgICBpbmRleCA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIGNvdWxkIGJlIGVtcHR5IGxpbmUsIGp1c3Qgc2tpcCBpdFxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZmllbGQgPSBsaW5lLnNsaWNlKDAsIGluZGV4KS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbHVlID0gdHJpbShsaW5lLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgIGZpZWxkc1tmaWVsZF0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBmaWVsZHM7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYG1pbWVgIGlzIGpzb24gb3IgaGFzICtqc29uIHN0cnVjdHVyZWQgc3ludGF4IHN1ZmZpeC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWltZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGlzSlNPTihtaW1lKSB7XG4gIC8vIHNob3VsZCBtYXRjaCAvanNvbiBvciAranNvblxuICAvLyBidXQgbm90IC9qc29uLXNlcVxuICByZXR1cm4gL1svK11qc29uKCR8W14tXFx3XSkvaS50ZXN0KG1pbWUpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlc3BvbnNlYCB3aXRoIHRoZSBnaXZlbiBgeGhyYC5cbiAqXG4gKiAgLSBzZXQgZmxhZ3MgKC5vaywgLmVycm9yLCBldGMpXG4gKiAgLSBwYXJzZSBoZWFkZXJcbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgQWxpYXNpbmcgYHN1cGVyYWdlbnRgIGFzIGByZXF1ZXN0YCBpcyBuaWNlOlxuICpcbiAqICAgICAgcmVxdWVzdCA9IHN1cGVyYWdlbnQ7XG4gKlxuICogIFdlIGNhbiB1c2UgdGhlIHByb21pc2UtbGlrZSBBUEksIG9yIHBhc3MgY2FsbGJhY2tzOlxuICpcbiAqICAgICAgcmVxdWVzdC5nZXQoJy8nKS5lbmQoZnVuY3Rpb24ocmVzKXt9KTtcbiAqICAgICAgcmVxdWVzdC5nZXQoJy8nLCBmdW5jdGlvbihyZXMpe30pO1xuICpcbiAqICBTZW5kaW5nIGRhdGEgY2FuIGJlIGNoYWluZWQ6XG4gKlxuICogICAgICByZXF1ZXN0XG4gKiAgICAgICAgLnBvc3QoJy91c2VyJylcbiAqICAgICAgICAuc2VuZCh7IG5hbWU6ICd0aicgfSlcbiAqICAgICAgICAuZW5kKGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogIE9yIHBhc3NlZCB0byBgLnNlbmQoKWA6XG4gKlxuICogICAgICByZXF1ZXN0XG4gKiAgICAgICAgLnBvc3QoJy91c2VyJylcbiAqICAgICAgICAuc2VuZCh7IG5hbWU6ICd0aicgfSwgZnVuY3Rpb24ocmVzKXt9KTtcbiAqXG4gKiAgT3IgcGFzc2VkIHRvIGAucG9zdCgpYDpcbiAqXG4gKiAgICAgIHJlcXVlc3RcbiAqICAgICAgICAucG9zdCgnL3VzZXInLCB7IG5hbWU6ICd0aicgfSlcbiAqICAgICAgICAuZW5kKGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogT3IgZnVydGhlciByZWR1Y2VkIHRvIGEgc2luZ2xlIGNhbGwgZm9yIHNpbXBsZSBjYXNlczpcbiAqXG4gKiAgICAgIHJlcXVlc3RcbiAqICAgICAgICAucG9zdCgnL3VzZXInLCB7IG5hbWU6ICd0aicgfSwgZnVuY3Rpb24ocmVzKXt9KTtcbiAqXG4gKiBAcGFyYW0ge1hNTEhUVFBSZXF1ZXN0fSB4aHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBSZXNwb25zZShyZXF1ZXN0Xykge1xuICB0aGlzLnJlcSA9IHJlcXVlc3RfO1xuICB0aGlzLnhociA9IHRoaXMucmVxLnhocjtcbiAgLy8gcmVzcG9uc2VUZXh0IGlzIGFjY2Vzc2libGUgb25seSBpZiByZXNwb25zZVR5cGUgaXMgJycgb3IgJ3RleHQnIGFuZCBvbiBvbGRlciBicm93c2Vyc1xuICB0aGlzLnRleHQgPVxuICAgICh0aGlzLnJlcS5tZXRob2QgIT09ICdIRUFEJyAmJlxuICAgICAgKHRoaXMueGhyLnJlc3BvbnNlVHlwZSA9PT0gJycgfHwgdGhpcy54aHIucmVzcG9uc2VUeXBlID09PSAndGV4dCcpKSB8fFxuICAgIHR5cGVvZiB0aGlzLnhoci5yZXNwb25zZVR5cGUgPT09ICd1bmRlZmluZWQnXG4gICAgICA/IHRoaXMueGhyLnJlc3BvbnNlVGV4dFxuICAgICAgOiBudWxsO1xuICB0aGlzLnN0YXR1c1RleHQgPSB0aGlzLnJlcS54aHIuc3RhdHVzVGV4dDtcbiAgbGV0IHsgc3RhdHVzIH0gPSB0aGlzLnhocjtcbiAgLy8gaGFuZGxlIElFOSBidWc6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTAwNDY5NzIvbXNpZS1yZXR1cm5zLXN0YXR1cy1jb2RlLW9mLTEyMjMtZm9yLWFqYXgtcmVxdWVzdFxuICBpZiAoc3RhdHVzID09PSAxMjIzKSB7XG4gICAgc3RhdHVzID0gMjA0O1xuICB9XG5cbiAgdGhpcy5fc2V0U3RhdHVzUHJvcGVydGllcyhzdGF0dXMpO1xuICB0aGlzLmhlYWRlcnMgPSBwYXJzZUhlYWRlcih0aGlzLnhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7XG4gIHRoaXMuaGVhZGVyID0gdGhpcy5oZWFkZXJzO1xuICAvLyBnZXRBbGxSZXNwb25zZUhlYWRlcnMgc29tZXRpbWVzIGZhbHNlbHkgcmV0dXJucyBcIlwiIGZvciBDT1JTIHJlcXVlc3RzLCBidXRcbiAgLy8gZ2V0UmVzcG9uc2VIZWFkZXIgc3RpbGwgd29ya3MuIHNvIHdlIGdldCBjb250ZW50LXR5cGUgZXZlbiBpZiBnZXR0aW5nXG4gIC8vIG90aGVyIGhlYWRlcnMgZmFpbHMuXG4gIHRoaXMuaGVhZGVyWydjb250ZW50LXR5cGUnXSA9IHRoaXMueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcbiAgdGhpcy5fc2V0SGVhZGVyUHJvcGVydGllcyh0aGlzLmhlYWRlcik7XG5cbiAgaWYgKHRoaXMudGV4dCA9PT0gbnVsbCAmJiByZXF1ZXN0Xy5fcmVzcG9uc2VUeXBlKSB7XG4gICAgdGhpcy5ib2R5ID0gdGhpcy54aHIucmVzcG9uc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5ib2R5ID1cbiAgICAgIHRoaXMucmVxLm1ldGhvZCA9PT0gJ0hFQUQnXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuX3BhcnNlQm9keSh0aGlzLnRleHQgPyB0aGlzLnRleHQgOiB0aGlzLnhoci5yZXNwb25zZSk7XG4gIH1cbn1cblxubWl4aW4oUmVzcG9uc2UucHJvdG90eXBlLCBSZXNwb25zZUJhc2UucHJvdG90eXBlKTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYm9keSBgc3RyYC5cbiAqXG4gKiBVc2VkIGZvciBhdXRvLXBhcnNpbmcgb2YgYm9kaWVzLiBQYXJzZXJzXG4gKiBhcmUgZGVmaW5lZCBvbiB0aGUgYHN1cGVyYWdlbnQucGFyc2VgIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtNaXhlZH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS5fcGFyc2VCb2R5ID0gZnVuY3Rpb24gKHN0cmluZ18pIHtcbiAgbGV0IHBhcnNlID0gcmVxdWVzdC5wYXJzZVt0aGlzLnR5cGVdO1xuICBpZiAodGhpcy5yZXEuX3BhcnNlcikge1xuICAgIHJldHVybiB0aGlzLnJlcS5fcGFyc2VyKHRoaXMsIHN0cmluZ18pO1xuICB9XG5cbiAgaWYgKCFwYXJzZSAmJiBpc0pTT04odGhpcy50eXBlKSkge1xuICAgIHBhcnNlID0gcmVxdWVzdC5wYXJzZVsnYXBwbGljYXRpb24vanNvbiddO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlICYmIHN0cmluZ18gJiYgKHN0cmluZ18ubGVuZ3RoID4gMCB8fCBzdHJpbmdfIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgID8gcGFyc2Uoc3RyaW5nXylcbiAgICA6IG51bGw7XG59O1xuXG4vKipcbiAqIFJldHVybiBhbiBgRXJyb3JgIHJlcHJlc2VudGF0aXZlIG9mIHRoaXMgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybiB7RXJyb3J9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS50b0Vycm9yID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHJlcSB9ID0gdGhpcztcbiAgY29uc3QgeyBtZXRob2QgfSA9IHJlcTtcbiAgY29uc3QgeyB1cmwgfSA9IHJlcTtcblxuICBjb25zdCBtZXNzYWdlID0gYGNhbm5vdCAke21ldGhvZH0gJHt1cmx9ICgke3RoaXMuc3RhdHVzfSlgO1xuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgZXJyb3Iuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gIGVycm9yLm1ldGhvZCA9IG1ldGhvZDtcbiAgZXJyb3IudXJsID0gdXJsO1xuXG4gIHJldHVybiBlcnJvcjtcbn07XG5cbi8qKlxuICogRXhwb3NlIGBSZXNwb25zZWAuXG4gKi9cblxucmVxdWVzdC5SZXNwb25zZSA9IFJlc3BvbnNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlcXVlc3RgIHdpdGggdGhlIGdpdmVuIGBtZXRob2RgIGFuZCBgdXJsYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3QobWV0aG9kLCB1cmwpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3F1ZXJ5ID0gdGhpcy5fcXVlcnkgfHwgW107XG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICB0aGlzLnVybCA9IHVybDtcbiAgdGhpcy5oZWFkZXIgPSB7fTsgLy8gcHJlc2VydmVzIGhlYWRlciBuYW1lIGNhc2VcbiAgdGhpcy5faGVhZGVyID0ge307IC8vIGNvZXJjZXMgaGVhZGVyIG5hbWVzIHRvIGxvd2VyY2FzZVxuICB0aGlzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBsZXQgcmVzID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICByZXMgPSBuZXcgUmVzcG9uc2Uoc2VsZik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcignUGFyc2VyIGlzIHVuYWJsZSB0byBwYXJzZSB0aGUgcmVzcG9uc2UnKTtcbiAgICAgIGVycm9yLnBhcnNlID0gdHJ1ZTtcbiAgICAgIGVycm9yLm9yaWdpbmFsID0gZXJyO1xuICAgICAgLy8gaXNzdWUgIzY3NTogcmV0dXJuIHRoZSByYXcgcmVzcG9uc2UgaWYgdGhlIHJlc3BvbnNlIHBhcnNpbmcgZmFpbHNcbiAgICAgIGlmIChzZWxmLnhocikge1xuICAgICAgICAvLyBpZTkgZG9lc24ndCBoYXZlICdyZXNwb25zZScgcHJvcGVydHlcbiAgICAgICAgZXJyb3IucmF3UmVzcG9uc2UgPVxuICAgICAgICAgIHR5cGVvZiBzZWxmLnhoci5yZXNwb25zZVR5cGUgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IHNlbGYueGhyLnJlc3BvbnNlVGV4dFxuICAgICAgICAgICAgOiBzZWxmLnhoci5yZXNwb25zZTtcbiAgICAgICAgLy8gaXNzdWUgIzg3NjogcmV0dXJuIHRoZSBodHRwIHN0YXR1cyBjb2RlIGlmIHRoZSByZXNwb25zZSBwYXJzaW5nIGZhaWxzXG4gICAgICAgIGVycm9yLnN0YXR1cyA9IHNlbGYueGhyLnN0YXR1cyA/IHNlbGYueGhyLnN0YXR1cyA6IG51bGw7XG4gICAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSBlcnJvci5zdGF0dXM7IC8vIGJhY2t3YXJkcy1jb21wYXQgb25seVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IucmF3UmVzcG9uc2UgPSBudWxsO1xuICAgICAgICBlcnJvci5zdGF0dXMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VsZi5jYWxsYmFjayhlcnJvcik7XG4gICAgfVxuXG4gICAgc2VsZi5lbWl0KCdyZXNwb25zZScsIHJlcyk7XG5cbiAgICBsZXQgbmV3X2Vycm9yO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXNlbGYuX2lzUmVzcG9uc2VPSyhyZXMpKSB7XG4gICAgICAgIG5ld19lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICByZXMuc3RhdHVzVGV4dCB8fCByZXMudGV4dCB8fCAnVW5zdWNjZXNzZnVsIEhUVFAgcmVzcG9uc2UnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBuZXdfZXJyb3IgPSBlcnI7IC8vIG9rKCkgY2FsbGJhY2sgY2FuIHRocm93XG4gICAgfVxuXG4gICAgLy8gIzEwMDAgZG9uJ3QgY2F0Y2ggZXJyb3JzIGZyb20gdGhlIGNhbGxiYWNrIHRvIGF2b2lkIGRvdWJsZSBjYWxsaW5nIGl0XG4gICAgaWYgKG5ld19lcnJvcikge1xuICAgICAgbmV3X2Vycm9yLm9yaWdpbmFsID0gZXJyb3I7XG4gICAgICBuZXdfZXJyb3IucmVzcG9uc2UgPSByZXM7XG4gICAgICBuZXdfZXJyb3Iuc3RhdHVzID0gcmVzLnN0YXR1cztcbiAgICAgIHNlbGYuY2FsbGJhY2sobmV3X2Vycm9yLCByZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmNhbGxiYWNrKG51bGwsIHJlcyk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBNaXhpbiBgRW1pdHRlcmAgYW5kIGBSZXF1ZXN0QmFzZWAuXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbkVtaXR0ZXIoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG5taXhpbihSZXF1ZXN0LnByb3RvdHlwZSwgUmVxdWVzdEJhc2UucHJvdG90eXBlKTtcblxuLyoqXG4gKiBTZXQgQ29udGVudC1UeXBlIHRvIGB0eXBlYCwgbWFwcGluZyB2YWx1ZXMgZnJvbSBgcmVxdWVzdC50eXBlc2AuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICBzdXBlcmFnZW50LnR5cGVzLnhtbCA9ICdhcHBsaWNhdGlvbi94bWwnO1xuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgneG1sJylcbiAqICAgICAgICAuc2VuZCh4bWxzdHJpbmcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXF1ZXN0LnBvc3QoJy8nKVxuICogICAgICAgIC50eXBlKCdhcHBsaWNhdGlvbi94bWwnKVxuICogICAgICAgIC5zZW5kKHhtbHN0cmluZylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICB0aGlzLnNldCgnQ29udGVudC1UeXBlJywgcmVxdWVzdC50eXBlc1t0eXBlXSB8fCB0eXBlKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBBY2NlcHQgdG8gYHR5cGVgLCBtYXBwaW5nIHZhbHVlcyBmcm9tIGByZXF1ZXN0LnR5cGVzYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHN1cGVyYWdlbnQudHlwZXMuanNvbiA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAqXG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvYWdlbnQnKVxuICogICAgICAgIC5hY2NlcHQoJ2pzb24nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqICAgICAgcmVxdWVzdC5nZXQoJy9hZ2VudCcpXG4gKiAgICAgICAgLmFjY2VwdCgnYXBwbGljYXRpb24vanNvbicpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFjY2VwdFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gIHRoaXMuc2V0KCdBY2NlcHQnLCByZXF1ZXN0LnR5cGVzW3R5cGVdIHx8IHR5cGUpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IEF1dGhvcml6YXRpb24gZmllbGQgdmFsdWUgd2l0aCBgdXNlcmAgYW5kIGBwYXNzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXNlclxuICogQHBhcmFtIHtTdHJpbmd9IFtwYXNzXSBvcHRpb25hbCBpbiBjYXNlIG9mIHVzaW5nICdiZWFyZXInIGFzIHR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHdpdGggJ3R5cGUnIHByb3BlcnR5ICdhdXRvJywgJ2Jhc2ljJyBvciAnYmVhcmVyJyAoZGVmYXVsdCAnYmFzaWMnKVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmF1dGggPSBmdW5jdGlvbiAodXNlciwgcGFzcywgb3B0aW9ucykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgcGFzcyA9ICcnO1xuICBpZiAodHlwZW9mIHBhc3MgPT09ICdvYmplY3QnICYmIHBhc3MgIT09IG51bGwpIHtcbiAgICAvLyBwYXNzIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHBhc3M7XG4gICAgcGFzcyA9ICcnO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHR5cGU6IHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nID8gJ2Jhc2ljJyA6ICdhdXRvJ1xuICAgIH07XG4gIH1cblxuICBjb25zdCBlbmNvZGVyID0gb3B0aW9ucy5lbmNvZGVyXG4gICAgPyBvcHRpb25zLmVuY29kZXJcbiAgICA6IChzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGJ0b2Eoc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBiYXNpYyBhdXRoLCBidG9hIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICB9O1xuXG4gIHJldHVybiB0aGlzLl9hdXRoKHVzZXIsIHBhc3MsIG9wdGlvbnMsIGVuY29kZXIpO1xufTtcblxuLyoqXG4gKiBBZGQgcXVlcnktc3RyaW5nIGB2YWxgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgcmVxdWVzdC5nZXQoJy9zaG9lcycpXG4gKiAgICAgLnF1ZXJ5KCdzaXplPTEwJylcbiAqICAgICAucXVlcnkoeyBjb2xvcjogJ2JsdWUnIH0pXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSB2YWxcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgdmFsdWUgPSBzZXJpYWxpemUodmFsdWUpO1xuICBpZiAodmFsdWUpIHRoaXMuX3F1ZXJ5LnB1c2godmFsdWUpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUXVldWUgdGhlIGdpdmVuIGBmaWxlYCBhcyBhbiBhdHRhY2htZW50IHRvIHRoZSBzcGVjaWZpZWQgYGZpZWxkYCxcbiAqIHdpdGggb3B0aW9uYWwgYG9wdGlvbnNgIChvciBmaWxlbmFtZSkuXG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0LnBvc3QoJy91cGxvYWQnKVxuICogICAuYXR0YWNoKCdjb250ZW50JywgbmV3IEJsb2IoWyc8YSBpZD1cImFcIj48YiBpZD1cImJcIj5oZXkhPC9iPjwvYT4nXSwgeyB0eXBlOiBcInRleHQvaHRtbFwifSkpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcGFyYW0ge0Jsb2J8RmlsZX0gZmlsZVxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24gKGZpZWxkLCBmaWxlLCBvcHRpb25zKSB7XG4gIGlmIChmaWxlKSB7XG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInN1cGVyYWdlbnQgY2FuJ3QgbWl4IC5zZW5kKCkgYW5kIC5hdHRhY2goKVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl9nZXRGb3JtRGF0YSgpLmFwcGVuZChmaWVsZCwgZmlsZSwgb3B0aW9ucyB8fCBmaWxlLm5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5fZ2V0Rm9ybURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5fZm9ybURhdGEpIHtcbiAgICB0aGlzLl9mb3JtRGF0YSA9IG5ldyByb290LkZvcm1EYXRhKCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fZm9ybURhdGE7XG59O1xuXG4vKipcbiAqIEludm9rZSB0aGUgY2FsbGJhY2sgd2l0aCBgZXJyYCBhbmQgYHJlc2BcbiAqIGFuZCBoYW5kbGUgYXJpdHkgY2hlY2suXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmNhbGxiYWNrID0gZnVuY3Rpb24gKGVycm9yLCByZXMpIHtcbiAgaWYgKHRoaXMuX3Nob3VsZFJldHJ5KGVycm9yLCByZXMpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldHJ5KCk7XG4gIH1cblxuICBjb25zdCBmbiA9IHRoaXMuX2NhbGxiYWNrO1xuICB0aGlzLmNsZWFyVGltZW91dCgpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIGlmICh0aGlzLl9tYXhSZXRyaWVzKSBlcnJvci5yZXRyaWVzID0gdGhpcy5fcmV0cmllcyAtIDE7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgfVxuXG4gIGZuKGVycm9yLCByZXMpO1xufTtcblxuLyoqXG4gKiBJbnZva2UgY2FsbGJhY2sgd2l0aCB4LWRvbWFpbiBlcnJvci5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jcm9zc0RvbWFpbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAnUmVxdWVzdCBoYXMgYmVlbiB0ZXJtaW5hdGVkXFxuUG9zc2libGUgY2F1c2VzOiB0aGUgbmV0d29yayBpcyBvZmZsaW5lLCBPcmlnaW4gaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luLCB0aGUgcGFnZSBpcyBiZWluZyB1bmxvYWRlZCwgZXRjLidcbiAgKTtcbiAgZXJyb3IuY3Jvc3NEb21haW4gPSB0cnVlO1xuXG4gIGVycm9yLnN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuICBlcnJvci5tZXRob2QgPSB0aGlzLm1ldGhvZDtcbiAgZXJyb3IudXJsID0gdGhpcy51cmw7XG5cbiAgdGhpcy5jYWxsYmFjayhlcnJvcik7XG59O1xuXG4vLyBUaGlzIG9ubHkgd2FybnMsIGJlY2F1c2UgdGhlIHJlcXVlc3QgaXMgc3RpbGwgbGlrZWx5IHRvIHdvcmtcblJlcXVlc3QucHJvdG90eXBlLmFnZW50ID0gZnVuY3Rpb24gKCkge1xuICBjb25zb2xlLndhcm4oJ1RoaXMgaXMgbm90IHN1cHBvcnRlZCBpbiBicm93c2VyIHZlcnNpb24gb2Ygc3VwZXJhZ2VudCcpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmNhID0gUmVxdWVzdC5wcm90b3R5cGUuYWdlbnQ7XG5SZXF1ZXN0LnByb3RvdHlwZS5idWZmZXIgPSBSZXF1ZXN0LnByb3RvdHlwZS5jYTtcblxuLy8gVGhpcyB0aHJvd3MsIGJlY2F1c2UgaXQgY2FuJ3Qgc2VuZC9yZWNlaXZlIGRhdGEgYXMgZXhwZWN0ZWRcblJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gKCkgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ1N0cmVhbWluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgdmVyc2lvbiBvZiBzdXBlcmFnZW50J1xuICApO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUucGlwZSA9IFJlcXVlc3QucHJvdG90eXBlLndyaXRlO1xuXG4vKipcbiAqIENoZWNrIGlmIGBvYmpgIGlzIGEgaG9zdCBvYmplY3QsXG4gKiB3ZSBkb24ndCB3YW50IHRvIHNlcmlhbGl6ZSB0aGVzZSA6KVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogaG9zdCBvYmplY3RcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGlzIGEgaG9zdCBvYmplY3RcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5SZXF1ZXN0LnByb3RvdHlwZS5faXNIb3N0ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAvLyBOYXRpdmUgb2JqZWN0cyBzdHJpbmdpZnkgdG8gW29iamVjdCBGaWxlXSwgW29iamVjdCBCbG9iXSwgW29iamVjdCBGb3JtRGF0YV0sIGV0Yy5cbiAgcmV0dXJuIChcbiAgICBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICFBcnJheS5pc0FycmF5KG9iamVjdCkgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XSdcbiAgKTtcbn07XG5cbi8qKlxuICogSW5pdGlhdGUgcmVxdWVzdCwgaW52b2tpbmcgY2FsbGJhY2sgYGZuKHJlcylgXG4gKiB3aXRoIGFuIGluc3RhbmNlb2YgYFJlc3BvbnNlYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChmbikge1xuICBpZiAodGhpcy5fZW5kQ2FsbGVkKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1dhcm5pbmc6IC5lbmQoKSB3YXMgY2FsbGVkIHR3aWNlLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gc3VwZXJhZ2VudCdcbiAgICApO1xuICB9XG5cbiAgdGhpcy5fZW5kQ2FsbGVkID0gdHJ1ZTtcblxuICAvLyBzdG9yZSBjYWxsYmFja1xuICB0aGlzLl9jYWxsYmFjayA9IGZuIHx8IG5vb3A7XG5cbiAgLy8gcXVlcnlzdHJpbmdcbiAgdGhpcy5fZmluYWxpemVRdWVyeVN0cmluZygpO1xuXG4gIHRoaXMuX2VuZCgpO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuX3NldFVwbG9hZFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIC8vIHVwbG9hZCB0aW1lb3V0IGl0J3Mgd29rcnMgb25seSBpZiBkZWFkbGluZSB0aW1lb3V0IGlzIG9mZlxuICBpZiAodGhpcy5fdXBsb2FkVGltZW91dCAmJiAhdGhpcy5fdXBsb2FkVGltZW91dFRpbWVyKSB7XG4gICAgdGhpcy5fdXBsb2FkVGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZWxmLl90aW1lb3V0RXJyb3IoXG4gICAgICAgICdVcGxvYWQgdGltZW91dCBvZiAnLFxuICAgICAgICBzZWxmLl91cGxvYWRUaW1lb3V0LFxuICAgICAgICAnRVRJTUVET1VUJ1xuICAgICAgKTtcbiAgICB9LCB0aGlzLl91cGxvYWRUaW1lb3V0KTtcbiAgfVxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblJlcXVlc3QucHJvdG90eXBlLl9lbmQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLl9hYm9ydGVkKVxuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKFxuICAgICAgbmV3IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkIGV2ZW4gYmVmb3JlIC5lbmQoKSB3YXMgY2FsbGVkJylcbiAgICApO1xuXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICB0aGlzLnhociA9IHJlcXVlc3QuZ2V0WEhSKCk7XG4gIGNvbnN0IHsgeGhyIH0gPSB0aGlzO1xuICBsZXQgZGF0YSA9IHRoaXMuX2Zvcm1EYXRhIHx8IHRoaXMuX2RhdGE7XG5cbiAgdGhpcy5fc2V0VGltZW91dHMoKTtcblxuICAvLyBzdGF0ZSBjaGFuZ2VcbiAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCAoKSA9PiB7XG4gICAgY29uc3QgeyByZWFkeVN0YXRlIH0gPSB4aHI7XG4gICAgaWYgKHJlYWR5U3RhdGUgPj0gMiAmJiBzZWxmLl9yZXNwb25zZVRpbWVvdXRUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHNlbGYuX3Jlc3BvbnNlVGltZW91dFRpbWVyKTtcbiAgICB9XG5cbiAgICBpZiAocmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluIElFOSwgcmVhZHMgdG8gYW55IHByb3BlcnR5IChlLmcuIHN0YXR1cykgb2ZmIG9mIGFuIGFib3J0ZWQgWEhSIHdpbGxcbiAgICAvLyByZXN1bHQgaW4gdGhlIGVycm9yIFwiQ291bGQgbm90IGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gZHVlIHRvIGVycm9yIGMwMGMwMjNmXCJcbiAgICBsZXQgc3RhdHVzO1xuICAgIHRyeSB7XG4gICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzO1xuICAgIH0gY2F0Y2gge1xuICAgICAgc3RhdHVzID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXR1cykge1xuICAgICAgaWYgKHNlbGYudGltZWRvdXQgfHwgc2VsZi5fYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgcmV0dXJuIHNlbGYuY3Jvc3NEb21haW5FcnJvcigpO1xuICAgIH1cblxuICAgIHNlbGYuZW1pdCgnZW5kJyk7XG4gIH0pO1xuXG4gIC8vIHByb2dyZXNzXG4gIGNvbnN0IGhhbmRsZVByb2dyZXNzID0gKGRpcmVjdGlvbiwgZSkgPT4ge1xuICAgIGlmIChlLnRvdGFsID4gMCkge1xuICAgICAgZS5wZXJjZW50ID0gKGUubG9hZGVkIC8gZS50b3RhbCkgKiAxMDA7XG5cbiAgICAgIGlmIChlLnBlcmNlbnQgPT09IDEwMCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdXBsb2FkVGltZW91dFRpbWVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICBzZWxmLmVtaXQoJ3Byb2dyZXNzJywgZSk7XG4gIH07XG5cbiAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCdwcm9ncmVzcycpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGhhbmRsZVByb2dyZXNzLmJpbmQobnVsbCwgJ2Rvd25sb2FkJykpO1xuICAgICAgaWYgKHhoci51cGxvYWQpIHtcbiAgICAgICAgeGhyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdwcm9ncmVzcycsXG4gICAgICAgICAgaGFuZGxlUHJvZ3Jlc3MuYmluZChudWxsLCAndXBsb2FkJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEFjY2Vzc2luZyB4aHIudXBsb2FkIGZhaWxzIGluIElFIGZyb20gYSB3ZWIgd29ya2VyLCBzbyBqdXN0IHByZXRlbmQgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgIC8vIFJlcG9ydGVkIGhlcmU6XG4gICAgICAvLyBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzgzNzI0NS94bWxodHRwcmVxdWVzdC11cGxvYWQtdGhyb3dzLWludmFsaWQtYXJndW1lbnQtd2hlbi11c2VkLWZyb20td2ViLXdvcmtlci1jb250ZXh0XG4gICAgfVxuICB9XG5cbiAgaWYgKHhoci51cGxvYWQpIHtcbiAgICB0aGlzLl9zZXRVcGxvYWRUaW1lb3V0KCk7XG4gIH1cblxuICAvLyBpbml0aWF0ZSByZXF1ZXN0XG4gIHRyeSB7XG4gICAgaWYgKHRoaXMudXNlcm5hbWUgJiYgdGhpcy5wYXNzd29yZCkge1xuICAgICAgeGhyLm9wZW4odGhpcy5tZXRob2QsIHRoaXMudXJsLCB0cnVlLCB0aGlzLnVzZXJuYW1lLCB0aGlzLnBhc3N3b3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeGhyLm9wZW4odGhpcy5tZXRob2QsIHRoaXMudXJsLCB0cnVlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIHNlZSAjMTE0OVxuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKGVycik7XG4gIH1cblxuICAvLyBDT1JTXG4gIGlmICh0aGlzLl93aXRoQ3JlZGVudGlhbHMpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuXG4gIC8vIGJvZHlcbiAgaWYgKFxuICAgICF0aGlzLl9mb3JtRGF0YSAmJlxuICAgIHRoaXMubWV0aG9kICE9PSAnR0VUJyAmJlxuICAgIHRoaXMubWV0aG9kICE9PSAnSEVBRCcgJiZcbiAgICB0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycgJiZcbiAgICAhdGhpcy5faXNIb3N0KGRhdGEpXG4gICkge1xuICAgIC8vIHNlcmlhbGl6ZSBzdHVmZlxuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5faGVhZGVyWydjb250ZW50LXR5cGUnXTtcbiAgICBsZXQgc2VyaWFsaXplID1cbiAgICAgIHRoaXMuX3NlcmlhbGl6ZXIgfHxcbiAgICAgIHJlcXVlc3Quc2VyaWFsaXplW2NvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXSA6ICcnXTtcbiAgICBpZiAoIXNlcmlhbGl6ZSAmJiBpc0pTT04oY29udGVudFR5cGUpKSB7XG4gICAgICBzZXJpYWxpemUgPSByZXF1ZXN0LnNlcmlhbGl6ZVsnYXBwbGljYXRpb24vanNvbiddO1xuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemUpIGRhdGEgPSBzZXJpYWxpemUoZGF0YSk7XG4gIH1cblxuICAvLyBzZXQgaGVhZGVyIGZpZWxkc1xuICBmb3IgKGNvbnN0IGZpZWxkIGluIHRoaXMuaGVhZGVyKSB7XG4gICAgaWYgKHRoaXMuaGVhZGVyW2ZpZWxkXSA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICBpZiAoaGFzT3duKHRoaXMuaGVhZGVyLCBmaWVsZCkpXG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihmaWVsZCwgdGhpcy5oZWFkZXJbZmllbGRdKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9yZXNwb25zZVR5cGUpIHtcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy5fcmVzcG9uc2VUeXBlO1xuICB9XG5cbiAgLy8gc2VuZCBzdHVmZlxuICB0aGlzLmVtaXQoJ3JlcXVlc3QnLCB0aGlzKTtcblxuICAvLyBJRTExIHhoci5zZW5kKHVuZGVmaW5lZCkgc2VuZHMgJ3VuZGVmaW5lZCcgc3RyaW5nIGFzIFBPU1QgcGF5bG9hZCAoaW5zdGVhZCBvZiBub3RoaW5nKVxuICAvLyBXZSBuZWVkIG51bGwgaGVyZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICB4aHIuc2VuZCh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogZGF0YSk7XG59O1xuXG5yZXF1ZXN0LmFnZW50ID0gKCkgPT4gbmV3IEFnZW50KCk7XG5cbmZvciAoY29uc3QgbWV0aG9kIG9mIFsnR0VUJywgJ1BPU1QnLCAnT1BUSU9OUycsICdQQVRDSCcsICdQVVQnLCAnREVMRVRFJ10pIHtcbiAgQWdlbnQucHJvdG90eXBlW21ldGhvZC50b0xvd2VyQ2FzZSgpXSA9IGZ1bmN0aW9uICh1cmwsIGZuKSB7XG4gICAgY29uc3QgcmVxdWVzdF8gPSBuZXcgcmVxdWVzdC5SZXF1ZXN0KG1ldGhvZCwgdXJsKTtcbiAgICB0aGlzLl9zZXREZWZhdWx0cyhyZXF1ZXN0Xyk7XG4gICAgaWYgKGZuKSB7XG4gICAgICByZXF1ZXN0Xy5lbmQoZm4pO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0XztcbiAgfTtcbn1cblxuQWdlbnQucHJvdG90eXBlLmRlbCA9IEFnZW50LnByb3RvdHlwZS5kZWxldGU7XG5cbi8qKlxuICogR0VUIGB1cmxgIHdpdGggb3B0aW9uYWwgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR8RnVuY3Rpb259IFtkYXRhXSBvciBmblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucmVxdWVzdC5nZXQgPSAodXJsLCBkYXRhLCBmbikgPT4ge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ0dFVCcsIHVybCk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZuID0gZGF0YTtcbiAgICBkYXRhID0gbnVsbDtcbiAgfVxuXG4gIGlmIChkYXRhKSByZXF1ZXN0Xy5xdWVyeShkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59O1xuXG4vKipcbiAqIEhFQUQgYHVybGAgd2l0aCBvcHRpb25hbCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZHxGdW5jdGlvbn0gW2RhdGFdIG9yIGZuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LmhlYWQgPSAodXJsLCBkYXRhLCBmbikgPT4ge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ0hFQUQnLCB1cmwpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IG51bGw7XG4gIH1cblxuICBpZiAoZGF0YSkgcmVxdWVzdF8ucXVlcnkoZGF0YSk7XG4gIGlmIChmbikgcmVxdWVzdF8uZW5kKGZuKTtcbiAgcmV0dXJuIHJlcXVlc3RfO1xufTtcblxuLyoqXG4gKiBPUFRJT05TIHF1ZXJ5IHRvIGB1cmxgIHdpdGggb3B0aW9uYWwgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR8RnVuY3Rpb259IFtkYXRhXSBvciBmblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucmVxdWVzdC5vcHRpb25zID0gKHVybCwgZGF0YSwgZm4pID0+IHtcbiAgY29uc3QgcmVxdWVzdF8gPSByZXF1ZXN0KCdPUFRJT05TJywgdXJsKTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm4gPSBkYXRhO1xuICAgIGRhdGEgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRhdGEpIHJlcXVlc3RfLnNlbmQoZGF0YSk7XG4gIGlmIChmbikgcmVxdWVzdF8uZW5kKGZuKTtcbiAgcmV0dXJuIHJlcXVlc3RfO1xufTtcblxuLyoqXG4gKiBERUxFVEUgYHVybGAgd2l0aCBvcHRpb25hbCBgZGF0YWAgYW5kIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfSBbZGF0YV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRlbCh1cmwsIGRhdGEsIGZuKSB7XG4gIGNvbnN0IHJlcXVlc3RfID0gcmVxdWVzdCgnREVMRVRFJywgdXJsKTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm4gPSBkYXRhO1xuICAgIGRhdGEgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRhdGEpIHJlcXVlc3RfLnNlbmQoZGF0YSk7XG4gIGlmIChmbikgcmVxdWVzdF8uZW5kKGZuKTtcbiAgcmV0dXJuIHJlcXVlc3RfO1xufVxuXG5yZXF1ZXN0LmRlbCA9IGRlbDtcbnJlcXVlc3QuZGVsZXRlID0gZGVsO1xuXG4vKipcbiAqIFBBVENIIGB1cmxgIHdpdGggb3B0aW9uYWwgYGRhdGFgIGFuZCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZH0gW2RhdGFdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LnBhdGNoID0gKHVybCwgZGF0YSwgZm4pID0+IHtcbiAgY29uc3QgcmVxdWVzdF8gPSByZXF1ZXN0KCdQQVRDSCcsIHVybCk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZuID0gZGF0YTtcbiAgICBkYXRhID0gbnVsbDtcbiAgfVxuXG4gIGlmIChkYXRhKSByZXF1ZXN0Xy5zZW5kKGRhdGEpO1xuICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gIHJldHVybiByZXF1ZXN0Xztcbn07XG5cbi8qKlxuICogUE9TVCBgdXJsYCB3aXRoIG9wdGlvbmFsIGBkYXRhYCBhbmQgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR9IFtkYXRhXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucmVxdWVzdC5wb3N0ID0gKHVybCwgZGF0YSwgZm4pID0+IHtcbiAgY29uc3QgcmVxdWVzdF8gPSByZXF1ZXN0KCdQT1NUJywgdXJsKTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm4gPSBkYXRhO1xuICAgIGRhdGEgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRhdGEpIHJlcXVlc3RfLnNlbmQoZGF0YSk7XG4gIGlmIChmbikgcmVxdWVzdF8uZW5kKGZuKTtcbiAgcmV0dXJuIHJlcXVlc3RfO1xufTtcblxuLyoqXG4gKiBQVVQgYHVybGAgd2l0aCBvcHRpb25hbCBgZGF0YWAgYW5kIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfEZ1bmN0aW9ufSBbZGF0YV0gb3IgZm5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QucHV0ID0gKHVybCwgZGF0YSwgZm4pID0+IHtcbiAgY29uc3QgcmVxdWVzdF8gPSByZXF1ZXN0KCdQVVQnLCB1cmwpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IG51bGw7XG4gIH1cblxuICBpZiAoZGF0YSkgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59O1xuIiwiY29uc3Qgc2VtdmVyID0gcmVxdWlyZSgnc2VtdmVyJyk7XG5cbi8qKlxuICogTW9kdWxlIG9mIG1peGVkLWluIGZ1bmN0aW9ucyBzaGFyZWQgYmV0d2VlbiBub2RlIGFuZCBjbGllbnQgY29kZVxuICovXG5jb25zdCB7IGlzT2JqZWN0LCBoYXNPd24gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlcXVlc3RCYXNlYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RCYXNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlcXVlc3RCYXNlYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3RCYXNlKCkgeyB9XG5cbi8qKlxuICogQ2xlYXIgcHJldmlvdXMgdGltZW91dC5cbiAqXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyKTtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwbG9hZFRpbWVvdXRUaW1lcik7XG4gIGRlbGV0ZSB0aGlzLl90aW1lcjtcbiAgZGVsZXRlIHRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyO1xuICBkZWxldGUgdGhpcy5fdXBsb2FkVGltZW91dFRpbWVyO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogT3ZlcnJpZGUgZGVmYXVsdCByZXNwb25zZSBib2R5IHBhcnNlclxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBpbmNvbWluZyBkYXRhIGludG8gcmVxdWVzdC5ib2R5XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIHRoaXMuX3BhcnNlciA9IGZuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IGZvcm1hdCBvZiBiaW5hcnkgcmVzcG9uc2UgYm9keS5cbiAqIEluIGJyb3dzZXIgdmFsaWQgZm9ybWF0cyBhcmUgJ2Jsb2InIGFuZCAnYXJyYXlidWZmZXInLFxuICogd2hpY2ggcmV0dXJuIEJsb2IgYW5kIEFycmF5QnVmZmVyLCByZXNwZWN0aXZlbHkuXG4gKlxuICogSW4gTm9kZSBhbGwgdmFsdWVzIHJlc3VsdCBpbiBCdWZmZXIuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICByZXEuZ2V0KCcvJylcbiAqICAgICAgICAucmVzcG9uc2VUeXBlKCdibG9iJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnJlc3BvbnNlVHlwZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB0aGlzLl9yZXNwb25zZVR5cGUgPSB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE92ZXJyaWRlIGRlZmF1bHQgcmVxdWVzdCBib2R5IHNlcmlhbGl6ZXJcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGNvbnZlcnQgZGF0YSBzZXQgdmlhIC5zZW5kIG9yIC5hdHRhY2ggaW50byBwYXlsb2FkIHRvIHNlbmRcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gIHRoaXMuX3NlcmlhbGl6ZXIgPSBmbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aW1lb3V0cy5cbiAqXG4gKiAtIHJlc3BvbnNlIHRpbWVvdXQgaXMgdGltZSBiZXR3ZWVuIHNlbmRpbmcgcmVxdWVzdCBhbmQgcmVjZWl2aW5nIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXNwb25zZS4gSW5jbHVkZXMgRE5TIGFuZCBjb25uZWN0aW9uIHRpbWUuXG4gKiAtIGRlYWRsaW5lIGlzIHRoZSB0aW1lIGZyb20gc3RhcnQgb2YgdGhlIHJlcXVlc3QgdG8gcmVjZWl2aW5nIHJlc3BvbnNlIGJvZHkgaW4gZnVsbC4gSWYgdGhlIGRlYWRsaW5lIGlzIHRvbyBzaG9ydCBsYXJnZSBmaWxlcyBtYXkgbm90IGxvYWQgYXQgYWxsIG9uIHNsb3cgY29ubmVjdGlvbnMuXG4gKiAtIHVwbG9hZCBpcyB0aGUgdGltZSAgc2luY2UgbGFzdCBiaXQgb2YgZGF0YSB3YXMgc2VudCBvciByZWNlaXZlZC4gVGhpcyB0aW1lb3V0IHdvcmtzIG9ubHkgaWYgZGVhZGxpbmUgdGltZW91dCBpcyBvZmZcbiAqXG4gKiBWYWx1ZSBvZiAwIG9yIGZhbHNlIG1lYW5zIG5vIHRpbWVvdXQuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ8T2JqZWN0fSBtcyBvciB7cmVzcG9uc2UsIGRlYWRsaW5lfVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS50aW1lb3V0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRoaXMuX3RpbWVvdXQgPSBvcHRpb25zO1xuICAgIHRoaXMuX3Jlc3BvbnNlVGltZW91dCA9IDA7XG4gICAgdGhpcy5fdXBsb2FkVGltZW91dCA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmb3IgKGNvbnN0IG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgaWYgKGhhc093bihvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgICBjYXNlICdkZWFkbGluZSc6XG4gICAgICAgICAgdGhpcy5fdGltZW91dCA9IG9wdGlvbnMuZGVhZGxpbmU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Jlc3BvbnNlJzpcbiAgICAgICAgICB0aGlzLl9yZXNwb25zZVRpbWVvdXQgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd1cGxvYWQnOlxuICAgICAgICAgIHRoaXMuX3VwbG9hZFRpbWVvdXQgPSBvcHRpb25zLnVwbG9hZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gdGltZW91dCBvcHRpb24nLCBvcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgbnVtYmVyIG9mIHJldHJ5IGF0dGVtcHRzIG9uIGVycm9yLlxuICpcbiAqIEZhaWxlZCByZXF1ZXN0cyB3aWxsIGJlIHJldHJpZWQgJ2NvdW50JyB0aW1lcyBpZiB0aW1lb3V0IG9yIGVyci5jb2RlID49IDUwMC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUucmV0cnkgPSBmdW5jdGlvbiAoY291bnQsIGZuKSB7XG4gIC8vIERlZmF1bHQgdG8gMSBpZiBubyBjb3VudCBwYXNzZWQgb3IgdHJ1ZVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCB8fCBjb3VudCA9PT0gdHJ1ZSkgY291bnQgPSAxO1xuICBpZiAoY291bnQgPD0gMCkgY291bnQgPSAwO1xuICB0aGlzLl9tYXhSZXRyaWVzID0gY291bnQ7XG4gIHRoaXMuX3JldHJpZXMgPSAwO1xuICB0aGlzLl9yZXRyeUNhbGxiYWNrID0gZm47XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIE5PVEU6IHdlIGRvIG5vdCBpbmNsdWRlIEVTT0NLRVRUSU1FRE9VVCBiZWNhdXNlIHRoYXQgaXMgZnJvbSBgcmVxdWVzdGAgcGFja2FnZVxuLy8gICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ290L3B1bGwvNTM3PlxuLy9cbi8vIE5PVEU6IHdlIGRvIG5vdCBpbmNsdWRlIEVBRERSSU5GTyBiZWNhdXNlIGl0IHdhcyByZW1vdmVkIGZyb20gbGlidXYgaW4gMjAxNFxuLy8gICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9saWJ1di9saWJ1di9jb21taXQvMDJlMWViZDQwYjgwN2JlNWFmNDYzNDNlYTg3MzMzMWIyZWU0ZTljMT5cbi8vICAgICAgIDxodHRwczovL2dpdGh1Yi5jb20vcmVxdWVzdC9yZXF1ZXN0L3NlYXJjaD9xPUVTT0NLRVRUSU1FRE9VVCZ1bnNjb3BlZF9xPUVTT0NLRVRUSU1FRE9VVD5cbi8vXG4vL1xuLy8gVE9ETzogZXhwb3NlIHRoZXNlIGFzIGNvbmZpZ3VyYWJsZSBkZWZhdWx0c1xuLy9cbmNvbnN0IEVSUk9SX0NPREVTID0gbmV3IFNldChbXG4gICdFVElNRURPVVQnLFxuICAnRUNPTk5SRVNFVCcsXG4gICdFQUREUklOVVNFJyxcbiAgJ0VDT05OUkVGVVNFRCcsXG4gICdFUElQRScsXG4gICdFTk9URk9VTkQnLFxuICAnRU5FVFVOUkVBQ0gnLFxuICAnRUFJX0FHQUlOJ1xuXSk7XG5cbmNvbnN0IFNUQVRVU19DT0RFUyA9IG5ldyBTZXQoW1xuICA0MDgsIDQxMywgNDI5LCA1MDAsIDUwMiwgNTAzLCA1MDQsIDUyMSwgNTIyLCA1MjRcbl0pO1xuXG4vLyBUT0RPOiB3ZSB3b3VsZCBuZWVkIHRvIG1ha2UgdGhpcyBlYXNpbHkgY29uZmlndXJhYmxlIGJlZm9yZSBhZGRpbmcgaXQgaW4gKGUuZy4gc29tZSBtaWdodCB3YW50IHRvIGFkZCBQT1NUKVxuLy8gY29uc3QgTUVUSE9EUyA9IG5ldyBTZXQoWydHRVQnLCAnUFVUJywgJ0hFQUQnLCAnREVMRVRFJywgJ09QVElPTlMnLCAnVFJBQ0UnXSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgcmVxdWVzdCBzaG91bGQgYmUgcmV0cmllZC5cbiAqIChJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2dvdCNyZXRyeSlcbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnIgYW4gZXJyb3JcbiAqIEBwYXJhbSB7UmVzcG9uc2V9IFtyZXNdIHJlc3BvbnNlXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaWYgc2VnbWVudCBzaG91bGQgYmUgcmV0cmllZFxuICovXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX3Nob3VsZFJldHJ5ID0gZnVuY3Rpb24gKGVycm9yLCByZXMpIHtcbiAgaWYgKCF0aGlzLl9tYXhSZXRyaWVzIHx8IHRoaXMuX3JldHJpZXMrKyA+PSB0aGlzLl9tYXhSZXRyaWVzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuX3JldHJ5Q2FsbGJhY2spIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSB0aGlzLl9yZXRyeUNhbGxiYWNrKGVycm9yLCByZXMpO1xuICAgICAgaWYgKG92ZXJyaWRlID09PSB0cnVlKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChvdmVycmlkZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIHVuZGVmaW5lZCBmYWxscyBiYWNrIHRvIGRlZmF1bHRzXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogd2Ugd291bGQgbmVlZCB0byBtYWtlIHRoaXMgZWFzaWx5IGNvbmZpZ3VyYWJsZSBiZWZvcmUgYWRkaW5nIGl0IGluIChlLmcuIHNvbWUgbWlnaHQgd2FudCB0byBhZGQgUE9TVClcbiAgLypcbiAgaWYgKFxuICAgIHRoaXMucmVxICYmXG4gICAgdGhpcy5yZXEubWV0aG9kICYmXG4gICAgIU1FVEhPRFMuaGFzKHRoaXMucmVxLm1ldGhvZC50b1VwcGVyQ2FzZSgpKVxuICApXG4gICAgcmV0dXJuIGZhbHNlO1xuICAqL1xuICBpZiAocmVzICYmIHJlcy5zdGF0dXMgJiYgU1RBVFVTX0NPREVTLmhhcyhyZXMuc3RhdHVzKSkgcmV0dXJuIHRydWU7XG4gIGlmIChlcnJvcikge1xuICAgIGlmIChlcnJvci5jb2RlICYmIEVSUk9SX0NPREVTLmhhcyhlcnJvci5jb2RlKSkgcmV0dXJuIHRydWU7XG4gICAgLy8gU3VwZXJhZ2VudCB0aW1lb3V0XG4gICAgaWYgKGVycm9yLnRpbWVvdXQgJiYgZXJyb3IuY29kZSA9PT0gJ0VDT05OQUJPUlRFRCcpIHJldHVybiB0cnVlO1xuICAgIGlmIChlcnJvci5jcm9zc0RvbWFpbikgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJldHJ5IHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fcmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG5cbiAgLy8gbm9kZVxuICBpZiAodGhpcy5yZXEpIHtcbiAgICB0aGlzLnJlcSA9IG51bGw7XG4gICAgdGhpcy5yZXEgPSB0aGlzLnJlcXVlc3QoKTtcbiAgfVxuXG4gIHRoaXMuX2Fib3J0ZWQgPSBmYWxzZTtcbiAgdGhpcy50aW1lZG91dCA9IGZhbHNlO1xuICB0aGlzLnRpbWVkb3V0RXJyb3IgPSBudWxsO1xuXG4gIHJldHVybiB0aGlzLl9lbmQoKTtcbn07XG5cbi8qKlxuICogUHJvbWlzZSBzdXBwb3J0XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3JlamVjdF1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gIGlmICghdGhpcy5fZnVsbGZpbGxlZFByb21pc2UpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAodGhpcy5fZW5kQ2FsbGVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdXYXJuaW5nOiBzdXBlcmFnZW50IHJlcXVlc3Qgd2FzIHNlbnQgdHdpY2UsIGJlY2F1c2UgYm90aCAuZW5kKCkgYW5kIC50aGVuKCkgd2VyZSBjYWxsZWQuIE5ldmVyIGNhbGwgLmVuZCgpIGlmIHlvdSB1c2UgcHJvbWlzZXMnXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2Z1bGxmaWxsZWRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2VsZi5vbignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhSZXRyaWVzICYmIHRoaXMuX21heFJldHJpZXMgPiB0aGlzLl9yZXRyaWVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGltZWRvdXQgJiYgdGhpcy50aW1lZG91dEVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KHRoaXMudGltZWRvdXRFcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0Fib3J0ZWQnKTtcbiAgICAgICAgZXJyb3IuY29kZSA9ICdBQk9SVEVEJztcbiAgICAgICAgZXJyb3Iuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gICAgICAgIGVycm9yLm1ldGhvZCA9IHRoaXMubWV0aG9kO1xuICAgICAgICBlcnJvci51cmwgPSB0aGlzLnVybDtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgc2VsZi5lbmQoKGVycm9yLCByZXMpID0+IHtcbiAgICAgICAgaWYgKGVycm9yKSByZWplY3QoZXJyb3IpO1xuICAgICAgICBlbHNlIHJlc29sdmUocmVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWRQcm9taXNlLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5jYXRjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBBbGxvdyBmb3IgZXh0ZW5zaW9uXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICBmbih0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUub2sgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdDYWxsYmFjayByZXF1aXJlZCcpO1xuICB0aGlzLl9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9pc1Jlc3BvbnNlT0sgPSBmdW5jdGlvbiAocmVzKSB7XG4gIGlmICghcmVzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuX29rQ2FsbGJhY2spIHtcbiAgICByZXR1cm4gdGhpcy5fb2tDYWxsYmFjayhyZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJlcy5zdGF0dXMgPj0gMjAwICYmIHJlcy5zdGF0dXMgPCAzMDA7XG59O1xuXG4vKipcbiAqIEdldCByZXF1ZXN0IGhlYWRlciBgZmllbGRgLlxuICogQ2FzZS1pbnNlbnNpdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICByZXR1cm4gdGhpcy5faGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xufTtcblxuLyoqXG4gKiBHZXQgY2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgYGZpZWxkYCB2YWx1ZS5cbiAqIFRoaXMgaXMgYSBkZXByZWNhdGVkIGludGVybmFsIEFQSS4gVXNlIGAuZ2V0KGZpZWxkKWAgaW5zdGVhZC5cbiAqXG4gKiAoZ2V0SGVhZGVyIGlzIG5vIGxvbmdlciB1c2VkIGludGVybmFsbHkgYnkgdGhlIHN1cGVyYWdlbnQgY29kZSBiYXNlKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKiBAZGVwcmVjYXRlZFxuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5nZXRIZWFkZXIgPSBSZXF1ZXN0QmFzZS5wcm90b3R5cGUuZ2V0O1xuXG4vKipcbiAqIFNldCBoZWFkZXIgYGZpZWxkYCB0byBgdmFsYCwgb3IgbXVsdGlwbGUgZmllbGRzIHdpdGggb25lIG9iamVjdC5cbiAqIENhc2UtaW5zZW5zaXRpdmUuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICByZXEuZ2V0KCcvJylcbiAqICAgICAgICAuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpXG4gKiAgICAgICAgLnNldCgnWC1BUEktS2V5JywgJ2Zvb2JhcicpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXEuZ2V0KCcvJylcbiAqICAgICAgICAuc2V0KHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsICdYLUFQSS1LZXknOiAnZm9vYmFyJyB9KVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZmllbGRcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZpZWxkLCB2YWx1ZSkge1xuICBpZiAoaXNPYmplY3QoZmllbGQpKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGQpIHtcbiAgICAgIGlmIChoYXNPd24oZmllbGQsIGtleSkpIHRoaXMuc2V0KGtleSwgZmllbGRba2V5XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aGlzLl9oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbiAgdGhpcy5oZWFkZXJbZmllbGRdID0gdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgaGVhZGVyIGBmaWVsZGAuXG4gKiBDYXNlLWluc2Vuc2l0aXZlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgICByZXEuZ2V0KCcvJylcbiAqICAgICAgICAudW5zZXQoJ1VzZXItQWdlbnQnKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZCBmaWVsZCBuYW1lXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS51bnNldCA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICBkZWxldGUgdGhpcy5faGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICBkZWxldGUgdGhpcy5oZWFkZXJbZmllbGRdO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogV3JpdGUgdGhlIGZpZWxkIGBuYW1lYCBhbmQgYHZhbGAsIG9yIG11bHRpcGxlIGZpZWxkcyB3aXRoIG9uZSBvYmplY3RcbiAqIGZvciBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiByZXF1ZXN0IGJvZGllcy5cbiAqXG4gKiBgYGAganNcbiAqIHJlcXVlc3QucG9zdCgnL3VwbG9hZCcpXG4gKiAgIC5maWVsZCgnZm9vJywgJ2JhcicpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIHJlcXVlc3QucG9zdCgnL3VwbG9hZCcpXG4gKiAgIC5maWVsZCh7IGZvbzogJ2JhcicsIGJhejogJ3F1eCcgfSlcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IG5hbWUgbmFtZSBvZiBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd8QmxvYnxGaWxlfEJ1ZmZlcnxmcy5SZWFkU3RyZWFtfSB2YWwgdmFsdWUgb2YgZmllbGRcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zIGV4dHJhIG9wdGlvbnMsIGUuZy4gJ2Jsb2InXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5maWVsZCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBuYW1lIHNob3VsZCBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gb2JqZWN0LlxuICBpZiAobmFtZSA9PT0gbnVsbCB8fCB1bmRlZmluZWQgPT09IG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy5maWVsZChuYW1lLCB2YWwpIG5hbWUgY2FuIG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIi5maWVsZCgpIGNhbid0IGJlIHVzZWQgaWYgLnNlbmQoKSBpcyB1c2VkLiBQbGVhc2UgdXNlIG9ubHkgLnNlbmQoKSBvciBvbmx5IC5maWVsZCgpICYgLmF0dGFjaCgpXCJcbiAgICApO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0KG5hbWUpKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZSkge1xuICAgICAgaWYgKGhhc093bihuYW1lLCBrZXkpKSB0aGlzLmZpZWxkKGtleSwgbmFtZVtrZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgaSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKGhhc093bih2YWx1ZSwgaSkpIHRoaXMuZmllbGQobmFtZSwgdmFsdWVbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdmFsIHNob3VsZCBiZSBkZWZpbmVkIG5vd1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdW5kZWZpbmVkID09PSB2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignLmZpZWxkKG5hbWUsIHZhbCkgdmFsIGNhbiBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8vZml4IGh0dHBzOi8vZ2l0aHViLmNvbS92aXNpb25tZWRpYS9zdXBlcmFnZW50L2lzc3Vlcy8xNjgwXG4gIGlmIChvcHRpb25zKSB0aGlzLl9nZXRGb3JtRGF0YSgpLmFwcGVuZChuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIGVsc2UgdGhpcy5fZ2V0Rm9ybURhdGEoKS5hcHBlbmQobmFtZSwgdmFsdWUpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBYm9ydCB0aGUgcmVxdWVzdCwgYW5kIGNsZWFyIHBvdGVudGlhbCB0aW1lb3V0LlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IHJlcXVlc3RcbiAqIEBhcGkgcHVibGljXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX2Fib3J0ZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2Fib3J0ZWQgPSB0cnVlO1xuICBpZiAodGhpcy54aHIpIHRoaXMueGhyLmFib3J0KCk7IC8vIGJyb3dzZXJcbiAgaWYgKHRoaXMucmVxKSB7XG4gICAgLy8gTm9kZSB2MTMgaGFzIG1ham9yIGRpZmZlcmVuY2VzIGluIGBhYm9ydCgpYFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxMi54L2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92MTMueC9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvdjE0LngvbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qc1xuICAgIC8vIChpZiB5b3UgcnVuIGEgZGlmZiBhY3Jvc3MgdGhlc2UgeW91IHdpbGwgc2VlIHRoZSBkaWZmZXJlbmNlcylcbiAgICAvL1xuICAgIC8vIFJlZmVyZW5jZXM6XG4gICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMzE2MzA+XG4gICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS92aXNpb25tZWRpYS9zdXBlcmFnZW50L3B1bGwvMTA4NC9jb21taXRzL2RjMTg2NzlhN2M1Y2NmYzYwNDZkODgyMDE1ZTUxMjY4ODg5NzNiYzg+XG4gICAgLy9cbiAgICAvLyBUaGFua3MgdG8gQHNoYWRvd2dhdGUxNSBhbmQgQG5pZnR5bGV0dHVjZVxuICAgIGlmIChcbiAgICAgIHNlbXZlci5ndGUocHJvY2Vzcy52ZXJzaW9uLCAndjEzLjAuMCcpICYmXG4gICAgICBzZW12ZXIubHQocHJvY2Vzcy52ZXJzaW9uLCAndjE0LjAuMCcpXG4gICAgKSB7XG4gICAgICAvLyBOb3RlIHRoYXQgdGhlIHJlYXNvbiB0aGlzIGRvZXNuJ3Qgd29yayBpcyBiZWNhdXNlIGluIHYxMyBhcyBjb21wYXJlZCB0byB2MTRcbiAgICAgIC8vIHRoZXJlIGlzIG5vIGBjYWxsYmFjayA9IG5vcGAgc2V0IGluIGVuZC1vZi1zdHJlYW0uanMgYWJvdmVcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1N1cGVyYWdlbnQgZG9lcyBub3Qgd29yayBpbiB2MTMgcHJvcGVybHkgd2l0aCBhYm9ydCgpIGR1ZSB0byBOb2RlLmpzIGNvcmUgY2hhbmdlcydcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChzZW12ZXIuZ3RlKHByb2Nlc3MudmVyc2lvbiwgJ3YxNC4wLjAnKSkge1xuICAgICAgLy8gV2UgaGF2ZSB0byBtYW51YWxseSBzZXQgYGRlc3Ryb3llZGAgdG8gYHRydWVgIGluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmtcbiAgICAgIC8vIChzZWUgY29yZSBpbnRlcm5hbHMgb2YgZW5kLW9mLXN0cmVhbS5qcyBhYm92ZSBpbiB2MTQgYnJhbmNoIGFzIGNvbXBhcmVkIHRvIHYxMilcbiAgICAgIHRoaXMucmVxLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5yZXEuYWJvcnQoKTsgLy8gbm9kZVxuICB9XG5cbiAgdGhpcy5jbGVhclRpbWVvdXQoKTtcbiAgdGhpcy5lbWl0KCdhYm9ydCcpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fYXV0aCA9IGZ1bmN0aW9uICh1c2VyLCBwYXNzLCBvcHRpb25zLCBiYXNlNjRFbmNvZGVyKSB7XG4gIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgY2FzZSAnYmFzaWMnOlxuICAgICAgdGhpcy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmFzaWMgJHtiYXNlNjRFbmNvZGVyKGAke3VzZXJ9OiR7cGFzc31gKX1gKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcjtcbiAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXNzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWFyZXInOiAvLyB1c2FnZSB3b3VsZCBiZSAuYXV0aChhY2Nlc3NUb2tlbiwgeyB0eXBlOiAnYmVhcmVyJyB9KVxuICAgICAgdGhpcy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dXNlcn1gKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBFbmFibGUgdHJhbnNtaXNzaW9uIG9mIGNvb2tpZXMgd2l0aCB4LWRvbWFpbiByZXF1ZXN0cy5cbiAqXG4gKiBOb3RlIHRoYXQgZm9yIHRoaXMgdG8gd29yayB0aGUgb3JpZ2luIG11c3Qgbm90IGJlXG4gKiB1c2luZyBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiIHdpdGggYSB3aWxkY2FyZCxcbiAqIGFuZCBhbHNvIG11c3Qgc2V0IFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNcIlxuICogdG8gXCJ0cnVlXCIuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUud2l0aENyZWRlbnRpYWxzID0gZnVuY3Rpb24gKG9uKSB7XG4gIC8vIFRoaXMgaXMgYnJvd3Nlci1vbmx5IGZ1bmN0aW9uYWxpdHkuIE5vZGUgc2lkZSBpcyBuby1vcC5cbiAgaWYgKG9uID09PSB1bmRlZmluZWQpIG9uID0gdHJ1ZTtcbiAgdGhpcy5fd2l0aENyZWRlbnRpYWxzID0gb247XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1heCByZWRpcmVjdHMgdG8gYG5gLiBEb2VzIG5vdGhpbmcgaW4gYnJvd3NlciBYSFIgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG5cbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUucmVkaXJlY3RzID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhpcy5fbWF4UmVkaXJlY3RzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1heGltdW0gc2l6ZSBvZiBidWZmZXJlZCByZXNwb25zZSBib2R5LCBpbiBieXRlcy4gQ291bnRzIHVuY29tcHJlc3NlZCBzaXplLlxuICogRGVmYXVsdCAyMDBNQi5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbiBudW1iZXIgb2YgYnl0ZXNcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICovXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUubWF4UmVzcG9uc2VTaXplID0gZnVuY3Rpb24gKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQnKTtcbiAgfVxuXG4gIHRoaXMuX21heFJlc3BvbnNlU2l6ZSA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IHRvIGEgcGxhaW4gamF2YXNjcmlwdCBvYmplY3QgKG5vdCBKU09OIHN0cmluZykgb2Ygc2NhbGFyIHByb3BlcnRpZXMuXG4gKiBOb3RlIGFzIHRoaXMgbWV0aG9kIGlzIGRlc2lnbmVkIHRvIHJldHVybiBhIHVzZWZ1bCBub24tdGhpcyB2YWx1ZSxcbiAqIGl0IGNhbm5vdCBiZSBjaGFpbmVkLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gZGVzY3JpYmluZyBtZXRob2QsIHVybCwgYW5kIGRhdGEgb2YgdGhpcyByZXF1ZXN0XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICB1cmw6IHRoaXMudXJsLFxuICAgIGRhdGE6IHRoaXMuX2RhdGEsXG4gICAgaGVhZGVyczogdGhpcy5faGVhZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFNlbmQgYGRhdGFgIGFzIHRoZSByZXF1ZXN0IGJvZHksIGRlZmF1bHRpbmcgdGhlIGAudHlwZSgpYCB0byBcImpzb25cIiB3aGVuXG4gKiBhbiBvYmplY3QgaXMgZ2l2ZW4uXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICAgLy8gbWFudWFsIGpzb25cbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAudHlwZSgnanNvbicpXG4gKiAgICAgICAgIC5zZW5kKCd7XCJuYW1lXCI6XCJ0alwifScpXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogICAgICAgLy8gYXV0byBqc29uXG4gKiAgICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAgLnNlbmQoeyBuYW1lOiAndGonIH0pXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogICAgICAgLy8gbWFudWFsIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC50eXBlKCdmb3JtJylcbiAqICAgICAgICAgLnNlbmQoJ25hbWU9dGonKVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIGF1dG8geC13d3ctZm9ybS11cmxlbmNvZGVkXG4gKiAgICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAgLnR5cGUoJ2Zvcm0nKVxuICogICAgICAgICAuc2VuZCh7IG5hbWU6ICd0aicgfSlcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBkZWZhdWx0cyB0byB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgLnNlbmQoJ25hbWU9dG9iaScpXG4gKiAgICAgICAgLnNlbmQoJ3NwZWNpZXM9ZmVycmV0JylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZGF0YVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGlzT2JqZWN0XyA9IGlzT2JqZWN0KGRhdGEpO1xuICBsZXQgdHlwZSA9IHRoaXMuX2hlYWRlclsnY29udGVudC10eXBlJ107XG5cbiAgaWYgKHRoaXMuX2Zvcm1EYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCIuc2VuZCgpIGNhbid0IGJlIHVzZWQgaWYgLmF0dGFjaCgpIG9yIC5maWVsZCgpIGlzIHVzZWQuIFBsZWFzZSB1c2Ugb25seSAuc2VuZCgpIG9yIG9ubHkgLmZpZWxkKCkgJiAuYXR0YWNoKClcIlxuICAgICk7XG4gIH1cblxuICBpZiAoaXNPYmplY3RfICYmICF0aGlzLl9kYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc0hvc3QoZGF0YSkpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB7fTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF0YSAmJiB0aGlzLl9kYXRhICYmIHRoaXMuX2lzSG9zdCh0aGlzLl9kYXRhKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IG1lcmdlIHRoZXNlIHNlbmQgY2FsbHNcIik7XG4gIH1cblxuICAvLyBtZXJnZVxuICBpZiAoaXNPYmplY3RfICYmIGlzT2JqZWN0KHRoaXMuX2RhdGEpKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgaWYgKGhhc093bihkYXRhLCBrZXkpKSB0aGlzLl9kYXRhW2tleV0gPSBkYXRhW2tleV07XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIC8vIGRlZmF1bHQgdG8geC13d3ctZm9ybS11cmxlbmNvZGVkXG4gICAgaWYgKCF0eXBlKSB0aGlzLnR5cGUoJ2Zvcm0nKTtcbiAgICB0eXBlID0gdGhpcy5faGVhZGVyWydjb250ZW50LXR5cGUnXTtcbiAgICBpZiAodHlwZSkgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YSA/IGAke3RoaXMuX2RhdGF9JiR7ZGF0YX1gIDogZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YSA9ICh0aGlzLl9kYXRhIHx8ICcnKSArIGRhdGE7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICB9XG5cbiAgaWYgKCFpc09iamVjdF8gfHwgdGhpcy5faXNIb3N0KGRhdGEpKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBkZWZhdWx0IHRvIGpzb25cbiAgaWYgKCF0eXBlKSB0aGlzLnR5cGUoJ2pzb24nKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNvcnQgYHF1ZXJ5c3RyaW5nYCBieSB0aGUgc29ydCBmdW5jdGlvblxuICpcbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgICAvLyBkZWZhdWx0IG9yZGVyXG4gKiAgICAgICByZXF1ZXN0LmdldCgnL3VzZXInKVxuICogICAgICAgICAucXVlcnkoJ25hbWU9TmljaycpXG4gKiAgICAgICAgIC5xdWVyeSgnc2VhcmNoPU1hbm55JylcbiAqICAgICAgICAgLnNvcnRRdWVyeSgpXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogICAgICAgLy8gY3VzdG9taXplZCBzb3J0IGZ1bmN0aW9uXG4gKiAgICAgICByZXF1ZXN0LmdldCgnL3VzZXInKVxuICogICAgICAgICAucXVlcnkoJ25hbWU9TmljaycpXG4gKiAgICAgICAgIC5xdWVyeSgnc2VhcmNoPU1hbm55JylcbiAqICAgICAgICAgLnNvcnRRdWVyeShmdW5jdGlvbihhLCBiKXtcbiAqICAgICAgICAgICByZXR1cm4gYS5sZW5ndGggLSBiLmxlbmd0aDtcbiAqICAgICAgICAgfSlcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc29ydFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zb3J0UXVlcnkgPSBmdW5jdGlvbiAoc29ydCkge1xuICAvLyBfc29ydCBkZWZhdWx0IHRvIHRydWUgYnV0IG90aGVyd2lzZSBjYW4gYmUgYSBmdW5jdGlvbiBvciBib29sZWFuXG4gIHRoaXMuX3NvcnQgPSB0eXBlb2Ygc29ydCA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogc29ydDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENvbXBvc2UgcXVlcnlzdHJpbmcgdG8gYXBwZW5kIHRvIHJlcS51cmxcbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9maW5hbGl6ZVF1ZXJ5U3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBxdWVyeSA9IHRoaXMuX3F1ZXJ5LmpvaW4oJyYnKTtcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgdGhpcy51cmwgKz0gKHRoaXMudXJsLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPycpICsgcXVlcnk7XG4gIH1cblxuICB0aGlzLl9xdWVyeS5sZW5ndGggPSAwOyAvLyBNYWtlcyB0aGUgY2FsbCBpZGVtcG90ZW50XG5cbiAgaWYgKHRoaXMuX3NvcnQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudXJsLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgcXVlcnlBcnJheSA9IHRoaXMudXJsLnNsaWNlKGluZGV4ICsgMSkuc3BsaXQoJyYnKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc29ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBxdWVyeUFycmF5LnNvcnQodGhpcy5fc29ydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeUFycmF5LnNvcnQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5zbGljZSgwLCBpbmRleCkgKyAnPycgKyBxdWVyeUFycmF5LmpvaW4oJyYnKTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIEZvciBiYWNrd2FyZHMgY29tcGF0IG9ubHlcblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fYXBwZW5kUXVlcnlTdHJpbmcgPSAoKSA9PiB7XG4gIGNvbnNvbGUud2FybignVW5zdXBwb3J0ZWQnKTtcbn07XG5cbi8qKlxuICogSW52b2tlIGNhbGxiYWNrIHdpdGggdGltZW91dCBlcnJvci5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX3RpbWVvdXRFcnJvciA9IGZ1bmN0aW9uIChyZWFzb24sIHRpbWVvdXQsIGVycm5vKSB7XG4gIGlmICh0aGlzLl9hYm9ydGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYCR7cmVhc29uICsgdGltZW91dH1tcyBleGNlZWRlZGApO1xuICBlcnJvci50aW1lb3V0ID0gdGltZW91dDtcbiAgZXJyb3IuY29kZSA9ICdFQ09OTkFCT1JURUQnO1xuICBlcnJvci5lcnJubyA9IGVycm5vO1xuICB0aGlzLnRpbWVkb3V0ID0gdHJ1ZTtcbiAgdGhpcy50aW1lZG91dEVycm9yID0gZXJyb3I7XG4gIHRoaXMuYWJvcnQoKTtcbiAgdGhpcy5jYWxsYmFjayhlcnJvcik7XG59O1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX3NldFRpbWVvdXRzID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzZWxmID0gdGhpcztcblxuICAvLyBkZWFkbGluZVxuICBpZiAodGhpcy5fdGltZW91dCAmJiAhdGhpcy5fdGltZXIpIHtcbiAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2VsZi5fdGltZW91dEVycm9yKCdUaW1lb3V0IG9mICcsIHNlbGYuX3RpbWVvdXQsICdFVElNRScpO1xuICAgIH0sIHRoaXMuX3RpbWVvdXQpO1xuICB9XG5cbiAgLy8gcmVzcG9uc2UgdGltZW91dFxuICBpZiAodGhpcy5fcmVzcG9uc2VUaW1lb3V0ICYmICF0aGlzLl9yZXNwb25zZVRpbWVvdXRUaW1lcikge1xuICAgIHRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZWxmLl90aW1lb3V0RXJyb3IoXG4gICAgICAgICdSZXNwb25zZSB0aW1lb3V0IG9mICcsXG4gICAgICAgIHNlbGYuX3Jlc3BvbnNlVGltZW91dCxcbiAgICAgICAgJ0VUSU1FRE9VVCdcbiAgICAgICk7XG4gICAgfSwgdGhpcy5fcmVzcG9uc2VUaW1lb3V0KTtcbiAgfVxufTtcbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlc3BvbnNlQmFzZWAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBSZXNwb25zZUJhc2U7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgUmVzcG9uc2VCYXNlYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlc3BvbnNlQmFzZSgpIHt9XG5cbi8qKlxuICogR2V0IGNhc2UtaW5zZW5zaXRpdmUgYGZpZWxkYCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVzcG9uc2VCYXNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcbiAgcmV0dXJuIHRoaXMuaGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xufTtcblxuLyoqXG4gKiBTZXQgaGVhZGVyIHJlbGF0ZWQgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gYC50eXBlYCB0aGUgY29udGVudCB0eXBlIHdpdGhvdXQgcGFyYW1zXG4gKlxuICogQSByZXNwb25zZSBvZiBcIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiXG4gKiB3aWxsIHByb3ZpZGUgeW91IHdpdGggYSBgLnR5cGVgIG9mIFwidGV4dC9wbGFpblwiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBoZWFkZXJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlc3BvbnNlQmFzZS5wcm90b3R5cGUuX3NldEhlYWRlclByb3BlcnRpZXMgPSBmdW5jdGlvbiAoaGVhZGVyKSB7XG4gIC8vIFRPRE86IG1vYXIhXG4gIC8vIFRPRE86IG1ha2UgdGhpcyBhIHV0aWxcblxuICAvLyBjb250ZW50LXR5cGVcbiAgY29uc3QgY3QgPSBoZWFkZXJbJ2NvbnRlbnQtdHlwZSddIHx8ICcnO1xuICB0aGlzLnR5cGUgPSB1dGlscy50eXBlKGN0KTtcblxuICAvLyBwYXJhbXNcbiAgY29uc3QgcGFyYW1ldGVycyA9IHV0aWxzLnBhcmFtcyhjdCk7XG4gIGZvciAoY29uc3Qga2V5IGluIHBhcmFtZXRlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtZXRlcnMsIGtleSkpXG4gICAgICB0aGlzW2tleV0gPSBwYXJhbWV0ZXJzW2tleV07XG4gIH1cblxuICB0aGlzLmxpbmtzID0ge307XG5cbiAgLy8gbGlua3NcbiAgdHJ5IHtcbiAgICBpZiAoaGVhZGVyLmxpbmspIHtcbiAgICAgIHRoaXMubGlua3MgPSB1dGlscy5wYXJzZUxpbmtzKGhlYWRlci5saW5rKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG59O1xuXG4vKipcbiAqIFNldCBmbGFncyBzdWNoIGFzIGAub2tgIGJhc2VkIG9uIGBzdGF0dXNgLlxuICpcbiAqIEZvciBleGFtcGxlIGEgMnh4IHJlc3BvbnNlIHdpbGwgZ2l2ZSB5b3UgYSBgLm9rYCBvZiBfX3RydWVfX1xuICogd2hlcmVhcyA1eHggd2lsbCBiZSBfX2ZhbHNlX18gYW5kIGAuZXJyb3JgIHdpbGwgYmUgX190cnVlX18uIFRoZVxuICogYC5jbGllbnRFcnJvcmAgYW5kIGAuc2VydmVyRXJyb3JgIGFyZSBhbHNvIGF2YWlsYWJsZSB0byBiZSBtb3JlXG4gKiBzcGVjaWZpYywgYW5kIGAuc3RhdHVzVHlwZWAgaXMgdGhlIGNsYXNzIG9mIGVycm9yIHJhbmdpbmcgZnJvbSAxLi41XG4gKiBzb21ldGltZXMgdXNlZnVsIGZvciBtYXBwaW5nIHJlc3BvbmQgY29sb3JzIGV0Yy5cbiAqXG4gKiBcInN1Z2FyXCIgcHJvcGVydGllcyBhcmUgYWxzbyBkZWZpbmVkIGZvciBjb21tb24gY2FzZXMuIEN1cnJlbnRseSBwcm92aWRpbmc6XG4gKlxuICogICAtIC5ub0NvbnRlbnRcbiAqICAgLSAuYmFkUmVxdWVzdFxuICogICAtIC51bmF1dGhvcml6ZWRcbiAqICAgLSAubm90QWNjZXB0YWJsZVxuICogICAtIC5ub3RGb3VuZFxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdGF0dXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlc3BvbnNlQmFzZS5wcm90b3R5cGUuX3NldFN0YXR1c1Byb3BlcnRpZXMgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gIGNvbnN0IHR5cGUgPSBNYXRoLnRydW5jKHN0YXR1cyAvIDEwMCk7XG5cbiAgLy8gc3RhdHVzIC8gY2xhc3NcbiAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzO1xuICB0aGlzLnN0YXR1cyA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgdGhpcy5zdGF0dXNUeXBlID0gdHlwZTtcblxuICAvLyBiYXNpY3NcbiAgdGhpcy5pbmZvID0gdHlwZSA9PT0gMTtcbiAgdGhpcy5vayA9IHR5cGUgPT09IDI7XG4gIHRoaXMucmVkaXJlY3QgPSB0eXBlID09PSAzO1xuICB0aGlzLmNsaWVudEVycm9yID0gdHlwZSA9PT0gNDtcbiAgdGhpcy5zZXJ2ZXJFcnJvciA9IHR5cGUgPT09IDU7XG4gIHRoaXMuZXJyb3IgPSB0eXBlID09PSA0IHx8IHR5cGUgPT09IDUgPyB0aGlzLnRvRXJyb3IoKSA6IGZhbHNlO1xuXG4gIC8vIHN1Z2FyXG4gIHRoaXMuY3JlYXRlZCA9IHN0YXR1cyA9PT0gMjAxO1xuICB0aGlzLmFjY2VwdGVkID0gc3RhdHVzID09PSAyMDI7XG4gIHRoaXMubm9Db250ZW50ID0gc3RhdHVzID09PSAyMDQ7XG4gIHRoaXMuYmFkUmVxdWVzdCA9IHN0YXR1cyA9PT0gNDAwO1xuICB0aGlzLnVuYXV0aG9yaXplZCA9IHN0YXR1cyA9PT0gNDAxO1xuICB0aGlzLm5vdEFjY2VwdGFibGUgPSBzdGF0dXMgPT09IDQwNjtcbiAgdGhpcy5mb3JiaWRkZW4gPSBzdGF0dXMgPT09IDQwMztcbiAgdGhpcy5ub3RGb3VuZCA9IHN0YXR1cyA9PT0gNDA0O1xuICB0aGlzLnVucHJvY2Vzc2FibGVFbnRpdHkgPSBzdGF0dXMgPT09IDQyMjtcbn07XG4iLCIvKipcbiAqIFJldHVybiB0aGUgbWltZSB0eXBlIGZvciB0aGUgZ2l2ZW4gYHN0cmAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy50eXBlID0gKHN0cmluZ18pID0+IHN0cmluZ18uc3BsaXQoLyAqOyAqLykuc2hpZnQoKTtcblxuLyoqXG4gKiBSZXR1cm4gaGVhZGVyIGZpZWxkIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7T2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5wYXJhbXMgPSAodmFsdWUpID0+IHtcbiAgY29uc3Qgb2JqZWN0ID0ge307XG4gIGZvciAoY29uc3Qgc3RyaW5nXyBvZiB2YWx1ZS5zcGxpdCgvICo7ICovKSkge1xuICAgIGNvbnN0IHBhcnRzID0gc3RyaW5nXy5zcGxpdCgvICo9ICovKTtcbiAgICBjb25zdCBrZXkgPSBwYXJ0cy5zaGlmdCgpO1xuICAgIGNvbnN0IHZhbHVlID0gcGFydHMuc2hpZnQoKTtcblxuICAgIGlmIChrZXkgJiYgdmFsdWUpIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufTtcblxuLyoqXG4gKiBQYXJzZSBMaW5rIGhlYWRlciBmaWVsZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7T2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5wYXJzZUxpbmtzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IG9iamVjdCA9IHt9O1xuICBmb3IgKGNvbnN0IHN0cmluZ18gb2YgdmFsdWUuc3BsaXQoLyAqLCAqLykpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHN0cmluZ18uc3BsaXQoLyAqOyAqLyk7XG4gICAgY29uc3QgdXJsID0gcGFydHNbMF0uc2xpY2UoMSwgLTEpO1xuICAgIGNvbnN0IHJlbCA9IHBhcnRzWzFdLnNwbGl0KC8gKj0gKi8pWzFdLnNsaWNlKDEsIC0xKTtcbiAgICBvYmplY3RbcmVsXSA9IHVybDtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59O1xuXG4vKipcbiAqIFN0cmlwIGNvbnRlbnQgcmVsYXRlZCBmaWVsZHMgZnJvbSBgaGVhZGVyYC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyXG4gKiBAcmV0dXJuIHtPYmplY3R9IGhlYWRlclxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jbGVhbkhlYWRlciA9IChoZWFkZXIsIGNoYW5nZXNPcmlnaW4pID0+IHtcbiAgZGVsZXRlIGhlYWRlclsnY29udGVudC10eXBlJ107XG4gIGRlbGV0ZSBoZWFkZXJbJ2NvbnRlbnQtbGVuZ3RoJ107XG4gIGRlbGV0ZSBoZWFkZXJbJ3RyYW5zZmVyLWVuY29kaW5nJ107XG4gIGRlbGV0ZSBoZWFkZXIuaG9zdDtcbiAgLy8gc2VjdWlydHlcbiAgaWYgKGNoYW5nZXNPcmlnaW4pIHtcbiAgICBkZWxldGUgaGVhZGVyLmF1dGhvcml6YXRpb247XG4gICAgZGVsZXRlIGhlYWRlci5jb29raWU7XG4gIH1cblxuICByZXR1cm4gaGVhZGVyO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5leHBvcnRzLmlzT2JqZWN0ID0gKG9iamVjdCkgPT4ge1xuICByZXR1cm4gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xufTtcblxuLyoqXG4gKiBPYmplY3QuaGFzT3duIGZhbGxiYWNrL3BvbHlmaWxsLlxuICpcbiAqIEB0eXBlIHsob2JqZWN0OiBvYmplY3QsIHByb3BlcnR5OiBzdHJpbmcpID0+IGJvb2xlYW59IG9iamVjdFxuICogQGFwaSBwcml2YXRlXG4gKi9cbmV4cG9ydHMuaGFzT3duID1cbiAgT2JqZWN0Lmhhc093biB8fFxuICBmdW5jdGlvbiAob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXcgT2JqZWN0KG9iamVjdCksIHByb3BlcnR5KTtcbiAgfTtcblxuZXhwb3J0cy5taXhpbiA9ICh0YXJnZXQsIHNvdXJjZSkgPT4ge1xuICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoZXhwb3J0cy5oYXNPd24oc291cmNlLCBrZXkpKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gdG9BcnJheVxuXG5mdW5jdGlvbiB0b0FycmF5KGxpc3QsIGluZGV4KSB7XG4gICAgdmFyIGFycmF5ID0gW11cblxuICAgIGluZGV4ID0gaW5kZXggfHwgMFxuXG4gICAgZm9yICh2YXIgaSA9IGluZGV4IHx8IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFycmF5W2kgLSBpbmRleF0gPSBsaXN0W2ldXG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5XG59XG4iLCJcbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBkZXByZWNhdGU7XG5cbi8qKlxuICogTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbiAqIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS5ub0RlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS50aHJvd0RlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGRlcHJlY2F0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIHRocm93IGFuIEVycm9yIHdoZW4gaW52b2tlZC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLnRyYWNlRGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gZGVwcmVjYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgaW52b2tlIGBjb25zb2xlLnRyYWNlKClgIGluc3RlYWQgb2YgYGNvbnNvbGUuZXJyb3IoKWAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSB0aGUgZnVuY3Rpb24gdG8gZGVwcmVjYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gbXNnIC0gdGhlIHN0cmluZyB0byBwcmludCB0byB0aGUgY29uc29sZSB3aGVuIGBmbmAgaXMgaW52b2tlZFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBhIG5ldyBcImRlcHJlY2F0ZWRcIiB2ZXJzaW9uIG9mIGBmbmBcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGVwcmVjYXRlIChmbiwgbXNnKSB7XG4gIGlmIChjb25maWcoJ25vRGVwcmVjYXRpb24nKSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKGNvbmZpZygndGhyb3dEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcoJ3RyYWNlRGVwcmVjYXRpb24nKSkge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4obXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGBsb2NhbFN0b3JhZ2VgIGZvciBib29sZWFuIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGBuYW1lYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjb25maWcgKG5hbWUpIHtcbiAgLy8gYWNjZXNzaW5nIGdsb2JhbC5sb2NhbFN0b3JhZ2UgY2FuIHRyaWdnZXIgYSBET01FeGNlcHRpb24gaW4gc2FuZGJveGVkIGlmcmFtZXNcbiAgdHJ5IHtcbiAgICBpZiAoIWdsb2JhbC5sb2NhbFN0b3JhZ2UpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdmFsID0gZ2xvYmFsLmxvY2FsU3RvcmFnZVtuYW1lXTtcbiAgaWYgKG51bGwgPT0gdmFsKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBTdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxSb3V0ZXNcblxudmFyIHRyYW5zZm9ybSA9IGZ1bmN0aW9uICh0cmllLCBwcmV2aW91cykge1xuICB2YXIgcHJldiA9IHByZXZpb3VzIHx8ICcvJ1xuICB2YXIgcm91dGVzID0ge31cbiAgdmFyIG5vZGVzID0gdHJpZS5ub2Rlc1xuICBPYmplY3Qua2V5cyhub2RlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHBhdGggPSAocHJldiA9PT0gJy8nID8gcHJldiA6IHByZXYgKyAnLycpICsgKGtleSA9PT0gJyQkJyA/ICc6JyArIHRyaWUubmFtZSA6IGtleSlcbiAgICB2YXIgY2IgPSBub2Rlc1trZXldLmNiXG4gICAgaWYgKGNiICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJvdXRlc1twYXRoXSA9IGNiXG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhub2Rlc1trZXldLm5vZGVzKS5sZW5ndGggIT09IDApIHtcbiAgICAgIHZhciBvYmogPSB0cmFuc2Zvcm0obm9kZXNba2V5XSwgcGF0aClcbiAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgICByb3V0ZXNbcl0gPSBvYmpbcl1cbiAgICAgIH0pXG4gICAgfVxuICB9KVxuICByZXR1cm4gcm91dGVzXG59XG5cbi8vIHdhbGsgYSB3YXlmYXJlciB0cmllXG4vLyAob2JqLCBmbikgLT4gbnVsbFxuZnVuY3Rpb24gZ2V0QWxsUm91dGVzIChyb3V0ZXIpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiByb3V0ZXIsICdmdW5jdGlvbicsICd3YXlmYXJlci5nZXRBbGxSb3V0ZXM6IHJvdXRlciBzaG91bGQgYmUgYW4gZnVuY3Rpb24nKVxuXG4gIHZhciB0cmllID0gcm91dGVyLl90cmllXG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgdHJpZSwgJ29iamVjdCcsICd3YXlmYXJlci5nZXRBbGxSb3V0ZXM6IHRyaWUgc2hvdWxkIGJlIGFuIG9iamVjdCcpXG5cbiAgdmFyIHRyZWUgPSB0cmllLnRyaWVcbiAgcmV0dXJuIHRyYW5zZm9ybSh0cmVlKVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm9kZS9uby1kZXByZWNhdGVkLWFwaSAqL1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG52YXIgdHJpZSA9IHJlcXVpcmUoJy4vdHJpZScpXG5cbm1vZHVsZS5leHBvcnRzID0gV2F5ZmFyZXJcblxuLy8gY3JlYXRlIGEgcm91dGVyXG4vLyBzdHIgLT4gb2JqXG5mdW5jdGlvbiBXYXlmYXJlciAoZGZ0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBXYXlmYXJlcikpIHJldHVybiBuZXcgV2F5ZmFyZXIoZGZ0KVxuXG4gIHZhciBfZGVmYXVsdCA9IChkZnQgfHwgJycpLnJlcGxhY2UoL15cXC8vLCAnJylcbiAgdmFyIF90cmllID0gdHJpZSgpXG5cbiAgZW1pdC5fdHJpZSA9IF90cmllXG4gIGVtaXQub24gPSBvblxuICBlbWl0LmVtaXQgPSBlbWl0XG4gIGVtaXQubWF0Y2ggPSBtYXRjaFxuICBlbWl0Ll93YXlmYXJlciA9IHRydWVcblxuICByZXR1cm4gZW1pdFxuXG4gIC8vIGRlZmluZSBhIHJvdXRlXG4gIC8vIChzdHIsIGZuKSAtPiBvYmpcbiAgZnVuY3Rpb24gb24gKHJvdXRlLCBjYikge1xuICAgIGFzc2VydC5lcXVhbCh0eXBlb2Ygcm91dGUsICdzdHJpbmcnKVxuICAgIGFzc2VydC5lcXVhbCh0eXBlb2YgY2IsICdmdW5jdGlvbicpXG5cbiAgICByb3V0ZSA9IHJvdXRlIHx8ICcvJ1xuXG4gICAgaWYgKGNiLl93YXlmYXJlciAmJiBjYi5fdHJpZSkge1xuICAgICAgX3RyaWUubW91bnQocm91dGUsIGNiLl90cmllLnRyaWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub2RlID0gX3RyaWUuY3JlYXRlKHJvdXRlKVxuICAgICAgbm9kZS5jYiA9IGNiXG4gICAgICBub2RlLnJvdXRlID0gcm91dGVcbiAgICB9XG5cbiAgICByZXR1cm4gZW1pdFxuICB9XG5cbiAgLy8gbWF0Y2ggYW5kIGNhbGwgYSByb3V0ZVxuICAvLyAoc3RyLCBvYmo/KSAtPiBudWxsXG4gIGZ1bmN0aW9uIGVtaXQgKHJvdXRlKSB7XG4gICAgdmFyIG1hdGNoZWQgPSBtYXRjaChyb3V0ZSlcblxuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpXG4gICAgYXJnc1swXSA9IG1hdGNoZWQucGFyYW1zXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldXG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWQuY2IuYXBwbHkobWF0Y2hlZC5jYiwgYXJncylcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoIChyb3V0ZSkge1xuICAgIGFzc2VydC5ub3RFcXVhbChyb3V0ZSwgdW5kZWZpbmVkLCBcIidyb3V0ZScgbXVzdCBiZSBkZWZpbmVkXCIpXG5cbiAgICB2YXIgbWF0Y2hlZCA9IF90cmllLm1hdGNoKHJvdXRlKVxuICAgIGlmIChtYXRjaGVkICYmIG1hdGNoZWQuY2IpIHJldHVybiBuZXcgUm91dGUobWF0Y2hlZClcblxuICAgIHZhciBkZnQgPSBfdHJpZS5tYXRjaChfZGVmYXVsdClcbiAgICBpZiAoZGZ0ICYmIGRmdC5jYikgcmV0dXJuIG5ldyBSb3V0ZShkZnQpXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyb3V0ZSAnXCIgKyByb3V0ZSArIFwiJyBkaWQgbm90IG1hdGNoXCIpXG4gIH1cblxuICBmdW5jdGlvbiBSb3V0ZSAobWF0Y2hlZCkge1xuICAgIHRoaXMuY2IgPSBtYXRjaGVkLmNiXG4gICAgdGhpcy5yb3V0ZSA9IG1hdGNoZWQucm91dGVcbiAgICB0aGlzLnBhcmFtcyA9IG1hdGNoZWQucGFyYW1zXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRyaWVcblxuLy8gY3JlYXRlIGEgbmV3IHRyaWVcbi8vIG51bGwgLT4gb2JqXG5mdW5jdGlvbiBUcmllICgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyaWUpKSByZXR1cm4gbmV3IFRyaWUoKVxuICB0aGlzLnRyaWUgPSB7IG5vZGVzOiB7fSB9XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgb24gdGhlIHRyaWUgYXQgcm91dGVcbi8vIGFuZCByZXR1cm4gYSBub2RlXG4vLyBzdHIgLT4gb2JqXG5UcmllLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAocm91dGUpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiByb3V0ZSwgJ3N0cmluZycsICdyb3V0ZSBzaG91bGQgYmUgYSBzdHJpbmcnKVxuICAvLyBzdHJpcCBsZWFkaW5nICcvJyBhbmQgc3BsaXQgcm91dGVzXG4gIHZhciByb3V0ZXMgPSByb3V0ZS5yZXBsYWNlKC9eXFwvLywgJycpLnNwbGl0KCcvJylcblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlIChpbmRleCwgdHJpZSkge1xuICAgIHZhciB0aGlzUm91dGUgPSAoaGFzKHJvdXRlcywgaW5kZXgpICYmIHJvdXRlc1tpbmRleF0pXG4gICAgaWYgKHRoaXNSb3V0ZSA9PT0gZmFsc2UpIHJldHVybiB0cmllXG5cbiAgICB2YXIgbm9kZSA9IG51bGxcbiAgICBpZiAoL146fF5cXCovLnRlc3QodGhpc1JvdXRlKSkge1xuICAgICAgLy8gaWYgbm9kZSBpcyBhIG5hbWUgbWF0Y2gsIHNldCBuYW1lIGFuZCBhcHBlbmQgdG8gJzonIG5vZGVcbiAgICAgIGlmICghaGFzKHRyaWUubm9kZXMsICckJCcpKSB7XG4gICAgICAgIG5vZGUgPSB7IG5vZGVzOiB7fSB9XG4gICAgICAgIHRyaWUubm9kZXMuJCQgPSBub2RlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gdHJpZS5ub2Rlcy4kJFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1JvdXRlWzBdID09PSAnKicpIHtcbiAgICAgICAgdHJpZS53aWxkY2FyZCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgdHJpZS5uYW1lID0gdGhpc1JvdXRlLnJlcGxhY2UoL146fF5cXCovLCAnJylcbiAgICB9IGVsc2UgaWYgKCFoYXModHJpZS5ub2RlcywgdGhpc1JvdXRlKSkge1xuICAgICAgbm9kZSA9IHsgbm9kZXM6IHt9IH1cbiAgICAgIHRyaWUubm9kZXNbdGhpc1JvdXRlXSA9IG5vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZSA9IHRyaWUubm9kZXNbdGhpc1JvdXRlXVxuICAgIH1cblxuICAgIC8vIHdlIG11c3QgcmVjdXJzZSBkZWVwZXJcbiAgICByZXR1cm4gY3JlYXRlTm9kZShpbmRleCArIDEsIG5vZGUpXG4gIH1cblxuICByZXR1cm4gY3JlYXRlTm9kZSgwLCB0aGlzLnRyaWUpXG59XG5cbi8vIG1hdGNoIGEgcm91dGUgb24gdGhlIHRyaWVcbi8vIGFuZCByZXR1cm4gdGhlIG5vZGVcbi8vIHN0ciAtPiBvYmpcblRyaWUucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKHJvdXRlKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygcm91dGUsICdzdHJpbmcnLCAncm91dGUgc2hvdWxkIGJlIGEgc3RyaW5nJylcblxuICB2YXIgcm91dGVzID0gcm91dGUucmVwbGFjZSgvXlxcLy8sICcnKS5zcGxpdCgnLycpXG4gIHZhciBwYXJhbXMgPSB7fVxuXG4gIGZ1bmN0aW9uIHNlYXJjaCAoaW5kZXgsIHRyaWUpIHtcbiAgICAvLyBlaXRoZXIgdGhlcmUncyBubyBtYXRjaCwgb3Igd2UncmUgZG9uZSBzZWFyY2hpbmdcbiAgICBpZiAodHJpZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgdmFyIHRoaXNSb3V0ZSA9IHJvdXRlc1tpbmRleF1cbiAgICBpZiAodGhpc1JvdXRlID09PSB1bmRlZmluZWQpIHJldHVybiB0cmllXG5cbiAgICBpZiAoaGFzKHRyaWUubm9kZXMsIHRoaXNSb3V0ZSkpIHtcbiAgICAgIC8vIG1hdGNoIHJlZ3VsYXIgcm91dGVzIGZpcnN0XG4gICAgICByZXR1cm4gc2VhcmNoKGluZGV4ICsgMSwgdHJpZS5ub2Rlc1t0aGlzUm91dGVdKVxuICAgIH0gZWxzZSBpZiAodHJpZS5uYW1lKSB7XG4gICAgICAvLyBtYXRjaCBuYW1lZCByb3V0ZXNcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcmFtc1t0cmllLm5hbWVdID0gZGVjb2RlVVJJQ29tcG9uZW50KHRoaXNSb3V0ZSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHNlYXJjaChpbmRleCwgdW5kZWZpbmVkKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlYXJjaChpbmRleCArIDEsIHRyaWUubm9kZXMuJCQpXG4gICAgfSBlbHNlIGlmICh0cmllLndpbGRjYXJkKSB7XG4gICAgICAvLyBtYXRjaCB3aWxkY2FyZHNcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcmFtcy53aWxkY2FyZCA9IGRlY29kZVVSSUNvbXBvbmVudChyb3V0ZXMuc2xpY2UoaW5kZXgpLmpvaW4oJy8nKSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHNlYXJjaChpbmRleCwgdW5kZWZpbmVkKVxuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIGVhcmx5LCBvciBlbHNlIHNlYXJjaCBtYXkga2VlcCByZWN1cnNpbmcgdGhyb3VnaCB0aGUgd2lsZGNhcmRcbiAgICAgIHJldHVybiB0cmllLm5vZGVzLiQkXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vIG1hdGNoZXMgZm91bmRcbiAgICAgIHJldHVybiBzZWFyY2goaW5kZXggKyAxKVxuICAgIH1cbiAgfVxuXG4gIHZhciBub2RlID0gc2VhcmNoKDAsIHRoaXMudHJpZSlcblxuICBpZiAoIW5vZGUpIHJldHVybiB1bmRlZmluZWRcbiAgbm9kZSA9IE9iamVjdC5hc3NpZ24oe30sIG5vZGUpXG4gIG5vZGUucGFyYW1zID0gcGFyYW1zXG4gIHJldHVybiBub2RlXG59XG5cbi8vIG1vdW50IGEgdHJpZSBvbnRvIGEgbm9kZSBhdCByb3V0ZVxuLy8gKHN0ciwgb2JqKSAtPiBudWxsXG5UcmllLnByb3RvdHlwZS5tb3VudCA9IGZ1bmN0aW9uIChyb3V0ZSwgdHJpZSkge1xuICBhc3NlcnQuZXF1YWwodHlwZW9mIHJvdXRlLCAnc3RyaW5nJywgJ3JvdXRlIHNob3VsZCBiZSBhIHN0cmluZycpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgdHJpZSwgJ29iamVjdCcsICd0cmllIHNob3VsZCBiZSBhIG9iamVjdCcpXG5cbiAgdmFyIHNwbGl0ID0gcm91dGUucmVwbGFjZSgvXlxcLy8sICcnKS5zcGxpdCgnLycpXG4gIHZhciBub2RlID0gbnVsbFxuICB2YXIga2V5ID0gbnVsbFxuXG4gIGlmIChzcGxpdC5sZW5ndGggPT09IDEpIHtcbiAgICBrZXkgPSBzcGxpdFswXVxuICAgIG5vZGUgPSB0aGlzLmNyZWF0ZShrZXkpXG4gIH0gZWxzZSB7XG4gICAgdmFyIGhlYWQgPSBzcGxpdC5qb2luKCcvJylcbiAgICBrZXkgPSBzcGxpdFswXVxuICAgIG5vZGUgPSB0aGlzLmNyZWF0ZShoZWFkKVxuICB9XG5cbiAgT2JqZWN0LmFzc2lnbihub2RlLm5vZGVzLCB0cmllLm5vZGVzKVxuICBpZiAodHJpZS5uYW1lKSBub2RlLm5hbWUgPSB0cmllLm5hbWVcblxuICAvLyBkZWxlZ2F0ZSBwcm9wZXJ0aWVzIGZyb20gJy8nIHRvIHRoZSBuZXcgbm9kZVxuICAvLyAnLycgY2Fubm90IGJlIHJlYWNoZWQgb25jZSBtb3VudGVkXG4gIGlmIChub2RlLm5vZGVzWycnXSkge1xuICAgIE9iamVjdC5rZXlzKG5vZGUubm9kZXNbJyddKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmIChrZXkgPT09ICdub2RlcycpIHJldHVyblxuICAgICAgbm9kZVtrZXldID0gbm9kZS5ub2Rlc1snJ11ba2V5XVxuICAgIH0pXG4gICAgT2JqZWN0LmFzc2lnbihub2RlLm5vZGVzLCBub2RlLm5vZGVzWycnXS5ub2RlcylcbiAgICBkZWxldGUgbm9kZS5ub2Rlc1snJ10ubm9kZXNcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXMgKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXotXycuc3BsaXQoJycpXG4gICwgbGVuZ3RoID0gNjRcbiAgLCBtYXAgPSB7fVxuICAsIHNlZWQgPSAwXG4gICwgaSA9IDBcbiAgLCBwcmV2O1xuXG4vKipcbiAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNwZWNpZmllZCBudW1iZXIuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG51bSBUaGUgbnVtYmVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBlbmNvZGUobnVtKSB7XG4gIHZhciBlbmNvZGVkID0gJyc7XG5cbiAgZG8ge1xuICAgIGVuY29kZWQgPSBhbHBoYWJldFtudW0gJSBsZW5ndGhdICsgZW5jb2RlZDtcbiAgICBudW0gPSBNYXRoLmZsb29yKG51bSAvIGxlbmd0aCk7XG4gIH0gd2hpbGUgKG51bSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgaW50ZWdlciB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBzdHJpbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBkZWNvZGUoc3RyKSB7XG4gIHZhciBkZWNvZGVkID0gMDtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgZGVjb2RlZCA9IGRlY29kZWQgKiBsZW5ndGggKyBtYXBbc3RyLmNoYXJBdChpKV07XG4gIH1cblxuICByZXR1cm4gZGVjb2RlZDtcbn1cblxuLyoqXG4gKiBZZWFzdDogQSB0aW55IGdyb3dpbmcgaWQgZ2VuZXJhdG9yLlxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IEEgdW5pcXVlIGlkLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24geWVhc3QoKSB7XG4gIHZhciBub3cgPSBlbmNvZGUoK25ldyBEYXRlKCkpO1xuXG4gIGlmIChub3cgIT09IHByZXYpIHJldHVybiBzZWVkID0gMCwgcHJldiA9IG5vdztcbiAgcmV0dXJuIG5vdyArJy4nKyBlbmNvZGUoc2VlZCsrKTtcbn1cblxuLy9cbi8vIE1hcCBlYWNoIGNoYXJhY3RlciB0byBpdHMgaW5kZXguXG4vL1xuZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgbWFwW2FscGhhYmV0W2ldXSA9IGk7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIGB5ZWFzdGAsIGBlbmNvZGVgIGFuZCBgZGVjb2RlYCBmdW5jdGlvbnMuXG4vL1xueWVhc3QuZW5jb2RlID0gZW5jb2RlO1xueWVhc3QuZGVjb2RlID0gZGVjb2RlO1xubW9kdWxlLmV4cG9ydHMgPSB5ZWFzdDtcbiIsIi8vJ3VzZSBiYWJlbCdcblxuLy8gY29uc3QgcDVsaWIgPSByZXF1aXJlKCdwNScpXG5cbmNsYXNzIFA1IGV4dGVuZHMgcDV7XG4gIGNvbnN0cnVjdG9yICh7XG4gICAgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgbW9kZSA9ICdQMkQnXG4gIH0gPSB7fSkge1xuICAgIC8vY29uc29sZS5sb2coJ2NyZWF0ZWluZyBjYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCB3aW5kb3cuaW5uZXJXaWR0aCwgd2luZG93LmlubmVySGVpZ2h0KVxuICAgIHN1cGVyKCggcCApID0+IHtcbiAgICAgIHAuc2V0dXAgPSAoKSA9PiB7IHAuY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQsIHBbbW9kZV0pIH1cbiAgLy8gICAgcC5zZXR1cCA9ICgpID0+IHsgcC5jcmVhdGVDYW52YXMoKSB9XG4gICAgICBwLmRyYXcgPSAoKSA9PiB7IH1cbiAgICB9LCAnaHlkcmEtdWknKVxuICAgIHRoaXMud2lkdGggPSB3aWR0aFxuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0XG4gICAgdGhpcy5tb2RlID0gbW9kZVxuICAgIHRoaXMuY2FudmFzLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiXG4gICAgdGhpcy5jYW52YXMuc3R5bGUudG9wID0gXCIwcHhcIlxuICAgIHRoaXMuY2FudmFzLnN0eWxlLmxlZnQgPSBcIjBweFwiXG4gICAgdGhpcy5jYW52YXMuc3R5bGUuekluZGV4ID0gLTFcbiAgICAvLyBjb25zb2xlLmxvZygncDUnLCB0aGlzKVxuICAvLyAgcmV0dXJuIHRoaXMucDVcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgdGhpcy5jYW52YXMuc3R5bGUudmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiXG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiXG4gIH1cblxuICAvLyBwNSBjbGVhciBmdW5jdGlvbiBub3QgY292ZXJpbmcgY2FudmFzXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuZHJhd2luZ0NvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQNVxuIiwiLyogZ2xvYmFscyBzZXNzaW9uU3RvcmFnZSAqL1xuLy8gRXh0ZW5kcyBydGMtcGF0Y2gtYmF5IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igbmlja25hbWVzIGFuZCBwZXJzaXN0ZW50IHNlc3Npb24gc3RvcmFnZVxuXG52YXIgUGF0Y2hCYXkgPSByZXF1aXJlKCcuL3J0Yy1wYXRjaC1iYXkuanMnKVxuLy92YXIgUGF0Y2hCYXkgPSByZXF1aXJlKCcuLy4uLy4uLy4uLy4uL3J0Yy1wYXRjaC1iYXknKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuXG52YXIgUEJMaXZlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlc3Npb24gPSB7fVxuXG4gIC8vIGxvb2t1cCB0YWJsZXMgZm9yIGNvbnZlcnRpbmcgaWQgdG8gbmlja25hbWVcbiAgdGhpcy5uaWNrRnJvbUlkID0ge31cbiAgdGhpcy5pZEZyb21OaWNrID0ge31cblxuICB0aGlzLmxvYWRGcm9tU3RvcmFnZSgpXG59XG4vLyBpbmhlcml0cyBmcm9tIFBhdGNoQmF5IG1vZHVsZVxuaW5oZXJpdHMoUEJMaXZlLCBQYXRjaEJheSlcblxuUEJMaXZlLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKHN0cmVhbSwgb3B0cykge1xuICB0aGlzLnNldHRpbmdzID0ge1xuICAgIHNlcnZlcjogb3B0cy5zZXJ2ZXIgfHwgJ2h0dHBzOi8vcGF0Y2gtYmF5LmdsaXRjaC5tZS8nLFxuICAgIHJvb206IG9wdHMucm9vbSB8fCAncGF0Y2gtYmF5JyxcbiAgICBzdHJlYW06IHN0cmVhbVxuICB9XG5cbiAgLy8gY29uc29sZS5sb2coJ2luaXRpYWxpemluZyBwYXRjaC1iYXknLCBzdHJlYW0sIG9wdHMpXG4gIHRoaXMubWFrZUdsb2JhbCA9IG9wdHMubWFrZUdsb2JhbCB8fCB0cnVlXG4gIHRoaXMuc2V0UGFnZVRpdGxlID0gb3B0cy5zZXRUaXRsZSB8fCB0cnVlXG5cbiAgaWYgKHRoaXMuc2Vzc2lvbi5pZCkgdGhpcy5zZXR0aW5ncy5pZCA9IHRoaXMuc2Vzc2lvbi5pZFxuXG4gIFBhdGNoQmF5LmNhbGwodGhpcywgdGhpcy5zZXR0aW5ncylcblxuICBpZiAodGhpcy5tYWtlR2xvYmFsKSB3aW5kb3cucGIgPSB0aGlzXG5cbiAgdGhpcy5vbigncmVhZHknLCAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLm5pY2spIHtcbiAgICAgIGlmICh0aGlzLnNlc3Npb24ubmljaykge1xuICAgICAgICB0aGlzLnNldE5hbWUodGhpcy5zZXNzaW9uLm5pY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlc3Npb24uaWQgPSB0aGlzLmlkXG4gICAgICAgIHRoaXMuc2V0TmFtZSh0aGlzLnNlc3Npb24uaWQpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdjb25uZWN0ZWQgdG8gc2VydmVyICcgKyB0aGlzLnNldHRpbmdzLnNlcnZlciArICcgd2l0aCBuYW1lICcgKyB0aGlzLnNldHRpbmdzLmlkKVxuICB9KVxuICAvLyByZWNlaXZlZCBhIGJyb2FkY2FzdFxuICB0aGlzLm9uKCdicm9hZGNhc3QnLCB0aGlzLl9wcm9jZXNzQnJvYWRjYXN0LmJpbmQodGhpcykpXG4gIHRoaXMub24oJ25ldyBwZWVyJywgdGhpcy5oYW5kbGVOZXdQZWVyLmJpbmQodGhpcykpXG5cbiAgd2luZG93Lm9uYmVmb3JldW5sb2FkID0gKCkgPT4ge1xuICAgIHRoaXMuc2Vzc2lvbi5pZCA9IHdpbmRvdy5wYi5pZFxuICAgIHRoaXMuc2Vzc2lvbi5uaWNrID0gdGhpcy5uaWNrXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgncGInLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlc3Npb24pKVxuICB9XG5cbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHRoaXMub24oJ3N0cmVhbScsIGZ1bmN0aW9uIChpZCwgc3RyZWFtKSB7XG4gICAgY29uc29sZS5sb2coJ2dvdCBzdHJlYW0hJywgaWQsIHN0cmVhbSlcbiAgICBjb25zdCB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJylcbiAgICBpZiAoJ3NyY09iamVjdCcgaW4gdmlkZW8pIHtcbiAgICAgIHZpZGVvLnNyY09iamVjdCA9IHN0cmVhbVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBdm9pZCB1c2luZyB0aGlzIGluIG5ldyBicm93c2VycywgYXMgaXQgaXMgZ29pbmcgYXdheS5cbiAgICAgIHZpZGVvLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHN0cmVhbSlcbiAgICB9XG4gIC8vICB2aWRlby5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChzdHJlYW0pXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCAoKSA9PiB7XG4gICAgICAvLyAgY29uc29sZS5sb2coXCJsb2FkZWQgbWV0YTIyXCIpXG4gICAgICB2aWRlby5wbGF5KClcbiAgICAgIHNlbGYudmlkZW8gPSB2aWRlb1xuICAgICAgc2VsZi5lbWl0KCdnb3QgdmlkZW8nLCBzZWxmLm5pY2tGcm9tSWRbaWRdLCB2aWRlbylcbiAgICB9KVxuICB9KVxufVxuXG5QQkxpdmUucHJvdG90eXBlLmxvYWRGcm9tU3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3BiJykgIT09IG51bGwpIHtcbiAgICB0aGlzLnNlc3Npb24gPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3BiJykpXG4gIH1cbn1cblxuUEJMaXZlLnByb3RvdHlwZS5pbml0U291cmNlID0gZnVuY3Rpb24gKG5pY2ssIGNhbGxiYWNrKSB7XG4gIHRoaXMuaW5pdENvbm5lY3Rpb25Gcm9tSWQodGhpcy5pZEZyb21OaWNrW25pY2tdLCBjYWxsYmFjaylcbi8vICB0aGlzLnBlZXJzW3RoaXMuaWRGcm9tTmlja1tuaWNrXV0uc3RyZWFtQ2FsbGJhY2sgPSBjYWxsYmFja1xufVxuXG4vLyBkZWZhdWx0IG5pY2tuYW1lIGlzIGp1c3QgcGVlciBpZC5cbi8vIHRvIGRvOiBzYXZlIG5pY2tuYW1lIGluZm9ybWF0aW9uIGJldHdlZW4gc2Vzc2lvbnNcblBCTGl2ZS5wcm90b3R5cGUuaGFuZGxlTmV3UGVlciA9IGZ1bmN0aW9uIChwZWVyKSB7XG4gIC8vIGNvbnNvbGUubG9nKFwibmV3IHBlZXJcIiwgcGVlcilcbiAgdGhpcy5uaWNrRnJvbUlkW3BlZXJdID0gcGVlclxuICB0aGlzLmlkRnJvbU5pY2tbcGVlcl0gPSBwZWVyXG4gIC8vIGNvbnNvbGUubG9nKFwiVEhJUyBJUyBUSEUgUEVFUlwiLCBwZWVyKVxuICAvLyB0byBkbzogb25seSBzZW5kIHRvIG5ldyBwZWVyLCBub3QgdG8gYWxsXG4gIGlmICh0aGlzLm5pY2spIHtcbiAgICB0aGlzLmJyb2FkY2FzdCh7XG4gICAgICB0eXBlOiAndXBkYXRlLW5pY2snLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBuaWNrOiB0aGlzLm5pY2tcbiAgICB9KVxuICB9XG59XG5cblBCTGl2ZS5wcm90b3R5cGUubGlzdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGwgPSBPYmplY3Qua2V5cyh0aGlzLmlkRnJvbU5pY2spXG4gIGNvbnNvbGUubG9nKGwpXG4gIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmlkRnJvbU5pY2spXG59XG5cbi8vIGNob29zZSBhbiBpZGVudGlmeWluZyBuYW1lXG5QQkxpdmUucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbiAobmljaykge1xuICB0aGlzLmJyb2FkY2FzdCh7XG4gICAgdHlwZTogJ3VwZGF0ZS1uaWNrJyxcbiAgICBpZDogdGhpcy5pZCxcbiAgICBuaWNrOiBuaWNrLFxuICAgIHByZXZpb3VzOiB0aGlzLm5pY2tcbiAgfSlcbiAgdGhpcy5uaWNrID0gbmlja1xuICBpZiAodGhpcy5zZXRQYWdlVGl0bGUpIGRvY3VtZW50LnRpdGxlID0gbmlja1xufVxuXG5QQkxpdmUucHJvdG90eXBlLl9wcm9jZXNzQnJvYWRjYXN0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgaWYgKGRhdGEudHlwZSA9PT0gJ3VwZGF0ZS1uaWNrJykge1xuICAgIGlmIChkYXRhLnByZXZpb3VzICE9PSBkYXRhLm5pY2spIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmlkRnJvbU5pY2tbdGhpcy5uaWNrRnJvbUlkW2RhdGEuaWRdXVxuICAgICAgdGhpcy5uaWNrRnJvbUlkW2RhdGEuaWRdID0gZGF0YS5uaWNrXG4gICAgICB0aGlzLmlkRnJvbU5pY2tbZGF0YS5uaWNrXSA9IGRhdGEuaWRcbiAgICAgIGlmIChkYXRhLnByZXZpb3VzKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coZGF0YS5wcmV2aW91cyArICcgY2hhbmdlZCB0byAnICsgZGF0YS5uaWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnY29ubmVjdGVkIHRvICcgKyBkYXRhLm5pY2spXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vLyBQQkV4dGVuZGVkLnByb3RvdHlwZS5cbm1vZHVsZS5leHBvcnRzID0gUEJMaXZlXG4iLCIvLyBNb2R1bGUgZm9yIGhhbmRsaW5nIGNvbm5lY3Rpb25zIHRvIG11bHRpcGxlIHBlZXJzLlxuXG5cbnZhciBpbyA9IHJlcXVpcmUoJ3NvY2tldC5pby1jbGllbnQnKVxudmFyIFNpbXBsZVBlZXIgPSByZXF1aXJlKCdzaW1wbGUtcGVlcicpXG52YXIgZXh0ZW5kID0gT2JqZWN0LmFzc2lnblxudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuY29uc3Qgc2hvcnRpZCA9IHJlcXVpcmUoJ3Nob3J0aWQnKVxuXG52YXIgUGF0Y2hCYXkgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuLy8gY29ubmVjdCB0byB3ZWJzb2NrZXQgc2lnbmFsbGluZyBzZXJ2ZXIuIFRvIERPOiBlcnJvciB2YWxpZGF0aW9uXG4gIHRoaXMuc2lnbmFsbGVyID0gaW8ob3B0aW9ucy5zZXJ2ZXIpXG5cbiAgLy9hc3NpZ24gdW5pcXVlIGlkIHRvIHRoaXMgcGVlciwgb3IgdXNlIGlkIHBhc3NlZCBpblxuXG4gIHRoaXMuaWQgPSBvcHRpb25zLmlkIHx8IHNob3J0aWQuZ2VuZXJhdGUoKVxuXG4gIHRoaXMuc3RyZWFtID0gb3B0aW9ucy5zdHJlYW0gfHwgbnVsbFxuXG4gIC8vb3B0aW9ucyB0byBiZSBzZW50IHRvIHNpbXBsZSBwZWVyXG4gIHRoaXMuX3BlZXJPcHRpb25zID0gb3B0aW9ucy5wZWVyT3B0aW9ucyB8fCB7fVxuICB0aGlzLl9yb29tID0gb3B0aW9ucy5yb29tXG5cblxuICB0aGlzLnNldHRpbmdzWydzaGFyZU1lZGlhV2hlblJlcXVlc3RlZCddID0gdHJ1ZVxuICB0aGlzLnNldHRpbmdzWydzaGFyZU1lZGlhV2hlbkluaXRpYXRpbmcnXSA9IGZhbHNlXG4gIHRoaXMuc2V0dGluZ3NbJ3JlcXVlc3RNZWRpYVdoZW5Jbml0aWF0aW5nJ10gPSB0cnVlXG4gIHRoaXMuc2V0dGluZ3NbJ2F1dG9jb25uZWN0J10gPSBmYWxzZVxuXG4gIC8vb2JqZWN0IGNvbnRhaW5pbmcgQUxMIHBlZXJzIGluIHJvb21cbiAgdGhpcy5wZWVycyA9IHt9XG5cbiAgLy9vYmplY3QgY29udGFpbmluZyBwZWVycyBjb25uZWN0ZWQgdmlhIHdlYnJ0Y1xuICB0aGlzLnJ0Y1BlZXJzID0ge31cblxuICAvLyBIYW5kbGUgZXZlbnRzIGZyb20gc2lnbmFsbGluZyBzZXJ2ZXJcbiAgdGhpcy5zaWduYWxsZXIub24oJ3JlYWR5JywgdGhpcy5fcmVhZHlGb3JTaWduYWxsaW5nLmJpbmQodGhpcykpXG4vLyAgdGhpcy5zaWduYWxsZXIub24oJ3BlZXJzJywgKVxuLy8gIHRoaXMuc2lnbmFsbGVyLm9uKCdzaWduYWwnLCB0aGlzLl9oYW5kbGVTaWduYWwuYmluZCh0aGlzKSlcbiAgdGhpcy5zaWduYWxsZXIub24oJ21lc3NhZ2UnLCB0aGlzLl9oYW5kbGVNZXNzYWdlLmJpbmQodGhpcykpXG4gIC8vIFJlY2VpdmVkIG1lc3NhZ2UgdmlhIHdlYnNvY2tldHMgdG8gYWxsIHBlZXJzIGluIHJvb21cbiAgdGhpcy5zaWduYWxsZXIub24oJ2Jyb2FkY2FzdCcsIHRoaXMuX3JlY2VpdmVkQnJvYWRjYXN0LmJpbmQodGhpcykpXG5cbiAgLy8gZW1pdCAnam9pbicgZXZlbnQgdG8gc2lnbmFsbGluZyBzZXJ2ZXJcbiAgdGhpcy5zaWduYWxsZXIuZW1pdCgnam9pbicsIHRoaXMuX3Jvb20sIHt1dWlkOiB0aGlzLmlkfSlcbiAgLy8gY29uc29sZS5sb2coJ2VtaXR0aW5nIGpvaW4nKVxuXG4gIHRoaXMuc2lnbmFsbGVyLm9uKCduZXcgcGVlcicsIHRoaXMuX25ld1BlZXIuYmluZCh0aGlzKSlcbn1cbi8vIGluaGVyaXRzIGZyb20gZXZlbnRzIG1vZHVsZSBpbiBvcmRlciB0byB0cmlnZ2VyIGV2ZW50c1xuaW5oZXJpdHMoUGF0Y2hCYXksIGV2ZW50cylcblxuLy8gc2VuZCBkYXRhIHRvIGFsbCBjb25uZWN0ZWQgcGVlcnMgdmlhIGRhdGEgY2hhbm5lbHNcblBhdGNoQmF5LnByb3RvdHlwZS5zZW5kVG9BbGwgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBPYmplY3Qua2V5cyh0aGlzLnJ0Y1BlZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgIHRoaXMucnRjUGVlcnNbaWRdLnNlbmQoZGF0YSlcbiAgfSwgdGhpcylcbn1cblxuLy8gc2VuZHMgdG8gcGVlciBzcGVjaWZpZWQgYlxuUGF0Y2hCYXkucHJvdG90eXBlLnNlbmRUb1BlZXIgPSBmdW5jdGlvbiAocGVlcklkLCBkYXRhKSB7XG4gIGlmIChwZWVySWQgaW4gdGhpcy5ydGNQZWVycykge1xuICAgIHRoaXMucnRjUGVlcnNbcGVlcklkXS5zZW5kKGRhdGEpXG4gIH1cbn1cblxuUGF0Y2hCYXkucHJvdG90eXBlLnJlaW5pdEFsbCA9IGZ1bmN0aW9uKCl7XG4gIE9iamVjdC5rZXlzKHRoaXMucnRjUGVlcnMpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgdGhpcy5yZWluaXRQZWVyKGlkKVxuICB9LmJpbmQodGhpcykpXG4vLyAgdGhpcy5fY29ubmVjdFRvUGVlcnMuYmluZCh0aGlzKVxufVxuXG5QYXRjaEJheS5wcm90b3R5cGUuaW5pdFJ0Y1BlZXIgPSBmdW5jdGlvbihpZCwgb3B0cykge1xuICB0aGlzLmVtaXQoJ25ldyBwZWVyJywge2lkOiBpZH0pXG4gIHZhciBuZXdPcHRpb25zID0gb3B0c1xuIC8vIGNvbnNvbGUubG9nKClcbiAgaWYodGhpcy5pY2VTZXJ2ZXJzKSB7XG4gICAgb3B0c1snY29uZmlnJ10gPSB7XG4gICAgICBpY2VTZXJ2ZXJzOiB0aGlzLmljZVNlcnZlcnNcbiAgICB9XG4gIH1cblxuICBpZihvcHRzLmluaXRpYXRvciA9PT0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLnN0cmVhbSAhPSBudWxsKSB7XG4gICAgICBpZih0aGlzLnNldHRpbmdzLnNoYXJlTWVkaWFXaGVuSW5pdGlhdGluZyA9PT0gdHJ1ZSl7XG4gICAgICAgIG5ld09wdGlvbnMuc3RyZWFtID0gdGhpcy5zdHJlYW1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYodGhpcy5zZXR0aW5ncy5yZXF1ZXN0TWVkaWFXaGVuSW5pdGlhdGluZyA9PT0gdHJ1ZSl7XG4gICAgICBuZXdPcHRpb25zLm9mZmVyQ29uc3RyYWludHMgPSB7XG4gICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWUsXG4gICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYodGhpcy5zZXR0aW5ncy5zaGFyZU1lZGlhV2hlblJlcXVlc3RlZCA9PT0gdHJ1ZSl7XG4gICAgICBpZiAodGhpcy5zdHJlYW0gIT0gbnVsbCkge1xuICAgICAgICBuZXdPcHRpb25zLnN0cmVhbSA9IHRoaXMuc3RyZWFtXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciBvcHRpb25zID0gZXh0ZW5kKHRoaXMuX3BlZXJPcHRpb25zLCBuZXdPcHRpb25zKVxuLy9jb25zb2xlLmxvZyhcIk9QVElPTlNcIiwgb3B0aW9ucylcbiAgdGhpcy5ydGNQZWVyc1tpZF0gPSBuZXcgU2ltcGxlUGVlcihvcHRpb25zKVxuICB0aGlzLl9hdHRhY2hQZWVyRXZlbnRzKHRoaXMucnRjUGVlcnNbaWRdLCBpZClcbn1cblxuUGF0Y2hCYXkucHJvdG90eXBlLnJlaW5pdFJ0Y0Nvbm5lY3Rpb24gPSBmdW5jdGlvbihpZCwgb3B0cyl7XG4gIC8vIEJlY2F1c2UgcmVuZWdvdGlhdGlvbiBpcyBub3QgaW1wbGVtZW5ldGVkIGluIFNpbXBsZVBlZXIsIHJlaW5pdGlhdGUgY29ubmVjdGlvbiB3aGVuIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWRcbiAgdGhpcy5ydGNQZWVyc1tpZF0uX2Rlc3Ryb3kobnVsbCwgZnVuY3Rpb24oZSl7XG4gICAgICB0aGlzLmluaXRSdGNQZWVyKGlkLCB7XG4gICAgICAgIHN0cmVhbTogdGhpcy5zdHJlYW0sXG4gICAgICAgIGluaXRpYXRvcjogdHJ1ZVxuICAgICAgfSlcbiAgfS5iaW5kKHRoaXMpKVxufVxuLy8gLy9uZXcgcGVlciBjb25uZWN0ZWQgdG8gc2lnbmFsbGluZyBzZXJ2ZXJcblBhdGNoQmF5LnByb3RvdHlwZS5fbmV3UGVlciA9IGZ1bmN0aW9uIChwZWVyKXtcbiAgICAvLyB0aGlzLmNvbm5lY3RlZElkcy5wdXNoKHBlZXIpXG5cblxuICAgIC8vIENvbmZpZ3VyYXRpb24gZm9yIHNwZWNpZmllZCBwZWVyLlxuICAgIC8vIEluZGl2aWR1YWwgY29uZmlndXJhdGlvbiBjb250cm9scyB3aGV0aGVyIHdpbGwgcmVjZWl2ZSBtZWRpYSBmcm9tXG4gICAgLy8gYW5kL29yIHNlbmQgbWVkaWEgdG8gYSBzcGVjaWZpYyBwZWVyLlxuXG4gICAgdGhpcy5wZWVyc1twZWVyXSA9IHtcbiAgICAgIHJ0Y1BlZXI6IG51bGxcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ25ldyBwZWVyJywgcGVlcilcbiAgICAvLyB0aGlzLmVtaXQoJ3VwZGF0ZWQgcGVlciBsaXN0JywgdGhpcy5jb25uZWN0ZWRJZHMpXG59XG4vLyAvLyBPbmNlIHRoZSBuZXcgcGVlciByZWNlaXZlcyBhIGxpc3Qgb2YgY29ubmVjdGVkIHBlZXJzIGZyb20gdGhlIHNlcnZlcixcbi8vIC8vIGNyZWF0ZXMgbmV3IHNpbXBsZSBwZWVyIG9iamVjdCBmb3IgZWFjaCBjb25uZWN0ZWQgcGVlci5cblBhdGNoQmF5LnByb3RvdHlwZS5fcmVhZHlGb3JTaWduYWxsaW5nID0gZnVuY3Rpb24gKHsgcGVlcnMsIHNlcnZlcnMgfSkge1xuLy9jb25zb2xlLmxvZyhcInJlY2VpdmVkIHBlZXIgbGlzdFwiLCBfdCwgdGhpcy5wZWVycylcblxuICBwZWVycy5mb3JFYWNoKChwZWVyKSA9PiB7XG4gICAgdGhpcy5fbmV3UGVlcihwZWVyKVxuICB9KVxuXG4gIC8vIGlmIHJlY2VpdmVkIGljZSBhbmQgdHVybiBzZXJ2ZXIgaW5mb3JtYXRpb24gZnJvbSBzaWduYWxsaW5nIHNlcnZlciwgdXNlIGluIGVzdGFibGlzaGluZ1xuICBpZihzZXJ2ZXJzKSB7XG4gICAgdGhpcy5pY2VTZXJ2ZXJzID0gc2VydmVyc1xuICB9XG4vLyAgdGhpcy5wZWVycyA9IHBlZXJzXG4gIHRoaXMuZW1pdCgncmVhZHknKVxufVxuXG4vLyBJbml0IGNvbm5lY3Rpb24gdG8gUkVDRUlWRSB2aWRlb1xuUGF0Y2hCYXkucHJvdG90eXBlLmluaXRDb25uZWN0aW9uRnJvbUlkID0gZnVuY3Rpb24oaWQsIGNhbGxiYWNrKXtcbi8vICBjb25zb2xlLmxvZyhcImluaXRpYW5pbmcgY29ubmVjdGlvblwiKVxuICBpZihpZCBpbiB0aGlzLnJ0Y1BlZXJzKXtcbiAgICBjb25zb2xlLmxvZyhcIkFscmVhZHkgY29ubmVjdGVkIHRvLi5cIiwgaWQsIHRoaXMucnRjUGVlcnMpXG4gICAgLy9pZiB0aGlzIHBlZXIgd2FzIG9yaWdpbmFsbHkgb25seSBzZW5kaW5nIGEgc3RyZWFtIChub3QgcmVjZWl2aW5nKSwgcmVjcmVhdGUgY29ubmVjdGluZyBidXQgdGhpcyB0aW1lIHR3by13YXlcbiAgICBpZih0aGlzLnJ0Y1BlZXJzW2lkXS5pbml0aWF0b3I9PT1mYWxzZSl7XG4gICAgICB0aGlzLnJlaW5pdFJ0Y0Nvbm5lY3Rpb24oaWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vYWxyZWFkeSBjb25uZWN0ZWQsIGRvIG5vdGhpbmdcblxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLmluaXRSdGNQZWVyKGlkLCB7XG4gICAgICBpbml0aWF0b3I6IHRydWVcbiAgICB9KVxuICB9XG59XG5cblxuLy8gcmVjZWl2ZSBzaWduYWwgZnJvbSBzaWduYWxsaW5nIHNlcnZlciwgZm9yd2FyZCB0byBzaW1wbGUtcGVlclxuUGF0Y2hCYXkucHJvdG90eXBlLl9oYW5kbGVNZXNzYWdlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgLy8gaWYgdGhlcmUgaXMgY3VycmVudGx5IG5vIHBlZXIgb2JqZWN0IGZvciBhIHBlZXIgaWQsIHRoYXQgcGVlciBpcyBpbml0aWF0aW5nIGEgbmV3IGNvbm5lY3Rpb24uXG5cbiAgaWYgKGRhdGEudHlwZSA9PT0gJ3NpZ25hbCcpe1xuICAgIHRoaXMuX2hhbmRsZVNpZ25hbChkYXRhKVxuICB9IGVsc2Uge1xuICAgIHRoaXMuZW1pdCgnbWVzc2FnZScsIGRhdGEpXG4gIH1cbn1cbi8vIHJlY2VpdmUgc2lnbmFsIGZyb20gc2lnbmFsbGluZyBzZXJ2ZXIsIGZvcndhcmQgdG8gc2ltcGxlLXBlZXJcblBhdGNoQmF5LnByb3RvdHlwZS5faGFuZGxlU2lnbmFsID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgLy8gaWYgdGhlcmUgaXMgY3VycmVudGx5IG5vIHBlZXIgb2JqZWN0IGZvciBhIHBlZXIgaWQsIHRoYXQgcGVlciBpcyBpbml0aWF0aW5nIGEgbmV3IGNvbm5lY3Rpb24uXG4gIGlmICghdGhpcy5ydGNQZWVyc1tkYXRhLmlkXSkge1xuICAgIC8vIHRoaXMuZW1pdCgnbmV3IHBlZXInLCBkYXRhKVxuICAgIC8vIHZhciBvcHRpb25zID0gZXh0ZW5kKHtzdHJlYW06IHRoaXMuc3RyZWFtfSwgdGhpcy5fcGVlck9wdGlvbnMpXG4gICAgLy8gdGhpcy5ydGNQZWVyc1tkYXRhLmlkXSA9IG5ldyBTaW1wbGVQZWVyKG9wdGlvbnMpXG4gICAgLy8gdGhpcy5fYXR0YWNoUGVlckV2ZW50cyh0aGlzLnJ0Y1BlZXJzW2RhdGEuaWRdLCBkYXRhLmlkKVxuXG4gICAgdGhpcy5pbml0UnRjUGVlcihkYXRhLmlkLCB7aW5pdGlhdG9yOiBmYWxzZX0pXG4gIH1cbiAgdGhpcy5ydGNQZWVyc1tkYXRhLmlkXS5zaWduYWwoZGF0YS5tZXNzYWdlKVxufVxuLy8gc2VuZFRvQWxsIHNlbmQgdGhyb3VnaCBydGMgY29ubmVjdGlvbnMsIHdoZXJlYXMgYnJvYWRjYXN0XG4vLyBzZW5kIHRocm91Z2ggdGhlIHNpZ25hbGxpbmcgc2VydmVyLiBVc2VmdWwgaW4gY2FzZXMgd2hlcmVcbi8vIG5vdCBhbGwgcGVlcnMgYXJlIGNvbm5lY3RlZCB2aWEgd2VicnRjIHdpdGggb3RoZXIgcGVlcnNcblBhdGNoQmF5LnByb3RvdHlwZS5fcmVjZWl2ZWRCcm9hZGNhc3QgPSBmdW5jdGlvbihkYXRhKSB7XG4gIC8vY29uc29sZS5sb2coXCJSRUNFSVZFRCBCUk9BRENBU1RcIiwgZGF0YSlcbiAgdGhpcy5lbWl0KCdicm9hZGNhc3QnLCBkYXRhKVxufVxuXG4vL3NlbmRzIHZpYSBzaWduYWxsaW5nIHNlcnZlclxuUGF0Y2hCYXkucHJvdG90eXBlLmJyb2FkY2FzdCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuc2lnbmFsbGVyLmVtaXQoJ2Jyb2FkY2FzdCcsIGRhdGEpXG59XG4vLyBoYW5kbGUgZXZlbnRzIGZvciBlYWNoIGNvbm5lY3RlZCBwZWVyXG5QYXRjaEJheS5wcm90b3R5cGUuX2F0dGFjaFBlZXJFdmVudHMgPSBmdW5jdGlvbiAocCwgX2lkKSB7XG4gIHAub24oJ3NpZ25hbCcsIGZ1bmN0aW9uIChpZCwgc2lnbmFsKSB7XG4gIC8vICBjb25zb2xlLmxvZygnc2lnbmFsJywgaWQsIHNpZ25hbClcbiAgICAvLyAgY29uc29sZS5sb2coXCJwZWVyIHNpZ25hbCBzZW5kaW5nIG92ZXIgc29ja2V0c1wiLCBpZCwgc2lnbmFsKVxuICAvLyAgdGhpcy5zaWduYWxsZXIuZW1pdCgnc2lnbmFsJywge2lkOiBpZCwgc2lnbmFsOiBzaWduYWx9KVxuICAgIHRoaXMuc2lnbmFsbGVyLmVtaXQoJ21lc3NhZ2UnLCB7aWQ6IGlkLCBtZXNzYWdlOiBzaWduYWwsIHR5cGU6ICdzaWduYWwnfSlcbiAgfS5iaW5kKHRoaXMsIF9pZCkpXG5cbiAgcC5vbignc3RyZWFtJywgZnVuY3Rpb24gKGlkLCBzdHJlYW0pIHtcbiAgICB0aGlzLnJ0Y1BlZXJzW2lkXS5zdHJlYW0gPSBzdHJlYW1cbiAgLy8gIGNvbnNvbGUubG9nKCdFOiBzdHJlYW0nLCBpZCwgc3RyZWFtKVxuICAgIC8vICBjb25zb2xlLmxvZyhcInJlY2VpdmVkIGEgc3RyZWFtXCIsIHN0cmVhbSlcbiAgICB0aGlzLmVtaXQoJ3N0cmVhbScsIGlkLCBzdHJlYW0pXG4gIH0uYmluZCh0aGlzLCBfaWQpKVxuXG4gIHAub24oJ2Nvbm5lY3QnLCBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gIGNvbnNvbGUubG9nKFwiY29ubmVjdGVkIHRvIFwiLCBpZClcbiAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCBpZClcbiAgfS5iaW5kKHRoaXMsIF9pZCkpXG5cbiAgcC5vbignZGF0YScsIGZ1bmN0aW9uIChpZCwgZGF0YSkge1xuLy8gICAgY29uc29sZS5sb2coJ2RhdGEnLCBpZClcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCB7aWQ6IGlkLCBkYXRhOiBKU09OLnBhcnNlKGRhdGEpfSlcbiAgfS5iaW5kKHRoaXMsIF9pZCkpXG5cbiAgcC5vbignY2xvc2UnLCBmdW5jdGlvbiAoaWQpIHtcbiAgICAvL2NvbnNvbGUubG9nKCdDTE9TRUQnKVxuICAgIGRlbGV0ZSAodGhpcy5ydGNQZWVyc1tpZF0pXG4gICAgdGhpcy5lbWl0KCdjbG9zZScsIGlkKVxuICB9LmJpbmQodGhpcywgX2lkKSlcblxuICBwLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGUpe1xuICAgIGNvbnNvbGUud2FybihcInNpbXBsZSBwZWVyIGVycm9yXCIsIGUpXG4gIH0pXG59XG5cblBhdGNoQmF5LnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgT2JqZWN0LnZhbHVlcyh0aGlzLnJ0Y1BlZXJzKS5mb3JFYWNoKCBmdW5jdGlvbiAocGVlcikge1xuICAgIHBlZXIuZGVzdHJveSgpXG4gIH0pXG4gIHRoaXMuc2lnbmFsbGVyLmNsb3NlKClcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhdGNoQmF5XG4iLCJtb2R1bGUuZXhwb3J0cz1bXG4gIHtcbiAgICBcInNrZXRjaF9pZFwiOiBcImV4YW1wbGVfMFwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR1JteHZjaVV5TUdSbEpUSXdSblZsWjI4bE1FRWxNRUZ6YUdGd1pTZ3lNREFsTWtNd0xqVWxNa014TGpVcEpUQkJMbk5qWVd4bEtEQXVOU1V5UXpBdU5Ta2xNRUV1WTI5c2IzSW9KVFZDTUM0MUpUSkRNaVUxUkM1emJXOXZkR2dvTVNrbE1rTXdMak1sTWtNd0tTVXdRUzV5WlhCbFlYUW9NaVV5UXpJcEpUQkJMbTF2WkhWc1lYUmxVMk5oYkdVb2IzTmpLRE1sTWtNd0xqVXBKVEpETFRBdU5pa2xNRUV1WVdSa0tHOHdKVEpETUM0MUtTVXdRUzV6WTJGc1pTZ3dMamtwSlRCQkxtOTFkQ2dwXCJcbn0se1xuICBcInNrZXRjaF9pZFwiOiBcImV4YW1wbGVfM1wiLFxuICBcImNvZGVcIjpcIkpUSkdKVEpHSlRJd1lua2xNakJQYkdsMmFXRWxNakJLWVdOckpUQkJKVEJCYjNOaktESXdKVEpESlRJd01DNHdNeVV5UXlVeU1ERXVOeWt1YTJGc1pXbGtLQ2t1YlhWc2RDaHZjMk1vTWpBbE1rTWxNakF3TGpBd01TVXlReVV5TURBcExuSnZkR0YwWlNneExqVTRLU2t1WW14bGJtUW9iekFsTWtNbE1qQXdMamswS1M1dGIyUjFiR0YwWlZOallXeGxLRzl6WXlneE1DVXlReVV5TURBcEpUSkRMVEF1TURNcExuTmpZV3hsS0RBdU9DVXlReVV5TUNncEpUSXdKVE5FSlRORkpUSXdLREV1TURVbE1qQWxNa0lsTWpBd0xqRWxNakFxSlRJd1RXRjBhQzV6YVc0b01DNHdOU3AwYVcxbEtTa3BMbTkxZENodk1Daz1cIlxufSx7XG4gIFwic2tldGNoX2lkXCI6IFwiZXhhbXBsZV80XCIsXG4gIFwiY29kZVwiOlwiSlRKR0pUSkdKVEl3WW5rbE1qQk9aV3h6YjI0bE1qQldaWEpoSlRCQkpUSkdKVEpHSlRJd2RIZHBkSFJsY2lVelFTVXlNQ1UwTUc1bGJGOXpiMjV2Ykc5bmFXRWxNRUVsTUVGdmMyTW9PQ1V5UXkwd0xqVWxNa01sTWpBeEtTNWpiMnh2Y2lndE1TNDFKVEpESlRJd0xURXVOU1V5UXlVeU1DMHhMalVwTG1Kc1pXNWtLRzh3S1M1eWIzUmhkR1VvTFRBdU5TVXlReVV5TUMwd0xqVXBMbTF2WkhWc1lYUmxLSE5vWVhCbEtEUXBMbkp2ZEdGMFpTZ3dMalVsTWtNbE1qQXdMalVwTG5OallXeGxLRElwTG5KbGNHVmhkRmdvTWlVeVF5VXlNRElwTG0xdlpIVnNZWFJsS0c4d0pUSkRKVEl3S0NrbE1qQWxNMFFsTTBVbE1qQnRiM1Z6WlM1NEpUSXdLaVV5TURBdU1EQXdOU2t1Y21Wd1pXRjBXU2d5SlRKREpUSXdNaWtwTG05MWRDaHZNQ2tsTUVFbE1FRWxNRUVsTUVFbE1FRWxNRUU9XCJcbn0se1xuICBcInNrZXRjaF9pZFwiOiBcImV4YW1wbGVfNlwiLFxuICBcImNvZGVcIjpcIkpUSkdKVEpHSlRJd1lua2xNakJFSlVNekpVRTVZbTl5WVNVeU1FWmhiR3hsYVhKdmN5VXlNRWR2Ym5waGJHVnpKVEJCSlRKR0pUSkdKVEl3YUhSMGNITWxNMEVsTWtZbE1rWjNkM2N1WjI5dWVtRnNaWE5rWldKdmNtRXVZMjl0SlRKR0pUQkJKVEJCYjNOaktEVXBMbUZrWkNodWIybHpaU2cxSlRKREpUSXdNaWtwTG1OdmJHOXlLREFsTWtNbE1qQXdKVEpESlRJd015a3VZMjlzYjNKaGJXRW9NQzQwS1M1dmRYUW9LU1V3UVNVd1FTVXdRU1V3UVE9PVwiXG59LHtcbiAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzhcIixcbiAgXCJjb2RlXCI6XCJKVEpHSlRKR0pUSXdZbmtsTWpCU2IyUnlhV2R2SlRJd1ZtVnNZWE5qYnlVd1FTVXlSaVV5UmlVeU1HaDBkSEJ6SlROQkpUSkdKVEpHZVdWamRHOHVaMmwwYUhWaUxtbHZKVEpHSlRCQkpUQkJiM05qS0RFd055VXlReVV5TURBbE1rTWxNakF3TGpjcExtTnZiRzl5S0RFbE1rTWxNakF3SlRKREpUSXdNU2t1Y205MFlYUmxLREFsTWtNbE1qQXRNQzR3T0NrdWJXOWtkV3hoZEdWU2IzUmhkR1VvYnpFbE1rTWxNakF3TGpRcExtOTFkQ2h2TUNrbE1FRnZjMk1vTXpNcExuSnZkR0YwWlNneUpUSkRKVEl3TUM0NEtTNXRiMlIxYkdGMFpWSnZkR0YwWlNodk1DVXlReVV5TUNncEpUSXdKVE5FSlRORkpUSXdLR0V1Wm1aMEpUVkNNQ1UxUkNveUtTa3ViM1YwS0c4eEtTVXdRUT09XCJcbn0se1xuICBcInNrZXRjaF9pZFwiOiBcImV4YW1wbGVfOVwiLFxuICBcImNvZGVcIjpcIkpUSkdKVEpHSlRJd1lua2xNakJTYjJSeWFXZHZKVEl3Vm1Wc1lYTmpieVV3UVNVeVJpVXlSaVV5TUdoMGRIQnpKVE5CSlRKR0pUSkdlV1ZqZEc4dVoybDBhSFZpTG1sdkpUSkdKVEJCSlRCQmIzTmpLREU0SlRKREpUSXdNQzR4SlRKREpUSXdNQ2t1WTI5c2IzSW9NaVV5UXlVeU1EQXVNU1V5UXlVeU1ESXBKVEJCTG0xMWJIUW9iM05qS0RJd0pUSkRKVEl3TUM0d01TVXlReVV5TURBcEtTNXlaWEJsWVhRb01pVXlReVV5TURJd0tTNXliM1JoZEdVb01DNDFLUzV0YjJSMWJHRjBaU2h2TVNrbE1FRXVjMk5oYkdVb01TVXlReVV5TUNncEpUSXdKVE5FSlRORkpUSXdKVEl3S0dFdVptWjBKVFZDTUNVMVJDb3dMamtsTWpBbE1rSWxNakF5S1NrdVpHbG1aaWh2TVNrdWIzVjBLRzh3S1NVd1FXOXpZeWd5TUNVeVF5VXlNREF1TWlVeVF5VXlNREFwTG1OdmJHOXlLRElsTWtNbE1qQXdMamNsTWtNbE1qQXdMakVwTG0xMWJIUW9iM05qS0RRd0tTa3ViVzlrZFd4aGRHVlNiM1JoZEdVb2J6QWxNa01sTWpBd0xqSXBKVEJCTG5KdmRHRjBaU2d3TGpJcExtOTFkQ2h2TVNrPVwiXG59LHtcbiAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzEwXCIsXG4gIFwiY29kZVwiOlwiSlRKR0pUSkdKVEl3WW5rbE1qQmFZV05vSlRJd1MzSmhiR3dsTUVFbE1rWWxNa1lsTWpCb2RIUndKVE5CSlRKR0pUSkdlbUZqYUd0eVlXeHNMbTl1YkdsdVpTVXlSaVV3UVNVd1FXOXpZeWdsTWpBeU1UVWxNa01sTWpBd0xqRWxNa01sTWpBeUpUSXdLU1V3UVM1dGIyUjFiR0YwWlNnbE1FRWxNakFsTWpCdmMyTW9KVEl3TWlVeVF5VXlNQzB3TGpNbE1rTWxNakF4TURBbE1qQXBKVEJCSlRJd0pUSXdMbkp2ZEdGMFpTZ3hOU2tsTUVFcEpUQkJMbTExYkhRb0pUQkJKVEl3SlRJd2IzTmpLQ1V5TURJeE5TVXlReVV5TUMwd0xqRWxNa01sTWpBeUtTVXdRU1V5TUNVeU1DNXdhWGhsYkdGMFpTZ2xNakExTUNVeVF5VXlNRFV3SlRJd0tTVXdRU2tsTUVFdVkyOXNiM0lvSlRJd01DNDVKVEpESlRJd01DNHdKVEpESlRJd01DNDVKVEl3S1NVd1FTNXRiMlIxYkdGMFpTZ2xNRUVsTWpBbE1qQnZjMk1vSlRJd05pVXlReVV5TUMwd0xqRWxNakFwSlRCQkpUSXdKVEl3TG5KdmRHRjBaU2dsTWpBNUpUSXdLU1V3UVNrbE1FRXVZV1JrS0NVd1FTVXlNQ1V5TUc5ell5Z2xNakF4TUNVeVF5VXlNQzB3TGprbE1rTWxNakE1TURBbE1qQXBKVEJCSlRJd0pUSXdMbU52Ykc5eUtERWxNa013SlRKRE1Ta2xNRUVwSlRCQkxtMTFiSFFvSlRCQkpUSXdKVEl3YzJoaGNHVW9PVEF3SlRKREpUSXdNQzR5SlRKREpUSXdNU2tsTUVFbE1qQWxNakF1YkhWdFlTZ3BKVEJCSlRJd0pUSXdMbkpsY0dWaGRGZ29NaWtsTUVFbE1qQWxNakF1Y21Wd1pXRjBXU2d5S1NVd1FTVXlNQ1V5TUM1amIyeHZjbUZ0WVNneE1Da2xNRUVwSlRCQkxtMXZaSFZzWVhSbEtDVXdRU1V5TUNVeU1HOXpZeWdsTWpBNUpUSkRKVEl3TFRBdU15VXlReVV5TURrd01DVXlNQ2tsTUVFbE1qQWxNakF1Y205MFlYUmxLQ1V5TURZbE1qQXBKVEJCS1NVd1FTNWhaR1FvSlRCQkpUSXdKVEl3YjNOaktEUWxNa01sTWpBeEpUSkRKVEl3T1RBcEpUQkJKVEl3SlRJd0xtTnZiRzl5S0RBdU1pVXlRekFsTWtNeEtTVXdRU2tsTUVFdWIzVjBLQ2tsTUVFPVwiXG59LHtcbiAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzExXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1lua2xNakJhWVdOb0pUSXdTM0poYkd3bE1FRWxNa1lsTWtZbE1qQm9kSFJ3SlROQkpUSkdKVEpHZW1GamFHdHlZV3hzTG05dWJHbHVaU1V5UmlVd1FTVXdRVzl6WXlneE1DVXlReVV5TURBdU9TVXlReVV5TURNd01Da2xNRUV1WTI5c2IzSW9NQzQ1SlRKREpUSXdNQzQzSlRKREpUSXdNQzQ0S1NVd1FTNWthV1ptS0NVd1FTVXlNQ1V5TUc5ell5ZzBOU1V5UXlVeU1EQXVNeVV5UXlVeU1ERXdNQ2tsTUVFbE1qQWxNakF1WTI5c2IzSW9NQzQ1SlRKREpUSXdNQzQ1SlRKREpUSXdNQzQ1S1NVd1FTVXlNQ1V5TUM1eWIzUmhkR1VvTUM0eE9Da2xNRUVsTWpBbE1qQXVjR2w0Wld4aGRHVW9NVElwSlRCQkpUSXdKVEl3TG10aGJHVnBaQ2dwSlRCQktTVXdRUzV6WTNKdmJHeFlLREV3S1NVd1FTNWpiMnh2Y21GdFlTZ3BKVEJCTG14MWJXRW9LU1V3UVM1eVpYQmxZWFJZS0RRcEpUQkJMbkpsY0dWaGRGa29OQ2tsTUVFdWJXOWtkV3hoZEdVb0pUQkJKVEl3SlRJd2IzTmpLREVsTWtNbE1qQXRNQzQ1SlRKREpUSXdNekF3S1NVd1FTa2xNRUV1YzJOaGJHVW9NaWtsTUVFdWIzVjBLQ2tsTUVFPVwiXG59LHtcbiAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzEzXCIsXG4gIFwiY29kZVwiOlwiSlRKR0pUSkdKVEl3WVdOcFpDVXlNR0oxY3lVeU1ITmxZWFFsTUVFbE1rWWxNa1lsTWpCaWVTVXlNRmRwYkd3bE1qQklkVzF3YUhKbGVYTWxNRUVsTWtZbE1rWWxNakJvZEhSd2N5VXpRU1V5UmlVeVJtZHBkR2gxWWk1amIyMGxNa1pVYUdWWGFYTndlU1V3UVNVd1FXOXpZeWd4TURVcExtTnZiRzl5S0RBdU5TVXlRekF1TVNVeVF6QXVPQ2t1Y205MFlYUmxLREF1TVRFbE1rTWxNakF3TGpFcExtMXZaSFZzWVhSbEtHOXpZeWd4TUNrdWNtOTBZWFJsS0RBdU15a3VZV1JrS0c4d0pUSkRKVEl3TUM0eEtTa3VZV1JrS0c5ell5Z3lNQ1V5UXpBdU1ERWxNa014S1M1amIyeHZjaWd3SlRKRE1DNDRKVEpETVNrcExtOTFkQ2h2TUNrbE1FRnZjMk1vTlRBbE1rTXdMakExSlRKREpUSXdNQzQzS1M1amIyeHZjaWd4SlRKRE1DNDNKVEpETUM0MUtTNWthV1ptS0c4d0tTNXRiMlIxYkdGMFpTaHZNU1V5UXpBdU1EVXBMbTkxZENodk1Ta2xNRUZ5Wlc1a1pYSW9iekVwXCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwiZXhhbXBsZV8xNFwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdZbmtsTWpCUGJHbDJhV0VsTWpCS1lXTnJKVEJCSlRKR0pUSkdKVEl3SlRRd1gyOXFZV05yWHlVd1FTVXdRVzl6WXlneU1DVXlReVV5TURBdU1ERWxNa01sTWpBeExqRXBKVEJCSlRBNUxtdGhiR1ZwWkNnMUtTVXdRU1V3T1M1amIyeHZjaWd5TGpnekpUSkRNQzQ1TVNVeVF6QXVNemtwSlRCQkpUQTVMbkp2ZEdGMFpTZ3dKVEpESlRJd01DNHhLU1V3UVNVd09TNXRiMlIxYkdGMFpTaHZNQ1V5UXlVeU1DZ3BKVEl3SlRORUpUTkZKVEl3Ylc5MWMyVXVlQ1V5TUNvbE1qQXdMakF3TURNcEpUQkJKVEE1TG5OallXeGxLREV1TURFcEpUQkJKVEl3SlRJd0pUQTVMbTkxZENodk1Daz1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzE1XCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1lua2xNakJQYkdsMmFXRWxNakJLWVdOckpUQkJKVEpHSlRKR0pUSXdhSFIwY0hNbE0wRWxNa1lsTWtadmFtRmpheTVuYVhSb2RXSXVhVzhsTUVFbE1FRnZjMk1vTVRBd0pUSkRKVEl3TUM0d01TVXlReVV5TURFdU5Da2xNRUVsTURrdWNtOTBZWFJsS0RBbE1rTWxNakF3TGpFcEpUQkJKVEE1TG0xMWJIUW9iM05qS0RFd0pUSkRKVEl3TUM0eEtTNXRiMlIxYkdGMFpTaHZjMk1vTVRBcExuSnZkR0YwWlNnd0pUSkRKVEl3TFRBdU1Ta2xNa01sTWpBeEtTa2xNRUVsTURrdVkyOXNiM0lvTWk0NE15VXlRekF1T1RFbE1rTXdMak01S1NVd1FTVXlNQ1V5TUM1dmRYUW9iekFwXCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwiZXhhbXBsZV8xNlwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdZbmtsTWpCUGJHbDJhV0VsTWpCS1lXTnJKVEJCSlRKR0pUSkdKVEl3YUhSMGNITWxNMEVsTWtZbE1rWnZhbUZqYXk1bmFYUm9kV0l1YVc4bE1FRWxNRUZ2YzJNb05DVXlReVV5TURBdU1TVXlReVV5TURBdU9Da3VZMjlzYjNJb01TNHdOQ1V5UXpBbE1rTWxNakF0TVM0eEtTNXliM1JoZEdVb01DNHpNQ1V5UXlVeU1EQXVNU2t1Y0dsNFpXeGhkR1VvTWlVeVF5VXlNREl3S1M1dGIyUjFiR0YwWlNodWIybHpaU2d5TGpVcEpUSkRKVEl3S0NrbE1qQWxNMFFsTTBVbE1qQXhMalVsTWpBcUpUSXdUV0YwYUM1emFXNG9NQzR3T0NVeU1Db2xNakIwYVcxbEtTa3ViM1YwS0c4d0tRPT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzE3XCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd2JXOXBjbVVsTUVFbE1rWWxNa1lsTWpCaWVTVXlNRTlzYVhacFlTVXlNRXBoWTJzbE1FRWxNa1lsTWtZbE1qQjBkMmwwZEdWeUpUTkJKVEl3SlRRd1gyOXFZV05yWHlVd1FTVXdRWEJoZEhSbGNtNGxNakFsTTBRbE1qQW9LU1V5TUNVelJDVXpSU1V5TUc5ell5Z3lNREFsTWtNbE1qQXdLUzVyWVd4bGFXUW9NakF3S1M1elkyRnNaU2d4SlRKREpUSXdNQzQwS1NVd1FTVXlSaVV5UmlVd1FYQmhkSFJsY200b0tTVXdRU1V5TUNVeU1DNXpZM0p2Ykd4WUtEQXVNU1V5UXlVeU1EQXVNREVwSlRCQkpUSXdKVEl3TG0xMWJIUW9jR0YwZEdWeWJpZ3BLU1V3UVNVeU1DVXlNQzV2ZFhRb0tRPT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzE4XCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1lua2xNakJQYkdsMmFXRWxNakJLWVdOckpUQkJKVEpHSlRKR0pUSXdhSFIwY0hNbE0wRWxNa1lsTWtadmFtRmpheTVuYVhSb2RXSXVhVzhsTUVFbE1FRnZjMk1vTmlVeVF5VXlNREFsTWtNbE1qQXdMamdwSlRCQkpUSXdKVEl3TG1OdmJHOXlLREV1TVRRbE1rTWxNakF3TGpZbE1rTXVPREFwSlRCQkpUSXdKVEl3TG5KdmRHRjBaU2d3TGpreUpUSkRKVEl3TUM0ektTVXdRU1V5TUNVeU1DNXdhWGhsYkdGMFpTZ3lNQ1V5UXlVeU1ERXdLU1V3UVNVeU1DVXlNQzV0ZFd4MEtHOXpZeWcwTUNVeVF5VXlNREF1TURNcExuUm9jbVZ6YUNnd0xqUXBMbkp2ZEdGMFpTZ3dKVEpESlRJd0xUQXVNRElwS1NVd1FTVXlNQ1V5TUM1dGIyUjFiR0YwWlZKdmRHRjBaU2h2YzJNb01qQWxNa01sTWpBd0tTNTBhSEpsYzJnb01DNHpKVEpESlRJd01DNDJLU1V5UXlVeU1DZ3BKVEl3SlRORUpUTkZKVEl3TUM0eEpUSXdKVEpDSlRJd2JXOTFjMlV1ZUNVeU1Db2xNakF3TGpBd01pa2xNRUVsTWpBbE1qQXViM1YwS0c4d0tRPT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJyYW5nZ2FfMFwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdSSEpsWVcxNUpUSXdSR2xoYlc5dVpDVXdRU1V5UmlVeVJpVXlNR0o1SlRJd1VtRnVaMmRoSlRJd1VIVnlibUZ0WVNVeU1FRnFhU1V3UVNVeVJpVXlSaVV5TUdoMGRIQnpKVE5CSlRKR0pUSkdjbUZ1WjJkaGNIVnlibUZ0WVdGcWFURXVkMmw0YzJsMFpTNWpiMjBsTWtad2IzSjBabTlzYVc4bE1FRWxNRUZ2YzJNb055VXlReTB3TGpFeU5Ta3ViVzlrZFd4aGRHVW9kbTl5YjI1dmFTZ3hLU2t1WkdsbVppaDJiM0p2Ym05cEtERXBMbTExYkhRb1ozSmhaR2xsYm5Rb0xURXBMbXgxYldFb01DNHhNalVwS1NrbE1FRWxNakFsTWpBdWJIVnRZU2d3TGpFeU5Ta2xNRUVsTWpBbE1qQXVZV1JrS0hOb1lYQmxLRGNsTWtNbE1qQXdMalVwSlRCQkpUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdMbTExYkhRb2RtOXliMjV2YVNneE1DVXlReklwTG1Kc1pXNWtLRzh3S1M1a2FXWm1LR2R5WVdScFpXNTBLREVwS1M1dGIyUjFiR0YwWlNoMmIzSnZibTlwS0NrcEtTa2xNRUVsTWpBbE1qQXVjMk55YjJ4c1dTZ3RNQzR4S1NVd1FTVXlNQ1V5TUM1elkzSnZiR3hZS0RBdU1USTFLU1V3UVNVeU1DVXlNQzVpYkdWdVpDaHZNQ2tsTUVFbE1qQWxNakF1WW14bGJtUW9iekFwSlRCQkpUSXdKVEl3TG05MWRDZ3BKVEJCXCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwicmFuZ2dhXzFcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3VkdGbkpUSXdKVEkySlRJd1UzZGxaWEFsTUVFbE1rWWxNa1lsTWpCaWVTVXlNRkpoYm1kbllTVXlNRkIxY201aGJXRWxNakJCYW1rbE1FRWxNa1lsTWtZbE1qQm9kSFJ3Y3lVelFTVXlSaVV5Um5KaGJtZG5ZWEIxY201aGJXRmhhbWt4TG5kcGVITnBkR1V1WTI5dEpUSkdjRzl5ZEdadmJHbHZKVEJCSlRCQmIzTmpLRFVsTWtNd0xqRXlOU2t1WTI5c2IzSmhiV0VvTVNrbE1FRWxNakFsTWpBdWJIVnRZU2d3TGpFeU5Ta3VZV1JrS0hOb1lYQmxLREVsTWtNd0xqVXBMbXgxYldFb01pa3VaR2xtWmlobmNtRmthV1Z1ZENneEtTa3BKVEJCSlRJd0pUSXdMbVJwWm1Zb2IzTmpLQzB4SlRKRExUQXVNalVwS1M1aWJHVnVaQ2h2TUNrdVkyOXNiM0lvTUNVeVF6SXVOU1V5UXpFdU56VXBKVEJCSlRJd0pUSXdMbTkxZENncFwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcInJhbmdnYV8yXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1RXOXViMk5vY205dFpTVXlNRTFsYlc5aGNpVXdRU1V5UmlVeVJpVXlNR0o1SlRJd1VtRnVaMmRoSlRJd1VIVnlibUZ0WVNVeU1FRnFhU1V3UVNVeVJpVXlSaVV5TUdoMGRIQnpKVE5CSlRKR0pUSkdjbUZ1WjJkaGNIVnlibUZ0WVdGcWFURXVkMmw0YzJsMFpTNWpiMjBsTWtad2IzSjBabTlzYVc4bE1FRWxNRUYyYjNKdmJtOXBLRFV3SlRKRE1Ta2xNRUVsTWpBbE1qQXViSFZ0WVNnd0xqVXBMbUZrWkNoemFHRndaU2d4SlRKRE1Ta3ViSFZ0WVNneEtTa2xNRUVsTWpBbE1qQXViVzlrZFd4aGRHVW9iM05qS0MweE1EQXdKVEpETFRFcEpUQkJKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdMbTF2WkhWc1lYUmxLRzl6WXlncExteDFiV0VvS1NrcEpUQkJKVEl3SlRJd0xtSnNaVzVrS0c4d0tTVXdRU1V5TUNVeU1DNWliR1Z1WkNodk1Da2xNRUVsTWpBbE1qQXVZbXhsYm1Rb2J6QXBKVEJCSlRJd0pUSXdMbUpzWlc1a0tHOHdLU1V3UVNVeU1DVXlNQzV2ZFhRb0tRPT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJyYW5nZ2FfM1wiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdSMkZzWVhoNUpUSXdWSEpwY0NVd1FTVXlSaVV5UmlVeU1HSjVKVEl3VW1GdVoyZGhKVEl3VUhWeWJtRnRZU1V5TUVGcWFTVXdRU1V5UmlVeVJpVXlNR2gwZEhCekpUTkJKVEpHSlRKR2NtRnVaMmRoY0hWeWJtRnRZV0ZxYVRFdWQybDRjMmwwWlM1amIyMGxNa1p3YjNKMFptOXNhVzhsTUVFbE1FRnphR0Z3WlNneEpUSkRNU2tsTUVFbE1qQWxNakF1YlhWc2RDaDJiM0p2Ym05cEtERXdNREFsTWtNeUtTVXdRU1V5TUNVeU1DNWliR1Z1WkNodk1Da3ViSFZ0WVNncEtTVXdRU1V5TUNVeU1DNWhaR1FvYzJoaGNHVW9NeVV5UXpBdU1USTFLU1V3UVNVeU1DVXlNQ1V5TUNVeU1DVXlNQ1V5TUNVeU1DNXliM1JoZEdVb01TVXlRekVwTG0xMWJIUW9kbTl5YjI1dmFTZ3hNREF3SlRKRE1Ta3ViSFZ0WVNncEtTVXdRU1V5TUNVeU1DVXlNQ1V5TUNVeU1DVXlNQ1V5TUM1eWIzUmhkR1VvTVM0MUtTa3VjMk55YjJ4c1dDZ2xOVUl3TGpFbE1rTXRNQzR3TmpJMUpUSkRNQzR3TURVbE1rTXdMakF3TURBeEpUVkVKVEpETUNrbE1FRWxNakFsTWpBdWMyTnliMnhzV1NnbE5VSXdMakVsTWtNdE1DNHdOakkxSlRKRE1DNHdNRFVsTWtNd0xqQXdNREF4SlRWRUpUSkRNQ2tsTUVFbE1qQWxNakF1YjNWMEtDaz1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJyYW5nZ2FfNFwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdVM1Z0WlhRbE1FRWxNa1lsTWtZbE1qQmllU1V5TUZKaGJtZG5ZU1V5TUZCMWNtNWhiV0VsTWpCQmFta2xNRUVsTWtZbE1rWWxNakJvZEhSd2N5VXpRU1V5UmlVeVJuSmhibWRuWVhCMWNtNWhiV0ZoYW1reExuZHBlSE5wZEdVdVkyOXRKVEpHY0c5eWRHWnZiR2x2SlRCQkpUQkJiM05qS0RBdU5TVXlRekV1TWpVcExtMTFiSFFvYzJoaGNHVW9NU1V5UXpBdU1Ea3BMbkp2ZEdGMFpTZ3hMalVwS1NVd1FTVXlNQ1V5TUM1a2FXWm1LR2R5WVdScFpXNTBLQ2twSlRCQkpUSXdKVEl3TG1Ga1pDaHphR0Z3WlNneUpUSkRNaWt1WW14bGJtUW9aM0poWkdsbGJuUW9NU2twS1NVd1FTVXlNQ1V5TUM1dGIyUjFiR0YwWlNodWIybHpaU2dwSlRCQkpUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0xtMXZaSFZzWVhSbEtHNXZhWE5sS0NrdWMyTnliMnhzV1NneEpUSkRNQzR3TmpJMUtTa3BKVEJCSlRJd0pUSXdMbUpzWlc1a0tHOHdLU1V3UVNVeU1DVXlNQzVqYjJ4dmNpZ3hKVEpETFRBdU5TVXlReTB3TGpjMUtTVXdRU1V5TUNVeU1DNXZkWFFvS1E9PVwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcIm1hcmlhbm5lXzBcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdjRzl5ZENVd1FTVXlSaVV5Um1KNUpUSXdUV0Z5YVdGdWJtVWxNakJVWldsNGFXUnZKVEJCSlRKR0pUSkdhSFIwY0hNbE0wRWxNa1lsTWtadFlYSnBZVzV1WlhSbGFYaHBaRzh1WjJsMGFIVmlMbWx2SlRKR0pUQkJKVEJCYjNOaktEVWxNa01sTWpBd0xqa2xNa01sTWpBd0xqQXdNU2tsTUVFbE1qQWxNakFsTWpBbE1qQXVhMkZzWldsa0tDVTFRak1sTWtNMEpUSkROU1V5UXpjbE1rTTRKVEpET1NVeVF6RXdKVFZFTG1aaGMzUW9NQzR4S1NrbE1FRWxNakFsTWpBbE1qQWxNakF1WTI5c2IzSW9NQzQxSlRKREpUSXdNQzR6S1NVd1FTVXlNQ1V5TUNVeU1DVXlNQzVqYjJ4dmNtRnRZU2d3TGpRcEpUQkJKVEl3SlRJd0pUSXdKVEl3TG5KdmRHRjBaU2d3TGpBd09TVXlReWdwSlRORUpUTkZUV0YwYUM1emFXNG9kR2x0WlNrcUpUSXdMVEF1TURBeEpUSXdLU1V3UVNVeU1DVXlNQ1V5TUNVeU1DNXRiMlIxYkdGMFpWSnZkR0YwWlNodk1DVXlReWdwSlRORUpUTkZUV0YwYUM1emFXNG9kR2x0WlNrbE1qQXFKVEl3TUM0d01ETXBKVEJCSlRJd0pUSXdKVEl3SlRJd0xtMXZaSFZzWVhSbEtHOHdKVEpESlRJd01DNDVLU1V3UVNVeU1DVXlNQ1V5TUNVeU1DNXpZMkZzWlNnd0xqa3BKVEJCSlRJd0pUSXdKVEl3SlRJd0xtOTFkQ2h2TUNrbE1FRWxNRUU9XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwibWFyaWFubmVfMVwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR1VHbDRaV3h6WTJGd1pTVXdRU1V5UmlVeVJrMWhjbWxoYm01bEpUSXdWR1ZwZUdsa2J5VXdRU1V5UmlVeVJtaDBkSEJ6SlROQkpUSkdKVEpHWjJsMGFIVmlMbU52YlNVeVJrMWhjbWxoYm01bFZHVnBlR2xrYnlVd1FTVXdRWE55WXlodk1Da2xNRUVsTWpBdWMyRjBkWEpoZEdVb01TNHdNU2tsTUVFbE1qQXVjMk5oYkdVb0xqazVPU2tsTUVFbE1qQXVZMjlzYjNJb01TNHdNU1V5UXpFdU1ERWxNa014TGpBeEtTVXdRU1V5TUM1b2RXVW9MakF4S1NVd1FTVXlNQzV0YjJSMWJHRjBaVWgxWlNoemNtTW9iekVwTG1oMVpTZ3VNeWt1Y0c5emRHVnlhWHBsS0MweEtTNWpiMjUwY21GemRDZ3VOeWtsTWtNeUtTVXdRU1V5TUNVeU1DNXNZWGxsY2loemNtTW9iekVwSlRCQkpUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0xteDFiV0VvS1NVd1FTVXlNQ1V5TUNVeU1DVXlNQ1V5TUNVeU1DVXlNQ1V5TUNVeU1DNXRkV3gwS0dkeVlXUnBaVzUwS0RFcEpUQkJKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdMbk5oZEhWeVlYUmxLQzQ1S1NrcEpUQkJKVEl3SlRJd0xtOTFkQ2h2TUNrbE1FRWxNRUZ1YjJselpTZ3hKVEpESlRJd0xqSXBKVEJCSlRJd0pUSXdMbkp2ZEdGMFpTZ3lKVEpETGpVcEpUQkJKVEl3SlRJd0xteGhlV1Z5S0hOeVl5aHZNQ2tsTUVFbE1qQWxNakF1YzJOeWIyeHNXQ2d1TWlrcEpUQkJKVEl3SlRJd0xtOTFkQ2h2TVNrbE1FRWxNRUZ5Wlc1a1pYSW9iekFwXCJcblxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJuYW90b18wXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd0pUUXdibUZ2ZEc5ZmFHbGxaR0VsTUVGdmMyTW9NakFsTWtNbE1qQXdMakVsTWtNbE1qQXdLUzVqYjJ4dmNpZ3dKVEpESlRJd01TVXlReVV5TURJcExuSnZkR0YwWlNneExqVTNKVEpHTWlrdWIzVjBLRzh4S1NVd1FXOXpZeWd6TUNVeVF5VXlNREF1TURFbE1rTWxNakF3S1M1amIyeHZjaWd5SlRKREpUSXdNQzQzSlRKREpUSXdNU2t1Ylc5a2RXeGhkR1VvYnpFbE1rTWxNakF3S1M1aFpHUW9iekVsTWtNeEtTNXRiMlIxYkdGMFpWQnBlR1ZzWVhSbEtHOHhKVEpETVNVeVF6RXdLUzV2ZFhRb2J6QXBcIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJuYW90b18xXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd0pUUXdibUZ2ZEc5ZmFHbGxaR0VsTUVGemIyeHBaQ2d3TGpJbE1rTXdMallsTWtNd0xqa3BMbXhoZVdWeUtHOXpZeWd6TVM0MEpUSkRNQ2t1ZEdoeVpYTm9LREF1TnlrdWJIVnRZU2dwTG0xdlpIVnNZWFJsS0c5ell5ZzBKVEpETVNrdWNtOTBZWFJsS0RFcEpUSkRNQzR3TlNrdVkyOXNiM0lvTUNVeVF6QWxNa013S1NrdWJHRjVaWElvYjNOaktETXhMalFsTWtNd0tTNTBhSEpsYzJnb01DNDNLUzVzZFcxaEtDa3ViVzlrZFd4aGRHVW9iM05qS0RRbE1rTXhLUzV5YjNSaGRHVW9NU2tsTWtNd0xqRXBLUzV2ZFhRb0tRPT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJyaXRjaHNlXzBcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdjbUZ1Wkc5dEpUSXdkSEo1Y0c5d2FHOWlhV0VsTWpBdEpUSXdZMmhoYm1kbGN5VXlNR1YyWlhKNWRHbHRaU1V5TUhsdmRTVXlNR3h2WVdRbE1qQnBkQ0VsTUVFbE1rWWxNa1ppZVNVeU1GSnBkR05vYzJVbE1FRWxNa1lsTWtacGJuTjBZV2R5WVcwdVkyOXRKVEpHY21sMFkyaHpaU1V3UVNVeU1DVXdRV1oxYm1OMGFXOXVKVEl3Y2lodGFXNGxNMFF3SlRKRGJXRjRKVE5FTVNrbE1qQWxOMElsTWpCeVpYUjFjbTRsTWpCTllYUm9MbkpoYm1SdmJTZ3BLaWh0WVhndGJXbHVLU1V5UW0xcGJpVXpRaVV5TUNVM1JDVXdRU1V5TUNVd1FYTnZiR2xrS0RFbE1rTXhKVEpETVNrbE1FRWxNakFsTWpBbE1Ea3VaR2xtWmloemFHRndaU2dsTlVJMEpUSkROQ1V5UXpRbE1rTXlOQ1UxUkM1emJXOXZkR2dvS1M1bVlYTjBLQzQxS1NVeVEzSW9NQzQySlRKRE1DNDVNeWtsTWtNdU1Ea3BMbkpsY0dWaGRDZ3lNQ1V5UXpFd0tTa2xNRUVsTURrdWJXOWtkV3hoZEdWVFkyRnNaU2h2YzJNb09Da3VjbTkwWVhSbEtISW9MUzQxSlRKRExqVXBLU1V5UXk0MU1pa2xNRUVsTURrdVlXUmtLQ1V3UVNVeU1DVXlNQ1V3T1NVd09YTnlZeWh2TUNrdWMyTmhiR1VvTUM0NU5qVXBMbkp2ZEdGMFpTZ3VNREV5S2loTllYUm9Mbkp2ZFc1a0tISW9MVElsTWtNeEtTa3BLU1V3UVNVeU1DVXlNQ1V3T1NVd09TNWpiMnh2Y2loeUtDa2xNa055S0NrbE1rTnlLQ2twSlRCQkpUSXdKVEl3SlRJd0pUSXdKVEE1TG0xdlpIVnNZWFJsVW05MFlYUmxLRzh3SlRKRGNpZ3dKVEpETUM0MUtTa2xNRUVsTWpBbE1qQWxNRGtsTURrdVluSnBaMmgwYm1WemN5Z3VNVFVwSlRCQkpUSXdKVEl3SlRBNUpUQTVKVEpETGpjcEpUQkJKVEE1TG05MWRDZ3BcIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJyaXRjaHNlXzFcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdZMjl5Y25Wd2RHVmtKVEl3YzJOeVpXVnVjMkYyWlhJbE1FRWxNa1lsTWtaaWVTVXlNRkpwZEdOb2MyVWxNRUVsTWtZbE1rWnBibk4wWVdkeVlXMHVZMjl0SlRKR2NtbDBZMmh6WlNVd1FTVXlNQ1V3UVhadmNtOXViMmtvTXpVd0pUSkRNQzR4TlNrbE1FRWxNakFsTWpBbE1Ea3ViVzlrZFd4aGRHVlRZMkZzWlNodmMyTW9PQ2t1Y205MFlYUmxLRTFoZEdndWMybHVLSFJwYldVcEtTVXlReTQxS1NVd1FTVXlNQ1V5TUNVd09TNTBhSEpsYzJnb0xqZ3BKVEJCSlRBNUxtMXZaSFZzWVhSbFVtOTBZWFJsS0c5ell5ZzNLU1V5UXk0MEtTVXdRU1V3T1M1MGFISmxjMmdvTGpjcEpUQkJKVEl3SlRJd0pUQTVMbVJwWm1Zb2MzSmpLRzh3S1M1elkyRnNaU2d4TGpncEtTVXdRU1V3T1M1dGIyUjFiR0YwWlZOallXeGxLRzl6WXlneUtTNXRiMlIxYkdGMFpWSnZkR0YwWlNodk1DVXlReTQzTkNrcEpUQkJKVEE1TG1ScFptWW9jM0pqS0c4d0tTNXliM1JoZEdVb0pUVkNMUzR3TVRJbE1rTXVNREVsTWtNdExqQXdNaVV5UXpBbE5VUXBMbk5qY205c2JGa29NQ1V5UXlVMVFpMHhKVEpHTVRrNU9EQXdKVEpETUNVMVJDNW1ZWE4wS0RBdU55a3BLU1V3UVNVd09TNWljbWxuYUhSdVpYTnpLQ1UxUWkwdU1ESWxNa010TGpFM0pUVkVMbk50YjI5MGFDZ3BMbVpoYzNRb0xqVXBLU1V3UVNVd09TNXZkWFFvS1E9PVwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcInJpdGNoc2VfMlwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR2RISnZjR2xqWVd3bE1qQnFkV2xqWlNVd1FTVXlSaVV5Um1KNUpUSXdVbWwwWTJoelpTVXdRU1V5UmlVeVJtbHVjM1JoWjNKaGJTNWpiMjBsTWtaeWFYUmphSE5sSlRCQkpUSXdKVEJCZG05eWIyNXZhU2d5SlRKRE1DNHpKVEpETUM0eUtTNXphR2xtZENnd0xqVXBKVEJCTG0xdlpIVnNZWFJsVUdsNFpXeGhkR1VvZG05eWIyNXZhU2cwSlRKRE1DNHlLU1V5UXpNeUpUSkRNaWtsTUVFdWMyTmhiR1VvS0NrbE0wUWxNMFV4SlRKQ0tFMWhkR2d1YzJsdUtIUnBiV1VxTWk0MUtTb3dMakExS1NrbE1FRXVaR2xtWmloMmIzSnZibTlwS0RNcExuTm9hV1owS0RBdU5pa3BKVEJCTG1ScFptWW9iM05qS0RJbE1rTXdMakUxSlRKRE1TNHhLUzV5YjNSaGRHVW9LU2tsTUVFdVluSnBaMmgwYm1WemN5Z3dMakVwTG1OdmJuUnlZWE4wS0RFdU1pa3VjMkYwZFhKaGRHVW9NUzR5S1NVd1FTVXdPUzV2ZFhRb0tTVXdRWE53WldWa0pUSXdKVE5FSlRJd01DNDRcIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJyaXRjaHNlXzNcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdkSEo1YVc1bkpUSXdkRzhsTWpCblpYUWxNakJqYkc5elpYSWxNRUVsTWtZbE1rWmllU1V5TUZKcGRHTm9jMlVsTUVFbE1rWWxNa1pwYm5OMFlXZHlZVzB1WTI5dEpUSkdjbWwwWTJoelpTVXdRU1V5TUNVd1FXOXpZeWcyTUNVeVF5MHdMakF4TlNVeVF6QXVNeWt1WkdsbVppaHZjMk1vTmpBbE1rTXdMakE0S1M1eWIzUmhkR1VvVFdGMGFDNVFTU1V5UmpJcEtTVXdRU1V3T1M1dGIyUjFiR0YwWlZOallXeGxLRzV2YVhObEtETXVOU1V5UXpBdU1qVXBMbTF2WkhWc1lYUmxVMk5oYkdVb2IzTmpLREUxS1M1eWIzUmhkR1VvS0NrbE0wUWxNMFZOWVhSb0xuTnBiaWgwYVcxbEpUSkdNaWtwS1NVeVF6QXVOaWtsTUVFbE1Ea3VZMjlzYjNJb01TVXlRekF1TlNVeVF6QXVOQ2t1WTI5dWRISmhjM1FvTVM0MEtTVXdRU1V3T1M1aFpHUW9jM0pqS0c4d0tTNXRiMlIxYkdGMFpTaHZNQ1V5UXk0d05Da2xNa011TmlrbE1FRWxNRGt1YVc1MlpYSjBLQ2t1WW5KcFoyaDBibVZ6Y3lnd0xqRXBMbU52Ym5SeVlYTjBLREV1TWlrbE1FRWxNRGt1Ylc5a2RXeGhkR1ZUWTJGc1pTaHZjMk1vTWlrbE1rTXRNQzR5S1NVd1FTVXlNQ1V5TUM1dmRYUW9LUT09XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwicml0Y2hzZV80XCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1pHbHphVzUwWldkeVlYUnBiMjRsTUVFbE1rWWxNa1lsTWpCaWVTVXlNRkpwZEdOb2MyVWxNRUVsTWtZbE1rWWxNakJwYm5OMFlXZHlZVzB1WTI5dEpUSkdjbWwwWTJoelpTVXdRU1V5TUNVd1FXOXpZeWcxSlRKRExqRXBMbTF2WkhWc1lYUmxLRzV2YVhObEtEWXBKVEpETGpJeUtTNWthV1ptS0c4d0tTVXdRU1V5TUNVeU1DVXdPUzV0YjJSMWJHRjBaVk5qY205c2JGa29iM05qS0RJcExtMXZaSFZzWVhSbEtHOXpZeWdwTG5KdmRHRjBaU2dwSlRKRExqRXhLU2tsTUVFbE1Ea3VjMk5oYkdVb0xqY3lLUzVqYjJ4dmNpZ3dMams1SlRKRE1TNHdNVFFsTWtNeEtTVXdRU1V5TUNVeU1DVXdPUzV2ZFhRb0tRPT0gIFwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcImZsb3JfMFwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR1JteHZjaVV5TUdSbEpUSXdSblZsWjI4bE1FRWxNa1lsTWtab2RIUndjeVV6UVNVeVJpVXlSbVpzYjNKa1pXWjFaV2R2TG1kcGRHaDFZaTVwYnlVeVJpVXdRVzl6WXlnek1DVXlRekF1TURFbE1rTXhLU1V3UVM1dGRXeDBLRzl6WXlneU1DVXlReTB3TGpFbE1rTXhLUzV0YjJSMWJHRjBaU2h1YjJselpTZ3pKVEpETVNrcExuSnZkR0YwWlNnd0xqY3BLU1V3UVM1d2IzTjBaWEpwZW1Vb0pUVkNNeVV5UXpFd0pUSkRNaVUxUkM1bVlYTjBLREF1TlNrdWMyMXZiM1JvS0RFcEtTVXdRUzV0YjJSMWJHRjBaVkp2ZEdGMFpTaHZNQ1V5UXlncEpUTkVKVE5GYlc5MWMyVXVlQ293TGpBd015a2xNRUV1YjNWMEtDaz0gXCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwibWFoYWxpYV8wXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1RXRm9ZV3hwWVNVeU1FZ3RVaVV3UVNVeVJpVXlSaVV5TUVsSEpUTkJKVEl3SlRRd2JXMWZhSEpmSlRCQkpUQkJjMmhoY0dVb01qQWxNa013TGpFbE1rTXdMakF4S1NVd1FTVXlNQ1V5TUM1elkyRnNaU2dvS1NVeU1DVXpSQ1V6UlNVeU1FMWhkR2d1YzJsdUtIUnBiV1VwS2pNcEpUQkJKVEl3SlRJd0xuSmxjR1ZoZENnb0tTVXlNQ1V6UkNVelJTVXlNRTFoZEdndWMybHVLSFJwYldVcEtqRXdLU1V3UVNVeU1DVXlNQzV0YjJSMWJHRjBaVkp2ZEdGMFpTaHZNQ2tsTUVFbE1qQWxNakF1YzJOaGJHVW9LQ2tsTWpBbE0wUWxNMFVsTWpCTllYUm9Mbk5wYmloMGFXMWxLU295S1NVd1FTVXlNQ1V5TUM1dGIyUjFiR0YwWlNodWIybHpaU2d5SlRKRE1Da3BKVEJCSlRJd0pUSXdMbkp2ZEdGMFpTZ3dMakVsTWtNbE1qQXdMamtwSlRCQkxtOTFkQ2h2TUNrbE1FRWxNRUZ6Y21Nb2J6QXBKVEJCTG0xdlpIVnNZWFJsS0c5ell5ZzFNREFsTWtNd0pUSkRNQ2twSlRCQkxtOTFkQ2h2TVNrbE1FRWxNRUZ6Y21Nb2J6RXBKVEJCTG0xdlpIVnNZWFJsUzJGc1pXbGtLSFp2Y205dWIya29LQ2tsTWpBbE0wUWxNMFVsTWpCTllYUm9Mbk5wYmloMGFXMWxLU296SlRKRE1DNHhKVEpETUM0d01Ta2xNa01vS1NVeU1DVXpSQ1V6UlNVeU1FMWhkR2d1YzJsdUtIUnBiV1VwS2pNcEpUQkJMbk5qWVd4bEtDZ3BKVEl3SlRORUpUTkZKVEl3VFdGMGFDNXphVzRvZEdsdFpTa3FNeWtsTUVFdWIzVjBLRzh5S1NVd1FTVXdRWEpsYm1SbGNpaHZNaWs9XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwibWFoYWxpYV8xXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1RXRm9ZV3hwWVNVeU1FZ3RVaVV3UVNVeVJpVXlSaVV5TUVsSEpUTkJKVEl3SlRRd2JXMWZhSEpmSlRCQkpUQkJjMmhoY0dVb0tDa2xNakFsTTBRbE0wVWxNakJOWVhSb0xuTnBiaWgwYVcxbEtTVXlRakVxTWlrbE1FRXVjbTkwWVhSbEtDZ3BKVEl3SlRORUpUTkZKVEl3VFdGMGFDNVFTU1V5TUNvbE1qQnRiM1Z6WlM1NEpUSXdKVEpHTVRnd0tTVXdRUzV5WlhCbFlYUllLRE1wSlRCQkxuSmxjR1ZoZEZrb0tDa2xNMFFsTTBWTllYUm9Mbk5wYmloMGFXMWxLU28xS1NVd1FTNXpZMkZzWlNnb0tTVXlNQ1V6UkNVelJTVXlNRTFoZEdndVVFa2xNa1kwS1NVd1FTNWliR1Z1WkNoemNtTW9iekFwTG1OdmJHOXlLREVsTWtNd0pUSkRNQ2twSlRCQkxtMXZaSFZzWVhSbEtHOXpZeWd5TUNVeVF5VXlNREFsTWtNdU5Da3BKVEJCTG10aGJHVnBaQ2d5S1NVd1FTVXlNQzV2ZFhRb2J6QXBKVEJCSlRCQmNtVnVaR1Z5S0c4d0tRPT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJtYWhhbGlhXzJcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3Vm1Wc2RtVjBKVEl3VUc5dmJDVXdRU1V5UmlVeVJpVXlNR0o1SlRJd1RXRm9ZV3hwWVNVeU1FZ3RVaVV3UVNVeVJpVXlSaVV5TUVsSEpUTkJKVEl3YlcxZmFISmZKVEJCSlRCQkpUQkJibTlwYzJVb0tTVXdRUzVqYjJ4dmNpZ29LU1V5TUNVelJDVXpSU1V5TUdFdVptWjBKVFZDTWlVMVJDb3lKVEpETUNVeVF5NDJLU1V3UVM1dGIyUjFiR0YwWlNodWIybHpaU2dvS1NVeU1DVXpSQ1V6UlNVeU1HRXVabVowSlRWQ01DVTFSQ294TUNrcEpUQkJMbk5qWVd4bEtDZ3BKVE5FSlRORkpUSXdZUzVtWm5RbE5VSXlKVFZFS2pVcEpUQkJMbXhoZVdWeUtDVXdRU1V5TUNVeU1ITnlZeWh2TUNrbE1FRWxNakFsTWpBdWJXRnpheWh2YzJNb01UQXBMbTF2WkhWc1lYUmxVbTkwWVhSbEtHOXpZeWdwSlRKRE9UQWxNa013S1NrbE1FRWxNakFsTWpBdWMyTmhiR1VvS0NrbE1qQWxNMFFsTTBVbE1qQmhMbVptZENVMVFqQWxOVVFxTWlrbE1FRWxNakFsTWpBdWJIVnRZU2d3TGpJbE1rTXdMak1wSlRCQktTVXdRUzVpYkdWdVpDaHZNQ2tsTUVFdWIzVjBLRzh3S1NVd1FTVXdRVzl6WXlncEpUQkJMbTF2WkhWc1lYUmxLRzV2YVhObEtDZ3BKVEl3SlRORUpUTkZKVEl3WVM1bVpuUWxOVUl4SlRWRUpUSkNOU2twSlRCQkxtTnZiRzl5S0RFbE1rTXdKVEpETUNrbE1FRXViM1YwS0c4eEtTVXdRU1V3UVhOeVl5aHZNQ2tsTUVFdWJXOWtkV3hoZEdVb2J6RXBKVEJCTG14aGVXVnlLQ1V3UVNVeU1DVXlNSE55WXlodk1Ta2xNRUVsTWpBbE1qQXViV0Z6YXlodk1Ta2xNRUVsTWpBbE1qQXVjMkYwZFhKaGRHVW9OeWtsTUVFcEpUQkJMbTF2WkhWc1lYUmxVbTkwWVhSbEtHOHhLU1V3UVM1eWIzUmhkR1VvS0NVM1FuUnBiV1VsTjBRcEpUSXdKVE5FSlRORkpUSXdkR2x0WlNVeU5UTTJNQ293TGpBMUtTVXdRUzV2ZFhRb2J6SXBKVEJCSlRCQmNtVnVaR1Z5S0c4eUtRPT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJtYWhhbGlhXzNcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3WW5rbE1qQk5ZV2hoYkdsaEpUSXdTQzFTSlRCQkpUSkdKVEpHSlRJd1NVY2xNMEVsTWpCdGJWOW9jbDhsTUVFbE1FRnphR0Z3WlNnb0tTVXpSQ1V6UlUxaGRHZ3VjMmx1S0hScGJXVXBKVEpDTVNvekpUSkRKVEl3TGpVbE1rTXVNREVwSlRCQkxuSmxjR1ZoZENnMUpUSkRNeVV5UXlVeU1DZ3BKVE5FSlRORllTNW1ablFsTlVJd0pUVkVLaklsTWtNbE1qQW9LU1V6UkNVelJXRXVabVowSlRWQ01TVTFSQ295S1NVd1FTNXpZM0p2Ykd4WktDNDFKVEpETUM0eEtTVXdRUzVzWVhsbGNpZ2xNRUVsTWpBbE1qQnpjbU1vYnpFcEpUQkJKVEl3SlRJd0xtMWhjMnNvYnpBcEpUQkJKVEl3SlRJd0xteDFiV0VvTGpBeEpUSkRKVEl3TGpFcEpUQkJKVEl3SlRJd0xtbHVkbVZ5ZENndU1pa2xNRUVwSlRCQkxtMXZaSFZzWVhSbEtHOHhKVEpETGpBeUtTVXdRUzV2ZFhRb2J6QXBKVEJCSlRCQmIzTmpLRFF3SlRKREpUSXdNQzR3T1NVeVF5VXlNREF1T1NrbE1FRXVZMjlzYjNJb0xqa2xNa013SlRKRE5Ta2xNRUV1Ylc5a2RXeGhkR1VvYjNOaktERXdLUzV5YjNSaGRHVW9NU1V5UXlVeU1EQXVOU2twSlRCQkxuSnZkR0YwWlNneEpUSkRKVEl3TUM0eUtTVXdRUzV2ZFhRb2J6RXBKVEJCSlRCQmNtVnVaR1Z5S0c4d0tTVXdRU1V3UVE9PVwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcIm1haGFsaWFfNFwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdRMlZzYkhWc1lYSWxNakFsTWpZbE1qQkNiRzlpZFd4aGNpVXdRU1V5UmlVeVJpVXlNR0o1SlRJd1RXRm9ZV3hwWVNVeU1FZ3RVaVV3UVNVeVJpVXlSaVV5TUVsSEpUTkJKVEl3YlcxZmFISmZKVEJCSlRCQmMzQmxaV1FsTWpBbE0wUWxNakF3TGpNbE1FRWxNRUZ6YUdGd1pTZ3lNQ1V5UXpBdU1pVXlRekF1TXlrbE1FRXVZMjlzYjNJb01DNDFKVEpETUM0NEpUSkROVEFwSlRCQkpUSXdKVEl3TG5OallXeGxLQ2dwSlRJd0pUTkVKVE5GSlRJd1RXRjBhQzV6YVc0b2RHbHRaU2tsTWtJeEtqSXBKVEJCSlRJd0pUSXdMbkpsY0dWaGRDZ29LU1V5TUNVelJDVXpSU1V5TUUxaGRHZ3VjMmx1S0hScGJXVXBLakV3S1NVd1FTVXlNQ1V5TUM1dGIyUjFiR0YwWlZKdmRHRjBaU2h2TUNrbE1FRWxNakFsTWpBdWMyTmhiR1VvS0NrbE1qQWxNMFFsTTBVbE1qQk5ZWFJvTG5OcGJpaDBhVzFsS1NVeVFqRWxNakFxTVM0MUtTVXdRU1V5TUNVeU1DNXRiMlIxYkdGMFpTaHViMmx6WlNneUpUSkRNaWtwSlRCQkpUSXdKVEl3TG5KdmRHRjBaU2d4SlRKREpUSXdMaklwSlRCQkpUSXdKVEl3SlRKR0pUSkdKVEl3TG1sdWRtVnlkQ2d5TGpRcEpUQkJMbTkxZENodk1Da2xNRUU9XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwiYW5kcm9tZWRhXzBcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3TXk0d0pUQkJKVEpHSlRKR0pUSXdZbmtsTWpBbFEwVWxPVFJPUkZJd1RUTkVKVU5GSlRrMEpUQkJKVEpHSlRKR0pUSXdhSFIwY0hNbE0wRWxNa1lsTWtaM2QzY3VhVzV6ZEdGbmNtRnRMbU52YlNVeVJtRnVaSEp2YlROZlpHRWxNa1lsTUVFbE1FRWxNRUZ1YjJselpTZ3pKVEpETUM0ekpUSkRNeWt1ZEdoeVpYTm9LREF1TXlVeVF6QXVNRE1wTG1ScFptWW9iek1sTWtNd0xqTXBMbTkxZENodk1Ta2xNRUZuY21Ga2FXVnVkQ2dsTlVJd0xqTWxNa013TGpNbE1rTXpKVFZFS1M1a2FXWm1LRzh3S1M1aWJHVnVaQ2h2TVNrdWIzVjBLRzh6S1NVd1FYWnZjbTl1YjJrb016TWxNa016SlRKRE16QXBMbkp2ZEdGMFpTZ3pKVEpETUM0ekpUSkRNQ2t1Ylc5a2RXeGhkR1ZUWTJGc1pTaHZNaVV5UXpBdU15a3VZMjlzYjNJb0xUTWxNa016SlRKRE1Da3VZbkpwWjJoMGJtVnpjeWd6S1M1dmRYUW9iekFwSlRCQmMyaGhjR1VvTXpBbE1rTXdMak1sTWtNeEtTNXBiblpsY25Rb0tDVTNRblJwYldVbE4wUXBKVE5FSlRORlRXRjBhQzV6YVc0b2RHbHRaU2txTXlrdWIzVjBLRzh5S1NVd1FTVXdRWEpsYm1SbGNpaHZNeWtsTUVFPVwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcImFuZHJvbWVkYV8xXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd015NHpKVEJCSlRKR0pUSkdKVEl3WW5rbE1qQWxRMFVsT1RST1JGSXdUVE5FSlVORkpUazBKVEJCSlRKR0pUSkdKVEl3YUhSMGNITWxNMEVsTWtZbE1rWjNkM2N1YVc1emRHRm5jbUZ0TG1OdmJTVXlSbUZ1WkhKdmJUTmZaR0VsTWtZbE1FRWxNRUZ2YzJNb0tTNXRiMlIxYkdGMFpWSnZkR0YwWlNodk1DVXlRekF1TXlrdWIzVjBLQ2tsTUVGdmMyTW9Nek1sTWtNd0xqTWxNa013TGpNcExtUnBabVlvYnpNbE1rTXpLUzV2ZFhRb2J6RXBKVEJCYjNOaktETWxNa013TGpNbE1rTXpNeWt1Ylc5a2RXeGhkR1ZMWVd4bGFXUW9iek1sTWtNektTNWthV1ptS0c4d0tTNXZkWFFvYnpJcEpUQkJjM0pqS0c4d0pUSkRNeWt1YlhWc2RDaHZNU1V5UXpNcExtdGhiR1ZwWkNnektTNXZkWFFvYnpNcEpUQkJjbVZ1WkdWeUtHOHlLUT09XCJcbn0sXG57XG5cInNrZXRjaF9pZFwiOiBcImFzZHJ1YmFsXzBcIixcbiBcImNvZGVcIjogXCJKVEpHSlRKR1FYTmtjaVZETXlWQ1FXSmhiQ1V5TUVkdmJXVjZKVEJCSlRCQmJtOXBjMlVvTXlVeVF6QXVNU1V5UXpjcEpUQkJMbkp2ZEdGMFpTZ3hKVEpETFRFbE1rTXRNaWt1YldGemF5aHphR0Z3WlNneU1Da3BKVEJCTG1OdmJHOXlZVzFoS0RBdU5Ta2xNRUV1Ylc5a2RXeGhkR1ZUWTJGc1pTaHZNQ2tsTUVFdWJXOWtkV3hoZEdWVFkyRnNaU2h2TUNVeVF6RWxNa01wSlRCQkxtSnNaVzVrS0c4d0tTVXdRUzVpYkdWdVpDaHZNQ2tsTUVFdVlteGxibVFvYnpBcEpUQkJMbUpzWlc1a0tHOHdLU1V3UVM1dmRYUW9iekFwSlRCQlwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJmbG9yXzFcIixcblwiY29kZVwiOiBcIkpUSkdKVEpHU0hsa2NtRWxNakJIYkdsMFkyaDVKVEl3VTJ4cGRDVXlNRk5qWVc0bE1FRWxNa1lsTWtaR2JHOXlKVEl3WkdVbE1qQkdkV1ZuYnlVd1FTVXlSaVV5Um1oMGRIQnpKVE5CSlRKR0pUSkdabXh2Y21SbFpuVmxaMjh1WjJsMGFIVmlMbWx2SlRKR0pUSXdKVEJCY3pBdWFXNXBkRU5oYlNncEpUQkJjM0pqS0hNd0tTNXpZWFIxY21GMFpTZ3lLUzVqYjI1MGNtRnpkQ2d4TGpNcExteGhlV1Z5S0hOeVl5aHZNQ2t1YldGemF5aHphR0Z3WlNnMEpUSkRNaWt1YzJOaGJHVW9NQzQxSlRKRE1DNDNLUzV6WTNKdmJHeFlLREF1TWpVcEtTNXpZM0p2Ykd4WUtEQXVNREF4S1NrdWJXOWtkV3hoZEdVb2J6QWxNa013TGpBd01Ta3ViM1YwS0c4d0tTVXdRU1V3UVE9PVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJmbG9yXzJcIixcblwiY29kZVwiOiBcIkpUSkdKVEpHUjJ4cGRHTm9KVEl3VW1sMlpYSWxNRUVsTWtZbE1rWkdiRzl5SlRJd1pHVWxNakJHZFdWbmJ5VXdRU1V5UmlVeVJtaDBkSEJ6SlROQkpUSkdKVEpHWm14dmNtUmxablZsWjI4dVoybDBhSFZpTG1sdkpUSkdKVEJCZG05eWIyNXZhU2c0SlRKRE1Ta2xNRUV1YlhWc2RDaHZjMk1vTVRBbE1rTXdMakVsTWtNb0tTVXpSQ1V6UlUxaGRHZ3VjMmx1S0hScGJXVXBLak1wTG5OaGRIVnlZWFJsS0RNcExtdGhiR1ZwWkNneU1EQXBLU1V3UVM1dGIyUjFiR0YwWlNodk1DVXlRekF1TlNrbE1FRXVZV1JrS0c4d0pUSkRNQzQ0S1NVd1FTNXpZM0p2Ykd4WktDMHdMakF4S1NVd1FTNXpZMkZzWlNnd0xqazVLU1V3UVM1dGIyUjFiR0YwWlNoMmIzSnZibTlwS0RnbE1rTXhLU1V5UXpBdU1EQTRLU1V3UVM1c2RXMWhLREF1TXlrbE1FRXViM1YwS0NrbE1FRWxNRUVsTUVGemNHVmxaQ1V5TUNVelJDVXlNREF1TVNVd1FTVXdRU1V3UVNVd1FRPT1cIlxufSxcblxue1xuXCJza2V0Y2hfaWRcIjogXCJuZXNzb18wXCIsXG5cImNvZGVcIjogXCJKVEJCSlRKR0pUSkdZMnh2ZFdSekpUSXdiMllsTWpCd1lYTnpZV2RsSlRCQkpUSkdKVEpHWW5rbE1qQk9aWE56YnlVd1FTVXlSaVV5Um5kM2R5NXVaWE56Ynk1NGVYb2xNRUVsTUVGemFHRndaU2dsTlVJMEpUSkROU1V5UXpZbE5VUXVabUZ6ZENnd0xqRXBMbk50YjI5MGFDZ3hLU1V5UXpBdU1EQXdNREF4SlRKREpUVkNNQzR5SlRKRE1DNDNKVFZFTG5OdGIyOTBhQ2d4S1NrbE1FRXVZMjlzYjNJb01DNHlKVEpETUM0MEpUSkRNQzR6S1NVd1FTNXpZM0p2Ykd4WUtDZ3BKVE5FSlRORlRXRjBhQzV6YVc0b2RHbHRaU293TGpJM0tTa2xNRUV1WVdSa0tDVXdRU1V5TUNVeU1ITm9ZWEJsS0NVMVFqUWxNa00xSlRKRE5pVTFSQzVtWVhOMEtEQXVNU2t1YzIxdmIzUm9LREVwSlRKRE1DNHdNREF3TURFbE1rTWxOVUl3TGpJbE1rTXdMamNsTWtNd0xqVWxNa013TGpNbE5VUXVjMjF2YjNSb0tERXBLU1V3UVNVeU1DVXlNQzVqYjJ4dmNpZ3dMallsTWtNd0xqSWxNa013TGpVcEpUQkJKVEl3SlRJd0xuTmpjbTlzYkZrb01DNHpOU2tsTUVFbE1qQWxNakF1YzJOeWIyeHNXQ2dvS1NVelJDVXpSVTFoZEdndWMybHVLSFJwYldVcU1DNHpNeWtwS1NVd1FTNWhaR1FvSlRCQkpUSXdKVEl3YzJoaGNHVW9KVFZDTkNVeVF6VWxNa00ySlRWRUxtWmhjM1FvTUM0eEtTNXpiVzl2ZEdnb01Ta2xNa013TGpBd01EQXdNU1V5UXlVMVFqQXVNaVV5UXpBdU55VXlRekF1TXlVMVJDNXpiVzl2ZEdnb01Ta3BKVEJCSlRJd0pUSXdMbU52Ykc5eUtEQXVNaVV5UXpBdU5DVXlRekF1TmlrbE1FRWxNakFsTWpBdWMyTnliMnhzV1NndE1DNHpOU2tsTUVFbE1qQWxNakF1YzJOeWIyeHNXQ2dvS1NVelJDVXpSVTFoZEdndWMybHVLSFJwYldVcU1DNDBNU2txTFRFcEtTVXdRUzVoWkdRb0pUQkJKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdjM0pqS0c4d0tTNXphR2xtZENnd0xqQXdNU1V5UXpBdU1ERWxNa013TGpBd01Ta2xNRUVsTWpBbE1qQWxNakFsTWpBbE1qQWxNakF1YzJOeWIyeHNXQ2dsTlVJd0xqQTFKVEpETFRBdU1EVWxOVVF1Wm1GemRDZ3dMakVwTG5OdGIyOTBhQ2d4S1NrbE1FRWxNakFsTWpBbE1qQWxNakFsTWpBbE1qQXVjMk5oYkdVb0pUVkNNUzR3TlNVeVF6QXVPU1UxUkM1bVlYTjBLREF1TXlrdWMyMXZiM1JvS0RFcEpUSkRKVFZDTVM0d05TVXlRekF1T1NVeVF6RWxOVVF1Wm1GemRDZ3dMakk1S1M1emJXOXZkR2dvTVNrcEpUQkJKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEpETUM0NE5Ta2xNRUV1Ylc5a2RXeGhkR1VvZG05eWIyNXZhU2d4TUNVeVF6SWxNa015S1NrbE1FRXViM1YwS0NrPVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJtYWxpdHppbl8wXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR1EwNUVVMFFsTUVFbE1rWWxNa1pvZEhSd0pUTkJKVEpHSlRKR2JXRnNhWFI2YVc1amIzSjBaWE11Ym1WMEpUSkdKVEJCSlRKR0pUSkdKVEl3YzJGdVpDVXlNSE53YVhKaGJITWxNRUVsTUVGdmMyTW9NeVV5UXlVeU1EQXVNREVsTWtNbE1qQXdMalFwSlRCQkxtTnZiRzl5S0RFdU1pVXlRekV1TWlVeVF6RXVNeWtsTUVFdWMyRjBkWEpoZEdVb01DNDBLU1V3UVM1dGIyUjFiR0YwWlZKbGNHVmhkQ2h2YzJNb01pa2xNa014SlRKREpUSXdNaVV5UXlVeU1EUWxNa01sTWpBektTVXdRUzV0YjJSMWJHRjBaVXRoYkdWcFpDaHZjMk1vTVRJbE1rTXdMakExSlRKRE1Da2xNa014S1NVd1FTNXNkVzFoSlRJd0tEQXVOQ2tsTUVFdWNtOTBZWFJsS0RRbE1rTWxNakF3TGpFbE1rTXdLU1V3UVM1dGIyUjFiR0YwWlNodk1DVXlReVV5TUNncEpUSXdKVE5FSlRORkpUSXdiVzkxYzJVdWVTVXlNQ293TGpBd01ESWxNakFwSlRCQkxuTmpZV3hsS0RFcExtUnBabVlvYnpFcEpUQkJMbTkxZENodk1Daz1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwibWFsaXR6aW5fMVwiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdRMDVFVTBRbE1FRWxNa1lsTWtab2RIUndKVE5CSlRKR0pUSkdiV0ZzYVhSNmFXNWpiM0owWlhNdWJtVjBKVEpHSlRCQkpUSkdKVEpHWVcxbFltRWxNRUVsTUVGdmMyTW9NVFVsTWtNbE1qQXdMakF4SlRKREpUSXdNQzR4S1M1dGRXeDBLRzl6WXlneEpUSkRKVEl3TFRBdU1Ta3ViVzlrZFd4aGRHVW9iM05qS0RJcExuSnZkR0YwWlNnMEpUSkRNU2tsTWtNbE1qQXlNQ2twSlRCQkxtTnZiRzl5S0RBbE1rTXlMalFsTWtNMUtTVXdRUzV6WVhSMWNtRjBaU2d3TGpRcEpUQkJMbXgxYldFb01TVXlRekF1TVNVeVF5VXlNQ2cySlRKREpUSXdLQ2tsTTBRbE0wVWxNakF4SlRJd0pUSkNKVEl3WVM1bVpuUWxOVUl6SlRWRUtTa2xNRUV1YzJOaGJHVW9NQzQzSlRKREpUSXdLQ2tsTTBRbE0wVWxNakF3TGpjbE1qQWxNa0lsTWpCaExtWm1kQ1UxUWpNbE5VUXBKVEJCTG1ScFptWW9iekFwSlRKR0pUSkdKVEl3YnpBbE1FRXViM1YwS0c4d0tTVXlSaVV5UmlVeU1HOHhcIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwibWFsaXR6aW5fMlwiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdRMDVFVTBRbE1FRWxNa1lsTWtab2RIUndKVE5CSlRKR0pUSkdiV0ZzYVhSNmFXNWpiM0owWlhNdWJtVjBKVEpHSlRCQkpUSkdKVEpHWTNKaGVua2xNakJ6Y1hWaGNtVnpKVEJCSlRCQmMyaGhjR1VvTkNVeVF5VXlNQ2d3TGpBeEpUSkRKVEl3S0NrbE0wUWxNMFVsTWpBd0xqSWxNakFsTWtJbE1qQmhMbVptZENVMVFqSWxOVVFwSlRKRE1Ta2xNRUV1YlhWc2RDaHZjMk1vTVNVeVF5VXlNREVwTG0xdlpIVnNZWFJsS0c5ell5ZzFLUzV5YjNSaGRHVW9NUzQwSlRKRE1Ta2xNa016S1NrbE1FRXVZMjlzYjNJb01TVXlReklsTWtNMEtTVXdRUzV6WVhSMWNtRjBaU2d3TGpJcEpUQkJMbXgxYldFb01TNHlKVEpETUM0d05TVXlReVV5TUNnMUpUSkRKVEl3S0NrbE0wUWxNMFVsTWpBeUpUSXdKVEpDSlRJd1lTNW1ablFsTlVJekpUVkVLU2tsTUVFdWMyTmhiR1VvTUM0MkpUSkRKVEl3S0NrbE0wUWxNMFVsTWpBd0xqa2xNakFsTWtJbE1qQmhMbVptZENVMVFqTWxOVVFwSlRCQkxtUnBabVlvYnpBcEpUSkdKVEpHSlRJd2J6QWxNRUV1YjNWMEtHOHdLU1V5UmlVeVJpVXlNRzh4XCJcbn0sXG57XG5cInNrZXRjaF9pZFwiOiBcImtob3BhcnppXzBcIixcblwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1NHRndjSGtsTWpCTllXNWtZV3hoSlRCQkpUSkdKVEpHSlRJd1Fua2xNakJCWW1ocGJtRjVKVEl3UzJodmNHRnllbWtsTUVFbE1rWWxNa1lsTWpCMGQybDBkR1Z5SlRKR1oybDBhSFZpSlRKR2FXNXpkR0ZuY21GdEpUTkJKVEl3SlRRd2EyaHZjR0Z5ZW1rbE1FRjJiM0p2Ym05cEtEVWxNa010TUM0eEpUSkROU2tsTUVFdVlXUmtLRzl6WXlneEpUSkRNQ1V5UXpFcEtTNXJZV3hsYVdRb01qRXBKVEJCTG5OallXeGxLREVsTWtNeEpUSkRNaWt1WTI5c2IzSmhiV0VvS1M1dmRYUW9iekVwSlRCQmMzSmpLRzh4S1M1dGRXeDBLSE55WXloek1Da3ViVzlrZFd4aGRHVlNiM1JoZEdVb2J6RWxNa014TURBcEpUSkRKVEl3TFRBdU5Ta2xNRUVsTWpBbE1qQXViM1YwS0c4d0tTVXdRU1V3UVE9PVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJraG9wYXJ6aV8xXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR0pUSXdVR1Z5Y0dWMGRXRnNKVEl3Wld4bGRtRjBiM0lsTWpCaWRYUjBiMjV6SlRCQkpUSkdKVEpHSlRJd1Fua2xNakJMYUc5d1lYSjZhU1V3UVNVeVJpVXlSaVV5TUdoMGRIQWxNMEVsTWtZbE1rWnJhRzl3WVhKNmFTNWpiMjBsTUVFbE1FRnphR0Z3WlNnektTNWhaR1FvYjNOaktERWxNa013TGpVbE1rTXhLU1V5UXlVeU1ERXBKVEJCSlRBNUxtRmtaQ2h2TVNVeVF5VXlNQ2dwSlRJd0pUTkVKVE5GSlRJd0tFMWhkR2d1YzJsdUtIUnBiV1VsTWtZMEtTVXlNQ29sTWpBd0xqY2xNakFsTWtJbE1qQXdMakVwS1NVd1FTVXdPU1V5UmlVeVJpNXlaWEJsWVhRb05Ta2xNRUVsTWpBbE1qQWxNRGt1YzJOaGJHVW9LQ2tsTTBRbE0wVk5ZWFJvTG5OcGJpaDBhVzFsSlRJd0pUSkdKVEl3TVRZcEtTNXliM1JoZEdVb01DVXlReVV5TUMwd0xqRXBKVEJCSlRBNUxtOTFkQ2h2TVNrbE1FRWxNRUZ6Y21Nb2J6RXBKVEJCSlRJd0pUSXdMbkp2ZEdGMFpTZ3dKVEpETUM0eEtTVXdRU1V5TUNVeU1DNXZkWFFvS1E9PVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJraG9wYXJ6aV8yXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR0pUSXdVbVZoYkd4NUpUSXdURzkyWlNVd1FTVXlSaVV5UmlVeU1HSjVKVEl3UVdKb2FXNWhlU1V5TUV0b2IzQmhjbnBwSlRCQkpUSkdKVEpHSlRJd2FIUjBjQ1V6UVNVeVJpVXlSbXRvYjNCaGNucHBMbU52YlNVd1FXOXpZeWd4TURBbE1rTXRNQzR3TVRJME5TVXlRekVwTG5CcGVHVnNZWFJsS0RVd0tTNXJZV3hsYVdRb0tDa2xNMFFsTTBVb1RXRjBhQzV6YVc0b2RHbHRaU1V5UmpncEtqa2xNa0l6S1NrdWNtOTBZWFJsS0RBbE1rTXdMakV5TlNrbE1FRXViVzlrZFd4aGRHVlNiM1JoZEdVb2MyaGhjR1VvTXlrdWMyTmhiR1VvS0NrbE0wUWxNMFVvVFdGMGFDNWpiM01vZEdsdFpTa3FNaWtwTG5KdmRHRjBaU2d3SlRKRExUQXVNalVwS1M1a2FXWm1LSE55WXlodk1Da3VZbkpwWjJoMGJtVnpjeWd3TGpNcEtTVXdRU1V5TUNVeU1DNXZkWFFvS1E9PVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJraG9wYXJ6aV8zXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR0pUSXdRWEZoZFhScFl5VXlNR0pzZFdKekpUQkJKVEpHSlRKR0pUSXdRbmtsTWpCTGFHOXdZWEo2YVNVd1FTVXlSaVV5UmlVeU1HaDBkSEJ6SlROQkpUSkdKVEpHYTJodmNHRnllbWt1WTI5dEpUQkJKVEJCWjNKaFpHbGxiblFvTUM0eU5Ta2xNRUV1WVdSa0tHNXZhWE5sS0NrbE1rTWxNakFvS1NVelJDVXpSVTFoZEdndVkyOXpLSFJwYldVcEtTVXdRUzV0YjJSMWJHRjBaVkp2ZEdGMFpTaHpjbU1vYnpBcExuSnZkR0YwWlNnd0pUSkRKVEl3TFRBdU5USXBKVEpESlRJd01DNHlLUzV0ZFd4MEtITm9ZWEJsS0RNMk1Da2xNa01sTWpBd0xqZ3BKVEJCTG5KbGNHVmhkQ2d4TUNVeVF6VXBMbTExYkhRb2MyaGhjR1VvTXpZd0tTNXpZMkZzWlNnb0tTVXpSQ1V6UlUxaGRHZ3VjMmx1S0hScGJXVXBLU1V5UXlVeU1EQXVPQ2t1Y205MFlYUmxLREFsTWtNbE1qQXdMaklwSlRCQkxtUnBabVlvYzNKaktHOHdLUzV5YjNSaGRHVW9NQ1V5UXlVeU1DMHdMaklwSlRKREpUSXdNQzR5S1NVd1FTNXZkWFFvS1E9PVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJjZWxlc3RlXzBcIixcblwiY29kZVwiOiBcIkpUQkJKVEl3SlRKR0pUSkdKVEl3VUhWbGNuUmhjeVV5TUVsSkpUQkJKVEpHSlRKR0pUSXdjRzl5SlRJd1EyVnNaWE4wWlNVeU1FSmxkR0Z1WTNWeUpUQkJKVEpHSlRKR0pUSXdhSFIwY0hNbE0wRWxNa1lsTWtabmFYUm9kV0l1WTI5dEpUSkdaWE56ZEdWaVlXNGxNRUVsTUVGdmMyTW9NVE1sTWtNd0pUSkRNU2tsTUVFbE1qQWxNakF1YTJGc1pXbGtLQ2tsTUVFbE1qQWxNakF1YldGemF5aHphR0Z3WlNnMEpUSkRNQzR6SlRKRE1Ta3BKVEJCSlRJd0pUSXdMbTF2WkhWc1lYUmxVbTkwWVhSbEtITm9ZWEJsS0RRbE1rTXdMakVsTWtNeEtTa2xNRUVsTWpBbE1qQXViVzlrZFd4aGRHVlNiM1JoZEdVb2MyaGhjR1VvTkNVeVF6QXVNU1V5UXpBdU9Ta3BKVEJCSlRJd0pUSXdMbTF2WkhWc1lYUmxVbTkwWVhSbEtITm9ZWEJsS0RRbE1rTXdMakVsTWtNd0xqZ3BLU1V3UVNVeU1DVXlNQzV6WTJGc1pTZ3dMak1wSlRCQkpUSXdKVEl3TG1Ga1pDaHphR0Z3WlNnMEpUSkRNQzR5SlRKRE1Ta3VZMjlzYjNJb01DNHpKVEpETVNVeVF6RWxNa013TGpVcEtTVXdRU1V5TUNVeU1DNXliM1JoZEdVb0tDa2xNMFFsTTBWMGFXMWxLU1V3UVNVeU1DVXlNQzV2ZFhRb0tRPT1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwiY2VsZXN0ZV8xXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR0pUSXdVSFZsY25SaGN5VXlNRWxKU1NVd1FTVXlSaVV5UmlVeU1IQnZjaVV5TUVObGJHVnpkR1VsTWpCQ1pYUmhibU4xY2lVd1FTVXlSaVV5UmlVeU1HaDBkSEJ6SlROQkpUSkdKVEpHWjJsMGFIVmlMbU52YlNVeVJtVnpjM1JsWW1GdUpUQkJKVEl3SlRCQmIzTmpLRFF3SlRKRE1DNHlKVEpETVNrbE1FRWxNakFsTWpBdWJXOWtkV3hoZEdWVFkyRnNaU2h2YzJNb05EQWxNa013SlRKRE1Ta3VhMkZzWldsa0tEZ3BLU1V3UVNVeU1DVXlNQzV5WlhCbFlYUW9NaVV5UXpRcEpUQkJKVEl3SlRJd0xtMXZaSFZzWVhSbEtHOHdKVEpETUM0d05Ta2xNRUVsTWpBbE1qQXViVzlrZFd4aGRHVkxZV3hsYVdRb2MyaGhjR1VvTkNVeVF6QXVNU1V5UXpFcEtTVXdRU1V5TUNVeU1DNXZkWFFvYnpBcFwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJjZWxlc3RlXzJcIixcblwiY29kZVwiOiBcIkpUQkJKVEl3SlRKR0pUSkdKVEl3VUhWbGNuUmhjeVV3UVNVeVJpVXlSaVV5TUhCdmNpVXlNRU5sYkdWemRHVWxNakJDWlhSaGJtTjFjaVV3UVNVeVJpVXlSaVV5TUdoMGRIQnpKVE5CSlRKR0pUSkdaMmwwYUhWaUxtTnZiU1V5Um1WemMzUmxZbUZ1SlRCQkpUQkJiM05qS0RFekpUSkRNQ1V5UXpFcEpUQkJKVEl3SlRJd0xtMXZaSFZzWVhSbEtHOXpZeWd5TVNVeVF6QXVNalVsTWtNd0tTa2xNRUVsTWpBbE1qQXViVzlrZFd4aGRHVlRZMkZzWlNodmMyTW9NelFwS1NVd1FTVXlNQ1V5TUM1dGIyUjFiR0YwWlV0aGJHVnBaQ2h2YzJNb05UVXBKVEpETUM0eEpUSkRNU2tsTUVFbE1qQWxNakF1YjNWMEtDaz1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwiYWxleGFuZHJlXzBcIixcblwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd0pUSXlkR2hsTFhkaGJHd2xNaklsTUVFbE1rWWxNa1lsTWpCQmJHVjRZVzVrY21VbE1qQlNZVzVuWld3bE1FRWxNa1lsTWtZbE1qQjNkM2N1WVd4bGVHRnVaSEpsY21GdVoyVnNMbUZ5ZEM1aWNpVXlSbWg1WkhKaExtaDBiV3dsTUVFbE1FRnpjR1ZsWkNVelJDNHdNakl5SlRCQmIzTmpLRFE0SlRKRExTNHhKVEpETUNrdWRHaHlaWE5vS0NVMVFpNHpKVEpETGpjbE5VUXVabUZ6ZENndU56VXBKVEpETUNrdVkyOXNiM0lvTUNVeVF6QWxNa014S1NVd1FTVXdRUzVoWkdRb0pUQkJKVEl3SlRJd0pUSXdKVEl3YjNOaktESTRKVEpETGpFbE1rTXdLUzUwYUhKbGMyZ29KVFZDTGpNbE1rTXVOeVUxUkM1bVlYTjBLQzQzTlNrbE1rTXdLUzV5YjNSaGRHVW9NeTR4TkNVeVJqUXBKVEJCSlRJd0pUSXdKVEl3SlRJd0xtTnZiRzl5S0RFbE1rTXdKVEpETUNrbE1FRWxNakFsTWpBbE1qQWxNakF1Ylc5a2RXeGhkR1ZUWTJGc1pTZ2xNakJ2YzJNb05qUWxNa010TGpBeEpUSkRNQ2t1ZEdoeVpYTm9LQ1UxUWk0ekpUSkRMamNsTlVRdVptRnpkQ2d1TnpVcEpUSkRNQ2tsTWpBcEpUQkJLU1V3UVM1a2FXWm1LQ1V3UVNVeU1DVXlNQ1V5TUNVeU1HOXpZeWd5T0NVeVF5NHhKVEpETUNrdWRHaHlaWE5vS0NVMVFpNHpKVEpETGpjbE5VUXVabUZ6ZENndU5Ta2xNa013S1M1eWIzUmhkR1VvTXk0eE5DVXlSaklwSlRCQkpUSXdKVEl3SlRJd0pUSXdMbU52Ykc5eUtERWxNa013SlRKRE1Ta2xNRUVsTWpBbE1qQWxNakFsTWpBdWJXOWtkV3hoZEdWVFkyRnNaU2dsTWpCdmMyTW9OalFsTWtNdExqQXhOU1V5UXpBcExuUm9jbVZ6YUNnbE5VSXVNeVV5UXk0M0pUVkVMbVpoYzNRb0xqVXBKVEpETUNrbE1qQXBKVEJCS1NVd1FTNXRiMlIxYkdGMFpWSnZkR0YwWlNnbE1qQnZjMk1vTlRRbE1rTXRMakF3TlNVeVF6QXBMblJvY21WemFDZ2xOVUl1TXlVeVF5NDNKVFZFTG1aaGMzUW9MakkxS1NVeVF6QXBKVEl3S1NVd1FTNXRiMlIxYkdGMFpWTmpZV3hsS0NVeU1HOXpZeWcwTkNVeVF5MHVNREl3SlRKRE1Da3VkR2h5WlhOb0tDVTFRaTR6SlRKRExqY2xOVVF1Wm1GemRDZ3VNalVwSlRKRE1Da2xNakFwSlRCQkxtTnZiRzl5WVcxaEtDVXlNQ2dwSlRORUpUTkZUV0YwYUM1emFXNG9kR2x0WlNVeVJqSTNLU291TURFeU1qSWxNa0k1TGpnNUtTVXdRUzV6WTJGc1pTZ3lMakV5TWlrbE1FRWxNRUV1YjNWMEtDaz1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwiYWxleGFuZHJlXzFcIixcblwiY29kZVwiOiBcIkpUQkJKVEl3SlRKR0pUSkdKVEl3SlRJeVpYbGxKVEl3YjJZbE1qQjBhR1VsTWpCaVpXaHZiR1JsY2lVeU1pVXdRU1V5UmlVeVJpVXlNRUZzWlhoaGJtUnlaU1V5TUZKaGJtZGxiQ1V3UVNVeVJpVXlSaVV5TUhkM2R5NWhiR1Y0WVc1a2NtVnlZVzVuWld3dVlYSjBMbUp5SlRKR2FIbGtjbUV1YUhSdGJDVXdRU1V3UVc1dmFYTmxLRFlsTWtNdU1EVXBKVEJCTG0xMWJIUW9KVEl3YjNOaktEa2xNa013SlRKREpUSXdLQ2tsTTBRbE0wVk5ZWFJvTG5OcGJpaDBhVzFsSlRKR01TNDFLU1V5UWpJbE1qQXBKVEl3S1NVd1FTNXRkV3gwS0NVd1FTVXlNQ1V5TUNVeU1DVXlNRzV2YVhObEtEa2xNa011TURNcExtSnlhV2RvZEc1bGMzTW9NUzR5S1M1amIyNTBjbUZ6ZENneUtTVXdRU1V5TUNVeU1DVXlNQ1V5TUM1dGRXeDBLQ1V5TUc5ell5ZzVKVEpETUNVeVF5VXlNQ2dwSlRORUpUTkZUV0YwYUM1emFXNG9kR2x0WlNVeVJqTXBKVEpDTVRNbE1qQXBKVEl3S1NVd1FTa2xNRUV1WkdsbVppZ2xNRUVsTWpBbE1qQWxNakFsTWpCdWIybHpaU2d4TlNVeVF5NHdOQ2t1WW5KcFoyaDBibVZ6Y3lndU1pa3VZMjl1ZEhKaGMzUW9NUzR6S1NVd1FTVXlNQ1V5TUNVeU1DVXlNQzV0ZFd4MEtDVXlNRzl6WXlnNUpUSkRNQ1V5UXlVeU1DZ3BKVE5FSlRORlRXRjBhQzV6YVc0b2RHbHRaU1V5UmpVcEpUSkNNVE1sTWpBcEpUSXdLU1V3UVNVeU1DVXlNQ1V5TUNVeU1DNXliM1JoZEdVb0pUSXdLQ2tsTTBRbE0wVjBhVzFsSlRKR016TWxNakFwSlRCQktTVXdRUzV6WTJGc1pTZ2xNakFvS1NVelJDVXpSVTFoZEdndWMybHVLSFJwYldVbE1rWTJMaklwS2k0eE1pVXlRaTR4TlNVeU1Da2xNRUV1Ylc5a2RXeGhkR1ZUWTJGc1pTZ2xNRUVsTWpBbE1qQWxNakFsTWpCdmMyTW9NeVV5UXpBbE1rTXdLUzV0ZFd4MEtDVXlNRzl6WXlnekpUSkRNQ1V5UXpBcExuSnZkR0YwWlNnekxqRTBKVEpHTWlrbE1qQXBKVEJCSlRJd0pUSXdKVEl3SlRJd0xuSnZkR0YwWlNnbE1qQW9LU1V6UkNVelJYUnBiV1VsTWtZeU5TVXlNQ2t1YzJOaGJHVW9Mak01S1M1elkyRnNaU2d4SlRKRExqWWxNa014S1M1cGJuWmxjblFvS1NVd1FTVXlNQ1V5TUNVeU1DVXlNQ1V5UXlVeU1DZ3BKVE5FSlRORlRXRjBhQzV6YVc0b2RHbHRaU1V5UmpVdU15a3FNUzQxSlRKQ015VXlNQ1V5TUNrbE1FRXVjbTkwWVhSbEtDVXlNQ2dwSlRORUpUTkZkR2x0WlNVeVJqSXlKVEl3S1NVd1FTNXRkV3gwS0NVeU1ITm9ZWEJsS0RFd01DVXlReTQ1SlRKRExqQXhLUzV6WTJGc1pTZ3hKVEpETGpZbE1rTXhLU1V5TUNrbE1FRXViM1YwS0NrPVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJhbGV4YW5kcmVfMlwiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3SlRJeVpXZG5KVEl3YjJZbE1qQjBhR1VsTWpCd2FHOWxibWw0SlRJeUpUQkJKVEpHSlRKR0pUSXdRV3hsZUdGdVpISmxKVEl3VW1GdVoyVnNKVEJCSlRKR0pUSkdKVEl3ZDNkM0xtRnNaWGhoYm1SeVpYSmhibWRsYkM1aGNuUXVZbklsTWtab2VXUnlZUzVvZEcxc0pUQkJKVEJCYzNCbFpXUWxNMFF4TGpJbE1FRnphR0Z3WlNnNU9TVXlReTR4TlNVeVF5NDFLUzVqYjJ4dmNpZ3dKVEpETVNVeVF6SXBKVEJCSlRCQkxtUnBabVlvSlRJd2MyaGhjR1VvTWpRd0pUSkRMalVsTWtNd0tTNXpZM0p2Ykd4WUtDNHdOU2t1Y205MFlYUmxLQ1V5TUNncEpUTkVKVE5GZEdsdFpTVXlSakV3SlRJd0tTNWpiMnh2Y2lneEpUSkRNQ1V5UXk0M05Ta2xNakFwSlRCQkxtUnBabVlvSlRJd2MyaGhjR1VvT1RrbE1rTXVOQ1V5UXk0d01ESXBMbk5qY205c2JGZ29MakV3S1M1eWIzUmhkR1VvSlRJd0tDa2xNMFFsTTBWMGFXMWxKVEpHTWpBbE1qQXBMbU52Ykc5eUtERWxNa013SlRKRExqYzFLU1V5TUNrbE1FRXVaR2xtWmlnbE1qQnphR0Z3WlNnNU9TVXlReTR6SlRKRExqQXdNaWt1YzJOeWIyeHNXQ2d1TVRVcExuSnZkR0YwWlNnbE1qQW9LU1V6UkNVelJYUnBiV1VsTWtZek1DVXlNQ2t1WTI5c2IzSW9NU1V5UXpBbE1rTXVOelVwSlRJd0tTVXdRUzVrYVdabUtDVXlNSE5vWVhCbEtEazVKVEpETGpJbE1rTXVNREF5S1M1elkzSnZiR3hZS0M0eU1Da3VjbTkwWVhSbEtDVXlNQ2dwSlRORUpUTkZkR2x0WlNVeVJqUXdKVEl3S1M1amIyeHZjaWd4SlRKRE1DVXlReTQzTlNrbE1qQXBKVEJCTG1ScFptWW9KVEl3YzJoaGNHVW9PVGtsTWtNdU1TVXlReTR3TURJcExuTmpjbTlzYkZnb0xqSTFLUzV5YjNSaGRHVW9KVEl3S0NrbE0wUWxNMFYwYVcxbEpUSkdOVEFsTWpBcExtTnZiRzl5S0RFbE1rTXdKVEpETGpjMUtTVXlNQ2tsTUVFbE1FRXViVzlrZFd4aGRHVlRZMkZzWlNnbE1FRWxNakFsTWpCemFHRndaU2d5TkRBbE1rTXVOU1V5UXpBcExuTmpjbTlzYkZnb0xqQTFLUzV5YjNSaGRHVW9KVEl3S0NrbE0wUWxNMFYwYVcxbEpUSkdNVEFsTWpBcEpUQkJKVEl3SlRJd0pUSkRKVEl3S0NrbE0wUWxNMFVvVFdGMGFDNXphVzRvZEdsdFpTVXlSak1wS2k0eUtTVXlRaTR5SlRJd0tTVXdRU1V3UVM1elkyRnNaU2d4TGpZbE1rTXVOaVV5UXpFcEpUQkJMbTkxZENncFwiXG59LHtcblwic2tldGNoX2lkXCI6IFwiYWZhbGZsXzBcIixcblwiY29kZVwiOiBcIkpUSkdKVEpHWm1sc1pYUWxNakJ0YVdkdWIyNGxNRUVsTWtZbE1rWWxNakJCUmtGTVJrd2xNRUVsTWtZbE1rWWxNakJwYm5OMFlXZHlZVzBsTWtaaFgyWmZZV3htYkNVeU1DVXdRU1V3UVc5ell5Z3hNREFsTWtNdE1DNHdNREU0SlRKRE1DNHhOeWt1WkdsbVppaHZjMk1vTWpBbE1rTXdMakF3TURBNEtTNXliM1JoZEdVb1RXRjBhQzVRU1NVeVJqQXVNREF3TURNcEtTVXdRUzV0YjJSMWJHRjBaVk5qWVd4bEtHNXZhWE5sS0RFdU5TVXlRekF1TVRncExtMXZaSFZzWVhSbFUyTmhiR1VvYjNOaktERXpLUzV5YjNSaGRHVW9LQ2tsTTBRbE0wVk5ZWFJvTG5OcGJpaDBhVzFsSlRKR01qSXBLU2tsTWtNektTVXdRUzVqYjJ4dmNpZ3hNU1V5UXpBdU5TVXlRekF1TkNVeVF5VXlNREF1T1NVeVF5VXlNREF1TWlVeVF5VXlNREF1TURFeEpUSkRKVEl3TlNVeVF5VXlNREl5SlRKREpUSXdKVEl3TUM0MUpUSkRKVEl3TFRFcExtTnZiblJ5WVhOMEtERXVOQ2tsTUVFdVlXUmtLSE55WXlodk1Da3ViVzlrZFd4aGRHVW9iekFsTWtNdU1EUXBKVEpETGpZbE1rTWxNakF1T1NrbE1FRWxNakFsTWpBbE1rWWxNa1l1Y0dsNFpXeGhkR1VvTUM0MEpUSkRKVEl3TUM0eUpUSkRKVEl3TUM0eEtTVXdRUzVwYm5abGNuUW9LUzVpY21sbmFIUnVaWE56S0RBdU1EQXdNeVV5UXlVeU1ESXBMbU52Ym5SeVlYTjBLQ1V5TURBdU5TVXlReVV5TURJbE1rTWxNakF3TGpFbE1rTWxNakF5S1M1amIyeHZjaWcwSlRKREpUSXdMVElsTWtNbE1qQXdMakVwSlRCQkxtMXZaSFZzWVhSbFUyTmhiR1VvYjNOaktESXBKVEpETFRBdU1pVXlReVV5TURJbE1rTWxNakF4SlRKREpUSXdNQzR6S1NVd1FTVXlNQzV3YjNOMFpYSnBlbVVvTWpBd0tTVXlNQzV5YjNSaGRHVW9NU1V5UXlVeU1EQXVNaVV5UXlVeU1EQXVNREVsTWtNbE1qQXdMakF3TVNrbE1FRWxNakF1WTI5c2IzSW9NaklsTWtNbE1qQXRNaVV5UXlVeU1EQXVOU1V5UXlVeU1EQXVOU1V5UXlVeU1EQXVNREF3TVNVeVF5VXlNQ1V5TURBdU1TVXlReVV5TURBdU1pVXlReVV5TURncExtTnZiblJ5WVhOMEtEQXVNVGdsTWtNbE1qQXdMak1sTWtNbE1qQXdMakVsTWtNbE1qQXdMaklsTWtNbE1qQXdMakF6SlRKREpUSXdNU2tsTWpBdUpUSXdZbkpwWjJoMGJtVnpjeWd3TGpBd01ERWxNa01sTWpBdE1TVXlReVV5TURFd0tTVXdRU1V3T1M1dmRYUW9LUT09XCJcbn0sXG57XG5cInNrZXRjaF9pZFwiOiBcImVlcmllX2Vhcl8wXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR0pUSXdaV1ZmTWlVeU1DNGxNakJOVlV4VVNWWkZVbE5GSlRJd0xpVXlNSFJwYldVbE1qQmhibVFsTWpCbVpXVmtZbUZqYXlVd1FTVXlSaVV5UmlVeU1HVmZaU1V5TUNVeVJpVXlSaVV5TUNVME1HVmxjbWxsWDJWaGNpVXdRWEJoZENVeU1DVXpSQ1V5TUNncEpUTkVKVE5GSlRCQmMyOXNhV1FvS1NVd1FTNXNZWGxsY2loemIyeHBaQ2dwTG1ScFptWW9KVEJCSlRJd0pUSXdiM05qS0NoMGFXMWxKVEpHTVRZcEpUSXdLaVV5TURFbE1rTWxNakFvZEdsdFpTVXlSakV3TURBcEpUSXdLaVV5TURBdU1pVXlNQ1V5TUNrbE1FRWxNakFsTWpBbE1qQWxNakF1YlhWc2RDaHZjMk1vS0hScGJXVWxNa1k0S1NVeU1Db2xNakF4SlRKREpUSXdLSFJwYldVbE1rWXhNREEyS1NVeU1Db2xNakF3TGpJbE1qQWxNakFwTG5KdmRHRjBaU2d4TGpVM0tTa2xNRUVsTWpBbE1qQWxNakFsTWpBdWJXOWtkV3hoZEdVb0tITm9ZWEJsS0RFd05pVXlRekVsTWtNd0xqQTFLU2twSlRCQkpUSXdKVEl3SlRJd0pUSXdMbTExYkhRb2MyaGhjR1VvTVRBMkpUSkRNU1V5UXpBdU1EVXBLU1V3UVNVeU1DVXlNQ2twSlRCQkpUSXdKVEl3TG0xdlpIVnNZWFJsVTJOaGJHVW9iM05qS0RJbE1rTXdMakV5TlNrbE1rTXdMakV5TlNrbE1FRWxNa1lsTWtZbE1FRnpiMnhwWkNncEpUQkJMbXhoZVdWeUtITnZiR2xrS0RFbE1rTXhKVEpETVNrbE1FRWxNakFsTWpBdWJYVnNkQ2h3WVhRb0tTVXdRU1V5TUNVeU1DNWthV1ptS0hOeVl5aHZNQ2t1YzJOaGJHVW9NQzR5S1M1dGRXeDBLSE52Ykdsa0tDa2xNa01sTlVJd0xqY2xNa013TGpZbE1rTXdMalFsTWtNd0xqWWxOVVFwTG10aGJHVnBaQ2d4TGpBeEtTNXpZWFIxY21GMFpTZ3dMak1wS1NVd1FTa2xNRUV1YkdGNVpYSW9jMjlzYVdRb01TVXlRekVsTWtNeEtTVXdRU1V5TUNVeU1DVXlNQ1V5TUM1dFlYTnJLQ1V3UVNVeU1DVXlNQ1V5TUNVeU1DVXlNQ1V5TUc1dmFYTmxLRElsTWtNd0xqQTFLU1V3UVNVeU1DVXlNQ1V5TUNVeU1DVXlNQ1V5TUM1cGJuWmxjblFvS1M1amIyeHZjbUZ0WVNneUtTNXdiM04wWlhKcGVtVW9PQ1V5UXpRcExteDFiV0VvTUM0eU5Ta3VkR2h5WlhOb0tEQXVOU2tsTUVFbE1qQWxNakFsTWpBbE1qQWxNakFsTWpBdWJXOWtkV3hoZEdWU2IzUmhkR1VvYjNOaktERWxNa013TGpVcEtTVXdRU1V5TUNVeU1DVXlNQ1V5TUNrbE1FRWxNakFsTWpBbE1qQWxNakF1YlhWc2RDaG5jbUZrYVdWdWRDZ3dMalVwTG10aGJHVnBaQ2d4S1M1amIyeHZjbUZ0WVNneUtTNXpZWFIxY21GMFpTZ3hMakVwTG1OdmJuUnlZWE4wS0RFdU5pa3ViWFZzZENoemIyeHBaQ2dwSlRKRE1DNDBOU2twSlRCQkpUSXdKVEl3S1NrbE1FRWxNakFsTWpBdWIzVjBLQ2tsTUVFbE1rWWxNa1lsTUVGemNHVmxaQ1V6UkNVeU1EQXVOU1V3UVE9PVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJlZXJpZV9lYXJfMVwiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3WldWZk15VXlNQ1V5UmlVeVJreEpUa1ZUSlRCQkpUSkdKVEpHSlRJd1pWOWxKVEl3SlRKR0pUSkdKVEl3SlRRd1pXVnlhV1ZmWldGeUpUQkJKVEpHSlRKR0pUQkJKVEpHSlRKR1ltRnpaV1FsTWpCdmJpVXdRU1V5UmlVeVJpVTBNRzVoYjNSdlgyaHBaV1JoSlRCQkpUSkdKVEpHYUhSMGNITWxNMEVsTWtZbE1rWnVZVzkwYjJocFpXUmhMbU52YlNVeVJtSnNiMmNsTWtab2VXUnlZUzFpYjI5ckpUSkdKVEJCSlRKR0pUSkdKVEJCYmlVeU1DVXpSQ1V5TURnbE1FRmhKVEl3SlRORUpUSXdLQ2tsTWpBbE0wUWxNMFVsTWpCemFHRndaU2cwSlRKRE1DNHlOU1V5UXpBdU1EQTVLUzV5YjNSaGRHVW9LQ2tsTTBRbE0wVjBhVzFsSlRKR0xUUXdLUzV5WlhCbFlYUW9iaVV5UTI0cEpUQkJZU2dwTG1Ga1pDaGhLQ2t1YzJOeWIyeHNXQ2d3TGpVbE1rWnVLUzV6WTNKdmJHeFpLREF1TlNVeVJtNHBKVEpETVNrdWJXOWtkV3hoZEdVb2J6RWxNa013TGpFcExtMXZaSFZzWVhSbEtITnlZeWh2TVNrdVkyOXNiM0lvTVRBbE1rTXhNQ2t1WVdSa0tITnZiR2xrS0MweE5DVXlReTB4TkNrcExuSnZkR0YwWlNnb0tTVXpSQ1V6UlhScGJXVWxNa1kwTUNrbE1rTXdMakF3TlNrdVlXUmtLSE55WXlodk1Ta3VjMk55YjJ4c1dTZ3dMakF4TWlVeVF6QXVNRElwSlRKRE1DNDFLUzV2ZFhRb2J6RXBKVEJCYzNKaktHOHhLUzVqYjJ4dmNtRnRZU2d4TGpJcExuQnZjM1JsY21sNlpTZzBLUzV6WVhSMWNtRjBaU2d3TGpjcExtTnZiblJ5WVhOMEtEWXBMbTExYkhRb2MyOXNhV1FvS1NVeVF6QXVNVFVwTG05MWRDaHZNQ2tsTUVFbE1FRWxNRUU9XCJcbn0sXG57XG5cInNrZXRjaF9pZFwiOiBcImVlcmllX2Vhcl8yXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR1pXVmZOU1V5TUM0bE1qQkdWVWRKVkVsV1JTVXlNRWRGVDAxRlZGSlpKVEl3VmtoVEpUSXdMaVV5TUdGMVpHbHZjbVZoWTNScGRtVWxNakJ6YUdGd1pYTWxNakJoYm1RbE1qQm5jbUZrYVdWdWRITWxNRUVsTWtZbE1rWWxNakJsWDJVbE1qQWxNa1lsTWtZbE1qQWxOREJsWlhKcFpWOWxZWElsTUVFbE1rWWxNa1lsTUVGekpUTkVKVEl3S0NrbE0wUWxNMFVsTUVFbE1qQWxNakJ6YUdGd1pTZzBLU1V3UVM1elkzSnZiR3hZS0NVMVFpMHdMalVsTWtNdE1DNHlKVEpETUM0ekpUSkRMVEF1TVNVeVF5MHdMakVsTlVRdWMyMXZiM1JvS0RBdU1Ta3VabUZ6ZENnd0xqTXBLU1V3UVM1elkzSnZiR3haS0NVMVFqQXVNalVsTWtNdE1DNHlKVEpETUM0ekpUSkRMVEF1TVNVeVF6QXVNaVUxUkM1emJXOXZkR2dvTUM0NUtTNW1ZWE4wS0RBdU1UVXBLU1V3UVNVeVJpVXlSaVV3UVhOdmJHbGtLQ2tsTUVFdVlXUmtLR2R5WVdScFpXNTBLRE1sTWtNd0xqQTFLUzV5YjNSaGRHVW9NQzR3TlNVeVF5MHdMaklwTG5CdmMzUmxjbWw2WlNneUtTNWpiMjUwY21GemRDZ3dMallwSlRKREpUVkNNU1V5UXpBbE1rTXhKVEpETUM0MUpUSkRNQ1V5UXpBdU5pVTFSQzV6Ylc5dmRHZ29NQzQ1S1NrbE1FRXVZV1JrS0hNb0tTa2xNRUV1YlhWc2RDaHpLQ2t1YzJOaGJHVW9NQzQ0S1M1elkzSnZiR3hZS0RBdU1ERXBMbk5qY205c2JGa29MVEF1TURFcExuSnZkR0YwWlNnd0xqSWxNa013TGpBMktTNWhaR1FvWjNKaFpHbGxiblFvTXlrdVkyOXVkSEpoYzNRb01DNDJLU1V5UXlVMVFqRWxNa013SlRKRE1TVXlRekF1TlNVMVJDNXpiVzl2ZEdnb01DNDVLU1V5UXpBdU5Ta3ViWFZzZENoemNtTW9iekFwTG5OallXeGxLREF1T1RncEpUSkRLQ2tsTTBRbE0wVmhMbVptZENVMVFqQWxOVVFxT1NrbE1FRWxNakFsTWpBbE1qQWxNakFsTWpBcEpUQkJMbVJwWm1Zb2N5Z3BMbTF2WkhWc1lYUmxLSE5vWVhCbEtEVXdNQ2twTG5OallXeGxLQ1UxUWpFdU55VXlRekV1TWlVMVJDNXpiVzl2ZEdnb01DNDVLUzVtWVhOMEtEQXVNRFVwS1NrbE1FRXVZV1JrS0dkeVlXUnBaVzUwS0RJcExtbHVkbVZ5ZENncEpUSkRLQ2tsTTBRbE0wVmhMbVptZENVMVFqSWxOVVFwSlRCQkxtMTFiSFFvWjNKaFpHbGxiblFvS0NrbE0wUWxNMFZoTG1abWRDVTFRak1sTlVRcU9Da3BKVEJCTG1Kc1pXNWtLSE55WXlnb2J6QXBKVEpES0NrbE0wUWxNMFZoTG1abWRDVTFRakVsTlVRcU5EQXBLU1V3UVM1aFpHUW9kbTl5YjI1dmFTZ29LU1V6UkNVelJXRXVabVowSlRWQ01TVTFSQ1V5UXlncEpUTkVKVE5GWVM1bVpuUWxOVUl6SlRWRUpUSkRLQ2tsTTBRbE0wVmhMbVptZENVMVFqQWxOVVFwTG5Sb2NtVnphQ2d3TGpjcExuQnZjM1JsY21sNlpTZ3lKVEpETkNrdWJIVnRZU2d3TGprcExuTmpjbTlzYkZrb01TVXlReWdwSlRORUpUTkZZUzVtWm5RbE5VSXdKVFZFSlRKR016QXBMbU52Ykc5eVlXMWhLRE1wTG5Sb2NtVnphQ2dvS1NVelJDVXpSV0V1Wm1aMEpUVkNNU1UxUkNrdWMyTmhiR1VvS0NrbE0wUWxNMFZoTG1abWRDVTFRak1sTlVRcU1pa2xNa01vS1NVelJDVXpSV0V1Wm1aMEpUVkNNQ1UxUkNVeVJqSXBKVEJCSlRJd0pUSXdMbTkxZENncEpUQkJKVEpHSlRKR0pUQkJjM0JsWldRbE0wUWxNakF4SlRCQkpUQkJZUzV6WlhSVGJXOXZkR2dvTUM0NU5paz1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwiZWVyaWVfZWFyXzNcIixcblwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1pXVmZNU1V5TUM0bE1qQkZXVVVsTWpCSlRpVXlNRlJJUlNVeU1GTkxXU1V3UVNVeVJpVXlSbVY0WVcxd2JHVWxNakJ2WmlVeU1HMWhjMnNsTWpCaGJtUWxNakJtZFc1amRHbHZiaVV5TUcxdlpIVnNZWFJwYjI0bE1FRWxNa1lsTWtZbE1qQmxYMlVsTWpBbE1rWWxNa1lsTWpBbE5EQmxaWEpwWlY5bFlYSWxNRUZ1YjJselpTZ3hPQ2tsTUVFbE1qQWxNakF1WTI5c2IzSmhiV0VvTVNrbE1FRWxNakFsTWpBdWNHOXpkR1Z5YVhwbEtESXBKVEJCSlRJd0pUSXdMbXRoYkdWcFpDZzFNQ2tsTUVFbE1qQWxNakF1YldGemF5Z2xNRUVsTWpBbE1qQWxNakFsTWpCemFHRndaU2d5TlNVeVF5VXlNREF1TWpVcExtMXZaSFZzWVhSbFUyTmhiR1VvSlRCQkpUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd2JtOXBjMlVvTkRBd0xqVWxNa01sTWpBd0xqVXBKVEJCSlRJd0pUSXdKVEl3SlRJd0tTVXdRU1V5TUNVeU1Da2xNRUVsTWpBbE1qQXViV0Z6YXloemFHRndaU2cwTURBbE1rTWxNakF4SlRKREpUSXdNaTR4TWpVcEtTVXdRU1V5TUNVeU1DNXRiMlIxYkdGMFpWTmpZV3hsS0c5ell5ZzJKVEpESlRJd01DNHhNalVsTWtNbE1qQXdMakExS1M1cllXeGxhV1FvTlRBcEtTVXdRU1V5TUNVeU1DNXRkV3gwS0c5ell5Z3lNQ1V5UXlVeU1EQXVNRFVsTWtNbE1qQXlMalFwTG10aGJHVnBaQ2cxTUNrbE1rTWxNakF3TGpJMUtTVXdRU1V5TUNVeU1DNXpZMkZzWlNneExqYzFKVEpESlRJd01DNDJOU1V5UXlVeU1EQXVOU2tsTUVFbE1qQWxNakF1Ylc5a2RXeGhkR1VvYm05cGMyVW9NQzQxS1NrbE1FRWxNakFsTWpBdWMyRjBkWEpoZEdVb05pa2xNRUVsTWpBbE1qQXVjRzl6ZEdWeWFYcGxLRFFsTWtNbE1qQXdMaklwSlRCQkpUSXdKVEl3TG5OallXeGxLREV1TlNrbE1FRWxNakFsTWpBdWIzVjBLQ2tsTTBJbE1FRT1cIlxufVxuXVxuIiwiY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoJ3N1cGVyYWdlbnQnKVxuY29uc3QgZXhhbXBsZXMgPSByZXF1aXJlKCcuL2V4YW1wbGVzLmpzb24nKVxuY29uc3Qgc2tldGNoZXMgPSBbXVxuXG5jb25zdCBsaWNlbnNlID0gYC8vIGxpY2Vuc2VkIHdpdGggQ0MgQlktTkMtU0EgNC4wIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1zYS80LjAvYFxuXG5jbGFzcyBHYWxsZXJ5IHtcbiAgY29uc3RydWN0b3IoY2FsbGJhY2ssIHN0YXRlLCBlbWl0dGVyKSB7XG4gICAgdGhpcy5za2V0Y2hlcyA9IFtdXG4gICAgdGhpcy5leGFtcGxlcyA9IFtdXG4gICAgdGhpcy5jdXJyZW50ID0gbnVsbFxuICAgIHRoaXMuY29kZSA9IG51bGxcbiAgICB0aGlzLmV4YW1wbGVJbmRleCA9IG51bGxcbiAgICB0aGlzLnN0YXRlID0gc3RhdGVcbiAgICB0aGlzLmVtaXR0ZXIgPSBlbWl0dGVyXG4gICAgdGhpcy5zZXJ2ZXJVUkwgPSB0aGlzLnN0YXRlLnNlcnZlclVSTCA9PT0gbnVsbCA/ICcnIDogdGhpcy5zdGF0ZS5zZXJ2ZXJVUkxcbiAgICAvLyByZXF1ZXN0LmdldCgnL3NrZXRjaGVzJykuZW5kKChlcnIsIHJlcykgPT4ge1xuICAgIC8vICAgY29uc29sZS5sb2coJ2dvdCBza2V0Y2hlcycsIHJlcy50ZXh0LCBlcnIpXG4gICAgLy8gICBpZihlcnIpIHtcbiAgICAvLyAgICAgY29uc29sZS5sb2coJ2VyciBnZXR0aW5nIHNrZXRjaGVzJywgZXJyKVxuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgdGhpcy5za2V0Y2hlcyA9IEpTT04ucGFyc2UocmVzLnRleHQpXG4gICAgLy8gICB9XG5cbiAgICB0aGlzLmV4YW1wbGVzID0gZXhhbXBsZXNcbiAgICB0aGlzLnNldFNrZXRjaEZyb21VUkwoY2FsbGJhY2spXG4gICAgLy8gIGNhbGxiYWNrKHRoaXMuY29kZSwgdGhpcy5mb3VuZFNrZXRjaClcbiAgICAvLyB9KVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5zZXRTa2V0Y2hGcm9tVVJMKGNhbGxiYWNrKVxuICAgICAgLy8gY29uc29sZS5sb2coXCJsb2NhdGlvbjogXCIgKyBkb2N1bWVudC5sb2NhdGlvbiArIFwiLCBzdGF0ZTogXCIgKyBKU09OLnN0cmluZ2lmeShldmVudC5zdGF0ZSkpO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0UmFuZG9tU2tldGNoID0gdGhpcy5zZXRSYW5kb21Ta2V0Y2guYmluZCh0aGlzKVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5jdXJyZW50ID0gbnVsbFxuICAgIHRoaXMuY29kZSA9IG51bGxcbiAgICAvL3RoaXMuZXhhbXBsZUluZGV4ID0gbnVsbFxuICAgIGxldCBuZXd1cmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWVcbiAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoeyBwYXRoOiBuZXd1cmwgfSwgJycsIG5ld3VybClcbiAgICB0aGlzLnVybCA9IG5ld3VybFxuICB9XG5cbiAgc2V0U2tldGNoRnJvbVVSTChjYWxsYmFjaykge1xuICAgIGh1c2goKVxuICAgIHJlbmRlcihvMClcblxuICAgIGxldCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpXG4gICAgdGhpcy5zZWFyY2hQYXJhbXMgPSBzZWFyY2hQYXJhbXNcbiAgICBsZXQgYmFzZTY0Q29kZSA9IHNlYXJjaFBhcmFtcy5nZXQoJ2NvZGUnKVxuICAgIC8vICBpZighYmFzZTY0Q29kZSkgYmFzZTY0Q29kZSA9IHNlYXJjaFBhcmFtcy5nZXQoJ2lkJykgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIGZvcm0gb2YgbmFtaW5nLiBpZCBpcyBub3cgY2FsbGVkIGNvZGVcbiAgICBsZXQgc2tldGNoX2lkID0gc2VhcmNoUGFyYW1zLmdldCgnc2tldGNoX2lkJylcbiAgICBsZXQgc2hvd0NvZGUgPSBzZWFyY2hQYXJhbXMuZ2V0KCdzaG93Q29kZScpXG5cbiAgICBsZXQgY29kZSA9ICcnXG4gICAgLy9jb25zb2xlLmxvZyhcImlkXCIsIHNrZXRjaF9pZCwgXCJjb2RlXCIsIGJhc2U2NENvZGUpXG5cbiAgICAvLyBib29sZWFuIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc2tldGNoIHdhcyBmb3VuZCBiYXNlZCBvbiB0aGUgVVJMLCBlaXRoZXIgdGhyb3VnaCBsb29raW5nIHRocm91Z2ggdGhlIGRhdGFiYXNlIG9yIHJlbmRlcmluZyB0aGUgY29kZVxuICAgIHRoaXMuZm91bmRTa2V0Y2ggPSBmYWxzZVxuICAgIC8vIGlmIGNvbnRhaW5zIGEgc2tldGNoIGlkLCBzZXQgc2tldGNoIGZyb20gaWRcbiAgICBpZiAoc2tldGNoX2lkKSB7XG4gICAgICB2YXIgc2tldGNoID0gdGhpcy5nZXRFeGFtcGxlQnlJZChza2V0Y2hfaWQpXG4gICAgICBpZiAoc2tldGNoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmb3VuZCcsIHNrZXRjaClcbiAgICAgICAgdGhpcy5zZXRTa2V0Y2goc2tldGNoKVxuICAgICAgICBjYWxsYmFjayh0aGlzLmNvZGUsIGZhbHNlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdFxuICAgICAgICAgIC8vIC5nZXQoJy9za2V0Y2hCeUlkJylcbiAgICAgICAgICAuZ2V0KGAke3RoaXMuc3RhdGUuc2VydmVyVVJMfS9za2V0Y2hCeUlkYClcbiAgICAgICAgICAucXVlcnkoeyBza2V0Y2hfaWQ6IHNrZXRjaF9pZCB9KVxuICAgICAgICAgIC5lbmQoKGVyciwgcmVzKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZ290IHNrZXRjaGVzJywgcmVzLnRleHQsIGVycilcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2VyciBnZXR0aW5nIHNrZXRjaGVzJywgZXJyKVxuICAgICAgICAgICAgICB0aGlzLnNldFNrZXRjaEZyb21Db2RlKGJhc2U2NENvZGUsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5za2V0Y2hlcyA9IEpTT04ucGFyc2UocmVzLnRleHQpXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNrZXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNrZXRjaCh0aGlzLnNrZXRjaGVzWzBdKVxuICAgICAgICAgICAgICAgIC8vdGhpcy5jb2RlID0gdGhpcy5kZWNvZGVCYXNlNjQodGhpcy5za2V0Y2hlc1swXS5jb2RlKVxuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRTa2V0Y2ggPSB0cnVlXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5jb2RlLCB0aGlzLmZvdW5kU2tldGNoKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2tldGNoRnJvbUNvZGUoYmFzZTY0Q29kZSwgY2FsbGJhY2spXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U2tldGNoRnJvbUNvZGUoYmFzZTY0Q29kZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIGlmIChzaG93Q29kZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2hpZGVBbGwnKVxuICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2hpZGUgaW5mbycpXG4gICAgfVxuICAgIC8vXG4gICAgLy8gICAvLyBjb25zb2xlLmxvZygnZm91bmQgJywgc2tldGNoKVxuICAgIC8vICAgLy8gaWYoc2tldGNoKSB7XG4gICAgLy8gICAvLyAgIHRoaXMuc2V0U2tldGNoKHNrZXRjaClcbiAgICAvLyAgIC8vICAgdGhpcy4gPSB0cnVlMFxuICAgIC8vICAgLy8gfSBlbHNlIGlmIChiYXNlNjRDb2RlKXtcbiAgICAvLyAgIC8vICAgdGhpcy5jb2RlID0gdGhpcy5kZWNvZGVCYXNlNjQoYmFzZTY0Q29kZSlcbiAgICAvLyAgIC8vICAgdGhpcy5mb3VuZFNrZXRjaCA9IHRydWVcbiAgICAvLyAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICAvLyAgIGNvbnNvbGUubG9nKCdpZCBub3QgZm91bmQnLCBza2V0Y2hfaWQpXG4gICAgLy8gICAvLyAgIHRoaXMuc2V0UmFuZG9tU2tldGNoKClcbiAgICAvLyAgIC8vIH1cbiAgICAvL1xuICAgIC8vIC8vIC8vIGJhY2t3YXJkcyBjb21iYWl0YmlsaXR5IHdpdGggZWFybGllciBzaGFyZWFibGUgVVJMU1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy9cbiAgICAvLyAgIGlmIChiYXNlNjRDb2RlKSB7XG4gICAgLy8gICAgIHRoaXMuY29kZSA9IHRoaXMuZGVjb2RlQmFzZTY0KGJhc2U2NENvZGUpXG4gICAgLy8gICAgIHRoaXMuZm91bmRTa2V0Y2ggPSB0cnVlXG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICB0aGlzLnNldFJhbmRvbVNrZXRjaCgpXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICB9XG5cbiAgc2V0U2tldGNoRnJvbUNvZGUoYmFzZTY0Q29kZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoYmFzZTY0Q29kZSkge1xuICAgICAgdGhpcy5jb2RlID0gdGhpcy5kZWNvZGVCYXNlNjQoYmFzZTY0Q29kZSlcbiAgICAgIHRoaXMuZm91bmRTa2V0Y2ggPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0UmFuZG9tU2tldGNoKClcbiAgICB9XG4gICAgY2FsbGJhY2sodGhpcy5jb2RlLCB0aGlzLmZvdW5kU2tldGNoKVxuICB9XG5cbiAgc2F2ZUltYWdlKCkge1xuXG4gIH1cblxuICBzZXRUb1VSTChwYXJhbXMpIHtcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhiYXNlNjQpXG4gICAgLy8gY29uc29sZS5sb2coJ3BhcmFtcycsIHBhcmFtcylcbiAgICAvLyBrZWVwIGNvZGUgaW4gdXJsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAvIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBsb2NhbCBhbmQgcHVibGljIHZlcnNpb25zXG4gICAgdGhpcy5zZWFyY2hQYXJhbXMuZGVsZXRlKCdza2V0Y2hfaWQnKVxuICAgIHRoaXMuc2VhcmNoUGFyYW1zLmRlbGV0ZSgnY29kZScpXG4gICAgbGV0IHVybF9wYXJhbXNcbiAgICBpZiAocGFyYW1zLnNrZXRjaF9pZCkge1xuICAgICAgdXJsX3BhcmFtcyA9IGBza2V0Y2hfaWQ9JHtwYXJhbXMuc2tldGNoX2lkfWBcbiAgICAgIHRoaXMuc2VhcmNoUGFyYW1zLmFwcGVuZCgnc2tldGNoX2lkJywgcGFyYW1zLnNrZXRjaF9pZClcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsX3BhcmFtcyA9IGBza2V0Y2hfaWQ9JHtwYXJhbXMuc2tldGNoX2lkfSZjb2RlPSR7cGFyYW1zLmNvZGV9YFxuICAgICAgdGhpcy5zZWFyY2hQYXJhbXMuYXBwZW5kKCdza2V0Y2hfaWQnLCBwYXJhbXMuc2tldGNoX2lkKVxuICAgICAgdGhpcy5zZWFyY2hQYXJhbXMuYXBwZW5kKCdjb2RlJywgcGFyYW1zLmNvZGUpXG4gICAgfVxuXG4gICAgbGV0IG5ld3VybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgK1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyAnPycgKyB0aGlzLnNlYXJjaFBhcmFtcy50b1N0cmluZygpXG4gICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHsgcGF0aDogbmV3dXJsIH0sICcnLCBuZXd1cmwpXG4gICAgdGhpcy51cmwgPSBuZXd1cmxcbiAgfVxuXG4gIGVuY29kZUJhc2U2NCh0ZXh0KSB7XG4gICAgcmV0dXJuIGJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpKVxuICB9XG4gIGRlY29kZUJhc2U2NChiYXNlNjRDb2RlKSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChhdG9iKGJhc2U2NENvZGUpKVxuICB9XG5cbiAgc2V0U2tldGNoKHNrZXRjaCkge1xuICAgIGxldCBjb2RlID0gdGhpcy5kZWNvZGVCYXNlNjQoc2tldGNoLmNvZGUpXG4gICAgaWYgKGNvZGUuaW5kZXhPZihsaWNlbnNlKSA8IDApXG4gICAgICBjb2RlID1cbiAgICAgICAgYCR7bGljZW5zZX1cbiR7Y29kZX1cbmBcbiAgICB0aGlzLmNvZGUgPSBjb2RlXG4gICAgdGhpcy5jdXJyZW50ID0gc2tldGNoXG4gICAgLy8gIHRoaXMuc2V0VG9VUkwoJ3NrZXRjaF9pZCcsIHNrZXRjaC5faWQpXG4gICAgLy8gbGV0IHBhcmFtcyA9IE9iamVjdC5rZXlzKHNrZXRjaCkubWFwKCAoa2V5KSA9PiB7XG4gICAgLy8gICByZXR1cm4ge2xhYmVsOiBrZXksIHZhbHVlOiBza2V0Y2hba2V5XX1cbiAgICAvLyB9KVxuICAgIHRoaXMuc2V0VG9VUkwoc2tldGNoKVxuICB9XG5cbiAgc2V0UmFuZG9tU2tldGNoKCkge1xuICAgIC8vIGlmIHRoZXJlIGFyZSBza2V0Y2hlcywgc2V0IGNvZGUgZnJvbSBza2V0Y2gsIG90aGVyd2lzZSBnZW5lcmF0ZSByYW5kb21cbiAgICAvL2NvbnNvbGUubG9nKFwiZXhhbXBsZXMgbGVuZ3RoXCIsIHRoaXMuZXhhbXBsZXMsIHRoaXMuZXhhbXBsZUluZGV4KVxuICAgIGlmICh0aGlzLmV4YW1wbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBpbmRleFxuICAgICAgLy8gaWYodGhpcy5leGFtcGxlSW5kZXggPT09IG51bGwpIHtcbiAgICAgIGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5leGFtcGxlcy5sZW5ndGgpXG4gICAgICB3aGlsZSAoaW5kZXggPT09IHRoaXMuZXhhbXBsZUluZGV4KSB7XG4gICAgICAgIGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5leGFtcGxlcy5sZW5ndGgpXG4gICAgICB9XG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICBpbmRleCA9IHRoaXMuZXhhbXBsZUluZGV4ICsxXG4gICAgICAvLyAgIGlmKGluZGV4ID49IHRoaXMuZXhhbXBsZXMubGVuZ3RoKSBpbmRleCA9IDBcbiAgICAgIC8vIH1cbiAgICAgIHRoaXMuZXhhbXBsZUluZGV4ID0gaW5kZXhcbiAgICAgIC8vICBjb25zb2xlLmxvZygnZXhhbXBsZSBpcycsIHRoaXMuZXhhbXBsZXNbcmFuZF0pXG4gICAgICB0aGlzLnNldFNrZXRjaCh0aGlzLmV4YW1wbGVzW2luZGV4XSlcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXJ0U3RyaW5nID0gJ29zYygnICsgMiArIE1hdGguZmxvb3IoTWF0aC5wb3coMTAsIE1hdGgucmFuZG9tKCkgKiAyKSkgKyAnKSdcbiAgICAgIHN0YXJ0U3RyaW5nICs9ICcuY29sb3IoJyArIE1hdGgucmFuZG9tKCkudG9GaXhlZCgyKSArICcsJyArIE1hdGgucmFuZG9tKCkudG9GaXhlZCgyKSArICcsJyArIE1hdGgucmFuZG9tKCkudG9GaXhlZCgyKSArICcpJ1xuICAgICAgc3RhcnRTdHJpbmcgKz0gJy5yb3RhdGUoJyArIE1hdGgucmFuZG9tKCkudG9GaXhlZCgyKSArICcpJ1xuICAgICAgc3RhcnRTdHJpbmcgKz0gJy5vdXQobzApJ1xuICAgICAgdGhpcy5jb2RlID0gc3RhcnRTdHJpbmdcbiAgICB9XG4gIH1cblxuICAvLyBzaGFyZXMgdmlhIHR3aXR0ZXJcbiAgc2hhcmVTa2V0Y2goY29kZSwgaHlkcmEsIG5hbWUpIHtcbiAgICB0aGlzLnNhdmVTa2V0Y2goY29kZSwgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJVUkwgaXNcIiwgdGhpcy51cmwsICdza2V0Y2ggaXMnLCB0aGlzLmN1cnJlbnQpXG4gICAgICBoeWRyYS5nZXRTY3JlZW5JbWFnZSgoaW1nKSA9PiB7XG4gICAgICAgIHJlcXVlc3RcbiAgICAgICAgICAvLyAucG9zdCgnL2ltYWdlJylcbiAgICAgICAgICAucG9zdChgJHt0aGlzLnN0YXRlLnNlcnZlclVSTH0vaW1hZ2VgKVxuICAgICAgICAgIC5hdHRhY2goJ3ByZXZpZXdJbWFnZScsIGltZylcbiAgICAgICAgICAucXVlcnkoe1xuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICAgIHNrZXRjaF9pZDogdGhpcy5jdXJyZW50LnNrZXRjaF9pZCxcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIC5zZW5kKHtcbiAgICAgICAgICAvLyAgIGNvZGU6IGJhc2U2NFxuICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgLy8gIC5xdWVyeShxdWVyeSlcbiAgICAgICAgICAuZW5kKChlcnIsIHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgcG9zdGluZ2ltYWdlJywgZXJyKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2ltYWdlIHJlc3BvbnNlJywgcmVzLnRleHQpXG4gICAgICAgICAgICAgIC8vICBzZWxmLnNldFRvVVJMKFsgeyBsYWJlbDogJ3NrZXRjaF9pZCcsIHZhbHVlOiByZXMudGV4dH0sIHtsYWJlbDogJ2NvZGUnLCB2YWx1ZTogYmFzZTY0fSBdKVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgLy8gdmFyIG9SZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgLy8gb1JlcS5vcGVuKFwiUE9TVFwiLCBcImh0dHBzOi8vbG9jYWxob3N0OjgwMDAvaW1hZ2VcIiwgdHJ1ZSk7XG4gICAgICAgIC8vIG9SZXEub25sb2FkID0gZnVuY3Rpb24gKG9FdmVudCkge1xuICAgICAgICAvLyAgIC8vIFVwbG9hZGVkLlxuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwidXBsb2FkZWRcIiwgb0V2ZW50KVxuICAgICAgICAvLyB9O1xuICAgICAgICAvLyBvUmVxLnNlbmQoaW1nKTtcbiAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdnb3QgaW1hZ2UnLCBpbWcpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBzYXZlU2tldGNoKGNvZGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNlbGYgPSB0aGlzXG4gICAgLy9jb25zb2xlLmxvZygnc2F2aW5nIGluIGdhbGxlcnknLCBjb2RlKVxuICAgIGxldCBiYXNlNjQgPSB0aGlzLmVuY29kZUJhc2U2NChjb2RlKVxuICAgIC8vICBjb25zb2xlLmxvZygnY29kZSBpcycsIGJhc2U2NClcblxuICAgIGxldCBxdWVyeSA9IHtcbiAgICAgIGNvZGU6IGJhc2U2NCxcbiAgICAgIHBhcmVudDogdGhpcy5jdXJyZW50ID8gdGhpcy5jdXJyZW50LnNrZXRjaF9pZCA6IG51bGxcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnc2F2aW5nIGluIGdhbGxlcnknLCBxdWVyeSlcbiAgICByZXF1ZXN0XG4gICAgICAvLyAucG9zdCgnL3NrZXRjaCcpXG4gICAgICAucG9zdChgJHt0aGlzLnN0YXRlLnNlcnZlclVSTH0vc2tldGNoYClcbiAgICAgIC8vIC5zZW5kKHtcbiAgICAgIC8vICAgY29kZTogYmFzZTY0XG4gICAgICAvLyB9KVxuICAgICAgLnF1ZXJ5KHF1ZXJ5KVxuICAgICAgLmVuZCgoZXJyLCByZXMpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBwb3N0aW5nIHNrZXRjaCcsIGVycilcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygncmVzcG9uc2UnLCByZXMudGV4dClcbiAgICAgICAgICAvLyAgc2VsZi5zZXRUb1VSTChbIHsgbGFiZWw6ICdza2V0Y2hfaWQnLCB2YWx1ZTogcmVzLnRleHR9LCB7bGFiZWw6ICdjb2RlJywgdmFsdWU6IGJhc2U2NH0gXSlcbiAgICAgICAgICBzZWxmLnNldFNrZXRjaCh7XG4gICAgICAgICAgICBza2V0Y2hfaWQ6IHJlcy50ZXh0LFxuICAgICAgICAgICAgY29kZTogYmFzZTY0XG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKG51bGwpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBzYXZlTG9jYWxseShjb2RlKSB7XG4gICAgbGV0IGJhc2U2NCA9IHRoaXMuZW5jb2RlQmFzZTY0KGNvZGUpXG5cbiAgICB0aGlzLnNlYXJjaFBhcmFtcy5kZWxldGUoJ3NrZXRjaF9pZCcpXG4gICAgdGhpcy5zZWFyY2hQYXJhbXMuZGVsZXRlKCdjb2RlJylcblxuICAgIHRoaXMuc2VhcmNoUGFyYW1zLmFwcGVuZCgnY29kZScsIGJhc2U2NClcbiAgICAvLyBrZWVwIGNvZGUgaW4gdXJsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAvIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBsb2NhbCBhbmQgcHVibGljIHZlcnNpb25zXG4gICAgdmFyIHVybF9wYXJhbXMgPSB0aGlzLnNlYXJjaFBhcmFtcy50b1N0cmluZygpXG5cbiAgICBsZXQgbmV3dXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArXG4gICAgICB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArICc/JyArIHVybF9wYXJhbXNcbiAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoeyBwYXRoOiBuZXd1cmwgfSwgJycsIG5ld3VybClcbiAgICB0aGlzLnVybCA9IG5ld3VybFxuICB9XG5cbiAgZ2V0RXhhbXBsZUJ5SWQoaWQpIHtcbiAgICAvL2NvbnNvbGUubG9nKCdsb29raW5nIGZvcicsIGlkLCB0aGlzLmV4YW1wbGVzLCB0aGlzLnNrZXRjaGVzKVxuICAgIHZhciBza2V0Y2hlcyA9IHRoaXMuZXhhbXBsZXMuZmlsdGVyKChza2V0Y2gpID0+IHNrZXRjaC5za2V0Y2hfaWQgPT09IGlkKVxuICAgIGlmIChza2V0Y2hlcy5sZW5ndGggPD0gMCkgc2tldGNoZXMgPSB0aGlzLnNrZXRjaGVzLmZpbHRlcigoc2tldGNoKSA9PiBza2V0Y2guc2tldGNoX2lkID09PSBpZClcbiAgICByZXR1cm4gc2tldGNoZXNbMF1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEdhbGxlcnlcbiIsImNvbnN0IGkxOG5leHQgPSByZXF1aXJlKCdpMThuZXh0JylcbmNvbnN0IGkxOG5leHRCcm93c2VyTGFuZ3VhZ2VEZXRlY3RvciA9IHJlcXVpcmUoJ2kxOG5leHQtYnJvd3Nlci1sYW5ndWFnZWRldGVjdG9yJylcbi8vIGNvbnN0IGkxOG5leHRIdHRwQmFja2VuZCA9IHJlcXVpcmUoJ2kxOG5leHQtaHR0cC1iYWNrZW5kJylcblxuY29uc3QgbGFuZ3VhZ2VSZXNvdXJjZXMgPSByZXF1aXJlKCcuL3RleHQtZWxlbWVudHMuanMnKVxuXG5jb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSBbJ2phJywgJ2VzJywgJ2FyJywgJ2lkJywgJ3B0LWJyJywgJ2NoJywgJ2tvJywgJ2ZyJ10gLy8gbG9jYWxpemF0aW9ucyBhdmFpbGFibGUgaW4gcmVwb3NpdG9yeSBhdCAvaHlkcmEtc3ludGgvbDEwblxuY29uc3QgbGFuZ3VhZ2VQYXRoID0gKGxhbmcpID0+IGBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaHlkcmEtc3ludGgvbDEwbi9tYWluLyR7bGFuZ30vZWRpdG9yLmpzb25gXG5cbmkxOG5leHRcbiAgLy8gLnVzZShpMThuZXh0SHR0cEJhY2tlbmQpXG4gICAudXNlKGkxOG5leHRCcm93c2VyTGFuZ3VhZ2VEZXRlY3RvcilcbiAgLmluaXQoe1xuICAgIGRlYnVnOiB0cnVlLFxuICAgIGZhbGxiYWNrTG5nOiAnZW4nLFxuICAgIHBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzOiB0cnVlLFxuICAgIC8vIGJhY2tlbmQ6IHtcbiAgICAvLyAgIGxvYWRQYXRoOiBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9sb2NhbGVzL3t7bG5nfX0uanNvbmAsXG4gICAgLy8gICBjcm9zc0RvbWFpbjogdHJ1ZVxuICAgIC8vIH0sXG4gICAgcmVzb3VyY2VzOiBsYW5ndWFnZVJlc291cmNlc1xuICB9KVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN0b3JlKHN0YXRlLCBlbWl0dGVyKSB7XG4gIGNvbnN0IGxhbmd1YWdlcyA9IHt9XG5cblxuICBsZXQgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKVxuICBsZXQgbGFuZyA9IHNlYXJjaFBhcmFtcy5nZXQoJ2wxMG4tbGFuZycpXG5cbiAgLy8gIGlmKCFiYXNlNjRDb2RlKSBiYXNlNjRDb2RlID0gc2VhcmNoUGFyYW1zLmdldCgnaWQnKSAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgZm9ybSBvZiBuYW1pbmcuIGlkIGlzIG5vdyBjYWxsZWQgY29kZVxuICBsZXQgcGF0aCA9IHNlYXJjaFBhcmFtcy5nZXQoJ2wxMG4tdXJsJylcblxuICBhdmFpbGFibGVMYW5ndWFnZXMuZm9yRWFjaCgobGFuZykgPT4ge1xuICAgIGxvYWRMYW5ndWFnZUZyb21VUkwobGFuZywgbGFuZ3VhZ2VQYXRoKGxhbmcpKVxuICB9KVxuXG4gIC8vIGNvbnNvbGUubG9nKCclYycsIFwiY29sb3I6cHVycGxlXCIsICd0dHR0JywgbGFuZywgcGF0aClcblxuICBpZiAobGFuZyAhPT0gbnVsbCAmJiBwYXRoICE9PSBudWxsKSB7XG4gICAgbG9hZExhbmd1YWdlRnJvbVVSTChsYW5nLCBwYXRoKVxuICB9XG5cbiAgdXBkYXRlQXZhaWxhYmxlTGFuZ3VhZ2VzKClcblxuICBlbWl0dGVyLm9uKCdzZXQgbGFuZ3VhZ2UnLCAobGFuZykgPT4ge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZXR0aW5nIGxhbmd1YWdlIHRvJywgbGFuZylcbiAgICBpMThuZXh0LmNoYW5nZUxhbmd1YWdlKGxhbmcsIChlcnIsIHQpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGVyciwgdClcbiAgICAgIHN0YXRlLnRyYW5zbGF0aW9uLnNlbGVjdGVkTGFuZ3VhZ2UgPSBsYW5nXG4gICAgICBlbWl0dGVyLmVtaXQoJ3JlbmRlcicpXG4gICAgfSlcbiAgfSlcblxuICBmdW5jdGlvbiB1cGRhdGVBdmFpbGFibGVMYW5ndWFnZXMoKSB7XG4gICAgT2JqZWN0LmtleXMobGFuZ3VhZ2VSZXNvdXJjZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgLy8gZm9yIHNvbWUgcmVhc29uLCAncHQtYnInIHdhcyBub3Qgd29ya2luZywgdXNlIGp1c3QgcHQgaW5zdGVhZFxuICAgICAgY29uc3QgayA9IGtleS5zcGxpdCgnLScpWzBdXG4gICAgICBsYW5ndWFnZXNba10gPSBpMThuZXh0LmdldEZpeGVkVChrKSgnbGFuZ3VhZ2UtbmFtZScpXG4gICAgfSlcblxuICAgIHN0YXRlLnRyYW5zbGF0aW9uID0ge1xuICAgICAgdDogaTE4bmV4dC50LFxuICAgICAgbGFuZ3VhZ2VzOiBsYW5ndWFnZXMsXG4gICAgICAvLyBsYW5ndWFnZXM6IFsnZW4nLCAnamEnXSxcbiAgICAgIHNlbGVjdGVkTGFuZ3VhZ2U6IGkxOG5leHQubGFuZ3VhZ2VcbiAgICB9XG4gIH1cbiAgLy8gbG9hZExhbmd1YWdlRnJvbVVSTCgnZXMnLCAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2h5ZHJhLXN5bnRoL2wxMG4vbWFpbi9lcy9lZGl0b3IuanNvbicpXG4gIC8vbG9hZExhbmd1YWdlRnJvbVVSTCgnZXMnLCdodHRwczovL2hhY2ttZC5pby9iYUVuR2g3Z1J0MmlIVHZ0LVRUOEZ3L2Rvd25sb2FkJylcbiAgZnVuY3Rpb24gbG9hZExhbmd1YWdlRnJvbVVSTChsYW5nID0gJ2VzJywgcGF0aCkge1xuICAgIGNvbnN0IGNzcyA9IFwiY29sb3I6IHB1cnBsZTsgYmFja2dyb3VuZDogb3JhbmdlOyBmb250LXNpemU6IDE0cHg7cGFkZGluZzoxMHB4XCJcbiAgICBjb25zb2xlLmxvZyhgJWNsb2FkaW5nIHRyYW5zbGF0aW9uIGZvciAke2xhbmd9IGZyb20gJHtwYXRofWAsIGNzcyk7XG4gICAgZmV0Y2gocGF0aClcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcy50ZXh0KCkudGhlbih0ZXh0ID0+IHsgdGhyb3cgbmV3IEVycm9yKHRleHQpIH0pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3JldHVybmluZyBqc29uJylcbiAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgICAgICAgfVxuICAgICAgfSkudGhlbihqc29uID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coanNvbilcbiAgICAgICAgd2luZG93LmkxOG4gPSBpMThuZXh0XG4gICAgICAgIGNvbnNvbGUubG9nKCdhZGRpbmcgbGFuZ3VhZ2UnLCBsYW5nLCBqc29uKVxuXG4gICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiwgJ3B0LWJyJyB3YXMgbm90IHdvcmtpbmcsIHVzZSBqdXN0IHB0IGluc3RlYWRcbiAgICAgICAgY29uc3QgayA9IGxhbmcuc3BsaXQoJy0nKVswXVxuICAgICAgICBpMThuZXh0LmFkZFJlc291cmNlQnVuZGxlKGssICd0cmFuc2xhdGlvbicsIGpzb24pXG5cbiAgICAgICAgY29uc3QgbGFuZ3VhZ2VzID0ge31cbiAgICAgICAgdXBkYXRlQXZhaWxhYmxlTGFuZ3VhZ2VzKClcbiAgICAgICAgZW1pdHRlci5lbWl0KCdyZW5kZXInKVxuICAgICAgfSlcbiAgfVxuICAvLyBjb25zdCBwYXRoID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vbG9jYWxlcy9lcy5qc29uYFxuXG5cbn1cbiIsImNvbnN0IEdhbGxlcnkgPSByZXF1aXJlKCcuL2dhbGxlcnkuanMnKVxuY29uc3QgcmVwbCA9IHJlcXVpcmUoJy4uL3ZpZXdzL2VkaXRvci9yZXBsLmpzJylcbi8vIGNvbnNvbGUubG9nKCdFTlZJUk9OTUVOVCBJUycsIHByb2Nlc3MuZW52Lk5PREVfRU5WKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN0b3JlKHN0YXRlLCBlbWl0dGVyKSB7XG4gIHN0YXRlLnNob3dJbmZvID0gdHJ1ZVxuICBzdGF0ZS5zaG93VUkgPSB0cnVlXG5cbiAgY29uc3QgU0VSVkVSX1VSTCA9IFwiaHR0cHM6Ly9hcGkuaHlkcmFzeW50aC54eXpcIlxuICBzdGF0ZS5zZXJ2ZXJVUkwgPSBTRVJWRVJfVVJMICE9PSB1bmRlZmluZWQgPyBTRVJWRVJfVVJMIDogbnVsbFxuIGxldCBza2V0Y2hlc1xuXG4gIGVtaXR0ZXIub24oJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gc3RhdGUuZWRpdG9yLmVkaXRvclxuICAgIHNrZXRjaGVzID0gbmV3IEdhbGxlcnkoKGNvZGUsIHNrZXRjaEZyb21VUkwpID0+IHtcbiAgICAgIGVkaXRvci5zZXRWYWx1ZShjb2RlKVxuICAgICAgcmVwbC5ldmFsKGNvZGUpXG4gICAgICBpZihza2V0Y2hGcm9tVVJMKSB7XG4gICAgICAgIHN0YXRlLnNob3dJbmZvID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnNob3dJbmZvID0gdHJ1ZVxuICAgICAgfVxuICAgICAgZW1pdHRlci5lbWl0KCdyZW5kZXInKVxuICAgICAgLy8gQHRvZG8gY3JlYXRlIGdhbGxlcnkgc3RvcmVcbiAgICAvLyAgY29uc29sZS53YXJuKCdnYWxsZXJ5IGNhbGxiYWNrIG5vdCBsZXQgaW1wbGVtZW50ZWQnKVxuICAgIH0sIHN0YXRlLCBlbWl0dGVyKVxuICB9KVxuXG4gIGVtaXR0ZXIub24oJ3NjcmVlbmNhcCcsICgpID0+IHtcbiAgICBzY3JlZW5jYXAoKVxuICAgIGNvbnN0IGVkaXRvciA9IHN0YXRlLmVkaXRvci5lZGl0b3JcbiAgICBjb25zdCB0ZXh0ID0gZWRpdG9yLmdldFZhbHVlKClcbiAgICBjb25zdCBkYXRhID0gbmV3IEJsb2IoW3RleHRdLCB7dHlwZTogJ3RleHQvcGxhaW4nfSk7XG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgIGEuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIGxldCBkID0gbmV3IERhdGUoKVxuICAgIGEuZG93bmxvYWQgPSBgaHlkcmEtJHtkLmdldEZ1bGxZZWFyKCl9LSR7ZC5nZXRNb250aCgpICsgMX0tJHtkLmdldERhdGUoKX0tJHtkLmdldEhvdXJzKCl9LiR7ZC5nZXRNaW51dGVzKCl9LiR7ZC5nZXRTZWNvbmRzKCl9LmpzYFxuICAgIGEuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZGF0YSlcbiAgICBhLmNsaWNrKClcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKTtcbiAgICB9LCAzMDApO1xuICB9KVxuXG4gIGVtaXR0ZXIub24oJ2VkaXRvcjpyYW5kb21pemUnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgY29uc3QgZWRpdG9yID0gc3RhdGUuZWRpdG9yLmVkaXRvclxuICAgIGlmIChldnQuc2hpZnRLZXkpIHtcbiAgICAgIGVkaXRvci5tdXRhdG9yLmRvVW5kbygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGl0b3IubXV0YXRvci5tdXRhdGUoeyByZXJvbGw6IGZhbHNlLCBjaGFuZ2VUcmFuc2Zvcm06IGV2dC5tZXRhS2V5IH0pO1xuICAgICAgZWRpdG9yLmZvcm1hdENvZGUoKVxuICAgICAgc2tldGNoZXMuc2F2ZUxvY2FsbHkoZWRpdG9yLmdldFZhbHVlKCkpXG4gICAgfVxuICB9KVxuXG4gIGZ1bmN0aW9uIGNsZWFyQWxsKCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHN0YXRlLmVkaXRvci5lZGl0b3JcbiAgICBodXNoKClcbiAgICBzcGVlZCA9IDFcbiAgICBza2V0Y2hlcy5jbGVhcigpXG4gICAgZWRpdG9yLmNsZWFyKClcbiAgfVxuXG4gIGVtaXR0ZXIub24oJ2VkaXRvcjpjbGVhckFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjbGVhckFsbCgpXG4gIH0pXG5cbiAgZW1pdHRlci5vbignZWRpdG9yOmV2YWxBbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gc3RhdGUuZWRpdG9yLmVkaXRvclxuICAgIGNvbnN0IGNvZGUgPSBlZGl0b3IuZ2V0VmFsdWUoKVxuICAgIHJlcGwuZXZhbChjb2RlLCAoc3RyaW5nLCBlcnIpID0+IHtcbiAgICAgIGVkaXRvci5mbGFzaENvZGUoKVxuICAgICAgaWYgKCFlcnIpIHNrZXRjaGVzLnNhdmVMb2NhbGx5KGNvZGUpXG4gICAgfSlcbiAgfSlcblxuICBlbWl0dGVyLm9uKCdlZGl0b3I6ZXZhbExpbmUnLCAobGluZSkgPT4ge1xuICAgIHJlcGwuZXZhbChsaW5lKVxuICB9KVxuXG4gIGVtaXR0ZXIub24oJ2VkaXRvcjpldmFsQmxvY2snLCAoYmxvY2spID0+IHtcbiAgICByZXBsLmV2YWwoYmxvY2spXG4gIH0pXG5cbiAgZW1pdHRlci5vbignZ2FsbGVyeTpzYXZlVG9VUkwnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGVkaXRvciA9IHN0YXRlLmVkaXRvci5lZGl0b3JcbiAgICBjb25zdCBlZGl0b3JUZXh0ID0gZWRpdG9yLmdldFZhbHVlKClcbiAgICBza2V0Y2hlcy5zYXZlTG9jYWxseShlZGl0b3JUZXh0KVxuICB9KVxuXG4gIGVtaXR0ZXIub24oJ2dhbGxlcnk6c2hhcmVTa2V0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGVkaXRvciA9IHN0YXRlLmVkaXRvci5lZGl0b3JcbiAgICBjb25zdCBlZGl0b3JUZXh0ID0gZWRpdG9yLmdldFZhbHVlKClcbiAgICByZXBsLmV2YWwoZWRpdG9yLmdldFZhbHVlKCksIChjb2RlLCBlcnJvcikgPT4ge1xuICAgICAgLy8gIGNvbnNvbGUubG9nKCdldmFsdWF0ZWQnLCBjb2RlLCBlcnJvcilcbiAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgc2hvd0NvbmZpcm1hdGlvbigobmFtZSkgPT4ge1xuICAgICAgICAgIHNrZXRjaGVzLnNoYXJlU2tldGNoKGVkaXRvclRleHQsIHN0YXRlLmh5ZHJhLmh5ZHJhLCBuYW1lKVxuICAgICAgICB9LCAoKSA9PiB7IH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICBlbWl0dGVyLm9uKCdnYWxsZXJ5OnNob3dFeGFtcGxlJywgKCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvciA9IHN0YXRlLmVkaXRvci5lZGl0b3JcbiAgICBjbGVhckFsbCgpXG4gICAgc2tldGNoZXMuc2V0UmFuZG9tU2tldGNoKClcbiAgICBlZGl0b3Iuc2V0VmFsdWUoc2tldGNoZXMuY29kZSlcbiAgICByZXBsLmV2YWwoZWRpdG9yLmdldFZhbHVlKCkpXG4gIH0pXG5cbiAgZW1pdHRlci5vbignc2hvdyBjb25maXJtYXRpb24nLCBmdW5jdGlvbiAoY291bnQpIHtcblxuICB9KVxuXG4gIGVtaXR0ZXIub24oJ2NsZWFyIGFsbCcsIGZ1bmN0aW9uIChjb3VudCkge1xuXG4gIH0pXG5cbiAgZW1pdHRlci5vbignaGlkZUFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICBzdGF0ZS5zaG93VUkgPSAhc3RhdGUuc2hvd1VJXG4gICAgZW1pdHRlci5lbWl0KCdyZW5kZXInKVxuICB9KVxuXG4gIGVtaXR0ZXIub24oJ3RvZ2dsZSBpbmZvJywgZnVuY3Rpb24gKGNvdW50KSB7XG4gICAgc3RhdGUuc2hvd0luZm8gPSAhc3RhdGUuc2hvd0luZm9cbiAgICBlbWl0dGVyLmVtaXQoJ3JlbmRlcicpXG4gIH0pXG5cbiAgZW1pdHRlci5vbignaHVkZSBpbmZvJywgZnVuY3Rpb24gKGNvdW50KSB7XG4gICAgc3RhdGUuc2hvd0luZm8gPSBmYWxzZVxuICAgIGVtaXR0ZXIuZW1pdCgncmVuZGVyJylcbiAgfSlcblxuXG5cbiAgZW1pdHRlci5vbignbXV0YXRlIHNrZXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICB9KVxufVxuXG5mdW5jdGlvbiBzaG93Q29uZmlybWF0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgdGVybWluYXRlQ2FsbGJhY2spIHtcbiAgdmFyIGMgPSBwcm9tcHQoYFxuXG4gIC8vLy86OiAgaMyWzIfNm8yTzLt50onMg82AzIvMkWTMnsynzLTNm8yScsymzZXMncy0zKhhzKTNmMyEzYPMjSBzzKDSic2FzYrNjWvMkc2mzKPMr82NZcyVzKPMv82LzJJ0zILMk8yyzanMkWPMlc2VzZfNpMyVaMyWzIfNm8yTzLsgZ8yCzL3Mk82AzZFhzKTNmMyEzYPMjWzMmcyRzL7Nls2jbMyZzJHMvs2WzaNlzJXMo8y/zYvMknLMps2VzJ3MtMyoedKJzIPNgMyLzJEgIDo6Ly8vL1xuXG5cbvCfjqggQ2xpY2sgJ09LJyB0byBhZGQgeW91ciBza2V0Y2ggYW5kIHNjcmVlbnNob3QgdG8gdGhlIGdhbGxlcnkgb2YgaHlkcmEgc2tldGNoZXMgYXQgaHR0cHM6Ly9ib3RzaW4uc3BhY2UvQGh5ZHJhLiBcblxu4oC877iPIE1ha2Ugc3VyZSB5b3UgYXJlIHJlYWR5IHRvIHNoYXJlIC0gdGhlcmUgaXMgbm8gdW5kbyBidXR0b24hXG5cbvCfkpYgVGhhbmsgeW91IGZvciBzaGFyaW5nISBZb3UgYXJlIGFsc28gd2FybWx5IGludml0ZWQgdG8gam9pbiB0aGUgdGhlIGxpdmUgY29kaW5nIHNlcnZlciBvbiB0aGUgZmVkaXZlcnNlIGF0IGh0dHBzOi8vc29jaWFsLnRvcGxhcC5vcmcvLlxuYCBcbiwgJ3lvdXIgbmFtZSwgbWFzdG9kb24gaGFuZGxlLCBhbmQvb3IgYSBzaG9ydCBkZXNjcmlwdGlvbicpXG5cbiAgLy8gIGNvbnNvbGUubG9nKCdjb25maXJtIHZhbHVlJywgYylcbiAgaWYgKGMgIT09IG51bGwpIHtcbiAgICBzdWNjZXNzQ2FsbGJhY2soYylcbiAgfSBlbHNlIHtcbiAgICB0ZXJtaW5hdGVDYWxsYmFjaygpXG4gIH1cbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBlbjoge1xuICAgICAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgICAgICAgJ2xhbmd1YWdlLW5hbWUnOiAnZW5nbGlzaCcsXG4gICAgICAgICAgICB0b29sYmFyOiB7XG4gICAgICAgICAgICAgICAgcnVuOiBcIlJ1biBhbGwgY29kZSAoY3RybCtzaGlmdCtlbnRlcilcIixcbiAgICAgICAgICAgICAgICB1cGxvYWQ6IFwidXBsb2FkIHRvIGdhbGxlcnlcIixcbiAgICAgICAgICAgICAgICBjbGVhcjogXCJjbGVhciBhbGxcIixcbiAgICAgICAgICAgICAgICBzaHVmZmxlOiBcInNob3cgcmFuZG9tIHNrZXRjaFwiLFxuICAgICAgICAgICAgICAgIHJhbmRvbTogXCJtYWtlIHJhbmRvbSBjaGFuZ2VcIixcbiAgICAgICAgICAgICAgICBcInNob3ctaW5mb1wiOiBcInNob3cgaW5mbyB3aW5kb3dcIixcbiAgICAgICAgICAgICAgICBcImhpZGUtaW5mb1wiOiBcImhpZGUgaW5mbyB3aW5kb3dcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluZm86IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ2h5ZHJhJyxcbiAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ2xpdmUgY29kaW5nIHZpZGVvIHN5bnRoJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0h5ZHJhIGlzIGxpdmUgY29kZS1hYmxlIHZpZGVvIHN5bnRoIGFuZCBjb2RpbmcgZW52aXJvbm1lbnQgdGhhdCBydW5zIGRpcmVjdGx5IGluIHRoZSBicm93c2VyLiBJdCBpcyBmcmVlIGFuZCBvcGVuLXNvdXJjZSBhbmQgbWFkZSBmb3IgYmVnaW5uZXJzIGFuZCBleHBlcnRzIGFsaWtlLicsXG4gICAgICAgICAgICAgICAgJ2dldC1zdGFydGVkLXRpdGxlJzogJ1RvIGdldCBzdGFydGVkOicsXG4gICAgICAgICAgICAgICAgJ2dldC1zdGFydGVkLWxpc3QnOiBbXG4gICAgICAgICAgICAgICAgICAgICdDbG9zZSB0aGlzIHdpbmRvdycsXG4gICAgICAgICAgICAgICAgICAgICdDaGFuZ2Ugc29tZSBudW1iZXJzJyxcbiAgICAgICAgICAgICAgICAgICAgJ1R5cGUgQ3RybCArIFNoaWZ0ICsgRW50ZXInXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24tZGV0YWlsZWQnOiAnSHlkcmEgaXMgd3JpdHRlbiBpbiBKYXZhU2NyaXB0IGFuZCBjb21waWxlcyB0byBXZWJHTCB1bmRlciB0aGUgaG9vZC4gVGhlIHN5bnRheCBpcyBpbnNwaXJlZCBieSBhbmFsb2cgbW9kdWxhciBzeW50aGVzaXMsIGluIHdoaWNoIGNoYWluaW5nIG9yIHBhdGNoaW5nIGEgc2V0IG9mIHRyYW5zZm9ybWF0aW9ucyB0b2dldGhlciBnZW5lcmF0ZXMgYSB2aXN1YWwgcmVzdWx0LicsXG4gICAgICAgICAgICAgICAgJ3VzZXMnOiAnSHlkcmEgY2FuIGJlIHVzZWQ6JyxcbiAgICAgICAgICAgICAgICAndXNlcy1saXN0JzogW1xuICAgICAgICAgICAgICAgICAgICAndG8gbWl4IGFuZCBhZGQgZWZmZWN0cyB0byBjYW1lcmEgZmVlZHMsIHNjcmVlbnNoYXJlcywgbGl2ZSBzdHJlYW1zLCBhbmQgdmlkZW9zJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RvIGNyZWF0ZSBnZW5lcmF0aXZlIGFuZCBhdWRpby1yZWFjdGl2ZSB2aXN1YWxzLCBhbmQgc2hhcmUgdGhlbSBvbmxpbmUgd2l0aCBvdGhlcnMnLFxuICAgICAgICAgICAgICAgICAgICAnaW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBqYXZhc2NyaXB0IGxpYnJhcmllcyBzdWNoIGFzIFA1LmpzLCBUb25lLmpzLCBUSFJFRS5qcywgb3IgZ2liYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RvIGFkZCBpbnRlcmFjdGl2ZSB2aWRlbyBlZmZlY3RzIHRvIGEgd2Vic2l0ZScsXG4gICAgICAgICAgICAgICAgICAgICd0byBleHBlcmltZW50IHdpdGggYW5kIGxlYXJuIGFib3V0IHZpZGVvIGZlZWRiYWNrLCBmcmFjdGFscywgYW5kIHBpeGVsIG9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAndG8gc3RyZWFtIHZpZGVvIGJldHdlZW4gYnJvd3NlcnMgYW5kIGxpdmUtamFtIHdpdGggb3RoZXJzIG9ubGluZSdcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICdhdXRob3InOiAnQ3JlYXRlZCBieSA8YSB7e2F1dGhvcn19Pm9saXZpYS48L2E+JyxcbiAgICAgICAgICAgICAgICAnbW9yZS1pbmZvJzogJ0ZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBpbnN0cnVjdGlvbnMsIHNlZTogPGEge3tkb2NzfX0+dGhlIGludGVyYWN0aXZlIGRvY3VtZW50YXRpb248L2E+LCA8YSB7e2Z1bmN0aW9uc319PmEgbGlzdCBvZiBoeWRyYSBmdW5jdGlvbnM8L2E+LCA8YSB7e2dhcmRlbn19PnRoZSBjb21tdW5pdHkgZGF0YWJhc2Ugb2YgcHJvamVjdHMgYW5kIHR1dG9yaWFsczwvYT4sIDxhIHt7Z2FsbGVyeX19PmEgZ2FsbGVyeSBvZiB1c2VyLWdlbmVyYXRlZCBza2V0Y2hlczwvYT4sIGFuZCA8YSB7e3JlcG99fT50aGUgc291cmNlIGNvZGUgb24gZ2l0aHViPC9hPiwnLFxuXG4gICAgICAgICAgICAgICAgJ21vcmUtaW5mby1mb3J1bXMnOiAnVGhlcmUgaXMgYWxzbyBhbiBhY3RpdmUgPGEge3tkaXNjb3JkfX0+RGlzY29yZCBzZXJ2ZXI8L2E+IGFuZCA8YSB7e2ZhY2Vib29rfX0+ZmFjZWJvb2sgZ3JvdXA8L2E+IGZvciBoeWRyYSB1c2Vycytjb250cmlidXRvcnMuJyxcbiAgICAgICAgICAgICAgICAnc3VwcG9ydCc6ICdJZiB5b3UgZW5qb3kgdXNpbmcgSHlkcmEsIHBsZWFzZSBjb25zaWRlciAgPGEge3tvcGVuLWNvbGxlY3RpdmV9fSA+c3VwcG9ydGluZyBjb250aW51ZWQgZGV2ZWxvcG1lbnQgPDMgPC9hPi4nXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59IiwiY29uc3QgaHRtbCA9IHJlcXVpcmUoJ2Nob28vaHRtbCcpXG5jb25zdCBDb21wb25lbnQgPSByZXF1aXJlKCdjaG9vL2NvbXBvbmVudCcpXG5jb25zdCBIeWRyYUVkaXRvciA9IHJlcXVpcmUoJy4vZWRpdG9yL2VkaXRvci5qcycpXG5jb25zdCBsb2cgPSByZXF1aXJlKCcuL2VkaXRvci9sb2cuanMnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEVkaXRvciBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChpZCwgc3RhdGUsIGVtaXQpIHtcbiAgICBzdXBlcihpZClcbiAgICB0aGlzLmxvY2FsID0gc3RhdGUuY29tcG9uZW50c1tpZF0gPSB7fVxuICAgIHN0YXRlLmVkaXRvciA9IHRoaXMgLy8gaGFja3kgd2F5IGZvIHNoYXJpbmcgZWRpdG9yIHRvIHJlc3Qgb2YgYXBwXG4gICAgdGhpcy5lbWl0ID0gZW1pdFxuICB9XG5cbiAgbG9hZCAoZWxlbWVudCkge1xuICAgbG9nLmluaXQodGhpcy5sb2dFbGVtZW50KVxuICAgdGhpcy5lZGl0b3IgPSBuZXcgSHlkcmFFZGl0b3IodGhpcy50ZXh0RWwpXG4gICB0aGlzLmVkaXRvci5vbihcIipcIiwgKGUsIGFyZ3MpID0+IHtcbiAgICAgICB0aGlzLmVtaXQoZSwgYXJncylcbiAgIH0pXG4gICAvLyBoYWNreSwgbWF5YmUgbm90IG5lY2Vzc2FyeVxuICAgdGhpcy5pbm5lclRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdDb2RlTWlycm9yJylbMF1cbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5pbm5lclRleHQuc3R5bGUub3BhY2l0eSA9IDBcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgdGhpcy5pbm5lclRleHQuc3R5bGUub3BhY2l0eSA9IDFcbiAgICB0aGlzLmlubmVyVGV4dC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2FsbCdcbiAgfVxuXG4gIHVwZGF0ZSAoc3RhdGUpIHtcbiAgICBpZihzdGF0ZS5zaG93SW5mbyA9PT0gdHJ1ZSB8fCBzdGF0ZS5zaG93VUkgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KClcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjcmVhdGVFbGVtZW50ICh7IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGgsIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodH0gPSB7fSkge1xuICAgIHRoaXMudGV4dEVsID0gaHRtbGAgPHRleHRhcmVhPjwvdGV4dGFyZWE+YFxuICAgIHRoaXMubG9nRWxlbWVudCA9IGh0bWxgPGRpdiBjbGFzcz1cImNvbnNvbGUgY20tcy10b21vcnJvdy1uaWdodC1laWdodGllc1wiPjwvZGl2PmBcbiAgICByZXR1cm4gaHRtbGA8ZGl2IGlkPVwiZWRpdG9yLWNvbnRhaW5lclwiIHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtcIj5cbiAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO3BhZGRpbmc6MTVweFwiPiR7dGhpcy50ZXh0RWx9PC9kaXY+XG4gICAgICAgJHt0aGlzLmxvZ0VsZW1lbnR9XG4gICAgICAgPC9kaXY+YFxuICB9XG59XG4iLCJjb25zdCBodG1sID0gcmVxdWlyZSgnY2hvby9odG1sJylcbmNvbnN0IENvbXBvbmVudCA9IHJlcXVpcmUoJ2Nob28vY29tcG9uZW50Jylcbi8vIGNvbnN0IEh5ZHJhU3ludGggPSByZXF1aXJlKCdoeWRyYS1zeW50aCcpXG4vLyBjb25zdCBIeWRyYVN5bnRoID0gcmVxdWlyZSgnLi8uLi8uLi8uLi8uLi8uLi9oeWRyYS1zeW50aCcpXG5jb25zdCBQNSA9IHJlcXVpcmUoJy4vLi4vbGliL3A1LXdyYXBwZXIuanMnKVxuY29uc3QgUGF0Y2hCYXkgPSByZXF1aXJlKCcuLy4uL2xpYi9wYXRjaC1iYXkvcGItbGl2ZS5qcycpXG5sZXQgcGJcblxuLy8gY29uc3QgU0VSVkVSX1VSTCA9IHByb2Nlc3MuZW52WydTRVJWRVJfVVJMJ11cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBIeWRyYUNhbnZhcyBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGlkLCBzdGF0ZSwgZW1pdCkge1xuICAgIHN1cGVyKGlkKVxuICAgIHRoaXMubG9jYWwgPSBzdGF0ZS5jb21wb25lbnRzW2lkXSA9IHt9XG4gICAgc3RhdGUuaHlkcmEgPSB0aGlzIC8vIGhhY2t5XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlXG4gICAgdGhpcy5lbWl0ID0gZW1pdFxuICB9XG5cbiAgbG9hZChlbGVtZW50KSB7XG4gICAgbGV0IGlzSU9TID1cbiAgICAgICgvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pIHx8XG4gICAgICAgIChuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdNYWNJbnRlbCcgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMSkpICYmXG4gICAgICAhd2luZG93Lk1TU3RyZWFtO1xuICAgIGxldCBwcmVjaXNpb25WYWx1ZSA9IGlzSU9TID8gJ2hpZ2hwJyA6ICdtZWRpdW1wJ1xuXG5cbiAgICBjb25zdCBoeWRyYU9wdGlvbnMgPSB7IGRldGVjdEF1ZGlvOiB0cnVlLCBjYW52YXM6IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcImNhbnZhc1wiKSwgcHJlY2lzaW9uOiBwcmVjaXNpb25WYWx1ZSB9XG4gICAgXG4gICAgaWYgKHRoaXMuc3RhdGUuc2VydmVyVVJMID09PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZygnTE9DQUwgT05MWSwgV0lMTCBOT1QgSU5JVCB3ZWJSVEMgYW5kIGdhbGxlcnknKVxuICAgICAgdGhpcy5oeWRyYSA9IG5ldyBIeWRyYShoeWRyYU9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGIgPSBuZXcgUGF0Y2hCYXkoKVxuICAgICAgaHlkcmFPcHRpb25zLnBiID0gdGhpcy5wYlxuICAgICAgdGhpcy5oeWRyYSA9IG5ldyBIeWRyYShoeWRyYU9wdGlvbnMpXG4gICAgICB0aGlzLnBiLmluaXQodGhpcy5oeWRyYS5jYXB0dXJlU3RyZWFtLCB7XG4gICAgICAgIC8vIHNlcnZlcjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgICAgc2VydmVyOiB0aGlzLnN0YXRlLnNlcnZlclVSTCxcbiAgICAgICAgcm9vbTogJ2ljbGMnXG4gICAgICB9KVxuICAgICAgd2luZG93LnBiID0gdGhpcy5wYlxuICAgIH1cblxuICAgIHdpbmRvdy5oeWRyYVN5bnRoID0gdGhpcy5oeWRyYVxuICAgIC8vICBpZihlbnZpcm9ubWVudCAhPT0gJ2xvY2FsJykge1xuICAgIC8vIG9zYygpLm91dCgpXG5cbiAgICAvLyB9XG5cbiAgICB3aW5kb3cuUDUgPSBQNVxuICAgIC8vIHdpbmRvdy5wYiA9IHBiXG4gICAgdGhpcy5lbWl0KCdoeWRyYSBsb2FkZWQnKVxuICB9XG5cbiAgdXBkYXRlKGNlbnRlcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY3JlYXRlRWxlbWVudCh7IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGgsIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB9ID0ge30pIHtcblxuICAgIHJldHVybiBodG1sYDxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlO1wiPlxuICAgICAgICA8Y2FudmFzIGlkPVwiaHlkcmEtY2FudmFzXCIgY2xhc3M9XCJiZy1ibGFja1wiIHN0eWxlPVwiaW1hZ2UtcmVuZGVyaW5nOnBpeGVsYXRlZDsgd2lkdGg6MTAwJTtoZWlnaHQ6MTAwJVwiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIke2hlaWdodH1cIj48L2NhbnZhcz48L2Rpdj5gXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLWV2YWwgKi9cbnZhciBDb2RlTWlycm9yID0gcmVxdWlyZSgnY29kZW1pcnJvci1taW5pZmllZC9saWIvY29kZW1pcnJvcicpXG5yZXF1aXJlKCdjb2RlbWlycm9yLW1pbmlmaWVkL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0JylcbnJlcXVpcmUoJ2NvZGVtaXJyb3ItbWluaWZpZWQvYWRkb24vaGludC9qYXZhc2NyaXB0LWhpbnQnKVxucmVxdWlyZSgnY29kZW1pcnJvci1taW5pZmllZC9hZGRvbi9oaW50L3Nob3ctaGludCcpXG5yZXF1aXJlKCdjb2RlbWlycm9yLW1pbmlmaWVkL2FkZG9uL3NlbGVjdGlvbi9tYXJrLXNlbGVjdGlvbicpXG5yZXF1aXJlKCdjb2RlbWlycm9yLW1pbmlmaWVkL2FkZG9uL2NvbW1lbnQvY29tbWVudCcpXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25hbm9idXMnKVxuY29uc3Qga2V5bWFwcyA9IHJlcXVpcmUoJy4va2V5bWFwcy5qcycpXG5jb25zdCBNdXRhdG9yID0gcmVxdWlyZSgnLi9yYW5kb21pemVyL011dGF0b3IuanMnKTtcbmNvbnN0IGJlYXV0aWZ5X2pzID0gcmVxdWlyZSgnanMtYmVhdXRpZnknKS5qc19iZWF1dGlmeVxuXG52YXIgaXNTaG93aW5nID0gdHJ1ZVxuXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRWRpdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgc3VwZXIoKVxuICAgIGNvbnNvbGUubG9nKFwiKioqIEVkaXRvciBjbGFzcyBjcmVhdGVkXCIpO1xuICAgIHZhciBzZWxmID0gdGhpc1xuXG4gICAgLy8gdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgLy8gY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAnZWRpdG9yLWNvbnRhaW5lcicpXG4gICAgLy8gdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEVYVEFSRUEnKVxuICAgIC8vIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKVxuICAgIC8vIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbClcblxuICAgIHRoaXMubXV0YXRvciA9IG5ldyBNdXRhdG9yKHRoaXMpO1xuXG4gICAgY29uc3QgZXh0cmFLZXlzID0ge31cbiAgICBPYmplY3QuZW50cmllcyhrZXltYXBzKS5mb3JFYWNoKChba2V5LCBlXSkgPT4gZXh0cmFLZXlzW2tleV0gPSAoKSA9PiB7XG4gICAgICBpZihlID09ICdlZGl0b3I6ZXZhbEJsb2NrJykge1xuICAgICAgICB0aGlzLmVtaXQoZSwgdGhpcy5nZXRDdXJyZW50QmxvY2soKS50ZXh0KVxuICAgICAgfSBlbHNlIGlmIChlID09ICdlZGl0b3I6ZXZhbExpbmUnKSB7XG4gICAgICAgIHRoaXMuZW1pdChlLCB0aGlzLmdldExpbmUoKSlcbiAgICAgIH0gZWxzZSBpZiAoZSA9PSAnZWRpdG9yOnRvZ2dsZUNvbW1lbnQnKSB7XG4gICAgICAgIHRoaXMuY20udG9nZ2xlQ29tbWVudCgpXG4gICAgICAvLyB9IGVsc2UgaWYgKGUgPT0gJ2dhbGxlcnk6c2F2ZVRvVVJMJykge1xuICAgICAgICB0aGlzLmVtaXQoZSwgdGhpcylcbiAgICAgIH0gZWxzZSBpZiAoZSA9PT0gJ2VkaXRvcjpmb3JtYXRDb2RlJykge1xuICAgICAgICB0aGlzLmZvcm1hdENvZGUoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbWl0KGUsIHRoaXMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICB0aGVtZTogJ3RvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzJyxcbiAgICAgIHZhbHVlOiAnaGVsbG8nLFxuICAgICAgbW9kZTogeyBuYW1lOiAnamF2YXNjcmlwdCcsIGdsb2JhbFZhcnM6IHRydWUgfSxcbiAgICAgIGxpbmVXcmFwcGluZzogdHJ1ZSxcbiAgICAgIHN0eWxlU2VsZWN0ZWRUZXh0OiB0cnVlLFxuICAgICAgZXh0cmFLZXlzOiBleHRyYUtleXNcbiAgICB9XG5cbiAgICB0aGlzLmNtID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEocGFyZW50LCBvcHRzKVxuICAgIHdpbmRvdy5jbSA9IHRoaXMuY21cbiAgICB0aGlzLmNtLnJlZnJlc2goKVxuXG4gICAgLy8gdGhpcy5zaG93KClcbiAgICAvLyAvLyAvLyBUTyBETzogYWRkIHNob3cgY29kZSBwYXJhbVxuICAgIC8vIGxldCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpXG4gICAgLy8gbGV0IHNob3dDb2RlID0gc2VhcmNoUGFyYW1zLmdldCgnc2hvdy1jb2RlJylcblxuICAgIC8vIGlmIChzaG93Q29kZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgLy8gICB0aGlzLmhpZGUoKVxuICAgIC8vIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuY20uc2V0VmFsdWUoJ1xcbiBcXG4gLy8gVHlwZSBzb21lIGNvZGUgb24gYSBuZXcgbGluZSAoc3VjaCBhcyBcIm9zYygpLm91dCgpXCIpLCBhbmQgcHJlc3MgQ1RSTCtzaGlmdCtlbnRlcicpXG4gIH1cblxuICBzZXRWYWx1ZSh2YWwpIHtcbiAgICB0aGlzLmNtLnNldFZhbHVlKHZhbClcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmNtLmdldFZhbHVlKClcbiAgfVxuXG4gIGZvcm1hdENvZGUoKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gYmVhdXRpZnlfanModGhpcy5jbS5nZXRWYWx1ZSgpLCB7IGluZGVudF9zaXplOiAyLCBcImJyZWFrX2NoYWluZWRfbWV0aG9kc1wiOiB0cnVlLCBcImluZGVudF93aXRoX3RhYnNcIjogdHJ1ZX0pXG4gICAgdGhpcy5jbS5zZXRWYWx1ZShmb3JtYXR0ZWQpXG4gIH1cblxuICAvLyBoaWRlKCkge1xuICAvLyAgIGNvbnNvbGUubG9nKCdoaWRpbmcnKVxuICAvLyAgIHZhciBsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnQ29kZU1pcnJvcicpWzBdXG4gIC8vICAgdmFyIG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtaGVhZGVyJylcbiAgLy8gICBsLnN0eWxlLm9wYWNpdHkgPSAwXG4gIC8vICAgbS5zdHlsZS5vcGFjaXR5ID0gMFxuICAvLyAgIHRoaXMuaXNTaG93aW5nID0gZmFsc2VcbiAgLy8gfVxuXG4gIC8vIHNob3coKSB7XG4gIC8vICAgdmFyIGwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdDb2RlTWlycm9yJylbMF1cbiAgLy8gICB2YXIgbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1oZWFkZXInKVxuICAvLyAgIGwuc3R5bGUub3BhY2l0eT0gMVxuICAvLyAgIG0uc3R5bGUub3BhY2l0eSA9IDFcbiAgLy8gICBsLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYWxsJ1xuICAvLyAgIHRoaXMuaXNTaG93aW5nID0gdHJ1ZVxuICAvLyB9XG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLmlzU2hvd2luZykge1xuICAgICAgdGhpcy5oaWRlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KClcbiAgICB9XG4gIH1cblxuICBnZXRMaW5lKCkge1xuICAgIHZhciBjID0gdGhpcy5jbS5nZXRDdXJzb3IoKVxuICAgIHZhciBzID0gdGhpcy5jbS5nZXRMaW5lKGMubGluZSlcbiAgICAvLyAgdGhpcy5jbS5tYXJrVGV4dCh7bGluZTogYy5saW5lLCBjaDowfSwge2xpbmU6IGMubGluZSsxLCBjaDowfSwge2NsYXNzTmFtZTogJ3N0eWxlZC1iYWNrZ3JvdW5kJ30pXG4gICAgdGhpcy5mbGFzaENvZGUoeyBsaW5lOiBjLmxpbmUsIGNoOiAwIH0sIHsgbGluZTogYy5saW5lICsgMSwgY2g6IDAgfSlcbiAgICByZXR1cm4gc1xuICB9XG5cbiAgZmxhc2hDb2RlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoIXN0YXJ0KSBzdGFydCA9IHsgbGluZTogdGhpcy5jbS5maXJzdExpbmUoKSwgY2g6IDAgfVxuICAgIGlmICghZW5kKSBlbmQgPSB7IGxpbmU6IHRoaXMuY20ubGFzdExpbmUoKSArIDEsIGNoOiAwIH1cbiAgICB2YXIgbWFya2VyID0gdGhpcy5jbS5tYXJrVGV4dChzdGFydCwgZW5kLCB7IGNsYXNzTmFtZTogJ3N0eWxlZC1iYWNrZ3JvdW5kJyB9KVxuICAgIHNldFRpbWVvdXQoKCkgPT4gbWFya2VyLmNsZWFyKCksIDMwMClcbiAgfVxuXG5cbiAgZ2V0Q3VycmVudEJsb2NrKCkgeyAvLyB0aGFua3MgdG8gZ3JhaGFtIHdha2VmaWVsZCArIGdpYmJlclxuICAgIHZhciBlZGl0b3IgPSB0aGlzLmNtXG4gICAgdmFyIHBvcyA9IGVkaXRvci5nZXRDdXJzb3IoKVxuICAgIHZhciBzdGFydGxpbmUgPSBwb3MubGluZVxuICAgIHZhciBlbmRsaW5lID0gcG9zLmxpbmVcbiAgICB3aGlsZSAoc3RhcnRsaW5lID4gMCAmJiBlZGl0b3IuZ2V0TGluZShzdGFydGxpbmUpICE9PSAnJykge1xuICAgICAgc3RhcnRsaW5lLS1cbiAgICB9XG4gICAgd2hpbGUgKGVuZGxpbmUgPCBlZGl0b3IubGluZUNvdW50KCkgJiYgZWRpdG9yLmdldExpbmUoZW5kbGluZSkgIT09ICcnKSB7XG4gICAgICBlbmRsaW5lKytcbiAgICB9XG4gICAgdmFyIHBvczEgPSB7XG4gICAgICBsaW5lOiBzdGFydGxpbmUsXG4gICAgICBjaDogMFxuICAgIH1cbiAgICB2YXIgcG9zMiA9IHtcbiAgICAgIGxpbmU6IGVuZGxpbmUsXG4gICAgICBjaDogMFxuICAgIH1cbiAgICB2YXIgc3RyID0gZWRpdG9yLmdldFJhbmdlKHBvczEsIHBvczIpXG5cbiAgICB0aGlzLmZsYXNoQ29kZShwb3MxLCBwb3MyKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBwb3MxLFxuICAgICAgZW5kOiBwb3MyLFxuICAgICAgdGV4dDogc3RyXG4gICAgfVxuICB9XG5cbn1cblxuIiwibW9kdWxlLmV4cG9ydHMgPSB7IFxuICAgICdDdHJsLUVudGVyJzogJ2VkaXRvcjpldmFsTGluZScsXG4gICAgJ0N0cmwtLyc6ICdlZGl0b3I6dG9nZ2xlQ29tbWVudCcsXG4gICAgJ0FsdC1FbnRlcic6ICdlZGl0b3I6ZXZhbEJsb2NrJyxcbiAgICAnU2hpZnQtQ3RybC1FbnRlcic6ICdlZGl0b3I6ZXZhbEFsbCcsXG4gICAgJ1NoaWZ0LUN0cmwtRyc6ICdnYWxsZXJ5OnNoYXJlU2tldGNoJyxcbiAgICAnU2hpZnQtQ3RybC1GJzogJ2VkaXRvcjpmb3JtYXRDb2RlJyxcbiAgICAnU2hpZnQtQ3RybC1MJzogJ2dhbGxlcnk6c2F2ZVRvVVJMJyxcbiAgICAnU2hpZnQtQ3RybC1IJzogJ2hpZGVBbGwnLFxuICAgICdTaGlmdC1DdHJsLVMnOiAnc2NyZWVuY2FwJ1xufSIsInZhciBsb2dFbGVtZW50XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbml0OiAoZWwpID0+IHtcbiAgICAvLyBsb2dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAvLyBsb2dFbGVtZW50LmNsYXNzTmFtZSA9IFwiY29uc29sZSBjbS1zLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzXCJcbiAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvZ0VsZW1lbnQpXG4gICAgbG9nRWxlbWVudCA9IGVsXG4gIH0sXG4gIGxvZzogKG1zZywgY2xhc3NOYW1lID0gXCJcIikgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdsb2dnaW5nJywgbXNnLCBjbGFzc05hbWUpXG4gICAgaWYobG9nRWxlbWVudCkgbG9nRWxlbWVudC5pbm5lckhUTUwgPWAgPj4gPHNwYW4gY2xhc3M9JHtjbGFzc05hbWV9PiAke21zZ30gPC9zcGFuPiBgXG4gIH0sXG4gIGhpZGU6ICgpID0+IHtcbiAgICBpZihsb2dFbGVtZW50KSBsb2dFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgfSxcbiAgc2hvdzogKCkgPT4ge1xuICAgIGlmKGxvZ0VsZW1lbnQpIGxvZ0VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgfSxcbiAgdG9nZ2xlOiAoKSA9PiB7XG4gICAgaWYobG9nRWxlbWVudC5zdHlsZS5kaXNwbGF5ID09ICdub25lJykge1xuICAgICAgbG9nRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHtQYXJzZXJ9ID0gcmVxdWlyZShcImFjb3JuXCIpO1xuY29uc3Qge2dlbmVyYXRlfSA9IHJlcXVpcmUoJ2FzdHJpbmcnKTtcbmNvbnN0IHsgZGVmYXVsdFRyYXZlbGVyLCBhdHRhY2hDb21tZW50cywgbWFrZVRyYXZlbGVyIH0gPSByZXF1aXJlKCdhc3RyYXZlbCcpO1xuY29uc3Qge1VuZG9TdGFja30gPSByZXF1aXJlKCcuL1VuZG9TdGFjay5qcycpO1xuY29uc3QgcmVwbCA9IHJlcXVpcmUoJy4vLi4vcmVwbC5qcycpXG4vLyBjb25zdCBnbHNsVHJhbnNmb3JtcyA9IHJlcXVpcmUoJ2h5ZHJhLXN5bnRoL3NyYy9nbHNsL2dsc2wtZnVuY3Rpb25zLmpzJykoKVxuY29uc3QgZ2xzbFRyYW5zZm9ybXMgPSByZXF1aXJlKCcuL2dsc2xUcmFuc2Zvcm1zLmpzJylcblxuY2xhc3MgTXV0YXRvciB7XG5cbiAgY29uc3RydWN0b3IoZWRpdG9yKSB7XG4gICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgdGhpcy51bmRvU3RhY2sgPSBuZXcgVW5kb1N0YWNrKCk7XG5cbiAgICB0aGlzLmluaXRpYWxWZWN0b3IgPSBbXTtcblxuICAgIHRoaXMuZnVuY1RhYiA9IHt9O1xuICAgIHRoaXMudHJhbnNNYXAgPSB7fTtcblx0XHR0aGlzLnNjYW5GdW5jcygpO1xuXHRcdHRoaXMuZHVtcERpY3QoKTtcbiAgfVxuXG4gIGR1bXBMaXN0KCkge1xuICBcdGxldCBnc2xUYWIgPSBnbHNsVHJhbnNmb3JtcztcbiAgXHRnc2xUYWIuZm9yRWFjaCAodiA9PiB7XG4gIFx0XHR2YXIgYXJnTGlzdCA9IFwiXCI7XG4gIFx0XHR2LmlucHV0cy5mb3JFYWNoKChhKSA9PiB7XG4gIFx0XHRcdGlmIChhcmdMaXN0ICE9IFwiXCIpIGFyZ0xpc3QgKz0gXCIsIFwiO1xuICBcdFx0XHRsZXQgYXJnTCA9IGEubmFtZSArIFwiOiBcIiArIGEudHlwZSArIFwiIHtcIiArIGEuZGVmYXVsdCArIFwifVwiO1xuICBcdFx0XHRhcmdMaXN0ID0gYXJnTGlzdCArIGFyZ0w7XG4gIFx0XHR9KTtcbiAgXHQvL1x0Y29uc29sZS5sb2codi5uYW1lICsgXCIgW1wiICsgdi50eXBlICsgXCJdIChcIisgYXJnTGlzdCArIFwiKVwiKTtcbiAgXHR9KTtcbiAgfVxuXG4gIHNjYW5GdW5jcygpIHtcbiAgXHRsZXQgZ3NsVGFiID0gZ2xzbFRyYW5zZm9ybXM7XG4gIFx0Z3NsVGFiLmZvckVhY2ggKGYgPT4ge1xuICBcdFx0dGhpcy50cmFuc01hcFtmLm5hbWVdID0gZjtcbiAgXHRcdGlmICh0aGlzLmZ1bmNUYWJbZi50eXBlXSA9PT0gdW5kZWZpbmVkKSB7dGhpcy5mdW5jVGFiW2YudHlwZV0gPSBbXX1cblx0XHRcdHRoaXMuZnVuY1RhYltmLnR5cGVdLnB1c2goZik7XG4gIFx0fSk7XG4gIH1cblxuXHRkdW1wRGljdCgpIHtcblx0XHRmb3IobGV0IHRuIGluIHRoaXMuZnVuY1RhYilcblx0XHR7XG5cdFx0XHR0aGlzLmZ1bmNUYWJbdG5dLmZvckVhY2goZiA9PiB7XG4gIFx0XHR2YXIgYXJnTGlzdCA9IFwiXCI7XG4gIFx0XHRmLmlucHV0cy5mb3JFYWNoKChhKSA9PiB7XG4gIFx0XHRcdGlmIChhcmdMaXN0ICE9IFwiXCIpIGFyZ0xpc3QgKz0gXCIsIFwiO1xuICBcdFx0XHRsZXQgYXJnTCA9IGEubmFtZSArIFwiOiBcIiArIGEudHlwZSArIFwiIHtcIiArIGEuZGVmYXVsdCArIFwifVwiO1xuICBcdFx0XHRhcmdMaXN0ID0gYXJnTGlzdCArIGFyZ0w7XG4gIFx0XHR9KTtcbiAgXHRcdC8vY29uc29sZS5sb2coZi5uYW1lICsgXCIgW1wiICsgZi50eXBlICsgXCJdIChcIisgYXJnTGlzdCArIFwiKVwiKTtcblx0XHRcdH0pO1xuICAgIH1cblx0fVxuXG4gIG11dGF0ZShvcHRpb25zKSB7XG4gICAgLy8gR2V0IHRleHQgZnJvbSBDb2RlTWlycm9yLlxuICAgIGxldCB0ZXh0ID0gdGhpcy5lZGl0b3IuY20uZ2V0VmFsdWUoKTtcbiAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHt0ZXh0LCBsYXN0TGl0WDogdGhpcy5sYXN0TGl0WH0pO1xuICAgIGxldCBuZWVkVG9SdW4gPSB0cnVlO1xuICAgIGxldCB0cnlDb3VudGVyID0gNTtcbiAgICB3aGlsZSAobmVlZFRvUnVuICYmIHRyeUNvdW50ZXItLSA+PSAwKSB7XG4gICAgICAgIC8vIFBhcnNlIHRvIEFTVFxuICAgICAgICB2YXIgY29tbWVudHMgPSBbXTtcbiAgICAgICAgbGV0IGFzdCA9IFBhcnNlci5wYXJzZSh0ZXh0LCB7XG4gICAgICAgICAgICBsb2NhdGlvbnM6IHRydWUsXG4gICAgICAgICAgICBvbkNvbW1lbnQ6IGNvbW1lbnRzfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1vZGlmeSB0aGUgQVNULlxuICAgICAgICB0aGlzLnRyYW5zZm9ybShhc3QsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIFB1dCB0aGUgY29tbWVudHMgYmFjay5cbiAgICAgICAgYXR0YWNoQ29tbWVudHMoYXN0LCBjb21tZW50cyk7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgSlMgZnJvbSBBU1QgYW5kIHNldCBiYWNrIGludG8gQ29kZU1pcnJvciBlZGl0b3IuXG4gICAgICAgIGxldCByZWdlbiA9IGdlbmVyYXRlKGFzdCwge2NvbW1lbnRzOiB0cnVlfSk7XG5cbiAgICAgICAgdGhpcy5lZGl0b3IuY20uc2V0VmFsdWUocmVnZW4pO1xuXHRcdFx0XHR0cnkge1xuICAgICAgICAvLyBFdmFsdWF0ZSB0aGUgdXBkYXRlZCBleHByZXNzaW9uLlxuICAgICAgICByZXBsLmV2YWwocmVnZW4sIChjb2RlLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UgZ290IGFuIGVycm9yLCBrZWVwIHRyeWluZyBzb21ldGhpbmcgZWxzZS5cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXZhbCBlcnJvcjogXCIgKyByZWdlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZWVkVG9SdW4gPSBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIFx0Y29uc29sZS5sb2coXCJFeGNlcHRpb24gY2F1Z2h0OiBcIiArIGVycik7XG4gICAgICBcdG5lZWRUb1J1biA9IGVycjtcbiAgICAgIH1cbiAgICAgfVxuICB9XG5cbiAgZG9VbmRvKCkge1xuICAgIC8vIElmIHRoZSBjdXJyZW50IHRleHQgaXMgdW5zYXZlZCwgc2F2ZSBpdCBzbyB3ZSBjYW4gcmVkbyBpZiBuZWVkIGJlLlxuICAgIGlmICh0aGlzLnVuZG9TdGFjay5hdFRvcCgpKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gdGhpcy5lZGl0b3IuY20uZ2V0VmFsdWUoKTtcbiAgICAgICAgdGhpcy51bmRvU3RhY2sucHVzaCh7dGV4dCwgbGFzdExpdFg6IHRoaXMubGFzdExpdFh9KTtcbiAgICB9XG4gICAgLy8gVGhlbiBwb3Atb2ZmIHRoZSBpbmZvIHRvIHJlc3RvcmUuXG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmNhblVuZG8oKSkge1xuICAgICAgICBsZXQge3RleHQsIGxhc3RMaXRYfSA9IHRoaXMudW5kb1N0YWNrLnVuZG8oKTtcbiAgICAgICAgdGhpcy5zZXRUZXh0KHRleHQpO1xuICAgICAgICB0aGlzLmxhc3RMaXRYID0gbGFzdExpdFg7XG4gICAgfVxuICB9XG5cbiAgZG9SZWRvKCkge1xuICAgIGlmKHRoaXMudW5kb1N0YWNrLmNhblJlZG8oKSkge1xuICAgICAgICBsZXQge3RleHQsIGxhc3RMaXRYfSA9IHRoaXMudW5kb1N0YWNrLnJlZG8oKTtcbiAgICAgICAgdGhpcy5zZXRUZXh0KHRleHQpO1xuICAgICAgICB0aGlzLmxhc3RMaXRYID0gbGFzdExpdFg7XG4gICAgfVxuICB9XG5cbiAgc2V0VGV4dCh0ZXh0KSB7XG4gICAgdGhpcy5lZGl0b3IuY20uc2V0VmFsdWUodGV4dCk7XG4gICAgcmVwbC5ldmFsKHRleHQsIChjb2RlLCBlcnJvcikgPT4ge1xuICAgIH0pO1xuXG4gICAgfVxuXG4gIC8vIFRoZSBvcHRpb25zIG9iamVjdCBjb250YWlucyBhIGZsYWcgdGhhdCBjb250cm9scyBob3cgdGhlXG4gIC8vIExpdGVyYWwgdG8gbXV0YXRlIGlzIGRldGVybWluZWQuIElmIHJlcm9sbCBpcyBmYWxzZSwgd2VcbiAgLy8gcGljayBvbmUgYXQgcmFuZG9tLiBJZiByZXJvbGwgaXMgdHJ1ZSwgd2UgdXNlIHRoZSBzYW1lIGZpZWxkXG4gIC8vIHdlIGRpZCBsYXN0IHRpbWUuXG4gIHRyYW5zZm9ybShhc3QsIG9wdGlvbnMpIHtcbiAgICAvLyBBbiBBU1QgdHJhdmVsZXIgdGhhdCBhY2N1bXVsYXRlcyBhIGxpc3Qgb2YgTGl0ZXJhbCBub2Rlcy5cbiAgICBsZXQgdHJhdmVsZXIgPSBtYWtlVHJhdmVsZXIoe1xuICBnbzogZnVuY3Rpb24obm9kZSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICBzdGF0ZS5saXRlcmFsVGFiLnB1c2gobm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnByb3BlcnR5ICYmIG5vZGUucHJvcGVydHkudHlwZSA9PT0gJ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICAgICAgLy8gbnVtZXJpYyBhcnJheSBzdWJzY3JpcHRzIGFyZSBpbmVsaWdhYmxlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5ICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUgJiYgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSAhPT0gJ291dCcpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5mdW5jdGlvblRhYi5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGwgdGhlIHBhcmVudCdzIGBnb2AgbWV0aG9kXG4gICAgICAgIHRoaXMuc3VwZXIuZ28uY2FsbCh0aGlzLCBub2RlLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgc3RhdGUgPSB7fTtcbiAgICBzdGF0ZS5saXRlcmFsVGFiID0gW107XG4gICAgc3RhdGUuZnVuY3Rpb25UYWIgPSBbXTtcblxuICAgIHRyYXZlbGVyLmdvKGFzdCwgc3RhdGUpO1xuXG4gICAgdGhpcy5saXRDb3VudCA9IHN0YXRlLmxpdGVyYWxUYWIubGVuZ3RoO1xuICAgIHRoaXMuZnVuQ291bnQgPSBzdGF0ZS5mdW5jdGlvblRhYi5sZW5ndGg7XG4gICAgaWYgKHRoaXMubGl0Q291bnQgIT09IHRoaXMuaW5pdGlhbFZlY3Rvci5sZW5ndGgpIHtcbiAgICAgICAgbGV0IG5leHRWZWN0ID0gW107XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLmxpdENvdW50OyArK2kpIHtcbiAgICAgICAgICAgIG5leHRWZWN0LnB1c2goc3RhdGUubGl0ZXJhbFRhYltpXS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0aWFsVmVjdG9yID0gbmV4dFZlY3Q7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNoYW5nZVRyYW5zZm9ybSkge1xuICAgIFx0dGhpcy5nbGl0Y2hUcmFucyhzdGF0ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2UgdGhpcy5nbGl0Y2hMaXRlcmFsKHN0YXRlLCBvcHRpb25zKTtcblxufVxuXG5cdGdsaXRjaExpdGVyYWwoc3RhdGUsIG9wdGlvbnMpXG5cdHtcblx0XHRsZXQgbGl0eCA9IDA7XG4gICAgaWYgKG9wdGlvbnMucmVyb2xsKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RMaXRYICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxpdHggPSB0aGlzLmxhc3RMaXRYO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGl0eCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMubGl0Q291bnQpO1xuICAgICAgICB0aGlzLmxhc3RMaXRYID0gbGl0eDtcbiAgICB9XG5cbiAgICBsZXQgbW9kTGl0ID0gc3RhdGUubGl0ZXJhbFRhYltsaXR4XTtcbiAgICBpZiAobW9kTGl0KSB7XG4gICAgICAgIC8vIGxldCBnbGl0Y2hlZCA9IHRoaXMuZ2xpdGNoTnVtYmVyKG1vZExpdC52YWx1ZSk7XG4gICAgICAgIGxldCBnbGl0Y2hlZCA9IHRoaXMuZ2xpdGNoUmVsVG9Jbml0KG1vZExpdC52YWx1ZSwgdGhpcy5pbml0aWFsVmVjdG9yW2xpdHhdKTtcbiAgICAgICAgbGV0IHdhcyA9IG1vZExpdC5yYXc7XG4gICAgICAgIG1vZExpdC52YWx1ZSA9IGdsaXRjaGVkO1xuICAgICAgICBtb2RMaXQucmF3ID0gXCJcIiArIGdsaXRjaGVkO1xuICAgICAgICBjb25zb2xlLmxvZyhcIkxpdGVyYWw6IFwiICsgbGl0eCArIFwiIGNoYW5nZWQgZnJvbTogXCIgKyB3YXMgKyBcIiB0bzogXCIgKyBnbGl0Y2hlZCk7XG4gICAgfVxuXHR9XG5cbiAgZ2xpdGNoTnVtYmVyKG51bSkge1xuICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgbnVtID0gMTtcbiAgICB9XG4gICAgbGV0IHJhbmdlID0gbnVtICogMjtcbiAgICBsZXQgcm5kVmFsID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogcmFuZ2UgKiAxMDAwKSAvIDEwMDA7XG4gICAgcmV0dXJuIHJuZFZhbDtcbiAgfVxuXG4gIGdsaXRjaFJlbFRvSW5pdChudW0sIGluaXRWYWwpIHtcbiAgICBpZiAoaW5pdFZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBnbGl0Y2hOdW1iZXIobnVtKTtcbiAgICB9IGlmIChpbml0VmFsID09PSAwKSB7XG4gICAgICAgIGluaXRWYWwgPSAwLjU7XG4gICAgfVxuXG4gICAgbGV0IHJuZFZhbCA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIGluaXRWYWwgKiAyICogMTAwMCkgLyAxMDAwO1xuICAgIHJldHVybiBybmRWYWw7XG59XG5cdGdsaXRjaFRyYW5zKHN0YXRlLCBvcHRpb25zKVxuXHR7XG4vKlxuXHRcdHN0YXRlLmZ1bmN0aW9uVGFiLmZvckVhY2goKGYpPT57XG5cdFx0XHRjb25zb2xlLmxvZyhmLmNhbGxlZS5wcm9wZXJ0eS5uYW1lKTtcblx0XHR9KTtcbiovXG5cdFx0bGV0IGZ1bnggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLmZ1bkNvdW50KTtcblx0XHRpZiAoc3RhdGUuZnVuY3Rpb25UYWJbZnVueF0gPT09IHVuZGVmaW5lZCB8fCBzdGF0ZS5mdW5jdGlvblRhYltmdW54XS5jYWxsZWUgPT09IHVuZGVmaW5lZCB8fCBzdGF0ZS5mdW5jdGlvblRhYltmdW54XS5jYWxsZWUucHJvcGVydHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQgIFx0Y29uc29sZS5sb2coXCJObyB2YWxpZCBmdW5jdGlvblRhYiBmb3IgaW5kZXg6IFwiICsgZnVueCk7XG5cdCAgXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxldCBvbGROYW1lID0gc3RhdGUuZnVuY3Rpb25UYWJbZnVueF0uY2FsbGVlLnByb3BlcnR5Lm5hbWU7XG5cblx0ICBpZiAob2xkTmFtZSA9PSB1bmRlZmluZWQpIHtcblx0ICBcdGNvbnNvbGUubG9nKFwiTm8gbmFtZSBmb3IgY2FsbGVlXCIpO1xuXHQgIFx0cmV0dXJuO1xuXHQgIH1cblx0XHRsZXQgZnR5cGUgPSB0aGlzLnRyYW5zTWFwW29sZE5hbWVdLnR5cGU7XG5cdFx0aWYgKGZ0eXBlID09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS5sb2coXCJmdHlwZSB1bmRlZmluZWQgZm9yOiBcIiArIG9sZE5hbWUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgb3RoZXJzID0gdGhpcy5mdW5jVGFiW2Z0eXBlXTtcblx0XHRpZiAob3RoZXJzID09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS5sb2coXCJubyBmdW5jVGFiIGVudHJ5IGZvcjogXCIgKyBmdHlwZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxldCBjaGFuZ2VYID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogb3RoZXJzLmxlbmd0aCk7XG5cdFx0bGV0IGJlY29tZSA9IG90aGVyc1tjaGFuZ2VYXS5uYW1lO1xuXG5cdFx0Ly8gY2hlY2sgYmxhY2tsaXN0ZWQgY29tYmluYXRpb25zLlxuXHRcdGlmIChvbGROYW1lID09PSBcIm1vZHVsYXRlXCIgJiYgYmVjb21lID09PSBcIm1vZHVsYXRlU2Nyb2xsWFwiKVxuXHRcdHtcblx0XHRcdGNvbnNvbGUubG9nKFwiRnVuY3Rpb246IFwiICsgZnVueCArIFwiIGNoYW5naW5nIGZyb206IFwiICsgb2xkTmFtZSArIFwiIGNhbid0IGNoYW5nZSB0bzogXCIgKyBiZWNvbWUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN0YXRlLmZ1bmN0aW9uVGFiW2Z1bnhdLmNhbGxlZS5wcm9wZXJ0eS5uYW1lID0gYmVjb21lO1xuICAgIGNvbnNvbGUubG9nKFwiRnVuY3Rpb246IFwiICsgZnVueCArIFwiIGNoYW5nZWQgZnJvbTogXCIgKyBvbGROYW1lICsgXCIgdG86IFwiICsgYmVjb21lKTtcblx0fVxuXG59IC8vICBFbmQgb2YgY2xhc3MgTXV0YXRvci5cblxubW9kdWxlLmV4cG9ydHMgPSBNdXRhdG9yXG4iLCIvLyBBIGdlbmVyYWxpemVkICdVbmRvIHN0YWNrJyB3aGljaCBjYW4ga2VlcCBOIGxldmVscyBvZiByZXZlcnRhYmxlIHN0YXRlLlxuY2xhc3MgVW5kb1N0YWNrIHtcbiAgICBjb25zdHJ1Y3RvcihsaW1pdCkge1xuICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgIHRoaXMuaW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5saW1pdCA9IGxpbWl0O1xuICAgIH1cbiAgICBcbiAgICBhdFRvcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IC0xO1xuICAgIH1cblxuICAgIGNhblVuZG8oKSB7XG4gICAgICAgIGlmKHRoaXMuc3RhY2subGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID09PSAtMSB8fCB0aGlzLmluZGV4ID4gMDtcbiAgICB9XG5cbiAgICBjYW5SZWRvKCkge1xuICAgICAgICBpZih0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmluZGV4ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA8IHRoaXMuc3RhY2subGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICBwdXNoKGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMuaW5kZXggPCB0aGlzLnN0YWNrLmxlbmd0aCkgdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saW1pdCAmJiB0aGlzLnN0YWNrLmxlbmd0aCA+IHRoaXMubGltaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhY2suc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YWNrLnB1c2goaXRlbSk7XG4gICAgfVxuXG4gICAgdW5kbygpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5pbmRleCA9PT0gLTEpIHsgLy8gc3RhcnQgb25lIGJlaGluZCB0aGUgcmVkbyBidWZmZXJcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPiAwKSB0aGlzLmluZGV4LS07XG4gICAgICAgIGxldCB2ID0gdGhpcy5zdGFja1t0aGlzLmluZGV4XTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuXG4gICAgcmVkbygpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID09PSAwIHx8IHRoaXMuaW5kZXggPT09IC0xKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgbmV4dFggPSB0aGlzLmluZGV4ICsgMTtcbiAgICAgICAgaWYgKG5leHRYID49IHRoaXMuc3RhY2subGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmluZGV4ID0gbmV4dFg7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXMuaW5kZXhdO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7VW5kb1N0YWNrfSIsIi8qXG5Gb3JtYXQgZm9yIGFkZGluZyBmdW5jdGlvbnMgdG8gaHlkcmEuIEZvciBlYWNoIGVudHJ5IGluIHRoaXMgZmlsZSwgaHlkcmEgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgYSBnbHNsIGZ1bmN0aW9uIGFuZCBqYXZhc2NyaXB0IGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbmFtZS4gWW91IGNhbiBhbHNvIGFzcyBmdW5jdGlvbnMgZHluYW1pY2FsbHkgdXNpbmcgc2V0RnVuY3Rpb24ob2JqZWN0KS5cblxue1xuICBuYW1lOiAnb3NjJywgLy8gbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBhY2Nlc3MgZnVuY3Rpb24gaW4ganMgYXMgd2VsbCBhcyBpbiBnbHNsXG4gIHR5cGU6ICdzcmMnLCAvLyBjYW4gYmUgJ3NyYycsICdjb2xvcicsICdjb21iaW5lJywgJ2NvbWJpbmVDb29yZHMnLiBzZWUgYmVsb3cgZm9yIG1vcmUgaW5mb1xuICBpbnB1dHM6IFtcbiAgICB7XG4gICAgICBuYW1lOiAnZnJlcScsXG4gICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgZGVmYXVsdDogMC4yXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc3luYycsXG4gICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgZGVmYXVsdDogMC4xXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICBkZWZhdWx0OiAwLjBcbiAgICB9XG4gIF0sXG4gICAgZ2xzbDogYFxuICAgICAgdmVjMiBzdCA9IF9zdDtcbiAgICAgIGZsb2F0IHIgPSBzaW4oKHN0Lngtb2Zmc2V0KjIvZnJlcSt0aW1lKnN5bmMpKmZyZXEpKjAuNSAgKyAwLjU7XG4gICAgICBmbG9hdCBnID0gc2luKChzdC54K3RpbWUqc3luYykqZnJlcSkqMC41ICsgMC41O1xuICAgICAgZmxvYXQgYiA9IHNpbigoc3QueCtvZmZzZXQvZnJlcSt0aW1lKnN5bmMpKmZyZXEpKjAuNSAgKyAwLjU7XG4gICAgICByZXR1cm4gdmVjNChyLCBnLCBiLCAxLjApO1xuICAgYFxufVxuXG4vLyBUaGUgYWJvdmUgY29kZSBnZW5lcmF0ZXMgdGhlIGdsc2wgZnVuY3Rpb246XG5gdmVjNCBvc2ModmVjMiBfc3QsIGZsb2F0IGZyZXEsIGZsb2F0IHN5bmMsIGZsb2F0IG9mZnNldCl7XG4gdmVjMiBzdCA9IF9zdDtcbiBmbG9hdCByID0gc2luKChzdC54LW9mZnNldCoyL2ZyZXErdGltZSpzeW5jKSpmcmVxKSowLjUgICsgMC41O1xuIGZsb2F0IGcgPSBzaW4oKHN0LngrdGltZSpzeW5jKSpmcmVxKSowLjUgKyAwLjU7XG4gZmxvYXQgYiA9IHNpbigoc3QueCtvZmZzZXQvZnJlcSt0aW1lKnN5bmMpKmZyZXEpKjAuNSAgKyAwLjU7XG4gcmV0dXJuIHZlYzQociwgZywgYiwgMS4wKTtcbn1gXG5cblxuVHlwZXMgYW5kIGRlZmF1bHQgYXJndW1lbnRzIGZvciBoeWRyYSBmdW5jdGlvbnMuXG5UaGUgdmFsdWUgaW4gdGhlICd0eXBlJyBmaWVsZCBsZXRzIHRoZSBwYXJzZXIga25vdyB3aGljaCB0eXBlIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHJldHVybmVkIGFzIHdlbGwgYXMgZGVmYXVsdCBhcmd1bWVudHMuXG5cbmNvbnN0IHR5cGVzID0ge1xuICAnc3JjJzoge1xuICAgIHJldHVyblR5cGU6ICd2ZWM0JyxcbiAgICBhcmdzOiBbJ3ZlYzIgX3N0J11cbiAgfSxcbiAgJ2Nvb3JkJzoge1xuICAgIHJldHVyblR5cGU6ICd2ZWMyJyxcbiAgICBhcmdzOiBbJ3ZlYzIgX3N0J11cbiAgfSxcbiAgJ2NvbG9yJzoge1xuICAgIHJldHVyblR5cGU6ICd2ZWM0JyxcbiAgICBhcmdzOiBbJ3ZlYzQgX2MwJ11cbiAgfSxcbiAgJ2NvbWJpbmUnOiB7XG4gICAgcmV0dXJuVHlwZTogJ3ZlYzQnLFxuICAgIGFyZ3M6IFsndmVjNCBfYzAnLCAndmVjNCBfYzEnXVxuICB9LFxuICAnY29tYmluZUNvb3JkJzoge1xuICAgIHJldHVyblR5cGU6ICd2ZWMyJyxcbiAgICBhcmdzOiBbJ3ZlYzIgX3N0JywgJ3ZlYzQgX2MwJ11cbiAgfVxufVxuXG4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgICB7XG4gICAgbmFtZTogJ25vaXNlJyxcbiAgICB0eXBlOiAnc3JjJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NjYWxlJyxcbiAgICAgICAgZGVmYXVsdDogMTAsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBkZWZhdWx0OiAwLjEsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgcmV0dXJuIHZlYzQodmVjMyhfbm9pc2UodmVjMyhfc3Qqc2NhbGUsIG9mZnNldCp0aW1lKSkpLCAxLjApO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICd2b3Jvbm9pJyxcbiAgICB0eXBlOiAnc3JjJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NjYWxlJyxcbiAgICAgICAgZGVmYXVsdDogNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NwZWVkJyxcbiAgICAgICAgZGVmYXVsdDogMC4zLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYmxlbmRpbmcnLFxuICAgICAgICBkZWZhdWx0OiAwLjMsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMyBjb2xvciA9IHZlYzMoLjApO1xuICAgICAvLyBTY2FsZVxuICAgICBfc3QgKj0gc2NhbGU7XG4gICAgIC8vIFRpbGUgdGhlIHNwYWNlXG4gICAgIHZlYzIgaV9zdCA9IGZsb29yKF9zdCk7XG4gICAgIHZlYzIgZl9zdCA9IGZyYWN0KF9zdCk7XG4gICAgIGZsb2F0IG1fZGlzdCA9IDEwLjsgIC8vIG1pbmltdW4gZGlzdGFuY2VcbiAgICAgdmVjMiBtX3BvaW50OyAgICAgICAgLy8gbWluaW11bSBwb2ludFxuICAgICBmb3IgKGludCBqPS0xOyBqPD0xOyBqKysgKSB7XG4gICAgIGZvciAoaW50IGk9LTE7IGk8PTE7IGkrKyApIHtcbiAgICAgdmVjMiBuZWlnaGJvciA9IHZlYzIoZmxvYXQoaSksZmxvYXQoaikpO1xuICAgICB2ZWMyIHAgPSBpX3N0ICsgbmVpZ2hib3I7XG4gICAgIHZlYzIgcG9pbnQgPSBmcmFjdChzaW4odmVjMihkb3QocCx2ZWMyKDEyNy4xLDMxMS43KSksZG90KHAsdmVjMigyNjkuNSwxODMuMykpKSkqNDM3NTguNTQ1Myk7XG4gICAgIHBvaW50ID0gMC41ICsgMC41KnNpbih0aW1lKnNwZWVkICsgNi4yODMxKnBvaW50KTtcbiAgICAgdmVjMiBkaWZmID0gbmVpZ2hib3IgKyBwb2ludCAtIGZfc3Q7XG4gICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoZGlmZik7XG4gICAgIGlmKCBkaXN0IDwgbV9kaXN0ICkge1xuICAgICBtX2Rpc3QgPSBkaXN0O1xuICAgICBtX3BvaW50ID0gcG9pbnQ7XG4gICAgIH1cbiAgICAgfVxuICAgICB9XG4gICAgIC8vIEFzc2lnbiBhIGNvbG9yIHVzaW5nIHRoZSBjbG9zZXN0IHBvaW50IHBvc2l0aW9uXG4gICAgIGNvbG9yICs9IGRvdChtX3BvaW50LHZlYzIoLjMsLjYpKTtcbiAgICAgY29sb3IgKj0gMS4wIC0gYmxlbmRpbmcqbV9kaXN0O1xuICAgICByZXR1cm4gdmVjNChjb2xvciwgMS4wKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnb3NjJyxcbiAgICB0eXBlOiAnc3JjJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2ZyZXF1ZW5jeScsXG4gICAgICAgIGRlZmF1bHQ6IDYwLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc3luYycsXG4gICAgICAgIGRlZmF1bHQ6IDAuMSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiBzdCA9IF9zdDtcbiAgICAgZmxvYXQgciA9IHNpbigoc3QueC1vZmZzZXQvZnJlcXVlbmN5K3RpbWUqc3luYykqZnJlcXVlbmN5KSowLjUgICsgMC41O1xuICAgICBmbG9hdCBnID0gc2luKChzdC54K3RpbWUqc3luYykqZnJlcXVlbmN5KSowLjUgKyAwLjU7XG4gICAgIGZsb2F0IGIgPSBzaW4oKHN0Lngrb2Zmc2V0L2ZyZXF1ZW5jeSt0aW1lKnN5bmMpKmZyZXF1ZW5jeSkqMC41ICArIDAuNTtcbiAgICAgcmV0dXJuIHZlYzQociwgZywgYiwgMS4wKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2hhcGUnLFxuICAgIHR5cGU6ICdzcmMnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc2lkZXMnLFxuICAgICAgICBkZWZhdWx0OiAzLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAncmFkaXVzJyxcbiAgICAgICAgZGVmYXVsdDogMC4zLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc21vb3RoaW5nJyxcbiAgICAgICAgZGVmYXVsdDogMC4wMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICB2ZWMyIHN0ID0gX3N0ICogMi4gLSAxLjtcbiAgICAgLy8gQW5nbGUgYW5kIHJhZGl1cyBmcm9tIHRoZSBjdXJyZW50IHBpeGVsXG4gICAgIGZsb2F0IGEgPSBhdGFuKHN0Lngsc3QueSkrMy4xNDE2O1xuICAgICBmbG9hdCByID0gKDIuKjMuMTQxNikvc2lkZXM7XG4gICAgIGZsb2F0IGQgPSBjb3MoZmxvb3IoLjUrYS9yKSpyLWEpKmxlbmd0aChzdCk7XG4gICAgIHJldHVybiB2ZWM0KHZlYzMoMS4wLXNtb290aHN0ZXAocmFkaXVzLHJhZGl1cyArIHNtb290aGluZyArIDAuMDAwMDAwMSxkKSksIDEuMCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2dyYWRpZW50JyxcbiAgICB0eXBlOiAnc3JjJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NwZWVkJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gdmVjNChfc3QsIHNpbih0aW1lKnNwZWVkKSwgMS4wKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc3JjJyxcbiAgICB0eXBlOiAnc3JjJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3NhbXBsZXIyRCcsXG4gICAgICAgIG5hbWU6ICd0ZXgnLFxuICAgICAgICBkZWZhdWx0OiBOYU4sXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgLy8gIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkvdmVjMigxMjgwLiwgNzIwLik7XG4gICAgIHJldHVybiB0ZXh0dXJlMkQodGV4LCBmcmFjdChfc3QpKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc29saWQnLFxuICAgIHR5cGU6ICdzcmMnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAncicsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdnJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2InLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgcmV0dXJuIHZlYzQociwgZywgYiwgYSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3JvdGF0ZScsXG4gICAgdHlwZTogJ2Nvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2FuZ2xlJyxcbiAgICAgICAgZGVmYXVsdDogMTAsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzcGVlZCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiB4eSA9IF9zdCAtIHZlYzIoMC41KTtcbiAgICAgZmxvYXQgYW5nID0gYW5nbGUgKyBzcGVlZCAqdGltZTtcbiAgICAgeHkgPSBtYXQyKGNvcyhhbmcpLC1zaW4oYW5nKSwgc2luKGFuZyksY29zKGFuZykpKnh5O1xuICAgICB4eSArPSAwLjU7XG4gICAgIHJldHVybiB4eTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2NhbGUnLFxuICAgIHR5cGU6ICdjb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdhbW91bnQnLFxuICAgICAgICBkZWZhdWx0OiAxLjUsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICd4TXVsdCcsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICd5TXVsdCcsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXRYJyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0WScsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICB2ZWMyIHh5ID0gX3N0IC0gdmVjMihvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgeHkqPSgxLjAvdmVjMihhbW91bnQqeE11bHQsIGFtb3VudCp5TXVsdCkpO1xuICAgICB4eSs9dmVjMihvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgcmV0dXJuIHh5O1xuICAgICBgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAncGl4ZWxhdGUnLFxuICAgIHR5cGU6ICdjb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdwaXhlbFgnLFxuICAgICAgICBkZWZhdWx0OiAyMCxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3BpeGVsWScsXG4gICAgICAgIGRlZmF1bHQ6IDIwLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzIgeHkgPSB2ZWMyKHBpeGVsWCwgcGl4ZWxZKTtcbiAgICAgcmV0dXJuIChmbG9vcihfc3QgKiB4eSkgKyAwLjUpL3h5O2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdwb3N0ZXJpemUnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdiaW5zJyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2dhbW1hJyxcbiAgICAgICAgZGVmYXVsdDogMC42LFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzQgYzIgPSBwb3coX2MwLCB2ZWM0KGdhbW1hKSk7XG4gICAgIGMyICo9IHZlYzQoYmlucyk7XG4gICAgIGMyID0gZmxvb3IoYzIpO1xuICAgICBjMi89IHZlYzQoYmlucyk7XG4gICAgIGMyID0gcG93KGMyLCB2ZWM0KDEuMC9nYW1tYSkpO1xuICAgICByZXR1cm4gdmVjNChjMi54eXosIF9jMC5hKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdyJyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnZycsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdiJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2EnLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzQgYzIgPSB2ZWM0KF9jMCk7XG4gICAgIGMyLnIgPSBmcmFjdChjMi5yICsgcik7XG4gICAgIGMyLmcgPSBmcmFjdChjMi5nICsgZyk7XG4gICAgIGMyLmIgPSBmcmFjdChjMi5iICsgYik7XG4gICAgIGMyLmEgPSBmcmFjdChjMi5hICsgYSk7XG4gICAgIHJldHVybiB2ZWM0KGMyLnJnYmEpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdyZXBlYXQnLFxuICAgIHR5cGU6ICdjb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdyZXBlYXRYJyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3JlcGVhdFknLFxuICAgICAgICBkZWZhdWx0OiAzLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0WCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXRZJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICB2ZWMyIHN0ID0gX3N0ICogdmVjMihyZXBlYXRYLCByZXBlYXRZKTtcbiAgICAgc3QueCArPSBzdGVwKDEuLCBtb2Qoc3QueSwyLjApKSAqIG9mZnNldFg7XG4gICAgIHN0LnkgKz0gc3RlcCgxLiwgbW9kKHN0LngsMi4wKSkgKiBvZmZzZXRZO1xuICAgICByZXR1cm4gZnJhY3Qoc3QpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdtb2R1bGF0ZVJlcGVhdCcsXG4gICAgdHlwZTogJ2NvbWJpbmVDb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdyZXBlYXRYJyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3JlcGVhdFknLFxuICAgICAgICBkZWZhdWx0OiAzLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0WCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldFknLFxuICAgICAgICBkZWZhdWx0OiAwLjUsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiBzdCA9IF9zdCAqIHZlYzIocmVwZWF0WCwgcmVwZWF0WSk7XG4gICAgIHN0LnggKz0gc3RlcCgxLiwgbW9kKHN0LnksMi4wKSkgKyBfYzAuciAqIG9mZnNldFg7XG4gICAgIHN0LnkgKz0gc3RlcCgxLiwgbW9kKHN0LngsMi4wKSkgKyBfYzAuZyAqIG9mZnNldFk7XG4gICAgIHJldHVybiBmcmFjdChzdCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3JlcGVhdFgnLFxuICAgIHR5cGU6ICdjb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdyZXBzJyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiBzdCA9IF9zdCAqIHZlYzIocmVwcywgMS4wKTtcbiAgICAgLy8gIGZsb2F0IGYgPSAgbW9kKF9zdC55LDIuMCk7XG4gICAgIHN0LnkgKz0gc3RlcCgxLiwgbW9kKHN0LngsMi4wKSkqIG9mZnNldDtcbiAgICAgcmV0dXJuIGZyYWN0KHN0KTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbW9kdWxhdGVSZXBlYXRYJyxcbiAgICB0eXBlOiAnY29tYmluZUNvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3JlcHMnLFxuICAgICAgICBkZWZhdWx0OiAzLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzIgc3QgPSBfc3QgKiB2ZWMyKHJlcHMsIDEuMCk7XG4gICAgIC8vICBmbG9hdCBmID0gIG1vZChfc3QueSwyLjApO1xuICAgICBzdC55ICs9IHN0ZXAoMS4sIG1vZChzdC54LDIuMCkpICsgX2MwLnIgKiBvZmZzZXQ7XG4gICAgIHJldHVybiBmcmFjdChzdCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3JlcGVhdFknLFxuICAgIHR5cGU6ICdjb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdyZXBzJyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiBzdCA9IF9zdCAqIHZlYzIoMS4wLCByZXBzKTtcbiAgICAgLy8gIGZsb2F0IGYgPSAgbW9kKF9zdC55LDIuMCk7XG4gICAgIHN0LnggKz0gc3RlcCgxLiwgbW9kKHN0LnksMi4wKSkqIG9mZnNldDtcbiAgICAgcmV0dXJuIGZyYWN0KHN0KTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbW9kdWxhdGVSZXBlYXRZJyxcbiAgICB0eXBlOiAnY29tYmluZUNvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3JlcHMnLFxuICAgICAgICBkZWZhdWx0OiAzLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzIgc3QgPSBfc3QgKiB2ZWMyKHJlcHMsIDEuMCk7XG4gICAgIC8vICBmbG9hdCBmID0gIG1vZChfc3QueSwyLjApO1xuICAgICBzdC54ICs9IHN0ZXAoMS4sIG1vZChzdC55LDIuMCkpICsgX2MwLnIgKiBvZmZzZXQ7XG4gICAgIHJldHVybiBmcmFjdChzdCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2thbGVpZCcsXG4gICAgdHlwZTogJ2Nvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ25TaWRlcycsXG4gICAgICAgIGRlZmF1bHQ6IDQsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiBzdCA9IF9zdDtcbiAgICAgc3QgLT0gMC41O1xuICAgICBmbG9hdCByID0gbGVuZ3RoKHN0KTtcbiAgICAgZmxvYXQgYSA9IGF0YW4oc3QueSwgc3QueCk7XG4gICAgIGZsb2F0IHBpID0gMi4qMy4xNDE2O1xuICAgICBhID0gbW9kKGEscGkvblNpZGVzKTtcbiAgICAgYSA9IGFicyhhLXBpL25TaWRlcy8yLik7XG4gICAgIHJldHVybiByKnZlYzIoY29zKGEpLCBzaW4oYSkpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdtb2R1bGF0ZUthbGVpZCcsXG4gICAgdHlwZTogJ2NvbWJpbmVDb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICduU2lkZXMnLFxuICAgICAgICBkZWZhdWx0OiA0LFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzIgc3QgPSBfc3QgLSAwLjU7XG4gICAgIGZsb2F0IHIgPSBsZW5ndGgoc3QpO1xuICAgICBmbG9hdCBhID0gYXRhbihzdC55LCBzdC54KTtcbiAgICAgZmxvYXQgcGkgPSAyLiozLjE0MTY7XG4gICAgIGEgPSBtb2QoYSxwaS9uU2lkZXMpO1xuICAgICBhID0gYWJzKGEtcGkvblNpZGVzLzIuKTtcbiAgICAgcmV0dXJuIChfYzAucityKSp2ZWMyKGNvcyhhKSwgc2luKGEpKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2Nyb2xsJyxcbiAgICB0eXBlOiAnY29vcmQnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc2Nyb2xsWCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3Njcm9sbFknLFxuICAgICAgICBkZWZhdWx0OiAwLjUsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzcGVlZFgnLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc3BlZWRZJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGBcbiAgICAgX3N0LnggKz0gc2Nyb2xsWCArIHRpbWUqc3BlZWRYO1xuICAgICBfc3QueSArPSBzY3JvbGxZICsgdGltZSpzcGVlZFk7XG4gICAgIHJldHVybiBmcmFjdChfc3QpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdzY3JvbGxYJyxcbiAgICB0eXBlOiAnY29vcmQnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc2Nyb2xsWCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NwZWVkJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICBfc3QueCArPSBzY3JvbGxYICsgdGltZSpzcGVlZDtcbiAgICAgcmV0dXJuIGZyYWN0KF9zdCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ21vZHVsYXRlU2Nyb2xsWCcsXG4gICAgdHlwZTogJ2NvbWJpbmVDb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzY3JvbGxYJyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc3BlZWQnLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIF9zdC54ICs9IF9jMC5yKnNjcm9sbFggKyB0aW1lKnNwZWVkO1xuICAgICByZXR1cm4gZnJhY3QoX3N0KTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2Nyb2xsWScsXG4gICAgdHlwZTogJ2Nvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3Njcm9sbFknLFxuICAgICAgICBkZWZhdWx0OiAwLjUsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzcGVlZCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgX3N0LnkgKz0gc2Nyb2xsWSArIHRpbWUqc3BlZWQ7XG4gICAgIHJldHVybiBmcmFjdChfc3QpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdtb2R1bGF0ZVNjcm9sbFknLFxuICAgIHR5cGU6ICdjb21iaW5lQ29vcmQnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc2Nyb2xsWScsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NwZWVkJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICBfc3QueSArPSBfYzAucipzY3JvbGxZICsgdGltZSpzcGVlZDtcbiAgICAgcmV0dXJuIGZyYWN0KF9zdCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2FkZCcsXG4gICAgdHlwZTogJ2NvbWJpbmUnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gKF9jMCtfYzEpKmFtb3VudCArIF9jMCooMS4wLWFtb3VudCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3N1YicsXG4gICAgdHlwZTogJ2NvbWJpbmUnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gKF9jMC1fYzEpKmFtb3VudCArIF9jMCooMS4wLWFtb3VudCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2xheWVyJyxcbiAgICB0eXBlOiAnY29tYmluZScsXG4gICAgaW5wdXRzOiBbXG4gIFxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHJldHVybiB2ZWM0KG1peChfYzAucmdiLCBfYzEucmdiLCBfYzEuYSksIGNsYW1wKF9jMC5hICsgX2MxLmEsIDAuMCwgMS4wKSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2JsZW5kJyxcbiAgICB0eXBlOiAnY29tYmluZScsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdhbW91bnQnLFxuICAgICAgICBkZWZhdWx0OiAwLjUsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgcmV0dXJuIF9jMCooMS4wLWFtb3VudCkrX2MxKmFtb3VudDtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbXVsdCcsXG4gICAgdHlwZTogJ2NvbWJpbmUnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gX2MwKigxLjAtYW1vdW50KSsoX2MwKl9jMSkqYW1vdW50O2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdkaWZmJyxcbiAgICB0eXBlOiAnY29tYmluZScsXG4gICAgaW5wdXRzOiBbXG4gIFxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHJldHVybiB2ZWM0KGFicyhfYzAucmdiLV9jMS5yZ2IpLCBtYXgoX2MwLmEsIF9jMS5hKSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ21vZHVsYXRlJyxcbiAgICB0eXBlOiAnY29tYmluZUNvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2Ftb3VudCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICAvLyAgcmV0dXJuIGZyYWN0KHN0KyhfYzAueHktMC41KSphbW91bnQpO1xuICAgICByZXR1cm4gX3N0ICsgX2MwLnh5KmFtb3VudDtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbW9kdWxhdGVTY2FsZScsXG4gICAgdHlwZTogJ2NvbWJpbmVDb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdtdWx0aXBsZScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzIgeHkgPSBfc3QgLSB2ZWMyKDAuNSk7XG4gICAgIHh5Kj0oMS4wL3ZlYzIob2Zmc2V0ICsgbXVsdGlwbGUqX2MwLnIsIG9mZnNldCArIG11bHRpcGxlKl9jMC5nKSk7XG4gICAgIHh5Kz12ZWMyKDAuNSk7XG4gICAgIHJldHVybiB4eTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbW9kdWxhdGVQaXhlbGF0ZScsXG4gICAgdHlwZTogJ2NvbWJpbmVDb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdtdWx0aXBsZScsXG4gICAgICAgIGRlZmF1bHQ6IDEwLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICB2ZWMyIHh5ID0gdmVjMihvZmZzZXQgKyBfYzAueCptdWx0aXBsZSwgb2Zmc2V0ICsgX2MwLnkqbXVsdGlwbGUpO1xuICAgICByZXR1cm4gKGZsb29yKF9zdCAqIHh5KSArIDAuNSkveHk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ21vZHVsYXRlUm90YXRlJyxcbiAgICB0eXBlOiAnY29tYmluZUNvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ211bHRpcGxlJyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiB4eSA9IF9zdCAtIHZlYzIoMC41KTtcbiAgICAgZmxvYXQgYW5nbGUgPSBvZmZzZXQgKyBfYzAueCAqIG11bHRpcGxlO1xuICAgICB4eSA9IG1hdDIoY29zKGFuZ2xlKSwtc2luKGFuZ2xlKSwgc2luKGFuZ2xlKSxjb3MoYW5nbGUpKSp4eTtcbiAgICAgeHkgKz0gMC41O1xuICAgICByZXR1cm4geHk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ21vZHVsYXRlSHVlJyxcbiAgICB0eXBlOiAnY29tYmluZUNvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2Ftb3VudCcsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgcmV0dXJuIF9zdCArICh2ZWMyKF9jMC5nIC0gX2MwLnIsIF9jMC5iIC0gX2MwLmcpICogYW1vdW50ICogMS4wL3Jlc29sdXRpb24pO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdpbnZlcnQnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdhbW91bnQnLFxuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHJldHVybiB2ZWM0KCgxLjAtX2MwLnJnYikqYW1vdW50ICsgX2MwLnJnYiooMS4wLWFtb3VudCksIF9jMC5hKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnY29udHJhc3QnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdhbW91bnQnLFxuICAgICAgICBkZWZhdWx0OiAxLjYsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjNCBjID0gKF9jMC12ZWM0KDAuNSkpKnZlYzQoYW1vdW50KSArIHZlYzQoMC41KTtcbiAgICAgcmV0dXJuIHZlYzQoYy5yZ2IsIF9jMC5hKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnYnJpZ2h0bmVzcycsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2Ftb3VudCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuNCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gdmVjNChfYzAucmdiICsgdmVjMyhhbW91bnQpLCBfYzAuYSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ21hc2snLFxuICAgIHR5cGU6ICdjb21iaW5lJyxcbiAgICBpbnB1dHM6IFtcbiAgXG4gICAgXSxcbiAgICBnbHNsOlxuICAgIGAgICBmbG9hdCBhID0gX2x1bWluYW5jZShfYzEucmdiKTtcbiAgICByZXR1cm4gdmVjNChfYzAucmdiKmEsIGEqX2MwLmEpO2BcbiAgfSxcbiAgXG4gIHtcbiAgICBuYW1lOiAnbHVtYScsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3RocmVzaG9sZCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3RvbGVyYW5jZScsXG4gICAgICAgIGRlZmF1bHQ6IDAuMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICBmbG9hdCBhID0gc21vb3Roc3RlcCh0aHJlc2hvbGQtKHRvbGVyYW5jZSswLjAwMDAwMDEpLCB0aHJlc2hvbGQrKHRvbGVyYW5jZSswLjAwMDAwMDEpLCBfbHVtaW5hbmNlKF9jMC5yZ2IpKTtcbiAgICAgcmV0dXJuIHZlYzQoX2MwLnJnYiphLCBhKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAndGhyZXNoJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAndGhyZXNob2xkJyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAndG9sZXJhbmNlJyxcbiAgICAgICAgZGVmYXVsdDogMC4wNCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gdmVjNCh2ZWMzKHNtb290aHN0ZXAodGhyZXNob2xkLSh0b2xlcmFuY2UrMC4wMDAwMDAxKSwgdGhyZXNob2xkKyh0b2xlcmFuY2UrMC4wMDAwMDAxKSwgX2x1bWluYW5jZShfYzAucmdiKSkpLCBfYzAuYSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2NvbG9yJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAncicsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdnJyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2InLFxuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjNCBjID0gdmVjNChyLCBnLCBiLCBhKTtcbiAgICAgdmVjNCBwb3MgPSBzdGVwKDAuMCwgYyk7IC8vIGRldGVjdCB3aGV0aGVyIG5lZ2F0aXZlXG4gICAgIC8vIGlmID4gMCwgcmV0dXJuIHIgKiBfYzBcbiAgICAgLy8gaWYgPCAwIHJldHVybiAoMS4wLXIpICogX2MwXG4gICAgIHJldHVybiB2ZWM0KG1peCgoMS4wLV9jMCkqYWJzKGMpLCBjKl9jMCwgcG9zKSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3NhdHVyYXRlJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgZGVmYXVsdDogMixcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICBjb25zdCB2ZWMzIFcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xuICAgICB2ZWMzIGludGVuc2l0eSA9IHZlYzMoZG90KF9jMC5yZ2IsIFcpKTtcbiAgICAgcmV0dXJuIHZlYzQobWl4KGludGVuc2l0eSwgX2MwLnJnYiwgYW1vdW50KSwgX2MwLmEpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdodWUnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdodWUnLFxuICAgICAgICBkZWZhdWx0OiAwLjQsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMyBjID0gX3JnYlRvSHN2KF9jMC5yZ2IpO1xuICAgICBjLnIgKz0gaHVlO1xuICAgICAvLyAgYy5yID0gZnJhY3QoYy5yKTtcbiAgICAgcmV0dXJuIHZlYzQoX2hzdlRvUmdiKGMpLCBfYzAuYSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2NvbG9yYW1hJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgZGVmYXVsdDogMC4wMDUsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMyBjID0gX3JnYlRvSHN2KF9jMC5yZ2IpO1xuICAgICBjICs9IHZlYzMoYW1vdW50KTtcbiAgICAgYyA9IF9oc3ZUb1JnYihjKTtcbiAgICAgYyA9IGZyYWN0KGMpO1xuICAgICByZXR1cm4gdmVjNChjLCBfYzAuYSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3ByZXYnLFxuICAgIHR5cGU6ICdzcmMnLFxuICAgIGlucHV0czogW1xuICBcbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gdGV4dHVyZTJEKHByZXZCdWZmZXIsIGZyYWN0KF9zdCkpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdzdW0nLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICd2ZWM0JyxcbiAgICAgICAgbmFtZTogJ3NjYWxlJyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICB2ZWM0IHYgPSBfYzAgKiBzO1xuICAgICByZXR1cm4gdi5yICsgdi5nICsgdi5iICsgdi5hO1xuICAgICB9XG4gICAgIGZsb2F0IHN1bSh2ZWMyIF9zdCwgdmVjNCBzKSB7IC8vIHZlYzQgaXMgbm90IGEgdHlwbywgYmVjYXVzZSBhcmd1bWVudCB0eXBlIGlzIG5vdCBvdmVybG9hZGVkXG4gICAgIHZlYzIgdiA9IF9zdC54eSAqIHMueHk7XG4gICAgIHJldHVybiB2LnggKyB2Lnk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3InLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzY2FsZScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHJldHVybiB2ZWM0KF9jMC5yICogc2NhbGUgKyBvZmZzZXQpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdnJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc2NhbGUnLFxuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gdmVjNChfYzAuZyAqIHNjYWxlICsgb2Zmc2V0KTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnYicsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NjYWxlJyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgcmV0dXJuIHZlYzQoX2MwLmIgKiBzY2FsZSArIG9mZnNldCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2EnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzY2FsZScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHJldHVybiB2ZWM0KF9jMC5hICogc2NhbGUgKyBvZmZzZXQpO2BcbiAgfVxuICBdIiwiY29uc3QgbG9nID0gcmVxdWlyZSgnLi9sb2cuanMnKS5sb2dcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGV2YWw6IChhcmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgICAvLyB3cmFwIGV2ZXJ5dGhpbmcgaW4gYW4gYXN5bmMgZnVuY3Rpb25cbiAgdmFyIGpzU3RyaW5nID0gYChhc3luYygpID0+IHtcbiAgICAke2FyZ31cbn0pKCkuY2F0Y2goJHsoZXJyKSA9PiBsb2coZXJyLm1lc3NhZ2UsIFwibG9nLWVycm9yXCIpfSlgXG4gICAgdmFyIGlzRXJyb3IgPSBmYWxzZVxuICAgIHRyeSB7XG4gICAgICBldmFsKGpzU3RyaW5nKVxuICAgICAgLy8gbG9nKGpzU3RyaW5nKVxuICAgICAgbG9nKCcnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlzRXJyb3IgPSB0cnVlXG4gICAgICBjb25zb2xlLmxvZyhcImxvZ2dpbmdcIiwgZSlcbiAgICAgIC8vIHZhciBlcnIgPSBlLmNvbnN0cnVjdG9yKCdFcnJvciBpbiBFdmFsZWQgU2NyaXB0OiAnICsgZS5tZXNzYWdlKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGVyci5saW5lTnVtYmVyKVxuICAgICAgbG9nKGUubWVzc2FnZSwgXCJsb2ctZXJyb3JcIilcbiAgICAgIC8vY29uc29sZS5sb2coJ0VSUk9SJywgSlNPTi5zdHJpbmdpZnkoZSkpXG4gICAgfVxuICAvLyAgY29uc29sZS5sb2coJ2NhbGxiYWNrIGlzJywgY2FsbGJhY2spXG4gICAgaWYoY2FsbGJhY2spIGNhbGxiYWNrKGpzU3RyaW5nLCBpc0Vycm9yKVxuICB9XG59XG4iLCJjb25zdCBodG1sID0gcmVxdWlyZSgnY2hvby9odG1sJylcbmNvbnN0IHJhdyA9IHJlcXVpcmUoJ2Nob28vaHRtbC9yYXcnKVxuY29uc3QgdG9vbGJhciA9IHJlcXVpcmUoJy4vdG9vbGJhci5qcycpXG5cbmNvbnN0IGxpbmsgPSAodXJsKSA9PiBgaHJlZj0ke3VybH0gdGFyZ2V0PV9ibGFua2Bcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWFpblZpZXcoc3RhdGUsIGVtaXQpIHtcbiAgY29uc3QgeyB0LCBsYW5ndWFnZXMgfSA9IHN0YXRlLnRyYW5zbGF0aW9uXG4gIGNvbnN0IHRleHREaXJlY3Rpb24gPSBzdGF0ZS50cmFuc2xhdGlvbi5zZWxlY3RlZExhbmd1YWdlICA9PT0gJ2FyJyAmJiBzdGF0ZS5zaG93SW5mbyA9PT0gdHJ1ZSA/ICdydGwnOiAnbHRyJ1xuXG4gIGNvbnN0IGxhbmdBcnJheSA9IE9iamVjdC5lbnRyaWVzKGxhbmd1YWdlcylcbiAgcmV0dXJuIGh0bWxgXG48ZGl2IGlkPVwiaW5mby1jb250YWluZXJcIiBjbGFzcz1cIiR7c3RhdGUuc2hvd0luZm8gPyBcIlwiIDogXCJoaWRkZW5cIn1cIiBzdHlsZT1cImRpcmVjdGlvbjoke3RleHREaXJlY3Rpb259XCI+XG4gIDxkaXYgaWQ9XCJtb2RhbFwiPlxuICAgIDxkaXYgaWQ9XCJtb2RhbC1oZWFkZXJcIiBzdHlsZT1cIm9wYWNpdHk6JHtzdGF0ZS5zaG93VUkgPT09IHRydWU/IDE6IDB9XCI+XG4gICAgICAke3N0YXRlLnNob3dJbmZvICYmIGxhbmdBcnJheS5sZW5ndGggPiAxID8gaHRtbGA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwXCI+JHtsYW5nQXJyYXkubWFwKChba2V5LCB2YWxdKSA9PiBodG1sYFxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFuZ3VhZ2Utc2VsZWN0XCIgb25jbGljaz0keygpID0+IGVtaXQoJ3NldCBsYW5ndWFnZScsIGtleSl9PiR7dmFsfTwvZGl2PlxuICAgICAgYCl9PC9kaXY+YCA6IGh0bWxgPGRpdj48L2Rpdj5gIH1cbiAgICAgICR7dG9vbGJhcihzdGF0ZSwgZW1pdCl9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cIm1vZGFsLWJvZHlcIj5cbiAgICAgIDxkaXYgaWQ9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgIDxoMT4ke3QoJ2luZm8udGl0bGUnKX08L2gxPlxuICAgICAgICA8aDM+JHt0KCdpbmZvLnN1YnRpdGxlJyl9PC9oMz5cbiAgICAgICAgICA8YnI+IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vPGJyPlxuICAgICAgICAgIDxoND4ke3QoJ2luZm8uZGVzY3JpcHRpb24nKX08L2g0PlxuICAgICAgICA8aDQ+JHt0KCdpbmZvLmdldC1zdGFydGVkLXRpdGxlJyl9PG9sPlxuICAgICAgICAgICAgPGxpPiR7dCgnaW5mby5nZXQtc3RhcnRlZC1saXN0LjAnKX08L2xpPlxuICAgICAgICAgICAgPGxpPiR7dCgnaW5mby5nZXQtc3RhcnRlZC1saXN0LjEnKX08L2xpPlxuICAgICAgICAgICAgPGxpPiR7dCgnaW5mby5nZXQtc3RhcnRlZC1saXN0LjInKX08L2xpPlxuICAgICAgICAgIDwvb2w+XG4gICAgICAgIDwvaDQ+XG5cbiAgICAgICAgPHA+IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vPGJyPjxicj48YnI+XG4gICAgICAgICAgJHt0KCdpbmZvLmRlc2NyaXB0aW9uLWRldGFpbGVkJyl9XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHA+JHt0KCdpbmZvLnVzZXMnKX08dWw+XG4gICAgICAgICR7dCgnaW5mby51c2VzLWxpc3QnLCB7IHJldHVybk9iamVjdHM6IHRydWUgfSkubWFwKCh0ZXh0KSA9PiBodG1sYDxsaT4ke3RleHR9PC9saT5gKX1cbiAgICAgICAgPC91bD48L3A+XG4gICAgICAgXG4gICAgICAgICAgIDxwIGNsYXNzPVwiYWxpZ24tcmlnaHRcIj4ke3Jhdyh0KCdpbmZvLmF1dGhvcicsIHsgYXV0aG9yOiBgaHJlZj1odHRwczovL29qYWNrLnh5eiBjbGFzcz1vbGl2aWEgdGFyZ2V0PV9ibGFua2B9KSl9PC9wPlxuICAgICAgICAgICA8cD4ke3Jhdyh0KCdpbmZvLm1vcmUtaW5mbycsIHtcbiAgICAgICAgICAgICBkb2NzOiBsaW5rKFwiaHR0cHM6Ly9oeWRyYS5vamFjay54eXovZG9jc1wiKSxcbiAgICAgICAgICAgICBmdW5jdGlvbnM6IGxpbmsoXCJodHRwczovL2h5ZHJhLm9qYWNrLnh5ei9hcGlcIiksXG4gICAgICAgICAgICAgZ2FsbGVyeTogbGluayhcImh0dHBzOi8vdHdpdHRlci5jb20vaHlkcmFfcGF0dGVybnNcIiksXG4gICAgICAgICAgICAgcmVwbzogbGluayhcImh0dHBzOi8vZ2l0aHViLmNvbS9oeWRyYS1zeW50aC9oeWRyYVwiKSxcbiAgICAgICAgICAgICBwaXhlbGphbTogbGluayhcImh0dHA6Ly9waXhlbGphbS5nbGl0Y2gubWUvXCIpLFxuICAgICAgICAgICAgIGdhcmRlbjogbGluayhcImh0dHBzOi8vaHlkcmEub2phY2sueHl6L2dhcmRlblwiKSxcbiAgICAgICAgICAgICAnaHlkcmEtYm9vayc6IGxpbmsoXCJodHRwczovL2h5ZHJhLWJvb2suZ2xpdGNoLm1lL1wiKSxcbiAgICAgICAgICAgICBcInR1dG9yaWFsc1wiOiBsaW5rKFwiaHR0cHM6Ly9naXRodWIuY29tL29qYWNrL2h5ZHJhL2Jsb2IvbWFzdGVyL2V4YW1wbGVzL1JFQURNRS5tZFwiKVxuICAgICAgICAgICB9KSl9PC9wPlxuICAgICAgICAgIDxwPiR7cmF3KHQoJ2luZm8ubW9yZS1pbmZvLWZvcnVtcycsIHtcbiAgICAgICAgICAgIGRpc2NvcmQ6IGxpbmsoXCJodHRwczovL2Rpc2NvcmQuZ2cvWlFqZkhrTkhYQ1wiKSxcbiAgICAgICAgICAgIGZhY2Vib29rOiBsaW5rKFwiaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2dyb3Vwcy8xMDg0Mjg4MzUxNzcxMTE3L1wiKVxuICAgICAgICAgIH0pKX08L3A+XG5cbiAgICAgICAgPHA+JHtyYXcodCgnaW5mby5zdXBwb3J0Jywge1xuICAgICAgICAgIFwib3Blbi1jb2xsZWN0aXZlXCI6IGxpbmsoXCJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9oeWRyYS1zeW50aFwiKVxuICAgICAgICB9KSl9PC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5gXG59XG5cblxuLy8gPCEtLS08cD4ke3QoJ2luZm8uZmVhdHVyZXMnKX08dWw+XG4vLyAke3QoJ2luZm8uZmVhdHVyZXMtbGlzdCcsIHsgcmV0dXJuT2JqZWN0czogdHJ1ZSB9KS5tYXAoKHRleHQpID0+IGh0bWxgPGxpPiR7dGV4dH08L2xpPmApfVxuLy8gPC91bD48L3A+LS0tPlxuLy8gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYWluVmlldyhzdGF0ZSwgZW1pdCkge1xuLy8gICAgIHJldHVybiBodG1sYFxuLy8gICA8ZGl2IGlkPVwiaW5mby1jb250YWluZXJcIiBjbGFzcz1cIiR7c3RhdGUuc2hvd0luZm8gPyBcIlwiIDogXCJoaWRkZW5cIn1cIj5cbi8vICAgICA8ZGl2IGlkPVwibW9kYWxcIj5cbi8vICAgICAgIDxkaXYgaWQ9XCJtb2RhbC1oZWFkZXJcIiBzdHlsZT1cIm9wYWNpdHk6JHtzdGF0ZS5zaG93VUkgPT09IHRydWU/IDE6IDB9XCI+XG4vLyAgICAgICAgIDxkaXY+PCEtLTxpIGNsYXNzPVwiZmFzIGZhLWJhcnMgaWNvblwiPjwvaT4tLT48L2Rpdj5cbi8vICAgICAgICAgJHt0b29sYmFyKHN0YXRlLCBlbWl0KX1cbi8vICAgICAgIDwvZGl2PlxuLy8gICAgICAgPGRpdiBpZD1cIm1vZGFsLWJvZHlcIj5cbi8vICAgICAgICAgPGRpdiBpZD1cIm1vZGFsLWNvbnRlbnRcIj5cbi8vICAgICAgICAgICA8aDE+IGh5ZHJhPC9oMT5cbi8vICAgICAgICAgICA8aDM+IGxpdmUgY29kaW5nIG5ldHdvcmtlZCB2aXN1YWxzIDwvaDM+XG4vLyAgICAgICAgICAgICA8YnI+IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vPGJyPlxuLy8gICAgICAgICAgICAgPGg0PiBIeWRyYSBpcyBhIHBsYXRmb3JtIGZvciBsaXZlIGNvZGluZyB2aXN1YWxzLCBpbiB3aGljaCBlYWNoIGNvbm5lY3RlZCBicm93c2VyIHdpbmRvdyBjYW4gYmUgdXNlZCBhcyBhIG5vZGUgb2YgYSBtb2R1bGFyIGFuZCBkaXN0cmlidXRlZCB2aWRlbyBzeW50aGVzaXplci48L2g0PlxuLy8gICAgICAgICAgIDxoND4gVG8gZ2V0IHN0YXJ0ZWQ6IDxvbD5cbi8vICAgICAgICAgICAgICAgPGxpPkNsb3NlIHRoaXMgd2luZG93IDwvbGk+XG4vLyAgICAgICAgICAgICAgICAgPGxpPkNoYW5nZSBzb21lIG51bWJlcnMgPC9saT5cbi8vICAgICAgICAgICAgICAgICA8bGk+VHlwZSBDdHJsICsgU2hpZnQgKyBFbnRlciA8L2xpPlxuLy8gICAgICAgICAgICAgICA8L29sPlxuLy8gICAgICAgICAgIDwvaDQ+XG4gIFxuLy8gICAgICAgICAgIDxwPiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzxicj48YnI+PGJyPkJ1aWx0IHVzaW5nIFdlYlJUQyAocGVlci10by1wZWVyIHdlYiBzdHJlYW1pbmcpIGFuZCBXZWJHTCwgaHlkcmEgYWxsb3dzIGVhY2ggY29ubmVjdGVkIGJyb3dzZXIvZGV2aWNlL3BlcnNvbiB0byBvdXRwdXQgYSB2aWRlbyBzaWduYWwgb3Igc3RyZWFtLCBhbmQgcmVjZWl2ZSBhbmQgbW9kaWZ5IHN0cmVhbXMgZnJvbSBvdGhlciBicm93c2Vycy9kZXZpY2VzL3Blb3BsZS4gVGhlIEFQSSBpcyBpbnNwaXJlZCBieSBhbmFsb2cgbW9kdWxhciBzeW50aGVzaXMsIGluIHdoaWNoIG11bHRpcGxlIHZpc3VhbCBzb3VyY2VzIChvc2NpbGxhdG9ycywgY2FtZXJhcywgYXBwbGljYXRpb24gd2luZG93cywgb3RoZXIgY29ubmVjdGVkIHdpbmRvd3MpIGNhbiBiZSB0cmFuc2Zvcm1lZCwgbW9kdWxhdGVkLCBhbmQgY29tcG9zaXRlZCB2aWEgY29tYmluaW5nIHNlcXVlbmNlcyBvZiBmdW5jdGlvbnMuIDwvcD5cbi8vICAgICAgICAgICA8cD5GZWF0dXJlczogPHVsPlxuLy8gICAgICAgICAgIDxsaT5Xcml0dGVuIGluIGphdmFzY3JpcHQgYW5kIGNvbXBhdGlibGUgd2l0aCBvdGhlciBqYXZhc2NyaXB0IGxpYnJhcmllczwvbGk+XG4vLyAgICAgICAgICAgPGxpPkF2YWlsYWJsZSBhcyBhIHBsYXRmb3JtIGFzIHdlbGwgYXMgYSBzZXQgb2Ygc3RhbmRhbG9uZSBtb2R1bGVzIDwvbGk+XG4vLyAgICAgICAgICAgPGxpPkNyb3NzLXBsYXRmb3JtIGFuZCByZXF1aXJlcyBubyBpbnN0YWxsYXRpb24gKHJ1bnMgaW4gdGhlIGJyb3dzZXIpPC9saT5cbi8vICAgICAgICAgICA8bGk+QWxzbyBhdmFpbGFibGUgYXMgYSBwYWNrYWdlIGZvciBsaXZlIGNvZGluZyBmcm9tIHdpdGhpbiBhdG9tIHRleHQgZWRpdG9yPC9saT5cbi8vICAgICAgICAgICA8bGk+RXhwZXJpbWVudGFsIGFuZCBmb3JldmVyIGV2b2x2aW5nICEhIDwvbGk+XG4vLyAgICAgICAgICAgPC91bD5cbi8vICAgICAgICAgICAgIDxwIGNsYXNzPVwiYWxpZ24tcmlnaHRcIj4gQ3JlYXRlZCBieSA8YSBjbGFzcz1cIm9saXZpYVwiIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tL19vamFja19cIiB0YXJnZXQ9XCJfYmxhbmtcIj5vbGl2aWEuPC9hPiA8L3A+XG4vLyAgICAgICAgICAgICA8cD4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGluc3RydWN0aW9ucywgc2VlOlxuLy8gICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9vamFjay9oeWRyYSNHZXR0aW5nLVN0YXJ0ZWRcIiB0YXJnZXQ9XCJfYmxhbmtcIj50aGUgZG9jdW1lbnRhdGlvbiBvbiBnaXRodWI8L2E+LFxuLy8gICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vb2phY2sueHl6L2h5ZHJhLWZ1bmN0aW9ucy9cIiB0YXJnZXQ9XCJfYmxhbmtcIj5hIGxpc3Qgb2YgaHlkcmEgZnVuY3Rpb25zPC9hPixcbi8vICAgICAgICAgICAgIDwhLS0gPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9vamFjay9oeWRyYS9ibG9iL21hc3Rlci9kb2NzL2Z1bmNzLm1kXCIgdGFyZ2V0PVwiX2JsYW5rXCI+ZG9jdW1lbnRhdGlvbjwvYT4sIC0tPlxuLy8gICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vdHdpdHRlci5jb20vaHlkcmFfcGF0dGVybnNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5hIGdhbGxlcnkgb2YgdXNlci1nZW5lcmF0ZWQgc2tldGNoZXM8L2E+LFxuLy8gICAgICAgICAgICAgPGEgaHJlZj1cImh0dHA6Ly9waXhlbGphbS5nbGl0Y2gubWUvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+UElYRUxKQU0gY29sbGFib3JhdGl2ZSBlZGl0b3I8L2E+LFxuLy8gICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vaHlkcmEtYm9vay5uYW90b2hpZWRhLmNvbS8jL1wiIHRhcmdldD1cIl9ibGFua1wiPkh5ZHJhIEJvb2s8L2E+LCBhbmQgbW9yZSA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL29qYWNrL2h5ZHJhL2Jsb2IvbWFzdGVyL2V4YW1wbGVzL1JFQURNRS5tZFwiPnR1dG9yaWFscyBhbmQgZXhhbXBsZXMuPC9hPjwvcD5cbi8vICAgICAgICAgICAgIDxwPlRoZXJlIGlzIGFsc28gYW4gYWN0aXZlIDxhIGhyZWY9XCJodHRwczovL2Rpc2NvcmQuZ2cvWlFqZkhrTkhYQ1wiIHRhcmdldD1cIl9ibGFua1wiPkRpc2NvcmQgc2VydmVyPC9hPiBhbmQgPGEgaHJlZj1cImh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9ncm91cHMvMTA4NDI4ODM1MTc3MTExNy9cIiB0YXJnZXQ9XCJfYmxhbmtcIj5mYWNlYm9vayBncm91cDwvYT4gZm9yIGh5ZHJhIHVzZXJzK2NvbnRyaWJ1dG9ycy48L3A+XG4gIFxuLy8gICAgICAgICAgIDxwPiBJZiB5b3UgZW5qb3kgdXNpbmcgSHlkcmEsIHBsZWFzZSBjb25zaWRlciAgPGEgaHJlZj1cImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2h5ZHJhLXN5bnRoXCIgdGFyZ2V0PVwiX2JsYW5rXCI+c3VwcG9ydGluZyBjb250aW51ZWQgZGV2ZWxvcG1lbnQgJHsnPDMgPDMnfSA8L2E+PC9wPlxuLy8gICAgICAgICA8L2Rpdj5cbi8vICAgICAgIDwvZGl2PlxuLy8gICAgIDwvZGl2PlxuLy8gICA8L2Rpdj5cbi8vICBgXG4vLyB9IiwiY29uc3QgaHRtbCA9IHJlcXVpcmUoJ2Nob28vaHRtbCcpXG5jb25zdCBpbmZvID0gcmVxdWlyZSgnLi9pbmZvLmpzJylcbmNvbnN0IEh5ZHJhID0gcmVxdWlyZSgnLi9IeWRyYS5qcycpXG5jb25zdCBFZGl0b3IgPSByZXF1aXJlKCcuL0VkaXRvckNvbXBvbmVudC5qcycpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWFpblZpZXcoc3RhdGUsIGVtaXQpIHtcbiAgcmV0dXJuIGh0bWxgXG4gIDxib2R5PlxuICAgIDxkaXYgaWQ9XCJoeWRyYS11aVwiPlxuICAgICAgJHtzdGF0ZS5jYWNoZShIeWRyYSwgJ2h5ZHJhLWNhbnZhcycpLnJlbmRlcihzdGF0ZSwgZW1pdCl9XG4gICAgICA8IS0tLTxjYW52YXMgaWQ9XCJhdWRpby1jYW52YXNcIj5cbiAgICAgIDwvY2FudmFzPi0tLT5cbiAgICA8L2Rpdj5cbiAgJHtpbmZvKHN0YXRlLCBlbWl0KX1cbiAgJHtzdGF0ZS5jYWNoZShFZGl0b3IsICdlZGl0b3InKS5yZW5kZXIoc3RhdGUsIGVtaXQpfVxuICA8L2JvZHk+XG4gYFxufSIsImNvbnN0IGh0bWwgPSByZXF1aXJlKCdjaG9vL2h0bWwnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRvb2xiYXIoc3RhdGUsIGVtaXQpIHtcbiAgICBjb25zdCBoaWRkZW4gPSBzdGF0ZS5zaG93SW5mbyA/ICdoaWRkZW4nIDogJydcblxuICAgIGNvbnN0IHsgdCB9ID0gc3RhdGUudHJhbnNsYXRpb25cblxuICAgIGNvbnN0IGRpc3BhdGNoID0gKGV2ZW50TmFtZSkgPT4gKGUpID0+IGVtaXQoZXZlbnROYW1lLCBlKVxuXG4gICAgY29uc3QgaWNvbiA9IChpZCwgY2xhc3NOYW1lLCB0aXRsZSwgZXZlbnQpID0+IGh0bWxgXG4gICAgICAgIDxpIGlkPVwiJHtpZH0taWNvblwiIGNsYXNzPVwiZmFzIGljb24gJHtjbGFzc05hbWV9XCIgdGl0bGU9XCIke3RpdGxlfVwiIG9uY2xpY2s9JHtkaXNwYXRjaChldmVudCl9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5gXG5cbiAgICBjb25zdCB0b2dnbGVJbmZvID0gc3RhdGUuc2hvd0luZm8gPyBpY29uKFwiY2xvc2VcIiwgXCJmYS10aW1lc1wiLCB0KCd0b29sYmFyLmhpZGUtaW5mbycpLCAndG9nZ2xlIGluZm8nKSA6IGljb24oXCJjbG9zZVwiLCBcImZhLXF1ZXN0aW9uLWNpcmNsZVwiLCB0KCd0b29sYmFyLnNob3ctaW5mbycpLCAndG9nZ2xlIGluZm8nKSAgXG4gICAgcmV0dXJuIGh0bWxgPGRpdiBpZD1cInRvb2xiYXItY29udGFpbmVyXCI+XG4gICAgICAgICR7aWNvbihcInJ1blwiLCBgZmEtcGxheS1jaXJjbGUgJHtoaWRkZW59YCwgdCgndG9vbGJhci5ydW4nKSwgJ2VkaXRvcjpldmFsQWxsJyl9XG4gICAgICAgICR7aWNvbihcImNsZWFyXCIsIGBmYSBmYS10cmFzaCAke2hpZGRlbn1gLCB0KCd0b29sYmFyLmNsZWFyJyksICdlZGl0b3I6Y2xlYXJBbGwnKX1cbiAgICAgICAgJHtpY29uKFwic2h1ZmZsZVwiLCBgZmEtcmFuZG9tYCwgdCgndG9vbGJhci5zaHVmZmxlJyksICdnYWxsZXJ5OnNob3dFeGFtcGxlJyl9XG4gICAgICAgICR7aWNvbihcIm11dGF0b3JcIiwgYGZhLWRpY2UgJHtoaWRkZW59YCwgdCgndG9vbGJhci5yYW5kb20nKSwgJ2VkaXRvcjpyYW5kb21pemUnKX1cbiAgICAgICAgJHtzdGF0ZS5zZXJ2ZXJVUkwgPT09IG51bGwgPyAnJyA6IGljb24oXCJzaGFyZVwiLCBgZmEtdXBsb2FkICR7aGlkZGVufWAsIHQoJ3Rvb2xiYXIudXBsb2FkJyksICdnYWxsZXJ5OnNoYXJlU2tldGNoJyl9XG4gICAgICAgICR7dG9nZ2xlSW5mb31cbiAgICA8L2Rpdj5gXG5cbiAgICAvLyAgICAgICAgJHtpY29uKFwic2hhcmVcIiwgYGZhLXVwbG9hZCAke2hpZGRlbn1gLCB0KCd0b29sYmFyLnVwbG9hZCcpLCAnZ2FsbGVyeTpzaGFyZVNrZXRjaCcpfVxuXG59Il19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhIb2xlcy5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVJlc3QuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9QcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvYWNvcm4vZGlzdC9hY29ybi5qcyIsIm5vZGVfbW9kdWxlcy9hZnRlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci5zbGljZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwibm9kZV9tb2R1bGVzL2Fzc2VydC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9hc3NlcnQvbm9kZV9tb2R1bGVzL3V0aWwvc3VwcG9ydC9pc0J1ZmZlckJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYXNzZXJ0L25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiLCJub2RlX21vZHVsZXMvYXN0cmF2ZWwvZGlzdC9hc3RyYXZlbC5qcyIsIm5vZGVfbW9kdWxlcy9hc3RyYXZlbC9kaXN0L2F0dGFjaENvbW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL2FzdHJhdmVsL2Rpc3QvZGVmYXVsdFRyYXZlbGVyLmpzIiwibm9kZV9tb2R1bGVzL2FzdHJpbmcvZGlzdC9hc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JhY2tvMi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtYXJyYXlidWZmZXIvbGliL2Jhc2U2NC1hcnJheWJ1ZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYmxvYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyLXJlc29sdmUvZW1wdHkuanMiLCJub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanMiLCJub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nob28tZGV2dG9vbHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hvby1kZXZ0b29scy9saWIvY29weS5qcyIsIm5vZGVfbW9kdWxlcy9jaG9vLWRldnRvb2xzL2xpYi9kZWJ1Zy5qcyIsIm5vZGVfbW9kdWxlcy9jaG9vLWRldnRvb2xzL2xpYi9oZWxwLmpzIiwibm9kZV9tb2R1bGVzL2Nob28tZGV2dG9vbHMvbGliL2xvZy5qcyIsIm5vZGVfbW9kdWxlcy9jaG9vLWRldnRvb2xzL2xpYi9sb2dnZXIuanMiLCJub2RlX21vZHVsZXMvY2hvby1kZXZ0b29scy9saWIvcGVyZi5qcyIsIm5vZGVfbW9kdWxlcy9jaG9vLWRldnRvb2xzL2xpYi9zdG9yYWdlLmpzIiwibm9kZV9tb2R1bGVzL2Nob28taG9va3MvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hvby9jb21wb25lbnQvY2FjaGUuanMiLCJub2RlX21vZHVsZXMvY2hvby9jb21wb25lbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hvby9odG1sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nob28vaHRtbC9yYXcuanMiLCJub2RlX21vZHVsZXMvY2hvby9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jbGlwYm9hcmQtY29weS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jbG9uZS9jbG9uZS5qcyIsIm5vZGVfbW9kdWxlcy9jb2RlbWlycm9yLW1pbmlmaWVkL2FkZG9uL2NvbW1lbnQvY29tbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9jb2RlbWlycm9yLW1pbmlmaWVkL2FkZG9uL2hpbnQvamF2YXNjcmlwdC1oaW50LmpzIiwibm9kZV9tb2R1bGVzL2NvZGVtaXJyb3ItbWluaWZpZWQvYWRkb24vaGludC9zaG93LWhpbnQuanMiLCJub2RlX21vZHVsZXMvY29kZW1pcnJvci1taW5pZmllZC9hZGRvbi9zZWxlY3Rpb24vbWFyay1zZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29kZW1pcnJvci1taW5pZmllZC9saWIvY29kZW1pcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9jb2RlbWlycm9yLW1pbmlmaWVkL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBvbmVudC1iaW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBvbmVudC1lbWl0dGVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBvbmVudC1pbmhlcml0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RvY3VtZW50LXJlYWR5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvbGliL2dsb2JhbFRoaXMuYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L2xpYi9zb2NrZXQuanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9saWIvdHJhbnNwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvbGliL3RyYW5zcG9ydHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9saWIvdHJhbnNwb3J0cy9wb2xsaW5nLWpzb25wLmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvbGliL3RyYW5zcG9ydHMvcG9sbGluZy14aHIuanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9saWIvdHJhbnNwb3J0cy9wb2xsaW5nLmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvbGliL3RyYW5zcG9ydHMvd2Vic29ja2V0LmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1jbGllbnQvbGliL3RyYW5zcG9ydHMveG1saHR0cHJlcXVlc3QuYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tY2xpZW50L25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvZGVidWcuanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLWNsaWVudC9ub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZW5naW5lLmlvLXBhcnNlci9saWIvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9lbmdpbmUuaW8tcGFyc2VyL2xpYi9rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2VuZ2luZS5pby1wYXJzZXIvbGliL3V0ZjguanMiLCJub2RlX21vZHVsZXMvZXJyLWNvZGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9mYXN0LXNhZmUtc3RyaW5naWZ5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCJub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9nZXQtYnJvd3Nlci1ydGMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9nbG9iYWwvZG9jdW1lbnQuanMiLCJub2RlX21vZHVsZXMvZ2xvYmFsL3dpbmRvdy5qcyIsIm5vZGVfbW9kdWxlcy9oYXMtYmluYXJ5Mi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oYXMtYmluYXJ5Mi9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oYXMtY29ycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oYXMtcHJvdG8vaW5kZXguanMiLCJub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanMiLCJub2RlX21vZHVsZXMvaGFzL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oeXBlcnNjcmlwdC1hdHRyaWJ1dGUtdG8tcHJvcGVydHkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaHlwZXJ4L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2kxOG5leHQtYnJvd3Nlci1sYW5ndWFnZWRldGVjdG9yL2Rpc3QvY2pzL2kxOG5leHRCcm93c2VyTGFuZ3VhZ2VEZXRlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvY2pzL2kxOG5leHQuanMiLCJub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pbmRleG9mL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2NvcmUvZGlyZWN0aXZlcy5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvY29yZS9pbnB1dHNjYW5uZXIuanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2NvcmUvb3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvY29yZS9vdXRwdXQuanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2NvcmUvcGF0dGVybi5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvY29yZS90ZW1wbGF0YWJsZXBhdHRlcm4uanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2NvcmUvdG9rZW4uanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2NvcmUvdG9rZW5pemVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9jb3JlL3Rva2Vuc3RyZWFtLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9jb3JlL3doaXRlc3BhY2VwYXR0ZXJuLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9jc3MvYmVhdXRpZmllci5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvY3NzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9jc3Mvb3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvaHRtbC9iZWF1dGlmaWVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9odG1sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9odG1sL29wdGlvbnMuanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2h0bWwvdG9rZW5pemVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvamF2YXNjcmlwdC9hY29ybi5qcyIsIm5vZGVfbW9kdWxlcy9qcy1iZWF1dGlmeS9qcy9zcmMvamF2YXNjcmlwdC9iZWF1dGlmaWVyLmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9qYXZhc2NyaXB0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLWJlYXV0aWZ5L2pzL3NyYy9qYXZhc2NyaXB0L29wdGlvbnMuanMiLCJub2RlX21vZHVsZXMvanMtYmVhdXRpZnkvanMvc3JjL2phdmFzY3JpcHQvdG9rZW5pemVyLmpzIiwibm9kZV9tb2R1bGVzL25hbm9hc3NlcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmFub2J1cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vYnVzL25vZGVfbW9kdWxlcy9yZW1vdmUtYXJyYXktaXRlbXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmFub2NvbXBvbmVudC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vY29tcG9uZW50L25vZGVfbW9kdWxlcy9uYW5vYXNzZXJ0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25hbm9ocmVmL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25hbm9odG1sL2xpYi9hcHBlbmQtY2hpbGQuanMiLCJub2RlX21vZHVsZXMvbmFub2h0bWwvbGliL2Jvb2wtcHJvcHMuanMiLCJub2RlX21vZHVsZXMvbmFub2h0bWwvbGliL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvbmFub2h0bWwvbGliL2RpcmVjdC1wcm9wcy5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vaHRtbC9saWIvZG9tLmpzIiwibm9kZV9tb2R1bGVzL25hbm9odG1sL2xpYi9yYXctYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vaHRtbC9saWIvc3ZnLXRhZ3MuanMiLCJub2RlX21vZHVsZXMvbmFub2lkL2Zvcm1hdC5icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL25hbm9sb2dnZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmFub2xydS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vbW9ycGgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmFub21vcnBoL2xpYi9ldmVudHMuanMiLCJub2RlX21vZHVsZXMvbmFub21vcnBoL2xpYi9tb3JwaC5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vcXVlcnkvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vcmFmL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25hbm9yb3V0ZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmFub3NjaGVkdWxlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uYW5vdGltaW5nL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3QtY2hhbmdlLWNhbGxzaXRlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1pbnNwZWN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29uLWxvYWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvb24tcGVyZm9ybWFuY2UvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZXFzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNldXJpL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BsdWNrZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJldHRpZXItYnl0ZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3FzL2xpYi9mb3JtYXRzLmpzIiwibm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiLCJub2RlX21vZHVsZXMvcXMvbGliL3N0cmluZ2lmeS5qcyIsIm5vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvcXVldWUtbWljcm90YXNrL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JhbmRvbWJ5dGVzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmVtb3ZlLWFycmF5LWl0ZW1zL2Rpc3QvcmVtb3ZlLWFycmF5LWl0ZW1zLmNqcy5qcyIsIm5vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zY3JvbGwtdG8tYW5jaG9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Nob3J0aWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvYWxwaGFiZXQuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvYnVpbGQuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvZ2VuZXJhdGUuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvaXMtdmFsaWQuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvcmFuZG9tL3JhbmRvbS1ieXRlLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvcmFuZG9tL3JhbmRvbS1mcm9tLXNlZWQuanMiLCJub2RlX21vZHVsZXMvc2hvcnRpZC9saWIvdXRpbC9jbHVzdGVyLXdvcmtlci1pZC1icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZS1wZWVyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZXJyb3JzLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZS1wZWVyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZS1wZWVyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fd3JpdGFibGUuanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZS1wZWVyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGUtcGVlci9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlLmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZS1wZWVyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2ltcGxlLXBlZXIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS1icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1jbGllbnQvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1jbGllbnQvbGliL21hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvc29ja2V0LmlvLWNsaWVudC9saWIvb24uanMiLCJub2RlX21vZHVsZXMvc29ja2V0LmlvLWNsaWVudC9saWIvc29ja2V0LmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1jbGllbnQvbGliL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXQuaW8tY2xpZW50L25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXQuaW8tcGFyc2VyL2JpbmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXQuaW8tcGFyc2VyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1wYXJzZXIvaXMtYnVmZmVyLmpzIiwibm9kZV9tb2R1bGVzL3NvY2tldC5pby1wYXJzZXIvbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3N0YXRlLWNvcHkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIvbGliL3N0cmluZ19kZWNvZGVyLmpzIiwibm9kZV9tb2R1bGVzL3N1cGVyYWdlbnQvc3JjL2FnZW50LWJhc2UuanMiLCJub2RlX21vZHVsZXMvc3VwZXJhZ2VudC9zcmMvY2xpZW50LmpzIiwibm9kZV9tb2R1bGVzL3N1cGVyYWdlbnQvbGliL25vZGVfbW9kdWxlcy9zdXBlcmFnZW50L3NyYy9yZXF1ZXN0LWJhc2UuanMiLCJub2RlX21vZHVsZXMvc3VwZXJhZ2VudC9zcmMvcmVzcG9uc2UtYmFzZS5qcyIsIm5vZGVfbW9kdWxlcy9zdXBlcmFnZW50L3NyYy91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy90by1hcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy91dGlsLWRlcHJlY2F0ZS9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3dheWZhcmVyL2dldC1hbGwtcm91dGVzLmpzIiwibm9kZV9tb2R1bGVzL3dheWZhcmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3dheWZhcmVyL3RyaWUuanMiLCJub2RlX21vZHVsZXMveWVhc3QvaW5kZXguanMiLCJzcmMvbGliL3A1LXdyYXBwZXIuanMiLCJzcmMvbGliL3BhdGNoLWJheS9wYi1saXZlLmpzIiwic3JjL2xpYi9wYXRjaC1iYXkvcnRjLXBhdGNoLWJheS5qcyIsInNyYy9zdG9yZXMvZXhhbXBsZXMuanNvbiIsInNyYy9zdG9yZXMvZ2FsbGVyeS5qcyIsInNyYy9zdG9yZXMvbGFuZ3VhZ2Utc3RvcmUuanMiLCJzcmMvc3RvcmVzL3N0b3JlLmpzIiwic3JjL3N0b3Jlcy90ZXh0LWVsZW1lbnRzLmpzIiwic3JjL3ZpZXdzL0VkaXRvckNvbXBvbmVudC5qcyIsInNyYy92aWV3cy9IeWRyYS5qcyIsInNyYy92aWV3cy9lZGl0b3IvZWRpdG9yLmpzIiwic3JjL3ZpZXdzL2VkaXRvci9rZXltYXBzLmpzIiwic3JjL3ZpZXdzL2VkaXRvci9sb2cuanMiLCJzcmMvdmlld3MvZWRpdG9yL3JhbmRvbWl6ZXIvTXV0YXRvci5qcyIsInNyYy92aWV3cy9lZGl0b3IvcmFuZG9taXplci9VbmRvU3RhY2suanMiLCJzcmMvdmlld3MvZWRpdG9yL3JhbmRvbWl6ZXIvZ2xzbFRyYW5zZm9ybXMuanMiLCJzcmMvdmlld3MvZWRpdG9yL3JlcGwuanMiLCJzcmMvdmlld3MvaW5mby5qcyIsInNyYy92aWV3cy9tYWluLmpzIiwic3JjL3ZpZXdzL3Rvb2xiYXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDLzFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMxZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMxa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4YkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BHQTs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2p2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBOztBQ0RBO0FBQ0E7O0FDREE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25WQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMzU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDck9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDL1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4eUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoOENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1aENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDL0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbGdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDaG9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN0TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDL0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDbk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDL1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUNuTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM2tDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJjb25zdCBkZXZ0b29scyA9IHJlcXVpcmUoJ2Nob28tZGV2dG9vbHMnKVxuY29uc3QgY2hvbyA9IHJlcXVpcmUoJ2Nob28nKVxuY29uc3Qgc3RvcmUgPSByZXF1aXJlKCcuL3NyYy9zdG9yZXMvc3RvcmUuanMnKVxuY29uc3QgbGFuZ3VhZ2VTdG9yZSA9IHJlcXVpcmUoJy4vc3JjL3N0b3Jlcy9sYW5ndWFnZS1zdG9yZS5qcycpXG5cbmNvbnN0IG1haW5WaWV3ID0gcmVxdWlyZSgnLi9zcmMvdmlld3MvbWFpbi5qcycpXG5cbmNvbnN0IGFwcCA9IGNob28oKVxuYXBwLnVzZShkZXZ0b29scygpKVxuYXBwLnVzZShzdG9yZSlcbmFwcC51c2UobGFuZ3VhZ2VTdG9yZSlcbmFwcC5yb3V0ZSgnLycsIG1haW5WaWV3KVxuYXBwLnJvdXRlKCcvaHlkcmEtYmFja3VwJywgbWFpblZpZXcpXG5hcHAubW91bnQoJ2JvZHknKVxuXG5cblxuIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIik7XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCIpO1xuZnVuY3Rpb24gX3RvQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7XG4gIHJldHVybiBfdHlwZW9mKGtleSkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvYmopO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5hY29ybiA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkLiBEbyBub3QgbW9kaWZ5IG1hbnVhbGx5IVxuICB2YXIgYXN0cmFsSWRlbnRpZmllckNvZGVzID0gWzUwOSwgMCwgMjI3LCAwLCAxNTAsIDQsIDI5NCwgOSwgMTM2OCwgMiwgMiwgMSwgNiwgMywgNDEsIDIsIDUsIDAsIDE2NiwgMSwgNTc0LCAzLCA5LCA5LCAzNzAsIDEsIDgxLCAyLCA3MSwgMTAsIDUwLCAzLCAxMjMsIDIsIDU0LCAxNCwgMzIsIDEwLCAzLCAxLCAxMSwgMywgNDYsIDEwLCA4LCAwLCA0NiwgOSwgNywgMiwgMzcsIDEzLCAyLCA5LCA2LCAxLCA0NSwgMCwgMTMsIDIsIDQ5LCAxMywgOSwgMywgMiwgMTEsIDgzLCAxMSwgNywgMCwgMywgMCwgMTU4LCAxMSwgNiwgOSwgNywgMywgNTYsIDEsIDIsIDYsIDMsIDEsIDMsIDIsIDEwLCAwLCAxMSwgMSwgMywgNiwgNCwgNCwgMTkzLCAxNywgMTAsIDksIDUsIDAsIDgyLCAxOSwgMTMsIDksIDIxNCwgNiwgMywgOCwgMjgsIDEsIDgzLCAxNiwgMTYsIDksIDgyLCAxMiwgOSwgOSwgODQsIDE0LCA1LCA5LCAyNDMsIDE0LCAxNjYsIDksIDcxLCA1LCAyLCAxLCAzLCAzLCAyLCAwLCAyLCAxLCAxMywgOSwgMTIwLCA2LCAzLCA2LCA0LCAwLCAyOSwgOSwgNDEsIDYsIDIsIDMsIDksIDAsIDEwLCAxMCwgNDcsIDE1LCA0MDYsIDcsIDIsIDcsIDE3LCA5LCA1NywgMjEsIDIsIDEzLCAxMjMsIDUsIDQsIDAsIDIsIDEsIDIsIDYsIDIsIDAsIDksIDksIDQ5LCA0LCAyLCAxLCAyLCA0LCA5LCA5LCAzMzAsIDMsIDEwLCAxLCAyLCAwLCA0OSwgNiwgNCwgNCwgMTQsIDksIDUzNTEsIDAsIDcsIDE0LCAxMzgzNSwgOSwgODcsIDksIDM5LCA0LCA2MCwgNiwgMjYsIDksIDEwMTQsIDAsIDIsIDU0LCA4LCAzLCA4MiwgMCwgMTIsIDEsIDE5NjI4LCAxLCA0NzA2LCA0NSwgMywgMjIsIDU0MywgNCwgNCwgNSwgOSwgNywgMywgNiwgMzEsIDMsIDE0OSwgMiwgMTQxOCwgNDksIDUxMywgNTQsIDUsIDQ5LCA5LCAwLCAxNSwgMCwgMjMsIDQsIDIsIDE0LCAxMzYxLCA2LCAyLCAxNiwgMywgNiwgMiwgMSwgMiwgNCwgMTAxLCAwLCAxNjEsIDYsIDEwLCA5LCAzNTcsIDAsIDYyLCAxMywgNDk5LCAxMywgOTgzLCA2LCAxMTAsIDYsIDYsIDksIDQ3NTksIDksIDc4NzcxOSwgMjM5XTtcblxuICAvLyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZC4gRG8gbm90IG1vZGlmeSBtYW51YWxseSFcbiAgdmFyIGFzdHJhbElkZW50aWZpZXJTdGFydENvZGVzID0gWzAsIDExLCAyLCAyNSwgMiwgMTgsIDIsIDEsIDIsIDE0LCAzLCAxMywgMzUsIDEyMiwgNzAsIDUyLCAyNjgsIDI4LCA0LCA0OCwgNDgsIDMxLCAxNCwgMjksIDYsIDM3LCAxMSwgMjksIDMsIDM1LCA1LCA3LCAyLCA0LCA0MywgMTU3LCAxOSwgMzUsIDUsIDM1LCA1LCAzOSwgOSwgNTEsIDEzLCAxMCwgMiwgMTQsIDIsIDYsIDIsIDEsIDIsIDEwLCAyLCAxNCwgMiwgNiwgMiwgMSwgNjgsIDMxMCwgMTAsIDIxLCAxMSwgNywgMjUsIDUsIDIsIDQxLCAyLCA4LCA3MCwgNSwgMywgMCwgMiwgNDMsIDIsIDEsIDQsIDAsIDMsIDIyLCAxMSwgMjIsIDEwLCAzMCwgNjYsIDE4LCAyLCAxLCAxMSwgMjEsIDExLCAyNSwgNzEsIDU1LCA3LCAxLCA2NSwgMCwgMTYsIDMsIDIsIDIsIDIsIDI4LCA0MywgMjgsIDQsIDI4LCAzNiwgNywgMiwgMjcsIDI4LCA1MywgMTEsIDIxLCAxMSwgMTgsIDE0LCAxNywgMTExLCA3MiwgNTYsIDUwLCAxNCwgNTAsIDE0LCAzNSwgMzQ5LCA0MSwgNywgMSwgNzksIDI4LCAxMSwgMCwgOSwgMjEsIDQzLCAxNywgNDcsIDIwLCAyOCwgMjIsIDEzLCA1MiwgNTgsIDEsIDMsIDAsIDE0LCA0NCwgMzMsIDI0LCAyNywgMzUsIDMwLCAwLCAzLCAwLCA5LCAzNCwgNCwgMCwgMTMsIDQ3LCAxNSwgMywgMjIsIDAsIDIsIDAsIDM2LCAxNywgMiwgMjQsIDIwLCAxLCA2NCwgNiwgMiwgMCwgMiwgMywgMiwgMTQsIDIsIDksIDgsIDQ2LCAzOSwgNywgMywgMSwgMywgMjEsIDIsIDYsIDIsIDEsIDIsIDQsIDQsIDAsIDE5LCAwLCAxMywgNCwgMTU5LCA1MiwgMTksIDMsIDIxLCAyLCAzMSwgNDcsIDIxLCAxLCAyLCAwLCAxODUsIDQ2LCA0MiwgMywgMzcsIDQ3LCAyMSwgMCwgNjAsIDQyLCAxNCwgMCwgNzIsIDI2LCAzOCwgNiwgMTg2LCA0MywgMTE3LCA2MywgMzIsIDcsIDMsIDAsIDMsIDcsIDIsIDEsIDIsIDIzLCAxNiwgMCwgMiwgMCwgOTUsIDcsIDMsIDM4LCAxNywgMCwgMiwgMCwgMjksIDAsIDExLCAzOSwgOCwgMCwgMjIsIDAsIDEyLCA0NSwgMjAsIDAsIDE5LCA3MiwgMjY0LCA4LCAyLCAzNiwgMTgsIDAsIDUwLCAyOSwgMTEzLCA2LCAyLCAxLCAyLCAzNywgMjIsIDAsIDI2LCA1LCAyLCAxLCAyLCAzMSwgMTUsIDAsIDMyOCwgMTgsIDE2LCAwLCAyLCAxMiwgMiwgMzMsIDEyNSwgMCwgODAsIDkyMSwgMTAzLCAxMTAsIDE4LCAxOTUsIDI2MzcsIDk2LCAxNiwgMTA3MSwgMTgsIDUsIDQwMjYsIDU4MiwgODYzNCwgNTY4LCA4LCAzMCwgMTgsIDc4LCAxOCwgMjksIDE5LCA0NywgMTcsIDMsIDMyLCAyMCwgNiwgMTgsIDY4OSwgNjMsIDEyOSwgNzQsIDYsIDAsIDY3LCAxMiwgNjUsIDEsIDIsIDAsIDI5LCA2MTM1LCA5LCAxMjM3LCA0MywgOCwgODkzNiwgMywgMiwgNiwgMiwgMSwgMiwgMjkwLCAxNiwgMCwgMzAsIDIsIDMsIDAsIDE1LCAzLCA5LCAzOTUsIDIzMDksIDEwNiwgNiwgMTIsIDQsIDgsIDgsIDksIDU5OTEsIDg0LCAyLCA3MCwgMiwgMSwgMywgMCwgMywgMSwgMywgMywgMiwgMTEsIDIsIDAsIDIsIDYsIDIsIDY0LCAyLCAzLCAzLCA3LCAyLCA2LCAyLCAyNywgMiwgMywgMiwgNCwgMiwgMCwgNCwgNiwgMiwgMzM5LCAzLCAyNCwgMiwgMjQsIDIsIDMwLCAyLCAyNCwgMiwgMzAsIDIsIDI0LCAyLCAzMCwgMiwgMjQsIDIsIDMwLCAyLCAyNCwgMiwgNywgMTg0NSwgMzAsIDcsIDUsIDI2MiwgNjEsIDE0NywgNDQsIDExLCA2LCAxNywgMCwgMzIyLCAyOSwgMTksIDQzLCA0ODUsIDI3LCA3NTcsIDYsIDIsIDMsIDIsIDEsIDIsIDE0LCAyLCAxOTYsIDYwLCA2NywgOCwgMCwgMTIwNSwgMywgMiwgMjYsIDIsIDEsIDIsIDAsIDMsIDAsIDIsIDksIDIsIDMsIDIsIDAsIDIsIDAsIDcsIDAsIDUsIDAsIDIsIDAsIDIsIDAsIDIsIDIsIDIsIDEsIDIsIDAsIDMsIDAsIDIsIDAsIDIsIDAsIDIsIDAsIDIsIDAsIDIsIDEsIDIsIDAsIDMsIDMsIDIsIDYsIDIsIDMsIDIsIDMsIDIsIDAsIDIsIDksIDIsIDE2LCA2LCAyLCAyLCA0LCAyLCAxNiwgNDQyMSwgNDI3MTksIDMzLCA0MTUzLCA3LCAyMjEsIDMsIDU3NjEsIDE1LCA3NDcyLCAzMTA0LCA1NDEsIDE1MDcsIDQ5MzgsIDYsIDQxOTFdO1xuXG4gIC8vIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkLiBEbyBub3QgbW9kaWZ5IG1hbnVhbGx5IVxuICB2YXIgbm9uQVNDSUlpZGVudGlmaWVyQ2hhcnMgPSBcIlxcdTIwMGNcXHUyMDBkXFx4YjdcXHUwMzAwLVxcdTAzNmZcXHUwMzg3XFx1MDQ4My1cXHUwNDg3XFx1MDU5MS1cXHUwNWJkXFx1MDViZlxcdTA1YzFcXHUwNWMyXFx1MDVjNFxcdTA1YzVcXHUwNWM3XFx1MDYxMC1cXHUwNjFhXFx1MDY0Yi1cXHUwNjY5XFx1MDY3MFxcdTA2ZDYtXFx1MDZkY1xcdTA2ZGYtXFx1MDZlNFxcdTA2ZTdcXHUwNmU4XFx1MDZlYS1cXHUwNmVkXFx1MDZmMC1cXHUwNmY5XFx1MDcxMVxcdTA3MzAtXFx1MDc0YVxcdTA3YTYtXFx1MDdiMFxcdTA3YzAtXFx1MDdjOVxcdTA3ZWItXFx1MDdmM1xcdTA3ZmRcXHUwODE2LVxcdTA4MTlcXHUwODFiLVxcdTA4MjNcXHUwODI1LVxcdTA4MjdcXHUwODI5LVxcdTA4MmRcXHUwODU5LVxcdTA4NWJcXHUwODk4LVxcdTA4OWZcXHUwOGNhLVxcdTA4ZTFcXHUwOGUzLVxcdTA5MDNcXHUwOTNhLVxcdTA5M2NcXHUwOTNlLVxcdTA5NGZcXHUwOTUxLVxcdTA5NTdcXHUwOTYyXFx1MDk2M1xcdTA5NjYtXFx1MDk2ZlxcdTA5ODEtXFx1MDk4M1xcdTA5YmNcXHUwOWJlLVxcdTA5YzRcXHUwOWM3XFx1MDljOFxcdTA5Y2ItXFx1MDljZFxcdTA5ZDdcXHUwOWUyXFx1MDllM1xcdTA5ZTYtXFx1MDllZlxcdTA5ZmVcXHUwYTAxLVxcdTBhMDNcXHUwYTNjXFx1MGEzZS1cXHUwYTQyXFx1MGE0N1xcdTBhNDhcXHUwYTRiLVxcdTBhNGRcXHUwYTUxXFx1MGE2Ni1cXHUwYTcxXFx1MGE3NVxcdTBhODEtXFx1MGE4M1xcdTBhYmNcXHUwYWJlLVxcdTBhYzVcXHUwYWM3LVxcdTBhYzlcXHUwYWNiLVxcdTBhY2RcXHUwYWUyXFx1MGFlM1xcdTBhZTYtXFx1MGFlZlxcdTBhZmEtXFx1MGFmZlxcdTBiMDEtXFx1MGIwM1xcdTBiM2NcXHUwYjNlLVxcdTBiNDRcXHUwYjQ3XFx1MGI0OFxcdTBiNGItXFx1MGI0ZFxcdTBiNTUtXFx1MGI1N1xcdTBiNjJcXHUwYjYzXFx1MGI2Ni1cXHUwYjZmXFx1MGI4MlxcdTBiYmUtXFx1MGJjMlxcdTBiYzYtXFx1MGJjOFxcdTBiY2EtXFx1MGJjZFxcdTBiZDdcXHUwYmU2LVxcdTBiZWZcXHUwYzAwLVxcdTBjMDRcXHUwYzNjXFx1MGMzZS1cXHUwYzQ0XFx1MGM0Ni1cXHUwYzQ4XFx1MGM0YS1cXHUwYzRkXFx1MGM1NVxcdTBjNTZcXHUwYzYyXFx1MGM2M1xcdTBjNjYtXFx1MGM2ZlxcdTBjODEtXFx1MGM4M1xcdTBjYmNcXHUwY2JlLVxcdTBjYzRcXHUwY2M2LVxcdTBjYzhcXHUwY2NhLVxcdTBjY2RcXHUwY2Q1XFx1MGNkNlxcdTBjZTJcXHUwY2UzXFx1MGNlNi1cXHUwY2VmXFx1MGNmM1xcdTBkMDAtXFx1MGQwM1xcdTBkM2JcXHUwZDNjXFx1MGQzZS1cXHUwZDQ0XFx1MGQ0Ni1cXHUwZDQ4XFx1MGQ0YS1cXHUwZDRkXFx1MGQ1N1xcdTBkNjJcXHUwZDYzXFx1MGQ2Ni1cXHUwZDZmXFx1MGQ4MS1cXHUwZDgzXFx1MGRjYVxcdTBkY2YtXFx1MGRkNFxcdTBkZDZcXHUwZGQ4LVxcdTBkZGZcXHUwZGU2LVxcdTBkZWZcXHUwZGYyXFx1MGRmM1xcdTBlMzFcXHUwZTM0LVxcdTBlM2FcXHUwZTQ3LVxcdTBlNGVcXHUwZTUwLVxcdTBlNTlcXHUwZWIxXFx1MGViNC1cXHUwZWJjXFx1MGVjOC1cXHUwZWNlXFx1MGVkMC1cXHUwZWQ5XFx1MGYxOFxcdTBmMTlcXHUwZjIwLVxcdTBmMjlcXHUwZjM1XFx1MGYzN1xcdTBmMzlcXHUwZjNlXFx1MGYzZlxcdTBmNzEtXFx1MGY4NFxcdTBmODZcXHUwZjg3XFx1MGY4ZC1cXHUwZjk3XFx1MGY5OS1cXHUwZmJjXFx1MGZjNlxcdTEwMmItXFx1MTAzZVxcdTEwNDAtXFx1MTA0OVxcdTEwNTYtXFx1MTA1OVxcdTEwNWUtXFx1MTA2MFxcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2ZFxcdTEwNzEtXFx1MTA3NFxcdTEwODItXFx1MTA4ZFxcdTEwOGYtXFx1MTA5ZFxcdTEzNWQtXFx1MTM1ZlxcdTEzNjktXFx1MTM3MVxcdTE3MTItXFx1MTcxNVxcdTE3MzItXFx1MTczNFxcdTE3NTJcXHUxNzUzXFx1MTc3MlxcdTE3NzNcXHUxN2I0LVxcdTE3ZDNcXHUxN2RkXFx1MTdlMC1cXHUxN2U5XFx1MTgwYi1cXHUxODBkXFx1MTgwZi1cXHUxODE5XFx1MThhOVxcdTE5MjAtXFx1MTkyYlxcdTE5MzAtXFx1MTkzYlxcdTE5NDYtXFx1MTk0ZlxcdTE5ZDAtXFx1MTlkYVxcdTFhMTctXFx1MWExYlxcdTFhNTUtXFx1MWE1ZVxcdTFhNjAtXFx1MWE3Y1xcdTFhN2YtXFx1MWE4OVxcdTFhOTAtXFx1MWE5OVxcdTFhYjAtXFx1MWFiZFxcdTFhYmYtXFx1MWFjZVxcdTFiMDAtXFx1MWIwNFxcdTFiMzQtXFx1MWI0NFxcdTFiNTAtXFx1MWI1OVxcdTFiNmItXFx1MWI3M1xcdTFiODAtXFx1MWI4MlxcdTFiYTEtXFx1MWJhZFxcdTFiYjAtXFx1MWJiOVxcdTFiZTYtXFx1MWJmM1xcdTFjMjQtXFx1MWMzN1xcdTFjNDAtXFx1MWM0OVxcdTFjNTAtXFx1MWM1OVxcdTFjZDAtXFx1MWNkMlxcdTFjZDQtXFx1MWNlOFxcdTFjZWRcXHUxY2Y0XFx1MWNmNy1cXHUxY2Y5XFx1MWRjMC1cXHUxZGZmXFx1MjAzZlxcdTIwNDBcXHUyMDU0XFx1MjBkMC1cXHUyMGRjXFx1MjBlMVxcdTIwZTUtXFx1MjBmMFxcdTJjZWYtXFx1MmNmMVxcdTJkN2ZcXHUyZGUwLVxcdTJkZmZcXHUzMDJhLVxcdTMwMmZcXHUzMDk5XFx1MzA5YVxcdWE2MjAtXFx1YTYyOVxcdWE2NmZcXHVhNjc0LVxcdWE2N2RcXHVhNjllXFx1YTY5ZlxcdWE2ZjBcXHVhNmYxXFx1YTgwMlxcdWE4MDZcXHVhODBiXFx1YTgyMy1cXHVhODI3XFx1YTgyY1xcdWE4ODBcXHVhODgxXFx1YThiNC1cXHVhOGM1XFx1YThkMC1cXHVhOGQ5XFx1YThlMC1cXHVhOGYxXFx1YThmZi1cXHVhOTA5XFx1YTkyNi1cXHVhOTJkXFx1YTk0Ny1cXHVhOTUzXFx1YTk4MC1cXHVhOTgzXFx1YTliMy1cXHVhOWMwXFx1YTlkMC1cXHVhOWQ5XFx1YTllNVxcdWE5ZjAtXFx1YTlmOVxcdWFhMjktXFx1YWEzNlxcdWFhNDNcXHVhYTRjXFx1YWE0ZFxcdWFhNTAtXFx1YWE1OVxcdWFhN2ItXFx1YWE3ZFxcdWFhYjBcXHVhYWIyLVxcdWFhYjRcXHVhYWI3XFx1YWFiOFxcdWFhYmVcXHVhYWJmXFx1YWFjMVxcdWFhZWItXFx1YWFlZlxcdWFhZjVcXHVhYWY2XFx1YWJlMy1cXHVhYmVhXFx1YWJlY1xcdWFiZWRcXHVhYmYwLVxcdWFiZjlcXHVmYjFlXFx1ZmUwMC1cXHVmZTBmXFx1ZmUyMC1cXHVmZTJmXFx1ZmUzM1xcdWZlMzRcXHVmZTRkLVxcdWZlNGZcXHVmZjEwLVxcdWZmMTlcXHVmZjNmXCI7XG5cbiAgLy8gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQuIERvIG5vdCBtb2RpZnkgbWFudWFsbHkhXG4gIHZhciBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzID0gXCJcXHhhYVxceGI1XFx4YmFcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx1MDJjMVxcdTAyYzYtXFx1MDJkMVxcdTAyZTAtXFx1MDJlNFxcdTAyZWNcXHUwMmVlXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdhLVxcdTAzN2RcXHUwMzdmXFx1MDM4NlxcdTAzODgtXFx1MDM4YVxcdTAzOGNcXHUwMzhlLVxcdTAzYTFcXHUwM2EzLVxcdTAzZjVcXHUwM2Y3LVxcdTA0ODFcXHUwNDhhLVxcdTA1MmZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MC1cXHUwNTg4XFx1MDVkMC1cXHUwNWVhXFx1MDVlZi1cXHUwNWYyXFx1MDYyMC1cXHUwNjRhXFx1MDY2ZVxcdTA2NmZcXHUwNjcxLVxcdTA2ZDNcXHUwNmQ1XFx1MDZlNVxcdTA2ZTZcXHUwNmVlXFx1MDZlZlxcdTA2ZmEtXFx1MDZmY1xcdTA2ZmZcXHUwNzEwXFx1MDcxMi1cXHUwNzJmXFx1MDc0ZC1cXHUwN2E1XFx1MDdiMVxcdTA3Y2EtXFx1MDdlYVxcdTA3ZjRcXHUwN2Y1XFx1MDdmYVxcdTA4MDAtXFx1MDgxNVxcdTA4MWFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2YVxcdTA4NzAtXFx1MDg4N1xcdTA4ODktXFx1MDg4ZVxcdTA4YTAtXFx1MDhjOVxcdTA5MDQtXFx1MDkzOVxcdTA5M2RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThjXFx1MDk4ZlxcdTA5OTBcXHUwOTkzLVxcdTA5YThcXHUwOWFhLVxcdTA5YjBcXHUwOWIyXFx1MDliNi1cXHUwOWI5XFx1MDliZFxcdTA5Y2VcXHUwOWRjXFx1MDlkZFxcdTA5ZGYtXFx1MDllMVxcdTA5ZjBcXHUwOWYxXFx1MDlmY1xcdTBhMDUtXFx1MGEwYVxcdTBhMGZcXHUwYTEwXFx1MGExMy1cXHUwYTI4XFx1MGEyYS1cXHUwYTMwXFx1MGEzMlxcdTBhMzNcXHUwYTM1XFx1MGEzNlxcdTBhMzhcXHUwYTM5XFx1MGE1OS1cXHUwYTVjXFx1MGE1ZVxcdTBhNzItXFx1MGE3NFxcdTBhODUtXFx1MGE4ZFxcdTBhOGYtXFx1MGE5MVxcdTBhOTMtXFx1MGFhOFxcdTBhYWEtXFx1MGFiMFxcdTBhYjJcXHUwYWIzXFx1MGFiNS1cXHUwYWI5XFx1MGFiZFxcdTBhZDBcXHUwYWUwXFx1MGFlMVxcdTBhZjlcXHUwYjA1LVxcdTBiMGNcXHUwYjBmXFx1MGIxMFxcdTBiMTMtXFx1MGIyOFxcdTBiMmEtXFx1MGIzMFxcdTBiMzJcXHUwYjMzXFx1MGIzNS1cXHUwYjM5XFx1MGIzZFxcdTBiNWNcXHUwYjVkXFx1MGI1Zi1cXHUwYjYxXFx1MGI3MVxcdTBiODNcXHUwYjg1LVxcdTBiOGFcXHUwYjhlLVxcdTBiOTBcXHUwYjkyLVxcdTBiOTVcXHUwYjk5XFx1MGI5YVxcdTBiOWNcXHUwYjllXFx1MGI5ZlxcdTBiYTNcXHUwYmE0XFx1MGJhOC1cXHUwYmFhXFx1MGJhZS1cXHUwYmI5XFx1MGJkMFxcdTBjMDUtXFx1MGMwY1xcdTBjMGUtXFx1MGMxMFxcdTBjMTItXFx1MGMyOFxcdTBjMmEtXFx1MGMzOVxcdTBjM2RcXHUwYzU4LVxcdTBjNWFcXHUwYzVkXFx1MGM2MFxcdTBjNjFcXHUwYzgwXFx1MGM4NS1cXHUwYzhjXFx1MGM4ZS1cXHUwYzkwXFx1MGM5Mi1cXHUwY2E4XFx1MGNhYS1cXHUwY2IzXFx1MGNiNS1cXHUwY2I5XFx1MGNiZFxcdTBjZGRcXHUwY2RlXFx1MGNlMFxcdTBjZTFcXHUwY2YxXFx1MGNmMlxcdTBkMDQtXFx1MGQwY1xcdTBkMGUtXFx1MGQxMFxcdTBkMTItXFx1MGQzYVxcdTBkM2RcXHUwZDRlXFx1MGQ1NC1cXHUwZDU2XFx1MGQ1Zi1cXHUwZDYxXFx1MGQ3YS1cXHUwZDdmXFx1MGQ4NS1cXHUwZDk2XFx1MGQ5YS1cXHUwZGIxXFx1MGRiMy1cXHUwZGJiXFx1MGRiZFxcdTBkYzAtXFx1MGRjNlxcdTBlMDEtXFx1MGUzMFxcdTBlMzJcXHUwZTMzXFx1MGU0MC1cXHUwZTQ2XFx1MGU4MVxcdTBlODJcXHUwZTg0XFx1MGU4Ni1cXHUwZThhXFx1MGU4Yy1cXHUwZWEzXFx1MGVhNVxcdTBlYTctXFx1MGViMFxcdTBlYjJcXHUwZWIzXFx1MGViZFxcdTBlYzAtXFx1MGVjNFxcdTBlYzZcXHUwZWRjLVxcdTBlZGZcXHUwZjAwXFx1MGY0MC1cXHUwZjQ3XFx1MGY0OS1cXHUwZjZjXFx1MGY4OC1cXHUwZjhjXFx1MTAwMC1cXHUxMDJhXFx1MTAzZlxcdTEwNTAtXFx1MTA1NVxcdTEwNWEtXFx1MTA1ZFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNmUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOGVcXHUxMGEwLVxcdTEwYzVcXHUxMGM3XFx1MTBjZFxcdTEwZDAtXFx1MTBmYVxcdTEwZmMtXFx1MTI0OFxcdTEyNGEtXFx1MTI0ZFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVhLVxcdTEyNWRcXHUxMjYwLVxcdTEyODhcXHUxMjhhLVxcdTEyOGRcXHUxMjkwLVxcdTEyYjBcXHUxMmIyLVxcdTEyYjVcXHUxMmI4LVxcdTEyYmVcXHUxMmMwXFx1MTJjMi1cXHUxMmM1XFx1MTJjOC1cXHUxMmQ2XFx1MTJkOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVhXFx1MTM4MC1cXHUxMzhmXFx1MTNhMC1cXHUxM2Y1XFx1MTNmOC1cXHUxM2ZkXFx1MTQwMS1cXHUxNjZjXFx1MTY2Zi1cXHUxNjdmXFx1MTY4MS1cXHUxNjlhXFx1MTZhMC1cXHUxNmVhXFx1MTZlZS1cXHUxNmY4XFx1MTcwMC1cXHUxNzExXFx1MTcxZi1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZjXFx1MTc2ZS1cXHUxNzcwXFx1MTc4MC1cXHUxN2IzXFx1MTdkN1xcdTE3ZGNcXHUxODIwLVxcdTE4NzhcXHUxODgwLVxcdTE4YThcXHUxOGFhXFx1MThiMC1cXHUxOGY1XFx1MTkwMC1cXHUxOTFlXFx1MTk1MC1cXHUxOTZkXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOWFiXFx1MTliMC1cXHUxOWM5XFx1MWEwMC1cXHUxYTE2XFx1MWEyMC1cXHUxYTU0XFx1MWFhN1xcdTFiMDUtXFx1MWIzM1xcdTFiNDUtXFx1MWI0Y1xcdTFiODMtXFx1MWJhMFxcdTFiYWVcXHUxYmFmXFx1MWJiYS1cXHUxYmU1XFx1MWMwMC1cXHUxYzIzXFx1MWM0ZC1cXHUxYzRmXFx1MWM1YS1cXHUxYzdkXFx1MWM4MC1cXHUxYzg4XFx1MWM5MC1cXHUxY2JhXFx1MWNiZC1cXHUxY2JmXFx1MWNlOS1cXHUxY2VjXFx1MWNlZS1cXHUxY2YzXFx1MWNmNVxcdTFjZjZcXHUxY2ZhXFx1MWQwMC1cXHUxZGJmXFx1MWUwMC1cXHUxZjE1XFx1MWYxOC1cXHUxZjFkXFx1MWYyMC1cXHUxZjQ1XFx1MWY0OC1cXHUxZjRkXFx1MWY1MC1cXHUxZjU3XFx1MWY1OVxcdTFmNWJcXHUxZjVkXFx1MWY1Zi1cXHUxZjdkXFx1MWY4MC1cXHUxZmI0XFx1MWZiNi1cXHUxZmJjXFx1MWZiZVxcdTFmYzItXFx1MWZjNFxcdTFmYzYtXFx1MWZjY1xcdTFmZDAtXFx1MWZkM1xcdTFmZDYtXFx1MWZkYlxcdTFmZTAtXFx1MWZlY1xcdTFmZjItXFx1MWZmNFxcdTFmZjYtXFx1MWZmY1xcdTIwNzFcXHUyMDdmXFx1MjA5MC1cXHUyMDljXFx1MjEwMlxcdTIxMDdcXHUyMTBhLVxcdTIxMTNcXHUyMTE1XFx1MjExOC1cXHUyMTFkXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyYS1cXHUyMTM5XFx1MjEzYy1cXHUyMTNmXFx1MjE0NS1cXHUyMTQ5XFx1MjE0ZVxcdTIxNjAtXFx1MjE4OFxcdTJjMDAtXFx1MmNlNFxcdTJjZWItXFx1MmNlZVxcdTJjZjJcXHUyY2YzXFx1MmQwMC1cXHUyZDI1XFx1MmQyN1xcdTJkMmRcXHUyZDMwLVxcdTJkNjdcXHUyZDZmXFx1MmQ4MC1cXHUyZDk2XFx1MmRhMC1cXHUyZGE2XFx1MmRhOC1cXHUyZGFlXFx1MmRiMC1cXHUyZGI2XFx1MmRiOC1cXHUyZGJlXFx1MmRjMC1cXHUyZGM2XFx1MmRjOC1cXHUyZGNlXFx1MmRkMC1cXHUyZGQ2XFx1MmRkOC1cXHUyZGRlXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDI5XFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNjXFx1MzA0MS1cXHUzMDk2XFx1MzA5Yi1cXHUzMDlmXFx1MzBhMS1cXHUzMGZhXFx1MzBmYy1cXHUzMGZmXFx1MzEwNS1cXHUzMTJmXFx1MzEzMS1cXHUzMThlXFx1MzFhMC1cXHUzMWJmXFx1MzFmMC1cXHUzMWZmXFx1MzQwMC1cXHU0ZGJmXFx1NGUwMC1cXHVhNDhjXFx1YTRkMC1cXHVhNGZkXFx1YTUwMC1cXHVhNjBjXFx1YTYxMC1cXHVhNjFmXFx1YTYyYVxcdWE2MmJcXHVhNjQwLVxcdWE2NmVcXHVhNjdmLVxcdWE2OWRcXHVhNmEwLVxcdWE2ZWZcXHVhNzE3LVxcdWE3MWZcXHVhNzIyLVxcdWE3ODhcXHVhNzhiLVxcdWE3Y2FcXHVhN2QwXFx1YTdkMVxcdWE3ZDNcXHVhN2Q1LVxcdWE3ZDlcXHVhN2YyLVxcdWE4MDFcXHVhODAzLVxcdWE4MDVcXHVhODA3LVxcdWE4MGFcXHVhODBjLVxcdWE4MjJcXHVhODQwLVxcdWE4NzNcXHVhODgyLVxcdWE4YjNcXHVhOGYyLVxcdWE4ZjdcXHVhOGZiXFx1YThmZFxcdWE4ZmVcXHVhOTBhLVxcdWE5MjVcXHVhOTMwLVxcdWE5NDZcXHVhOTYwLVxcdWE5N2NcXHVhOTg0LVxcdWE5YjJcXHVhOWNmXFx1YTllMC1cXHVhOWU0XFx1YTllNi1cXHVhOWVmXFx1YTlmYS1cXHVhOWZlXFx1YWEwMC1cXHVhYTI4XFx1YWE0MC1cXHVhYTQyXFx1YWE0NC1cXHVhYTRiXFx1YWE2MC1cXHVhYTc2XFx1YWE3YVxcdWFhN2UtXFx1YWFhZlxcdWFhYjFcXHVhYWI1XFx1YWFiNlxcdWFhYjktXFx1YWFiZFxcdWFhYzBcXHVhYWMyXFx1YWFkYi1cXHVhYWRkXFx1YWFlMC1cXHVhYWVhXFx1YWFmMi1cXHVhYWY0XFx1YWIwMS1cXHVhYjA2XFx1YWIwOS1cXHVhYjBlXFx1YWIxMS1cXHVhYjE2XFx1YWIyMC1cXHVhYjI2XFx1YWIyOC1cXHVhYjJlXFx1YWIzMC1cXHVhYjVhXFx1YWI1Yy1cXHVhYjY5XFx1YWI3MC1cXHVhYmUyXFx1YWMwMC1cXHVkN2EzXFx1ZDdiMC1cXHVkN2M2XFx1ZDdjYi1cXHVkN2ZiXFx1ZjkwMC1cXHVmYTZkXFx1ZmE3MC1cXHVmYWQ5XFx1ZmIwMC1cXHVmYjA2XFx1ZmIxMy1cXHVmYjE3XFx1ZmIxZFxcdWZiMWYtXFx1ZmIyOFxcdWZiMmEtXFx1ZmIzNlxcdWZiMzgtXFx1ZmIzY1xcdWZiM2VcXHVmYjQwXFx1ZmI0MVxcdWZiNDNcXHVmYjQ0XFx1ZmI0Ni1cXHVmYmIxXFx1ZmJkMy1cXHVmZDNkXFx1ZmQ1MC1cXHVmZDhmXFx1ZmQ5Mi1cXHVmZGM3XFx1ZmRmMC1cXHVmZGZiXFx1ZmU3MC1cXHVmZTc0XFx1ZmU3Ni1cXHVmZWZjXFx1ZmYyMS1cXHVmZjNhXFx1ZmY0MS1cXHVmZjVhXFx1ZmY2Ni1cXHVmZmJlXFx1ZmZjMi1cXHVmZmM3XFx1ZmZjYS1cXHVmZmNmXFx1ZmZkMi1cXHVmZmQ3XFx1ZmZkYS1cXHVmZmRjXCI7XG5cbiAgLy8gVGhlc2UgYXJlIGEgcnVuLWxlbmd0aCBhbmQgb2Zmc2V0IGVuY29kZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlXG4gIC8vID4weGZmZmYgY29kZSBwb2ludHMgdGhhdCBhcmUgYSB2YWxpZCBwYXJ0IG9mIGlkZW50aWZpZXJzLiBUaGVcbiAgLy8gb2Zmc2V0IHN0YXJ0cyBhdCAweDEwMDAwLCBhbmQgZWFjaCBwYWlyIG9mIG51bWJlcnMgcmVwcmVzZW50cyBhblxuICAvLyBvZmZzZXQgdG8gdGhlIG5leHQgcmFuZ2UsIGFuZCB0aGVuIGEgc2l6ZSBvZiB0aGUgcmFuZ2UuXG5cbiAgLy8gUmVzZXJ2ZWQgd29yZCBsaXN0cyBmb3IgdmFyaW91cyBkaWFsZWN0cyBvZiB0aGUgbGFuZ3VhZ2VcblxuICB2YXIgcmVzZXJ2ZWRXb3JkcyA9IHtcbiAgICAzOiBcImFic3RyYWN0IGJvb2xlYW4gYnl0ZSBjaGFyIGNsYXNzIGRvdWJsZSBlbnVtIGV4cG9ydCBleHRlbmRzIGZpbmFsIGZsb2F0IGdvdG8gaW1wbGVtZW50cyBpbXBvcnQgaW50IGludGVyZmFjZSBsb25nIG5hdGl2ZSBwYWNrYWdlIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBzaG9ydCBzdGF0aWMgc3VwZXIgc3luY2hyb25pemVkIHRocm93cyB0cmFuc2llbnQgdm9sYXRpbGVcIixcbiAgICA1OiBcImNsYXNzIGVudW0gZXh0ZW5kcyBzdXBlciBjb25zdCBleHBvcnQgaW1wb3J0XCIsXG4gICAgNjogXCJlbnVtXCIsXG4gICAgc3RyaWN0OiBcImltcGxlbWVudHMgaW50ZXJmYWNlIGxldCBwYWNrYWdlIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBzdGF0aWMgeWllbGRcIixcbiAgICBzdHJpY3RCaW5kOiBcImV2YWwgYXJndW1lbnRzXCJcbiAgfTtcblxuICAvLyBBbmQgdGhlIGtleXdvcmRzXG5cbiAgdmFyIGVjbWE1QW5kTGVzc0tleXdvcmRzID0gXCJicmVhayBjYXNlIGNhdGNoIGNvbnRpbnVlIGRlYnVnZ2VyIGRlZmF1bHQgZG8gZWxzZSBmaW5hbGx5IGZvciBmdW5jdGlvbiBpZiByZXR1cm4gc3dpdGNoIHRocm93IHRyeSB2YXIgd2hpbGUgd2l0aCBudWxsIHRydWUgZmFsc2UgaW5zdGFuY2VvZiB0eXBlb2Ygdm9pZCBkZWxldGUgbmV3IGluIHRoaXNcIjtcblxuICB2YXIga2V5d29yZHMkMSA9IHtcbiAgICA1OiBlY21hNUFuZExlc3NLZXl3b3JkcyxcbiAgICBcIjVtb2R1bGVcIjogZWNtYTVBbmRMZXNzS2V5d29yZHMgKyBcIiBleHBvcnQgaW1wb3J0XCIsXG4gICAgNjogZWNtYTVBbmRMZXNzS2V5d29yZHMgKyBcIiBjb25zdCBjbGFzcyBleHRlbmRzIGV4cG9ydCBpbXBvcnQgc3VwZXJcIlxuICB9O1xuXG4gIHZhciBrZXl3b3JkUmVsYXRpb25hbE9wZXJhdG9yID0gL15pbihzdGFuY2VvZik/JC87XG5cbiAgLy8gIyMgQ2hhcmFjdGVyIGNhdGVnb3JpZXNcblxuICB2YXIgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnQgPSBuZXcgUmVnRXhwKFwiW1wiICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyArIFwiXVwiKTtcbiAgdmFyIG5vbkFTQ0lJaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoXCJbXCIgKyBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzICsgbm9uQVNDSUlpZGVudGlmaWVyQ2hhcnMgKyBcIl1cIik7XG5cbiAgLy8gVGhpcyBoYXMgYSBjb21wbGV4aXR5IGxpbmVhciB0byB0aGUgdmFsdWUgb2YgdGhlIGNvZGUuIFRoZVxuICAvLyBhc3N1bXB0aW9uIGlzIHRoYXQgbG9va2luZyB1cCBhc3RyYWwgaWRlbnRpZmllciBjaGFyYWN0ZXJzIGlzXG4gIC8vIHJhcmUuXG4gIGZ1bmN0aW9uIGlzSW5Bc3RyYWxTZXQoY29kZSwgc2V0KSB7XG4gICAgdmFyIHBvcyA9IDB4MTAwMDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIHBvcyArPSBzZXRbaV07XG4gICAgICBpZiAocG9zID4gY29kZSkgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgcG9zICs9IHNldFtpICsgMV07XG4gICAgICBpZiAocG9zID49IGNvZGUpIHsgcmV0dXJuIHRydWUgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRlc3Qgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBjb2RlIHN0YXJ0cyBhbiBpZGVudGlmaWVyLlxuXG4gIGZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNvZGUsIGFzdHJhbCkge1xuICAgIGlmIChjb2RlIDwgNjUpIHsgcmV0dXJuIGNvZGUgPT09IDM2IH1cbiAgICBpZiAoY29kZSA8IDkxKSB7IHJldHVybiB0cnVlIH1cbiAgICBpZiAoY29kZSA8IDk3KSB7IHJldHVybiBjb2RlID09PSA5NSB9XG4gICAgaWYgKGNvZGUgPCAxMjMpIHsgcmV0dXJuIHRydWUgfVxuICAgIGlmIChjb2RlIDw9IDB4ZmZmZikgeyByZXR1cm4gY29kZSA+PSAweGFhICYmIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSkgfVxuICAgIGlmIChhc3RyYWwgPT09IGZhbHNlKSB7IHJldHVybiBmYWxzZSB9XG4gICAgcmV0dXJuIGlzSW5Bc3RyYWxTZXQoY29kZSwgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMpXG4gIH1cblxuICAvLyBUZXN0IHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgcGFydCBvZiBhbiBpZGVudGlmaWVyLlxuXG4gIGZ1bmN0aW9uIGlzSWRlbnRpZmllckNoYXIoY29kZSwgYXN0cmFsKSB7XG4gICAgaWYgKGNvZGUgPCA0OCkgeyByZXR1cm4gY29kZSA9PT0gMzYgfVxuICAgIGlmIChjb2RlIDwgNTgpIHsgcmV0dXJuIHRydWUgfVxuICAgIGlmIChjb2RlIDwgNjUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBpZiAoY29kZSA8IDkxKSB7IHJldHVybiB0cnVlIH1cbiAgICBpZiAoY29kZSA8IDk3KSB7IHJldHVybiBjb2RlID09PSA5NSB9XG4gICAgaWYgKGNvZGUgPCAxMjMpIHsgcmV0dXJuIHRydWUgfVxuICAgIGlmIChjb2RlIDw9IDB4ZmZmZikgeyByZXR1cm4gY29kZSA+PSAweGFhICYmIG5vbkFTQ0lJaWRlbnRpZmllci50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkpIH1cbiAgICBpZiAoYXN0cmFsID09PSBmYWxzZSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHJldHVybiBpc0luQXN0cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJTdGFydENvZGVzKSB8fCBpc0luQXN0cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJDb2RlcylcbiAgfVxuXG4gIC8vICMjIFRva2VuIHR5cGVzXG5cbiAgLy8gVGhlIGFzc2lnbm1lbnQgb2YgZmluZS1ncmFpbmVkLCBpbmZvcm1hdGlvbi1jYXJyeWluZyB0eXBlIG9iamVjdHNcbiAgLy8gYWxsb3dzIHRoZSB0b2tlbml6ZXIgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGl0IGhhcyBhYm91dCBhXG4gIC8vIHRva2VuIGluIGEgd2F5IHRoYXQgaXMgdmVyeSBjaGVhcCBmb3IgdGhlIHBhcnNlciB0byBsb29rIHVwLlxuXG4gIC8vIEFsbCB0b2tlbiB0eXBlIHZhcmlhYmxlcyBzdGFydCB3aXRoIGFuIHVuZGVyc2NvcmUsIHRvIG1ha2UgdGhlbVxuICAvLyBlYXN5IHRvIHJlY29nbml6ZS5cblxuICAvLyBUaGUgYGJlZm9yZUV4cHJgIHByb3BlcnR5IGlzIHVzZWQgdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4gcmVndWxhclxuICAvLyBleHByZXNzaW9ucyBhbmQgZGl2aXNpb25zLiBJdCBpcyBzZXQgb24gYWxsIHRva2VuIHR5cGVzIHRoYXQgY2FuXG4gIC8vIGJlIGZvbGxvd2VkIGJ5IGFuIGV4cHJlc3Npb24gKHRodXMsIGEgc2xhc2ggYWZ0ZXIgdGhlbSB3b3VsZCBiZSBhXG4gIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbikuXG4gIC8vXG4gIC8vIFRoZSBgc3RhcnRzRXhwcmAgcHJvcGVydHkgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgdG9rZW4gZW5kcyBhXG4gIC8vIGB5aWVsZGAgZXhwcmVzc2lvbi4gSXQgaXMgc2V0IG9uIGFsbCB0b2tlbiB0eXBlcyB0aGF0IGVpdGhlciBjYW5cbiAgLy8gZGlyZWN0bHkgc3RhcnQgYW4gZXhwcmVzc2lvbiAobGlrZSBhIHF1b3RhdGlvbiBtYXJrKSBvciBjYW5cbiAgLy8gY29udGludWUgYW4gZXhwcmVzc2lvbiAobGlrZSB0aGUgYm9keSBvZiBhIHN0cmluZykuXG4gIC8vXG4gIC8vIGBpc0xvb3BgIG1hcmtzIGEga2V5d29yZCBhcyBzdGFydGluZyBhIGxvb3AsIHdoaWNoIGlzIGltcG9ydGFudFxuICAvLyB0byBrbm93IHdoZW4gcGFyc2luZyBhIGxhYmVsLCBpbiBvcmRlciB0byBhbGxvdyBvciBkaXNhbGxvd1xuICAvLyBjb250aW51ZSBqdW1wcyB0byB0aGF0IGxhYmVsLlxuXG4gIHZhciBUb2tlblR5cGUgPSBmdW5jdGlvbiBUb2tlblR5cGUobGFiZWwsIGNvbmYpIHtcbiAgICBpZiAoIGNvbmYgPT09IHZvaWQgMCApIGNvbmYgPSB7fTtcblxuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICB0aGlzLmtleXdvcmQgPSBjb25mLmtleXdvcmQ7XG4gICAgdGhpcy5iZWZvcmVFeHByID0gISFjb25mLmJlZm9yZUV4cHI7XG4gICAgdGhpcy5zdGFydHNFeHByID0gISFjb25mLnN0YXJ0c0V4cHI7XG4gICAgdGhpcy5pc0xvb3AgPSAhIWNvbmYuaXNMb29wO1xuICAgIHRoaXMuaXNBc3NpZ24gPSAhIWNvbmYuaXNBc3NpZ247XG4gICAgdGhpcy5wcmVmaXggPSAhIWNvbmYucHJlZml4O1xuICAgIHRoaXMucG9zdGZpeCA9ICEhY29uZi5wb3N0Zml4O1xuICAgIHRoaXMuYmlub3AgPSBjb25mLmJpbm9wIHx8IG51bGw7XG4gICAgdGhpcy51cGRhdGVDb250ZXh0ID0gbnVsbDtcbiAgfTtcblxuICBmdW5jdGlvbiBiaW5vcChuYW1lLCBwcmVjKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlblR5cGUobmFtZSwge2JlZm9yZUV4cHI6IHRydWUsIGJpbm9wOiBwcmVjfSlcbiAgfVxuICB2YXIgYmVmb3JlRXhwciA9IHtiZWZvcmVFeHByOiB0cnVlfSwgc3RhcnRzRXhwciA9IHtzdGFydHNFeHByOiB0cnVlfTtcblxuICAvLyBNYXAga2V5d29yZCBuYW1lcyB0byB0b2tlbiB0eXBlcy5cblxuICB2YXIga2V5d29yZHMgPSB7fTtcblxuICAvLyBTdWNjaW5jdCBkZWZpbml0aW9ucyBvZiBrZXl3b3JkIHRva2VuIHR5cGVzXG4gIGZ1bmN0aW9uIGt3KG5hbWUsIG9wdGlvbnMpIHtcbiAgICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICAgIG9wdGlvbnMua2V5d29yZCA9IG5hbWU7XG4gICAgcmV0dXJuIGtleXdvcmRzW25hbWVdID0gbmV3IFRva2VuVHlwZShuYW1lLCBvcHRpb25zKVxuICB9XG5cbiAgdmFyIHR5cGVzJDEgPSB7XG4gICAgbnVtOiBuZXcgVG9rZW5UeXBlKFwibnVtXCIsIHN0YXJ0c0V4cHIpLFxuICAgIHJlZ2V4cDogbmV3IFRva2VuVHlwZShcInJlZ2V4cFwiLCBzdGFydHNFeHByKSxcbiAgICBzdHJpbmc6IG5ldyBUb2tlblR5cGUoXCJzdHJpbmdcIiwgc3RhcnRzRXhwciksXG4gICAgbmFtZTogbmV3IFRva2VuVHlwZShcIm5hbWVcIiwgc3RhcnRzRXhwciksXG4gICAgcHJpdmF0ZUlkOiBuZXcgVG9rZW5UeXBlKFwicHJpdmF0ZUlkXCIsIHN0YXJ0c0V4cHIpLFxuICAgIGVvZjogbmV3IFRva2VuVHlwZShcImVvZlwiKSxcblxuICAgIC8vIFB1bmN0dWF0aW9uIHRva2VuIHR5cGVzLlxuICAgIGJyYWNrZXRMOiBuZXcgVG9rZW5UeXBlKFwiW1wiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICAgIGJyYWNrZXRSOiBuZXcgVG9rZW5UeXBlKFwiXVwiKSxcbiAgICBicmFjZUw6IG5ldyBUb2tlblR5cGUoXCJ7XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gICAgYnJhY2VSOiBuZXcgVG9rZW5UeXBlKFwifVwiKSxcbiAgICBwYXJlbkw6IG5ldyBUb2tlblR5cGUoXCIoXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gICAgcGFyZW5SOiBuZXcgVG9rZW5UeXBlKFwiKVwiKSxcbiAgICBjb21tYTogbmV3IFRva2VuVHlwZShcIixcIiwgYmVmb3JlRXhwciksXG4gICAgc2VtaTogbmV3IFRva2VuVHlwZShcIjtcIiwgYmVmb3JlRXhwciksXG4gICAgY29sb246IG5ldyBUb2tlblR5cGUoXCI6XCIsIGJlZm9yZUV4cHIpLFxuICAgIGRvdDogbmV3IFRva2VuVHlwZShcIi5cIiksXG4gICAgcXVlc3Rpb246IG5ldyBUb2tlblR5cGUoXCI/XCIsIGJlZm9yZUV4cHIpLFxuICAgIHF1ZXN0aW9uRG90OiBuZXcgVG9rZW5UeXBlKFwiPy5cIiksXG4gICAgYXJyb3c6IG5ldyBUb2tlblR5cGUoXCI9PlwiLCBiZWZvcmVFeHByKSxcbiAgICB0ZW1wbGF0ZTogbmV3IFRva2VuVHlwZShcInRlbXBsYXRlXCIpLFxuICAgIGludmFsaWRUZW1wbGF0ZTogbmV3IFRva2VuVHlwZShcImludmFsaWRUZW1wbGF0ZVwiKSxcbiAgICBlbGxpcHNpczogbmV3IFRva2VuVHlwZShcIi4uLlwiLCBiZWZvcmVFeHByKSxcbiAgICBiYWNrUXVvdGU6IG5ldyBUb2tlblR5cGUoXCJgXCIsIHN0YXJ0c0V4cHIpLFxuICAgIGRvbGxhckJyYWNlTDogbmV3IFRva2VuVHlwZShcIiR7XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG5cbiAgICAvLyBPcGVyYXRvcnMuIFRoZXNlIGNhcnJ5IHNldmVyYWwga2luZHMgb2YgcHJvcGVydGllcyB0byBoZWxwIHRoZVxuICAgIC8vIHBhcnNlciB1c2UgdGhlbSBwcm9wZXJseSAodGhlIHByZXNlbmNlIG9mIHRoZXNlIHByb3BlcnRpZXMgaXNcbiAgICAvLyB3aGF0IGNhdGVnb3JpemVzIHRoZW0gYXMgb3BlcmF0b3JzKS5cbiAgICAvL1xuICAgIC8vIGBiaW5vcGAsIHdoZW4gcHJlc2VudCwgc3BlY2lmaWVzIHRoYXQgdGhpcyBvcGVyYXRvciBpcyBhIGJpbmFyeVxuICAgIC8vIG9wZXJhdG9yLCBhbmQgd2lsbCByZWZlciB0byBpdHMgcHJlY2VkZW5jZS5cbiAgICAvL1xuICAgIC8vIGBwcmVmaXhgIGFuZCBgcG9zdGZpeGAgbWFyayB0aGUgb3BlcmF0b3IgYXMgYSBwcmVmaXggb3IgcG9zdGZpeFxuICAgIC8vIHVuYXJ5IG9wZXJhdG9yLlxuICAgIC8vXG4gICAgLy8gYGlzQXNzaWduYCBtYXJrcyBhbGwgb2YgYD1gLCBgKz1gLCBgLT1gIGV0Y2V0ZXJhLCB3aGljaCBhY3QgYXNcbiAgICAvLyBiaW5hcnkgb3BlcmF0b3JzIHdpdGggYSB2ZXJ5IGxvdyBwcmVjZWRlbmNlLCB0aGF0IHNob3VsZCByZXN1bHRcbiAgICAvLyBpbiBBc3NpZ25tZW50RXhwcmVzc2lvbiBub2Rlcy5cblxuICAgIGVxOiBuZXcgVG9rZW5UeXBlKFwiPVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgaXNBc3NpZ246IHRydWV9KSxcbiAgICBhc3NpZ246IG5ldyBUb2tlblR5cGUoXCJfPVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgaXNBc3NpZ246IHRydWV9KSxcbiAgICBpbmNEZWM6IG5ldyBUb2tlblR5cGUoXCIrKy8tLVwiLCB7cHJlZml4OiB0cnVlLCBwb3N0Zml4OiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gICAgcHJlZml4OiBuZXcgVG9rZW5UeXBlKFwiIS9+XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBwcmVmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgICBsb2dpY2FsT1I6IGJpbm9wKFwifHxcIiwgMSksXG4gICAgbG9naWNhbEFORDogYmlub3AoXCImJlwiLCAyKSxcbiAgICBiaXR3aXNlT1I6IGJpbm9wKFwifFwiLCAzKSxcbiAgICBiaXR3aXNlWE9SOiBiaW5vcChcIl5cIiwgNCksXG4gICAgYml0d2lzZUFORDogYmlub3AoXCImXCIsIDUpLFxuICAgIGVxdWFsaXR5OiBiaW5vcChcIj09LyE9Lz09PS8hPT1cIiwgNiksXG4gICAgcmVsYXRpb25hbDogYmlub3AoXCI8Lz4vPD0vPj1cIiwgNyksXG4gICAgYml0U2hpZnQ6IGJpbm9wKFwiPDwvPj4vPj4+XCIsIDgpLFxuICAgIHBsdXNNaW46IG5ldyBUb2tlblR5cGUoXCIrLy1cIiwge2JlZm9yZUV4cHI6IHRydWUsIGJpbm9wOiA5LCBwcmVmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgICBtb2R1bG86IGJpbm9wKFwiJVwiLCAxMCksXG4gICAgc3RhcjogYmlub3AoXCIqXCIsIDEwKSxcbiAgICBzbGFzaDogYmlub3AoXCIvXCIsIDEwKSxcbiAgICBzdGFyc3RhcjogbmV3IFRva2VuVHlwZShcIioqXCIsIHtiZWZvcmVFeHByOiB0cnVlfSksXG4gICAgY29hbGVzY2U6IGJpbm9wKFwiPz9cIiwgMSksXG5cbiAgICAvLyBLZXl3b3JkIHRva2VuIHR5cGVzLlxuICAgIF9icmVhazoga3coXCJicmVha1wiKSxcbiAgICBfY2FzZToga3coXCJjYXNlXCIsIGJlZm9yZUV4cHIpLFxuICAgIF9jYXRjaDoga3coXCJjYXRjaFwiKSxcbiAgICBfY29udGludWU6IGt3KFwiY29udGludWVcIiksXG4gICAgX2RlYnVnZ2VyOiBrdyhcImRlYnVnZ2VyXCIpLFxuICAgIF9kZWZhdWx0OiBrdyhcImRlZmF1bHRcIiwgYmVmb3JlRXhwciksXG4gICAgX2RvOiBrdyhcImRvXCIsIHtpc0xvb3A6IHRydWUsIGJlZm9yZUV4cHI6IHRydWV9KSxcbiAgICBfZWxzZToga3coXCJlbHNlXCIsIGJlZm9yZUV4cHIpLFxuICAgIF9maW5hbGx5OiBrdyhcImZpbmFsbHlcIiksXG4gICAgX2Zvcjoga3coXCJmb3JcIiwge2lzTG9vcDogdHJ1ZX0pLFxuICAgIF9mdW5jdGlvbjoga3coXCJmdW5jdGlvblwiLCBzdGFydHNFeHByKSxcbiAgICBfaWY6IGt3KFwiaWZcIiksXG4gICAgX3JldHVybjoga3coXCJyZXR1cm5cIiwgYmVmb3JlRXhwciksXG4gICAgX3N3aXRjaDoga3coXCJzd2l0Y2hcIiksXG4gICAgX3Rocm93OiBrdyhcInRocm93XCIsIGJlZm9yZUV4cHIpLFxuICAgIF90cnk6IGt3KFwidHJ5XCIpLFxuICAgIF92YXI6IGt3KFwidmFyXCIpLFxuICAgIF9jb25zdDoga3coXCJjb25zdFwiKSxcbiAgICBfd2hpbGU6IGt3KFwid2hpbGVcIiwge2lzTG9vcDogdHJ1ZX0pLFxuICAgIF93aXRoOiBrdyhcIndpdGhcIiksXG4gICAgX25ldzoga3coXCJuZXdcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgICBfdGhpczoga3coXCJ0aGlzXCIsIHN0YXJ0c0V4cHIpLFxuICAgIF9zdXBlcjoga3coXCJzdXBlclwiLCBzdGFydHNFeHByKSxcbiAgICBfY2xhc3M6IGt3KFwiY2xhc3NcIiwgc3RhcnRzRXhwciksXG4gICAgX2V4dGVuZHM6IGt3KFwiZXh0ZW5kc1wiLCBiZWZvcmVFeHByKSxcbiAgICBfZXhwb3J0OiBrdyhcImV4cG9ydFwiKSxcbiAgICBfaW1wb3J0OiBrdyhcImltcG9ydFwiLCBzdGFydHNFeHByKSxcbiAgICBfbnVsbDoga3coXCJudWxsXCIsIHN0YXJ0c0V4cHIpLFxuICAgIF90cnVlOiBrdyhcInRydWVcIiwgc3RhcnRzRXhwciksXG4gICAgX2ZhbHNlOiBrdyhcImZhbHNlXCIsIHN0YXJ0c0V4cHIpLFxuICAgIF9pbjoga3coXCJpblwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgYmlub3A6IDd9KSxcbiAgICBfaW5zdGFuY2VvZjoga3coXCJpbnN0YW5jZW9mXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBiaW5vcDogN30pLFxuICAgIF90eXBlb2Y6IGt3KFwidHlwZW9mXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBwcmVmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgICBfdm9pZDoga3coXCJ2b2lkXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBwcmVmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgICBfZGVsZXRlOiBrdyhcImRlbGV0ZVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgcHJlZml4OiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSlcbiAgfTtcblxuICAvLyBNYXRjaGVzIGEgd2hvbGUgbGluZSBicmVhayAod2hlcmUgQ1JMRiBpcyBjb25zaWRlcmVkIGEgc2luZ2xlXG4gIC8vIGxpbmUgYnJlYWspLiBVc2VkIHRvIGNvdW50IGxpbmVzLlxuXG4gIHZhciBsaW5lQnJlYWsgPSAvXFxyXFxuP3xcXG58XFx1MjAyOHxcXHUyMDI5LztcbiAgdmFyIGxpbmVCcmVha0cgPSBuZXcgUmVnRXhwKGxpbmVCcmVhay5zb3VyY2UsIFwiZ1wiKTtcblxuICBmdW5jdGlvbiBpc05ld0xpbmUoY29kZSkge1xuICAgIHJldHVybiBjb2RlID09PSAxMCB8fCBjb2RlID09PSAxMyB8fCBjb2RlID09PSAweDIwMjggfHwgY29kZSA9PT0gMHgyMDI5XG4gIH1cblxuICBmdW5jdGlvbiBuZXh0TGluZUJyZWFrKGNvZGUsIGZyb20sIGVuZCkge1xuICAgIGlmICggZW5kID09PSB2b2lkIDAgKSBlbmQgPSBjb2RlLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSBmcm9tOyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHZhciBuZXh0ID0gY29kZS5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGlzTmV3TGluZShuZXh0KSlcbiAgICAgICAgeyByZXR1cm4gaSA8IGVuZCAtIDEgJiYgbmV4dCA9PT0gMTMgJiYgY29kZS5jaGFyQ29kZUF0KGkgKyAxKSA9PT0gMTAgPyBpICsgMiA6IGkgKyAxIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xXG4gIH1cblxuICB2YXIgbm9uQVNDSUl3aGl0ZXNwYWNlID0gL1tcXHUxNjgwXFx1MjAwMC1cXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1ZmVmZl0vO1xuXG4gIHZhciBza2lwV2hpdGVTcGFjZSA9IC8oPzpcXHN8XFwvXFwvLip8XFwvXFwqW15dKj9cXCpcXC8pKi9nO1xuXG4gIHZhciByZWYgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duUHJvcGVydHkgPSByZWYuaGFzT3duUHJvcGVydHk7XG4gIHZhciB0b1N0cmluZyA9IHJlZi50b1N0cmluZztcblxuICB2YXIgaGFzT3duID0gT2JqZWN0Lmhhc093biB8fCAoZnVuY3Rpb24gKG9iaiwgcHJvcE5hbWUpIHsgcmV0dXJuIChcbiAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcE5hbWUpXG4gICk7IH0pO1xuXG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCAoZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gKFxuICAgIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiXG4gICk7IH0pO1xuXG4gIGZ1bmN0aW9uIHdvcmRzUmVnZXhwKHdvcmRzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyB3b3Jkcy5yZXBsYWNlKC8gL2csIFwifFwiKSArIFwiKSRcIilcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvZGVQb2ludFRvU3RyaW5nKGNvZGUpIHtcbiAgICAvLyBVVEYtMTYgRGVjb2RpbmdcbiAgICBpZiAoY29kZSA8PSAweEZGRkYpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgfVxuICAgIGNvZGUgLT0gMHgxMDAwMDtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgoY29kZSA+PiAxMCkgKyAweEQ4MDAsIChjb2RlICYgMTAyMykgKyAweERDMDApXG4gIH1cblxuICB2YXIgbG9uZVN1cnJvZ2F0ZSA9IC8oPzpbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkvO1xuXG4gIC8vIFRoZXNlIGFyZSB1c2VkIHdoZW4gYG9wdGlvbnMubG9jYXRpb25zYCBpcyBvbiwgZm9yIHRoZVxuICAvLyBgc3RhcnRMb2NgIGFuZCBgZW5kTG9jYCBwcm9wZXJ0aWVzLlxuXG4gIHZhciBQb3NpdGlvbiA9IGZ1bmN0aW9uIFBvc2l0aW9uKGxpbmUsIGNvbCkge1xuICAgIHRoaXMubGluZSA9IGxpbmU7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2w7XG4gIH07XG5cbiAgUG9zaXRpb24ucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uIG9mZnNldCAobikge1xuICAgIHJldHVybiBuZXcgUG9zaXRpb24odGhpcy5saW5lLCB0aGlzLmNvbHVtbiArIG4pXG4gIH07XG5cbiAgdmFyIFNvdXJjZUxvY2F0aW9uID0gZnVuY3Rpb24gU291cmNlTG9jYXRpb24ocCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICBpZiAocC5zb3VyY2VGaWxlICE9PSBudWxsKSB7IHRoaXMuc291cmNlID0gcC5zb3VyY2VGaWxlOyB9XG4gIH07XG5cbiAgLy8gVGhlIGBnZXRMaW5lSW5mb2AgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWZ1bCB3aGVuIHRoZVxuICAvLyBgbG9jYXRpb25zYCBvcHRpb24gaXMgb2ZmIChmb3IgcGVyZm9ybWFuY2UgcmVhc29ucykgYW5kIHlvdVxuICAvLyB3YW50IHRvIGZpbmQgdGhlIGxpbmUvY29sdW1uIHBvc2l0aW9uIGZvciBhIGdpdmVuIGNoYXJhY3RlclxuICAvLyBvZmZzZXQuIGBpbnB1dGAgc2hvdWxkIGJlIHRoZSBjb2RlIHN0cmluZyB0aGF0IHRoZSBvZmZzZXQgcmVmZXJzXG4gIC8vIGludG8uXG5cbiAgZnVuY3Rpb24gZ2V0TGluZUluZm8oaW5wdXQsIG9mZnNldCkge1xuICAgIGZvciAodmFyIGxpbmUgPSAxLCBjdXIgPSAwOzspIHtcbiAgICAgIHZhciBuZXh0QnJlYWsgPSBuZXh0TGluZUJyZWFrKGlucHV0LCBjdXIsIG9mZnNldCk7XG4gICAgICBpZiAobmV4dEJyZWFrIDwgMCkgeyByZXR1cm4gbmV3IFBvc2l0aW9uKGxpbmUsIG9mZnNldCAtIGN1cikgfVxuICAgICAgKytsaW5lO1xuICAgICAgY3VyID0gbmV4dEJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEEgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgZ2l2ZW4gdG8gY29uZmlndXJlIHRoZSBwYXJzZXIgcHJvY2Vzcy5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBhcmUgcmVjb2duaXplZCAob25seSBgZWNtYVZlcnNpb25gIGlzIHJlcXVpcmVkKTpcblxuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgLy8gYGVjbWFWZXJzaW9uYCBpbmRpY2F0ZXMgdGhlIEVDTUFTY3JpcHQgdmVyc2lvbiB0byBwYXJzZS4gTXVzdCBiZVxuICAgIC8vIGVpdGhlciAzLCA1LCA2IChvciAyMDE1KSwgNyAoMjAxNiksIDggKDIwMTcpLCA5ICgyMDE4KSwgMTBcbiAgICAvLyAoMjAxOSksIDExICgyMDIwKSwgMTIgKDIwMjEpLCAxMyAoMjAyMiksIDE0ICgyMDIzKSwgb3IgYFwibGF0ZXN0XCJgXG4gICAgLy8gKHRoZSBsYXRlc3QgdmVyc2lvbiB0aGUgbGlicmFyeSBzdXBwb3J0cykuIFRoaXMgaW5mbHVlbmNlc1xuICAgIC8vIHN1cHBvcnQgZm9yIHN0cmljdCBtb2RlLCB0aGUgc2V0IG9mIHJlc2VydmVkIHdvcmRzLCBhbmQgc3VwcG9ydFxuICAgIC8vIGZvciBuZXcgc3ludGF4IGZlYXR1cmVzLlxuICAgIGVjbWFWZXJzaW9uOiBudWxsLFxuICAgIC8vIGBzb3VyY2VUeXBlYCBpbmRpY2F0ZXMgdGhlIG1vZGUgdGhlIGNvZGUgc2hvdWxkIGJlIHBhcnNlZCBpbi5cbiAgICAvLyBDYW4gYmUgZWl0aGVyIGBcInNjcmlwdFwiYCBvciBgXCJtb2R1bGVcImAuIFRoaXMgaW5mbHVlbmNlcyBnbG9iYWxcbiAgICAvLyBzdHJpY3QgbW9kZSBhbmQgcGFyc2luZyBvZiBgaW1wb3J0YCBhbmQgYGV4cG9ydGAgZGVjbGFyYXRpb25zLlxuICAgIHNvdXJjZVR5cGU6IFwic2NyaXB0XCIsXG4gICAgLy8gYG9uSW5zZXJ0ZWRTZW1pY29sb25gIGNhbiBiZSBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWRcbiAgICAvLyB3aGVuIGEgc2VtaWNvbG9uIGlzIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQuIEl0IHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb21tYSBhcyBhbiBvZmZzZXQsIGFuZCBpZiBgbG9jYXRpb25zYCBpc1xuICAgIC8vIGVuYWJsZWQsIGl0IGlzIGdpdmVuIHRoZSBsb2NhdGlvbiBhcyBhIGB7bGluZSwgY29sdW1ufWAgb2JqZWN0XG4gICAgLy8gYXMgc2Vjb25kIGFyZ3VtZW50LlxuICAgIG9uSW5zZXJ0ZWRTZW1pY29sb246IG51bGwsXG4gICAgLy8gYG9uVHJhaWxpbmdDb21tYWAgaXMgc2ltaWxhciB0byBgb25JbnNlcnRlZFNlbWljb2xvbmAsIGJ1dCBmb3JcbiAgICAvLyB0cmFpbGluZyBjb21tYXMuXG4gICAgb25UcmFpbGluZ0NvbW1hOiBudWxsLFxuICAgIC8vIEJ5IGRlZmF1bHQsIHJlc2VydmVkIHdvcmRzIGFyZSBvbmx5IGVuZm9yY2VkIGlmIGVjbWFWZXJzaW9uID49IDUuXG4gICAgLy8gU2V0IGBhbGxvd1Jlc2VydmVkYCB0byBhIGJvb2xlYW4gdmFsdWUgdG8gZXhwbGljaXRseSB0dXJuIHRoaXMgb25cbiAgICAvLyBhbiBvZmYuIFdoZW4gdGhpcyBvcHRpb24gaGFzIHRoZSB2YWx1ZSBcIm5ldmVyXCIsIHJlc2VydmVkIHdvcmRzXG4gICAgLy8gYW5kIGtleXdvcmRzIGNhbiBhbHNvIG5vdCBiZSB1c2VkIGFzIHByb3BlcnR5IG5hbWVzLlxuICAgIGFsbG93UmVzZXJ2ZWQ6IG51bGwsXG4gICAgLy8gV2hlbiBlbmFibGVkLCBhIHJldHVybiBhdCB0aGUgdG9wIGxldmVsIGlzIG5vdCBjb25zaWRlcmVkIGFuXG4gICAgLy8gZXJyb3IuXG4gICAgYWxsb3dSZXR1cm5PdXRzaWRlRnVuY3Rpb246IGZhbHNlLFxuICAgIC8vIFdoZW4gZW5hYmxlZCwgaW1wb3J0L2V4cG9ydCBzdGF0ZW1lbnRzIGFyZSBub3QgY29uc3RyYWluZWQgdG9cbiAgICAvLyBhcHBlYXJpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSwgYW5kIGFuIGltcG9ydC5tZXRhIGV4cHJlc3Npb25cbiAgICAvLyBpbiBhIHNjcmlwdCBpc24ndCBjb25zaWRlcmVkIGFuIGVycm9yLlxuICAgIGFsbG93SW1wb3J0RXhwb3J0RXZlcnl3aGVyZTogZmFsc2UsXG4gICAgLy8gQnkgZGVmYXVsdCwgYXdhaXQgaWRlbnRpZmllcnMgYXJlIGFsbG93ZWQgdG8gYXBwZWFyIGF0IHRoZSB0b3AtbGV2ZWwgc2NvcGUgb25seSBpZiBlY21hVmVyc2lvbiA+PSAyMDIyLlxuICAgIC8vIFdoZW4gZW5hYmxlZCwgYXdhaXQgaWRlbnRpZmllcnMgYXJlIGFsbG93ZWQgdG8gYXBwZWFyIGF0IHRoZSB0b3AtbGV2ZWwgc2NvcGUsXG4gICAgLy8gYnV0IHRoZXkgYXJlIHN0aWxsIG5vdCBhbGxvd2VkIGluIG5vbi1hc3luYyBmdW5jdGlvbnMuXG4gICAgYWxsb3dBd2FpdE91dHNpZGVGdW5jdGlvbjogbnVsbCxcbiAgICAvLyBXaGVuIGVuYWJsZWQsIHN1cGVyIGlkZW50aWZpZXJzIGFyZSBub3QgY29uc3RyYWluZWQgdG9cbiAgICAvLyBhcHBlYXJpbmcgaW4gbWV0aG9kcyBhbmQgZG8gbm90IHJhaXNlIGFuIGVycm9yIHdoZW4gdGhleSBhcHBlYXIgZWxzZXdoZXJlLlxuICAgIGFsbG93U3VwZXJPdXRzaWRlTWV0aG9kOiBudWxsLFxuICAgIC8vIFdoZW4gZW5hYmxlZCwgaGFzaGJhbmcgZGlyZWN0aXZlIGluIHRoZSBiZWdpbm5pbmcgb2YgZmlsZSBpc1xuICAgIC8vIGFsbG93ZWQgYW5kIHRyZWF0ZWQgYXMgYSBsaW5lIGNvbW1lbnQuIEVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuXG4gICAgLy8gYGVjbWFWZXJzaW9uYCA+PSAyMDIzLlxuICAgIGFsbG93SGFzaEJhbmc6IGZhbHNlLFxuICAgIC8vIFdoZW4gYGxvY2F0aW9uc2AgaXMgb24sIGBsb2NgIHByb3BlcnRpZXMgaG9sZGluZyBvYmplY3RzIHdpdGhcbiAgICAvLyBgc3RhcnRgIGFuZCBgZW5kYCBwcm9wZXJ0aWVzIGluIGB7bGluZSwgY29sdW1ufWAgZm9ybSAod2l0aFxuICAgIC8vIGxpbmUgYmVpbmcgMS1iYXNlZCBhbmQgY29sdW1uIDAtYmFzZWQpIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlXG4gICAgLy8gbm9kZXMuXG4gICAgbG9jYXRpb25zOiBmYWxzZSxcbiAgICAvLyBBIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgYXMgYG9uVG9rZW5gIG9wdGlvbiwgd2hpY2ggd2lsbFxuICAgIC8vIGNhdXNlIEFjb3JuIHRvIGNhbGwgdGhhdCBmdW5jdGlvbiB3aXRoIG9iamVjdCBpbiB0aGUgc2FtZVxuICAgIC8vIGZvcm1hdCBhcyB0b2tlbnMgcmV0dXJuZWQgZnJvbSBgdG9rZW5pemVyKCkuZ2V0VG9rZW4oKWAuIE5vdGVcbiAgICAvLyB0aGF0IHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2FsbCB0aGUgcGFyc2VyIGZyb20gdGhlXG4gICAgLy8gY2FsbGJhY2vigJR0aGF0IHdpbGwgY29ycnVwdCBpdHMgaW50ZXJuYWwgc3RhdGUuXG4gICAgb25Ub2tlbjogbnVsbCxcbiAgICAvLyBBIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgYXMgYG9uQ29tbWVudGAgb3B0aW9uLCB3aGljaCB3aWxsXG4gICAgLy8gY2F1c2UgQWNvcm4gdG8gY2FsbCB0aGF0IGZ1bmN0aW9uIHdpdGggYChibG9jaywgdGV4dCwgc3RhcnQsXG4gICAgLy8gZW5kKWAgcGFyYW1ldGVycyB3aGVuZXZlciBhIGNvbW1lbnQgaXMgc2tpcHBlZC4gYGJsb2NrYCBpcyBhXG4gICAgLy8gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBpcyBhIGJsb2NrIChgLyogKi9gKSBjb21tZW50LFxuICAgIC8vIGB0ZXh0YCBpcyB0aGUgY29udGVudCBvZiB0aGUgY29tbWVudCwgYW5kIGBzdGFydGAgYW5kIGBlbmRgIGFyZVxuICAgIC8vIGNoYXJhY3RlciBvZmZzZXRzIHRoYXQgZGVub3RlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBjb21tZW50LlxuICAgIC8vIFdoZW4gdGhlIGBsb2NhdGlvbnNgIG9wdGlvbiBpcyBvbiwgdHdvIG1vcmUgcGFyYW1ldGVycyBhcmVcbiAgICAvLyBwYXNzZWQsIHRoZSBmdWxsIGB7bGluZSwgY29sdW1ufWAgbG9jYXRpb25zIG9mIHRoZSBzdGFydCBhbmRcbiAgICAvLyBlbmQgb2YgdGhlIGNvbW1lbnRzLiBOb3RlIHRoYXQgeW91IGFyZSBub3QgYWxsb3dlZCB0byBjYWxsIHRoZVxuICAgIC8vIHBhcnNlciBmcm9tIHRoZSBjYWxsYmFja+KAlHRoYXQgd2lsbCBjb3JydXB0IGl0cyBpbnRlcm5hbCBzdGF0ZS5cbiAgICBvbkNvbW1lbnQ6IG51bGwsXG4gICAgLy8gTm9kZXMgaGF2ZSB0aGVpciBzdGFydCBhbmQgZW5kIGNoYXJhY3RlcnMgb2Zmc2V0cyByZWNvcmRlZCBpblxuICAgIC8vIGBzdGFydGAgYW5kIGBlbmRgIHByb3BlcnRpZXMgKGRpcmVjdGx5IG9uIHRoZSBub2RlLCByYXRoZXIgdGhhblxuICAgIC8vIHRoZSBgbG9jYCBvYmplY3QsIHdoaWNoIGhvbGRzIGxpbmUvY29sdW1uIGRhdGEuIFRvIGFsc28gYWRkIGFcbiAgICAvLyBbc2VtaS1zdGFuZGFyZGl6ZWRdW3JhbmdlXSBgcmFuZ2VgIHByb3BlcnR5IGhvbGRpbmcgYSBgW3N0YXJ0LFxuICAgIC8vIGVuZF1gIGFycmF5IHdpdGggdGhlIHNhbWUgbnVtYmVycywgc2V0IHRoZSBgcmFuZ2VzYCBvcHRpb24gdG9cbiAgICAvLyBgdHJ1ZWAuXG4gICAgLy9cbiAgICAvLyBbcmFuZ2VdOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU2NzhcbiAgICByYW5nZXM6IGZhbHNlLFxuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRvIHBhcnNlIG11bHRpcGxlIGZpbGVzIGludG8gYSBzaW5nbGUgQVNUIGJ5XG4gICAgLy8gcGFzc2luZyB0aGUgdHJlZSBwcm9kdWNlZCBieSBwYXJzaW5nIHRoZSBmaXJzdCBmaWxlIGFzXG4gICAgLy8gYHByb2dyYW1gIG9wdGlvbiBpbiBzdWJzZXF1ZW50IHBhcnNlcy4gVGhpcyB3aWxsIGFkZCB0aGVcbiAgICAvLyB0b3BsZXZlbCBmb3JtcyBvZiB0aGUgcGFyc2VkIGZpbGUgdG8gdGhlIGBQcm9ncmFtYCAodG9wKSBub2RlXG4gICAgLy8gb2YgYW4gZXhpc3RpbmcgcGFyc2UgdHJlZS5cbiAgICBwcm9ncmFtOiBudWxsLFxuICAgIC8vIFdoZW4gYGxvY2F0aW9uc2AgaXMgb24sIHlvdSBjYW4gcGFzcyB0aGlzIHRvIHJlY29yZCB0aGUgc291cmNlXG4gICAgLy8gZmlsZSBpbiBldmVyeSBub2RlJ3MgYGxvY2Agb2JqZWN0LlxuICAgIHNvdXJjZUZpbGU6IG51bGwsXG4gICAgLy8gVGhpcyB2YWx1ZSwgaWYgZ2l2ZW4sIGlzIHN0b3JlZCBpbiBldmVyeSBub2RlLCB3aGV0aGVyXG4gICAgLy8gYGxvY2F0aW9uc2AgaXMgb24gb3Igb2ZmLlxuICAgIGRpcmVjdFNvdXJjZUZpbGU6IG51bGwsXG4gICAgLy8gV2hlbiBlbmFibGVkLCBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25zIGFyZSByZXByZXNlbnRlZCBieVxuICAgIC8vIChub24tc3RhbmRhcmQpIFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIG5vZGVzXG4gICAgcHJlc2VydmVQYXJlbnM6IGZhbHNlXG4gIH07XG5cbiAgLy8gSW50ZXJwcmV0IGFuZCBkZWZhdWx0IGFuIG9wdGlvbnMgb2JqZWN0XG5cbiAgdmFyIHdhcm5lZEFib3V0RWNtYVZlcnNpb24gPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnZXRPcHRpb25zKG9wdHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHt9O1xuXG4gICAgZm9yICh2YXIgb3B0IGluIGRlZmF1bHRPcHRpb25zKVxuICAgICAgeyBvcHRpb25zW29wdF0gPSBvcHRzICYmIGhhc093bihvcHRzLCBvcHQpID8gb3B0c1tvcHRdIDogZGVmYXVsdE9wdGlvbnNbb3B0XTsgfVxuXG4gICAgaWYgKG9wdGlvbnMuZWNtYVZlcnNpb24gPT09IFwibGF0ZXN0XCIpIHtcbiAgICAgIG9wdGlvbnMuZWNtYVZlcnNpb24gPSAxZTg7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmVjbWFWZXJzaW9uID09IG51bGwpIHtcbiAgICAgIGlmICghd2FybmVkQWJvdXRFY21hVmVyc2lvbiAmJiB0eXBlb2YgY29uc29sZSA9PT0gXCJvYmplY3RcIiAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgd2FybmVkQWJvdXRFY21hVmVyc2lvbiA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlNpbmNlIEFjb3JuIDguMC4wLCBvcHRpb25zLmVjbWFWZXJzaW9uIGlzIHJlcXVpcmVkLlxcbkRlZmF1bHRpbmcgdG8gMjAyMCwgYnV0IHRoaXMgd2lsbCBzdG9wIHdvcmtpbmcgaW4gdGhlIGZ1dHVyZS5cIik7XG4gICAgICB9XG4gICAgICBvcHRpb25zLmVjbWFWZXJzaW9uID0gMTE7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmVjbWFWZXJzaW9uID49IDIwMTUpIHtcbiAgICAgIG9wdGlvbnMuZWNtYVZlcnNpb24gLT0gMjAwOTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hbGxvd1Jlc2VydmVkID09IG51bGwpXG4gICAgICB7IG9wdGlvbnMuYWxsb3dSZXNlcnZlZCA9IG9wdGlvbnMuZWNtYVZlcnNpb24gPCA1OyB9XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5hbGxvd0hhc2hCYW5nID09IG51bGwpXG4gICAgICB7IG9wdGlvbnMuYWxsb3dIYXNoQmFuZyA9IG9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTQ7IH1cblxuICAgIGlmIChpc0FycmF5KG9wdGlvbnMub25Ub2tlbikpIHtcbiAgICAgIHZhciB0b2tlbnMgPSBvcHRpb25zLm9uVG9rZW47XG4gICAgICBvcHRpb25zLm9uVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHsgcmV0dXJuIHRva2Vucy5wdXNoKHRva2VuKTsgfTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkob3B0aW9ucy5vbkNvbW1lbnQpKVxuICAgICAgeyBvcHRpb25zLm9uQ29tbWVudCA9IHB1c2hDb21tZW50KG9wdGlvbnMsIG9wdGlvbnMub25Db21tZW50KTsgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hDb21tZW50KG9wdGlvbnMsIGFycmF5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGJsb2NrLCB0ZXh0LCBzdGFydCwgZW5kLCBzdGFydExvYywgZW5kTG9jKSB7XG4gICAgICB2YXIgY29tbWVudCA9IHtcbiAgICAgICAgdHlwZTogYmxvY2sgPyBcIkJsb2NrXCIgOiBcIkxpbmVcIixcbiAgICAgICAgdmFsdWU6IHRleHQsXG4gICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgZW5kOiBlbmRcbiAgICAgIH07XG4gICAgICBpZiAob3B0aW9ucy5sb2NhdGlvbnMpXG4gICAgICAgIHsgY29tbWVudC5sb2MgPSBuZXcgU291cmNlTG9jYXRpb24odGhpcywgc3RhcnRMb2MsIGVuZExvYyk7IH1cbiAgICAgIGlmIChvcHRpb25zLnJhbmdlcylcbiAgICAgICAgeyBjb21tZW50LnJhbmdlID0gW3N0YXJ0LCBlbmRdOyB9XG4gICAgICBhcnJheS5wdXNoKGNvbW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVhY2ggc2NvcGUgZ2V0cyBhIGJpdHNldCB0aGF0IG1heSBjb250YWluIHRoZXNlIGZsYWdzXG4gIHZhclxuICAgICAgU0NPUEVfVE9QID0gMSxcbiAgICAgIFNDT1BFX0ZVTkNUSU9OID0gMixcbiAgICAgIFNDT1BFX0FTWU5DID0gNCxcbiAgICAgIFNDT1BFX0dFTkVSQVRPUiA9IDgsXG4gICAgICBTQ09QRV9BUlJPVyA9IDE2LFxuICAgICAgU0NPUEVfU0lNUExFX0NBVENIID0gMzIsXG4gICAgICBTQ09QRV9TVVBFUiA9IDY0LFxuICAgICAgU0NPUEVfRElSRUNUX1NVUEVSID0gMTI4LFxuICAgICAgU0NPUEVfQ0xBU1NfU1RBVElDX0JMT0NLID0gMjU2LFxuICAgICAgU0NPUEVfVkFSID0gU0NPUEVfVE9QIHwgU0NPUEVfRlVOQ1RJT04gfCBTQ09QRV9DTEFTU19TVEFUSUNfQkxPQ0s7XG5cbiAgZnVuY3Rpb24gZnVuY3Rpb25GbGFncyhhc3luYywgZ2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIFNDT1BFX0ZVTkNUSU9OIHwgKGFzeW5jID8gU0NPUEVfQVNZTkMgOiAwKSB8IChnZW5lcmF0b3IgPyBTQ09QRV9HRU5FUkFUT1IgOiAwKVxuICB9XG5cbiAgLy8gVXNlZCBpbiBjaGVja0xWYWwqIGFuZCBkZWNsYXJlTmFtZSB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSBiaW5kaW5nXG4gIHZhclxuICAgICAgQklORF9OT05FID0gMCwgLy8gTm90IGEgYmluZGluZ1xuICAgICAgQklORF9WQVIgPSAxLCAvLyBWYXItc3R5bGUgYmluZGluZ1xuICAgICAgQklORF9MRVhJQ0FMID0gMiwgLy8gTGV0LSBvciBjb25zdC1zdHlsZSBiaW5kaW5nXG4gICAgICBCSU5EX0ZVTkNUSU9OID0gMywgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb25cbiAgICAgIEJJTkRfU0lNUExFX0NBVENIID0gNCwgLy8gU2ltcGxlIChpZGVudGlmaWVyIHBhdHRlcm4pIGNhdGNoIGJpbmRpbmdcbiAgICAgIEJJTkRfT1VUU0lERSA9IDU7IC8vIFNwZWNpYWwgY2FzZSBmb3IgZnVuY3Rpb24gbmFtZXMgYXMgYm91bmQgaW5zaWRlIHRoZSBmdW5jdGlvblxuXG4gIHZhciBQYXJzZXIgPSBmdW5jdGlvbiBQYXJzZXIob3B0aW9ucywgaW5wdXQsIHN0YXJ0UG9zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IGdldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdGhpcy5zb3VyY2VGaWxlID0gb3B0aW9ucy5zb3VyY2VGaWxlO1xuICAgIHRoaXMua2V5d29yZHMgPSB3b3Jkc1JlZ2V4cChrZXl3b3JkcyQxW29wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiA/IDYgOiBvcHRpb25zLnNvdXJjZVR5cGUgPT09IFwibW9kdWxlXCIgPyBcIjVtb2R1bGVcIiA6IDVdKTtcbiAgICB2YXIgcmVzZXJ2ZWQgPSBcIlwiO1xuICAgIGlmIChvcHRpb25zLmFsbG93UmVzZXJ2ZWQgIT09IHRydWUpIHtcbiAgICAgIHJlc2VydmVkID0gcmVzZXJ2ZWRXb3Jkc1tvcHRpb25zLmVjbWFWZXJzaW9uID49IDYgPyA2IDogb3B0aW9ucy5lY21hVmVyc2lvbiA9PT0gNSA/IDUgOiAzXTtcbiAgICAgIGlmIChvcHRpb25zLnNvdXJjZVR5cGUgPT09IFwibW9kdWxlXCIpIHsgcmVzZXJ2ZWQgKz0gXCIgYXdhaXRcIjsgfVxuICAgIH1cbiAgICB0aGlzLnJlc2VydmVkV29yZHMgPSB3b3Jkc1JlZ2V4cChyZXNlcnZlZCk7XG4gICAgdmFyIHJlc2VydmVkU3RyaWN0ID0gKHJlc2VydmVkID8gcmVzZXJ2ZWQgKyBcIiBcIiA6IFwiXCIpICsgcmVzZXJ2ZWRXb3Jkcy5zdHJpY3Q7XG4gICAgdGhpcy5yZXNlcnZlZFdvcmRzU3RyaWN0ID0gd29yZHNSZWdleHAocmVzZXJ2ZWRTdHJpY3QpO1xuICAgIHRoaXMucmVzZXJ2ZWRXb3Jkc1N0cmljdEJpbmQgPSB3b3Jkc1JlZ2V4cChyZXNlcnZlZFN0cmljdCArIFwiIFwiICsgcmVzZXJ2ZWRXb3Jkcy5zdHJpY3RCaW5kKTtcbiAgICB0aGlzLmlucHV0ID0gU3RyaW5nKGlucHV0KTtcblxuICAgIC8vIFVzZWQgdG8gc2lnbmFsIHRvIGNhbGxlcnMgb2YgYHJlYWRXb3JkMWAgd2hldGhlciB0aGUgd29yZFxuICAgIC8vIGNvbnRhaW5lZCBhbnkgZXNjYXBlIHNlcXVlbmNlcy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3b3JkcyB3aXRoXG4gICAgLy8gZXNjYXBlIHNlcXVlbmNlcyBtdXN0IG5vdCBiZSBpbnRlcnByZXRlZCBhcyBrZXl3b3Jkcy5cbiAgICB0aGlzLmNvbnRhaW5zRXNjID0gZmFsc2U7XG5cbiAgICAvLyBTZXQgdXAgdG9rZW4gc3RhdGVcblxuICAgIC8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSB0b2tlbml6ZXIgaW4gdGhlIGlucHV0LlxuICAgIGlmIChzdGFydFBvcykge1xuICAgICAgdGhpcy5wb3MgPSBzdGFydFBvcztcbiAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbnB1dC5sYXN0SW5kZXhPZihcIlxcblwiLCBzdGFydFBvcyAtIDEpICsgMTtcbiAgICAgIHRoaXMuY3VyTGluZSA9IHRoaXMuaW5wdXQuc2xpY2UoMCwgdGhpcy5saW5lU3RhcnQpLnNwbGl0KGxpbmVCcmVhaykubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvcyA9IHRoaXMubGluZVN0YXJ0ID0gMDtcbiAgICAgIHRoaXMuY3VyTGluZSA9IDE7XG4gICAgfVxuXG4gICAgLy8gUHJvcGVydGllcyBvZiB0aGUgY3VycmVudCB0b2tlbjpcbiAgICAvLyBJdHMgdHlwZVxuICAgIHRoaXMudHlwZSA9IHR5cGVzJDEuZW9mO1xuICAgIC8vIEZvciB0b2tlbnMgdGhhdCBpbmNsdWRlIG1vcmUgaW5mb3JtYXRpb24gdGhhbiB0aGVpciB0eXBlLCB0aGUgdmFsdWVcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAvLyBJdHMgc3RhcnQgYW5kIGVuZCBvZmZzZXRcbiAgICB0aGlzLnN0YXJ0ID0gdGhpcy5lbmQgPSB0aGlzLnBvcztcbiAgICAvLyBBbmQsIGlmIGxvY2F0aW9ucyBhcmUgdXNlZCwgdGhlIHtsaW5lLCBjb2x1bW59IG9iamVjdFxuICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhvc2Ugb2Zmc2V0c1xuICAgIHRoaXMuc3RhcnRMb2MgPSB0aGlzLmVuZExvYyA9IHRoaXMuY3VyUG9zaXRpb24oKTtcblxuICAgIC8vIFBvc2l0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgcHJldmlvdXMgdG9rZW5cbiAgICB0aGlzLmxhc3RUb2tFbmRMb2MgPSB0aGlzLmxhc3RUb2tTdGFydExvYyA9IG51bGw7XG4gICAgdGhpcy5sYXN0VG9rU3RhcnQgPSB0aGlzLmxhc3RUb2tFbmQgPSB0aGlzLnBvcztcblxuICAgIC8vIFRoZSBjb250ZXh0IHN0YWNrIGlzIHVzZWQgdG8gc3VwZXJmaWNpYWxseSB0cmFjayBzeW50YWN0aWNcbiAgICAvLyBjb250ZXh0IHRvIHByZWRpY3Qgd2hldGhlciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBhbGxvd2VkIGluIGFcbiAgICAvLyBnaXZlbiBwb3NpdGlvbi5cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmluaXRpYWxDb250ZXh0KCk7XG4gICAgdGhpcy5leHByQWxsb3dlZCA9IHRydWU7XG5cbiAgICAvLyBGaWd1cmUgb3V0IGlmIGl0J3MgYSBtb2R1bGUgY29kZS5cbiAgICB0aGlzLmluTW9kdWxlID0gb3B0aW9ucy5zb3VyY2VUeXBlID09PSBcIm1vZHVsZVwiO1xuICAgIHRoaXMuc3RyaWN0ID0gdGhpcy5pbk1vZHVsZSB8fCB0aGlzLnN0cmljdERpcmVjdGl2ZSh0aGlzLnBvcyk7XG5cbiAgICAvLyBVc2VkIHRvIHNpZ25pZnkgdGhlIHN0YXJ0IG9mIGEgcG90ZW50aWFsIGFycm93IGZ1bmN0aW9uXG4gICAgdGhpcy5wb3RlbnRpYWxBcnJvd0F0ID0gLTE7XG4gICAgdGhpcy5wb3RlbnRpYWxBcnJvd0luRm9yQXdhaXQgPSBmYWxzZTtcblxuICAgIC8vIFBvc2l0aW9ucyB0byBkZWxheWVkLWNoZWNrIHRoYXQgeWllbGQvYXdhaXQgZG9lcyBub3QgZXhpc3QgaW4gZGVmYXVsdCBwYXJhbWV0ZXJzLlxuICAgIHRoaXMueWllbGRQb3MgPSB0aGlzLmF3YWl0UG9zID0gdGhpcy5hd2FpdElkZW50UG9zID0gMDtcbiAgICAvLyBMYWJlbHMgaW4gc2NvcGUuXG4gICAgdGhpcy5sYWJlbHMgPSBbXTtcbiAgICAvLyBUaHVzLWZhciB1bmRlZmluZWQgZXhwb3J0cy5cbiAgICB0aGlzLnVuZGVmaW5lZEV4cG9ydHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgLy8gSWYgZW5hYmxlZCwgc2tpcCBsZWFkaW5nIGhhc2hiYW5nIGxpbmUuXG4gICAgaWYgKHRoaXMucG9zID09PSAwICYmIG9wdGlvbnMuYWxsb3dIYXNoQmFuZyAmJiB0aGlzLmlucHV0LnNsaWNlKDAsIDIpID09PSBcIiMhXCIpXG4gICAgICB7IHRoaXMuc2tpcExpbmVDb21tZW50KDIpOyB9XG5cbiAgICAvLyBTY29wZSB0cmFja2luZyBmb3IgZHVwbGljYXRlIHZhcmlhYmxlIG5hbWVzIChzZWUgc2NvcGUuanMpXG4gICAgdGhpcy5zY29wZVN0YWNrID0gW107XG4gICAgdGhpcy5lbnRlclNjb3BlKFNDT1BFX1RPUCk7XG5cbiAgICAvLyBGb3IgUmVnRXhwIHZhbGlkYXRpb25cbiAgICB0aGlzLnJlZ2V4cFN0YXRlID0gbnVsbDtcblxuICAgIC8vIFRoZSBzdGFjayBvZiBwcml2YXRlIG5hbWVzLlxuICAgIC8vIEVhY2ggZWxlbWVudCBoYXMgdHdvIHByb3BlcnRpZXM6ICdkZWNsYXJlZCcgYW5kICd1c2VkJy5cbiAgICAvLyBXaGVuIGl0IGV4aXRlZCBmcm9tIHRoZSBvdXRlcm1vc3QgY2xhc3MgZGVmaW5pdGlvbiwgYWxsIHVzZWQgcHJpdmF0ZSBuYW1lcyBtdXN0IGJlIGRlY2xhcmVkLlxuICAgIHRoaXMucHJpdmF0ZU5hbWVTdGFjayA9IFtdO1xuICB9O1xuXG4gIHZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGluRnVuY3Rpb246IHsgY29uZmlndXJhYmxlOiB0cnVlIH0saW5HZW5lcmF0b3I6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0saW5Bc3luYzogeyBjb25maWd1cmFibGU6IHRydWUgfSxjYW5Bd2FpdDogeyBjb25maWd1cmFibGU6IHRydWUgfSxhbGxvd1N1cGVyOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGFsbG93RGlyZWN0U3VwZXI6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sdHJlYXRGdW5jdGlvbnNBc1ZhcjogeyBjb25maWd1cmFibGU6IHRydWUgfSxhbGxvd05ld0RvdFRhcmdldDogeyBjb25maWd1cmFibGU6IHRydWUgfSxpbkNsYXNzU3RhdGljQmxvY2s6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuICBQYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UgKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5vcHRpb25zLnByb2dyYW0gfHwgdGhpcy5zdGFydE5vZGUoKTtcbiAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlVG9wTGV2ZWwobm9kZSlcbiAgfTtcblxuICBwcm90b3R5cGVBY2Nlc3NvcnMuaW5GdW5jdGlvbi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5jdXJyZW50VmFyU2NvcGUoKS5mbGFncyAmIFNDT1BFX0ZVTkNUSU9OKSA+IDAgfTtcblxuICBwcm90b3R5cGVBY2Nlc3NvcnMuaW5HZW5lcmF0b3IuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuY3VycmVudFZhclNjb3BlKCkuZmxhZ3MgJiBTQ09QRV9HRU5FUkFUT1IpID4gMCAmJiAhdGhpcy5jdXJyZW50VmFyU2NvcGUoKS5pbkNsYXNzRmllbGRJbml0IH07XG5cbiAgcHJvdG90eXBlQWNjZXNzb3JzLmluQXN5bmMuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuY3VycmVudFZhclNjb3BlKCkuZmxhZ3MgJiBTQ09QRV9BU1lOQykgPiAwICYmICF0aGlzLmN1cnJlbnRWYXJTY29wZSgpLmluQ2xhc3NGaWVsZEluaXQgfTtcblxuICBwcm90b3R5cGVBY2Nlc3NvcnMuY2FuQXdhaXQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLnNjb3BlU3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBzY29wZSA9IHRoaXMuc2NvcGVTdGFja1tpXTtcbiAgICAgIGlmIChzY29wZS5pbkNsYXNzRmllbGRJbml0IHx8IHNjb3BlLmZsYWdzICYgU0NPUEVfQ0xBU1NfU1RBVElDX0JMT0NLKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICBpZiAoc2NvcGUuZmxhZ3MgJiBTQ09QRV9GVU5DVElPTikgeyByZXR1cm4gKHNjb3BlLmZsYWdzICYgU0NPUEVfQVNZTkMpID4gMCB9XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5pbk1vZHVsZSAmJiB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTMpIHx8IHRoaXMub3B0aW9ucy5hbGxvd0F3YWl0T3V0c2lkZUZ1bmN0aW9uXG4gIH07XG5cbiAgcHJvdG90eXBlQWNjZXNzb3JzLmFsbG93U3VwZXIuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWYgPSB0aGlzLmN1cnJlbnRUaGlzU2NvcGUoKTtcbiAgICAgIHZhciBmbGFncyA9IHJlZi5mbGFncztcbiAgICAgIHZhciBpbkNsYXNzRmllbGRJbml0ID0gcmVmLmluQ2xhc3NGaWVsZEluaXQ7XG4gICAgcmV0dXJuIChmbGFncyAmIFNDT1BFX1NVUEVSKSA+IDAgfHwgaW5DbGFzc0ZpZWxkSW5pdCB8fCB0aGlzLm9wdGlvbnMuYWxsb3dTdXBlck91dHNpZGVNZXRob2RcbiAgfTtcblxuICBwcm90b3R5cGVBY2Nlc3NvcnMuYWxsb3dEaXJlY3RTdXBlci5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5jdXJyZW50VGhpc1Njb3BlKCkuZmxhZ3MgJiBTQ09QRV9ESVJFQ1RfU1VQRVIpID4gMCB9O1xuXG4gIHByb3RvdHlwZUFjY2Vzc29ycy50cmVhdEZ1bmN0aW9uc0FzVmFyLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudHJlYXRGdW5jdGlvbnNBc1ZhckluU2NvcGUodGhpcy5jdXJyZW50U2NvcGUoKSkgfTtcblxuICBwcm90b3R5cGVBY2Nlc3NvcnMuYWxsb3dOZXdEb3RUYXJnZXQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWYgPSB0aGlzLmN1cnJlbnRUaGlzU2NvcGUoKTtcbiAgICAgIHZhciBmbGFncyA9IHJlZi5mbGFncztcbiAgICAgIHZhciBpbkNsYXNzRmllbGRJbml0ID0gcmVmLmluQ2xhc3NGaWVsZEluaXQ7XG4gICAgcmV0dXJuIChmbGFncyAmIChTQ09QRV9GVU5DVElPTiB8IFNDT1BFX0NMQVNTX1NUQVRJQ19CTE9DSykpID4gMCB8fCBpbkNsYXNzRmllbGRJbml0XG4gIH07XG5cbiAgcHJvdG90eXBlQWNjZXNzb3JzLmluQ2xhc3NTdGF0aWNCbG9jay5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLmN1cnJlbnRWYXJTY29wZSgpLmZsYWdzICYgU0NPUEVfQ0xBU1NfU1RBVElDX0JMT0NLKSA+IDBcbiAgfTtcblxuICBQYXJzZXIuZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kICgpIHtcbiAgICAgIHZhciBwbHVnaW5zID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgcGx1Z2luc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgdmFyIGNscyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7IGNscyA9IHBsdWdpbnNbaV0oY2xzKTsgfVxuICAgIHJldHVybiBjbHNcbiAgfTtcblxuICBQYXJzZXIucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSAoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IHRoaXMob3B0aW9ucywgaW5wdXQpLnBhcnNlKClcbiAgfTtcblxuICBQYXJzZXIucGFyc2VFeHByZXNzaW9uQXQgPSBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb25BdCAoaW5wdXQsIHBvcywgb3B0aW9ucykge1xuICAgIHZhciBwYXJzZXIgPSBuZXcgdGhpcyhvcHRpb25zLCBpbnB1dCwgcG9zKTtcbiAgICBwYXJzZXIubmV4dFRva2VuKCk7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZUV4cHJlc3Npb24oKVxuICB9O1xuXG4gIFBhcnNlci50b2tlbml6ZXIgPSBmdW5jdGlvbiB0b2tlbml6ZXIgKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKG9wdGlvbnMsIGlucHV0KVxuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBQYXJzZXIucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxuICB2YXIgcHAkOSA9IFBhcnNlci5wcm90b3R5cGU7XG5cbiAgLy8gIyMgUGFyc2VyIHV0aWxpdGllc1xuXG4gIHZhciBsaXRlcmFsID0gL14oPzonKCg/OlxcXFwufFteJ1xcXFxdKSo/KSd8XCIoKD86XFxcXC58W15cIlxcXFxdKSo/KVwiKS87XG4gIHBwJDkuc3RyaWN0RGlyZWN0aXZlID0gZnVuY3Rpb24oc3RhcnQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIGZvciAoOzspIHtcbiAgICAgIC8vIFRyeSB0byBmaW5kIHN0cmluZyBsaXRlcmFsLlxuICAgICAgc2tpcFdoaXRlU3BhY2UubGFzdEluZGV4ID0gc3RhcnQ7XG4gICAgICBzdGFydCArPSBza2lwV2hpdGVTcGFjZS5leGVjKHRoaXMuaW5wdXQpWzBdLmxlbmd0aDtcbiAgICAgIHZhciBtYXRjaCA9IGxpdGVyYWwuZXhlYyh0aGlzLmlucHV0LnNsaWNlKHN0YXJ0KSk7XG4gICAgICBpZiAoIW1hdGNoKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICBpZiAoKG1hdGNoWzFdIHx8IG1hdGNoWzJdKSA9PT0gXCJ1c2Ugc3RyaWN0XCIpIHtcbiAgICAgICAgc2tpcFdoaXRlU3BhY2UubGFzdEluZGV4ID0gc3RhcnQgKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgIHZhciBzcGFjZUFmdGVyID0gc2tpcFdoaXRlU3BhY2UuZXhlYyh0aGlzLmlucHV0KSwgZW5kID0gc3BhY2VBZnRlci5pbmRleCArIHNwYWNlQWZ0ZXJbMF0ubGVuZ3RoO1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckF0KGVuZCk7XG4gICAgICAgIHJldHVybiBuZXh0ID09PSBcIjtcIiB8fCBuZXh0ID09PSBcIn1cIiB8fFxuICAgICAgICAgIChsaW5lQnJlYWsudGVzdChzcGFjZUFmdGVyWzBdKSAmJlxuICAgICAgICAgICAhKC9bKGAuWytcXC0vKiU8Pj0sP14mXS8udGVzdChuZXh0KSB8fCBuZXh0ID09PSBcIiFcIiAmJiB0aGlzLmlucHV0LmNoYXJBdChlbmQgKyAxKSA9PT0gXCI9XCIpKVxuICAgICAgfVxuICAgICAgc3RhcnQgKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuXG4gICAgICAvLyBTa2lwIHNlbWljb2xvbiwgaWYgYW55LlxuICAgICAgc2tpcFdoaXRlU3BhY2UubGFzdEluZGV4ID0gc3RhcnQ7XG4gICAgICBzdGFydCArPSBza2lwV2hpdGVTcGFjZS5leGVjKHRoaXMuaW5wdXQpWzBdLmxlbmd0aDtcbiAgICAgIGlmICh0aGlzLmlucHV0W3N0YXJ0XSA9PT0gXCI7XCIpXG4gICAgICAgIHsgc3RhcnQrKzsgfVxuICAgIH1cbiAgfTtcblxuICAvLyBQcmVkaWNhdGUgdGhhdCB0ZXN0cyB3aGV0aGVyIHRoZSBuZXh0IHRva2VuIGlzIG9mIHRoZSBnaXZlblxuICAvLyB0eXBlLCBhbmQgaWYgeWVzLCBjb25zdW1lcyBpdCBhcyBhIHNpZGUgZWZmZWN0LlxuXG4gIHBwJDkuZWF0ID0gZnVuY3Rpb24odHlwZSkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9O1xuXG4gIC8vIFRlc3RzIHdoZXRoZXIgcGFyc2VkIHRva2VuIGlzIGEgY29udGV4dHVhbCBrZXl3b3JkLlxuXG4gIHBwJDkuaXNDb250ZXh0dWFsID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IHR5cGVzJDEubmFtZSAmJiB0aGlzLnZhbHVlID09PSBuYW1lICYmICF0aGlzLmNvbnRhaW5zRXNjXG4gIH07XG5cbiAgLy8gQ29uc3VtZXMgY29udGV4dHVhbCBrZXl3b3JkIGlmIHBvc3NpYmxlLlxuXG4gIHBwJDkuZWF0Q29udGV4dHVhbCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMuaXNDb250ZXh0dWFsKG5hbWUpKSB7IHJldHVybiBmYWxzZSB9XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfTtcblxuICAvLyBBc3NlcnRzIHRoYXQgZm9sbG93aW5nIHRva2VuIGlzIGdpdmVuIGNvbnRleHR1YWwga2V5d29yZC5cblxuICBwcCQ5LmV4cGVjdENvbnRleHR1YWwgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKCF0aGlzLmVhdENvbnRleHR1YWwobmFtZSkpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgfTtcblxuICAvLyBUZXN0IHdoZXRoZXIgYSBzZW1pY29sb24gY2FuIGJlIGluc2VydGVkIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuXG4gIHBwJDkuY2FuSW5zZXJ0U2VtaWNvbG9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5lb2YgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5icmFjZVIgfHxcbiAgICAgIGxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rRW5kLCB0aGlzLnN0YXJ0KSlcbiAgfTtcblxuICBwcCQ5Lmluc2VydFNlbWljb2xvbiA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNhbkluc2VydFNlbWljb2xvbigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm9uSW5zZXJ0ZWRTZW1pY29sb24pXG4gICAgICAgIHsgdGhpcy5vcHRpb25zLm9uSW5zZXJ0ZWRTZW1pY29sb24odGhpcy5sYXN0VG9rRW5kLCB0aGlzLmxhc3RUb2tFbmRMb2MpOyB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfTtcblxuICAvLyBDb25zdW1lIGEgc2VtaWNvbG9uLCBvciwgZmFpbGluZyB0aGF0LCBzZWUgaWYgd2UgYXJlIGFsbG93ZWQgdG9cbiAgLy8gcHJldGVuZCB0aGF0IHRoZXJlIGlzIGEgc2VtaWNvbG9uIGF0IHRoaXMgcG9zaXRpb24uXG5cbiAgcHAkOS5zZW1pY29sb24gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuZWF0KHR5cGVzJDEuc2VtaSkgJiYgIXRoaXMuaW5zZXJ0U2VtaWNvbG9uKCkpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgfTtcblxuICBwcCQ5LmFmdGVyVHJhaWxpbmdDb21tYSA9IGZ1bmN0aW9uKHRva1R5cGUsIG5vdE5leHQpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSB0b2tUeXBlKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm9uVHJhaWxpbmdDb21tYSlcbiAgICAgICAgeyB0aGlzLm9wdGlvbnMub25UcmFpbGluZ0NvbW1hKHRoaXMubGFzdFRva1N0YXJ0LCB0aGlzLmxhc3RUb2tTdGFydExvYyk7IH1cbiAgICAgIGlmICghbm90TmV4dClcbiAgICAgICAgeyB0aGlzLm5leHQoKTsgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH07XG5cbiAgLy8gRXhwZWN0IGEgdG9rZW4gb2YgYSBnaXZlbiB0eXBlLiBJZiBmb3VuZCwgY29uc3VtZSBpdCwgb3RoZXJ3aXNlLFxuICAvLyByYWlzZSBhbiB1bmV4cGVjdGVkIHRva2VuIGVycm9yLlxuXG4gIHBwJDkuZXhwZWN0ID0gZnVuY3Rpb24odHlwZSkge1xuICAgIHRoaXMuZWF0KHR5cGUpIHx8IHRoaXMudW5leHBlY3RlZCgpO1xuICB9O1xuXG4gIC8vIFJhaXNlIGFuIHVuZXhwZWN0ZWQgdG9rZW4gZXJyb3IuXG5cbiAgcHAkOS51bmV4cGVjdGVkID0gZnVuY3Rpb24ocG9zKSB7XG4gICAgdGhpcy5yYWlzZShwb3MgIT0gbnVsbCA/IHBvcyA6IHRoaXMuc3RhcnQsIFwiVW5leHBlY3RlZCB0b2tlblwiKTtcbiAgfTtcblxuICB2YXIgRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IGZ1bmN0aW9uIERlc3RydWN0dXJpbmdFcnJvcnMoKSB7XG4gICAgdGhpcy5zaG9ydGhhbmRBc3NpZ24gPVxuICAgIHRoaXMudHJhaWxpbmdDb21tYSA9XG4gICAgdGhpcy5wYXJlbnRoZXNpemVkQXNzaWduID1cbiAgICB0aGlzLnBhcmVudGhlc2l6ZWRCaW5kID1cbiAgICB0aGlzLmRvdWJsZVByb3RvID1cbiAgICAgIC0xO1xuICB9O1xuXG4gIHBwJDkuY2hlY2tQYXR0ZXJuRXJyb3JzID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgaXNBc3NpZ24pIHtcbiAgICBpZiAoIXJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHsgcmV0dXJuIH1cbiAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID4gLTEpXG4gICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEsIFwiQ29tbWEgaXMgbm90IHBlcm1pdHRlZCBhZnRlciB0aGUgcmVzdCBlbGVtZW50XCIpOyB9XG4gICAgdmFyIHBhcmVucyA9IGlzQXNzaWduID8gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduIDogcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZDtcbiAgICBpZiAocGFyZW5zID4gLTEpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHBhcmVucywgaXNBc3NpZ24gPyBcIkFzc2lnbmluZyB0byBydmFsdWVcIiA6IFwiUGFyZW50aGVzaXplZCBwYXR0ZXJuXCIpOyB9XG4gIH07XG5cbiAgcHAkOS5jaGVja0V4cHJlc3Npb25FcnJvcnMgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBhbmRUaHJvdykge1xuICAgIGlmICghcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykgeyByZXR1cm4gZmFsc2UgfVxuICAgIHZhciBzaG9ydGhhbmRBc3NpZ24gPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbjtcbiAgICB2YXIgZG91YmxlUHJvdG8gPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLmRvdWJsZVByb3RvO1xuICAgIGlmICghYW5kVGhyb3cpIHsgcmV0dXJuIHNob3J0aGFuZEFzc2lnbiA+PSAwIHx8IGRvdWJsZVByb3RvID49IDAgfVxuICAgIGlmIChzaG9ydGhhbmRBc3NpZ24gPj0gMClcbiAgICAgIHsgdGhpcy5yYWlzZShzaG9ydGhhbmRBc3NpZ24sIFwiU2hvcnRoYW5kIHByb3BlcnR5IGFzc2lnbm1lbnRzIGFyZSB2YWxpZCBvbmx5IGluIGRlc3RydWN0dXJpbmcgcGF0dGVybnNcIik7IH1cbiAgICBpZiAoZG91YmxlUHJvdG8gPj0gMClcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGRvdWJsZVByb3RvLCBcIlJlZGVmaW5pdGlvbiBvZiBfX3Byb3RvX18gcHJvcGVydHlcIik7IH1cbiAgfTtcblxuICBwcCQ5LmNoZWNrWWllbGRBd2FpdEluRGVmYXVsdFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnlpZWxkUG9zICYmICghdGhpcy5hd2FpdFBvcyB8fCB0aGlzLnlpZWxkUG9zIDwgdGhpcy5hd2FpdFBvcykpXG4gICAgICB7IHRoaXMucmFpc2UodGhpcy55aWVsZFBvcywgXCJZaWVsZCBleHByZXNzaW9uIGNhbm5vdCBiZSBhIGRlZmF1bHQgdmFsdWVcIik7IH1cbiAgICBpZiAodGhpcy5hd2FpdFBvcylcbiAgICAgIHsgdGhpcy5yYWlzZSh0aGlzLmF3YWl0UG9zLCBcIkF3YWl0IGV4cHJlc3Npb24gY2Fubm90IGJlIGEgZGVmYXVsdCB2YWx1ZVwiKTsgfVxuICB9O1xuXG4gIHBwJDkuaXNTaW1wbGVBc3NpZ25UYXJnZXQgPSBmdW5jdGlvbihleHByKSB7XG4gICAgaWYgKGV4cHIudHlwZSA9PT0gXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiKVxuICAgICAgeyByZXR1cm4gdGhpcy5pc1NpbXBsZUFzc2lnblRhcmdldChleHByLmV4cHJlc3Npb24pIH1cbiAgICByZXR1cm4gZXhwci50eXBlID09PSBcIklkZW50aWZpZXJcIiB8fCBleHByLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiXG4gIH07XG5cbiAgdmFyIHBwJDggPSBQYXJzZXIucHJvdG90eXBlO1xuXG4gIC8vICMjIyBTdGF0ZW1lbnQgcGFyc2luZ1xuXG4gIC8vIFBhcnNlIGEgcHJvZ3JhbS4gSW5pdGlhbGl6ZXMgdGhlIHBhcnNlciwgcmVhZHMgYW55IG51bWJlciBvZlxuICAvLyBzdGF0ZW1lbnRzLCBhbmQgd3JhcHMgdGhlbSBpbiBhIFByb2dyYW0gbm9kZS4gIE9wdGlvbmFsbHkgdGFrZXMgYVxuICAvLyBgcHJvZ3JhbWAgYXJndW1lbnQuICBJZiBwcmVzZW50LCB0aGUgc3RhdGVtZW50cyB3aWxsIGJlIGFwcGVuZGVkXG4gIC8vIHRvIGl0cyBib2R5IGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgbm9kZS5cblxuICBwcCQ4LnBhcnNlVG9wTGV2ZWwgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIGV4cG9ydHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGlmICghbm9kZS5ib2R5KSB7IG5vZGUuYm9keSA9IFtdOyB9XG4gICAgd2hpbGUgKHRoaXMudHlwZSAhPT0gdHlwZXMkMS5lb2YpIHtcbiAgICAgIHZhciBzdG10ID0gdGhpcy5wYXJzZVN0YXRlbWVudChudWxsLCB0cnVlLCBleHBvcnRzKTtcbiAgICAgIG5vZGUuYm9keS5wdXNoKHN0bXQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbk1vZHVsZSlcbiAgICAgIHsgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBPYmplY3Qua2V5cyh0aGlzLnVuZGVmaW5lZEV4cG9ydHMpOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICAgICAge1xuICAgICAgICAgIHZhciBuYW1lID0gbGlzdFtpXTtcblxuICAgICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnVuZGVmaW5lZEV4cG9ydHNbbmFtZV0uc3RhcnQsIChcIkV4cG9ydCAnXCIgKyBuYW1lICsgXCInIGlzIG5vdCBkZWZpbmVkXCIpKTtcbiAgICAgICAgfSB9XG4gICAgdGhpcy5hZGFwdERpcmVjdGl2ZVByb2xvZ3VlKG5vZGUuYm9keSk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5zb3VyY2VUeXBlID0gdGhpcy5vcHRpb25zLnNvdXJjZVR5cGU7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlByb2dyYW1cIilcbiAgfTtcblxuICB2YXIgbG9vcExhYmVsID0ge2tpbmQ6IFwibG9vcFwifSwgc3dpdGNoTGFiZWwgPSB7a2luZDogXCJzd2l0Y2hcIn07XG5cbiAgcHAkOC5pc0xldCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNiB8fCAhdGhpcy5pc0NvbnRleHR1YWwoXCJsZXRcIikpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBza2lwV2hpdGVTcGFjZS5sYXN0SW5kZXggPSB0aGlzLnBvcztcbiAgICB2YXIgc2tpcCA9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dCk7XG4gICAgdmFyIG5leHQgPSB0aGlzLnBvcyArIHNraXBbMF0ubGVuZ3RoLCBuZXh0Q2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQobmV4dCk7XG4gICAgLy8gRm9yIGFtYmlndW91cyBjYXNlcywgZGV0ZXJtaW5lIGlmIGEgTGV4aWNhbERlY2xhcmF0aW9uIChvciBvbmx5IGFcbiAgICAvLyBTdGF0ZW1lbnQpIGlzIGFsbG93ZWQgaGVyZS4gSWYgY29udGV4dCBpcyBub3QgZW1wdHkgdGhlbiBvbmx5IGEgU3RhdGVtZW50XG4gICAgLy8gaXMgYWxsb3dlZC4gSG93ZXZlciwgYGxldCBbYCBpcyBhbiBleHBsaWNpdCBuZWdhdGl2ZSBsb29rYWhlYWQgZm9yXG4gICAgLy8gRXhwcmVzc2lvblN0YXRlbWVudCwgc28gc3BlY2lhbC1jYXNlIGl0IGZpcnN0LlxuICAgIGlmIChuZXh0Q2ggPT09IDkxIHx8IG5leHRDaCA9PT0gOTIpIHsgcmV0dXJuIHRydWUgfSAvLyAnWycsICcvJ1xuICAgIGlmIChjb250ZXh0KSB7IHJldHVybiBmYWxzZSB9XG5cbiAgICBpZiAobmV4dENoID09PSAxMjMgfHwgbmV4dENoID4gMHhkN2ZmICYmIG5leHRDaCA8IDB4ZGMwMCkgeyByZXR1cm4gdHJ1ZSB9IC8vICd7JywgYXN0cmFsXG4gICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KG5leHRDaCwgdHJ1ZSkpIHtcbiAgICAgIHZhciBwb3MgPSBuZXh0ICsgMTtcbiAgICAgIHdoaWxlIChpc0lkZW50aWZpZXJDaGFyKG5leHRDaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdChwb3MpLCB0cnVlKSkgeyArK3BvczsgfVxuICAgICAgaWYgKG5leHRDaCA9PT0gOTIgfHwgbmV4dENoID4gMHhkN2ZmICYmIG5leHRDaCA8IDB4ZGMwMCkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgICB2YXIgaWRlbnQgPSB0aGlzLmlucHV0LnNsaWNlKG5leHQsIHBvcyk7XG4gICAgICBpZiAoIWtleXdvcmRSZWxhdGlvbmFsT3BlcmF0b3IudGVzdChpZGVudCkpIHsgcmV0dXJuIHRydWUgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBjaGVjayAnYXN5bmMgW25vIExpbmVUZXJtaW5hdG9yIGhlcmVdIGZ1bmN0aW9uJ1xuICAvLyAtICdhc3luYyAvKmZvbyovIGZ1bmN0aW9uJyBpcyBPSy5cbiAgLy8gLSAnYXN5bmMgLypcXG4qLyBmdW5jdGlvbicgaXMgaW52YWxpZC5cbiAgcHAkOC5pc0FzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgOCB8fCAhdGhpcy5pc0NvbnRleHR1YWwoXCJhc3luY1wiKSlcbiAgICAgIHsgcmV0dXJuIGZhbHNlIH1cblxuICAgIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHRoaXMucG9zO1xuICAgIHZhciBza2lwID0gc2tpcFdoaXRlU3BhY2UuZXhlYyh0aGlzLmlucHV0KTtcbiAgICB2YXIgbmV4dCA9IHRoaXMucG9zICsgc2tpcFswXS5sZW5ndGgsIGFmdGVyO1xuICAgIHJldHVybiAhbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLnBvcywgbmV4dCkpICYmXG4gICAgICB0aGlzLmlucHV0LnNsaWNlKG5leHQsIG5leHQgKyA4KSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAobmV4dCArIDggPT09IHRoaXMuaW5wdXQubGVuZ3RoIHx8XG4gICAgICAgIShpc0lkZW50aWZpZXJDaGFyKGFmdGVyID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KG5leHQgKyA4KSkgfHwgYWZ0ZXIgPiAweGQ3ZmYgJiYgYWZ0ZXIgPCAweGRjMDApKVxuICB9O1xuXG4gIC8vIFBhcnNlIGEgc2luZ2xlIHN0YXRlbWVudC5cbiAgLy9cbiAgLy8gSWYgZXhwZWN0aW5nIGEgc3RhdGVtZW50IGFuZCBmaW5kaW5nIGEgc2xhc2ggb3BlcmF0b3IsIHBhcnNlIGFcbiAgLy8gcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwuIFRoaXMgaXMgdG8gaGFuZGxlIGNhc2VzIGxpa2VcbiAgLy8gYGlmIChmb28pIC9ibGFoLy5leGVjKGZvbylgLCB3aGVyZSBsb29raW5nIGF0IHRoZSBwcmV2aW91cyB0b2tlblxuICAvLyBkb2VzIG5vdCBoZWxwLlxuXG4gIHBwJDgucGFyc2VTdGF0ZW1lbnQgPSBmdW5jdGlvbihjb250ZXh0LCB0b3BMZXZlbCwgZXhwb3J0cykge1xuICAgIHZhciBzdGFydHR5cGUgPSB0aGlzLnR5cGUsIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBraW5kO1xuXG4gICAgaWYgKHRoaXMuaXNMZXQoY29udGV4dCkpIHtcbiAgICAgIHN0YXJ0dHlwZSA9IHR5cGVzJDEuX3ZhcjtcbiAgICAgIGtpbmQgPSBcImxldFwiO1xuICAgIH1cblxuICAgIC8vIE1vc3QgdHlwZXMgb2Ygc3RhdGVtZW50cyBhcmUgcmVjb2duaXplZCBieSB0aGUga2V5d29yZCB0aGV5XG4gICAgLy8gc3RhcnQgd2l0aC4gTWFueSBhcmUgdHJpdmlhbCB0byBwYXJzZSwgc29tZSByZXF1aXJlIGEgYml0IG9mXG4gICAgLy8gY29tcGxleGl0eS5cblxuICAgIHN3aXRjaCAoc3RhcnR0eXBlKSB7XG4gICAgY2FzZSB0eXBlcyQxLl9icmVhazogY2FzZSB0eXBlcyQxLl9jb250aW51ZTogcmV0dXJuIHRoaXMucGFyc2VCcmVha0NvbnRpbnVlU3RhdGVtZW50KG5vZGUsIHN0YXJ0dHlwZS5rZXl3b3JkKVxuICAgIGNhc2UgdHlwZXMkMS5fZGVidWdnZXI6IHJldHVybiB0aGlzLnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuX2RvOiByZXR1cm4gdGhpcy5wYXJzZURvU3RhdGVtZW50KG5vZGUpXG4gICAgY2FzZSB0eXBlcyQxLl9mb3I6IHJldHVybiB0aGlzLnBhcnNlRm9yU3RhdGVtZW50KG5vZGUpXG4gICAgY2FzZSB0eXBlcyQxLl9mdW5jdGlvbjpcbiAgICAgIC8vIEZ1bmN0aW9uIGFzIHNvbGUgYm9keSBvZiBlaXRoZXIgYW4gaWYgc3RhdGVtZW50IG9yIGEgbGFiZWxlZCBzdGF0ZW1lbnRcbiAgICAgIC8vIHdvcmtzLCBidXQgbm90IHdoZW4gaXQgaXMgcGFydCBvZiBhIGxhYmVsZWQgc3RhdGVtZW50IHRoYXQgaXMgdGhlIHNvbGVcbiAgICAgIC8vIGJvZHkgb2YgYW4gaWYgc3RhdGVtZW50LlxuICAgICAgaWYgKChjb250ZXh0ICYmICh0aGlzLnN0cmljdCB8fCBjb250ZXh0ICE9PSBcImlmXCIgJiYgY29udGV4dCAhPT0gXCJsYWJlbFwiKSkgJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQobm9kZSwgZmFsc2UsICFjb250ZXh0KVxuICAgIGNhc2UgdHlwZXMkMS5fY2xhc3M6XG4gICAgICBpZiAoY29udGV4dCkgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VDbGFzcyhub2RlLCB0cnVlKVxuICAgIGNhc2UgdHlwZXMkMS5faWY6IHJldHVybiB0aGlzLnBhcnNlSWZTdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuX3JldHVybjogcmV0dXJuIHRoaXMucGFyc2VSZXR1cm5TdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuX3N3aXRjaDogcmV0dXJuIHRoaXMucGFyc2VTd2l0Y2hTdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuX3Rocm93OiByZXR1cm4gdGhpcy5wYXJzZVRocm93U3RhdGVtZW50KG5vZGUpXG4gICAgY2FzZSB0eXBlcyQxLl90cnk6IHJldHVybiB0aGlzLnBhcnNlVHJ5U3RhdGVtZW50KG5vZGUpXG4gICAgY2FzZSB0eXBlcyQxLl9jb25zdDogY2FzZSB0eXBlcyQxLl92YXI6XG4gICAgICBraW5kID0ga2luZCB8fCB0aGlzLnZhbHVlO1xuICAgICAgaWYgKGNvbnRleHQgJiYga2luZCAhPT0gXCJ2YXJcIikgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VWYXJTdGF0ZW1lbnQobm9kZSwga2luZClcbiAgICBjYXNlIHR5cGVzJDEuX3doaWxlOiByZXR1cm4gdGhpcy5wYXJzZVdoaWxlU3RhdGVtZW50KG5vZGUpXG4gICAgY2FzZSB0eXBlcyQxLl93aXRoOiByZXR1cm4gdGhpcy5wYXJzZVdpdGhTdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuYnJhY2VMOiByZXR1cm4gdGhpcy5wYXJzZUJsb2NrKHRydWUsIG5vZGUpXG4gICAgY2FzZSB0eXBlcyQxLnNlbWk6IHJldHVybiB0aGlzLnBhcnNlRW1wdHlTdGF0ZW1lbnQobm9kZSlcbiAgICBjYXNlIHR5cGVzJDEuX2V4cG9ydDpcbiAgICBjYXNlIHR5cGVzJDEuX2ltcG9ydDpcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPiAxMCAmJiBzdGFydHR5cGUgPT09IHR5cGVzJDEuX2ltcG9ydCkge1xuICAgICAgICBza2lwV2hpdGVTcGFjZS5sYXN0SW5kZXggPSB0aGlzLnBvcztcbiAgICAgICAgdmFyIHNraXAgPSBza2lwV2hpdGVTcGFjZS5leGVjKHRoaXMuaW5wdXQpO1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMucG9zICsgc2tpcFswXS5sZW5ndGgsIG5leHRDaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdChuZXh0KTtcbiAgICAgICAgaWYgKG5leHRDaCA9PT0gNDAgfHwgbmV4dENoID09PSA0NikgLy8gJygnIG9yICcuJ1xuICAgICAgICAgIHsgcmV0dXJuIHRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KG5vZGUsIHRoaXMucGFyc2VFeHByZXNzaW9uKCkpIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYWxsb3dJbXBvcnRFeHBvcnRFdmVyeXdoZXJlKSB7XG4gICAgICAgIGlmICghdG9wTGV2ZWwpXG4gICAgICAgICAgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ2ltcG9ydCcgYW5kICdleHBvcnQnIG1heSBvbmx5IGFwcGVhciBhdCB0aGUgdG9wIGxldmVsXCIpOyB9XG4gICAgICAgIGlmICghdGhpcy5pbk1vZHVsZSlcbiAgICAgICAgICB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCInaW1wb3J0JyBhbmQgJ2V4cG9ydCcgbWF5IGFwcGVhciBvbmx5IHdpdGggJ3NvdXJjZVR5cGU6IG1vZHVsZSdcIik7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGFydHR5cGUgPT09IHR5cGVzJDEuX2ltcG9ydCA/IHRoaXMucGFyc2VJbXBvcnQobm9kZSkgOiB0aGlzLnBhcnNlRXhwb3J0KG5vZGUsIGV4cG9ydHMpXG5cbiAgICAgIC8vIElmIHRoZSBzdGF0ZW1lbnQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHN0YXRlbWVudCBrZXl3b3JkIG9yIGFcbiAgICAgIC8vIGJyYWNlLCBpdCdzIGFuIEV4cHJlc3Npb25TdGF0ZW1lbnQgb3IgTGFiZWxlZFN0YXRlbWVudC4gV2VcbiAgICAgIC8vIHNpbXBseSBzdGFydCBwYXJzaW5nIGFuIGV4cHJlc3Npb24sIGFuZCBhZnRlcndhcmRzLCBpZiB0aGVcbiAgICAgIC8vIG5leHQgdG9rZW4gaXMgYSBjb2xvbiBhbmQgdGhlIGV4cHJlc3Npb24gd2FzIGEgc2ltcGxlXG4gICAgICAvLyBJZGVudGlmaWVyIG5vZGUsIHdlIHN3aXRjaCB0byBpbnRlcnByZXRpbmcgaXQgYXMgYSBsYWJlbC5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHRoaXMuaXNBc3luY0Z1bmN0aW9uKCkpIHtcbiAgICAgICAgaWYgKGNvbnRleHQpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQobm9kZSwgdHJ1ZSwgIWNvbnRleHQpXG4gICAgICB9XG5cbiAgICAgIHZhciBtYXliZU5hbWUgPSB0aGlzLnZhbHVlLCBleHByID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgIGlmIChzdGFydHR5cGUgPT09IHR5cGVzJDEubmFtZSAmJiBleHByLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmIHRoaXMuZWF0KHR5cGVzJDEuY29sb24pKVxuICAgICAgICB7IHJldHVybiB0aGlzLnBhcnNlTGFiZWxlZFN0YXRlbWVudChub2RlLCBtYXliZU5hbWUsIGV4cHIsIGNvbnRleHQpIH1cbiAgICAgIGVsc2UgeyByZXR1cm4gdGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSwgZXhwcikgfVxuICAgIH1cbiAgfTtcblxuICBwcCQ4LnBhcnNlQnJlYWtDb250aW51ZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIGtleXdvcmQpIHtcbiAgICB2YXIgaXNCcmVhayA9IGtleXdvcmQgPT09IFwiYnJlYWtcIjtcbiAgICB0aGlzLm5leHQoKTtcbiAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5zZW1pKSB8fCB0aGlzLmluc2VydFNlbWljb2xvbigpKSB7IG5vZGUubGFiZWwgPSBudWxsOyB9XG4gICAgZWxzZSBpZiAodGhpcy50eXBlICE9PSB0eXBlcyQxLm5hbWUpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICBlbHNlIHtcbiAgICAgIG5vZGUubGFiZWwgPSB0aGlzLnBhcnNlSWRlbnQoKTtcbiAgICAgIHRoaXMuc2VtaWNvbG9uKCk7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYW4gYWN0dWFsIGRlc3RpbmF0aW9uIHRvIGJyZWFrIG9yXG4gICAgLy8gY29udGludWUgdG8uXG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgdGhpcy5sYWJlbHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBsYWIgPSB0aGlzLmxhYmVsc1tpXTtcbiAgICAgIGlmIChub2RlLmxhYmVsID09IG51bGwgfHwgbGFiLm5hbWUgPT09IG5vZGUubGFiZWwubmFtZSkge1xuICAgICAgICBpZiAobGFiLmtpbmQgIT0gbnVsbCAmJiAoaXNCcmVhayB8fCBsYWIua2luZCA9PT0gXCJsb29wXCIpKSB7IGJyZWFrIH1cbiAgICAgICAgaWYgKG5vZGUubGFiZWwgJiYgaXNCcmVhaykgeyBicmVhayB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpID09PSB0aGlzLmxhYmVscy5sZW5ndGgpIHsgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcIlVuc3ludGFjdGljIFwiICsga2V5d29yZCk7IH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGlzQnJlYWsgPyBcIkJyZWFrU3RhdGVtZW50XCIgOiBcIkNvbnRpbnVlU3RhdGVtZW50XCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZURlYnVnZ2VyU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHRoaXMuc2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkRlYnVnZ2VyU3RhdGVtZW50XCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZURvU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHRoaXMubGFiZWxzLnB1c2gobG9vcExhYmVsKTtcbiAgICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KFwiZG9cIik7XG4gICAgdGhpcy5sYWJlbHMucG9wKCk7XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5fd2hpbGUpO1xuICAgIG5vZGUudGVzdCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpXG4gICAgICB7IHRoaXMuZWF0KHR5cGVzJDEuc2VtaSk7IH1cbiAgICBlbHNlXG4gICAgICB7IHRoaXMuc2VtaWNvbG9uKCk7IH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRG9XaGlsZVN0YXRlbWVudFwiKVxuICB9O1xuXG4gIC8vIERpc2FtYmlndWF0aW5nIGJldHdlZW4gYSBgZm9yYCBhbmQgYSBgZm9yYC9gaW5gIG9yIGBmb3JgL2BvZmBcbiAgLy8gbG9vcCBpcyBub24tdHJpdmlhbC4gQmFzaWNhbGx5LCB3ZSBoYXZlIHRvIHBhcnNlIHRoZSBpbml0IGB2YXJgXG4gIC8vIHN0YXRlbWVudCBvciBleHByZXNzaW9uLCBkaXNhbGxvd2luZyB0aGUgYGluYCBvcGVyYXRvciAoc2VlXG4gIC8vIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIGBwYXJzZUV4cHJlc3Npb25gKSwgYW5kIHRoZW4gY2hlY2tcbiAgLy8gd2hldGhlciB0aGUgbmV4dCB0b2tlbiBpcyBgaW5gIG9yIGBvZmAuIFdoZW4gdGhlcmUgaXMgbm8gaW5pdFxuICAvLyBwYXJ0IChzZW1pY29sb24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMpLCBpdFxuICAvLyBpcyBhIHJlZ3VsYXIgYGZvcmAgbG9vcC5cblxuICBwcCQ4LnBhcnNlRm9yU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHZhciBhd2FpdEF0ID0gKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmIHRoaXMuY2FuQXdhaXQgJiYgdGhpcy5lYXRDb250ZXh0dWFsKFwiYXdhaXRcIikpID8gdGhpcy5sYXN0VG9rU3RhcnQgOiAtMTtcbiAgICB0aGlzLmxhYmVscy5wdXNoKGxvb3BMYWJlbCk7XG4gICAgdGhpcy5lbnRlclNjb3BlKDApO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEucGFyZW5MKTtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLnNlbWkpIHtcbiAgICAgIGlmIChhd2FpdEF0ID4gLTEpIHsgdGhpcy51bmV4cGVjdGVkKGF3YWl0QXQpOyB9XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUZvcihub2RlLCBudWxsKVxuICAgIH1cbiAgICB2YXIgaXNMZXQgPSB0aGlzLmlzTGV0KCk7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5fdmFyIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5fY29uc3QgfHwgaXNMZXQpIHtcbiAgICAgIHZhciBpbml0JDEgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBraW5kID0gaXNMZXQgPyBcImxldFwiIDogdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgdGhpcy5wYXJzZVZhcihpbml0JDEsIHRydWUsIGtpbmQpO1xuICAgICAgdGhpcy5maW5pc2hOb2RlKGluaXQkMSwgXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpO1xuICAgICAgaWYgKCh0aGlzLnR5cGUgPT09IHR5cGVzJDEuX2luIHx8ICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLmlzQ29udGV4dHVhbChcIm9mXCIpKSkgJiYgaW5pdCQxLmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5KSB7XG4gICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5faW4pIHtcbiAgICAgICAgICAgIGlmIChhd2FpdEF0ID4gLTEpIHsgdGhpcy51bmV4cGVjdGVkKGF3YWl0QXQpOyB9XG4gICAgICAgICAgfSBlbHNlIHsgbm9kZS5hd2FpdCA9IGF3YWl0QXQgPiAtMTsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRm9ySW4obm9kZSwgaW5pdCQxKVxuICAgICAgfVxuICAgICAgaWYgKGF3YWl0QXQgPiAtMSkgeyB0aGlzLnVuZXhwZWN0ZWQoYXdhaXRBdCk7IH1cbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRm9yKG5vZGUsIGluaXQkMSlcbiAgICB9XG4gICAgdmFyIHN0YXJ0c1dpdGhMZXQgPSB0aGlzLmlzQ29udGV4dHVhbChcImxldFwiKSwgaXNGb3JPZiA9IGZhbHNlO1xuICAgIHZhciByZWZEZXN0cnVjdHVyaW5nRXJyb3JzID0gbmV3IERlc3RydWN0dXJpbmdFcnJvcnM7XG4gICAgdmFyIGluaXQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihhd2FpdEF0ID4gLTEgPyBcImF3YWl0XCIgOiB0cnVlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLl9pbiB8fCAoaXNGb3JPZiA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMuaXNDb250ZXh0dWFsKFwib2ZcIikpKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5faW4pIHtcbiAgICAgICAgICBpZiAoYXdhaXRBdCA+IC0xKSB7IHRoaXMudW5leHBlY3RlZChhd2FpdEF0KTsgfVxuICAgICAgICB9IGVsc2UgeyBub2RlLmF3YWl0ID0gYXdhaXRBdCA+IC0xOyB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhcnRzV2l0aExldCAmJiBpc0Zvck9mKSB7IHRoaXMucmFpc2UoaW5pdC5zdGFydCwgXCJUaGUgbGVmdC1oYW5kIHNpZGUgb2YgYSBmb3Itb2YgbG9vcCBtYXkgbm90IHN0YXJ0IHdpdGggJ2xldCcuXCIpOyB9XG4gICAgICB0aGlzLnRvQXNzaWduYWJsZShpbml0LCBmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgICB0aGlzLmNoZWNrTFZhbFBhdHRlcm4oaW5pdCk7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUZvckluKG5vZGUsIGluaXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYXdhaXRBdCA+IC0xKSB7IHRoaXMudW5leHBlY3RlZChhd2FpdEF0KTsgfVxuICAgIHJldHVybiB0aGlzLnBhcnNlRm9yKG5vZGUsIGluaXQpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUZ1bmN0aW9uU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwgaXNBc3luYywgZGVjbGFyYXRpb25Qb3NpdGlvbikge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24obm9kZSwgRlVOQ19TVEFURU1FTlQgfCAoZGVjbGFyYXRpb25Qb3NpdGlvbiA/IDAgOiBGVU5DX0hBTkdJTkdfU1RBVEVNRU5UKSwgZmFsc2UsIGlzQXN5bmMpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUlmU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIG5vZGUudGVzdCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKTtcbiAgICAvLyBhbGxvdyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gYnJhbmNoZXMsIGJ1dCBvbmx5IGluIG5vbi1zdHJpY3QgbW9kZVxuICAgIG5vZGUuY29uc2VxdWVudCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJpZlwiKTtcbiAgICBub2RlLmFsdGVybmF0ZSA9IHRoaXMuZWF0KHR5cGVzJDEuX2Vsc2UpID8gdGhpcy5wYXJzZVN0YXRlbWVudChcImlmXCIpIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSWZTdGF0ZW1lbnRcIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlUmV0dXJuU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghdGhpcy5pbkZ1bmN0aW9uICYmICF0aGlzLm9wdGlvbnMuYWxsb3dSZXR1cm5PdXRzaWRlRnVuY3Rpb24pXG4gICAgICB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCIncmV0dXJuJyBvdXRzaWRlIG9mIGZ1bmN0aW9uXCIpOyB9XG4gICAgdGhpcy5uZXh0KCk7XG5cbiAgICAvLyBJbiBgcmV0dXJuYCAoYW5kIGBicmVha2AvYGNvbnRpbnVlYCksIHRoZSBrZXl3b3JkcyB3aXRoXG4gICAgLy8gb3B0aW9uYWwgYXJndW1lbnRzLCB3ZSBlYWdlcmx5IGxvb2sgZm9yIGEgc2VtaWNvbG9uIG9yIHRoZVxuICAgIC8vIHBvc3NpYmlsaXR5IHRvIGluc2VydCBvbmUuXG5cbiAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5zZW1pKSB8fCB0aGlzLmluc2VydFNlbWljb2xvbigpKSB7IG5vZGUuYXJndW1lbnQgPSBudWxsOyB9XG4gICAgZWxzZSB7IG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOyB0aGlzLnNlbWljb2xvbigpOyB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlJldHVyblN0YXRlbWVudFwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VTd2l0Y2hTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5kaXNjcmltaW5hbnQgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gICAgbm9kZS5jYXNlcyA9IFtdO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuYnJhY2VMKTtcbiAgICB0aGlzLmxhYmVscy5wdXNoKHN3aXRjaExhYmVsKTtcbiAgICB0aGlzLmVudGVyU2NvcGUoMCk7XG5cbiAgICAvLyBTdGF0ZW1lbnRzIHVuZGVyIG11c3QgYmUgZ3JvdXBlZCAoYnkgbGFiZWwpIGluIFN3aXRjaENhc2VcbiAgICAvLyBub2Rlcy4gYGN1cmAgaXMgdXNlZCB0byBrZWVwIHRoZSBub2RlIHRoYXQgd2UgYXJlIGN1cnJlbnRseVxuICAgIC8vIGFkZGluZyBzdGF0ZW1lbnRzIHRvLlxuXG4gICAgdmFyIGN1cjtcbiAgICBmb3IgKHZhciBzYXdEZWZhdWx0ID0gZmFsc2U7IHRoaXMudHlwZSAhPT0gdHlwZXMkMS5icmFjZVI7KSB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLl9jYXNlIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5fZGVmYXVsdCkge1xuICAgICAgICB2YXIgaXNDYXNlID0gdGhpcy50eXBlID09PSB0eXBlcyQxLl9jYXNlO1xuICAgICAgICBpZiAoY3VyKSB7IHRoaXMuZmluaXNoTm9kZShjdXIsIFwiU3dpdGNoQ2FzZVwiKTsgfVxuICAgICAgICBub2RlLmNhc2VzLnB1c2goY3VyID0gdGhpcy5zdGFydE5vZGUoKSk7XG4gICAgICAgIGN1ci5jb25zZXF1ZW50ID0gW107XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAoaXNDYXNlKSB7XG4gICAgICAgICAgY3VyLnRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzYXdEZWZhdWx0KSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLmxhc3RUb2tTdGFydCwgXCJNdWx0aXBsZSBkZWZhdWx0IGNsYXVzZXNcIik7IH1cbiAgICAgICAgICBzYXdEZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICBjdXIudGVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leHBlY3QodHlwZXMkMS5jb2xvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWN1cikgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgICBjdXIuY29uc2VxdWVudC5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnQobnVsbCkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmV4aXRTY29wZSgpO1xuICAgIGlmIChjdXIpIHsgdGhpcy5maW5pc2hOb2RlKGN1ciwgXCJTd2l0Y2hDYXNlXCIpOyB9XG4gICAgdGhpcy5uZXh0KCk7IC8vIENsb3NpbmcgYnJhY2VcbiAgICB0aGlzLmxhYmVscy5wb3AoKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiU3dpdGNoU3RhdGVtZW50XCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZVRocm93U3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIGlmIChsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5zdGFydCkpKVxuICAgICAgeyB0aGlzLnJhaXNlKHRoaXMubGFzdFRva0VuZCwgXCJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3dcIik7IH1cbiAgICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICB0aGlzLnNlbWljb2xvbigpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJUaHJvd1N0YXRlbWVudFwiKVxuICB9O1xuXG4gIC8vIFJldXNlZCBlbXB0eSBhcnJheSBhZGRlZCBmb3Igbm9kZSBmaWVsZHMgdGhhdCBhcmUgYWx3YXlzIGVtcHR5LlxuXG4gIHZhciBlbXB0eSQxID0gW107XG5cbiAgcHAkOC5wYXJzZUNhdGNoQ2xhdXNlUGFyYW0gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGFyYW0gPSB0aGlzLnBhcnNlQmluZGluZ0F0b20oKTtcbiAgICB2YXIgc2ltcGxlID0gcGFyYW0udHlwZSA9PT0gXCJJZGVudGlmaWVyXCI7XG4gICAgdGhpcy5lbnRlclNjb3BlKHNpbXBsZSA/IFNDT1BFX1NJTVBMRV9DQVRDSCA6IDApO1xuICAgIHRoaXMuY2hlY2tMVmFsUGF0dGVybihwYXJhbSwgc2ltcGxlID8gQklORF9TSU1QTEVfQ0FUQ0ggOiBCSU5EX0xFWElDQUwpO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEucGFyZW5SKTtcblxuICAgIHJldHVybiBwYXJhbVxuICB9O1xuXG4gIHBwJDgucGFyc2VUcnlTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5ibG9jayA9IHRoaXMucGFyc2VCbG9jaygpO1xuICAgIG5vZGUuaGFuZGxlciA9IG51bGw7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5fY2F0Y2gpIHtcbiAgICAgIHZhciBjbGF1c2UgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5wYXJlbkwpKSB7XG4gICAgICAgIGNsYXVzZS5wYXJhbSA9IHRoaXMucGFyc2VDYXRjaENsYXVzZVBhcmFtKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgMTApIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgICAgY2xhdXNlLnBhcmFtID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbnRlclNjb3BlKDApO1xuICAgICAgfVxuICAgICAgY2xhdXNlLmJvZHkgPSB0aGlzLnBhcnNlQmxvY2soZmFsc2UpO1xuICAgICAgdGhpcy5leGl0U2NvcGUoKTtcbiAgICAgIG5vZGUuaGFuZGxlciA9IHRoaXMuZmluaXNoTm9kZShjbGF1c2UsIFwiQ2F0Y2hDbGF1c2VcIik7XG4gICAgfVxuICAgIG5vZGUuZmluYWxpemVyID0gdGhpcy5lYXQodHlwZXMkMS5fZmluYWxseSkgPyB0aGlzLnBhcnNlQmxvY2soKSA6IG51bGw7XG4gICAgaWYgKCFub2RlLmhhbmRsZXIgJiYgIW5vZGUuZmluYWxpemVyKVxuICAgICAgeyB0aGlzLnJhaXNlKG5vZGUuc3RhcnQsIFwiTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGNsYXVzZVwiKTsgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJUcnlTdGF0ZW1lbnRcIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlVmFyU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwga2luZCwgYWxsb3dNaXNzaW5nSW5pdGlhbGl6ZXIpIHtcbiAgICB0aGlzLm5leHQoKTtcbiAgICB0aGlzLnBhcnNlVmFyKG5vZGUsIGZhbHNlLCBraW5kLCBhbGxvd01pc3NpbmdJbml0aWFsaXplcik7XG4gICAgdGhpcy5zZW1pY29sb24oKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VXaGlsZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB0aGlzLm5leHQoKTtcbiAgICBub2RlLnRlc3QgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gICAgdGhpcy5sYWJlbHMucHVzaChsb29wTGFiZWwpO1xuICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJ3aGlsZVwiKTtcbiAgICB0aGlzLmxhYmVscy5wb3AoKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiV2hpbGVTdGF0ZW1lbnRcIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlV2l0aFN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAodGhpcy5zdHJpY3QpIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIid3aXRoJyBpbiBzdHJpY3QgbW9kZVwiKTsgfVxuICAgIHRoaXMubmV4dCgpO1xuICAgIG5vZGUub2JqZWN0ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpO1xuICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJ3aXRoXCIpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJXaXRoU3RhdGVtZW50XCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUVtcHR5U3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJFbXB0eVN0YXRlbWVudFwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VMYWJlbGVkU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwgbWF5YmVOYW1lLCBleHByLCBjb250ZXh0KSB7XG4gICAgZm9yICh2YXIgaSQxID0gMCwgbGlzdCA9IHRoaXMubGFiZWxzOyBpJDEgPCBsaXN0Lmxlbmd0aDsgaSQxICs9IDEpXG4gICAgICB7XG4gICAgICB2YXIgbGFiZWwgPSBsaXN0W2kkMV07XG5cbiAgICAgIGlmIChsYWJlbC5uYW1lID09PSBtYXliZU5hbWUpXG4gICAgICAgIHsgdGhpcy5yYWlzZShleHByLnN0YXJ0LCBcIkxhYmVsICdcIiArIG1heWJlTmFtZSArIFwiJyBpcyBhbHJlYWR5IGRlY2xhcmVkXCIpO1xuICAgIH0gfVxuICAgIHZhciBraW5kID0gdGhpcy50eXBlLmlzTG9vcCA/IFwibG9vcFwiIDogdGhpcy50eXBlID09PSB0eXBlcyQxLl9zd2l0Y2ggPyBcInN3aXRjaFwiIDogbnVsbDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sYWJlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBsYWJlbCQxID0gdGhpcy5sYWJlbHNbaV07XG4gICAgICBpZiAobGFiZWwkMS5zdGF0ZW1lbnRTdGFydCA9PT0gbm9kZS5zdGFydCkge1xuICAgICAgICAvLyBVcGRhdGUgaW5mb3JtYXRpb24gYWJvdXQgcHJldmlvdXMgbGFiZWxzIG9uIHRoaXMgbm9kZVxuICAgICAgICBsYWJlbCQxLnN0YXRlbWVudFN0YXJ0ID0gdGhpcy5zdGFydDtcbiAgICAgICAgbGFiZWwkMS5raW5kID0ga2luZDtcbiAgICAgIH0gZWxzZSB7IGJyZWFrIH1cbiAgICB9XG4gICAgdGhpcy5sYWJlbHMucHVzaCh7bmFtZTogbWF5YmVOYW1lLCBraW5kOiBraW5kLCBzdGF0ZW1lbnRTdGFydDogdGhpcy5zdGFydH0pO1xuICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoY29udGV4dCA/IGNvbnRleHQuaW5kZXhPZihcImxhYmVsXCIpID09PSAtMSA/IGNvbnRleHQgKyBcImxhYmVsXCIgOiBjb250ZXh0IDogXCJsYWJlbFwiKTtcbiAgICB0aGlzLmxhYmVscy5wb3AoKTtcbiAgICBub2RlLmxhYmVsID0gZXhwcjtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTGFiZWxlZFN0YXRlbWVudFwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwgZXhwcikge1xuICAgIG5vZGUuZXhwcmVzc2lvbiA9IGV4cHI7XG4gICAgdGhpcy5zZW1pY29sb24oKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKVxuICB9O1xuXG4gIC8vIFBhcnNlIGEgc2VtaWNvbG9uLWVuY2xvc2VkIGJsb2NrIG9mIHN0YXRlbWVudHMsIGhhbmRsaW5nIGBcInVzZVxuICAvLyBzdHJpY3RcImAgZGVjbGFyYXRpb25zIHdoZW4gYGFsbG93U3RyaWN0YCBpcyB0cnVlICh1c2VkIGZvclxuICAvLyBmdW5jdGlvbiBib2RpZXMpLlxuXG4gIHBwJDgucGFyc2VCbG9jayA9IGZ1bmN0aW9uKGNyZWF0ZU5ld0xleGljYWxTY29wZSwgbm9kZSwgZXhpdFN0cmljdCkge1xuICAgIGlmICggY3JlYXRlTmV3TGV4aWNhbFNjb3BlID09PSB2b2lkIDAgKSBjcmVhdGVOZXdMZXhpY2FsU2NvcGUgPSB0cnVlO1xuICAgIGlmICggbm9kZSA9PT0gdm9pZCAwICkgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG5cbiAgICBub2RlLmJvZHkgPSBbXTtcbiAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLmJyYWNlTCk7XG4gICAgaWYgKGNyZWF0ZU5ld0xleGljYWxTY29wZSkgeyB0aGlzLmVudGVyU2NvcGUoMCk7IH1cbiAgICB3aGlsZSAodGhpcy50eXBlICE9PSB0eXBlcyQxLmJyYWNlUikge1xuICAgICAgdmFyIHN0bXQgPSB0aGlzLnBhcnNlU3RhdGVtZW50KG51bGwpO1xuICAgICAgbm9kZS5ib2R5LnB1c2goc3RtdCk7XG4gICAgfVxuICAgIGlmIChleGl0U3RyaWN0KSB7IHRoaXMuc3RyaWN0ID0gZmFsc2U7IH1cbiAgICB0aGlzLm5leHQoKTtcbiAgICBpZiAoY3JlYXRlTmV3TGV4aWNhbFNjb3BlKSB7IHRoaXMuZXhpdFNjb3BlKCk7IH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQmxvY2tTdGF0ZW1lbnRcIilcbiAgfTtcblxuICAvLyBQYXJzZSBhIHJlZ3VsYXIgYGZvcmAgbG9vcC4gVGhlIGRpc2FtYmlndWF0aW9uIGNvZGUgaW5cbiAgLy8gYHBhcnNlU3RhdGVtZW50YCB3aWxsIGFscmVhZHkgaGF2ZSBwYXJzZWQgdGhlIGluaXQgc3RhdGVtZW50IG9yXG4gIC8vIGV4cHJlc3Npb24uXG5cbiAgcHAkOC5wYXJzZUZvciA9IGZ1bmN0aW9uKG5vZGUsIGluaXQpIHtcbiAgICBub2RlLmluaXQgPSBpbml0O1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuc2VtaSk7XG4gICAgbm9kZS50ZXN0ID0gdGhpcy50eXBlID09PSB0eXBlcyQxLnNlbWkgPyBudWxsIDogdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLnNlbWkpO1xuICAgIG5vZGUudXBkYXRlID0gdGhpcy50eXBlID09PSB0eXBlcyQxLnBhcmVuUiA/IG51bGwgOiB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEucGFyZW5SKTtcbiAgICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KFwiZm9yXCIpO1xuICAgIHRoaXMuZXhpdFNjb3BlKCk7XG4gICAgdGhpcy5sYWJlbHMucG9wKCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkZvclN0YXRlbWVudFwiKVxuICB9O1xuXG4gIC8vIFBhcnNlIGEgYGZvcmAvYGluYCBhbmQgYGZvcmAvYG9mYCBsb29wLCB3aGljaCBhcmUgYWxtb3N0XG4gIC8vIHNhbWUgZnJvbSBwYXJzZXIncyBwZXJzcGVjdGl2ZS5cblxuICBwcCQ4LnBhcnNlRm9ySW4gPSBmdW5jdGlvbihub2RlLCBpbml0KSB7XG4gICAgdmFyIGlzRm9ySW4gPSB0aGlzLnR5cGUgPT09IHR5cGVzJDEuX2luO1xuICAgIHRoaXMubmV4dCgpO1xuXG4gICAgaWYgKFxuICAgICAgaW5pdC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiAmJlxuICAgICAgaW5pdC5kZWNsYXJhdGlvbnNbMF0uaW5pdCAhPSBudWxsICYmXG4gICAgICAoXG4gICAgICAgICFpc0ZvckluIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDggfHxcbiAgICAgICAgdGhpcy5zdHJpY3QgfHxcbiAgICAgICAgaW5pdC5raW5kICE9PSBcInZhclwiIHx8XG4gICAgICAgIGluaXQuZGVjbGFyYXRpb25zWzBdLmlkLnR5cGUgIT09IFwiSWRlbnRpZmllclwiXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aGlzLnJhaXNlKFxuICAgICAgICBpbml0LnN0YXJ0LFxuICAgICAgICAoKGlzRm9ySW4gPyBcImZvci1pblwiIDogXCJmb3Itb2ZcIikgKyBcIiBsb29wIHZhcmlhYmxlIGRlY2xhcmF0aW9uIG1heSBub3QgaGF2ZSBhbiBpbml0aWFsaXplclwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgbm9kZS5sZWZ0ID0gaW5pdDtcbiAgICBub2RlLnJpZ2h0ID0gaXNGb3JJbiA/IHRoaXMucGFyc2VFeHByZXNzaW9uKCkgOiB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLnBhcmVuUik7XG4gICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudChcImZvclwiKTtcbiAgICB0aGlzLmV4aXRTY29wZSgpO1xuICAgIHRoaXMubGFiZWxzLnBvcCgpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgaXNGb3JJbiA/IFwiRm9ySW5TdGF0ZW1lbnRcIiA6IFwiRm9yT2ZTdGF0ZW1lbnRcIilcbiAgfTtcblxuICAvLyBQYXJzZSBhIGxpc3Qgb2YgdmFyaWFibGUgZGVjbGFyYXRpb25zLlxuXG4gIHBwJDgucGFyc2VWYXIgPSBmdW5jdGlvbihub2RlLCBpc0Zvciwga2luZCwgYWxsb3dNaXNzaW5nSW5pdGlhbGl6ZXIpIHtcbiAgICBub2RlLmRlY2xhcmF0aW9ucyA9IFtdO1xuICAgIG5vZGUua2luZCA9IGtpbmQ7XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIGRlY2wgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgICAgdGhpcy5wYXJzZVZhcklkKGRlY2wsIGtpbmQpO1xuICAgICAgaWYgKHRoaXMuZWF0KHR5cGVzJDEuZXEpKSB7XG4gICAgICAgIGRlY2wuaW5pdCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihpc0Zvcik7XG4gICAgICB9IGVsc2UgaWYgKCFhbGxvd01pc3NpbmdJbml0aWFsaXplciAmJiBraW5kID09PSBcImNvbnN0XCIgJiYgISh0aGlzLnR5cGUgPT09IHR5cGVzJDEuX2luIHx8ICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLmlzQ29udGV4dHVhbChcIm9mXCIpKSkpIHtcbiAgICAgICAgdGhpcy51bmV4cGVjdGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKCFhbGxvd01pc3NpbmdJbml0aWFsaXplciAmJiBkZWNsLmlkLnR5cGUgIT09IFwiSWRlbnRpZmllclwiICYmICEoaXNGb3IgJiYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5faW4gfHwgdGhpcy5pc0NvbnRleHR1YWwoXCJvZlwiKSkpKSB7XG4gICAgICAgIHRoaXMucmFpc2UodGhpcy5sYXN0VG9rRW5kLCBcIkNvbXBsZXggYmluZGluZyBwYXR0ZXJucyByZXF1aXJlIGFuIGluaXRpYWxpemF0aW9uIHZhbHVlXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVjbC5pbml0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIG5vZGUuZGVjbGFyYXRpb25zLnB1c2godGhpcy5maW5pc2hOb2RlKGRlY2wsIFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpKTtcbiAgICAgIGlmICghdGhpcy5lYXQodHlwZXMkMS5jb21tYSkpIHsgYnJlYWsgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZVxuICB9O1xuXG4gIHBwJDgucGFyc2VWYXJJZCA9IGZ1bmN0aW9uKGRlY2wsIGtpbmQpIHtcbiAgICBkZWNsLmlkID0gdGhpcy5wYXJzZUJpbmRpbmdBdG9tKCk7XG4gICAgdGhpcy5jaGVja0xWYWxQYXR0ZXJuKGRlY2wuaWQsIGtpbmQgPT09IFwidmFyXCIgPyBCSU5EX1ZBUiA6IEJJTkRfTEVYSUNBTCwgZmFsc2UpO1xuICB9O1xuXG4gIHZhciBGVU5DX1NUQVRFTUVOVCA9IDEsIEZVTkNfSEFOR0lOR19TVEFURU1FTlQgPSAyLCBGVU5DX05VTExBQkxFX0lEID0gNDtcblxuICAvLyBQYXJzZSBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG9yIGxpdGVyYWwgKGRlcGVuZGluZyBvbiB0aGVcbiAgLy8gYHN0YXRlbWVudCAmIEZVTkNfU1RBVEVNRU5UYCkuXG5cbiAgLy8gUmVtb3ZlIGBhbGxvd0V4cHJlc3Npb25Cb2R5YCBmb3IgNy4wLjAsIGFzIGl0IGlzIG9ubHkgY2FsbGVkIHdpdGggZmFsc2VcbiAgcHAkOC5wYXJzZUZ1bmN0aW9uID0gZnVuY3Rpb24obm9kZSwgc3RhdGVtZW50LCBhbGxvd0V4cHJlc3Npb25Cb2R5LCBpc0FzeW5jLCBmb3JJbml0KSB7XG4gICAgdGhpcy5pbml0RnVuY3Rpb24obm9kZSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5IHx8IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmICFpc0FzeW5jKSB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLnN0YXIgJiYgKHN0YXRlbWVudCAmIEZVTkNfSEFOR0lOR19TVEFURU1FTlQpKVxuICAgICAgICB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICBub2RlLmdlbmVyYXRvciA9IHRoaXMuZWF0KHR5cGVzJDEuc3Rhcik7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOClcbiAgICAgIHsgbm9kZS5hc3luYyA9ICEhaXNBc3luYzsgfVxuXG4gICAgaWYgKHN0YXRlbWVudCAmIEZVTkNfU1RBVEVNRU5UKSB7XG4gICAgICBub2RlLmlkID0gKHN0YXRlbWVudCAmIEZVTkNfTlVMTEFCTEVfSUQpICYmIHRoaXMudHlwZSAhPT0gdHlwZXMkMS5uYW1lID8gbnVsbCA6IHRoaXMucGFyc2VJZGVudCgpO1xuICAgICAgaWYgKG5vZGUuaWQgJiYgIShzdGF0ZW1lbnQgJiBGVU5DX0hBTkdJTkdfU1RBVEVNRU5UKSlcbiAgICAgICAgLy8gSWYgaXQgaXMgYSByZWd1bGFyIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGluIHNsb3BweSBtb2RlLCB0aGVuIGl0IGlzXG4gICAgICAgIC8vIHN1YmplY3QgdG8gQW5uZXggQiBzZW1hbnRpY3MgKEJJTkRfRlVOQ1RJT04pLiBPdGhlcndpc2UsIHRoZSBiaW5kaW5nXG4gICAgICAgIC8vIG1vZGUgZGVwZW5kcyBvbiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IHNjb3BlIChzZWVcbiAgICAgICAgLy8gdHJlYXRGdW5jdGlvbnNBc1ZhcikuXG4gICAgICAgIHsgdGhpcy5jaGVja0xWYWxTaW1wbGUobm9kZS5pZCwgKHRoaXMuc3RyaWN0IHx8IG5vZGUuZ2VuZXJhdG9yIHx8IG5vZGUuYXN5bmMpID8gdGhpcy50cmVhdEZ1bmN0aW9uc0FzVmFyID8gQklORF9WQVIgOiBCSU5EX0xFWElDQUwgOiBCSU5EX0ZVTkNUSU9OKTsgfVxuICAgIH1cblxuICAgIHZhciBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgb2xkQXdhaXRJZGVudFBvcyA9IHRoaXMuYXdhaXRJZGVudFBvcztcbiAgICB0aGlzLnlpZWxkUG9zID0gMDtcbiAgICB0aGlzLmF3YWl0UG9zID0gMDtcbiAgICB0aGlzLmF3YWl0SWRlbnRQb3MgPSAwO1xuICAgIHRoaXMuZW50ZXJTY29wZShmdW5jdGlvbkZsYWdzKG5vZGUuYXN5bmMsIG5vZGUuZ2VuZXJhdG9yKSk7XG5cbiAgICBpZiAoIShzdGF0ZW1lbnQgJiBGVU5DX1NUQVRFTUVOVCkpXG4gICAgICB7IG5vZGUuaWQgPSB0aGlzLnR5cGUgPT09IHR5cGVzJDEubmFtZSA/IHRoaXMucGFyc2VJZGVudCgpIDogbnVsbDsgfVxuXG4gICAgdGhpcy5wYXJzZUZ1bmN0aW9uUGFyYW1zKG5vZGUpO1xuICAgIHRoaXMucGFyc2VGdW5jdGlvbkJvZHkobm9kZSwgYWxsb3dFeHByZXNzaW9uQm9keSwgZmFsc2UsIGZvckluaXQpO1xuXG4gICAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zO1xuICAgIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvcztcbiAgICB0aGlzLmF3YWl0SWRlbnRQb3MgPSBvbGRBd2FpdElkZW50UG9zO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgKHN0YXRlbWVudCAmIEZVTkNfU1RBVEVNRU5UKSA/IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiIDogXCJGdW5jdGlvbkV4cHJlc3Npb25cIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlRnVuY3Rpb25QYXJhbXMgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5wYXJlbkwpO1xuICAgIG5vZGUucGFyYW1zID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KHR5cGVzJDEucGFyZW5SLCBmYWxzZSwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpO1xuICAgIHRoaXMuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKCk7XG4gIH07XG5cbiAgLy8gUGFyc2UgYSBjbGFzcyBkZWNsYXJhdGlvbiBvciBsaXRlcmFsIChkZXBlbmRpbmcgb24gdGhlXG4gIC8vIGBpc1N0YXRlbWVudGAgcGFyYW1ldGVyKS5cblxuICBwcCQ4LnBhcnNlQ2xhc3MgPSBmdW5jdGlvbihub2RlLCBpc1N0YXRlbWVudCkge1xuICAgIHRoaXMubmV4dCgpO1xuXG4gICAgLy8gZWNtYS0yNjIgMTQuNiBDbGFzcyBEZWZpbml0aW9uc1xuICAgIC8vIEEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbHdheXMgc3RyaWN0IG1vZGUgY29kZS5cbiAgICB2YXIgb2xkU3RyaWN0ID0gdGhpcy5zdHJpY3Q7XG4gICAgdGhpcy5zdHJpY3QgPSB0cnVlO1xuXG4gICAgdGhpcy5wYXJzZUNsYXNzSWQobm9kZSwgaXNTdGF0ZW1lbnQpO1xuICAgIHRoaXMucGFyc2VDbGFzc1N1cGVyKG5vZGUpO1xuICAgIHZhciBwcml2YXRlTmFtZU1hcCA9IHRoaXMuZW50ZXJDbGFzc0JvZHkoKTtcbiAgICB2YXIgY2xhc3NCb2R5ID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICB2YXIgaGFkQ29uc3RydWN0b3IgPSBmYWxzZTtcbiAgICBjbGFzc0JvZHkuYm9keSA9IFtdO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuYnJhY2VMKTtcbiAgICB3aGlsZSAodGhpcy50eXBlICE9PSB0eXBlcyQxLmJyYWNlUikge1xuICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnBhcnNlQ2xhc3NFbGVtZW50KG5vZGUuc3VwZXJDbGFzcyAhPT0gbnVsbCk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBjbGFzc0JvZHkuYm9keS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcIk1ldGhvZERlZmluaXRpb25cIiAmJiBlbGVtZW50LmtpbmQgPT09IFwiY29uc3RydWN0b3JcIikge1xuICAgICAgICAgIGlmIChoYWRDb25zdHJ1Y3RvcikgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZWxlbWVudC5zdGFydCwgXCJEdXBsaWNhdGUgY29uc3RydWN0b3IgaW4gdGhlIHNhbWUgY2xhc3NcIik7IH1cbiAgICAgICAgICBoYWRDb25zdHJ1Y3RvciA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5rZXkgJiYgZWxlbWVudC5rZXkudHlwZSA9PT0gXCJQcml2YXRlSWRlbnRpZmllclwiICYmIGlzUHJpdmF0ZU5hbWVDb25mbGljdGVkKHByaXZhdGVOYW1lTWFwLCBlbGVtZW50KSkge1xuICAgICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShlbGVtZW50LmtleS5zdGFydCwgKFwiSWRlbnRpZmllciAnI1wiICsgKGVsZW1lbnQua2V5Lm5hbWUpICsgXCInIGhhcyBhbHJlYWR5IGJlZW4gZGVjbGFyZWRcIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RyaWN0ID0gb2xkU3RyaWN0O1xuICAgIHRoaXMubmV4dCgpO1xuICAgIG5vZGUuYm9keSA9IHRoaXMuZmluaXNoTm9kZShjbGFzc0JvZHksIFwiQ2xhc3NCb2R5XCIpO1xuICAgIHRoaXMuZXhpdENsYXNzQm9keSgpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgaXNTdGF0ZW1lbnQgPyBcIkNsYXNzRGVjbGFyYXRpb25cIiA6IFwiQ2xhc3NFeHByZXNzaW9uXCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUNsYXNzRWxlbWVudCA9IGZ1bmN0aW9uKGNvbnN0cnVjdG9yQWxsb3dzU3VwZXIpIHtcbiAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5zZW1pKSkgeyByZXR1cm4gbnVsbCB9XG5cbiAgICB2YXIgZWNtYVZlcnNpb24gPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb247XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHZhciBrZXlOYW1lID0gXCJcIjtcbiAgICB2YXIgaXNHZW5lcmF0b3IgPSBmYWxzZTtcbiAgICB2YXIgaXNBc3luYyA9IGZhbHNlO1xuICAgIHZhciBraW5kID0gXCJtZXRob2RcIjtcbiAgICB2YXIgaXNTdGF0aWMgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmVhdENvbnRleHR1YWwoXCJzdGF0aWNcIikpIHtcbiAgICAgIC8vIFBhcnNlIHN0YXRpYyBpbml0IGJsb2NrXG4gICAgICBpZiAoZWNtYVZlcnNpb24gPj0gMTMgJiYgdGhpcy5lYXQodHlwZXMkMS5icmFjZUwpKSB7XG4gICAgICAgIHRoaXMucGFyc2VDbGFzc1N0YXRpY0Jsb2NrKG5vZGUpO1xuICAgICAgICByZXR1cm4gbm9kZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNDbGFzc0VsZW1lbnROYW1lU3RhcnQoKSB8fCB0aGlzLnR5cGUgPT09IHR5cGVzJDEuc3Rhcikge1xuICAgICAgICBpc1N0YXRpYyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlOYW1lID0gXCJzdGF0aWNcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgbm9kZS5zdGF0aWMgPSBpc1N0YXRpYztcbiAgICBpZiAoIWtleU5hbWUgJiYgZWNtYVZlcnNpb24gPj0gOCAmJiB0aGlzLmVhdENvbnRleHR1YWwoXCJhc3luY1wiKSkge1xuICAgICAgaWYgKCh0aGlzLmlzQ2xhc3NFbGVtZW50TmFtZVN0YXJ0KCkgfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLnN0YXIpICYmICF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpKSB7XG4gICAgICAgIGlzQXN5bmMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5TmFtZSA9IFwiYXN5bmNcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFrZXlOYW1lICYmIChlY21hVmVyc2lvbiA+PSA5IHx8ICFpc0FzeW5jKSAmJiB0aGlzLmVhdCh0eXBlcyQxLnN0YXIpKSB7XG4gICAgICBpc0dlbmVyYXRvciA9IHRydWU7XG4gICAgfVxuICAgIGlmICgha2V5TmFtZSAmJiAhaXNBc3luYyAmJiAhaXNHZW5lcmF0b3IpIHtcbiAgICAgIHZhciBsYXN0VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgaWYgKHRoaXMuZWF0Q29udGV4dHVhbChcImdldFwiKSB8fCB0aGlzLmVhdENvbnRleHR1YWwoXCJzZXRcIikpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDbGFzc0VsZW1lbnROYW1lU3RhcnQoKSkge1xuICAgICAgICAgIGtpbmQgPSBsYXN0VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5TmFtZSA9IGxhc3RWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBhcnNlIGVsZW1lbnQgbmFtZVxuICAgIGlmIChrZXlOYW1lKSB7XG4gICAgICAvLyAnYXN5bmMnLCAnZ2V0JywgJ3NldCcsIG9yICdzdGF0aWMnIHdlcmUgbm90IGEga2V5d29yZCBjb250ZXh0dWFsbHkuXG4gICAgICAvLyBUaGUgbGFzdCB0b2tlbiBpcyBhbnkgb2YgdGhvc2UuIE1ha2UgaXQgdGhlIGVsZW1lbnQgbmFtZS5cbiAgICAgIG5vZGUuY29tcHV0ZWQgPSBmYWxzZTtcbiAgICAgIG5vZGUua2V5ID0gdGhpcy5zdGFydE5vZGVBdCh0aGlzLmxhc3RUb2tTdGFydCwgdGhpcy5sYXN0VG9rU3RhcnRMb2MpO1xuICAgICAgbm9kZS5rZXkubmFtZSA9IGtleU5hbWU7XG4gICAgICB0aGlzLmZpbmlzaE5vZGUobm9kZS5rZXksIFwiSWRlbnRpZmllclwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJzZUNsYXNzRWxlbWVudE5hbWUobm9kZSk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgZWxlbWVudCB2YWx1ZVxuICAgIGlmIChlY21hVmVyc2lvbiA8IDEzIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5wYXJlbkwgfHwga2luZCAhPT0gXCJtZXRob2RcIiB8fCBpc0dlbmVyYXRvciB8fCBpc0FzeW5jKSB7XG4gICAgICB2YXIgaXNDb25zdHJ1Y3RvciA9ICFub2RlLnN0YXRpYyAmJiBjaGVja0tleU5hbWUobm9kZSwgXCJjb25zdHJ1Y3RvclwiKTtcbiAgICAgIHZhciBhbGxvd3NEaXJlY3RTdXBlciA9IGlzQ29uc3RydWN0b3IgJiYgY29uc3RydWN0b3JBbGxvd3NTdXBlcjtcbiAgICAgIC8vIENvdWxkbid0IG1vdmUgdGhpcyBjaGVjayBpbnRvIHRoZSAncGFyc2VDbGFzc01ldGhvZCcgbWV0aG9kIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgICAgaWYgKGlzQ29uc3RydWN0b3IgJiYga2luZCAhPT0gXCJtZXRob2RcIikgeyB0aGlzLnJhaXNlKG5vZGUua2V5LnN0YXJ0LCBcIkNvbnN0cnVjdG9yIGNhbid0IGhhdmUgZ2V0L3NldCBtb2RpZmllclwiKTsgfVxuICAgICAgbm9kZS5raW5kID0gaXNDb25zdHJ1Y3RvciA/IFwiY29uc3RydWN0b3JcIiA6IGtpbmQ7XG4gICAgICB0aGlzLnBhcnNlQ2xhc3NNZXRob2Qobm9kZSwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIGFsbG93c0RpcmVjdFN1cGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJzZUNsYXNzRmllbGQobm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVcbiAgfTtcblxuICBwcCQ4LmlzQ2xhc3NFbGVtZW50TmFtZVN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5uYW1lIHx8XG4gICAgICB0aGlzLnR5cGUgPT09IHR5cGVzJDEucHJpdmF0ZUlkIHx8XG4gICAgICB0aGlzLnR5cGUgPT09IHR5cGVzJDEubnVtIHx8XG4gICAgICB0aGlzLnR5cGUgPT09IHR5cGVzJDEuc3RyaW5nIHx8XG4gICAgICB0aGlzLnR5cGUgPT09IHR5cGVzJDEuYnJhY2tldEwgfHxcbiAgICAgIHRoaXMudHlwZS5rZXl3b3JkXG4gICAgKVxuICB9O1xuXG4gIHBwJDgucGFyc2VDbGFzc0VsZW1lbnROYW1lID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEucHJpdmF0ZUlkKSB7XG4gICAgICBpZiAodGhpcy52YWx1ZSA9PT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICAgIHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJDbGFzc2VzIGNhbid0IGhhdmUgYW4gZWxlbWVudCBuYW1lZCAnI2NvbnN0cnVjdG9yJ1wiKTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuY29tcHV0ZWQgPSBmYWxzZTtcbiAgICAgIGVsZW1lbnQua2V5ID0gdGhpcy5wYXJzZVByaXZhdGVJZGVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnNlUHJvcGVydHlOYW1lKGVsZW1lbnQpO1xuICAgIH1cbiAgfTtcblxuICBwcCQ4LnBhcnNlQ2xhc3NNZXRob2QgPSBmdW5jdGlvbihtZXRob2QsIGlzR2VuZXJhdG9yLCBpc0FzeW5jLCBhbGxvd3NEaXJlY3RTdXBlcikge1xuICAgIC8vIENoZWNrIGtleSBhbmQgZmxhZ3NcbiAgICB2YXIga2V5ID0gbWV0aG9kLmtleTtcbiAgICBpZiAobWV0aG9kLmtpbmQgPT09IFwiY29uc3RydWN0b3JcIikge1xuICAgICAgaWYgKGlzR2VuZXJhdG9yKSB7IHRoaXMucmFpc2Uoa2V5LnN0YXJ0LCBcIkNvbnN0cnVjdG9yIGNhbid0IGJlIGEgZ2VuZXJhdG9yXCIpOyB9XG4gICAgICBpZiAoaXNBc3luYykgeyB0aGlzLnJhaXNlKGtleS5zdGFydCwgXCJDb25zdHJ1Y3RvciBjYW4ndCBiZSBhbiBhc3luYyBtZXRob2RcIik7IH1cbiAgICB9IGVsc2UgaWYgKG1ldGhvZC5zdGF0aWMgJiYgY2hlY2tLZXlOYW1lKG1ldGhvZCwgXCJwcm90b3R5cGVcIikpIHtcbiAgICAgIHRoaXMucmFpc2Uoa2V5LnN0YXJ0LCBcIkNsYXNzZXMgbWF5IG5vdCBoYXZlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZVwiKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB2YWx1ZVxuICAgIHZhciB2YWx1ZSA9IG1ldGhvZC52YWx1ZSA9IHRoaXMucGFyc2VNZXRob2QoaXNHZW5lcmF0b3IsIGlzQXN5bmMsIGFsbG93c0RpcmVjdFN1cGVyKTtcblxuICAgIC8vIENoZWNrIHZhbHVlXG4gICAgaWYgKG1ldGhvZC5raW5kID09PSBcImdldFwiICYmIHZhbHVlLnBhcmFtcy5sZW5ndGggIT09IDApXG4gICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh2YWx1ZS5zdGFydCwgXCJnZXR0ZXIgc2hvdWxkIGhhdmUgbm8gcGFyYW1zXCIpOyB9XG4gICAgaWYgKG1ldGhvZC5raW5kID09PSBcInNldFwiICYmIHZhbHVlLnBhcmFtcy5sZW5ndGggIT09IDEpXG4gICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh2YWx1ZS5zdGFydCwgXCJzZXR0ZXIgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1cIik7IH1cbiAgICBpZiAobWV0aG9kLmtpbmQgPT09IFwic2V0XCIgJiYgdmFsdWUucGFyYW1zWzBdLnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIilcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHZhbHVlLnBhcmFtc1swXS5zdGFydCwgXCJTZXR0ZXIgY2Fubm90IHVzZSByZXN0IHBhcmFtc1wiKTsgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShtZXRob2QsIFwiTWV0aG9kRGVmaW5pdGlvblwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VDbGFzc0ZpZWxkID0gZnVuY3Rpb24oZmllbGQpIHtcbiAgICBpZiAoY2hlY2tLZXlOYW1lKGZpZWxkLCBcImNvbnN0cnVjdG9yXCIpKSB7XG4gICAgICB0aGlzLnJhaXNlKGZpZWxkLmtleS5zdGFydCwgXCJDbGFzc2VzIGNhbid0IGhhdmUgYSBmaWVsZCBuYW1lZCAnY29uc3RydWN0b3InXCIpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuc3RhdGljICYmIGNoZWNrS2V5TmFtZShmaWVsZCwgXCJwcm90b3R5cGVcIikpIHtcbiAgICAgIHRoaXMucmFpc2UoZmllbGQua2V5LnN0YXJ0LCBcIkNsYXNzZXMgY2FuJ3QgaGF2ZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJvdG90eXBlJ1wiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5lcSkpIHtcbiAgICAgIC8vIFRvIHJhaXNlIFN5bnRheEVycm9yIGlmICdhcmd1bWVudHMnIGV4aXN0cyBpbiB0aGUgaW5pdGlhbGl6ZXIuXG4gICAgICB2YXIgc2NvcGUgPSB0aGlzLmN1cnJlbnRUaGlzU2NvcGUoKTtcbiAgICAgIHZhciBpbkNsYXNzRmllbGRJbml0ID0gc2NvcGUuaW5DbGFzc0ZpZWxkSW5pdDtcbiAgICAgIHNjb3BlLmluQ2xhc3NGaWVsZEluaXQgPSB0cnVlO1xuICAgICAgZmllbGQudmFsdWUgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICAgIHNjb3BlLmluQ2xhc3NGaWVsZEluaXQgPSBpbkNsYXNzRmllbGRJbml0O1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZC52YWx1ZSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuc2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKGZpZWxkLCBcIlByb3BlcnR5RGVmaW5pdGlvblwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VDbGFzc1N0YXRpY0Jsb2NrID0gZnVuY3Rpb24obm9kZSkge1xuICAgIG5vZGUuYm9keSA9IFtdO1xuXG4gICAgdmFyIG9sZExhYmVscyA9IHRoaXMubGFiZWxzO1xuICAgIHRoaXMubGFiZWxzID0gW107XG4gICAgdGhpcy5lbnRlclNjb3BlKFNDT1BFX0NMQVNTX1NUQVRJQ19CTE9DSyB8IFNDT1BFX1NVUEVSKTtcbiAgICB3aGlsZSAodGhpcy50eXBlICE9PSB0eXBlcyQxLmJyYWNlUikge1xuICAgICAgdmFyIHN0bXQgPSB0aGlzLnBhcnNlU3RhdGVtZW50KG51bGwpO1xuICAgICAgbm9kZS5ib2R5LnB1c2goc3RtdCk7XG4gICAgfVxuICAgIHRoaXMubmV4dCgpO1xuICAgIHRoaXMuZXhpdFNjb3BlKCk7XG4gICAgdGhpcy5sYWJlbHMgPSBvbGRMYWJlbHM7XG5cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiU3RhdGljQmxvY2tcIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlQ2xhc3NJZCA9IGZ1bmN0aW9uKG5vZGUsIGlzU3RhdGVtZW50KSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5uYW1lKSB7XG4gICAgICBub2RlLmlkID0gdGhpcy5wYXJzZUlkZW50KCk7XG4gICAgICBpZiAoaXNTdGF0ZW1lbnQpXG4gICAgICAgIHsgdGhpcy5jaGVja0xWYWxTaW1wbGUobm9kZS5pZCwgQklORF9MRVhJQ0FMLCBmYWxzZSk7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzU3RhdGVtZW50ID09PSB0cnVlKVxuICAgICAgICB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICBub2RlLmlkID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgcHAkOC5wYXJzZUNsYXNzU3VwZXIgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgbm9kZS5zdXBlckNsYXNzID0gdGhpcy5lYXQodHlwZXMkMS5fZXh0ZW5kcykgPyB0aGlzLnBhcnNlRXhwclN1YnNjcmlwdHMobnVsbCwgZmFsc2UpIDogbnVsbDtcbiAgfTtcblxuICBwcCQ4LmVudGVyQ2xhc3NCb2R5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB7ZGVjbGFyZWQ6IE9iamVjdC5jcmVhdGUobnVsbCksIHVzZWQ6IFtdfTtcbiAgICB0aGlzLnByaXZhdGVOYW1lU3RhY2sucHVzaChlbGVtZW50KTtcbiAgICByZXR1cm4gZWxlbWVudC5kZWNsYXJlZFxuICB9O1xuXG4gIHBwJDguZXhpdENsYXNzQm9keSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWYgPSB0aGlzLnByaXZhdGVOYW1lU3RhY2sucG9wKCk7XG4gICAgdmFyIGRlY2xhcmVkID0gcmVmLmRlY2xhcmVkO1xuICAgIHZhciB1c2VkID0gcmVmLnVzZWQ7XG4gICAgdmFyIGxlbiA9IHRoaXMucHJpdmF0ZU5hbWVTdGFjay5sZW5ndGg7XG4gICAgdmFyIHBhcmVudCA9IGxlbiA9PT0gMCA/IG51bGwgOiB0aGlzLnByaXZhdGVOYW1lU3RhY2tbbGVuIC0gMV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1c2VkLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgaWQgPSB1c2VkW2ldO1xuICAgICAgaWYgKCFoYXNPd24oZGVjbGFyZWQsIGlkLm5hbWUpKSB7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICBwYXJlbnQudXNlZC5wdXNoKGlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoaWQuc3RhcnQsIChcIlByaXZhdGUgZmllbGQgJyNcIiArIChpZC5uYW1lKSArIFwiJyBtdXN0IGJlIGRlY2xhcmVkIGluIGFuIGVuY2xvc2luZyBjbGFzc1wiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gaXNQcml2YXRlTmFtZUNvbmZsaWN0ZWQocHJpdmF0ZU5hbWVNYXAsIGVsZW1lbnQpIHtcbiAgICB2YXIgbmFtZSA9IGVsZW1lbnQua2V5Lm5hbWU7XG4gICAgdmFyIGN1cnIgPSBwcml2YXRlTmFtZU1hcFtuYW1lXTtcblxuICAgIHZhciBuZXh0ID0gXCJ0cnVlXCI7XG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gXCJNZXRob2REZWZpbml0aW9uXCIgJiYgKGVsZW1lbnQua2luZCA9PT0gXCJnZXRcIiB8fCBlbGVtZW50LmtpbmQgPT09IFwic2V0XCIpKSB7XG4gICAgICBuZXh0ID0gKGVsZW1lbnQuc3RhdGljID8gXCJzXCIgOiBcImlcIikgKyBlbGVtZW50LmtpbmQ7XG4gICAgfVxuXG4gICAgLy8gYGNsYXNzIHsgZ2V0ICNhKCl7fTsgc3RhdGljIHNldCAjYShfKXt9IH1gIGlzIGFsc28gY29uZmxpY3QuXG4gICAgaWYgKFxuICAgICAgY3VyciA9PT0gXCJpZ2V0XCIgJiYgbmV4dCA9PT0gXCJpc2V0XCIgfHxcbiAgICAgIGN1cnIgPT09IFwiaXNldFwiICYmIG5leHQgPT09IFwiaWdldFwiIHx8XG4gICAgICBjdXJyID09PSBcInNnZXRcIiAmJiBuZXh0ID09PSBcInNzZXRcIiB8fFxuICAgICAgY3VyciA9PT0gXCJzc2V0XCIgJiYgbmV4dCA9PT0gXCJzZ2V0XCJcbiAgICApIHtcbiAgICAgIHByaXZhdGVOYW1lTWFwW25hbWVdID0gXCJ0cnVlXCI7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2UgaWYgKCFjdXJyKSB7XG4gICAgICBwcml2YXRlTmFtZU1hcFtuYW1lXSA9IG5leHQ7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0tleU5hbWUobm9kZSwgbmFtZSkge1xuICAgIHZhciBjb21wdXRlZCA9IG5vZGUuY29tcHV0ZWQ7XG4gICAgdmFyIGtleSA9IG5vZGUua2V5O1xuICAgIHJldHVybiAhY29tcHV0ZWQgJiYgKFxuICAgICAga2V5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmIGtleS5uYW1lID09PSBuYW1lIHx8XG4gICAgICBrZXkudHlwZSA9PT0gXCJMaXRlcmFsXCIgJiYga2V5LnZhbHVlID09PSBuYW1lXG4gICAgKVxuICB9XG5cbiAgLy8gUGFyc2VzIG1vZHVsZSBleHBvcnQgZGVjbGFyYXRpb24uXG5cbiAgcHAkOC5wYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uID0gZnVuY3Rpb24obm9kZSwgZXhwb3J0cykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTEpIHtcbiAgICAgIGlmICh0aGlzLmVhdENvbnRleHR1YWwoXCJhc1wiKSkge1xuICAgICAgICBub2RlLmV4cG9ydGVkID0gdGhpcy5wYXJzZU1vZHVsZUV4cG9ydE5hbWUoKTtcbiAgICAgICAgdGhpcy5jaGVja0V4cG9ydChleHBvcnRzLCBub2RlLmV4cG9ydGVkLCB0aGlzLmxhc3RUb2tTdGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmV4cG9ydGVkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5leHBlY3RDb250ZXh0dWFsKFwiZnJvbVwiKTtcbiAgICBpZiAodGhpcy50eXBlICE9PSB0eXBlcyQxLnN0cmluZykgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgIG5vZGUuc291cmNlID0gdGhpcy5wYXJzZUV4cHJBdG9tKCk7XG4gICAgdGhpcy5zZW1pY29sb24oKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0QWxsRGVjbGFyYXRpb25cIilcbiAgfTtcblxuICBwcCQ4LnBhcnNlRXhwb3J0ID0gZnVuY3Rpb24obm9kZSwgZXhwb3J0cykge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIC8vIGV4cG9ydCAqIGZyb20gJy4uLidcbiAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5zdGFyKSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VFeHBvcnRBbGxEZWNsYXJhdGlvbihub2RlLCBleHBvcnRzKVxuICAgIH1cbiAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5fZGVmYXVsdCkpIHsgLy8gZXhwb3J0IGRlZmF1bHQgLi4uXG4gICAgICB0aGlzLmNoZWNrRXhwb3J0KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB0aGlzLmxhc3RUb2tTdGFydCk7XG4gICAgICBub2RlLmRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbigpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiKVxuICAgIH1cbiAgICAvLyBleHBvcnQgdmFyfGNvbnN0fGxldHxmdW5jdGlvbnxjbGFzcyAuLi5cbiAgICBpZiAodGhpcy5zaG91bGRQYXJzZUV4cG9ydFN0YXRlbWVudCgpKSB7XG4gICAgICBub2RlLmRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUV4cG9ydERlY2xhcmF0aW9uKG5vZGUpO1xuICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24udHlwZSA9PT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpXG4gICAgICAgIHsgdGhpcy5jaGVja1ZhcmlhYmxlRXhwb3J0KGV4cG9ydHMsIG5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zKTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHRoaXMuY2hlY2tFeHBvcnQoZXhwb3J0cywgbm9kZS5kZWNsYXJhdGlvbi5pZCwgbm9kZS5kZWNsYXJhdGlvbi5pZC5zdGFydCk7IH1cbiAgICAgIG5vZGUuc3BlY2lmaWVycyA9IFtdO1xuICAgICAgbm9kZS5zb3VyY2UgPSBudWxsO1xuICAgIH0gZWxzZSB7IC8vIGV4cG9ydCB7IHgsIHkgYXMgeiB9IFtmcm9tICcuLi4nXVxuICAgICAgbm9kZS5kZWNsYXJhdGlvbiA9IG51bGw7XG4gICAgICBub2RlLnNwZWNpZmllcnMgPSB0aGlzLnBhcnNlRXhwb3J0U3BlY2lmaWVycyhleHBvcnRzKTtcbiAgICAgIGlmICh0aGlzLmVhdENvbnRleHR1YWwoXCJmcm9tXCIpKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IHR5cGVzJDEuc3RyaW5nKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICAgIG5vZGUuc291cmNlID0gdGhpcy5wYXJzZUV4cHJBdG9tKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUuc3BlY2lmaWVyczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAvLyBjaGVjayBmb3Iga2V5d29yZHMgdXNlZCBhcyBsb2NhbCBuYW1lc1xuICAgICAgICAgIHZhciBzcGVjID0gbGlzdFtpXTtcblxuICAgICAgICAgIHRoaXMuY2hlY2tVbnJlc2VydmVkKHNwZWMubG9jYWwpO1xuICAgICAgICAgIC8vIGNoZWNrIGlmIGV4cG9ydCBpcyBkZWZpbmVkXG4gICAgICAgICAgdGhpcy5jaGVja0xvY2FsRXhwb3J0KHNwZWMubG9jYWwpO1xuXG4gICAgICAgICAgaWYgKHNwZWMubG9jYWwudHlwZSA9PT0gXCJMaXRlcmFsXCIpIHtcbiAgICAgICAgICAgIHRoaXMucmFpc2Uoc3BlYy5sb2NhbC5zdGFydCwgXCJBIHN0cmluZyBsaXRlcmFsIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGV4cG9ydGVkIGJpbmRpbmcgd2l0aG91dCBgZnJvbWAuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUuc291cmNlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VtaWNvbG9uKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUV4cG9ydERlY2xhcmF0aW9uID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlU3RhdGVtZW50KG51bGwpXG4gIH07XG5cbiAgcHAkOC5wYXJzZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpc0FzeW5jO1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuX2Z1bmN0aW9uIHx8IChpc0FzeW5jID0gdGhpcy5pc0FzeW5jRnVuY3Rpb24oKSkpIHtcbiAgICAgIHZhciBmTm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIGlmIChpc0FzeW5jKSB7IHRoaXMubmV4dCgpOyB9XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKGZOb2RlLCBGVU5DX1NUQVRFTUVOVCB8IEZVTkNfTlVMTEFCTEVfSUQsIGZhbHNlLCBpc0FzeW5jKVxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLl9jbGFzcykge1xuICAgICAgdmFyIGNOb2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlQ2xhc3MoY05vZGUsIFwibnVsbGFibGVJRFwiKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICAgIHRoaXMuc2VtaWNvbG9uKCk7XG4gICAgICByZXR1cm4gZGVjbGFyYXRpb25cbiAgICB9XG4gIH07XG5cbiAgcHAkOC5jaGVja0V4cG9ydCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIHBvcykge1xuICAgIGlmICghZXhwb3J0cykgeyByZXR1cm4gfVxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIilcbiAgICAgIHsgbmFtZSA9IG5hbWUudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgPyBuYW1lLm5hbWUgOiBuYW1lLnZhbHVlOyB9XG4gICAgaWYgKGhhc093bihleHBvcnRzLCBuYW1lKSlcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHBvcywgXCJEdXBsaWNhdGUgZXhwb3J0ICdcIiArIG5hbWUgKyBcIidcIik7IH1cbiAgICBleHBvcnRzW25hbWVdID0gdHJ1ZTtcbiAgfTtcblxuICBwcCQ4LmNoZWNrUGF0dGVybkV4cG9ydCA9IGZ1bmN0aW9uKGV4cG9ydHMsIHBhdCkge1xuICAgIHZhciB0eXBlID0gcGF0LnR5cGU7XG4gICAgaWYgKHR5cGUgPT09IFwiSWRlbnRpZmllclwiKVxuICAgICAgeyB0aGlzLmNoZWNrRXhwb3J0KGV4cG9ydHMsIHBhdCwgcGF0LnN0YXJ0KTsgfVxuICAgIGVsc2UgaWYgKHR5cGUgPT09IFwiT2JqZWN0UGF0dGVyblwiKVxuICAgICAgeyBmb3IgKHZhciBpID0gMCwgbGlzdCA9IHBhdC5wcm9wZXJ0aWVzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwcm9wID0gbGlzdFtpXTtcblxuICAgICAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIHByb3ApO1xuICAgICAgICB9IH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcIkFycmF5UGF0dGVyblwiKVxuICAgICAgeyBmb3IgKHZhciBpJDEgPSAwLCBsaXN0JDEgPSBwYXQuZWxlbWVudHM7IGkkMSA8IGxpc3QkMS5sZW5ndGg7IGkkMSArPSAxKSB7XG4gICAgICAgIHZhciBlbHQgPSBsaXN0JDFbaSQxXTtcblxuICAgICAgICAgIGlmIChlbHQpIHsgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgZWx0KTsgfVxuICAgICAgfSB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gXCJQcm9wZXJ0eVwiKVxuICAgICAgeyB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBwYXQudmFsdWUpOyB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gXCJBc3NpZ25tZW50UGF0dGVyblwiKVxuICAgICAgeyB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBwYXQubGVmdCk7IH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcIlJlc3RFbGVtZW50XCIpXG4gICAgICB7IHRoaXMuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIHBhdC5hcmd1bWVudCk7IH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpXG4gICAgICB7IHRoaXMuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIHBhdC5leHByZXNzaW9uKTsgfVxuICB9O1xuXG4gIHBwJDguY2hlY2tWYXJpYWJsZUV4cG9ydCA9IGZ1bmN0aW9uKGV4cG9ydHMsIGRlY2xzKSB7XG4gICAgaWYgKCFleHBvcnRzKSB7IHJldHVybiB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBkZWNsczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAgICB7XG4gICAgICB2YXIgZGVjbCA9IGxpc3RbaV07XG5cbiAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIGRlY2wuaWQpO1xuICAgIH1cbiAgfTtcblxuICBwcCQ4LnNob3VsZFBhcnNlRXhwb3J0U3RhdGVtZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZS5rZXl3b3JkID09PSBcInZhclwiIHx8XG4gICAgICB0aGlzLnR5cGUua2V5d29yZCA9PT0gXCJjb25zdFwiIHx8XG4gICAgICB0aGlzLnR5cGUua2V5d29yZCA9PT0gXCJjbGFzc1wiIHx8XG4gICAgICB0aGlzLnR5cGUua2V5d29yZCA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICB0aGlzLmlzTGV0KCkgfHxcbiAgICAgIHRoaXMuaXNBc3luY0Z1bmN0aW9uKClcbiAgfTtcblxuICAvLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGUgZXhwb3J0cy5cblxuICBwcCQ4LnBhcnNlRXhwb3J0U3BlY2lmaWVyID0gZnVuY3Rpb24oZXhwb3J0cykge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICBub2RlLmxvY2FsID0gdGhpcy5wYXJzZU1vZHVsZUV4cG9ydE5hbWUoKTtcblxuICAgIG5vZGUuZXhwb3J0ZWQgPSB0aGlzLmVhdENvbnRleHR1YWwoXCJhc1wiKSA/IHRoaXMucGFyc2VNb2R1bGVFeHBvcnROYW1lKCkgOiBub2RlLmxvY2FsO1xuICAgIHRoaXMuY2hlY2tFeHBvcnQoXG4gICAgICBleHBvcnRzLFxuICAgICAgbm9kZS5leHBvcnRlZCxcbiAgICAgIG5vZGUuZXhwb3J0ZWQuc3RhcnRcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkV4cG9ydFNwZWNpZmllclwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VFeHBvcnRTcGVjaWZpZXJzID0gZnVuY3Rpb24oZXhwb3J0cykge1xuICAgIHZhciBub2RlcyA9IFtdLCBmaXJzdCA9IHRydWU7XG4gICAgLy8gZXhwb3J0IHsgeCwgeSBhcyB6IH0gW2Zyb20gJy4uLiddXG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5icmFjZUwpO1xuICAgIHdoaWxlICghdGhpcy5lYXQodHlwZXMkMS5icmFjZVIpKSB7XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuY29tbWEpO1xuICAgICAgICBpZiAodGhpcy5hZnRlclRyYWlsaW5nQ29tbWEodHlwZXMkMS5icmFjZVIpKSB7IGJyZWFrIH1cbiAgICAgIH0gZWxzZSB7IGZpcnN0ID0gZmFsc2U7IH1cblxuICAgICAgbm9kZXMucHVzaCh0aGlzLnBhcnNlRXhwb3J0U3BlY2lmaWVyKGV4cG9ydHMpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzXG4gIH07XG5cbiAgLy8gUGFyc2VzIGltcG9ydCBkZWNsYXJhdGlvbi5cblxuICBwcCQ4LnBhcnNlSW1wb3J0ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHRoaXMubmV4dCgpO1xuXG4gICAgLy8gaW1wb3J0ICcuLi4nXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5zdHJpbmcpIHtcbiAgICAgIG5vZGUuc3BlY2lmaWVycyA9IGVtcHR5JDE7XG4gICAgICBub2RlLnNvdXJjZSA9IHRoaXMucGFyc2VFeHByQXRvbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNwZWNpZmllcnMgPSB0aGlzLnBhcnNlSW1wb3J0U3BlY2lmaWVycygpO1xuICAgICAgdGhpcy5leHBlY3RDb250ZXh0dWFsKFwiZnJvbVwiKTtcbiAgICAgIG5vZGUuc291cmNlID0gdGhpcy50eXBlID09PSB0eXBlcyQxLnN0cmluZyA/IHRoaXMucGFyc2VFeHByQXRvbSgpIDogdGhpcy51bmV4cGVjdGVkKCk7XG4gICAgfVxuICAgIHRoaXMuc2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkltcG9ydERlY2xhcmF0aW9uXCIpXG4gIH07XG5cbiAgLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlIGltcG9ydHMuXG5cbiAgcHAkOC5wYXJzZUltcG9ydFNwZWNpZmllciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICBub2RlLmltcG9ydGVkID0gdGhpcy5wYXJzZU1vZHVsZUV4cG9ydE5hbWUoKTtcblxuICAgIGlmICh0aGlzLmVhdENvbnRleHR1YWwoXCJhc1wiKSkge1xuICAgICAgbm9kZS5sb2NhbCA9IHRoaXMucGFyc2VJZGVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrVW5yZXNlcnZlZChub2RlLmltcG9ydGVkKTtcbiAgICAgIG5vZGUubG9jYWwgPSBub2RlLmltcG9ydGVkO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrTFZhbFNpbXBsZShub2RlLmxvY2FsLCBCSU5EX0xFWElDQUwpO1xuXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkltcG9ydFNwZWNpZmllclwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gaW1wb3J0IGRlZmF1bHRPYmosIHsgeCwgeSBhcyB6IH0gZnJvbSAnLi4uJ1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICBub2RlLmxvY2FsID0gdGhpcy5wYXJzZUlkZW50KCk7XG4gICAgdGhpcy5jaGVja0xWYWxTaW1wbGUobm9kZS5sb2NhbCwgQklORF9MRVhJQ0FMKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSW1wb3J0RGVmYXVsdFNwZWNpZmllclwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdGhpcy5leHBlY3RDb250ZXh0dWFsKFwiYXNcIik7XG4gICAgbm9kZS5sb2NhbCA9IHRoaXMucGFyc2VJZGVudCgpO1xuICAgIHRoaXMuY2hlY2tMVmFsU2ltcGxlKG5vZGUubG9jYWwsIEJJTkRfTEVYSUNBTCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllclwiKVxuICB9O1xuXG4gIHBwJDgucGFyc2VJbXBvcnRTcGVjaWZpZXJzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG5vZGVzID0gW10sIGZpcnN0ID0gdHJ1ZTtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLm5hbWUpIHtcbiAgICAgIG5vZGVzLnB1c2godGhpcy5wYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIoKSk7XG4gICAgICBpZiAoIXRoaXMuZWF0KHR5cGVzJDEuY29tbWEpKSB7IHJldHVybiBub2RlcyB9XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuc3Rhcikge1xuICAgICAgbm9kZXMucHVzaCh0aGlzLnBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkpO1xuICAgICAgcmV0dXJuIG5vZGVzXG4gICAgfVxuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuYnJhY2VMKTtcbiAgICB3aGlsZSAoIXRoaXMuZWF0KHR5cGVzJDEuYnJhY2VSKSkge1xuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLmNvbW1hKTtcbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJUcmFpbGluZ0NvbW1hKHR5cGVzJDEuYnJhY2VSKSkgeyBicmVhayB9XG4gICAgICB9IGVsc2UgeyBmaXJzdCA9IGZhbHNlOyB9XG5cbiAgICAgIG5vZGVzLnB1c2godGhpcy5wYXJzZUltcG9ydFNwZWNpZmllcigpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzXG4gIH07XG5cbiAgcHAkOC5wYXJzZU1vZHVsZUV4cG9ydE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDEzICYmIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5zdHJpbmcpIHtcbiAgICAgIHZhciBzdHJpbmdMaXRlcmFsID0gdGhpcy5wYXJzZUxpdGVyYWwodGhpcy52YWx1ZSk7XG4gICAgICBpZiAobG9uZVN1cnJvZ2F0ZS50ZXN0KHN0cmluZ0xpdGVyYWwudmFsdWUpKSB7XG4gICAgICAgIHRoaXMucmFpc2Uoc3RyaW5nTGl0ZXJhbC5zdGFydCwgXCJBbiBleHBvcnQgbmFtZSBjYW5ub3QgaW5jbHVkZSBhIGxvbmUgc3Vycm9nYXRlLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHJpbmdMaXRlcmFsXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBhcnNlSWRlbnQodHJ1ZSlcbiAgfTtcblxuICAvLyBTZXQgYEV4cHJlc3Npb25TdGF0ZW1lbnQjZGlyZWN0aXZlYCBwcm9wZXJ0eSBmb3IgZGlyZWN0aXZlIHByb2xvZ3Vlcy5cbiAgcHAkOC5hZGFwdERpcmVjdGl2ZVByb2xvZ3VlID0gZnVuY3Rpb24oc3RhdGVtZW50cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGVtZW50cy5sZW5ndGggJiYgdGhpcy5pc0RpcmVjdGl2ZUNhbmRpZGF0ZShzdGF0ZW1lbnRzW2ldKTsgKytpKSB7XG4gICAgICBzdGF0ZW1lbnRzW2ldLmRpcmVjdGl2ZSA9IHN0YXRlbWVudHNbaV0uZXhwcmVzc2lvbi5yYXcuc2xpY2UoMSwgLTEpO1xuICAgIH1cbiAgfTtcbiAgcHAkOC5pc0RpcmVjdGl2ZUNhbmRpZGF0ZSA9IGZ1bmN0aW9uKHN0YXRlbWVudCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNSAmJlxuICAgICAgc3RhdGVtZW50LnR5cGUgPT09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmXG4gICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbi50eXBlID09PSBcIkxpdGVyYWxcIiAmJlxuICAgICAgdHlwZW9mIHN0YXRlbWVudC5leHByZXNzaW9uLnZhbHVlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAvLyBSZWplY3QgcGFyZW50aGVzaXplZCBzdHJpbmdzLlxuICAgICAgKHRoaXMuaW5wdXRbc3RhdGVtZW50LnN0YXJ0XSA9PT0gXCJcXFwiXCIgfHwgdGhpcy5pbnB1dFtzdGF0ZW1lbnQuc3RhcnRdID09PSBcIidcIilcbiAgICApXG4gIH07XG5cbiAgdmFyIHBwJDcgPSBQYXJzZXIucHJvdG90eXBlO1xuXG4gIC8vIENvbnZlcnQgZXhpc3RpbmcgZXhwcmVzc2lvbiBhdG9tIHRvIGFzc2lnbmFibGUgcGF0dGVyblxuICAvLyBpZiBwb3NzaWJsZS5cblxuICBwcCQ3LnRvQXNzaWduYWJsZSA9IGZ1bmN0aW9uKG5vZGUsIGlzQmluZGluZywgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiBub2RlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSBcIklkZW50aWZpZXJcIjpcbiAgICAgICAgaWYgKHRoaXMuaW5Bc3luYyAmJiBub2RlLm5hbWUgPT09IFwiYXdhaXRcIilcbiAgICAgICAgICB7IHRoaXMucmFpc2Uobm9kZS5zdGFydCwgXCJDYW5ub3QgdXNlICdhd2FpdCcgYXMgaWRlbnRpZmllciBpbnNpZGUgYW4gYXN5bmMgZnVuY3Rpb25cIik7IH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBcIk9iamVjdFBhdHRlcm5cIjpcbiAgICAgIGNhc2UgXCJBcnJheVBhdHRlcm5cIjpcbiAgICAgIGNhc2UgXCJBc3NpZ25tZW50UGF0dGVyblwiOlxuICAgICAgY2FzZSBcIlJlc3RFbGVtZW50XCI6XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCJPYmplY3RFeHByZXNzaW9uXCI6XG4gICAgICAgIG5vZGUudHlwZSA9IFwiT2JqZWN0UGF0dGVyblwiO1xuICAgICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykgeyB0aGlzLmNoZWNrUGF0dGVybkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTsgfVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUucHJvcGVydGllczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICB2YXIgcHJvcCA9IGxpc3RbaV07XG5cbiAgICAgICAgdGhpcy50b0Fzc2lnbmFibGUocHJvcCwgaXNCaW5kaW5nKTtcbiAgICAgICAgICAvLyBFYXJseSBlcnJvcjpcbiAgICAgICAgICAvLyAgIEFzc2lnbm1lbnRSZXN0UHJvcGVydHlbWWllbGQsIEF3YWl0XSA6XG4gICAgICAgICAgLy8gICAgIGAuLi5gIERlc3RydWN0dXJpbmdBc3NpZ25tZW50VGFyZ2V0W1lpZWxkLCBBd2FpdF1cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vICAgSXQgaXMgYSBTeW50YXggRXJyb3IgaWYgfERlc3RydWN0dXJpbmdBc3NpZ25tZW50VGFyZ2V0fCBpcyBhbiB8QXJyYXlMaXRlcmFsfCBvciBhbiB8T2JqZWN0TGl0ZXJhbHwuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcHJvcC50eXBlID09PSBcIlJlc3RFbGVtZW50XCIgJiZcbiAgICAgICAgICAgIChwcm9wLmFyZ3VtZW50LnR5cGUgPT09IFwiQXJyYXlQYXR0ZXJuXCIgfHwgcHJvcC5hcmd1bWVudC50eXBlID09PSBcIk9iamVjdFBhdHRlcm5cIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmFpc2UocHJvcC5hcmd1bWVudC5zdGFydCwgXCJVbmV4cGVjdGVkIHRva2VuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiUHJvcGVydHlcIjpcbiAgICAgICAgLy8gQXNzaWdubWVudFByb3BlcnR5IGhhcyB0eXBlID09PSBcIlByb3BlcnR5XCJcbiAgICAgICAgaWYgKG5vZGUua2luZCAhPT0gXCJpbml0XCIpIHsgdGhpcy5yYWlzZShub2RlLmtleS5zdGFydCwgXCJPYmplY3QgcGF0dGVybiBjYW4ndCBjb250YWluIGdldHRlciBvciBzZXR0ZXJcIik7IH1cbiAgICAgICAgdGhpcy50b0Fzc2lnbmFibGUobm9kZS52YWx1ZSwgaXNCaW5kaW5nKTtcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBcIkFycmF5RXhwcmVzc2lvblwiOlxuICAgICAgICBub2RlLnR5cGUgPSBcIkFycmF5UGF0dGVyblwiO1xuICAgICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykgeyB0aGlzLmNoZWNrUGF0dGVybkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTsgfVxuICAgICAgICB0aGlzLnRvQXNzaWduYWJsZUxpc3Qobm9kZS5lbGVtZW50cywgaXNCaW5kaW5nKTtcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBcIlNwcmVhZEVsZW1lbnRcIjpcbiAgICAgICAgbm9kZS50eXBlID0gXCJSZXN0RWxlbWVudFwiO1xuICAgICAgICB0aGlzLnRvQXNzaWduYWJsZShub2RlLmFyZ3VtZW50LCBpc0JpbmRpbmcpO1xuICAgICAgICBpZiAobm9kZS5hcmd1bWVudC50eXBlID09PSBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIpXG4gICAgICAgICAgeyB0aGlzLnJhaXNlKG5vZGUuYXJndW1lbnQuc3RhcnQsIFwiUmVzdCBlbGVtZW50cyBjYW5ub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWVcIik7IH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCI6XG4gICAgICAgIGlmIChub2RlLm9wZXJhdG9yICE9PSBcIj1cIikgeyB0aGlzLnJhaXNlKG5vZGUubGVmdC5lbmQsIFwiT25seSAnPScgb3BlcmF0b3IgY2FuIGJlIHVzZWQgZm9yIHNwZWNpZnlpbmcgZGVmYXVsdCB2YWx1ZS5cIik7IH1cbiAgICAgICAgbm9kZS50eXBlID0gXCJBc3NpZ25tZW50UGF0dGVyblwiO1xuICAgICAgICBkZWxldGUgbm9kZS5vcGVyYXRvcjtcbiAgICAgICAgdGhpcy50b0Fzc2lnbmFibGUobm9kZS5sZWZ0LCBpc0JpbmRpbmcpO1xuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIjpcbiAgICAgICAgdGhpcy50b0Fzc2lnbmFibGUobm9kZS5leHByZXNzaW9uLCBpc0JpbmRpbmcsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiQ2hhaW5FeHByZXNzaW9uXCI6XG4gICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIk9wdGlvbmFsIGNoYWluaW5nIGNhbm5vdCBhcHBlYXIgaW4gbGVmdC1oYW5kIHNpZGVcIik7XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCJNZW1iZXJFeHByZXNzaW9uXCI6XG4gICAgICAgIGlmICghaXNCaW5kaW5nKSB7IGJyZWFrIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcIkFzc2lnbmluZyB0byBydmFsdWVcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7IHRoaXMuY2hlY2tQYXR0ZXJuRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpOyB9XG4gICAgcmV0dXJuIG5vZGVcbiAgfTtcblxuICAvLyBDb252ZXJ0IGxpc3Qgb2YgZXhwcmVzc2lvbiBhdG9tcyB0byBiaW5kaW5nIGxpc3QuXG5cbiAgcHAkNy50b0Fzc2lnbmFibGVMaXN0ID0gZnVuY3Rpb24oZXhwckxpc3QsIGlzQmluZGluZykge1xuICAgIHZhciBlbmQgPSBleHByTGlzdC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdmFyIGVsdCA9IGV4cHJMaXN0W2ldO1xuICAgICAgaWYgKGVsdCkgeyB0aGlzLnRvQXNzaWduYWJsZShlbHQsIGlzQmluZGluZyk7IH1cbiAgICB9XG4gICAgaWYgKGVuZCkge1xuICAgICAgdmFyIGxhc3QgPSBleHByTGlzdFtlbmQgLSAxXTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPT09IDYgJiYgaXNCaW5kaW5nICYmIGxhc3QgJiYgbGFzdC50eXBlID09PSBcIlJlc3RFbGVtZW50XCIgJiYgbGFzdC5hcmd1bWVudC50eXBlICE9PSBcIklkZW50aWZpZXJcIilcbiAgICAgICAgeyB0aGlzLnVuZXhwZWN0ZWQobGFzdC5hcmd1bWVudC5zdGFydCk7IH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cHJMaXN0XG4gIH07XG5cbiAgLy8gUGFyc2VzIHNwcmVhZCBlbGVtZW50LlxuXG4gIHBwJDcucGFyc2VTcHJlYWQgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJTcHJlYWRFbGVtZW50XCIpXG4gIH07XG5cbiAgcHAkNy5wYXJzZVJlc3RCaW5kaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMubmV4dCgpO1xuXG4gICAgLy8gUmVzdEVsZW1lbnQgaW5zaWRlIG9mIGEgZnVuY3Rpb24gcGFyYW1ldGVyIG11c3QgYmUgYW4gaWRlbnRpZmllclxuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPT09IDYgJiYgdGhpcy50eXBlICE9PSB0eXBlcyQxLm5hbWUpXG4gICAgICB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG5cbiAgICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZUJpbmRpbmdBdG9tKCk7XG5cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiUmVzdEVsZW1lbnRcIilcbiAgfTtcblxuICAvLyBQYXJzZXMgbHZhbHVlIChhc3NpZ25hYmxlKSBhdG9tLlxuXG4gIHBwJDcucGFyc2VCaW5kaW5nQXRvbSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgdHlwZXMkMS5icmFja2V0TDpcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgbm9kZS5lbGVtZW50cyA9IHRoaXMucGFyc2VCaW5kaW5nTGlzdCh0eXBlcyQxLmJyYWNrZXRSLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFycmF5UGF0dGVyblwiKVxuXG4gICAgICBjYXNlIHR5cGVzJDEuYnJhY2VMOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9iaih0cnVlKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZUlkZW50KClcbiAgfTtcblxuICBwcCQ3LnBhcnNlQmluZGluZ0xpc3QgPSBmdW5jdGlvbihjbG9zZSwgYWxsb3dFbXB0eSwgYWxsb3dUcmFpbGluZ0NvbW1hLCBhbGxvd01vZGlmaWVycykge1xuICAgIHZhciBlbHRzID0gW10sIGZpcnN0ID0gdHJ1ZTtcbiAgICB3aGlsZSAoIXRoaXMuZWF0KGNsb3NlKSkge1xuICAgICAgaWYgKGZpcnN0KSB7IGZpcnN0ID0gZmFsc2U7IH1cbiAgICAgIGVsc2UgeyB0aGlzLmV4cGVjdCh0eXBlcyQxLmNvbW1hKTsgfVxuICAgICAgaWYgKGFsbG93RW1wdHkgJiYgdGhpcy50eXBlID09PSB0eXBlcyQxLmNvbW1hKSB7XG4gICAgICAgIGVsdHMucHVzaChudWxsKTtcbiAgICAgIH0gZWxzZSBpZiAoYWxsb3dUcmFpbGluZ0NvbW1hICYmIHRoaXMuYWZ0ZXJUcmFpbGluZ0NvbW1hKGNsb3NlKSkge1xuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuZWxsaXBzaXMpIHtcbiAgICAgICAgdmFyIHJlc3QgPSB0aGlzLnBhcnNlUmVzdEJpbmRpbmcoKTtcbiAgICAgICAgdGhpcy5wYXJzZUJpbmRpbmdMaXN0SXRlbShyZXN0KTtcbiAgICAgICAgZWx0cy5wdXNoKHJlc3QpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLmNvbW1hKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIkNvbW1hIGlzIG5vdCBwZXJtaXR0ZWQgYWZ0ZXIgdGhlIHJlc3QgZWxlbWVudFwiKTsgfVxuICAgICAgICB0aGlzLmV4cGVjdChjbG9zZSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbHRzLnB1c2godGhpcy5wYXJzZUFzc2lnbmFibGVMaXN0SXRlbShhbGxvd01vZGlmaWVycykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWx0c1xuICB9O1xuXG4gIHBwJDcucGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW0gPSBmdW5jdGlvbihhbGxvd01vZGlmaWVycykge1xuICAgIHZhciBlbGVtID0gdGhpcy5wYXJzZU1heWJlRGVmYXVsdCh0aGlzLnN0YXJ0LCB0aGlzLnN0YXJ0TG9jKTtcbiAgICB0aGlzLnBhcnNlQmluZGluZ0xpc3RJdGVtKGVsZW0pO1xuICAgIHJldHVybiBlbGVtXG4gIH07XG5cbiAgcHAkNy5wYXJzZUJpbmRpbmdMaXN0SXRlbSA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgcmV0dXJuIHBhcmFtXG4gIH07XG5cbiAgLy8gUGFyc2VzIGFzc2lnbm1lbnQgcGF0dGVybiBhcm91bmQgZ2l2ZW4gYXRvbSBpZiBwb3NzaWJsZS5cblxuICBwcCQ3LnBhcnNlTWF5YmVEZWZhdWx0ID0gZnVuY3Rpb24oc3RhcnRQb3MsIHN0YXJ0TG9jLCBsZWZ0KSB7XG4gICAgbGVmdCA9IGxlZnQgfHwgdGhpcy5wYXJzZUJpbmRpbmdBdG9tKCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDYgfHwgIXRoaXMuZWF0KHR5cGVzJDEuZXEpKSB7IHJldHVybiBsZWZ0IH1cbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICBub2RlLmxlZnQgPSBsZWZ0O1xuICAgIG5vZGUucmlnaHQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXNzaWdubWVudFBhdHRlcm5cIilcbiAgfTtcblxuICAvLyBUaGUgZm9sbG93aW5nIHRocmVlIGZ1bmN0aW9ucyBhbGwgdmVyaWZ5IHRoYXQgYSBub2RlIGlzIGFuIGx2YWx1ZSDigJRcbiAgLy8gc29tZXRoaW5nIHRoYXQgY2FuIGJlIGJvdW5kLCBvciBhc3NpZ25lZCB0by4gSW4gb3JkZXIgdG8gZG8gc28sIHRoZXkgcGVyZm9ybVxuICAvLyBhIHZhcmlldHkgb2YgY2hlY2tzOlxuICAvL1xuICAvLyAtIENoZWNrIHRoYXQgbm9uZSBvZiB0aGUgYm91bmQvYXNzaWduZWQtdG8gaWRlbnRpZmllcnMgYXJlIHJlc2VydmVkIHdvcmRzLlxuICAvLyAtIFJlY29yZCBuYW1lIGRlY2xhcmF0aW9ucyBmb3IgYmluZGluZ3MgaW4gdGhlIGFwcHJvcHJpYXRlIHNjb3BlLlxuICAvLyAtIENoZWNrIGR1cGxpY2F0ZSBhcmd1bWVudCBuYW1lcywgaWYgY2hlY2tDbGFzaGVzIGlzIHNldC5cbiAgLy9cbiAgLy8gSWYgYSBjb21wbGV4IGJpbmRpbmcgcGF0dGVybiBpcyBlbmNvdW50ZXJlZCAoZS5nLiwgb2JqZWN0IGFuZCBhcnJheVxuICAvLyBkZXN0cnVjdHVyaW5nKSwgdGhlIGVudGlyZSBwYXR0ZXJuIGlzIHJlY3Vyc2l2ZWx5IGNoZWNrZWQuXG4gIC8vXG4gIC8vIFRoZXJlIGFyZSB0aHJlZSB2ZXJzaW9ucyBvZiBjaGVja0xWYWwqKCkgYXBwcm9wcmlhdGUgZm9yIGRpZmZlcmVudFxuICAvLyBjaXJjdW1zdGFuY2VzOlxuICAvL1xuICAvLyAtIGNoZWNrTFZhbFNpbXBsZSgpIHNoYWxsIGJlIHVzZWQgaWYgdGhlIHN5bnRhY3RpYyBjb25zdHJ1Y3Qgc3VwcG9ydHNcbiAgLy8gICBub3RoaW5nIG90aGVyIHRoYW4gaWRlbnRpZmllcnMgYW5kIG1lbWJlciBleHByZXNzaW9ucy4gUGFyZW50aGVzaXplZFxuICAvLyAgIGV4cHJlc3Npb25zIGFyZSBhbHNvIGNvcnJlY3RseSBoYW5kbGVkLiBUaGlzIGlzIGdlbmVyYWxseSBhcHByb3ByaWF0ZSBmb3JcbiAgLy8gICBjb25zdHJ1Y3RzIGZvciB3aGljaCB0aGUgc3BlYyBzYXlzXG4gIC8vXG4gIC8vICAgPiBJdCBpcyBhIFN5bnRheCBFcnJvciBpZiBBc3NpZ25tZW50VGFyZ2V0VHlwZSBvZiBbdGhlIHByb2R1Y3Rpb25dIGlzIG5vdFxuICAvLyAgID4gc2ltcGxlLlxuICAvL1xuICAvLyAgIEl0IGlzIGFsc28gYXBwcm9wcmlhdGUgZm9yIGNoZWNraW5nIGlmIGFuIGlkZW50aWZpZXIgaXMgdmFsaWQgYW5kIG5vdFxuICAvLyAgIGRlZmluZWQgZWxzZXdoZXJlLCBsaWtlIGltcG9ydCBkZWNsYXJhdGlvbnMgb3IgZnVuY3Rpb24vY2xhc3MgaWRlbnRpZmllcnMuXG4gIC8vXG4gIC8vICAgRXhhbXBsZXMgd2hlcmUgdGhpcyBpcyB1c2VkIGluY2x1ZGU6XG4gIC8vICAgICBhICs9IOKApjtcbiAgLy8gICAgIGltcG9ydCBhIGZyb20gJ+KApic7XG4gIC8vICAgd2hlcmUgYSBpcyB0aGUgbm9kZSB0byBiZSBjaGVja2VkLlxuICAvL1xuICAvLyAtIGNoZWNrTFZhbFBhdHRlcm4oKSBzaGFsbCBiZSB1c2VkIGlmIHRoZSBzeW50YWN0aWMgY29uc3RydWN0IHN1cHBvcnRzXG4gIC8vICAgYW55dGhpbmcgY2hlY2tMVmFsU2ltcGxlKCkgc3VwcG9ydHMsIGFzIHdlbGwgYXMgb2JqZWN0IGFuZCBhcnJheVxuICAvLyAgIGRlc3RydWN0dXJpbmcgcGF0dGVybnMuIFRoaXMgaXMgZ2VuZXJhbGx5IGFwcHJvcHJpYXRlIGZvciBjb25zdHJ1Y3RzIGZvclxuICAvLyAgIHdoaWNoIHRoZSBzcGVjIHNheXNcbiAgLy9cbiAgLy8gICA+IEl0IGlzIGEgU3ludGF4IEVycm9yIGlmIFt0aGUgcHJvZHVjdGlvbl0gaXMgbmVpdGhlciBhbiBPYmplY3RMaXRlcmFsIG5vclxuICAvLyAgID4gYW4gQXJyYXlMaXRlcmFsIGFuZCBBc3NpZ25tZW50VGFyZ2V0VHlwZSBvZiBbdGhlIHByb2R1Y3Rpb25dIGlzIG5vdFxuICAvLyAgID4gc2ltcGxlLlxuICAvL1xuICAvLyAgIEV4YW1wbGVzIHdoZXJlIHRoaXMgaXMgdXNlZCBpbmNsdWRlOlxuICAvLyAgICAgKGEgPSDigKYpO1xuICAvLyAgICAgY29uc3QgYSA9IOKApjtcbiAgLy8gICAgIHRyeSB7IOKApiB9IGNhdGNoIChhKSB7IOKApiB9XG4gIC8vICAgd2hlcmUgYSBpcyB0aGUgbm9kZSB0byBiZSBjaGVja2VkLlxuICAvL1xuICAvLyAtIGNoZWNrTFZhbElubmVyUGF0dGVybigpIHNoYWxsIGJlIHVzZWQgaWYgdGhlIHN5bnRhY3RpYyBjb25zdHJ1Y3Qgc3VwcG9ydHNcbiAgLy8gICBhbnl0aGluZyBjaGVja0xWYWxQYXR0ZXJuKCkgc3VwcG9ydHMsIGFzIHdlbGwgYXMgZGVmYXVsdCBhc3NpZ25tZW50XG4gIC8vICAgcGF0dGVybnMsIHJlc3QgZWxlbWVudHMsIGFuZCBvdGhlciBjb25zdHJ1Y3RzIHRoYXQgbWF5IGFwcGVhciB3aXRoaW4gYW5cbiAgLy8gICBvYmplY3Qgb3IgYXJyYXkgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJuLlxuICAvL1xuICAvLyAgIEFzIGEgc3BlY2lhbCBjYXNlLCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFsc28gdXNlIGNoZWNrTFZhbElubmVyUGF0dGVybigpLFxuICAvLyAgIGFzIHRoZXkgYWxzbyBzdXBwb3J0IGRlZmF1bHRzIGFuZCByZXN0IGNvbnN0cnVjdHMuXG4gIC8vXG4gIC8vIFRoZXNlIGZ1bmN0aW9ucyBkZWxpYmVyYXRlbHkgc3VwcG9ydCBib3RoIGFzc2lnbm1lbnQgYW5kIGJpbmRpbmcgY29uc3RydWN0cyxcbiAgLy8gYXMgdGhlIGxvZ2ljIGZvciBib3RoIGlzIGV4Y2VlZGluZ2x5IHNpbWlsYXIuIElmIHRoZSBub2RlIGlzIHRoZSB0YXJnZXQgb2ZcbiAgLy8gYW4gYXNzaWdubWVudCwgdGhlbiBiaW5kaW5nVHlwZSBzaG91bGQgYmUgc2V0IHRvIEJJTkRfTk9ORS4gT3RoZXJ3aXNlLCBpdFxuICAvLyBzaG91bGQgYmUgc2V0IHRvIHRoZSBhcHByb3ByaWF0ZSBCSU5EXyogY29uc3RhbnQsIGxpa2UgQklORF9WQVIgb3JcbiAgLy8gQklORF9MRVhJQ0FMLlxuICAvL1xuICAvLyBJZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBub24tQklORF9OT05FIGJpbmRpbmdUeXBlLCB0aGVuXG4gIC8vIGFkZGl0aW9uYWxseSBhIGNoZWNrQ2xhc2hlcyBvYmplY3QgbWF5IGJlIHNwZWNpZmllZCB0byBhbGxvdyBjaGVja2luZyBmb3JcbiAgLy8gZHVwbGljYXRlIGFyZ3VtZW50IG5hbWVzLiBjaGVja0NsYXNoZXMgaXMgaWdub3JlZCBpZiB0aGUgcHJvdmlkZWQgY29uc3RydWN0XG4gIC8vIGlzIGFuIGFzc2lnbm1lbnQgKGkuZS4sIGJpbmRpbmdUeXBlIGlzIEJJTkRfTk9ORSkuXG5cbiAgcHAkNy5jaGVja0xWYWxTaW1wbGUgPSBmdW5jdGlvbihleHByLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKSB7XG4gICAgaWYgKCBiaW5kaW5nVHlwZSA9PT0gdm9pZCAwICkgYmluZGluZ1R5cGUgPSBCSU5EX05PTkU7XG5cbiAgICB2YXIgaXNCaW5kID0gYmluZGluZ1R5cGUgIT09IEJJTkRfTk9ORTtcblxuICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgY2FzZSBcIklkZW50aWZpZXJcIjpcbiAgICAgIGlmICh0aGlzLnN0cmljdCAmJiB0aGlzLnJlc2VydmVkV29yZHNTdHJpY3RCaW5kLnRlc3QoZXhwci5uYW1lKSlcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgKGlzQmluZCA/IFwiQmluZGluZyBcIiA6IFwiQXNzaWduaW5nIHRvIFwiKSArIGV4cHIubmFtZSArIFwiIGluIHN0cmljdCBtb2RlXCIpOyB9XG4gICAgICBpZiAoaXNCaW5kKSB7XG4gICAgICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQklORF9MRVhJQ0FMICYmIGV4cHIubmFtZSA9PT0gXCJsZXRcIilcbiAgICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShleHByLnN0YXJ0LCBcImxldCBpcyBkaXNhbGxvd2VkIGFzIGEgbGV4aWNhbGx5IGJvdW5kIG5hbWVcIik7IH1cbiAgICAgICAgaWYgKGNoZWNrQ2xhc2hlcykge1xuICAgICAgICAgIGlmIChoYXNPd24oY2hlY2tDbGFzaGVzLCBleHByLm5hbWUpKVxuICAgICAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgXCJBcmd1bWVudCBuYW1lIGNsYXNoXCIpOyB9XG4gICAgICAgICAgY2hlY2tDbGFzaGVzW2V4cHIubmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiaW5kaW5nVHlwZSAhPT0gQklORF9PVVRTSURFKSB7IHRoaXMuZGVjbGFyZU5hbWUoZXhwci5uYW1lLCBiaW5kaW5nVHlwZSwgZXhwci5zdGFydCk7IH1cbiAgICAgIH1cbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiQ2hhaW5FeHByZXNzaW9uXCI6XG4gICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgXCJPcHRpb25hbCBjaGFpbmluZyBjYW5ub3QgYXBwZWFyIGluIGxlZnQtaGFuZCBzaWRlXCIpO1xuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJNZW1iZXJFeHByZXNzaW9uXCI6XG4gICAgICBpZiAoaXNCaW5kKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShleHByLnN0YXJ0LCBcIkJpbmRpbmcgbWVtYmVyIGV4cHJlc3Npb25cIik7IH1cbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIjpcbiAgICAgIGlmIChpc0JpbmQpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGV4cHIuc3RhcnQsIFwiQmluZGluZyBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25cIik7IH1cbiAgICAgIHJldHVybiB0aGlzLmNoZWNrTFZhbFNpbXBsZShleHByLmV4cHJlc3Npb24sIGJpbmRpbmdUeXBlLCBjaGVja0NsYXNoZXMpXG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy5yYWlzZShleHByLnN0YXJ0LCAoaXNCaW5kID8gXCJCaW5kaW5nXCIgOiBcIkFzc2lnbmluZyB0b1wiKSArIFwiIHJ2YWx1ZVwiKTtcbiAgICB9XG4gIH07XG5cbiAgcHAkNy5jaGVja0xWYWxQYXR0ZXJuID0gZnVuY3Rpb24oZXhwciwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcykge1xuICAgIGlmICggYmluZGluZ1R5cGUgPT09IHZvaWQgMCApIGJpbmRpbmdUeXBlID0gQklORF9OT05FO1xuXG4gICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICBjYXNlIFwiT2JqZWN0UGF0dGVyblwiOlxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBleHByLnByb3BlcnRpZXM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBwcm9wID0gbGlzdFtpXTtcblxuICAgICAgdGhpcy5jaGVja0xWYWxJbm5lclBhdHRlcm4ocHJvcCwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcyk7XG4gICAgICB9XG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIkFycmF5UGF0dGVyblwiOlxuICAgICAgZm9yICh2YXIgaSQxID0gMCwgbGlzdCQxID0gZXhwci5lbGVtZW50czsgaSQxIDwgbGlzdCQxLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICAgdmFyIGVsZW0gPSBsaXN0JDFbaSQxXTtcblxuICAgICAgaWYgKGVsZW0pIHsgdGhpcy5jaGVja0xWYWxJbm5lclBhdHRlcm4oZWxlbSwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcyk7IH1cbiAgICAgIH1cbiAgICAgIGJyZWFrXG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy5jaGVja0xWYWxTaW1wbGUoZXhwciwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcyk7XG4gICAgfVxuICB9O1xuXG4gIHBwJDcuY2hlY2tMVmFsSW5uZXJQYXR0ZXJuID0gZnVuY3Rpb24oZXhwciwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcykge1xuICAgIGlmICggYmluZGluZ1R5cGUgPT09IHZvaWQgMCApIGJpbmRpbmdUeXBlID0gQklORF9OT05FO1xuXG4gICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICBjYXNlIFwiUHJvcGVydHlcIjpcbiAgICAgIC8vIEFzc2lnbm1lbnRQcm9wZXJ0eSBoYXMgdHlwZSA9PT0gXCJQcm9wZXJ0eVwiXG4gICAgICB0aGlzLmNoZWNrTFZhbElubmVyUGF0dGVybihleHByLnZhbHVlLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTtcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiQXNzaWdubWVudFBhdHRlcm5cIjpcbiAgICAgIHRoaXMuY2hlY2tMVmFsUGF0dGVybihleHByLmxlZnQsIGJpbmRpbmdUeXBlLCBjaGVja0NsYXNoZXMpO1xuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJSZXN0RWxlbWVudFwiOlxuICAgICAgdGhpcy5jaGVja0xWYWxQYXR0ZXJuKGV4cHIuYXJndW1lbnQsIGJpbmRpbmdUeXBlLCBjaGVja0NsYXNoZXMpO1xuICAgICAgYnJlYWtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLmNoZWNrTFZhbFBhdHRlcm4oZXhwciwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFRoZSBhbGdvcml0aG0gdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHJlZ2V4cCBjYW4gYXBwZWFyIGF0IGFcbiAgLy8gZ2l2ZW4gcG9pbnQgaW4gdGhlIHByb2dyYW0gaXMgbG9vc2VseSBiYXNlZCBvbiBzd2VldC5qcycgYXBwcm9hY2guXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnblxuXG5cbiAgdmFyIFRva0NvbnRleHQgPSBmdW5jdGlvbiBUb2tDb250ZXh0KHRva2VuLCBpc0V4cHIsIHByZXNlcnZlU3BhY2UsIG92ZXJyaWRlLCBnZW5lcmF0b3IpIHtcbiAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgdGhpcy5pc0V4cHIgPSAhIWlzRXhwcjtcbiAgICB0aGlzLnByZXNlcnZlU3BhY2UgPSAhIXByZXNlcnZlU3BhY2U7XG4gICAgdGhpcy5vdmVycmlkZSA9IG92ZXJyaWRlO1xuICAgIHRoaXMuZ2VuZXJhdG9yID0gISFnZW5lcmF0b3I7XG4gIH07XG5cbiAgdmFyIHR5cGVzID0ge1xuICAgIGJfc3RhdDogbmV3IFRva0NvbnRleHQoXCJ7XCIsIGZhbHNlKSxcbiAgICBiX2V4cHI6IG5ldyBUb2tDb250ZXh0KFwie1wiLCB0cnVlKSxcbiAgICBiX3RtcGw6IG5ldyBUb2tDb250ZXh0KFwiJHtcIiwgZmFsc2UpLFxuICAgIHBfc3RhdDogbmV3IFRva0NvbnRleHQoXCIoXCIsIGZhbHNlKSxcbiAgICBwX2V4cHI6IG5ldyBUb2tDb250ZXh0KFwiKFwiLCB0cnVlKSxcbiAgICBxX3RtcGw6IG5ldyBUb2tDb250ZXh0KFwiYFwiLCB0cnVlLCB0cnVlLCBmdW5jdGlvbiAocCkgeyByZXR1cm4gcC50cnlSZWFkVGVtcGxhdGVUb2tlbigpOyB9KSxcbiAgICBmX3N0YXQ6IG5ldyBUb2tDb250ZXh0KFwiZnVuY3Rpb25cIiwgZmFsc2UpLFxuICAgIGZfZXhwcjogbmV3IFRva0NvbnRleHQoXCJmdW5jdGlvblwiLCB0cnVlKSxcbiAgICBmX2V4cHJfZ2VuOiBuZXcgVG9rQ29udGV4dChcImZ1bmN0aW9uXCIsIHRydWUsIGZhbHNlLCBudWxsLCB0cnVlKSxcbiAgICBmX2dlbjogbmV3IFRva0NvbnRleHQoXCJmdW5jdGlvblwiLCBmYWxzZSwgZmFsc2UsIG51bGwsIHRydWUpXG4gIH07XG5cbiAgdmFyIHBwJDYgPSBQYXJzZXIucHJvdG90eXBlO1xuXG4gIHBwJDYuaW5pdGlhbENvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW3R5cGVzLmJfc3RhdF1cbiAgfTtcblxuICBwcCQ2LmN1ckNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0W3RoaXMuY29udGV4dC5sZW5ndGggLSAxXVxuICB9O1xuXG4gIHBwJDYuYnJhY2VJc0Jsb2NrID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5jdXJDb250ZXh0KCk7XG4gICAgaWYgKHBhcmVudCA9PT0gdHlwZXMuZl9leHByIHx8IHBhcmVudCA9PT0gdHlwZXMuZl9zdGF0KVxuICAgICAgeyByZXR1cm4gdHJ1ZSB9XG4gICAgaWYgKHByZXZUeXBlID09PSB0eXBlcyQxLmNvbG9uICYmIChwYXJlbnQgPT09IHR5cGVzLmJfc3RhdCB8fCBwYXJlbnQgPT09IHR5cGVzLmJfZXhwcikpXG4gICAgICB7IHJldHVybiAhcGFyZW50LmlzRXhwciB9XG5cbiAgICAvLyBUaGUgY2hlY2sgZm9yIGB0dC5uYW1lICYmIGV4cHJBbGxvd2VkYCBkZXRlY3RzIHdoZXRoZXIgd2UgYXJlXG4gICAgLy8gYWZ0ZXIgYSBgeWllbGRgIG9yIGBvZmAgY29uc3RydWN0LiBTZWUgdGhlIGB1cGRhdGVDb250ZXh0YCBmb3JcbiAgICAvLyBgdHQubmFtZWAuXG4gICAgaWYgKHByZXZUeXBlID09PSB0eXBlcyQxLl9yZXR1cm4gfHwgcHJldlR5cGUgPT09IHR5cGVzJDEubmFtZSAmJiB0aGlzLmV4cHJBbGxvd2VkKVxuICAgICAgeyByZXR1cm4gbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMuc3RhcnQpKSB9XG4gICAgaWYgKHByZXZUeXBlID09PSB0eXBlcyQxLl9lbHNlIHx8IHByZXZUeXBlID09PSB0eXBlcyQxLnNlbWkgfHwgcHJldlR5cGUgPT09IHR5cGVzJDEuZW9mIHx8IHByZXZUeXBlID09PSB0eXBlcyQxLnBhcmVuUiB8fCBwcmV2VHlwZSA9PT0gdHlwZXMkMS5hcnJvdylcbiAgICAgIHsgcmV0dXJuIHRydWUgfVxuICAgIGlmIChwcmV2VHlwZSA9PT0gdHlwZXMkMS5icmFjZUwpXG4gICAgICB7IHJldHVybiBwYXJlbnQgPT09IHR5cGVzLmJfc3RhdCB9XG4gICAgaWYgKHByZXZUeXBlID09PSB0eXBlcyQxLl92YXIgfHwgcHJldlR5cGUgPT09IHR5cGVzJDEuX2NvbnN0IHx8IHByZXZUeXBlID09PSB0eXBlcyQxLm5hbWUpXG4gICAgICB7IHJldHVybiBmYWxzZSB9XG4gICAgcmV0dXJuICF0aGlzLmV4cHJBbGxvd2VkXG4gIH07XG5cbiAgcHAkNi5pbkdlbmVyYXRvckNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5jb250ZXh0Lmxlbmd0aCAtIDE7IGkgPj0gMTsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dFtpXTtcbiAgICAgIGlmIChjb250ZXh0LnRva2VuID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHsgcmV0dXJuIGNvbnRleHQuZ2VuZXJhdG9yIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgcHAkNi51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgICB2YXIgdXBkYXRlLCB0eXBlID0gdGhpcy50eXBlO1xuICAgIGlmICh0eXBlLmtleXdvcmQgJiYgcHJldlR5cGUgPT09IHR5cGVzJDEuZG90KVxuICAgICAgeyB0aGlzLmV4cHJBbGxvd2VkID0gZmFsc2U7IH1cbiAgICBlbHNlIGlmICh1cGRhdGUgPSB0eXBlLnVwZGF0ZUNvbnRleHQpXG4gICAgICB7IHVwZGF0ZS5jYWxsKHRoaXMsIHByZXZUeXBlKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgdGhpcy5leHByQWxsb3dlZCA9IHR5cGUuYmVmb3JlRXhwcjsgfVxuICB9O1xuXG4gIC8vIFVzZWQgdG8gaGFuZGxlIGVnZGUgY2FzZXMgd2hlbiB0b2tlbiBjb250ZXh0IGNvdWxkIG5vdCBiZSBpbmZlcnJlZCBjb3JyZWN0bHkgZHVyaW5nIHRva2VuaXphdGlvbiBwaGFzZVxuXG4gIHBwJDYub3ZlcnJpZGVDb250ZXh0ID0gZnVuY3Rpb24odG9rZW5DdHgpIHtcbiAgICBpZiAodGhpcy5jdXJDb250ZXh0KCkgIT09IHRva2VuQ3R4KSB7XG4gICAgICB0aGlzLmNvbnRleHRbdGhpcy5jb250ZXh0Lmxlbmd0aCAtIDFdID0gdG9rZW5DdHg7XG4gICAgfVxuICB9O1xuXG4gIC8vIFRva2VuLXNwZWNpZmljIGNvbnRleHQgdXBkYXRlIGNvZGVcblxuICB0eXBlcyQxLnBhcmVuUi51cGRhdGVDb250ZXh0ID0gdHlwZXMkMS5icmFjZVIudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNvbnRleHQubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgb3V0ID0gdGhpcy5jb250ZXh0LnBvcCgpO1xuICAgIGlmIChvdXQgPT09IHR5cGVzLmJfc3RhdCAmJiB0aGlzLmN1ckNvbnRleHQoKS50b2tlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBvdXQgPSB0aGlzLmNvbnRleHQucG9wKCk7XG4gICAgfVxuICAgIHRoaXMuZXhwckFsbG93ZWQgPSAhb3V0LmlzRXhwcjtcbiAgfTtcblxuICB0eXBlcyQxLmJyYWNlTC51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgICB0aGlzLmNvbnRleHQucHVzaCh0aGlzLmJyYWNlSXNCbG9jayhwcmV2VHlwZSkgPyB0eXBlcy5iX3N0YXQgOiB0eXBlcy5iX2V4cHIpO1xuICAgIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlO1xuICB9O1xuXG4gIHR5cGVzJDEuZG9sbGFyQnJhY2VMLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNvbnRleHQucHVzaCh0eXBlcy5iX3RtcGwpO1xuICAgIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlO1xuICB9O1xuXG4gIHR5cGVzJDEucGFyZW5MLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICAgIHZhciBzdGF0ZW1lbnRQYXJlbnMgPSBwcmV2VHlwZSA9PT0gdHlwZXMkMS5faWYgfHwgcHJldlR5cGUgPT09IHR5cGVzJDEuX2ZvciB8fCBwcmV2VHlwZSA9PT0gdHlwZXMkMS5fd2l0aCB8fCBwcmV2VHlwZSA9PT0gdHlwZXMkMS5fd2hpbGU7XG4gICAgdGhpcy5jb250ZXh0LnB1c2goc3RhdGVtZW50UGFyZW5zID8gdHlwZXMucF9zdGF0IDogdHlwZXMucF9leHByKTtcbiAgICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbiAgfTtcblxuICB0eXBlcyQxLmluY0RlYy51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gdG9rRXhwckFsbG93ZWQgc3RheXMgdW5jaGFuZ2VkXG4gIH07XG5cbiAgdHlwZXMkMS5fZnVuY3Rpb24udXBkYXRlQ29udGV4dCA9IHR5cGVzJDEuX2NsYXNzLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICAgIGlmIChwcmV2VHlwZS5iZWZvcmVFeHByICYmIHByZXZUeXBlICE9PSB0eXBlcyQxLl9lbHNlICYmXG4gICAgICAgICEocHJldlR5cGUgPT09IHR5cGVzJDEuc2VtaSAmJiB0aGlzLmN1ckNvbnRleHQoKSAhPT0gdHlwZXMucF9zdGF0KSAmJlxuICAgICAgICAhKHByZXZUeXBlID09PSB0eXBlcyQxLl9yZXR1cm4gJiYgbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMuc3RhcnQpKSkgJiZcbiAgICAgICAgISgocHJldlR5cGUgPT09IHR5cGVzJDEuY29sb24gfHwgcHJldlR5cGUgPT09IHR5cGVzJDEuYnJhY2VMKSAmJiB0aGlzLmN1ckNvbnRleHQoKSA9PT0gdHlwZXMuYl9zdGF0KSlcbiAgICAgIHsgdGhpcy5jb250ZXh0LnB1c2godHlwZXMuZl9leHByKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgdGhpcy5jb250ZXh0LnB1c2godHlwZXMuZl9zdGF0KTsgfVxuICAgIHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTtcbiAgfTtcblxuICB0eXBlcyQxLmJhY2tRdW90ZS51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY3VyQ29udGV4dCgpID09PSB0eXBlcy5xX3RtcGwpXG4gICAgICB7IHRoaXMuY29udGV4dC5wb3AoKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgdGhpcy5jb250ZXh0LnB1c2godHlwZXMucV90bXBsKTsgfVxuICAgIHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTtcbiAgfTtcblxuICB0eXBlcyQxLnN0YXIudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gICAgaWYgKHByZXZUeXBlID09PSB0eXBlcyQxLl9mdW5jdGlvbikge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5jb250ZXh0Lmxlbmd0aCAtIDE7XG4gICAgICBpZiAodGhpcy5jb250ZXh0W2luZGV4XSA9PT0gdHlwZXMuZl9leHByKVxuICAgICAgICB7IHRoaXMuY29udGV4dFtpbmRleF0gPSB0eXBlcy5mX2V4cHJfZ2VuOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgdGhpcy5jb250ZXh0W2luZGV4XSA9IHR5cGVzLmZfZ2VuOyB9XG4gICAgfVxuICAgIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlO1xuICB9O1xuXG4gIHR5cGVzJDEubmFtZS51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgICB2YXIgYWxsb3dlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiBwcmV2VHlwZSAhPT0gdHlwZXMkMS5kb3QpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlID09PSBcIm9mXCIgJiYgIXRoaXMuZXhwckFsbG93ZWQgfHxcbiAgICAgICAgICB0aGlzLnZhbHVlID09PSBcInlpZWxkXCIgJiYgdGhpcy5pbkdlbmVyYXRvckNvbnRleHQoKSlcbiAgICAgICAgeyBhbGxvd2VkID0gdHJ1ZTsgfVxuICAgIH1cbiAgICB0aGlzLmV4cHJBbGxvd2VkID0gYWxsb3dlZDtcbiAgfTtcblxuICAvLyBBIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlciBvcGVyYXRlcyBieSBkZWZpbmluZyBmdW5jdGlvbnMgZm9yIGFsbFxuICAvLyBzeW50YWN0aWMgZWxlbWVudHMsIGFuZCByZWN1cnNpdmVseSBjYWxsaW5nIHRob3NlLCBlYWNoIGZ1bmN0aW9uXG4gIC8vIGFkdmFuY2luZyB0aGUgaW5wdXQgc3RyZWFtIGFuZCByZXR1cm5pbmcgYW4gQVNUIG5vZGUuIFByZWNlZGVuY2VcbiAgLy8gb2YgY29uc3RydWN0cyAoZm9yIGV4YW1wbGUsIHRoZSBmYWN0IHRoYXQgYCF4WzFdYCBtZWFucyBgISh4WzFdKWBcbiAgLy8gaW5zdGVhZCBvZiBgKCF4KVsxXWAgaXMgaGFuZGxlZCBieSB0aGUgZmFjdCB0aGF0IHRoZSBwYXJzZXJcbiAgLy8gZnVuY3Rpb24gdGhhdCBwYXJzZXMgdW5hcnkgcHJlZml4IG9wZXJhdG9ycyBpcyBjYWxsZWQgZmlyc3QsIGFuZFxuICAvLyBpbiB0dXJuIGNhbGxzIHRoZSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBgW11gIHN1YnNjcmlwdHMg4oCUIHRoYXRcbiAgLy8gd2F5LCBpdCdsbCByZWNlaXZlIHRoZSBub2RlIGZvciBgeFsxXWAgYWxyZWFkeSBwYXJzZWQsIGFuZCB3cmFwc1xuICAvLyAqdGhhdCogaW4gdGhlIHVuYXJ5IG9wZXJhdG9yIG5vZGUuXG4gIC8vXG4gIC8vIEFjb3JuIHVzZXMgYW4gW29wZXJhdG9yIHByZWNlZGVuY2UgcGFyc2VyXVtvcHBdIHRvIGhhbmRsZSBiaW5hcnlcbiAgLy8gb3BlcmF0b3IgcHJlY2VkZW5jZSwgYmVjYXVzZSBpdCBpcyBtdWNoIG1vcmUgY29tcGFjdCB0aGFuIHVzaW5nXG4gIC8vIHRoZSB0ZWNobmlxdWUgb3V0bGluZWQgYWJvdmUsIHdoaWNoIHVzZXMgZGlmZmVyZW50LCBuZXN0aW5nXG4gIC8vIGZ1bmN0aW9ucyB0byBzcGVjaWZ5IHByZWNlZGVuY2UsIGZvciBhbGwgb2YgdGhlIHRlbiBiaW5hcnlcbiAgLy8gcHJlY2VkZW5jZSBsZXZlbHMgdGhhdCBKYXZhU2NyaXB0IGRlZmluZXMuXG4gIC8vXG4gIC8vIFtvcHBdOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09wZXJhdG9yLXByZWNlZGVuY2VfcGFyc2VyXG5cblxuICB2YXIgcHAkNSA9IFBhcnNlci5wcm90b3R5cGU7XG5cbiAgLy8gQ2hlY2sgaWYgcHJvcGVydHkgbmFtZSBjbGFzaGVzIHdpdGggYWxyZWFkeSBhZGRlZC5cbiAgLy8gT2JqZWN0L2NsYXNzIGdldHRlcnMgYW5kIHNldHRlcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGNsYXNoIOKAlFxuICAvLyBlaXRoZXIgd2l0aCBlYWNoIG90aGVyIG9yIHdpdGggYW4gaW5pdCBwcm9wZXJ0eSDigJQgYW5kIGluXG4gIC8vIHN0cmljdCBtb2RlLCBpbml0IHByb3BlcnRpZXMgYXJlIGFsc28gbm90IGFsbG93ZWQgdG8gYmUgcmVwZWF0ZWQuXG5cbiAgcHAkNS5jaGVja1Byb3BDbGFzaCA9IGZ1bmN0aW9uKHByb3AsIHByb3BIYXNoLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmIHByb3AudHlwZSA9PT0gXCJTcHJlYWRFbGVtZW50XCIpXG4gICAgICB7IHJldHVybiB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIChwcm9wLmNvbXB1dGVkIHx8IHByb3AubWV0aG9kIHx8IHByb3Auc2hvcnRoYW5kKSlcbiAgICAgIHsgcmV0dXJuIH1cbiAgICB2YXIga2V5ID0gcHJvcC5rZXk7XG4gICAgdmFyIG5hbWU7XG4gICAgc3dpdGNoIChrZXkudHlwZSkge1xuICAgIGNhc2UgXCJJZGVudGlmaWVyXCI6IG5hbWUgPSBrZXkubmFtZTsgYnJlYWtcbiAgICBjYXNlIFwiTGl0ZXJhbFwiOiBuYW1lID0gU3RyaW5nKGtleS52YWx1ZSk7IGJyZWFrXG4gICAgZGVmYXVsdDogcmV0dXJuXG4gICAgfVxuICAgIHZhciBraW5kID0gcHJvcC5raW5kO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgICAgaWYgKG5hbWUgPT09IFwiX19wcm90b19fXCIgJiYga2luZCA9PT0gXCJpbml0XCIpIHtcbiAgICAgICAgaWYgKHByb3BIYXNoLnByb3RvKSB7XG4gICAgICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgICAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLmRvdWJsZVByb3RvIDwgMCkge1xuICAgICAgICAgICAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLmRvdWJsZVByb3RvID0ga2V5LnN0YXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoa2V5LnN0YXJ0LCBcIlJlZGVmaW5pdGlvbiBvZiBfX3Byb3RvX18gcHJvcGVydHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByb3BIYXNoLnByb3RvID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBuYW1lID0gXCIkXCIgKyBuYW1lO1xuICAgIHZhciBvdGhlciA9IHByb3BIYXNoW25hbWVdO1xuICAgIGlmIChvdGhlcikge1xuICAgICAgdmFyIHJlZGVmaW5pdGlvbjtcbiAgICAgIGlmIChraW5kID09PSBcImluaXRcIikge1xuICAgICAgICByZWRlZmluaXRpb24gPSB0aGlzLnN0cmljdCAmJiBvdGhlci5pbml0IHx8IG90aGVyLmdldCB8fCBvdGhlci5zZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWRlZmluaXRpb24gPSBvdGhlci5pbml0IHx8IG90aGVyW2tpbmRdO1xuICAgICAgfVxuICAgICAgaWYgKHJlZGVmaW5pdGlvbilcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoa2V5LnN0YXJ0LCBcIlJlZGVmaW5pdGlvbiBvZiBwcm9wZXJ0eVwiKTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdGhlciA9IHByb3BIYXNoW25hbWVdID0ge1xuICAgICAgICBpbml0OiBmYWxzZSxcbiAgICAgICAgZ2V0OiBmYWxzZSxcbiAgICAgICAgc2V0OiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgb3RoZXJba2luZF0gPSB0cnVlO1xuICB9O1xuXG4gIC8vICMjIyBFeHByZXNzaW9uIHBhcnNpbmdcblxuICAvLyBUaGVzZSBuZXN0LCBmcm9tIHRoZSBtb3N0IGdlbmVyYWwgZXhwcmVzc2lvbiB0eXBlIGF0IHRoZSB0b3AgdG9cbiAgLy8gJ2F0b21pYycsIG5vbmRpdmlzaWJsZSBleHByZXNzaW9uIHR5cGVzIGF0IHRoZSBib3R0b20uIE1vc3Qgb2ZcbiAgLy8gdGhlIGZ1bmN0aW9ucyB3aWxsIHNpbXBseSBsZXQgdGhlIGZ1bmN0aW9uKHMpIGJlbG93IHRoZW0gcGFyc2UsXG4gIC8vIGFuZCwgKmlmKiB0aGUgc3ludGFjdGljIGNvbnN0cnVjdCB0aGV5IGhhbmRsZSBpcyBwcmVzZW50LCB3cmFwXG4gIC8vIHRoZSBBU1Qgbm9kZSB0aGF0IHRoZSBpbm5lciBwYXJzZXIgZ2F2ZSB0aGVtIGluIGFub3RoZXIgbm9kZS5cblxuICAvLyBQYXJzZSBhIGZ1bGwgZXhwcmVzc2lvbi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgdXNlZCB0b1xuICAvLyBmb3JiaWQgdGhlIGBpbmAgb3BlcmF0b3IgKGluIGZvciBsb29wcyBpbml0YWxpemF0aW9uIGV4cHJlc3Npb25zKVxuICAvLyBhbmQgcHJvdmlkZSByZWZlcmVuY2UgZm9yIHN0b3JpbmcgJz0nIG9wZXJhdG9yIGluc2lkZSBzaG9ydGhhbmRcbiAgLy8gcHJvcGVydHkgYXNzaWdubWVudCBpbiBjb250ZXh0cyB3aGVyZSBib3RoIG9iamVjdCBleHByZXNzaW9uXG4gIC8vIGFuZCBvYmplY3QgcGF0dGVybiBtaWdodCBhcHBlYXIgKHNvIGl0J3MgcG9zc2libGUgdG8gcmFpc2VcbiAgLy8gZGVsYXllZCBzeW50YXggZXJyb3IgYXQgY29ycmVjdCBwb3NpdGlvbikuXG5cbiAgcHAkNS5wYXJzZUV4cHJlc3Npb24gPSBmdW5jdGlvbihmb3JJbml0LCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICAgIHZhciBleHByID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGZvckluaXQsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuY29tbWEpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgbm9kZS5leHByZXNzaW9ucyA9IFtleHByXTtcbiAgICAgIHdoaWxlICh0aGlzLmVhdCh0eXBlcyQxLmNvbW1hKSkgeyBub2RlLmV4cHJlc3Npb25zLnB1c2godGhpcy5wYXJzZU1heWJlQXNzaWduKGZvckluaXQsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpKTsgfVxuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlNlcXVlbmNlRXhwcmVzc2lvblwiKVxuICAgIH1cbiAgICByZXR1cm4gZXhwclxuICB9O1xuXG4gIC8vIFBhcnNlIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvbi4gVGhpcyBpbmNsdWRlcyBhcHBsaWNhdGlvbnMgb2ZcbiAgLy8gb3BlcmF0b3JzIGxpa2UgYCs9YC5cblxuICBwcCQ1LnBhcnNlTWF5YmVBc3NpZ24gPSBmdW5jdGlvbihmb3JJbml0LCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBhZnRlckxlZnRQYXJzZSkge1xuICAgIGlmICh0aGlzLmlzQ29udGV4dHVhbChcInlpZWxkXCIpKSB7XG4gICAgICBpZiAodGhpcy5pbkdlbmVyYXRvcikgeyByZXR1cm4gdGhpcy5wYXJzZVlpZWxkKGZvckluaXQpIH1cbiAgICAgIC8vIFRoZSB0b2tlbml6ZXIgd2lsbCBhc3N1bWUgYW4gZXhwcmVzc2lvbiBpcyBhbGxvd2VkIGFmdGVyXG4gICAgICAvLyBgeWllbGRgLCBidXQgdGhpcyBpc24ndCB0aGF0IGtpbmQgb2YgeWllbGRcbiAgICAgIGVsc2UgeyB0aGlzLmV4cHJBbGxvd2VkID0gZmFsc2U7IH1cbiAgICB9XG5cbiAgICB2YXIgb3duRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IGZhbHNlLCBvbGRQYXJlbkFzc2lnbiA9IC0xLCBvbGRUcmFpbGluZ0NvbW1hID0gLTEsIG9sZERvdWJsZVByb3RvID0gLTE7XG4gICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgIG9sZFBhcmVuQXNzaWduID0gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduO1xuICAgICAgb2xkVHJhaWxpbmdDb21tYSA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYTtcbiAgICAgIG9sZERvdWJsZVByb3RvID0gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5kb3VibGVQcm90bztcbiAgICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA9IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzID0gbmV3IERlc3RydWN0dXJpbmdFcnJvcnM7XG4gICAgICBvd25EZXN0cnVjdHVyaW5nRXJyb3JzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5wYXJlbkwgfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLm5hbWUpIHtcbiAgICAgIHRoaXMucG90ZW50aWFsQXJyb3dBdCA9IHRoaXMuc3RhcnQ7XG4gICAgICB0aGlzLnBvdGVudGlhbEFycm93SW5Gb3JBd2FpdCA9IGZvckluaXQgPT09IFwiYXdhaXRcIjtcbiAgICB9XG4gICAgdmFyIGxlZnQgPSB0aGlzLnBhcnNlTWF5YmVDb25kaXRpb25hbChmb3JJbml0LCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICBpZiAoYWZ0ZXJMZWZ0UGFyc2UpIHsgbGVmdCA9IGFmdGVyTGVmdFBhcnNlLmNhbGwodGhpcywgbGVmdCwgc3RhcnRQb3MsIHN0YXJ0TG9jKTsgfVxuICAgIGlmICh0aGlzLnR5cGUuaXNBc3NpZ24pIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgbm9kZS5vcGVyYXRvciA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLmVxKVxuICAgICAgICB7IGxlZnQgPSB0aGlzLnRvQXNzaWduYWJsZShsZWZ0LCBmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7IH1cbiAgICAgIGlmICghb3duRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLmRvdWJsZVByb3RvID0gLTE7XG4gICAgICB9XG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5zaG9ydGhhbmRBc3NpZ24gPj0gbGVmdC5zdGFydClcbiAgICAgICAgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbiA9IC0xOyB9IC8vIHJlc2V0IGJlY2F1c2Ugc2hvcnRoYW5kIGRlZmF1bHQgd2FzIHVzZWQgY29ycmVjdGx5XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLmVxKVxuICAgICAgICB7IHRoaXMuY2hlY2tMVmFsUGF0dGVybihsZWZ0KTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHRoaXMuY2hlY2tMVmFsU2ltcGxlKGxlZnQpOyB9XG4gICAgICBub2RlLmxlZnQgPSBsZWZ0O1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICBub2RlLnJpZ2h0ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGZvckluaXQpO1xuICAgICAgaWYgKG9sZERvdWJsZVByb3RvID4gLTEpIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5kb3VibGVQcm90byA9IG9sZERvdWJsZVByb3RvOyB9XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXNzaWdubWVudEV4cHJlc3Npb25cIilcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG93bkRlc3RydWN0dXJpbmdFcnJvcnMpIHsgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7IH1cbiAgICB9XG4gICAgaWYgKG9sZFBhcmVuQXNzaWduID4gLTEpIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID0gb2xkUGFyZW5Bc3NpZ247IH1cbiAgICBpZiAob2xkVHJhaWxpbmdDb21tYSA+IC0xKSB7IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA9IG9sZFRyYWlsaW5nQ29tbWE7IH1cbiAgICByZXR1cm4gbGVmdFxuICB9O1xuXG4gIC8vIFBhcnNlIGEgdGVybmFyeSBjb25kaXRpb25hbCAoYD86YCkgb3BlcmF0b3IuXG5cbiAgcHAkNS5wYXJzZU1heWJlQ29uZGl0aW9uYWwgPSBmdW5jdGlvbihmb3JJbml0LCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICAgIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJPcHMoZm9ySW5pdCwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgaWYgKHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpKSB7IHJldHVybiBleHByIH1cbiAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5xdWVzdGlvbikpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgbm9kZS50ZXN0ID0gZXhwcjtcbiAgICAgIG5vZGUuY29uc2VxdWVudCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpO1xuICAgICAgdGhpcy5leHBlY3QodHlwZXMkMS5jb2xvbik7XG4gICAgICBub2RlLmFsdGVybmF0ZSA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihmb3JJbml0KTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIilcbiAgICB9XG4gICAgcmV0dXJuIGV4cHJcbiAgfTtcblxuICAvLyBTdGFydCB0aGUgcHJlY2VkZW5jZSBwYXJzZXIuXG5cbiAgcHAkNS5wYXJzZUV4cHJPcHMgPSBmdW5jdGlvbihmb3JJbml0LCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICAgIHZhciBleHByID0gdGhpcy5wYXJzZU1heWJlVW5hcnkocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgZmFsc2UsIGZhbHNlLCBmb3JJbml0KTtcbiAgICBpZiAodGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykpIHsgcmV0dXJuIGV4cHIgfVxuICAgIHJldHVybiBleHByLnN0YXJ0ID09PSBzdGFydFBvcyAmJiBleHByLnR5cGUgPT09IFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIiA/IGV4cHIgOiB0aGlzLnBhcnNlRXhwck9wKGV4cHIsIHN0YXJ0UG9zLCBzdGFydExvYywgLTEsIGZvckluaXQpXG4gIH07XG5cbiAgLy8gUGFyc2UgYmluYXJ5IG9wZXJhdG9ycyB3aXRoIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlIHBhcnNpbmdcbiAgLy8gYWxnb3JpdGhtLiBgbGVmdGAgaXMgdGhlIGxlZnQtaGFuZCBzaWRlIG9mIHRoZSBvcGVyYXRvci5cbiAgLy8gYG1pblByZWNgIHByb3ZpZGVzIGNvbnRleHQgdGhhdCBhbGxvd3MgdGhlIGZ1bmN0aW9uIHRvIHN0b3AgYW5kXG4gIC8vIGRlZmVyIGZ1cnRoZXIgcGFyc2VyIHRvIG9uZSBvZiBpdHMgY2FsbGVycyB3aGVuIGl0IGVuY291bnRlcnMgYW5cbiAgLy8gb3BlcmF0b3IgdGhhdCBoYXMgYSBsb3dlciBwcmVjZWRlbmNlIHRoYW4gdGhlIHNldCBpdCBpcyBwYXJzaW5nLlxuXG4gIHBwJDUucGFyc2VFeHByT3AgPSBmdW5jdGlvbihsZWZ0LCBsZWZ0U3RhcnRQb3MsIGxlZnRTdGFydExvYywgbWluUHJlYywgZm9ySW5pdCkge1xuICAgIHZhciBwcmVjID0gdGhpcy50eXBlLmJpbm9wO1xuICAgIGlmIChwcmVjICE9IG51bGwgJiYgKCFmb3JJbml0IHx8IHRoaXMudHlwZSAhPT0gdHlwZXMkMS5faW4pKSB7XG4gICAgICBpZiAocHJlYyA+IG1pblByZWMpIHtcbiAgICAgICAgdmFyIGxvZ2ljYWwgPSB0aGlzLnR5cGUgPT09IHR5cGVzJDEubG9naWNhbE9SIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5sb2dpY2FsQU5EO1xuICAgICAgICB2YXIgY29hbGVzY2UgPSB0aGlzLnR5cGUgPT09IHR5cGVzJDEuY29hbGVzY2U7XG4gICAgICAgIGlmIChjb2FsZXNjZSkge1xuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgcHJlY2VkZW5jZSBvZiBgdHQuY29hbGVzY2VgIGFzIGVxdWFsIHRvIHRoZSByYW5nZSBvZiBsb2dpY2FsIGV4cHJlc3Npb25zLlxuICAgICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCBgbm9kZS5yaWdodGAgc2hvdWxkbid0IGNvbnRhaW4gbG9naWNhbCBleHByZXNzaW9ucyBpbiBvcmRlciB0byBjaGVjayB0aGUgbWl4ZWQgZXJyb3IuXG4gICAgICAgICAgcHJlYyA9IHR5cGVzJDEubG9naWNhbEFORC5iaW5vcDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3AgPSB0aGlzLnZhbHVlO1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLnBhcnNlRXhwck9wKHRoaXMucGFyc2VNYXliZVVuYXJ5KG51bGwsIGZhbHNlLCBmYWxzZSwgZm9ySW5pdCksIHN0YXJ0UG9zLCBzdGFydExvYywgcHJlYywgZm9ySW5pdCk7XG4gICAgICAgIHZhciBub2RlID0gdGhpcy5idWlsZEJpbmFyeShsZWZ0U3RhcnRQb3MsIGxlZnRTdGFydExvYywgbGVmdCwgcmlnaHQsIG9wLCBsb2dpY2FsIHx8IGNvYWxlc2NlKTtcbiAgICAgICAgaWYgKChsb2dpY2FsICYmIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5jb2FsZXNjZSkgfHwgKGNvYWxlc2NlICYmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEubG9naWNhbE9SIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5sb2dpY2FsQU5EKSkpIHtcbiAgICAgICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgXCJMb2dpY2FsIGV4cHJlc3Npb25zIGFuZCBjb2FsZXNjZSBleHByZXNzaW9ucyBjYW5ub3QgYmUgbWl4ZWQuIFdyYXAgZWl0aGVyIGJ5IHBhcmVudGhlc2VzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXhwck9wKG5vZGUsIGxlZnRTdGFydFBvcywgbGVmdFN0YXJ0TG9jLCBtaW5QcmVjLCBmb3JJbml0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGVmdFxuICB9O1xuXG4gIHBwJDUuYnVpbGRCaW5hcnkgPSBmdW5jdGlvbihzdGFydFBvcywgc3RhcnRMb2MsIGxlZnQsIHJpZ2h0LCBvcCwgbG9naWNhbCkge1xuICAgIGlmIChyaWdodC50eXBlID09PSBcIlByaXZhdGVJZGVudGlmaWVyXCIpIHsgdGhpcy5yYWlzZShyaWdodC5zdGFydCwgXCJQcml2YXRlIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgbGVmdCBzaWRlIG9mIGJpbmFyeSBleHByZXNzaW9uXCIpOyB9XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgbm9kZS5sZWZ0ID0gbGVmdDtcbiAgICBub2RlLm9wZXJhdG9yID0gb3A7XG4gICAgbm9kZS5yaWdodCA9IHJpZ2h0O1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgbG9naWNhbCA/IFwiTG9naWNhbEV4cHJlc3Npb25cIiA6IFwiQmluYXJ5RXhwcmVzc2lvblwiKVxuICB9O1xuXG4gIC8vIFBhcnNlIHVuYXJ5IG9wZXJhdG9ycywgYm90aCBwcmVmaXggYW5kIHBvc3RmaXguXG5cbiAgcHAkNS5wYXJzZU1heWJlVW5hcnkgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBzYXdVbmFyeSwgaW5jRGVjLCBmb3JJbml0KSB7XG4gICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jLCBleHByO1xuICAgIGlmICh0aGlzLmlzQ29udGV4dHVhbChcImF3YWl0XCIpICYmIHRoaXMuY2FuQXdhaXQpIHtcbiAgICAgIGV4cHIgPSB0aGlzLnBhcnNlQXdhaXQoZm9ySW5pdCk7XG4gICAgICBzYXdVbmFyeSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUucHJlZml4KSB7XG4gICAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCksIHVwZGF0ZSA9IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5pbmNEZWM7XG4gICAgICBub2RlLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICAgIG5vZGUucHJlZml4ID0gdHJ1ZTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZVVuYXJ5KG51bGwsIHRydWUsIHVwZGF0ZSwgZm9ySW5pdCk7XG4gICAgICB0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTtcbiAgICAgIGlmICh1cGRhdGUpIHsgdGhpcy5jaGVja0xWYWxTaW1wbGUobm9kZS5hcmd1bWVudCk7IH1cbiAgICAgIGVsc2UgaWYgKHRoaXMuc3RyaWN0ICYmIG5vZGUub3BlcmF0b3IgPT09IFwiZGVsZXRlXCIgJiZcbiAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnQudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpXG4gICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUuc3RhcnQsIFwiRGVsZXRpbmcgbG9jYWwgdmFyaWFibGUgaW4gc3RyaWN0IG1vZGVcIik7IH1cbiAgICAgIGVsc2UgaWYgKG5vZGUub3BlcmF0b3IgPT09IFwiZGVsZXRlXCIgJiYgaXNQcml2YXRlRmllbGRBY2Nlc3Mobm9kZS5hcmd1bWVudCkpXG4gICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUuc3RhcnQsIFwiUHJpdmF0ZSBmaWVsZHMgY2FuIG5vdCBiZSBkZWxldGVkXCIpOyB9XG4gICAgICBlbHNlIHsgc2F3VW5hcnkgPSB0cnVlOyB9XG4gICAgICBleHByID0gdGhpcy5maW5pc2hOb2RlKG5vZGUsIHVwZGF0ZSA/IFwiVXBkYXRlRXhwcmVzc2lvblwiIDogXCJVbmFyeUV4cHJlc3Npb25cIik7XG4gICAgfSBlbHNlIGlmICghc2F3VW5hcnkgJiYgdGhpcy50eXBlID09PSB0eXBlcyQxLnByaXZhdGVJZCkge1xuICAgICAgaWYgKGZvckluaXQgfHwgdGhpcy5wcml2YXRlTmFtZVN0YWNrLmxlbmd0aCA9PT0gMCkgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgZXhwciA9IHRoaXMucGFyc2VQcml2YXRlSWRlbnQoKTtcbiAgICAgIC8vIG9ubHkgY291bGQgYmUgcHJpdmF0ZSBmaWVsZHMgaW4gJ2luJywgc3VjaCBhcyAjeCBpbiBvYmpcbiAgICAgIGlmICh0aGlzLnR5cGUgIT09IHR5cGVzJDEuX2luKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cHIgPSB0aGlzLnBhcnNlRXhwclN1YnNjcmlwdHMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgZm9ySW5pdCk7XG4gICAgICBpZiAodGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykpIHsgcmV0dXJuIGV4cHIgfVxuICAgICAgd2hpbGUgKHRoaXMudHlwZS5wb3N0Zml4ICYmICF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpKSB7XG4gICAgICAgIHZhciBub2RlJDEgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICAgIG5vZGUkMS5vcGVyYXRvciA9IHRoaXMudmFsdWU7XG4gICAgICAgIG5vZGUkMS5wcmVmaXggPSBmYWxzZTtcbiAgICAgICAgbm9kZSQxLmFyZ3VtZW50ID0gZXhwcjtcbiAgICAgICAgdGhpcy5jaGVja0xWYWxTaW1wbGUoZXhwcik7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICBleHByID0gdGhpcy5maW5pc2hOb2RlKG5vZGUkMSwgXCJVcGRhdGVFeHByZXNzaW9uXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaW5jRGVjICYmIHRoaXMuZWF0KHR5cGVzJDEuc3RhcnN0YXIpKSB7XG4gICAgICBpZiAoc2F3VW5hcnkpXG4gICAgICAgIHsgdGhpcy51bmV4cGVjdGVkKHRoaXMubGFzdFRva1N0YXJ0KTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHJldHVybiB0aGlzLmJ1aWxkQmluYXJ5KHN0YXJ0UG9zLCBzdGFydExvYywgZXhwciwgdGhpcy5wYXJzZU1heWJlVW5hcnkobnVsbCwgZmFsc2UsIGZhbHNlLCBmb3JJbml0KSwgXCIqKlwiLCBmYWxzZSkgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXhwclxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBpc1ByaXZhdGVGaWVsZEFjY2Vzcyhub2RlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIG5vZGUudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgbm9kZS5wcm9wZXJ0eS50eXBlID09PSBcIlByaXZhdGVJZGVudGlmaWVyXCIgfHxcbiAgICAgIG5vZGUudHlwZSA9PT0gXCJDaGFpbkV4cHJlc3Npb25cIiAmJiBpc1ByaXZhdGVGaWVsZEFjY2Vzcyhub2RlLmV4cHJlc3Npb24pXG4gICAgKVxuICB9XG5cbiAgLy8gUGFyc2UgY2FsbCwgZG90LCBhbmQgYFtdYC1zdWJzY3JpcHQgZXhwcmVzc2lvbnMuXG5cbiAgcHAkNS5wYXJzZUV4cHJTdWJzY3JpcHRzID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgZm9ySW5pdCkge1xuICAgIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByQXRvbShyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBmb3JJbml0KTtcbiAgICBpZiAoZXhwci50eXBlID09PSBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIgJiYgdGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tTdGFydCwgdGhpcy5sYXN0VG9rRW5kKSAhPT0gXCIpXCIpXG4gICAgICB7IHJldHVybiBleHByIH1cbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5wYXJzZVN1YnNjcmlwdHMoZXhwciwgc3RhcnRQb3MsIHN0YXJ0TG9jLCBmYWxzZSwgZm9ySW5pdCk7XG4gICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgJiYgcmVzdWx0LnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID49IHJlc3VsdC5zdGFydCkgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSAtMTsgfVxuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEJpbmQgPj0gcmVzdWx0LnN0YXJ0KSB7IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEJpbmQgPSAtMTsgfVxuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA+PSByZXN1bHQuc3RhcnQpIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID0gLTE7IH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9O1xuXG4gIHBwJDUucGFyc2VTdWJzY3JpcHRzID0gZnVuY3Rpb24oYmFzZSwgc3RhcnRQb3MsIHN0YXJ0TG9jLCBub0NhbGxzLCBmb3JJbml0KSB7XG4gICAgdmFyIG1heWJlQXN5bmNBcnJvdyA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4ICYmIGJhc2UudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYgYmFzZS5uYW1lID09PSBcImFzeW5jXCIgJiZcbiAgICAgICAgdGhpcy5sYXN0VG9rRW5kID09PSBiYXNlLmVuZCAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSAmJiBiYXNlLmVuZCAtIGJhc2Uuc3RhcnQgPT09IDUgJiZcbiAgICAgICAgdGhpcy5wb3RlbnRpYWxBcnJvd0F0ID09PSBiYXNlLnN0YXJ0O1xuICAgIHZhciBvcHRpb25hbENoYWluZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VTdWJzY3JpcHQoYmFzZSwgc3RhcnRQb3MsIHN0YXJ0TG9jLCBub0NhbGxzLCBtYXliZUFzeW5jQXJyb3csIG9wdGlvbmFsQ2hhaW5lZCwgZm9ySW5pdCk7XG5cbiAgICAgIGlmIChlbGVtZW50Lm9wdGlvbmFsKSB7IG9wdGlvbmFsQ2hhaW5lZCA9IHRydWU7IH1cbiAgICAgIGlmIChlbGVtZW50ID09PSBiYXNlIHx8IGVsZW1lbnQudHlwZSA9PT0gXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiKSB7XG4gICAgICAgIGlmIChvcHRpb25hbENoYWluZWQpIHtcbiAgICAgICAgICB2YXIgY2hhaW5Ob2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgICAgIGNoYWluTm9kZS5leHByZXNzaW9uID0gZWxlbWVudDtcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcy5maW5pc2hOb2RlKGNoYWluTm9kZSwgXCJDaGFpbkV4cHJlc3Npb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRcbiAgICAgIH1cblxuICAgICAgYmFzZSA9IGVsZW1lbnQ7XG4gICAgfVxuICB9O1xuXG4gIHBwJDUuc2hvdWxkUGFyc2VBc3luY0Fycm93ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpICYmIHRoaXMuZWF0KHR5cGVzJDEuYXJyb3cpXG4gIH07XG5cbiAgcHAkNS5wYXJzZVN1YnNjcmlwdEFzeW5jQXJyb3cgPSBmdW5jdGlvbihzdGFydFBvcywgc3RhcnRMb2MsIGV4cHJMaXN0LCBmb3JJbml0KSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBleHByTGlzdCwgdHJ1ZSwgZm9ySW5pdClcbiAgfTtcblxuICBwcCQ1LnBhcnNlU3Vic2NyaXB0ID0gZnVuY3Rpb24oYmFzZSwgc3RhcnRQb3MsIHN0YXJ0TG9jLCBub0NhbGxzLCBtYXliZUFzeW5jQXJyb3csIG9wdGlvbmFsQ2hhaW5lZCwgZm9ySW5pdCkge1xuICAgIHZhciBvcHRpb25hbFN1cHBvcnRlZCA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMTtcbiAgICB2YXIgb3B0aW9uYWwgPSBvcHRpb25hbFN1cHBvcnRlZCAmJiB0aGlzLmVhdCh0eXBlcyQxLnF1ZXN0aW9uRG90KTtcbiAgICBpZiAobm9DYWxscyAmJiBvcHRpb25hbCkgeyB0aGlzLnJhaXNlKHRoaXMubGFzdFRva1N0YXJ0LCBcIk9wdGlvbmFsIGNoYWluaW5nIGNhbm5vdCBhcHBlYXIgaW4gdGhlIGNhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbnNcIik7IH1cblxuICAgIHZhciBjb21wdXRlZCA9IHRoaXMuZWF0KHR5cGVzJDEuYnJhY2tldEwpO1xuICAgIGlmIChjb21wdXRlZCB8fCAob3B0aW9uYWwgJiYgdGhpcy50eXBlICE9PSB0eXBlcyQxLnBhcmVuTCAmJiB0aGlzLnR5cGUgIT09IHR5cGVzJDEuYmFja1F1b3RlKSB8fCB0aGlzLmVhdCh0eXBlcyQxLmRvdCkpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgbm9kZS5vYmplY3QgPSBiYXNlO1xuICAgICAgaWYgKGNvbXB1dGVkKSB7XG4gICAgICAgIG5vZGUucHJvcGVydHkgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLmJyYWNrZXRSKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLnByaXZhdGVJZCAmJiBiYXNlLnR5cGUgIT09IFwiU3VwZXJcIikge1xuICAgICAgICBub2RlLnByb3BlcnR5ID0gdGhpcy5wYXJzZVByaXZhdGVJZGVudCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5wcm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudCh0aGlzLm9wdGlvbnMuYWxsb3dSZXNlcnZlZCAhPT0gXCJuZXZlclwiKTtcbiAgICAgIH1cbiAgICAgIG5vZGUuY29tcHV0ZWQgPSAhIWNvbXB1dGVkO1xuICAgICAgaWYgKG9wdGlvbmFsU3VwcG9ydGVkKSB7XG4gICAgICAgIG5vZGUub3B0aW9uYWwgPSBvcHRpb25hbDtcbiAgICAgIH1cbiAgICAgIGJhc2UgPSB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJNZW1iZXJFeHByZXNzaW9uXCIpO1xuICAgIH0gZWxzZSBpZiAoIW5vQ2FsbHMgJiYgdGhpcy5lYXQodHlwZXMkMS5wYXJlbkwpKSB7XG4gICAgICB2YXIgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IG5ldyBEZXN0cnVjdHVyaW5nRXJyb3JzLCBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgb2xkQXdhaXRJZGVudFBvcyA9IHRoaXMuYXdhaXRJZGVudFBvcztcbiAgICAgIHRoaXMueWllbGRQb3MgPSAwO1xuICAgICAgdGhpcy5hd2FpdFBvcyA9IDA7XG4gICAgICB0aGlzLmF3YWl0SWRlbnRQb3MgPSAwO1xuICAgICAgdmFyIGV4cHJMaXN0ID0gdGhpcy5wYXJzZUV4cHJMaXN0KHR5cGVzJDEucGFyZW5SLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCwgZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgICAgaWYgKG1heWJlQXN5bmNBcnJvdyAmJiAhb3B0aW9uYWwgJiYgdGhpcy5zaG91bGRQYXJzZUFzeW5jQXJyb3coKSkge1xuICAgICAgICB0aGlzLmNoZWNrUGF0dGVybkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKCk7XG4gICAgICAgIGlmICh0aGlzLmF3YWl0SWRlbnRQb3MgPiAwKVxuICAgICAgICAgIHsgdGhpcy5yYWlzZSh0aGlzLmF3YWl0SWRlbnRQb3MsIFwiQ2Fubm90IHVzZSAnYXdhaXQnIGFzIGlkZW50aWZpZXIgaW5zaWRlIGFuIGFzeW5jIGZ1bmN0aW9uXCIpOyB9XG4gICAgICAgIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvcztcbiAgICAgICAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zO1xuICAgICAgICB0aGlzLmF3YWl0SWRlbnRQb3MgPSBvbGRBd2FpdElkZW50UG9zO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVN1YnNjcmlwdEFzeW5jQXJyb3coc3RhcnRQb3MsIHN0YXJ0TG9jLCBleHByTGlzdCwgZm9ySW5pdClcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpO1xuICAgICAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zIHx8IHRoaXMueWllbGRQb3M7XG4gICAgICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3MgfHwgdGhpcy5hd2FpdFBvcztcbiAgICAgIHRoaXMuYXdhaXRJZGVudFBvcyA9IG9sZEF3YWl0SWRlbnRQb3MgfHwgdGhpcy5hd2FpdElkZW50UG9zO1xuICAgICAgdmFyIG5vZGUkMSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICAgIG5vZGUkMS5jYWxsZWUgPSBiYXNlO1xuICAgICAgbm9kZSQxLmFyZ3VtZW50cyA9IGV4cHJMaXN0O1xuICAgICAgaWYgKG9wdGlvbmFsU3VwcG9ydGVkKSB7XG4gICAgICAgIG5vZGUkMS5vcHRpb25hbCA9IG9wdGlvbmFsO1xuICAgICAgfVxuICAgICAgYmFzZSA9IHRoaXMuZmluaXNoTm9kZShub2RlJDEsIFwiQ2FsbEV4cHJlc3Npb25cIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuYmFja1F1b3RlKSB7XG4gICAgICBpZiAob3B0aW9uYWwgfHwgb3B0aW9uYWxDaGFpbmVkKSB7XG4gICAgICAgIHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJPcHRpb25hbCBjaGFpbmluZyBjYW5ub3QgYXBwZWFyIGluIHRoZSB0YWcgb2YgdGFnZ2VkIHRlbXBsYXRlIGV4cHJlc3Npb25zXCIpO1xuICAgICAgfVxuICAgICAgdmFyIG5vZGUkMiA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICAgIG5vZGUkMi50YWcgPSBiYXNlO1xuICAgICAgbm9kZSQyLnF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlKHtpc1RhZ2dlZDogdHJ1ZX0pO1xuICAgICAgYmFzZSA9IHRoaXMuZmluaXNoTm9kZShub2RlJDIsIFwiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZVxuICB9O1xuXG4gIC8vIFBhcnNlIGFuIGF0b21pYyBleHByZXNzaW9uIOKAlCBlaXRoZXIgYSBzaW5nbGUgdG9rZW4gdGhhdCBpcyBhblxuICAvLyBleHByZXNzaW9uLCBhbiBleHByZXNzaW9uIHN0YXJ0ZWQgYnkgYSBrZXl3b3JkIGxpa2UgYGZ1bmN0aW9uYCBvclxuICAvLyBgbmV3YCwgb3IgYW4gZXhwcmVzc2lvbiB3cmFwcGVkIGluIHB1bmN0dWF0aW9uIGxpa2UgYCgpYCwgYFtdYCxcbiAgLy8gb3IgYHt9YC5cblxuICBwcCQ1LnBhcnNlRXhwckF0b20gPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBmb3JJbml0LCBmb3JOZXcpIHtcbiAgICAvLyBJZiBhIGRpdmlzaW9uIG9wZXJhdG9yIGFwcGVhcnMgaW4gYW4gZXhwcmVzc2lvbiBwb3NpdGlvbiwgdGhlXG4gICAgLy8gdG9rZW5pemVyIGdvdCBjb25mdXNlZCwgYW5kIHdlIGZvcmNlIGl0IHRvIHJlYWQgYSByZWdleHAgaW5zdGVhZC5cbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLnNsYXNoKSB7IHRoaXMucmVhZFJlZ2V4cCgpOyB9XG5cbiAgICB2YXIgbm9kZSwgY2FuQmVBcnJvdyA9IHRoaXMucG90ZW50aWFsQXJyb3dBdCA9PT0gdGhpcy5zdGFydDtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgIGNhc2UgdHlwZXMkMS5fc3VwZXI6XG4gICAgICBpZiAoIXRoaXMuYWxsb3dTdXBlcilcbiAgICAgICAgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ3N1cGVyJyBrZXl3b3JkIG91dHNpZGUgYSBtZXRob2RcIik7IH1cbiAgICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLnBhcmVuTCAmJiAhdGhpcy5hbGxvd0RpcmVjdFN1cGVyKVxuICAgICAgICB7IHRoaXMucmFpc2Uobm9kZS5zdGFydCwgXCJzdXBlcigpIGNhbGwgb3V0c2lkZSBjb25zdHJ1Y3RvciBvZiBhIHN1YmNsYXNzXCIpOyB9XG4gICAgICAvLyBUaGUgYHN1cGVyYCBrZXl3b3JkIGNhbiBhcHBlYXIgYXQgYmVsb3c6XG4gICAgICAvLyBTdXBlclByb3BlcnR5OlxuICAgICAgLy8gICAgIHN1cGVyIFsgRXhwcmVzc2lvbiBdXG4gICAgICAvLyAgICAgc3VwZXIgLiBJZGVudGlmaWVyTmFtZVxuICAgICAgLy8gU3VwZXJDYWxsOlxuICAgICAgLy8gICAgIHN1cGVyICggQXJndW1lbnRzIClcbiAgICAgIGlmICh0aGlzLnR5cGUgIT09IHR5cGVzJDEuZG90ICYmIHRoaXMudHlwZSAhPT0gdHlwZXMkMS5icmFja2V0TCAmJiB0aGlzLnR5cGUgIT09IHR5cGVzJDEucGFyZW5MKVxuICAgICAgICB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiU3VwZXJcIilcblxuICAgIGNhc2UgdHlwZXMkMS5fdGhpczpcbiAgICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiVGhpc0V4cHJlc3Npb25cIilcblxuICAgIGNhc2UgdHlwZXMkMS5uYW1lOlxuICAgICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jLCBjb250YWluc0VzYyA9IHRoaXMuY29udGFpbnNFc2M7XG4gICAgICB2YXIgaWQgPSB0aGlzLnBhcnNlSWRlbnQoZmFsc2UpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4ICYmICFjb250YWluc0VzYyAmJiBpZC5uYW1lID09PSBcImFzeW5jXCIgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgJiYgdGhpcy5lYXQodHlwZXMkMS5fZnVuY3Rpb24pKSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVDb250ZXh0KHR5cGVzLmZfZXhwcik7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCAwLCBmYWxzZSwgdHJ1ZSwgZm9ySW5pdClcbiAgICAgIH1cbiAgICAgIGlmIChjYW5CZUFycm93ICYmICF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpKSB7XG4gICAgICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLmFycm93KSlcbiAgICAgICAgICB7IHJldHVybiB0aGlzLnBhcnNlQXJyb3dFeHByZXNzaW9uKHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKSwgW2lkXSwgZmFsc2UsIGZvckluaXQpIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4ICYmIGlkLm5hbWUgPT09IFwiYXN5bmNcIiAmJiB0aGlzLnR5cGUgPT09IHR5cGVzJDEubmFtZSAmJiAhY29udGFpbnNFc2MgJiZcbiAgICAgICAgICAgICghdGhpcy5wb3RlbnRpYWxBcnJvd0luRm9yQXdhaXQgfHwgdGhpcy52YWx1ZSAhPT0gXCJvZlwiIHx8IHRoaXMuY29udGFpbnNFc2MpKSB7XG4gICAgICAgICAgaWQgPSB0aGlzLnBhcnNlSWRlbnQoZmFsc2UpO1xuICAgICAgICAgIGlmICh0aGlzLmNhbkluc2VydFNlbWljb2xvbigpIHx8ICF0aGlzLmVhdCh0eXBlcyQxLmFycm93KSlcbiAgICAgICAgICAgIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFycm93RXhwcmVzc2lvbih0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIFtpZF0sIHRydWUsIGZvckluaXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpZFxuXG4gICAgY2FzZSB0eXBlcyQxLnJlZ2V4cDpcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICBub2RlID0gdGhpcy5wYXJzZUxpdGVyYWwodmFsdWUudmFsdWUpO1xuICAgICAgbm9kZS5yZWdleCA9IHtwYXR0ZXJuOiB2YWx1ZS5wYXR0ZXJuLCBmbGFnczogdmFsdWUuZmxhZ3N9O1xuICAgICAgcmV0dXJuIG5vZGVcblxuICAgIGNhc2UgdHlwZXMkMS5udW06IGNhc2UgdHlwZXMkMS5zdHJpbmc6XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUxpdGVyYWwodGhpcy52YWx1ZSlcblxuICAgIGNhc2UgdHlwZXMkMS5fbnVsbDogY2FzZSB0eXBlcyQxLl90cnVlOiBjYXNlIHR5cGVzJDEuX2ZhbHNlOlxuICAgICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICBub2RlLnZhbHVlID0gdGhpcy50eXBlID09PSB0eXBlcyQxLl9udWxsID8gbnVsbCA6IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5fdHJ1ZTtcbiAgICAgIG5vZGUucmF3ID0gdGhpcy50eXBlLmtleXdvcmQ7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJMaXRlcmFsXCIpXG5cbiAgICBjYXNlIHR5cGVzJDEucGFyZW5MOlxuICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydCwgZXhwciA9IHRoaXMucGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbihjYW5CZUFycm93LCBmb3JJbml0KTtcbiAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPCAwICYmICF0aGlzLmlzU2ltcGxlQXNzaWduVGFyZ2V0KGV4cHIpKVxuICAgICAgICAgIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID0gc3RhcnQ7IH1cbiAgICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEJpbmQgPCAwKVxuICAgICAgICAgIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZCA9IHN0YXJ0OyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhwclxuXG4gICAgY2FzZSB0eXBlcyQxLmJyYWNrZXRMOlxuICAgICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIG5vZGUuZWxlbWVudHMgPSB0aGlzLnBhcnNlRXhwckxpc3QodHlwZXMkMS5icmFja2V0UiwgdHJ1ZSwgdHJ1ZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXJyYXlFeHByZXNzaW9uXCIpXG5cbiAgICBjYXNlIHR5cGVzJDEuYnJhY2VMOlxuICAgICAgdGhpcy5vdmVycmlkZUNvbnRleHQodHlwZXMuYl9leHByKTtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlT2JqKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuXG4gICAgY2FzZSB0eXBlcyQxLl9mdW5jdGlvbjpcbiAgICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKG5vZGUsIDApXG5cbiAgICBjYXNlIHR5cGVzJDEuX2NsYXNzOlxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VDbGFzcyh0aGlzLnN0YXJ0Tm9kZSgpLCBmYWxzZSlcblxuICAgIGNhc2UgdHlwZXMkMS5fbmV3OlxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VOZXcoKVxuXG4gICAgY2FzZSB0eXBlcyQxLmJhY2tRdW90ZTpcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlVGVtcGxhdGUoKVxuXG4gICAgY2FzZSB0eXBlcyQxLl9pbXBvcnQ6XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXhwckltcG9ydChmb3JOZXcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy51bmV4cGVjdGVkKClcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUV4cHJBdG9tRGVmYXVsdCgpXG4gICAgfVxuICB9O1xuXG4gIHBwJDUucGFyc2VFeHByQXRvbURlZmF1bHQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgfTtcblxuICBwcCQ1LnBhcnNlRXhwckltcG9ydCA9IGZ1bmN0aW9uKGZvck5ldykge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcblxuICAgIC8vIENvbnN1bWUgYGltcG9ydGAgYXMgYW4gaWRlbnRpZmllciBmb3IgYGltcG9ydC5tZXRhYC5cbiAgICAvLyBCZWNhdXNlIGB0aGlzLnBhcnNlSWRlbnQodHJ1ZSlgIGRvZXNuJ3QgY2hlY2sgZXNjYXBlIHNlcXVlbmNlcywgaXQgbmVlZHMgdGhlIGNoZWNrIG9mIGB0aGlzLmNvbnRhaW5zRXNjYC5cbiAgICBpZiAodGhpcy5jb250YWluc0VzYykgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgXCJFc2NhcGUgc2VxdWVuY2UgaW4ga2V5d29yZCBpbXBvcnRcIik7IH1cbiAgICB2YXIgbWV0YSA9IHRoaXMucGFyc2VJZGVudCh0cnVlKTtcblxuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEucGFyZW5MICYmICFmb3JOZXcpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRHluYW1pY0ltcG9ydChub2RlKVxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLmRvdCkge1xuICAgICAgbm9kZS5tZXRhID0gbWV0YTtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlSW1wb3J0TWV0YShub2RlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgICB9XG4gIH07XG5cbiAgcHAkNS5wYXJzZUR5bmFtaWNJbXBvcnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdGhpcy5uZXh0KCk7IC8vIHNraXAgYChgXG5cbiAgICAvLyBQYXJzZSBub2RlLnNvdXJjZS5cbiAgICBub2RlLnNvdXJjZSA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpO1xuXG4gICAgLy8gVmVyaWZ5IGVuZGluZy5cbiAgICBpZiAoIXRoaXMuZWF0KHR5cGVzJDEucGFyZW5SKSkge1xuICAgICAgdmFyIGVycm9yUG9zID0gdGhpcy5zdGFydDtcbiAgICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLmNvbW1hKSAmJiB0aGlzLmVhdCh0eXBlcyQxLnBhcmVuUikpIHtcbiAgICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGVycm9yUG9zLCBcIlRyYWlsaW5nIGNvbW1hIGlzIG5vdCBhbGxvd2VkIGluIGltcG9ydCgpXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51bmV4cGVjdGVkKGVycm9yUG9zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSW1wb3J0RXhwcmVzc2lvblwiKVxuICB9O1xuXG4gIHBwJDUucGFyc2VJbXBvcnRNZXRhID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHRoaXMubmV4dCgpOyAvLyBza2lwIGAuYFxuXG4gICAgdmFyIGNvbnRhaW5zRXNjID0gdGhpcy5jb250YWluc0VzYztcbiAgICBub2RlLnByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50KHRydWUpO1xuXG4gICAgaWYgKG5vZGUucHJvcGVydHkubmFtZSAhPT0gXCJtZXRhXCIpXG4gICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnByb3BlcnR5LnN0YXJ0LCBcIlRoZSBvbmx5IHZhbGlkIG1ldGEgcHJvcGVydHkgZm9yIGltcG9ydCBpcyAnaW1wb3J0Lm1ldGEnXCIpOyB9XG4gICAgaWYgKGNvbnRhaW5zRXNjKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCInaW1wb3J0Lm1ldGEnIG11c3Qgbm90IGNvbnRhaW4gZXNjYXBlZCBjaGFyYWN0ZXJzXCIpOyB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VUeXBlICE9PSBcIm1vZHVsZVwiICYmICF0aGlzLm9wdGlvbnMuYWxsb3dJbXBvcnRFeHBvcnRFdmVyeXdoZXJlKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCJDYW5ub3QgdXNlICdpbXBvcnQubWV0YScgb3V0c2lkZSBhIG1vZHVsZVwiKTsgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIk1ldGFQcm9wZXJ0eVwiKVxuICB9O1xuXG4gIHBwJDUucGFyc2VMaXRlcmFsID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgbm9kZS52YWx1ZSA9IHZhbHVlO1xuICAgIG5vZGUucmF3ID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XG4gICAgaWYgKG5vZGUucmF3LmNoYXJDb2RlQXQobm9kZS5yYXcubGVuZ3RoIC0gMSkgPT09IDExMCkgeyBub2RlLmJpZ2ludCA9IG5vZGUucmF3LnNsaWNlKDAsIC0xKS5yZXBsYWNlKC9fL2csIFwiXCIpOyB9XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkxpdGVyYWxcIilcbiAgfTtcblxuICBwcCQ1LnBhcnNlUGFyZW5FeHByZXNzaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5leHBlY3QodHlwZXMkMS5wYXJlbkwpO1xuICAgIHZhciB2YWwgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEucGFyZW5SKTtcbiAgICByZXR1cm4gdmFsXG4gIH07XG5cbiAgcHAkNS5zaG91bGRQYXJzZUFycm93ID0gZnVuY3Rpb24oZXhwckxpc3QpIHtcbiAgICByZXR1cm4gIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKClcbiAgfTtcblxuICBwcCQ1LnBhcnNlUGFyZW5BbmREaXN0aW5ndWlzaEV4cHJlc3Npb24gPSBmdW5jdGlvbihjYW5CZUFycm93LCBmb3JJbml0KSB7XG4gICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jLCB2YWwsIGFsbG93VHJhaWxpbmdDb21tYSA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4O1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgICAgdGhpcy5uZXh0KCk7XG5cbiAgICAgIHZhciBpbm5lclN0YXJ0UG9zID0gdGhpcy5zdGFydCwgaW5uZXJTdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgICB2YXIgZXhwckxpc3QgPSBbXSwgZmlyc3QgPSB0cnVlLCBsYXN0SXNDb21tYSA9IGZhbHNlO1xuICAgICAgdmFyIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgPSBuZXcgRGVzdHJ1Y3R1cmluZ0Vycm9ycywgb2xkWWllbGRQb3MgPSB0aGlzLnlpZWxkUG9zLCBvbGRBd2FpdFBvcyA9IHRoaXMuYXdhaXRQb3MsIHNwcmVhZFN0YXJ0O1xuICAgICAgdGhpcy55aWVsZFBvcyA9IDA7XG4gICAgICB0aGlzLmF3YWl0UG9zID0gMDtcbiAgICAgIC8vIERvIG5vdCBzYXZlIGF3YWl0SWRlbnRQb3MgdG8gYWxsb3cgY2hlY2tpbmcgYXdhaXRzIG5lc3RlZCBpbiBwYXJhbWV0ZXJzXG4gICAgICB3aGlsZSAodGhpcy50eXBlICE9PSB0eXBlcyQxLnBhcmVuUikge1xuICAgICAgICBmaXJzdCA/IGZpcnN0ID0gZmFsc2UgOiB0aGlzLmV4cGVjdCh0eXBlcyQxLmNvbW1hKTtcbiAgICAgICAgaWYgKGFsbG93VHJhaWxpbmdDb21tYSAmJiB0aGlzLmFmdGVyVHJhaWxpbmdDb21tYSh0eXBlcyQxLnBhcmVuUiwgdHJ1ZSkpIHtcbiAgICAgICAgICBsYXN0SXNDb21tYSA9IHRydWU7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuZWxsaXBzaXMpIHtcbiAgICAgICAgICBzcHJlYWRTdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgICAgICAgZXhwckxpc3QucHVzaCh0aGlzLnBhcnNlUGFyZW5JdGVtKHRoaXMucGFyc2VSZXN0QmluZGluZygpKSk7XG4gICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5jb21tYSkge1xuICAgICAgICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKFxuICAgICAgICAgICAgICB0aGlzLnN0YXJ0LFxuICAgICAgICAgICAgICBcIkNvbW1hIGlzIG5vdCBwZXJtaXR0ZWQgYWZ0ZXIgdGhlIHJlc3QgZWxlbWVudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cHJMaXN0LnB1c2godGhpcy5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0aGlzLnBhcnNlUGFyZW5JdGVtKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBpbm5lckVuZFBvcyA9IHRoaXMubGFzdFRva0VuZCwgaW5uZXJFbmRMb2MgPSB0aGlzLmxhc3RUb2tFbmRMb2M7XG4gICAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLnBhcmVuUik7XG5cbiAgICAgIGlmIChjYW5CZUFycm93ICYmIHRoaXMuc2hvdWxkUGFyc2VBcnJvdyhleHByTGlzdCkgJiYgdGhpcy5lYXQodHlwZXMkMS5hcnJvdykpIHtcbiAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgZmFsc2UpO1xuICAgICAgICB0aGlzLmNoZWNrWWllbGRBd2FpdEluRGVmYXVsdFBhcmFtcygpO1xuICAgICAgICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3M7XG4gICAgICAgIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvcztcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VQYXJlbkFycm93TGlzdChzdGFydFBvcywgc3RhcnRMb2MsIGV4cHJMaXN0LCBmb3JJbml0KVxuICAgICAgfVxuXG4gICAgICBpZiAoIWV4cHJMaXN0Lmxlbmd0aCB8fCBsYXN0SXNDb21tYSkgeyB0aGlzLnVuZXhwZWN0ZWQodGhpcy5sYXN0VG9rU3RhcnQpOyB9XG4gICAgICBpZiAoc3ByZWFkU3RhcnQpIHsgdGhpcy51bmV4cGVjdGVkKHNwcmVhZFN0YXJ0KTsgfVxuICAgICAgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7XG4gICAgICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3MgfHwgdGhpcy55aWVsZFBvcztcbiAgICAgIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvcyB8fCB0aGlzLmF3YWl0UG9zO1xuXG4gICAgICBpZiAoZXhwckxpc3QubGVuZ3RoID4gMSkge1xuICAgICAgICB2YWwgPSB0aGlzLnN0YXJ0Tm9kZUF0KGlubmVyU3RhcnRQb3MsIGlubmVyU3RhcnRMb2MpO1xuICAgICAgICB2YWwuZXhwcmVzc2lvbnMgPSBleHByTGlzdDtcbiAgICAgICAgdGhpcy5maW5pc2hOb2RlQXQodmFsLCBcIlNlcXVlbmNlRXhwcmVzc2lvblwiLCBpbm5lckVuZFBvcywgaW5uZXJFbmRMb2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gZXhwckxpc3RbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnByZXNlcnZlUGFyZW5zKSB7XG4gICAgICB2YXIgcGFyID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgcGFyLmV4cHJlc3Npb24gPSB2YWw7XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKHBhciwgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsXG4gICAgfVxuICB9O1xuXG4gIHBwJDUucGFyc2VQYXJlbkl0ZW0gPSBmdW5jdGlvbihpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW1cbiAgfTtcblxuICBwcCQ1LnBhcnNlUGFyZW5BcnJvd0xpc3QgPSBmdW5jdGlvbihzdGFydFBvcywgc3RhcnRMb2MsIGV4cHJMaXN0LCBmb3JJbml0KSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBleHByTGlzdCwgZmFsc2UsIGZvckluaXQpXG4gIH07XG5cbiAgLy8gTmV3J3MgcHJlY2VkZW5jZSBpcyBzbGlnaHRseSB0cmlja3kuIEl0IG11c3QgYWxsb3cgaXRzIGFyZ3VtZW50IHRvXG4gIC8vIGJlIGEgYFtdYCBvciBkb3Qgc3Vic2NyaXB0IGV4cHJlc3Npb24sIGJ1dCBub3QgYSBjYWxsIOKAlCBhdCBsZWFzdCxcbiAgLy8gbm90IHdpdGhvdXQgd3JhcHBpbmcgaXQgaW4gcGFyZW50aGVzZXMuIFRodXMsIGl0IHVzZXMgdGhlIG5vQ2FsbHNcbiAgLy8gYXJndW1lbnQgdG8gcGFyc2VTdWJzY3JpcHRzIHRvIHByZXZlbnQgaXQgZnJvbSBjb25zdW1pbmcgdGhlXG4gIC8vIGFyZ3VtZW50IGxpc3QuXG5cbiAgdmFyIGVtcHR5ID0gW107XG5cbiAgcHAkNS5wYXJzZU5ldyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNvbnRhaW5zRXNjKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIkVzY2FwZSBzZXF1ZW5jZSBpbiBrZXl3b3JkIG5ld1wiKTsgfVxuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICB2YXIgbWV0YSA9IHRoaXMucGFyc2VJZGVudCh0cnVlKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgdGhpcy5lYXQodHlwZXMkMS5kb3QpKSB7XG4gICAgICBub2RlLm1ldGEgPSBtZXRhO1xuICAgICAgdmFyIGNvbnRhaW5zRXNjID0gdGhpcy5jb250YWluc0VzYztcbiAgICAgIG5vZGUucHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnQodHJ1ZSk7XG4gICAgICBpZiAobm9kZS5wcm9wZXJ0eS5uYW1lICE9PSBcInRhcmdldFwiKVxuICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnByb3BlcnR5LnN0YXJ0LCBcIlRoZSBvbmx5IHZhbGlkIG1ldGEgcHJvcGVydHkgZm9yIG5ldyBpcyAnbmV3LnRhcmdldCdcIik7IH1cbiAgICAgIGlmIChjb250YWluc0VzYylcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCInbmV3LnRhcmdldCcgbXVzdCBub3QgY29udGFpbiBlc2NhcGVkIGNoYXJhY3RlcnNcIik7IH1cbiAgICAgIGlmICghdGhpcy5hbGxvd05ld0RvdFRhcmdldClcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCInbmV3LnRhcmdldCcgY2FuIG9ubHkgYmUgdXNlZCBpbiBmdW5jdGlvbnMgYW5kIGNsYXNzIHN0YXRpYyBibG9ja1wiKTsgfVxuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIk1ldGFQcm9wZXJ0eVwiKVxuICAgIH1cbiAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgbm9kZS5jYWxsZWUgPSB0aGlzLnBhcnNlU3Vic2NyaXB0cyh0aGlzLnBhcnNlRXhwckF0b20obnVsbCwgZmFsc2UsIHRydWUpLCBzdGFydFBvcywgc3RhcnRMb2MsIHRydWUsIGZhbHNlKTtcbiAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5wYXJlbkwpKSB7IG5vZGUuYXJndW1lbnRzID0gdGhpcy5wYXJzZUV4cHJMaXN0KHR5cGVzJDEucGFyZW5SLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCwgZmFsc2UpOyB9XG4gICAgZWxzZSB7IG5vZGUuYXJndW1lbnRzID0gZW1wdHk7IH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTmV3RXhwcmVzc2lvblwiKVxuICB9O1xuXG4gIC8vIFBhcnNlIHRlbXBsYXRlIGV4cHJlc3Npb24uXG5cbiAgcHAkNS5wYXJzZVRlbXBsYXRlRWxlbWVudCA9IGZ1bmN0aW9uKHJlZikge1xuICAgIHZhciBpc1RhZ2dlZCA9IHJlZi5pc1RhZ2dlZDtcblxuICAgIHZhciBlbGVtID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLmludmFsaWRUZW1wbGF0ZSkge1xuICAgICAgaWYgKCFpc1RhZ2dlZCkge1xuICAgICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgXCJCYWQgZXNjYXBlIHNlcXVlbmNlIGluIHVudGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWxcIik7XG4gICAgICB9XG4gICAgICBlbGVtLnZhbHVlID0ge1xuICAgICAgICByYXc6IHRoaXMudmFsdWUsXG4gICAgICAgIGNvb2tlZDogbnVsbFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbS52YWx1ZSA9IHtcbiAgICAgICAgcmF3OiB0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMuZW5kKS5yZXBsYWNlKC9cXHJcXG4/L2csIFwiXFxuXCIpLFxuICAgICAgICBjb29rZWQ6IHRoaXMudmFsdWVcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMubmV4dCgpO1xuICAgIGVsZW0udGFpbCA9IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5iYWNrUXVvdGU7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShlbGVtLCBcIlRlbXBsYXRlRWxlbWVudFwiKVxuICB9O1xuXG4gIHBwJDUucGFyc2VUZW1wbGF0ZSA9IGZ1bmN0aW9uKHJlZikge1xuICAgIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgICB2YXIgaXNUYWdnZWQgPSByZWYuaXNUYWdnZWQ7IGlmICggaXNUYWdnZWQgPT09IHZvaWQgMCApIGlzVGFnZ2VkID0gZmFsc2U7XG5cbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5leHByZXNzaW9ucyA9IFtdO1xuICAgIHZhciBjdXJFbHQgPSB0aGlzLnBhcnNlVGVtcGxhdGVFbGVtZW50KHtpc1RhZ2dlZDogaXNUYWdnZWR9KTtcbiAgICBub2RlLnF1YXNpcyA9IFtjdXJFbHRdO1xuICAgIHdoaWxlICghY3VyRWx0LnRhaWwpIHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuZW9mKSB7IHRoaXMucmFpc2UodGhpcy5wb3MsIFwiVW50ZXJtaW5hdGVkIHRlbXBsYXRlIGxpdGVyYWxcIik7IH1cbiAgICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuZG9sbGFyQnJhY2VMKTtcbiAgICAgIG5vZGUuZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuYnJhY2VSKTtcbiAgICAgIG5vZGUucXVhc2lzLnB1c2goY3VyRWx0ID0gdGhpcy5wYXJzZVRlbXBsYXRlRWxlbWVudCh7aXNUYWdnZWQ6IGlzVGFnZ2VkfSkpO1xuICAgIH1cbiAgICB0aGlzLm5leHQoKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiVGVtcGxhdGVMaXRlcmFsXCIpXG4gIH07XG5cbiAgcHAkNS5pc0FzeW5jUHJvcCA9IGZ1bmN0aW9uKHByb3ApIHtcbiAgICByZXR1cm4gIXByb3AuY29tcHV0ZWQgJiYgcHJvcC5rZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYgcHJvcC5rZXkubmFtZSA9PT0gXCJhc3luY1wiICYmXG4gICAgICAodGhpcy50eXBlID09PSB0eXBlcyQxLm5hbWUgfHwgdGhpcy50eXBlID09PSB0eXBlcyQxLm51bSB8fCB0aGlzLnR5cGUgPT09IHR5cGVzJDEuc3RyaW5nIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5icmFja2V0TCB8fCB0aGlzLnR5cGUua2V5d29yZCB8fCAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiYgdGhpcy50eXBlID09PSB0eXBlcyQxLnN0YXIpKSAmJlxuICAgICAgIWxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rRW5kLCB0aGlzLnN0YXJ0KSlcbiAgfTtcblxuICAvLyBQYXJzZSBhbiBvYmplY3QgbGl0ZXJhbCBvciBiaW5kaW5nIHBhdHRlcm4uXG5cbiAgcHAkNS5wYXJzZU9iaiA9IGZ1bmN0aW9uKGlzUGF0dGVybiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKSwgZmlyc3QgPSB0cnVlLCBwcm9wSGFzaCA9IHt9O1xuICAgIG5vZGUucHJvcGVydGllcyA9IFtdO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHdoaWxlICghdGhpcy5lYXQodHlwZXMkMS5icmFjZVIpKSB7XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEuY29tbWEpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDUgJiYgdGhpcy5hZnRlclRyYWlsaW5nQ29tbWEodHlwZXMkMS5icmFjZVIpKSB7IGJyZWFrIH1cbiAgICAgIH0gZWxzZSB7IGZpcnN0ID0gZmFsc2U7IH1cblxuICAgICAgdmFyIHByb3AgPSB0aGlzLnBhcnNlUHJvcGVydHkoaXNQYXR0ZXJuLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICAgIGlmICghaXNQYXR0ZXJuKSB7IHRoaXMuY2hlY2tQcm9wQ2xhc2gocHJvcCwgcHJvcEhhc2gsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpOyB9XG4gICAgICBub2RlLnByb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBpc1BhdHRlcm4gPyBcIk9iamVjdFBhdHRlcm5cIiA6IFwiT2JqZWN0RXhwcmVzc2lvblwiKVxuICB9O1xuXG4gIHBwJDUucGFyc2VQcm9wZXJ0eSA9IGZ1bmN0aW9uKGlzUGF0dGVybiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgIHZhciBwcm9wID0gdGhpcy5zdGFydE5vZGUoKSwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIHN0YXJ0UG9zLCBzdGFydExvYztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiYgdGhpcy5lYXQodHlwZXMkMS5lbGxpcHNpcykpIHtcbiAgICAgIGlmIChpc1BhdHRlcm4pIHtcbiAgICAgICAgcHJvcC5hcmd1bWVudCA9IHRoaXMucGFyc2VJZGVudChmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuY29tbWEpIHtcbiAgICAgICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgXCJDb21tYSBpcyBub3QgcGVybWl0dGVkIGFmdGVyIHRoZSByZXN0IGVsZW1lbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShwcm9wLCBcIlJlc3RFbGVtZW50XCIpXG4gICAgICB9XG4gICAgICAvLyBQYXJzZSBhcmd1bWVudC5cbiAgICAgIHByb3AuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgICAgLy8gVG8gZGlzYWxsb3cgdHJhaWxpbmcgY29tbWEgdmlhIGB0aGlzLnRvQXNzaWduYWJsZSgpYC5cbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuY29tbWEgJiYgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyAmJiByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPCAwKSB7XG4gICAgICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA9IHRoaXMuc3RhcnQ7XG4gICAgICB9XG4gICAgICAvLyBGaW5pc2hcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUocHJvcCwgXCJTcHJlYWRFbGVtZW50XCIpXG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgICAgcHJvcC5tZXRob2QgPSBmYWxzZTtcbiAgICAgIHByb3Auc2hvcnRoYW5kID0gZmFsc2U7XG4gICAgICBpZiAoaXNQYXR0ZXJuIHx8IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgICAgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0O1xuICAgICAgICBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgICB9XG4gICAgICBpZiAoIWlzUGF0dGVybilcbiAgICAgICAgeyBpc0dlbmVyYXRvciA9IHRoaXMuZWF0KHR5cGVzJDEuc3Rhcik7IH1cbiAgICB9XG4gICAgdmFyIGNvbnRhaW5zRXNjID0gdGhpcy5jb250YWluc0VzYztcbiAgICB0aGlzLnBhcnNlUHJvcGVydHlOYW1lKHByb3ApO1xuICAgIGlmICghaXNQYXR0ZXJuICYmICFjb250YWluc0VzYyAmJiB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCAmJiAhaXNHZW5lcmF0b3IgJiYgdGhpcy5pc0FzeW5jUHJvcChwcm9wKSkge1xuICAgICAgaXNBc3luYyA9IHRydWU7XG4gICAgICBpc0dlbmVyYXRvciA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmIHRoaXMuZWF0KHR5cGVzJDEuc3Rhcik7XG4gICAgICB0aGlzLnBhcnNlUHJvcGVydHlOYW1lKHByb3ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0FzeW5jID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucGFyc2VQcm9wZXJ0eVZhbHVlKHByb3AsIGlzUGF0dGVybiwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIHN0YXJ0UG9zLCBzdGFydExvYywgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgY29udGFpbnNFc2MpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUocHJvcCwgXCJQcm9wZXJ0eVwiKVxuICB9O1xuXG4gIHBwJDUucGFyc2VHZXR0ZXJTZXR0ZXIgPSBmdW5jdGlvbihwcm9wKSB7XG4gICAgcHJvcC5raW5kID0gcHJvcC5rZXkubmFtZTtcbiAgICB0aGlzLnBhcnNlUHJvcGVydHlOYW1lKHByb3ApO1xuICAgIHByb3AudmFsdWUgPSB0aGlzLnBhcnNlTWV0aG9kKGZhbHNlKTtcbiAgICB2YXIgcGFyYW1Db3VudCA9IHByb3Aua2luZCA9PT0gXCJnZXRcIiA/IDAgOiAxO1xuICAgIGlmIChwcm9wLnZhbHVlLnBhcmFtcy5sZW5ndGggIT09IHBhcmFtQ291bnQpIHtcbiAgICAgIHZhciBzdGFydCA9IHByb3AudmFsdWUuc3RhcnQ7XG4gICAgICBpZiAocHJvcC5raW5kID09PSBcImdldFwiKVxuICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgXCJnZXR0ZXIgc2hvdWxkIGhhdmUgbm8gcGFyYW1zXCIpOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcInNldHRlciBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbVwiKTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcC5raW5kID09PSBcInNldFwiICYmIHByb3AudmFsdWUucGFyYW1zWzBdLnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIilcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUocHJvcC52YWx1ZS5wYXJhbXNbMF0uc3RhcnQsIFwiU2V0dGVyIGNhbm5vdCB1c2UgcmVzdCBwYXJhbXNcIik7IH1cbiAgICB9XG4gIH07XG5cbiAgcHAkNS5wYXJzZVByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihwcm9wLCBpc1BhdHRlcm4sIGlzR2VuZXJhdG9yLCBpc0FzeW5jLCBzdGFydFBvcywgc3RhcnRMb2MsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGNvbnRhaW5zRXNjKSB7XG4gICAgaWYgKChpc0dlbmVyYXRvciB8fCBpc0FzeW5jKSAmJiB0aGlzLnR5cGUgPT09IHR5cGVzJDEuY29sb24pXG4gICAgICB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG5cbiAgICBpZiAodGhpcy5lYXQodHlwZXMkMS5jb2xvbikpIHtcbiAgICAgIHByb3AudmFsdWUgPSBpc1BhdHRlcm4gPyB0aGlzLnBhcnNlTWF5YmVEZWZhdWx0KHRoaXMuc3RhcnQsIHRoaXMuc3RhcnRMb2MpIDogdGhpcy5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICAgIHByb3Aua2luZCA9IFwiaW5pdFwiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgdGhpcy50eXBlID09PSB0eXBlcyQxLnBhcmVuTCkge1xuICAgICAgaWYgKGlzUGF0dGVybikgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgcHJvcC5raW5kID0gXCJpbml0XCI7XG4gICAgICBwcm9wLm1ldGhvZCA9IHRydWU7XG4gICAgICBwcm9wLnZhbHVlID0gdGhpcy5wYXJzZU1ldGhvZChpc0dlbmVyYXRvciwgaXNBc3luYyk7XG4gICAgfSBlbHNlIGlmICghaXNQYXR0ZXJuICYmICFjb250YWluc0VzYyAmJlxuICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDUgJiYgIXByb3AuY29tcHV0ZWQgJiYgcHJvcC5rZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgICAgICAgICAgIChwcm9wLmtleS5uYW1lID09PSBcImdldFwiIHx8IHByb3Aua2V5Lm5hbWUgPT09IFwic2V0XCIpICYmXG4gICAgICAgICAgICAgICAodGhpcy50eXBlICE9PSB0eXBlcyQxLmNvbW1hICYmIHRoaXMudHlwZSAhPT0gdHlwZXMkMS5icmFjZVIgJiYgdGhpcy50eXBlICE9PSB0eXBlcyQxLmVxKSkge1xuICAgICAgaWYgKGlzR2VuZXJhdG9yIHx8IGlzQXN5bmMpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgIHRoaXMucGFyc2VHZXR0ZXJTZXR0ZXIocHJvcCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiAhcHJvcC5jb21wdXRlZCAmJiBwcm9wLmtleS50eXBlID09PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgaWYgKGlzR2VuZXJhdG9yIHx8IGlzQXN5bmMpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgIHRoaXMuY2hlY2tVbnJlc2VydmVkKHByb3Aua2V5KTtcbiAgICAgIGlmIChwcm9wLmtleS5uYW1lID09PSBcImF3YWl0XCIgJiYgIXRoaXMuYXdhaXRJZGVudFBvcylcbiAgICAgICAgeyB0aGlzLmF3YWl0SWRlbnRQb3MgPSBzdGFydFBvczsgfVxuICAgICAgcHJvcC5raW5kID0gXCJpbml0XCI7XG4gICAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICAgIHByb3AudmFsdWUgPSB0aGlzLnBhcnNlTWF5YmVEZWZhdWx0KHN0YXJ0UG9zLCBzdGFydExvYywgdGhpcy5jb3B5Tm9kZShwcm9wLmtleSkpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuZXEgJiYgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5zaG9ydGhhbmRBc3NpZ24gPCAwKVxuICAgICAgICAgIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5zaG9ydGhhbmRBc3NpZ24gPSB0aGlzLnN0YXJ0OyB9XG4gICAgICAgIHByb3AudmFsdWUgPSB0aGlzLnBhcnNlTWF5YmVEZWZhdWx0KHN0YXJ0UG9zLCBzdGFydExvYywgdGhpcy5jb3B5Tm9kZShwcm9wLmtleSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcC52YWx1ZSA9IHRoaXMuY29weU5vZGUocHJvcC5rZXkpO1xuICAgICAgfVxuICAgICAgcHJvcC5zaG9ydGhhbmQgPSB0cnVlO1xuICAgIH0gZWxzZSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gIH07XG5cbiAgcHAkNS5wYXJzZVByb3BlcnR5TmFtZSA9IGZ1bmN0aW9uKHByb3ApIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHtcbiAgICAgIGlmICh0aGlzLmVhdCh0eXBlcyQxLmJyYWNrZXRMKSkge1xuICAgICAgICBwcm9wLmNvbXB1dGVkID0gdHJ1ZTtcbiAgICAgICAgcHJvcC5rZXkgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICAgICAgdGhpcy5leHBlY3QodHlwZXMkMS5icmFja2V0Uik7XG4gICAgICAgIHJldHVybiBwcm9wLmtleVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcC5jb21wdXRlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcC5rZXkgPSB0aGlzLnR5cGUgPT09IHR5cGVzJDEubnVtIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5zdHJpbmcgPyB0aGlzLnBhcnNlRXhwckF0b20oKSA6IHRoaXMucGFyc2VJZGVudCh0aGlzLm9wdGlvbnMuYWxsb3dSZXNlcnZlZCAhPT0gXCJuZXZlclwiKVxuICB9O1xuXG4gIC8vIEluaXRpYWxpemUgZW1wdHkgZnVuY3Rpb24gbm9kZS5cblxuICBwcCQ1LmluaXRGdW5jdGlvbiA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBub2RlLmlkID0gbnVsbDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHsgbm9kZS5nZW5lcmF0b3IgPSBub2RlLmV4cHJlc3Npb24gPSBmYWxzZTsgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCkgeyBub2RlLmFzeW5jID0gZmFsc2U7IH1cbiAgfTtcblxuICAvLyBQYXJzZSBvYmplY3Qgb3IgY2xhc3MgbWV0aG9kLlxuXG4gIHBwJDUucGFyc2VNZXRob2QgPSBmdW5jdGlvbihpc0dlbmVyYXRvciwgaXNBc3luYywgYWxsb3dEaXJlY3RTdXBlcikge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKSwgb2xkWWllbGRQb3MgPSB0aGlzLnlpZWxkUG9zLCBvbGRBd2FpdFBvcyA9IHRoaXMuYXdhaXRQb3MsIG9sZEF3YWl0SWRlbnRQb3MgPSB0aGlzLmF3YWl0SWRlbnRQb3M7XG5cbiAgICB0aGlzLmluaXRGdW5jdGlvbihub2RlKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpXG4gICAgICB7IG5vZGUuZ2VuZXJhdG9yID0gaXNHZW5lcmF0b3I7IH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpXG4gICAgICB7IG5vZGUuYXN5bmMgPSAhIWlzQXN5bmM7IH1cblxuICAgIHRoaXMueWllbGRQb3MgPSAwO1xuICAgIHRoaXMuYXdhaXRQb3MgPSAwO1xuICAgIHRoaXMuYXdhaXRJZGVudFBvcyA9IDA7XG4gICAgdGhpcy5lbnRlclNjb3BlKGZ1bmN0aW9uRmxhZ3MoaXNBc3luYywgbm9kZS5nZW5lcmF0b3IpIHwgU0NPUEVfU1VQRVIgfCAoYWxsb3dEaXJlY3RTdXBlciA/IFNDT1BFX0RJUkVDVF9TVVBFUiA6IDApKTtcblxuICAgIHRoaXMuZXhwZWN0KHR5cGVzJDEucGFyZW5MKTtcbiAgICBub2RlLnBhcmFtcyA9IHRoaXMucGFyc2VCaW5kaW5nTGlzdCh0eXBlcyQxLnBhcmVuUiwgZmFsc2UsIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KTtcbiAgICB0aGlzLmNoZWNrWWllbGRBd2FpdEluRGVmYXVsdFBhcmFtcygpO1xuICAgIHRoaXMucGFyc2VGdW5jdGlvbkJvZHkobm9kZSwgZmFsc2UsIHRydWUsIGZhbHNlKTtcblxuICAgIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvcztcbiAgICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3M7XG4gICAgdGhpcy5hd2FpdElkZW50UG9zID0gb2xkQXdhaXRJZGVudFBvcztcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRnVuY3Rpb25FeHByZXNzaW9uXCIpXG4gIH07XG5cbiAgLy8gUGFyc2UgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuXG5cbiAgcHAkNS5wYXJzZUFycm93RXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG5vZGUsIHBhcmFtcywgaXNBc3luYywgZm9ySW5pdCkge1xuICAgIHZhciBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgb2xkQXdhaXRJZGVudFBvcyA9IHRoaXMuYXdhaXRJZGVudFBvcztcblxuICAgIHRoaXMuZW50ZXJTY29wZShmdW5jdGlvbkZsYWdzKGlzQXN5bmMsIGZhbHNlKSB8IFNDT1BFX0FSUk9XKTtcbiAgICB0aGlzLmluaXRGdW5jdGlvbihub2RlKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpIHsgbm9kZS5hc3luYyA9ICEhaXNBc3luYzsgfVxuXG4gICAgdGhpcy55aWVsZFBvcyA9IDA7XG4gICAgdGhpcy5hd2FpdFBvcyA9IDA7XG4gICAgdGhpcy5hd2FpdElkZW50UG9zID0gMDtcblxuICAgIG5vZGUucGFyYW1zID0gdGhpcy50b0Fzc2lnbmFibGVMaXN0KHBhcmFtcywgdHJ1ZSk7XG4gICAgdGhpcy5wYXJzZUZ1bmN0aW9uQm9keShub2RlLCB0cnVlLCBmYWxzZSwgZm9ySW5pdCk7XG5cbiAgICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3M7XG4gICAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zO1xuICAgIHRoaXMuYXdhaXRJZGVudFBvcyA9IG9sZEF3YWl0SWRlbnRQb3M7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIpXG4gIH07XG5cbiAgLy8gUGFyc2UgZnVuY3Rpb24gYm9keSBhbmQgY2hlY2sgcGFyYW1ldGVycy5cblxuICBwcCQ1LnBhcnNlRnVuY3Rpb25Cb2R5ID0gZnVuY3Rpb24obm9kZSwgaXNBcnJvd0Z1bmN0aW9uLCBpc01ldGhvZCwgZm9ySW5pdCkge1xuICAgIHZhciBpc0V4cHJlc3Npb24gPSBpc0Fycm93RnVuY3Rpb24gJiYgdGhpcy50eXBlICE9PSB0eXBlcyQxLmJyYWNlTDtcbiAgICB2YXIgb2xkU3RyaWN0ID0gdGhpcy5zdHJpY3QsIHVzZVN0cmljdCA9IGZhbHNlO1xuXG4gICAgaWYgKGlzRXhwcmVzc2lvbikge1xuICAgICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGZvckluaXQpO1xuICAgICAgbm9kZS5leHByZXNzaW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hlY2tQYXJhbXMobm9kZSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm9uU2ltcGxlID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDcgJiYgIXRoaXMuaXNTaW1wbGVQYXJhbUxpc3Qobm9kZS5wYXJhbXMpO1xuICAgICAgaWYgKCFvbGRTdHJpY3QgfHwgbm9uU2ltcGxlKSB7XG4gICAgICAgIHVzZVN0cmljdCA9IHRoaXMuc3RyaWN0RGlyZWN0aXZlKHRoaXMuZW5kKTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uLCB2ZXJpZnkgdGhhdCBhcmd1bWVudCBuYW1lc1xuICAgICAgICAvLyBhcmUgbm90IHJlcGVhdGVkLCBhbmQgaXQgZG9lcyBub3QgdHJ5IHRvIGJpbmQgdGhlIHdvcmRzIGBldmFsYFxuICAgICAgICAvLyBvciBgYXJndW1lbnRzYC5cbiAgICAgICAgaWYgKHVzZVN0cmljdCAmJiBub25TaW1wbGUpXG4gICAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCJJbGxlZ2FsICd1c2Ugc3RyaWN0JyBkaXJlY3RpdmUgaW4gZnVuY3Rpb24gd2l0aCBub24tc2ltcGxlIHBhcmFtZXRlciBsaXN0XCIpOyB9XG4gICAgICB9XG4gICAgICAvLyBTdGFydCBhIG5ldyBzY29wZSB3aXRoIHJlZ2FyZCB0byBsYWJlbHMgYW5kIHRoZSBgaW5GdW5jdGlvbmBcbiAgICAgIC8vIGZsYWcgKHJlc3RvcmUgdGhlbSB0byB0aGVpciBvbGQgdmFsdWUgYWZ0ZXJ3YXJkcykuXG4gICAgICB2YXIgb2xkTGFiZWxzID0gdGhpcy5sYWJlbHM7XG4gICAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgICAgaWYgKHVzZVN0cmljdCkgeyB0aGlzLnN0cmljdCA9IHRydWU7IH1cblxuICAgICAgLy8gQWRkIHRoZSBwYXJhbXMgdG8gdmFyRGVjbGFyZWROYW1lcyB0byBlbnN1cmUgdGhhdCBhbiBlcnJvciBpcyB0aHJvd25cbiAgICAgIC8vIGlmIGEgbGV0L2NvbnN0IGRlY2xhcmF0aW9uIGluIHRoZSBmdW5jdGlvbiBjbGFzaGVzIHdpdGggb25lIG9mIHRoZSBwYXJhbXMuXG4gICAgICB0aGlzLmNoZWNrUGFyYW1zKG5vZGUsICFvbGRTdHJpY3QgJiYgIXVzZVN0cmljdCAmJiAhaXNBcnJvd0Z1bmN0aW9uICYmICFpc01ldGhvZCAmJiB0aGlzLmlzU2ltcGxlUGFyYW1MaXN0KG5vZGUucGFyYW1zKSk7XG4gICAgICAvLyBFbnN1cmUgdGhlIGZ1bmN0aW9uIG5hbWUgaXNuJ3QgYSBmb3JiaWRkZW4gaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZSwgZS5nLiAnZXZhbCdcbiAgICAgIGlmICh0aGlzLnN0cmljdCAmJiBub2RlLmlkKSB7IHRoaXMuY2hlY2tMVmFsU2ltcGxlKG5vZGUuaWQsIEJJTkRfT1VUU0lERSk7IH1cbiAgICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VCbG9jayhmYWxzZSwgdW5kZWZpbmVkLCB1c2VTdHJpY3QgJiYgIW9sZFN0cmljdCk7XG4gICAgICBub2RlLmV4cHJlc3Npb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuYWRhcHREaXJlY3RpdmVQcm9sb2d1ZShub2RlLmJvZHkuYm9keSk7XG4gICAgICB0aGlzLmxhYmVscyA9IG9sZExhYmVscztcbiAgICB9XG4gICAgdGhpcy5leGl0U2NvcGUoKTtcbiAgfTtcblxuICBwcCQ1LmlzU2ltcGxlUGFyYW1MaXN0ID0gZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBwYXJhbXM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKVxuICAgICAge1xuICAgICAgdmFyIHBhcmFtID0gbGlzdFtpXTtcblxuICAgICAgaWYgKHBhcmFtLnR5cGUgIT09IFwiSWRlbnRpZmllclwiKSB7IHJldHVybiBmYWxzZVxuICAgIH0gfVxuICAgIHJldHVybiB0cnVlXG4gIH07XG5cbiAgLy8gQ2hlY2tzIGZ1bmN0aW9uIHBhcmFtcyBmb3IgdmFyaW91cyBkaXNhbGxvd2VkIHBhdHRlcm5zIHN1Y2ggYXMgdXNpbmcgXCJldmFsXCJcbiAgLy8gb3IgXCJhcmd1bWVudHNcIiBhbmQgZHVwbGljYXRlIHBhcmFtZXRlcnMuXG5cbiAgcHAkNS5jaGVja1BhcmFtcyA9IGZ1bmN0aW9uKG5vZGUsIGFsbG93RHVwbGljYXRlcykge1xuICAgIHZhciBuYW1lSGFzaCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLnBhcmFtczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAgICB7XG4gICAgICB2YXIgcGFyYW0gPSBsaXN0W2ldO1xuXG4gICAgICB0aGlzLmNoZWNrTFZhbElubmVyUGF0dGVybihwYXJhbSwgQklORF9WQVIsIGFsbG93RHVwbGljYXRlcyA/IG51bGwgOiBuYW1lSGFzaCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFBhcnNlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zLCBhbmQgcmV0dXJucyB0aGVtIGFzXG4gIC8vIGFuIGFycmF5LiBgY2xvc2VgIGlzIHRoZSB0b2tlbiB0eXBlIHRoYXQgZW5kcyB0aGUgbGlzdCwgYW5kXG4gIC8vIGBhbGxvd0VtcHR5YCBjYW4gYmUgdHVybmVkIG9uIHRvIGFsbG93IHN1YnNlcXVlbnQgY29tbWFzIHdpdGhcbiAgLy8gbm90aGluZyBpbiBiZXR3ZWVuIHRoZW0gdG8gYmUgcGFyc2VkIGFzIGBudWxsYCAod2hpY2ggaXMgbmVlZGVkXG4gIC8vIGZvciBhcnJheSBsaXRlcmFscykuXG5cbiAgcHAkNS5wYXJzZUV4cHJMaXN0ID0gZnVuY3Rpb24oY2xvc2UsIGFsbG93VHJhaWxpbmdDb21tYSwgYWxsb3dFbXB0eSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgIHZhciBlbHRzID0gW10sIGZpcnN0ID0gdHJ1ZTtcbiAgICB3aGlsZSAoIXRoaXMuZWF0KGNsb3NlKSkge1xuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLmV4cGVjdCh0eXBlcyQxLmNvbW1hKTtcbiAgICAgICAgaWYgKGFsbG93VHJhaWxpbmdDb21tYSAmJiB0aGlzLmFmdGVyVHJhaWxpbmdDb21tYShjbG9zZSkpIHsgYnJlYWsgfVxuICAgICAgfSBlbHNlIHsgZmlyc3QgPSBmYWxzZTsgfVxuXG4gICAgICB2YXIgZWx0ID0gKHZvaWQgMCk7XG4gICAgICBpZiAoYWxsb3dFbXB0eSAmJiB0aGlzLnR5cGUgPT09IHR5cGVzJDEuY29tbWEpXG4gICAgICAgIHsgZWx0ID0gbnVsbDsgfVxuICAgICAgZWxzZSBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLmVsbGlwc2lzKSB7XG4gICAgICAgIGVsdCA9IHRoaXMucGFyc2VTcHJlYWQocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzICYmIHRoaXMudHlwZSA9PT0gdHlwZXMkMS5jb21tYSAmJiByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPCAwKVxuICAgICAgICAgIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID0gdGhpcy5zdGFydDsgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWx0ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICAgIH1cbiAgICAgIGVsdHMucHVzaChlbHQpO1xuICAgIH1cbiAgICByZXR1cm4gZWx0c1xuICB9O1xuXG4gIHBwJDUuY2hlY2tVbnJlc2VydmVkID0gZnVuY3Rpb24ocmVmKSB7XG4gICAgdmFyIHN0YXJ0ID0gcmVmLnN0YXJ0O1xuICAgIHZhciBlbmQgPSByZWYuZW5kO1xuICAgIHZhciBuYW1lID0gcmVmLm5hbWU7XG5cbiAgICBpZiAodGhpcy5pbkdlbmVyYXRvciAmJiBuYW1lID09PSBcInlpZWxkXCIpXG4gICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgXCJDYW5ub3QgdXNlICd5aWVsZCcgYXMgaWRlbnRpZmllciBpbnNpZGUgYSBnZW5lcmF0b3JcIik7IH1cbiAgICBpZiAodGhpcy5pbkFzeW5jICYmIG5hbWUgPT09IFwiYXdhaXRcIilcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcIkNhbm5vdCB1c2UgJ2F3YWl0JyBhcyBpZGVudGlmaWVyIGluc2lkZSBhbiBhc3luYyBmdW5jdGlvblwiKTsgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRUaGlzU2NvcGUoKS5pbkNsYXNzRmllbGRJbml0ICYmIG5hbWUgPT09IFwiYXJndW1lbnRzXCIpXG4gICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgXCJDYW5ub3QgdXNlICdhcmd1bWVudHMnIGluIGNsYXNzIGZpZWxkIGluaXRpYWxpemVyXCIpOyB9XG4gICAgaWYgKHRoaXMuaW5DbGFzc1N0YXRpY0Jsb2NrICYmIChuYW1lID09PSBcImFyZ3VtZW50c1wiIHx8IG5hbWUgPT09IFwiYXdhaXRcIikpXG4gICAgICB7IHRoaXMucmFpc2Uoc3RhcnQsIChcIkNhbm5vdCB1c2UgXCIgKyBuYW1lICsgXCIgaW4gY2xhc3Mgc3RhdGljIGluaXRpYWxpemF0aW9uIGJsb2NrXCIpKTsgfVxuICAgIGlmICh0aGlzLmtleXdvcmRzLnRlc3QobmFtZSkpXG4gICAgICB7IHRoaXMucmFpc2Uoc3RhcnQsIChcIlVuZXhwZWN0ZWQga2V5d29yZCAnXCIgKyBuYW1lICsgXCInXCIpKTsgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA2ICYmXG4gICAgICB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0LCBlbmQpLmluZGV4T2YoXCJcXFxcXCIpICE9PSAtMSkgeyByZXR1cm4gfVxuICAgIHZhciByZSA9IHRoaXMuc3RyaWN0ID8gdGhpcy5yZXNlcnZlZFdvcmRzU3RyaWN0IDogdGhpcy5yZXNlcnZlZFdvcmRzO1xuICAgIGlmIChyZS50ZXN0KG5hbWUpKSB7XG4gICAgICBpZiAoIXRoaXMuaW5Bc3luYyAmJiBuYW1lID09PSBcImF3YWl0XCIpXG4gICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcIkNhbm5vdCB1c2Uga2V5d29yZCAnYXdhaXQnIG91dHNpZGUgYW4gYXN5bmMgZnVuY3Rpb25cIik7IH1cbiAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgKFwiVGhlIGtleXdvcmQgJ1wiICsgbmFtZSArIFwiJyBpcyByZXNlcnZlZFwiKSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFBhcnNlIHRoZSBuZXh0IHRva2VuIGFzIGFuIGlkZW50aWZpZXIuIElmIGBsaWJlcmFsYCBpcyB0cnVlICh1c2VkXG4gIC8vIHdoZW4gcGFyc2luZyBwcm9wZXJ0aWVzKSwgaXQgd2lsbCBhbHNvIGNvbnZlcnQga2V5d29yZHMgaW50b1xuICAvLyBpZGVudGlmaWVycy5cblxuICBwcCQ1LnBhcnNlSWRlbnQgPSBmdW5jdGlvbihsaWJlcmFsKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnBhcnNlSWRlbnROb2RlKCk7XG4gICAgdGhpcy5uZXh0KCEhbGliZXJhbCk7XG4gICAgdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSWRlbnRpZmllclwiKTtcbiAgICBpZiAoIWxpYmVyYWwpIHtcbiAgICAgIHRoaXMuY2hlY2tVbnJlc2VydmVkKG5vZGUpO1xuICAgICAgaWYgKG5vZGUubmFtZSA9PT0gXCJhd2FpdFwiICYmICF0aGlzLmF3YWl0SWRlbnRQb3MpXG4gICAgICAgIHsgdGhpcy5hd2FpdElkZW50UG9zID0gbm9kZS5zdGFydDsgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZVxuICB9O1xuXG4gIHBwJDUucGFyc2VJZGVudE5vZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMkMS5uYW1lKSB7XG4gICAgICBub2RlLm5hbWUgPSB0aGlzLnZhbHVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlLmtleXdvcmQpIHtcbiAgICAgIG5vZGUubmFtZSA9IHRoaXMudHlwZS5rZXl3b3JkO1xuXG4gICAgICAvLyBUbyBmaXggaHR0cHM6Ly9naXRodWIuY29tL2Fjb3JuanMvYWNvcm4vaXNzdWVzLzU3NVxuICAgICAgLy8gYGNsYXNzYCBhbmQgYGZ1bmN0aW9uYCBrZXl3b3JkcyBwdXNoIG5ldyBjb250ZXh0IGludG8gdGhpcy5jb250ZXh0LlxuICAgICAgLy8gQnV0IHRoZXJlIGlzIG5vIGNoYW5jZSB0byBwb3AgdGhlIGNvbnRleHQgaWYgdGhlIGtleXdvcmQgaXMgY29uc3VtZWQgYXMgYW4gaWRlbnRpZmllciBzdWNoIGFzIGEgcHJvcGVydHkgbmFtZS5cbiAgICAgIC8vIElmIHRoZSBwcmV2aW91cyB0b2tlbiBpcyBhIGRvdCwgdGhpcyBkb2VzIG5vdCBhcHBseSBiZWNhdXNlIHRoZSBjb250ZXh0LW1hbmFnaW5nIGNvZGUgYWxyZWFkeSBpZ25vcmVkIHRoZSBrZXl3b3JkXG4gICAgICBpZiAoKG5vZGUubmFtZSA9PT0gXCJjbGFzc1wiIHx8IG5vZGUubmFtZSA9PT0gXCJmdW5jdGlvblwiKSAmJlxuICAgICAgICAodGhpcy5sYXN0VG9rRW5kICE9PSB0aGlzLmxhc3RUb2tTdGFydCArIDEgfHwgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMubGFzdFRva1N0YXJ0KSAhPT0gNDYpKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5wb3AoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51bmV4cGVjdGVkKCk7XG4gICAgfVxuICAgIHJldHVybiBub2RlXG4gIH07XG5cbiAgcHAkNS5wYXJzZVByaXZhdGVJZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcyQxLnByaXZhdGVJZCkge1xuICAgICAgbm9kZS5uYW1lID0gdGhpcy52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51bmV4cGVjdGVkKCk7XG4gICAgfVxuICAgIHRoaXMubmV4dCgpO1xuICAgIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlByaXZhdGVJZGVudGlmaWVyXCIpO1xuXG4gICAgLy8gRm9yIHZhbGlkYXRpbmcgZXhpc3RlbmNlXG4gICAgaWYgKHRoaXMucHJpdmF0ZU5hbWVTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucmFpc2Uobm9kZS5zdGFydCwgKFwiUHJpdmF0ZSBmaWVsZCAnI1wiICsgKG5vZGUubmFtZSkgKyBcIicgbXVzdCBiZSBkZWNsYXJlZCBpbiBhbiBlbmNsb3NpbmcgY2xhc3NcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByaXZhdGVOYW1lU3RhY2tbdGhpcy5wcml2YXRlTmFtZVN0YWNrLmxlbmd0aCAtIDFdLnVzZWQucHVzaChub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZVxuICB9O1xuXG4gIC8vIFBhcnNlcyB5aWVsZCBleHByZXNzaW9uIGluc2lkZSBnZW5lcmF0b3IuXG5cbiAgcHAkNS5wYXJzZVlpZWxkID0gZnVuY3Rpb24oZm9ySW5pdCkge1xuICAgIGlmICghdGhpcy55aWVsZFBvcykgeyB0aGlzLnlpZWxkUG9zID0gdGhpcy5zdGFydDsgfVxuXG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzJDEuc2VtaSB8fCB0aGlzLmNhbkluc2VydFNlbWljb2xvbigpIHx8ICh0aGlzLnR5cGUgIT09IHR5cGVzJDEuc3RhciAmJiAhdGhpcy50eXBlLnN0YXJ0c0V4cHIpKSB7XG4gICAgICBub2RlLmRlbGVnYXRlID0gZmFsc2U7XG4gICAgICBub2RlLmFyZ3VtZW50ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5kZWxlZ2F0ZSA9IHRoaXMuZWF0KHR5cGVzJDEuc3Rhcik7XG4gICAgICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGZvckluaXQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiWWllbGRFeHByZXNzaW9uXCIpXG4gIH07XG5cbiAgcHAkNS5wYXJzZUF3YWl0ID0gZnVuY3Rpb24oZm9ySW5pdCkge1xuICAgIGlmICghdGhpcy5hd2FpdFBvcykgeyB0aGlzLmF3YWl0UG9zID0gdGhpcy5zdGFydDsgfVxuXG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVVbmFyeShudWxsLCB0cnVlLCBmYWxzZSwgZm9ySW5pdCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkF3YWl0RXhwcmVzc2lvblwiKVxuICB9O1xuXG4gIHZhciBwcCQ0ID0gUGFyc2VyLnByb3RvdHlwZTtcblxuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmFpc2UgZXhjZXB0aW9ucyBvbiBwYXJzZSBlcnJvcnMuIEl0XG4gIC8vIHRha2VzIGFuIG9mZnNldCBpbnRlZ2VyIChpbnRvIHRoZSBjdXJyZW50IGBpbnB1dGApIHRvIGluZGljYXRlXG4gIC8vIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IsIGF0dGFjaGVzIHRoZSBwb3NpdGlvbiB0byB0aGUgZW5kXG4gIC8vIG9mIHRoZSBlcnJvciBtZXNzYWdlLCBhbmQgdGhlbiByYWlzZXMgYSBgU3ludGF4RXJyb3JgIHdpdGggdGhhdFxuICAvLyBtZXNzYWdlLlxuXG4gIHBwJDQucmFpc2UgPSBmdW5jdGlvbihwb3MsIG1lc3NhZ2UpIHtcbiAgICB2YXIgbG9jID0gZ2V0TGluZUluZm8odGhpcy5pbnB1dCwgcG9zKTtcbiAgICBtZXNzYWdlICs9IFwiIChcIiArIGxvYy5saW5lICsgXCI6XCIgKyBsb2MuY29sdW1uICsgXCIpXCI7XG4gICAgdmFyIGVyciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlKTtcbiAgICBlcnIucG9zID0gcG9zOyBlcnIubG9jID0gbG9jOyBlcnIucmFpc2VkQXQgPSB0aGlzLnBvcztcbiAgICB0aHJvdyBlcnJcbiAgfTtcblxuICBwcCQ0LnJhaXNlUmVjb3ZlcmFibGUgPSBwcCQ0LnJhaXNlO1xuXG4gIHBwJDQuY3VyUG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykge1xuICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvbih0aGlzLmN1ckxpbmUsIHRoaXMucG9zIC0gdGhpcy5saW5lU3RhcnQpXG4gICAgfVxuICB9O1xuXG4gIHZhciBwcCQzID0gUGFyc2VyLnByb3RvdHlwZTtcblxuICB2YXIgU2NvcGUgPSBmdW5jdGlvbiBTY29wZShmbGFncykge1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICAvLyBBIGxpc3Qgb2YgdmFyLWRlY2xhcmVkIG5hbWVzIGluIHRoZSBjdXJyZW50IGxleGljYWwgc2NvcGVcbiAgICB0aGlzLnZhciA9IFtdO1xuICAgIC8vIEEgbGlzdCBvZiBsZXhpY2FsbHktZGVjbGFyZWQgbmFtZXMgaW4gdGhlIGN1cnJlbnQgbGV4aWNhbCBzY29wZVxuICAgIHRoaXMubGV4aWNhbCA9IFtdO1xuICAgIC8vIEEgbGlzdCBvZiBsZXhpY2FsbHktZGVjbGFyZWQgRnVuY3Rpb25EZWNsYXJhdGlvbiBuYW1lcyBpbiB0aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlXG4gICAgdGhpcy5mdW5jdGlvbnMgPSBbXTtcbiAgICAvLyBBIHN3aXRjaCB0byBkaXNhbGxvdyB0aGUgaWRlbnRpZmllciByZWZlcmVuY2UgJ2FyZ3VtZW50cydcbiAgICB0aGlzLmluQ2xhc3NGaWVsZEluaXQgPSBmYWxzZTtcbiAgfTtcblxuICAvLyBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIGtlZXAgdHJhY2sgb2YgZGVjbGFyZWQgdmFyaWFibGVzIGluIHRoZSBjdXJyZW50IHNjb3BlIGluIG9yZGVyIHRvIGRldGVjdCBkdXBsaWNhdGUgdmFyaWFibGUgbmFtZXMuXG5cbiAgcHAkMy5lbnRlclNjb3BlID0gZnVuY3Rpb24oZmxhZ3MpIHtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaChuZXcgU2NvcGUoZmxhZ3MpKTtcbiAgfTtcblxuICBwcCQzLmV4aXRTY29wZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wb3AoKTtcbiAgfTtcblxuICAvLyBUaGUgc3BlYyBzYXlzOlxuICAvLyA+IEF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBmdW5jdGlvbiwgb3Igc2NyaXB0LCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXJlXG4gIC8vID4gdHJlYXRlZCBsaWtlIHZhciBkZWNsYXJhdGlvbnMgcmF0aGVyIHRoYW4gbGlrZSBsZXhpY2FsIGRlY2xhcmF0aW9ucy5cbiAgcHAkMy50cmVhdEZ1bmN0aW9uc0FzVmFySW5TY29wZSA9IGZ1bmN0aW9uKHNjb3BlKSB7XG4gICAgcmV0dXJuIChzY29wZS5mbGFncyAmIFNDT1BFX0ZVTkNUSU9OKSB8fCAhdGhpcy5pbk1vZHVsZSAmJiAoc2NvcGUuZmxhZ3MgJiBTQ09QRV9UT1ApXG4gIH07XG5cbiAgcHAkMy5kZWNsYXJlTmFtZSA9IGZ1bmN0aW9uKG5hbWUsIGJpbmRpbmdUeXBlLCBwb3MpIHtcbiAgICB2YXIgcmVkZWNsYXJlZCA9IGZhbHNlO1xuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQklORF9MRVhJQ0FMKSB7XG4gICAgICB2YXIgc2NvcGUgPSB0aGlzLmN1cnJlbnRTY29wZSgpO1xuICAgICAgcmVkZWNsYXJlZCA9IHNjb3BlLmxleGljYWwuaW5kZXhPZihuYW1lKSA+IC0xIHx8IHNjb3BlLmZ1bmN0aW9ucy5pbmRleE9mKG5hbWUpID4gLTEgfHwgc2NvcGUudmFyLmluZGV4T2YobmFtZSkgPiAtMTtcbiAgICAgIHNjb3BlLmxleGljYWwucHVzaChuYW1lKTtcbiAgICAgIGlmICh0aGlzLmluTW9kdWxlICYmIChzY29wZS5mbGFncyAmIFNDT1BFX1RPUCkpXG4gICAgICAgIHsgZGVsZXRlIHRoaXMudW5kZWZpbmVkRXhwb3J0c1tuYW1lXTsgfVxuICAgIH0gZWxzZSBpZiAoYmluZGluZ1R5cGUgPT09IEJJTkRfU0lNUExFX0NBVENIKSB7XG4gICAgICB2YXIgc2NvcGUkMSA9IHRoaXMuY3VycmVudFNjb3BlKCk7XG4gICAgICBzY29wZSQxLmxleGljYWwucHVzaChuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJpbmRpbmdUeXBlID09PSBCSU5EX0ZVTkNUSU9OKSB7XG4gICAgICB2YXIgc2NvcGUkMiA9IHRoaXMuY3VycmVudFNjb3BlKCk7XG4gICAgICBpZiAodGhpcy50cmVhdEZ1bmN0aW9uc0FzVmFyKVxuICAgICAgICB7IHJlZGVjbGFyZWQgPSBzY29wZSQyLmxleGljYWwuaW5kZXhPZihuYW1lKSA+IC0xOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgcmVkZWNsYXJlZCA9IHNjb3BlJDIubGV4aWNhbC5pbmRleE9mKG5hbWUpID4gLTEgfHwgc2NvcGUkMi52YXIuaW5kZXhPZihuYW1lKSA+IC0xOyB9XG4gICAgICBzY29wZSQyLmZ1bmN0aW9ucy5wdXNoKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5zY29wZVN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBzY29wZSQzID0gdGhpcy5zY29wZVN0YWNrW2ldO1xuICAgICAgICBpZiAoc2NvcGUkMy5sZXhpY2FsLmluZGV4T2YobmFtZSkgPiAtMSAmJiAhKChzY29wZSQzLmZsYWdzICYgU0NPUEVfU0lNUExFX0NBVENIKSAmJiBzY29wZSQzLmxleGljYWxbMF0gPT09IG5hbWUpIHx8XG4gICAgICAgICAgICAhdGhpcy50cmVhdEZ1bmN0aW9uc0FzVmFySW5TY29wZShzY29wZSQzKSAmJiBzY29wZSQzLmZ1bmN0aW9ucy5pbmRleE9mKG5hbWUpID4gLTEpIHtcbiAgICAgICAgICByZWRlY2xhcmVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHNjb3BlJDMudmFyLnB1c2gobmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmluTW9kdWxlICYmIChzY29wZSQzLmZsYWdzICYgU0NPUEVfVE9QKSlcbiAgICAgICAgICB7IGRlbGV0ZSB0aGlzLnVuZGVmaW5lZEV4cG9ydHNbbmFtZV07IH1cbiAgICAgICAgaWYgKHNjb3BlJDMuZmxhZ3MgJiBTQ09QRV9WQVIpIHsgYnJlYWsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVkZWNsYXJlZCkgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUocG9zLCAoXCJJZGVudGlmaWVyICdcIiArIG5hbWUgKyBcIicgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZFwiKSk7IH1cbiAgfTtcblxuICBwcCQzLmNoZWNrTG9jYWxFeHBvcnQgPSBmdW5jdGlvbihpZCkge1xuICAgIC8vIHNjb3BlLmZ1bmN0aW9ucyBtdXN0IGJlIGVtcHR5IGFzIE1vZHVsZSBjb2RlIGlzIGFsd2F5cyBzdHJpY3QuXG4gICAgaWYgKHRoaXMuc2NvcGVTdGFja1swXS5sZXhpY2FsLmluZGV4T2YoaWQubmFtZSkgPT09IC0xICYmXG4gICAgICAgIHRoaXMuc2NvcGVTdGFja1swXS52YXIuaW5kZXhPZihpZC5uYW1lKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMudW5kZWZpbmVkRXhwb3J0c1tpZC5uYW1lXSA9IGlkO1xuICAgIH1cbiAgfTtcblxuICBwcCQzLmN1cnJlbnRTY29wZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNjb3BlU3RhY2tbdGhpcy5zY29wZVN0YWNrLmxlbmd0aCAtIDFdXG4gIH07XG5cbiAgcHAkMy5jdXJyZW50VmFyU2NvcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zY29wZVN0YWNrLmxlbmd0aCAtIDE7OyBpLS0pIHtcbiAgICAgIHZhciBzY29wZSA9IHRoaXMuc2NvcGVTdGFja1tpXTtcbiAgICAgIGlmIChzY29wZS5mbGFncyAmIFNDT1BFX1ZBUikgeyByZXR1cm4gc2NvcGUgfVxuICAgIH1cbiAgfTtcblxuICAvLyBDb3VsZCBiZSB1c2VmdWwgZm9yIGB0aGlzYCwgYG5ldy50YXJnZXRgLCBgc3VwZXIoKWAsIGBzdXBlci5wcm9wZXJ0eWAsIGFuZCBgc3VwZXJbcHJvcGVydHldYC5cbiAgcHAkMy5jdXJyZW50VGhpc1Njb3BlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc2NvcGVTdGFjay5sZW5ndGggLSAxOzsgaS0tKSB7XG4gICAgICB2YXIgc2NvcGUgPSB0aGlzLnNjb3BlU3RhY2tbaV07XG4gICAgICBpZiAoc2NvcGUuZmxhZ3MgJiBTQ09QRV9WQVIgJiYgIShzY29wZS5mbGFncyAmIFNDT1BFX0FSUk9XKSkgeyByZXR1cm4gc2NvcGUgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgTm9kZSA9IGZ1bmN0aW9uIE5vZGUocGFyc2VyLCBwb3MsIGxvYykge1xuICAgIHRoaXMudHlwZSA9IFwiXCI7XG4gICAgdGhpcy5zdGFydCA9IHBvcztcbiAgICB0aGlzLmVuZCA9IDA7XG4gICAgaWYgKHBhcnNlci5vcHRpb25zLmxvY2F0aW9ucylcbiAgICAgIHsgdGhpcy5sb2MgPSBuZXcgU291cmNlTG9jYXRpb24ocGFyc2VyLCBsb2MpOyB9XG4gICAgaWYgKHBhcnNlci5vcHRpb25zLmRpcmVjdFNvdXJjZUZpbGUpXG4gICAgICB7IHRoaXMuc291cmNlRmlsZSA9IHBhcnNlci5vcHRpb25zLmRpcmVjdFNvdXJjZUZpbGU7IH1cbiAgICBpZiAocGFyc2VyLm9wdGlvbnMucmFuZ2VzKVxuICAgICAgeyB0aGlzLnJhbmdlID0gW3BvcywgMF07IH1cbiAgfTtcblxuICAvLyBTdGFydCBhbiBBU1Qgbm9kZSwgYXR0YWNoaW5nIGEgc3RhcnQgb2Zmc2V0LlxuXG4gIHZhciBwcCQyID0gUGFyc2VyLnByb3RvdHlwZTtcblxuICBwcCQyLnN0YXJ0Tm9kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTm9kZSh0aGlzLCB0aGlzLnN0YXJ0LCB0aGlzLnN0YXJ0TG9jKVxuICB9O1xuXG4gIHBwJDIuc3RhcnROb2RlQXQgPSBmdW5jdGlvbihwb3MsIGxvYykge1xuICAgIHJldHVybiBuZXcgTm9kZSh0aGlzLCBwb3MsIGxvYylcbiAgfTtcblxuICAvLyBGaW5pc2ggYW4gQVNUIG5vZGUsIGFkZGluZyBgdHlwZWAgYW5kIGBlbmRgIHByb3BlcnRpZXMuXG5cbiAgZnVuY3Rpb24gZmluaXNoTm9kZUF0KG5vZGUsIHR5cGUsIHBvcywgbG9jKSB7XG4gICAgbm9kZS50eXBlID0gdHlwZTtcbiAgICBub2RlLmVuZCA9IHBvcztcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucylcbiAgICAgIHsgbm9kZS5sb2MuZW5kID0gbG9jOyB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpXG4gICAgICB7IG5vZGUucmFuZ2VbMV0gPSBwb3M7IH1cbiAgICByZXR1cm4gbm9kZVxuICB9XG5cbiAgcHAkMi5maW5pc2hOb2RlID0gZnVuY3Rpb24obm9kZSwgdHlwZSkge1xuICAgIHJldHVybiBmaW5pc2hOb2RlQXQuY2FsbCh0aGlzLCBub2RlLCB0eXBlLCB0aGlzLmxhc3RUb2tFbmQsIHRoaXMubGFzdFRva0VuZExvYylcbiAgfTtcblxuICAvLyBGaW5pc2ggbm9kZSBhdCBnaXZlbiBwb3NpdGlvblxuXG4gIHBwJDIuZmluaXNoTm9kZUF0ID0gZnVuY3Rpb24obm9kZSwgdHlwZSwgcG9zLCBsb2MpIHtcbiAgICByZXR1cm4gZmluaXNoTm9kZUF0LmNhbGwodGhpcywgbm9kZSwgdHlwZSwgcG9zLCBsb2MpXG4gIH07XG5cbiAgcHAkMi5jb3B5Tm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgbmV3Tm9kZSA9IG5ldyBOb2RlKHRoaXMsIG5vZGUuc3RhcnQsIHRoaXMuc3RhcnRMb2MpO1xuICAgIGZvciAodmFyIHByb3AgaW4gbm9kZSkgeyBuZXdOb2RlW3Byb3BdID0gbm9kZVtwcm9wXTsgfVxuICAgIHJldHVybiBuZXdOb2RlXG4gIH07XG5cbiAgLy8gVGhpcyBmaWxlIGNvbnRhaW5zIFVuaWNvZGUgcHJvcGVydGllcyBleHRyYWN0ZWQgZnJvbSB0aGUgRUNNQVNjcmlwdCBzcGVjaWZpY2F0aW9uLlxuICAvLyBUaGUgbGlzdHMgYXJlIGV4dHJhY3RlZCBsaWtlIHNvOlxuICAvLyAkJCgnI3RhYmxlLWJpbmFyeS11bmljb2RlLXByb3BlcnRpZXMgPiBmaWd1cmUgPiB0YWJsZSA+IHRib2R5ID4gdHIgPiB0ZDpudGgtY2hpbGQoMSkgY29kZScpLm1hcChlbCA9PiBlbC5pbm5lclRleHQpXG5cbiAgLy8gI3RhYmxlLWJpbmFyeS11bmljb2RlLXByb3BlcnRpZXNcbiAgdmFyIGVjbWE5QmluYXJ5UHJvcGVydGllcyA9IFwiQVNDSUkgQVNDSUlfSGV4X0RpZ2l0IEFIZXggQWxwaGFiZXRpYyBBbHBoYSBBbnkgQXNzaWduZWQgQmlkaV9Db250cm9sIEJpZGlfQyBCaWRpX01pcnJvcmVkIEJpZGlfTSBDYXNlX0lnbm9yYWJsZSBDSSBDYXNlZCBDaGFuZ2VzX1doZW5fQ2FzZWZvbGRlZCBDV0NGIENoYW5nZXNfV2hlbl9DYXNlbWFwcGVkIENXQ00gQ2hhbmdlc19XaGVuX0xvd2VyY2FzZWQgQ1dMIENoYW5nZXNfV2hlbl9ORktDX0Nhc2Vmb2xkZWQgQ1dLQ0YgQ2hhbmdlc19XaGVuX1RpdGxlY2FzZWQgQ1dUIENoYW5nZXNfV2hlbl9VcHBlcmNhc2VkIENXVSBEYXNoIERlZmF1bHRfSWdub3JhYmxlX0NvZGVfUG9pbnQgREkgRGVwcmVjYXRlZCBEZXAgRGlhY3JpdGljIERpYSBFbW9qaSBFbW9qaV9Db21wb25lbnQgRW1vamlfTW9kaWZpZXIgRW1vamlfTW9kaWZpZXJfQmFzZSBFbW9qaV9QcmVzZW50YXRpb24gRXh0ZW5kZXIgRXh0IEdyYXBoZW1lX0Jhc2UgR3JfQmFzZSBHcmFwaGVtZV9FeHRlbmQgR3JfRXh0IEhleF9EaWdpdCBIZXggSURTX0JpbmFyeV9PcGVyYXRvciBJRFNCIElEU19UcmluYXJ5X09wZXJhdG9yIElEU1QgSURfQ29udGludWUgSURDIElEX1N0YXJ0IElEUyBJZGVvZ3JhcGhpYyBJZGVvIEpvaW5fQ29udHJvbCBKb2luX0MgTG9naWNhbF9PcmRlcl9FeGNlcHRpb24gTE9FIExvd2VyY2FzZSBMb3dlciBNYXRoIE5vbmNoYXJhY3Rlcl9Db2RlX1BvaW50IE5DaGFyIFBhdHRlcm5fU3ludGF4IFBhdF9TeW4gUGF0dGVybl9XaGl0ZV9TcGFjZSBQYXRfV1MgUXVvdGF0aW9uX01hcmsgUU1hcmsgUmFkaWNhbCBSZWdpb25hbF9JbmRpY2F0b3IgUkkgU2VudGVuY2VfVGVybWluYWwgU1Rlcm0gU29mdF9Eb3R0ZWQgU0QgVGVybWluYWxfUHVuY3R1YXRpb24gVGVybSBVbmlmaWVkX0lkZW9ncmFwaCBVSWRlbyBVcHBlcmNhc2UgVXBwZXIgVmFyaWF0aW9uX1NlbGVjdG9yIFZTIFdoaXRlX1NwYWNlIHNwYWNlIFhJRF9Db250aW51ZSBYSURDIFhJRF9TdGFydCBYSURTXCI7XG4gIHZhciBlY21hMTBCaW5hcnlQcm9wZXJ0aWVzID0gZWNtYTlCaW5hcnlQcm9wZXJ0aWVzICsgXCIgRXh0ZW5kZWRfUGljdG9ncmFwaGljXCI7XG4gIHZhciBlY21hMTFCaW5hcnlQcm9wZXJ0aWVzID0gZWNtYTEwQmluYXJ5UHJvcGVydGllcztcbiAgdmFyIGVjbWExMkJpbmFyeVByb3BlcnRpZXMgPSBlY21hMTFCaW5hcnlQcm9wZXJ0aWVzICsgXCIgRUJhc2UgRUNvbXAgRU1vZCBFUHJlcyBFeHRQaWN0XCI7XG4gIHZhciBlY21hMTNCaW5hcnlQcm9wZXJ0aWVzID0gZWNtYTEyQmluYXJ5UHJvcGVydGllcztcbiAgdmFyIGVjbWExNEJpbmFyeVByb3BlcnRpZXMgPSBlY21hMTNCaW5hcnlQcm9wZXJ0aWVzO1xuXG4gIHZhciB1bmljb2RlQmluYXJ5UHJvcGVydGllcyA9IHtcbiAgICA5OiBlY21hOUJpbmFyeVByb3BlcnRpZXMsXG4gICAgMTA6IGVjbWExMEJpbmFyeVByb3BlcnRpZXMsXG4gICAgMTE6IGVjbWExMUJpbmFyeVByb3BlcnRpZXMsXG4gICAgMTI6IGVjbWExMkJpbmFyeVByb3BlcnRpZXMsXG4gICAgMTM6IGVjbWExM0JpbmFyeVByb3BlcnRpZXMsXG4gICAgMTQ6IGVjbWExNEJpbmFyeVByb3BlcnRpZXNcbiAgfTtcblxuICAvLyAjdGFibGUtYmluYXJ5LXVuaWNvZGUtcHJvcGVydGllcy1vZi1zdHJpbmdzXG4gIHZhciBlY21hMTRCaW5hcnlQcm9wZXJ0aWVzT2ZTdHJpbmdzID0gXCJCYXNpY19FbW9qaSBFbW9qaV9LZXljYXBfU2VxdWVuY2UgUkdJX0Vtb2ppX01vZGlmaWVyX1NlcXVlbmNlIFJHSV9FbW9qaV9GbGFnX1NlcXVlbmNlIFJHSV9FbW9qaV9UYWdfU2VxdWVuY2UgUkdJX0Vtb2ppX1pXSl9TZXF1ZW5jZSBSR0lfRW1vamlcIjtcblxuICB2YXIgdW5pY29kZUJpbmFyeVByb3BlcnRpZXNPZlN0cmluZ3MgPSB7XG4gICAgOTogXCJcIixcbiAgICAxMDogXCJcIixcbiAgICAxMTogXCJcIixcbiAgICAxMjogXCJcIixcbiAgICAxMzogXCJcIixcbiAgICAxNDogZWNtYTE0QmluYXJ5UHJvcGVydGllc09mU3RyaW5nc1xuICB9O1xuXG4gIC8vICN0YWJsZS11bmljb2RlLWdlbmVyYWwtY2F0ZWdvcnktdmFsdWVzXG4gIHZhciB1bmljb2RlR2VuZXJhbENhdGVnb3J5VmFsdWVzID0gXCJDYXNlZF9MZXR0ZXIgTEMgQ2xvc2VfUHVuY3R1YXRpb24gUGUgQ29ubmVjdG9yX1B1bmN0dWF0aW9uIFBjIENvbnRyb2wgQ2MgY250cmwgQ3VycmVuY3lfU3ltYm9sIFNjIERhc2hfUHVuY3R1YXRpb24gUGQgRGVjaW1hbF9OdW1iZXIgTmQgZGlnaXQgRW5jbG9zaW5nX01hcmsgTWUgRmluYWxfUHVuY3R1YXRpb24gUGYgRm9ybWF0IENmIEluaXRpYWxfUHVuY3R1YXRpb24gUGkgTGV0dGVyIEwgTGV0dGVyX051bWJlciBObCBMaW5lX1NlcGFyYXRvciBabCBMb3dlcmNhc2VfTGV0dGVyIExsIE1hcmsgTSBDb21iaW5pbmdfTWFyayBNYXRoX1N5bWJvbCBTbSBNb2RpZmllcl9MZXR0ZXIgTG0gTW9kaWZpZXJfU3ltYm9sIFNrIE5vbnNwYWNpbmdfTWFyayBNbiBOdW1iZXIgTiBPcGVuX1B1bmN0dWF0aW9uIFBzIE90aGVyIEMgT3RoZXJfTGV0dGVyIExvIE90aGVyX051bWJlciBObyBPdGhlcl9QdW5jdHVhdGlvbiBQbyBPdGhlcl9TeW1ib2wgU28gUGFyYWdyYXBoX1NlcGFyYXRvciBacCBQcml2YXRlX1VzZSBDbyBQdW5jdHVhdGlvbiBQIHB1bmN0IFNlcGFyYXRvciBaIFNwYWNlX1NlcGFyYXRvciBacyBTcGFjaW5nX01hcmsgTWMgU3Vycm9nYXRlIENzIFN5bWJvbCBTIFRpdGxlY2FzZV9MZXR0ZXIgTHQgVW5hc3NpZ25lZCBDbiBVcHBlcmNhc2VfTGV0dGVyIEx1XCI7XG5cbiAgLy8gI3RhYmxlLXVuaWNvZGUtc2NyaXB0LXZhbHVlc1xuICB2YXIgZWNtYTlTY3JpcHRWYWx1ZXMgPSBcIkFkbGFtIEFkbG0gQWhvbSBBbmF0b2xpYW5fSGllcm9nbHlwaHMgSGx1dyBBcmFiaWMgQXJhYiBBcm1lbmlhbiBBcm1uIEF2ZXN0YW4gQXZzdCBCYWxpbmVzZSBCYWxpIEJhbXVtIEJhbXUgQmFzc2FfVmFoIEJhc3MgQmF0YWsgQmF0ayBCZW5nYWxpIEJlbmcgQmhhaWtzdWtpIEJoa3MgQm9wb21vZm8gQm9wbyBCcmFobWkgQnJhaCBCcmFpbGxlIEJyYWkgQnVnaW5lc2UgQnVnaSBCdWhpZCBCdWhkIENhbmFkaWFuX0Fib3JpZ2luYWwgQ2FucyBDYXJpYW4gQ2FyaSBDYXVjYXNpYW5fQWxiYW5pYW4gQWdoYiBDaGFrbWEgQ2FrbSBDaGFtIENoYW0gQ2hlcm9rZWUgQ2hlciBDb21tb24gWnl5eSBDb3B0aWMgQ29wdCBRYWFjIEN1bmVpZm9ybSBYc3V4IEN5cHJpb3QgQ3BydCBDeXJpbGxpYyBDeXJsIERlc2VyZXQgRHNydCBEZXZhbmFnYXJpIERldmEgRHVwbG95YW4gRHVwbCBFZ3lwdGlhbl9IaWVyb2dseXBocyBFZ3lwIEVsYmFzYW4gRWxiYSBFdGhpb3BpYyBFdGhpIEdlb3JnaWFuIEdlb3IgR2xhZ29saXRpYyBHbGFnIEdvdGhpYyBHb3RoIEdyYW50aGEgR3JhbiBHcmVlayBHcmVrIEd1amFyYXRpIEd1anIgR3VybXVraGkgR3VydSBIYW4gSGFuaSBIYW5ndWwgSGFuZyBIYW51bm9vIEhhbm8gSGF0cmFuIEhhdHIgSGVicmV3IEhlYnIgSGlyYWdhbmEgSGlyYSBJbXBlcmlhbF9BcmFtYWljIEFybWkgSW5oZXJpdGVkIFppbmggUWFhaSBJbnNjcmlwdGlvbmFsX1BhaGxhdmkgUGhsaSBJbnNjcmlwdGlvbmFsX1BhcnRoaWFuIFBydGkgSmF2YW5lc2UgSmF2YSBLYWl0aGkgS3RoaSBLYW5uYWRhIEtuZGEgS2F0YWthbmEgS2FuYSBLYXlhaF9MaSBLYWxpIEtoYXJvc2h0aGkgS2hhciBLaG1lciBLaG1yIEtob2praSBLaG9qIEtodWRhd2FkaSBTaW5kIExhbyBMYW9vIExhdGluIExhdG4gTGVwY2hhIExlcGMgTGltYnUgTGltYiBMaW5lYXJfQSBMaW5hIExpbmVhcl9CIExpbmIgTGlzdSBMaXN1IEx5Y2lhbiBMeWNpIEx5ZGlhbiBMeWRpIE1haGFqYW5pIE1haGogTWFsYXlhbGFtIE1seW0gTWFuZGFpYyBNYW5kIE1hbmljaGFlYW4gTWFuaSBNYXJjaGVuIE1hcmMgTWFzYXJhbV9Hb25kaSBHb25tIE1lZXRlaV9NYXllayBNdGVpIE1lbmRlX0tpa2FrdWkgTWVuZCBNZXJvaXRpY19DdXJzaXZlIE1lcmMgTWVyb2l0aWNfSGllcm9nbHlwaHMgTWVybyBNaWFvIFBscmQgTW9kaSBNb25nb2xpYW4gTW9uZyBNcm8gTXJvbyBNdWx0YW5pIE11bHQgTXlhbm1hciBNeW1yIE5hYmF0YWVhbiBOYmF0IE5ld19UYWlfTHVlIFRhbHUgTmV3YSBOZXdhIE5rbyBOa29vIE51c2h1IE5zaHUgT2doYW0gT2dhbSBPbF9DaGlraSBPbGNrIE9sZF9IdW5nYXJpYW4gSHVuZyBPbGRfSXRhbGljIEl0YWwgT2xkX05vcnRoX0FyYWJpYW4gTmFyYiBPbGRfUGVybWljIFBlcm0gT2xkX1BlcnNpYW4gWHBlbyBPbGRfU291dGhfQXJhYmlhbiBTYXJiIE9sZF9UdXJraWMgT3JraCBPcml5YSBPcnlhIE9zYWdlIE9zZ2UgT3NtYW55YSBPc21hIFBhaGF3aF9IbW9uZyBIbW5nIFBhbG15cmVuZSBQYWxtIFBhdV9DaW5fSGF1IFBhdWMgUGhhZ3NfUGEgUGhhZyBQaG9lbmljaWFuIFBobnggUHNhbHRlcl9QYWhsYXZpIFBobHAgUmVqYW5nIFJqbmcgUnVuaWMgUnVuciBTYW1hcml0YW4gU2FtciBTYXVyYXNodHJhIFNhdXIgU2hhcmFkYSBTaHJkIFNoYXZpYW4gU2hhdyBTaWRkaGFtIFNpZGQgU2lnbldyaXRpbmcgU2dudyBTaW5oYWxhIFNpbmggU29yYV9Tb21wZW5nIFNvcmEgU295b21ibyBTb3lvIFN1bmRhbmVzZSBTdW5kIFN5bG90aV9OYWdyaSBTeWxvIFN5cmlhYyBTeXJjIFRhZ2Fsb2cgVGdsZyBUYWdiYW53YSBUYWdiIFRhaV9MZSBUYWxlIFRhaV9UaGFtIExhbmEgVGFpX1ZpZXQgVGF2dCBUYWtyaSBUYWtyIFRhbWlsIFRhbWwgVGFuZ3V0IFRhbmcgVGVsdWd1IFRlbHUgVGhhYW5hIFRoYWEgVGhhaSBUaGFpIFRpYmV0YW4gVGlidCBUaWZpbmFnaCBUZm5nIFRpcmh1dGEgVGlyaCBVZ2FyaXRpYyBVZ2FyIFZhaSBWYWlpIFdhcmFuZ19DaXRpIFdhcmEgWWkgWWlpaSBaYW5hYmF6YXJfU3F1YXJlIFphbmJcIjtcbiAgdmFyIGVjbWExMFNjcmlwdFZhbHVlcyA9IGVjbWE5U2NyaXB0VmFsdWVzICsgXCIgRG9ncmEgRG9nciBHdW5qYWxhX0dvbmRpIEdvbmcgSGFuaWZpX1JvaGluZ3lhIFJvaGcgTWFrYXNhciBNYWthIE1lZGVmYWlkcmluIE1lZGYgT2xkX1NvZ2RpYW4gU29nbyBTb2dkaWFuIFNvZ2RcIjtcbiAgdmFyIGVjbWExMVNjcmlwdFZhbHVlcyA9IGVjbWExMFNjcmlwdFZhbHVlcyArIFwiIEVseW1haWMgRWx5bSBOYW5kaW5hZ2FyaSBOYW5kIE55aWFrZW5nX1B1YWNodWVfSG1vbmcgSG1ucCBXYW5jaG8gV2Nob1wiO1xuICB2YXIgZWNtYTEyU2NyaXB0VmFsdWVzID0gZWNtYTExU2NyaXB0VmFsdWVzICsgXCIgQ2hvcmFzbWlhbiBDaHJzIERpYWsgRGl2ZXNfQWt1cnUgS2hpdGFuX1NtYWxsX1NjcmlwdCBLaXRzIFllemkgWWV6aWRpXCI7XG4gIHZhciBlY21hMTNTY3JpcHRWYWx1ZXMgPSBlY21hMTJTY3JpcHRWYWx1ZXMgKyBcIiBDeXByb19NaW5vYW4gQ3BtbiBPbGRfVXlnaHVyIE91Z3IgVGFuZ3NhIFRuc2EgVG90byBWaXRoa3VxaSBWaXRoXCI7XG4gIHZhciBlY21hMTRTY3JpcHRWYWx1ZXMgPSBlY21hMTNTY3JpcHRWYWx1ZXMgKyBcIiBIcmt0IEthdGFrYW5hX09yX0hpcmFnYW5hIEthd2kgTmFnX011bmRhcmkgTmFnbSBVbmtub3duIFp6enpcIjtcblxuICB2YXIgdW5pY29kZVNjcmlwdFZhbHVlcyA9IHtcbiAgICA5OiBlY21hOVNjcmlwdFZhbHVlcyxcbiAgICAxMDogZWNtYTEwU2NyaXB0VmFsdWVzLFxuICAgIDExOiBlY21hMTFTY3JpcHRWYWx1ZXMsXG4gICAgMTI6IGVjbWExMlNjcmlwdFZhbHVlcyxcbiAgICAxMzogZWNtYTEzU2NyaXB0VmFsdWVzLFxuICAgIDE0OiBlY21hMTRTY3JpcHRWYWx1ZXNcbiAgfTtcblxuICB2YXIgZGF0YSA9IHt9O1xuICBmdW5jdGlvbiBidWlsZFVuaWNvZGVEYXRhKGVjbWFWZXJzaW9uKSB7XG4gICAgdmFyIGQgPSBkYXRhW2VjbWFWZXJzaW9uXSA9IHtcbiAgICAgIGJpbmFyeTogd29yZHNSZWdleHAodW5pY29kZUJpbmFyeVByb3BlcnRpZXNbZWNtYVZlcnNpb25dICsgXCIgXCIgKyB1bmljb2RlR2VuZXJhbENhdGVnb3J5VmFsdWVzKSxcbiAgICAgIGJpbmFyeU9mU3RyaW5nczogd29yZHNSZWdleHAodW5pY29kZUJpbmFyeVByb3BlcnRpZXNPZlN0cmluZ3NbZWNtYVZlcnNpb25dKSxcbiAgICAgIG5vbkJpbmFyeToge1xuICAgICAgICBHZW5lcmFsX0NhdGVnb3J5OiB3b3Jkc1JlZ2V4cCh1bmljb2RlR2VuZXJhbENhdGVnb3J5VmFsdWVzKSxcbiAgICAgICAgU2NyaXB0OiB3b3Jkc1JlZ2V4cCh1bmljb2RlU2NyaXB0VmFsdWVzW2VjbWFWZXJzaW9uXSlcbiAgICAgIH1cbiAgICB9O1xuICAgIGQubm9uQmluYXJ5LlNjcmlwdF9FeHRlbnNpb25zID0gZC5ub25CaW5hcnkuU2NyaXB0O1xuXG4gICAgZC5ub25CaW5hcnkuZ2MgPSBkLm5vbkJpbmFyeS5HZW5lcmFsX0NhdGVnb3J5O1xuICAgIGQubm9uQmluYXJ5LnNjID0gZC5ub25CaW5hcnkuU2NyaXB0O1xuICAgIGQubm9uQmluYXJ5LnNjeCA9IGQubm9uQmluYXJ5LlNjcmlwdF9FeHRlbnNpb25zO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBbOSwgMTAsIDExLCAxMiwgMTMsIDE0XTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgZWNtYVZlcnNpb24gPSBsaXN0W2ldO1xuXG4gICAgYnVpbGRVbmljb2RlRGF0YShlY21hVmVyc2lvbik7XG4gIH1cblxuICB2YXIgcHAkMSA9IFBhcnNlci5wcm90b3R5cGU7XG5cbiAgdmFyIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZSA9IGZ1bmN0aW9uIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZShwYXJzZXIpIHtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnZhbGlkRmxhZ3MgPSBcImdpbVwiICsgKHBhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgPyBcInV5XCIgOiBcIlwiKSArIChwYXJzZXIub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ID8gXCJzXCIgOiBcIlwiKSArIChwYXJzZXIub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMyA/IFwiZFwiIDogXCJcIikgKyAocGFyc2VyLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTUgPyBcInZcIiA6IFwiXCIpO1xuICAgIHRoaXMudW5pY29kZVByb3BlcnRpZXMgPSBkYXRhW3BhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uID49IDE0ID8gMTQgOiBwYXJzZXIub3B0aW9ucy5lY21hVmVyc2lvbl07XG4gICAgdGhpcy5zb3VyY2UgPSBcIlwiO1xuICAgIHRoaXMuZmxhZ3MgPSBcIlwiO1xuICAgIHRoaXMuc3RhcnQgPSAwO1xuICAgIHRoaXMuc3dpdGNoVSA9IGZhbHNlO1xuICAgIHRoaXMuc3dpdGNoViA9IGZhbHNlO1xuICAgIHRoaXMuc3dpdGNoTiA9IGZhbHNlO1xuICAgIHRoaXMucG9zID0gMDtcbiAgICB0aGlzLmxhc3RJbnRWYWx1ZSA9IDA7XG4gICAgdGhpcy5sYXN0U3RyaW5nVmFsdWUgPSBcIlwiO1xuICAgIHRoaXMubGFzdEFzc2VydGlvbklzUXVhbnRpZmlhYmxlID0gZmFsc2U7XG4gICAgdGhpcy5udW1DYXB0dXJpbmdQYXJlbnMgPSAwO1xuICAgIHRoaXMubWF4QmFja1JlZmVyZW5jZSA9IDA7XG4gICAgdGhpcy5ncm91cE5hbWVzID0gW107XG4gICAgdGhpcy5iYWNrUmVmZXJlbmNlTmFtZXMgPSBbXTtcbiAgfTtcblxuICBSZWdFeHBWYWxpZGF0aW9uU3RhdGUucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQgKHN0YXJ0LCBwYXR0ZXJuLCBmbGFncykge1xuICAgIHZhciB1bmljb2RlU2V0cyA9IGZsYWdzLmluZGV4T2YoXCJ2XCIpICE9PSAtMTtcbiAgICB2YXIgdW5pY29kZSA9IGZsYWdzLmluZGV4T2YoXCJ1XCIpICE9PSAtMTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQgfCAwO1xuICAgIHRoaXMuc291cmNlID0gcGF0dGVybiArIFwiXCI7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICAgIGlmICh1bmljb2RlU2V0cyAmJiB0aGlzLnBhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uID49IDE1KSB7XG4gICAgICB0aGlzLnN3aXRjaFUgPSB0cnVlO1xuICAgICAgdGhpcy5zd2l0Y2hWID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3dpdGNoTiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3dpdGNoVSA9IHVuaWNvZGUgJiYgdGhpcy5wYXJzZXIub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2O1xuICAgICAgdGhpcy5zd2l0Y2hWID0gZmFsc2U7XG4gICAgICB0aGlzLnN3aXRjaE4gPSB1bmljb2RlICYmIHRoaXMucGFyc2VyLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOTtcbiAgICB9XG4gIH07XG5cbiAgUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5yYWlzZSA9IGZ1bmN0aW9uIHJhaXNlIChtZXNzYWdlKSB7XG4gICAgdGhpcy5wYXJzZXIucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCAoXCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogL1wiICsgKHRoaXMuc291cmNlKSArIFwiLzogXCIgKyBtZXNzYWdlKSk7XG4gIH07XG5cbiAgLy8gSWYgdSBmbGFnIGlzIGdpdmVuLCB0aGlzIHJldHVybnMgdGhlIGNvZGUgcG9pbnQgYXQgdGhlIGluZGV4IChpdCBjb21iaW5lcyBhIHN1cnJvZ2F0ZSBwYWlyKS5cbiAgLy8gT3RoZXJ3aXNlLCB0aGlzIHJldHVybnMgdGhlIGNvZGUgdW5pdCBvZiB0aGUgaW5kZXggKGNhbiBiZSBhIHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpcikuXG4gIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBhdCAoaSwgZm9yY2VVKSB7XG4gICAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgICB2YXIgcyA9IHRoaXMuc291cmNlO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgaWYgKGkgPj0gbCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHZhciBjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGlmICghKGZvcmNlVSB8fCB0aGlzLnN3aXRjaFUpIHx8IGMgPD0gMHhEN0ZGIHx8IGMgPj0gMHhFMDAwIHx8IGkgKyAxID49IGwpIHtcbiAgICAgIHJldHVybiBjXG4gICAgfVxuICAgIHZhciBuZXh0ID0gcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICByZXR1cm4gbmV4dCA+PSAweERDMDAgJiYgbmV4dCA8PSAweERGRkYgPyAoYyA8PCAxMCkgKyBuZXh0IC0gMHgzNUZEQzAwIDogY1xuICB9O1xuXG4gIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUubmV4dEluZGV4ID0gZnVuY3Rpb24gbmV4dEluZGV4IChpLCBmb3JjZVUpIHtcbiAgICAgIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICAgIHZhciBzID0gdGhpcy5zb3VyY2U7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICBpZiAoaSA+PSBsKSB7XG4gICAgICByZXR1cm4gbFxuICAgIH1cbiAgICB2YXIgYyA9IHMuY2hhckNvZGVBdChpKSwgbmV4dDtcbiAgICBpZiAoIShmb3JjZVUgfHwgdGhpcy5zd2l0Y2hVKSB8fCBjIDw9IDB4RDdGRiB8fCBjID49IDB4RTAwMCB8fCBpICsgMSA+PSBsIHx8XG4gICAgICAgIChuZXh0ID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweERDMDAgfHwgbmV4dCA+IDB4REZGRikge1xuICAgICAgcmV0dXJuIGkgKyAxXG4gICAgfVxuICAgIHJldHVybiBpICsgMlxuICB9O1xuXG4gIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIGN1cnJlbnQgKGZvcmNlVSkge1xuICAgICAgaWYgKCBmb3JjZVUgPT09IHZvaWQgMCApIGZvcmNlVSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMuYXQodGhpcy5wb3MsIGZvcmNlVSlcbiAgfTtcblxuICBSZWdFeHBWYWxpZGF0aW9uU3RhdGUucHJvdG90eXBlLmxvb2thaGVhZCA9IGZ1bmN0aW9uIGxvb2thaGVhZCAoZm9yY2VVKSB7XG4gICAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5hdCh0aGlzLm5leHRJbmRleCh0aGlzLnBvcywgZm9yY2VVKSwgZm9yY2VVKVxuICB9O1xuXG4gIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUuYWR2YW5jZSA9IGZ1bmN0aW9uIGFkdmFuY2UgKGZvcmNlVSkge1xuICAgICAgaWYgKCBmb3JjZVUgPT09IHZvaWQgMCApIGZvcmNlVSA9IGZhbHNlO1xuXG4gICAgdGhpcy5wb3MgPSB0aGlzLm5leHRJbmRleCh0aGlzLnBvcywgZm9yY2VVKTtcbiAgfTtcblxuICBSZWdFeHBWYWxpZGF0aW9uU3RhdGUucHJvdG90eXBlLmVhdCA9IGZ1bmN0aW9uIGVhdCAoY2gsIGZvcmNlVSkge1xuICAgICAgaWYgKCBmb3JjZVUgPT09IHZvaWQgMCApIGZvcmNlVSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudChmb3JjZVUpID09PSBjaCkge1xuICAgICAgdGhpcy5hZHZhbmNlKGZvcmNlVSk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICBSZWdFeHBWYWxpZGF0aW9uU3RhdGUucHJvdG90eXBlLmVhdENoYXJzID0gZnVuY3Rpb24gZWF0Q2hhcnMgKGNocywgZm9yY2VVKSB7XG4gICAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBjaHM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgY2ggPSBsaXN0W2ldO1xuXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5hdChwb3MsIGZvcmNlVSk7XG4gICAgICBpZiAoY3VycmVudCA9PT0gLTEgfHwgY3VycmVudCAhPT0gY2gpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBwb3MgPSB0aGlzLm5leHRJbmRleChwb3MsIGZvcmNlVSk7XG4gICAgfVxuICAgIHRoaXMucG9zID0gcG9zO1xuICAgIHJldHVybiB0cnVlXG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBmbGFncyBwYXJ0IG9mIGEgZ2l2ZW4gUmVnRXhwTGl0ZXJhbC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWdFeHBWYWxpZGF0aW9uU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byB2YWxpZGF0ZSBSZWdFeHAuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcHAkMS52YWxpZGF0ZVJlZ0V4cEZsYWdzID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgdmFsaWRGbGFncyA9IHN0YXRlLnZhbGlkRmxhZ3M7XG4gICAgdmFyIGZsYWdzID0gc3RhdGUuZmxhZ3M7XG5cbiAgICB2YXIgdSA9IGZhbHNlO1xuICAgIHZhciB2ID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZsYWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZmxhZyA9IGZsYWdzLmNoYXJBdChpKTtcbiAgICAgIGlmICh2YWxpZEZsYWdzLmluZGV4T2YoZmxhZykgPT09IC0xKSB7XG4gICAgICAgIHRoaXMucmFpc2Uoc3RhdGUuc3RhcnQsIFwiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChmbGFncy5pbmRleE9mKGZsYWcsIGkgKyAxKSA+IC0xKSB7XG4gICAgICAgIHRoaXMucmFpc2Uoc3RhdGUuc3RhcnQsIFwiRHVwbGljYXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGZsYWcgPT09IFwidVwiKSB7IHUgPSB0cnVlOyB9XG4gICAgICBpZiAoZmxhZyA9PT0gXCJ2XCIpIHsgdiA9IHRydWU7IH1cbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxNSAmJiB1ICYmIHYpIHtcbiAgICAgIHRoaXMucmFpc2Uoc3RhdGUuc3RhcnQsIFwiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ1wiKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBwYXR0ZXJuIHBhcnQgb2YgYSBnaXZlbiBSZWdFeHBMaXRlcmFsLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZ0V4cFZhbGlkYXRpb25TdGF0ZX0gc3RhdGUgVGhlIHN0YXRlIHRvIHZhbGlkYXRlIFJlZ0V4cC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBwcCQxLnZhbGlkYXRlUmVnRXhwUGF0dGVybiA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdGhpcy5yZWdleHBfcGF0dGVybihzdGF0ZSk7XG5cbiAgICAvLyBUaGUgZ29hbCBzeW1ib2wgZm9yIHRoZSBwYXJzZSBpcyB8UGF0dGVyblt+VSwgfk5dfC4gSWYgdGhlIHJlc3VsdCBvZlxuICAgIC8vIHBhcnNpbmcgY29udGFpbnMgYSB8R3JvdXBOYW1lfCwgcmVwYXJzZSB3aXRoIHRoZSBnb2FsIHN5bWJvbFxuICAgIC8vIHxQYXR0ZXJuW35VLCArTl18IGFuZCB1c2UgdGhpcyByZXN1bHQgaW5zdGVhZC4gVGhyb3cgYSAqU3ludGF4RXJyb3IqXG4gICAgLy8gZXhjZXB0aW9uIGlmIF9QXyBkaWQgbm90IGNvbmZvcm0gdG8gdGhlIGdyYW1tYXIsIGlmIGFueSBlbGVtZW50cyBvZiBfUF9cbiAgICAvLyB3ZXJlIG5vdCBtYXRjaGVkIGJ5IHRoZSBwYXJzZSwgb3IgaWYgYW55IEVhcmx5IEVycm9yIGNvbmRpdGlvbnMgZXhpc3QuXG4gICAgaWYgKCFzdGF0ZS5zd2l0Y2hOICYmIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmIHN0YXRlLmdyb3VwTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3RhdGUuc3dpdGNoTiA9IHRydWU7XG4gICAgICB0aGlzLnJlZ2V4cF9wYXR0ZXJuKHN0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtUGF0dGVyblxuICBwcCQxLnJlZ2V4cF9wYXR0ZXJuID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICBzdGF0ZS5wb3MgPSAwO1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlID0gXCJcIjtcbiAgICBzdGF0ZS5sYXN0QXNzZXJ0aW9uSXNRdWFudGlmaWFibGUgPSBmYWxzZTtcbiAgICBzdGF0ZS5udW1DYXB0dXJpbmdQYXJlbnMgPSAwO1xuICAgIHN0YXRlLm1heEJhY2tSZWZlcmVuY2UgPSAwO1xuICAgIHN0YXRlLmdyb3VwTmFtZXMubGVuZ3RoID0gMDtcbiAgICBzdGF0ZS5iYWNrUmVmZXJlbmNlTmFtZXMubGVuZ3RoID0gMDtcblxuICAgIHRoaXMucmVnZXhwX2Rpc2p1bmN0aW9uKHN0YXRlKTtcblxuICAgIGlmIChzdGF0ZS5wb3MgIT09IHN0YXRlLnNvdXJjZS5sZW5ndGgpIHtcbiAgICAgIC8vIE1ha2UgdGhlIHNhbWUgbWVzc2FnZXMgYXMgVjguXG4gICAgICBpZiAoc3RhdGUuZWF0KDB4MjkgLyogKSAqLykpIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJVbm1hdGNoZWQgJyknXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmVhdCgweDVEIC8qIF0gKi8pIHx8IHN0YXRlLmVhdCgweDdEIC8qIH0gKi8pKSB7XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiTG9uZSBxdWFudGlmaWVyIGJyYWNrZXRzXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhdGUubWF4QmFja1JlZmVyZW5jZSA+IHN0YXRlLm51bUNhcHR1cmluZ1BhcmVucykge1xuICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGVzY2FwZVwiKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBzdGF0ZS5iYWNrUmVmZXJlbmNlTmFtZXM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgbmFtZSA9IGxpc3RbaV07XG5cbiAgICAgIGlmIChzdGF0ZS5ncm91cE5hbWVzLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBuYW1lZCBjYXB0dXJlIHJlZmVyZW5jZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLURpc2p1bmN0aW9uXG4gIHBwJDEucmVnZXhwX2Rpc2p1bmN0aW9uID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB0aGlzLnJlZ2V4cF9hbHRlcm5hdGl2ZShzdGF0ZSk7XG4gICAgd2hpbGUgKHN0YXRlLmVhdCgweDdDIC8qIHwgKi8pKSB7XG4gICAgICB0aGlzLnJlZ2V4cF9hbHRlcm5hdGl2ZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gTWFrZSB0aGUgc2FtZSBtZXNzYWdlIGFzIFY4LlxuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRRdWFudGlmaWVyKHN0YXRlLCB0cnVlKSkge1xuICAgICAgc3RhdGUucmFpc2UoXCJOb3RoaW5nIHRvIHJlcGVhdFwiKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmVhdCgweDdCIC8qIHsgKi8pKSB7XG4gICAgICBzdGF0ZS5yYWlzZShcIkxvbmUgcXVhbnRpZmllciBicmFja2V0c1wiKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQWx0ZXJuYXRpdmVcbiAgcHAkMS5yZWdleHBfYWx0ZXJuYXRpdmUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHdoaWxlIChzdGF0ZS5wb3MgPCBzdGF0ZS5zb3VyY2UubGVuZ3RoICYmIHRoaXMucmVnZXhwX2VhdFRlcm0oc3RhdGUpKVxuICAgICAgeyB9XG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLVRlcm1cbiAgcHAkMS5yZWdleHBfZWF0VGVybSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdEFzc2VydGlvbihzdGF0ZSkpIHtcbiAgICAgIC8vIEhhbmRsZSBgUXVhbnRpZmlhYmxlQXNzZXJ0aW9uIFF1YW50aWZpZXJgIGFsdGVybmF0aXZlLlxuICAgICAgLy8gYHN0YXRlLmxhc3RBc3NlcnRpb25Jc1F1YW50aWZpYWJsZWAgaXMgdHJ1ZSBpZiB0aGUgbGFzdCBlYXRlbiBBc3NlcnRpb25cbiAgICAgIC8vIGlzIGEgUXVhbnRpZmlhYmxlQXNzZXJ0aW9uLlxuICAgICAgaWYgKHN0YXRlLmxhc3RBc3NlcnRpb25Jc1F1YW50aWZpYWJsZSAmJiB0aGlzLnJlZ2V4cF9lYXRRdWFudGlmaWVyKHN0YXRlKSkge1xuICAgICAgICAvLyBNYWtlIHRoZSBzYW1lIG1lc3NhZ2UgYXMgVjguXG4gICAgICAgIGlmIChzdGF0ZS5zd2l0Y2hVKSB7XG4gICAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHF1YW50aWZpZXJcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnN3aXRjaFUgPyB0aGlzLnJlZ2V4cF9lYXRBdG9tKHN0YXRlKSA6IHRoaXMucmVnZXhwX2VhdEV4dGVuZGVkQXRvbShzdGF0ZSkpIHtcbiAgICAgIHRoaXMucmVnZXhwX2VhdFF1YW50aWZpZXIoc3RhdGUpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItQXNzZXJ0aW9uXG4gIHBwJDEucmVnZXhwX2VhdEFzc2VydGlvbiA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgIHN0YXRlLmxhc3RBc3NlcnRpb25Jc1F1YW50aWZpYWJsZSA9IGZhbHNlO1xuXG4gICAgLy8gXiwgJFxuICAgIGlmIChzdGF0ZS5lYXQoMHg1RSAvKiBeICovKSB8fCBzdGF0ZS5lYXQoMHgyNCAvKiAkICovKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBcXGIgXFxCXG4gICAgaWYgKHN0YXRlLmVhdCgweDVDIC8qIFxcICovKSkge1xuICAgICAgaWYgKHN0YXRlLmVhdCgweDQyIC8qIEIgKi8pIHx8IHN0YXRlLmVhdCgweDYyIC8qIGIgKi8pKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG5cbiAgICAvLyBMb29rYWhlYWQgLyBMb29rYmVoaW5kXG4gICAgaWYgKHN0YXRlLmVhdCgweDI4IC8qICggKi8pICYmIHN0YXRlLmVhdCgweDNGIC8qID8gKi8pKSB7XG4gICAgICB2YXIgbG9va2JlaGluZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5KSB7XG4gICAgICAgIGxvb2tiZWhpbmQgPSBzdGF0ZS5lYXQoMHgzQyAvKiA8ICovKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5lYXQoMHgzRCAvKiA9ICovKSB8fCBzdGF0ZS5lYXQoMHgyMSAvKiAhICovKSkge1xuICAgICAgICB0aGlzLnJlZ2V4cF9kaXNqdW5jdGlvbihzdGF0ZSk7XG4gICAgICAgIGlmICghc3RhdGUuZWF0KDB4MjkgLyogKSAqLykpIHtcbiAgICAgICAgICBzdGF0ZS5yYWlzZShcIlVudGVybWluYXRlZCBncm91cFwiKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5sYXN0QXNzZXJ0aW9uSXNRdWFudGlmaWFibGUgPSAhbG9va2JlaGluZDtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1RdWFudGlmaWVyXG4gIHBwJDEucmVnZXhwX2VhdFF1YW50aWZpZXIgPSBmdW5jdGlvbihzdGF0ZSwgbm9FcnJvcikge1xuICAgIGlmICggbm9FcnJvciA9PT0gdm9pZCAwICkgbm9FcnJvciA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdFF1YW50aWZpZXJQcmVmaXgoc3RhdGUsIG5vRXJyb3IpKSB7XG4gICAgICBzdGF0ZS5lYXQoMHgzRiAvKiA/ICovKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLVF1YW50aWZpZXJQcmVmaXhcbiAgcHAkMS5yZWdleHBfZWF0UXVhbnRpZmllclByZWZpeCA9IGZ1bmN0aW9uKHN0YXRlLCBub0Vycm9yKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN0YXRlLmVhdCgweDJBIC8qICogKi8pIHx8XG4gICAgICBzdGF0ZS5lYXQoMHgyQiAvKiArICovKSB8fFxuICAgICAgc3RhdGUuZWF0KDB4M0YgLyogPyAqLykgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdEJyYWNlZFF1YW50aWZpZXIoc3RhdGUsIG5vRXJyb3IpXG4gICAgKVxuICB9O1xuICBwcCQxLnJlZ2V4cF9lYXRCcmFjZWRRdWFudGlmaWVyID0gZnVuY3Rpb24oc3RhdGUsIG5vRXJyb3IpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgaWYgKHN0YXRlLmVhdCgweDdCIC8qIHsgKi8pKSB7XG4gICAgICB2YXIgbWluID0gMCwgbWF4ID0gLTE7XG4gICAgICBpZiAodGhpcy5yZWdleHBfZWF0RGVjaW1hbERpZ2l0cyhzdGF0ZSkpIHtcbiAgICAgICAgbWluID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgICBpZiAoc3RhdGUuZWF0KDB4MkMgLyogLCAqLykgJiYgdGhpcy5yZWdleHBfZWF0RGVjaW1hbERpZ2l0cyhzdGF0ZSkpIHtcbiAgICAgICAgICBtYXggPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmVhdCgweDdEIC8qIH0gKi8pKSB7XG4gICAgICAgICAgLy8gU3ludGF4RXJyb3IgaW4gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3NlYy10ZXJtXG4gICAgICAgICAgaWYgKG1heCAhPT0gLTEgJiYgbWF4IDwgbWluICYmICFub0Vycm9yKSB7XG4gICAgICAgICAgICBzdGF0ZS5yYWlzZShcIm51bWJlcnMgb3V0IG9mIG9yZGVyIGluIHt9IHF1YW50aWZpZXJcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zd2l0Y2hVICYmICFub0Vycm9yKSB7XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiSW5jb21wbGV0ZSBxdWFudGlmaWVyXCIpO1xuICAgICAgfVxuICAgICAgc3RhdGUucG9zID0gc3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUF0b21cbiAgcHAkMS5yZWdleHBfZWF0QXRvbSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucmVnZXhwX2VhdFBhdHRlcm5DaGFyYWN0ZXJzKHN0YXRlKSB8fFxuICAgICAgc3RhdGUuZWF0KDB4MkUgLyogLiAqLykgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdFJldmVyc2VTb2xpZHVzQXRvbUVzY2FwZShzdGF0ZSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckNsYXNzKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0VW5jYXB0dXJpbmdHcm91cChzdGF0ZSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdENhcHR1cmluZ0dyb3VwKHN0YXRlKVxuICAgIClcbiAgfTtcbiAgcHAkMS5yZWdleHBfZWF0UmV2ZXJzZVNvbGlkdXNBdG9tRXNjYXBlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgaWYgKHN0YXRlLmVhdCgweDVDIC8qIFxcICovKSkge1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdEF0b21Fc2NhcGUoc3RhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG4gIHBwJDEucmVnZXhwX2VhdFVuY2FwdHVyaW5nR3JvdXAgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICBpZiAoc3RhdGUuZWF0KDB4MjggLyogKCAqLykpIHtcbiAgICAgIGlmIChzdGF0ZS5lYXQoMHgzRiAvKiA/ICovKSAmJiBzdGF0ZS5lYXQoMHgzQSAvKiA6ICovKSkge1xuICAgICAgICB0aGlzLnJlZ2V4cF9kaXNqdW5jdGlvbihzdGF0ZSk7XG4gICAgICAgIGlmIChzdGF0ZS5lYXQoMHgyOSAvKiApICovKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUucmFpc2UoXCJVbnRlcm1pbmF0ZWQgZ3JvdXBcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG4gIHBwJDEucmVnZXhwX2VhdENhcHR1cmluZ0dyb3VwID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUuZWF0KDB4MjggLyogKCAqLykpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSkge1xuICAgICAgICB0aGlzLnJlZ2V4cF9ncm91cFNwZWNpZmllcihzdGF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmN1cnJlbnQoKSA9PT0gMHgzRiAvKiA/ICovKSB7XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBncm91cFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVnZXhwX2Rpc2p1bmN0aW9uKHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZS5lYXQoMHgyOSAvKiApICovKSkge1xuICAgICAgICBzdGF0ZS5udW1DYXB0dXJpbmdQYXJlbnMgKz0gMTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHN0YXRlLnJhaXNlKFwiVW50ZXJtaW5hdGVkIGdyb3VwXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItRXh0ZW5kZWRBdG9tXG4gIHBwJDEucmVnZXhwX2VhdEV4dGVuZGVkQXRvbSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN0YXRlLmVhdCgweDJFIC8qIC4gKi8pIHx8XG4gICAgICB0aGlzLnJlZ2V4cF9lYXRSZXZlcnNlU29saWR1c0F0b21Fc2NhcGUoc3RhdGUpIHx8XG4gICAgICB0aGlzLnJlZ2V4cF9lYXRDaGFyYWN0ZXJDbGFzcyhzdGF0ZSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdFVuY2FwdHVyaW5nR3JvdXAoc3RhdGUpIHx8XG4gICAgICB0aGlzLnJlZ2V4cF9lYXRDYXB0dXJpbmdHcm91cChzdGF0ZSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdEludmFsaWRCcmFjZWRRdWFudGlmaWVyKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0RXh0ZW5kZWRQYXR0ZXJuQ2hhcmFjdGVyKHN0YXRlKVxuICAgIClcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItSW52YWxpZEJyYWNlZFF1YW50aWZpZXJcbiAgcHAkMS5yZWdleHBfZWF0SW52YWxpZEJyYWNlZFF1YW50aWZpZXIgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRCcmFjZWRRdWFudGlmaWVyKHN0YXRlLCB0cnVlKSkge1xuICAgICAgc3RhdGUucmFpc2UoXCJOb3RoaW5nIHRvIHJlcGVhdFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtU3ludGF4Q2hhcmFjdGVyXG4gIHBwJDEucmVnZXhwX2VhdFN5bnRheENoYXJhY3RlciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICAgIGlmIChpc1N5bnRheENoYXJhY3RlcihjaCkpIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG4gIGZ1bmN0aW9uIGlzU3ludGF4Q2hhcmFjdGVyKGNoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNoID09PSAweDI0IC8qICQgKi8gfHxcbiAgICAgIGNoID49IDB4MjggLyogKCAqLyAmJiBjaCA8PSAweDJCIC8qICsgKi8gfHxcbiAgICAgIGNoID09PSAweDJFIC8qIC4gKi8gfHxcbiAgICAgIGNoID09PSAweDNGIC8qID8gKi8gfHxcbiAgICAgIGNoID49IDB4NUIgLyogWyAqLyAmJiBjaCA8PSAweDVFIC8qIF4gKi8gfHxcbiAgICAgIGNoID49IDB4N0IgLyogeyAqLyAmJiBjaCA8PSAweDdEIC8qIH0gKi9cbiAgICApXG4gIH1cblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1QYXR0ZXJuQ2hhcmFjdGVyXG4gIC8vIEJ1dCBlYXQgZWFnZXIuXG4gIHBwJDEucmVnZXhwX2VhdFBhdHRlcm5DaGFyYWN0ZXJzID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgdmFyIGNoID0gMDtcbiAgICB3aGlsZSAoKGNoID0gc3RhdGUuY3VycmVudCgpKSAhPT0gLTEgJiYgIWlzU3ludGF4Q2hhcmFjdGVyKGNoKSkge1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUucG9zICE9PSBzdGFydFxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1FeHRlbmRlZFBhdHRlcm5DaGFyYWN0ZXJcbiAgcHAkMS5yZWdleHBfZWF0RXh0ZW5kZWRQYXR0ZXJuQ2hhcmFjdGVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gICAgaWYgKFxuICAgICAgY2ggIT09IC0xICYmXG4gICAgICBjaCAhPT0gMHgyNCAvKiAkICovICYmXG4gICAgICAhKGNoID49IDB4MjggLyogKCAqLyAmJiBjaCA8PSAweDJCIC8qICsgKi8pICYmXG4gICAgICBjaCAhPT0gMHgyRSAvKiAuICovICYmXG4gICAgICBjaCAhPT0gMHgzRiAvKiA/ICovICYmXG4gICAgICBjaCAhPT0gMHg1QiAvKiBbICovICYmXG4gICAgICBjaCAhPT0gMHg1RSAvKiBeICovICYmXG4gICAgICBjaCAhPT0gMHg3QyAvKiB8ICovXG4gICAgKSB7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBHcm91cFNwZWNpZmllciA6OlxuICAvLyAgIFtlbXB0eV1cbiAgLy8gICBgP2AgR3JvdXBOYW1lXG4gIHBwJDEucmVnZXhwX2dyb3VwU3BlY2lmaWVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUuZWF0KDB4M0YgLyogPyAqLykpIHtcbiAgICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRHcm91cE5hbWUoc3RhdGUpKSB7XG4gICAgICAgIGlmIChzdGF0ZS5ncm91cE5hbWVzLmluZGV4T2Yoc3RhdGUubGFzdFN0cmluZ1ZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgICBzdGF0ZS5yYWlzZShcIkR1cGxpY2F0ZSBjYXB0dXJlIGdyb3VwIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZ3JvdXBOYW1lcy5wdXNoKHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgIH1cbiAgfTtcblxuICAvLyBHcm91cE5hbWUgOjpcbiAgLy8gICBgPGAgUmVnRXhwSWRlbnRpZmllck5hbWUgYD5gXG4gIC8vIE5vdGU6IHRoaXMgdXBkYXRlcyBgc3RhdGUubGFzdFN0cmluZ1ZhbHVlYCBwcm9wZXJ0eSB3aXRoIHRoZSBlYXRlbiBuYW1lLlxuICBwcCQxLnJlZ2V4cF9lYXRHcm91cE5hbWUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSA9IFwiXCI7XG4gICAgaWYgKHN0YXRlLmVhdCgweDNDIC8qIDwgKi8pKSB7XG4gICAgICBpZiAodGhpcy5yZWdleHBfZWF0UmVnRXhwSWRlbnRpZmllck5hbWUoc3RhdGUpICYmIHN0YXRlLmVhdCgweDNFIC8qID4gKi8pKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgY2FwdHVyZSBncm91cCBuYW1lXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBSZWdFeHBJZGVudGlmaWVyTmFtZSA6OlxuICAvLyAgIFJlZ0V4cElkZW50aWZpZXJTdGFydFxuICAvLyAgIFJlZ0V4cElkZW50aWZpZXJOYW1lIFJlZ0V4cElkZW50aWZpZXJQYXJ0XG4gIC8vIE5vdGU6IHRoaXMgdXBkYXRlcyBgc3RhdGUubGFzdFN0cmluZ1ZhbHVlYCBwcm9wZXJ0eSB3aXRoIHRoZSBlYXRlbiBuYW1lLlxuICBwcCQxLnJlZ2V4cF9lYXRSZWdFeHBJZGVudGlmaWVyTmFtZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlID0gXCJcIjtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0UmVnRXhwSWRlbnRpZmllclN0YXJ0KHN0YXRlKSkge1xuICAgICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlICs9IGNvZGVQb2ludFRvU3RyaW5nKHN0YXRlLmxhc3RJbnRWYWx1ZSk7XG4gICAgICB3aGlsZSAodGhpcy5yZWdleHBfZWF0UmVnRXhwSWRlbnRpZmllclBhcnQoc3RhdGUpKSB7XG4gICAgICAgIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSArPSBjb2RlUG9pbnRUb1N0cmluZyhzdGF0ZS5sYXN0SW50VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gUmVnRXhwSWRlbnRpZmllclN0YXJ0IDo6XG4gIC8vICAgVW5pY29kZUlEU3RhcnRcbiAgLy8gICBgJGBcbiAgLy8gICBgX2BcbiAgLy8gICBgXFxgIFJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZVsrVV1cbiAgcHAkMS5yZWdleHBfZWF0UmVnRXhwSWRlbnRpZmllclN0YXJ0ID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgdmFyIGZvcmNlVSA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMTtcbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KGZvcmNlVSk7XG4gICAgc3RhdGUuYWR2YW5jZShmb3JjZVUpO1xuXG4gICAgaWYgKGNoID09PSAweDVDIC8qIFxcICovICYmIHRoaXMucmVnZXhwX2VhdFJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZShzdGF0ZSwgZm9yY2VVKSkge1xuICAgICAgY2ggPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgfVxuICAgIGlmIChpc1JlZ0V4cElkZW50aWZpZXJTdGFydChjaCkpIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcbiAgZnVuY3Rpb24gaXNSZWdFeHBJZGVudGlmaWVyU3RhcnQoY2gpIHtcbiAgICByZXR1cm4gaXNJZGVudGlmaWVyU3RhcnQoY2gsIHRydWUpIHx8IGNoID09PSAweDI0IC8qICQgKi8gfHwgY2ggPT09IDB4NUYgLyogXyAqL1xuICB9XG5cbiAgLy8gUmVnRXhwSWRlbnRpZmllclBhcnQgOjpcbiAgLy8gICBVbmljb2RlSURDb250aW51ZVxuICAvLyAgIGAkYFxuICAvLyAgIGBfYFxuICAvLyAgIGBcXGAgUmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlWytVXVxuICAvLyAgIDxaV05KPlxuICAvLyAgIDxaV0o+XG4gIHBwJDEucmVnZXhwX2VhdFJlZ0V4cElkZW50aWZpZXJQYXJ0ID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgdmFyIGZvcmNlVSA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMTtcbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KGZvcmNlVSk7XG4gICAgc3RhdGUuYWR2YW5jZShmb3JjZVUpO1xuXG4gICAgaWYgKGNoID09PSAweDVDIC8qIFxcICovICYmIHRoaXMucmVnZXhwX2VhdFJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZShzdGF0ZSwgZm9yY2VVKSkge1xuICAgICAgY2ggPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgfVxuICAgIGlmIChpc1JlZ0V4cElkZW50aWZpZXJQYXJ0KGNoKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gY2g7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIHJldHVybiBmYWxzZVxuICB9O1xuICBmdW5jdGlvbiBpc1JlZ0V4cElkZW50aWZpZXJQYXJ0KGNoKSB7XG4gICAgcmV0dXJuIGlzSWRlbnRpZmllckNoYXIoY2gsIHRydWUpIHx8IGNoID09PSAweDI0IC8qICQgKi8gfHwgY2ggPT09IDB4NUYgLyogXyAqLyB8fCBjaCA9PT0gMHgyMDBDIC8qIDxaV05KPiAqLyB8fCBjaCA9PT0gMHgyMDBEIC8qIDxaV0o+ICovXG4gIH1cblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItQXRvbUVzY2FwZVxuICBwcCQxLnJlZ2V4cF9lYXRBdG9tRXNjYXBlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlZ2V4cF9lYXRCYWNrUmVmZXJlbmNlKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0Q2hhcmFjdGVyQ2xhc3NFc2NhcGUoc3RhdGUpIHx8XG4gICAgICB0aGlzLnJlZ2V4cF9lYXRDaGFyYWN0ZXJFc2NhcGUoc3RhdGUpIHx8XG4gICAgICAoc3RhdGUuc3dpdGNoTiAmJiB0aGlzLnJlZ2V4cF9lYXRLR3JvdXBOYW1lKHN0YXRlKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChzdGF0ZS5zd2l0Y2hVKSB7XG4gICAgICAvLyBNYWtlIHRoZSBzYW1lIG1lc3NhZ2UgYXMgVjguXG4gICAgICBpZiAoc3RhdGUuY3VycmVudCgpID09PSAweDYzIC8qIGMgKi8pIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHVuaWNvZGUgZXNjYXBlXCIpO1xuICAgICAgfVxuICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGVzY2FwZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG4gIHBwJDEucmVnZXhwX2VhdEJhY2tSZWZlcmVuY2UgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0RGVjaW1hbEVzY2FwZShzdGF0ZSkpIHtcbiAgICAgIHZhciBuID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgaWYgKHN0YXRlLnN3aXRjaFUpIHtcbiAgICAgICAgLy8gRm9yIFN5bnRheEVycm9yIGluIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNzZWMtYXRvbWVzY2FwZVxuICAgICAgICBpZiAobiA+IHN0YXRlLm1heEJhY2tSZWZlcmVuY2UpIHtcbiAgICAgICAgICBzdGF0ZS5tYXhCYWNrUmVmZXJlbmNlID0gbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKG4gPD0gc3RhdGUubnVtQ2FwdHVyaW5nUGFyZW5zKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG4gIHBwJDEucmVnZXhwX2VhdEtHcm91cE5hbWUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5lYXQoMHg2QiAvKiBrICovKSkge1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdEdyb3VwTmFtZShzdGF0ZSkpIHtcbiAgICAgICAgc3RhdGUuYmFja1JlZmVyZW5jZU5hbWVzLnB1c2goc3RhdGUubGFzdFN0cmluZ1ZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBuYW1lZCByZWZlcmVuY2VcIik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1DaGFyYWN0ZXJFc2NhcGVcbiAgcHAkMS5yZWdleHBfZWF0Q2hhcmFjdGVyRXNjYXBlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yZWdleHBfZWF0Q29udHJvbEVzY2FwZShzdGF0ZSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdENDb250cm9sTGV0dGVyKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0WmVybyhzdGF0ZSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdEhleEVzY2FwZVNlcXVlbmNlKHN0YXRlKSB8fFxuICAgICAgdGhpcy5yZWdleHBfZWF0UmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlKHN0YXRlLCBmYWxzZSkgfHxcbiAgICAgICghc3RhdGUuc3dpdGNoVSAmJiB0aGlzLnJlZ2V4cF9lYXRMZWdhY3lPY3RhbEVzY2FwZVNlcXVlbmNlKHN0YXRlKSkgfHxcbiAgICAgIHRoaXMucmVnZXhwX2VhdElkZW50aXR5RXNjYXBlKHN0YXRlKVxuICAgIClcbiAgfTtcbiAgcHAkMS5yZWdleHBfZWF0Q0NvbnRyb2xMZXR0ZXIgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICBpZiAoc3RhdGUuZWF0KDB4NjMgLyogYyAqLykpIHtcbiAgICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRDb250cm9sTGV0dGVyKHN0YXRlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgc3RhdGUucG9zID0gc3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuICBwcCQxLnJlZ2V4cF9lYXRaZXJvID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUuY3VycmVudCgpID09PSAweDMwIC8qIDAgKi8gJiYgIWlzRGVjaW1hbERpZ2l0KHN0YXRlLmxvb2thaGVhZCgpKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gMDtcbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUNvbnRyb2xFc2NhcGVcbiAgcHAkMS5yZWdleHBfZWF0Q29udHJvbEVzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICAgIGlmIChjaCA9PT0gMHg3NCAvKiB0ICovKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDA5OyAvKiBcXHQgKi9cbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChjaCA9PT0gMHg2RSAvKiBuICovKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDBBOyAvKiBcXG4gKi9cbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChjaCA9PT0gMHg3NiAvKiB2ICovKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDBCOyAvKiBcXHYgKi9cbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChjaCA9PT0gMHg2NiAvKiBmICovKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDBDOyAvKiBcXGYgKi9cbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChjaCA9PT0gMHg3MiAvKiByICovKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDBEOyAvKiBcXHIgKi9cbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUNvbnRyb2xMZXR0ZXJcbiAgcHAkMS5yZWdleHBfZWF0Q29udHJvbExldHRlciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICAgIGlmIChpc0NvbnRyb2xMZXR0ZXIoY2gpKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaCAlIDB4MjA7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcbiAgZnVuY3Rpb24gaXNDb250cm9sTGV0dGVyKGNoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIChjaCA+PSAweDQxIC8qIEEgKi8gJiYgY2ggPD0gMHg1QSAvKiBaICovKSB8fFxuICAgICAgKGNoID49IDB4NjEgLyogYSAqLyAmJiBjaCA8PSAweDdBIC8qIHogKi8pXG4gICAgKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtUmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlXG4gIHBwJDEucmVnZXhwX2VhdFJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZSA9IGZ1bmN0aW9uKHN0YXRlLCBmb3JjZVUpIHtcbiAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgdmFyIHN3aXRjaFUgPSBmb3JjZVUgfHwgc3RhdGUuc3dpdGNoVTtcblxuICAgIGlmIChzdGF0ZS5lYXQoMHg3NSAvKiB1ICovKSkge1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdEZpeGVkSGV4RGlnaXRzKHN0YXRlLCA0KSkge1xuICAgICAgICB2YXIgbGVhZCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgICAgaWYgKHN3aXRjaFUgJiYgbGVhZCA+PSAweEQ4MDAgJiYgbGVhZCA8PSAweERCRkYpIHtcbiAgICAgICAgICB2YXIgbGVhZFN1cnJvZ2F0ZUVuZCA9IHN0YXRlLnBvcztcbiAgICAgICAgICBpZiAoc3RhdGUuZWF0KDB4NUMgLyogXFwgKi8pICYmIHN0YXRlLmVhdCgweDc1IC8qIHUgKi8pICYmIHRoaXMucmVnZXhwX2VhdEZpeGVkSGV4RGlnaXRzKHN0YXRlLCA0KSkge1xuICAgICAgICAgICAgdmFyIHRyYWlsID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgICAgICAgaWYgKHRyYWlsID49IDB4REMwMCAmJiB0cmFpbCA8PSAweERGRkYpIHtcbiAgICAgICAgICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGUucG9zID0gbGVhZFN1cnJvZ2F0ZUVuZDtcbiAgICAgICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBsZWFkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHN3aXRjaFUgJiZcbiAgICAgICAgc3RhdGUuZWF0KDB4N0IgLyogeyAqLykgJiZcbiAgICAgICAgdGhpcy5yZWdleHBfZWF0SGV4RGlnaXRzKHN0YXRlKSAmJlxuICAgICAgICBzdGF0ZS5lYXQoMHg3RCAvKiB9ICovKSAmJlxuICAgICAgICBpc1ZhbGlkVW5pY29kZShzdGF0ZS5sYXN0SW50VmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChzd2l0Y2hVKSB7XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCB1bmljb2RlIGVzY2FwZVwiKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuICBmdW5jdGlvbiBpc1ZhbGlkVW5pY29kZShjaCkge1xuICAgIHJldHVybiBjaCA+PSAwICYmIGNoIDw9IDB4MTBGRkZGXG4gIH1cblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItSWRlbnRpdHlFc2NhcGVcbiAgcHAkMS5yZWdleHBfZWF0SWRlbnRpdHlFc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5zd2l0Y2hVKSB7XG4gICAgICBpZiAodGhpcy5yZWdleHBfZWF0U3ludGF4Q2hhcmFjdGVyKHN0YXRlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmVhdCgweDJGIC8qIC8gKi8pKSB7XG4gICAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MkY7IC8qIC8gKi9cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgICBpZiAoY2ggIT09IDB4NjMgLyogYyAqLyAmJiAoIXN0YXRlLnN3aXRjaE4gfHwgY2ggIT09IDB4NkIgLyogayAqLykpIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1EZWNpbWFsRXNjYXBlXG4gIHBwJDEucmVnZXhwX2VhdERlY2ltYWxFc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICAgIGlmIChjaCA+PSAweDMxIC8qIDEgKi8gJiYgY2ggPD0gMHgzOSAvKiA5ICovKSB7XG4gICAgICBkbyB7XG4gICAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDEwICogc3RhdGUubGFzdEludFZhbHVlICsgKGNoIC0gMHgzMCAvKiAwICovKTtcbiAgICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgfSB3aGlsZSAoKGNoID0gc3RhdGUuY3VycmVudCgpKSA+PSAweDMwIC8qIDAgKi8gJiYgY2ggPD0gMHgzOSAvKiA5ICovKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gUmV0dXJuIHZhbHVlcyB1c2VkIGJ5IGNoYXJhY3RlciBzZXQgcGFyc2luZyBtZXRob2RzLCBuZWVkZWQgdG9cbiAgLy8gZm9yYmlkIG5lZ2F0aW9uIG9mIHNldHMgdGhhdCBjYW4gbWF0Y2ggc3RyaW5ncy5cbiAgdmFyIENoYXJTZXROb25lID0gMDsgLy8gTm90aGluZyBwYXJzZWRcbiAgdmFyIENoYXJTZXRPayA9IDE7IC8vIENvbnN0cnVjdCBwYXJzZWQsIGNhbm5vdCBjb250YWluIHN0cmluZ3NcbiAgdmFyIENoYXJTZXRTdHJpbmcgPSAyOyAvLyBDb25zdHJ1Y3QgcGFyc2VkLCBjYW4gY29udGFpbiBzdHJpbmdzXG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQ2hhcmFjdGVyQ2xhc3NFc2NhcGVcbiAgcHAkMS5yZWdleHBfZWF0Q2hhcmFjdGVyQ2xhc3NFc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcblxuICAgIGlmIChpc0NoYXJhY3RlckNsYXNzRXNjYXBlKGNoKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gLTE7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gQ2hhclNldE9rXG4gICAgfVxuXG4gICAgdmFyIG5lZ2F0ZSA9IGZhbHNlO1xuICAgIGlmIChcbiAgICAgIHN0YXRlLnN3aXRjaFUgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmXG4gICAgICAoKG5lZ2F0ZSA9IGNoID09PSAweDUwIC8qIFAgKi8pIHx8IGNoID09PSAweDcwIC8qIHAgKi8pXG4gICAgKSB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAtMTtcbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBpZiAoXG4gICAgICAgIHN0YXRlLmVhdCgweDdCIC8qIHsgKi8pICYmXG4gICAgICAgIChyZXN1bHQgPSB0aGlzLnJlZ2V4cF9lYXRVbmljb2RlUHJvcGVydHlWYWx1ZUV4cHJlc3Npb24oc3RhdGUpKSAmJlxuICAgICAgICBzdGF0ZS5lYXQoMHg3RCAvKiB9ICovKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZWdhdGUgJiYgcmVzdWx0ID09PSBDaGFyU2V0U3RyaW5nKSB7IHN0YXRlLnJhaXNlKFwiSW52YWxpZCBwcm9wZXJ0eSBuYW1lXCIpOyB9XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBwcm9wZXJ0eSBuYW1lXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBDaGFyU2V0Tm9uZVxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzQ2hhcmFjdGVyQ2xhc3NFc2NhcGUoY2gpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2ggPT09IDB4NjQgLyogZCAqLyB8fFxuICAgICAgY2ggPT09IDB4NDQgLyogRCAqLyB8fFxuICAgICAgY2ggPT09IDB4NzMgLyogcyAqLyB8fFxuICAgICAgY2ggPT09IDB4NTMgLyogUyAqLyB8fFxuICAgICAgY2ggPT09IDB4NzcgLyogdyAqLyB8fFxuICAgICAgY2ggPT09IDB4NTcgLyogVyAqL1xuICAgIClcbiAgfVxuXG4gIC8vIFVuaWNvZGVQcm9wZXJ0eVZhbHVlRXhwcmVzc2lvbiA6OlxuICAvLyAgIFVuaWNvZGVQcm9wZXJ0eU5hbWUgYD1gIFVuaWNvZGVQcm9wZXJ0eVZhbHVlXG4gIC8vICAgTG9uZVVuaWNvZGVQcm9wZXJ0eU5hbWVPclZhbHVlXG4gIHBwJDEucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eVZhbHVlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuXG4gICAgLy8gVW5pY29kZVByb3BlcnR5TmFtZSBgPWAgVW5pY29kZVByb3BlcnR5VmFsdWVcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0VW5pY29kZVByb3BlcnR5TmFtZShzdGF0ZSkgJiYgc3RhdGUuZWF0KDB4M0QgLyogPSAqLykpIHtcbiAgICAgIHZhciBuYW1lID0gc3RhdGUubGFzdFN0cmluZ1ZhbHVlO1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eVZhbHVlKHN0YXRlKSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBzdGF0ZS5sYXN0U3RyaW5nVmFsdWU7XG4gICAgICAgIHRoaXMucmVnZXhwX3ZhbGlkYXRlVW5pY29kZVByb3BlcnR5TmFtZUFuZFZhbHVlKHN0YXRlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBDaGFyU2V0T2tcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGUucG9zID0gc3RhcnQ7XG5cbiAgICAvLyBMb25lVW5pY29kZVByb3BlcnR5TmFtZU9yVmFsdWVcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0TG9uZVVuaWNvZGVQcm9wZXJ0eU5hbWVPclZhbHVlKHN0YXRlKSkge1xuICAgICAgdmFyIG5hbWVPclZhbHVlID0gc3RhdGUubGFzdFN0cmluZ1ZhbHVlO1xuICAgICAgcmV0dXJuIHRoaXMucmVnZXhwX3ZhbGlkYXRlVW5pY29kZVByb3BlcnR5TmFtZU9yVmFsdWUoc3RhdGUsIG5hbWVPclZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gQ2hhclNldE5vbmVcbiAgfTtcblxuICBwcCQxLnJlZ2V4cF92YWxpZGF0ZVVuaWNvZGVQcm9wZXJ0eU5hbWVBbmRWYWx1ZSA9IGZ1bmN0aW9uKHN0YXRlLCBuYW1lLCB2YWx1ZSkge1xuICAgIGlmICghaGFzT3duKHN0YXRlLnVuaWNvZGVQcm9wZXJ0aWVzLm5vbkJpbmFyeSwgbmFtZSkpXG4gICAgICB7IHN0YXRlLnJhaXNlKFwiSW52YWxpZCBwcm9wZXJ0eSBuYW1lXCIpOyB9XG4gICAgaWYgKCFzdGF0ZS51bmljb2RlUHJvcGVydGllcy5ub25CaW5hcnlbbmFtZV0udGVzdCh2YWx1ZSkpXG4gICAgICB7IHN0YXRlLnJhaXNlKFwiSW52YWxpZCBwcm9wZXJ0eSB2YWx1ZVwiKTsgfVxuICB9O1xuXG4gIHBwJDEucmVnZXhwX3ZhbGlkYXRlVW5pY29kZVByb3BlcnR5TmFtZU9yVmFsdWUgPSBmdW5jdGlvbihzdGF0ZSwgbmFtZU9yVmFsdWUpIHtcbiAgICBpZiAoc3RhdGUudW5pY29kZVByb3BlcnRpZXMuYmluYXJ5LnRlc3QobmFtZU9yVmFsdWUpKSB7IHJldHVybiBDaGFyU2V0T2sgfVxuICAgIGlmIChzdGF0ZS5zd2l0Y2hWICYmIHN0YXRlLnVuaWNvZGVQcm9wZXJ0aWVzLmJpbmFyeU9mU3RyaW5ncy50ZXN0KG5hbWVPclZhbHVlKSkgeyByZXR1cm4gQ2hhclNldFN0cmluZyB9XG4gICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHByb3BlcnR5IG5hbWVcIik7XG4gIH07XG5cbiAgLy8gVW5pY29kZVByb3BlcnR5TmFtZSA6OlxuICAvLyAgIFVuaWNvZGVQcm9wZXJ0eU5hbWVDaGFyYWN0ZXJzXG4gIHBwJDEucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eU5hbWUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBjaCA9IDA7XG4gICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlID0gXCJcIjtcbiAgICB3aGlsZSAoaXNVbmljb2RlUHJvcGVydHlOYW1lQ2hhcmFjdGVyKGNoID0gc3RhdGUuY3VycmVudCgpKSkge1xuICAgICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlICs9IGNvZGVQb2ludFRvU3RyaW5nKGNoKTtcbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSAhPT0gXCJcIlxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzVW5pY29kZVByb3BlcnR5TmFtZUNoYXJhY3RlcihjaCkge1xuICAgIHJldHVybiBpc0NvbnRyb2xMZXR0ZXIoY2gpIHx8IGNoID09PSAweDVGIC8qIF8gKi9cbiAgfVxuXG4gIC8vIFVuaWNvZGVQcm9wZXJ0eVZhbHVlIDo6XG4gIC8vICAgVW5pY29kZVByb3BlcnR5VmFsdWVDaGFyYWN0ZXJzXG4gIHBwJDEucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgY2ggPSAwO1xuICAgIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSA9IFwiXCI7XG4gICAgd2hpbGUgKGlzVW5pY29kZVByb3BlcnR5VmFsdWVDaGFyYWN0ZXIoY2ggPSBzdGF0ZS5jdXJyZW50KCkpKSB7XG4gICAgICBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgKz0gY29kZVBvaW50VG9TdHJpbmcoY2gpO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUubGFzdFN0cmluZ1ZhbHVlICE9PSBcIlwiXG4gIH07XG4gIGZ1bmN0aW9uIGlzVW5pY29kZVByb3BlcnR5VmFsdWVDaGFyYWN0ZXIoY2gpIHtcbiAgICByZXR1cm4gaXNVbmljb2RlUHJvcGVydHlOYW1lQ2hhcmFjdGVyKGNoKSB8fCBpc0RlY2ltYWxEaWdpdChjaClcbiAgfVxuXG4gIC8vIExvbmVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZSA6OlxuICAvLyAgIFVuaWNvZGVQcm9wZXJ0eVZhbHVlQ2hhcmFjdGVyc1xuICBwcCQxLnJlZ2V4cF9lYXRMb25lVW5pY29kZVByb3BlcnR5TmFtZU9yVmFsdWUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHJldHVybiB0aGlzLnJlZ2V4cF9lYXRVbmljb2RlUHJvcGVydHlWYWx1ZShzdGF0ZSlcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1DaGFyYWN0ZXJDbGFzc1xuICBwcCQxLnJlZ2V4cF9lYXRDaGFyYWN0ZXJDbGFzcyA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmVhdCgweDVCIC8qIFsgKi8pKSB7XG4gICAgICB2YXIgbmVnYXRlID0gc3RhdGUuZWF0KDB4NUUgLyogXiAqLyk7XG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcy5yZWdleHBfY2xhc3NDb250ZW50cyhzdGF0ZSk7XG4gICAgICBpZiAoIXN0YXRlLmVhdCgweDVEIC8qIF0gKi8pKVxuICAgICAgICB7IHN0YXRlLnJhaXNlKFwiVW50ZXJtaW5hdGVkIGNoYXJhY3RlciBjbGFzc1wiKTsgfVxuICAgICAgaWYgKG5lZ2F0ZSAmJiByZXN1bHQgPT09IENoYXJTZXRTdHJpbmcpXG4gICAgICAgIHsgc3RhdGUucmFpc2UoXCJOZWdhdGVkIGNoYXJhY3RlciBjbGFzcyBtYXkgY29udGFpbiBzdHJpbmdzXCIpOyB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc0NvbnRlbnRzXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUNsYXNzUmFuZ2VzXG4gIHBwJDEucmVnZXhwX2NsYXNzQ29udGVudHMgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5jdXJyZW50KCkgPT09IDB4NUQgLyogXSAqLykgeyByZXR1cm4gQ2hhclNldE9rIH1cbiAgICBpZiAoc3RhdGUuc3dpdGNoVikgeyByZXR1cm4gdGhpcy5yZWdleHBfY2xhc3NTZXRFeHByZXNzaW9uKHN0YXRlKSB9XG4gICAgdGhpcy5yZWdleHBfbm9uRW1wdHlDbGFzc1JhbmdlcyhzdGF0ZSk7XG4gICAgcmV0dXJuIENoYXJTZXRPa1xuICB9O1xuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLU5vbmVtcHR5Q2xhc3NSYW5nZXNcbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtTm9uZW1wdHlDbGFzc1Jhbmdlc05vRGFzaFxuICBwcCQxLnJlZ2V4cF9ub25FbXB0eUNsYXNzUmFuZ2VzID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB3aGlsZSAodGhpcy5yZWdleHBfZWF0Q2xhc3NBdG9tKHN0YXRlKSkge1xuICAgICAgdmFyIGxlZnQgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICBpZiAoc3RhdGUuZWF0KDB4MkQgLyogLSAqLykgJiYgdGhpcy5yZWdleHBfZWF0Q2xhc3NBdG9tKHN0YXRlKSkge1xuICAgICAgICB2YXIgcmlnaHQgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICAgIGlmIChzdGF0ZS5zd2l0Y2hVICYmIChsZWZ0ID09PSAtMSB8fCByaWdodCA9PT0gLTEpKSB7XG4gICAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGNoYXJhY3RlciBjbGFzc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVmdCAhPT0gLTEgJiYgcmlnaHQgIT09IC0xICYmIGxlZnQgPiByaWdodCkge1xuICAgICAgICAgIHN0YXRlLnJhaXNlKFwiUmFuZ2Ugb3V0IG9mIG9yZGVyIGluIGNoYXJhY3RlciBjbGFzc1wiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1DbGFzc0F0b21cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQ2xhc3NBdG9tTm9EYXNoXG4gIHBwJDEucmVnZXhwX2VhdENsYXNzQXRvbSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuXG4gICAgaWYgKHN0YXRlLmVhdCgweDVDIC8qIFxcICovKSkge1xuICAgICAgaWYgKHRoaXMucmVnZXhwX2VhdENsYXNzRXNjYXBlKHN0YXRlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnN3aXRjaFUpIHtcbiAgICAgICAgLy8gTWFrZSB0aGUgc2FtZSBtZXNzYWdlIGFzIFY4LlxuICAgICAgICB2YXIgY2gkMSA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgICAgICAgaWYgKGNoJDEgPT09IDB4NjMgLyogYyAqLyB8fCBpc09jdGFsRGlnaXQoY2gkMSkpIHtcbiAgICAgICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgY2xhc3MgZXNjYXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBlc2NhcGVcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG5cbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gICAgaWYgKGNoICE9PSAweDVEIC8qIF0gKi8pIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItQ2xhc3NFc2NhcGVcbiAgcHAkMS5yZWdleHBfZWF0Q2xhc3NFc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcblxuICAgIGlmIChzdGF0ZS5lYXQoMHg2MiAvKiBiICovKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gMHgwODsgLyogPEJTPiAqL1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuc3dpdGNoVSAmJiBzdGF0ZS5lYXQoMHgyRCAvKiAtICovKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gMHgyRDsgLyogLSAqL1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRlLnN3aXRjaFUgJiYgc3RhdGUuZWF0KDB4NjMgLyogYyAqLykpIHtcbiAgICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRDbGFzc0NvbnRyb2xMZXR0ZXIoc3RhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yZWdleHBfZWF0Q2hhcmFjdGVyQ2xhc3NFc2NhcGUoc3RhdGUpIHx8XG4gICAgICB0aGlzLnJlZ2V4cF9lYXRDaGFyYWN0ZXJFc2NhcGUoc3RhdGUpXG4gICAgKVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzU2V0RXhwcmVzc2lvblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc1VuaW9uXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzSW50ZXJzZWN0aW9uXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzU3VidHJhY3Rpb25cbiAgcHAkMS5yZWdleHBfY2xhc3NTZXRFeHByZXNzaW9uID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gQ2hhclNldE9rLCBzdWJSZXN1bHQ7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdENsYXNzU2V0UmFuZ2Uoc3RhdGUpKSA7IGVsc2UgaWYgKHN1YlJlc3VsdCA9IHRoaXMucmVnZXhwX2VhdENsYXNzU2V0T3BlcmFuZChzdGF0ZSkpIHtcbiAgICAgIGlmIChzdWJSZXN1bHQgPT09IENoYXJTZXRTdHJpbmcpIHsgcmVzdWx0ID0gQ2hhclNldFN0cmluZzsgfVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NJbnRlcnNlY3Rpb25cbiAgICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICAgIHdoaWxlIChzdGF0ZS5lYXRDaGFycyhbMHgyNiwgMHgyNl0gLyogJiYgKi8pKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5jdXJyZW50KCkgIT09IDB4MjYgLyogJiAqLyAmJlxuICAgICAgICAgIChzdWJSZXN1bHQgPSB0aGlzLnJlZ2V4cF9lYXRDbGFzc1NldE9wZXJhbmQoc3RhdGUpKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoc3ViUmVzdWx0ICE9PSBDaGFyU2V0U3RyaW5nKSB7IHJlc3VsdCA9IENoYXJTZXRPazsgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBjaGFyYWN0ZXIgY2xhc3NcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgIT09IHN0YXRlLnBvcykgeyByZXR1cm4gcmVzdWx0IH1cbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzU3VidHJhY3Rpb25cbiAgICAgIHdoaWxlIChzdGF0ZS5lYXRDaGFycyhbMHgyRCwgMHgyRF0gLyogLS0gKi8pKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRDbGFzc1NldE9wZXJhbmQoc3RhdGUpKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBjaGFyYWN0ZXIgY2xhc3NcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgIT09IHN0YXRlLnBvcykgeyByZXR1cm4gcmVzdWx0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBjaGFyYWN0ZXIgY2xhc3NcIik7XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzVW5pb25cbiAgICBmb3IgKDs7KSB7XG4gICAgICBpZiAodGhpcy5yZWdleHBfZWF0Q2xhc3NTZXRSYW5nZShzdGF0ZSkpIHsgY29udGludWUgfVxuICAgICAgc3ViUmVzdWx0ID0gdGhpcy5yZWdleHBfZWF0Q2xhc3NTZXRPcGVyYW5kKHN0YXRlKTtcbiAgICAgIGlmICghc3ViUmVzdWx0KSB7IHJldHVybiByZXN1bHQgfVxuICAgICAgaWYgKHN1YlJlc3VsdCA9PT0gQ2hhclNldFN0cmluZykgeyByZXN1bHQgPSBDaGFyU2V0U3RyaW5nOyB9XG4gICAgfVxuICB9O1xuXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNwcm9kLUNsYXNzU2V0UmFuZ2VcbiAgcHAkMS5yZWdleHBfZWF0Q2xhc3NTZXRSYW5nZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRDbGFzc1NldENoYXJhY3RlcihzdGF0ZSkpIHtcbiAgICAgIHZhciBsZWZ0ID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgaWYgKHN0YXRlLmVhdCgweDJEIC8qIC0gKi8pICYmIHRoaXMucmVnZXhwX2VhdENsYXNzU2V0Q2hhcmFjdGVyKHN0YXRlKSkge1xuICAgICAgICB2YXIgcmlnaHQgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICAgIGlmIChsZWZ0ICE9PSAtMSAmJiByaWdodCAhPT0gLTEgJiYgbGVmdCA+IHJpZ2h0KSB7XG4gICAgICAgICAgc3RhdGUucmFpc2UoXCJSYW5nZSBvdXQgb2Ygb3JkZXIgaW4gY2hhcmFjdGVyIGNsYXNzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NTZXRPcGVyYW5kXG4gIHBwJDEucmVnZXhwX2VhdENsYXNzU2V0T3BlcmFuZCA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdENsYXNzU2V0Q2hhcmFjdGVyKHN0YXRlKSkgeyByZXR1cm4gQ2hhclNldE9rIH1cbiAgICByZXR1cm4gdGhpcy5yZWdleHBfZWF0Q2xhc3NTdHJpbmdEaXNqdW5jdGlvbihzdGF0ZSkgfHwgdGhpcy5yZWdleHBfZWF0TmVzdGVkQ2xhc3Moc3RhdGUpXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtTmVzdGVkQ2xhc3NcbiAgcHAkMS5yZWdleHBfZWF0TmVzdGVkQ2xhc3MgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICBpZiAoc3RhdGUuZWF0KDB4NUIgLyogWyAqLykpIHtcbiAgICAgIHZhciBuZWdhdGUgPSBzdGF0ZS5lYXQoMHg1RSAvKiBeICovKTtcbiAgICAgIHZhciByZXN1bHQgPSB0aGlzLnJlZ2V4cF9jbGFzc0NvbnRlbnRzKHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZS5lYXQoMHg1RCAvKiBdICovKSkge1xuICAgICAgICBpZiAobmVnYXRlICYmIHJlc3VsdCA9PT0gQ2hhclNldFN0cmluZykge1xuICAgICAgICAgIHN0YXRlLnJhaXNlKFwiTmVnYXRlZCBjaGFyYWN0ZXIgY2xhc3MgbWF5IGNvbnRhaW4gc3RyaW5nc1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmVhdCgweDVDIC8qIFxcICovKSkge1xuICAgICAgdmFyIHJlc3VsdCQxID0gdGhpcy5yZWdleHBfZWF0Q2hhcmFjdGVyQ2xhc3NFc2NhcGUoc3RhdGUpO1xuICAgICAgaWYgKHJlc3VsdCQxKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQkMVxuICAgICAgfVxuICAgICAgc3RhdGUucG9zID0gc3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NTdHJpbmdEaXNqdW5jdGlvblxuICBwcCQxLnJlZ2V4cF9lYXRDbGFzc1N0cmluZ0Rpc2p1bmN0aW9uID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgaWYgKHN0YXRlLmVhdENoYXJzKFsweDVDLCAweDcxXSAvKiBcXHEgKi8pKSB7XG4gICAgICBpZiAoc3RhdGUuZWF0KDB4N0IgLyogeyAqLykpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMucmVnZXhwX2NsYXNzU3RyaW5nRGlzanVuY3Rpb25Db250ZW50cyhzdGF0ZSk7XG4gICAgICAgIGlmIChzdGF0ZS5lYXQoMHg3RCAvKiB9ICovKSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWFrZSB0aGUgc2FtZSBtZXNzYWdlIGFzIFY4LlxuICAgICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgZXNjYXBlXCIpO1xuICAgICAgfVxuICAgICAgc3RhdGUucG9zID0gc3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NTdHJpbmdEaXNqdW5jdGlvbkNvbnRlbnRzXG4gIHBwJDEucmVnZXhwX2NsYXNzU3RyaW5nRGlzanVuY3Rpb25Db250ZW50cyA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucmVnZXhwX2NsYXNzU3RyaW5nKHN0YXRlKTtcbiAgICB3aGlsZSAoc3RhdGUuZWF0KDB4N0MgLyogfCAqLykpIHtcbiAgICAgIGlmICh0aGlzLnJlZ2V4cF9jbGFzc1N0cmluZyhzdGF0ZSkgPT09IENoYXJTZXRTdHJpbmcpIHsgcmVzdWx0ID0gQ2hhclNldFN0cmluZzsgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NTdHJpbmdcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtTm9uRW1wdHlDbGFzc1N0cmluZ1xuICBwcCQxLnJlZ2V4cF9jbGFzc1N0cmluZyA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB3aGlsZSAodGhpcy5yZWdleHBfZWF0Q2xhc3NTZXRDaGFyYWN0ZXIoc3RhdGUpKSB7IGNvdW50Kys7IH1cbiAgICByZXR1cm4gY291bnQgPT09IDEgPyBDaGFyU2V0T2sgOiBDaGFyU2V0U3RyaW5nXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Byb2QtQ2xhc3NTZXRDaGFyYWN0ZXJcbiAgcHAkMS5yZWdleHBfZWF0Q2xhc3NTZXRDaGFyYWN0ZXIgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICBpZiAoc3RhdGUuZWF0KDB4NUMgLyogXFwgKi8pKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckVzY2FwZShzdGF0ZSkgfHxcbiAgICAgICAgdGhpcy5yZWdleHBfZWF0Q2xhc3NTZXRSZXNlcnZlZFB1bmN0dWF0b3Ioc3RhdGUpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5lYXQoMHg2MiAvKiBiICovKSkge1xuICAgICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDA4OyAvKiA8QlM+ICovXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gICAgaWYgKGNoIDwgMCB8fCBjaCA9PT0gc3RhdGUubG9va2FoZWFkKCkgJiYgaXNDbGFzc1NldFJlc2VydmVkRG91YmxlUHVuY3R1YXRvckNoYXJhY3RlcihjaCkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBpZiAoaXNDbGFzc1NldFN5bnRheENoYXJhY3RlcihjaCkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gY2g7XG4gICAgcmV0dXJuIHRydWVcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc1NldFJlc2VydmVkRG91YmxlUHVuY3R1YXRvclxuICBmdW5jdGlvbiBpc0NsYXNzU2V0UmVzZXJ2ZWREb3VibGVQdW5jdHVhdG9yQ2hhcmFjdGVyKGNoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNoID09PSAweDIxIC8qICEgKi8gfHxcbiAgICAgIGNoID49IDB4MjMgLyogIyAqLyAmJiBjaCA8PSAweDI2IC8qICYgKi8gfHxcbiAgICAgIGNoID49IDB4MkEgLyogKiAqLyAmJiBjaCA8PSAweDJDIC8qICwgKi8gfHxcbiAgICAgIGNoID09PSAweDJFIC8qIC4gKi8gfHxcbiAgICAgIGNoID49IDB4M0EgLyogOiAqLyAmJiBjaCA8PSAweDQwIC8qIEAgKi8gfHxcbiAgICAgIGNoID09PSAweDVFIC8qIF4gKi8gfHxcbiAgICAgIGNoID09PSAweDYwIC8qIGAgKi8gfHxcbiAgICAgIGNoID09PSAweDdFIC8qIH4gKi9cbiAgICApXG4gIH1cblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc1NldFN5bnRheENoYXJhY3RlclxuICBmdW5jdGlvbiBpc0NsYXNzU2V0U3ludGF4Q2hhcmFjdGVyKGNoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNoID09PSAweDI4IC8qICggKi8gfHxcbiAgICAgIGNoID09PSAweDI5IC8qICkgKi8gfHxcbiAgICAgIGNoID09PSAweDJEIC8qIC0gKi8gfHxcbiAgICAgIGNoID09PSAweDJGIC8qIC8gKi8gfHxcbiAgICAgIGNoID49IDB4NUIgLyogWyAqLyAmJiBjaCA8PSAweDVEIC8qIF0gKi8gfHxcbiAgICAgIGNoID49IDB4N0IgLyogeyAqLyAmJiBjaCA8PSAweDdEIC8qIH0gKi9cbiAgICApXG4gIH1cblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc1NldFJlc2VydmVkUHVuY3R1YXRvclxuICBwcCQxLnJlZ2V4cF9lYXRDbGFzc1NldFJlc2VydmVkUHVuY3R1YXRvciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICAgIGlmIChpc0NsYXNzU2V0UmVzZXJ2ZWRQdW5jdHVhdG9yKGNoKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gY2g7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jcHJvZC1DbGFzc1NldFJlc2VydmVkUHVuY3R1YXRvclxuICBmdW5jdGlvbiBpc0NsYXNzU2V0UmVzZXJ2ZWRQdW5jdHVhdG9yKGNoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNoID09PSAweDIxIC8qICEgKi8gfHxcbiAgICAgIGNoID09PSAweDIzIC8qICMgKi8gfHxcbiAgICAgIGNoID09PSAweDI1IC8qICUgKi8gfHxcbiAgICAgIGNoID09PSAweDI2IC8qICYgKi8gfHxcbiAgICAgIGNoID09PSAweDJDIC8qICwgKi8gfHxcbiAgICAgIGNoID09PSAweDJEIC8qIC0gKi8gfHxcbiAgICAgIGNoID49IDB4M0EgLyogOiAqLyAmJiBjaCA8PSAweDNFIC8qID4gKi8gfHxcbiAgICAgIGNoID09PSAweDQwIC8qIEAgKi8gfHxcbiAgICAgIGNoID09PSAweDYwIC8qIGAgKi8gfHxcbiAgICAgIGNoID09PSAweDdFIC8qIH4gKi9cbiAgICApXG4gIH1cblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItQ2xhc3NDb250cm9sTGV0dGVyXG4gIHBwJDEucmVnZXhwX2VhdENsYXNzQ29udHJvbExldHRlciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICAgIGlmIChpc0RlY2ltYWxEaWdpdChjaCkgfHwgY2ggPT09IDB4NUYgLyogXyAqLykge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gY2ggJSAweDIwO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtSGV4RXNjYXBlU2VxdWVuY2VcbiAgcHAkMS5yZWdleHBfZWF0SGV4RXNjYXBlU2VxdWVuY2UgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgICBpZiAoc3RhdGUuZWF0KDB4NzggLyogeCAqLykpIHtcbiAgICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRGaXhlZEhleERpZ2l0cyhzdGF0ZSwgMikpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zd2l0Y2hVKSB7XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBlc2NhcGVcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtRGVjaW1hbERpZ2l0c1xuICBwcCQxLnJlZ2V4cF9lYXREZWNpbWFsRGlnaXRzID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gICAgdmFyIGNoID0gMDtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAwO1xuICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChjaCA9IHN0YXRlLmN1cnJlbnQoKSkpIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDEwICogc3RhdGUubGFzdEludFZhbHVlICsgKGNoIC0gMHgzMCAvKiAwICovKTtcbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlLnBvcyAhPT0gc3RhcnRcbiAgfTtcbiAgZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoY2gpIHtcbiAgICByZXR1cm4gY2ggPj0gMHgzMCAvKiAwICovICYmIGNoIDw9IDB4MzkgLyogOSAqL1xuICB9XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtSGV4RGlnaXRzXG4gIHBwJDEucmVnZXhwX2VhdEhleERpZ2l0cyA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgIHZhciBjaCA9IDA7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gMDtcbiAgICB3aGlsZSAoaXNIZXhEaWdpdChjaCA9IHN0YXRlLmN1cnJlbnQoKSkpIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDE2ICogc3RhdGUubGFzdEludFZhbHVlICsgaGV4VG9JbnQoY2gpO1xuICAgICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUucG9zICE9PSBzdGFydFxuICB9O1xuICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIChjaCA+PSAweDMwIC8qIDAgKi8gJiYgY2ggPD0gMHgzOSAvKiA5ICovKSB8fFxuICAgICAgKGNoID49IDB4NDEgLyogQSAqLyAmJiBjaCA8PSAweDQ2IC8qIEYgKi8pIHx8XG4gICAgICAoY2ggPj0gMHg2MSAvKiBhICovICYmIGNoIDw9IDB4NjYgLyogZiAqLylcbiAgICApXG4gIH1cbiAgZnVuY3Rpb24gaGV4VG9JbnQoY2gpIHtcbiAgICBpZiAoY2ggPj0gMHg0MSAvKiBBICovICYmIGNoIDw9IDB4NDYgLyogRiAqLykge1xuICAgICAgcmV0dXJuIDEwICsgKGNoIC0gMHg0MSAvKiBBICovKVxuICAgIH1cbiAgICBpZiAoY2ggPj0gMHg2MSAvKiBhICovICYmIGNoIDw9IDB4NjYgLyogZiAqLykge1xuICAgICAgcmV0dXJuIDEwICsgKGNoIC0gMHg2MSAvKiBhICovKVxuICAgIH1cbiAgICByZXR1cm4gY2ggLSAweDMwIC8qIDAgKi9cbiAgfVxuXG4gIC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1MZWdhY3lPY3RhbEVzY2FwZVNlcXVlbmNlXG4gIC8vIEFsbG93cyBvbmx5IDAtMzc3KG9jdGFsKSBpLmUuIDAtMjU1KGRlY2ltYWwpLlxuICBwcCQxLnJlZ2V4cF9lYXRMZWdhY3lPY3RhbEVzY2FwZVNlcXVlbmNlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0T2N0YWxEaWdpdChzdGF0ZSkpIHtcbiAgICAgIHZhciBuMSA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRPY3RhbERpZ2l0KHN0YXRlKSkge1xuICAgICAgICB2YXIgbjIgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICAgIGlmIChuMSA8PSAzICYmIHRoaXMucmVnZXhwX2VhdE9jdGFsRGlnaXQoc3RhdGUpKSB7XG4gICAgICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gbjEgKiA2NCArIG4yICogOCArIHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBuMSAqIDggKyBuMjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gbjE7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1PY3RhbERpZ2l0XG4gIHBwJDEucmVnZXhwX2VhdE9jdGFsRGlnaXQgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gY2ggLSAweDMwOyAvKiAwICovXG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAwO1xuICAgIHJldHVybiBmYWxzZVxuICB9O1xuICBmdW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHtcbiAgICByZXR1cm4gY2ggPj0gMHgzMCAvKiAwICovICYmIGNoIDw9IDB4MzcgLyogNyAqL1xuICB9XG5cbiAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtSGV4NERpZ2l0c1xuICAvLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1IZXhEaWdpdFxuICAvLyBBbmQgSGV4RGlnaXQgSGV4RGlnaXQgaW4gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtSGV4RXNjYXBlU2VxdWVuY2VcbiAgcHAkMS5yZWdleHBfZWF0Rml4ZWRIZXhEaWdpdHMgPSBmdW5jdGlvbihzdGF0ZSwgbGVuZ3RoKSB7XG4gICAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICAgICAgaWYgKCFpc0hleERpZ2l0KGNoKSkge1xuICAgICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAxNiAqIHN0YXRlLmxhc3RJbnRWYWx1ZSArIGhleFRvSW50KGNoKTtcbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfTtcblxuICAvLyBPYmplY3QgdHlwZSB1c2VkIHRvIHJlcHJlc2VudCB0b2tlbnMuIE5vdGUgdGhhdCBub3JtYWxseSwgdG9rZW5zXG4gIC8vIHNpbXBseSBleGlzdCBhcyBwcm9wZXJ0aWVzIG9uIHRoZSBwYXJzZXIgb2JqZWN0LiBUaGlzIGlzIG9ubHlcbiAgLy8gdXNlZCBmb3IgdGhlIG9uVG9rZW4gY2FsbGJhY2sgYW5kIHRoZSBleHRlcm5hbCB0b2tlbml6ZXIuXG5cbiAgdmFyIFRva2VuID0gZnVuY3Rpb24gVG9rZW4ocCkge1xuICAgIHRoaXMudHlwZSA9IHAudHlwZTtcbiAgICB0aGlzLnZhbHVlID0gcC52YWx1ZTtcbiAgICB0aGlzLnN0YXJ0ID0gcC5zdGFydDtcbiAgICB0aGlzLmVuZCA9IHAuZW5kO1xuICAgIGlmIChwLm9wdGlvbnMubG9jYXRpb25zKVxuICAgICAgeyB0aGlzLmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbihwLCBwLnN0YXJ0TG9jLCBwLmVuZExvYyk7IH1cbiAgICBpZiAocC5vcHRpb25zLnJhbmdlcylcbiAgICAgIHsgdGhpcy5yYW5nZSA9IFtwLnN0YXJ0LCBwLmVuZF07IH1cbiAgfTtcblxuICAvLyAjIyBUb2tlbml6ZXJcblxuICB2YXIgcHAgPSBQYXJzZXIucHJvdG90eXBlO1xuXG4gIC8vIE1vdmUgdG8gdGhlIG5leHQgdG9rZW5cblxuICBwcC5uZXh0ID0gZnVuY3Rpb24oaWdub3JlRXNjYXBlU2VxdWVuY2VJbktleXdvcmQpIHtcbiAgICBpZiAoIWlnbm9yZUVzY2FwZVNlcXVlbmNlSW5LZXl3b3JkICYmIHRoaXMudHlwZS5rZXl3b3JkICYmIHRoaXMuY29udGFpbnNFc2MpXG4gICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIkVzY2FwZSBzZXF1ZW5jZSBpbiBrZXl3b3JkIFwiICsgdGhpcy50eXBlLmtleXdvcmQpOyB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vblRva2VuKVxuICAgICAgeyB0aGlzLm9wdGlvbnMub25Ub2tlbihuZXcgVG9rZW4odGhpcykpOyB9XG5cbiAgICB0aGlzLmxhc3RUb2tFbmQgPSB0aGlzLmVuZDtcbiAgICB0aGlzLmxhc3RUb2tTdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgdGhpcy5sYXN0VG9rRW5kTG9jID0gdGhpcy5lbmRMb2M7XG4gICAgdGhpcy5sYXN0VG9rU3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICAgIHRoaXMubmV4dFRva2VuKCk7XG4gIH07XG5cbiAgcHAuZ2V0VG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm5leHQoKTtcbiAgICByZXR1cm4gbmV3IFRva2VuKHRoaXMpXG4gIH07XG5cbiAgLy8gSWYgd2UncmUgaW4gYW4gRVM2IGVudmlyb25tZW50LCBtYWtlIHBhcnNlcnMgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIpXG4gICAgeyBwcFtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdGhpcyQxJDEgPSB0aGlzO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHRva2VuID0gdGhpcyQxJDEuZ2V0VG9rZW4oKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogdG9rZW4udHlwZSA9PT0gdHlwZXMkMS5lb2YsXG4gICAgICAgICAgICB2YWx1ZTogdG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9OyB9XG5cbiAgLy8gVG9nZ2xlIHN0cmljdCBtb2RlLiBSZS1yZWFkcyB0aGUgbmV4dCBudW1iZXIgb3Igc3RyaW5nIHRvIHBsZWFzZVxuICAvLyBwZWRhbnRpYyB0ZXN0cyAoYFwidXNlIHN0cmljdFwiOyAwMTA7YCBzaG91bGQgZmFpbCkuXG5cbiAgLy8gUmVhZCBhIHNpbmdsZSB0b2tlbiwgdXBkYXRpbmcgdGhlIHBhcnNlciBvYmplY3QncyB0b2tlbi1yZWxhdGVkXG4gIC8vIHByb3BlcnRpZXMuXG5cbiAgcHAubmV4dFRva2VuID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGN1ckNvbnRleHQgPSB0aGlzLmN1ckNvbnRleHQoKTtcbiAgICBpZiAoIWN1ckNvbnRleHQgfHwgIWN1ckNvbnRleHQucHJlc2VydmVTcGFjZSkgeyB0aGlzLnNraXBTcGFjZSgpOyB9XG5cbiAgICB0aGlzLnN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHsgdGhpcy5zdGFydExvYyA9IHRoaXMuY3VyUG9zaXRpb24oKTsgfVxuICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkgeyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmVvZikgfVxuXG4gICAgaWYgKGN1ckNvbnRleHQub3ZlcnJpZGUpIHsgcmV0dXJuIGN1ckNvbnRleHQub3ZlcnJpZGUodGhpcykgfVxuICAgIGVsc2UgeyB0aGlzLnJlYWRUb2tlbih0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCkpOyB9XG4gIH07XG5cbiAgcHAucmVhZFRva2VuID0gZnVuY3Rpb24oY29kZSkge1xuICAgIC8vIElkZW50aWZpZXIgb3Iga2V5d29yZC4gJ1xcdVhYWFgnIHNlcXVlbmNlcyBhcmUgYWxsb3dlZCBpblxuICAgIC8vIGlkZW50aWZpZXJzLCBzbyAnXFwnIGFsc28gZGlzcGF0Y2hlcyB0byB0aGF0LlxuICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjb2RlLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikgfHwgY29kZSA9PT0gOTIgLyogJ1xcJyAqLylcbiAgICAgIHsgcmV0dXJuIHRoaXMucmVhZFdvcmQoKSB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkZyb21Db2RlKGNvZGUpXG4gIH07XG5cbiAgcHAuZnVsbENoYXJDb2RlQXRQb3MgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29kZSA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gICAgaWYgKGNvZGUgPD0gMHhkN2ZmIHx8IGNvZGUgPj0gMHhkYzAwKSB7IHJldHVybiBjb2RlIH1cbiAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICAgIHJldHVybiBuZXh0IDw9IDB4ZGJmZiB8fCBuZXh0ID49IDB4ZTAwMCA/IGNvZGUgOiAoY29kZSA8PCAxMCkgKyBuZXh0IC0gMHgzNWZkYzAwXG4gIH07XG5cbiAgcHAuc2tpcEJsb2NrQ29tbWVudCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFydExvYyA9IHRoaXMub3B0aW9ucy5vbkNvbW1lbnQgJiYgdGhpcy5jdXJQb3NpdGlvbigpO1xuICAgIHZhciBzdGFydCA9IHRoaXMucG9zLCBlbmQgPSB0aGlzLmlucHV0LmluZGV4T2YoXCIqL1wiLCB0aGlzLnBvcyArPSAyKTtcbiAgICBpZiAoZW5kID09PSAtMSkgeyB0aGlzLnJhaXNlKHRoaXMucG9zIC0gMiwgXCJVbnRlcm1pbmF0ZWQgY29tbWVudFwiKTsgfVxuICAgIHRoaXMucG9zID0gZW5kICsgMjtcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykge1xuICAgICAgZm9yICh2YXIgbmV4dEJyZWFrID0gKHZvaWQgMCksIHBvcyA9IHN0YXJ0OyAobmV4dEJyZWFrID0gbmV4dExpbmVCcmVhayh0aGlzLmlucHV0LCBwb3MsIHRoaXMucG9zKSkgPiAtMTspIHtcbiAgICAgICAgKyt0aGlzLmN1ckxpbmU7XG4gICAgICAgIHBvcyA9IHRoaXMubGluZVN0YXJ0ID0gbmV4dEJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm9uQ29tbWVudClcbiAgICAgIHsgdGhpcy5vcHRpb25zLm9uQ29tbWVudCh0cnVlLCB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0ICsgMiwgZW5kKSwgc3RhcnQsIHRoaXMucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydExvYywgdGhpcy5jdXJQb3NpdGlvbigpKTsgfVxuICB9O1xuXG4gIHBwLnNraXBMaW5lQ29tbWVudCA9IGZ1bmN0aW9uKHN0YXJ0U2tpcCkge1xuICAgIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICAgIHZhciBzdGFydExvYyA9IHRoaXMub3B0aW9ucy5vbkNvbW1lbnQgJiYgdGhpcy5jdXJQb3NpdGlvbigpO1xuICAgIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArPSBzdGFydFNraXApO1xuICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoICYmICFpc05ld0xpbmUoY2gpKSB7XG4gICAgICBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMucG9zKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vbkNvbW1lbnQpXG4gICAgICB7IHRoaXMub3B0aW9ucy5vbkNvbW1lbnQoZmFsc2UsIHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQgKyBzdGFydFNraXAsIHRoaXMucG9zKSwgc3RhcnQsIHRoaXMucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydExvYywgdGhpcy5jdXJQb3NpdGlvbigpKTsgfVxuICB9O1xuXG4gIC8vIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnNlIGFuZCBhZnRlciBldmVyeSB0b2tlbi4gU2tpcHNcbiAgLy8gd2hpdGVzcGFjZSBhbmQgY29tbWVudHMsIGFuZC5cblxuICBwcC5za2lwU3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgICBsb29wOiB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgIGNhc2UgMzI6IGNhc2UgMTYwOiAvLyAnICdcbiAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGlmICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKSA9PT0gMTApIHtcbiAgICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICB9XG4gICAgICBjYXNlIDEwOiBjYXNlIDgyMzI6IGNhc2UgODIzMzpcbiAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHtcbiAgICAgICAgICArK3RoaXMuY3VyTGluZTtcbiAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMucG9zO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDQ3OiAvLyAnLydcbiAgICAgICAgc3dpdGNoICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKSkge1xuICAgICAgICBjYXNlIDQyOiAvLyAnKidcbiAgICAgICAgICB0aGlzLnNraXBCbG9ja0NvbW1lbnQoKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgIHRoaXMuc2tpcExpbmVDb21tZW50KDIpO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWsgbG9vcFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoY2ggPiA4ICYmIGNoIDwgMTQgfHwgY2ggPj0gNTc2MCAmJiBub25BU0NJSXdoaXRlc3BhY2UudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpIHtcbiAgICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrIGxvb3BcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSB0b2tlbi4gU2V0cyBgZW5kYCwgYHZhbGAsIGFuZFxuICAvLyBtYWludGFpbnMgYGNvbnRleHRgIGFuZCBgZXhwckFsbG93ZWRgLCBhbmQgc2tpcHMgdGhlIHNwYWNlIGFmdGVyXG4gIC8vIHRoZSB0b2tlbiwgc28gdGhhdCB0aGUgbmV4dCBvbmUncyBgc3RhcnRgIHdpbGwgcG9pbnQgYXQgdGhlXG4gIC8vIHJpZ2h0IHBvc2l0aW9uLlxuXG4gIHBwLmZpbmlzaFRva2VuID0gZnVuY3Rpb24odHlwZSwgdmFsKSB7XG4gICAgdGhpcy5lbmQgPSB0aGlzLnBvcztcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykgeyB0aGlzLmVuZExvYyA9IHRoaXMuY3VyUG9zaXRpb24oKTsgfVxuICAgIHZhciBwcmV2VHlwZSA9IHRoaXMudHlwZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMudmFsdWUgPSB2YWw7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbnRleHQocHJldlR5cGUpO1xuICB9O1xuXG4gIC8vICMjIyBUb2tlbiByZWFkaW5nXG5cbiAgLy8gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgdG8gZmV0Y2ggdGhlIG5leHQgdG9rZW4uIEl0XG4gIC8vIGlzIHNvbWV3aGF0IG9ic2N1cmUsIGJlY2F1c2UgaXQgd29ya3MgaW4gY2hhcmFjdGVyIGNvZGVzIHJhdGhlclxuICAvLyB0aGFuIGNoYXJhY3RlcnMsIGFuZCBiZWNhdXNlIG9wZXJhdG9yIHBhcnNpbmcgaGFzIGJlZW4gaW5saW5lZFxuICAvLyBpbnRvIGl0LlxuICAvL1xuICAvLyBBbGwgaW4gdGhlIG5hbWUgb2Ygc3BlZWQuXG4gIC8vXG4gIHBwLnJlYWRUb2tlbl9kb3QgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICAgIGlmIChuZXh0ID49IDQ4ICYmIG5leHQgPD0gNTcpIHsgcmV0dXJuIHRoaXMucmVhZE51bWJlcih0cnVlKSB9XG4gICAgdmFyIG5leHQyID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMik7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIG5leHQgPT09IDQ2ICYmIG5leHQyID09PSA0NikgeyAvLyA0NiA9IGRvdCAnLidcbiAgICAgIHRoaXMucG9zICs9IDM7XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmVsbGlwc2lzKVxuICAgIH0gZWxzZSB7XG4gICAgICArK3RoaXMucG9zO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5kb3QpXG4gICAgfVxuICB9O1xuXG4gIHBwLnJlYWRUb2tlbl9zbGFzaCA9IGZ1bmN0aW9uKCkgeyAvLyAnLydcbiAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICAgIGlmICh0aGlzLmV4cHJBbGxvd2VkKSB7ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLnJlYWRSZWdleHAoKSB9XG4gICAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuYXNzaWduLCAyKSB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5zbGFzaCwgMSlcbiAgfTtcblxuICBwcC5yZWFkVG9rZW5fbXVsdF9tb2R1bG9fZXhwID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnJSonXG4gICAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgICB2YXIgc2l6ZSA9IDE7XG4gICAgdmFyIHRva2VudHlwZSA9IGNvZGUgPT09IDQyID8gdHlwZXMkMS5zdGFyIDogdHlwZXMkMS5tb2R1bG87XG5cbiAgICAvLyBleHBvbmVudGlhdGlvbiBvcGVyYXRvciAqKiBhbmQgKio9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA3ICYmIGNvZGUgPT09IDQyICYmIG5leHQgPT09IDQyKSB7XG4gICAgICArK3NpemU7XG4gICAgICB0b2tlbnR5cGUgPSB0eXBlcyQxLnN0YXJzdGFyO1xuICAgICAgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpO1xuICAgIH1cblxuICAgIGlmIChuZXh0ID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLmFzc2lnbiwgc2l6ZSArIDEpIH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0b2tlbnR5cGUsIHNpemUpXG4gIH07XG5cbiAgcHAucmVhZFRva2VuX3BpcGVfYW1wID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnfCYnXG4gICAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgICBpZiAobmV4dCA9PT0gY29kZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMikge1xuICAgICAgICB2YXIgbmV4dDIgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKTtcbiAgICAgICAgaWYgKG5leHQyID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLmFzc2lnbiwgMykgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoT3AoY29kZSA9PT0gMTI0ID8gdHlwZXMkMS5sb2dpY2FsT1IgOiB0eXBlcyQxLmxvZ2ljYWxBTkQsIDIpXG4gICAgfVxuICAgIGlmIChuZXh0ID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLmFzc2lnbiwgMikgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKGNvZGUgPT09IDEyNCA/IHR5cGVzJDEuYml0d2lzZU9SIDogdHlwZXMkMS5iaXR3aXNlQU5ELCAxKVxuICB9O1xuXG4gIHBwLnJlYWRUb2tlbl9jYXJldCA9IGZ1bmN0aW9uKCkgeyAvLyAnXidcbiAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICAgIGlmIChuZXh0ID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLmFzc2lnbiwgMikgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuYml0d2lzZVhPUiwgMSlcbiAgfTtcblxuICBwcC5yZWFkVG9rZW5fcGx1c19taW4gPSBmdW5jdGlvbihjb2RlKSB7IC8vICcrLSdcbiAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICAgIGlmIChuZXh0ID09PSBjb2RlKSB7XG4gICAgICBpZiAobmV4dCA9PT0gNDUgJiYgIXRoaXMuaW5Nb2R1bGUgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMikgPT09IDYyICYmXG4gICAgICAgICAgKHRoaXMubGFzdFRva0VuZCA9PT0gMCB8fCBsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5wb3MpKSkpIHtcbiAgICAgICAgLy8gQSBgLS0+YCBsaW5lIGNvbW1lbnRcbiAgICAgICAgdGhpcy5za2lwTGluZUNvbW1lbnQoMyk7XG4gICAgICAgIHRoaXMuc2tpcFNwYWNlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbigpXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLmluY0RlYywgMilcbiAgICB9XG4gICAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuYXNzaWduLCAyKSB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5wbHVzTWluLCAxKVxuICB9O1xuXG4gIHBwLnJlYWRUb2tlbl9sdF9ndCA9IGZ1bmN0aW9uKGNvZGUpIHsgLy8gJzw+J1xuICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgdmFyIHNpemUgPSAxO1xuICAgIGlmIChuZXh0ID09PSBjb2RlKSB7XG4gICAgICBzaXplID0gY29kZSA9PT0gNjIgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMikgPT09IDYyID8gMyA6IDI7XG4gICAgICBpZiAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgc2l6ZSkgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuYXNzaWduLCBzaXplICsgMSkgfVxuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5iaXRTaGlmdCwgc2l6ZSlcbiAgICB9XG4gICAgaWYgKG5leHQgPT09IDMzICYmIGNvZGUgPT09IDYwICYmICF0aGlzLmluTW9kdWxlICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpID09PSA0NSAmJlxuICAgICAgICB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAzKSA9PT0gNDUpIHtcbiAgICAgIC8vIGA8IS0tYCwgYW4gWE1MLXN0eWxlIGNvbW1lbnQgdGhhdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsaW5lIGNvbW1lbnRcbiAgICAgIHRoaXMuc2tpcExpbmVDb21tZW50KDQpO1xuICAgICAgdGhpcy5za2lwU3BhY2UoKTtcbiAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbigpXG4gICAgfVxuICAgIGlmIChuZXh0ID09PSA2MSkgeyBzaXplID0gMjsgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEucmVsYXRpb25hbCwgc2l6ZSlcbiAgfTtcblxuICBwcC5yZWFkVG9rZW5fZXFfZXhjbCA9IGZ1bmN0aW9uKGNvZGUpIHsgLy8gJz0hJ1xuICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEuZXF1YWxpdHksIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpID09PSA2MSA/IDMgOiAyKSB9XG4gICAgaWYgKGNvZGUgPT09IDYxICYmIG5leHQgPT09IDYyICYmIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7IC8vICc9PidcbiAgICAgIHRoaXMucG9zICs9IDI7XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmFycm93KVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hPcChjb2RlID09PSA2MSA/IHR5cGVzJDEuZXEgOiB0eXBlcyQxLnByZWZpeCwgMSlcbiAgfTtcblxuICBwcC5yZWFkVG9rZW5fcXVlc3Rpb24gPSBmdW5jdGlvbigpIHsgLy8gJz8nXG4gICAgdmFyIGVjbWFWZXJzaW9uID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uO1xuICAgIGlmIChlY21hVmVyc2lvbiA+PSAxMSkge1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgICAgIGlmIChuZXh0ID09PSA0Nikge1xuICAgICAgICB2YXIgbmV4dDIgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKTtcbiAgICAgICAgaWYgKG5leHQyIDwgNDggfHwgbmV4dDIgPiA1NykgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLnF1ZXN0aW9uRG90LCAyKSB9XG4gICAgICB9XG4gICAgICBpZiAobmV4dCA9PT0gNjMpIHtcbiAgICAgICAgaWYgKGVjbWFWZXJzaW9uID49IDEyKSB7XG4gICAgICAgICAgdmFyIG5leHQyJDEgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKTtcbiAgICAgICAgICBpZiAobmV4dDIkMSA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMkMS5hc3NpZ24sIDMpIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLmNvYWxlc2NlLCAyKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcyQxLnF1ZXN0aW9uLCAxKVxuICB9O1xuXG4gIHBwLnJlYWRUb2tlbl9udW1iZXJTaWduID0gZnVuY3Rpb24oKSB7IC8vICcjJ1xuICAgIHZhciBlY21hVmVyc2lvbiA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbjtcbiAgICB2YXIgY29kZSA9IDM1OyAvLyAnIydcbiAgICBpZiAoZWNtYVZlcnNpb24gPj0gMTMpIHtcbiAgICAgICsrdGhpcy5wb3M7XG4gICAgICBjb2RlID0gdGhpcy5mdWxsQ2hhckNvZGVBdFBvcygpO1xuICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNvZGUsIHRydWUpIHx8IGNvZGUgPT09IDkyIC8qICdcXCcgKi8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5wcml2YXRlSWQsIHRoaXMucmVhZFdvcmQxKCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yYWlzZSh0aGlzLnBvcywgXCJVbmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgKyBjb2RlUG9pbnRUb1N0cmluZyhjb2RlKSArIFwiJ1wiKTtcbiAgfTtcblxuICBwcC5nZXRUb2tlbkZyb21Db2RlID0gZnVuY3Rpb24oY29kZSkge1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgIC8vIFRoZSBpbnRlcnByZXRhdGlvbiBvZiBhIGRvdCBkZXBlbmRzIG9uIHdoZXRoZXIgaXQgaXMgZm9sbG93ZWRcbiAgICAvLyBieSBhIGRpZ2l0IG9yIGFub3RoZXIgdHdvIGRvdHMuXG4gICAgY2FzZSA0NjogLy8gJy4nXG4gICAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fZG90KClcblxuICAgIC8vIFB1bmN0dWF0aW9uIHRva2Vucy5cbiAgICBjYXNlIDQwOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLnBhcmVuTClcbiAgICBjYXNlIDQxOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLnBhcmVuUilcbiAgICBjYXNlIDU5OiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLnNlbWkpXG4gICAgY2FzZSA0NDogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5jb21tYSlcbiAgICBjYXNlIDkxOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmJyYWNrZXRMKVxuICAgIGNhc2UgOTM6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuYnJhY2tldFIpXG4gICAgY2FzZSAxMjM6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuYnJhY2VMKVxuICAgIGNhc2UgMTI1OiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmJyYWNlUilcbiAgICBjYXNlIDU4OiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLmNvbG9uKVxuXG4gICAgY2FzZSA5NjogLy8gJ2AnXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNikgeyBicmVhayB9XG4gICAgICArK3RoaXMucG9zO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5iYWNrUXVvdGUpXG5cbiAgICBjYXNlIDQ4OiAvLyAnMCdcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgICBpZiAobmV4dCA9PT0gMTIwIHx8IG5leHQgPT09IDg4KSB7IHJldHVybiB0aGlzLnJlYWRSYWRpeE51bWJlcigxNikgfSAvLyAnMHgnLCAnMFgnIC0gaGV4IG51bWJlclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgICAgIGlmIChuZXh0ID09PSAxMTEgfHwgbmV4dCA9PT0gNzkpIHsgcmV0dXJuIHRoaXMucmVhZFJhZGl4TnVtYmVyKDgpIH0gLy8gJzBvJywgJzBPJyAtIG9jdGFsIG51bWJlclxuICAgICAgICBpZiAobmV4dCA9PT0gOTggfHwgbmV4dCA9PT0gNjYpIHsgcmV0dXJuIHRoaXMucmVhZFJhZGl4TnVtYmVyKDIpIH0gLy8gJzBiJywgJzBCJyAtIGJpbmFyeSBudW1iZXJcbiAgICAgIH1cblxuICAgIC8vIEFueXRoaW5nIGVsc2UgYmVnaW5uaW5nIHdpdGggYSBkaWdpdCBpcyBhbiBpbnRlZ2VyLCBvY3RhbFxuICAgIC8vIG51bWJlciwgb3IgZmxvYXQuXG4gICAgY2FzZSA0OTogY2FzZSA1MDogY2FzZSA1MTogY2FzZSA1MjogY2FzZSA1MzogY2FzZSA1NDogY2FzZSA1NTogY2FzZSA1NjogY2FzZSA1NzogLy8gMS05XG4gICAgICByZXR1cm4gdGhpcy5yZWFkTnVtYmVyKGZhbHNlKVxuXG4gICAgLy8gUXVvdGVzIHByb2R1Y2Ugc3RyaW5ncy5cbiAgICBjYXNlIDM0OiBjYXNlIDM5OiAvLyAnXCInLCBcIidcIlxuICAgICAgcmV0dXJuIHRoaXMucmVhZFN0cmluZyhjb2RlKVxuXG4gICAgLy8gT3BlcmF0b3JzIGFyZSBwYXJzZWQgaW5saW5lIGluIHRpbnkgc3RhdGUgbWFjaGluZXMuICc9JyAoNjEpIGlzXG4gICAgLy8gb2Z0ZW4gcmVmZXJyZWQgdG8uIGBmaW5pc2hPcGAgc2ltcGx5IHNraXBzIHRoZSBhbW91bnQgb2ZcbiAgICAvLyBjaGFyYWN0ZXJzIGl0IGlzIGdpdmVuIGFzIHNlY29uZCBhcmd1bWVudCwgYW5kIHJldHVybnMgYSB0b2tlblxuICAgIC8vIG9mIHRoZSB0eXBlIGdpdmVuIGJ5IGl0cyBmaXJzdCBhcmd1bWVudC5cbiAgICBjYXNlIDQ3OiAvLyAnLydcbiAgICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9zbGFzaCgpXG5cbiAgICBjYXNlIDM3OiBjYXNlIDQyOiAvLyAnJSonXG4gICAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fbXVsdF9tb2R1bG9fZXhwKGNvZGUpXG5cbiAgICBjYXNlIDEyNDogY2FzZSAzODogLy8gJ3wmJ1xuICAgICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX3BpcGVfYW1wKGNvZGUpXG5cbiAgICBjYXNlIDk0OiAvLyAnXidcbiAgICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9jYXJldCgpXG5cbiAgICBjYXNlIDQzOiBjYXNlIDQ1OiAvLyAnKy0nXG4gICAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fcGx1c19taW4oY29kZSlcblxuICAgIGNhc2UgNjA6IGNhc2UgNjI6IC8vICc8PidcbiAgICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9sdF9ndChjb2RlKVxuXG4gICAgY2FzZSA2MTogY2FzZSAzMzogLy8gJz0hJ1xuICAgICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX2VxX2V4Y2woY29kZSlcblxuICAgIGNhc2UgNjM6IC8vICc/J1xuICAgICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX3F1ZXN0aW9uKClcblxuICAgIGNhc2UgMTI2OiAvLyAnfidcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzJDEucHJlZml4LCAxKVxuXG4gICAgY2FzZSAzNTogLy8gJyMnXG4gICAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fbnVtYmVyU2lnbigpXG4gICAgfVxuXG4gICAgdGhpcy5yYWlzZSh0aGlzLnBvcywgXCJVbmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgKyBjb2RlUG9pbnRUb1N0cmluZyhjb2RlKSArIFwiJ1wiKTtcbiAgfTtcblxuICBwcC5maW5pc2hPcCA9IGZ1bmN0aW9uKHR5cGUsIHNpemUpIHtcbiAgICB2YXIgc3RyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLnBvcywgdGhpcy5wb3MgKyBzaXplKTtcbiAgICB0aGlzLnBvcyArPSBzaXplO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGUsIHN0cilcbiAgfTtcblxuICBwcC5yZWFkUmVnZXhwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVzY2FwZWQsIGluQ2xhc3MsIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgZm9yICg7Oykge1xuICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMuaW5wdXQubGVuZ3RoKSB7IHRoaXMucmFpc2Uoc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvblwiKTsgfVxuICAgICAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQXQodGhpcy5wb3MpO1xuICAgICAgaWYgKGxpbmVCcmVhay50ZXN0KGNoKSkgeyB0aGlzLnJhaXNlKHN0YXJ0LCBcIlVudGVybWluYXRlZCByZWd1bGFyIGV4cHJlc3Npb25cIik7IH1cbiAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICBpZiAoY2ggPT09IFwiW1wiKSB7IGluQ2xhc3MgPSB0cnVlOyB9XG4gICAgICAgIGVsc2UgaWYgKGNoID09PSBcIl1cIiAmJiBpbkNsYXNzKSB7IGluQ2xhc3MgPSBmYWxzZTsgfVxuICAgICAgICBlbHNlIGlmIChjaCA9PT0gXCIvXCIgJiYgIWluQ2xhc3MpIHsgYnJlYWsgfVxuICAgICAgICBlc2NhcGVkID0gY2ggPT09IFwiXFxcXFwiO1xuICAgICAgfSBlbHNlIHsgZXNjYXBlZCA9IGZhbHNlOyB9XG4gICAgICArK3RoaXMucG9zO1xuICAgIH1cbiAgICB2YXIgcGF0dGVybiA9IHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIHRoaXMucG9zKTtcbiAgICArK3RoaXMucG9zO1xuICAgIHZhciBmbGFnc1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgdmFyIGZsYWdzID0gdGhpcy5yZWFkV29yZDEoKTtcbiAgICBpZiAodGhpcy5jb250YWluc0VzYykgeyB0aGlzLnVuZXhwZWN0ZWQoZmxhZ3NTdGFydCk7IH1cblxuICAgIC8vIFZhbGlkYXRlIHBhdHRlcm5cbiAgICB2YXIgc3RhdGUgPSB0aGlzLnJlZ2V4cFN0YXRlIHx8ICh0aGlzLnJlZ2V4cFN0YXRlID0gbmV3IFJlZ0V4cFZhbGlkYXRpb25TdGF0ZSh0aGlzKSk7XG4gICAgc3RhdGUucmVzZXQoc3RhcnQsIHBhdHRlcm4sIGZsYWdzKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVnRXhwRmxhZ3Moc3RhdGUpO1xuICAgIHRoaXMudmFsaWRhdGVSZWdFeHBQYXR0ZXJuKHN0YXRlKTtcblxuICAgIC8vIENyZWF0ZSBMaXRlcmFsI3ZhbHVlIHByb3BlcnR5IHZhbHVlLlxuICAgIHZhciB2YWx1ZSA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIHZhbHVlID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gRVNUcmVlIHJlcXVpcmVzIG51bGwgaWYgaXQgZmFpbGVkIHRvIGluc3RhbnRpYXRlIFJlZ0V4cCBvYmplY3QuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXN0cmVlL2VzdHJlZS9ibG9iL2EyNzAwM2FkZjRmZDdiZmFkNDRkZTljZWYzNzJhMmVhY2Q1MjdiMWMvZXM1Lm1kI3JlZ2V4cGxpdGVyYWxcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLnJlZ2V4cCwge3BhdHRlcm46IHBhdHRlcm4sIGZsYWdzOiBmbGFncywgdmFsdWU6IHZhbHVlfSlcbiAgfTtcblxuICAvLyBSZWFkIGFuIGludGVnZXIgaW4gdGhlIGdpdmVuIHJhZGl4LiBSZXR1cm4gbnVsbCBpZiB6ZXJvIGRpZ2l0c1xuICAvLyB3ZXJlIHJlYWQsIHRoZSBpbnRlZ2VyIHZhbHVlIG90aGVyd2lzZS4gV2hlbiBgbGVuYCBpcyBnaXZlbiwgdGhpc1xuICAvLyB3aWxsIHJldHVybiBgbnVsbGAgdW5sZXNzIHRoZSBpbnRlZ2VyIGhhcyBleGFjdGx5IGBsZW5gIGRpZ2l0cy5cblxuICBwcC5yZWFkSW50ID0gZnVuY3Rpb24ocmFkaXgsIGxlbiwgbWF5YmVMZWdhY3lPY3RhbE51bWVyaWNMaXRlcmFsKSB7XG4gICAgLy8gYGxlbmAgaXMgdXNlZCBmb3IgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZXMuIEluIHRoYXQgY2FzZSwgZGlzYWxsb3cgc2VwYXJhdG9ycy5cbiAgICB2YXIgYWxsb3dTZXBhcmF0b3JzID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDEyICYmIGxlbiA9PT0gdW5kZWZpbmVkO1xuXG4gICAgLy8gYG1heWJlTGVnYWN5T2N0YWxOdW1lcmljTGl0ZXJhbGAgaXMgdHJ1ZSBpZiBpdCBkb2Vzbid0IGhhdmUgcHJlZml4ICgweCwwbywwYilcbiAgICAvLyBhbmQgaXNuJ3QgZnJhY3Rpb24gcGFydCBub3IgZXhwb25lbnQgcGFydC4gSW4gdGhhdCBjYXNlLCBpZiB0aGUgZmlyc3QgZGlnaXRcbiAgICAvLyBpcyB6ZXJvIHRoZW4gZGlzYWxsb3cgc2VwYXJhdG9ycy5cbiAgICB2YXIgaXNMZWdhY3lPY3RhbE51bWVyaWNMaXRlcmFsID0gbWF5YmVMZWdhY3lPY3RhbE51bWVyaWNMaXRlcmFsICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcykgPT09IDQ4O1xuXG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3MsIHRvdGFsID0gMCwgbGFzdENvZGUgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwLCBlID0gbGVuID09IG51bGwgPyBJbmZpbml0eSA6IGxlbjsgaSA8IGU7ICsraSwgKyt0aGlzLnBvcykge1xuICAgICAgdmFyIGNvZGUgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpLCB2YWwgPSAodm9pZCAwKTtcblxuICAgICAgaWYgKGFsbG93U2VwYXJhdG9ycyAmJiBjb2RlID09PSA5NSkge1xuICAgICAgICBpZiAoaXNMZWdhY3lPY3RhbE51bWVyaWNMaXRlcmFsKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnBvcywgXCJOdW1lcmljIHNlcGFyYXRvciBpcyBub3QgYWxsb3dlZCBpbiBsZWdhY3kgb2N0YWwgbnVtZXJpYyBsaXRlcmFsc1wiKTsgfVxuICAgICAgICBpZiAobGFzdENvZGUgPT09IDk1KSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnBvcywgXCJOdW1lcmljIHNlcGFyYXRvciBtdXN0IGJlIGV4YWN0bHkgb25lIHVuZGVyc2NvcmVcIik7IH1cbiAgICAgICAgaWYgKGkgPT09IDApIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMucG9zLCBcIk51bWVyaWMgc2VwYXJhdG9yIGlzIG5vdCBhbGxvd2VkIGF0IHRoZSBmaXJzdCBvZiBkaWdpdHNcIik7IH1cbiAgICAgICAgbGFzdENvZGUgPSBjb2RlO1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY29kZSA+PSA5NykgeyB2YWwgPSBjb2RlIC0gOTcgKyAxMDsgfSAvLyBhXG4gICAgICBlbHNlIGlmIChjb2RlID49IDY1KSB7IHZhbCA9IGNvZGUgLSA2NSArIDEwOyB9IC8vIEFcbiAgICAgIGVsc2UgaWYgKGNvZGUgPj0gNDggJiYgY29kZSA8PSA1NykgeyB2YWwgPSBjb2RlIC0gNDg7IH0gLy8gMC05XG4gICAgICBlbHNlIHsgdmFsID0gSW5maW5pdHk7IH1cbiAgICAgIGlmICh2YWwgPj0gcmFkaXgpIHsgYnJlYWsgfVxuICAgICAgbGFzdENvZGUgPSBjb2RlO1xuICAgICAgdG90YWwgPSB0b3RhbCAqIHJhZGl4ICsgdmFsO1xuICAgIH1cblxuICAgIGlmIChhbGxvd1NlcGFyYXRvcnMgJiYgbGFzdENvZGUgPT09IDk1KSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnBvcyAtIDEsIFwiTnVtZXJpYyBzZXBhcmF0b3IgaXMgbm90IGFsbG93ZWQgYXQgdGhlIGxhc3Qgb2YgZGlnaXRzXCIpOyB9XG4gICAgaWYgKHRoaXMucG9zID09PSBzdGFydCB8fCBsZW4gIT0gbnVsbCAmJiB0aGlzLnBvcyAtIHN0YXJ0ICE9PSBsZW4pIHsgcmV0dXJuIG51bGwgfVxuXG4gICAgcmV0dXJuIHRvdGFsXG4gIH07XG5cbiAgZnVuY3Rpb24gc3RyaW5nVG9OdW1iZXIoc3RyLCBpc0xlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwpIHtcbiAgICBpZiAoaXNMZWdhY3lPY3RhbE51bWVyaWNMaXRlcmFsKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoc3RyLCA4KVxuICAgIH1cblxuICAgIC8vIGBwYXJzZUZsb2F0KHZhbHVlKWAgc3RvcHMgcGFyc2luZyBhdCB0aGUgZmlyc3QgbnVtZXJpYyBzZXBhcmF0b3IgdGhlbiByZXR1cm5zIGEgd3JvbmcgdmFsdWUuXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyLnJlcGxhY2UoL18vZywgXCJcIikpXG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdUb0JpZ0ludChzdHIpIHtcbiAgICBpZiAodHlwZW9mIEJpZ0ludCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIGBCaWdJbnQodmFsdWUpYCB0aHJvd3Mgc3ludGF4IGVycm9yIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgbnVtZXJpYyBzZXBhcmF0b3JzLlxuICAgIHJldHVybiBCaWdJbnQoc3RyLnJlcGxhY2UoL18vZywgXCJcIikpXG4gIH1cblxuICBwcC5yZWFkUmFkaXhOdW1iZXIgPSBmdW5jdGlvbihyYWRpeCkge1xuICAgIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICAgIHRoaXMucG9zICs9IDI7IC8vIDB4XG4gICAgdmFyIHZhbCA9IHRoaXMucmVhZEludChyYWRpeCk7XG4gICAgaWYgKHZhbCA9PSBudWxsKSB7IHRoaXMucmFpc2UodGhpcy5zdGFydCArIDIsIFwiRXhwZWN0ZWQgbnVtYmVyIGluIHJhZGl4IFwiICsgcmFkaXgpOyB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMSAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpID09PSAxMTApIHtcbiAgICAgIHZhbCA9IHN0cmluZ1RvQmlnSW50KHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIHRoaXMucG9zKSk7XG4gICAgICArK3RoaXMucG9zO1xuICAgIH0gZWxzZSBpZiAoaXNJZGVudGlmaWVyU3RhcnQodGhpcy5mdWxsQ2hhckNvZGVBdFBvcygpKSkgeyB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIklkZW50aWZpZXIgZGlyZWN0bHkgYWZ0ZXIgbnVtYmVyXCIpOyB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5udW0sIHZhbClcbiAgfTtcblxuICAvLyBSZWFkIGFuIGludGVnZXIsIG9jdGFsIGludGVnZXIsIG9yIGZsb2F0aW5nLXBvaW50IG51bWJlci5cblxuICBwcC5yZWFkTnVtYmVyID0gZnVuY3Rpb24oc3RhcnRzV2l0aERvdCkge1xuICAgIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICAgIGlmICghc3RhcnRzV2l0aERvdCAmJiB0aGlzLnJlYWRJbnQoMTAsIHVuZGVmaW5lZCwgdHJ1ZSkgPT09IG51bGwpIHsgdGhpcy5yYWlzZShzdGFydCwgXCJJbnZhbGlkIG51bWJlclwiKTsgfVxuICAgIHZhciBvY3RhbCA9IHRoaXMucG9zIC0gc3RhcnQgPj0gMiAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQoc3RhcnQpID09PSA0ODtcbiAgICBpZiAob2N0YWwgJiYgdGhpcy5zdHJpY3QpIHsgdGhpcy5yYWlzZShzdGFydCwgXCJJbnZhbGlkIG51bWJlclwiKTsgfVxuICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgICBpZiAoIW9jdGFsICYmICFzdGFydHNXaXRoRG90ICYmIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMSAmJiBuZXh0ID09PSAxMTApIHtcbiAgICAgIHZhciB2YWwkMSA9IHN0cmluZ1RvQmlnSW50KHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIHRoaXMucG9zKSk7XG4gICAgICArK3RoaXMucG9zO1xuICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHRoaXMuZnVsbENoYXJDb2RlQXRQb3MoKSkpIHsgdGhpcy5yYWlzZSh0aGlzLnBvcywgXCJJZGVudGlmaWVyIGRpcmVjdGx5IGFmdGVyIG51bWJlclwiKTsgfVxuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5udW0sIHZhbCQxKVxuICAgIH1cbiAgICBpZiAob2N0YWwgJiYgL1s4OV0vLnRlc3QodGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpKSkgeyBvY3RhbCA9IGZhbHNlOyB9XG4gICAgaWYgKG5leHQgPT09IDQ2ICYmICFvY3RhbCkgeyAvLyAnLidcbiAgICAgICsrdGhpcy5wb3M7XG4gICAgICB0aGlzLnJlYWRJbnQoMTApO1xuICAgICAgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gICAgfVxuICAgIGlmICgobmV4dCA9PT0gNjkgfHwgbmV4dCA9PT0gMTAxKSAmJiAhb2N0YWwpIHsgLy8gJ2VFJ1xuICAgICAgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMucG9zKTtcbiAgICAgIGlmIChuZXh0ID09PSA0MyB8fCBuZXh0ID09PSA0NSkgeyArK3RoaXMucG9zOyB9IC8vICcrLSdcbiAgICAgIGlmICh0aGlzLnJlYWRJbnQoMTApID09PSBudWxsKSB7IHRoaXMucmFpc2Uoc3RhcnQsIFwiSW52YWxpZCBudW1iZXJcIik7IH1cbiAgICB9XG4gICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHRoaXMuZnVsbENoYXJDb2RlQXRQb3MoKSkpIHsgdGhpcy5yYWlzZSh0aGlzLnBvcywgXCJJZGVudGlmaWVyIGRpcmVjdGx5IGFmdGVyIG51bWJlclwiKTsgfVxuXG4gICAgdmFyIHZhbCA9IHN0cmluZ1RvTnVtYmVyKHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIHRoaXMucG9zKSwgb2N0YWwpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEubnVtLCB2YWwpXG4gIH07XG5cbiAgLy8gUmVhZCBhIHN0cmluZyB2YWx1ZSwgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC1lc2NhcGVzLlxuXG4gIHBwLnJlYWRDb2RlUG9pbnQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpLCBjb2RlO1xuXG4gICAgaWYgKGNoID09PSAxMjMpIHsgLy8gJ3snXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNikgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgdmFyIGNvZGVQb3MgPSArK3RoaXMucG9zO1xuICAgICAgY29kZSA9IHRoaXMucmVhZEhleENoYXIodGhpcy5pbnB1dC5pbmRleE9mKFwifVwiLCB0aGlzLnBvcykgLSB0aGlzLnBvcyk7XG4gICAgICArK3RoaXMucG9zO1xuICAgICAgaWYgKGNvZGUgPiAweDEwRkZGRikgeyB0aGlzLmludmFsaWRTdHJpbmdUb2tlbihjb2RlUG9zLCBcIkNvZGUgcG9pbnQgb3V0IG9mIGJvdW5kc1wiKTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlID0gdGhpcy5yZWFkSGV4Q2hhcig0KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvZGVcbiAgfTtcblxuICBwcC5yZWFkU3RyaW5nID0gZnVuY3Rpb24ocXVvdGUpIHtcbiAgICB2YXIgb3V0ID0gXCJcIiwgY2h1bmtTdGFydCA9ICsrdGhpcy5wb3M7XG4gICAgZm9yICg7Oykge1xuICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMuaW5wdXQubGVuZ3RoKSB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpOyB9XG4gICAgICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICAgICAgaWYgKGNoID09PSBxdW90ZSkgeyBicmVhayB9XG4gICAgICBpZiAoY2ggPT09IDkyKSB7IC8vICdcXCdcbiAgICAgICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MpO1xuICAgICAgICBvdXQgKz0gdGhpcy5yZWFkRXNjYXBlZENoYXIoZmFsc2UpO1xuICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDIwMjggfHwgY2ggPT09IDB4MjAyOSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgMTApIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIlVudGVybWluYXRlZCBzdHJpbmcgY29uc3RhbnRcIik7IH1cbiAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHtcbiAgICAgICAgICB0aGlzLmN1ckxpbmUrKztcbiAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMucG9zO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNOZXdMaW5lKGNoKSkgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHN0cmluZyBjb25zdGFudFwiKTsgfVxuICAgICAgICArK3RoaXMucG9zO1xuICAgICAgfVxuICAgIH1cbiAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcysrKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcyQxLnN0cmluZywgb3V0KVxuICB9O1xuXG4gIC8vIFJlYWRzIHRlbXBsYXRlIHN0cmluZyB0b2tlbnMuXG5cbiAgdmFyIElOVkFMSURfVEVNUExBVEVfRVNDQVBFX0VSUk9SID0ge307XG5cbiAgcHAudHJ5UmVhZFRlbXBsYXRlVG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmluVGVtcGxhdGVFbGVtZW50ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5yZWFkVG1wbFRva2VuKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyID09PSBJTlZBTElEX1RFTVBMQVRFX0VTQ0FQRV9FUlJPUikge1xuICAgICAgICB0aGlzLnJlYWRJbnZhbGlkVGVtcGxhdGVUb2tlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pblRlbXBsYXRlRWxlbWVudCA9IGZhbHNlO1xuICB9O1xuXG4gIHBwLmludmFsaWRTdHJpbmdUb2tlbiA9IGZ1bmN0aW9uKHBvc2l0aW9uLCBtZXNzYWdlKSB7XG4gICAgaWYgKHRoaXMuaW5UZW1wbGF0ZUVsZW1lbnQgJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkpIHtcbiAgICAgIHRocm93IElOVkFMSURfVEVNUExBVEVfRVNDQVBFX0VSUk9SXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmFpc2UocG9zaXRpb24sIG1lc3NhZ2UpO1xuICAgIH1cbiAgfTtcblxuICBwcC5yZWFkVG1wbFRva2VuID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG91dCA9IFwiXCIsIGNodW5rU3RhcnQgPSB0aGlzLnBvcztcbiAgICBmb3IgKDs7KSB7XG4gICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIlVudGVybWluYXRlZCB0ZW1wbGF0ZVwiKTsgfVxuICAgICAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgICAgIGlmIChjaCA9PT0gOTYgfHwgY2ggPT09IDM2ICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpID09PSAxMjMpIHsgLy8gJ2AnLCAnJHsnXG4gICAgICAgIGlmICh0aGlzLnBvcyA9PT0gdGhpcy5zdGFydCAmJiAodGhpcy50eXBlID09PSB0eXBlcyQxLnRlbXBsYXRlIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMkMS5pbnZhbGlkVGVtcGxhdGUpKSB7XG4gICAgICAgICAgaWYgKGNoID09PSAzNikge1xuICAgICAgICAgICAgdGhpcy5wb3MgKz0gMjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzJDEuZG9sbGFyQnJhY2VMKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5iYWNrUXVvdGUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS50ZW1wbGF0ZSwgb3V0KVxuICAgICAgfVxuICAgICAgaWYgKGNoID09PSA5MikgeyAvLyAnXFwnXG4gICAgICAgIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKTtcbiAgICAgICAgb3V0ICs9IHRoaXMucmVhZEVzY2FwZWRDaGFyKHRydWUpO1xuICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICB9IGVsc2UgaWYgKGlzTmV3TGluZShjaCkpIHtcbiAgICAgICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MpO1xuICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgaWYgKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcykgPT09IDEwKSB7ICsrdGhpcy5wb3M7IH1cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBvdXQgKz0gXCJcXG5cIjtcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7XG4gICAgICAgICAgKyt0aGlzLmN1ckxpbmU7XG4gICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLnBvcztcbiAgICAgICAgfVxuICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICArK3RoaXMucG9zO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBSZWFkcyBhIHRlbXBsYXRlIHRva2VuIHRvIHNlYXJjaCBmb3IgdGhlIGVuZCwgd2l0aG91dCB2YWxpZGF0aW5nIGFueSBlc2NhcGUgc2VxdWVuY2VzXG4gIHBwLnJlYWRJbnZhbGlkVGVtcGxhdGVUb2tlbiA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAoOyB0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoOyB0aGlzLnBvcysrKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSB7XG4gICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiJFwiOlxuICAgICAgICBpZiAodGhpcy5pbnB1dFt0aGlzLnBvcyArIDFdICE9PSBcIntcIikge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcImBcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMkMS5pbnZhbGlkVGVtcGxhdGUsIHRoaXMuaW5wdXQuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5wb3MpKVxuXG4gICAgICAvLyBubyBkZWZhdWx0XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJVbnRlcm1pbmF0ZWQgdGVtcGxhdGVcIik7XG4gIH07XG5cbiAgLy8gVXNlZCB0byByZWFkIGVzY2FwZWQgY2hhcmFjdGVyc1xuXG4gIHBwLnJlYWRFc2NhcGVkQ2hhciA9IGZ1bmN0aW9uKGluVGVtcGxhdGUpIHtcbiAgICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQoKyt0aGlzLnBvcyk7XG4gICAgKyt0aGlzLnBvcztcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgY2FzZSAxMTA6IHJldHVybiBcIlxcblwiIC8vICduJyAtPiAnXFxuJ1xuICAgIGNhc2UgMTE0OiByZXR1cm4gXCJcXHJcIiAvLyAncicgLT4gJ1xccidcbiAgICBjYXNlIDEyMDogcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkSGV4Q2hhcigyKSkgLy8gJ3gnXG4gICAgY2FzZSAxMTc6IHJldHVybiBjb2RlUG9pbnRUb1N0cmluZyh0aGlzLnJlYWRDb2RlUG9pbnQoKSkgLy8gJ3UnXG4gICAgY2FzZSAxMTY6IHJldHVybiBcIlxcdFwiIC8vICd0JyAtPiAnXFx0J1xuICAgIGNhc2UgOTg6IHJldHVybiBcIlxcYlwiIC8vICdiJyAtPiAnXFxiJ1xuICAgIGNhc2UgMTE4OiByZXR1cm4gXCJcXHUwMDBiXCIgLy8gJ3YnIC0+ICdcXHUwMDBiJ1xuICAgIGNhc2UgMTAyOiByZXR1cm4gXCJcXGZcIiAvLyAnZicgLT4gJ1xcZidcbiAgICBjYXNlIDEzOiBpZiAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSA9PT0gMTApIHsgKyt0aGlzLnBvczsgfSAvLyAnXFxyXFxuJ1xuICAgIGNhc2UgMTA6IC8vICcgXFxuJ1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHsgdGhpcy5saW5lU3RhcnQgPSB0aGlzLnBvczsgKyt0aGlzLmN1ckxpbmU7IH1cbiAgICAgIHJldHVybiBcIlwiXG4gICAgY2FzZSA1NjpcbiAgICBjYXNlIDU3OlxuICAgICAgaWYgKHRoaXMuc3RyaWN0KSB7XG4gICAgICAgIHRoaXMuaW52YWxpZFN0cmluZ1Rva2VuKFxuICAgICAgICAgIHRoaXMucG9zIC0gMSxcbiAgICAgICAgICBcIkludmFsaWQgZXNjYXBlIHNlcXVlbmNlXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpblRlbXBsYXRlKSB7XG4gICAgICAgIHZhciBjb2RlUG9zID0gdGhpcy5wb3MgLSAxO1xuXG4gICAgICAgIHRoaXMuaW52YWxpZFN0cmluZ1Rva2VuKFxuICAgICAgICAgIGNvZGVQb3MsXG4gICAgICAgICAgXCJJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSBpbiB0ZW1wbGF0ZSBzdHJpbmdcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoY2ggPj0gNDggJiYgY2ggPD0gNTUpIHtcbiAgICAgICAgdmFyIG9jdGFsU3RyID0gdGhpcy5pbnB1dC5zdWJzdHIodGhpcy5wb3MgLSAxLCAzKS5tYXRjaCgvXlswLTddKy8pWzBdO1xuICAgICAgICB2YXIgb2N0YWwgPSBwYXJzZUludChvY3RhbFN0ciwgOCk7XG4gICAgICAgIGlmIChvY3RhbCA+IDI1NSkge1xuICAgICAgICAgIG9jdGFsU3RyID0gb2N0YWxTdHIuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgIG9jdGFsID0gcGFyc2VJbnQob2N0YWxTdHIsIDgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9zICs9IG9jdGFsU3RyLmxlbmd0aCAtIDE7XG4gICAgICAgIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgICAgICAgaWYgKChvY3RhbFN0ciAhPT0gXCIwXCIgfHwgY2ggPT09IDU2IHx8IGNoID09PSA1NykgJiYgKHRoaXMuc3RyaWN0IHx8IGluVGVtcGxhdGUpKSB7XG4gICAgICAgICAgdGhpcy5pbnZhbGlkU3RyaW5nVG9rZW4oXG4gICAgICAgICAgICB0aGlzLnBvcyAtIDEgLSBvY3RhbFN0ci5sZW5ndGgsXG4gICAgICAgICAgICBpblRlbXBsYXRlXG4gICAgICAgICAgICAgID8gXCJPY3RhbCBsaXRlcmFsIGluIHRlbXBsYXRlIHN0cmluZ1wiXG4gICAgICAgICAgICAgIDogXCJPY3RhbCBsaXRlcmFsIGluIHN0cmljdCBtb2RlXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG9jdGFsKVxuICAgICAgfVxuICAgICAgaWYgKGlzTmV3TGluZShjaCkpIHtcbiAgICAgICAgLy8gVW5pY29kZSBuZXcgbGluZSBjaGFyYWN0ZXJzIGFmdGVyIFxcIGdldCByZW1vdmVkIGZyb20gb3V0cHV0IGluIGJvdGhcbiAgICAgICAgLy8gdGVtcGxhdGUgbGl0ZXJhbHMgYW5kIHN0cmluZ3NcbiAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgIH1cbiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKVxuICAgIH1cbiAgfTtcblxuICAvLyBVc2VkIHRvIHJlYWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZXMgKCdcXHgnLCAnXFx1JywgJ1xcVScpLlxuXG4gIHBwLnJlYWRIZXhDaGFyID0gZnVuY3Rpb24obGVuKSB7XG4gICAgdmFyIGNvZGVQb3MgPSB0aGlzLnBvcztcbiAgICB2YXIgbiA9IHRoaXMucmVhZEludCgxNiwgbGVuKTtcbiAgICBpZiAobiA9PT0gbnVsbCkgeyB0aGlzLmludmFsaWRTdHJpbmdUb2tlbihjb2RlUG9zLCBcIkJhZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlXCIpOyB9XG4gICAgcmV0dXJuIG5cbiAgfTtcblxuICAvLyBSZWFkIGFuIGlkZW50aWZpZXIsIGFuZCByZXR1cm4gaXQgYXMgYSBzdHJpbmcuIFNldHMgYHRoaXMuY29udGFpbnNFc2NgXG4gIC8vIHRvIHdoZXRoZXIgdGhlIHdvcmQgY29udGFpbmVkIGEgJ1xcdScgZXNjYXBlLlxuICAvL1xuICAvLyBJbmNyZW1lbnRhbGx5IGFkZHMgb25seSBlc2NhcGVkIGNoYXJzLCBhZGRpbmcgb3RoZXIgY2h1bmtzIGFzLWlzXG4gIC8vIGFzIGEgbWljcm8tb3B0aW1pemF0aW9uLlxuXG4gIHBwLnJlYWRXb3JkMSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY29udGFpbnNFc2MgPSBmYWxzZTtcbiAgICB2YXIgd29yZCA9IFwiXCIsIGZpcnN0ID0gdHJ1ZSwgY2h1bmtTdGFydCA9IHRoaXMucG9zO1xuICAgIHZhciBhc3RyYWwgPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNjtcbiAgICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgdmFyIGNoID0gdGhpcy5mdWxsQ2hhckNvZGVBdFBvcygpO1xuICAgICAgaWYgKGlzSWRlbnRpZmllckNoYXIoY2gsIGFzdHJhbCkpIHtcbiAgICAgICAgdGhpcy5wb3MgKz0gY2ggPD0gMHhmZmZmID8gMSA6IDI7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSA5MikgeyAvLyBcIlxcXCJcbiAgICAgICAgdGhpcy5jb250YWluc0VzYyA9IHRydWU7XG4gICAgICAgIHdvcmQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICAgIHZhciBlc2NTdGFydCA9IHRoaXMucG9zO1xuICAgICAgICBpZiAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KCsrdGhpcy5wb3MpICE9PSAxMTcpIC8vIFwidVwiXG4gICAgICAgICAgeyB0aGlzLmludmFsaWRTdHJpbmdUb2tlbih0aGlzLnBvcywgXCJFeHBlY3RpbmcgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UgXFxcXHVYWFhYXCIpOyB9XG4gICAgICAgICsrdGhpcy5wb3M7XG4gICAgICAgIHZhciBlc2MgPSB0aGlzLnJlYWRDb2RlUG9pbnQoKTtcbiAgICAgICAgaWYgKCEoZmlyc3QgPyBpc0lkZW50aWZpZXJTdGFydCA6IGlzSWRlbnRpZmllckNoYXIpKGVzYywgYXN0cmFsKSlcbiAgICAgICAgICB7IHRoaXMuaW52YWxpZFN0cmluZ1Rva2VuKGVzY1N0YXJ0LCBcIkludmFsaWQgVW5pY29kZSBlc2NhcGVcIik7IH1cbiAgICAgICAgd29yZCArPSBjb2RlUG9pbnRUb1N0cmluZyhlc2MpO1xuICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmQgKyB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKVxuICB9O1xuXG4gIC8vIFJlYWQgYW4gaWRlbnRpZmllciBvciBrZXl3b3JkIHRva2VuLiBXaWxsIGNoZWNrIGZvciByZXNlcnZlZFxuICAvLyB3b3JkcyB3aGVuIG5lY2Vzc2FyeS5cblxuICBwcC5yZWFkV29yZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB3b3JkID0gdGhpcy5yZWFkV29yZDEoKTtcbiAgICB2YXIgdHlwZSA9IHR5cGVzJDEubmFtZTtcbiAgICBpZiAodGhpcy5rZXl3b3Jkcy50ZXN0KHdvcmQpKSB7XG4gICAgICB0eXBlID0ga2V5d29yZHNbd29yZF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGUsIHdvcmQpXG4gIH07XG5cbiAgLy8gQWNvcm4gaXMgYSB0aW55LCBmYXN0IEphdmFTY3JpcHQgcGFyc2VyIHdyaXR0ZW4gaW4gSmF2YVNjcmlwdC5cbiAgLy9cbiAgLy8gQWNvcm4gd2FzIHdyaXR0ZW4gYnkgTWFyaWpuIEhhdmVyYmVrZSwgSW5ndmFyIFN0ZXBhbnlhbiwgYW5kXG4gIC8vIHZhcmlvdXMgY29udHJpYnV0b3JzIGFuZCByZWxlYXNlZCB1bmRlciBhbiBNSVQgbGljZW5zZS5cbiAgLy9cbiAgLy8gR2l0IHJlcG9zaXRvcmllcyBmb3IgQWNvcm4gYXJlIGF2YWlsYWJsZSBhdFxuICAvL1xuICAvLyAgICAgaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvYWNvcm5cbiAgLy8gICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9hY29ybmpzL2Fjb3JuLmdpdFxuICAvL1xuICAvLyBQbGVhc2UgdXNlIHRoZSBbZ2l0aHViIGJ1ZyB0cmFja2VyXVtnaGJ0XSB0byByZXBvcnQgaXNzdWVzLlxuICAvL1xuICAvLyBbZ2hidF06IGh0dHBzOi8vZ2l0aHViLmNvbS9hY29ybmpzL2Fjb3JuL2lzc3Vlc1xuICAvL1xuICAvLyBbd2Fsa106IHV0aWwvd2Fsay5qc1xuXG5cbiAgdmFyIHZlcnNpb24gPSBcIjguOS4wXCI7XG5cbiAgUGFyc2VyLmFjb3JuID0ge1xuICAgIFBhcnNlcjogUGFyc2VyLFxuICAgIHZlcnNpb246IHZlcnNpb24sXG4gICAgZGVmYXVsdE9wdGlvbnM6IGRlZmF1bHRPcHRpb25zLFxuICAgIFBvc2l0aW9uOiBQb3NpdGlvbixcbiAgICBTb3VyY2VMb2NhdGlvbjogU291cmNlTG9jYXRpb24sXG4gICAgZ2V0TGluZUluZm86IGdldExpbmVJbmZvLFxuICAgIE5vZGU6IE5vZGUsXG4gICAgVG9rZW5UeXBlOiBUb2tlblR5cGUsXG4gICAgdG9rVHlwZXM6IHR5cGVzJDEsXG4gICAga2V5d29yZFR5cGVzOiBrZXl3b3JkcyxcbiAgICBUb2tDb250ZXh0OiBUb2tDb250ZXh0LFxuICAgIHRva0NvbnRleHRzOiB0eXBlcyxcbiAgICBpc0lkZW50aWZpZXJDaGFyOiBpc0lkZW50aWZpZXJDaGFyLFxuICAgIGlzSWRlbnRpZmllclN0YXJ0OiBpc0lkZW50aWZpZXJTdGFydCxcbiAgICBUb2tlbjogVG9rZW4sXG4gICAgaXNOZXdMaW5lOiBpc05ld0xpbmUsXG4gICAgbGluZUJyZWFrOiBsaW5lQnJlYWssXG4gICAgbGluZUJyZWFrRzogbGluZUJyZWFrRyxcbiAgICBub25BU0NJSXdoaXRlc3BhY2U6IG5vbkFTQ0lJd2hpdGVzcGFjZVxuICB9O1xuXG4gIC8vIFRoZSBtYWluIGV4cG9ydGVkIGludGVyZmFjZSAodW5kZXIgYHNlbGYuYWNvcm5gIHdoZW4gaW4gdGhlXG4gIC8vIGJyb3dzZXIpIGlzIGEgYHBhcnNlYCBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY29kZSBzdHJpbmcgYW5kXG4gIC8vIHJldHVybnMgYW4gYWJzdHJhY3Qgc3ludGF4IHRyZWUgYXMgc3BlY2lmaWVkIGJ5IFtNb3ppbGxhIHBhcnNlclxuICAvLyBBUEldW2FwaV0uXG4gIC8vXG4gIC8vIFthcGldOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1NwaWRlck1vbmtleS9QYXJzZXJfQVBJXG5cbiAgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUGFyc2VyLnBhcnNlKGlucHV0LCBvcHRpb25zKVxuICB9XG5cbiAgLy8gVGhpcyBmdW5jdGlvbiB0cmllcyB0byBwYXJzZSBhIHNpbmdsZSBleHByZXNzaW9uIGF0IGEgZ2l2ZW5cbiAgLy8gb2Zmc2V0IGluIGEgc3RyaW5nLiBVc2VmdWwgZm9yIHBhcnNpbmcgbWl4ZWQtbGFuZ3VhZ2UgZm9ybWF0c1xuICAvLyB0aGF0IGVtYmVkIEphdmFTY3JpcHQgZXhwcmVzc2lvbnMuXG5cbiAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uQXQoaW5wdXQsIHBvcywgb3B0aW9ucykge1xuICAgIHJldHVybiBQYXJzZXIucGFyc2VFeHByZXNzaW9uQXQoaW5wdXQsIHBvcywgb3B0aW9ucylcbiAgfVxuXG4gIC8vIEFjb3JuIGlzIG9yZ2FuaXplZCBhcyBhIHRva2VuaXplciBhbmQgYSByZWN1cnNpdmUtZGVzY2VudCBwYXJzZXIuXG4gIC8vIFRoZSBgdG9rZW5pemVyYCBleHBvcnQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSB0b2tlbml6ZXIuXG5cbiAgZnVuY3Rpb24gdG9rZW5pemVyKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFBhcnNlci50b2tlbml6ZXIoaW5wdXQsIG9wdGlvbnMpXG4gIH1cblxuICBleHBvcnRzLk5vZGUgPSBOb2RlO1xuICBleHBvcnRzLlBhcnNlciA9IFBhcnNlcjtcbiAgZXhwb3J0cy5Qb3NpdGlvbiA9IFBvc2l0aW9uO1xuICBleHBvcnRzLlNvdXJjZUxvY2F0aW9uID0gU291cmNlTG9jYXRpb247XG4gIGV4cG9ydHMuVG9rQ29udGV4dCA9IFRva0NvbnRleHQ7XG4gIGV4cG9ydHMuVG9rZW4gPSBUb2tlbjtcbiAgZXhwb3J0cy5Ub2tlblR5cGUgPSBUb2tlblR5cGU7XG4gIGV4cG9ydHMuZGVmYXVsdE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgZXhwb3J0cy5nZXRMaW5lSW5mbyA9IGdldExpbmVJbmZvO1xuICBleHBvcnRzLmlzSWRlbnRpZmllckNoYXIgPSBpc0lkZW50aWZpZXJDaGFyO1xuICBleHBvcnRzLmlzSWRlbnRpZmllclN0YXJ0ID0gaXNJZGVudGlmaWVyU3RhcnQ7XG4gIGV4cG9ydHMuaXNOZXdMaW5lID0gaXNOZXdMaW5lO1xuICBleHBvcnRzLmtleXdvcmRUeXBlcyA9IGtleXdvcmRzO1xuICBleHBvcnRzLmxpbmVCcmVhayA9IGxpbmVCcmVhaztcbiAgZXhwb3J0cy5saW5lQnJlYWtHID0gbGluZUJyZWFrRztcbiAgZXhwb3J0cy5ub25BU0NJSXdoaXRlc3BhY2UgPSBub25BU0NJSXdoaXRlc3BhY2U7XG4gIGV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbiAgZXhwb3J0cy5wYXJzZUV4cHJlc3Npb25BdCA9IHBhcnNlRXhwcmVzc2lvbkF0O1xuICBleHBvcnRzLnRva0NvbnRleHRzID0gdHlwZXM7XG4gIGV4cG9ydHMudG9rVHlwZXMgPSB0eXBlcyQxO1xuICBleHBvcnRzLnRva2VuaXplciA9IHRva2VuaXplcjtcbiAgZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjtcblxufSkpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBhZnRlclxuXG5mdW5jdGlvbiBhZnRlcihjb3VudCwgY2FsbGJhY2ssIGVycl9jYikge1xuICAgIHZhciBiYWlsID0gZmFsc2VcbiAgICBlcnJfY2IgPSBlcnJfY2IgfHwgbm9vcFxuICAgIHByb3h5LmNvdW50ID0gY291bnRcblxuICAgIHJldHVybiAoY291bnQgPT09IDApID8gY2FsbGJhY2soKSA6IHByb3h5XG5cbiAgICBmdW5jdGlvbiBwcm94eShlcnIsIHJlc3VsdCkge1xuICAgICAgICBpZiAocHJveHkuY291bnQgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhZnRlciBjYWxsZWQgdG9vIG1hbnkgdGltZXMnKVxuICAgICAgICB9XG4gICAgICAgIC0tcHJveHkuY291bnRcblxuICAgICAgICAvLyBhZnRlciBmaXJzdCBlcnJvciwgcmVzdCBhcmUgcGFzc2VkIHRvIGVycl9jYlxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBiYWlsID0gdHJ1ZVxuICAgICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICAgICAgLy8gZnV0dXJlIGVycm9yIGNhbGxiYWNrcyB3aWxsIGdvIHRvIGVycm9yIGhhbmRsZXJcbiAgICAgICAgICAgIGNhbGxiYWNrID0gZXJyX2NiXG4gICAgICAgIH0gZWxzZSBpZiAocHJveHkuY291bnQgPT09IDAgJiYgIWJhaWwpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdClcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG4iLCIvKipcbiAqIEFuIGFic3RyYWN0aW9uIGZvciBzbGljaW5nIGFuIGFycmF5YnVmZmVyIGV2ZW4gd2hlblxuICogQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlIGlzIG5vdCBzdXBwb3J0ZWRcbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYXJyYXlidWZmZXIsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYXJyYXlidWZmZXIuYnl0ZUxlbmd0aDtcbiAgc3RhcnQgPSBzdGFydCB8fCAwO1xuICBlbmQgPSBlbmQgfHwgYnl0ZXM7XG5cbiAgaWYgKGFycmF5YnVmZmVyLnNsaWNlKSB7IHJldHVybiBhcnJheWJ1ZmZlci5zbGljZShzdGFydCwgZW5kKTsgfVxuXG4gIGlmIChzdGFydCA8IDApIHsgc3RhcnQgKz0gYnl0ZXM7IH1cbiAgaWYgKGVuZCA8IDApIHsgZW5kICs9IGJ5dGVzOyB9XG4gIGlmIChlbmQgPiBieXRlcykgeyBlbmQgPSBieXRlczsgfVxuXG4gIGlmIChzdGFydCA+PSBieXRlcyB8fCBzdGFydCA+PSBlbmQgfHwgYnl0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICB9XG5cbiAgdmFyIGFidiA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGVuZCAtIHN0YXJ0KTtcbiAgZm9yICh2YXIgaSA9IHN0YXJ0LCBpaSA9IDA7IGkgPCBlbmQ7IGkrKywgaWkrKykge1xuICAgIHJlc3VsdFtpaV0gPSBhYnZbaV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5idWZmZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb2JqZWN0QXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBjb21wYXJlIGFuZCBpc0J1ZmZlciB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciB4ID0gYS5sZW5ndGg7XG4gIHZhciB5ID0gYi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV07XG4gICAgICB5ID0gYltpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgaWYgKGdsb2JhbC5CdWZmZXIgJiYgdHlwZW9mIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcihiKTtcbiAgfVxuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKTtcbn1cblxuLy8gYmFzZWQgb24gbm9kZSBhc3NlcnQsIG9yaWdpbmFsIG5vdGljZTpcbi8vIE5COiBUaGUgVVJMIHRvIHRoZSBDb21tb25KUyBzcGVjIGlzIGtlcHQganVzdCBmb3IgdHJhZGl0aW9uLlxuLy8gICAgIG5vZGUtYXNzZXJ0IGhhcyBldm9sdmVkIGEgbG90IHNpbmNlIHRoZW4sIGJvdGggaW4gQVBJIGFuZCBiZWhhdmlvci5cblxuLy8gaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvVW5pdF9UZXN0aW5nLzEuMFxuLy9cbi8vIFRISVMgSVMgTk9UIFRFU1RFRCBOT1IgTElLRUxZIFRPIFdPUksgT1VUU0lERSBWOCFcbi8vXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbC8nKTtcbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9vKCkge30ubmFtZSA9PT0gJ2Zvbyc7XG59KCkpO1xuZnVuY3Rpb24gcFRvU3RyaW5nIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNWaWV3KGFycmJ1Zikge1xuICBpZiAoaXNCdWZmZXIoYXJyYnVmKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYnVmKTtcbiAgfVxuICBpZiAoIWFycmJ1Zikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYXJyYnVmIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXJyYnVmLmJ1ZmZlciAmJiBhcnJidWYuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4vLyAxLiBUaGUgYXNzZXJ0IG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB0aHJvd1xuLy8gQXNzZXJ0aW9uRXJyb3IncyB3aGVuIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4gVGhlXG4vLyBhc3NlcnQgbW9kdWxlIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIGludGVyZmFjZS5cblxudmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7XG5cbi8vIDIuIFRoZSBBc3NlcnRpb25FcnJvciBpcyBkZWZpbmVkIGluIGFzc2VydC5cbi8vIG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiBtZXNzYWdlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCB9KVxuXG52YXIgcmVnZXggPSAvXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9ibG9iL2FkZWVlZWM4YmZjYzYwNjhiMTg3ZDdkOWZiM2Q1YmIxZDNhMzA4OTkvaW1wbGVtZW50YXRpb24uanNcbmZ1bmN0aW9uIGdldE5hbWUoZnVuYykge1xuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmMubmFtZTtcbiAgfVxuICB2YXIgc3RyID0gZnVuYy50b1N0cmluZygpO1xuICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXgpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG59XG5hc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7XG4gIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICB0aGlzLm9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvcjtcbiAgaWYgKG9wdGlvbnMubWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gZ2V0TmFtZShzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICAgICAgdmFyIGlkeCA9IG91dC5pbmRleE9mKCdcXG4nICsgZm5fbmFtZSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGxvY2F0ZWQgdGhlIGZ1bmN0aW9uIGZyYW1lXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gc3RyaXAgb3V0IGV2ZXJ5dGhpbmcgYmVmb3JlIGl0IChhbmQgaXRzIGxpbmUpXG4gICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXFxuJywgaWR4ICsgMSk7XG4gICAgICAgIG91dCA9IG91dC5zdWJzdHJpbmcobmV4dF9saW5lICsgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sgPSBvdXQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxudXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gdHJ1bmNhdGUocywgbikge1xuICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgbiA/IHMgOiBzLnNsaWNlKDAsIG4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzO1xuICB9XG59XG5mdW5jdGlvbiBpbnNwZWN0KHNvbWV0aGluZykge1xuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzIHx8ICF1dGlsLmlzRnVuY3Rpb24oc29tZXRoaW5nKSkge1xuICAgIHJldHVybiB1dGlsLmluc3BlY3Qoc29tZXRoaW5nKTtcbiAgfVxuICB2YXIgcmF3bmFtZSA9IGdldE5hbWUoc29tZXRoaW5nKTtcbiAgdmFyIG5hbWUgPSByYXduYW1lID8gJzogJyArIHJhd25hbWUgOiAnJztcbiAgcmV0dXJuICdbRnVuY3Rpb24nICsgIG5hbWUgKyAnXSc7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHtcbiAgcmV0dXJuIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5hY3R1YWwpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmV4cGVjdGVkKSwgMTI4KTtcbn1cblxuLy8gQXQgcHJlc2VudCBvbmx5IHRoZSB0aHJlZSBrZXlzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCBhbmRcbi8vIHVuZGVyc3Rvb2QgYnkgdGhlIHNwZWMuIEltcGxlbWVudGF0aW9ucyBvciBzdWIgbW9kdWxlcyBjYW4gcGFzc1xuLy8gb3RoZXIga2V5cyB0byB0aGUgQXNzZXJ0aW9uRXJyb3IncyBjb25zdHJ1Y3RvciAtIHRoZXkgd2lsbCBiZVxuLy8gaWdub3JlZC5cblxuLy8gMy4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gIEFsbCBhc3NlcnRpb24gbWV0aG9kcyBwcm92aWRlXG4vLyBib3RoIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyB0byB0aGUgYXNzZXJ0aW9uIGVycm9yIGZvclxuLy8gZGlzcGxheSBwdXJwb3Nlcy5cblxuZnVuY3Rpb24gZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvciwgc3RhY2tTdGFydEZ1bmN0aW9uKSB7XG4gIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3Ioe1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0RnVuY3Rpb246IHN0YWNrU3RhcnRGdW5jdGlvblxuICB9KTtcbn1cblxuLy8gRVhURU5TSU9OISBhbGxvd3MgZm9yIHdlbGwgYmVoYXZlZCBlcnJvcnMgZGVmaW5lZCBlbHNld2hlcmUuXG5hc3NlcnQuZmFpbCA9IGZhaWw7XG5cbi8vIDQuIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhZ3VhcmQuXG4vLyBhc3NlcnQub2soZ3VhcmQsIG1lc3NhZ2Vfb3B0KTtcbi8vIFRoaXMgc3RhdGVtZW50IGlzIGVxdWl2YWxlbnQgdG8gYXNzZXJ0LmVxdWFsKHRydWUsICEhZ3VhcmQsXG4vLyBtZXNzYWdlX29wdCk7LiBUbyB0ZXN0IHN0cmljdGx5IGZvciB0aGUgdmFsdWUgdHJ1ZSwgdXNlXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgZ3VhcmQsIG1lc3NhZ2Vfb3B0KTsuXG5cbmZ1bmN0aW9uIG9rKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7XG59XG5hc3NlcnQub2sgPSBvaztcblxuLy8gNS4gVGhlIGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzaGFsbG93LCBjb2VyY2l2ZSBlcXVhbGl0eSB3aXRoXG4vLyA9PS5cbi8vIGFzc2VydC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpO1xufTtcblxuLy8gNi4gVGhlIG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHdoZXRoZXIgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbFxuLy8gd2l0aCAhPSBhc3NlcnQubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbiBub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPScsIGFzc2VydC5ub3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDcuIFRoZSBlcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgYSBkZWVwIGVxdWFsaXR5IHJlbGF0aW9uLlxuLy8gYXNzZXJ0LmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5kZWVwRXF1YWwgPSBmdW5jdGlvbiBkZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcEVxdWFsJywgYXNzZXJ0LmRlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwU3RyaWN0RXF1YWwnLCBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKSB7XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgJiYgaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkgPT09IDA7XG5cbiAgLy8gNy4yLiBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBEYXRlIG9iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0aW1lLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKGFjdHVhbCkgJiYgdXRpbC5pc0RhdGUoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMgSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBSZWdFeHAgb2JqZWN0IHdpdGggdGhlIHNhbWUgc291cmNlIGFuZFxuICAvLyBwcm9wZXJ0aWVzIChgZ2xvYmFsYCwgYG11bHRpbGluZWAsIGBsYXN0SW5kZXhgLCBgaWdub3JlQ2FzZWApLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuc291cmNlID09PSBleHBlY3RlZC5zb3VyY2UgJiZcbiAgICAgICAgICAgYWN0dWFsLmdsb2JhbCA9PT0gZXhwZWN0ZWQuZ2xvYmFsICYmXG4gICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJlxuICAgICAgICAgICBhY3R1YWwubGFzdEluZGV4ID09PSBleHBlY3RlZC5sYXN0SW5kZXggJiZcbiAgICAgICAgICAgYWN0dWFsLmlnbm9yZUNhc2UgPT09IGV4cGVjdGVkLmlnbm9yZUNhc2U7XG5cbiAgLy8gNy40LiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgKGV4cGVjdGVkID09PSBudWxsIHx8IHR5cGVvZiBleHBlY3RlZCAhPT0gJ29iamVjdCcpKSB7XG4gICAgcmV0dXJuIHN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZiB0eXBlZCBhcnJheXMsIHdyYXAgdGhlaXIgdW5kZXJseWluZ1xuICAvLyBBcnJheUJ1ZmZlcnMgaW4gYSBCdWZmZXIgZWFjaCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZVxuICAvLyBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGUgYXJyYXlzIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjaGVja2VkIGJ5XG4gIC8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKGFrYSBwVG9TdHJpbmcpLiBOZXZlciBwZXJmb3JtIGJpbmFyeVxuICAvLyBjb21wYXJpc29ucyBmb3IgRmxvYXQqQXJyYXlzLCB0aG91Z2gsIHNpbmNlIGUuZy4gKzAgPT09IC0wIGJ1dCB0aGVpclxuICAvLyBiaXQgcGF0dGVybnMgYXJlIG5vdCBpZGVudGljYWwuXG4gIH0gZWxzZSBpZiAoaXNWaWV3KGFjdHVhbCkgJiYgaXNWaWV3KGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgIHBUb1N0cmluZyhhY3R1YWwpID09PSBwVG9TdHJpbmcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgIShhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICAgICAgICAgICAgIGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpIHtcbiAgICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhY3R1YWwuYnVmZmVyKSxcbiAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShleHBlY3RlZC5idWZmZXIpKSA9PT0gMDtcblxuICAvLyA3LjUgRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgIT09IGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBtZW1vcyA9IG1lbW9zIHx8IHthY3R1YWw6IFtdLCBleHBlY3RlZDogW119O1xuXG4gICAgdmFyIGFjdHVhbEluZGV4ID0gbWVtb3MuYWN0dWFsLmluZGV4T2YoYWN0dWFsKTtcbiAgICBpZiAoYWN0dWFsSW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoYWN0dWFsSW5kZXggPT09IG1lbW9zLmV4cGVjdGVkLmluZGV4T2YoZXhwZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLmFjdHVhbC5wdXNoKGFjdHVhbCk7XG4gICAgbWVtb3MuZXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG5cbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBvbmUgaXMgYSBwcmltaXRpdmUsIHRoZSBvdGhlciBtdXN0IGJlIHNhbWVcbiAgaWYgKHV0aWwuaXNQcmltaXRpdmUoYSkgfHwgdXRpbC5pc1ByaW1pdGl2ZShiKSlcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgaWYgKHN0cmljdCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBhSXNBcmdzID0gaXNBcmd1bWVudHMoYSk7XG4gIHZhciBiSXNBcmdzID0gaXNBcmd1bWVudHMoYik7XG4gIGlmICgoYUlzQXJncyAmJiAhYklzQXJncykgfHwgKCFhSXNBcmdzICYmIGJJc0FyZ3MpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFJc0FyZ3MpIHtcbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBfZGVlcEVxdWFsKGEsIGIsIHN0cmljdCk7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgdmFyIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT09IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQubm90RGVlcFN0cmljdEVxdWFsID0gbm90RGVlcFN0cmljdEVxdWFsO1xuZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwU3RyaWN0RXF1YWwnLCBub3REZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59XG5cblxuLy8gOS4gVGhlIHN0cmljdCBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc3RyaWN0IGVxdWFsaXR5LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbi8vIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PT0nLCBhc3NlcnQuc3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG4vLyAxMC4gVGhlIHN0cmljdCBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciBzdHJpY3QgaW5lcXVhbGl0eSwgYXNcbi8vIGRldGVybWluZWQgYnkgIT09LiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gbm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElnbm9yZS4gIFRoZSBpbnN0YW5jZW9mIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgYXJyb3cgZnVuY3Rpb25zLlxuICB9XG5cbiAgaWYgKEVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIF90cnlCbG9jayhibG9jaykge1xuICB2YXIgZXJyb3I7XG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIF90aHJvd3Moc2hvdWxkVGhyb3csIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICB2YXIgYWN0dWFsO1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBleHBlY3RlZDtcbiAgICBleHBlY3RlZCA9IG51bGw7XG4gIH1cblxuICBhY3R1YWwgPSBfdHJ5QmxvY2soYmxvY2spO1xuXG4gIG1lc3NhZ2UgPSAoZXhwZWN0ZWQgJiYgZXhwZWN0ZWQubmFtZSA/ICcgKCcgKyBleHBlY3RlZC5uYW1lICsgJykuJyA6ICcuJykgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgPyAnICcgKyBtZXNzYWdlIDogJy4nKTtcblxuICBpZiAoc2hvdWxkVGhyb3cgJiYgIWFjdHVhbCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ01pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgdmFyIHVzZXJQcm92aWRlZE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBpc1Vud2FudGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIHV0aWwuaXNFcnJvcihhY3R1YWwpO1xuICB2YXIgaXNVbmV4cGVjdGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIGFjdHVhbCAmJiAhZXhwZWN0ZWQ7XG5cbiAgaWYgKChpc1Vud2FudGVkRXhjZXB0aW9uICYmXG4gICAgICB1c2VyUHJvdmlkZWRNZXNzYWdlICYmXG4gICAgICBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHxcbiAgICAgIGlzVW5leHBlY3RlZEV4Y2VwdGlvbikge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJlxuICAgICAgIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fCAoIXNob3VsZFRocm93ICYmIGFjdHVhbCkpIHtcbiAgICB0aHJvdyBhY3R1YWw7XG4gIH1cbn1cblxuLy8gMTEuIEV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yOlxuLy8gYXNzZXJ0LnRocm93cyhibG9jaywgRXJyb3Jfb3B0LCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyh0cnVlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuLy8gRVhURU5TSU9OISBUaGlzIGlzIGFubm95aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhpcyBtb2R1bGUuXG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MoZmFsc2UsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKGVycikgeyBpZiAoZXJyKSB0aHJvdyBlcnI7IH07XG5cbi8vIEV4cG9zZSBhIHN0cmljdCBvbmx5IHZhcmlhbnQgb2YgYXNzZXJ0XG5mdW5jdGlvbiBzdHJpY3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09Jywgc3RyaWN0KTtcbn1cbmFzc2VydC5zdHJpY3QgPSBvYmplY3RBc3NpZ24oc3RyaWN0LCBhc3NlcnQsIHtcbiAgZXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgZGVlcEVxdWFsOiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsLFxuICBub3RFcXVhbDogYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLFxuICBub3REZWVwRXF1YWw6IGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWxcbn0pO1xuYXNzZXJ0LnN0cmljdC5zdHJpY3QgPSBhc3NlcnQuc3RyaWN0O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24oZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhciBpID0gMTtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG4gICAgc3dpdGNoICh4KSB7XG4gICAgICBjYXNlICclcyc6IHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHtcbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKGlzVW5kZWZpbmVkKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICBpZiAocHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy50aHJvd0RlcHJlY2F0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn07XG5cblxudmFyIGRlYnVncyA9IHt9O1xudmFyIGRlYnVnRW52aXJvbjtcbmV4cG9ydHMuZGVidWdsb2cgPSBmdW5jdGlvbihzZXQpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKGRlYnVnRW52aXJvbikpXG4gICAgZGVidWdFbnZpcm9uID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJztcbiAgc2V0ID0gc2V0LnRvVXBwZXJDYXNlKCk7XG4gIGlmICghZGVidWdzW3NldF0pIHtcbiAgICBpZiAobmV3IFJlZ0V4cCgnXFxcXGInICsgc2V0ICsgJ1xcXFxiJywgJ2knKS50ZXN0KGRlYnVnRW52aXJvbikpIHtcbiAgICAgIHZhciBwaWQgPSBwcm9jZXNzLnBpZDtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtc2cgPSBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCclcyAlZDogJXMnLCBzZXQsIHBpZCwgbXNnKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlYnVnc1tzZXRdO1xufTtcblxuXG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcnlzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBvcHRpb25zIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgb3V0cHV0LlxuICovXG4vKiBsZWdhY3k6IG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycyovXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykge1xuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgdmFyIGN0eCA9IHtcbiAgICBzZWVuOiBbXSxcbiAgICBzdHlsaXplOiBzdHlsaXplTm9Db2xvclxuICB9O1xuICAvLyBsZWdhY3kuLi5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSBjdHguY29sb3JzID0gYXJndW1lbnRzWzNdO1xuICBpZiAoaXNCb29sZWFuKG9wdHMpKSB7XG4gICAgLy8gbGVnYWN5Li4uXG4gICAgY3R4LnNob3dIaWRkZW4gPSBvcHRzO1xuICB9IGVsc2UgaWYgKG9wdHMpIHtcbiAgICAvLyBnb3QgYW4gXCJvcHRpb25zXCIgb2JqZWN0XG4gICAgZXhwb3J0cy5fZXh0ZW5kKGN0eCwgb3B0cyk7XG4gIH1cbiAgLy8gc2V0IGRlZmF1bHQgb3B0aW9uc1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pKSBjdHguc2hvd0hpZGRlbiA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpKSBjdHguY29sb3JzID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkpIGN0eC5jdXN0b21JbnNwZWN0ID0gdHJ1ZTtcbiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgb2JqLCBjdHguZGVwdGgpO1xufVxuZXhwb3J0cy5pbnNwZWN0ID0gaW5zcGVjdDtcblxuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3Ncbmluc3BlY3QuY29sb3JzID0ge1xuICAnYm9sZCcgOiBbMSwgMjJdLFxuICAnaXRhbGljJyA6IFszLCAyM10sXG4gICd1bmRlcmxpbmUnIDogWzQsIDI0XSxcbiAgJ2ludmVyc2UnIDogWzcsIDI3XSxcbiAgJ3doaXRlJyA6IFszNywgMzldLFxuICAnZ3JleScgOiBbOTAsIDM5XSxcbiAgJ2JsYWNrJyA6IFszMCwgMzldLFxuICAnYmx1ZScgOiBbMzQsIDM5XSxcbiAgJ2N5YW4nIDogWzM2LCAzOV0sXG4gICdncmVlbicgOiBbMzIsIDM5XSxcbiAgJ21hZ2VudGEnIDogWzM1LCAzOV0sXG4gICdyZWQnIDogWzMxLCAzOV0sXG4gICd5ZWxsb3cnIDogWzMzLCAzOV1cbn07XG5cbi8vIERvbid0IHVzZSAnYmx1ZScgbm90IHZpc2libGUgb24gY21kLmV4ZVxuaW5zcGVjdC5zdHlsZXMgPSB7XG4gICdzcGVjaWFsJzogJ2N5YW4nLFxuICAnbnVtYmVyJzogJ3llbGxvdycsXG4gICdib29sZWFuJzogJ3llbGxvdycsXG4gICd1bmRlZmluZWQnOiAnZ3JleScsXG4gICdudWxsJzogJ2JvbGQnLFxuICAnc3RyaW5nJzogJ2dyZWVuJyxcbiAgJ2RhdGUnOiAnbWFnZW50YScsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gICdyZWdleHAnOiAncmVkJ1xufTtcblxuXG5mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0gKyAnbScgKyBzdHIgK1xuICAgICAgICAgICAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzdHlsaXplTm9Db2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICByZXR1cm4gc3RyO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7XG4gIHZhciBoYXNoID0ge307XG5cbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlkeCkge1xuICAgIGhhc2hbdmFsXSA9IHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdFxuICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiZcbiAgICAgIHZhbHVlICYmXG4gICAgICBpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpICYmXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgICAgIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpO1xuICAgIGlmICghaXNTdHJpbmcocmV0KSkge1xuICAgICAgcmV0ID0gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllc1xuICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuICBpZiAocHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHByaW1pdGl2ZTtcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gIHZhciB2aXNpYmxlS2V5cyA9IGFycmF5VG9IYXNoKGtleXMpO1xuXG4gIGlmIChjdHguc2hvd0hpZGRlbikge1xuICAgIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIH1cblxuICAvLyBJRSBkb2Vzbid0IG1ha2UgZXJyb3IgZmllbGRzIG5vbi1lbnVtZXJhYmxlXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG4gIGlmIChpc0Vycm9yKHZhbHVlKVxuICAgICAgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7XG4gICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFNvbWUgdHlwZSBvZiBvYmplY3Qgd2l0aG91dCBwcm9wZXJ0aWVzIGNhbiBiZSBzaG9ydGN1dHRlZC5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICB2YXIgbmFtZSA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZSArICddJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG4gICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNlID0gJycsIGFycmF5ID0gZmFsc2UsIGJyYWNlcyA9IFsneycsICd9J107XG5cbiAgLy8gTWFrZSBBcnJheSBzYXkgdGhhdCB0aGV5IGFyZSBBcnJheVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfVxuXG4gIC8vIE1ha2UgZnVuY3Rpb25zIHNheSB0aGF0IHRoZXkgYXJlIGZ1bmN0aW9uc1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuICsgJ10nO1xuICB9XG5cbiAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBlcnJvciB3aXRoIG1lc3NhZ2UgZmlyc3Qgc2F5IHRoZSBlcnJvclxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuXG4gIHZhciBvdXRwdXQ7XG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgcmV0dXJuIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIHNpbXBsZSA9ICdcXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpICsgJ1xcJyc7XG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwgJ3N0cmluZycpO1xuICB9XG4gIGlmIChpc051bWJlcih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdudW1iZXInKTtcbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7XG4gIC8vIEZvciBzb21lIHJlYXNvbiB0eXBlb2YgbnVsbCBpcyBcIm9iamVjdFwiLCBzbyBzcGVjaWFsIGNhc2UgaGVyZS5cbiAgaWYgKGlzTnVsbCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCdudWxsJywgJ251bGwnKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSh2YWx1ZSwgU3RyaW5nKGkpKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBTdHJpbmcoaSksIHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIGtleSwgdHJ1ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSkge1xuICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7IHZhbHVlOiB2YWx1ZVtrZXldIH07XG4gIGlmIChkZXNjLmdldCkge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgIG5hbWUgPSAnWycgKyBrZXkgKyAnXSc7XG4gIH1cbiAgaWYgKCFzdHIpIHtcbiAgICBpZiAoY3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKSA8IDApIHtcbiAgICAgIGlmIChpc051bGwocmVjdXJzZVRpbWVzKSkge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCByZWN1cnNlVGltZXMgLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykuc3Vic3RyKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9ICdcXG4nICsgc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0NpcmN1bGFyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc1VuZGVmaW5lZChuYW1lKSkge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbn1cblxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZywgJycpLmxlbmd0aCArIDE7XG4gIH0sIDApO1xuXG4gIGlmIChsZW5ndGggPiA2MCkge1xuICAgIHJldHVybiBicmFjZXNbMF0gK1xuICAgICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgb3V0cHV0LmpvaW4oJyxcXG4gICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgYnJhY2VzWzFdO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTtcbn1cblxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuZnVuY3Rpb24gaXNBcnJheShhcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBpc09iamVjdChkKSAmJiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gaXNPYmplY3QoZSkgJiZcbiAgICAgIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IHJlcXVpcmUoJy4vc3VwcG9ydC9pc0J1ZmZlcicpO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5cblxuZnVuY3Rpb24gcGFkKG4pIHtcbiAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4udG9TdHJpbmcoMTApIDogbi50b1N0cmluZygxMCk7XG59XG5cblxudmFyIG1vbnRocyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLFxuICAgICAgICAgICAgICAnT2N0JywgJ05vdicsICdEZWMnXTtcblxuLy8gMjYgRmViIDE2OjE5OjM0XG5mdW5jdGlvbiB0aW1lc3RhbXAoKSB7XG4gIHZhciBkID0gbmV3IERhdGUoKTtcbiAgdmFyIHRpbWUgPSBbcGFkKGQuZ2V0SG91cnMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldE1pbnV0ZXMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcbiAgcmV0dXJuIFtkLmdldERhdGUoKSwgbW9udGhzW2QuZ2V0TW9udGgoKV0sIHRpbWVdLmpvaW4oJyAnKTtcbn1cblxuXG4vLyBsb2cgaXMganVzdCBhIHRoaW4gd3JhcHBlciB0byBjb25zb2xlLmxvZyB0aGF0IHByZXBlbmRzIGEgdGltZXN0YW1wXG5leHBvcnRzLmxvZyA9IGZ1bmN0aW9uKCkge1xuICBjb25zb2xlLmxvZygnJXMgLSAlcycsIHRpbWVzdGFtcCgpLCBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXIuXG4gKlxuICogVGhlIEZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0cyBmcm9tIGxhbmcuanMgcmV3cml0dGVuIGFzIGEgc3RhbmRhbG9uZVxuICogZnVuY3Rpb24gKG5vdCBvbiBGdW5jdGlvbi5wcm90b3R5cGUpLiBOT1RFOiBJZiB0aGlzIGZpbGUgaXMgdG8gYmUgbG9hZGVkXG4gKiBkdXJpbmcgYm9vdHN0cmFwcGluZyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJld3JpdHRlbiB1c2luZyBzb21lIG5hdGl2ZVxuICogZnVuY3Rpb25zIGFzIHByb3RvdHlwZSBzZXR1cCB1c2luZyBub3JtYWwgSmF2YVNjcmlwdCBkb2VzIG5vdCB3b3JrIGFzXG4gKiBleHBlY3RlZCBkdXJpbmcgYm9vdHN0cmFwcGluZyAoc2VlIG1pcnJvci5qcyBpbiByMTE0OTAzKS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHdoaWNoIG5lZWRzIHRvIGluaGVyaXQgdGhlXG4gKiAgICAgcHJvdG90eXBlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGluaGVyaXQgcHJvdG90eXBlIGZyb20uXG4gKi9cbmV4cG9ydHMuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5leHBvcnRzLl9leHRlbmQgPSBmdW5jdGlvbihvcmlnaW4sIGFkZCkge1xuICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBhZGQgaXNuJ3QgYW4gb2JqZWN0XG4gIGlmICghYWRkIHx8ICFpc09iamVjdChhZGQpKSByZXR1cm4gb3JpZ2luO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWRkKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIG9yaWdpbltrZXlzW2ldXSA9IGFkZFtrZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gb3JpZ2luO1xufTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbJ2V4cG9ydHMnLCAnLi9kZWZhdWx0VHJhdmVsZXInLCAnLi9hdHRhY2hDb21tZW50cyddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGZhY3RvcnkoZXhwb3J0cywgcmVxdWlyZSgnLi9kZWZhdWx0VHJhdmVsZXInKSwgcmVxdWlyZSgnLi9hdHRhY2hDb21tZW50cycpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbW9kID0ge1xuICAgICAgZXhwb3J0czoge31cbiAgICB9O1xuICAgIGZhY3RvcnkobW9kLmV4cG9ydHMsIGdsb2JhbC5kZWZhdWx0VHJhdmVsZXIsIGdsb2JhbC5hdHRhY2hDb21tZW50cyk7XG4gICAgZ2xvYmFsLmFzdHJhdmVsID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzLCBfZGVmYXVsdFRyYXZlbGVyLCBfYXR0YWNoQ29tbWVudHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4gIGV4cG9ydHMubWFrZVRyYXZlbGVyID0gZXhwb3J0cy5hdHRhY2hDb21tZW50cyA9IGV4cG9ydHMuZGVmYXVsdFRyYXZlbGVyID0gdW5kZWZpbmVkO1xuXG4gIHZhciBfZGVmYXVsdFRyYXZlbGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmF1bHRUcmF2ZWxlcik7XG5cbiAgdmFyIF9hdHRhY2hDb21tZW50czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hdHRhY2hDb21tZW50cyk7XG5cbiAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbiAgfVxuXG4gIC8vIEFzdHJhdmVsIGlzICB0aW55IGFuZCBmYXN0IEVTVHJlZS1jb21wbGlhbnQgQVNUIHdhbGtlciBhbmQgbW9kaWZpZXIuXG4gIC8vXG4gIC8vIEFzdHJhdmVsIHdhcyB3cml0dGVuIGJ5IERhdmlkIEJvbm5ldCBhbmQgcmVsZWFzZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2UuXG4gIC8vXG4gIC8vIFRoZSBHaXQgcmVwb3NpdG9yeSBmb3IgQXN0cmF2ZWwgaXMgYXZhaWxhYmxlIGF0OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGF2aWRib25uZXQvYXN0cmF2ZWwuZ2l0XG4gIC8vXG4gIC8vIFBsZWFzZSB1c2UgdGhlIEdpdEh1YiBidWcgdHJhY2tlciB0byByZXBvcnQgaXNzdWVzOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGF2aWRib25uZXQvYXN0cmF2ZWwvaXNzdWVzXG5cbiAgZnVuY3Rpb24gbWFrZVRyYXZlbGVyKHByb3BlcnRpZXMpIHtcbiAgICAvKlxuICAgIFJldHVybnMgYSBjdXN0b20gQVNUIHRyYXZlbGVyIHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgYGRlZmF1bHRUcmF2ZWxlcmAgd2l0aCBpdHMgb3duIHByb3ZpZGVkIGBwcm9wZXJ0aWVzYCBhbmQgdGhlIHByb3BlcnR5IGBzdXBlcmAgdGhhdCBwb2ludHMgdG8gdGhlIHBhcmVudCB0cmF2ZWxlciBvYmplY3QuXG4gICAgKi9cbiAgICByZXR1cm4gX2RlZmF1bHRUcmF2ZWxlcjIuZGVmYXVsdC5tYWtlQ2hpbGQocHJvcGVydGllcyk7XG4gIH1cblxuICBleHBvcnRzLmRlZmF1bHRUcmF2ZWxlciA9IF9kZWZhdWx0VHJhdmVsZXIyLmRlZmF1bHQ7XG4gIGV4cG9ydHMuYXR0YWNoQ29tbWVudHMgPSBfYXR0YWNoQ29tbWVudHMyLmRlZmF1bHQ7XG4gIGV4cG9ydHMubWFrZVRyYXZlbGVyID0gbWFrZVRyYXZlbGVyO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3RyYXZlbC5qcy5tYXAiLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoWydleHBvcnRzJywgJy4vZGVmYXVsdFRyYXZlbGVyJ10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCcuL2RlZmF1bHRUcmF2ZWxlcicpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbW9kID0ge1xuICAgICAgZXhwb3J0czoge31cbiAgICB9O1xuICAgIGZhY3RvcnkobW9kLmV4cG9ydHMsIGdsb2JhbC5kZWZhdWx0VHJhdmVsZXIpO1xuICAgIGdsb2JhbC5hdHRhY2hDb21tZW50cyA9IG1vZC5leHBvcnRzO1xuICB9XG59KSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cywgX2RlZmF1bHRUcmF2ZWxlcikge1xuICAndXNlIHN0cmljdCc7XG5cbiAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuICBleHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAobm9kZSwgY29tbWVudHMpIHtcbiAgICAvKlxuICAgIE1vZGlmaWVzIGluLXBsYWNlIHRoZSBBU1Qgc3RhcnRpbmcgYXQgYG5vZGVgIGJ5IGF0dGFjaGluZyB0aGUgcHJvdmlkZWQgYGNvbW1lbnRzYCBhbmQgcmV0dXJucyB0aGF0IEFTVC5cbiAgICAqL1xuICAgIGN1c3RvbVRyYXZlbGVyW25vZGUudHlwZV0obm9kZSwge1xuICAgICAgY29tbWVudHM6IGNvbW1lbnRzLFxuICAgICAgaW5kZXg6IDBcbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICB2YXIgX2RlZmF1bHRUcmF2ZWxlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZhdWx0VHJhdmVsZXIpO1xuXG4gIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhdHRhY2hDb21tZW50cyhwYXJlbnQsIGNoaWxkcmVuLCBmaW5kSGVhZGluZ0NvbW1lbnRzLCBzdGF0ZSwgdHJhdmVsZXIpIHtcbiAgICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCxcbiAgICAgICAgY29tbWVudHMgPSBzdGF0ZS5jb21tZW50cztcblxuICAgIHZhciBjb21tZW50ID0gY29tbWVudHNbaW5kZXhdO1xuICAgIC8vIERlZmluZSB0aGVtIGluIHRoZSBibG9ja3Mgd2hlcmUgdGhlcmUgYXJlIHVzZWQgb25jZVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWJlbC9taW5pZnkvaXNzdWVzLzQ4NSBpcyByZXNvbHZlZFxuICAgIHZhciBib3VuZENvbW1lbnRzID0gdm9pZCAwLFxuICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gdm9pZCAwO1xuICAgIGlmIChjb21tZW50ICE9IG51bGwpIHtcbiAgICAgIGlmIChjaGlsZHJlbiA9PSBudWxsIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBObyBjaGlsZHJlbiwgYXR0YWNoIGNvbW1lbnRzIHRvIHBhcmVudFxuICAgICAgICBib3VuZENvbW1lbnRzID0gcGFyZW50LmNvbW1lbnRzICE9IG51bGwgPyBwYXJlbnQuY29tbWVudHMgOiBbXTtcbiAgICAgICAgd2hpbGUgKGNvbW1lbnQgIT0gbnVsbCAmJiBjb21tZW50LmVuZCA8IHBhcmVudC5lbmQpIHtcbiAgICAgICAgICBib3VuZENvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChib3VuZENvbW1lbnRzLmxlbmd0aCAhPT0gMCAmJiBwYXJlbnQuY29tbWVudHMgPT0gbnVsbCkgcGFyZW50LmNvbW1lbnRzID0gYm91bmRDb21tZW50cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgZm9yIGhlYWRpbmcgYmxvY2sgY29tbWVudHNcbiAgICAgICAgaWYgKGZpbmRIZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICBib3VuZENvbW1lbnRzID0gcGFyZW50LmNvbW1lbnRzICE9IG51bGwgPyBwYXJlbnQuY29tbWVudHMgOiBbXTtcbiAgICAgICAgICB2YXIgc3RhcnQgPSBjaGlsZHJlblswXS5zdGFydDtcblxuICAgICAgICAgIHdoaWxlIChjb21tZW50ICE9IG51bGwgJiYgY29tbWVudC50eXBlWzBdID09PSAnQicgJiYgY29tbWVudC5lbmQgPCBzdGFydCkge1xuICAgICAgICAgICAgYm91bmRDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzWysraW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYm91bmRDb21tZW50cy5sZW5ndGggIT09IDAgJiYgcGFyZW50LmNvbW1lbnRzID09IG51bGwpIHBhcmVudC5jb21tZW50cyA9IGJvdW5kQ29tbWVudHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXR0YWNoIGNvbW1lbnRzIHRvIGNoaWxkcmVuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7IGNvbW1lbnQgIT0gbnVsbCAmJiBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgICBib3VuZENvbW1lbnRzID0gW107XG4gICAgICAgICAgd2hpbGUgKGNvbW1lbnQgIT0gbnVsbCAmJiBjb21tZW50LmVuZCA8IGNoaWxkLnN0YXJ0KSB7XG4gICAgICAgICAgICBib3VuZENvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbKytpbmRleF07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIENoZWNrIGlmIG5leHQgY29tbWVudCBpcyBsaW5lIGNvbW1lbnQgYW5kIG9uIHRoZSBzYW1lIGxpbmVcbiAgICAgICAgICBpZiAoY29tbWVudCAhPSBudWxsICYmIGNvbW1lbnQudHlwZVswXSA9PT0gJ0wnKSB7XG4gICAgICAgICAgICBpZiAoY29tbWVudC5sb2Muc3RhcnQubGluZSA9PT0gY2hpbGQubG9jLmVuZC5saW5lKSB7XG4gICAgICAgICAgICAgIGJvdW5kQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzWysraW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYm91bmRDb21tZW50cy5sZW5ndGggIT09IDApIGNoaWxkLmNvbW1lbnRzID0gYm91bmRDb21tZW50cztcbiAgICAgICAgICAvLyBUcmF2ZWwgdGhyb3VnaCBjaGlsZFxuICAgICAgICAgIHN0YXRlLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgdHJhdmVsZXJbY2hpbGQudHlwZV0oY2hpbGQsIHN0YXRlKTtcbiAgICAgICAgICBpbmRleCA9IHN0YXRlLmluZGV4O1xuICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50c1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gTG9vayBmb3IgcmVtYWluaW5nIGNvbW1lbnRzXG4gICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgd2hpbGUgKGNvbW1lbnQgIT0gbnVsbCAmJiBjb21tZW50LmVuZCA8IHBhcmVudC5lbmQpIHtcbiAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCAhPT0gMCkgcGFyZW50LnRyYWlsaW5nQ29tbWVudHMgPSB0cmFpbGluZ0NvbW1lbnRzO1xuICAgICAgICBzdGF0ZS5pbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBQcm9ncmFtID0gdm9pZCAwO1xuXG4gIHZhciBjdXN0b21UcmF2ZWxlciA9IF9kZWZhdWx0VHJhdmVsZXIyLmRlZmF1bHQubWFrZUNoaWxkKHtcbiAgICBQcm9ncmFtOiBQcm9ncmFtID0gZnVuY3Rpb24gUHJvZ3JhbShub2RlLCBzdGF0ZSkge1xuICAgICAgYXR0YWNoQ29tbWVudHMobm9kZSwgbm9kZS5ib2R5LCB0cnVlLCBzdGF0ZSwgdGhpcyk7XG4gICAgfSxcbiAgICBCbG9ja1N0YXRlbWVudDogUHJvZ3JhbSxcbiAgICBPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbiBPYmplY3RFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICBhdHRhY2hDb21tZW50cyhub2RlLCBub2RlLnByb3BlcnRpZXMsIHRydWUsIHN0YXRlLCB0aGlzKTtcbiAgICB9LFxuICAgIEFycmF5RXhwcmVzc2lvbjogZnVuY3Rpb24gQXJyYXlFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICBhdHRhY2hDb21tZW50cyhub2RlLCBub2RlLmVsZW1lbnRzLCB0cnVlLCBzdGF0ZSwgdGhpcyk7XG4gICAgfSxcbiAgICBTd2l0Y2hTdGF0ZW1lbnQ6IGZ1bmN0aW9uIFN3aXRjaFN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgYXR0YWNoQ29tbWVudHMobm9kZSwgbm9kZS5jYXNlcywgZmFsc2UsIHN0YXRlLCB0aGlzKTtcbiAgICB9LFxuICAgIFN3aXRjaENhc2U6IGZ1bmN0aW9uIFN3aXRjaENhc2Uobm9kZSwgc3RhdGUpIHtcbiAgICAgIGF0dGFjaENvbW1lbnRzKG5vZGUsIG5vZGUuY29uc2VxdWVudCwgZmFsc2UsIHN0YXRlLCB0aGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gVE9ETzogQ29uc2lkZXIgQXJyYXlFeHByZXNzaW9uID9cbiAgKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXR0YWNoQ29tbWVudHMuanMubWFwIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGZhY3RvcnkoZXhwb3J0cyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG1vZCA9IHtcbiAgICAgIGV4cG9ydHM6IHt9XG4gICAgfTtcbiAgICBmYWN0b3J5KG1vZC5leHBvcnRzKTtcbiAgICBnbG9iYWwuZGVmYXVsdFRyYXZlbGVyID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gIH1cblxuICB2YXIgRm9ySW5TdGF0ZW1lbnQgPSB2b2lkIDAsXG4gICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uID0gdm9pZCAwLFxuICAgICAgUmVzdEVsZW1lbnQgPSB2b2lkIDAsXG4gICAgICBCaW5hcnlFeHByZXNzaW9uID0gdm9pZCAwLFxuICAgICAgQXJyYXlFeHByZXNzaW9uID0gdm9pZCAwO1xuXG4gIHZhciBpZ25vcmUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgdmFyIEZvdW5kID0gZnVuY3Rpb24gRm91bmQobm9kZSwgc3RhdGUpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm91bmQpO1xuXG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gIH07XG5cbiAgZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIC8vIEJhc2ljIG1ldGhvZHNcbiAgICBnbzogZnVuY3Rpb24gZ28obm9kZSwgc3RhdGUpIHtcbiAgICAgIC8qXG4gICAgICBTdGFydHMgdHJhdmVsbGluZyB0aHJvdWdoIHRoZSBzcGVjaWZpZWQgQVNUIGBub2RlYCB3aXRoIHRoZSBwcm92aWRlZCBgc3RhdGVgLlxuICAgICAgVGhpcyBtZXRob2QgaXMgcmVjdXJzaXZlbHkgY2FsbGVkIGJ5IGVhY2ggbm9kZSBoYW5kbGVyLlxuICAgICAgKi9cbiAgICAgIHRoaXNbbm9kZS50eXBlXShub2RlLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSwgbm9kZSwgc3RhdGUpIHtcbiAgICAgIC8qXG4gICAgICBSZXR1cm5zIHsgbm9kZSwgc3RhdGUgfSBmb3Igd2hpY2ggYHByZWRpY2F0ZShub2RlLCBzdGF0ZSlgIHJldHVybnMgdHJ1dGh5LFxuICAgICAgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBBU1QgYG5vZGVgIGFuZCB3aXRoIHRoZSBwcm92aWRlZCBgc3RhdGVgLlxuICAgICAgT3RoZXJ3aXNlLCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICAgICAgKi9cbiAgICAgIHZhciBmaW5kZXIgPSBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgICAgZmluZGVyLmdvID0gZnVuY3Rpb24gKG5vZGUsIHN0YXRlKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUobm9kZSwgc3RhdGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEZvdW5kKG5vZGUsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW25vZGUudHlwZV0obm9kZSwgc3RhdGUpO1xuICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbmRlci5nbyhub2RlLCBzdGF0ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBGb3VuZCkge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWFrZUNoaWxkOiBmdW5jdGlvbiBtYWtlQ2hpbGQoKSB7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICAgIC8qXG4gICAgICBSZXR1cm5zIGEgY3VzdG9tIEFTVCB0cmF2ZWxlciB0aGF0IGluaGVyaXRzIGZyb20gYHRoaXNgIHRyYXZlbGVyIHdpdGggaXRzIG93biBwcm92aWRlZCBgcHJvcGVydGllc2AgYW5kIHRoZSBwcm9wZXJ0eSBgc3VwZXJgIHRoYXQgcG9pbnRzIHRvIHRoZSBwYXJlbnQgdHJhdmVsZXIgb2JqZWN0LlxuICAgICAgKi9cbiAgICAgIHZhciB0cmF2ZWxlciA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICB0cmF2ZWxlci5zdXBlciA9IHRoaXM7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgICB0cmF2ZWxlcltrZXldID0gcHJvcGVydGllc1trZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYXZlbGVyO1xuICAgIH0sXG5cblxuICAgIC8vIEphdmFTY3JpcHQgNVxuICAgIFByb2dyYW06IGZ1bmN0aW9uIFByb2dyYW0obm9kZSwgc3RhdGUpIHtcbiAgICAgIHZhciBzdGF0ZW1lbnRzID0gbm9kZS5ib2R5LFxuICAgICAgICAgIGxlbmd0aCA9IHN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ28oc3RhdGVtZW50c1tpXSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIEJsb2NrU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgICB2YXIgc3RhdGVtZW50cyA9IG5vZGUuYm9keTtcbiAgICAgIGlmIChzdGF0ZW1lbnRzICE9IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHN0YXRlbWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLmdvKHN0YXRlbWVudHNbaV0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBFbXB0eVN0YXRlbWVudDogaWdub3JlLFxuICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IGZ1bmN0aW9uIEV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5leHByZXNzaW9uLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBJZlN0YXRlbWVudDogZnVuY3Rpb24gSWZTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS50ZXN0LCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUuY29uc2VxdWVudCwgc3RhdGUpO1xuICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLmFsdGVybmF0ZSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgTGFiZWxlZFN0YXRlbWVudDogZnVuY3Rpb24gTGFiZWxlZFN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmxhYmVsLCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUuYm9keSwgc3RhdGUpO1xuICAgIH0sXG4gICAgQnJlYWtTdGF0ZW1lbnQ6IGZ1bmN0aW9uIEJyZWFrU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgICBpZiAobm9kZS5sYWJlbCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUubGFiZWwsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbnRpbnVlU3RhdGVtZW50OiBmdW5jdGlvbiBDb250aW51ZVN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgaWYgKG5vZGUubGFiZWwpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLmxhYmVsLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBXaXRoU3RhdGVtZW50OiBmdW5jdGlvbiBXaXRoU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUub2JqZWN0LCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUuYm9keSwgc3RhdGUpO1xuICAgIH0sXG4gICAgU3dpdGNoU3RhdGVtZW50OiBmdW5jdGlvbiBTd2l0Y2hTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5kaXNjcmltaW5hbnQsIHN0YXRlKTtcbiAgICAgIHZhciBjYXNlcyA9IG5vZGUuY2FzZXMsXG4gICAgICAgICAgbGVuZ3RoID0gY2FzZXMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ28oY2FzZXNbaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFN3aXRjaENhc2U6IGZ1bmN0aW9uIFN3aXRjaENhc2Uobm9kZSwgc3RhdGUpIHtcbiAgICAgIGlmIChub2RlLnRlc3QgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUudGVzdCwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgdmFyIHN0YXRlbWVudHMgPSBub2RlLmNvbnNlcXVlbnQsXG4gICAgICAgICAgbGVuZ3RoID0gc3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5nbyhzdGF0ZW1lbnRzW2ldLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIFJldHVyblN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgaWYgKG5vZGUuYXJndW1lbnQpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLmFyZ3VtZW50LCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24gVGhyb3dTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5hcmd1bWVudCwgc3RhdGUpO1xuICAgIH0sXG4gICAgVHJ5U3RhdGVtZW50OiBmdW5jdGlvbiBUcnlTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5ibG9jaywgc3RhdGUpO1xuICAgICAgaWYgKG5vZGUuaGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS5oYW5kbGVyLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5maW5hbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUuZmluYWxpemVyLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDYXRjaENsYXVzZTogZnVuY3Rpb24gQ2F0Y2hDbGF1c2Uobm9kZSwgc3RhdGUpIHtcbiAgICAgIGlmIChub2RlLnBhcmFtICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLnBhcmFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdvKG5vZGUuYm9keSwgc3RhdGUpO1xuICAgIH0sXG4gICAgV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIFdoaWxlU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUudGVzdCwgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLmJvZHksIHN0YXRlKTtcbiAgICB9LFxuICAgIERvV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIERvV2hpbGVTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5ib2R5LCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUudGVzdCwgc3RhdGUpO1xuICAgIH0sXG4gICAgRm9yU3RhdGVtZW50OiBmdW5jdGlvbiBGb3JTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICAgIGlmIChub2RlLmluaXQgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUuaW5pdCwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUudGVzdCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS50ZXN0LCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS51cGRhdGUgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmdvKG5vZGUudXBkYXRlLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdvKG5vZGUuYm9keSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBGb3JJblN0YXRlbWVudDogRm9ySW5TdGF0ZW1lbnQgPSBmdW5jdGlvbiBGb3JJblN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmxlZnQsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5yaWdodCwgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLmJvZHksIHN0YXRlKTtcbiAgICB9LFxuICAgIERlYnVnZ2VyU3RhdGVtZW50OiBpZ25vcmUsXG4gICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogRnVuY3Rpb25EZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIEZ1bmN0aW9uRGVjbGFyYXRpb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIGlmIChub2RlLmlkICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLmlkLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICB2YXIgcGFyYW1zID0gbm9kZS5wYXJhbXM7XG5cbiAgICAgIGlmIChwYXJhbXMgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcGFyYW1zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5nbyhwYXJhbXNbaV0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5nbyhub2RlLmJvZHksIHN0YXRlKTtcbiAgICB9LFxuICAgIFZhcmlhYmxlRGVjbGFyYXRpb246IGZ1bmN0aW9uIFZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHZhciBkZWNsYXJhdGlvbnMgPSBub2RlLmRlY2xhcmF0aW9ucyxcbiAgICAgICAgICBsZW5ndGggPSBkZWNsYXJhdGlvbnMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ28oZGVjbGFyYXRpb25zW2ldLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBWYXJpYWJsZURlY2xhcmF0b3I6IGZ1bmN0aW9uIFZhcmlhYmxlRGVjbGFyYXRvcihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmlkLCBzdGF0ZSk7XG4gICAgICBpZiAobm9kZS5pbml0ICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLmluaXQsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdmFyIHBhcmFtcyA9IG5vZGUucGFyYW1zO1xuXG4gICAgICBpZiAocGFyYW1zICE9IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRoaXMuZ28ocGFyYW1zW2ldLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZ28obm9kZS5ib2R5LCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIFRoaXNFeHByZXNzaW9uOiBpZ25vcmUsXG4gICAgQXJyYXlFeHByZXNzaW9uOiBBcnJheUV4cHJlc3Npb24gPSBmdW5jdGlvbiBBcnJheUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHZhciBlbGVtZW50cyA9IG5vZGUuZWxlbWVudHMsXG4gICAgICAgICAgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gZWxlbWVudHNbaV07XG4gICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmdvKGVsZW1lbnRzW2ldLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIE9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIE9iamVjdEV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gbm9kZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ28ocHJvcGVydGllc1tpXSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgUHJvcGVydHk6IGZ1bmN0aW9uIFByb3BlcnR5KG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUua2V5LCBzdGF0ZSk7XG4gICAgICBpZiAoIW5vZGUuc2hvcnRoYW5kKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS52YWx1ZSwgc3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBGdW5jdGlvbkV4cHJlc3Npb246IEZ1bmN0aW9uRGVjbGFyYXRpb24sXG4gICAgU2VxdWVuY2VFeHByZXNzaW9uOiBmdW5jdGlvbiBTZXF1ZW5jZUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHZhciBleHByZXNzaW9ucyA9IG5vZGUuZXhwcmVzc2lvbnMsXG4gICAgICAgICAgbGVuZ3RoID0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ28oZXhwcmVzc2lvbnNbaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFVuYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gVW5hcnlFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICB9LFxuICAgIFVwZGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uIFVwZGF0ZUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5hcmd1bWVudCwgc3RhdGUpO1xuICAgIH0sXG4gICAgQXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uIEFzc2lnbm1lbnRFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUubGVmdCwgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLnJpZ2h0LCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIEJpbmFyeUV4cHJlc3Npb246IEJpbmFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiBCaW5hcnlFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUubGVmdCwgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLnJpZ2h0LCBzdGF0ZSk7XG4gICAgfSxcbiAgICBMb2dpY2FsRXhwcmVzc2lvbjogQmluYXJ5RXhwcmVzc2lvbixcbiAgICBDb25kaXRpb25hbEV4cHJlc3Npb246IGZ1bmN0aW9uIENvbmRpdGlvbmFsRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLnRlc3QsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5jb25zZXF1ZW50LCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUuYWx0ZXJuYXRlLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBOZXdFeHByZXNzaW9uOiBmdW5jdGlvbiBOZXdFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLkNhbGxFeHByZXNzaW9uKG5vZGUsIHN0YXRlKTtcbiAgICB9LFxuICAgIENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBDYWxsRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmNhbGxlZSwgc3RhdGUpO1xuICAgICAgdmFyIGFyZ3MgPSBub2RlWydhcmd1bWVudHMnXSxcbiAgICAgICAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmdvKGFyZ3NbaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIE1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uIE1lbWJlckV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5vYmplY3QsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5wcm9wZXJ0eSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBJZGVudGlmaWVyOiBpZ25vcmUsXG4gICAgTGl0ZXJhbDogaWdub3JlLFxuXG4gICAgLy8gSmF2YVNjcmlwdCA2XG4gICAgRm9yT2ZTdGF0ZW1lbnQ6IEZvckluU3RhdGVtZW50LFxuICAgIENsYXNzRGVjbGFyYXRpb246IGZ1bmN0aW9uIENsYXNzRGVjbGFyYXRpb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIGlmIChub2RlLmlkKSB7XG4gICAgICAgIHRoaXMuZ28obm9kZS5pZCwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuc3VwZXJDbGFzcykge1xuICAgICAgICB0aGlzLmdvKG5vZGUuc3VwZXJDbGFzcywgc3RhdGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5nbyhub2RlLmJvZHksIHN0YXRlKTtcbiAgICB9LFxuICAgIENsYXNzQm9keTogZnVuY3Rpb24gQ2xhc3NCb2R5KG5vZGUsIHN0YXRlKSB7XG4gICAgICB2YXIgYm9keSA9IG5vZGUuYm9keSxcbiAgICAgICAgICBsZW5ndGggPSBib2R5Lmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmdvKGJvZHlbaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIEltcG9ydERlY2xhcmF0aW9uOiBmdW5jdGlvbiBJbXBvcnREZWNsYXJhdGlvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdmFyIHNwZWNpZmllcnMgPSBub2RlLnNwZWNpZmllcnMsXG4gICAgICAgICAgbGVuZ3RoID0gc3BlY2lmaWVycy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5nbyhzcGVjaWZpZXJzW2ldLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdvKG5vZGUuc291cmNlLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6IGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmxvY2FsLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBmdW5jdGlvbiBJbXBvcnREZWZhdWx0U3BlY2lmaWVyKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUubG9jYWwsIHN0YXRlKTtcbiAgICB9LFxuICAgIEltcG9ydFNwZWNpZmllcjogZnVuY3Rpb24gSW1wb3J0U3BlY2lmaWVyKG5vZGUsIHN0YXRlKSB7XG4gICAgICB0aGlzLmdvKG5vZGUuaW1wb3J0ZWQsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5sb2NhbCwgc3RhdGUpO1xuICAgIH0sXG4gICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBmdW5jdGlvbiBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24obm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5kZWNsYXJhdGlvbiwgc3RhdGUpO1xuICAgIH0sXG4gICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogZnVuY3Rpb24gRXhwb3J0TmFtZWREZWNsYXJhdGlvbihub2RlLCBzdGF0ZSkge1xuICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24pIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLmRlY2xhcmF0aW9uLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICB2YXIgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVycyxcbiAgICAgICAgICBsZW5ndGggPSBzcGVjaWZpZXJzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmdvKHNwZWNpZmllcnNbaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnNvdXJjZSkge1xuICAgICAgICB0aGlzLmdvKG5vZGUuc291cmNlLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBFeHBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uIEV4cG9ydFNwZWNpZmllcihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmxvY2FsLCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUuZXhwb3J0ZWQsIHN0YXRlKTtcbiAgICB9LFxuICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiBmdW5jdGlvbiBFeHBvcnRBbGxEZWNsYXJhdGlvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLnNvdXJjZSwgc3RhdGUpO1xuICAgIH0sXG4gICAgTWV0aG9kRGVmaW5pdGlvbjogZnVuY3Rpb24gTWV0aG9kRGVmaW5pdGlvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmtleSwgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLnZhbHVlLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBDbGFzc0V4cHJlc3Npb246IGZ1bmN0aW9uIENsYXNzRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5DbGFzc0RlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgU3VwZXI6IGlnbm9yZSxcbiAgICBSZXN0RWxlbWVudDogUmVzdEVsZW1lbnQgPSBmdW5jdGlvbiBSZXN0RWxlbWVudChub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmFyZ3VtZW50LCBzdGF0ZSk7XG4gICAgfSxcbiAgICBTcHJlYWRFbGVtZW50OiBSZXN0RWxlbWVudCxcbiAgICBZaWVsZEV4cHJlc3Npb246IGZ1bmN0aW9uIFlpZWxkRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgaWYgKG5vZGUuYXJndW1lbnQpIHtcbiAgICAgICAgdGhpcy5nbyhub2RlLmFyZ3VtZW50LCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLnRhZywgc3RhdGUpO1xuICAgICAgdGhpcy5nbyhub2RlLnF1YXNpLCBzdGF0ZSk7XG4gICAgfSxcbiAgICBUZW1wbGF0ZUxpdGVyYWw6IGZ1bmN0aW9uIFRlbXBsYXRlTGl0ZXJhbChub2RlLCBzdGF0ZSkge1xuICAgICAgdmFyIHF1YXNpcyA9IG5vZGUucXVhc2lzLFxuICAgICAgICAgIGV4cHJlc3Npb25zID0gbm9kZS5leHByZXNzaW9ucztcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZ28oZXhwcmVzc2lvbnNbaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIF9pID0gMCwgX2xlbmd0aCA9IHF1YXNpcy5sZW5ndGg7IF9pIDwgX2xlbmd0aDsgX2krKykge1xuICAgICAgICB0aGlzLmdvKHF1YXNpc1tfaV0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgVGVtcGxhdGVFbGVtZW50OiBpZ25vcmUsXG4gICAgT2JqZWN0UGF0dGVybjogZnVuY3Rpb24gT2JqZWN0UGF0dGVybihub2RlLCBzdGF0ZSkge1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSBub2RlLnByb3BlcnRpZXMsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5nbyhwcm9wZXJ0aWVzW2ldLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIEFycmF5UGF0dGVybjogQXJyYXlFeHByZXNzaW9uLFxuICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiBmdW5jdGlvbiBBc3NpZ25tZW50UGF0dGVybihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmxlZnQsIHN0YXRlKTtcbiAgICAgIHRoaXMuZ28obm9kZS5yaWdodCwgc3RhdGUpO1xuICAgIH0sXG4gICAgTWV0YVByb3BlcnR5OiBmdW5jdGlvbiBNZXRhUHJvcGVydHkobm9kZSwgc3RhdGUpIHtcbiAgICAgIHRoaXMuZ28obm9kZS5tZXRhLCBzdGF0ZSk7XG4gICAgICB0aGlzLmdvKG5vZGUucHJvcGVydHksIHN0YXRlKTtcbiAgICB9LFxuXG5cbiAgICAvLyBKYXZhU2NyaXB0IDdcbiAgICBBd2FpdEV4cHJlc3Npb246IGZ1bmN0aW9uIEF3YWl0RXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgICAgdGhpcy5nbyhub2RlLmFyZ3VtZW50LCBzdGF0ZSk7XG4gICAgfVxuICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0VHJhdmVsZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdlbmVyYXRlID0gZ2VuZXJhdGU7XG5leHBvcnRzLmJhc2VHZW5lcmF0b3IgPSBleHBvcnRzLkdFTkVSQVRPUiA9IGV4cG9ydHMuRVhQUkVTU0lPTlNfUFJFQ0VERU5DRSA9IGV4cG9ydHMuTkVFRFNfUEFSRU5USEVTRVMgPSB2b2lkIDA7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxudmFyIHN0cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5O1xuXG5pZiAoIVN0cmluZy5wcm90b3R5cGUucmVwZWF0KSB7XG4gIHRocm93IG5ldyBFcnJvcignU3RyaW5nLnByb3RvdHlwZS5yZXBlYXQgaXMgdW5kZWZpbmVkLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhdmlkYm9ubmV0L2FzdHJpbmcjaW5zdGFsbGF0aW9uJyk7XG59XG5cbmlmICghU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggaXMgdW5kZWZpbmVkLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhdmlkYm9ubmV0L2FzdHJpbmcjaW5zdGFsbGF0aW9uJyk7XG59XG5cbnZhciBPUEVSQVRPUl9QUkVDRURFTkNFID0ge1xuICAnfHwnOiAyLFxuICAnPz8nOiAzLFxuICAnJiYnOiA0LFxuICAnfCc6IDUsXG4gICdeJzogNixcbiAgJyYnOiA3LFxuICAnPT0nOiA4LFxuICAnIT0nOiA4LFxuICAnPT09JzogOCxcbiAgJyE9PSc6IDgsXG4gICc8JzogOSxcbiAgJz4nOiA5LFxuICAnPD0nOiA5LFxuICAnPj0nOiA5LFxuICBcImluXCI6IDksXG4gIFwiaW5zdGFuY2VvZlwiOiA5LFxuICAnPDwnOiAxMCxcbiAgJz4+JzogMTAsXG4gICc+Pj4nOiAxMCxcbiAgJysnOiAxMSxcbiAgJy0nOiAxMSxcbiAgJyonOiAxMixcbiAgJyUnOiAxMixcbiAgJy8nOiAxMixcbiAgJyoqJzogMTNcbn07XG52YXIgTkVFRFNfUEFSRU5USEVTRVMgPSAxNztcbmV4cG9ydHMuTkVFRFNfUEFSRU5USEVTRVMgPSBORUVEU19QQVJFTlRIRVNFUztcbnZhciBFWFBSRVNTSU9OU19QUkVDRURFTkNFID0ge1xuICBBcnJheUV4cHJlc3Npb246IDIwLFxuICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IDIwLFxuICBUaGlzRXhwcmVzc2lvbjogMjAsXG4gIElkZW50aWZpZXI6IDIwLFxuICBQcml2YXRlSWRlbnRpZmllcjogMjAsXG4gIExpdGVyYWw6IDE4LFxuICBUZW1wbGF0ZUxpdGVyYWw6IDIwLFxuICBTdXBlcjogMjAsXG4gIFNlcXVlbmNlRXhwcmVzc2lvbjogMjAsXG4gIE1lbWJlckV4cHJlc3Npb246IDE5LFxuICBDaGFpbkV4cHJlc3Npb246IDE5LFxuICBDYWxsRXhwcmVzc2lvbjogMTksXG4gIE5ld0V4cHJlc3Npb246IDE5LFxuICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogTkVFRFNfUEFSRU5USEVTRVMsXG4gIENsYXNzRXhwcmVzc2lvbjogTkVFRFNfUEFSRU5USEVTRVMsXG4gIEZ1bmN0aW9uRXhwcmVzc2lvbjogTkVFRFNfUEFSRU5USEVTRVMsXG4gIE9iamVjdEV4cHJlc3Npb246IE5FRURTX1BBUkVOVEhFU0VTLFxuICBVcGRhdGVFeHByZXNzaW9uOiAxNixcbiAgVW5hcnlFeHByZXNzaW9uOiAxNSxcbiAgQXdhaXRFeHByZXNzaW9uOiAxNSxcbiAgQmluYXJ5RXhwcmVzc2lvbjogMTQsXG4gIExvZ2ljYWxFeHByZXNzaW9uOiAxMyxcbiAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiA0LFxuICBBc3NpZ25tZW50RXhwcmVzc2lvbjogMyxcbiAgWWllbGRFeHByZXNzaW9uOiAyLFxuICBSZXN0RWxlbWVudDogMVxufTtcbmV4cG9ydHMuRVhQUkVTU0lPTlNfUFJFQ0VERU5DRSA9IEVYUFJFU1NJT05TX1BSRUNFREVOQ0U7XG5cbmZ1bmN0aW9uIGZvcm1hdFNlcXVlbmNlKHN0YXRlLCBub2Rlcykge1xuICB2YXIgZ2VuZXJhdG9yID0gc3RhdGUuZ2VuZXJhdG9yO1xuICBzdGF0ZS53cml0ZSgnKCcpO1xuXG4gIGlmIChub2RlcyAhPSBudWxsICYmIG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICBnZW5lcmF0b3Jbbm9kZXNbMF0udHlwZV0obm9kZXNbMF0sIHN0YXRlKTtcbiAgICB2YXIgbGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhcmFtID0gbm9kZXNbaV07XG4gICAgICBzdGF0ZS53cml0ZSgnLCAnKTtcbiAgICAgIGdlbmVyYXRvcltwYXJhbS50eXBlXShwYXJhbSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLndyaXRlKCcpJyk7XG59XG5cbmZ1bmN0aW9uIGV4cHJlc3Npb25OZWVkc1BhcmVudGhlc2lzKHN0YXRlLCBub2RlLCBwYXJlbnROb2RlLCBpc1JpZ2h0SGFuZCkge1xuICB2YXIgbm9kZVByZWNlZGVuY2UgPSBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2Vbbm9kZS50eXBlXTtcblxuICBpZiAobm9kZVByZWNlZGVuY2UgPT09IE5FRURTX1BBUkVOVEhFU0VTKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgcGFyZW50Tm9kZVByZWNlZGVuY2UgPSBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2VbcGFyZW50Tm9kZS50eXBlXTtcblxuICBpZiAobm9kZVByZWNlZGVuY2UgIT09IHBhcmVudE5vZGVQcmVjZWRlbmNlKSB7XG4gICAgcmV0dXJuICFpc1JpZ2h0SGFuZCAmJiBub2RlUHJlY2VkZW5jZSA9PT0gMTUgJiYgcGFyZW50Tm9kZVByZWNlZGVuY2UgPT09IDE0ICYmIHBhcmVudE5vZGUub3BlcmF0b3IgPT09ICcqKicgfHwgbm9kZVByZWNlZGVuY2UgPCBwYXJlbnROb2RlUHJlY2VkZW5jZTtcbiAgfVxuXG4gIGlmIChub2RlUHJlY2VkZW5jZSAhPT0gMTMgJiYgbm9kZVByZWNlZGVuY2UgIT09IDE0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICcqKicgJiYgcGFyZW50Tm9kZS5vcGVyYXRvciA9PT0gJyoqJykge1xuICAgIHJldHVybiAhaXNSaWdodEhhbmQ7XG4gIH1cblxuICBpZiAobm9kZVByZWNlZGVuY2UgPT09IDEzICYmIHBhcmVudE5vZGVQcmVjZWRlbmNlID09PSAxMyAmJiAobm9kZS5vcGVyYXRvciA9PT0gJz8/JyB8fCBwYXJlbnROb2RlLm9wZXJhdG9yID09PSAnPz8nKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzUmlnaHRIYW5kKSB7XG4gICAgcmV0dXJuIE9QRVJBVE9SX1BSRUNFREVOQ0Vbbm9kZS5vcGVyYXRvcl0gPD0gT1BFUkFUT1JfUFJFQ0VERU5DRVtwYXJlbnROb2RlLm9wZXJhdG9yXTtcbiAgfVxuXG4gIHJldHVybiBPUEVSQVRPUl9QUkVDRURFTkNFW25vZGUub3BlcmF0b3JdIDwgT1BFUkFUT1JfUFJFQ0VERU5DRVtwYXJlbnROb2RlLm9wZXJhdG9yXTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RXhwcmVzc2lvbihzdGF0ZSwgbm9kZSwgcGFyZW50Tm9kZSwgaXNSaWdodEhhbmQpIHtcbiAgdmFyIGdlbmVyYXRvciA9IHN0YXRlLmdlbmVyYXRvcjtcblxuICBpZiAoZXhwcmVzc2lvbk5lZWRzUGFyZW50aGVzaXMoc3RhdGUsIG5vZGUsIHBhcmVudE5vZGUsIGlzUmlnaHRIYW5kKSkge1xuICAgIHN0YXRlLndyaXRlKCcoJyk7XG4gICAgZ2VuZXJhdG9yW25vZGUudHlwZV0obm9kZSwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCcpJyk7XG4gIH0gZWxzZSB7XG4gICAgZ2VuZXJhdG9yW25vZGUudHlwZV0obm9kZSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlaW5kZW50KHN0YXRlLCB0ZXh0LCBpbmRlbnQsIGxpbmVFbmQpIHtcbiAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gIHZhciBlbmQgPSBsaW5lcy5sZW5ndGggLSAxO1xuICBzdGF0ZS53cml0ZShsaW5lc1swXS50cmltKCkpO1xuXG4gIGlmIChlbmQgPiAwKSB7XG4gICAgc3RhdGUud3JpdGUobGluZUVuZCk7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICBzdGF0ZS53cml0ZShpbmRlbnQgKyBsaW5lc1tpXS50cmltKCkgKyBsaW5lRW5kKTtcbiAgICB9XG5cbiAgICBzdGF0ZS53cml0ZShpbmRlbnQgKyBsaW5lc1tlbmRdLnRyaW0oKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0Q29tbWVudHMoc3RhdGUsIGNvbW1lbnRzLCBpbmRlbnQsIGxpbmVFbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGNvbW1lbnRzLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbW1lbnQgPSBjb21tZW50c1tpXTtcbiAgICBzdGF0ZS53cml0ZShpbmRlbnQpO1xuXG4gICAgaWYgKGNvbW1lbnQudHlwZVswXSA9PT0gJ0wnKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnLy8gJyArIGNvbW1lbnQudmFsdWUudHJpbSgpICsgJ1xcbicsIGNvbW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS53cml0ZSgnLyonKTtcbiAgICAgIHJlaW5kZW50KHN0YXRlLCBjb21tZW50LnZhbHVlLCBpbmRlbnQsIGxpbmVFbmQpO1xuICAgICAgc3RhdGUud3JpdGUoJyovJyArIGxpbmVFbmQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNDYWxsRXhwcmVzc2lvbihub2RlKSB7XG4gIHZhciBjdXJyZW50Tm9kZSA9IG5vZGU7XG5cbiAgd2hpbGUgKGN1cnJlbnROb2RlICE9IG51bGwpIHtcbiAgICB2YXIgX2N1cnJlbnROb2RlID0gY3VycmVudE5vZGUsXG4gICAgICAgIHR5cGUgPSBfY3VycmVudE5vZGUudHlwZTtcblxuICAgIGlmICh0eXBlWzBdID09PSAnQycgJiYgdHlwZVsxXSA9PT0gJ2EnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVbMF0gPT09ICdNJyAmJiB0eXBlWzFdID09PSAnZScgJiYgdHlwZVsyXSA9PT0gJ20nKSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLm9iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRWYXJpYWJsZURlY2xhcmF0aW9uKHN0YXRlLCBub2RlKSB7XG4gIHZhciBnZW5lcmF0b3IgPSBzdGF0ZS5nZW5lcmF0b3I7XG4gIHZhciBkZWNsYXJhdGlvbnMgPSBub2RlLmRlY2xhcmF0aW9ucztcbiAgc3RhdGUud3JpdGUobm9kZS5raW5kICsgJyAnKTtcbiAgdmFyIGxlbmd0aCA9IGRlY2xhcmF0aW9ucy5sZW5ndGg7XG5cbiAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICBnZW5lcmF0b3IuVmFyaWFibGVEZWNsYXJhdG9yKGRlY2xhcmF0aW9uc1swXSwgc3RhdGUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgc3RhdGUud3JpdGUoJywgJyk7XG4gICAgICBnZW5lcmF0b3IuVmFyaWFibGVEZWNsYXJhdG9yKGRlY2xhcmF0aW9uc1tpXSwgc3RhdGUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgRm9ySW5TdGF0ZW1lbnQsIEZ1bmN0aW9uRGVjbGFyYXRpb24sIFJlc3RFbGVtZW50LCBCaW5hcnlFeHByZXNzaW9uLCBBcnJheUV4cHJlc3Npb24sIEJsb2NrU3RhdGVtZW50O1xudmFyIEdFTkVSQVRPUiA9IHtcbiAgUHJvZ3JhbTogZnVuY3Rpb24gUHJvZ3JhbShub2RlLCBzdGF0ZSkge1xuICAgIHZhciBpbmRlbnQgPSBzdGF0ZS5pbmRlbnQucmVwZWF0KHN0YXRlLmluZGVudExldmVsKTtcbiAgICB2YXIgbGluZUVuZCA9IHN0YXRlLmxpbmVFbmQsXG4gICAgICAgIHdyaXRlQ29tbWVudHMgPSBzdGF0ZS53cml0ZUNvbW1lbnRzO1xuXG4gICAgaWYgKHdyaXRlQ29tbWVudHMgJiYgbm9kZS5jb21tZW50cyAhPSBudWxsKSB7XG4gICAgICBmb3JtYXRDb21tZW50cyhzdGF0ZSwgbm9kZS5jb21tZW50cywgaW5kZW50LCBsaW5lRW5kKTtcbiAgICB9XG5cbiAgICB2YXIgc3RhdGVtZW50cyA9IG5vZGUuYm9keTtcbiAgICB2YXIgbGVuZ3RoID0gc3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3RhdGVtZW50ID0gc3RhdGVtZW50c1tpXTtcblxuICAgICAgaWYgKHdyaXRlQ29tbWVudHMgJiYgc3RhdGVtZW50LmNvbW1lbnRzICE9IG51bGwpIHtcbiAgICAgICAgZm9ybWF0Q29tbWVudHMoc3RhdGUsIHN0YXRlbWVudC5jb21tZW50cywgaW5kZW50LCBsaW5lRW5kKTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUud3JpdGUoaW5kZW50KTtcbiAgICAgIHRoaXNbc3RhdGVtZW50LnR5cGVdKHN0YXRlbWVudCwgc3RhdGUpO1xuICAgICAgc3RhdGUud3JpdGUobGluZUVuZCk7XG4gICAgfVxuXG4gICAgaWYgKHdyaXRlQ29tbWVudHMgJiYgbm9kZS50cmFpbGluZ0NvbW1lbnRzICE9IG51bGwpIHtcbiAgICAgIGZvcm1hdENvbW1lbnRzKHN0YXRlLCBub2RlLnRyYWlsaW5nQ29tbWVudHMsIGluZGVudCwgbGluZUVuZCk7XG4gICAgfVxuICB9LFxuICBCbG9ja1N0YXRlbWVudDogQmxvY2tTdGF0ZW1lbnQgPSBmdW5jdGlvbiBCbG9ja1N0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHZhciBpbmRlbnQgPSBzdGF0ZS5pbmRlbnQucmVwZWF0KHN0YXRlLmluZGVudExldmVsKyspO1xuICAgIHZhciBsaW5lRW5kID0gc3RhdGUubGluZUVuZCxcbiAgICAgICAgd3JpdGVDb21tZW50cyA9IHN0YXRlLndyaXRlQ29tbWVudHM7XG4gICAgdmFyIHN0YXRlbWVudEluZGVudCA9IGluZGVudCArIHN0YXRlLmluZGVudDtcbiAgICBzdGF0ZS53cml0ZSgneycpO1xuICAgIHZhciBzdGF0ZW1lbnRzID0gbm9kZS5ib2R5O1xuXG4gICAgaWYgKHN0YXRlbWVudHMgIT0gbnVsbCAmJiBzdGF0ZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHN0YXRlLndyaXRlKGxpbmVFbmQpO1xuXG4gICAgICBpZiAod3JpdGVDb21tZW50cyAmJiBub2RlLmNvbW1lbnRzICE9IG51bGwpIHtcbiAgICAgICAgZm9ybWF0Q29tbWVudHMoc3RhdGUsIG5vZGUuY29tbWVudHMsIHN0YXRlbWVudEluZGVudCwgbGluZUVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW5ndGggPSBzdGF0ZW1lbnRzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc3RhdGVtZW50ID0gc3RhdGVtZW50c1tpXTtcblxuICAgICAgICBpZiAod3JpdGVDb21tZW50cyAmJiBzdGF0ZW1lbnQuY29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgICAgIGZvcm1hdENvbW1lbnRzKHN0YXRlLCBzdGF0ZW1lbnQuY29tbWVudHMsIHN0YXRlbWVudEluZGVudCwgbGluZUVuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS53cml0ZShzdGF0ZW1lbnRJbmRlbnQpO1xuICAgICAgICB0aGlzW3N0YXRlbWVudC50eXBlXShzdGF0ZW1lbnQsIHN0YXRlKTtcbiAgICAgICAgc3RhdGUud3JpdGUobGluZUVuZCk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLndyaXRlKGluZGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh3cml0ZUNvbW1lbnRzICYmIG5vZGUuY29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgICBzdGF0ZS53cml0ZShsaW5lRW5kKTtcbiAgICAgICAgZm9ybWF0Q29tbWVudHMoc3RhdGUsIG5vZGUuY29tbWVudHMsIHN0YXRlbWVudEluZGVudCwgbGluZUVuZCk7XG4gICAgICAgIHN0YXRlLndyaXRlKGluZGVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdyaXRlQ29tbWVudHMgJiYgbm9kZS50cmFpbGluZ0NvbW1lbnRzICE9IG51bGwpIHtcbiAgICAgIGZvcm1hdENvbW1lbnRzKHN0YXRlLCBub2RlLnRyYWlsaW5nQ29tbWVudHMsIHN0YXRlbWVudEluZGVudCwgbGluZUVuZCk7XG4gICAgfVxuXG4gICAgc3RhdGUud3JpdGUoJ30nKTtcbiAgICBzdGF0ZS5pbmRlbnRMZXZlbC0tO1xuICB9LFxuICBDbGFzc0JvZHk6IEJsb2NrU3RhdGVtZW50LFxuICBTdGF0aWNCbG9jazogZnVuY3Rpb24gU3RhdGljQmxvY2sobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnc3RhdGljICcpO1xuICAgIHRoaXMuQmxvY2tTdGF0ZW1lbnQobm9kZSwgc3RhdGUpO1xuICB9LFxuICBFbXB0eVN0YXRlbWVudDogZnVuY3Rpb24gRW1wdHlTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnOycpO1xuICB9LFxuICBFeHByZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbiBFeHByZXNzaW9uU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgdmFyIHByZWNlZGVuY2UgPSBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2Vbbm9kZS5leHByZXNzaW9uLnR5cGVdO1xuXG4gICAgaWYgKHByZWNlZGVuY2UgPT09IE5FRURTX1BBUkVOVEhFU0VTIHx8IHByZWNlZGVuY2UgPT09IDMgJiYgbm9kZS5leHByZXNzaW9uLmxlZnQudHlwZVswXSA9PT0gJ08nKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnKCcpO1xuICAgICAgdGhpc1tub2RlLmV4cHJlc3Npb24udHlwZV0obm9kZS5leHByZXNzaW9uLCBzdGF0ZSk7XG4gICAgICBzdGF0ZS53cml0ZSgnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW25vZGUuZXhwcmVzc2lvbi50eXBlXShub2RlLmV4cHJlc3Npb24sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBzdGF0ZS53cml0ZSgnOycpO1xuICB9LFxuICBJZlN0YXRlbWVudDogZnVuY3Rpb24gSWZTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnaWYgKCcpO1xuICAgIHRoaXNbbm9kZS50ZXN0LnR5cGVdKG5vZGUudGVzdCwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCcpICcpO1xuICAgIHRoaXNbbm9kZS5jb25zZXF1ZW50LnR5cGVdKG5vZGUuY29uc2VxdWVudCwgc3RhdGUpO1xuXG4gICAgaWYgKG5vZGUuYWx0ZXJuYXRlICE9IG51bGwpIHtcbiAgICAgIHN0YXRlLndyaXRlKCcgZWxzZSAnKTtcbiAgICAgIHRoaXNbbm9kZS5hbHRlcm5hdGUudHlwZV0obm9kZS5hbHRlcm5hdGUsIHN0YXRlKTtcbiAgICB9XG4gIH0sXG4gIExhYmVsZWRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIExhYmVsZWRTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICB0aGlzW25vZGUubGFiZWwudHlwZV0obm9kZS5sYWJlbCwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCc6ICcpO1xuICAgIHRoaXNbbm9kZS5ib2R5LnR5cGVdKG5vZGUuYm9keSwgc3RhdGUpO1xuICB9LFxuICBCcmVha1N0YXRlbWVudDogZnVuY3Rpb24gQnJlYWtTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnYnJlYWsnKTtcblxuICAgIGlmIChub2RlLmxhYmVsICE9IG51bGwpIHtcbiAgICAgIHN0YXRlLndyaXRlKCcgJyk7XG4gICAgICB0aGlzW25vZGUubGFiZWwudHlwZV0obm9kZS5sYWJlbCwgc3RhdGUpO1xuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gIH0sXG4gIENvbnRpbnVlU3RhdGVtZW50OiBmdW5jdGlvbiBDb250aW51ZVN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdjb250aW51ZScpO1xuXG4gICAgaWYgKG5vZGUubGFiZWwgIT0gbnVsbCkge1xuICAgICAgc3RhdGUud3JpdGUoJyAnKTtcbiAgICAgIHRoaXNbbm9kZS5sYWJlbC50eXBlXShub2RlLmxhYmVsLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgc3RhdGUud3JpdGUoJzsnKTtcbiAgfSxcbiAgV2l0aFN0YXRlbWVudDogZnVuY3Rpb24gV2l0aFN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCd3aXRoICgnKTtcbiAgICB0aGlzW25vZGUub2JqZWN0LnR5cGVdKG5vZGUub2JqZWN0LCBzdGF0ZSk7XG4gICAgc3RhdGUud3JpdGUoJykgJyk7XG4gICAgdGhpc1tub2RlLmJvZHkudHlwZV0obm9kZS5ib2R5LCBzdGF0ZSk7XG4gIH0sXG4gIFN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24gU3dpdGNoU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgdmFyIGluZGVudCA9IHN0YXRlLmluZGVudC5yZXBlYXQoc3RhdGUuaW5kZW50TGV2ZWwrKyk7XG4gICAgdmFyIGxpbmVFbmQgPSBzdGF0ZS5saW5lRW5kLFxuICAgICAgICB3cml0ZUNvbW1lbnRzID0gc3RhdGUud3JpdGVDb21tZW50cztcbiAgICBzdGF0ZS5pbmRlbnRMZXZlbCsrO1xuICAgIHZhciBjYXNlSW5kZW50ID0gaW5kZW50ICsgc3RhdGUuaW5kZW50O1xuICAgIHZhciBzdGF0ZW1lbnRJbmRlbnQgPSBjYXNlSW5kZW50ICsgc3RhdGUuaW5kZW50O1xuICAgIHN0YXRlLndyaXRlKCdzd2l0Y2ggKCcpO1xuICAgIHRoaXNbbm9kZS5kaXNjcmltaW5hbnQudHlwZV0obm9kZS5kaXNjcmltaW5hbnQsIHN0YXRlKTtcbiAgICBzdGF0ZS53cml0ZSgnKSB7JyArIGxpbmVFbmQpO1xuICAgIHZhciBvY2N1cmVuY2VzID0gbm9kZS5jYXNlcztcbiAgICB2YXIgb2NjdXJlbmNlc0NvdW50ID0gb2NjdXJlbmNlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9jY3VyZW5jZXNDb3VudDsgaSsrKSB7XG4gICAgICB2YXIgb2NjdXJlbmNlID0gb2NjdXJlbmNlc1tpXTtcblxuICAgICAgaWYgKHdyaXRlQ29tbWVudHMgJiYgb2NjdXJlbmNlLmNvbW1lbnRzICE9IG51bGwpIHtcbiAgICAgICAgZm9ybWF0Q29tbWVudHMoc3RhdGUsIG9jY3VyZW5jZS5jb21tZW50cywgY2FzZUluZGVudCwgbGluZUVuZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvY2N1cmVuY2UudGVzdCkge1xuICAgICAgICBzdGF0ZS53cml0ZShjYXNlSW5kZW50ICsgJ2Nhc2UgJyk7XG4gICAgICAgIHRoaXNbb2NjdXJlbmNlLnRlc3QudHlwZV0ob2NjdXJlbmNlLnRlc3QsIHN0YXRlKTtcbiAgICAgICAgc3RhdGUud3JpdGUoJzonICsgbGluZUVuZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS53cml0ZShjYXNlSW5kZW50ICsgJ2RlZmF1bHQ6JyArIGxpbmVFbmQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29uc2VxdWVudCA9IG9jY3VyZW5jZS5jb25zZXF1ZW50O1xuICAgICAgdmFyIGNvbnNlcXVlbnRDb3VudCA9IGNvbnNlcXVlbnQubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgY29uc2VxdWVudENvdW50OyBfaSsrKSB7XG4gICAgICAgIHZhciBzdGF0ZW1lbnQgPSBjb25zZXF1ZW50W19pXTtcblxuICAgICAgICBpZiAod3JpdGVDb21tZW50cyAmJiBzdGF0ZW1lbnQuY29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgICAgIGZvcm1hdENvbW1lbnRzKHN0YXRlLCBzdGF0ZW1lbnQuY29tbWVudHMsIHN0YXRlbWVudEluZGVudCwgbGluZUVuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS53cml0ZShzdGF0ZW1lbnRJbmRlbnQpO1xuICAgICAgICB0aGlzW3N0YXRlbWVudC50eXBlXShzdGF0ZW1lbnQsIHN0YXRlKTtcbiAgICAgICAgc3RhdGUud3JpdGUobGluZUVuZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGUuaW5kZW50TGV2ZWwgLT0gMjtcbiAgICBzdGF0ZS53cml0ZShpbmRlbnQgKyAnfScpO1xuICB9LFxuICBSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIFJldHVyblN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdyZXR1cm4nKTtcblxuICAgIGlmIChub2RlLmFyZ3VtZW50KSB7XG4gICAgICBzdGF0ZS53cml0ZSgnICcpO1xuICAgICAgdGhpc1tub2RlLmFyZ3VtZW50LnR5cGVdKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBzdGF0ZS53cml0ZSgnOycpO1xuICB9LFxuICBUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24gVGhyb3dTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgndGhyb3cgJyk7XG4gICAgdGhpc1tub2RlLmFyZ3VtZW50LnR5cGVdKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICBzdGF0ZS53cml0ZSgnOycpO1xuICB9LFxuICBUcnlTdGF0ZW1lbnQ6IGZ1bmN0aW9uIFRyeVN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCd0cnkgJyk7XG4gICAgdGhpc1tub2RlLmJsb2NrLnR5cGVdKG5vZGUuYmxvY2ssIHN0YXRlKTtcblxuICAgIGlmIChub2RlLmhhbmRsZXIpIHtcbiAgICAgIHZhciBoYW5kbGVyID0gbm9kZS5oYW5kbGVyO1xuXG4gICAgICBpZiAoaGFuZGxlci5wYXJhbSA9PSBudWxsKSB7XG4gICAgICAgIHN0YXRlLndyaXRlKCcgY2F0Y2ggJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS53cml0ZSgnIGNhdGNoICgnKTtcbiAgICAgICAgdGhpc1toYW5kbGVyLnBhcmFtLnR5cGVdKGhhbmRsZXIucGFyYW0sIHN0YXRlKTtcbiAgICAgICAgc3RhdGUud3JpdGUoJykgJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXNbaGFuZGxlci5ib2R5LnR5cGVdKGhhbmRsZXIuYm9keSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChub2RlLmZpbmFsaXplcikge1xuICAgICAgc3RhdGUud3JpdGUoJyBmaW5hbGx5ICcpO1xuICAgICAgdGhpc1tub2RlLmZpbmFsaXplci50eXBlXShub2RlLmZpbmFsaXplciwgc3RhdGUpO1xuICAgIH1cbiAgfSxcbiAgV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIFdoaWxlU3RhdGVtZW50KG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ3doaWxlICgnKTtcbiAgICB0aGlzW25vZGUudGVzdC50eXBlXShub2RlLnRlc3QsIHN0YXRlKTtcbiAgICBzdGF0ZS53cml0ZSgnKSAnKTtcbiAgICB0aGlzW25vZGUuYm9keS50eXBlXShub2RlLmJvZHksIHN0YXRlKTtcbiAgfSxcbiAgRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gRG9XaGlsZVN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdkbyAnKTtcbiAgICB0aGlzW25vZGUuYm9keS50eXBlXShub2RlLmJvZHksIHN0YXRlKTtcbiAgICBzdGF0ZS53cml0ZSgnIHdoaWxlICgnKTtcbiAgICB0aGlzW25vZGUudGVzdC50eXBlXShub2RlLnRlc3QsIHN0YXRlKTtcbiAgICBzdGF0ZS53cml0ZSgnKTsnKTtcbiAgfSxcbiAgRm9yU3RhdGVtZW50OiBmdW5jdGlvbiBGb3JTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnZm9yICgnKTtcblxuICAgIGlmIChub2RlLmluaXQgIT0gbnVsbCkge1xuICAgICAgdmFyIGluaXQgPSBub2RlLmluaXQ7XG5cbiAgICAgIGlmIChpbml0LnR5cGVbMF0gPT09ICdWJykge1xuICAgICAgICBmb3JtYXRWYXJpYWJsZURlY2xhcmF0aW9uKHN0YXRlLCBpbml0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbaW5pdC50eXBlXShpbml0LCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGUud3JpdGUoJzsgJyk7XG5cbiAgICBpZiAobm9kZS50ZXN0KSB7XG4gICAgICB0aGlzW25vZGUudGVzdC50eXBlXShub2RlLnRlc3QsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBzdGF0ZS53cml0ZSgnOyAnKTtcblxuICAgIGlmIChub2RlLnVwZGF0ZSkge1xuICAgICAgdGhpc1tub2RlLnVwZGF0ZS50eXBlXShub2RlLnVwZGF0ZSwgc3RhdGUpO1xuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKCcpICcpO1xuICAgIHRoaXNbbm9kZS5ib2R5LnR5cGVdKG5vZGUuYm9keSwgc3RhdGUpO1xuICB9LFxuICBGb3JJblN0YXRlbWVudDogRm9ySW5TdGF0ZW1lbnQgPSBmdW5jdGlvbiBGb3JJblN0YXRlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKFwiZm9yIFwiLmNvbmNhdChub2RlW1wiYXdhaXRcIl0gPyAnYXdhaXQgJyA6ICcnLCBcIihcIikpO1xuICAgIHZhciBsZWZ0ID0gbm9kZS5sZWZ0O1xuXG4gICAgaWYgKGxlZnQudHlwZVswXSA9PT0gJ1YnKSB7XG4gICAgICBmb3JtYXRWYXJpYWJsZURlY2xhcmF0aW9uKHN0YXRlLCBsZWZ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1tsZWZ0LnR5cGVdKGxlZnQsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBzdGF0ZS53cml0ZShub2RlLnR5cGVbM10gPT09ICdJJyA/ICcgaW4gJyA6ICcgb2YgJyk7XG4gICAgdGhpc1tub2RlLnJpZ2h0LnR5cGVdKG5vZGUucmlnaHQsIHN0YXRlKTtcbiAgICBzdGF0ZS53cml0ZSgnKSAnKTtcbiAgICB0aGlzW25vZGUuYm9keS50eXBlXShub2RlLmJvZHksIHN0YXRlKTtcbiAgfSxcbiAgRm9yT2ZTdGF0ZW1lbnQ6IEZvckluU3RhdGVtZW50LFxuICBEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gRGVidWdnZXJTdGF0ZW1lbnQobm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnZGVidWdnZXI7Jywgbm9kZSk7XG4gIH0sXG4gIEZ1bmN0aW9uRGVjbGFyYXRpb246IEZ1bmN0aW9uRGVjbGFyYXRpb24gPSBmdW5jdGlvbiBGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoKG5vZGUuYXN5bmMgPyAnYXN5bmMgJyA6ICcnKSArIChub2RlLmdlbmVyYXRvciA/ICdmdW5jdGlvbiogJyA6ICdmdW5jdGlvbiAnKSArIChub2RlLmlkID8gbm9kZS5pZC5uYW1lIDogJycpLCBub2RlKTtcbiAgICBmb3JtYXRTZXF1ZW5jZShzdGF0ZSwgbm9kZS5wYXJhbXMpO1xuICAgIHN0YXRlLndyaXRlKCcgJyk7XG4gICAgdGhpc1tub2RlLmJvZHkudHlwZV0obm9kZS5ib2R5LCBzdGF0ZSk7XG4gIH0sXG4gIEZ1bmN0aW9uRXhwcmVzc2lvbjogRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24gVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLCBzdGF0ZSkge1xuICAgIGZvcm1hdFZhcmlhYmxlRGVjbGFyYXRpb24oc3RhdGUsIG5vZGUpO1xuICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gIH0sXG4gIFZhcmlhYmxlRGVjbGFyYXRvcjogZnVuY3Rpb24gVmFyaWFibGVEZWNsYXJhdG9yKG5vZGUsIHN0YXRlKSB7XG4gICAgdGhpc1tub2RlLmlkLnR5cGVdKG5vZGUuaWQsIHN0YXRlKTtcblxuICAgIGlmIChub2RlLmluaXQgIT0gbnVsbCkge1xuICAgICAgc3RhdGUud3JpdGUoJyA9ICcpO1xuICAgICAgdGhpc1tub2RlLmluaXQudHlwZV0obm9kZS5pbml0LCBzdGF0ZSk7XG4gICAgfVxuICB9LFxuICBDbGFzc0RlY2xhcmF0aW9uOiBmdW5jdGlvbiBDbGFzc0RlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ2NsYXNzICcgKyAobm9kZS5pZCA/IFwiXCIuY29uY2F0KG5vZGUuaWQubmFtZSwgXCIgXCIpIDogJycpLCBub2RlKTtcblxuICAgIGlmIChub2RlLnN1cGVyQ2xhc3MpIHtcbiAgICAgIHN0YXRlLndyaXRlKCdleHRlbmRzICcpO1xuICAgICAgdmFyIHN1cGVyQ2xhc3MgPSBub2RlLnN1cGVyQ2xhc3M7XG4gICAgICB2YXIgdHlwZSA9IHN1cGVyQ2xhc3MudHlwZTtcbiAgICAgIHZhciBwcmVjZWRlbmNlID0gc3RhdGUuZXhwcmVzc2lvbnNQcmVjZWRlbmNlW3R5cGVdO1xuXG4gICAgICBpZiAoKHR5cGVbMF0gIT09ICdDJyB8fCB0eXBlWzFdICE9PSAnbCcgfHwgdHlwZVs1XSAhPT0gJ0UnKSAmJiAocHJlY2VkZW5jZSA9PT0gTkVFRFNfUEFSRU5USEVTRVMgfHwgcHJlY2VkZW5jZSA8IHN0YXRlLmV4cHJlc3Npb25zUHJlY2VkZW5jZS5DbGFzc0V4cHJlc3Npb24pKSB7XG4gICAgICAgIHN0YXRlLndyaXRlKCcoJyk7XG4gICAgICAgIHRoaXNbbm9kZS5zdXBlckNsYXNzLnR5cGVdKHN1cGVyQ2xhc3MsIHN0YXRlKTtcbiAgICAgICAgc3RhdGUud3JpdGUoJyknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbc3VwZXJDbGFzcy50eXBlXShzdXBlckNsYXNzLCBzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLndyaXRlKCcgJyk7XG4gICAgfVxuXG4gICAgdGhpcy5DbGFzc0JvZHkobm9kZS5ib2R5LCBzdGF0ZSk7XG4gIH0sXG4gIEltcG9ydERlY2xhcmF0aW9uOiBmdW5jdGlvbiBJbXBvcnREZWNsYXJhdGlvbihub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdpbXBvcnQgJyk7XG4gICAgdmFyIHNwZWNpZmllcnMgPSBub2RlLnNwZWNpZmllcnM7XG4gICAgdmFyIGxlbmd0aCA9IHNwZWNpZmllcnMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChsZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKDsgaSA8IGxlbmd0aDspIHtcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgc3RhdGUud3JpdGUoJywgJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3BlY2lmaWVyID0gc3BlY2lmaWVyc1tpXTtcbiAgICAgICAgdmFyIHR5cGUgPSBzcGVjaWZpZXIudHlwZVs2XTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ0QnKSB7XG4gICAgICAgICAgc3RhdGUud3JpdGUoc3BlY2lmaWVyLmxvY2FsLm5hbWUsIHNwZWNpZmllcik7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdOJykge1xuICAgICAgICAgIHN0YXRlLndyaXRlKCcqIGFzICcgKyBzcGVjaWZpZXIubG9jYWwubmFtZSwgc3BlY2lmaWVyKTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGkgPCBsZW5ndGgpIHtcbiAgICAgICAgc3RhdGUud3JpdGUoJ3snKTtcblxuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgdmFyIF9zcGVjaWZpZXIgPSBzcGVjaWZpZXJzW2ldO1xuICAgICAgICAgIHZhciBuYW1lID0gX3NwZWNpZmllci5pbXBvcnRlZC5uYW1lO1xuICAgICAgICAgIHN0YXRlLndyaXRlKG5hbWUsIF9zcGVjaWZpZXIpO1xuXG4gICAgICAgICAgaWYgKG5hbWUgIT09IF9zcGVjaWZpZXIubG9jYWwubmFtZSkge1xuICAgICAgICAgICAgc3RhdGUud3JpdGUoJyBhcyAnICsgX3NwZWNpZmllci5sb2NhbC5uYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKytpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGF0ZS53cml0ZSgnLCAnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUud3JpdGUoJ30nKTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUud3JpdGUoJyBmcm9tICcpO1xuICAgIH1cblxuICAgIHRoaXMuTGl0ZXJhbChub2RlLnNvdXJjZSwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gIH0sXG4gIEltcG9ydEV4cHJlc3Npb246IGZ1bmN0aW9uIEltcG9ydEV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnaW1wb3J0KCcpO1xuICAgIHRoaXNbbm9kZS5zb3VyY2UudHlwZV0obm9kZS5zb3VyY2UsIHN0YXRlKTtcbiAgICBzdGF0ZS53cml0ZSgnKScpO1xuICB9LFxuICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246IGZ1bmN0aW9uIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdleHBvcnQgZGVmYXVsdCAnKTtcbiAgICB0aGlzW25vZGUuZGVjbGFyYXRpb24udHlwZV0obm9kZS5kZWNsYXJhdGlvbiwgc3RhdGUpO1xuXG4gICAgaWYgKHN0YXRlLmV4cHJlc3Npb25zUHJlY2VkZW5jZVtub2RlLmRlY2xhcmF0aW9uLnR5cGVdICE9IG51bGwgJiYgbm9kZS5kZWNsYXJhdGlvbi50eXBlWzBdICE9PSAnRicpIHtcbiAgICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gICAgfVxuICB9LFxuICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBmdW5jdGlvbiBFeHBvcnROYW1lZERlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ2V4cG9ydCAnKTtcblxuICAgIGlmIChub2RlLmRlY2xhcmF0aW9uKSB7XG4gICAgICB0aGlzW25vZGUuZGVjbGFyYXRpb24udHlwZV0obm9kZS5kZWNsYXJhdGlvbiwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS53cml0ZSgneycpO1xuICAgICAgdmFyIHNwZWNpZmllcnMgPSBub2RlLnNwZWNpZmllcnMsXG4gICAgICAgICAgbGVuZ3RoID0gc3BlY2lmaWVycy5sZW5ndGg7XG5cbiAgICAgIGlmIChsZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOzspIHtcbiAgICAgICAgICB2YXIgc3BlY2lmaWVyID0gc3BlY2lmaWVyc1tpXTtcbiAgICAgICAgICB2YXIgbmFtZSA9IHNwZWNpZmllci5sb2NhbC5uYW1lO1xuICAgICAgICAgIHN0YXRlLndyaXRlKG5hbWUsIHNwZWNpZmllcik7XG5cbiAgICAgICAgICBpZiAobmFtZSAhPT0gc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUpIHtcbiAgICAgICAgICAgIHN0YXRlLndyaXRlKCcgYXMgJyArIHNwZWNpZmllci5leHBvcnRlZC5uYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKytpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGF0ZS53cml0ZSgnLCAnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLndyaXRlKCd9Jyk7XG5cbiAgICAgIGlmIChub2RlLnNvdXJjZSkge1xuICAgICAgICBzdGF0ZS53cml0ZSgnIGZyb20gJyk7XG4gICAgICAgIHRoaXMuTGl0ZXJhbChub2RlLnNvdXJjZSwgc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS53cml0ZSgnOycpO1xuICAgIH1cbiAgfSxcbiAgRXhwb3J0QWxsRGVjbGFyYXRpb246IGZ1bmN0aW9uIEV4cG9ydEFsbERlY2xhcmF0aW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgaWYgKG5vZGUuZXhwb3J0ZWQgIT0gbnVsbCkge1xuICAgICAgc3RhdGUud3JpdGUoJ2V4cG9ydCAqIGFzICcgKyBub2RlLmV4cG9ydGVkLm5hbWUgKyAnIGZyb20gJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLndyaXRlKCdleHBvcnQgKiBmcm9tICcpO1xuICAgIH1cblxuICAgIHRoaXMuTGl0ZXJhbChub2RlLnNvdXJjZSwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gIH0sXG4gIE1ldGhvZERlZmluaXRpb246IGZ1bmN0aW9uIE1ldGhvZERlZmluaXRpb24obm9kZSwgc3RhdGUpIHtcbiAgICBpZiAobm9kZVtcInN0YXRpY1wiXSkge1xuICAgICAgc3RhdGUud3JpdGUoJ3N0YXRpYyAnKTtcbiAgICB9XG5cbiAgICB2YXIga2luZCA9IG5vZGUua2luZFswXTtcblxuICAgIGlmIChraW5kID09PSAnZycgfHwga2luZCA9PT0gJ3MnKSB7XG4gICAgICBzdGF0ZS53cml0ZShub2RlLmtpbmQgKyAnICcpO1xuICAgIH1cblxuICAgIGlmIChub2RlLnZhbHVlLmFzeW5jKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnYXN5bmMgJyk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudmFsdWUuZ2VuZXJhdG9yKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnKicpO1xuICAgIH1cblxuICAgIGlmIChub2RlLmNvbXB1dGVkKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnWycpO1xuICAgICAgdGhpc1tub2RlLmtleS50eXBlXShub2RlLmtleSwgc3RhdGUpO1xuICAgICAgc3RhdGUud3JpdGUoJ10nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1tub2RlLmtleS50eXBlXShub2RlLmtleSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGZvcm1hdFNlcXVlbmNlKHN0YXRlLCBub2RlLnZhbHVlLnBhcmFtcyk7XG4gICAgc3RhdGUud3JpdGUoJyAnKTtcbiAgICB0aGlzW25vZGUudmFsdWUuYm9keS50eXBlXShub2RlLnZhbHVlLmJvZHksIHN0YXRlKTtcbiAgfSxcbiAgQ2xhc3NFeHByZXNzaW9uOiBmdW5jdGlvbiBDbGFzc0V4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICB0aGlzLkNsYXNzRGVjbGFyYXRpb24obm9kZSwgc3RhdGUpO1xuICB9LFxuICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZShub2RlLmFzeW5jID8gJ2FzeW5jICcgOiAnJywgbm9kZSk7XG4gICAgdmFyIHBhcmFtcyA9IG5vZGUucGFyYW1zO1xuXG4gICAgaWYgKHBhcmFtcyAhPSBudWxsKSB7XG4gICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMSAmJiBwYXJhbXNbMF0udHlwZVswXSA9PT0gJ0knKSB7XG4gICAgICAgIHN0YXRlLndyaXRlKHBhcmFtc1swXS5uYW1lLCBwYXJhbXNbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybWF0U2VxdWVuY2Uoc3RhdGUsIG5vZGUucGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0ZS53cml0ZSgnID0+ICcpO1xuXG4gICAgaWYgKG5vZGUuYm9keS50eXBlWzBdID09PSAnTycpIHtcbiAgICAgIHN0YXRlLndyaXRlKCcoJyk7XG4gICAgICB0aGlzLk9iamVjdEV4cHJlc3Npb24obm9kZS5ib2R5LCBzdGF0ZSk7XG4gICAgICBzdGF0ZS53cml0ZSgnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW25vZGUuYm9keS50eXBlXShub2RlLmJvZHksIHN0YXRlKTtcbiAgICB9XG4gIH0sXG4gIFRoaXNFeHByZXNzaW9uOiBmdW5jdGlvbiBUaGlzRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCd0aGlzJywgbm9kZSk7XG4gIH0sXG4gIFN1cGVyOiBmdW5jdGlvbiBTdXBlcihub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCdzdXBlcicsIG5vZGUpO1xuICB9LFxuICBSZXN0RWxlbWVudDogUmVzdEVsZW1lbnQgPSBmdW5jdGlvbiBSZXN0RWxlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKCcuLi4nKTtcbiAgICB0aGlzW25vZGUuYXJndW1lbnQudHlwZV0obm9kZS5hcmd1bWVudCwgc3RhdGUpO1xuICB9LFxuICBTcHJlYWRFbGVtZW50OiBSZXN0RWxlbWVudCxcbiAgWWllbGRFeHByZXNzaW9uOiBmdW5jdGlvbiBZaWVsZEV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZShub2RlLmRlbGVnYXRlID8gJ3lpZWxkKicgOiAneWllbGQnKTtcblxuICAgIGlmIChub2RlLmFyZ3VtZW50KSB7XG4gICAgICBzdGF0ZS53cml0ZSgnICcpO1xuICAgICAgdGhpc1tub2RlLmFyZ3VtZW50LnR5cGVdKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICB9XG4gIH0sXG4gIEF3YWl0RXhwcmVzc2lvbjogZnVuY3Rpb24gQXdhaXRFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoJ2F3YWl0ICcsIG5vZGUpO1xuICAgIGZvcm1hdEV4cHJlc3Npb24oc3RhdGUsIG5vZGUuYXJndW1lbnQsIG5vZGUpO1xuICB9LFxuICBUZW1wbGF0ZUxpdGVyYWw6IGZ1bmN0aW9uIFRlbXBsYXRlTGl0ZXJhbChub2RlLCBzdGF0ZSkge1xuICAgIHZhciBxdWFzaXMgPSBub2RlLnF1YXNpcyxcbiAgICAgICAgZXhwcmVzc2lvbnMgPSBub2RlLmV4cHJlc3Npb25zO1xuICAgIHN0YXRlLndyaXRlKCdgJyk7XG4gICAgdmFyIGxlbmd0aCA9IGV4cHJlc3Npb25zLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBleHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV07XG4gICAgICB2YXIgX3F1YXNpID0gcXVhc2lzW2ldO1xuICAgICAgc3RhdGUud3JpdGUoX3F1YXNpLnZhbHVlLnJhdywgX3F1YXNpKTtcbiAgICAgIHN0YXRlLndyaXRlKCckeycpO1xuICAgICAgdGhpc1tleHByZXNzaW9uLnR5cGVdKGV4cHJlc3Npb24sIHN0YXRlKTtcbiAgICAgIHN0YXRlLndyaXRlKCd9Jyk7XG4gICAgfVxuXG4gICAgdmFyIHF1YXNpID0gcXVhc2lzW3F1YXNpcy5sZW5ndGggLSAxXTtcbiAgICBzdGF0ZS53cml0ZShxdWFzaS52YWx1ZS5yYXcsIHF1YXNpKTtcbiAgICBzdGF0ZS53cml0ZSgnYCcpO1xuICB9LFxuICBUZW1wbGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uIFRlbXBsYXRlRWxlbWVudChub2RlLCBzdGF0ZSkge1xuICAgIHN0YXRlLndyaXRlKG5vZGUudmFsdWUucmF3LCBub2RlKTtcbiAgfSxcbiAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBmdW5jdGlvbiBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICBmb3JtYXRFeHByZXNzaW9uKHN0YXRlLCBub2RlLnRhZywgbm9kZSk7XG4gICAgdGhpc1tub2RlLnF1YXNpLnR5cGVdKG5vZGUucXVhc2ksIHN0YXRlKTtcbiAgfSxcbiAgQXJyYXlFeHByZXNzaW9uOiBBcnJheUV4cHJlc3Npb24gPSBmdW5jdGlvbiBBcnJheUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnWycpO1xuXG4gICAgaWYgKG5vZGUuZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGVsZW1lbnRzID0gbm9kZS5lbGVtZW50cyxcbiAgICAgICAgICBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOzspIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcblxuICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpc1tlbGVtZW50LnR5cGVdKGVsZW1lbnQsIHN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgrK2kgPCBsZW5ndGgpIHtcbiAgICAgICAgICBzdGF0ZS53cml0ZSgnLCAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS53cml0ZSgnLCAnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKCddJyk7XG4gIH0sXG4gIEFycmF5UGF0dGVybjogQXJyYXlFeHByZXNzaW9uLFxuICBPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbiBPYmplY3RFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgdmFyIGluZGVudCA9IHN0YXRlLmluZGVudC5yZXBlYXQoc3RhdGUuaW5kZW50TGV2ZWwrKyk7XG4gICAgdmFyIGxpbmVFbmQgPSBzdGF0ZS5saW5lRW5kLFxuICAgICAgICB3cml0ZUNvbW1lbnRzID0gc3RhdGUud3JpdGVDb21tZW50cztcbiAgICB2YXIgcHJvcGVydHlJbmRlbnQgPSBpbmRlbnQgKyBzdGF0ZS5pbmRlbnQ7XG4gICAgc3RhdGUud3JpdGUoJ3snKTtcblxuICAgIGlmIChub2RlLnByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3RhdGUud3JpdGUobGluZUVuZCk7XG5cbiAgICAgIGlmICh3cml0ZUNvbW1lbnRzICYmIG5vZGUuY29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgICBmb3JtYXRDb21tZW50cyhzdGF0ZSwgbm9kZS5jb21tZW50cywgcHJvcGVydHlJbmRlbnQsIGxpbmVFbmQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tbWEgPSAnLCcgKyBsaW5lRW5kO1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSBub2RlLnByb3BlcnRpZXMsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOzspIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgICBpZiAod3JpdGVDb21tZW50cyAmJiBwcm9wZXJ0eS5jb21tZW50cyAhPSBudWxsKSB7XG4gICAgICAgICAgZm9ybWF0Q29tbWVudHMoc3RhdGUsIHByb3BlcnR5LmNvbW1lbnRzLCBwcm9wZXJ0eUluZGVudCwgbGluZUVuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS53cml0ZShwcm9wZXJ0eUluZGVudCk7XG4gICAgICAgIHRoaXNbcHJvcGVydHkudHlwZV0ocHJvcGVydHksIHN0YXRlKTtcblxuICAgICAgICBpZiAoKytpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgc3RhdGUud3JpdGUoY29tbWEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLndyaXRlKGxpbmVFbmQpO1xuXG4gICAgICBpZiAod3JpdGVDb21tZW50cyAmJiBub2RlLnRyYWlsaW5nQ29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgICBmb3JtYXRDb21tZW50cyhzdGF0ZSwgbm9kZS50cmFpbGluZ0NvbW1lbnRzLCBwcm9wZXJ0eUluZGVudCwgbGluZUVuZCk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLndyaXRlKGluZGVudCArICd9Jyk7XG4gICAgfSBlbHNlIGlmICh3cml0ZUNvbW1lbnRzKSB7XG4gICAgICBpZiAobm9kZS5jb21tZW50cyAhPSBudWxsKSB7XG4gICAgICAgIHN0YXRlLndyaXRlKGxpbmVFbmQpO1xuICAgICAgICBmb3JtYXRDb21tZW50cyhzdGF0ZSwgbm9kZS5jb21tZW50cywgcHJvcGVydHlJbmRlbnQsIGxpbmVFbmQpO1xuXG4gICAgICAgIGlmIChub2RlLnRyYWlsaW5nQ29tbWVudHMgIT0gbnVsbCkge1xuICAgICAgICAgIGZvcm1hdENvbW1lbnRzKHN0YXRlLCBub2RlLnRyYWlsaW5nQ29tbWVudHMsIHByb3BlcnR5SW5kZW50LCBsaW5lRW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLndyaXRlKGluZGVudCArICd9Jyk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudHJhaWxpbmdDb21tZW50cyAhPSBudWxsKSB7XG4gICAgICAgIHN0YXRlLndyaXRlKGxpbmVFbmQpO1xuICAgICAgICBmb3JtYXRDb21tZW50cyhzdGF0ZSwgbm9kZS50cmFpbGluZ0NvbW1lbnRzLCBwcm9wZXJ0eUluZGVudCwgbGluZUVuZCk7XG4gICAgICAgIHN0YXRlLndyaXRlKGluZGVudCArICd9Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS53cml0ZSgnfScpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS53cml0ZSgnfScpO1xuICAgIH1cblxuICAgIHN0YXRlLmluZGVudExldmVsLS07XG4gIH0sXG4gIFByb3BlcnR5OiBmdW5jdGlvbiBQcm9wZXJ0eShub2RlLCBzdGF0ZSkge1xuICAgIGlmIChub2RlLm1ldGhvZCB8fCBub2RlLmtpbmRbMF0gIT09ICdpJykge1xuICAgICAgdGhpcy5NZXRob2REZWZpbml0aW9uKG5vZGUsIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFub2RlLnNob3J0aGFuZCkge1xuICAgICAgICBpZiAobm9kZS5jb21wdXRlZCkge1xuICAgICAgICAgIHN0YXRlLndyaXRlKCdbJyk7XG4gICAgICAgICAgdGhpc1tub2RlLmtleS50eXBlXShub2RlLmtleSwgc3RhdGUpO1xuICAgICAgICAgIHN0YXRlLndyaXRlKCddJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpc1tub2RlLmtleS50eXBlXShub2RlLmtleSwgc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUud3JpdGUoJzogJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXNbbm9kZS52YWx1ZS50eXBlXShub2RlLnZhbHVlLCBzdGF0ZSk7XG4gICAgfVxuICB9LFxuICBQcm9wZXJ0eURlZmluaXRpb246IGZ1bmN0aW9uIFByb3BlcnR5RGVmaW5pdGlvbihub2RlLCBzdGF0ZSkge1xuICAgIGlmIChub2RlW1wic3RhdGljXCJdKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnc3RhdGljICcpO1xuICAgIH1cblxuICAgIGlmIChub2RlLmNvbXB1dGVkKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnWycpO1xuICAgIH1cblxuICAgIHRoaXNbbm9kZS5rZXkudHlwZV0obm9kZS5rZXksIHN0YXRlKTtcblxuICAgIGlmIChub2RlLmNvbXB1dGVkKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnXScpO1xuICAgIH1cblxuICAgIGlmIChub2RlLnZhbHVlID09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLmtleS50eXBlWzBdICE9PSAnRicpIHtcbiAgICAgICAgc3RhdGUud3JpdGUoJzsnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKCcgPSAnKTtcbiAgICB0aGlzW25vZGUudmFsdWUudHlwZV0obm9kZS52YWx1ZSwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCc7Jyk7XG4gIH0sXG4gIE9iamVjdFBhdHRlcm46IGZ1bmN0aW9uIE9iamVjdFBhdHRlcm4obm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgneycpO1xuXG4gICAgaWYgKG5vZGUucHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllcyxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7Oykge1xuICAgICAgICB0aGlzW3Byb3BlcnRpZXNbaV0udHlwZV0ocHJvcGVydGllc1tpXSwgc3RhdGUpO1xuXG4gICAgICAgIGlmICgrK2kgPCBsZW5ndGgpIHtcbiAgICAgICAgICBzdGF0ZS53cml0ZSgnLCAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRlLndyaXRlKCd9Jyk7XG4gIH0sXG4gIFNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24gU2VxdWVuY2VFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgZm9ybWF0U2VxdWVuY2Uoc3RhdGUsIG5vZGUuZXhwcmVzc2lvbnMpO1xuICB9LFxuICBVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIFVuYXJ5RXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIGlmIChub2RlLnByZWZpeCkge1xuICAgICAgdmFyIG9wZXJhdG9yID0gbm9kZS5vcGVyYXRvcixcbiAgICAgICAgICBhcmd1bWVudCA9IG5vZGUuYXJndW1lbnQsXG4gICAgICAgICAgdHlwZSA9IG5vZGUuYXJndW1lbnQudHlwZTtcbiAgICAgIHN0YXRlLndyaXRlKG9wZXJhdG9yKTtcbiAgICAgIHZhciBuZWVkc1BhcmVudGhlc2VzID0gZXhwcmVzc2lvbk5lZWRzUGFyZW50aGVzaXMoc3RhdGUsIGFyZ3VtZW50LCBub2RlKTtcblxuICAgICAgaWYgKCFuZWVkc1BhcmVudGhlc2VzICYmIChvcGVyYXRvci5sZW5ndGggPiAxIHx8IHR5cGVbMF0gPT09ICdVJyAmJiAodHlwZVsxXSA9PT0gJ24nIHx8IHR5cGVbMV0gPT09ICdwJykgJiYgYXJndW1lbnQucHJlZml4ICYmIGFyZ3VtZW50Lm9wZXJhdG9yWzBdID09PSBvcGVyYXRvciAmJiAob3BlcmF0b3IgPT09ICcrJyB8fCBvcGVyYXRvciA9PT0gJy0nKSkpIHtcbiAgICAgICAgc3RhdGUud3JpdGUoJyAnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRzUGFyZW50aGVzZXMpIHtcbiAgICAgICAgc3RhdGUud3JpdGUob3BlcmF0b3IubGVuZ3RoID4gMSA/ICcgKCcgOiAnKCcpO1xuICAgICAgICB0aGlzW3R5cGVdKGFyZ3VtZW50LCBzdGF0ZSk7XG4gICAgICAgIHN0YXRlLndyaXRlKCcpJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW3R5cGVdKGFyZ3VtZW50LCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbbm9kZS5hcmd1bWVudC50eXBlXShub2RlLmFyZ3VtZW50LCBzdGF0ZSk7XG4gICAgICBzdGF0ZS53cml0ZShub2RlLm9wZXJhdG9yKTtcbiAgICB9XG4gIH0sXG4gIFVwZGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uIFVwZGF0ZUV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICBpZiAobm9kZS5wcmVmaXgpIHtcbiAgICAgIHN0YXRlLndyaXRlKG5vZGUub3BlcmF0b3IpO1xuICAgICAgdGhpc1tub2RlLmFyZ3VtZW50LnR5cGVdKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1tub2RlLmFyZ3VtZW50LnR5cGVdKG5vZGUuYXJndW1lbnQsIHN0YXRlKTtcbiAgICAgIHN0YXRlLndyaXRlKG5vZGUub3BlcmF0b3IpO1xuICAgIH1cbiAgfSxcbiAgQXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uIEFzc2lnbm1lbnRFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgdGhpc1tub2RlLmxlZnQudHlwZV0obm9kZS5sZWZ0LCBzdGF0ZSk7XG4gICAgc3RhdGUud3JpdGUoJyAnICsgbm9kZS5vcGVyYXRvciArICcgJyk7XG4gICAgdGhpc1tub2RlLnJpZ2h0LnR5cGVdKG5vZGUucmlnaHQsIHN0YXRlKTtcbiAgfSxcbiAgQXNzaWdubWVudFBhdHRlcm46IGZ1bmN0aW9uIEFzc2lnbm1lbnRQYXR0ZXJuKG5vZGUsIHN0YXRlKSB7XG4gICAgdGhpc1tub2RlLmxlZnQudHlwZV0obm9kZS5sZWZ0LCBzdGF0ZSk7XG4gICAgc3RhdGUud3JpdGUoJyA9ICcpO1xuICAgIHRoaXNbbm9kZS5yaWdodC50eXBlXShub2RlLnJpZ2h0LCBzdGF0ZSk7XG4gIH0sXG4gIEJpbmFyeUV4cHJlc3Npb246IEJpbmFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiBCaW5hcnlFeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgdmFyIGlzSW4gPSBub2RlLm9wZXJhdG9yID09PSAnaW4nO1xuXG4gICAgaWYgKGlzSW4pIHtcbiAgICAgIHN0YXRlLndyaXRlKCcoJyk7XG4gICAgfVxuXG4gICAgZm9ybWF0RXhwcmVzc2lvbihzdGF0ZSwgbm9kZS5sZWZ0LCBub2RlLCBmYWxzZSk7XG4gICAgc3RhdGUud3JpdGUoJyAnICsgbm9kZS5vcGVyYXRvciArICcgJyk7XG4gICAgZm9ybWF0RXhwcmVzc2lvbihzdGF0ZSwgbm9kZS5yaWdodCwgbm9kZSwgdHJ1ZSk7XG5cbiAgICBpZiAoaXNJbikge1xuICAgICAgc3RhdGUud3JpdGUoJyknKTtcbiAgICB9XG4gIH0sXG4gIExvZ2ljYWxFeHByZXNzaW9uOiBCaW5hcnlFeHByZXNzaW9uLFxuICBDb25kaXRpb25hbEV4cHJlc3Npb246IGZ1bmN0aW9uIENvbmRpdGlvbmFsRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIHZhciB0ZXN0ID0gbm9kZS50ZXN0O1xuICAgIHZhciBwcmVjZWRlbmNlID0gc3RhdGUuZXhwcmVzc2lvbnNQcmVjZWRlbmNlW3Rlc3QudHlwZV07XG5cbiAgICBpZiAocHJlY2VkZW5jZSA9PT0gTkVFRFNfUEFSRU5USEVTRVMgfHwgcHJlY2VkZW5jZSA8PSBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2UuQ29uZGl0aW9uYWxFeHByZXNzaW9uKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnKCcpO1xuICAgICAgdGhpc1t0ZXN0LnR5cGVdKHRlc3QsIHN0YXRlKTtcbiAgICAgIHN0YXRlLndyaXRlKCcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbdGVzdC50eXBlXSh0ZXN0LCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgc3RhdGUud3JpdGUoJyA/ICcpO1xuICAgIHRoaXNbbm9kZS5jb25zZXF1ZW50LnR5cGVdKG5vZGUuY29uc2VxdWVudCwgc3RhdGUpO1xuICAgIHN0YXRlLndyaXRlKCcgOiAnKTtcbiAgICB0aGlzW25vZGUuYWx0ZXJuYXRlLnR5cGVdKG5vZGUuYWx0ZXJuYXRlLCBzdGF0ZSk7XG4gIH0sXG4gIE5ld0V4cHJlc3Npb246IGZ1bmN0aW9uIE5ld0V4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICBzdGF0ZS53cml0ZSgnbmV3ICcpO1xuICAgIHZhciBwcmVjZWRlbmNlID0gc3RhdGUuZXhwcmVzc2lvbnNQcmVjZWRlbmNlW25vZGUuY2FsbGVlLnR5cGVdO1xuXG4gICAgaWYgKHByZWNlZGVuY2UgPT09IE5FRURTX1BBUkVOVEhFU0VTIHx8IHByZWNlZGVuY2UgPCBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2UuQ2FsbEV4cHJlc3Npb24gfHwgaGFzQ2FsbEV4cHJlc3Npb24obm9kZS5jYWxsZWUpKSB7XG4gICAgICBzdGF0ZS53cml0ZSgnKCcpO1xuICAgICAgdGhpc1tub2RlLmNhbGxlZS50eXBlXShub2RlLmNhbGxlZSwgc3RhdGUpO1xuICAgICAgc3RhdGUud3JpdGUoJyknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1tub2RlLmNhbGxlZS50eXBlXShub2RlLmNhbGxlZSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGZvcm1hdFNlcXVlbmNlKHN0YXRlLCBub2RlWydhcmd1bWVudHMnXSk7XG4gIH0sXG4gIENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBDYWxsRXhwcmVzc2lvbihub2RlLCBzdGF0ZSkge1xuICAgIHZhciBwcmVjZWRlbmNlID0gc3RhdGUuZXhwcmVzc2lvbnNQcmVjZWRlbmNlW25vZGUuY2FsbGVlLnR5cGVdO1xuXG4gICAgaWYgKHByZWNlZGVuY2UgPT09IE5FRURTX1BBUkVOVEhFU0VTIHx8IHByZWNlZGVuY2UgPCBzdGF0ZS5leHByZXNzaW9uc1ByZWNlZGVuY2UuQ2FsbEV4cHJlc3Npb24pIHtcbiAgICAgIHN0YXRlLndyaXRlKCcoJyk7XG4gICAgICB0aGlzW25vZGUuY2FsbGVlLnR5cGVdKG5vZGUuY2FsbGVlLCBzdGF0ZSk7XG4gICAgICBzdGF0ZS53cml0ZSgnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW25vZGUuY2FsbGVlLnR5cGVdKG5vZGUuY2FsbGVlLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUub3B0aW9uYWwpIHtcbiAgICAgIHN0YXRlLndyaXRlKCc/LicpO1xuICAgIH1cblxuICAgIGZvcm1hdFNlcXVlbmNlKHN0YXRlLCBub2RlWydhcmd1bWVudHMnXSk7XG4gIH0sXG4gIENoYWluRXhwcmVzc2lvbjogZnVuY3Rpb24gQ2hhaW5FeHByZXNzaW9uKG5vZGUsIHN0YXRlKSB7XG4gICAgdGhpc1tub2RlLmV4cHJlc3Npb24udHlwZV0obm9kZS5leHByZXNzaW9uLCBzdGF0ZSk7XG4gIH0sXG4gIE1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uIE1lbWJlckV4cHJlc3Npb24obm9kZSwgc3RhdGUpIHtcbiAgICB2YXIgcHJlY2VkZW5jZSA9IHN0YXRlLmV4cHJlc3Npb25zUHJlY2VkZW5jZVtub2RlLm9iamVjdC50eXBlXTtcblxuICAgIGlmIChwcmVjZWRlbmNlID09PSBORUVEU19QQVJFTlRIRVNFUyB8fCBwcmVjZWRlbmNlIDwgc3RhdGUuZXhwcmVzc2lvbnNQcmVjZWRlbmNlLk1lbWJlckV4cHJlc3Npb24pIHtcbiAgICAgIHN0YXRlLndyaXRlKCcoJyk7XG4gICAgICB0aGlzW25vZGUub2JqZWN0LnR5cGVdKG5vZGUub2JqZWN0LCBzdGF0ZSk7XG4gICAgICBzdGF0ZS53cml0ZSgnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW25vZGUub2JqZWN0LnR5cGVdKG5vZGUub2JqZWN0LCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuY29tcHV0ZWQpIHtcbiAgICAgIGlmIChub2RlLm9wdGlvbmFsKSB7XG4gICAgICAgIHN0YXRlLndyaXRlKCc/LicpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS53cml0ZSgnWycpO1xuICAgICAgdGhpc1tub2RlLnByb3BlcnR5LnR5cGVdKG5vZGUucHJvcGVydHksIHN0YXRlKTtcbiAgICAgIHN0YXRlLndyaXRlKCddJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChub2RlLm9wdGlvbmFsKSB7XG4gICAgICAgIHN0YXRlLndyaXRlKCc/LicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUud3JpdGUoJy4nKTtcbiAgICAgIH1cblxuICAgICAgdGhpc1tub2RlLnByb3BlcnR5LnR5cGVdKG5vZGUucHJvcGVydHksIHN0YXRlKTtcbiAgICB9XG4gIH0sXG4gIE1ldGFQcm9wZXJ0eTogZnVuY3Rpb24gTWV0YVByb3BlcnR5KG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUobm9kZS5tZXRhLm5hbWUgKyAnLicgKyBub2RlLnByb3BlcnR5Lm5hbWUsIG5vZGUpO1xuICB9LFxuICBJZGVudGlmaWVyOiBmdW5jdGlvbiBJZGVudGlmaWVyKG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUobm9kZS5uYW1lLCBub2RlKTtcbiAgfSxcbiAgUHJpdmF0ZUlkZW50aWZpZXI6IGZ1bmN0aW9uIFByaXZhdGVJZGVudGlmaWVyKG5vZGUsIHN0YXRlKSB7XG4gICAgc3RhdGUud3JpdGUoXCIjXCIuY29uY2F0KG5vZGUubmFtZSksIG5vZGUpO1xuICB9LFxuICBMaXRlcmFsOiBmdW5jdGlvbiBMaXRlcmFsKG5vZGUsIHN0YXRlKSB7XG4gICAgaWYgKG5vZGUucmF3ICE9IG51bGwpIHtcbiAgICAgIHN0YXRlLndyaXRlKG5vZGUucmF3LCBub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUucmVnZXggIT0gbnVsbCkge1xuICAgICAgdGhpcy5SZWdFeHBMaXRlcmFsKG5vZGUsIHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuYmlnaW50ICE9IG51bGwpIHtcbiAgICAgIHN0YXRlLndyaXRlKG5vZGUuYmlnaW50ICsgJ24nLCBub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUud3JpdGUoc3RyaW5naWZ5KG5vZGUudmFsdWUpLCBub2RlKTtcbiAgICB9XG4gIH0sXG4gIFJlZ0V4cExpdGVyYWw6IGZ1bmN0aW9uIFJlZ0V4cExpdGVyYWwobm9kZSwgc3RhdGUpIHtcbiAgICB2YXIgcmVnZXggPSBub2RlLnJlZ2V4O1xuICAgIHN0YXRlLndyaXRlKFwiL1wiLmNvbmNhdChyZWdleC5wYXR0ZXJuLCBcIi9cIikuY29uY2F0KHJlZ2V4LmZsYWdzKSwgbm9kZSk7XG4gIH1cbn07XG5leHBvcnRzLkdFTkVSQVRPUiA9IEdFTkVSQVRPUjtcbnZhciBFTVBUWV9PQkpFQ1QgPSB7fTtcbnZhciBiYXNlR2VuZXJhdG9yID0gR0VORVJBVE9SO1xuZXhwb3J0cy5iYXNlR2VuZXJhdG9yID0gYmFzZUdlbmVyYXRvcjtcblxudmFyIFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdGF0ZShvcHRpb25zKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN0YXRlKTtcblxuICAgIHZhciBzZXR1cCA9IG9wdGlvbnMgPT0gbnVsbCA/IEVNUFRZX09CSkVDVCA6IG9wdGlvbnM7XG4gICAgdGhpcy5vdXRwdXQgPSAnJztcblxuICAgIGlmIChzZXR1cC5vdXRwdXQgIT0gbnVsbCkge1xuICAgICAgdGhpcy5vdXRwdXQgPSBzZXR1cC5vdXRwdXQ7XG4gICAgICB0aGlzLndyaXRlID0gdGhpcy53cml0ZVRvU3RyZWFtO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm91dHB1dCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuZ2VuZXJhdG9yID0gc2V0dXAuZ2VuZXJhdG9yICE9IG51bGwgPyBzZXR1cC5nZW5lcmF0b3IgOiBHRU5FUkFUT1I7XG4gICAgdGhpcy5leHByZXNzaW9uc1ByZWNlZGVuY2UgPSBzZXR1cC5leHByZXNzaW9uc1ByZWNlZGVuY2UgIT0gbnVsbCA/IHNldHVwLmV4cHJlc3Npb25zUHJlY2VkZW5jZSA6IEVYUFJFU1NJT05TX1BSRUNFREVOQ0U7XG4gICAgdGhpcy5pbmRlbnQgPSBzZXR1cC5pbmRlbnQgIT0gbnVsbCA/IHNldHVwLmluZGVudCA6ICcgICc7XG4gICAgdGhpcy5saW5lRW5kID0gc2V0dXAubGluZUVuZCAhPSBudWxsID8gc2V0dXAubGluZUVuZCA6ICdcXG4nO1xuICAgIHRoaXMuaW5kZW50TGV2ZWwgPSBzZXR1cC5zdGFydGluZ0luZGVudExldmVsICE9IG51bGwgPyBzZXR1cC5zdGFydGluZ0luZGVudExldmVsIDogMDtcbiAgICB0aGlzLndyaXRlQ29tbWVudHMgPSBzZXR1cC5jb21tZW50cyA/IHNldHVwLmNvbW1lbnRzIDogZmFsc2U7XG5cbiAgICBpZiAoc2V0dXAuc291cmNlTWFwICE9IG51bGwpIHtcbiAgICAgIHRoaXMud3JpdGUgPSBzZXR1cC5vdXRwdXQgPT0gbnVsbCA/IHRoaXMud3JpdGVBbmRNYXAgOiB0aGlzLndyaXRlVG9TdHJlYW1BbmRNYXA7XG4gICAgICB0aGlzLnNvdXJjZU1hcCA9IHNldHVwLnNvdXJjZU1hcDtcbiAgICAgIHRoaXMubGluZSA9IDE7XG4gICAgICB0aGlzLmNvbHVtbiA9IDA7XG4gICAgICB0aGlzLmxpbmVFbmRTaXplID0gdGhpcy5saW5lRW5kLnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxO1xuICAgICAgdGhpcy5tYXBwaW5nID0ge1xuICAgICAgICBvcmlnaW5hbDogbnVsbCxcbiAgICAgICAgZ2VuZXJhdGVkOiB0aGlzLFxuICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgIHNvdXJjZTogc2V0dXAuc291cmNlTWFwLmZpbGUgfHwgc2V0dXAuc291cmNlTWFwLl9maWxlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdGF0ZSwgW3tcbiAgICBrZXk6IFwid3JpdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGUoY29kZSkge1xuICAgICAgdGhpcy5vdXRwdXQgKz0gY29kZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVUb1N0cmVhbVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZVRvU3RyZWFtKGNvZGUpIHtcbiAgICAgIHRoaXMub3V0cHV0LndyaXRlKGNvZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZUFuZE1hcFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZUFuZE1hcChjb2RlLCBub2RlKSB7XG4gICAgICB0aGlzLm91dHB1dCArPSBjb2RlO1xuICAgICAgdGhpcy5tYXAoY29kZSwgbm9kZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIndyaXRlVG9TdHJlYW1BbmRNYXBcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGVUb1N0cmVhbUFuZE1hcChjb2RlLCBub2RlKSB7XG4gICAgICB0aGlzLm91dHB1dC53cml0ZShjb2RlKTtcbiAgICAgIHRoaXMubWFwKGNvZGUsIG5vZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJtYXBcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbWFwKGNvZGUsIG5vZGUpIHtcbiAgICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBub2RlLnR5cGU7XG5cbiAgICAgICAgaWYgKHR5cGVbMF0gPT09ICdMJyAmJiB0eXBlWzJdID09PSAnbicpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbiA9IDA7XG4gICAgICAgICAgdGhpcy5saW5lKys7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUubG9jICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMubWFwcGluZztcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsID0gbm9kZS5sb2Muc3RhcnQ7XG4gICAgICAgICAgbWFwcGluZy5uYW1lID0gbm9kZS5uYW1lO1xuICAgICAgICAgIHRoaXMuc291cmNlTWFwLmFkZE1hcHBpbmcobWFwcGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZVswXSA9PT0gJ1QnICYmIHR5cGVbOF0gPT09ICdFJyB8fCB0eXBlWzBdID09PSAnTCcgJiYgdHlwZVsxXSA9PT0gJ2knICYmIHR5cGVvZiBub2RlLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhciBfbGVuZ3RoID0gY29kZS5sZW5ndGg7XG4gICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICBsaW5lID0gdGhpcy5saW5lO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjb2RlW2ldID09PSAnXFxuJykge1xuICAgICAgICAgICAgICBjb2x1bW4gPSAwO1xuICAgICAgICAgICAgICBsaW5lKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb2x1bW4rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbGVuZ3RoID0gY29kZS5sZW5ndGg7XG4gICAgICB2YXIgbGluZUVuZCA9IHRoaXMubGluZUVuZDtcblxuICAgICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHRoaXMubGluZUVuZFNpemUgPiAwICYmIChsaW5lRW5kLmxlbmd0aCA9PT0gMSA/IGNvZGVbbGVuZ3RoIC0gMV0gPT09IGxpbmVFbmQgOiBjb2RlLmVuZHNXaXRoKGxpbmVFbmQpKSkge1xuICAgICAgICAgIHRoaXMubGluZSArPSB0aGlzLmxpbmVFbmRTaXplO1xuICAgICAgICAgIHRoaXMuY29sdW1uID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbiArPSBsZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vdXRwdXQ7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN0YXRlO1xufSgpO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZShub2RlLCBvcHRpb25zKSB7XG4gIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZShvcHRpb25zKTtcbiAgc3RhdGUuZ2VuZXJhdG9yW25vZGUudHlwZV0obm9kZSwgc3RhdGUpO1xuICByZXR1cm4gc3RhdGUub3V0cHV0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3RyaW5nLmpzLm1hcCIsIlxuLyoqXG4gKiBFeHBvc2UgYEJhY2tvZmZgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gQmFja29mZjtcblxuLyoqXG4gKiBJbml0aWFsaXplIGJhY2tvZmYgdGltZXIgd2l0aCBgb3B0c2AuXG4gKlxuICogLSBgbWluYCBpbml0aWFsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIFsxMDBdXG4gKiAtIGBtYXhgIG1heCB0aW1lb3V0IFsxMDAwMF1cbiAqIC0gYGppdHRlcmAgWzBdXG4gKiAtIGBmYWN0b3JgIFsyXVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIEJhY2tvZmYob3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdGhpcy5tcyA9IG9wdHMubWluIHx8IDEwMDtcbiAgdGhpcy5tYXggPSBvcHRzLm1heCB8fCAxMDAwMDtcbiAgdGhpcy5mYWN0b3IgPSBvcHRzLmZhY3RvciB8fCAyO1xuICB0aGlzLmppdHRlciA9IG9wdHMuaml0dGVyID4gMCAmJiBvcHRzLmppdHRlciA8PSAxID8gb3B0cy5qaXR0ZXIgOiAwO1xuICB0aGlzLmF0dGVtcHRzID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGJhY2tvZmYgZHVyYXRpb24uXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5CYWNrb2ZmLnByb3RvdHlwZS5kdXJhdGlvbiA9IGZ1bmN0aW9uKCl7XG4gIHZhciBtcyA9IHRoaXMubXMgKiBNYXRoLnBvdyh0aGlzLmZhY3RvciwgdGhpcy5hdHRlbXB0cysrKTtcbiAgaWYgKHRoaXMuaml0dGVyKSB7XG4gICAgdmFyIHJhbmQgPSAgTWF0aC5yYW5kb20oKTtcbiAgICB2YXIgZGV2aWF0aW9uID0gTWF0aC5mbG9vcihyYW5kICogdGhpcy5qaXR0ZXIgKiBtcyk7XG4gICAgbXMgPSAoTWF0aC5mbG9vcihyYW5kICogMTApICYgMSkgPT0gMCAgPyBtcyAtIGRldmlhdGlvbiA6IG1zICsgZGV2aWF0aW9uO1xuICB9XG4gIHJldHVybiBNYXRoLm1pbihtcywgdGhpcy5tYXgpIHwgMDtcbn07XG5cbi8qKlxuICogUmVzZXQgdGhlIG51bWJlciBvZiBhdHRlbXB0cy5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkJhY2tvZmYucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKXtcbiAgdGhpcy5hdHRlbXB0cyA9IDA7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWluaW11bSBkdXJhdGlvblxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQmFja29mZi5wcm90b3R5cGUuc2V0TWluID0gZnVuY3Rpb24obWluKXtcbiAgdGhpcy5tcyA9IG1pbjtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXhpbXVtIGR1cmF0aW9uXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5CYWNrb2ZmLnByb3RvdHlwZS5zZXRNYXggPSBmdW5jdGlvbihtYXgpe1xuICB0aGlzLm1heCA9IG1heDtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBqaXR0ZXJcbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkJhY2tvZmYucHJvdG90eXBlLnNldEppdHRlciA9IGZ1bmN0aW9uKGppdHRlcil7XG4gIHRoaXMuaml0dGVyID0gaml0dGVyO1xufTtcblxuIiwiLypcbiAqIGJhc2U2NC1hcnJheWJ1ZmZlclxuICogaHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlclxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiBOaWtsYXMgdm9uIEhlcnR6ZW5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuKGZ1bmN0aW9uKGNoYXJzKXtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbihhcnJheWJ1ZmZlcikge1xuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSxcbiAgICBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9IFwiXCI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKz0zKSB7XG4gICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07XG4gICAgICBiYXNlNjQgKz0gY2hhcnNbKChieXRlc1tpXSAmIDMpIDw8IDQpIHwgKGJ5dGVzW2kgKyAxXSA+PiA0KV07XG4gICAgICBiYXNlNjQgKz0gY2hhcnNbKChieXRlc1tpICsgMV0gJiAxNSkgPDwgMikgfCAoYnl0ZXNbaSArIDJdID4+IDYpXTtcbiAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpICsgMl0gJiA2M107XG4gICAgfVxuXG4gICAgaWYgKChsZW4gJSAzKSA9PT0gMikge1xuICAgICAgYmFzZTY0ID0gYmFzZTY0LnN1YnN0cmluZygwLCBiYXNlNjQubGVuZ3RoIC0gMSkgKyBcIj1cIjtcbiAgICB9IGVsc2UgaWYgKGxlbiAlIDMgPT09IDEpIHtcbiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgXCI9PVwiO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlNjQ7XG4gIH07XG5cbiAgZXhwb3J0cy5kZWNvZGUgPSAgZnVuY3Rpb24oYmFzZTY0KSB7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJhc2U2NC5sZW5ndGggKiAwLjc1LFxuICAgIGxlbiA9IGJhc2U2NC5sZW5ndGgsIGksIHAgPSAwLFxuICAgIGVuY29kZWQxLCBlbmNvZGVkMiwgZW5jb2RlZDMsIGVuY29kZWQ0O1xuXG4gICAgaWYgKGJhc2U2NFtiYXNlNjQubGVuZ3RoIC0gMV0gPT09IFwiPVwiKSB7XG4gICAgICBidWZmZXJMZW5ndGgtLTtcbiAgICAgIGlmIChiYXNlNjRbYmFzZTY0Lmxlbmd0aCAtIDJdID09PSBcIj1cIikge1xuICAgICAgICBidWZmZXJMZW5ndGgtLTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYXJyYXlidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnVmZmVyTGVuZ3RoKSxcbiAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrPTQpIHtcbiAgICAgIGVuY29kZWQxID0gY2hhcnMuaW5kZXhPZihiYXNlNjRbaV0pO1xuICAgICAgZW5jb2RlZDIgPSBjaGFycy5pbmRleE9mKGJhc2U2NFtpKzFdKTtcbiAgICAgIGVuY29kZWQzID0gY2hhcnMuaW5kZXhPZihiYXNlNjRbaSsyXSk7XG4gICAgICBlbmNvZGVkNCA9IGNoYXJzLmluZGV4T2YoYmFzZTY0W2krM10pO1xuXG4gICAgICBieXRlc1twKytdID0gKGVuY29kZWQxIDw8IDIpIHwgKGVuY29kZWQyID4+IDQpO1xuICAgICAgYnl0ZXNbcCsrXSA9ICgoZW5jb2RlZDIgJiAxNSkgPDwgNCkgfCAoZW5jb2RlZDMgPj4gMik7XG4gICAgICBieXRlc1twKytdID0gKChlbmNvZGVkMyAmIDMpIDw8IDYpIHwgKGVuY29kZWQ0ICYgNjMpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheWJ1ZmZlcjtcbiAgfTtcbn0pKFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiKTtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyoqXHJcbiAqIENyZWF0ZSBhIGJsb2IgYnVpbGRlciBldmVuIHdoZW4gdmVuZG9yIHByZWZpeGVzIGV4aXN0XHJcbiAqL1xyXG5cclxudmFyIEJsb2JCdWlsZGVyID0gdHlwZW9mIEJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IEJsb2JCdWlsZGVyIDpcclxuICB0eXBlb2YgV2ViS2l0QmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gV2ViS2l0QmxvYkJ1aWxkZXIgOlxyXG4gIHR5cGVvZiBNU0Jsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IE1TQmxvYkJ1aWxkZXIgOlxyXG4gIHR5cGVvZiBNb3pCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCcgPyBNb3pCbG9iQnVpbGRlciA6IFxyXG4gIGZhbHNlO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIEJsb2IgY29uc3RydWN0b3IgaXMgc3VwcG9ydGVkXHJcbiAqL1xyXG5cclxudmFyIGJsb2JTdXBwb3J0ZWQgPSAoZnVuY3Rpb24oKSB7XHJcbiAgdHJ5IHtcclxuICAgIHZhciBhID0gbmV3IEJsb2IoWydoaSddKTtcclxuICAgIHJldHVybiBhLnNpemUgPT09IDI7XHJcbiAgfSBjYXRjaChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIEJsb2IgY29uc3RydWN0b3Igc3VwcG9ydHMgQXJyYXlCdWZmZXJWaWV3c1xyXG4gKiBGYWlscyBpbiBTYWZhcmkgNiwgc28gd2UgbmVlZCB0byBtYXAgdG8gQXJyYXlCdWZmZXJzIHRoZXJlLlxyXG4gKi9cclxuXHJcbnZhciBibG9iU3VwcG9ydHNBcnJheUJ1ZmZlclZpZXcgPSBibG9iU3VwcG9ydGVkICYmIChmdW5jdGlvbigpIHtcclxuICB0cnkge1xyXG4gICAgdmFyIGIgPSBuZXcgQmxvYihbbmV3IFVpbnQ4QXJyYXkoWzEsMl0pXSk7XHJcbiAgICByZXR1cm4gYi5zaXplID09PSAyO1xyXG4gIH0gY2F0Y2goZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufSkoKTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBCbG9iQnVpbGRlciBpcyBzdXBwb3J0ZWRcclxuICovXHJcblxyXG52YXIgYmxvYkJ1aWxkZXJTdXBwb3J0ZWQgPSBCbG9iQnVpbGRlclxyXG4gICYmIEJsb2JCdWlsZGVyLnByb3RvdHlwZS5hcHBlbmRcclxuICAmJiBCbG9iQnVpbGRlci5wcm90b3R5cGUuZ2V0QmxvYjtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBtYXBzIEFycmF5QnVmZmVyVmlld3MgdG8gQXJyYXlCdWZmZXJzXHJcbiAqIFVzZWQgYnkgQmxvYkJ1aWxkZXIgY29uc3RydWN0b3IgYW5kIG9sZCBicm93c2VycyB0aGF0IGRpZG4ndFxyXG4gKiBzdXBwb3J0IGl0IGluIHRoZSBCbG9iIGNvbnN0cnVjdG9yLlxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIG1hcEFycmF5QnVmZmVyVmlld3MoYXJ5KSB7XHJcbiAgcmV0dXJuIGFyeS5tYXAoZnVuY3Rpb24oY2h1bmspIHtcclxuICAgIGlmIChjaHVuay5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xyXG4gICAgICB2YXIgYnVmID0gY2h1bmsuYnVmZmVyO1xyXG5cclxuICAgICAgLy8gaWYgdGhpcyBpcyBhIHN1YmFycmF5LCBtYWtlIGEgY29weSBzbyB3ZSBvbmx5XHJcbiAgICAgIC8vIGluY2x1ZGUgdGhlIHN1YmFycmF5IHJlZ2lvbiBmcm9tIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlclxyXG4gICAgICBpZiAoY2h1bmsuYnl0ZUxlbmd0aCAhPT0gYnVmLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICB2YXIgY29weSA9IG5ldyBVaW50OEFycmF5KGNodW5rLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgIGNvcHkuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZiwgY2h1bmsuYnl0ZU9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aCkpO1xyXG4gICAgICAgIGJ1ZiA9IGNvcHkuYnVmZmVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYnVmO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjaHVuaztcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gQmxvYkJ1aWxkZXJDb25zdHJ1Y3RvcihhcnksIG9wdGlvbnMpIHtcclxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgdmFyIGJiID0gbmV3IEJsb2JCdWlsZGVyKCk7XHJcbiAgbWFwQXJyYXlCdWZmZXJWaWV3cyhhcnkpLmZvckVhY2goZnVuY3Rpb24ocGFydCkge1xyXG4gICAgYmIuYXBwZW5kKHBhcnQpO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gKG9wdGlvbnMudHlwZSkgPyBiYi5nZXRCbG9iKG9wdGlvbnMudHlwZSkgOiBiYi5nZXRCbG9iKCk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBCbG9iQ29uc3RydWN0b3IoYXJ5LCBvcHRpb25zKSB7XHJcbiAgcmV0dXJuIG5ldyBCbG9iKG1hcEFycmF5QnVmZmVyVmlld3MoYXJ5KSwgb3B0aW9ucyB8fCB7fSk7XHJcbn07XHJcblxyXG5pZiAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgQmxvYkJ1aWxkZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBCbG9iLnByb3RvdHlwZTtcclxuICBCbG9iQ29uc3RydWN0b3IucHJvdG90eXBlID0gQmxvYi5wcm90b3R5cGU7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCkge1xyXG4gIGlmIChibG9iU3VwcG9ydGVkKSB7XHJcbiAgICByZXR1cm4gYmxvYlN1cHBvcnRzQXJyYXlCdWZmZXJWaWV3ID8gQmxvYiA6IEJsb2JDb25zdHJ1Y3RvcjtcclxuICB9IGVsc2UgaWYgKGJsb2JCdWlsZGVyU3VwcG9ydGVkKSB7XHJcbiAgICByZXR1cm4gQmxvYkJ1aWxkZXJDb25zdHJ1Y3RvcjtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbn0pKCk7XHJcbiIsIiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG52YXIgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHsgX19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9IH1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MlxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdwYXJlbnQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAnb2Zmc2V0Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ5dGVPZmZzZXRcbiAgfVxufSlcblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgbGVuZ3RoICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgYnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbmlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAhPSBudWxsICYmXG4gICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh2YWx1ZSlcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICApXG4gIH1cblxuICB2YXIgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpXG4gIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgdmFyIGIgPSBmcm9tT2JqZWN0KHZhbHVlKVxuICBpZiAoYikgcmV0dXJuIGJcblxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvUHJpbWl0aXZlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFxuICAgICAgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgnc3RyaW5nJyksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aFxuICAgIClcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5CdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG5CdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIHZhciBidWZcbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIGJ1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuKVxuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBidWZcbiAgICB9XG5cbiAgICBvYmouY29weShidWYsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gYnVmXG4gIH1cblxuICBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKVxuICAgIH1cbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopXG4gIH1cblxuICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIEFycmF5LmlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IEtfTUFYX0xFTkdUSGAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmXG4gICAgYiAhPT0gQnVmZmVyLnByb3RvdHlwZSAvLyBzbyBCdWZmZXIuaXNCdWZmZXIoQnVmZmVyLnByb3RvdHlwZSkgd2lsbCBiZSBmYWxzZVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYSwgVWludDhBcnJheSkpIGEgPSBCdWZmZXIuZnJvbShhLCBhLm9mZnNldCwgYS5ieXRlTGVuZ3RoKVxuICBpZiAoaXNJbnN0YW5jZShiLCBVaW50OEFycmF5KSkgYiA9IEJ1ZmZlci5mcm9tKGIsIGIub2Zmc2V0LCBiLmJ5dGVMZW5ndGgpXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknXG4gICAgKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkge1xuICAgICAgYnVmID0gQnVmZmVyLmZyb20oYnVmKVxuICAgIH1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZ1xuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyAoYnl0ZXNbaSArIDFdICogMjU2KSlcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2UgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoKGVuY29kaW5nID09PSAndXRmOCcgJiYgY29kZSA8IDEyOCkgfHxcbiAgICAgICAgICBlbmNvZGluZyA9PT0gJ2xhdGluMScpIHtcbiAgICAgICAgLy8gRmFzdCBwYXRoOiBJZiBgdmFsYCBmaXRzIGludG8gYSBzaW5nbGUgYnl0ZSwgdXNlIHRoYXQgbnVtZXJpYyB2YWx1ZS5cbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyB2YWwgK1xuICAgICAgICAnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJylcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSB0YWtlcyBlcXVhbCBzaWducyBhcyBlbmQgb2YgdGhlIEJhc2U2NCBlbmNvZGluZ1xuICBzdHIgPSBzdHIuc3BsaXQoJz0nKVswXVxuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbi8vIEFycmF5QnVmZmVyIG9yIFVpbnQ4QXJyYXkgb2JqZWN0cyBmcm9tIG90aGVyIGNvbnRleHRzIChpLmUuIGlmcmFtZXMpIGRvIG5vdCBwYXNzXG4vLyB0aGUgYGluc3RhbmNlb2ZgIGNoZWNrIGJ1dCB0aGV5IHNob3VsZCBiZSB0cmVhdGVkIGFzIG9mIHRoYXQgdHlwZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE2NlxuZnVuY3Rpb24gaXNJbnN0YW5jZSAob2JqLCB0eXBlKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiB0eXBlIHx8XG4gICAgKG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lICE9IG51bGwgJiZcbiAgICAgIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWUpXG59XG5mdW5jdGlvbiBudW1iZXJJc05hTiAob2JqKSB7XG4gIC8vIEZvciBJRTExIHN1cHBvcnRcbiAgcmV0dXJuIG9iaiAhPT0gb2JqIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFwcGx5ID0gR2V0SW50cmluc2ljKCclRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JScpO1xudmFyICRjYWxsID0gR2V0SW50cmluc2ljKCclRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwlJyk7XG52YXIgJHJlZmxlY3RBcHBseSA9IEdldEludHJpbnNpYygnJVJlZmxlY3QuYXBwbHklJywgdHJ1ZSkgfHwgYmluZC5jYWxsKCRjYWxsLCAkYXBwbHkpO1xuXG52YXIgJGdPUEQgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJScsIHRydWUpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IEdldEludHJpbnNpYygnJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUnLCB0cnVlKTtcbnZhciAkbWF4ID0gR2V0SW50cmluc2ljKCclTWF0aC5tYXglJyk7XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0dHJ5IHtcblx0XHQkZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyB2YWx1ZTogMSB9KTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGRlZmluZVByb3BlcnR5XG5cdFx0JGRlZmluZVByb3BlcnR5ID0gbnVsbDtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCaW5kKG9yaWdpbmFsRnVuY3Rpb24pIHtcblx0dmFyIGZ1bmMgPSAkcmVmbGVjdEFwcGx5KGJpbmQsICRjYWxsLCBhcmd1bWVudHMpO1xuXHRpZiAoJGdPUEQgJiYgJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0dmFyIGRlc2MgPSAkZ09QRChmdW5jLCAnbGVuZ3RoJyk7XG5cdFx0aWYgKGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0XHQvLyBvcmlnaW5hbCBsZW5ndGgsIHBsdXMgdGhlIHJlY2VpdmVyLCBtaW51cyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgKGFmdGVyIHRoZSByZWNlaXZlcilcblx0XHRcdCRkZWZpbmVQcm9wZXJ0eShcblx0XHRcdFx0ZnVuYyxcblx0XHRcdFx0J2xlbmd0aCcsXG5cdFx0XHRcdHsgdmFsdWU6IDEgKyAkbWF4KDAsIG9yaWdpbmFsRnVuY3Rpb24ubGVuZ3RoIC0gKGFyZ3VtZW50cy5sZW5ndGggLSAxKSkgfVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZ1bmM7XG59O1xuXG52YXIgYXBwbHlCaW5kID0gZnVuY3Rpb24gYXBwbHlCaW5kKCkge1xuXHRyZXR1cm4gJHJlZmxlY3RBcHBseShiaW5kLCAkYXBwbHksIGFyZ3VtZW50cyk7XG59O1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdCRkZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ2FwcGx5JywgeyB2YWx1ZTogYXBwbHlCaW5kIH0pO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMuYXBwbHkgPSBhcHBseUJpbmQ7XG59XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5cbnZhciBzdG9yYWdlID0gcmVxdWlyZSgnLi9saWIvc3RvcmFnZScpXG52YXIgbG9nZ2VyID0gcmVxdWlyZSgnLi9saWIvbG9nZ2VyJylcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJy4vbGliL2RlYnVnJylcbnZhciBjb3B5ID0gcmVxdWlyZSgnLi9saWIvY29weScpXG52YXIgaGVscCA9IHJlcXVpcmUoJy4vbGliL2hlbHAnKVxudmFyIHBlcmYgPSByZXF1aXJlKCcuL2xpYi9wZXJmJylcbnZhciBsb2cgPSByZXF1aXJlKCcuL2xpYi9sb2cnKVxudmFyIGdldEFsbFJvdXRlcyA9IHJlcXVpcmUoJ3dheWZhcmVyL2dldC1hbGwtcm91dGVzJylcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvc2VcblxuZnVuY3Rpb24gZXhwb3NlIChvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIHN0b3JlLnN0b3JlTmFtZSA9ICdjaG9vLWRldnRvb2xzJ1xuICByZXR1cm4gc3RvcmVcbiAgZnVuY3Rpb24gc3RvcmUgKHN0YXRlLCBlbWl0dGVyLCBhcHApIHtcbiAgICB2YXIgbG9jYWxFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxvZ2dlcihzdGF0ZSwgZW1pdHRlciwgb3B0cylcbiAgICB9XG5cbiAgICBlbWl0dGVyLm9uKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm5cbiAgICAgIHdpbmRvdy5jaG9vID0ge31cblxuICAgICAgd2luZG93LmNob28uc3RhdGUgPSBzdGF0ZVxuICAgICAgd2luZG93LmNob28uZW1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZW1pdHRlci5lbWl0LmFwcGx5KGVtaXR0ZXIsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5jaG9vLm9uID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgZW1pdHRlci5vbihldmVudE5hbWUsIGxpc3RlbmVyKVxuICAgICAgfVxuXG4gICAgICBkZWJ1ZyhzdGF0ZSwgZW1pdHRlciwgYXBwLCBsb2NhbEVtaXR0ZXIpXG5cbiAgICAgIGxvZyhzdGF0ZSwgZW1pdHRlciwgYXBwLCBsb2NhbEVtaXR0ZXIpXG4gICAgICBwZXJmKHN0YXRlLCBlbWl0dGVyLCBhcHAsIGxvY2FsRW1pdHRlcilcbiAgICAgIHdpbmRvdy5jaG9vLmNvcHkgPSBjb3B5XG4gICAgICBpZiAoYXBwLnJvdXRlciAmJiBhcHAucm91dGVyLnJvdXRlcikge1xuICAgICAgICB3aW5kb3cuY2hvby5yb3V0ZXMgPSBPYmplY3Qua2V5cyhnZXRBbGxSb3V0ZXMoYXBwLnJvdXRlci5yb3V0ZXIpKVxuICAgICAgfVxuXG4gICAgICBzdG9yYWdlKClcbiAgICAgIGhlbHAoKVxuICAgIH0pXG4gIH1cbn1cbiIsInZhciBzdGF0ZUNvcHkgPSByZXF1aXJlKCdzdGF0ZS1jb3B5JylcbnZhciBwbHVjayA9IHJlcXVpcmUoJ3BsdWNrZXInKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlcblxuZnVuY3Rpb24gY29weSAoc3RhdGUpIHtcbiAgdmFyIGlzU3RhdGVTdHJpbmcgPSBzdGF0ZSAmJiB0eXBlb2Ygc3RhdGUgPT09ICdzdHJpbmcnXG4gIHZhciBpc0Nob29QYXRoID0gaXNTdGF0ZVN0cmluZyAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHN0YXRlLmluZGV4T2YoJ3N0YXRlLicpID09PSAwXG5cbiAgaWYgKCFzdGF0ZSB8fCB0eXBlb2Ygc3RhdGUgPT09ICdmdW5jdGlvbicpIHN0YXRlID0gd2luZG93LmNob28uc3RhdGVcbiAgaWYgKGlzQ2hvb1BhdGgpIFtdLnB1c2guY2FsbChhcmd1bWVudHMsIHsgc3RhdGU6IHdpbmRvdy5jaG9vLnN0YXRlIH0pXG5cbiAgc3RhdGVDb3B5KGlzU3RhdGVTdHJpbmcgPyBwbHVjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc3RhdGUpXG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgb25DaGFuZ2UgPSByZXF1aXJlKCdvYmplY3QtY2hhbmdlLWNhbGxzaXRlJylcbnZhciBuYW5vbG9nZ2VyID0gcmVxdWlyZSgnbmFub2xvZ2dlcicpXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxudmFyIGVuYWJsZWRNZXNzYWdlID0gJ0RlYnVnZ2luZyBlbmFibGVkLiBUbyBkaXNhYmxlIHJ1bjogYGNob28uZGVidWcgPSBmYWxzZWAnXG52YXIgZGlzYWJsZWRNZXNzYWdlID0gJ0RlYnVnZ2luZyBkaXNhYmxlZC4gV2UgaG9wZSBpdCB3YXMgaGVscGZ1bCEg8J+ZjCdcblxubW9kdWxlLmV4cG9ydHMgPSBkZWJ1Z1xuXG5mdW5jdGlvbiBkZWJ1ZyAoc3RhdGUsIGVtaXR0ZXIsIGFwcCwgbG9jYWxFbWl0dGVyKSB7XG4gIHZhciBsb2cgPSBuYW5vbG9nZ2VyKCdjaG9vLWRldnRvb2xzJylcbiAgdmFyIGVuYWJsZWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmxvZ0xldmVsID09PSAnZGVidWcnXG4gIGlmIChlbmFibGVkKSBsb2cuaW5mbyhlbmFibGVkTWVzc2FnZSlcblxuICBzdGF0ZSA9IG9uQ2hhbmdlKHN0YXRlLCBmdW5jdGlvbiAoYXR0ciwgdmFsdWUsIGNhbGxzaXRlKSB7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm5cbiAgICBjYWxsc2l0ZSA9IGNhbGxzaXRlLnNwbGl0KCdcXG4nKVsxXS5yZXBsYWNlKC9eICsvLCAnJylcbiAgICBsb2cuaW5mbygnc3RhdGUuJyArIGF0dHIsIHZhbHVlLCAnXFxuJyArIGNhbGxzaXRlKVxuICB9KVxuXG4gIGFwcC5zdGF0ZSA9IHN0YXRlXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5jaG9vLCAnZGVidWcnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmxvZ0xldmVsID0gJ2RlYnVnJ1xuICAgICAgbG9jYWxFbWl0dGVyLmVtaXQoJ2RlYnVnJywgdHJ1ZSlcbiAgICAgIGVuYWJsZWQgPSB0cnVlXG4gICAgICByZXR1cm4gZW5hYmxlZE1lc3NhZ2VcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgIGFzc2VydC5lcXVhbCh0eXBlb2YgYm9vbCwgJ2Jvb2xlYW4nLCAnY2hvby1kZXZ0b29scy5kZWJ1ZzogYm9vbCBzaG91bGQgYmUgdHlwZSBib29sZWFuJylcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UubG9nTGV2ZWwgPSBib29sID8gJ2RlYnVnJyA6ICdpbmZvJ1xuICAgICAgZW5hYmxlZCA9IGJvb2xcbiAgICAgIGxvY2FsRW1pdHRlci5lbWl0KCdkZWJ1ZycsIGVuYWJsZWQpXG4gICAgICBpZiAoZW5hYmxlZCkgbG9nLmluZm8oZW5hYmxlZE1lc3NhZ2UpXG4gICAgICBlbHNlIGxvZy5pbmZvKGRpc2FibGVkTWVzc2FnZSlcbiAgICB9XG4gIH0pXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGhlbHBcblxuZnVuY3Rpb24gaGVscCAoKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuY2hvbywgJ2hlbHAnLCB7XG4gICAgZ2V0OiBnZXQsXG4gICAgc2V0OiBub29wXG4gIH0pXG5cbiAgZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHByaW50KCdjb3B5JywgJ1NlcmlhbGl6ZSB0aGUgY3VycmVudCBzdGF0ZSB0byB0aGUgY2xpcGJvYXJkLicpXG4gICAgICBwcmludCgnZGVidWcnLCAnRW5hYmxlIENob28gZGVidWcgbW9kZS4nKVxuICAgICAgcHJpbnQoJ2VtaXQnLCAnRW1pdCBhbiBldmVudCBpbiB0aGUgQ2hvbyBlbWl0dGVyLicpXG4gICAgICBwcmludCgnaGVscCcsICdQcmludCB1c2FnZSBpbmZvcm1hdGlvbi4nKVxuICAgICAgcHJpbnQoJ2xvZycsICdQcmludCB0aGUgbGFzdCAxNTAgZXZlbnRzIGVtaXR0ZWQuJylcbiAgICAgIHByaW50KCdvbicsICdMaXN0ZW4gZm9yIGFuIGV2ZW50IGluIHRoZSBDaG9vIGVtaXR0ZXIuJylcbiAgICAgIHByaW50KCdvbmNlJywgJ0xpc3RlbiBmb3IgYW4gZXZlbnQgb25jZSBpbiB0aGUgQ2hvbyBlbWl0dGVyLicpXG4gICAgICBwcmludCgncGVyZicsICdQcmludCBvdXQgcGVyZm9ybWFuY2UgbWV0cmljcycpXG4gICAgICBwcmludCgnc3RhdGUnLCAnUHJpbnQgdGhlIENob28gc3RhdGUgb2JqZWN0LicpXG4gICAgICBwcmludCgnc3RvcmFnZScsICdQcmludCBicm93c2VyIHN0b3JhZ2UgaW5mb3JtYXRpb24uJylcbiAgICB9LCAwKVxuICAgIHJldHVybiAnQ2hvbyBjb21tYW5kIG92ZXJ2aWV3J1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50IChjbWQsIGRlc2MpIHtcbiAgdmFyIGNvbG9yID0gJyNjYzk5Y2MnXG4gIGNvbnNvbGUubG9nKCcgICVjY2hvby4nICsgY21kLCAnY29sb3I6ICcgKyBjb2xvciwgJ+KAlCAnICsgZGVzYylcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuIiwidmFyIHJlbW92ZUl0ZW1zID0gcmVxdWlyZSgncmVtb3ZlLWFycmF5LWl0ZW1zJylcbnZhciBzY2hlZHVsZXIgPSByZXF1aXJlKCduYW5vc2NoZWR1bGVyJykoKVxudmFyIG5hbm9sb2dnZXIgPSByZXF1aXJlKCduYW5vbG9nZ2VyJylcbnZhciBfbG9nID0gbmFub2xvZ2dlcignY2hvbycpXG52YXIgY2xvbmUgPSByZXF1aXJlKCdjbG9uZScpXG5cbnZhciBNQVhfSElTVE9SWV9MRU5HVEggPSAxNTAgLy8gSG93IG1hbnkgaXRlbXMgd2Ugc2hvdWxkIGtlZXAgYXJvdW5kXG5cbm1vZHVsZS5leHBvcnRzID0gbG9nXG5cbmZ1bmN0aW9uIGxvZyAoc3RhdGUsIGVtaXR0ZXIsIGFwcCwgbG9jYWxFbWl0dGVyKSB7XG4gIHZhciBzaG91bGREZWJ1ZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UubG9nTGV2ZWwgPT09ICdkZWJ1ZydcbiAgdmFyIGhpc3RvcnkgPSBbXVxuICB2YXIgaSA9IDBcbiAgdmFyIHNob3VsZFdhcm4gPSB0cnVlXG5cbiAgbG9jYWxFbWl0dGVyLm9uKCdkZWJ1ZycsIGZ1bmN0aW9uIChib29sKSB7XG4gICAgc2hvdWxkRGVidWcgPSBib29sXG4gIH0pXG5cbiAgd2luZG93LmNob28uX2hpc3RvcnkgPSBoaXN0b3J5XG4gIHdpbmRvdy5jaG9vLmhpc3RvcnkgPSBzaG93SGlzdG9yeVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuY2hvbywgJ2xvZycsIHsgZ2V0OiBzaG93SGlzdG9yeSwgc2V0OiBub29wIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuY2hvbywgJ2hpc3RvcnknLCB7IGdldDogc2hvd0hpc3RvcnksIHNldDogbm9vcCB9KVxuXG4gIGVtaXR0ZXIub24oJyonLCBmdW5jdGlvbiAobmFtZSwgZGF0YSkge1xuICAgIGkgKz0gMVxuICAgIHZhciBlbnRyeSA9IG5ldyBFdmVudChuYW1lLCBkYXRhLCBzdGF0ZSlcbiAgICBoaXN0b3J5LnB1c2goZW50cnkpXG4gICAgc2NoZWR1bGVyLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGhpc3RvcnkubGVuZ3RoXG4gICAgICBpZiAobGVuZ3RoID4gTUFYX0hJU1RPUllfTEVOR1RIKSB7XG4gICAgICAgIHJlbW92ZUl0ZW1zKGhpc3RvcnksIDAsIGxlbmd0aCAtIE1BWF9ISVNUT1JZX0xFTkdUSClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIGZ1bmN0aW9uIHNob3dIaXN0b3J5ICgpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnNvbGUudGFibGUoaGlzdG9yeSlcbiAgICB9LCAwKVxuICAgIHZhciBldmVudHMgPSBpID09PSAxID8gJ2V2ZW50JyA6ICdldmVudHMnXG4gICAgdmFyIG1zZyA9IGkgKyAnICcgKyBldmVudHMgKyAnIHJlY29yZGVkLCBzaG93aW5nIHRoZSBsYXN0ICcgKyBNQVhfSElTVE9SWV9MRU5HVEggKyAnLidcbiAgICBpZiAoc2hvdWxkRGVidWcgPT09IGZhbHNlKSB7XG4gICAgICBtc2cgKz0gJyBFbmFibGUgc3RhdGUgY2FwdHVyZSBieSBjYWxsaW5nIGBjaG9vLmRlYnVnYC4nXG4gICAgfSBlbHNlIHtcbiAgICAgIG1zZyArPSAnIERpc2FibGUgc3RhdGUgY2FwdHVyZSBieSBjYWxsaW5nIGBjaG9vLmRlYnVnID0gZmFsc2VgLidcbiAgICB9XG4gICAgcmV0dXJuIG1zZ1xuICB9XG5cbiAgZnVuY3Rpb24gRXZlbnQgKG5hbWUsIGRhdGEsIHN0YXRlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuZGF0YSA9IGRhdGEgPT09IHVuZGVmaW5lZCA/ICc8bm8gZGF0YT4nIDogZGF0YVxuICAgIHRoaXMuc3RhdGUgPSBzaG91bGREZWJ1Z1xuICAgICAgPyB0cnlDbG9uZShzdGF0ZSlcbiAgICAgIDogJzxkaXNhYmxlZD4nXG4gIH1cblxuICBmdW5jdGlvbiB0cnlDbG9uZSAoc3RhdGUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIF9zdGF0ZSA9IGNsb25lKHN0YXRlKVxuICAgICAgaWYgKCFzaG91bGRXYXJuKSBzaG91bGRXYXJuID0gdHJ1ZVxuICAgICAgcmV0dXJuIF9zdGF0ZVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoc2hvdWxkV2Fybikge1xuICAgICAgICBfbG9nLndhcm4oJ0NvdWxkIG5vdCBjbG9uZSB5b3VyIGFwcCBzdGF0ZS4gTWFrZSBzdXJlIHRvIGhhdmUgYSBzZXJpYWxpemFibGUgc3RhdGUgc28gaXQgY2FuIGJlIGNsb25lZCcpXG4gICAgICAgIHNob3VsZFdhcm4gPSBmYWxzZVxuICAgICAgfVxuICAgICAgcmV0dXJuICc8dW5zZXJpYWxpemFibGU+J1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG4iLCJ2YXIgc2NoZWR1bGVyID0gcmVxdWlyZSgnbmFub3NjaGVkdWxlcicpKClcbnZhciBuYW5vbG9nZ2VyID0gcmVxdWlyZSgnbmFub2xvZ2dlcicpXG52YXIgSG9va3MgPSByZXF1aXJlKCdjaG9vLWhvb2tzJylcblxubW9kdWxlLmV4cG9ydHMgPSBsb2dnZXJcblxuZnVuY3Rpb24gbG9nZ2VyIChzdGF0ZSwgZW1pdHRlciwgb3B0cykge1xuICB2YXIgaW5pdGlhbFJlbmRlciA9IHRydWVcbiAgdmFyIGhvb2tzID0gSG9va3MoZW1pdHRlcilcbiAgdmFyIGxvZyA9IG5hbm9sb2dnZXIoJ2Nob28nKVxuXG4gIGhvb2tzLm9uKCdsb2c6ZGVidWcnLCBsb2dnZXIoJ2RlYnVnJykpXG4gIGhvb2tzLm9uKCdsb2c6aW5mbycsIGxvZ2dlcignaW5mbycpKVxuICBob29rcy5vbignbG9nOndhcm4nLCBsb2dnZXIoJ3dhcm4nKSlcbiAgaG9va3Mub24oJ2xvZzplcnJvcicsIGxvZ2dlcignZXJyb3InKSlcbiAgaG9va3Mub24oJ2xvZzpmYXRhbCcsIGxvZ2dlcignZmF0YWwnKSlcblxuICBob29rcy5vbignZXZlbnQnLCBmdW5jdGlvbiAoZXZlbnROYW1lLCBkYXRhLCB0aW1pbmcpIHtcbiAgICBpZiAob3B0cy5maWx0ZXIgJiYgIW9wdHMuZmlsdGVyKGV2ZW50TmFtZSwgZGF0YSwgdGltaW5nKSkgcmV0dXJuXG5cbiAgICBpZiAodGltaW5nKSB7XG4gICAgICB2YXIgZHVyYXRpb24gPSB0aW1pbmcuZHVyYXRpb24udG9GaXhlZCgpXG4gICAgICB2YXIgbGV2ZWwgPSBkdXJhdGlvbiA8IDUwID8gJ2luZm8nIDogJ3dhcm4nXG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSBsb2dnZXIobGV2ZWwpKGV2ZW50TmFtZSwgZGF0YSwgZHVyYXRpb24gKyAnbXMnKVxuICAgICAgZWxzZSBsb2dnZXIobGV2ZWwpKGV2ZW50TmFtZSwgZHVyYXRpb24gKyAnbXMnKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSBsb2dnZXIoJ2luZm8nKShldmVudE5hbWUsIGRhdGEpXG4gICAgICBlbHNlIGxvZ2dlcignaW5mbycpKGV2ZW50TmFtZSlcbiAgICB9XG4gIH0pXG5cbiAgaG9va3Mub24oJ3VuaGFuZGxlZCcsIGZ1bmN0aW9uIChldmVudE5hbWUsIGRhdGEpIHtcbiAgICBsb2dnZXIoJ2Vycm9yJykoJ05vIGxpc3RlbmVycyBmb3IgJyArIGV2ZW50TmFtZSlcbiAgfSlcblxuICBob29rcy5vbignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uICh0aW1pbmcpIHtcbiAgICBpZiAoIXRpbWluZykgcmV0dXJuIGxvZ2dlcignaW5mbycpKCdET01Db250ZW50TG9hZGVkJylcbiAgICB2YXIgbGV2ZWwgPSB0aW1pbmcuaW50ZXJhY3RpdmUgPCAxMDAwID8gJ2luZm8nIDogJ3dhcm4nXG4gICAgbG9nZ2VyKGxldmVsKSgnRE9NQ29udGVudExvYWRlZCcsIHRpbWluZy5pbnRlcmFjdGl2ZSArICdtcyB0byBpbnRlcmFjdGl2ZScpXG4gIH0pXG5cbiAgaG9va3Mub24oJ3JlbmRlcicsIGZ1bmN0aW9uICh0aW1pbmdzKSB7XG4gICAgaWYgKCF0aW1pbmdzIHx8ICF0aW1pbmdzLnJlbmRlcikgcmV0dXJuIGxvZ2dlcignaW5mbycpKCdyZW5kZXInKVxuICAgIHZhciBkdXJhdGlvbiA9IHRpbWluZ3MucmVuZGVyLmR1cmF0aW9uLnRvRml4ZWQoKVxuICAgIHZhciBtc2cgPSAncmVuZGVyJ1xuXG4gICAgaWYgKGluaXRpYWxSZW5kZXIpIHtcbiAgICAgIGluaXRpYWxSZW5kZXIgPSBmYWxzZVxuICAgICAgbXNnID0gJ2luaXRpYWwgJyArIG1zZ1xuICAgIH1cblxuICAgIC8vIGVhY2ggZnJhbWUgaGFzIDEwbXMgYXZhaWxhYmxlIGZvciB1c2VybGFuZCBzdHVmZlxuICAgIHZhciBmcHMgPSBNYXRoLm1pbigoNjAwIC8gZHVyYXRpb24pLnRvRml4ZWQoKSwgNjApXG5cbiAgICBpZiAoZnBzID09PSA2MCkge1xuICAgICAgbG9nZ2VyKCdpbmZvJykobXNnLCBmcHMgKyAnZnBzJywgZHVyYXRpb24gKyAnbXMnKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdGltZXMgPSB7XG4gICAgICAgIHJlbmRlcjogdGltaW5ncy5yZW5kZXIuZHVyYXRpb24udG9GaXhlZCgpICsgJ21zJ1xuICAgICAgfVxuICAgICAgaWYgKHRpbWluZ3MubW9ycGgpIHRpbWVzLm1vcnBoID0gdGltaW5ncy5tb3JwaC5kdXJhdGlvbi50b0ZpeGVkKCkgKyAnbXMnXG4gICAgICBsb2dnZXIoJ3dhcm4nKShtc2csIGZwcyArICdmcHMnLCBkdXJhdGlvbiArICdtcycsIHRpbWVzKVxuICAgIH1cbiAgfSlcblxuICBob29rcy5vbigncmVzb3VyY2UtdGltaW5nLWJ1ZmZlci1mdWxsJywgZnVuY3Rpb24gKCkge1xuICAgIGxvZ2dlcignZXJyb3InKShcIlRoZSBicm93c2VyJ3MgUmVzb3VyY2UgUmVzb3VyY2UgdGltaW5nIGJ1ZmZlciBpcyBmdWxsLiBDYW5ub3Qgc3RvcmUgYW55IG1vcmUgdGltaW5nIGluZm9ybWF0aW9uXCIpXG4gIH0pXG5cbiAgaG9va3Muc3RhcnQoKVxuXG4gIGZ1bmN0aW9uIGxvZ2dlciAobGV2ZWwpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXVxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKVxuICAgICAgfVxuICAgICAgc2NoZWR1bGVyLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICBsb2dbbGV2ZWxdLmFwcGx5KGxvZywgYXJncylcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJ2YXIgb25QZXJmb3JtYW5jZSA9IHJlcXVpcmUoJ29uLXBlcmZvcm1hbmNlJylcblxudmFyIEJBUiA9ICfilognXG5cbm1vZHVsZS5leHBvcnRzID0gcGVyZlxuXG5mdW5jdGlvbiBwZXJmIChzdGF0ZSwgZW1pdHRlciwgYXBwLCBsb2NhbEVtaXR0ZXIpIHtcbiAgdmFyIHN0YXRzID0ge31cblxuICB3aW5kb3cuY2hvby5wZXJmID0ge31cblxuICAvLyBQcmludCBhbGwgZXZlbnRzXG4gIHZhciBhbGwgPSBuZXcgUGVyZihzdGF0cywgJ2FsbCcpXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuY2hvby5wZXJmLCAnYWxsJywge1xuICAgIGdldDogYWxsLmdldC5iaW5kKGFsbCksXG4gICAgc2V0OiBub29wXG4gIH0pXG5cbiAgLy8gUHJpbnQgb25seSBDaG9vIGNvcmUgZXZlbnRzXG4gIHZhciBjb3JlID0gbmV3IFBlcmYoc3RhdHMsICdjb3JlJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gL15jaG9vLy50ZXN0KG5hbWUpXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuY2hvby5wZXJmLCAnY29yZScsIHtcbiAgICBnZXQ6IGNvcmUuZ2V0LmJpbmQoY29yZSksXG4gICAgc2V0OiBub29wXG4gIH0pXG5cbiAgLy8gUHJpbnQgY29tcG9uZW50IGRhdGFcbiAgdmFyIGNvbXBvbmVudHMgPSBuZXcgUGVyZihzdGF0cywgJ2NvbXBvbmVudHMnLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiAhL15jaG9vLy50ZXN0KG5hbWUpICYmICEvXmJhbmthaS8udGVzdChuYW1lKVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmNob28ucGVyZiwgJ2NvbXBvbmVudHMnLCB7XG4gICAgZ2V0OiBjb21wb25lbnRzLmdldC5iaW5kKGNvbXBvbmVudHMpLFxuICAgIHNldDogbm9vcFxuICB9KVxuXG4gIC8vIFByaW50IGNob28gdXNlcmxhbmQgZXZlbnRzIChldmVudCBlbWl0dGVyKVxuICB2YXIgZXZlbnRzID0gbmV3IFBlcmYoc3RhdHMsICdldmVudHMnLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiAvXmNob29cXC5lbWl0Ly50ZXN0KG5hbWUpXG4gIH0sIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXmNob29cXC5lbWl0XFwoJy8sICcnKS5yZXBsYWNlKC8nXFwpJC8sICcnKVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmNob28ucGVyZiwgJ2V2ZW50cycsIHtcbiAgICBnZXQ6IGV2ZW50cy5nZXQuYmluZChldmVudHMpLFxuICAgIHNldDogbm9vcFxuICB9KVxuXG4gIG9uUGVyZm9ybWFuY2UoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgaWYgKGVudHJ5LmVudHJ5VHlwZSAhPT0gJ21lYXN1cmUnKSByZXR1cm5cbiAgICB2YXIgbmFtZSA9IGVudHJ5Lm5hbWUucmVwbGFjZSgvIC4qJC8sICcnKVxuXG4gICAgaWYgKCFzdGF0c1tuYW1lXSkge1xuICAgICAgc3RhdHNbbmFtZV0gPSB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGNvdW50OiAwLFxuICAgICAgICBlbnRyaWVzOiBbXVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzdGF0ID0gc3RhdHNbbmFtZV1cbiAgICBzdGF0LmNvdW50ICs9IDFcbiAgICBzdGF0LmVudHJpZXMucHVzaChlbnRyeS5kdXJhdGlvbilcbiAgfSlcbn1cblxuLy8gQ3JlYXRlIGEgbmV3IFBlcmYgaW5zdGFuY2UgYnkgcGFzc2luZyBpdCBhIGZpbHRlclxuZnVuY3Rpb24gUGVyZiAoc3RhdHMsIG5hbWUsIGZpbHRlciwgcmVuYW1lKSB7XG4gIHRoaXMuc3RhdHMgPSBzdGF0c1xuICB0aGlzLm5hbWUgPSBuYW1lXG4gIHRoaXMuZmlsdGVyID0gZmlsdGVyIHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWUgfVxuICB0aGlzLnJlbmFtZSA9IHJlbmFtZSB8fCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbmFtZSB9XG59XG5cbi8vIENvbXB1dGUgYSB0YWJsZSBvZiBwZXJmb3JtYW5jZSBlbnRyaWVzIGJhc2VkIG9uIGEgZmlsdGVyXG5QZXJmLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBmaWx0ZXJlZCA9IE9iamVjdC5rZXlzKHRoaXMuc3RhdHMpLmZpbHRlcih0aGlzLmZpbHRlcilcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgdmFyIG1heFRpbWUgPSAwXG4gIHZhciBtYXhNZWRpYW4gPSAwXG4gIHZhciBmbXQgPSBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdGF0ID0gc2VsZi5zdGF0c1trZXldXG4gICAgdmFyIHRvdGFsVGltZSA9IE51bWJlcihzdGF0LmVudHJpZXMucmVkdWNlKGZ1bmN0aW9uICh0aW1lLCBlbnRyeSkge1xuICAgICAgcmV0dXJuIHRpbWUgKyBlbnRyeVxuICAgIH0sIDApLnRvRml4ZWQoMikpXG4gICAgaWYgKHRvdGFsVGltZSA+IG1heFRpbWUpIG1heFRpbWUgPSB0b3RhbFRpbWVcblxuICAgIHZhciBtZWRpYW4gPSBnZXRNZWRpYW4oc3RhdC5lbnRyaWVzKVxuICAgIGlmIChtZWRpYW4gPiBtYXhNZWRpYW4pIG1heE1lZGlhbiA9IG1lZGlhblxuXG4gICAgdmFyIG5hbWUgPSBzZWxmLnJlbmFtZShzdGF0Lm5hbWUpXG4gICAgcmV0dXJuIG5ldyBQZXJmRW50cnkobmFtZSwgdG90YWxUaW1lLCBtZWRpYW4sIHN0YXQuY291bnQpXG4gIH0pXG5cbiAgdmFyIGJhckxlbmd0aCA9IDEwXG4gIGZtdC5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIHZhciB0b3RhbFRpbWUgPSBlbnRyeVsnVG90YWwgVGltZSAobXMpJ11cbiAgICB2YXIgbWVkaWFuID0gZW50cnlbJ01lZGlhbiAobXMpJ11cbiAgICBlbnRyeVsnICddID0gY3JlYXRlQmFyKHRvdGFsVGltZSAvIG1heFRpbWUgKiAxMDAgLyBiYXJMZW5ndGgpXG4gICAgZW50cnlbJyAgJ10gPSBjcmVhdGVCYXIobWVkaWFuIC8gbWF4TWVkaWFuICogMTAwIC8gYmFyTGVuZ3RoKVxuICB9KVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUJhciAobGVuKSB7XG4gICAgdmFyIHN0ciA9ICcnXG4gICAgZm9yICh2YXIgaSA9IDAsIG1heCA9IE1hdGgucm91bmQobGVuKTsgaSA8IG1heDsgaSsrKSB7XG4gICAgICBzdHIgKz0gQkFSXG4gICAgfVxuICAgIHJldHVybiBzdHJcbiAgfVxuXG4gIHZhciByZXMgPSBmbXQuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiWydUb3RhbCBUaW1lIChtcyknXSAtIGFbJ1RvdGFsIFRpbWUgKG1zKSddXG4gIH0pXG4gIGNvbnNvbGUudGFibGUocmVzKVxuICByZXR1cm4gXCJTaG93aW5nIHBlcmZvcm1hbmNlIGV2ZW50cyBmb3IgJ1wiICsgdGhpcy5uYW1lICsgXCInXCJcbn1cblxuLy8gQW4gZW50cnkgZm9yIHRoZSBwZXJmb3JtYW5jZSB0aW1lbGluZS5cbmZ1bmN0aW9uIFBlcmZFbnRyeSAobmFtZSwgdG90YWxUaW1lLCBtZWRpYW4sIGNvdW50KSB7XG4gIHRoaXMuTmFtZSA9IG5hbWVcbiAgdGhpc1snVG90YWwgVGltZSAobXMpJ10gPSB0b3RhbFRpbWVcbiAgdGhpc1snICddID0gMFxuICB0aGlzWydNZWRpYW4gKG1zKSddID0gbWVkaWFuXG4gIHRoaXNbJyAgJ10gPSAwXG4gIHRoaXNbJ1RvdGFsIENvdW50J10gPSBjb3VudFxufVxuXG4vLyBHZXQgdGhlIG1lZGlhbiBmcm9tIGFuIGFycmF5IG9mIG51bWJlcnMuXG5mdW5jdGlvbiBnZXRNZWRpYW4gKGFyZ3MpIHtcbiAgaWYgKCFhcmdzLmxlbmd0aCkgcmV0dXJuIDBcbiAgdmFyIG51bWJlcnMgPSBhcmdzLnNsaWNlKDApLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgLSBiIH0pXG4gIHZhciBtaWRkbGUgPSBNYXRoLmZsb29yKG51bWJlcnMubGVuZ3RoIC8gMilcbiAgdmFyIGlzRXZlbiA9IG51bWJlcnMubGVuZ3RoICUgMiA9PT0gMFxuICB2YXIgcmVzID0gaXNFdmVuID8gKG51bWJlcnNbbWlkZGxlXSArIG51bWJlcnNbbWlkZGxlIC0gMV0pIC8gMiA6IG51bWJlcnNbbWlkZGxlXVxuICByZXR1cm4gTnVtYmVyKHJlcy50b0ZpeGVkKDIpKVxufVxuXG4vLyBEbyBub3RoaW5nLlxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuIiwidmFyIHByZXR0eSA9IHJlcXVpcmUoJ3ByZXR0aWVyLWJ5dGVzJylcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yYWdlXG5cbmZ1bmN0aW9uIHN0b3JhZ2UgKCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmNob28sICdzdG9yYWdlJywge1xuICAgIGdldDogZ2V0LFxuICAgIHNldDogbm9vcFxuICB9KVxuXG4gIGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgaWYgKG5hdmlnYXRvci5zdG9yYWdlKSB7XG4gICAgICBuYXZpZ2F0b3Iuc3RvcmFnZS5lc3RpbWF0ZSgpLnRoZW4oZnVuY3Rpb24gKGVzdGltYXRlKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IChlc3RpbWF0ZS51c2FnZSAvIGVzdGltYXRlLnF1b3RhKS50b0ZpeGVkKClcbiAgICAgICAgY2xyKCdNYXggc3RvcmFnZTonLCBmbXQoZXN0aW1hdGUucXVvdGEpKVxuICAgICAgICBjbHIoJ1N0b3JhZ2UgdXNlZDonLCBmbXQoZXN0aW1hdGUudXNhZ2UpICsgJyAoJyArIHZhbHVlICsgJyUpJylcbiAgICAgICAgbmF2aWdhdG9yLnN0b3JhZ2UucGVyc2lzdGVkKCkudGhlbihmdW5jdGlvbiAoYm9vbCkge1xuICAgICAgICAgIHZhciB2YWwgPSBib29sID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ1xuICAgICAgICAgIGNscignUGVyc2lzdGVudCBzdG9yYWdlOicsIHZhbClcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICByZXR1cm4gJ0NhbGN1bGF0aW5nIHN0b3JhZ2UgcXVvdGHigKYnXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbFxuICAgICAgcmV0dXJuICgvaHR0cHMvLnRlc3QocHJvdG9jb2wpKVxuICAgICAgICA/IFwiVGhlIFN0b3JhZ2UgQVBJIGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgYnJvd3Nlci4gV2UncmUgc29ycnkhXCJcbiAgICAgICAgOiAnVGhlIFN0b3JhZ2UgQVBJIGlzIHVuYXZhaWxhYmxlLiBTZXJ2aW5nIHRoaXMgc2l0ZSBvdmVyIEhUVFBTIG1pZ2h0IGhlbHAgZW5hYmxlIGl0ISdcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xyIChtc2csIGFyZykge1xuICB2YXIgY29sb3IgPSAnI2NjOTljYydcbiAgY29uc29sZS5sb2coJyVjJyArIG1zZywgJ2NvbG9yOiAnICsgY29sb3IsIGFyZylcbn1cblxuZnVuY3Rpb24gZm10IChudW0pIHtcbiAgcmV0dXJuIHByZXR0eShudW0pLnJlcGxhY2UoJyAnLCAnJylcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuIiwidmFyIG9uUGVyZm9ybWFuY2UgPSByZXF1aXJlKCdvbi1wZXJmb3JtYW5jZScpXG52YXIgc2NoZWR1bGVyID0gcmVxdWlyZSgnbmFub3NjaGVkdWxlcicpKClcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IENob29Ib29rc1xuXG5mdW5jdGlvbiBDaG9vSG9va3MgKGVtaXR0ZXIpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENob29Ib29rcykpIHJldHVybiBuZXcgQ2hvb0hvb2tzKGVtaXR0ZXIpXG5cbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBlbWl0dGVyLCAnb2JqZWN0JylcblxuICB0aGlzLmhhc1dpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gIHRoaXMuaGFzSWRsZUNhbGxiYWNrID0gdGhpcy5oYXNXaW5kb3cgJiYgd2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2tcbiAgdGhpcy5oYXNQZXJmb3JtYW5jZSA9IHRoaXMuaGFzV2luZG93ICYmXG4gICAgd2luZG93LnBlcmZvcm1hbmNlICYmXG4gICAgd2luZG93LnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWVcblxuICB0aGlzLmVtaXR0ZXIgPSBlbWl0dGVyXG4gIHRoaXMubGlzdGVuZXJzID0ge31cbiAgdGhpcy5idWZmZXIgPSB7XG4gICAgcmVuZGVyOiB7fSxcbiAgICBldmVudHM6IHt9XG4gIH1cbn1cblxuQ2hvb0hvb2tzLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChuYW1lLCBoYW5kbGVyKSB7XG4gIHRoaXMubGlzdGVuZXJzW25hbWVdID0gaGFuZGxlclxufVxuXG5DaG9vSG9va3MucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKHRoaXMuaGFzUGVyZm9ybWFuY2UpIHtcbiAgICB3aW5kb3cucGVyZm9ybWFuY2Uub25yZXNvdXJjZXRpbWluZ2J1ZmZlcmZ1bGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBzZWxmLmxpc3RlbmVyc1sncmVzb3VyY2UtdGltaW5nLWJ1ZmZlci1mdWxsJ11cbiAgICAgIGlmIChsaXN0ZW5lcikgbGlzdGVuZXIoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gYWxzbyBoYW5kbGUgbG9nIGV2ZW50c1xuICBvblBlcmZvcm1hbmNlKGZ1bmN0aW9uICh0aW1pbmcpIHtcbiAgICBpZiAoIXRpbWluZykgcmV0dXJuXG4gICAgaWYgKHRpbWluZy5lbnRyeVR5cGUgIT09ICdtZWFzdXJlJykgcmV0dXJuXG5cbiAgICB2YXIgZXZlbnROYW1lID0gdGltaW5nLm5hbWVcbiAgICBpZiAoL2Nob29cXC5tb3JwaC8udGVzdChldmVudE5hbWUpKSB7XG4gICAgICBzZWxmLmJ1ZmZlci5yZW5kZXIubW9ycGggPSB0aW1pbmdcbiAgICB9IGVsc2UgaWYgKC9jaG9vXFwucm91dGUvLnRlc3QoZXZlbnROYW1lKSkge1xuICAgICAgc2VsZi5idWZmZXIucmVuZGVyLnJvdXRlID0gdGltaW5nXG4gICAgfSBlbHNlIGlmICgvY2hvb1xcLnJlbmRlci8udGVzdChldmVudE5hbWUpKSB7XG4gICAgICBzZWxmLmJ1ZmZlci5yZW5kZXIucmVuZGVyID0gdGltaW5nXG4gICAgfSBlbHNlIGlmICgvY2hvb1xcLmVtaXQvLnRlc3QoZXZlbnROYW1lKSAmJiAhL2xvZzovLnRlc3QoZXZlbnROYW1lKSkge1xuICAgICAgdmFyIGV2ZW50TGlzdGVuZXIgPSBzZWxmLmxpc3RlbmVyc1snZXZlbnQnXVxuICAgICAgaWYgKGV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdmFyIHRpbWluZ05hbWUgPSBldmVudE5hbWUubWF0Y2goL2Nob29cXC5lbWl0XFwoJyguKiknXFwpLylbMV1cbiAgICAgICAgaWYgKHRpbWluZ05hbWUgPT09ICdyZW5kZXInIHx8IHRpbWluZ05hbWUgPT09ICdET01Db250ZW50TG9hZGVkJykgcmV0dXJuXG5cbiAgICAgICAgdmFyIHRyYWNlSWQgPSBldmVudE5hbWUubWF0Y2goL1xcWyhcXGQrKVxcXS8pWzFdXG4gICAgICAgIHZhciBkYXRhID0gc2VsZi5idWZmZXIuZXZlbnRzW3RyYWNlSWRdXG5cbiAgICAgICAgc2VsZi5idWZmZXIuZXZlbnRzW3RyYWNlSWRdID0gbnVsbFxuICAgICAgICBldmVudExpc3RlbmVyKHRpbWluZ05hbWUsIGRhdGEsIHRpbWluZylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgckJ1ZiA9IHNlbGYuYnVmZmVyLnJlbmRlclxuICAgIGlmIChyQnVmLnJlbmRlciAmJiByQnVmLnJvdXRlICYmIHJCdWYubW9ycGgpIHtcbiAgICAgIHZhciByZW5kZXJMaXN0ZW5lciA9IHNlbGYubGlzdGVuZXJzWydyZW5kZXInXVxuICAgICAgaWYgKCFyZW5kZXJMaXN0ZW5lcikgcmV0dXJuXG4gICAgICB2YXIgdGltaW5ncyA9IHt9XG4gICAgICB3aGlsZSAoc2VsZi5idWZmZXIucmVuZGVyLmxlbmd0aCkge1xuICAgICAgICB2YXIgX3RpbWluZyA9IHNlbGYuYnVmZmVyLnJlbmRlci5wb3AoKVxuICAgICAgICB2YXIgbmFtZSA9IF90aW1pbmcubmFtZVxuICAgICAgICBpZiAoL2Nob29cXC5yZW5kZXIvLnRlc3QobmFtZSkpIHRpbWluZ3MucmVuZGVyID0gX3RpbWluZ1xuICAgICAgICBlbHNlIGlmICgvY2hvb1xcLm1vcnBoLy50ZXN0KG5hbWUpKSB0aW1pbmdzLm1vcnBoID0gX3RpbWluZ1xuICAgICAgICBlbHNlIHRpbWluZ3Mucm91dGUgPSBfdGltaW5nXG4gICAgICB9XG4gICAgICByQnVmLnJlbmRlciA9IHJCdWYucm91dGUgPSByQnVmLm1vcnBoID0gdm9pZCAwXG4gICAgICByZW5kZXJMaXN0ZW5lcih0aW1pbmdzKVxuICAgIH1cbiAgfSlcblxuICAvLyBDaGVjayBpZiB0aGVyZSdzIHRpbWluZ3Mgd2l0aG91dCBhbnkgbGlzdGVuZXJzXG4gIC8vIGFuZCB0cmlnZ2VyIHRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50LlxuICAvLyBJZiB0aGUgdGltaW5nIEFQSSBpcyBub3QgYXZhaWxhYmxlLCB3ZSBoYW5kbGUgYWxsIGV2ZW50cyBoZXJlXG4gIHRoaXMuZW1pdHRlci5vbignKicsIGZ1bmN0aW9uIChldmVudE5hbWUsIGRhdGEsIHV1aWQpIHtcbiAgICB2YXIgbG9nTGV2ZWwgPSAvXmxvZzooXFx3ezQsNX0pLy5leGVjKGV2ZW50TmFtZSlcblxuICAgIGlmICghc2VsZi5oYXNQZXJmb3JtYW5jZSAmJiBldmVudE5hbWUgPT09ICdyZW5kZXInKSB7XG4gICAgICAvLyBSZW5kZXJcbiAgICAgIHZhciByZW5kZXJMaXN0ZW5lciA9IHNlbGYubGlzdGVuZXJzWydyZW5kZXInXVxuICAgICAgaWYgKHJlbmRlckxpc3RlbmVyKSByZW5kZXJMaXN0ZW5lcigpXG4gICAgfSBlbHNlIGlmIChldmVudE5hbWUgPT09ICdET01Db250ZW50TG9hZGVkJykge1xuICAgICAgLy8gRE9NQ29udGVudExvYWRlZFxuICAgICAgc2VsZi5fZW1pdExvYWRlZCgpXG4gICAgfSBlbHNlIGlmIChsb2dMZXZlbCkge1xuICAgICAgbG9nTGV2ZWwgPSBsb2dMZXZlbFsxXVxuICAgICAgLy8gTG9nOipcbiAgICAgIHZhciBsb2dMaXN0ZW5lciA9IHNlbGYubGlzdGVuZXJzWydsb2c6JyArIGxvZ0xldmVsXVxuICAgICAgaWYgKGxvZ0xpc3RlbmVyKSB7XG4gICAgICAgIGxvZ0xpc3RlbmVyLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgYXJndW1lbnRzLmxlbmd0aCAtIDEpKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXNlbGYuZW1pdHRlci5saXN0ZW5lcnMoZXZlbnROYW1lKS5sZW5ndGgpIHtcbiAgICAgIC8vIFVuaGFuZGxlZFxuICAgICAgdmFyIHVuaGFuZGxlZExpc3RlbmVyID0gc2VsZi5saXN0ZW5lcnNbJ3VuaGFuZGxlZCddXG4gICAgICBpZiAodW5oYW5kbGVkTGlzdGVuZXIpIHVuaGFuZGxlZExpc3RlbmVyKGV2ZW50TmFtZSwgZGF0YSlcbiAgICB9IGVsc2UgaWYgKGV2ZW50TmFtZSAhPT0gJ3JlbmRlcicpIHtcbiAgICAgIC8vICpcbiAgICAgIGlmIChzZWxmLmhhc1BlcmZvcm1hbmNlKSBzZWxmLmJ1ZmZlci5ldmVudHNbdXVpZF0gPSBkYXRhXG4gICAgfVxuICB9KVxufVxuXG4vLyBjb21wdXRlIGFuZCBsb2cgdGltZSB0aWxsIGludGVyYWN0aXZlIHdoZW4gRE9NQ29udGVudExvYWRlZCBldmVudCBmaXJlc1xuQ2hvb0hvb2tzLnByb3RvdHlwZS5fZW1pdExvYWRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHNjaGVkdWxlci5wdXNoKGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICB2YXIgbGlzdGVuZXIgPSBzZWxmLmxpc3RlbmVyc1snRE9NQ29udGVudExvYWRlZCddXG4gICAgdmFyIHRpbWluZyA9IHNlbGYuaGFzV2luZG93ICYmIHdpbmRvdy5wZXJmb3JtYW5jZSAmJiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nXG5cbiAgICBpZiAobGlzdGVuZXIgJiYgdGltaW5nKSB7XG4gICAgICBsaXN0ZW5lcih7XG4gICAgICAgIGludGVyYWN0aXZlOiB0aW1pbmcuZG9tSW50ZXJhY3RpdmUgLSB0aW1pbmcubmF2aWdhdGlvblN0YXJ0LFxuICAgICAgICBsb2FkZWQ6IHRpbWluZy5kb21Db250ZW50TG9hZGVkRXZlbnRFbmQgLSB0aW1pbmcubmF2aWdhdGlvblN0YXJ0XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cbiIsInZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxudmFyIExSVSA9IHJlcXVpcmUoJ25hbm9scnUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IENob29Db21wb25lbnRDYWNoZVxuXG5mdW5jdGlvbiBDaG9vQ29tcG9uZW50Q2FjaGUgKHN0YXRlLCBlbWl0LCBscnUpIHtcbiAgYXNzZXJ0Lm9rKHRoaXMgaW5zdGFuY2VvZiBDaG9vQ29tcG9uZW50Q2FjaGUsICdDaG9vQ29tcG9uZW50Q2FjaGUgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBgbmV3YCcpXG5cbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBzdGF0ZSwgJ29iamVjdCcsICdDaG9vQ29tcG9uZW50Q2FjaGU6IHN0YXRlIHNob3VsZCBiZSB0eXBlIG9iamVjdCcpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgZW1pdCwgJ2Z1bmN0aW9uJywgJ0Nob29Db21wb25lbnRDYWNoZTogZW1pdCBzaG91bGQgYmUgdHlwZSBmdW5jdGlvbicpXG5cbiAgaWYgKHR5cGVvZiBscnUgPT09ICdudW1iZXInKSB0aGlzLmNhY2hlID0gbmV3IExSVShscnUpXG4gIGVsc2UgdGhpcy5jYWNoZSA9IGxydSB8fCBuZXcgTFJVKDEwMClcbiAgdGhpcy5zdGF0ZSA9IHN0YXRlXG4gIHRoaXMuZW1pdCA9IGVtaXRcbn1cblxuLy8gR2V0ICYgY3JlYXRlIGNvbXBvbmVudCBpbnN0YW5jZXMuXG5DaG9vQ29tcG9uZW50Q2FjaGUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChDb21wb25lbnQsIGlkKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgQ29tcG9uZW50LCAnZnVuY3Rpb24nLCAnQ2hvb0NvbXBvbmVudENhY2hlLnJlbmRlcjogQ29tcG9uZW50IHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcbiAgYXNzZXJ0Lm9rKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGlkID09PSAnbnVtYmVyJywgJ0Nob29Db21wb25lbnRDYWNoZS5yZW5kZXI6IGlkIHNob3VsZCBiZSB0eXBlIHN0cmluZyBvciB0eXBlIG51bWJlcicpXG5cbiAgdmFyIGVsID0gdGhpcy5jYWNoZS5nZXQoaWQpXG4gIGlmICghZWwpIHtcbiAgICB2YXIgYXJncyA9IFtdXG4gICAgZm9yICh2YXIgaSA9IDIsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSlcbiAgICB9XG4gICAgYXJncy51bnNoaWZ0KENvbXBvbmVudCwgaWQsIHRoaXMuc3RhdGUsIHRoaXMuZW1pdClcbiAgICBlbCA9IG5ld0NhbGwuYXBwbHkobmV3Q2FsbCwgYXJncylcbiAgICB0aGlzLmNhY2hlLnNldChpZCwgZWwpXG4gIH1cblxuICByZXR1cm4gZWxcbn1cblxuLy8gQmVjYXVzZSB5b3UgY2FuJ3QgY2FsbCBgbmV3YCBhbmQgYC5hcHBseSgpYCBhdCB0aGUgc2FtZSB0aW1lLiBUaGlzIGlzIGEgbWFkXG4vLyBoYWNrLCBidXQgaGV5IGl0IHdvcmtzIHNvIHdlIGdvbm5hIGdvIGZvciBpdC4gV2hvb3AuXG5mdW5jdGlvbiBuZXdDYWxsIChDbHMpIHtcbiAgcmV0dXJuIG5ldyAoQ2xzLmJpbmQuYXBwbHkoQ2xzLCBhcmd1bWVudHMpKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ25hbm9jb21wb25lbnQnKVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCduYW5vaHRtbCcpXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ25hbm9odG1sL3JhdycpXG4iLCJ2YXIgc2Nyb2xsVG9BbmNob3IgPSByZXF1aXJlKCdzY3JvbGwtdG8tYW5jaG9yJylcbnZhciBkb2N1bWVudFJlYWR5ID0gcmVxdWlyZSgnZG9jdW1lbnQtcmVhZHknKVxudmFyIG5hbm90aW1pbmcgPSByZXF1aXJlKCduYW5vdGltaW5nJylcbnZhciBuYW5vcm91dGVyID0gcmVxdWlyZSgnbmFub3JvdXRlcicpXG52YXIgbmFub21vcnBoID0gcmVxdWlyZSgnbmFub21vcnBoJylcbnZhciBuYW5vcXVlcnkgPSByZXF1aXJlKCduYW5vcXVlcnknKVxudmFyIG5hbm9ocmVmID0gcmVxdWlyZSgnbmFub2hyZWYnKVxudmFyIG5hbm9yYWYgPSByZXF1aXJlKCduYW5vcmFmJylcbnZhciBuYW5vYnVzID0gcmVxdWlyZSgnbmFub2J1cycpXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxudmFyIENhY2hlID0gcmVxdWlyZSgnLi9jb21wb25lbnQvY2FjaGUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IENob29cblxudmFyIEhJU1RPUllfT0JKRUNUID0ge31cblxuZnVuY3Rpb24gQ2hvbyAob3B0cykge1xuICB2YXIgdGltaW5nID0gbmFub3RpbWluZygnY2hvby5jb25zdHJ1Y3RvcicpXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDaG9vKSkgcmV0dXJuIG5ldyBDaG9vKG9wdHMpXG4gIG9wdHMgPSBvcHRzIHx8IHt9XG5cbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBvcHRzLCAnb2JqZWN0JywgJ2Nob286IG9wdHMgc2hvdWxkIGJlIHR5cGUgb2JqZWN0JylcblxuICB2YXIgc2VsZiA9IHRoaXNcblxuICAvLyBkZWZpbmUgZXZlbnRzIHVzZWQgYnkgY2hvb1xuICB0aGlzLl9ldmVudHMgPSB7XG4gICAgRE9NQ09OVEVOVExPQURFRDogJ0RPTUNvbnRlbnRMb2FkZWQnLFxuICAgIERPTVRJVExFQ0hBTkdFOiAnRE9NVGl0bGVDaGFuZ2UnLFxuICAgIFJFUExBQ0VTVEFURTogJ3JlcGxhY2VTdGF0ZScsXG4gICAgUFVTSFNUQVRFOiAncHVzaFN0YXRlJyxcbiAgICBOQVZJR0FURTogJ25hdmlnYXRlJyxcbiAgICBQT1BTVEFURTogJ3BvcFN0YXRlJyxcbiAgICBSRU5ERVI6ICdyZW5kZXInXG4gIH1cblxuICAvLyBwcm9wZXJ0aWVzIGZvciBpbnRlcm5hbCB1c2Ugb25seVxuICB0aGlzLl9oaXN0b3J5RW5hYmxlZCA9IG9wdHMuaGlzdG9yeSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdHMuaGlzdG9yeVxuICB0aGlzLl9ocmVmRW5hYmxlZCA9IG9wdHMuaHJlZiA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdHMuaHJlZlxuICB0aGlzLl9oYXNoRW5hYmxlZCA9IG9wdHMuaGFzaCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRzLmhhc2hcbiAgdGhpcy5faGFzV2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgdGhpcy5fY2FjaGUgPSBvcHRzLmNhY2hlXG4gIHRoaXMuX2xvYWRlZCA9IGZhbHNlXG4gIHRoaXMuX3N0b3JlcyA9IFtvbmRvbXRpdGxlY2hhbmdlXVxuICB0aGlzLl90cmVlID0gbnVsbFxuXG4gIC8vIHN0YXRlXG4gIHZhciBfc3RhdGUgPSB7XG4gICAgZXZlbnRzOiB0aGlzLl9ldmVudHMsXG4gICAgY29tcG9uZW50czoge31cbiAgfVxuICBpZiAodGhpcy5faGFzV2luZG93KSB7XG4gICAgdGhpcy5zdGF0ZSA9IHdpbmRvdy5pbml0aWFsU3RhdGVcbiAgICAgID8gT2JqZWN0LmFzc2lnbih7fSwgd2luZG93LmluaXRpYWxTdGF0ZSwgX3N0YXRlKVxuICAgICAgOiBfc3RhdGVcbiAgICBkZWxldGUgd2luZG93LmluaXRpYWxTdGF0ZVxuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhdGUgPSBfc3RhdGVcbiAgfVxuXG4gIC8vIHByb3BlcnRpZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgQVBJXG4gIHRoaXMucm91dGVyID0gbmFub3JvdXRlcih7IGN1cnJ5OiB0cnVlIH0pXG4gIHRoaXMuZW1pdHRlciA9IG5hbm9idXMoJ2Nob28uZW1pdCcpXG4gIHRoaXMuZW1pdCA9IHRoaXMuZW1pdHRlci5lbWl0LmJpbmQodGhpcy5lbWl0dGVyKVxuXG4gIC8vIGxpc3RlbiBmb3IgdGl0bGUgY2hhbmdlczsgYXZhaWxhYmxlIGV2ZW4gd2hlbiBjYWxsaW5nIC50b1N0cmluZygpXG4gIGlmICh0aGlzLl9oYXNXaW5kb3cpIHRoaXMuc3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZVxuICBmdW5jdGlvbiBvbmRvbXRpdGxlY2hhbmdlIChzdGF0ZSkge1xuICAgIHNlbGYuZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoc2VsZi5fZXZlbnRzLkRPTVRJVExFQ0hBTkdFLCBmdW5jdGlvbiAodGl0bGUpIHtcbiAgICAgIGFzc2VydC5lcXVhbCh0eXBlb2YgdGl0bGUsICdzdHJpbmcnLCAnZXZlbnRzLkRPTVRpdGxlQ2hhbmdlOiB0aXRsZSBzaG91bGQgYmUgdHlwZSBzdHJpbmcnKVxuICAgICAgc3RhdGUudGl0bGUgPSB0aXRsZVxuICAgICAgaWYgKHNlbGYuX2hhc1dpbmRvdykgZG9jdW1lbnQudGl0bGUgPSB0aXRsZVxuICAgIH0pXG4gIH1cbiAgdGltaW5nKClcbn1cblxuQ2hvby5wcm90b3R5cGUucm91dGUgPSBmdW5jdGlvbiAocm91dGUsIGhhbmRsZXIpIHtcbiAgdmFyIHJvdXRlVGltaW5nID0gbmFub3RpbWluZyhcImNob28ucm91dGUoJ1wiICsgcm91dGUgKyBcIicpXCIpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygcm91dGUsICdzdHJpbmcnLCAnY2hvby5yb3V0ZTogcm91dGUgc2hvdWxkIGJlIHR5cGUgc3RyaW5nJylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBoYW5kbGVyLCAnZnVuY3Rpb24nLCAnY2hvby5oYW5kbGVyOiByb3V0ZSBzaG91bGQgYmUgdHlwZSBmdW5jdGlvbicpXG4gIHRoaXMucm91dGVyLm9uKHJvdXRlLCBoYW5kbGVyKVxuICByb3V0ZVRpbWluZygpXG59XG5cbkNob28ucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChjYikge1xuICBhc3NlcnQuZXF1YWwodHlwZW9mIGNiLCAnZnVuY3Rpb24nLCAnY2hvby51c2U6IGNiIHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHRoaXMuX3N0b3Jlcy5wdXNoKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgIHZhciBtc2cgPSAnY2hvby51c2UnXG4gICAgbXNnID0gY2Iuc3RvcmVOYW1lID8gbXNnICsgJygnICsgY2Iuc3RvcmVOYW1lICsgJyknIDogbXNnXG4gICAgdmFyIGVuZFRpbWluZyA9IG5hbm90aW1pbmcobXNnKVxuICAgIGNiKHN0YXRlLCBzZWxmLmVtaXR0ZXIsIHNlbGYpXG4gICAgZW5kVGltaW5nKClcbiAgfSlcbn1cblxuQ2hvby5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygd2luZG93LCAnb2JqZWN0JywgJ2Nob28uc3RhcnQ6IHdpbmRvdyB3YXMgbm90IGZvdW5kLiAuc3RhcnQoKSBtdXN0IGJlIGNhbGxlZCBpbiBhIGJyb3dzZXIsIHVzZSAudG9TdHJpbmcoKSBpZiBydW5uaW5nIGluIE5vZGUnKVxuICB2YXIgc3RhcnRUaW1pbmcgPSBuYW5vdGltaW5nKCdjaG9vLnN0YXJ0JylcblxuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKHRoaXMuX2hpc3RvcnlFbmFibGVkKSB7XG4gICAgdGhpcy5lbWl0dGVyLnByZXBlbmRMaXN0ZW5lcih0aGlzLl9ldmVudHMuTkFWSUdBVEUsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX21hdGNoUm91dGUoc2VsZi5zdGF0ZSlcbiAgICAgIGlmIChzZWxmLl9sb2FkZWQpIHtcbiAgICAgICAgc2VsZi5lbWl0dGVyLmVtaXQoc2VsZi5fZXZlbnRzLlJFTkRFUilcbiAgICAgICAgc2V0VGltZW91dChzY3JvbGxUb0FuY2hvci5iaW5kKG51bGwsIHdpbmRvdy5sb2NhdGlvbi5oYXNoKSwgMClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lbWl0dGVyLnByZXBlbmRMaXN0ZW5lcih0aGlzLl9ldmVudHMuUE9QU1RBVEUsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZW1pdHRlci5lbWl0KHNlbGYuX2V2ZW50cy5OQVZJR0FURSlcbiAgICB9KVxuXG4gICAgdGhpcy5lbWl0dGVyLnByZXBlbmRMaXN0ZW5lcih0aGlzLl9ldmVudHMuUFVTSFNUQVRFLCBmdW5jdGlvbiAoaHJlZikge1xuICAgICAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBocmVmLCAnc3RyaW5nJywgJ2V2ZW50cy5wdXNoU3RhdGU6IGhyZWYgc2hvdWxkIGJlIHR5cGUgc3RyaW5nJylcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShISVNUT1JZX09CSkVDVCwgbnVsbCwgaHJlZilcbiAgICAgIHNlbGYuZW1pdHRlci5lbWl0KHNlbGYuX2V2ZW50cy5OQVZJR0FURSlcbiAgICB9KVxuXG4gICAgdGhpcy5lbWl0dGVyLnByZXBlbmRMaXN0ZW5lcih0aGlzLl9ldmVudHMuUkVQTEFDRVNUQVRFLCBmdW5jdGlvbiAoaHJlZikge1xuICAgICAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBocmVmLCAnc3RyaW5nJywgJ2V2ZW50cy5yZXBsYWNlU3RhdGU6IGhyZWYgc2hvdWxkIGJlIHR5cGUgc3RyaW5nJylcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShISVNUT1JZX09CSkVDVCwgbnVsbCwgaHJlZilcbiAgICAgIHNlbGYuZW1pdHRlci5lbWl0KHNlbGYuX2V2ZW50cy5OQVZJR0FURSlcbiAgICB9KVxuXG4gICAgd2luZG93Lm9ucG9wc3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmVtaXR0ZXIuZW1pdChzZWxmLl9ldmVudHMuUE9QU1RBVEUpXG4gICAgfVxuXG4gICAgaWYgKHNlbGYuX2hyZWZFbmFibGVkKSB7XG4gICAgICBuYW5vaHJlZihmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgICAgdmFyIGhyZWYgPSBsb2NhdGlvbi5ocmVmXG4gICAgICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaFxuICAgICAgICBpZiAoaHJlZiA9PT0gd2luZG93LmxvY2F0aW9uLmhyZWYpIHtcbiAgICAgICAgICBpZiAoIXNlbGYuX2hhc2hFbmFibGVkICYmIGhhc2gpIHNjcm9sbFRvQW5jaG9yKGhhc2gpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5lbWl0dGVyLmVtaXQoc2VsZi5fZXZlbnRzLlBVU0hTVEFURSwgaHJlZilcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdGhpcy5fc2V0Q2FjaGUodGhpcy5zdGF0ZSlcbiAgdGhpcy5fbWF0Y2hSb3V0ZSh0aGlzLnN0YXRlKVxuICB0aGlzLl9zdG9yZXMuZm9yRWFjaChmdW5jdGlvbiAoaW5pdFN0b3JlKSB7XG4gICAgaW5pdFN0b3JlKHNlbGYuc3RhdGUpXG4gIH0pXG5cbiAgdGhpcy5fdHJlZSA9IHRoaXMuX3ByZXJlbmRlcih0aGlzLnN0YXRlKVxuICBhc3NlcnQub2sodGhpcy5fdHJlZSwgJ2Nob28uc3RhcnQ6IG5vIHZhbGlkIERPTSBub2RlIHJldHVybmVkIGZvciBsb2NhdGlvbiAnICsgdGhpcy5zdGF0ZS5ocmVmKVxuXG4gIHRoaXMuZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoc2VsZi5fZXZlbnRzLlJFTkRFUiwgbmFub3JhZihmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlbmRlclRpbWluZyA9IG5hbm90aW1pbmcoJ2Nob28ucmVuZGVyJylcbiAgICB2YXIgbmV3VHJlZSA9IHNlbGYuX3ByZXJlbmRlcihzZWxmLnN0YXRlKVxuICAgIGFzc2VydC5vayhuZXdUcmVlLCAnY2hvby5yZW5kZXI6IG5vIHZhbGlkIERPTSBub2RlIHJldHVybmVkIGZvciBsb2NhdGlvbiAnICsgc2VsZi5zdGF0ZS5ocmVmKVxuXG4gICAgYXNzZXJ0LmVxdWFsKHNlbGYuX3RyZWUubm9kZU5hbWUsIG5ld1RyZWUubm9kZU5hbWUsICdjaG9vLnJlbmRlcjogVGhlIHRhcmdldCBub2RlIDwnICtcbiAgICAgIHNlbGYuX3RyZWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSArICc+IGlzIG5vdCB0aGUgc2FtZSB0eXBlIGFzIHRoZSBuZXcgbm9kZSA8JyArXG4gICAgICBuZXdUcmVlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKyAnPi4nKVxuXG4gICAgdmFyIG1vcnBoVGltaW5nID0gbmFub3RpbWluZygnY2hvby5tb3JwaCcpXG4gICAgbmFub21vcnBoKHNlbGYuX3RyZWUsIG5ld1RyZWUpXG4gICAgbW9ycGhUaW1pbmcoKVxuXG4gICAgcmVuZGVyVGltaW5nKClcbiAgfSkpXG5cbiAgZG9jdW1lbnRSZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5lbWl0dGVyLmVtaXQoc2VsZi5fZXZlbnRzLkRPTUNPTlRFTlRMT0FERUQpXG4gICAgc2VsZi5fbG9hZGVkID0gdHJ1ZVxuICB9KVxuXG4gIHN0YXJ0VGltaW5nKClcbiAgcmV0dXJuIHRoaXMuX3RyZWVcbn1cblxuQ2hvby5wcm90b3R5cGUubW91bnQgPSBmdW5jdGlvbiBtb3VudCAoc2VsZWN0b3IpIHtcbiAgdmFyIG1vdW50VGltaW5nID0gbmFub3RpbWluZyhcImNob28ubW91bnQoJ1wiICsgc2VsZWN0b3IgKyBcIicpXCIpXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAnb2JqZWN0Jykge1xuICAgIGFzc2VydC5vayh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnLCAnY2hvby5tb3VudDogc2VsZWN0b3Igc2hvdWxkIGJlIHR5cGUgU3RyaW5nJylcbiAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3JcbiAgICBtb3VudFRpbWluZygpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGFzc2VydC5vayh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gJ29iamVjdCcsICdjaG9vLm1vdW50OiBzZWxlY3RvciBzaG91bGQgYmUgdHlwZSBTdHJpbmcgb3IgSFRNTEVsZW1lbnQnKVxuXG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIGRvY3VtZW50UmVhZHkoZnVuY3Rpb24gKCkge1xuICAgIHZhciByZW5kZXJUaW1pbmcgPSBuYW5vdGltaW5nKCdjaG9vLnJlbmRlcicpXG4gICAgdmFyIG5ld1RyZWUgPSBzZWxmLnN0YXJ0KClcbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgc2VsZi5fdHJlZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuX3RyZWUgPSBzZWxlY3RvclxuICAgIH1cblxuICAgIGFzc2VydC5vayhzZWxmLl90cmVlLCAnY2hvby5tb3VudDogY291bGQgbm90IHF1ZXJ5IHNlbGVjdG9yOiAnICsgc2VsZWN0b3IpXG4gICAgYXNzZXJ0LmVxdWFsKHNlbGYuX3RyZWUubm9kZU5hbWUsIG5ld1RyZWUubm9kZU5hbWUsICdjaG9vLm1vdW50OiBUaGUgdGFyZ2V0IG5vZGUgPCcgK1xuICAgICAgc2VsZi5fdHJlZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICsgJz4gaXMgbm90IHRoZSBzYW1lIHR5cGUgYXMgdGhlIG5ldyBub2RlIDwnICtcbiAgICAgIG5ld1RyZWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSArICc+LicpXG5cbiAgICB2YXIgbW9ycGhUaW1pbmcgPSBuYW5vdGltaW5nKCdjaG9vLm1vcnBoJylcbiAgICBuYW5vbW9ycGgoc2VsZi5fdHJlZSwgbmV3VHJlZSlcbiAgICBtb3JwaFRpbWluZygpXG5cbiAgICByZW5kZXJUaW1pbmcoKVxuICB9KVxuICBtb3VudFRpbWluZygpXG59XG5cbkNob28ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGxvY2F0aW9uLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHN0YXRlIHx8IHt9XG4gIHN0YXRlLmNvbXBvbmVudHMgPSBzdGF0ZS5jb21wb25lbnRzIHx8IHt9XG4gIHN0YXRlLmV2ZW50cyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmV2ZW50cywgdGhpcy5fZXZlbnRzKVxuXG4gIGFzc2VydC5ub3RFcXVhbCh0eXBlb2Ygd2luZG93LCAnb2JqZWN0JywgJ2Nob28ubW91bnQ6IHdpbmRvdyB3YXMgZm91bmQuIC50b1N0cmluZygpIG11c3QgYmUgY2FsbGVkIGluIE5vZGUsIHVzZSAuc3RhcnQoKSBvciAubW91bnQoKSBpZiBydW5uaW5nIGluIHRoZSBicm93c2VyJylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBsb2NhdGlvbiwgJ3N0cmluZycsICdjaG9vLnRvU3RyaW5nOiBsb2NhdGlvbiBzaG91bGQgYmUgdHlwZSBzdHJpbmcnKVxuICBhc3NlcnQuZXF1YWwodHlwZW9mIHN0YXRlLCAnb2JqZWN0JywgJ2Nob28udG9TdHJpbmc6IHN0YXRlIHNob3VsZCBiZSB0eXBlIG9iamVjdCcpXG5cbiAgdGhpcy5fc2V0Q2FjaGUoc3RhdGUpXG4gIHRoaXMuX21hdGNoUm91dGUoc3RhdGUsIGxvY2F0aW9uKVxuICB0aGlzLmVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgdGhpcy5fc3RvcmVzLmZvckVhY2goZnVuY3Rpb24gKGluaXRTdG9yZSkge1xuICAgIGluaXRTdG9yZShzdGF0ZSlcbiAgfSlcblxuICB2YXIgaHRtbCA9IHRoaXMuX3ByZXJlbmRlcihzdGF0ZSlcbiAgYXNzZXJ0Lm9rKGh0bWwsICdjaG9vLnRvU3RyaW5nOiBubyB2YWxpZCB2YWx1ZSByZXR1cm5lZCBmb3IgdGhlIHJvdXRlICcgKyBsb2NhdGlvbilcbiAgYXNzZXJ0KCFBcnJheS5pc0FycmF5KGh0bWwpLCAnY2hvby50b1N0cmluZzogcmV0dXJuIHZhbHVlIHdhcyBhbiBhcnJheSBmb3IgdGhlIHJvdXRlICcgKyBsb2NhdGlvbilcbiAgcmV0dXJuIHR5cGVvZiBodG1sLm91dGVySFRNTCA9PT0gJ3N0cmluZycgPyBodG1sLm91dGVySFRNTCA6IGh0bWwudG9TdHJpbmcoKVxufVxuXG5DaG9vLnByb3RvdHlwZS5fbWF0Y2hSb3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgbG9jYXRpb25PdmVycmlkZSkge1xuICB2YXIgbG9jYXRpb24sIHF1ZXJ5U3RyaW5nXG4gIGlmIChsb2NhdGlvbk92ZXJyaWRlKSB7XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbk92ZXJyaWRlLnJlcGxhY2UoL1xcPy4rJC8sICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXG4gICAgaWYgKCF0aGlzLl9oYXNoRW5hYmxlZCkgbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKC8jLiskLywgJycpXG4gICAgcXVlcnlTdHJpbmcgPSBsb2NhdGlvbk92ZXJyaWRlXG4gIH0gZWxzZSB7XG4gICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvJC8sICcnKVxuICAgIGlmICh0aGlzLl9oYXNoRW5hYmxlZCkgbG9jYXRpb24gKz0gd2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgvXiMvLCAnLycpXG4gICAgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoXG4gIH1cbiAgdmFyIG1hdGNoZWQgPSB0aGlzLnJvdXRlci5tYXRjaChsb2NhdGlvbilcbiAgdGhpcy5faGFuZGxlciA9IG1hdGNoZWQuY2JcbiAgc3RhdGUuaHJlZiA9IGxvY2F0aW9uXG4gIHN0YXRlLnF1ZXJ5ID0gbmFub3F1ZXJ5KHF1ZXJ5U3RyaW5nKVxuICBzdGF0ZS5yb3V0ZSA9IG1hdGNoZWQucm91dGVcbiAgc3RhdGUucGFyYW1zID0gbWF0Y2hlZC5wYXJhbXNcbn1cblxuQ2hvby5wcm90b3R5cGUuX3ByZXJlbmRlciA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICB2YXIgcm91dGVUaW1pbmcgPSBuYW5vdGltaW5nKFwiY2hvby5wcmVyZW5kZXIoJ1wiICsgc3RhdGUucm91dGUgKyBcIicpXCIpXG4gIHZhciByZXMgPSB0aGlzLl9oYW5kbGVyKHN0YXRlLCB0aGlzLmVtaXQpXG4gIHJvdXRlVGltaW5nKClcbiAgcmV0dXJuIHJlc1xufVxuXG5DaG9vLnByb3RvdHlwZS5fc2V0Q2FjaGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgdmFyIGNhY2hlID0gbmV3IENhY2hlKHN0YXRlLCB0aGlzLmVtaXR0ZXIuZW1pdC5iaW5kKHRoaXMuZW1pdHRlciksIHRoaXMuX2NhY2hlKVxuICBzdGF0ZS5jYWNoZSA9IHJlbmRlckNvbXBvbmVudFxuXG4gIGZ1bmN0aW9uIHJlbmRlckNvbXBvbmVudCAoQ29tcG9uZW50LCBpZCkge1xuICAgIGFzc2VydC5lcXVhbCh0eXBlb2YgQ29tcG9uZW50LCAnZnVuY3Rpb24nLCAnY2hvby5zdGF0ZS5jYWNoZTogQ29tcG9uZW50IHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcbiAgICB2YXIgYXJncyA9IFtdXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSlcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlLnJlbmRlci5hcHBseShjYWNoZSwgYXJncylcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHN0YXRlIGdldHMgc3RyaW5naWZpZWQsIG1ha2Ugc3VyZSBgc3RhdGUuY2FjaGVgIGlzbid0XG4gIC8vIHN0cmluZ2lmaWVkIHRvby5cbiAgcmVuZGVyQ29tcG9uZW50LnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iLCIvKiEgY2xpcGJvYXJkLWNvcHkuIE1JVCBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbi8qIGdsb2JhbCBET01FeGNlcHRpb24gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBjbGlwYm9hcmRDb3B5XG5cbmZ1bmN0aW9uIGNsaXBib2FyZENvcHkgKHRleHQpIHtcbiAgLy8gVXNlIHRoZSBBc3luYyBDbGlwYm9hcmQgQVBJIHdoZW4gYXZhaWxhYmxlLiBSZXF1aXJlcyBhIHNlY3VyZSBicm93c2luZ1xuICAvLyBjb250ZXh0IChpLmUuIEhUVFBTKVxuICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkge1xuICAgIHJldHVybiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICB0aHJvdyAoZXJyICE9PSB1bmRlZmluZWQgPyBlcnIgOiBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgcmVxdWVzdCBpcyBub3QgYWxsb3dlZCcsICdOb3RBbGxvd2VkRXJyb3InKSlcbiAgICB9KVxuICB9XG5cbiAgLy8gLi4uT3RoZXJ3aXNlLCB1c2UgZG9jdW1lbnQuZXhlY0NvbW1hbmQoKSBmYWxsYmFja1xuXG4gIC8vIFB1dCB0aGUgdGV4dCB0byBjb3B5IGludG8gYSA8c3Bhbj5cbiAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgc3Bhbi50ZXh0Q29udGVudCA9IHRleHRcblxuICAvLyBQcmVzZXJ2ZSBjb25zZWN1dGl2ZSBzcGFjZXMgYW5kIG5ld2xpbmVzXG4gIHNwYW4uc3R5bGUud2hpdGVTcGFjZSA9ICdwcmUnXG4gIHNwYW4uc3R5bGUud2Via2l0VXNlclNlbGVjdCA9ICdhdXRvJ1xuICBzcGFuLnN0eWxlLnVzZXJTZWxlY3QgPSAnYWxsJ1xuXG4gIC8vIEFkZCB0aGUgPHNwYW4+IHRvIHRoZSBwYWdlXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3BhbilcblxuICAvLyBNYWtlIGEgc2VsZWN0aW9uIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJhbmdlIG9mIHRleHQgc2VsZWN0ZWQgYnkgdGhlIHVzZXJcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICB2YXIgcmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgcmFuZ2Uuc2VsZWN0Tm9kZShzcGFuKVxuICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG5cbiAgLy8gQ29weSB0ZXh0IHRvIHRoZSBjbGlwYm9hcmRcbiAgdmFyIHN1Y2Nlc3MgPSBmYWxzZVxuICB0cnkge1xuICAgIHN1Y2Nlc3MgPSB3aW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnIpXG4gIH1cblxuICAvLyBDbGVhbnVwXG4gIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICB3aW5kb3cuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzcGFuKVxuXG4gIHJldHVybiBzdWNjZXNzXG4gICAgPyBQcm9taXNlLnJlc29sdmUoKVxuICAgIDogUHJvbWlzZS5yZWplY3QobmV3IERPTUV4Y2VwdGlvbignVGhlIHJlcXVlc3QgaXMgbm90IGFsbG93ZWQnLCAnTm90QWxsb3dlZEVycm9yJykpXG59XG4iLCJ2YXIgY2xvbmUgPSAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9pbnN0YW5jZW9mKG9iaiwgdHlwZSkge1xuICByZXR1cm4gdHlwZSAhPSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIHR5cGU7XG59XG5cbnZhciBuYXRpdmVNYXA7XG50cnkge1xuICBuYXRpdmVNYXAgPSBNYXA7XG59IGNhdGNoKF8pIHtcbiAgLy8gbWF5YmUgYSByZWZlcmVuY2UgZXJyb3IgYmVjYXVzZSBubyBgTWFwYC4gR2l2ZSBpdCBhIGR1bW15IHZhbHVlIHRoYXQgbm9cbiAgLy8gdmFsdWUgd2lsbCBldmVyIGJlIGFuIGluc3RhbmNlb2YuXG4gIG5hdGl2ZU1hcCA9IGZ1bmN0aW9uKCkge307XG59XG5cbnZhciBuYXRpdmVTZXQ7XG50cnkge1xuICBuYXRpdmVTZXQgPSBTZXQ7XG59IGNhdGNoKF8pIHtcbiAgbmF0aXZlU2V0ID0gZnVuY3Rpb24oKSB7fTtcbn1cblxudmFyIG5hdGl2ZVByb21pc2U7XG50cnkge1xuICBuYXRpdmVQcm9taXNlID0gUHJvbWlzZTtcbn0gY2F0Y2goXykge1xuICBuYXRpdmVQcm9taXNlID0gZnVuY3Rpb24oKSB7fTtcbn1cblxuLyoqXG4gKiBDbG9uZXMgKGNvcGllcykgYW4gT2JqZWN0IHVzaW5nIGRlZXAgY29weWluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnkgZGVmYXVsdCwgYnV0IGlmIHlvdSBhcmUgY2VydGFpblxuICogdGhlcmUgYXJlIG5vIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4geW91ciBvYmplY3QsIHlvdSBjYW4gc2F2ZSBzb21lIENQVSB0aW1lXG4gKiBieSBjYWxsaW5nIGNsb25lKG9iaiwgZmFsc2UpLlxuICpcbiAqIENhdXRpb246IGlmIGBjaXJjdWxhcmAgaXMgZmFsc2UgYW5kIGBwYXJlbnRgIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZXMsXG4gKiB5b3VyIHByb2dyYW0gbWF5IGVudGVyIGFuIGluZmluaXRlIGxvb3AgYW5kIGNyYXNoLlxuICpcbiAqIEBwYXJhbSBgcGFyZW50YCAtIHRoZSBvYmplY3QgdG8gYmUgY2xvbmVkXG4gKiBAcGFyYW0gYGNpcmN1bGFyYCAtIHNldCB0byB0cnVlIGlmIHRoZSBvYmplY3QgdG8gYmUgY2xvbmVkIG1heSBjb250YWluXG4gKiAgICBjaXJjdWxhciByZWZlcmVuY2VzLiAob3B0aW9uYWwgLSB0cnVlIGJ5IGRlZmF1bHQpXG4gKiBAcGFyYW0gYGRlcHRoYCAtIHNldCB0byBhIG51bWJlciBpZiB0aGUgb2JqZWN0IGlzIG9ubHkgdG8gYmUgY2xvbmVkIHRvXG4gKiAgICBhIHBhcnRpY3VsYXIgZGVwdGguIChvcHRpb25hbCAtIGRlZmF1bHRzIHRvIEluZmluaXR5KVxuICogQHBhcmFtIGBwcm90b3R5cGVgIC0gc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIHVzZWQgd2hlbiBjbG9uaW5nIGFuIG9iamVjdC5cbiAqICAgIChvcHRpb25hbCAtIGRlZmF1bHRzIHRvIHBhcmVudCBwcm90b3R5cGUpLlxuICogQHBhcmFtIGBpbmNsdWRlTm9uRW51bWVyYWJsZWAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgbm9uLWVudW1lcmFibGUgcHJvcGVydGllc1xuICogICAgc2hvdWxkIGJlIGNsb25lZCBhcyB3ZWxsLiBOb24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9uIHRoZSBwcm90b3R5cGVcbiAqICAgIGNoYWluIHdpbGwgYmUgaWdub3JlZC4gKG9wdGlvbmFsIC0gZmFsc2UgYnkgZGVmYXVsdClcbiovXG5mdW5jdGlvbiBjbG9uZShwYXJlbnQsIGNpcmN1bGFyLCBkZXB0aCwgcHJvdG90eXBlLCBpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICBpZiAodHlwZW9mIGNpcmN1bGFyID09PSAnb2JqZWN0Jykge1xuICAgIGRlcHRoID0gY2lyY3VsYXIuZGVwdGg7XG4gICAgcHJvdG90eXBlID0gY2lyY3VsYXIucHJvdG90eXBlO1xuICAgIGluY2x1ZGVOb25FbnVtZXJhYmxlID0gY2lyY3VsYXIuaW5jbHVkZU5vbkVudW1lcmFibGU7XG4gICAgY2lyY3VsYXIgPSBjaXJjdWxhci5jaXJjdWxhcjtcbiAgfVxuICAvLyBtYWludGFpbiB0d28gYXJyYXlzIGZvciBjaXJjdWxhciByZWZlcmVuY2VzLCB3aGVyZSBjb3JyZXNwb25kaW5nIHBhcmVudHNcbiAgLy8gYW5kIGNoaWxkcmVuIGhhdmUgdGhlIHNhbWUgaW5kZXhcbiAgdmFyIGFsbFBhcmVudHMgPSBbXTtcbiAgdmFyIGFsbENoaWxkcmVuID0gW107XG5cbiAgdmFyIHVzZUJ1ZmZlciA9IHR5cGVvZiBCdWZmZXIgIT0gJ3VuZGVmaW5lZCc7XG5cbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PSAndW5kZWZpbmVkJylcbiAgICBjaXJjdWxhciA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBkZXB0aCA9PSAndW5kZWZpbmVkJylcbiAgICBkZXB0aCA9IEluZmluaXR5O1xuXG4gIC8vIHJlY3Vyc2UgdGhpcyBmdW5jdGlvbiBzbyB3ZSBkb24ndCByZXNldCBhbGxQYXJlbnRzIGFuZCBhbGxDaGlsZHJlblxuICBmdW5jdGlvbiBfY2xvbmUocGFyZW50LCBkZXB0aCkge1xuICAgIC8vIGNsb25pbmcgbnVsbCBhbHdheXMgcmV0dXJucyBudWxsXG4gICAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgaWYgKGRlcHRoID09PSAwKVxuICAgICAgcmV0dXJuIHBhcmVudDtcblxuICAgIHZhciBjaGlsZDtcbiAgICB2YXIgcHJvdG87XG4gICAgaWYgKHR5cGVvZiBwYXJlbnQgIT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlTWFwKSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlTWFwKCk7XG4gICAgfSBlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZVNldCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZVNldCgpO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVQcm9taXNlKSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHBhcmVudC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgcmVzb2x2ZShfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSkpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICByZWplY3QoX2Nsb25lKGVyciwgZGVwdGggLSAxKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzQXJyYXkocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBbXTtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNSZWdFeHAocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgUmVnRXhwKHBhcmVudC5zb3VyY2UsIF9fZ2V0UmVnRXhwRmxhZ3MocGFyZW50KSk7XG4gICAgICBpZiAocGFyZW50Lmxhc3RJbmRleCkgY2hpbGQubGFzdEluZGV4ID0gcGFyZW50Lmxhc3RJbmRleDtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNEYXRlKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IERhdGUocGFyZW50LmdldFRpbWUoKSk7XG4gICAgfSBlbHNlIGlmICh1c2VCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKHBhcmVudCkpIHtcbiAgICAgIGlmIChCdWZmZXIuYWxsb2NVbnNhZmUpIHtcbiAgICAgICAgLy8gTm9kZS5qcyA+PSA0LjUuMFxuICAgICAgICBjaGlsZCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShwYXJlbnQubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9sZGVyIE5vZGUuanMgdmVyc2lvbnNcbiAgICAgICAgY2hpbGQgPSBuZXcgQnVmZmVyKHBhcmVudC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgcGFyZW50LmNvcHkoY2hpbGQpO1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBFcnJvcikpIHtcbiAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJlbnQpO1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuICAgICAgICBwcm90byA9IHByb3RvdHlwZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2lyY3VsYXIpIHtcbiAgICAgIHZhciBpbmRleCA9IGFsbFBhcmVudHMuaW5kZXhPZihwYXJlbnQpO1xuXG4gICAgICBpZiAoaW5kZXggIT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGFsbENoaWxkcmVuW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIGFsbFBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgICAgYWxsQ2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfVxuXG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlTWFwKSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICB2YXIga2V5Q2hpbGQgPSBfY2xvbmUoa2V5LCBkZXB0aCAtIDEpO1xuICAgICAgICB2YXIgdmFsdWVDaGlsZCA9IF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKTtcbiAgICAgICAgY2hpbGQuc2V0KGtleUNoaWxkLCB2YWx1ZUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVTZXQpKSB7XG4gICAgICBwYXJlbnQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgZW50cnlDaGlsZCA9IF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKTtcbiAgICAgICAgY2hpbGQuYWRkKGVudHJ5Q2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSBpbiBwYXJlbnQpIHtcbiAgICAgIHZhciBhdHRycztcbiAgICAgIGlmIChwcm90bykge1xuICAgICAgICBhdHRycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXR0cnMgJiYgYXR0cnMuc2V0ID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjaGlsZFtpXSA9IF9jbG9uZShwYXJlbnRbaV0sIGRlcHRoIC0gMSk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhwYXJlbnQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIERvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgY2xvbmluZyBhIHN5bWJvbCBiZWNhdXNlIGl0IGlzIGEgcHJpbWl0aXZlLFxuICAgICAgICAvLyBsaWtlIGEgbnVtYmVyIG9yIHN0cmluZy5cbiAgICAgICAgdmFyIHN5bWJvbCA9IHN5bWJvbHNbaV07XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIHN5bWJvbCk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmVudW1lcmFibGUgJiYgIWluY2x1ZGVOb25FbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbc3ltYm9sXSA9IF9jbG9uZShwYXJlbnRbc3ltYm9sXSwgZGVwdGggLSAxKTtcbiAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hpbGQsIHN5bWJvbCwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgdmFyIGFsbFByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwYXJlbnQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0eU5hbWVzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZFtwcm9wZXJ0eU5hbWVdID0gX2Nsb25lKHBhcmVudFtwcm9wZXJ0eU5hbWVdLCBkZXB0aCAtIDEpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hpbGQsIHByb3BlcnR5TmFtZSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHJldHVybiBfY2xvbmUocGFyZW50LCBkZXB0aCk7XG59XG5cbi8qKlxuICogU2ltcGxlIGZsYXQgY2xvbmUgdXNpbmcgcHJvdG90eXBlLCBhY2NlcHRzIG9ubHkgb2JqZWN0cywgdXNlZnVsbCBmb3IgcHJvcGVydHlcbiAqIG92ZXJyaWRlIG9uIEZMQVQgY29uZmlndXJhdGlvbiBvYmplY3QgKG5vIG5lc3RlZCBwcm9wcykuXG4gKlxuICogVVNFIFdJVEggQ0FVVElPTiEgVGhpcyBtYXkgbm90IGJlaGF2ZSBhcyB5b3Ugd2lzaCBpZiB5b3UgZG8gbm90IGtub3cgaG93IHRoaXNcbiAqIHdvcmtzLlxuICovXG5jbG9uZS5jbG9uZVByb3RvdHlwZSA9IGZ1bmN0aW9uIGNsb25lUHJvdG90eXBlKHBhcmVudCkge1xuICBpZiAocGFyZW50ID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHZhciBjID0gZnVuY3Rpb24gKCkge307XG4gIGMucHJvdG90eXBlID0gcGFyZW50O1xuICByZXR1cm4gbmV3IGMoKTtcbn07XG5cbi8vIHByaXZhdGUgdXRpbGl0eSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gX19vYmpUb1N0cihvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5jbG9uZS5fX29ialRvU3RyID0gX19vYmpUb1N0cjtcblxuZnVuY3Rpb24gX19pc0RhdGUobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmNsb25lLl9faXNEYXRlID0gX19pc0RhdGU7XG5cbmZ1bmN0aW9uIF9faXNBcnJheShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cbmNsb25lLl9faXNBcnJheSA9IF9faXNBcnJheTtcblxuZnVuY3Rpb24gX19pc1JlZ0V4cChvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5jbG9uZS5fX2lzUmVnRXhwID0gX19pc1JlZ0V4cDtcblxuZnVuY3Rpb24gX19nZXRSZWdFeHBGbGFncyhyZSkge1xuICB2YXIgZmxhZ3MgPSAnJztcbiAgaWYgKHJlLmdsb2JhbCkgZmxhZ3MgKz0gJ2cnO1xuICBpZiAocmUuaWdub3JlQ2FzZSkgZmxhZ3MgKz0gJ2knO1xuICBpZiAocmUubXVsdGlsaW5lKSBmbGFncyArPSAnbSc7XG4gIHJldHVybiBmbGFncztcbn1cbmNsb25lLl9fZ2V0UmVnRXhwRmxhZ3MgPSBfX2dldFJlZ0V4cEZsYWdzO1xuXG5yZXR1cm4gY2xvbmU7XG59KSgpO1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbn1cbiIsIihmdW5jdGlvbihyKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9yKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSxyKTpyKENvZGVNaXJyb3IpfSkoZnVuY3Rpb24ocil7ZnVuY3Rpb24gSShjKXtjPWMuc2VhcmNoKHUpO3JldHVybi0xPT1jPzA6Y31mdW5jdGlvbiBKKGMsZCxhKXtyZXR1cm4vXFxic3RyaW5nXFxiLy50ZXN0KGMuZ2V0VG9rZW5UeXBlQXQobChkLmxpbmUsMCkpKSYmIS9eWydcImBdLy50ZXN0KGEpfWZ1bmN0aW9uIEcoYyxkKXt2YXIgYT1jLmdldE1vZGUoKTtyZXR1cm4hMSE9PWEudXNlSW5uZXJDb21tZW50cyYmYS5pbm5lck1vZGU/Yy5nZXRNb2RlQXQoZCk6YX12YXIgRT17fSx1PS9bXlxcc1xcdTAwYTBdLyxsPXIuUG9zLEs9ci5jbXBQb3M7ci5jb21tYW5kcy50b2dnbGVDb21tZW50PWZ1bmN0aW9uKGMpe2MudG9nZ2xlQ29tbWVudCgpfTtcbnIuZGVmaW5lRXh0ZW5zaW9uKFwidG9nZ2xlQ29tbWVudFwiLGZ1bmN0aW9uKGMpe2N8fChjPUUpO2Zvcih2YXIgZD1JbmZpbml0eSxhPXRoaXMubGlzdFNlbGVjdGlvbnMoKSxiPW51bGwsZT1hLmxlbmd0aC0xOzA8PWU7ZS0tKXt2YXIgZz1hW2VdLmZyb20oKSxmPWFbZV0udG8oKTtnLmxpbmU+PWR8fChmLmxpbmU+PWQmJihmPWwoZCwwKSksZD1nLmxpbmUsbnVsbD09Yj90aGlzLnVuY29tbWVudChnLGYsYyk/Yj1cInVuXCI6KHRoaXMubGluZUNvbW1lbnQoZyxmLGMpLGI9XCJsaW5lXCIpOlwidW5cIj09Yj90aGlzLnVuY29tbWVudChnLGYsYyk6dGhpcy5saW5lQ29tbWVudChnLGYsYykpfX0pO3IuZGVmaW5lRXh0ZW5zaW9uKFwibGluZUNvbW1lbnRcIixmdW5jdGlvbihjLGQsYSl7YXx8KGE9RSk7dmFyIGI9dGhpcyxlPUcoYixjKSxnPWIuZ2V0TGluZShjLmxpbmUpO2lmKG51bGwhPWcmJiFKKGIsYyxnKSl7dmFyIGY9YS5saW5lQ29tbWVudHx8ZS5saW5lQ29tbWVudDtpZihmKXt2YXIgbT1NYXRoLm1pbigwIT1cbmQuY2h8fGQubGluZT09Yy5saW5lP2QubGluZSsxOmQubGluZSxiLmxhc3RMaW5lKCkrMSksdj1udWxsPT1hLnBhZGRpbmc/XCIgXCI6YS5wYWRkaW5nLGs9YS5jb21tZW50QmxhbmtMaW5lc3x8Yy5saW5lPT1kLmxpbmU7Yi5vcGVyYXRpb24oZnVuY3Rpb24oKXtpZihhLmluZGVudCl7Zm9yKHZhciBxPW51bGwsaD1jLmxpbmU7aDxtOysraCl7dmFyIG49Yi5nZXRMaW5lKGgpO249LTE9PT1uLnNlYXJjaCh1KT9uOm4uc2xpY2UoMCxJKG4pKTtpZihudWxsPT1xfHxxLmxlbmd0aD5uLmxlbmd0aClxPW59Zm9yKGg9Yy5saW5lO2g8bTsrK2gpe249Yi5nZXRMaW5lKGgpO3ZhciB0PXEubGVuZ3RoO2lmKGt8fHUudGVzdChuKSluLnNsaWNlKDAsdCkhPXEmJih0PUkobikpLGIucmVwbGFjZVJhbmdlKHErZit2LGwoaCwwKSxsKGgsdCkpfX1lbHNlIGZvcihoPWMubGluZTtoPG07KytoKShrfHx1LnRlc3QoYi5nZXRMaW5lKGgpKSkmJmIucmVwbGFjZVJhbmdlKGYrdixsKGgsMCkpfSl9ZWxzZSBpZihhLmJsb2NrQ29tbWVudFN0YXJ0fHxcbmUuYmxvY2tDb21tZW50U3RhcnQpYS5mdWxsTGluZXM9ITAsYi5ibG9ja0NvbW1lbnQoYyxkLGEpfX0pO3IuZGVmaW5lRXh0ZW5zaW9uKFwiYmxvY2tDb21tZW50XCIsZnVuY3Rpb24oYyxkLGEpe2F8fChhPUUpO3ZhciBiPXRoaXMsZT1HKGIsYyksZz1hLmJsb2NrQ29tbWVudFN0YXJ0fHxlLmJsb2NrQ29tbWVudFN0YXJ0LGY9YS5ibG9ja0NvbW1lbnRFbmR8fGUuYmxvY2tDb21tZW50RW5kO2lmKCFnfHwhZikoYS5saW5lQ29tbWVudHx8ZS5saW5lQ29tbWVudCkmJjAhPWEuZnVsbExpbmVzJiZiLmxpbmVDb21tZW50KGMsZCxhKTtlbHNlIGlmKCEvXFxiY29tbWVudFxcYi8udGVzdChiLmdldFRva2VuVHlwZUF0KGwoYy5saW5lLDApKSkpe3ZhciBtPU1hdGgubWluKGQubGluZSxiLmxhc3RMaW5lKCkpO20hPWMubGluZSYmMD09ZC5jaCYmdS50ZXN0KGIuZ2V0TGluZShtKSkmJi0tbTt2YXIgdj1udWxsPT1hLnBhZGRpbmc/XCIgXCI6YS5wYWRkaW5nO2MubGluZT5tfHxiLm9wZXJhdGlvbihmdW5jdGlvbigpe2lmKDAhPVxuYS5mdWxsTGluZXMpe3ZhciBrPXUudGVzdChiLmdldExpbmUobSkpO2IucmVwbGFjZVJhbmdlKHYrZixsKG0pKTtiLnJlcGxhY2VSYW5nZShnK3YsbChjLmxpbmUsMCkpO3ZhciBxPWEuYmxvY2tDb21tZW50TGVhZHx8ZS5ibG9ja0NvbW1lbnRMZWFkO2lmKG51bGwhPXEpZm9yKHZhciBoPWMubGluZSsxO2g8PW07KytoKShoIT1tfHxrKSYmYi5yZXBsYWNlUmFuZ2UocSt2LGwoaCwwKSl9ZWxzZSBrPTA9PUsoYi5nZXRDdXJzb3IoXCJ0b1wiKSxkKSxxPSFiLnNvbWV0aGluZ1NlbGVjdGVkKCksYi5yZXBsYWNlUmFuZ2UoZixkKSxrJiZiLnNldFNlbGVjdGlvbihxP2Q6Yi5nZXRDdXJzb3IoXCJmcm9tXCIpLGQpLGIucmVwbGFjZVJhbmdlKGcsYyl9KX19KTtyLmRlZmluZUV4dGVuc2lvbihcInVuY29tbWVudFwiLGZ1bmN0aW9uKGMsZCxhKXthfHwoYT1FKTt2YXIgYj10aGlzLGU9RyhiLGMpLGc9TWF0aC5taW4oMCE9ZC5jaHx8ZC5saW5lPT1jLmxpbmU/ZC5saW5lOmQubGluZS0xLGIubGFzdExpbmUoKSksXG5mPU1hdGgubWluKGMubGluZSxnKSxtPWEubGluZUNvbW1lbnR8fGUubGluZUNvbW1lbnQsdj1bXSxrPW51bGw9PWEucGFkZGluZz9cIiBcIjphLnBhZGRpbmcscTthOmlmKG0pe2Zvcih2YXIgaD1mO2g8PWc7KytoKXt2YXIgbj1iLmdldExpbmUoaCksdD1uLmluZGV4T2YobSk7LTE8dCYmIS9jb21tZW50Ly50ZXN0KGIuZ2V0VG9rZW5UeXBlQXQobChoLHQrMSkpKSYmKHQ9LTEpO2lmKC0xPT10JiZ1LnRlc3QobikpYnJlYWsgYTtpZigtMTx0JiZ1LnRlc3Qobi5zbGljZSgwLHQpKSlicmVhayBhO3YucHVzaChuKX1iLm9wZXJhdGlvbihmdW5jdGlvbigpe2Zvcih2YXIgcD1mO3A8PWc7KytwKXt2YXIgQT12W3AtZl0seD1BLmluZGV4T2YobSksdz14K20ubGVuZ3RoOzA+eHx8KEEuc2xpY2Uodyx3K2subGVuZ3RoKT09ayYmKHcrPWsubGVuZ3RoKSxxPSEwLGIucmVwbGFjZVJhbmdlKFwiXCIsbChwLHgpLGwocCx3KSkpfX0pO2lmKHEpcmV0dXJuITB9dmFyIHk9YS5ibG9ja0NvbW1lbnRTdGFydHx8XG5lLmJsb2NrQ29tbWVudFN0YXJ0LHo9YS5ibG9ja0NvbW1lbnRFbmR8fGUuYmxvY2tDb21tZW50RW5kO2lmKCF5fHwheilyZXR1cm4hMTt2YXIgSD1hLmJsb2NrQ29tbWVudExlYWR8fGUuYmxvY2tDb21tZW50TGVhZCxDPWIuZ2V0TGluZShmKSxEPUMuaW5kZXhPZih5KTtpZigtMT09RClyZXR1cm4hMTt2YXIgRj1nPT1mP0M6Yi5nZXRMaW5lKGcpLEI9Ri5pbmRleE9mKHosZz09Zj9EK3kubGVuZ3RoOjApO2E9bChmLEQrMSk7ZT1sKGcsQisxKTtpZigtMT09Qnx8IS9jb21tZW50Ly50ZXN0KGIuZ2V0VG9rZW5UeXBlQXQoYSkpfHwhL2NvbW1lbnQvLnRlc3QoYi5nZXRUb2tlblR5cGVBdChlKSl8fC0xPGIuZ2V0UmFuZ2UoYSxlLFwiXFxuXCIpLmluZGV4T2YoeikpcmV0dXJuITE7ZT1DLmxhc3RJbmRleE9mKHksYy5jaCk7YT0tMT09ZT8tMTpDLnNsaWNlKDAsYy5jaCkuaW5kZXhPZih6LGUreS5sZW5ndGgpO2lmKC0xIT1lJiYtMSE9YSYmYSt6Lmxlbmd0aCE9Yy5jaClyZXR1cm4hMTthPUYuaW5kZXhPZih6LFxuZC5jaCk7Yz1GLnNsaWNlKGQuY2gpLmxhc3RJbmRleE9mKHksYS1kLmNoKTtlPS0xPT1hfHwtMT09Yz8tMTpkLmNoK2M7aWYoLTEhPWEmJi0xIT1lJiZlIT1kLmNoKXJldHVybiExO2Iub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Yi5yZXBsYWNlUmFuZ2UoXCJcIixsKGcsQi0oayYmRi5zbGljZShCLWsubGVuZ3RoLEIpPT1rP2subGVuZ3RoOjApKSxsKGcsQit6Lmxlbmd0aCkpO3ZhciBwPUQreS5sZW5ndGg7ayYmQy5zbGljZShwLHAray5sZW5ndGgpPT1rJiYocCs9ay5sZW5ndGgpO2IucmVwbGFjZVJhbmdlKFwiXCIsbChmLEQpLGwoZixwKSk7aWYoSClmb3IocD1mKzE7cDw9ZzsrK3Ape3ZhciBBPWIuZ2V0TGluZShwKSx4PUEuaW5kZXhPZihIKTtpZigtMSE9eCYmIXUudGVzdChBLnNsaWNlKDAseCkpKXt2YXIgdz14K0gubGVuZ3RoO2smJkEuc2xpY2Uodyx3K2subGVuZ3RoKT09ayYmKHcrPWsubGVuZ3RoKTtiLnJlcGxhY2VSYW5nZShcIlwiLGwocCx4KSxsKHAsdykpfX19KTtyZXR1cm4hMH0pfSk7XG4iLCIoZnVuY3Rpb24obSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bShyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sbSk6bShDb2RlTWlycm9yKX0pKGZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHEoYSxiKXtmb3IodmFyIGw9MCxlPWEubGVuZ3RoO2w8ZTsrK2wpYihhW2xdKX1mdW5jdGlvbiB0KGEsYixsLGUpe3ZhciBjPWEuZ2V0Q3Vyc29yKCksZD1sKGEsYyk7aWYoIS9cXGIoPzpzdHJpbmd8Y29tbWVudClcXGIvLnRlc3QoZC50eXBlKSl7dmFyIGc9bS5pbm5lck1vZGUoYS5nZXRNb2RlKCksZC5zdGF0ZSk7aWYoXCJqc29uXCIhPT1nLm1vZGUuaGVscGVyVHlwZSl7ZC5zdGF0ZT1nLnN0YXRlOy9eW1xcdyRfXSokLy50ZXN0KGQuc3RyaW5nKT9kLmVuZD5jLmNoJiYoZC5lbmQ9Yy5jaCxkLnN0cmluZz1kLnN0cmluZy5zbGljZSgwLFxuYy5jaC1kLnN0YXJ0KSk6ZD17c3RhcnQ6Yy5jaCxlbmQ6Yy5jaCxzdHJpbmc6XCJcIixzdGF0ZTpkLnN0YXRlLHR5cGU6XCIuXCI9PWQuc3RyaW5nP1wicHJvcGVydHlcIjpudWxsfTtmb3IoZz1kO1wicHJvcGVydHlcIj09Zy50eXBlOyl7Zz1sKGEscihjLmxpbmUsZy5zdGFydCkpO2lmKFwiLlwiIT1nLnN0cmluZylyZXR1cm47Zz1sKGEscihjLmxpbmUsZy5zdGFydCkpO2lmKCFwKXZhciBwPVtdO3AucHVzaChnKX1yZXR1cm57bGlzdDp1KGQscCxiLGUpLGZyb206cihjLmxpbmUsZC5zdGFydCksdG86cihjLmxpbmUsZC5lbmQpfX19fWZ1bmN0aW9uIHYoYSxiKXthPWEuZ2V0VG9rZW5BdChiKTtiLmNoPT1hLnN0YXJ0KzEmJlwiLlwiPT1hLnN0cmluZy5jaGFyQXQoMCk/KGEuZW5kPWEuc3RhcnQsYS5zdHJpbmc9XCIuXCIsYS50eXBlPVwicHJvcGVydHlcIik6L15cXC5bXFx3JF9dKiQvLnRlc3QoYS5zdHJpbmcpJiYoYS50eXBlPVwicHJvcGVydHlcIixhLnN0YXJ0KyssYS5zdHJpbmc9YS5zdHJpbmcucmVwbGFjZSgvXFwuLyxcblwiXCIpKTtyZXR1cm4gYX1mdW5jdGlvbiB1KGEsYixsLGUpe2Z1bmN0aW9uIGMoaCl7dmFyIGs7aWYoaz0wPT1oLmxhc3RJbmRleE9mKHAsMCkpe2E6aWYoQXJyYXkucHJvdG90eXBlLmluZGV4T2Ypaz0tMSE9Zy5pbmRleE9mKGgpO2Vsc2V7Zm9yKGs9Zy5sZW5ndGg7ay0tOylpZihnW2tdPT09aCl7az0hMDticmVhayBhfWs9ITF9az0ha31rJiZnLnB1c2goaCl9ZnVuY3Rpb24gZChoKXtcInN0cmluZ1wiPT10eXBlb2YgaD9xKHcsYyk6aCBpbnN0YW5jZW9mIEFycmF5P3EoeCxjKTpoIGluc3RhbmNlb2YgRnVuY3Rpb24mJnEoeSxjKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmT2JqZWN0LmdldFByb3RvdHlwZU9mKWZvcig7aDtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKSlPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoKS5mb3JFYWNoKGMpO2Vsc2UgZm9yKHZhciBrIGluIGgpYyhrKX12YXIgZz1bXSxwPWEuc3RyaW5nLG49ZSYmZS5nbG9iYWxTY29wZXx8d2luZG93O2lmKGImJlxuYi5sZW5ndGgpe2E9Yi5wb3AoKTt2YXIgZjthLnR5cGUmJjA9PT1hLnR5cGUuaW5kZXhPZihcInZhcmlhYmxlXCIpPyhlJiZlLmFkZGl0aW9uYWxDb250ZXh0JiYoZj1lLmFkZGl0aW9uYWxDb250ZXh0W2Euc3RyaW5nXSksZSYmITE9PT1lLnVzZUdsb2JhbFNjb3BlfHwoZj1mfHxuW2Euc3RyaW5nXSkpOlwic3RyaW5nXCI9PWEudHlwZT9mPVwiXCI6XCJhdG9tXCI9PWEudHlwZT9mPTE6XCJmdW5jdGlvblwiPT1hLnR5cGUmJihudWxsPT1uLmpRdWVyeXx8XCIkXCIhPWEuc3RyaW5nJiZcImpRdWVyeVwiIT1hLnN0cmluZ3x8XCJmdW5jdGlvblwiIT10eXBlb2Ygbi5qUXVlcnk/bnVsbCE9bi5fJiZcIl9cIj09YS5zdHJpbmcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4uXyYmKGY9bi5fKCkpOmY9bi5qUXVlcnkoKSk7Zm9yKDtudWxsIT1mJiZiLmxlbmd0aDspZj1mW2IucG9wKCkuc3RyaW5nXTtudWxsIT1mJiZkKGYpfWVsc2V7Zm9yKGI9YS5zdGF0ZS5sb2NhbFZhcnM7YjtiPWIubmV4dCljKGIubmFtZSk7Zm9yKGY9YS5zdGF0ZS5jb250ZXh0O2Y7Zj1cbmYucHJldilmb3IoYj1mLnZhcnM7YjtiPWIubmV4dCljKGIubmFtZSk7Zm9yKGI9YS5zdGF0ZS5nbG9iYWxWYXJzO2I7Yj1iLm5leHQpYyhiLm5hbWUpO2lmKGUmJm51bGwhPWUuYWRkaXRpb25hbENvbnRleHQpZm9yKHZhciB6IGluIGUuYWRkaXRpb25hbENvbnRleHQpYyh6KTtlJiYhMT09PWUudXNlR2xvYmFsU2NvcGV8fGQobik7cShsLGMpfXJldHVybiBnfXZhciByPW0uUG9zO20ucmVnaXN0ZXJIZWxwZXIoXCJoaW50XCIsXCJqYXZhc2NyaXB0XCIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gdChhLEEsZnVuY3Rpb24obCxlKXtyZXR1cm4gbC5nZXRUb2tlbkF0KGUpfSxiKX0pO20ucmVnaXN0ZXJIZWxwZXIoXCJoaW50XCIsXCJjb2ZmZWVzY3JpcHRcIixmdW5jdGlvbihhLGIpe3JldHVybiB0KGEsQix2LGIpfSk7dmFyIHc9XCJjaGFyQXQgY2hhckNvZGVBdCBpbmRleE9mIGxhc3RJbmRleE9mIHN1YnN0cmluZyBzdWJzdHIgc2xpY2UgdHJpbSB0cmltTGVmdCB0cmltUmlnaHQgdG9VcHBlckNhc2UgdG9Mb3dlckNhc2Ugc3BsaXQgY29uY2F0IG1hdGNoIHJlcGxhY2Ugc2VhcmNoXCIuc3BsaXQoXCIgXCIpLFxueD1cImxlbmd0aCBjb25jYXQgam9pbiBzcGxpY2UgcHVzaCBwb3Agc2hpZnQgdW5zaGlmdCBzbGljZSByZXZlcnNlIHNvcnQgaW5kZXhPZiBsYXN0SW5kZXhPZiBldmVyeSBzb21lIGZpbHRlciBmb3JFYWNoIG1hcCByZWR1Y2UgcmVkdWNlUmlnaHQgXCIuc3BsaXQoXCIgXCIpLHk9W1wicHJvdG90eXBlXCIsXCJhcHBseVwiLFwiY2FsbFwiLFwiYmluZFwiXSxBPVwiYnJlYWsgY2FzZSBjYXRjaCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWJ1Z2dlciBkZWZhdWx0IGRlbGV0ZSBkbyBlbHNlIGV4cG9ydCBleHRlbmRzIGZhbHNlIGZpbmFsbHkgZm9yIGZ1bmN0aW9uIGlmIGluIGltcG9ydCBpbnN0YW5jZW9mIG5ldyBudWxsIHJldHVybiBzdXBlciBzd2l0Y2ggdGhpcyB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdmFyIHZvaWQgd2hpbGUgd2l0aCB5aWVsZFwiLnNwbGl0KFwiIFwiKSxCPVwiYW5kIGJyZWFrIGNhdGNoIGNsYXNzIGNvbnRpbnVlIGRlbGV0ZSBkbyBlbHNlIGV4dGVuZHMgZmFsc2UgZmluYWxseSBmb3IgaWYgaW4gaW5zdGFuY2VvZiBpc250IG5ldyBubyBub3QgbnVsbCBvZiBvZmYgb24gb3IgcmV0dXJuIHN3aXRjaCB0aGVuIHRocm93IHRydWUgdHJ5IHR5cGVvZiB1bnRpbCB2b2lkIHdoaWxlIHdpdGggeWVzXCIuc3BsaXQoXCIgXCIpfSk7XG4iLCIoZnVuY3Rpb24oaCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/aChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0saCk6aChDb2RlTWlycm9yKX0pKGZ1bmN0aW9uKGgpe2Z1bmN0aW9uIEIoYSxiKXt0aGlzLmNtPWE7dGhpcy5vcHRpb25zPWI7dGhpcy53aWRnZXQ9bnVsbDt0aGlzLnRpY2s9dGhpcy5kZWJvdW5jZT0wO3RoaXMuc3RhcnRQb3M9dGhpcy5jbS5nZXRDdXJzb3IoXCJzdGFydFwiKTt0aGlzLnN0YXJ0TGVuPXRoaXMuY20uZ2V0TGluZSh0aGlzLnN0YXJ0UG9zLmxpbmUpLmxlbmd0aC10aGlzLmNtLmdldFNlbGVjdGlvbigpLmxlbmd0aDtpZih0aGlzLm9wdGlvbnMudXBkYXRlT25DdXJzb3JBY3Rpdml0eSl7dmFyIGM9dGhpczthLm9uKFwiY3Vyc29yQWN0aXZpdHlcIix0aGlzLmFjdGl2aXR5RnVuYz1cbmZ1bmN0aW9uKCl7Yy5jdXJzb3JBY3Rpdml0eSgpfSl9fWZ1bmN0aW9uIEsoYSxiKXtmdW5jdGlvbiBjKHIsZyl7dmFyIG09XCJzdHJpbmdcIiE9dHlwZW9mIGc/ZnVuY3Rpb24oayl7cmV0dXJuIGcoayxiKX06ZC5oYXNPd25Qcm9wZXJ0eShnKT9kW2ddOmc7cFtyXT1tfXZhciBkPXtVcDpmdW5jdGlvbigpe2IubW92ZUZvY3VzKC0xKX0sRG93bjpmdW5jdGlvbigpe2IubW92ZUZvY3VzKDEpfSxQYWdlVXA6ZnVuY3Rpb24oKXtiLm1vdmVGb2N1cygtYi5tZW51U2l6ZSgpKzEsITApfSxQYWdlRG93bjpmdW5jdGlvbigpe2IubW92ZUZvY3VzKGIubWVudVNpemUoKS0xLCEwKX0sSG9tZTpmdW5jdGlvbigpe2Iuc2V0Rm9jdXMoMCl9LEVuZDpmdW5jdGlvbigpe2Iuc2V0Rm9jdXMoYi5sZW5ndGgtMSl9LEVudGVyOmIucGljayxUYWI6Yi5waWNrLEVzYzpiLmNsb3NlfTsvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSkmJihkW1wiQ3RybC1QXCJdPWZ1bmN0aW9uKCl7Yi5tb3ZlRm9jdXMoLTEpfSxcbmRbXCJDdHJsLU5cIl09ZnVuY3Rpb24oKXtiLm1vdmVGb2N1cygxKX0pO3ZhciBlPWEub3B0aW9ucy5jdXN0b21LZXlzLHA9ZT97fTpkO2lmKGUpZm9yKHZhciBmIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShmKSYmYyhmLGVbZl0pO2lmKGE9YS5vcHRpb25zLmV4dHJhS2V5cylmb3IoZiBpbiBhKWEuaGFzT3duUHJvcGVydHkoZikmJmMoZixhW2ZdKTtyZXR1cm4gcH1mdW5jdGlvbiBDKGEsYil7Zm9yKDtiJiZiIT1hOyl7aWYoXCJMSVwiPT09Yi5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpJiZiLnBhcmVudE5vZGU9PWEpcmV0dXJuIGI7Yj1iLnBhcmVudE5vZGV9fWZ1bmN0aW9uIEQoYSxiKXt0aGlzLmlkPVwiY20tY29tcGxldGUtXCIrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgxRTYpKTt0aGlzLmNvbXBsZXRpb249YTt0aGlzLmRhdGE9Yjt0aGlzLnBpY2tlZD0hMTt2YXIgYz10aGlzLGQ9YS5jbSxlPWQuZ2V0SW5wdXRGaWVsZCgpLm93bmVyRG9jdW1lbnQscD1lLmRlZmF1bHRWaWV3fHxlLnBhcmVudFdpbmRvdyxcbmY9dGhpcy5oaW50cz1lLmNyZWF0ZUVsZW1lbnQoXCJ1bFwiKTtmLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImxpc3Rib3hcIik7Zi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsXCJ0cnVlXCIpO2YuaWQ9dGhpcy5pZDtmLmNsYXNzTmFtZT1cIkNvZGVNaXJyb3ItaGludHMgXCIrYS5jbS5vcHRpb25zLnRoZW1lO3RoaXMuc2VsZWN0ZWRIaW50PWIuc2VsZWN0ZWRIaW50fHwwO2Zvcih2YXIgcj1iLmxpc3QsZz0wO2c8ci5sZW5ndGg7KytnKXt2YXIgbT1mLmFwcGVuZENoaWxkKGUuY3JlYXRlRWxlbWVudChcImxpXCIpKSxrPXJbZ10scT1cIkNvZGVNaXJyb3ItaGludFwiKyhnIT10aGlzLnNlbGVjdGVkSGludD9cIlwiOlwiIENvZGVNaXJyb3ItaGludC1hY3RpdmVcIik7bnVsbCE9ay5jbGFzc05hbWUmJihxPWsuY2xhc3NOYW1lK1wiIFwiK3EpO20uY2xhc3NOYW1lPXE7Zz09dGhpcy5zZWxlY3RlZEhpbnQmJm0uc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLFwidHJ1ZVwiKTttLmlkPXRoaXMuaWQrXCItXCIrZztcbm0uc2V0QXR0cmlidXRlKFwicm9sZVwiLFwib3B0aW9uXCIpO2sucmVuZGVyP2sucmVuZGVyKG0sYixrKTptLmFwcGVuZENoaWxkKGUuY3JlYXRlVGV4dE5vZGUoay5kaXNwbGF5VGV4dHx8KFwic3RyaW5nXCI9PXR5cGVvZiBrP2s6ay50ZXh0KSkpO20uaGludElkPWd9dmFyIG49YS5vcHRpb25zLmNvbnRhaW5lcnx8ZS5ib2R5O2c9ZC5jdXJzb3JDb29yZHMoYS5vcHRpb25zLmFsaWduV2l0aFdvcmQ/Yi5mcm9tOm51bGwpO3ZhciB3PWcubGVmdCx4PWcuYm90dG9tLEU9ITA7cT1tPTA7aWYobiE9PWUuYm9keSl7az0tMSE9PVtcImFic29sdXRlXCIsXCJyZWxhdGl2ZVwiLFwiZml4ZWRcIl0uaW5kZXhPZihwLmdldENvbXB1dGVkU3R5bGUobikucG9zaXRpb24pP246bi5vZmZzZXRQYXJlbnQ7cT1rLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciB0PWUuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTttPXEubGVmdC10LmxlZnQtay5zY3JvbGxMZWZ0O3E9cS50b3AtdC50b3Atay5zY3JvbGxUb3B9Zi5zdHlsZS5sZWZ0PVxudy1tK1wicHhcIjtmLnN0eWxlLnRvcD14LXErXCJweFwiO2s9cC5pbm5lcldpZHRofHxNYXRoLm1heChlLmJvZHkub2Zmc2V0V2lkdGgsZS5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgpO3Q9cC5pbm5lckhlaWdodHx8TWF0aC5tYXgoZS5ib2R5Lm9mZnNldEhlaWdodCxlLmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQpO24uYXBwZW5kQ2hpbGQoZik7ZC5nZXRJbnB1dEZpZWxkKCkuc2V0QXR0cmlidXRlKFwiYXJpYS1hdXRvY29tcGxldGVcIixcImxpc3RcIik7ZC5nZXRJbnB1dEZpZWxkKCkuc2V0QXR0cmlidXRlKFwiYXJpYS1vd25zXCIsdGhpcy5pZCk7ZC5nZXRJbnB1dEZpZWxkKCkuc2V0QXR0cmlidXRlKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsdGhpcy5pZCtcIi1cIit0aGlzLnNlbGVjdGVkSGludCk7bj1hLm9wdGlvbnMubW92ZU9uT3ZlcmxhcD9mLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOm5ldyBET01SZWN0O3ZhciBGPWEub3B0aW9ucy5wYWRkaW5nRm9yU2Nyb2xsYmFyP2Yuc2Nyb2xsSGVpZ2h0PlxuZi5jbGllbnRIZWlnaHQrMTohMSx1O3NldFRpbWVvdXQoZnVuY3Rpb24oKXt1PWQuZ2V0U2Nyb2xsSW5mbygpfSk7aWYoMDxuLmJvdHRvbS10KXt2YXIgeT1uLmJvdHRvbS1uLnRvcCx6PW4udG9wLShnLmJvdHRvbS1nLnRvcCktMjt0LW4udG9wPHo/KHk+eiYmKGYuc3R5bGUuaGVpZ2h0PSh5PXopK1wicHhcIiksZi5zdHlsZS50b3A9KHg9Zy50b3AteSkrcStcInB4XCIsRT0hMSk6Zi5zdHlsZS5oZWlnaHQ9dC1uLnRvcC0yK1wicHhcIn1xPW4ucmlnaHQtaztGJiYocSs9ZC5kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoKTswPHEmJihuLnJpZ2h0LW4ubGVmdD5rJiYoZi5zdHlsZS53aWR0aD1rLTUrXCJweFwiLHEtPW4ucmlnaHQtbi5sZWZ0LWspLGYuc3R5bGUubGVmdD0odz1NYXRoLm1heChnLmxlZnQtcS1tLDApKStcInB4XCIpO2lmKEYpZm9yKGc9Zi5maXJzdENoaWxkO2c7Zz1nLm5leHRTaWJsaW5nKWcuc3R5bGUucGFkZGluZ1JpZ2h0PWQuZGlzcGxheS5uYXRpdmVCYXJXaWR0aCtcInB4XCI7ZC5hZGRLZXlNYXAodGhpcy5rZXlNYXA9XG5LKGEse21vdmVGb2N1czpmdW5jdGlvbihsLHYpe2MuY2hhbmdlQWN0aXZlKGMuc2VsZWN0ZWRIaW50K2wsdil9LHNldEZvY3VzOmZ1bmN0aW9uKGwpe2MuY2hhbmdlQWN0aXZlKGwpfSxtZW51U2l6ZTpmdW5jdGlvbigpe3JldHVybiBjLnNjcmVlbkFtb3VudCgpfSxsZW5ndGg6ci5sZW5ndGgsY2xvc2U6ZnVuY3Rpb24oKXthLmNsb3NlKCl9LHBpY2s6ZnVuY3Rpb24oKXtjLnBpY2soKX0sZGF0YTpifSkpO2lmKGEub3B0aW9ucy5jbG9zZU9uVW5mb2N1cyl7dmFyIEc7ZC5vbihcImJsdXJcIix0aGlzLm9uQmx1cj1mdW5jdGlvbigpe0c9c2V0VGltZW91dChmdW5jdGlvbigpe2EuY2xvc2UoKX0sMTAwKX0pO2Qub24oXCJmb2N1c1wiLHRoaXMub25Gb2N1cz1mdW5jdGlvbigpe2NsZWFyVGltZW91dChHKX0pfWQub24oXCJzY3JvbGxcIix0aGlzLm9uU2Nyb2xsPWZ1bmN0aW9uKCl7dmFyIGw9ZC5nZXRTY3JvbGxJbmZvKCksdj1kLmdldFdyYXBwZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG51fHwodT1kLmdldFNjcm9sbEluZm8oKSk7dmFyIEg9eCt1LnRvcC1sLnRvcCxBPUgtKHAucGFnZVlPZmZzZXR8fChlLmRvY3VtZW50RWxlbWVudHx8ZS5ib2R5KS5zY3JvbGxUb3ApO0V8fChBKz1mLm9mZnNldEhlaWdodCk7aWYoQTw9di50b3B8fEE+PXYuYm90dG9tKXJldHVybiBhLmNsb3NlKCk7Zi5zdHlsZS50b3A9SCtcInB4XCI7Zi5zdHlsZS5sZWZ0PXcrdS5sZWZ0LWwubGVmdCtcInB4XCJ9KTtoLm9uKGYsXCJkYmxjbGlja1wiLGZ1bmN0aW9uKGwpeyhsPUMoZixsLnRhcmdldHx8bC5zcmNFbGVtZW50KSkmJm51bGwhPWwuaGludElkJiYoYy5jaGFuZ2VBY3RpdmUobC5oaW50SWQpLGMucGljaygpKX0pO2gub24oZixcImNsaWNrXCIsZnVuY3Rpb24obCl7KGw9QyhmLGwudGFyZ2V0fHxsLnNyY0VsZW1lbnQpKSYmbnVsbCE9bC5oaW50SWQmJihjLmNoYW5nZUFjdGl2ZShsLmhpbnRJZCksYS5vcHRpb25zLmNvbXBsZXRlT25TaW5nbGVDbGljayYmYy5waWNrKCkpfSk7aC5vbihmLFwibW91c2Vkb3duXCIsXG5mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvY3VzKCl9LDIwKX0pO2c9dGhpcy5nZXRTZWxlY3RlZEhpbnRSYW5nZSgpOzA9PT1nLmZyb20mJjA9PT1nLnRvfHx0aGlzLnNjcm9sbFRvQWN0aXZlKCk7aC5zaWduYWwoYixcInNlbGVjdFwiLHJbdGhpcy5zZWxlY3RlZEhpbnRdLGYuY2hpbGROb2Rlc1t0aGlzLnNlbGVjdGVkSGludF0pO3JldHVybiEwfWZ1bmN0aW9uIEwoYSxiKXtpZighYS5zb21ldGhpbmdTZWxlY3RlZCgpKXJldHVybiBiO2E9W107Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspYltjXS5zdXBwb3J0c1NlbGVjdGlvbiYmYS5wdXNoKGJbY10pO3JldHVybiBhfWZ1bmN0aW9uIEkoYSxiLGMsZCl7YS5hc3luYz9hKGIsZCxjKTooYT1hKGIsYykpJiZhLnRoZW4/YS50aGVuKGQpOmQoYSl9aC5zaG93SGludD1mdW5jdGlvbihhLGIsYyl7aWYoIWIpcmV0dXJuIGEuc2hvd0hpbnQoYyk7YyYmYy5hc3luYyYmKGIuYXN5bmM9ITApO2I9e2hpbnQ6Yn07aWYoYylmb3IodmFyIGQgaW4gYyliW2RdPVxuY1tkXTtyZXR1cm4gYS5zaG93SGludChiKX07aC5kZWZpbmVFeHRlbnNpb24oXCJzaG93SGludFwiLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0Q3Vyc29yKFwic3RhcnRcIiksYz10aGlzLm9wdGlvbnMuaGludE9wdGlvbnMsZD17fSxlO2ZvcihlIGluIEopZFtlXT1KW2VdO2lmKGMpZm9yKGUgaW4gYyl2b2lkIDAhPT1jW2VdJiYoZFtlXT1jW2VdKTtpZihhKWZvcihlIGluIGEpdm9pZCAwIT09YVtlXSYmKGRbZV09YVtlXSk7ZC5oaW50LnJlc29sdmUmJihkLmhpbnQ9ZC5oaW50LnJlc29sdmUodGhpcyxiKSk7YT1kO2I9dGhpcy5saXN0U2VsZWN0aW9ucygpO2lmKCEoMTxiLmxlbmd0aCkpe2lmKHRoaXMuc29tZXRoaW5nU2VsZWN0ZWQoKSl7aWYoIWEuaGludC5zdXBwb3J0c1NlbGVjdGlvbilyZXR1cm47Zm9yKGU9MDtlPGIubGVuZ3RoO2UrKylpZihiW2VdLmhlYWQubGluZSE9YltlXS5hbmNob3IubGluZSlyZXR1cm59dGhpcy5zdGF0ZS5jb21wbGV0aW9uQWN0aXZlJiZ0aGlzLnN0YXRlLmNvbXBsZXRpb25BY3RpdmUuY2xvc2UoKTtcbmI9dGhpcy5zdGF0ZS5jb21wbGV0aW9uQWN0aXZlPW5ldyBCKHRoaXMsYSk7Yi5vcHRpb25zLmhpbnQmJihoLnNpZ25hbCh0aGlzLFwic3RhcnRDb21wbGV0aW9uXCIsdGhpcyksYi51cGRhdGUoITApKX19KTtoLmRlZmluZUV4dGVuc2lvbihcImNsb3NlSGludFwiLGZ1bmN0aW9uKCl7dGhpcy5zdGF0ZS5jb21wbGV0aW9uQWN0aXZlJiZ0aGlzLnN0YXRlLmNvbXBsZXRpb25BY3RpdmUuY2xvc2UoKX0pO3ZhciBNPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKGEpe3JldHVybiBzZXRUaW1lb3V0KGEsMUUzLzYwKX0sTj13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNsZWFyVGltZW91dDtCLnByb3RvdHlwZT17Y2xvc2U6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZSgpJiYodGhpcy50aWNrPXRoaXMuY20uc3RhdGUuY29tcGxldGlvbkFjdGl2ZT1udWxsLHRoaXMub3B0aW9ucy51cGRhdGVPbkN1cnNvckFjdGl2aXR5JiZ0aGlzLmNtLm9mZihcImN1cnNvckFjdGl2aXR5XCIsXG50aGlzLmFjdGl2aXR5RnVuYyksdGhpcy53aWRnZXQmJnRoaXMuZGF0YSYmaC5zaWduYWwodGhpcy5kYXRhLFwiY2xvc2VcIiksdGhpcy53aWRnZXQmJnRoaXMud2lkZ2V0LmNsb3NlKCksaC5zaWduYWwodGhpcy5jbSxcImVuZENvbXBsZXRpb25cIix0aGlzLmNtKSl9LGFjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtLnN0YXRlLmNvbXBsZXRpb25BY3RpdmU9PXRoaXN9LHBpY2s6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxpc3RbYl0sZD10aGlzO3RoaXMuY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Yy5oaW50P2MuaGludChkLmNtLGEsYyk6ZC5jbS5yZXBsYWNlUmFuZ2UoXCJzdHJpbmdcIj09dHlwZW9mIGM/YzpjLnRleHQsYy5mcm9tfHxhLmZyb20sYy50b3x8YS50byxcImNvbXBsZXRlXCIpO2guc2lnbmFsKGEsXCJwaWNrXCIsYyk7ZC5jbS5zY3JvbGxJbnRvVmlldygpfSk7dGhpcy5vcHRpb25zLmNsb3NlT25QaWNrJiZ0aGlzLmNsb3NlKCl9LGN1cnNvckFjdGl2aXR5OmZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZSYmXG4oTih0aGlzLmRlYm91bmNlKSx0aGlzLmRlYm91bmNlPTApO3ZhciBhPXRoaXMuc3RhcnRQb3M7dGhpcy5kYXRhJiYoYT10aGlzLmRhdGEuZnJvbSk7dmFyIGI9dGhpcy5jbS5nZXRDdXJzb3IoKSxjPXRoaXMuY20uZ2V0TGluZShiLmxpbmUpO2lmKGIubGluZSE9dGhpcy5zdGFydFBvcy5saW5lfHxjLmxlbmd0aC1iLmNoIT10aGlzLnN0YXJ0TGVuLXRoaXMuc3RhcnRQb3MuY2h8fGIuY2g8YS5jaHx8dGhpcy5jbS5zb21ldGhpbmdTZWxlY3RlZCgpfHwhYi5jaHx8dGhpcy5vcHRpb25zLmNsb3NlQ2hhcmFjdGVycy50ZXN0KGMuY2hhckF0KGIuY2gtMSkpKXRoaXMuY2xvc2UoKTtlbHNle3ZhciBkPXRoaXM7dGhpcy5kZWJvdW5jZT1NKGZ1bmN0aW9uKCl7ZC51cGRhdGUoKX0pO3RoaXMud2lkZ2V0JiZ0aGlzLndpZGdldC5kaXNhYmxlKCl9fSx1cGRhdGU6ZnVuY3Rpb24oYSl7aWYobnVsbCE9dGhpcy50aWNrKXt2YXIgYj10aGlzLGM9Kyt0aGlzLnRpY2s7SSh0aGlzLm9wdGlvbnMuaGludCxcbnRoaXMuY20sdGhpcy5vcHRpb25zLGZ1bmN0aW9uKGQpe2IudGljaz09YyYmYi5maW5pc2hVcGRhdGUoZCxhKX0pfX0sZmluaXNoVXBkYXRlOmZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhJiZoLnNpZ25hbCh0aGlzLmRhdGEsXCJ1cGRhdGVcIik7Yj10aGlzLndpZGdldCYmdGhpcy53aWRnZXQucGlja2VkfHxiJiZ0aGlzLm9wdGlvbnMuY29tcGxldGVTaW5nbGU7dGhpcy53aWRnZXQmJnRoaXMud2lkZ2V0LmNsb3NlKCk7KHRoaXMuZGF0YT1hKSYmYS5saXN0Lmxlbmd0aCYmKGImJjE9PWEubGlzdC5sZW5ndGg/dGhpcy5waWNrKGEsMCk6KHRoaXMud2lkZ2V0PW5ldyBEKHRoaXMsYSksaC5zaWduYWwoYSxcInNob3duXCIpKSl9fTtELnByb3RvdHlwZT17Y2xvc2U6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbXBsZXRpb24ud2lkZ2V0PT10aGlzKXt0aGlzLmNvbXBsZXRpb24ud2lkZ2V0PW51bGw7dGhpcy5oaW50cy5wYXJlbnROb2RlJiZ0aGlzLmhpbnRzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5oaW50cyk7XG50aGlzLmNvbXBsZXRpb24uY20ucmVtb3ZlS2V5TWFwKHRoaXMua2V5TWFwKTt2YXIgYT10aGlzLmNvbXBsZXRpb24uY20uZ2V0SW5wdXRGaWVsZCgpO2EucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIpO2EucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1vd25zXCIpO2E9dGhpcy5jb21wbGV0aW9uLmNtO3RoaXMuY29tcGxldGlvbi5vcHRpb25zLmNsb3NlT25VbmZvY3VzJiYoYS5vZmYoXCJibHVyXCIsdGhpcy5vbkJsdXIpLGEub2ZmKFwiZm9jdXNcIix0aGlzLm9uRm9jdXMpKTthLm9mZihcInNjcm9sbFwiLHRoaXMub25TY3JvbGwpfX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuY29tcGxldGlvbi5jbS5yZW1vdmVLZXlNYXAodGhpcy5rZXlNYXApO3ZhciBhPXRoaXM7dGhpcy5rZXlNYXA9e0VudGVyOmZ1bmN0aW9uKCl7YS5waWNrZWQ9ITB9fTt0aGlzLmNvbXBsZXRpb24uY20uYWRkS2V5TWFwKHRoaXMua2V5TWFwKX0scGljazpmdW5jdGlvbigpe3RoaXMuY29tcGxldGlvbi5waWNrKHRoaXMuZGF0YSxcbnRoaXMuc2VsZWN0ZWRIaW50KX0sY2hhbmdlQWN0aXZlOmZ1bmN0aW9uKGEsYil7YT49dGhpcy5kYXRhLmxpc3QubGVuZ3RoP2E9Yj90aGlzLmRhdGEubGlzdC5sZW5ndGgtMTowOjA+YSYmKGE9Yj8wOnRoaXMuZGF0YS5saXN0Lmxlbmd0aC0xKTtpZih0aGlzLnNlbGVjdGVkSGludCE9YSl7aWYoYj10aGlzLmhpbnRzLmNoaWxkTm9kZXNbdGhpcy5zZWxlY3RlZEhpbnRdKWIuY2xhc3NOYW1lPWIuY2xhc3NOYW1lLnJlcGxhY2UoXCIgQ29kZU1pcnJvci1oaW50LWFjdGl2ZVwiLFwiXCIpLGIucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiKTtiPXRoaXMuaGludHMuY2hpbGROb2Rlc1t0aGlzLnNlbGVjdGVkSGludD1hXTtiLmNsYXNzTmFtZSs9XCIgQ29kZU1pcnJvci1oaW50LWFjdGl2ZVwiO2Iuc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLFwidHJ1ZVwiKTt0aGlzLmNvbXBsZXRpb24uY20uZ2V0SW5wdXRGaWVsZCgpLnNldEF0dHJpYnV0ZShcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLFxuYi5pZCk7dGhpcy5zY3JvbGxUb0FjdGl2ZSgpO2guc2lnbmFsKHRoaXMuZGF0YSxcInNlbGVjdFwiLHRoaXMuZGF0YS5saXN0W3RoaXMuc2VsZWN0ZWRIaW50XSxiKX19LHNjcm9sbFRvQWN0aXZlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3RlZEhpbnRSYW5nZSgpLGI9dGhpcy5oaW50cy5jaGlsZE5vZGVzW2EuZnJvbV07YT10aGlzLmhpbnRzLmNoaWxkTm9kZXNbYS50b107dmFyIGM9dGhpcy5oaW50cy5maXJzdENoaWxkO2Iub2Zmc2V0VG9wPHRoaXMuaGludHMuc2Nyb2xsVG9wP3RoaXMuaGludHMuc2Nyb2xsVG9wPWIub2Zmc2V0VG9wLWMub2Zmc2V0VG9wOmEub2Zmc2V0VG9wK2Eub2Zmc2V0SGVpZ2h0PnRoaXMuaGludHMuc2Nyb2xsVG9wK3RoaXMuaGludHMuY2xpZW50SGVpZ2h0JiYodGhpcy5oaW50cy5zY3JvbGxUb3A9YS5vZmZzZXRUb3ArYS5vZmZzZXRIZWlnaHQtdGhpcy5oaW50cy5jbGllbnRIZWlnaHQrYy5vZmZzZXRUb3ApfSxzY3JlZW5BbW91bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLmhpbnRzLmNsaWVudEhlaWdodC9cbnRoaXMuaGludHMuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQpfHwxfSxnZXRTZWxlY3RlZEhpbnRSYW5nZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY29tcGxldGlvbi5vcHRpb25zLnNjcm9sbE1hcmdpbnx8MDtyZXR1cm57ZnJvbTpNYXRoLm1heCgwLHRoaXMuc2VsZWN0ZWRIaW50LWEpLHRvOk1hdGgubWluKHRoaXMuZGF0YS5saXN0Lmxlbmd0aC0xLHRoaXMuc2VsZWN0ZWRIaW50K2EpfX19O2gucmVnaXN0ZXJIZWxwZXIoXCJoaW50XCIsXCJhdXRvXCIse3Jlc29sdmU6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldEhlbHBlcnMoYixcImhpbnRcIiksZDtyZXR1cm4gYy5sZW5ndGg/KGE9ZnVuY3Rpb24oZSxwLGYpe2Z1bmN0aW9uIHIobSl7aWYobT09Zy5sZW5ndGgpcmV0dXJuIHAobnVsbCk7SShnW21dLGUsZixmdW5jdGlvbihrKXtrJiYwPGsubGlzdC5sZW5ndGg/cChrKTpyKG0rMSl9KX12YXIgZz1MKGUsYyk7cigwKX0sYS5hc3luYz0hMCxhLnN1cHBvcnRzU2VsZWN0aW9uPSEwLGEpOihkPVxuYS5nZXRIZWxwZXIoYS5nZXRDdXJzb3IoKSxcImhpbnRXb3Jkc1wiKSk/ZnVuY3Rpb24oZSl7cmV0dXJuIGguaGludC5mcm9tTGlzdChlLHt3b3JkczpkfSl9OmguaGludC5hbnl3b3JkP2Z1bmN0aW9uKGUscCl7cmV0dXJuIGguaGludC5hbnl3b3JkKGUscCl9OmZ1bmN0aW9uKCl7fX19KTtoLnJlZ2lzdGVySGVscGVyKFwiaGludFwiLFwiZnJvbUxpc3RcIixmdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0Q3Vyc29yKCksZD1hLmdldFRva2VuQXQoYyk7YT1oLlBvcyhjLmxpbmUsZC5zdGFydCk7ZC5zdGFydDxjLmNoJiYvXFx3Ly50ZXN0KGQuc3RyaW5nLmNoYXJBdChjLmNoLWQuc3RhcnQtMSkpP2Q9ZC5zdHJpbmcuc3Vic3RyKDAsYy5jaC1kLnN0YXJ0KTooZD1cIlwiLGE9Yyk7Zm9yKHZhciBlPVtdLHA9MDtwPGIud29yZHMubGVuZ3RoO3ArKyl7dmFyIGY9Yi53b3Jkc1twXTtmLnNsaWNlKDAsZC5sZW5ndGgpPT1kJiZlLnB1c2goZil9aWYoZS5sZW5ndGgpcmV0dXJue2xpc3Q6ZSxmcm9tOmEsdG86Y319KTtcbmguY29tbWFuZHMuYXV0b2NvbXBsZXRlPWguc2hvd0hpbnQ7dmFyIEo9e2hpbnQ6aC5oaW50LmF1dG8sY29tcGxldGVTaW5nbGU6ITAsYWxpZ25XaXRoV29yZDohMCxjbG9zZUNoYXJhY3RlcnM6L1tcXHMoKVxcW1xcXXt9Ozo+LF0vLGNsb3NlT25QaWNrOiEwLGNsb3NlT25VbmZvY3VzOiEwLHVwZGF0ZU9uQ3Vyc29yQWN0aXZpdHk6ITAsY29tcGxldGVPblNpbmdsZUNsaWNrOiEwLGNvbnRhaW5lcjpudWxsLGN1c3RvbUtleXM6bnVsbCxleHRyYUtleXM6bnVsbCxwYWRkaW5nRm9yU2Nyb2xsYmFyOiEwLG1vdmVPbk92ZXJsYXA6ITB9O2guZGVmaW5lT3B0aW9uKFwiaGludE9wdGlvbnNcIixudWxsKX0pO1xuIiwidmFyICRqc2NvbXA9JGpzY29tcHx8e307JGpzY29tcC5zY29wZT17fTskanNjb21wLmZpbmRJbnRlcm5hbD1mdW5jdGlvbihhLGQsYyl7YSBpbnN0YW5jZW9mIFN0cmluZyYmKGE9U3RyaW5nKGEpKTtmb3IodmFyIGU9YS5sZW5ndGgsZj0wO2Y8ZTtmKyspe3ZhciBtPWFbZl07aWYoZC5jYWxsKGMsbSxmLGEpKXJldHVybntpOmYsdjptfX1yZXR1cm57aTotMSx2OnZvaWQgMH19OyRqc2NvbXAuQVNTVU1FX0VTNT0hMTskanNjb21wLkFTU1VNRV9OT19OQVRJVkVfTUFQPSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9TRVQ9ITE7JGpzY29tcC5TSU1QTEVfRlJPVU5EX1BPTFlGSUxMPSExOyRqc2NvbXAuSVNPTEFURV9QT0xZRklMTFM9ITE7JGpzY29tcC5GT1JDRV9QT0xZRklMTF9QUk9NSVNFPSExOyRqc2NvbXAuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRV9XSEVOX05PX1VOSEFORExFRF9SRUpFQ1RJT049ITE7XG4kanNjb21wLmRlZmluZVByb3BlcnR5PSRqc2NvbXAuQVNTVU1FX0VTNXx8XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsZCxjKXtpZihhPT1BcnJheS5wcm90b3R5cGV8fGE9PU9iamVjdC5wcm90b3R5cGUpcmV0dXJuIGE7YVtkXT1jLnZhbHVlO3JldHVybiBhfTskanNjb21wLmdldEdsb2JhbD1mdW5jdGlvbihhKXthPVtcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyxhLFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyxcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZixcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWxdO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGg7KytkKXt2YXIgYz1hW2RdO2lmKGMmJmMuTWF0aD09TWF0aClyZXR1cm4gY310aHJvdyBFcnJvcihcIkNhbm5vdCBmaW5kIGdsb2JhbCBvYmplY3RcIik7fTskanNjb21wLmdsb2JhbD0kanNjb21wLmdldEdsb2JhbCh0aGlzKTtcbiRqc2NvbXAuSVNfU1lNQk9MX05BVElWRT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT09dHlwZW9mIFN5bWJvbChcInhcIik7JGpzY29tcC5UUlVTVF9FUzZfUE9MWUZJTExTPSEkanNjb21wLklTT0xBVEVfUE9MWUZJTExTfHwkanNjb21wLklTX1NZTUJPTF9OQVRJVkU7JGpzY29tcC5wb2x5ZmlsbHM9e307JGpzY29tcC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2w9e307JGpzY29tcC5QT0xZRklMTF9QUkVGSVg9XCIkanNjcCRcIjt2YXIgJGpzY29tcCRsb29rdXBQb2x5ZmlsbGVkVmFsdWU9ZnVuY3Rpb24oYSxkKXt2YXIgYz0kanNjb21wLnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtkXTtpZihudWxsPT1jKXJldHVybiBhW2RdO2M9YVtjXTtyZXR1cm4gdm9pZCAwIT09Yz9jOmFbZF19O1xuJGpzY29tcC5wb2x5ZmlsbD1mdW5jdGlvbihhLGQsYyxlKXtkJiYoJGpzY29tcC5JU09MQVRFX1BPTFlGSUxMUz8kanNjb21wLnBvbHlmaWxsSXNvbGF0ZWQoYSxkLGMsZSk6JGpzY29tcC5wb2x5ZmlsbFVuaXNvbGF0ZWQoYSxkLGMsZSkpfTskanNjb21wLnBvbHlmaWxsVW5pc29sYXRlZD1mdW5jdGlvbihhLGQsYyxlKXtjPSRqc2NvbXAuZ2xvYmFsO2E9YS5zcGxpdChcIi5cIik7Zm9yKGU9MDtlPGEubGVuZ3RoLTE7ZSsrKXt2YXIgZj1hW2VdO2lmKCEoZiBpbiBjKSlyZXR1cm47Yz1jW2ZdfWE9YVthLmxlbmd0aC0xXTtlPWNbYV07ZD1kKGUpO2QhPWUmJm51bGwhPWQmJiRqc2NvbXAuZGVmaW5lUHJvcGVydHkoYyxhLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZH0pfTtcbiRqc2NvbXAucG9seWZpbGxJc29sYXRlZD1mdW5jdGlvbihhLGQsYyxlKXt2YXIgZj1hLnNwbGl0KFwiLlwiKTthPTE9PT1mLmxlbmd0aDtlPWZbMF07ZT0hYSYmZSBpbiAkanNjb21wLnBvbHlmaWxscz8kanNjb21wLnBvbHlmaWxsczokanNjb21wLmdsb2JhbDtmb3IodmFyIG09MDttPGYubGVuZ3RoLTE7bSsrKXt2YXIgcj1mW21dO2lmKCEociBpbiBlKSlyZXR1cm47ZT1lW3JdfWY9ZltmLmxlbmd0aC0xXTtjPSRqc2NvbXAuSVNfU1lNQk9MX05BVElWRSYmXCJlczZcIj09PWM/ZVtmXTpudWxsO2Q9ZChjKTtudWxsIT1kJiYoYT8kanNjb21wLmRlZmluZVByb3BlcnR5KCRqc2NvbXAucG9seWZpbGxzLGYse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpkfSk6ZCE9PWMmJih2b2lkIDA9PT0kanNjb21wLnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtmXSYmKGM9MUU5Kk1hdGgucmFuZG9tKCk+Pj4wLCRqc2NvbXAucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW2ZdPSRqc2NvbXAuSVNfU1lNQk9MX05BVElWRT9cbiRqc2NvbXAuZ2xvYmFsLlN5bWJvbChmKTokanNjb21wLlBPTFlGSUxMX1BSRUZJWCtjK1wiJFwiK2YpLCRqc2NvbXAuZGVmaW5lUHJvcGVydHkoZSwkanNjb21wLnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtmXSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmR9KSkpfTskanNjb21wLnBvbHlmaWxsKFwiQXJyYXkucHJvdG90eXBlLmZpbmRcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGQsYyl7cmV0dXJuICRqc2NvbXAuZmluZEludGVybmFsKHRoaXMsZCxjKS52fX0sXCJlczZcIixcImVzM1wiKTtcbihmdW5jdGlvbihhKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9hKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSxhKTphKENvZGVNaXJyb3IpfSkoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gZChiKXtiLnN0YXRlLm1hcmtlZFNlbGVjdGlvbiYmYi5vcGVyYXRpb24oZnVuY3Rpb24oKXtyKGIpfSl9ZnVuY3Rpb24gYyhiKXtiLnN0YXRlLm1hcmtlZFNlbGVjdGlvbiYmYi5zdGF0ZS5tYXJrZWRTZWxlY3Rpb24ubGVuZ3RoJiZiLm9wZXJhdGlvbihmdW5jdGlvbigpe2YoYil9KX1mdW5jdGlvbiBlKGIsZyxoLGspe2lmKDAhPXAoZyxoKSlmb3IodmFyIGw9Yi5zdGF0ZS5tYXJrZWRTZWxlY3Rpb24sbj1iLnN0YXRlLm1hcmtlZFNlbGVjdGlvblN0eWxlLHE9Zy5saW5lOzspe3ZhciB0PXE9PWcubGluZT9nOnYocSxcbjApO3ErPXU7dmFyIHc9cT49aC5saW5lLHg9dz9oOnYocSwwKTt0PWIubWFya1RleHQodCx4LHtjbGFzc05hbWU6bn0pO251bGw9PWs/bC5wdXNoKHQpOmwuc3BsaWNlKGsrKywwLHQpO2lmKHcpYnJlYWt9fWZ1bmN0aW9uIGYoYil7Yj1iLnN0YXRlLm1hcmtlZFNlbGVjdGlvbjtmb3IodmFyIGc9MDtnPGIubGVuZ3RoOysrZyliW2ddLmNsZWFyKCk7Yi5sZW5ndGg9MH1mdW5jdGlvbiBtKGIpe2YoYik7Zm9yKHZhciBnPWIubGlzdFNlbGVjdGlvbnMoKSxoPTA7aDxnLmxlbmd0aDtoKyspZShiLGdbaF0uZnJvbSgpLGdbaF0udG8oKSl9ZnVuY3Rpb24gcihiKXtpZighYi5zb21ldGhpbmdTZWxlY3RlZCgpKXJldHVybiBmKGIpO2lmKDE8Yi5saXN0U2VsZWN0aW9ucygpLmxlbmd0aClyZXR1cm4gbShiKTt2YXIgZz1iLmdldEN1cnNvcihcInN0YXJ0XCIpLGg9Yi5nZXRDdXJzb3IoXCJlbmRcIiksaz1iLnN0YXRlLm1hcmtlZFNlbGVjdGlvbjtpZighay5sZW5ndGgpcmV0dXJuIGUoYixnLGgpO3ZhciBsPVxua1swXS5maW5kKCksbj1rW2subGVuZ3RoLTFdLmZpbmQoKTtpZighbHx8IW58fGgubGluZS1nLmxpbmU8PXV8fDA8PXAoZyxuLnRvKXx8MD49cChoLGwuZnJvbSkpcmV0dXJuIG0oYik7Zm9yKDswPHAoZyxsLmZyb20pOylrLnNoaWZ0KCkuY2xlYXIoKSxsPWtbMF0uZmluZCgpOzA+cChnLGwuZnJvbSkmJihsLnRvLmxpbmUtZy5saW5lPHU/KGsuc2hpZnQoKS5jbGVhcigpLGUoYixnLGwudG8sMCkpOmUoYixnLGwuZnJvbSwwKSk7Zm9yKDswPnAoaCxuLnRvKTspay5wb3AoKS5jbGVhcigpLG49a1trLmxlbmd0aC0xXS5maW5kKCk7MDxwKGgsbi50bykmJihoLmxpbmUtbi5mcm9tLmxpbmU8dT8oay5wb3AoKS5jbGVhcigpLGUoYixuLmZyb20saCkpOmUoYixuLnRvLGgpKX1hLmRlZmluZU9wdGlvbihcInN0eWxlU2VsZWN0ZWRUZXh0XCIsITEsZnVuY3Rpb24oYixnLGgpe2g9aCYmaCE9YS5Jbml0O2cmJiFoPyhiLnN0YXRlLm1hcmtlZFNlbGVjdGlvbj1bXSxiLnN0YXRlLm1hcmtlZFNlbGVjdGlvblN0eWxlPVxuXCJzdHJpbmdcIj09dHlwZW9mIGc/ZzpcIkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0XCIsbShiKSxiLm9uKFwiY3Vyc29yQWN0aXZpdHlcIixkKSxiLm9uKFwiY2hhbmdlXCIsYykpOiFnJiZoJiYoYi5vZmYoXCJjdXJzb3JBY3Rpdml0eVwiLGQpLGIub2ZmKFwiY2hhbmdlXCIsYyksZihiKSxiLnN0YXRlLm1hcmtlZFNlbGVjdGlvbj1iLnN0YXRlLm1hcmtlZFNlbGVjdGlvblN0eWxlPW51bGwpfSk7dmFyIHU9OCx2PWEuUG9zLHA9YS5jbXBQb3N9KTtcbiIsInZhciAkanNjb21wPSRqc2NvbXB8fHt9OyRqc2NvbXAuc2NvcGU9e307JGpzY29tcC5maW5kSW50ZXJuYWw9ZnVuY3Rpb24oeSxFLEQpe3kgaW5zdGFuY2VvZiBTdHJpbmcmJih5PVN0cmluZyh5KSk7Zm9yKHZhciB2PXkubGVuZ3RoLE09MDtNPHY7TSsrKXt2YXIgamE9eVtNXTtpZihFLmNhbGwoRCxqYSxNLHkpKXJldHVybntpOk0sdjpqYX19cmV0dXJue2k6LTEsdjp2b2lkIDB9fTskanNjb21wLkFTU1VNRV9FUzU9ITE7JGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX01BUD0hMTskanNjb21wLkFTU1VNRV9OT19OQVRJVkVfU0VUPSExOyRqc2NvbXAuU0lNUExFX0ZST1VORF9QT0xZRklMTD0hMTskanNjb21wLklTT0xBVEVfUE9MWUZJTExTPSExOyRqc2NvbXAuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRT0hMTskanNjb21wLkZPUkNFX1BPTFlGSUxMX1BST01JU0VfV0hFTl9OT19VTkhBTkRMRURfUkVKRUNUSU9OPSExO1xuJGpzY29tcC5kZWZpbmVQcm9wZXJ0eT0kanNjb21wLkFTU1VNRV9FUzV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih5LEUsRCl7aWYoeT09QXJyYXkucHJvdG90eXBlfHx5PT1PYmplY3QucHJvdG90eXBlKXJldHVybiB5O3lbRV09RC52YWx1ZTtyZXR1cm4geX07JGpzY29tcC5nZXRHbG9iYWw9ZnVuY3Rpb24oeSl7eT1bXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMseSxcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3csXCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYsXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsXTtmb3IodmFyIEU9MDtFPHkubGVuZ3RoOysrRSl7dmFyIEQ9eVtFXTtpZihEJiZELk1hdGg9PU1hdGgpcmV0dXJuIER9dGhyb3cgRXJyb3IoXCJDYW5ub3QgZmluZCBnbG9iYWwgb2JqZWN0XCIpO307JGpzY29tcC5nbG9iYWw9JGpzY29tcC5nZXRHbG9iYWwodGhpcyk7XG4kanNjb21wLklTX1NZTUJPTF9OQVRJVkU9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09PXR5cGVvZiBTeW1ib2woXCJ4XCIpOyRqc2NvbXAuVFJVU1RfRVM2X1BPTFlGSUxMUz0hJGpzY29tcC5JU09MQVRFX1BPTFlGSUxMU3x8JGpzY29tcC5JU19TWU1CT0xfTkFUSVZFOyRqc2NvbXAucG9seWZpbGxzPXt9OyRqc2NvbXAucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sPXt9OyRqc2NvbXAuUE9MWUZJTExfUFJFRklYPVwiJGpzY3AkXCI7dmFyICRqc2NvbXAkbG9va3VwUG9seWZpbGxlZFZhbHVlPWZ1bmN0aW9uKHksRSl7dmFyIEQ9JGpzY29tcC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2xbRV07aWYobnVsbD09RClyZXR1cm4geVtFXTtEPXlbRF07cmV0dXJuIHZvaWQgMCE9PUQ/RDp5W0VdfTtcbiRqc2NvbXAucG9seWZpbGw9ZnVuY3Rpb24oeSxFLEQsdil7RSYmKCRqc2NvbXAuSVNPTEFURV9QT0xZRklMTFM/JGpzY29tcC5wb2x5ZmlsbElzb2xhdGVkKHksRSxELHYpOiRqc2NvbXAucG9seWZpbGxVbmlzb2xhdGVkKHksRSxELHYpKX07JGpzY29tcC5wb2x5ZmlsbFVuaXNvbGF0ZWQ9ZnVuY3Rpb24oeSxFLEQsdil7RD0kanNjb21wLmdsb2JhbDt5PXkuc3BsaXQoXCIuXCIpO2Zvcih2PTA7djx5Lmxlbmd0aC0xO3YrKyl7dmFyIE09eVt2XTtpZighKE0gaW4gRCkpcmV0dXJuO0Q9RFtNXX15PXlbeS5sZW5ndGgtMV07dj1EW3ldO0U9RSh2KTtFIT12JiZudWxsIT1FJiYkanNjb21wLmRlZmluZVByb3BlcnR5KEQseSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkV9KX07XG4kanNjb21wLnBvbHlmaWxsSXNvbGF0ZWQ9ZnVuY3Rpb24oeSxFLEQsdil7dmFyIE09eS5zcGxpdChcIi5cIik7eT0xPT09TS5sZW5ndGg7dj1NWzBdO3Y9IXkmJnYgaW4gJGpzY29tcC5wb2x5ZmlsbHM/JGpzY29tcC5wb2x5ZmlsbHM6JGpzY29tcC5nbG9iYWw7Zm9yKHZhciBqYT0wO2phPE0ubGVuZ3RoLTE7amErKyl7dmFyIGthPU1bamFdO2lmKCEoa2EgaW4gdikpcmV0dXJuO3Y9dltrYV19TT1NW00ubGVuZ3RoLTFdO0Q9JGpzY29tcC5JU19TWU1CT0xfTkFUSVZFJiZcImVzNlwiPT09RD92W01dOm51bGw7RT1FKEQpO251bGwhPUUmJih5PyRqc2NvbXAuZGVmaW5lUHJvcGVydHkoJGpzY29tcC5wb2x5ZmlsbHMsTSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkV9KTpFIT09RCYmKHZvaWQgMD09PSRqc2NvbXAucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW01dJiYoRD0xRTkqTWF0aC5yYW5kb20oKT4+PjAsJGpzY29tcC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2xbTV09XG4kanNjb21wLklTX1NZTUJPTF9OQVRJVkU/JGpzY29tcC5nbG9iYWwuU3ltYm9sKE0pOiRqc2NvbXAuUE9MWUZJTExfUFJFRklYK0QrXCIkXCIrTSksJGpzY29tcC5kZWZpbmVQcm9wZXJ0eSh2LCRqc2NvbXAucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW01dLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6RX0pKSl9OyRqc2NvbXAucG9seWZpbGwoXCJBcnJheS5wcm90b3R5cGUuZmluZFwiLGZ1bmN0aW9uKHkpe3JldHVybiB5P3k6ZnVuY3Rpb24oRSxEKXtyZXR1cm4gJGpzY29tcC5maW5kSW50ZXJuYWwodGhpcyxFLEQpLnZ9fSxcImVzNlwiLFwiZXMzXCIpO1xuKGZ1bmN0aW9uKHksRSl7XCJvYmplY3RcIj09PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1FKCk6XCJmdW5jdGlvblwiPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoRSk6KHk9eXx8c2VsZix5LkNvZGVNaXJyb3I9RSgpKX0pKHRoaXMsZnVuY3Rpb24oKXtmdW5jdGlvbiB5KGEpe3JldHVybiBuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIrYStcIig/OiR8XFxcXHMpXFxcXHMqXCIpfWZ1bmN0aW9uIEUoYSl7Zm9yKHZhciBiPWEuY2hpbGROb2Rlcy5sZW5ndGg7MDxiOy0tYilhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7cmV0dXJuIGF9ZnVuY3Rpb24gRChhLGIpe3JldHVybiBFKGEpLmFwcGVuZENoaWxkKGIpfWZ1bmN0aW9uIHYoYSxiLGQsYyl7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGEpO2QmJihhLmNsYXNzTmFtZT1kKTtjJiYoYS5zdHlsZS5jc3NUZXh0PWMpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKWEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYikpO1xuZWxzZSBpZihiKWZvcihkPTA7ZDxiLmxlbmd0aDsrK2QpYS5hcHBlbmRDaGlsZChiW2RdKTtyZXR1cm4gYX1mdW5jdGlvbiBNKGEsYixkLGMpe2E9dihhLGIsZCxjKTthLnNldEF0dHJpYnV0ZShcInJvbGVcIixcInByZXNlbnRhdGlvblwiKTtyZXR1cm4gYX1mdW5jdGlvbiBqYShhLGIpezM9PWIubm9kZVR5cGUmJihiPWIucGFyZW50Tm9kZSk7aWYoYS5jb250YWlucylyZXR1cm4gYS5jb250YWlucyhiKTtkbyBpZigxMT09Yi5ub2RlVHlwZSYmKGI9Yi5ob3N0KSxiPT1hKXJldHVybiEwO3doaWxlKGI9Yi5wYXJlbnROb2RlKX1mdW5jdGlvbiBrYShhKXt0cnl7dmFyIGI9YS5hY3RpdmVFbGVtZW50fWNhdGNoKGQpe2I9YS5ib2R5fHxudWxsfWZvcig7YiYmYi5zaGFkb3dSb290JiZiLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDspYj1iLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtyZXR1cm4gYn1mdW5jdGlvbiBZYShhLGIpe3ZhciBkPWEuY2xhc3NOYW1lO3koYikudGVzdChkKXx8KGEuY2xhc3NOYW1lKz1cbihkP1wiIFwiOlwiXCIpK2IpfWZ1bmN0aW9uIGZkKGEsYil7YT1hLnNwbGl0KFwiIFwiKTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdJiYheShhW2RdKS50ZXN0KGIpJiYoYis9XCIgXCIrYVtkXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gcWEoYSl7cmV0dXJuIGEuZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gZ2QoYSl7dmFyIGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KG51bGwsYil9fWZ1bmN0aW9uIFphKGEsYixkKXtifHwoYj17fSk7Zm9yKHZhciBjIGluIGEpIWEuaGFzT3duUHJvcGVydHkoYyl8fCExPT09ZCYmYi5oYXNPd25Qcm9wZXJ0eShjKXx8KGJbY109YVtjXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gd2EoYSxiLGQsYyxlKXtudWxsPT1iJiYoYj1hLnNlYXJjaCgvW15cXHNcXHUwMGEwXS8pLC0xPT1iJiYoYj1hLmxlbmd0aCkpO2M9Y3x8MDtmb3IoZT1lfHwwOzspe3ZhciBmPWEuaW5kZXhPZihcIlxcdFwiLFxuYyk7aWYoMD5mfHxmPj1iKXJldHVybiBlKyhiLWMpO2UrPWYtYztlKz1kLWUlZDtjPWYrMX19ZnVuY3Rpb24gZWEoYSxiKXtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoOysrZClpZihhW2RdPT1iKXJldHVybiBkO3JldHVybi0xfWZ1bmN0aW9uIGhkKGEsYixkKXtmb3IodmFyIGM9MCxlPTA7Oyl7dmFyIGY9YS5pbmRleE9mKFwiXFx0XCIsYyk7LTE9PWYmJihmPWEubGVuZ3RoKTt2YXIgZz1mLWM7aWYoZj09YS5sZW5ndGh8fGUrZz49YilyZXR1cm4gYytNYXRoLm1pbihnLGItZSk7ZSs9Zi1jO2UrPWQtZSVkO2M9ZisxO2lmKGU+PWIpcmV0dXJuIGN9fWZ1bmN0aW9uIGlkKGEpe2Zvcig7dmMubGVuZ3RoPD1hOyl2Yy5wdXNoKEoodmMpK1wiIFwiKTtyZXR1cm4gdmNbYV19ZnVuY3Rpb24gSihhKXtyZXR1cm4gYVthLmxlbmd0aC0xXX1mdW5jdGlvbiB3YyhhLGIpe2Zvcih2YXIgZD1bXSxjPTA7YzxhLmxlbmd0aDtjKyspZFtjXT1iKGFbY10sYyk7cmV0dXJuIGR9ZnVuY3Rpb24geWcoYSxiLGQpe2Zvcih2YXIgYz1cbjAsZT1kKGIpO2M8YS5sZW5ndGgmJmQoYVtjXSk8PWU7KWMrKzthLnNwbGljZShjLDAsYil9ZnVuY3Rpb24gcGUoKXt9ZnVuY3Rpb24gcWUoYSxiKXtPYmplY3QuY3JlYXRlP2E9T2JqZWN0LmNyZWF0ZShhKToocGUucHJvdG90eXBlPWEsYT1uZXcgcGUpO2ImJlphKGIsYSk7cmV0dXJuIGF9ZnVuY3Rpb24gamQoYSl7cmV0dXJuL1xcdy8udGVzdChhKXx8XCJcXHUwMDgwXCI8YSYmKGEudG9VcHBlckNhc2UoKSE9YS50b0xvd2VyQ2FzZSgpfHx6Zy50ZXN0KGEpKX1mdW5jdGlvbiB4YyhhLGIpe3JldHVybiBiPy0xPGIuc291cmNlLmluZGV4T2YoXCJcXFxcd1wiKSYmamQoYSk/ITA6Yi50ZXN0KGEpOmpkKGEpfWZ1bmN0aW9uIHJlKGEpe2Zvcih2YXIgYiBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYikmJmFbYl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24ga2QoYSl7cmV0dXJuIDc2ODw9YS5jaGFyQ29kZUF0KDApJiZBZy50ZXN0KGEpfWZ1bmN0aW9uIHNlKGEsYixkKXtmb3IoOygwPmQ/MDxiOlxuYjxhLmxlbmd0aCkmJmtkKGEuY2hhckF0KGIpKTspYis9ZDtyZXR1cm4gYn1mdW5jdGlvbiBKYihhLGIsZCl7Zm9yKHZhciBjPWI+ZD8tMToxOzspe2lmKGI9PWQpcmV0dXJuIGI7dmFyIGU9KGIrZCkvMjtlPTA+Yz9NYXRoLmNlaWwoZSk6TWF0aC5mbG9vcihlKTtpZihlPT1iKXJldHVybiBhKGUpP2I6ZDthKGUpP2Q9ZTpiPWUrY319ZnVuY3Rpb24gQmcoYSxiLGQsYyl7aWYoIWEpcmV0dXJuIGMoYixkLFwibHRyXCIsMCk7Zm9yKHZhciBlPSExLGY9MDtmPGEubGVuZ3RoOysrZil7dmFyIGc9YVtmXTtpZihnLmZyb208ZCYmZy50bz5ifHxiPT1kJiZnLnRvPT1iKWMoTWF0aC5tYXgoZy5mcm9tLGIpLE1hdGgubWluKGcudG8sZCksMT09Zy5sZXZlbD9cInJ0bFwiOlwibHRyXCIsZiksZT0hMH1lfHxjKGIsZCxcImx0clwiKX1mdW5jdGlvbiBLYihhLGIsZCl7dmFyIGM7TGI9bnVsbDtmb3IodmFyIGU9MDtlPGEubGVuZ3RoOysrZSl7dmFyIGY9YVtlXTtpZihmLmZyb208YiYmZi50bz5iKXJldHVybiBlO1xuZi50bz09YiYmKGYuZnJvbSE9Zi50byYmXCJiZWZvcmVcIj09ZD9jPWU6TGI9ZSk7Zi5mcm9tPT1iJiYoZi5mcm9tIT1mLnRvJiZcImJlZm9yZVwiIT1kP2M9ZTpMYj1lKX1yZXR1cm4gbnVsbCE9Yz9jOkxifWZ1bmN0aW9uIEphKGEsYil7dmFyIGQ9YS5vcmRlcjtudWxsPT1kJiYoZD1hLm9yZGVyPUNnKGEudGV4dCxiKSk7cmV0dXJuIGR9ZnVuY3Rpb24gdGEoYSxiLGQpe2lmKGEucmVtb3ZlRXZlbnRMaXN0ZW5lcilhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixkLCExKTtlbHNlIGlmKGEuZGV0YWNoRXZlbnQpYS5kZXRhY2hFdmVudChcIm9uXCIrYixkKTtlbHNle3ZhciBjPShhPWEuX2hhbmRsZXJzKSYmYVtiXTtjJiYoZD1lYShjLGQpLC0xPGQmJihhW2JdPWMuc2xpY2UoMCxkKS5jb25jYXQoYy5zbGljZShkKzEpKSkpfX1mdW5jdGlvbiBXKGEsYil7dmFyIGQ9YS5faGFuZGxlcnMmJmEuX2hhbmRsZXJzW2JdfHx5YztpZihkLmxlbmd0aClmb3IodmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLFxuMiksZT0wO2U8ZC5sZW5ndGg7KytlKWRbZV0uYXBwbHkobnVsbCxjKX1mdW5jdGlvbiBaKGEsYixkKXtcInN0cmluZ1wiPT10eXBlb2YgYiYmKGI9e3R5cGU6YixwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMH19KTtXKGEsZHx8Yi50eXBlLGEsYik7cmV0dXJuIGxkKGIpfHxiLmNvZGVtaXJyb3JJZ25vcmV9ZnVuY3Rpb24gdGUoYSl7dmFyIGI9YS5faGFuZGxlcnMmJmEuX2hhbmRsZXJzLmN1cnNvckFjdGl2aXR5O2lmKGIpe2E9YS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzfHwoYS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzPVtdKTtmb3IodmFyIGQ9MDtkPGIubGVuZ3RoOysrZCktMT09ZWEoYSxiW2RdKSYmYS5wdXNoKGJbZF0pfX1mdW5jdGlvbiB4YShhLGIpe3JldHVybiAwPChhLl9oYW5kbGVycyYmYS5faGFuZGxlcnNbYl18fHljKS5sZW5ndGh9ZnVuY3Rpb24gcGIoYSl7YS5wcm90b3R5cGUub249ZnVuY3Rpb24oYixkKXt6KHRoaXMsXG5iLGQpfTthLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24oYixkKXt0YSh0aGlzLGIsZCl9fWZ1bmN0aW9uIGxhKGEpe2EucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITF9ZnVuY3Rpb24gdWUoYSl7YS5zdG9wUHJvcGFnYXRpb24/YS5zdG9wUHJvcGFnYXRpb24oKTphLmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBsZChhKXtyZXR1cm4gbnVsbCE9YS5kZWZhdWx0UHJldmVudGVkP2EuZGVmYXVsdFByZXZlbnRlZDowPT1hLnJldHVyblZhbHVlfWZ1bmN0aW9uIE1iKGEpe2xhKGEpO3VlKGEpfWZ1bmN0aW9uIHZlKGEpe3ZhciBiPWEud2hpY2g7bnVsbD09YiYmKGEuYnV0dG9uJjE/Yj0xOmEuYnV0dG9uJjI/Yj0zOmEuYnV0dG9uJjQmJihiPTIpKTt5YSYmYS5jdHJsS2V5JiYxPT1iJiYoYj0zKTtyZXR1cm4gYn1mdW5jdGlvbiBEZyhhLGIpezI8YXJndW1lbnRzLmxlbmd0aCYmKGIuZGVwZW5kZW5jaWVzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyxcbjIpKTttZFthXT1ifWZ1bmN0aW9uIHpjKGEpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhJiZxYi5oYXNPd25Qcm9wZXJ0eShhKSlhPXFiW2FdO2Vsc2UgaWYoYSYmXCJzdHJpbmdcIj09dHlwZW9mIGEubmFtZSYmcWIuaGFzT3duUHJvcGVydHkoYS5uYW1lKSl7dmFyIGI9cWJbYS5uYW1lXTtcInN0cmluZ1wiPT10eXBlb2YgYiYmKGI9e25hbWU6Yn0pO2E9cWUoYixhKTthLm5hbWU9Yi5uYW1lfWVsc2V7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEmJi9eW1xcd1xcLV0rXFwvW1xcd1xcLV0rXFwreG1sJC8udGVzdChhKSlyZXR1cm4gemMoXCJhcHBsaWNhdGlvbi94bWxcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEmJi9eW1xcd1xcLV0rXFwvW1xcd1xcLV0rXFwranNvbiQvLnRlc3QoYSkpcmV0dXJuIHpjKFwiYXBwbGljYXRpb24vanNvblwiKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT97bmFtZTphfTphfHx7bmFtZTpcIm51bGxcIn19ZnVuY3Rpb24gbmQoYSxiKXtiPXpjKGIpO3ZhciBkPW1kW2IubmFtZV07aWYoIWQpcmV0dXJuIG5kKGEsXG5cInRleHQvcGxhaW5cIik7YT1kKGEsYik7aWYocmIuaGFzT3duUHJvcGVydHkoYi5uYW1lKSl7ZD1yYltiLm5hbWVdO2Zvcih2YXIgYyBpbiBkKWQuaGFzT3duUHJvcGVydHkoYykmJihhLmhhc093blByb3BlcnR5KGMpJiYoYVtcIl9cIitjXT1hW2NdKSxhW2NdPWRbY10pfWEubmFtZT1iLm5hbWU7Yi5oZWxwZXJUeXBlJiYoYS5oZWxwZXJUeXBlPWIuaGVscGVyVHlwZSk7aWYoYi5tb2RlUHJvcHMpZm9yKHZhciBlIGluIGIubW9kZVByb3BzKWFbZV09Yi5tb2RlUHJvcHNbZV07cmV0dXJuIGF9ZnVuY3Rpb24gRWcoYSxiKXthPXJiLmhhc093blByb3BlcnR5KGEpP3JiW2FdOnJiW2FdPXt9O1phKGIsYSl9ZnVuY3Rpb24gJGEoYSxiKXtpZighMD09PWIpcmV0dXJuIGI7aWYoYS5jb3B5U3RhdGUpcmV0dXJuIGEuY29weVN0YXRlKGIpO2E9e307Zm9yKHZhciBkIGluIGIpe3ZhciBjPWJbZF07YyBpbnN0YW5jZW9mIEFycmF5JiYoYz1jLmNvbmNhdChbXSkpO2FbZF09Y31yZXR1cm4gYX1mdW5jdGlvbiBvZChhLFxuYil7Zm9yKHZhciBkO2EuaW5uZXJNb2RlOyl7ZD1hLmlubmVyTW9kZShiKTtpZighZHx8ZC5tb2RlPT1hKWJyZWFrO2I9ZC5zdGF0ZTthPWQubW9kZX1yZXR1cm4gZHx8e21vZGU6YSxzdGF0ZTpifX1mdW5jdGlvbiB3ZShhLGIsZCl7cmV0dXJuIGEuc3RhcnRTdGF0ZT9hLnN0YXJ0U3RhdGUoYixkKTohMH1mdW5jdGlvbiB3KGEsYil7Yi09YS5maXJzdDtpZigwPmJ8fGI+PWEuc2l6ZSl0aHJvdyBFcnJvcihcIlRoZXJlIGlzIG5vIGxpbmUgXCIrKGIrYS5maXJzdCkrXCIgaW4gdGhlIGRvY3VtZW50LlwiKTtmb3IoOyFhLmxpbmVzOylmb3IodmFyIGQ9MDs7KytkKXt2YXIgYz1hLmNoaWxkcmVuW2RdLGU9Yy5jaHVua1NpemUoKTtpZihiPGUpe2E9YzticmVha31iLT1lfXJldHVybiBhLmxpbmVzW2JdfWZ1bmN0aW9uIGFiKGEsYixkKXt2YXIgYz1bXSxlPWIubGluZTthLml0ZXIoYi5saW5lLGQubGluZSsxLGZ1bmN0aW9uKGYpe2Y9Zi50ZXh0O2U9PWQubGluZSYmKGY9Zi5zbGljZSgwLGQuY2gpKTtcbmU9PWIubGluZSYmKGY9Zi5zbGljZShiLmNoKSk7Yy5wdXNoKGYpOysrZX0pO3JldHVybiBjfWZ1bmN0aW9uIHBkKGEsYixkKXt2YXIgYz1bXTthLml0ZXIoYixkLGZ1bmN0aW9uKGUpe2MucHVzaChlLnRleHQpfSk7cmV0dXJuIGN9ZnVuY3Rpb24gRWEoYSxiKXtpZihiLT1hLmhlaWdodClmb3IoO2E7YT1hLnBhcmVudClhLmhlaWdodCs9Yn1mdW5jdGlvbiBOKGEpe2lmKG51bGw9PWEucGFyZW50KXJldHVybiBudWxsO3ZhciBiPWEucGFyZW50O2E9ZWEoYi5saW5lcyxhKTtmb3IodmFyIGQ9Yi5wYXJlbnQ7ZDtiPWQsZD1kLnBhcmVudClmb3IodmFyIGM9MDtkLmNoaWxkcmVuW2NdIT1iOysrYylhKz1kLmNoaWxkcmVuW2NdLmNodW5rU2l6ZSgpO3JldHVybiBhK2IuZmlyc3R9ZnVuY3Rpb24gYmIoYSxiKXt2YXIgZD1hLmZpcnN0O2E6ZG97Zm9yKHZhciBjPTA7YzxhLmNoaWxkcmVuLmxlbmd0aDsrK2Mpe3ZhciBlPWEuY2hpbGRyZW5bY10sZj1lLmhlaWdodDtpZihiPGYpe2E9ZTtjb250aW51ZSBhfWItPVxuZjtkKz1lLmNodW5rU2l6ZSgpfXJldHVybiBkfXdoaWxlKCFhLmxpbmVzKTtmb3IoYz0wO2M8YS5saW5lcy5sZW5ndGg7KytjKXtlPWEubGluZXNbY10uaGVpZ2h0O2lmKGI8ZSlicmVhaztiLT1lfXJldHVybiBkK2N9ZnVuY3Rpb24gTmIoYSxiKXtyZXR1cm4gYj49YS5maXJzdCYmYjxhLmZpcnN0K2Euc2l6ZX1mdW5jdGlvbiBxZChhLGIpe3JldHVybiBTdHJpbmcoYS5saW5lTnVtYmVyRm9ybWF0dGVyKGIrYS5maXJzdExpbmVOdW1iZXIpKX1mdW5jdGlvbiB0KGEsYixkKXt2b2lkIDA9PT1kJiYoZD1udWxsKTtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoYSxiLGQpO3RoaXMubGluZT1hO3RoaXMuY2g9Yjt0aGlzLnN0aWNreT1kfWZ1bmN0aW9uIEIoYSxiKXtyZXR1cm4gYS5saW5lLWIubGluZXx8YS5jaC1iLmNofWZ1bmN0aW9uIHJkKGEsYil7cmV0dXJuIGEuc3RpY2t5PT1iLnN0aWNreSYmMD09QihhLGIpfWZ1bmN0aW9uIHNkKGEpe3JldHVybiB0KGEubGluZSxcbmEuY2gpfWZ1bmN0aW9uIEFjKGEsYil7cmV0dXJuIDA+QihhLGIpP2I6YX1mdW5jdGlvbiBCYyhhLGIpe3JldHVybiAwPkIoYSxiKT9hOmJ9ZnVuY3Rpb24gQyhhLGIpe2lmKGIubGluZTxhLmZpcnN0KXJldHVybiB0KGEuZmlyc3QsMCk7dmFyIGQ9YS5maXJzdCthLnNpemUtMTtpZihiLmxpbmU+ZClyZXR1cm4gdChkLHcoYSxkKS50ZXh0Lmxlbmd0aCk7YT13KGEsYi5saW5lKS50ZXh0Lmxlbmd0aDtkPWIuY2g7Yj1udWxsPT1kfHxkPmE/dChiLmxpbmUsYSk6MD5kP3QoYi5saW5lLDApOmI7cmV0dXJuIGJ9ZnVuY3Rpb24geGUoYSxiKXtmb3IodmFyIGQ9W10sYz0wO2M8Yi5sZW5ndGg7YysrKWRbY109QyhhLGJbY10pO3JldHVybiBkfWZ1bmN0aW9uIHllKGEsYixkLGMpe3ZhciBlPVthLnN0YXRlLm1vZGVHZW5dLGY9e307emUoYSxiLnRleHQsYS5kb2MubW9kZSxkLGZ1bmN0aW9uKGssbCl7cmV0dXJuIGUucHVzaChrLGwpfSxmLGMpO3ZhciBnPWQuc3RhdGU7Yz1mdW5jdGlvbihrKXtkLmJhc2VUb2tlbnM9XG5lO3ZhciBsPWEuc3RhdGUub3ZlcmxheXNba10sbT0xLG49MDtkLnN0YXRlPSEwO3plKGEsYi50ZXh0LGwubW9kZSxkLGZ1bmN0aW9uKHAscSl7Zm9yKHZhciByPW07bjxwOyl7dmFyIHU9ZVttXTt1PnAmJmUuc3BsaWNlKG0sMSxwLGVbbSsxXSx1KTttKz0yO249TWF0aC5taW4ocCx1KX1pZihxKWlmKGwub3BhcXVlKWUuc3BsaWNlKHIsbS1yLHAsXCJvdmVybGF5IFwiK3EpLG09cisyO2Vsc2UgZm9yKDtyPG07cis9MilwPWVbcisxXSxlW3IrMV09KHA/cCtcIiBcIjpcIlwiKStcIm92ZXJsYXkgXCIrcX0sZik7ZC5zdGF0ZT1nO2QuYmFzZVRva2Vucz1udWxsO2QuYmFzZVRva2VuUG9zPTF9O2Zvcih2YXIgaD0wO2g8YS5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7KytoKWMoaCk7cmV0dXJue3N0eWxlczplLGNsYXNzZXM6Zi5iZ0NsYXNzfHxmLnRleHRDbGFzcz9mOm51bGx9fWZ1bmN0aW9uIEFlKGEsYixkKXtpZighYi5zdHlsZXN8fGIuc3R5bGVzWzBdIT1hLnN0YXRlLm1vZGVHZW4pe3ZhciBjPU9iKGEsXG5OKGIpKSxlPWIudGV4dC5sZW5ndGg+YS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCYmJGEoYS5kb2MubW9kZSxjLnN0YXRlKSxmPXllKGEsYixjKTtlJiYoYy5zdGF0ZT1lKTtiLnN0YXRlQWZ0ZXI9Yy5zYXZlKCFlKTtiLnN0eWxlcz1mLnN0eWxlcztmLmNsYXNzZXM/Yi5zdHlsZUNsYXNzZXM9Zi5jbGFzc2VzOmIuc3R5bGVDbGFzc2VzJiYoYi5zdHlsZUNsYXNzZXM9bnVsbCk7ZD09PWEuZG9jLmhpZ2hsaWdodEZyb250aWVyJiYoYS5kb2MubW9kZUZyb250aWVyPU1hdGgubWF4KGEuZG9jLm1vZGVGcm9udGllciwrK2EuZG9jLmhpZ2hsaWdodEZyb250aWVyKSl9cmV0dXJuIGIuc3R5bGVzfWZ1bmN0aW9uIE9iKGEsYixkKXt2YXIgYz1hLmRvYyxlPWEuZGlzcGxheTtpZighYy5tb2RlLnN0YXJ0U3RhdGUpcmV0dXJuIG5ldyBGYShjLCEwLGIpO3ZhciBmPUZnKGEsYixkKSxnPWY+Yy5maXJzdCYmdyhjLGYtMSkuc3RhdGVBZnRlcixoPWc/RmEuZnJvbVNhdmVkKGMsZyxmKTpuZXcgRmEoYyxcbndlKGMubW9kZSksZik7Yy5pdGVyKGYsYixmdW5jdGlvbihrKXt0ZChhLGsudGV4dCxoKTt2YXIgbD1oLmxpbmU7ay5zdGF0ZUFmdGVyPWw9PWItMXx8MD09bCU1fHxsPj1lLnZpZXdGcm9tJiZsPGUudmlld1RvP2guc2F2ZSgpOm51bGw7aC5uZXh0TGluZSgpfSk7ZCYmKGMubW9kZUZyb250aWVyPWgubGluZSk7cmV0dXJuIGh9ZnVuY3Rpb24gdGQoYSxiLGQsYyl7dmFyIGU9YS5kb2MubW9kZTthPW5ldyBYKGIsYS5vcHRpb25zLnRhYlNpemUsZCk7YS5zdGFydD1hLnBvcz1jfHwwO2ZvcihcIlwiPT1iJiZCZShlLGQuc3RhdGUpOyFhLmVvbCgpOyl1ZChlLGEsZC5zdGF0ZSksYS5zdGFydD1hLnBvc31mdW5jdGlvbiBCZShhLGIpe2lmKGEuYmxhbmtMaW5lKXJldHVybiBhLmJsYW5rTGluZShiKTtpZihhLmlubmVyTW9kZSYmKGE9b2QoYSxiKSxhLm1vZGUuYmxhbmtMaW5lKSlyZXR1cm4gYS5tb2RlLmJsYW5rTGluZShhLnN0YXRlKX1mdW5jdGlvbiB1ZChhLGIsZCxjKXtmb3IodmFyIGU9XG4wOzEwPmU7ZSsrKXtjJiYoY1swXT1vZChhLGQpLm1vZGUpO3ZhciBmPWEudG9rZW4oYixkKTtpZihiLnBvcz5iLnN0YXJ0KXJldHVybiBmfXRocm93IEVycm9yKFwiTW9kZSBcIithLm5hbWUrXCIgZmFpbGVkIHRvIGFkdmFuY2Ugc3RyZWFtLlwiKTt9ZnVuY3Rpb24gQ2UoYSxiLGQsYyl7dmFyIGU9YS5kb2MsZj1lLm1vZGU7Yj1DKGUsYik7dmFyIGc9dyhlLGIubGluZSk7ZD1PYihhLGIubGluZSxkKTthPW5ldyBYKGcudGV4dCxhLm9wdGlvbnMudGFiU2l6ZSxkKTt2YXIgaDtmb3IoYyYmKGg9W10pOyhjfHxhLnBvczxiLmNoKSYmIWEuZW9sKCk7KXthLnN0YXJ0PWEucG9zO3ZhciBrPXVkKGYsYSxkLnN0YXRlKTtjJiZoLnB1c2gobmV3IERlKGEsaywkYShlLm1vZGUsZC5zdGF0ZSkpKX1yZXR1cm4gYz9oOm5ldyBEZShhLGssZC5zdGF0ZSl9ZnVuY3Rpb24gRWUoYSxiKXtpZihhKWZvcig7Oyl7dmFyIGQ9YS5tYXRjaCgvKD86XnxcXHMrKWxpbmUtKGJhY2tncm91bmQtKT8oXFxTKykvKTtpZighZClicmVhaztcbmE9YS5zbGljZSgwLGQuaW5kZXgpK2Euc2xpY2UoZC5pbmRleCtkWzBdLmxlbmd0aCk7dmFyIGM9ZFsxXT9cImJnQ2xhc3NcIjpcInRleHRDbGFzc1wiO251bGw9PWJbY10/YltjXT1kWzJdOihuZXcgUmVnRXhwKFwiKD86XnxcXFxccylcIitkWzJdK1wiKD86JHxcXFxccylcIikpLnRlc3QoYltjXSl8fChiW2NdKz1cIiBcIitkWzJdKX1yZXR1cm4gYX1mdW5jdGlvbiB6ZShhLGIsZCxjLGUsZixnKXt2YXIgaD1kLmZsYXR0ZW5TcGFucztudWxsPT1oJiYoaD1hLm9wdGlvbnMuZmxhdHRlblNwYW5zKTt2YXIgaz0wLGw9bnVsbCxtPW5ldyBYKGIsYS5vcHRpb25zLnRhYlNpemUsYyksbj1hLm9wdGlvbnMuYWRkTW9kZUNsYXNzJiZbbnVsbF07Zm9yKFwiXCI9PWImJkVlKEJlKGQsYy5zdGF0ZSksZik7IW0uZW9sKCk7KXtpZihtLnBvcz5hLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoKXtoPSExO2cmJnRkKGEsYixjLG0ucG9zKTttLnBvcz1iLmxlbmd0aDt2YXIgcD1udWxsfWVsc2UgcD1FZSh1ZChkLG0sYy5zdGF0ZSxcbm4pLGYpO2lmKG4pe3ZhciBxPW5bMF0ubmFtZTtxJiYocD1cIm0tXCIrKHA/cStcIiBcIitwOnEpKX1pZighaHx8bCE9cCl7Zm9yKDtrPG0uc3RhcnQ7KWs9TWF0aC5taW4obS5zdGFydCxrKzVFMyksZShrLGwpO2w9cH1tLnN0YXJ0PW0ucG9zfWZvcig7azxtLnBvczspYT1NYXRoLm1pbihtLnBvcyxrKzVFMyksZShhLGwpLGs9YX1mdW5jdGlvbiBGZyhhLGIsZCl7Zm9yKHZhciBjLGUsZj1hLmRvYyxnPWQ/LTE6Yi0oYS5kb2MubW9kZS5pbm5lck1vZGU/MUUzOjEwMCk7Yj5nOy0tYil7aWYoYjw9Zi5maXJzdClyZXR1cm4gZi5maXJzdDt2YXIgaD13KGYsYi0xKSxrPWguc3RhdGVBZnRlcjtpZihrJiYoIWR8fGIrKGsgaW5zdGFuY2VvZiBDYz9rLmxvb2tBaGVhZDowKTw9Zi5tb2RlRnJvbnRpZXIpKXJldHVybiBiO2g9d2EoaC50ZXh0LG51bGwsYS5vcHRpb25zLnRhYlNpemUpO2lmKG51bGw9PWV8fGM+aCllPWItMSxjPWh9cmV0dXJuIGV9ZnVuY3Rpb24gR2coYSxiKXthLm1vZGVGcm9udGllcj1cbk1hdGgubWluKGEubW9kZUZyb250aWVyLGIpO2lmKCEoYS5oaWdobGlnaHRGcm9udGllcjxiLTEwKSl7Zm9yKHZhciBkPWEuZmlyc3QsYz1iLTE7Yz5kO2MtLSl7dmFyIGU9dyhhLGMpLnN0YXRlQWZ0ZXI7aWYoZSYmKCEoZSBpbnN0YW5jZW9mIENjKXx8YytlLmxvb2tBaGVhZDxiKSl7ZD1jKzE7YnJlYWt9fWEuaGlnaGxpZ2h0RnJvbnRpZXI9TWF0aC5taW4oYS5oaWdobGlnaHRGcm9udGllcixkKX19ZnVuY3Rpb24gRGMoYSxiLGQpe3RoaXMubWFya2VyPWE7dGhpcy5mcm9tPWI7dGhpcy50bz1kfWZ1bmN0aW9uIFBiKGEsYil7aWYoYSlmb3IodmFyIGQ9MDtkPGEubGVuZ3RoOysrZCl7dmFyIGM9YVtkXTtpZihjLm1hcmtlcj09YilyZXR1cm4gY319ZnVuY3Rpb24gdmQoYSxiKXtpZihiLmZ1bGwpcmV0dXJuIG51bGw7dmFyIGQ9TmIoYSxiLmZyb20ubGluZSkmJncoYSxiLmZyb20ubGluZSkubWFya2VkU3BhbnMsYz1OYihhLGIudG8ubGluZSkmJncoYSxiLnRvLmxpbmUpLm1hcmtlZFNwYW5zO1xuaWYoIWQmJiFjKXJldHVybiBudWxsO2E9Yi5mcm9tLmNoO3ZhciBlPWIudG8uY2gsZj0wPT1CKGIuZnJvbSxiLnRvKSxnO2lmKGQpZm9yKHZhciBoPTA7aDxkLmxlbmd0aDsrK2gpe3ZhciBrPWRbaF0sbD1rLm1hcmtlcjtpZihudWxsPT1rLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/ay5mcm9tPD1hOmsuZnJvbTxhKXx8IShrLmZyb20hPWF8fFwiYm9va21hcmtcIiE9bC50eXBlfHxmJiZrLm1hcmtlci5pbnNlcnRMZWZ0KSl7dmFyIG09bnVsbD09ay50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/ay50bz49YTprLnRvPmEpOyhnfHwoZz1bXSkpLnB1c2gobmV3IERjKGwsay5mcm9tLG0/bnVsbDprLnRvKSl9fWQ9Zzt2YXIgbjtpZihjKWZvcihnPTA7ZzxjLmxlbmd0aDsrK2cpaWYoaD1jW2ddLGs9aC5tYXJrZXIsbnVsbD09aC50b3x8KGsuaW5jbHVzaXZlUmlnaHQ/aC50bz49ZTpoLnRvPmUpfHxoLmZyb209PWUmJlwiYm9va21hcmtcIj09ay50eXBlJiYoIWZ8fGgubWFya2VyLmluc2VydExlZnQpKWw9XG5udWxsPT1oLmZyb218fChrLmluY2x1c2l2ZUxlZnQ/aC5mcm9tPD1lOmguZnJvbTxlKSwobnx8KG49W10pKS5wdXNoKG5ldyBEYyhrLGw/bnVsbDpoLmZyb20tZSxudWxsPT1oLnRvP251bGw6aC50by1lKSk7Yz0xPT1iLnRleHQubGVuZ3RoO2U9SihiLnRleHQpLmxlbmd0aCsoYz9hOjApO2lmKGQpZm9yKGY9MDtmPGQubGVuZ3RoOysrZilpZihnPWRbZl0sbnVsbD09Zy50bykoaD1QYihuLGcubWFya2VyKSxoKT9jJiYoZy50bz1udWxsPT1oLnRvP251bGw6aC50bytlKTpnLnRvPWE7aWYobilmb3IoYT0wO2E8bi5sZW5ndGg7KythKWY9blthXSxudWxsIT1mLnRvJiYoZi50bys9ZSksbnVsbD09Zi5mcm9tP1BiKGQsZi5tYXJrZXIpfHwoZi5mcm9tPWUsYyYmKGR8fChkPVtdKSkucHVzaChmKSk6KGYuZnJvbSs9ZSxjJiYoZHx8KGQ9W10pKS5wdXNoKGYpKTtkJiYoZD1GZShkKSk7biYmbiE9ZCYmKG49RmUobikpO2E9W2RdO2lmKCFjKXtiPWIudGV4dC5sZW5ndGgtMjt2YXIgcDtpZigwPFxuYiYmZClmb3IoYz0wO2M8ZC5sZW5ndGg7KytjKW51bGw9PWRbY10udG8mJihwfHwocD1bXSkpLnB1c2gobmV3IERjKGRbY10ubWFya2VyLG51bGwsbnVsbCkpO2ZvcihkPTA7ZDxiOysrZClhLnB1c2gocCk7YS5wdXNoKG4pfXJldHVybiBhfWZ1bmN0aW9uIEZlKGEpe2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7KytiKXt2YXIgZD1hW2JdO251bGwhPWQuZnJvbSYmZC5mcm9tPT1kLnRvJiYhMSE9PWQubWFya2VyLmNsZWFyV2hlbkVtcHR5JiZhLnNwbGljZShiLS0sMSl9cmV0dXJuIGEubGVuZ3RoP2E6bnVsbH1mdW5jdGlvbiBIZyhhLGIsZCl7dmFyIGM9bnVsbDthLml0ZXIoYi5saW5lLGQubGluZSsxLGZ1bmN0aW9uKG0pe2lmKG0ubWFya2VkU3BhbnMpZm9yKHZhciBuPTA7bjxtLm1hcmtlZFNwYW5zLmxlbmd0aDsrK24pe3ZhciBwPW0ubWFya2VkU3BhbnNbbl0ubWFya2VyOyFwLnJlYWRPbmx5fHxjJiYtMSE9ZWEoYyxwKXx8KGN8fChjPVtdKSkucHVzaChwKX19KTtpZighYylyZXR1cm4gbnVsbDtcbmE9W3tmcm9tOmIsdG86ZH1dO2ZvcihiPTA7YjxjLmxlbmd0aDsrK2Ipe2Q9Y1tiXTtmb3IodmFyIGU9ZC5maW5kKDApLGY9MDtmPGEubGVuZ3RoOysrZil7dmFyIGc9YVtmXTtpZighKDA+QihnLnRvLGUuZnJvbSl8fDA8QihnLmZyb20sZS50bykpKXt2YXIgaD1bZiwxXSxrPUIoZy5mcm9tLGUuZnJvbSksbD1CKGcudG8sZS50byk7KDA+a3x8IWQuaW5jbHVzaXZlTGVmdCYmIWspJiZoLnB1c2goe2Zyb206Zy5mcm9tLHRvOmUuZnJvbX0pOygwPGx8fCFkLmluY2x1c2l2ZVJpZ2h0JiYhbCkmJmgucHVzaCh7ZnJvbTplLnRvLHRvOmcudG99KTthLnNwbGljZS5hcHBseShhLGgpO2YrPWgubGVuZ3RoLTN9fX1yZXR1cm4gYX1mdW5jdGlvbiBHZShhKXt2YXIgYj1hLm1hcmtlZFNwYW5zO2lmKGIpe2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7KytkKWJbZF0ubWFya2VyLmRldGFjaExpbmUoYSk7YS5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiBIZShhLGIpe2lmKGIpe2Zvcih2YXIgZD0wO2Q8XG5iLmxlbmd0aDsrK2QpYltkXS5tYXJrZXIuYXR0YWNoTGluZShhKTthLm1hcmtlZFNwYW5zPWJ9fWZ1bmN0aW9uIHdkKGEsYil7dmFyIGQ9YS5saW5lcy5sZW5ndGgtYi5saW5lcy5sZW5ndGg7aWYoMCE9ZClyZXR1cm4gZDtkPWEuZmluZCgpO3ZhciBjPWIuZmluZCgpLGU9QihkLmZyb20sYy5mcm9tKXx8KGEuaW5jbHVzaXZlTGVmdD8tMTowKS0oYi5pbmNsdXNpdmVMZWZ0Py0xOjApO3JldHVybiBlPy1lOihkPUIoZC50byxjLnRvKXx8KGEuaW5jbHVzaXZlUmlnaHQ/MTowKS0oYi5pbmNsdXNpdmVSaWdodD8xOjApKT9kOmIuaWQtYS5pZH1mdW5jdGlvbiBzYihhLGIpe2E9S2EmJmEubWFya2VkU3BhbnM7aWYoYSlmb3IodmFyIGQsYz0wO2M8YS5sZW5ndGg7KytjKWlmKGQ9YVtjXSxkLm1hcmtlci5jb2xsYXBzZWQmJm51bGw9PShiP2QuZnJvbTpkLnRvKSYmKCFlfHwwPndkKGUsZC5tYXJrZXIpKSl2YXIgZT1kLm1hcmtlcjtyZXR1cm4gZX1mdW5jdGlvbiBJZShhLGIsZCxjLGUpe2E9XG53KGEsYik7aWYoYT1LYSYmYS5tYXJrZWRTcGFucylmb3IoYj0wO2I8YS5sZW5ndGg7KytiKXt2YXIgZj1hW2JdO2lmKGYubWFya2VyLmNvbGxhcHNlZCl7dmFyIGc9Zi5tYXJrZXIuZmluZCgwKSxoPUIoZy5mcm9tLGQpfHwoZi5tYXJrZXIuaW5jbHVzaXZlTGVmdD8tMTowKS0oZS5pbmNsdXNpdmVMZWZ0Py0xOjApLGs9QihnLnRvLGMpfHwoZi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQ/MTowKS0oZS5pbmNsdXNpdmVSaWdodD8xOjApO2lmKCEoMDw9aCYmMD49a3x8MD49aCYmMDw9aykmJigwPj1oJiYoZi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJmUuaW5jbHVzaXZlTGVmdD8wPD1CKGcudG8sZCk6MDxCKGcudG8sZCkpfHwwPD1oJiYoZi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJmUuaW5jbHVzaXZlTGVmdD8wPj1CKGcuZnJvbSxjKTowPkIoZy5mcm9tLGMpKSkpcmV0dXJuITB9fX1mdW5jdGlvbiB6YShhKXtmb3IodmFyIGI7Yj1zYihhLCEwKTspYT1iLmZpbmQoLTEsITApLmxpbmU7cmV0dXJuIGF9XG5mdW5jdGlvbiB4ZChhLGIpe2E9dyhhLGIpO3ZhciBkPXphKGEpO3JldHVybiBhPT1kP2I6TihkKX1mdW5jdGlvbiBKZShhLGIpe2lmKGI+YS5sYXN0TGluZSgpKXJldHVybiBiO3ZhciBkPXcoYSxiKTtpZighUGEoYSxkKSlyZXR1cm4gYjtmb3IoO2E9c2IoZCwhMSk7KWQ9YS5maW5kKDEsITApLmxpbmU7cmV0dXJuIE4oZCkrMX1mdW5jdGlvbiBQYShhLGIpe3ZhciBkPUthJiZiLm1hcmtlZFNwYW5zO2lmKGQpZm9yKHZhciBjLGU9MDtlPGQubGVuZ3RoOysrZSlpZihjPWRbZV0sYy5tYXJrZXIuY29sbGFwc2VkJiYobnVsbD09Yy5mcm9tfHwhYy5tYXJrZXIud2lkZ2V0Tm9kZSYmMD09Yy5mcm9tJiZjLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZ5ZChhLGIsYykpKXJldHVybiEwfWZ1bmN0aW9uIHlkKGEsYixkKXtpZihudWxsPT1kLnRvKXJldHVybiBiPWQubWFya2VyLmZpbmQoMSwhMCkseWQoYSxiLmxpbmUsUGIoYi5saW5lLm1hcmtlZFNwYW5zLGQubWFya2VyKSk7aWYoZC5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJlxuZC50bz09Yi50ZXh0Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGMsZT0wO2U8Yi5tYXJrZWRTcGFucy5sZW5ndGg7KytlKWlmKGM9Yi5tYXJrZWRTcGFuc1tlXSxjLm1hcmtlci5jb2xsYXBzZWQmJiFjLm1hcmtlci53aWRnZXROb2RlJiZjLmZyb209PWQudG8mJihudWxsPT1jLnRvfHxjLnRvIT1kLmZyb20pJiYoYy5tYXJrZXIuaW5jbHVzaXZlTGVmdHx8ZC5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpJiZ5ZChhLGIsYykpcmV0dXJuITB9ZnVuY3Rpb24gR2EoYSl7YT16YShhKTtmb3IodmFyIGI9MCxkPWEucGFyZW50LGM9MDtjPGQubGluZXMubGVuZ3RoOysrYyl7dmFyIGU9ZC5saW5lc1tjXTtpZihlPT1hKWJyZWFrO2Vsc2UgYis9ZS5oZWlnaHR9Zm9yKGE9ZC5wYXJlbnQ7YTtkPWEsYT1kLnBhcmVudClmb3IoYz0wO2M8YS5jaGlsZHJlbi5sZW5ndGgmJihlPWEuY2hpbGRyZW5bY10sZSE9ZCk7KytjKWIrPWUuaGVpZ2h0O3JldHVybiBifWZ1bmN0aW9uIEVjKGEpe2lmKDA9PWEuaGVpZ2h0KXJldHVybiAwO1xuZm9yKHZhciBiPWEudGV4dC5sZW5ndGgsZCxjPWE7ZD1zYihjLCEwKTspZD1kLmZpbmQoMCwhMCksYz1kLmZyb20ubGluZSxiKz1kLmZyb20uY2gtZC50by5jaDtmb3IoYz1hO2Q9c2IoYywhMSk7KWE9ZC5maW5kKDAsITApLGItPWMudGV4dC5sZW5ndGgtYS5mcm9tLmNoLGM9YS50by5saW5lLGIrPWMudGV4dC5sZW5ndGgtYS50by5jaDtyZXR1cm4gYn1mdW5jdGlvbiB6ZChhKXt2YXIgYj1hLmRpc3BsYXk7YT1hLmRvYztiLm1heExpbmU9dyhhLGEuZmlyc3QpO2IubWF4TGluZUxlbmd0aD1FYyhiLm1heExpbmUpO2IubWF4TGluZUNoYW5nZWQ9ITA7YS5pdGVyKGZ1bmN0aW9uKGQpe3ZhciBjPUVjKGQpO2M+Yi5tYXhMaW5lTGVuZ3RoJiYoYi5tYXhMaW5lTGVuZ3RoPWMsYi5tYXhMaW5lPWQpfSl9ZnVuY3Rpb24gS2UoYSxiKXtpZighYXx8L15cXHMqJC8udGVzdChhKSlyZXR1cm4gbnVsbDtiPWIuYWRkTW9kZUNsYXNzP0lnOkpnO3JldHVybiBiW2FdfHwoYlthXT1hLnJlcGxhY2UoL1xcUysvZyxcblwiY20tJCZcIikpfWZ1bmN0aW9uIExlKGEsYil7dmFyIGQ9TShcInNwYW5cIixudWxsLG51bGwsZmE/XCJwYWRkaW5nLXJpZ2h0OiAuMXB4XCI6bnVsbCk7ZD17cHJlOk0oXCJwcmVcIixbZF0sXCJDb2RlTWlycm9yLWxpbmVcIiksY29udGVudDpkLGNvbDowLHBvczowLGNtOmEsdHJhaWxpbmdTcGFjZTohMSxzcGxpdFNwYWNlczphLmdldE9wdGlvbihcImxpbmVXcmFwcGluZ1wiKX07Yi5tZWFzdXJlPXt9O2Zvcih2YXIgYz0wO2M8PShiLnJlc3Q/Yi5yZXN0Lmxlbmd0aDowKTtjKyspe3ZhciBlPWM/Yi5yZXN0W2MtMV06Yi5saW5lLGY9dm9pZCAwO2QucG9zPTA7ZC5hZGRUb2tlbj1LZzt2YXIgZz1hLmRpc3BsYXkubWVhc3VyZTtpZihudWxsIT1BZClnPUFkO2Vsc2V7dmFyIGg9RChnLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiQVxcdTA2MmVBXCIpKSxrPVFiKGgsMCwxKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtoPVFiKGgsMSwyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtFKGcpO2c9ayYmay5sZWZ0IT1cbmsucmlnaHQ/QWQ9Mz5oLnJpZ2h0LWsucmlnaHQ6ITF9ZyYmKGY9SmEoZSxhLmRvYy5kaXJlY3Rpb24pKSYmKGQuYWRkVG9rZW49TGcoZC5hZGRUb2tlbixmKSk7ZC5tYXA9W107dmFyIGw9YiE9YS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQmJk4oZSk7YTp7dmFyIG09aD1rPWc9dm9pZCAwLG49dm9pZCAwLHA9dm9pZCAwLHE9dm9pZCAwO2Y9ZDtsPUFlKGEsZSxsKTt2YXIgcj1lLm1hcmtlZFNwYW5zLHU9ZS50ZXh0LEE9MDtpZihyKWZvcih2YXIgWT11Lmxlbmd0aCx4PTAsUD0xLEs9XCJcIixRPTA7Oyl7aWYoUT09eCl7bj1tPWg9cD1cIlwiO2s9Zz1udWxsO1E9SW5maW5pdHk7Zm9yKHZhciBTPVtdLEY9dm9pZCAwLFI9MDtSPHIubGVuZ3RoOysrUil7dmFyIEg9cltSXSxMPUgubWFya2VyO2lmKFwiYm9va21hcmtcIj09TC50eXBlJiZILmZyb209PXgmJkwud2lkZ2V0Tm9kZSlTLnB1c2goTCk7ZWxzZSBpZihILmZyb208PXgmJihudWxsPT1ILnRvfHxILnRvPnh8fEwuY29sbGFwc2VkJiZILnRvPT1cbngmJkguZnJvbT09eCkpe251bGwhPUgudG8mJkgudG8hPXgmJlE+SC50byYmKFE9SC50byxtPVwiXCIpO0wuY2xhc3NOYW1lJiYobis9XCIgXCIrTC5jbGFzc05hbWUpO0wuY3NzJiYocD0ocD9wK1wiO1wiOlwiXCIpK0wuY3NzKTtMLnN0YXJ0U3R5bGUmJkguZnJvbT09eCYmKGgrPVwiIFwiK0wuc3RhcnRTdHlsZSk7TC5lbmRTdHlsZSYmSC50bz09USYmKEZ8fChGPVtdKSkucHVzaChMLmVuZFN0eWxlLEgudG8pO0wudGl0bGUmJigoZ3x8KGc9e30pKS50aXRsZT1MLnRpdGxlKTtpZihMLmF0dHJpYnV0ZXMpZm9yKHZhciBoYSBpbiBMLmF0dHJpYnV0ZXMpKGd8fChnPXt9KSlbaGFdPUwuYXR0cmlidXRlc1toYV07TC5jb2xsYXBzZWQmJigha3x8MD53ZChrLm1hcmtlcixMKSkmJihrPUgpfWVsc2UgSC5mcm9tPngmJlE+SC5mcm9tJiYoUT1ILmZyb20pfWlmKEYpZm9yKFI9MDtSPEYubGVuZ3RoO1IrPTIpRltSKzFdPT1RJiYobSs9XCIgXCIrRltSXSk7aWYoIWt8fGsuZnJvbT09eClmb3IoRj0wO0Y8Uy5sZW5ndGg7KytGKU1lKGYsXG4wLFNbRl0pO2lmKGsmJihrLmZyb218fDApPT14KXtNZShmLChudWxsPT1rLnRvP1krMTprLnRvKS14LGsubWFya2VyLG51bGw9PWsuZnJvbSk7aWYobnVsbD09ay50bylicmVhayBhO2sudG89PXgmJihrPSExKX19aWYoeD49WSlicmVhaztmb3IoUz1NYXRoLm1pbihZLFEpOzspe2lmKEspe0Y9eCtLLmxlbmd0aDtrfHwoUj1GPlM/Sy5zbGljZSgwLFMteCk6SyxmLmFkZFRva2VuKGYsUixxP3ErbjpuLGgseCtSLmxlbmd0aD09UT9tOlwiXCIscCxnKSk7aWYoRj49Uyl7Sz1LLnNsaWNlKFMteCk7eD1TO2JyZWFrfXg9RjtoPVwiXCJ9Sz11LnNsaWNlKEEsQT1sW1ArK10pO3E9S2UobFtQKytdLGYuY20ub3B0aW9ucyl9fWVsc2UgZm9yKGc9MTtnPGwubGVuZ3RoO2crPTIpZi5hZGRUb2tlbihmLHUuc2xpY2UoQSxBPWxbZ10pLEtlKGxbZysxXSxmLmNtLm9wdGlvbnMpKX1lLnN0eWxlQ2xhc3NlcyYmKGUuc3R5bGVDbGFzc2VzLmJnQ2xhc3MmJihkLmJnQ2xhc3M9ZmQoZS5zdHlsZUNsYXNzZXMuYmdDbGFzcyxcbmQuYmdDbGFzc3x8XCJcIikpLGUuc3R5bGVDbGFzc2VzLnRleHRDbGFzcyYmKGQudGV4dENsYXNzPWZkKGUuc3R5bGVDbGFzc2VzLnRleHRDbGFzcyxkLnRleHRDbGFzc3x8XCJcIikpKTswPT1kLm1hcC5sZW5ndGgmJihlPWQubWFwLGY9ZS5wdXNoLGc9ZC5jb250ZW50LGs9Zy5hcHBlbmRDaGlsZCxoPWEuZGlzcGxheS5tZWFzdXJlLG51bGw9PUJkJiYobT12KFwic3BhblwiLFwiXFx1MjAwYlwiKSxEKGgsdihcInNwYW5cIixbbSxkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInhcIildKSksMCE9aC5maXJzdENoaWxkLm9mZnNldEhlaWdodCYmKEJkPTE+PW0ub2Zmc2V0V2lkdGgmJjI8bS5vZmZzZXRIZWlnaHQmJiEoRyYmOD5UKSkpLGg9QmQ/dihcInNwYW5cIixcIlxcdTIwMGJcIik6dihcInNwYW5cIixcIlxcdTAwYTBcIixudWxsLFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHhcIiksaC5zZXRBdHRyaWJ1dGUoXCJjbS10ZXh0XCIsXCJcIiksZi5jYWxsKGUsMCwwLGsuY2FsbChnLFxuaCkpKTswPT1jPyhiLm1lYXN1cmUubWFwPWQubWFwLGIubWVhc3VyZS5jYWNoZT17fSk6KChiLm1lYXN1cmUubWFwc3x8KGIubWVhc3VyZS5tYXBzPVtdKSkucHVzaChkLm1hcCksKGIubWVhc3VyZS5jYWNoZXN8fChiLm1lYXN1cmUuY2FjaGVzPVtdKSkucHVzaCh7fSkpfWZhJiYoaGE9ZC5jb250ZW50Lmxhc3RDaGlsZCwvXFxiY20tdGFiXFxiLy50ZXN0KGhhLmNsYXNzTmFtZSl8fGhhLnF1ZXJ5U2VsZWN0b3ImJmhhLnF1ZXJ5U2VsZWN0b3IoXCIuY20tdGFiXCIpKSYmKGQuY29udGVudC5jbGFzc05hbWU9XCJjbS10YWItd3JhcC1oYWNrXCIpO1coYSxcInJlbmRlckxpbmVcIixhLGIubGluZSxkLnByZSk7ZC5wcmUuY2xhc3NOYW1lJiYoZC50ZXh0Q2xhc3M9ZmQoZC5wcmUuY2xhc3NOYW1lLGQudGV4dENsYXNzfHxcIlwiKSk7cmV0dXJuIGR9ZnVuY3Rpb24gTWcoYSl7dmFyIGI9dihcInNwYW5cIixcIlxcdTIwMjJcIixcImNtLWludmFsaWRjaGFyXCIpO2IudGl0bGU9XCJcXFxcdVwiK2EuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7XG5iLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixiLnRpdGxlKTtyZXR1cm4gYn1mdW5jdGlvbiBLZyhhLGIsZCxjLGUsZixnKXtpZihiKXtpZihhLnNwbGl0U3BhY2VzKXt2YXIgaD1hLnRyYWlsaW5nU3BhY2U7aWYoMTxiLmxlbmd0aCYmIS8gIC8udGVzdChiKSloPWI7ZWxzZXtmb3IodmFyIGs9XCJcIixsPTA7bDxiLmxlbmd0aDtsKyspe3ZhciBtPWIuY2hhckF0KGwpO1wiIFwiIT1tfHwhaHx8bCE9Yi5sZW5ndGgtMSYmMzIhPWIuY2hhckNvZGVBdChsKzEpfHwobT1cIlxcdTAwYTBcIik7ays9bTtoPVwiIFwiPT1tfWg9a319ZWxzZSBoPWI7az1oO2w9YS5jbS5zdGF0ZS5zcGVjaWFsQ2hhcnM7bT0hMTtpZihsLnRlc3QoYikpe2g9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2Zvcih2YXIgbj0wOzspe2wubGFzdEluZGV4PW47dmFyIHA9bC5leGVjKGIpLHE9cD9wLmluZGV4LW46Yi5sZW5ndGgtbjtpZihxKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrLnNsaWNlKG4sbitcbnEpKTtHJiY5PlQ/aC5hcHBlbmRDaGlsZCh2KFwic3BhblwiLFtyXSkpOmguYXBwZW5kQ2hpbGQocik7YS5tYXAucHVzaChhLnBvcyxhLnBvcytxLHIpO2EuY29sKz1xO2EucG9zKz1xfWlmKCFwKWJyZWFrO24rPXErMTtcIlxcdFwiPT1wWzBdPyhwPWEuY20ub3B0aW9ucy50YWJTaXplLHAtPWEuY29sJXAscT1oLmFwcGVuZENoaWxkKHYoXCJzcGFuXCIsaWQocCksXCJjbS10YWJcIikpLHEuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwicHJlc2VudGF0aW9uXCIpLHEuc2V0QXR0cmlidXRlKFwiY20tdGV4dFwiLFwiXFx0XCIpLGEuY29sKz1wKTooXCJcXHJcIj09cFswXXx8XCJcXG5cIj09cFswXT8ocT1oLmFwcGVuZENoaWxkKHYoXCJzcGFuXCIsXCJcXHJcIj09cFswXT9cIlxcdTI0MGRcIjpcIlxcdTI0MjRcIixcImNtLWludmFsaWRjaGFyXCIpKSxxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIixwWzBdKSk6KHE9YS5jbS5vcHRpb25zLnNwZWNpYWxDaGFyUGxhY2Vob2xkZXIocFswXSkscS5zZXRBdHRyaWJ1dGUoXCJjbS10ZXh0XCIscFswXSksRyYmOT5UP1xuaC5hcHBlbmRDaGlsZCh2KFwic3BhblwiLFtxXSkpOmguYXBwZW5kQ2hpbGQocSkpLGEuY29sKz0xKTthLm1hcC5wdXNoKGEucG9zLGEucG9zKzEscSk7YS5wb3MrK319ZWxzZSBhLmNvbCs9Yi5sZW5ndGgsaD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrKSxhLm1hcC5wdXNoKGEucG9zLGEucG9zK2IubGVuZ3RoLGgpLEcmJjk+VCYmKG09ITApLGEucG9zKz1iLmxlbmd0aDthLnRyYWlsaW5nU3BhY2U9MzI9PWsuY2hhckNvZGVBdChiLmxlbmd0aC0xKTtpZihkfHxjfHxlfHxtfHxmfHxnKXtiPWR8fFwiXCI7YyYmKGIrPWMpO2UmJihiKz1lKTtjPXYoXCJzcGFuXCIsW2hdLGIsZik7aWYoZylmb3IodmFyIHUgaW4gZylnLmhhc093blByb3BlcnR5KHUpJiZcInN0eWxlXCIhPXUmJlwiY2xhc3NcIiE9dSYmYy5zZXRBdHRyaWJ1dGUodSxnW3VdKTtyZXR1cm4gYS5jb250ZW50LmFwcGVuZENoaWxkKGMpfWEuY29udGVudC5hcHBlbmRDaGlsZChoKX19ZnVuY3Rpb24gTGcoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZCxcbmMsZSxmLGcsaCxrKXtlPWU/ZStcIiBjbS1mb3JjZS1ib3JkZXJcIjpcImNtLWZvcmNlLWJvcmRlclwiO2Zvcih2YXIgbD1kLnBvcyxtPWwrYy5sZW5ndGg7Oyl7Zm9yKHZhciBuPXZvaWQgMCxwPTA7cDxiLmxlbmd0aCYmIShuPWJbcF0sbi50bz5sJiZuLmZyb208PWwpO3ArKyk7aWYobi50bz49bSlyZXR1cm4gYShkLGMsZSxmLGcsaCxrKTthKGQsYy5zbGljZSgwLG4udG8tbCksZSxmLG51bGwsaCxrKTtmPW51bGw7Yz1jLnNsaWNlKG4udG8tbCk7bD1uLnRvfX19ZnVuY3Rpb24gTWUoYSxiLGQsYyl7dmFyIGU9IWMmJmQud2lkZ2V0Tm9kZTtlJiZhLm1hcC5wdXNoKGEucG9zLGEucG9zK2IsZSk7IWMmJmEuY20uZGlzcGxheS5pbnB1dC5uZWVkc0NvbnRlbnRBdHRyaWJ1dGUmJihlfHwoZT1hLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIikpKSxlLnNldEF0dHJpYnV0ZShcImNtLW1hcmtlclwiLGQuaWQpKTtlJiYoYS5jbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUoZSksXG5hLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZSkpO2EucG9zKz1iO2EudHJhaWxpbmdTcGFjZT0hMX1mdW5jdGlvbiBOZShhLGIsZCl7Zm9yKHZhciBjPXRoaXMubGluZT1iLGU7Yz1zYihjLCExKTspYz1jLmZpbmQoMSwhMCkubGluZSwoZXx8KGU9W10pKS5wdXNoKGMpO3RoaXMuc2l6ZT0odGhpcy5yZXN0PWUpP04oSih0aGlzLnJlc3QpKS1kKzE6MTt0aGlzLm5vZGU9dGhpcy50ZXh0PW51bGw7dGhpcy5oaWRkZW49UGEoYSxiKX1mdW5jdGlvbiBGYyhhLGIsZCl7dmFyIGM9W10sZTtmb3IoZT1iO2U8ZDspYj1uZXcgTmUoYS5kb2MsdyhhLmRvYyxlKSxlKSxlKz1iLnNpemUsYy5wdXNoKGIpO3JldHVybiBjfWZ1bmN0aW9uIE5nKGEsYil7aWYoYT1hLm93bnNHcm91cCl0cnl7dmFyIGQ9YS5kZWxheWVkQ2FsbGJhY2tzLGM9MDtkb3tmb3IoO2M8ZC5sZW5ndGg7YysrKWRbY10uY2FsbChudWxsKTtmb3IodmFyIGU9MDtlPGEub3BzLmxlbmd0aDtlKyspe3ZhciBmPWEub3BzW2VdO2lmKGYuY3Vyc29yQWN0aXZpdHlIYW5kbGVycylmb3IoO2YuY3Vyc29yQWN0aXZpdHlDYWxsZWQ8XG5mLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMubGVuZ3RoOylmLmN1cnNvckFjdGl2aXR5SGFuZGxlcnNbZi5jdXJzb3JBY3Rpdml0eUNhbGxlZCsrXS5jYWxsKG51bGwsZi5jbSl9fXdoaWxlKGM8ZC5sZW5ndGgpfWZpbmFsbHl7dGI9bnVsbCxiKGEpfX1mdW5jdGlvbiBhYShhLGIpe3ZhciBkPWEuX2hhbmRsZXJzJiZhLl9oYW5kbGVyc1tiXXx8eWM7aWYoZC5sZW5ndGgpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtpZih0Yil2YXIgZT10Yi5kZWxheWVkQ2FsbGJhY2tzO2Vsc2UgUmI/ZT1SYjooZT1SYj1bXSxzZXRUaW1lb3V0KE9nLDApKTtmb3IodmFyIGY9ZnVuY3Rpb24oaCl7ZS5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGRbaF0uYXBwbHkobnVsbCxjKX0pfSxnPTA7ZzxkLmxlbmd0aDsrK2cpZihnKX19ZnVuY3Rpb24gT2coKXt2YXIgYT1SYjtSYj1udWxsO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7KytiKWFbYl0oKX1mdW5jdGlvbiBPZShhLGIsXG5kLGMpe2Zvcih2YXIgZT0wO2U8Yi5jaGFuZ2VzLmxlbmd0aDtlKyspe3ZhciBmPWIuY2hhbmdlc1tlXTtpZihcInRleHRcIj09Zil7Zj1hO3ZhciBnPWIsaD1nLnRleHQuY2xhc3NOYW1lLGs9UGUoZixnKTtnLnRleHQ9PWcubm9kZSYmKGcubm9kZT1rLnByZSk7Zy50ZXh0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGsucHJlLGcudGV4dCk7Zy50ZXh0PWsucHJlO2suYmdDbGFzcyE9Zy5iZ0NsYXNzfHxrLnRleHRDbGFzcyE9Zy50ZXh0Q2xhc3M/KGcuYmdDbGFzcz1rLmJnQ2xhc3MsZy50ZXh0Q2xhc3M9ay50ZXh0Q2xhc3MsQ2QoZixnKSk6aCYmKGcudGV4dC5jbGFzc05hbWU9aCl9ZWxzZSBpZihcImd1dHRlclwiPT1mKVFlKGEsYixkLGMpO2Vsc2UgaWYoXCJjbGFzc1wiPT1mKUNkKGEsYik7ZWxzZSBpZihcIndpZGdldFwiPT1mKXtmPWE7Zz1iO2g9YztnLmFsaWduYWJsZSYmKGcuYWxpZ25hYmxlPW51bGwpO2s9eShcIkNvZGVNaXJyb3ItbGluZXdpZGdldFwiKTtmb3IodmFyIGw9Zy5ub2RlLmZpcnN0Q2hpbGQsXG5tO2w7bD1tKW09bC5uZXh0U2libGluZyxrLnRlc3QobC5jbGFzc05hbWUpJiZnLm5vZGUucmVtb3ZlQ2hpbGQobCk7UmUoZixnLGgpfX1iLmNoYW5nZXM9bnVsbH1mdW5jdGlvbiBTYihhKXthLm5vZGU9PWEudGV4dCYmKGEubm9kZT12KFwiZGl2XCIsbnVsbCxudWxsLFwicG9zaXRpb246IHJlbGF0aXZlXCIpLGEudGV4dC5wYXJlbnROb2RlJiZhLnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYS5ub2RlLGEudGV4dCksYS5ub2RlLmFwcGVuZENoaWxkKGEudGV4dCksRyYmOD5UJiYoYS5ub2RlLnN0eWxlLnpJbmRleD0yKSk7cmV0dXJuIGEubm9kZX1mdW5jdGlvbiBQZShhLGIpe3ZhciBkPWEuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO3JldHVybiBkJiZkLmxpbmU9PWIubGluZT8oYS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ9bnVsbCxiLm1lYXN1cmU9ZC5tZWFzdXJlLGQuYnVpbHQpOkxlKGEsYil9ZnVuY3Rpb24gQ2QoYSxiKXt2YXIgZD1iLmJnQ2xhc3M/Yi5iZ0NsYXNzK1wiIFwiK1xuKGIubGluZS5iZ0NsYXNzfHxcIlwiKTpiLmxpbmUuYmdDbGFzcztkJiYoZCs9XCIgQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZFwiKTtpZihiLmJhY2tncm91bmQpZD9iLmJhY2tncm91bmQuY2xhc3NOYW1lPWQ6KGIuYmFja2dyb3VuZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIuYmFja2dyb3VuZCksYi5iYWNrZ3JvdW5kPW51bGwpO2Vsc2UgaWYoZCl7dmFyIGM9U2IoYik7Yi5iYWNrZ3JvdW5kPWMuaW5zZXJ0QmVmb3JlKHYoXCJkaXZcIixudWxsLGQpLGMuZmlyc3RDaGlsZCk7YS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUoYi5iYWNrZ3JvdW5kKX1iLmxpbmUud3JhcENsYXNzP1NiKGIpLmNsYXNzTmFtZT1iLmxpbmUud3JhcENsYXNzOmIubm9kZSE9Yi50ZXh0JiYoYi5ub2RlLmNsYXNzTmFtZT1cIlwiKTtiLnRleHQuY2xhc3NOYW1lPShiLnRleHRDbGFzcz9iLnRleHRDbGFzcytcIiBcIisoYi5saW5lLnRleHRDbGFzc3x8XCJcIik6Yi5saW5lLnRleHRDbGFzcyl8fFwiXCJ9ZnVuY3Rpb24gUWUoYSxcbmIsZCxjKXtiLmd1dHRlciYmKGIubm9kZS5yZW1vdmVDaGlsZChiLmd1dHRlciksYi5ndXR0ZXI9bnVsbCk7Yi5ndXR0ZXJCYWNrZ3JvdW5kJiYoYi5ub2RlLnJlbW92ZUNoaWxkKGIuZ3V0dGVyQmFja2dyb3VuZCksYi5ndXR0ZXJCYWNrZ3JvdW5kPW51bGwpO2lmKGIubGluZS5ndXR0ZXJDbGFzcyl7dmFyIGU9U2IoYik7Yi5ndXR0ZXJCYWNrZ3JvdW5kPXYoXCJkaXZcIixudWxsLFwiQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCBcIitiLmxpbmUuZ3V0dGVyQ2xhc3MsXCJsZWZ0OiBcIisoYS5vcHRpb25zLmZpeGVkR3V0dGVyP2MuZml4ZWRQb3M6LWMuZ3V0dGVyVG90YWxXaWR0aCkrXCJweDsgd2lkdGg6IFwiK2MuZ3V0dGVyVG90YWxXaWR0aCtcInB4XCIpO2EuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGIuZ3V0dGVyQmFja2dyb3VuZCk7ZS5pbnNlcnRCZWZvcmUoYi5ndXR0ZXJCYWNrZ3JvdW5kLGIudGV4dCl9ZT1iLmxpbmUuZ3V0dGVyTWFya2VycztpZihhLm9wdGlvbnMubGluZU51bWJlcnN8fFxuZSl7dmFyIGY9U2IoYiksZz1iLmd1dHRlcj12KFwiZGl2XCIsbnVsbCxcIkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXJcIixcImxlZnQ6IFwiKyhhLm9wdGlvbnMuZml4ZWRHdXR0ZXI/Yy5maXhlZFBvczotYy5ndXR0ZXJUb3RhbFdpZHRoKStcInB4XCIpO2cuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIik7YS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUoZyk7Zi5pbnNlcnRCZWZvcmUoZyxiLnRleHQpO2IubGluZS5ndXR0ZXJDbGFzcyYmKGcuY2xhc3NOYW1lKz1cIiBcIitiLmxpbmUuZ3V0dGVyQ2xhc3MpOyFhLm9wdGlvbnMubGluZU51bWJlcnN8fGUmJmVbXCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCJdfHwoYi5saW5lTnVtYmVyPWcuYXBwZW5kQ2hpbGQodihcImRpdlwiLHFkKGEub3B0aW9ucyxkKSxcIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHRcIixcImxlZnQ6IFwiK2MuZ3V0dGVyTGVmdFtcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIl0rXCJweDsgd2lkdGg6IFwiK1xuYS5kaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoK1wicHhcIikpKTtpZihlKWZvcihiPTA7YjxhLmRpc3BsYXkuZ3V0dGVyU3BlY3MubGVuZ3RoOysrYilkPWEuZGlzcGxheS5ndXR0ZXJTcGVjc1tiXS5jbGFzc05hbWUsKGY9ZS5oYXNPd25Qcm9wZXJ0eShkKSYmZVtkXSkmJmcuYXBwZW5kQ2hpbGQodihcImRpdlwiLFtmXSxcIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdFwiLFwibGVmdDogXCIrYy5ndXR0ZXJMZWZ0W2RdK1wicHg7IHdpZHRoOiBcIitjLmd1dHRlcldpZHRoW2RdK1wicHhcIikpfX1mdW5jdGlvbiBQZyhhLGIsZCxjKXt2YXIgZT1QZShhLGIpO2IudGV4dD1iLm5vZGU9ZS5wcmU7ZS5iZ0NsYXNzJiYoYi5iZ0NsYXNzPWUuYmdDbGFzcyk7ZS50ZXh0Q2xhc3MmJihiLnRleHRDbGFzcz1lLnRleHRDbGFzcyk7Q2QoYSxiKTtRZShhLGIsZCxjKTtSZShhLGIsYyk7cmV0dXJuIGIubm9kZX1mdW5jdGlvbiBSZShhLGIsZCl7U2UoYSxiLmxpbmUsYixkLCEwKTtpZihiLnJlc3QpZm9yKHZhciBjPTA7YzxiLnJlc3QubGVuZ3RoO2MrKylTZShhLFxuYi5yZXN0W2NdLGIsZCwhMSl9ZnVuY3Rpb24gU2UoYSxiLGQsYyxlKXtpZihiLndpZGdldHMpe3ZhciBmPVNiKGQpLGc9MDtmb3IoYj1iLndpZGdldHM7ZzxiLmxlbmd0aDsrK2cpe3ZhciBoPWJbZ10saz12KFwiZGl2XCIsW2gubm9kZV0sXCJDb2RlTWlycm9yLWxpbmV3aWRnZXRcIisoaC5jbGFzc05hbWU/XCIgXCIraC5jbGFzc05hbWU6XCJcIikpO2guaGFuZGxlTW91c2VFdmVudHN8fGsuc2V0QXR0cmlidXRlKFwiY20taWdub3JlLWV2ZW50c1wiLFwidHJ1ZVwiKTt2YXIgbD1oLG09ayxuPWM7aWYobC5ub0hTY3JvbGwpeyhkLmFsaWduYWJsZXx8KGQuYWxpZ25hYmxlPVtdKSkucHVzaChtKTt2YXIgcD1uLndyYXBwZXJXaWR0aDttLnN0eWxlLmxlZnQ9bi5maXhlZFBvcytcInB4XCI7bC5jb3Zlckd1dHRlcnx8KHAtPW4uZ3V0dGVyVG90YWxXaWR0aCxtLnN0eWxlLnBhZGRpbmdMZWZ0PW4uZ3V0dGVyVG90YWxXaWR0aCtcInB4XCIpO20uc3R5bGUud2lkdGg9cCtcInB4XCJ9bC5jb3Zlckd1dHRlciYmKG0uc3R5bGUuekluZGV4PVxuNSxtLnN0eWxlLnBvc2l0aW9uPVwicmVsYXRpdmVcIixsLm5vSFNjcm9sbHx8KG0uc3R5bGUubWFyZ2luTGVmdD0tbi5ndXR0ZXJUb3RhbFdpZHRoK1wicHhcIikpO2EuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGspO2UmJmguYWJvdmU/Zi5pbnNlcnRCZWZvcmUoayxkLmd1dHRlcnx8ZC50ZXh0KTpmLmFwcGVuZENoaWxkKGspO2FhKGgsXCJyZWRyYXdcIil9fX1mdW5jdGlvbiBUYihhKXtpZihudWxsIT1hLmhlaWdodClyZXR1cm4gYS5oZWlnaHQ7dmFyIGI9YS5kb2MuY207aWYoIWIpcmV0dXJuIDA7aWYoIWphKGRvY3VtZW50LmJvZHksYS5ub2RlKSl7dmFyIGQ9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI7YS5jb3Zlckd1dHRlciYmKGQrPVwibWFyZ2luLWxlZnQ6IC1cIitiLmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCtcInB4O1wiKTthLm5vSFNjcm9sbCYmKGQrPVwid2lkdGg6IFwiK2IuZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoK1wicHg7XCIpO0QoYi5kaXNwbGF5Lm1lYXN1cmUsdihcImRpdlwiLFxuW2Eubm9kZV0sbnVsbCxkKSl9cmV0dXJuIGEuaGVpZ2h0PWEubm9kZS5wYXJlbnROb2RlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBMYShhLGIpe2ZvcihiPWIudGFyZ2V0fHxiLnNyY0VsZW1lbnQ7YiE9YS53cmFwcGVyO2I9Yi5wYXJlbnROb2RlKWlmKCFifHwxPT1iLm5vZGVUeXBlJiZcInRydWVcIj09Yi5nZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIpfHxiLnBhcmVudE5vZGU9PWEuc2l6ZXImJmIhPWEubW92ZXIpcmV0dXJuITB9ZnVuY3Rpb24gRGQoYSl7cmV0dXJuIGEubW92ZXIub2Zmc2V0SGVpZ2h0LWEubGluZVNwYWNlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBUZShhKXtpZihhLmNhY2hlZFBhZGRpbmdIKXJldHVybiBhLmNhY2hlZFBhZGRpbmdIO3ZhciBiPUQoYS5tZWFzdXJlLHYoXCJwcmVcIixcInhcIixcIkNvZGVNaXJyb3ItbGluZS1saWtlXCIpKTtiPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGIpOmIuY3VycmVudFN0eWxlO2I9e2xlZnQ6cGFyc2VJbnQoYi5wYWRkaW5nTGVmdCksXG5yaWdodDpwYXJzZUludChiLnBhZGRpbmdSaWdodCl9O2lzTmFOKGIubGVmdCl8fGlzTmFOKGIucmlnaHQpfHwoYS5jYWNoZWRQYWRkaW5nSD1iKTtyZXR1cm4gYn1mdW5jdGlvbiBIYShhKXtyZXR1cm4gNTAtYS5kaXNwbGF5Lm5hdGl2ZUJhcldpZHRofWZ1bmN0aW9uIGNiKGEpe3JldHVybiBhLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgtSGEoYSktYS5kaXNwbGF5LmJhcldpZHRofWZ1bmN0aW9uIEVkKGEpe3JldHVybiBhLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LUhhKGEpLWEuZGlzcGxheS5iYXJIZWlnaHR9ZnVuY3Rpb24gVWUoYSxiLGQpe2lmKGEubGluZT09YilyZXR1cm57bWFwOmEubWVhc3VyZS5tYXAsY2FjaGU6YS5tZWFzdXJlLmNhY2hlfTtpZihhLnJlc3Qpe2Zvcih2YXIgYz0wO2M8YS5yZXN0Lmxlbmd0aDtjKyspaWYoYS5yZXN0W2NdPT1iKXJldHVybnttYXA6YS5tZWFzdXJlLm1hcHNbY10sY2FjaGU6YS5tZWFzdXJlLmNhY2hlc1tjXX07Zm9yKGI9XG4wO2I8YS5yZXN0Lmxlbmd0aDtiKyspaWYoTihhLnJlc3RbYl0pPmQpcmV0dXJue21hcDphLm1lYXN1cmUubWFwc1tiXSxjYWNoZTphLm1lYXN1cmUuY2FjaGVzW2JdLGJlZm9yZTohMH19fWZ1bmN0aW9uIEZkKGEsYil7aWYoYj49YS5kaXNwbGF5LnZpZXdGcm9tJiZiPGEuZGlzcGxheS52aWV3VG8pcmV0dXJuIGEuZGlzcGxheS52aWV3W2RiKGEsYildO2lmKChhPWEuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkKSYmYj49YS5saW5lTiYmYjxhLmxpbmVOK2Euc2l6ZSlyZXR1cm4gYX1mdW5jdGlvbiBlYihhLGIpe3ZhciBkPU4oYiksYz1GZChhLGQpO2MmJiFjLnRleHQ/Yz1udWxsOmMmJmMuY2hhbmdlcyYmKE9lKGEsYyxkLEdkKGEpKSxhLmN1ck9wLmZvcmNlVXBkYXRlPSEwKTtpZighYyl7dmFyIGU9emEoYik7Yz1OKGUpO2U9YS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ9bmV3IE5lKGEuZG9jLGUsYyk7ZS5saW5lTj1jO2M9ZS5idWlsdD1MZShhLGUpO2UudGV4dD1jLnByZTtEKGEuZGlzcGxheS5saW5lTWVhc3VyZSxcbmMucHJlKTtjPWV9YT1VZShjLGIsZCk7cmV0dXJue2xpbmU6Yix2aWV3OmMscmVjdDpudWxsLG1hcDphLm1hcCxjYWNoZTphLmNhY2hlLGJlZm9yZTphLmJlZm9yZSxoYXNIZWlnaHRzOiExfX1mdW5jdGlvbiBBYShhLGIsZCxjLGUpe2IuYmVmb3JlJiYoZD0tMSk7dmFyIGY9ZCsoY3x8XCJcIik7aWYoYi5jYWNoZS5oYXNPd25Qcm9wZXJ0eShmKSlhPWIuY2FjaGVbZl07ZWxzZXtiLnJlY3R8fChiLnJlY3Q9Yi52aWV3LnRleHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO2lmKCFiLmhhc0hlaWdodHMpe3ZhciBnPWIudmlldyxoPWIucmVjdCxrPWEub3B0aW9ucy5saW5lV3JhcHBpbmcsbD1rJiZjYihhKTtpZighZy5tZWFzdXJlLmhlaWdodHN8fGsmJmcubWVhc3VyZS53aWR0aCE9bCl7dmFyIG09Zy5tZWFzdXJlLmhlaWdodHM9W107aWYoaylmb3IoZy5tZWFzdXJlLndpZHRoPWwsZz1nLnRleHQuZmlyc3RDaGlsZC5nZXRDbGllbnRSZWN0cygpLGs9MDtrPGcubGVuZ3RoLTE7aysrKXtsPVxuZ1trXTt2YXIgbj1nW2srMV07MjxNYXRoLmFicyhsLmJvdHRvbS1uLmJvdHRvbSkmJm0ucHVzaCgobC5ib3R0b20rbi50b3ApLzItaC50b3ApfW0ucHVzaChoLmJvdHRvbS1oLnRvcCl9Yi5oYXNIZWlnaHRzPSEwfW09YztnPVZlKGIubWFwLGQsbSk7Yz1nLm5vZGU7aD1nLnN0YXJ0O2s9Zy5lbmQ7ZD1nLmNvbGxhcHNlO2lmKDM9PWMubm9kZVR5cGUpe2Zvcih2YXIgcD0wOzQ+cDtwKyspe2Zvcig7aCYma2QoYi5saW5lLnRleHQuY2hhckF0KGcuY292ZXJTdGFydCtoKSk7KS0taDtmb3IoO2cuY292ZXJTdGFydCtrPGcuY292ZXJFbmQmJmtkKGIubGluZS50ZXh0LmNoYXJBdChnLmNvdmVyU3RhcnQraykpOykrK2s7aWYoRyYmOT5UJiYwPT1oJiZrPT1nLmNvdmVyRW5kLWcuY292ZXJTdGFydCl2YXIgcT1jLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXtxPVFiKGMsaCxrKS5nZXRDbGllbnRSZWN0cygpO2s9V2U7aWYoXCJsZWZ0XCI9PW0pZm9yKGw9MDtsPHEubGVuZ3RoJiZcbihrPXFbbF0pLmxlZnQ9PWsucmlnaHQ7bCsrKTtlbHNlIGZvcihsPXEubGVuZ3RoLTE7MDw9bCYmKGs9cVtsXSkubGVmdD09ay5yaWdodDtsLS0pO3E9a31pZihxLmxlZnR8fHEucmlnaHR8fDA9PWgpYnJlYWs7az1oOy0taDtkPVwicmlnaHRcIn1HJiYxMT5UJiYoKHA9IXdpbmRvdy5zY3JlZW58fG51bGw9PXNjcmVlbi5sb2dpY2FsWERQSXx8c2NyZWVuLmxvZ2ljYWxYRFBJPT1zY3JlZW4uZGV2aWNlWERQSSl8fChudWxsIT1IZD9wPUhkOihtPUQoYS5kaXNwbGF5Lm1lYXN1cmUsdihcInNwYW5cIixcInhcIikpLHA9bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtPVFiKG0sMCwxKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPUhkPTE8TWF0aC5hYnMocC5sZWZ0LW0ubGVmdCkpLHA9IXApLHB8fChwPXNjcmVlbi5sb2dpY2FsWERQSS9zY3JlZW4uZGV2aWNlWERQSSxtPXNjcmVlbi5sb2dpY2FsWURQSS9zY3JlZW4uZGV2aWNlWURQSSxxPXtsZWZ0OnEubGVmdCpwLHJpZ2h0OnEucmlnaHQqcCxcbnRvcDpxLnRvcCptLGJvdHRvbTpxLmJvdHRvbSptfSkpfWVsc2UgMDxoJiYoZD1tPVwicmlnaHRcIikscT1hLm9wdGlvbnMubGluZVdyYXBwaW5nJiYxPChwPWMuZ2V0Q2xpZW50UmVjdHMoKSkubGVuZ3RoP3BbXCJyaWdodFwiPT1tP3AubGVuZ3RoLTE6MF06Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTshKEcmJjk+VCl8fGh8fHEmJihxLmxlZnR8fHEucmlnaHQpfHwocT0ocT1jLnBhcmVudE5vZGUuZ2V0Q2xpZW50UmVjdHMoKVswXSk/e2xlZnQ6cS5sZWZ0LHJpZ2h0OnEubGVmdCt1YihhLmRpc3BsYXkpLHRvcDpxLnRvcCxib3R0b206cS5ib3R0b219OldlKTtjPXEudG9wLWIucmVjdC50b3A7aD1xLmJvdHRvbS1iLnJlY3QudG9wO3A9KGMraCkvMjttPWIudmlldy5tZWFzdXJlLmhlaWdodHM7Zm9yKGc9MDtnPG0ubGVuZ3RoLTEmJiEocDxtW2ddKTtnKyspO2Q9e2xlZnQ6KFwicmlnaHRcIj09ZD9xLnJpZ2h0OnEubGVmdCktYi5yZWN0LmxlZnQscmlnaHQ6KFwibGVmdFwiPT1kP3EubGVmdDpxLnJpZ2h0KS1cbmIucmVjdC5sZWZ0LHRvcDpnP21bZy0xXTowLGJvdHRvbTptW2ddfTtxLmxlZnR8fHEucmlnaHR8fChkLmJvZ3VzPSEwKTthLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZXx8KGQucnRvcD1jLGQucmJvdHRvbT1oKTthPWQ7YS5ib2d1c3x8KGIuY2FjaGVbZl09YSl9cmV0dXJue2xlZnQ6YS5sZWZ0LHJpZ2h0OmEucmlnaHQsdG9wOmU/YS5ydG9wOmEudG9wLGJvdHRvbTplP2EucmJvdHRvbTphLmJvdHRvbX19ZnVuY3Rpb24gVmUoYSxiLGQpe2Zvcih2YXIgYyxlLGYsZyxoLGssbD0wO2w8YS5sZW5ndGg7bCs9Myl7aD1hW2xdO2s9YVtsKzFdO2lmKGI8aCllPTAsZj0xLGc9XCJsZWZ0XCI7ZWxzZSBpZihiPGspZT1iLWgsZj1lKzE7ZWxzZSBpZihsPT1hLmxlbmd0aC0zfHxiPT1rJiZhW2wrM10+YilmPWstaCxlPWYtMSxiPj1rJiYoZz1cInJpZ2h0XCIpO2lmKG51bGwhPWUpe2M9YVtsKzJdO2g9PWsmJmQ9PShjLmluc2VydExlZnQ/XCJsZWZ0XCI6XCJyaWdodFwiKSYmKGc9ZCk7aWYoXCJsZWZ0XCI9PVxuZCYmMD09ZSlmb3IoO2wmJmFbbC0yXT09YVtsLTNdJiZhW2wtMV0uaW5zZXJ0TGVmdDspYz1hWyhsLT0zKSsyXSxnPVwibGVmdFwiO2lmKFwicmlnaHRcIj09ZCYmZT09ay1oKWZvcig7bDxhLmxlbmd0aC0zJiZhW2wrM109PWFbbCs0XSYmIWFbbCs1XS5pbnNlcnRMZWZ0OyljPWFbKGwrPTMpKzJdLGc9XCJyaWdodFwiO2JyZWFrfX1yZXR1cm57bm9kZTpjLHN0YXJ0OmUsZW5kOmYsY29sbGFwc2U6Zyxjb3ZlclN0YXJ0OmgsY292ZXJFbmQ6a319ZnVuY3Rpb24gWGUoYSl7aWYoYS5tZWFzdXJlJiYoYS5tZWFzdXJlLmNhY2hlPXt9LGEubWVhc3VyZS5oZWlnaHRzPW51bGwsYS5yZXN0KSlmb3IodmFyIGI9MDtiPGEucmVzdC5sZW5ndGg7YisrKWEubWVhc3VyZS5jYWNoZXNbYl09e319ZnVuY3Rpb24gWWUoYSl7YS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZT1udWxsO0UoYS5kaXNwbGF5LmxpbmVNZWFzdXJlKTtmb3IodmFyIGI9MDtiPGEuZGlzcGxheS52aWV3Lmxlbmd0aDtiKyspWGUoYS5kaXNwbGF5LnZpZXdbYl0pfVxuZnVuY3Rpb24gVWIoYSl7WWUoYSk7YS5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aD1hLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodD1hLmRpc3BsYXkuY2FjaGVkUGFkZGluZ0g9bnVsbDthLm9wdGlvbnMubGluZVdyYXBwaW5nfHwoYS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKTthLmRpc3BsYXkubGluZU51bUNoYXJzPW51bGx9ZnVuY3Rpb24gWmUoYSl7cmV0dXJuIFFhJiZHYz8tKGEuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYS5ib2R5KS5tYXJnaW5MZWZ0KSk6YS5kZWZhdWx0Vmlldy5wYWdlWE9mZnNldHx8KGEuZG9jdW1lbnRFbGVtZW50fHxhLmJvZHkpLnNjcm9sbExlZnR9ZnVuY3Rpb24gJGUoYSl7cmV0dXJuIFFhJiZHYz8tKGEuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhLmJvZHkpLm1hcmdpblRvcCkpOmEuZGVmYXVsdFZpZXcucGFnZVlPZmZzZXR8fFxuKGEuZG9jdW1lbnRFbGVtZW50fHxhLmJvZHkpLnNjcm9sbFRvcH1mdW5jdGlvbiBJZChhKXthPXphKGEpLndpZGdldHM7dmFyIGI9MDtpZihhKWZvcih2YXIgZD0wO2Q8YS5sZW5ndGg7KytkKWFbZF0uYWJvdmUmJihiKz1UYihhW2RdKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gSGMoYSxiLGQsYyxlKXtlfHwoZT1JZChiKSxkLnRvcCs9ZSxkLmJvdHRvbSs9ZSk7aWYoXCJsaW5lXCI9PWMpcmV0dXJuIGQ7Y3x8KGM9XCJsb2NhbFwiKTtiPUdhKGIpO2I9XCJsb2NhbFwiPT1jP2IrYS5kaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRUb3A6Yi1hLmRpc3BsYXkudmlld09mZnNldDtpZihcInBhZ2VcIj09Y3x8XCJ3aW5kb3dcIj09YyllPWEuZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYis9ZS50b3ArKFwid2luZG93XCI9PWM/MDokZShxYShhKSkpLGE9ZS5sZWZ0KyhcIndpbmRvd1wiPT1jPzA6WmUocWEoYSkpKSxkLmxlZnQrPWEsZC5yaWdodCs9YTtkLnRvcCs9YjtkLmJvdHRvbSs9YjtyZXR1cm4gZH1cbmZ1bmN0aW9uIGFmKGEsYixkKXtpZihcImRpdlwiPT1kKXJldHVybiBiO3ZhciBjPWIubGVmdDtiPWIudG9wO1wicGFnZVwiPT1kPyhjLT1aZShxYShhKSksYi09JGUocWEoYSkpKTpcImxvY2FsXCIhPWQmJmR8fChkPWEuZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjKz1kLmxlZnQsYis9ZC50b3ApO2E9YS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57bGVmdDpjLWEubGVmdCx0b3A6Yi1hLnRvcH19ZnVuY3Rpb24gSWMoYSxiLGQsYyxlKXtjfHwoYz13KGEuZG9jLGIubGluZSkpO3ZhciBmPWM7Yj1iLmNoO2M9QWEoYSxlYihhLGMpLGIsZSk7cmV0dXJuIEhjKGEsZixjLGQpfWZ1bmN0aW9uIEJhKGEsYixkLGMsZSxmKXtmdW5jdGlvbiBnKHAscSl7cD1BYShhLGUscCxxP1wicmlnaHRcIjpcImxlZnRcIixmKTtxP3AubGVmdD1wLnJpZ2h0OnAucmlnaHQ9cC5sZWZ0O3JldHVybiBIYyhhLGMscCxkKX1mdW5jdGlvbiBoKHAscSxyKXtyZXR1cm4gZyhyP1xucC0xOnAsMT09a1txXS5sZXZlbCE9cil9Yz1jfHx3KGEuZG9jLGIubGluZSk7ZXx8KGU9ZWIoYSxjKSk7dmFyIGs9SmEoYyxhLmRvYy5kaXJlY3Rpb24pLGw9Yi5jaDtiPWIuc3RpY2t5O2w+PWMudGV4dC5sZW5ndGg/KGw9Yy50ZXh0Lmxlbmd0aCxiPVwiYmVmb3JlXCIpOjA+PWwmJihsPTAsYj1cImFmdGVyXCIpO2lmKCFrKXJldHVybiBnKFwiYmVmb3JlXCI9PWI/bC0xOmwsXCJiZWZvcmVcIj09Yik7dmFyIG09S2IoayxsLGIpLG49TGI7bT1oKGwsbSxcImJlZm9yZVwiPT1iKTtudWxsIT1uJiYobS5vdGhlcj1oKGwsbixcImJlZm9yZVwiIT1iKSk7cmV0dXJuIG19ZnVuY3Rpb24gYmYoYSxiKXt2YXIgZD0wO2I9QyhhLmRvYyxiKTthLm9wdGlvbnMubGluZVdyYXBwaW5nfHwoZD11YihhLmRpc3BsYXkpKmIuY2gpO2I9dyhhLmRvYyxiLmxpbmUpO2E9R2EoYikrYS5kaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRUb3A7cmV0dXJue2xlZnQ6ZCxyaWdodDpkLHRvcDphLGJvdHRvbTphK2IuaGVpZ2h0fX1mdW5jdGlvbiBKZChhLFxuYixkLGMsZSl7YT10KGEsYixkKTthLnhSZWw9ZTtjJiYoYS5vdXRzaWRlPWMpO3JldHVybiBhfWZ1bmN0aW9uIEtkKGEsYixkKXt2YXIgYz1hLmRvYztkKz1hLmRpc3BsYXkudmlld09mZnNldDtpZigwPmQpcmV0dXJuIEpkKGMuZmlyc3QsMCxudWxsLC0xLC0xKTt2YXIgZT1iYihjLGQpLGY9Yy5maXJzdCtjLnNpemUtMTtpZihlPmYpcmV0dXJuIEpkKGMuZmlyc3QrYy5zaXplLTEsdyhjLGYpLnRleHQubGVuZ3RoLG51bGwsMSwxKTswPmImJihiPTApO2Zvcih2YXIgZz13KGMsZSk7Oyl7Zj1RZyhhLGcsZSxiLGQpO3ZhciBoPXZvaWQgMDt2YXIgaz1mLmNoKygwPGYueFJlbHx8MDxmLm91dHNpZGU/MTowKTtpZihnPUthJiZnLm1hcmtlZFNwYW5zKWZvcih2YXIgbD0wO2w8Zy5sZW5ndGg7KytsKXt2YXIgbT1nW2xdO20ubWFya2VyLmNvbGxhcHNlZCYmKG51bGw9PW0uZnJvbXx8bS5mcm9tPGspJiYobnVsbD09bS50b3x8bS50bz5rKSYmKCFofHwwPndkKGgsbS5tYXJrZXIpKSYmKGg9XG5tLm1hcmtlcil9aWYoIWgpcmV0dXJuIGY7Zj1oLmZpbmQoMSk7aWYoZi5saW5lPT1lKXJldHVybiBmO2c9dyhjLGU9Zi5saW5lKX19ZnVuY3Rpb24gY2YoYSxiLGQsYyl7Yy09SWQoYik7Yj1iLnRleHQubGVuZ3RoO3ZhciBlPUpiKGZ1bmN0aW9uKGYpe3JldHVybiBBYShhLGQsZi0xKS5ib3R0b208PWN9LGIsMCk7Yj1KYihmdW5jdGlvbihmKXtyZXR1cm4gQWEoYSxkLGYpLnRvcD5jfSxlLGIpO3JldHVybntiZWdpbjplLGVuZDpifX1mdW5jdGlvbiBkZihhLGIsZCxjKXtkfHwoZD1lYihhLGIpKTtjPUhjKGEsYixBYShhLGQsYyksXCJsaW5lXCIpLnRvcDtyZXR1cm4gY2YoYSxiLGQsYyl9ZnVuY3Rpb24gTGQoYSxiLGQsYyl7cmV0dXJuIGEuYm90dG9tPD1kPyExOmEudG9wPmQ/ITA6KGM/YS5sZWZ0OmEucmlnaHQpPmJ9ZnVuY3Rpb24gUWcoYSxiLGQsYyxlKXtlLT1HYShiKTt2YXIgZj1lYihhLGIpLGc9SWQoYiksaD0wLGs9Yi50ZXh0Lmxlbmd0aCxsPSEwLG09SmEoYixhLmRvYy5kaXJlY3Rpb24pO1xubSYmKG09KGEub3B0aW9ucy5saW5lV3JhcHBpbmc/Umc6U2cpKGEsYixkLGYsbSxjLGUpLGg9KGw9MSE9bS5sZXZlbCk/bS5mcm9tOm0udG8tMSxrPWw/bS50bzptLmZyb20tMSk7dmFyIG49bnVsbCxwPW51bGw7bT1KYihmdW5jdGlvbihyKXt2YXIgdT1BYShhLGYscik7dS50b3ArPWc7dS5ib3R0b20rPWc7aWYoIUxkKHUsYyxlLCExKSlyZXR1cm4hMTt1LnRvcDw9ZSYmdS5sZWZ0PD1jJiYobj1yLHA9dSk7cmV0dXJuITB9LGgsayk7dmFyIHE9ITE7cD8oaD1jLXAubGVmdDxwLnJpZ2h0LWMsbD1oPT1sLG09bisobD8wOjEpLGw9bD9cImFmdGVyXCI6XCJiZWZvcmVcIixoPWg/cC5sZWZ0OnAucmlnaHQpOihsfHxtIT1rJiZtIT1ofHxtKyssbD0wPT1tP1wiYWZ0ZXJcIjptPT1iLnRleHQubGVuZ3RoP1wiYmVmb3JlXCI6QWEoYSxmLG0tKGw/MTowKSkuYm90dG9tK2c8PWU9PWw/XCJhZnRlclwiOlwiYmVmb3JlXCIscT1CYShhLHQoZCxtLGwpLFwibGluZVwiLGIsZiksaD1xLmxlZnQscT1lPHEudG9wPy0xOmU+PVxucS5ib3R0b20/MTowKTttPXNlKGIudGV4dCxtLDEpO3JldHVybiBKZChkLG0sbCxxLGMtaCl9ZnVuY3Rpb24gU2coYSxiLGQsYyxlLGYsZyl7dmFyIGg9SmIoZnVuY3Rpb24obSl7bT1lW21dO3ZhciBuPTEhPW0ubGV2ZWw7cmV0dXJuIExkKEJhKGEsdChkLG4/bS50bzptLmZyb20sbj9cImJlZm9yZVwiOlwiYWZ0ZXJcIiksXCJsaW5lXCIsYixjKSxmLGcsITApfSwwLGUubGVuZ3RoLTEpLGs9ZVtoXTtpZigwPGgpe3ZhciBsPTEhPWsubGV2ZWw7bD1CYShhLHQoZCxsP2suZnJvbTprLnRvLGw/XCJhZnRlclwiOlwiYmVmb3JlXCIpLFwibGluZVwiLGIsYyk7TGQobCxmLGcsITApJiZsLnRvcD5nJiYoaz1lW2gtMV0pfXJldHVybiBrfWZ1bmN0aW9uIFJnKGEsYixkLGMsZSxmLGcpe2c9Y2YoYSxiLGMsZyk7ZD1nLmJlZ2luO2c9Zy5lbmQ7L1xccy8udGVzdChiLnRleHQuY2hhckF0KGctMSkpJiZnLS07Zm9yKHZhciBoPWI9bnVsbCxrPTA7azxlLmxlbmd0aDtrKyspe3ZhciBsPWVba107aWYoIShsLmZyb20+PVxuZ3x8bC50bzw9ZCkpe3ZhciBtPUFhKGEsYywxIT1sLmxldmVsP01hdGgubWluKGcsbC50byktMTpNYXRoLm1heChkLGwuZnJvbSkpLnJpZ2h0O209bTxmP2YtbSsxRTk6bS1mO2lmKCFifHxoPm0pYj1sLGg9bX19Ynx8KGI9ZVtlLmxlbmd0aC0xXSk7Yi5mcm9tPGQmJihiPXtmcm9tOmQsdG86Yi50byxsZXZlbDpiLmxldmVsfSk7Yi50bz5nJiYoYj17ZnJvbTpiLmZyb20sdG86ZyxsZXZlbDpiLmxldmVsfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gdmIoYSl7aWYobnVsbCE9YS5jYWNoZWRUZXh0SGVpZ2h0KXJldHVybiBhLmNhY2hlZFRleHRIZWlnaHQ7aWYobnVsbD09ZmIpe2ZiPXYoXCJwcmVcIixudWxsLFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIik7Zm9yKHZhciBiPTA7NDk+YjsrK2IpZmIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJ4XCIpKSxmYi5hcHBlbmRDaGlsZCh2KFwiYnJcIikpO2ZiLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwieFwiKSl9RChhLm1lYXN1cmUsXG5mYik7Yj1mYi5vZmZzZXRIZWlnaHQvNTA7MzxiJiYoYS5jYWNoZWRUZXh0SGVpZ2h0PWIpO0UoYS5tZWFzdXJlKTtyZXR1cm4gYnx8MX1mdW5jdGlvbiB1YihhKXtpZihudWxsIT1hLmNhY2hlZENoYXJXaWR0aClyZXR1cm4gYS5jYWNoZWRDaGFyV2lkdGg7dmFyIGI9dihcInNwYW5cIixcInh4eHh4eHh4eHhcIiksZD12KFwicHJlXCIsW2JdLFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIik7RChhLm1lYXN1cmUsZCk7Yj1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2I9KGIucmlnaHQtYi5sZWZ0KS8xMDsyPGImJihhLmNhY2hlZENoYXJXaWR0aD1iKTtyZXR1cm4gYnx8MTB9ZnVuY3Rpb24gR2QoYSl7Zm9yKHZhciBiPWEuZGlzcGxheSxkPXt9LGM9e30sZT1iLmd1dHRlcnMuY2xpZW50TGVmdCxmPWIuZ3V0dGVycy5maXJzdENoaWxkLGc9MDtmO2Y9Zi5uZXh0U2libGluZywrK2cpe3ZhciBoPWEuZGlzcGxheS5ndXR0ZXJTcGVjc1tnXS5jbGFzc05hbWU7ZFtoXT1mLm9mZnNldExlZnQrZi5jbGllbnRMZWZ0K1xuZTtjW2hdPWYuY2xpZW50V2lkdGh9cmV0dXJue2ZpeGVkUG9zOk1kKGIpLGd1dHRlclRvdGFsV2lkdGg6Yi5ndXR0ZXJzLm9mZnNldFdpZHRoLGd1dHRlckxlZnQ6ZCxndXR0ZXJXaWR0aDpjLHdyYXBwZXJXaWR0aDpiLndyYXBwZXIuY2xpZW50V2lkdGh9fWZ1bmN0aW9uIE1kKGEpe3JldHVybiBhLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtYS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fWZ1bmN0aW9uIGVmKGEpe3ZhciBiPXZiKGEuZGlzcGxheSksZD1hLm9wdGlvbnMubGluZVdyYXBwaW5nLGM9ZCYmTWF0aC5tYXgoNSxhLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgvdWIoYS5kaXNwbGF5KS0zKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoUGEoYS5kb2MsZSkpcmV0dXJuIDA7dmFyIGY9MDtpZihlLndpZGdldHMpZm9yKHZhciBnPTA7ZzxlLndpZGdldHMubGVuZ3RoO2crKyllLndpZGdldHNbZ10uaGVpZ2h0JiYoZis9ZS53aWRnZXRzW2ddLmhlaWdodCk7XG5yZXR1cm4gZD9mKyhNYXRoLmNlaWwoZS50ZXh0Lmxlbmd0aC9jKXx8MSkqYjpmK2J9fWZ1bmN0aW9uIE5kKGEpe3ZhciBiPWEuZG9jLGQ9ZWYoYSk7Yi5pdGVyKGZ1bmN0aW9uKGMpe3ZhciBlPWQoYyk7ZSE9Yy5oZWlnaHQmJkVhKGMsZSl9KX1mdW5jdGlvbiBnYihhLGIsZCxjKXt2YXIgZT1hLmRpc3BsYXk7aWYoIWQmJlwidHJ1ZVwiPT0oYi50YXJnZXR8fGIuc3JjRWxlbWVudCkuZ2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIikpcmV0dXJuIG51bGw7ZD1lLmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0cnl7dmFyIGY9Yi5jbGllbnRYLWQubGVmdDt2YXIgZz1iLmNsaWVudFktZC50b3B9Y2F0Y2goayl7cmV0dXJuIG51bGx9Yj1LZChhLGYsZyk7dmFyIGg7YyYmMDxiLnhSZWwmJihoPXcoYS5kb2MsYi5saW5lKS50ZXh0KS5sZW5ndGg9PWIuY2gmJihjPXdhKGgsaC5sZW5ndGgsYS5vcHRpb25zLnRhYlNpemUpLWgubGVuZ3RoLGI9dChiLmxpbmUsTWF0aC5tYXgoMCxcbk1hdGgucm91bmQoKGYtVGUoYS5kaXNwbGF5KS5sZWZ0KS91YihhLmRpc3BsYXkpKS1jKSkpO3JldHVybiBifWZ1bmN0aW9uIGRiKGEsYil7aWYoYj49YS5kaXNwbGF5LnZpZXdUbylyZXR1cm4gbnVsbDtiLT1hLmRpc3BsYXkudmlld0Zyb207aWYoMD5iKXJldHVybiBudWxsO2E9YS5kaXNwbGF5LnZpZXc7Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspaWYoYi09YVtkXS5zaXplLDA+YilyZXR1cm4gZH1mdW5jdGlvbiBtYShhLGIsZCxjKXtudWxsPT1iJiYoYj1hLmRvYy5maXJzdCk7bnVsbD09ZCYmKGQ9YS5kb2MuZmlyc3QrYS5kb2Muc2l6ZSk7Y3x8KGM9MCk7dmFyIGU9YS5kaXNwbGF5O2MmJmQ8ZS52aWV3VG8mJihudWxsPT1lLnVwZGF0ZUxpbmVOdW1iZXJzfHxlLnVwZGF0ZUxpbmVOdW1iZXJzPmIpJiYoZS51cGRhdGVMaW5lTnVtYmVycz1iKTthLmN1ck9wLnZpZXdDaGFuZ2VkPSEwO2lmKGI+PWUudmlld1RvKUthJiZ4ZChhLmRvYyxiKTxlLnZpZXdUbyYmUmEoYSk7ZWxzZSBpZihkPD1cbmUudmlld0Zyb20pS2EmJkplKGEuZG9jLGQrYyk+ZS52aWV3RnJvbT9SYShhKTooZS52aWV3RnJvbSs9YyxlLnZpZXdUbys9Yyk7ZWxzZSBpZihiPD1lLnZpZXdGcm9tJiZkPj1lLnZpZXdUbylSYShhKTtlbHNlIGlmKGI8PWUudmlld0Zyb20pe3ZhciBmPUpjKGEsZCxkK2MsMSk7Zj8oZS52aWV3PWUudmlldy5zbGljZShmLmluZGV4KSxlLnZpZXdGcm9tPWYubGluZU4sZS52aWV3VG8rPWMpOlJhKGEpfWVsc2UgaWYoZD49ZS52aWV3VG8pKGY9SmMoYSxiLGIsLTEpKT8oZS52aWV3PWUudmlldy5zbGljZSgwLGYuaW5kZXgpLGUudmlld1RvPWYubGluZU4pOlJhKGEpO2Vsc2V7Zj1KYyhhLGIsYiwtMSk7dmFyIGc9SmMoYSxkLGQrYywxKTtmJiZnPyhlLnZpZXc9ZS52aWV3LnNsaWNlKDAsZi5pbmRleCkuY29uY2F0KEZjKGEsZi5saW5lTixnLmxpbmVOKSkuY29uY2F0KGUudmlldy5zbGljZShnLmluZGV4KSksZS52aWV3VG8rPWMpOlJhKGEpfWlmKGE9ZS5leHRlcm5hbE1lYXN1cmVkKWQ8XG5hLmxpbmVOP2EubGluZU4rPWM6YjxhLmxpbmVOK2Euc2l6ZSYmKGUuZXh0ZXJuYWxNZWFzdXJlZD1udWxsKX1mdW5jdGlvbiBTYShhLGIsZCl7YS5jdXJPcC52aWV3Q2hhbmdlZD0hMDt2YXIgYz1hLmRpc3BsYXksZT1hLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDtlJiZiPj1lLmxpbmVOJiZiPGUubGluZU4rZS5zaXplJiYoYy5leHRlcm5hbE1lYXN1cmVkPW51bGwpO2I8Yy52aWV3RnJvbXx8Yj49Yy52aWV3VG98fChhPWMudmlld1tkYihhLGIpXSxudWxsIT1hLm5vZGUmJihhPWEuY2hhbmdlc3x8KGEuY2hhbmdlcz1bXSksLTE9PWVhKGEsZCkmJmEucHVzaChkKSkpfWZ1bmN0aW9uIFJhKGEpe2EuZGlzcGxheS52aWV3RnJvbT1hLmRpc3BsYXkudmlld1RvPWEuZG9jLmZpcnN0O2EuZGlzcGxheS52aWV3PVtdO2EuZGlzcGxheS52aWV3T2Zmc2V0PTB9ZnVuY3Rpb24gSmMoYSxiLGQsYyl7dmFyIGU9ZGIoYSxiKSxmPWEuZGlzcGxheS52aWV3O2lmKCFLYXx8ZD09YS5kb2MuZmlyc3QrXG5hLmRvYy5zaXplKXJldHVybntpbmRleDplLGxpbmVOOmR9O2Zvcih2YXIgZz1hLmRpc3BsYXkudmlld0Zyb20saD0wO2g8ZTtoKyspZys9ZltoXS5zaXplO2lmKGchPWIpe2lmKDA8Yyl7aWYoZT09Zi5sZW5ndGgtMSlyZXR1cm4gbnVsbDtiPWcrZltlXS5zaXplLWI7ZSsrfWVsc2UgYj1nLWI7ZCs9Yn1mb3IoO3hkKGEuZG9jLGQpIT1kOyl7aWYoZT09KDA+Yz8wOmYubGVuZ3RoLTEpKXJldHVybiBudWxsO2QrPWMqZltlLSgwPmM/MTowKV0uc2l6ZTtlKz1jfXJldHVybntpbmRleDplLGxpbmVOOmR9fWZ1bmN0aW9uIGZmKGEpe2E9YS5kaXNwbGF5LnZpZXc7Zm9yKHZhciBiPTAsZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgYz1hW2RdO2MuaGlkZGVufHxjLm5vZGUmJiFjLmNoYW5nZXN8fCsrYn1yZXR1cm4gYn1mdW5jdGlvbiBWYihhKXthLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihhLmRpc3BsYXkuaW5wdXQucHJlcGFyZVNlbGVjdGlvbigpKX1mdW5jdGlvbiBnZihhLGIpe3ZvaWQgMD09PVxuYiYmKGI9ITApO3ZhciBkPWEuZG9jLGM9e30sZT1jLmN1cnNvcnM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGY9Yy5zZWxlY3Rpb249ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGc9YS5vcHRpb25zLiRjdXN0b21DdXJzb3I7ZyYmKGI9ITApO2Zvcih2YXIgaD0wO2g8ZC5zZWwucmFuZ2VzLmxlbmd0aDtoKyspaWYoYnx8aCE9ZC5zZWwucHJpbUluZGV4KXt2YXIgaz1kLnNlbC5yYW5nZXNbaF07aWYoIShrLmZyb20oKS5saW5lPj1hLmRpc3BsYXkudmlld1RvfHxrLnRvKCkubGluZTxhLmRpc3BsYXkudmlld0Zyb20pKXt2YXIgbD1rLmVtcHR5KCk7aWYoZyl7dmFyIG09ZyhhLGspO20mJk9kKGEsbSxlKX1lbHNlKGx8fGEub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZykmJk9kKGEsay5oZWFkLGUpO2x8fFRnKGEsayxmKX19cmV0dXJuIGN9ZnVuY3Rpb24gT2QoYSxiLGQpe3ZhciBjPUJhKGEsYixcImRpdlwiLG51bGwsbnVsbCwhYS5vcHRpb25zLnNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUpLFxuZT1kLmFwcGVuZENoaWxkKHYoXCJkaXZcIixcIlxcdTAwYTBcIixcIkNvZGVNaXJyb3ItY3Vyc29yXCIpKTtlLnN0eWxlLmxlZnQ9Yy5sZWZ0K1wicHhcIjtlLnN0eWxlLnRvcD1jLnRvcCtcInB4XCI7ZS5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxjLmJvdHRvbS1jLnRvcCkqYS5vcHRpb25zLmN1cnNvckhlaWdodCtcInB4XCI7L1xcYmNtLWZhdC1jdXJzb3JcXGIvLnRlc3QoYS5nZXRXcmFwcGVyRWxlbWVudCgpLmNsYXNzTmFtZSkmJihiPUljKGEsYixcImRpdlwiLG51bGwsbnVsbCksYj1iLnJpZ2h0LWIubGVmdCxlLnN0eWxlLndpZHRoPSgwPGI/YjphLmRlZmF1bHRDaGFyV2lkdGgoKSkrXCJweFwiKTtjLm90aGVyJiYoYT1kLmFwcGVuZENoaWxkKHYoXCJkaXZcIixcIlxcdTAwYTBcIixcIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yXCIpKSxhLnN0eWxlLmRpc3BsYXk9XCJcIixhLnN0eWxlLmxlZnQ9Yy5vdGhlci5sZWZ0K1wicHhcIixhLnN0eWxlLnRvcD1jLm90aGVyLnRvcCtcInB4XCIsYS5zdHlsZS5oZWlnaHQ9XG4uODUqKGMub3RoZXIuYm90dG9tLWMub3RoZXIudG9wKStcInB4XCIpfWZ1bmN0aW9uIEtjKGEsYil7cmV0dXJuIGEudG9wLWIudG9wfHxhLmxlZnQtYi5sZWZ0fWZ1bmN0aW9uIFRnKGEsYixkKXtmdW5jdGlvbiBjKHEscix1LEEpezA+ciYmKHI9MCk7cj1NYXRoLnJvdW5kKHIpO0E9TWF0aC5yb3VuZChBKTtoLmFwcGVuZENoaWxkKHYoXCJkaXZcIixudWxsLFwiQ29kZU1pcnJvci1zZWxlY3RlZFwiLFwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiBcIitxK1wicHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IFwiK3IrXCJweDsgd2lkdGg6IFwiKyhudWxsPT11P20tcTp1KStcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIisoQS1yKStcInB4XCIpKX1mdW5jdGlvbiBlKHEscix1KXtmdW5jdGlvbiBBKEYsUil7cmV0dXJuIEljKGEsdChxLEYpLFwiZGl2XCIseCxSKX1mdW5jdGlvbiBZKEYsUixIKXtGPWRmKGEseCxudWxsLEYpO1I9XCJsdHJcIj09Uj09KFwiYWZ0ZXJcIj09XG5IKT9cImxlZnRcIjpcInJpZ2h0XCI7SD1cImFmdGVyXCI9PUg/Ri5iZWdpbjpGLmVuZC0oL1xccy8udGVzdCh4LnRleHQuY2hhckF0KEYuZW5kLTEpKT8yOjEpO3JldHVybiBBKEgsUilbUl19dmFyIHg9dyhnLHEpLFA9eC50ZXh0Lmxlbmd0aCxLLFEsUz1KYSh4LGcuZGlyZWN0aW9uKTtCZyhTLHJ8fDAsbnVsbD09dT9QOnUsZnVuY3Rpb24oRixSLEgsTCl7dmFyIGhhPVwibHRyXCI9PUgsbmE9QShGLGhhP1wibGVmdFwiOlwicmlnaHRcIiksdWE9QShSLTEsaGE/XCJyaWdodFwiOlwibGVmdFwiKSxoYj1udWxsPT1yJiYwPT1GLGliPW51bGw9PXUmJlI9PVAsUGQ9MD09TDtMPSFTfHxMPT1TLmxlbmd0aC0xOzM+PXVhLnRvcC1uYS50b3A/KFI9KG4/aGI6aWIpJiZQZD9sOihoYT9uYTp1YSkubGVmdCxjKFIsbmEudG9wLCgobj9pYjpoYikmJkw/bTooaGE/dWE6bmEpLnJpZ2h0KS1SLG5hLmJvdHRvbSkpOihoYT8oaGE9biYmaGImJlBkP2w6bmEubGVmdCxoYj1uP206WShGLEgsXCJiZWZvcmVcIiksRj1uP2w6WShSLEgsXG5cImFmdGVyXCIpLGliPW4mJmliJiZMP206dWEucmlnaHQpOihoYT1uP1koRixILFwiYmVmb3JlXCIpOmwsaGI9IW4mJmhiJiZQZD9tOm5hLnJpZ2h0LEY9IW4mJmliJiZMP2w6dWEubGVmdCxpYj1uP1koUixILFwiYWZ0ZXJcIik6bSksYyhoYSxuYS50b3AsaGItaGEsbmEuYm90dG9tKSxuYS5ib3R0b208dWEudG9wJiZjKGwsbmEuYm90dG9tLG51bGwsdWEudG9wKSxjKEYsdWEudG9wLGliLUYsdWEuYm90dG9tKSk7aWYoIUt8fDA+S2MobmEsSykpSz1uYTswPktjKHVhLEspJiYoSz11YSk7aWYoIVF8fDA+S2MobmEsUSkpUT1uYTswPktjKHVhLFEpJiYoUT11YSl9KTtyZXR1cm57c3RhcnQ6SyxlbmQ6UX19dmFyIGY9YS5kaXNwbGF5LGc9YS5kb2MsaD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaz1UZShhLmRpc3BsYXkpLGw9ay5sZWZ0LG09TWF0aC5tYXgoZi5zaXplcldpZHRoLGNiKGEpLWYuc2l6ZXIub2Zmc2V0TGVmdCktay5yaWdodCxuPVwibHRyXCI9PWcuZGlyZWN0aW9uO1xuZj1iLmZyb20oKTtiPWIudG8oKTtpZihmLmxpbmU9PWIubGluZSllKGYubGluZSxmLmNoLGIuY2gpO2Vsc2V7dmFyIHA9dyhnLGYubGluZSk7az13KGcsYi5saW5lKTtrPXphKHApPT16YShrKTtmPWUoZi5saW5lLGYuY2gsaz9wLnRleHQubGVuZ3RoKzE6bnVsbCkuZW5kO2I9ZShiLmxpbmUsaz8wOm51bGwsYi5jaCkuc3RhcnQ7ayYmKGYudG9wPGIudG9wLTI/KGMoZi5yaWdodCxmLnRvcCxudWxsLGYuYm90dG9tKSxjKGwsYi50b3AsYi5sZWZ0LGIuYm90dG9tKSk6YyhmLnJpZ2h0LGYudG9wLGIubGVmdC1mLnJpZ2h0LGYuYm90dG9tKSk7Zi5ib3R0b208Yi50b3AmJmMobCxmLmJvdHRvbSxudWxsLGIudG9wKX1kLmFwcGVuZENoaWxkKGgpfWZ1bmN0aW9uIFFkKGEpe2lmKGEuc3RhdGUuZm9jdXNlZCl7dmFyIGI9YS5kaXNwbGF5O2NsZWFySW50ZXJ2YWwoYi5ibGlua2VyKTt2YXIgZD0hMDtiLmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5PVwiXCI7MDxhLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlP1xuYi5ibGlua2VyPXNldEludGVydmFsKGZ1bmN0aW9uKCl7YS5oYXNGb2N1cygpfHx3YihhKTtiLmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5PShkPSFkKT9cIlwiOlwiaGlkZGVuXCJ9LGEub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOjA+YS5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSYmKGIuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIil9fWZ1bmN0aW9uIGhmKGEpe2EuaGFzRm9jdXMoKXx8KGEuZGlzcGxheS5pbnB1dC5mb2N1cygpLGEuc3RhdGUuZm9jdXNlZHx8UmQoYSkpfWZ1bmN0aW9uIFNkKGEpe2Euc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQ9ITA7c2V0VGltZW91dChmdW5jdGlvbigpe2Euc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQmJihhLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50PSExLGEuc3RhdGUuZm9jdXNlZCYmd2IoYSkpfSwxMDApfWZ1bmN0aW9uIFJkKGEsYil7YS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCYmIWEuc3RhdGUuZHJhZ2dpbmdUZXh0JiYoYS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudD1cbiExKTtcIm5vY3Vyc29yXCIhPWEub3B0aW9ucy5yZWFkT25seSYmKGEuc3RhdGUuZm9jdXNlZHx8KFcoYSxcImZvY3VzXCIsYSxiKSxhLnN0YXRlLmZvY3VzZWQ9ITAsWWEoYS5kaXNwbGF5LndyYXBwZXIsXCJDb2RlTWlycm9yLWZvY3VzZWRcIiksYS5jdXJPcHx8YS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51PT1hLmRvYy5zZWx8fChhLmRpc3BsYXkuaW5wdXQucmVzZXQoKSxmYSYmc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBhLmRpc3BsYXkuaW5wdXQucmVzZXQoITApfSwyMCkpLGEuZGlzcGxheS5pbnB1dC5yZWNlaXZlZEZvY3VzKCkpLFFkKGEpKX1mdW5jdGlvbiB3YihhLGIpe2Euc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnR8fChhLnN0YXRlLmZvY3VzZWQmJihXKGEsXCJibHVyXCIsYSxiKSxhLnN0YXRlLmZvY3VzZWQ9ITEsamIoYS5kaXNwbGF5LndyYXBwZXIsXCJDb2RlTWlycm9yLWZvY3VzZWRcIikpLGNsZWFySW50ZXJ2YWwoYS5kaXNwbGF5LmJsaW5rZXIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLnN0YXRlLmZvY3VzZWR8fFxuKGEuZGlzcGxheS5zaGlmdD0hMSl9LDE1MCkpfWZ1bmN0aW9uIExjKGEpe2Zvcih2YXIgYj1hLmRpc3BsYXksZD1iLmxpbmVEaXYub2Zmc2V0VG9wLGM9TWF0aC5tYXgoMCxiLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCksZT1iLmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLGY9MCxnPTA7ZzxiLnZpZXcubGVuZ3RoO2crKyl7dmFyIGg9Yi52aWV3W2ddLGs9YS5vcHRpb25zLmxpbmVXcmFwcGluZyxsPTA7aWYoIWguaGlkZGVuKXtlKz1oLmxpbmUuaGVpZ2h0O2lmKEcmJjg+VCl7az1oLm5vZGUub2Zmc2V0VG9wK2gubm9kZS5vZmZzZXRIZWlnaHQ7dmFyIG09ay1kO2Q9a31lbHNle3ZhciBuPWgubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTttPW4uYm90dG9tLW4udG9wOyFrJiZoLnRleHQuZmlyc3RDaGlsZCYmKGw9aC50ZXh0LmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQtbi5sZWZ0LTEpfWs9aC5saW5lLmhlaWdodC1cbm07aWYoLjAwNTxrfHwtLjAwNT5rKWlmKGU8YyYmKGYtPWspLEVhKGgubGluZSxtKSxqZihoLmxpbmUpLGgucmVzdClmb3IobT0wO208aC5yZXN0Lmxlbmd0aDttKyspamYoaC5yZXN0W21dKTtsPmEuZGlzcGxheS5zaXplcldpZHRoJiYobD1NYXRoLmNlaWwobC91YihhLmRpc3BsYXkpKSxsPmEuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYoYS5kaXNwbGF5Lm1heExpbmVMZW5ndGg9bCxhLmRpc3BsYXkubWF4TGluZT1oLmxpbmUsYS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKSl9fTI8TWF0aC5hYnMoZikmJihiLnNjcm9sbGVyLnNjcm9sbFRvcCs9Zil9ZnVuY3Rpb24gamYoYSl7aWYoYS53aWRnZXRzKWZvcih2YXIgYj0wO2I8YS53aWRnZXRzLmxlbmd0aDsrK2Ipe3ZhciBkPWEud2lkZ2V0c1tiXSxjPWQubm9kZS5wYXJlbnROb2RlO2MmJihkLmhlaWdodD1jLm9mZnNldEhlaWdodCl9fWZ1bmN0aW9uIE1jKGEsYixkKXt2YXIgYz1kJiZudWxsIT1kLnRvcD9NYXRoLm1heCgwLGQudG9wKTpcbmEuc2Nyb2xsZXIuc2Nyb2xsVG9wO2M9TWF0aC5mbG9vcihjLWEubGluZVNwYWNlLm9mZnNldFRvcCk7dmFyIGU9ZCYmbnVsbCE9ZC5ib3R0b20/ZC5ib3R0b206YythLndyYXBwZXIuY2xpZW50SGVpZ2h0O2M9YmIoYixjKTtlPWJiKGIsZSk7aWYoZCYmZC5lbnN1cmUpe3ZhciBmPWQuZW5zdXJlLmZyb20ubGluZTtkPWQuZW5zdXJlLnRvLmxpbmU7ZjxjPyhjPWYsZT1iYihiLEdhKHcoYixmKSkrYS53cmFwcGVyLmNsaWVudEhlaWdodCkpOk1hdGgubWluKGQsYi5sYXN0TGluZSgpKT49ZSYmKGM9YmIoYixHYSh3KGIsZCkpLWEud3JhcHBlci5jbGllbnRIZWlnaHQpLGU9ZCl9cmV0dXJue2Zyb206Yyx0bzpNYXRoLm1heChlLGMrMSl9fWZ1bmN0aW9uIFRkKGEsYil7dmFyIGQ9YS5kaXNwbGF5LGM9dmIoYS5kaXNwbGF5KTswPmIudG9wJiYoYi50b3A9MCk7dmFyIGU9YS5jdXJPcCYmbnVsbCE9YS5jdXJPcC5zY3JvbGxUb3A/YS5jdXJPcC5zY3JvbGxUb3A6ZC5zY3JvbGxlci5zY3JvbGxUb3AsXG5mPUVkKGEpLGc9e307Yi5ib3R0b20tYi50b3A+ZiYmKGIuYm90dG9tPWIudG9wK2YpO3ZhciBoPWEuZG9jLmhlaWdodCtEZChkKSxrPWIudG9wPGM7Yz1iLmJvdHRvbT5oLWM7Yi50b3A8ZT9nLnNjcm9sbFRvcD1rPzA6Yi50b3A6Yi5ib3R0b20+ZStmJiYoZj1NYXRoLm1pbihiLnRvcCwoYz9oOmIuYm90dG9tKS1mKSxmIT1lJiYoZy5zY3JvbGxUb3A9ZikpO2U9YS5vcHRpb25zLmZpeGVkR3V0dGVyPzA6ZC5ndXR0ZXJzLm9mZnNldFdpZHRoO2Y9YS5jdXJPcCYmbnVsbCE9YS5jdXJPcC5zY3JvbGxMZWZ0P2EuY3VyT3Auc2Nyb2xsTGVmdDpkLnNjcm9sbGVyLnNjcm9sbExlZnQtZTthPWNiKGEpLWQuZ3V0dGVycy5vZmZzZXRXaWR0aDtpZihkPWIucmlnaHQtYi5sZWZ0PmEpYi5yaWdodD1iLmxlZnQrYTsxMD5iLmxlZnQ/Zy5zY3JvbGxMZWZ0PTA6Yi5sZWZ0PGY/Zy5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsYi5sZWZ0K2UtKGQ/MDoxMCkpOmIucmlnaHQ+YStmLTMmJihnLnNjcm9sbExlZnQ9XG5iLnJpZ2h0KyhkPzA6MTApLWEpO3JldHVybiBnfWZ1bmN0aW9uIE5jKGEsYil7bnVsbCE9YiYmKE9jKGEpLGEuY3VyT3Auc2Nyb2xsVG9wPShudWxsPT1hLmN1ck9wLnNjcm9sbFRvcD9hLmRvYy5zY3JvbGxUb3A6YS5jdXJPcC5zY3JvbGxUb3ApK2IpfWZ1bmN0aW9uIHhiKGEpe09jKGEpO3ZhciBiPWEuZ2V0Q3Vyc29yKCk7YS5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTpiLHRvOmIsbWFyZ2luOmEub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW59fWZ1bmN0aW9uIFdiKGEsYixkKXtudWxsPT1iJiZudWxsPT1kfHxPYyhhKTtudWxsIT1iJiYoYS5jdXJPcC5zY3JvbGxMZWZ0PWIpO251bGwhPWQmJihhLmN1ck9wLnNjcm9sbFRvcD1kKX1mdW5jdGlvbiBPYyhhKXt2YXIgYj1hLmN1ck9wLnNjcm9sbFRvUG9zO2lmKGIpe2EuY3VyT3Auc2Nyb2xsVG9Qb3M9bnVsbDt2YXIgZD1iZihhLGIuZnJvbSksYz1iZihhLGIudG8pO2tmKGEsZCxjLGIubWFyZ2luKX19ZnVuY3Rpb24ga2YoYSxiLGQsXG5jKXtiPVRkKGEse2xlZnQ6TWF0aC5taW4oYi5sZWZ0LGQubGVmdCksdG9wOk1hdGgubWluKGIudG9wLGQudG9wKS1jLHJpZ2h0Ok1hdGgubWF4KGIucmlnaHQsZC5yaWdodCksYm90dG9tOk1hdGgubWF4KGIuYm90dG9tLGQuYm90dG9tKStjfSk7V2IoYSxiLnNjcm9sbExlZnQsYi5zY3JvbGxUb3ApfWZ1bmN0aW9uIFhiKGEsYil7Mj5NYXRoLmFicyhhLmRvYy5zY3JvbGxUb3AtYil8fChNYXx8VWQoYSx7dG9wOmJ9KSxsZihhLGIsITApLE1hJiZVZChhKSxZYihhLDEwMCkpfWZ1bmN0aW9uIGxmKGEsYixkKXtiPU1hdGgubWF4KDAsTWF0aC5taW4oYS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbEhlaWdodC1hLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LGIpKTtpZihhLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT1ifHxkKWEuZG9jLnNjcm9sbFRvcD1iLGEuZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcChiKSxhLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT1cbmImJihhLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wPWIpfWZ1bmN0aW9uIGtiKGEsYixkLGMpe2I9TWF0aC5tYXgoMCxNYXRoLm1pbihiLGEuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aC1hLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpKTsoZD9iPT1hLmRvYy5zY3JvbGxMZWZ0OjI+TWF0aC5hYnMoYS5kb2Muc2Nyb2xsTGVmdC1iKSkmJiFjfHwoYS5kb2Muc2Nyb2xsTGVmdD1iLG1mKGEpLGEuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0IT1iJiYoYS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQ9YiksYS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChiKSl9ZnVuY3Rpb24gWmIoYSl7dmFyIGI9YS5kaXNwbGF5LGQ9Yi5ndXR0ZXJzLm9mZnNldFdpZHRoLGM9TWF0aC5yb3VuZChhLmRvYy5oZWlnaHQrRGQoYS5kaXNwbGF5KSk7cmV0dXJue2NsaWVudEhlaWdodDpiLnNjcm9sbGVyLmNsaWVudEhlaWdodCx2aWV3SGVpZ2h0OmIud3JhcHBlci5jbGllbnRIZWlnaHQsXG5zY3JvbGxXaWR0aDpiLnNjcm9sbGVyLnNjcm9sbFdpZHRoLGNsaWVudFdpZHRoOmIuc2Nyb2xsZXIuY2xpZW50V2lkdGgsdmlld1dpZHRoOmIud3JhcHBlci5jbGllbnRXaWR0aCxiYXJMZWZ0OmEub3B0aW9ucy5maXhlZEd1dHRlcj9kOjAsZG9jSGVpZ2h0OmMsc2Nyb2xsSGVpZ2h0OmMrSGEoYSkrYi5iYXJIZWlnaHQsbmF0aXZlQmFyV2lkdGg6Yi5uYXRpdmVCYXJXaWR0aCxndXR0ZXJXaWR0aDpkfX1mdW5jdGlvbiB5YihhLGIpe2J8fChiPVpiKGEpKTt2YXIgZD1hLmRpc3BsYXkuYmFyV2lkdGgsYz1hLmRpc3BsYXkuYmFySGVpZ2h0O25mKGEsYik7Zm9yKGI9MDs0PmImJmQhPWEuZGlzcGxheS5iYXJXaWR0aHx8YyE9YS5kaXNwbGF5LmJhckhlaWdodDtiKyspZCE9YS5kaXNwbGF5LmJhcldpZHRoJiZhLm9wdGlvbnMubGluZVdyYXBwaW5nJiZMYyhhKSxuZihhLFpiKGEpKSxkPWEuZGlzcGxheS5iYXJXaWR0aCxjPWEuZGlzcGxheS5iYXJIZWlnaHR9ZnVuY3Rpb24gbmYoYSxiKXt2YXIgZD1cbmEuZGlzcGxheSxjPWQuc2Nyb2xsYmFycy51cGRhdGUoYik7ZC5zaXplci5zdHlsZS5wYWRkaW5nUmlnaHQ9KGQuYmFyV2lkdGg9Yy5yaWdodCkrXCJweFwiO2Quc2l6ZXIuc3R5bGUucGFkZGluZ0JvdHRvbT0oZC5iYXJIZWlnaHQ9Yy5ib3R0b20pK1wicHhcIjtkLmhlaWdodEZvcmNlci5zdHlsZS5ib3JkZXJCb3R0b209Yy5ib3R0b20rXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiO2MucmlnaHQmJmMuYm90dG9tPyhkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIixkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQ9Yy5ib3R0b20rXCJweFwiLGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoPWMucmlnaHQrXCJweFwiKTpkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PVwiXCI7Yy5ib3R0b20mJmEub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciYmYS5vcHRpb25zLmZpeGVkR3V0dGVyPyhkLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIixcbmQuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodD1jLmJvdHRvbStcInB4XCIsZC5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9Yi5ndXR0ZXJXaWR0aCtcInB4XCIpOmQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9XCJcIn1mdW5jdGlvbiBvZihhKXthLmRpc3BsYXkuc2Nyb2xsYmFycyYmKGEuZGlzcGxheS5zY3JvbGxiYXJzLmNsZWFyKCksYS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MmJmpiKGEuZGlzcGxheS53cmFwcGVyLGEuZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKSk7YS5kaXNwbGF5LnNjcm9sbGJhcnM9bmV3IHBmW2Eub3B0aW9ucy5zY3JvbGxiYXJTdHlsZV0oZnVuY3Rpb24oYil7YS5kaXNwbGF5LndyYXBwZXIuaW5zZXJ0QmVmb3JlKGIsYS5kaXNwbGF5LnNjcm9sbGJhckZpbGxlcik7eihiLFwibW91c2Vkb3duXCIsZnVuY3Rpb24oKXthLnN0YXRlLmZvY3VzZWQmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gYS5kaXNwbGF5LmlucHV0LmZvY3VzKCl9LDApfSk7XG5iLnNldEF0dHJpYnV0ZShcImNtLW5vdC1jb250ZW50XCIsXCJ0cnVlXCIpfSxmdW5jdGlvbihiLGQpe1wiaG9yaXpvbnRhbFwiPT1kP2tiKGEsYik6WGIoYSxiKX0sYSk7YS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MmJllhKGEuZGlzcGxheS53cmFwcGVyLGEuZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKX1mdW5jdGlvbiBsYihhKXthLmN1ck9wPXtjbTphLHZpZXdDaGFuZ2VkOiExLHN0YXJ0SGVpZ2h0OmEuZG9jLmhlaWdodCxmb3JjZVVwZGF0ZTohMSx1cGRhdGVJbnB1dDowLHR5cGluZzohMSxjaGFuZ2VPYmpzOm51bGwsY3Vyc29yQWN0aXZpdHlIYW5kbGVyczpudWxsLGN1cnNvckFjdGl2aXR5Q2FsbGVkOjAsc2VsZWN0aW9uQ2hhbmdlZDohMSx1cGRhdGVNYXhMaW5lOiExLHNjcm9sbExlZnQ6bnVsbCxzY3JvbGxUb3A6bnVsbCxzY3JvbGxUb1BvczpudWxsLGZvY3VzOiExLGlkOisrVWcsbWFya0FycmF5czpudWxsfTthPWEuY3VyT3A7dGI/dGIub3BzLnB1c2goYSk6YS5vd25zR3JvdXA9XG50Yj17b3BzOlthXSxkZWxheWVkQ2FsbGJhY2tzOltdfX1mdW5jdGlvbiBtYihhKXsoYT1hLmN1ck9wKSYmTmcoYSxmdW5jdGlvbihiKXtmb3IodmFyIGQ9MDtkPGIub3BzLmxlbmd0aDtkKyspYi5vcHNbZF0uY20uY3VyT3A9bnVsbDtiPWIub3BzO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBjPWJbZF0sZT1jLmNtLGY9ZS5kaXNwbGF5LGc9ZS5kaXNwbGF5OyFnLnNjcm9sbGJhcnNDbGlwcGVkJiZnLnNjcm9sbGVyLm9mZnNldFdpZHRoJiYoZy5uYXRpdmVCYXJXaWR0aD1nLnNjcm9sbGVyLm9mZnNldFdpZHRoLWcuc2Nyb2xsZXIuY2xpZW50V2lkdGgsZy5oZWlnaHRGb3JjZXIuc3R5bGUuaGVpZ2h0PUhhKGUpK1wicHhcIixnLnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbT0tZy5uYXRpdmVCYXJXaWR0aCtcInB4XCIsZy5zaXplci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPUhhKGUpK1wicHhcIixnLnNjcm9sbGJhcnNDbGlwcGVkPSEwKTtjLnVwZGF0ZU1heExpbmUmJnpkKGUpO2MubXVzdFVwZGF0ZT1cbmMudmlld0NoYW5nZWR8fGMuZm9yY2VVcGRhdGV8fG51bGwhPWMuc2Nyb2xsVG9wfHxjLnNjcm9sbFRvUG9zJiYoYy5zY3JvbGxUb1Bvcy5mcm9tLmxpbmU8Zi52aWV3RnJvbXx8Yy5zY3JvbGxUb1Bvcy50by5saW5lPj1mLnZpZXdUbyl8fGYubWF4TGluZUNoYW5nZWQmJmUub3B0aW9ucy5saW5lV3JhcHBpbmc7Yy51cGRhdGU9Yy5tdXN0VXBkYXRlJiZuZXcgUGMoZSxjLm11c3RVcGRhdGUmJnt0b3A6Yy5zY3JvbGxUb3AsZW5zdXJlOmMuc2Nyb2xsVG9Qb3N9LGMuZm9yY2VVcGRhdGUpfWZvcihkPTA7ZDxiLmxlbmd0aDtkKyspYz1iW2RdLGMudXBkYXRlZERpc3BsYXk9Yy5tdXN0VXBkYXRlJiZWZChjLmNtLGMudXBkYXRlKTtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKWlmKGM9YltkXSxlPWMuY20sZj1lLmRpc3BsYXksYy51cGRhdGVkRGlzcGxheSYmTGMoZSksYy5iYXJNZWFzdXJlPVpiKGUpLGYubWF4TGluZUNoYW5nZWQmJiFlLm9wdGlvbnMubGluZVdyYXBwaW5nJiYoZz1mLm1heExpbmUudGV4dC5sZW5ndGgsXG5nPUFhKGUsZWIoZSxmLm1heExpbmUpLGcsdm9pZCAwKSxjLmFkanVzdFdpZHRoVG89Zy5sZWZ0KzMsZS5kaXNwbGF5LnNpemVyV2lkdGg9Yy5hZGp1c3RXaWR0aFRvLGMuYmFyTWVhc3VyZS5zY3JvbGxXaWR0aD1NYXRoLm1heChmLnNjcm9sbGVyLmNsaWVudFdpZHRoLGYuc2l6ZXIub2Zmc2V0TGVmdCtjLmFkanVzdFdpZHRoVG8rSGEoZSkrZS5kaXNwbGF5LmJhcldpZHRoKSxjLm1heFNjcm9sbExlZnQ9TWF0aC5tYXgoMCxmLnNpemVyLm9mZnNldExlZnQrYy5hZGp1c3RXaWR0aFRvLWNiKGUpKSksYy51cGRhdGVkRGlzcGxheXx8Yy5zZWxlY3Rpb25DaGFuZ2VkKWMucHJlcGFyZWRTZWxlY3Rpb249Zi5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCk7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrKyljPWJbZF0sZT1jLmNtLG51bGwhPWMuYWRqdXN0V2lkdGhUbyYmKGUuZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aD1jLmFkanVzdFdpZHRoVG8rXCJweFwiLGMubWF4U2Nyb2xsTGVmdDxlLmRvYy5zY3JvbGxMZWZ0JiZcbmtiKGUsTWF0aC5taW4oZS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsYy5tYXhTY3JvbGxMZWZ0KSwhMCksZS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSExKSxmPWMuZm9jdXMmJmMuZm9jdXM9PWthKHFhKGUpKSxjLnByZXBhcmVkU2VsZWN0aW9uJiZlLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihjLnByZXBhcmVkU2VsZWN0aW9uLGYpLChjLnVwZGF0ZWREaXNwbGF5fHxjLnN0YXJ0SGVpZ2h0IT1lLmRvYy5oZWlnaHQpJiZ5YihlLGMuYmFyTWVhc3VyZSksYy51cGRhdGVkRGlzcGxheSYmV2QoZSxjLmJhck1lYXN1cmUpLGMuc2VsZWN0aW9uQ2hhbmdlZCYmUWQoZSksZS5zdGF0ZS5mb2N1c2VkJiZjLnVwZGF0ZUlucHV0JiZlLmRpc3BsYXkuaW5wdXQucmVzZXQoYy50eXBpbmcpLGYmJmhmKGMuY20pO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBoPXZvaWQgMDtjPWJbZF07ZT1jLmNtO2Y9ZS5kaXNwbGF5O2c9ZS5kb2M7Yy51cGRhdGVkRGlzcGxheSYmcWYoZSxjLnVwZGF0ZSk7XG5udWxsPT1mLndoZWVsU3RhcnRYfHxudWxsPT1jLnNjcm9sbFRvcCYmbnVsbD09Yy5zY3JvbGxMZWZ0JiYhYy5zY3JvbGxUb1Bvc3x8KGYud2hlZWxTdGFydFg9Zi53aGVlbFN0YXJ0WT1udWxsKTtudWxsIT1jLnNjcm9sbFRvcCYmbGYoZSxjLnNjcm9sbFRvcCxjLmZvcmNlU2Nyb2xsKTtudWxsIT1jLnNjcm9sbExlZnQmJmtiKGUsYy5zY3JvbGxMZWZ0LCEwLCEwKTtpZihjLnNjcm9sbFRvUG9zKXt2YXIgaz1DKGcsYy5zY3JvbGxUb1Bvcy5mcm9tKTt2YXIgbD1DKGcsYy5zY3JvbGxUb1Bvcy50byk7dmFyIG09Yy5zY3JvbGxUb1Bvcy5tYXJnaW47bnVsbD09bSYmKG09MCk7ZS5vcHRpb25zLmxpbmVXcmFwcGluZ3x8ayE9bHx8KGw9XCJiZWZvcmVcIj09ay5zdGlja3k/dChrLmxpbmUsay5jaCsxLFwiYmVmb3JlXCIpOmssaz1rLmNoP3Qoay5saW5lLFwiYmVmb3JlXCI9PWsuc3RpY2t5P2suY2gtMTprLmNoLFwiYWZ0ZXJcIik6ayk7Zm9yKHZhciBuPTA7NT5uO24rKyl7dmFyIHA9ITE7aD1CYShlLFxuayk7dmFyIHE9bCYmbCE9az9CYShlLGwpOmg7aD17bGVmdDpNYXRoLm1pbihoLmxlZnQscS5sZWZ0KSx0b3A6TWF0aC5taW4oaC50b3AscS50b3ApLW0scmlnaHQ6TWF0aC5tYXgoaC5sZWZ0LHEubGVmdCksYm90dG9tOk1hdGgubWF4KGguYm90dG9tLHEuYm90dG9tKSttfTtxPVRkKGUsaCk7dmFyIHI9ZS5kb2Muc2Nyb2xsVG9wLHU9ZS5kb2Muc2Nyb2xsTGVmdDtudWxsIT1xLnNjcm9sbFRvcCYmKFhiKGUscS5zY3JvbGxUb3ApLDE8TWF0aC5hYnMoZS5kb2Muc2Nyb2xsVG9wLXIpJiYocD0hMCkpO251bGwhPXEuc2Nyb2xsTGVmdCYmKGtiKGUscS5zY3JvbGxMZWZ0KSwxPE1hdGguYWJzKGUuZG9jLnNjcm9sbExlZnQtdSkmJihwPSEwKSk7aWYoIXApYnJlYWt9bD1oO1ooZSxcInNjcm9sbEN1cnNvckludG9WaWV3XCIpfHwobT1lLmRpc3BsYXksbj1tLnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGs9bnVsbCxwPW0ud3JhcHBlci5vd25lckRvY3VtZW50LDA+bC50b3Arbi50b3A/XG5rPSEwOmwuYm90dG9tK24udG9wPihwLmRlZmF1bHRWaWV3LmlubmVySGVpZ2h0fHxwLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoaz0hMSksbnVsbD09a3x8Vmd8fChsPXYoXCJkaXZcIixcIlxcdTIwMGJcIixudWxsLFwicG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IFwiKyhsLnRvcC1tLnZpZXdPZmZzZXQtZS5kaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRUb3ApK1wicHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIrKGwuYm90dG9tLWwudG9wK0hhKGUpK20uYmFySGVpZ2h0KStcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBcIitsLmxlZnQrXCJweDsgd2lkdGg6IFwiK01hdGgubWF4KDIsbC5yaWdodC1sLmxlZnQpK1wicHg7XCIpLGUuZGlzcGxheS5saW5lU3BhY2UuYXBwZW5kQ2hpbGQobCksbC5zY3JvbGxJbnRvVmlldyhrKSxlLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKGwpKSl9bD1jLm1heWJlSGlkZGVuTWFya2Vycztcbms9Yy5tYXliZVVuaGlkZGVuTWFya2VycztpZihsKWZvcihtPTA7bTxsLmxlbmd0aDsrK20pbFttXS5saW5lcy5sZW5ndGh8fFcobFttXSxcImhpZGVcIik7aWYoaylmb3IobD0wO2w8ay5sZW5ndGg7KytsKWtbbF0ubGluZXMubGVuZ3RoJiZXKGtbbF0sXCJ1bmhpZGVcIik7Zi53cmFwcGVyLm9mZnNldEhlaWdodCYmKGcuc2Nyb2xsVG9wPWUuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApO2MuY2hhbmdlT2JqcyYmVyhlLFwiY2hhbmdlc1wiLGUsYy5jaGFuZ2VPYmpzKTtjLnVwZGF0ZSYmYy51cGRhdGUuZmluaXNoKCl9fSl9ZnVuY3Rpb24gcmEoYSxiKXtpZihhLmN1ck9wKXJldHVybiBiKCk7bGIoYSk7dHJ5e3JldHVybiBiKCl9ZmluYWxseXttYihhKX19ZnVuY3Rpb24gYmEoYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihhLmN1ck9wKXJldHVybiBiLmFwcGx5KGEsYXJndW1lbnRzKTtsYihhKTt0cnl7cmV0dXJuIGIuYXBwbHkoYSxhcmd1bWVudHMpfWZpbmFsbHl7bWIoYSl9fX1mdW5jdGlvbiBpYShhKXtyZXR1cm4gZnVuY3Rpb24oKXtpZih0aGlzLmN1ck9wKXJldHVybiBhLmFwcGx5KHRoaXMsXG5hcmd1bWVudHMpO2xiKHRoaXMpO3RyeXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXttYih0aGlzKX19fWZ1bmN0aW9uIGNhKGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXRoaXMuY207aWYoIWJ8fGIuY3VyT3ApcmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2xiKGIpO3RyeXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXttYihiKX19fWZ1bmN0aW9uIFliKGEsYil7YS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXI8YS5kaXNwbGF5LnZpZXdUbyYmYS5zdGF0ZS5oaWdobGlnaHQuc2V0KGIsZ2QoV2csYSkpfWZ1bmN0aW9uIFdnKGEpe3ZhciBiPWEuZG9jO2lmKCEoYi5oaWdobGlnaHRGcm9udGllcj49YS5kaXNwbGF5LnZpZXdUbykpe3ZhciBkPStuZXcgRGF0ZSthLm9wdGlvbnMud29ya1RpbWUsYz1PYihhLGIuaGlnaGxpZ2h0RnJvbnRpZXIpLGU9W107Yi5pdGVyKGMubGluZSxNYXRoLm1pbihiLmZpcnN0K2Iuc2l6ZSxhLmRpc3BsYXkudmlld1RvK1xuNTAwKSxmdW5jdGlvbihmKXtpZihjLmxpbmU+PWEuZGlzcGxheS52aWV3RnJvbSl7dmFyIGc9Zi5zdHlsZXMsaD1mLnRleHQubGVuZ3RoPmEub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg/JGEoYi5tb2RlLGMuc3RhdGUpOm51bGwsaz15ZShhLGYsYywhMCk7aCYmKGMuc3RhdGU9aCk7Zi5zdHlsZXM9ay5zdHlsZXM7aD1mLnN0eWxlQ2xhc3Nlczsoaz1rLmNsYXNzZXMpP2Yuc3R5bGVDbGFzc2VzPWs6aCYmKGYuc3R5bGVDbGFzc2VzPW51bGwpO2s9IWd8fGcubGVuZ3RoIT1mLnN0eWxlcy5sZW5ndGh8fGghPWsmJighaHx8IWt8fGguYmdDbGFzcyE9ay5iZ0NsYXNzfHxoLnRleHRDbGFzcyE9ay50ZXh0Q2xhc3MpO2ZvcihoPTA7IWsmJmg8Zy5sZW5ndGg7KytoKWs9Z1toXSE9Zi5zdHlsZXNbaF07ayYmZS5wdXNoKGMubGluZSk7Zi5zdGF0ZUFmdGVyPWMuc2F2ZSgpfWVsc2UgZi50ZXh0Lmxlbmd0aDw9YS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCYmdGQoYSxmLnRleHQsYyksXG5mLnN0YXRlQWZ0ZXI9MD09Yy5saW5lJTU/Yy5zYXZlKCk6bnVsbDtjLm5leHRMaW5lKCk7aWYoK25ldyBEYXRlPmQpcmV0dXJuIFliKGEsYS5vcHRpb25zLndvcmtEZWxheSksITB9KTtiLmhpZ2hsaWdodEZyb250aWVyPWMubGluZTtiLm1vZGVGcm9udGllcj1NYXRoLm1heChiLm1vZGVGcm9udGllcixjLmxpbmUpO2UubGVuZ3RoJiZyYShhLGZ1bmN0aW9uKCl7Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspU2EoYSxlW2ZdLFwidGV4dFwiKX0pfX1mdW5jdGlvbiBWZChhLGIpe3ZhciBkPWEuZGlzcGxheSxjPWEuZG9jO2lmKGIuZWRpdG9ySXNIaWRkZW4pcmV0dXJuIFJhKGEpLCExO2lmKCFiLmZvcmNlJiZiLnZpc2libGUuZnJvbT49ZC52aWV3RnJvbSYmYi52aXNpYmxlLnRvPD1kLnZpZXdUbyYmKG51bGw9PWQudXBkYXRlTGluZU51bWJlcnN8fGQudXBkYXRlTGluZU51bWJlcnM+PWQudmlld1RvKSYmZC5yZW5kZXJlZFZpZXc9PWQudmlldyYmMD09ZmYoYSkpcmV0dXJuITE7cmYoYSkmJlxuKFJhKGEpLGIuZGltcz1HZChhKSk7dmFyIGU9Yy5maXJzdCtjLnNpemUsZj1NYXRoLm1heChiLnZpc2libGUuZnJvbS1hLm9wdGlvbnMudmlld3BvcnRNYXJnaW4sYy5maXJzdCksZz1NYXRoLm1pbihlLGIudmlzaWJsZS50bythLm9wdGlvbnMudmlld3BvcnRNYXJnaW4pO2Qudmlld0Zyb208ZiYmMjA+Zi1kLnZpZXdGcm9tJiYoZj1NYXRoLm1heChjLmZpcnN0LGQudmlld0Zyb20pKTtkLnZpZXdUbz5nJiYyMD5kLnZpZXdUby1nJiYoZz1NYXRoLm1pbihlLGQudmlld1RvKSk7S2EmJihmPXhkKGEuZG9jLGYpLGc9SmUoYS5kb2MsZykpO2M9ZiE9ZC52aWV3RnJvbXx8ZyE9ZC52aWV3VG98fGQubGFzdFdyYXBIZWlnaHQhPWIud3JhcHBlckhlaWdodHx8ZC5sYXN0V3JhcFdpZHRoIT1iLndyYXBwZXJXaWR0aDtlPWEuZGlzcGxheTswPT1lLnZpZXcubGVuZ3RofHxmPj1lLnZpZXdUb3x8Zzw9ZS52aWV3RnJvbT8oZS52aWV3PUZjKGEsZixnKSxlLnZpZXdGcm9tPWYpOihlLnZpZXdGcm9tPlxuZj9lLnZpZXc9RmMoYSxmLGUudmlld0Zyb20pLmNvbmNhdChlLnZpZXcpOmUudmlld0Zyb208ZiYmKGUudmlldz1lLnZpZXcuc2xpY2UoZGIoYSxmKSkpLGUudmlld0Zyb209ZixlLnZpZXdUbzxnP2Uudmlldz1lLnZpZXcuY29uY2F0KEZjKGEsZS52aWV3VG8sZykpOmUudmlld1RvPmcmJihlLnZpZXc9ZS52aWV3LnNsaWNlKDAsZGIoYSxnKSkpKTtlLnZpZXdUbz1nO2Qudmlld09mZnNldD1HYSh3KGEuZG9jLGQudmlld0Zyb20pKTthLmRpc3BsYXkubW92ZXIuc3R5bGUudG9wPWQudmlld09mZnNldCtcInB4XCI7Zz1mZihhKTtpZighYyYmMD09ZyYmIWIuZm9yY2UmJmQucmVuZGVyZWRWaWV3PT1kLnZpZXcmJihudWxsPT1kLnVwZGF0ZUxpbmVOdW1iZXJzfHxkLnVwZGF0ZUxpbmVOdW1iZXJzPj1kLnZpZXdUbykpcmV0dXJuITE7YS5oYXNGb2N1cygpP2Y9bnVsbDooZj1rYShxYShhKSkpJiZqYShhLmRpc3BsYXkubGluZURpdixmKT8oZj17YWN0aXZlRWx0OmZ9LHdpbmRvdy5nZXRTZWxlY3Rpb24mJlxuKGU9cWEoYSkuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCksZS5hbmNob3JOb2RlJiZlLmV4dGVuZCYmamEoYS5kaXNwbGF5LmxpbmVEaXYsZS5hbmNob3JOb2RlKSYmKGYuYW5jaG9yTm9kZT1lLmFuY2hvck5vZGUsZi5hbmNob3JPZmZzZXQ9ZS5hbmNob3JPZmZzZXQsZi5mb2N1c05vZGU9ZS5mb2N1c05vZGUsZi5mb2N1c09mZnNldD1lLmZvY3VzT2Zmc2V0KSkpOmY9bnVsbDs0PGcmJihkLmxpbmVEaXYuc3R5bGUuZGlzcGxheT1cIm5vbmVcIik7WGcoYSxkLnVwZGF0ZUxpbmVOdW1iZXJzLGIuZGltcyk7NDxnJiYoZC5saW5lRGl2LnN0eWxlLmRpc3BsYXk9XCJcIik7ZC5yZW5kZXJlZFZpZXc9ZC52aWV3OyhnPWYpJiZnLmFjdGl2ZUVsdCYmZy5hY3RpdmVFbHQhPWthKGcuYWN0aXZlRWx0Lm93bmVyRG9jdW1lbnQpJiYoZy5hY3RpdmVFbHQuZm9jdXMoKSwhL14oSU5QVVR8VEVYVEFSRUEpJC8udGVzdChnLmFjdGl2ZUVsdC5ub2RlTmFtZSkmJmcuYW5jaG9yTm9kZSYmamEoZG9jdW1lbnQuYm9keSxcbmcuYW5jaG9yTm9kZSkmJmphKGRvY3VtZW50LmJvZHksZy5mb2N1c05vZGUpJiYoZT1nLmFjdGl2ZUVsdC5vd25lckRvY3VtZW50LGY9ZS5kZWZhdWx0Vmlldy5nZXRTZWxlY3Rpb24oKSxlPWUuY3JlYXRlUmFuZ2UoKSxlLnNldEVuZChnLmFuY2hvck5vZGUsZy5hbmNob3JPZmZzZXQpLGUuY29sbGFwc2UoITEpLGYucmVtb3ZlQWxsUmFuZ2VzKCksZi5hZGRSYW5nZShlKSxmLmV4dGVuZChnLmZvY3VzTm9kZSxnLmZvY3VzT2Zmc2V0KSkpO0UoZC5jdXJzb3JEaXYpO0UoZC5zZWxlY3Rpb25EaXYpO2QuZ3V0dGVycy5zdHlsZS5oZWlnaHQ9ZC5zaXplci5zdHlsZS5taW5IZWlnaHQ9MDtjJiYoZC5sYXN0V3JhcEhlaWdodD1iLndyYXBwZXJIZWlnaHQsZC5sYXN0V3JhcFdpZHRoPWIud3JhcHBlcldpZHRoLFliKGEsNDAwKSk7ZC51cGRhdGVMaW5lTnVtYmVycz1udWxsO3JldHVybiEwfWZ1bmN0aW9uIHFmKGEsYil7Zm9yKHZhciBkPWIudmlld3BvcnQsYz0hMDs7Yz0hMSl7aWYoYyYmYS5vcHRpb25zLmxpbmVXcmFwcGluZyYmXG5iLm9sZERpc3BsYXlXaWR0aCE9Y2IoYSkpYyYmKGIudmlzaWJsZT1NYyhhLmRpc3BsYXksYS5kb2MsZCkpO2Vsc2UgaWYoZCYmbnVsbCE9ZC50b3AmJihkPXt0b3A6TWF0aC5taW4oYS5kb2MuaGVpZ2h0K0RkKGEuZGlzcGxheSktRWQoYSksZC50b3ApfSksYi52aXNpYmxlPU1jKGEuZGlzcGxheSxhLmRvYyxkKSxiLnZpc2libGUuZnJvbT49YS5kaXNwbGF5LnZpZXdGcm9tJiZiLnZpc2libGUudG88PWEuZGlzcGxheS52aWV3VG8pYnJlYWs7aWYoIVZkKGEsYikpYnJlYWs7TGMoYSk7Yz1aYihhKTtWYihhKTt5YihhLGMpO1dkKGEsYyk7Yi5mb3JjZT0hMX1iLnNpZ25hbChhLFwidXBkYXRlXCIsYSk7aWYoYS5kaXNwbGF5LnZpZXdGcm9tIT1hLmRpc3BsYXkucmVwb3J0ZWRWaWV3RnJvbXx8YS5kaXNwbGF5LnZpZXdUbyE9YS5kaXNwbGF5LnJlcG9ydGVkVmlld1RvKWIuc2lnbmFsKGEsXCJ2aWV3cG9ydENoYW5nZVwiLGEsYS5kaXNwbGF5LnZpZXdGcm9tLGEuZGlzcGxheS52aWV3VG8pLGEuZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tPVxuYS5kaXNwbGF5LnZpZXdGcm9tLGEuZGlzcGxheS5yZXBvcnRlZFZpZXdUbz1hLmRpc3BsYXkudmlld1RvfWZ1bmN0aW9uIFVkKGEsYil7Yj1uZXcgUGMoYSxiKTtpZihWZChhLGIpKXtMYyhhKTtxZihhLGIpO3ZhciBkPVpiKGEpO1ZiKGEpO3liKGEsZCk7V2QoYSxkKTtiLmZpbmlzaCgpfX1mdW5jdGlvbiBYZyhhLGIsZCl7ZnVuY3Rpb24gYyhwKXt2YXIgcT1wLm5leHRTaWJsaW5nO2ZhJiZ5YSYmYS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD09cD9wLnN0eWxlLmRpc3BsYXk9XCJub25lXCI6cC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHApO3JldHVybiBxfXZhciBlPWEuZGlzcGxheSxmPWEub3B0aW9ucy5saW5lTnVtYmVycyxnPWUubGluZURpdixoPWcuZmlyc3RDaGlsZCxrPWUudmlldztlPWUudmlld0Zyb207Zm9yKHZhciBsPTA7bDxrLmxlbmd0aDtsKyspe3ZhciBtPWtbbF07aWYoIW0uaGlkZGVuKWlmKG0ubm9kZSYmbS5ub2RlLnBhcmVudE5vZGU9PWcpe2Zvcig7aCE9bS5ub2RlOyloPVxuYyhoKTtoPWYmJm51bGwhPWImJmI8PWUmJm0ubGluZU51bWJlcjttLmNoYW5nZXMmJigtMTxlYShtLmNoYW5nZXMsXCJndXR0ZXJcIikmJihoPSExKSxPZShhLG0sZSxkKSk7aCYmKEUobS5saW5lTnVtYmVyKSxtLmxpbmVOdW1iZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocWQoYS5vcHRpb25zLGUpKSkpO2g9bS5ub2RlLm5leHRTaWJsaW5nfWVsc2V7dmFyIG49UGcoYSxtLGUsZCk7Zy5pbnNlcnRCZWZvcmUobixoKX1lKz1tLnNpemV9Zm9yKDtoOyloPWMoaCl9ZnVuY3Rpb24gWGQoYSl7YS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0PWEuZ3V0dGVycy5vZmZzZXRXaWR0aCtcInB4XCI7YWEoYSxcImd1dHRlckNoYW5nZWRcIixhKX1mdW5jdGlvbiBXZChhLGIpe2EuZGlzcGxheS5zaXplci5zdHlsZS5taW5IZWlnaHQ9Yi5kb2NIZWlnaHQrXCJweFwiO2EuZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wPWIuZG9jSGVpZ2h0K1wicHhcIjthLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5oZWlnaHQ9XG5iLmRvY0hlaWdodCthLmRpc3BsYXkuYmFySGVpZ2h0K0hhKGEpK1wicHhcIn1mdW5jdGlvbiBtZihhKXt2YXIgYj1hLmRpc3BsYXksZD1iLnZpZXc7aWYoYi5hbGlnbldpZGdldHN8fGIuZ3V0dGVycy5maXJzdENoaWxkJiZhLm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgYz1NZChiKS1iLnNjcm9sbGVyLnNjcm9sbExlZnQrYS5kb2Muc2Nyb2xsTGVmdCxlPWIuZ3V0dGVycy5vZmZzZXRXaWR0aCxmPWMrXCJweFwiLGc9MDtnPGQubGVuZ3RoO2crKylpZighZFtnXS5oaWRkZW4pe2Eub3B0aW9ucy5maXhlZEd1dHRlciYmKGRbZ10uZ3V0dGVyJiYoZFtnXS5ndXR0ZXIuc3R5bGUubGVmdD1mKSxkW2ddLmd1dHRlckJhY2tncm91bmQmJihkW2ddLmd1dHRlckJhY2tncm91bmQuc3R5bGUubGVmdD1mKSk7dmFyIGg9ZFtnXS5hbGlnbmFibGU7aWYoaClmb3IodmFyIGs9MDtrPGgubGVuZ3RoO2srKyloW2tdLnN0eWxlLmxlZnQ9Zn1hLm9wdGlvbnMuZml4ZWRHdXR0ZXImJihiLmd1dHRlcnMuc3R5bGUubGVmdD1cbmMrZStcInB4XCIpfX1mdW5jdGlvbiByZihhKXtpZighYS5vcHRpb25zLmxpbmVOdW1iZXJzKXJldHVybiExO3ZhciBiPWEuZG9jO2I9cWQoYS5vcHRpb25zLGIuZmlyc3QrYi5zaXplLTEpO3ZhciBkPWEuZGlzcGxheTtpZihiLmxlbmd0aCE9ZC5saW5lTnVtQ2hhcnMpe3ZhciBjPWQubWVhc3VyZS5hcHBlbmRDaGlsZCh2KFwiZGl2XCIsW3YoXCJkaXZcIixiKV0sXCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0XCIpKSxlPWMuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aDtjPWMub2Zmc2V0V2lkdGgtZTtkLmxpbmVHdXR0ZXIuc3R5bGUud2lkdGg9XCJcIjtkLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KGUsZC5saW5lR3V0dGVyLm9mZnNldFdpZHRoLWMpKzE7ZC5saW5lTnVtV2lkdGg9ZC5saW5lTnVtSW5uZXJXaWR0aCtjO2QubGluZU51bUNoYXJzPWQubGluZU51bUlubmVyV2lkdGg/Yi5sZW5ndGg6LTE7ZC5saW5lR3V0dGVyLnN0eWxlLndpZHRoPWQubGluZU51bVdpZHRoK1xuXCJweFwiO1hkKGEuZGlzcGxheSk7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gWWQoYSxiKXtmb3IodmFyIGQ9W10sYz0hMSxlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPWFbZV0sZz1udWxsO1wic3RyaW5nXCIhPXR5cGVvZiBmJiYoZz1mLnN0eWxlLGY9Zi5jbGFzc05hbWUpO2lmKFwiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiPT1mKWlmKGIpYz0hMDtlbHNlIGNvbnRpbnVlO2QucHVzaCh7Y2xhc3NOYW1lOmYsc3R5bGU6Z30pfWImJiFjJiZkLnB1c2goe2NsYXNzTmFtZTpcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIixzdHlsZTpudWxsfSk7cmV0dXJuIGR9ZnVuY3Rpb24gc2YoYSl7dmFyIGI9YS5ndXR0ZXJzLGQ9YS5ndXR0ZXJTcGVjcztFKGIpO2EubGluZUd1dHRlcj1udWxsO2Zvcih2YXIgYz0wO2M8ZC5sZW5ndGg7KytjKXt2YXIgZT1kW2NdLGY9ZS5jbGFzc05hbWU7ZT1lLnN0eWxlO3ZhciBnPWIuYXBwZW5kQ2hpbGQodihcImRpdlwiLG51bGwsXCJDb2RlTWlycm9yLWd1dHRlciBcIitmKSk7XG5lJiYoZy5zdHlsZS5jc3NUZXh0PWUpO1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiPT1mJiYoYS5saW5lR3V0dGVyPWcsZy5zdHlsZS53aWR0aD0oYS5saW5lTnVtV2lkdGh8fDEpK1wicHhcIil9Yi5zdHlsZS5kaXNwbGF5PWQubGVuZ3RoP1wiXCI6XCJub25lXCI7WGQoYSl9ZnVuY3Rpb24gJGIoYSl7c2YoYS5kaXNwbGF5KTttYShhKTttZihhKX1mdW5jdGlvbiBZZyhhLGIsZCxjKXt0aGlzLmlucHV0PWQ7dGhpcy5zY3JvbGxiYXJGaWxsZXI9dihcImRpdlwiLG51bGwsXCJDb2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXJcIik7dGhpcy5zY3JvbGxiYXJGaWxsZXIuc2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIixcInRydWVcIik7dGhpcy5ndXR0ZXJGaWxsZXI9dihcImRpdlwiLG51bGwsXCJDb2RlTWlycm9yLWd1dHRlci1maWxsZXJcIik7dGhpcy5ndXR0ZXJGaWxsZXIuc2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIixcInRydWVcIik7dGhpcy5saW5lRGl2PU0oXCJkaXZcIixudWxsLFwiQ29kZU1pcnJvci1jb2RlXCIpO1xudGhpcy5zZWxlY3Rpb25EaXY9dihcImRpdlwiLG51bGwsbnVsbCxcInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMVwiKTt0aGlzLmN1cnNvckRpdj12KFwiZGl2XCIsbnVsbCxcIkNvZGVNaXJyb3ItY3Vyc29yc1wiKTt0aGlzLm1lYXN1cmU9dihcImRpdlwiLG51bGwsXCJDb2RlTWlycm9yLW1lYXN1cmVcIik7dGhpcy5saW5lTWVhc3VyZT12KFwiZGl2XCIsbnVsbCxcIkNvZGVNaXJyb3ItbWVhc3VyZVwiKTt0aGlzLmxpbmVTcGFjZT1NKFwiZGl2XCIsW3RoaXMubWVhc3VyZSx0aGlzLmxpbmVNZWFzdXJlLHRoaXMuc2VsZWN0aW9uRGl2LHRoaXMuY3Vyc29yRGl2LHRoaXMubGluZURpdl0sbnVsbCxcInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZVwiKTt2YXIgZT1NKFwiZGl2XCIsW3RoaXMubGluZVNwYWNlXSxcIkNvZGVNaXJyb3ItbGluZXNcIik7dGhpcy5tb3Zlcj12KFwiZGl2XCIsW2VdLG51bGwsXCJwb3NpdGlvbjogcmVsYXRpdmVcIik7dGhpcy5zaXplcj12KFwiZGl2XCIsW3RoaXMubW92ZXJdLFwiQ29kZU1pcnJvci1zaXplclwiKTtcbnRoaXMuc2l6ZXJXaWR0aD1udWxsO3RoaXMuaGVpZ2h0Rm9yY2VyPXYoXCJkaXZcIixudWxsLG51bGwsXCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogNTBweDsgd2lkdGg6IDFweDtcIik7dGhpcy5ndXR0ZXJzPXYoXCJkaXZcIixudWxsLFwiQ29kZU1pcnJvci1ndXR0ZXJzXCIpO3RoaXMubGluZUd1dHRlcj1udWxsO3RoaXMuc2Nyb2xsZXI9dihcImRpdlwiLFt0aGlzLnNpemVyLHRoaXMuaGVpZ2h0Rm9yY2VyLHRoaXMuZ3V0dGVyc10sXCJDb2RlTWlycm9yLXNjcm9sbFwiKTt0aGlzLnNjcm9sbGVyLnNldEF0dHJpYnV0ZShcInRhYkluZGV4XCIsXCItMVwiKTt0aGlzLndyYXBwZXI9dihcImRpdlwiLFt0aGlzLnNjcm9sbGJhckZpbGxlcix0aGlzLmd1dHRlckZpbGxlcix0aGlzLnNjcm9sbGVyXSxcIkNvZGVNaXJyb3JcIik7UWEmJjEwNTw9dGYmJih0aGlzLndyYXBwZXIuc3R5bGUuY2xpcFBhdGg9XCJpbnNldCgwcHgpXCIpO3RoaXMud3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2xhdGVcIixcIm5vXCIpO0cmJjg+XG5UJiYodGhpcy5ndXR0ZXJzLnN0eWxlLnpJbmRleD0tMSx0aGlzLnNjcm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodD0wKTtmYXx8TWEmJmFjfHwodGhpcy5zY3JvbGxlci5kcmFnZ2FibGU9ITApO2EmJihhLmFwcGVuZENoaWxkP2EuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTphKHRoaXMud3JhcHBlcikpO3RoaXMucmVwb3J0ZWRWaWV3RnJvbT10aGlzLnJlcG9ydGVkVmlld1RvPXRoaXMudmlld0Zyb209dGhpcy52aWV3VG89Yi5maXJzdDt0aGlzLnZpZXc9W107dGhpcy5leHRlcm5hbE1lYXN1cmVkPXRoaXMucmVuZGVyZWRWaWV3PW51bGw7dGhpcy5sYXN0V3JhcEhlaWdodD10aGlzLmxhc3RXcmFwV2lkdGg9dGhpcy52aWV3T2Zmc2V0PTA7dGhpcy51cGRhdGVMaW5lTnVtYmVycz1udWxsO3RoaXMubmF0aXZlQmFyV2lkdGg9dGhpcy5iYXJIZWlnaHQ9dGhpcy5iYXJXaWR0aD0wO3RoaXMuc2Nyb2xsYmFyc0NsaXBwZWQ9ITE7dGhpcy5saW5lTnVtV2lkdGg9dGhpcy5saW5lTnVtSW5uZXJXaWR0aD1cbnRoaXMubGluZU51bUNoYXJzPW51bGw7dGhpcy5hbGlnbldpZGdldHM9ITE7dGhpcy5tYXhMaW5lPXRoaXMuY2FjaGVkQ2hhcldpZHRoPXRoaXMuY2FjaGVkVGV4dEhlaWdodD10aGlzLmNhY2hlZFBhZGRpbmdIPW51bGw7dGhpcy5tYXhMaW5lTGVuZ3RoPTA7dGhpcy5tYXhMaW5lQ2hhbmdlZD0hMTt0aGlzLndoZWVsRFg9dGhpcy53aGVlbERZPXRoaXMud2hlZWxTdGFydFg9dGhpcy53aGVlbFN0YXJ0WT1udWxsO3RoaXMuc2hpZnQ9ITE7dGhpcy5hY3RpdmVUb3VjaD10aGlzLnNlbEZvckNvbnRleHRNZW51PW51bGw7dGhpcy5ndXR0ZXJTcGVjcz1ZZChjLmd1dHRlcnMsYy5saW5lTnVtYmVycyk7c2YodGhpcyk7ZC5pbml0KHRoaXMpfWZ1bmN0aW9uIHVmKGEpe3ZhciBiPWEud2hlZWxEZWx0YVgsZD1hLndoZWVsRGVsdGFZO251bGw9PWImJmEuZGV0YWlsJiZhLmF4aXM9PWEuSE9SSVpPTlRBTF9BWElTJiYoYj1hLmRldGFpbCk7bnVsbD09ZCYmYS5kZXRhaWwmJmEuYXhpcz09YS5WRVJUSUNBTF9BWElTP1xuZD1hLmRldGFpbDpudWxsPT1kJiYoZD1hLndoZWVsRGVsdGEpO3JldHVybnt4OmIseTpkfX1mdW5jdGlvbiBaZyhhKXthPXVmKGEpO2EueCo9TmE7YS55Kj1OYTtyZXR1cm4gYX1mdW5jdGlvbiB2ZihhLGIpe1FhJiYxMDI9PXRmJiYobnVsbD09YS5kaXNwbGF5LmNocm9tZVNjcm9sbEhhY2s/YS5kaXNwbGF5LnNpemVyLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCI6Y2xlYXJUaW1lb3V0KGEuZGlzcGxheS5jaHJvbWVTY3JvbGxIYWNrKSxhLmRpc3BsYXkuY2hyb21lU2Nyb2xsSGFjaz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5kaXNwbGF5LmNocm9tZVNjcm9sbEhhY2s9bnVsbDthLmRpc3BsYXkuc2l6ZXIuc3R5bGUucG9pbnRlckV2ZW50cz1cIlwifSwxMDApKTt2YXIgZD11ZihiKSxjPWQueDtkPWQueTt2YXIgZT1OYTswPT09Yi5kZWx0YU1vZGUmJihjPWIuZGVsdGFYLGQ9Yi5kZWx0YVksZT0xKTt2YXIgZj1hLmRpc3BsYXksZz1mLnNjcm9sbGVyLGg9Zy5zY3JvbGxXaWR0aD5nLmNsaWVudFdpZHRoLFxuaz1nLnNjcm9sbEhlaWdodD5nLmNsaWVudEhlaWdodDtpZihjJiZofHxkJiZrKXtpZihkJiZ5YSYmZmEpe2g9Yi50YXJnZXQ7dmFyIGw9Zi52aWV3O2E6Zm9yKDtoIT1nO2g9aC5wYXJlbnROb2RlKWZvcih2YXIgbT0wO208bC5sZW5ndGg7bSsrKWlmKGxbbV0ubm9kZT09aCl7YS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD1oO2JyZWFrIGF9fSFjfHxNYXx8Q2F8fG51bGw9PWU/KGQmJm51bGwhPWUmJihlKj1kLGs9YS5kb2Muc2Nyb2xsVG9wLGg9aytmLndyYXBwZXIuY2xpZW50SGVpZ2h0LDA+ZT9rPU1hdGgubWF4KDAsaytlLTUwKTpoPU1hdGgubWluKGEuZG9jLmhlaWdodCxoK2UrNTApLFVkKGEse3RvcDprLGJvdHRvbTpofSkpLDIwPlFjJiYwIT09Yi5kZWx0YU1vZGUmJihudWxsPT1mLndoZWVsU3RhcnRYPyhmLndoZWVsU3RhcnRYPWcuc2Nyb2xsTGVmdCxmLndoZWVsU3RhcnRZPWcuc2Nyb2xsVG9wLGYud2hlZWxEWD1jLGYud2hlZWxEWT1kLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihudWxsIT1cbmYud2hlZWxTdGFydFgpe3ZhciBuPWcuc2Nyb2xsTGVmdC1mLndoZWVsU3RhcnRYLHA9Zy5zY3JvbGxUb3AtZi53aGVlbFN0YXJ0WTtuPXAmJmYud2hlZWxEWSYmcC9mLndoZWVsRFl8fG4mJmYud2hlZWxEWCYmbi9mLndoZWVsRFg7Zi53aGVlbFN0YXJ0WD1mLndoZWVsU3RhcnRZPW51bGw7biYmKE5hPShOYSpRYytuKS8oUWMrMSksKytRYyl9fSwyMDApKTooZi53aGVlbERYKz1jLGYud2hlZWxEWSs9ZCkpKTooZCYmayYmWGIoYSxNYXRoLm1heCgwLGcuc2Nyb2xsVG9wK2QqZSkpLGtiKGEsTWF0aC5tYXgoMCxnLnNjcm9sbExlZnQrYyplKSksKCFkfHxkJiZrKSYmbGEoYiksZi53aGVlbFN0YXJ0WD1udWxsKX19ZnVuY3Rpb24gRGEoYSxiLGQpe2E9YSYmYS5vcHRpb25zLnNlbGVjdGlvbnNNYXlUb3VjaDtkPWJbZF07Yi5zb3J0KGZ1bmN0aW9uKGssbCl7cmV0dXJuIEIoay5mcm9tKCksbC5mcm9tKCkpfSk7ZD1lYShiLGQpO2Zvcih2YXIgYz0xO2M8Yi5sZW5ndGg7YysrKXt2YXIgZT1cbmJbY10sZj1iW2MtMV0sZz1CKGYudG8oKSxlLmZyb20oKSk7aWYoYSYmIWUuZW1wdHkoKT8wPGc6MDw9Zyl7Zz1CYyhmLmZyb20oKSxlLmZyb20oKSk7dmFyIGg9QWMoZi50bygpLGUudG8oKSk7ZT1mLmVtcHR5KCk/ZS5mcm9tKCk9PWUuaGVhZDpmLmZyb20oKT09Zi5oZWFkO2M8PWQmJi0tZDtiLnNwbGljZSgtLWMsMixuZXcgSShlP2g6ZyxlP2c6aCkpfX1yZXR1cm4gbmV3IHZhKGIsZCl9ZnVuY3Rpb24gT2EoYSxiKXtyZXR1cm4gbmV3IHZhKFtuZXcgSShhLGJ8fGEpXSwwKX1mdW5jdGlvbiBUYShhKXtyZXR1cm4gYS50ZXh0P3QoYS5mcm9tLmxpbmUrYS50ZXh0Lmxlbmd0aC0xLEooYS50ZXh0KS5sZW5ndGgrKDE9PWEudGV4dC5sZW5ndGg/YS5mcm9tLmNoOjApKTphLnRvfWZ1bmN0aW9uIHdmKGEsYil7aWYoMD5CKGEsYi5mcm9tKSlyZXR1cm4gYTtpZigwPj1CKGEsYi50bykpcmV0dXJuIFRhKGIpO3ZhciBkPWEubGluZStiLnRleHQubGVuZ3RoLShiLnRvLmxpbmUtYi5mcm9tLmxpbmUpLVxuMSxjPWEuY2g7YS5saW5lPT1iLnRvLmxpbmUmJihjKz1UYShiKS5jaC1iLnRvLmNoKTtyZXR1cm4gdChkLGMpfWZ1bmN0aW9uIFpkKGEsYil7Zm9yKHZhciBkPVtdLGM9MDtjPGEuc2VsLnJhbmdlcy5sZW5ndGg7YysrKXt2YXIgZT1hLnNlbC5yYW5nZXNbY107ZC5wdXNoKG5ldyBJKHdmKGUuYW5jaG9yLGIpLHdmKGUuaGVhZCxiKSkpfXJldHVybiBEYShhLmNtLGQsYS5zZWwucHJpbUluZGV4KX1mdW5jdGlvbiB4ZihhLGIsZCl7cmV0dXJuIGEubGluZT09Yi5saW5lP3QoZC5saW5lLGEuY2gtYi5jaCtkLmNoKTp0KGQubGluZSsoYS5saW5lLWIubGluZSksYS5jaCl9ZnVuY3Rpb24gJGQoYSl7YS5kb2MubW9kZT1uZChhLm9wdGlvbnMsYS5kb2MubW9kZU9wdGlvbik7YmMoYSl9ZnVuY3Rpb24gYmMoYSl7YS5kb2MuaXRlcihmdW5jdGlvbihiKXtiLnN0YXRlQWZ0ZXImJihiLnN0YXRlQWZ0ZXI9bnVsbCk7Yi5zdHlsZXMmJihiLnN0eWxlcz1udWxsKX0pO2EuZG9jLm1vZGVGcm9udGllcj1cbmEuZG9jLmhpZ2hsaWdodEZyb250aWVyPWEuZG9jLmZpcnN0O1liKGEsMTAwKTthLnN0YXRlLm1vZGVHZW4rKzthLmN1ck9wJiZtYShhKX1mdW5jdGlvbiB5ZihhLGIpe3JldHVybiAwPT1iLmZyb20uY2gmJjA9PWIudG8uY2gmJlwiXCI9PUooYi50ZXh0KSYmKCFhLmNtfHxhLmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKX1mdW5jdGlvbiBhZShhLGIsZCxjKXtmdW5jdGlvbiBlKHIsdSxBKXtyLnRleHQ9dTtyLnN0YXRlQWZ0ZXImJihyLnN0YXRlQWZ0ZXI9bnVsbCk7ci5zdHlsZXMmJihyLnN0eWxlcz1udWxsKTtudWxsIT1yLm9yZGVyJiYoci5vcmRlcj1udWxsKTtHZShyKTtIZShyLEEpO3U9Yz9jKHIpOjE7dSE9ci5oZWlnaHQmJkVhKHIsdSk7YWEocixcImNoYW5nZVwiLHIsYil9ZnVuY3Rpb24gZihyLHUpe2Zvcih2YXIgQT1bXTtyPHU7KytyKUEucHVzaChuZXcgemIoa1tyXSxkP2Rbcl06bnVsbCxjKSk7cmV0dXJuIEF9dmFyIGc9Yi5mcm9tLGg9Yi50byxrPWIudGV4dCxcbmw9dyhhLGcubGluZSksbT13KGEsaC5saW5lKSxuPUooaykscD1kP2Rbay5sZW5ndGgtMV06bnVsbCxxPWgubGluZS1nLmxpbmU7Yi5mdWxsPyhhLmluc2VydCgwLGYoMCxrLmxlbmd0aCkpLGEucmVtb3ZlKGsubGVuZ3RoLGEuc2l6ZS1rLmxlbmd0aCkpOnlmKGEsYik/KGg9ZigwLGsubGVuZ3RoLTEpLGUobSxtLnRleHQscCkscSYmYS5yZW1vdmUoZy5saW5lLHEpLGgubGVuZ3RoJiZhLmluc2VydChnLmxpbmUsaCkpOmw9PW0/MT09ay5sZW5ndGg/ZShsLGwudGV4dC5zbGljZSgwLGcuY2gpK24rbC50ZXh0LnNsaWNlKGguY2gpLHApOihxPWYoMSxrLmxlbmd0aC0xKSxxLnB1c2gobmV3IHpiKG4rbC50ZXh0LnNsaWNlKGguY2gpLHAsYykpLGUobCxsLnRleHQuc2xpY2UoMCxnLmNoKStrWzBdLGQ/ZFswXTpudWxsKSxhLmluc2VydChnLmxpbmUrMSxxKSk6MT09ay5sZW5ndGg/KGUobCxsLnRleHQuc2xpY2UoMCxnLmNoKStrWzBdK20udGV4dC5zbGljZShoLmNoKSxkP2RbMF06bnVsbCksXG5hLnJlbW92ZShnLmxpbmUrMSxxKSk6KGUobCxsLnRleHQuc2xpY2UoMCxnLmNoKStrWzBdLGQ/ZFswXTpudWxsKSxlKG0sbittLnRleHQuc2xpY2UoaC5jaCkscCkscD1mKDEsay5sZW5ndGgtMSksMTxxJiZhLnJlbW92ZShnLmxpbmUrMSxxLTEpLGEuaW5zZXJ0KGcubGluZSsxLHApKTthYShhLFwiY2hhbmdlXCIsYSxiKX1mdW5jdGlvbiBVYShhLGIsZCl7ZnVuY3Rpb24gYyhlLGYsZyl7aWYoZS5saW5rZWQpZm9yKHZhciBoPTA7aDxlLmxpbmtlZC5sZW5ndGg7KytoKXt2YXIgaz1lLmxpbmtlZFtoXTtpZihrLmRvYyE9Zil7dmFyIGw9ZyYmay5zaGFyZWRIaXN0O2lmKCFkfHxsKWIoay5kb2MsbCksYyhrLmRvYyxlLGwpfX19YyhhLG51bGwsITApfWZ1bmN0aW9uIHpmKGEsYil7aWYoYi5jbSl0aHJvdyBFcnJvcihcIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuXCIpO2EuZG9jPWI7Yi5jbT1hO05kKGEpOyRkKGEpO0FmKGEpO2Eub3B0aW9ucy5kaXJlY3Rpb249Yi5kaXJlY3Rpb247XG5hLm9wdGlvbnMubGluZVdyYXBwaW5nfHx6ZChhKTthLm9wdGlvbnMubW9kZT1iLm1vZGVPcHRpb247bWEoYSl9ZnVuY3Rpb24gQWYoYSl7KFwicnRsXCI9PWEuZG9jLmRpcmVjdGlvbj9ZYTpqYikoYS5kaXNwbGF5LmxpbmVEaXYsXCJDb2RlTWlycm9yLXJ0bFwiKX1mdW5jdGlvbiAkZyhhKXtyYShhLGZ1bmN0aW9uKCl7QWYoYSk7bWEoYSl9KX1mdW5jdGlvbiBSYyhhKXt0aGlzLmRvbmU9W107dGhpcy51bmRvbmU9W107dGhpcy51bmRvRGVwdGg9YT9hLnVuZG9EZXB0aDpJbmZpbml0eTt0aGlzLmxhc3RNb2RUaW1lPXRoaXMubGFzdFNlbFRpbWU9MDt0aGlzLmxhc3RPcmlnaW49dGhpcy5sYXN0U2VsT3JpZ2luPXRoaXMubGFzdE9wPXRoaXMubGFzdFNlbE9wPW51bGw7dGhpcy5nZW5lcmF0aW9uPXRoaXMubWF4R2VuZXJhdGlvbj1hP2EubWF4R2VuZXJhdGlvbjoxfWZ1bmN0aW9uIGJlKGEsYil7dmFyIGQ9e2Zyb206c2QoYi5mcm9tKSx0bzpUYShiKSx0ZXh0OmFiKGEsYi5mcm9tLGIudG8pfTtcbkJmKGEsZCxiLmZyb20ubGluZSxiLnRvLmxpbmUrMSk7VWEoYSxmdW5jdGlvbihjKXtyZXR1cm4gQmYoYyxkLGIuZnJvbS5saW5lLGIudG8ubGluZSsxKX0sITApO3JldHVybiBkfWZ1bmN0aW9uIENmKGEpe2Zvcig7YS5sZW5ndGg7KWlmKEooYSkucmFuZ2VzKWEucG9wKCk7ZWxzZSBicmVha31mdW5jdGlvbiBEZihhLGIsZCxjKXt2YXIgZT1hLmhpc3Rvcnk7ZS51bmRvbmUubGVuZ3RoPTA7dmFyIGY9K25ldyBEYXRlLGc7aWYoZz1lLmxhc3RPcD09Y3x8ZS5sYXN0T3JpZ2luPT1iLm9yaWdpbiYmYi5vcmlnaW4mJihcIitcIj09Yi5vcmlnaW4uY2hhckF0KDApJiZlLmxhc3RNb2RUaW1lPmYtKGEuY20/YS5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5OjUwMCl8fFwiKlwiPT1iLm9yaWdpbi5jaGFyQXQoMCkpKXtpZihlLmxhc3RPcD09Yyl7Q2YoZS5kb25lKTt2YXIgaD1KKGUuZG9uZSl9ZWxzZSBlLmRvbmUubGVuZ3RoJiYhSihlLmRvbmUpLnJhbmdlcz9oPUooZS5kb25lKToxPGUuZG9uZS5sZW5ndGgmJlxuIWUuZG9uZVtlLmRvbmUubGVuZ3RoLTJdLnJhbmdlcz8oZS5kb25lLnBvcCgpLGg9SihlLmRvbmUpKTpoPXZvaWQgMDtnPWh9aWYoZyl7dmFyIGs9SihoLmNoYW5nZXMpOzA9PUIoYi5mcm9tLGIudG8pJiYwPT1CKGIuZnJvbSxrLnRvKT9rLnRvPVRhKGIpOmguY2hhbmdlcy5wdXNoKGJlKGEsYikpfWVsc2UgZm9yKChoPUooZS5kb25lKSkmJmgucmFuZ2VzfHxTYyhhLnNlbCxlLmRvbmUpLGg9e2NoYW5nZXM6W2JlKGEsYildLGdlbmVyYXRpb246ZS5nZW5lcmF0aW9ufSxlLmRvbmUucHVzaChoKTtlLmRvbmUubGVuZ3RoPmUudW5kb0RlcHRoOyllLmRvbmUuc2hpZnQoKSxlLmRvbmVbMF0ucmFuZ2VzfHxlLmRvbmUuc2hpZnQoKTtlLmRvbmUucHVzaChkKTtlLmdlbmVyYXRpb249KytlLm1heEdlbmVyYXRpb247ZS5sYXN0TW9kVGltZT1lLmxhc3RTZWxUaW1lPWY7ZS5sYXN0T3A9ZS5sYXN0U2VsT3A9YztlLmxhc3RPcmlnaW49ZS5sYXN0U2VsT3JpZ2luPWIub3JpZ2luO2t8fFcoYSxcImhpc3RvcnlBZGRlZFwiKX1cbmZ1bmN0aW9uIFNjKGEsYil7dmFyIGQ9SihiKTtkJiZkLnJhbmdlcyYmZC5lcXVhbHMoYSl8fGIucHVzaChhKX1mdW5jdGlvbiBCZihhLGIsZCxjKXt2YXIgZT1iW1wic3BhbnNfXCIrYS5pZF0sZj0wO2EuaXRlcihNYXRoLm1heChhLmZpcnN0LGQpLE1hdGgubWluKGEuZmlyc3QrYS5zaXplLGMpLGZ1bmN0aW9uKGcpe2cubWFya2VkU3BhbnMmJigoZXx8KGU9YltcInNwYW5zX1wiK2EuaWRdPXt9KSlbZl09Zy5tYXJrZWRTcGFucyk7KytmfSl9ZnVuY3Rpb24gRWYoYSxiKXt2YXIgZDtpZihkPWJbXCJzcGFuc19cIithLmlkXSl7Zm9yKHZhciBjPVtdLGU9MDtlPGIudGV4dC5sZW5ndGg7KytlKXt2YXIgZj1jLGc9Zi5wdXNoO3ZhciBoPXZvaWQgMDt2YXIgaz1kW2VdO2lmKGspe2Zvcih2YXIgbD0wO2w8ay5sZW5ndGg7KytsKWtbbF0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkP2h8fChoPWsuc2xpY2UoMCxsKSk6aCYmaC5wdXNoKGtbbF0pO2g9aD9oLmxlbmd0aD9oOm51bGw6a31lbHNlIGg9bnVsbDtcbmcuY2FsbChmLGgpfWQ9Y31lbHNlIGQ9bnVsbDthPXZkKGEsYik7aWYoIWQpcmV0dXJuIGE7aWYoIWEpcmV0dXJuIGQ7Zm9yKGI9MDtiPGQubGVuZ3RoOysrYilpZihjPWRbYl0sZT1hW2JdLGMmJmUpYTpmb3IoZj0wO2Y8ZS5sZW5ndGg7KytmKXtnPWVbZl07Zm9yKGg9MDtoPGMubGVuZ3RoOysraClpZihjW2hdLm1hcmtlcj09Zy5tYXJrZXIpY29udGludWUgYTtjLnB1c2goZyl9ZWxzZSBlJiYoZFtiXT1lKTtyZXR1cm4gZH1mdW5jdGlvbiBBYihhLGIsZCl7Zm9yKHZhciBjPVtdLGU9MDtlPGEubGVuZ3RoOysrZSl7dmFyIGY9YVtlXTtpZihmLnJhbmdlcyljLnB1c2goZD92YS5wcm90b3R5cGUuZGVlcENvcHkuY2FsbChmKTpmKTtlbHNle2Y9Zi5jaGFuZ2VzO3ZhciBnPVtdO2MucHVzaCh7Y2hhbmdlczpnfSk7Zm9yKHZhciBoPTA7aDxmLmxlbmd0aDsrK2gpe3ZhciBrPWZbaF0sbDtnLnB1c2goe2Zyb206ay5mcm9tLHRvOmsudG8sdGV4dDprLnRleHR9KTtpZihiKWZvcih2YXIgbSBpbiBrKShsPVxubS5tYXRjaCgvXnNwYW5zXyhcXGQrKSQvKSkmJi0xPGVhKGIsTnVtYmVyKGxbMV0pKSYmKEooZylbbV09a1ttXSxkZWxldGUga1ttXSl9fX1yZXR1cm4gY31mdW5jdGlvbiBjZShhLGIsZCxjKXtyZXR1cm4gYz8oYT1hLmFuY2hvcixkJiYoYz0wPkIoYixhKSxjIT0wPkIoZCxhKT8oYT1iLGI9ZCk6YyE9MD5CKGIsZCkmJihiPWQpKSxuZXcgSShhLGIpKTpuZXcgSShkfHxiLGIpfWZ1bmN0aW9uIFRjKGEsYixkLGMsZSl7bnVsbD09ZSYmKGU9YS5jbSYmKGEuY20uZGlzcGxheS5zaGlmdHx8YS5leHRlbmQpKTtkYShhLG5ldyB2YShbY2UoYS5zZWwucHJpbWFyeSgpLGIsZCxlKV0sMCksYyl9ZnVuY3Rpb24gRmYoYSxiLGQpe2Zvcih2YXIgYz1bXSxlPWEuY20mJihhLmNtLmRpc3BsYXkuc2hpZnR8fGEuZXh0ZW5kKSxmPTA7ZjxhLnNlbC5yYW5nZXMubGVuZ3RoO2YrKyljW2ZdPWNlKGEuc2VsLnJhbmdlc1tmXSxiW2ZdLG51bGwsZSk7Yj1EYShhLmNtLGMsYS5zZWwucHJpbUluZGV4KTtkYShhLFxuYixkKX1mdW5jdGlvbiBkZShhLGIsZCxjKXt2YXIgZT1hLnNlbC5yYW5nZXMuc2xpY2UoMCk7ZVtiXT1kO2RhKGEsRGEoYS5jbSxlLGEuc2VsLnByaW1JbmRleCksYyl9ZnVuY3Rpb24gYWgoYSxiLGQpe2Q9e3JhbmdlczpiLnJhbmdlcyx1cGRhdGU6ZnVuY3Rpb24oYyl7dGhpcy5yYW5nZXM9W107Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspdGhpcy5yYW5nZXNbZV09bmV3IEkoQyhhLGNbZV0uYW5jaG9yKSxDKGEsY1tlXS5oZWFkKSl9LG9yaWdpbjpkJiZkLm9yaWdpbn07VyhhLFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIsYSxkKTthLmNtJiZXKGEuY20sXCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2VcIixhLmNtLGQpO3JldHVybiBkLnJhbmdlcyE9Yi5yYW5nZXM/RGEoYS5jbSxkLnJhbmdlcyxkLnJhbmdlcy5sZW5ndGgtMSk6Yn1mdW5jdGlvbiBHZihhLGIsZCl7dmFyIGM9YS5oaXN0b3J5LmRvbmUsZT1KKGMpO2UmJmUucmFuZ2VzPyhjW2MubGVuZ3RoLTFdPWIsVWMoYSxiLGQpKTpkYShhLFxuYixkKX1mdW5jdGlvbiBkYShhLGIsZCl7VWMoYSxiLGQpO2I9YS5zZWw7dmFyIGM9YS5jbT9hLmNtLmN1ck9wLmlkOk5hTixlPWEuaGlzdG9yeSxmPWQmJmQub3JpZ2luLGc7aWYoIShnPWM9PWUubGFzdFNlbE9wKSYmKGc9ZiYmZS5sYXN0U2VsT3JpZ2luPT1mKSYmIShnPWUubGFzdE1vZFRpbWU9PWUubGFzdFNlbFRpbWUmJmUubGFzdE9yaWdpbj09Zikpe2c9SihlLmRvbmUpO3ZhciBoPWYuY2hhckF0KDApO2c9XCIqXCI9PWh8fFwiK1wiPT1oJiZnLnJhbmdlcy5sZW5ndGg9PWIucmFuZ2VzLmxlbmd0aCYmZy5zb21ldGhpbmdTZWxlY3RlZCgpPT1iLnNvbWV0aGluZ1NlbGVjdGVkKCkmJm5ldyBEYXRlLWEuaGlzdG9yeS5sYXN0U2VsVGltZTw9KGEuY20/YS5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5OjUwMCl9Zz9lLmRvbmVbZS5kb25lLmxlbmd0aC0xXT1iOlNjKGIsZS5kb25lKTtlLmxhc3RTZWxUaW1lPStuZXcgRGF0ZTtlLmxhc3RTZWxPcmlnaW49ZjtlLmxhc3RTZWxPcD1jO1xuZCYmITEhPT1kLmNsZWFyUmVkbyYmQ2YoZS51bmRvbmUpfWZ1bmN0aW9uIFVjKGEsYixkKXtpZih4YShhLFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIpfHxhLmNtJiZ4YShhLmNtLFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIpKWI9YWgoYSxiLGQpO3ZhciBjPWQmJmQuYmlhc3x8KDA+QihiLnByaW1hcnkoKS5oZWFkLGEuc2VsLnByaW1hcnkoKS5oZWFkKT8tMToxKTtIZihhLElmKGEsYixjLCEwKSk7ZCYmITE9PT1kLnNjcm9sbHx8IWEuY218fFwibm9jdXJzb3JcIj09YS5jbS5nZXRPcHRpb24oXCJyZWFkT25seVwiKXx8eGIoYS5jbSl9ZnVuY3Rpb24gSGYoYSxiKXtiLmVxdWFscyhhLnNlbCl8fChhLnNlbD1iLGEuY20mJihhLmNtLmN1ck9wLnVwZGF0ZUlucHV0PTEsYS5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPSEwLHRlKGEuY20pKSxhYShhLFwiY3Vyc29yQWN0aXZpdHlcIixhKSl9ZnVuY3Rpb24gSmYoYSl7SGYoYSxJZihhLGEuc2VsLG51bGwsITEpKX1mdW5jdGlvbiBJZihhLGIsZCxjKXtmb3IodmFyIGUsXG5mPTA7ZjxiLnJhbmdlcy5sZW5ndGg7ZisrKXt2YXIgZz1iLnJhbmdlc1tmXSxoPWIucmFuZ2VzLmxlbmd0aD09YS5zZWwucmFuZ2VzLmxlbmd0aCYmYS5zZWwucmFuZ2VzW2ZdLGs9VmMoYSxnLmFuY2hvcixoJiZoLmFuY2hvcixkLGMpO2g9Zy5oZWFkPT1nLmFuY2hvcj9rOlZjKGEsZy5oZWFkLGgmJmguaGVhZCxkLGMpO2lmKGV8fGshPWcuYW5jaG9yfHxoIT1nLmhlYWQpZXx8KGU9Yi5yYW5nZXMuc2xpY2UoMCxmKSksZVtmXT1uZXcgSShrLGgpfXJldHVybiBlP0RhKGEuY20sZSxiLnByaW1JbmRleCk6Yn1mdW5jdGlvbiBCYihhLGIsZCxjLGUpe3ZhciBmPXcoYSxiLmxpbmUpO2lmKGYubWFya2VkU3BhbnMpZm9yKHZhciBnPTA7ZzxmLm1hcmtlZFNwYW5zLmxlbmd0aDsrK2cpe3ZhciBoPWYubWFya2VkU3BhbnNbZ10saz1oLm1hcmtlcixsPVwic2VsZWN0TGVmdFwiaW4gaz8hay5zZWxlY3RMZWZ0OmsuaW5jbHVzaXZlTGVmdCxtPVwic2VsZWN0UmlnaHRcImluIGs/IWsuc2VsZWN0UmlnaHQ6XG5rLmluY2x1c2l2ZVJpZ2h0O2lmKChudWxsPT1oLmZyb218fChsP2guZnJvbTw9Yi5jaDpoLmZyb208Yi5jaCkpJiYobnVsbD09aC50b3x8KG0/aC50bz49Yi5jaDpoLnRvPmIuY2gpKSl7aWYoZSYmKFcoayxcImJlZm9yZUN1cnNvckVudGVyXCIpLGsuZXhwbGljaXRseUNsZWFyZWQpKWlmKGYubWFya2VkU3BhbnMpey0tZztjb250aW51ZX1lbHNlIGJyZWFrO2lmKGsuYXRvbWljKXtpZihkKXtnPWsuZmluZCgwPmM/MTotMSk7aD12b2lkIDA7aWYoMD5jP206bClnPUtmKGEsZywtYyxnJiZnLmxpbmU9PWIubGluZT9mOm51bGwpO2lmKGcmJmcubGluZT09Yi5saW5lJiYoaD1CKGcsZCkpJiYoMD5jPzA+aDowPGgpKXJldHVybiBCYihhLGcsYixjLGUpfWQ9ay5maW5kKDA+Yz8tMToxKTtpZigwPmM/bDptKWQ9S2YoYSxkLGMsZC5saW5lPT1iLmxpbmU/ZjpudWxsKTtyZXR1cm4gZD9CYihhLGQsYixjLGUpOm51bGx9fX1yZXR1cm4gYn1mdW5jdGlvbiBWYyhhLGIsZCxjLGUpe2M9Y3x8MTtiPVxuQmIoYSxiLGQsYyxlKXx8IWUmJkJiKGEsYixkLGMsITApfHxCYihhLGIsZCwtYyxlKXx8IWUmJkJiKGEsYixkLC1jLCEwKTtyZXR1cm4gYj9iOihhLmNhbnRFZGl0PSEwLHQoYS5maXJzdCwwKSl9ZnVuY3Rpb24gS2YoYSxiLGQsYyl7cmV0dXJuIDA+ZCYmMD09Yi5jaD9iLmxpbmU+YS5maXJzdD9DKGEsdChiLmxpbmUtMSkpOm51bGw6MDxkJiZiLmNoPT0oY3x8dyhhLGIubGluZSkpLnRleHQubGVuZ3RoP2IubGluZTxhLmZpcnN0K2Euc2l6ZS0xP3QoYi5saW5lKzEsMCk6bnVsbDpuZXcgdChiLmxpbmUsYi5jaCtkKX1mdW5jdGlvbiBMZihhKXthLnNldFNlbGVjdGlvbih0KGEuZmlyc3RMaW5lKCksMCksdChhLmxhc3RMaW5lKCkpLElhKX1mdW5jdGlvbiBNZihhLGIsZCl7dmFyIGM9e2NhbmNlbGVkOiExLGZyb206Yi5mcm9tLHRvOmIudG8sdGV4dDpiLnRleHQsb3JpZ2luOmIub3JpZ2luLGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiBjLmNhbmNlbGVkPSEwfX07ZCYmKGMudXBkYXRlPVxuZnVuY3Rpb24oZSxmLGcsaCl7ZSYmKGMuZnJvbT1DKGEsZSkpO2YmJihjLnRvPUMoYSxmKSk7ZyYmKGMudGV4dD1nKTt2b2lkIDAhPT1oJiYoYy5vcmlnaW49aCl9KTtXKGEsXCJiZWZvcmVDaGFuZ2VcIixhLGMpO2EuY20mJlcoYS5jbSxcImJlZm9yZUNoYW5nZVwiLGEuY20sYyk7cmV0dXJuIGMuY2FuY2VsZWQ/KGEuY20mJihhLmNtLmN1ck9wLnVwZGF0ZUlucHV0PTIpLG51bGwpOntmcm9tOmMuZnJvbSx0bzpjLnRvLHRleHQ6Yy50ZXh0LG9yaWdpbjpjLm9yaWdpbn19ZnVuY3Rpb24gQ2IoYSxiLGQpe2lmKGEuY20pe2lmKCFhLmNtLmN1ck9wKXJldHVybiBiYShhLmNtLENiKShhLGIsZCk7aWYoYS5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXJldHVybn1pZih4YShhLFwiYmVmb3JlQ2hhbmdlXCIpfHxhLmNtJiZ4YShhLmNtLFwiYmVmb3JlQ2hhbmdlXCIpKWlmKGI9TWYoYSxiLCEwKSwhYilyZXR1cm47aWYoZD1OZiYmIWQmJkhnKGEsYi5mcm9tLGIudG8pKWZvcih2YXIgYz1kLmxlbmd0aC0xOzA8PVxuYzstLWMpT2YoYSx7ZnJvbTpkW2NdLmZyb20sdG86ZFtjXS50byx0ZXh0OmM/W1wiXCJdOmIudGV4dCxvcmlnaW46Yi5vcmlnaW59KTtlbHNlIE9mKGEsYil9ZnVuY3Rpb24gT2YoYSxiKXtpZigxIT1iLnRleHQubGVuZ3RofHxcIlwiIT1iLnRleHRbMF18fDAhPUIoYi5mcm9tLGIudG8pKXt2YXIgZD1aZChhLGIpO0RmKGEsYixkLGEuY20/YS5jbS5jdXJPcC5pZDpOYU4pO2NjKGEsYixkLHZkKGEsYikpO3ZhciBjPVtdO1VhKGEsZnVuY3Rpb24oZSxmKXtmfHwtMSE9ZWEoYyxlLmhpc3RvcnkpfHwoUGYoZS5oaXN0b3J5LGIpLGMucHVzaChlLmhpc3RvcnkpKTtjYyhlLGIsbnVsbCx2ZChlLGIpKX0pfX1mdW5jdGlvbiBXYyhhLGIsZCl7dmFyIGM9YS5jbSYmYS5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzO2lmKCFjfHxkKXtmb3IodmFyIGU9YS5oaXN0b3J5LGYsZz1hLnNlbCxoPVwidW5kb1wiPT1iP2UuZG9uZTplLnVuZG9uZSxrPVwidW5kb1wiPT1iP2UudW5kb25lOmUuZG9uZSxsPTA7bDxoLmxlbmd0aCYmXG4oZj1oW2xdLGQ/IWYucmFuZ2VzfHxmLmVxdWFscyhhLnNlbCk6Zi5yYW5nZXMpO2wrKyk7aWYobCE9aC5sZW5ndGgpe2ZvcihlLmxhc3RPcmlnaW49ZS5sYXN0U2VsT3JpZ2luPW51bGw7OylpZihmPWgucG9wKCksZi5yYW5nZXMpe1NjKGYsayk7aWYoZCYmIWYuZXF1YWxzKGEuc2VsKSl7ZGEoYSxmLHtjbGVhclJlZG86ITF9KTtyZXR1cm59Zz1mfWVsc2V7aWYoYyl7aC5wdXNoKGYpO3JldHVybn1icmVha312YXIgbT1bXTtTYyhnLGspO2sucHVzaCh7Y2hhbmdlczptLGdlbmVyYXRpb246ZS5nZW5lcmF0aW9ufSk7ZS5nZW5lcmF0aW9uPWYuZ2VuZXJhdGlvbnx8KytlLm1heEdlbmVyYXRpb247dmFyIG49eGEoYSxcImJlZm9yZUNoYW5nZVwiKXx8YS5jbSYmeGEoYS5jbSxcImJlZm9yZUNoYW5nZVwiKTtkPWZ1bmN0aW9uKHApe3ZhciBxPWYuY2hhbmdlc1twXTtxLm9yaWdpbj1iO2lmKG4mJiFNZihhLHEsITEpKXJldHVybiBoLmxlbmd0aD0wLHt9O20ucHVzaChiZShhLHEpKTt2YXIgcj1wP1xuWmQoYSxxKTpKKGgpO2NjKGEscSxyLEVmKGEscSkpOyFwJiZhLmNtJiZhLmNtLnNjcm9sbEludG9WaWV3KHtmcm9tOnEuZnJvbSx0bzpUYShxKX0pO3ZhciB1PVtdO1VhKGEsZnVuY3Rpb24oQSxZKXtZfHwtMSE9ZWEodSxBLmhpc3RvcnkpfHwoUGYoQS5oaXN0b3J5LHEpLHUucHVzaChBLmhpc3RvcnkpKTtjYyhBLHEsbnVsbCxFZihBLHEpKX0pfTtmb3IoYz1mLmNoYW5nZXMubGVuZ3RoLTE7MDw9YzstLWMpaWYoZT1kKGMpKXJldHVybiBlLnZ9fX1mdW5jdGlvbiBRZihhLGIpe2lmKDAhPWImJihhLmZpcnN0Kz1iLGEuc2VsPW5ldyB2YSh3YyhhLnNlbC5yYW5nZXMsZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJKHQoZS5hbmNob3IubGluZStiLGUuYW5jaG9yLmNoKSx0KGUuaGVhZC5saW5lK2IsZS5oZWFkLmNoKSl9KSxhLnNlbC5wcmltSW5kZXgpLGEuY20pKXttYShhLmNtLGEuZmlyc3QsYS5maXJzdC1iLGIpO2Zvcih2YXIgZD1hLmNtLmRpc3BsYXksYz1kLnZpZXdGcm9tO2M8ZC52aWV3VG87YysrKVNhKGEuY20sXG5jLFwiZ3V0dGVyXCIpfX1mdW5jdGlvbiBjYyhhLGIsZCxjKXtpZihhLmNtJiYhYS5jbS5jdXJPcClyZXR1cm4gYmEoYS5jbSxjYykoYSxiLGQsYyk7aWYoYi50by5saW5lPGEuZmlyc3QpUWYoYSxiLnRleHQubGVuZ3RoLTEtKGIudG8ubGluZS1iLmZyb20ubGluZSkpO2Vsc2UgaWYoIShiLmZyb20ubGluZT5hLmxhc3RMaW5lKCkpKXtpZihiLmZyb20ubGluZTxhLmZpcnN0KXt2YXIgZT1iLnRleHQubGVuZ3RoLTEtKGEuZmlyc3QtYi5mcm9tLmxpbmUpO1FmKGEsZSk7Yj17ZnJvbTp0KGEuZmlyc3QsMCksdG86dChiLnRvLmxpbmUrZSxiLnRvLmNoKSx0ZXh0OltKKGIudGV4dCldLG9yaWdpbjpiLm9yaWdpbn19ZT1hLmxhc3RMaW5lKCk7Yi50by5saW5lPmUmJihiPXtmcm9tOmIuZnJvbSx0bzp0KGUsdyhhLGUpLnRleHQubGVuZ3RoKSx0ZXh0OltiLnRleHRbMF1dLG9yaWdpbjpiLm9yaWdpbn0pO2IucmVtb3ZlZD1hYihhLGIuZnJvbSxiLnRvKTtkfHwoZD1aZChhLGIpKTthLmNtP2JoKGEuY20sXG5iLGMpOmFlKGEsYixjKTtVYyhhLGQsSWEpO2EuY2FudEVkaXQmJlZjKGEsdChhLmZpcnN0TGluZSgpLDApKSYmKGEuY2FudEVkaXQ9ITEpfX1mdW5jdGlvbiBiaChhLGIsZCl7dmFyIGM9YS5kb2MsZT1hLmRpc3BsYXksZj1iLmZyb20sZz1iLnRvLGg9ITEsaz1mLmxpbmU7YS5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGs9Tih6YSh3KGMsZi5saW5lKSkpLGMuaXRlcihrLGcubGluZSsxLGZ1bmN0aW9uKGwpe2lmKGw9PWUubWF4TGluZSlyZXR1cm4gaD0hMH0pKTstMTxjLnNlbC5jb250YWlucyhiLmZyb20sYi50bykmJnRlKGEpO2FlKGMsYixkLGVmKGEpKTthLm9wdGlvbnMubGluZVdyYXBwaW5nfHwoYy5pdGVyKGssZi5saW5lK2IudGV4dC5sZW5ndGgsZnVuY3Rpb24obCl7dmFyIG09RWMobCk7bT5lLm1heExpbmVMZW5ndGgmJihlLm1heExpbmU9bCxlLm1heExpbmVMZW5ndGg9bSxlLm1heExpbmVDaGFuZ2VkPSEwLGg9ITEpfSksaCYmKGEuY3VyT3AudXBkYXRlTWF4TGluZT0hMCkpO1xuR2coYyxmLmxpbmUpO1liKGEsNDAwKTtkPWIudGV4dC5sZW5ndGgtKGcubGluZS1mLmxpbmUpLTE7Yi5mdWxsP21hKGEpOmYubGluZSE9Zy5saW5lfHwxIT1iLnRleHQubGVuZ3RofHx5ZihhLmRvYyxiKT9tYShhLGYubGluZSxnLmxpbmUrMSxkKTpTYShhLGYubGluZSxcInRleHRcIik7ZD14YShhLFwiY2hhbmdlc1wiKTtpZigoYz14YShhLFwiY2hhbmdlXCIpKXx8ZCliPXtmcm9tOmYsdG86Zyx0ZXh0OmIudGV4dCxyZW1vdmVkOmIucmVtb3ZlZCxvcmlnaW46Yi5vcmlnaW59LGMmJmFhKGEsXCJjaGFuZ2VcIixhLGIpLGQmJihhLmN1ck9wLmNoYW5nZU9ianN8fChhLmN1ck9wLmNoYW5nZU9ianM9W10pKS5wdXNoKGIpO2EuZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudT1udWxsfWZ1bmN0aW9uIERiKGEsYixkLGMsZSl7Y3x8KGM9ZCk7MD5CKGMsZCkmJihjPVtjLGRdLGQ9Y1swXSxjPWNbMV0pO1wic3RyaW5nXCI9PXR5cGVvZiBiJiYoYj1hLnNwbGl0TGluZXMoYikpO0NiKGEse2Zyb206ZCx0bzpjLFxudGV4dDpiLG9yaWdpbjplfSl9ZnVuY3Rpb24gUmYoYSxiLGQsYyl7ZDxhLmxpbmU/YS5saW5lKz1jOmI8YS5saW5lJiYoYS5saW5lPWIsYS5jaD0wKX1mdW5jdGlvbiBTZihhLGIsZCxjKXtmb3IodmFyIGU9MDtlPGEubGVuZ3RoOysrZSl7dmFyIGY9YVtlXSxnPSEwO2lmKGYucmFuZ2VzKWZvcihmLmNvcGllZHx8KGY9YVtlXT1mLmRlZXBDb3B5KCksZi5jb3BpZWQ9ITApLGc9MDtnPGYucmFuZ2VzLmxlbmd0aDtnKyspUmYoZi5yYW5nZXNbZ10uYW5jaG9yLGIsZCxjKSxSZihmLnJhbmdlc1tnXS5oZWFkLGIsZCxjKTtlbHNle2Zvcih2YXIgaD0wO2g8Zi5jaGFuZ2VzLmxlbmd0aDsrK2gpe3ZhciBrPWYuY2hhbmdlc1toXTtpZihkPGsuZnJvbS5saW5lKWsuZnJvbT10KGsuZnJvbS5saW5lK2Msay5mcm9tLmNoKSxrLnRvPXQoay50by5saW5lK2Msay50by5jaCk7ZWxzZSBpZihiPD1rLnRvLmxpbmUpe2c9ITE7YnJlYWt9fWd8fChhLnNwbGljZSgwLGUrMSksZT0wKX19fWZ1bmN0aW9uIFBmKGEsXG5iKXt2YXIgZD1iLmZyb20ubGluZSxjPWIudG8ubGluZTtiPWIudGV4dC5sZW5ndGgtKGMtZCktMTtTZihhLmRvbmUsZCxjLGIpO1NmKGEudW5kb25lLGQsYyxiKX1mdW5jdGlvbiBkYyhhLGIsZCxjKXt2YXIgZT1iLGY9YjtcIm51bWJlclwiPT10eXBlb2YgYj9mPXcoYSxNYXRoLm1heChhLmZpcnN0LE1hdGgubWluKGIsYS5maXJzdCthLnNpemUtMSkpKTplPU4oYik7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtjKGYsZSkmJmEuY20mJlNhKGEuY20sZSxkKTtyZXR1cm4gZn1mdW5jdGlvbiBlYyhhKXt0aGlzLmxpbmVzPWE7dGhpcy5wYXJlbnQ9bnVsbDtmb3IodmFyIGI9MCxkPTA7ZDxhLmxlbmd0aDsrK2QpYVtkXS5wYXJlbnQ9dGhpcyxiKz1hW2RdLmhlaWdodDt0aGlzLmhlaWdodD1ifWZ1bmN0aW9uIGZjKGEpe3RoaXMuY2hpbGRyZW49YTtmb3IodmFyIGI9MCxkPTAsYz0wO2M8YS5sZW5ndGg7KytjKXt2YXIgZT1hW2NdO2IrPWUuY2h1bmtTaXplKCk7ZCs9ZS5oZWlnaHQ7ZS5wYXJlbnQ9XG50aGlzfXRoaXMuc2l6ZT1iO3RoaXMuaGVpZ2h0PWQ7dGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBjaChhLGIsZCxjKXt2YXIgZT1uZXcgZ2MoYSxkLGMpLGY9YS5jbTtmJiZlLm5vSFNjcm9sbCYmKGYuZGlzcGxheS5hbGlnbldpZGdldHM9ITApO2RjKGEsYixcIndpZGdldFwiLGZ1bmN0aW9uKGcpe3ZhciBoPWcud2lkZ2V0c3x8KGcud2lkZ2V0cz1bXSk7bnVsbD09ZS5pbnNlcnRBdD9oLnB1c2goZSk6aC5zcGxpY2UoTWF0aC5taW4oaC5sZW5ndGgsTWF0aC5tYXgoMCxlLmluc2VydEF0KSksMCxlKTtlLmxpbmU9ZztmJiYhUGEoYSxnKSYmKGg9R2EoZyk8YS5zY3JvbGxUb3AsRWEoZyxnLmhlaWdodCtUYihlKSksaCYmTmMoZixlLmhlaWdodCksZi5jdXJPcC5mb3JjZVVwZGF0ZT0hMCk7cmV0dXJuITB9KTtmJiZhYShmLFwibGluZVdpZGdldEFkZGVkXCIsZixlLFwibnVtYmVyXCI9PXR5cGVvZiBiP2I6TihiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gRWIoYSxiLGQsYyxlKXtpZihjJiZjLnNoYXJlZClyZXR1cm4gZGgoYSxcbmIsZCxjLGUpO2lmKGEuY20mJiFhLmNtLmN1ck9wKXJldHVybiBiYShhLmNtLEViKShhLGIsZCxjLGUpO3ZhciBmPW5ldyBWYShhLGUpO2U9QihiLGQpO2MmJlphKGMsZiwhMSk7aWYoMDxlfHwwPT1lJiYhMSE9PWYuY2xlYXJXaGVuRW1wdHkpcmV0dXJuIGY7Zi5yZXBsYWNlZFdpdGgmJihmLmNvbGxhcHNlZD0hMCxmLndpZGdldE5vZGU9TShcInNwYW5cIixbZi5yZXBsYWNlZFdpdGhdLFwiQ29kZU1pcnJvci13aWRnZXRcIiksYy5oYW5kbGVNb3VzZUV2ZW50c3x8Zi53aWRnZXROb2RlLnNldEF0dHJpYnV0ZShcImNtLWlnbm9yZS1ldmVudHNcIixcInRydWVcIiksYy5pbnNlcnRMZWZ0JiYoZi53aWRnZXROb2RlLmluc2VydExlZnQ9ITApKTtpZihmLmNvbGxhcHNlZCl7aWYoSWUoYSxiLmxpbmUsYixkLGYpfHxiLmxpbmUhPWQubGluZSYmSWUoYSxkLmxpbmUsYixkLGYpKXRocm93IEVycm9yKFwiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgcGFydGlhbGx5IG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZVwiKTtcbkthPSEwfWYuYWRkVG9IaXN0b3J5JiZEZihhLHtmcm9tOmIsdG86ZCxvcmlnaW46XCJtYXJrVGV4dFwifSxhLnNlbCxOYU4pO3ZhciBnPWIubGluZSxoPWEuY20sazthLml0ZXIoZyxkLmxpbmUrMSxmdW5jdGlvbihsKXtoJiZmLmNvbGxhcHNlZCYmIWgub3B0aW9ucy5saW5lV3JhcHBpbmcmJnphKGwpPT1oLmRpc3BsYXkubWF4TGluZSYmKGs9ITApO2YuY29sbGFwc2VkJiZnIT1iLmxpbmUmJkVhKGwsMCk7dmFyIG09bmV3IERjKGYsZz09Yi5saW5lP2IuY2g6bnVsbCxnPT1kLmxpbmU/ZC5jaDpudWxsKSxuPWEuY20mJmEuY20uY3VyT3A7KG49biYmd2luZG93LldlYWtTZXQmJihuLm1hcmtlZFNwYW5zfHwobi5tYXJrZWRTcGFucz1uZXcgV2Vha1NldCkpKSYmbC5tYXJrZWRTcGFucyYmbi5oYXMobC5tYXJrZWRTcGFucyk/bC5tYXJrZWRTcGFucy5wdXNoKG0pOihsLm1hcmtlZFNwYW5zPWwubWFya2VkU3BhbnM/bC5tYXJrZWRTcGFucy5jb25jYXQoW21dKTpbbV0sbiYmbi5hZGQobC5tYXJrZWRTcGFucykpO1xubS5tYXJrZXIuYXR0YWNoTGluZShsKTsrK2d9KTtmLmNvbGxhcHNlZCYmYS5pdGVyKGIubGluZSxkLmxpbmUrMSxmdW5jdGlvbihsKXtQYShhLGwpJiZFYShsLDApfSk7Zi5jbGVhck9uRW50ZXImJnooZixcImJlZm9yZUN1cnNvckVudGVyXCIsZnVuY3Rpb24oKXtyZXR1cm4gZi5jbGVhcigpfSk7Zi5yZWFkT25seSYmKE5mPSEwLChhLmhpc3RvcnkuZG9uZS5sZW5ndGh8fGEuaGlzdG9yeS51bmRvbmUubGVuZ3RoKSYmYS5jbGVhckhpc3RvcnkoKSk7Zi5jb2xsYXBzZWQmJihmLmlkPSsrVGYsZi5hdG9taWM9ITApO2lmKGgpe2smJihoLmN1ck9wLnVwZGF0ZU1heExpbmU9ITApO2lmKGYuY29sbGFwc2VkKW1hKGgsYi5saW5lLGQubGluZSsxKTtlbHNlIGlmKGYuY2xhc3NOYW1lfHxmLnN0YXJ0U3R5bGV8fGYuZW5kU3R5bGV8fGYuY3NzfHxmLmF0dHJpYnV0ZXN8fGYudGl0bGUpZm9yKGM9Yi5saW5lO2M8PWQubGluZTtjKyspU2EoaCxjLFwidGV4dFwiKTtmLmF0b21pYyYmSmYoaC5kb2MpO1xuYWEoaCxcIm1hcmtlckFkZGVkXCIsaCxmKX1yZXR1cm4gZn1mdW5jdGlvbiBkaChhLGIsZCxjLGUpe2M9WmEoYyk7Yy5zaGFyZWQ9ITE7dmFyIGY9W0ViKGEsYixkLGMsZSldLGc9ZlswXSxoPWMud2lkZ2V0Tm9kZTtVYShhLGZ1bmN0aW9uKGspe2gmJihjLndpZGdldE5vZGU9aC5jbG9uZU5vZGUoITApKTtmLnB1c2goRWIoayxDKGssYiksQyhrLGQpLGMsZSkpO2Zvcih2YXIgbD0wO2w8ay5saW5rZWQubGVuZ3RoOysrbClpZihrLmxpbmtlZFtsXS5pc1BhcmVudClyZXR1cm47Zz1KKGYpfSk7cmV0dXJuIG5ldyBoYyhmLGcpfWZ1bmN0aW9uIFVmKGEpe3JldHVybiBhLmZpbmRNYXJrcyh0KGEuZmlyc3QsMCksYS5jbGlwUG9zKHQoYS5sYXN0TGluZSgpKSksZnVuY3Rpb24oYil7cmV0dXJuIGIucGFyZW50fSl9ZnVuY3Rpb24gZWgoYSl7Zm9yKHZhciBiPWZ1bmN0aW9uKGMpe2M9YVtjXTt2YXIgZT1bYy5wcmltYXJ5LmRvY107VWEoYy5wcmltYXJ5LmRvYyxmdW5jdGlvbihoKXtyZXR1cm4gZS5wdXNoKGgpfSk7XG5mb3IodmFyIGY9MDtmPGMubWFya2Vycy5sZW5ndGg7ZisrKXt2YXIgZz1jLm1hcmtlcnNbZl07LTE9PWVhKGUsZy5kb2MpJiYoZy5wYXJlbnQ9bnVsbCxjLm1hcmtlcnMuc3BsaWNlKGYtLSwxKSl9fSxkPTA7ZDxhLmxlbmd0aDtkKyspYihkKX1mdW5jdGlvbiBmaChhKXt2YXIgYj10aGlzO1ZmKGIpO2lmKCFaKGIsYSkmJiFMYShiLmRpc3BsYXksYSkpe2xhKGEpO0cmJihXZj0rbmV3IERhdGUpO3ZhciBkPWdiKGIsYSwhMCksYz1hLmRhdGFUcmFuc2Zlci5maWxlcztpZihkJiYhYi5pc1JlYWRPbmx5KCkpaWYoYyYmYy5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGU9Yy5sZW5ndGgsZj1BcnJheShlKSxnPTAsaD1mdW5jdGlvbigpeysrZz09ZSYmYmEoYixmdW5jdGlvbigpe2Q9QyhiLmRvYyxkKTt2YXIgbT17ZnJvbTpkLHRvOmQsdGV4dDpiLmRvYy5zcGxpdExpbmVzKGYuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1ufSkuam9pbihiLmRvYy5saW5lU2VwYXJhdG9yKCkpKSxcbm9yaWdpbjpcInBhc3RlXCJ9O0NiKGIuZG9jLG0pO0dmKGIuZG9jLE9hKEMoYi5kb2MsZCksQyhiLmRvYyxUYShtKSkpKX0pKCl9LGs9ZnVuY3Rpb24obSxuKXtpZihiLm9wdGlvbnMuYWxsb3dEcm9wRmlsZVR5cGVzJiYtMT09ZWEoYi5vcHRpb25zLmFsbG93RHJvcEZpbGVUeXBlcyxtLnR5cGUpKWgoKTtlbHNle3ZhciBwPW5ldyBGaWxlUmVhZGVyO3Aub25lcnJvcj1mdW5jdGlvbigpe3JldHVybiBoKCl9O3Aub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHE9cC5yZXN1bHQ7L1tcXHgwMC1cXHgwOFxceDBlLVxceDFmXXsyfS8udGVzdChxKXx8KGZbbl09cSk7aCgpfTtwLnJlYWRBc1RleHQobSl9fSxsPTA7bDxjLmxlbmd0aDtsKyspayhjW2xdLGwpO2Vsc2UgaWYoYi5zdGF0ZS5kcmFnZ2luZ1RleHQmJi0xPGIuZG9jLnNlbC5jb250YWlucyhkKSliLnN0YXRlLmRyYWdnaW5nVGV4dChhKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGIuZGlzcGxheS5pbnB1dC5mb2N1cygpfSwyMCk7ZWxzZSB0cnl7aWYoaz1cbmEuZGF0YVRyYW5zZmVyLmdldERhdGEoXCJUZXh0XCIpKXtiLnN0YXRlLmRyYWdnaW5nVGV4dCYmIWIuc3RhdGUuZHJhZ2dpbmdUZXh0LmNvcHkmJihsPWIubGlzdFNlbGVjdGlvbnMoKSk7VWMoYi5kb2MsT2EoZCxkKSk7aWYobClmb3IoYz0wO2M8bC5sZW5ndGg7KytjKURiKGIuZG9jLFwiXCIsbFtjXS5hbmNob3IsbFtjXS5oZWFkLFwiZHJhZ1wiKTtiLnJlcGxhY2VTZWxlY3Rpb24oayxcImFyb3VuZFwiLFwicGFzdGVcIik7Yi5kaXNwbGF5LmlucHV0LmZvY3VzKCl9fWNhdGNoKG0pe319fWZ1bmN0aW9uIFZmKGEpe2EuZGlzcGxheS5kcmFnQ3Vyc29yJiYoYS5kaXNwbGF5LmxpbmVTcGFjZS5yZW1vdmVDaGlsZChhLmRpc3BsYXkuZHJhZ0N1cnNvciksYS5kaXNwbGF5LmRyYWdDdXJzb3I9bnVsbCl9ZnVuY3Rpb24gWGYoYSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSl7Zm9yKHZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJDb2RlTWlycm9yXCIpLGQ9W10sYz1cbjA7YzxiLmxlbmd0aDtjKyspe3ZhciBlPWJbY10uQ29kZU1pcnJvcjtlJiZkLnB1c2goZSl9ZC5sZW5ndGgmJmRbMF0ub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Zm9yKHZhciBmPTA7ZjxkLmxlbmd0aDtmKyspYShkW2ZdKX0pfX1mdW5jdGlvbiBnaCgpe3ZhciBhO3ood2luZG93LFwicmVzaXplXCIsZnVuY3Rpb24oKXtudWxsPT1hJiYoYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YT1udWxsO1hmKGhoKX0sMTAwKSl9KTt6KHdpbmRvdyxcImJsdXJcIixmdW5jdGlvbigpe3JldHVybiBYZih3Yil9KX1mdW5jdGlvbiBoaChhKXt2YXIgYj1hLmRpc3BsYXk7Yi5jYWNoZWRDaGFyV2lkdGg9Yi5jYWNoZWRUZXh0SGVpZ2h0PWIuY2FjaGVkUGFkZGluZ0g9bnVsbDtiLnNjcm9sbGJhcnNDbGlwcGVkPSExO2Euc2V0U2l6ZSgpfWZ1bmN0aW9uIGloKGEpe3ZhciBiPWEuc3BsaXQoLy0oPyEkKS8pO2E9YltiLmxlbmd0aC0xXTtmb3IodmFyIGQsYyxlLGYsZz0wO2c8Yi5sZW5ndGgtMTtnKyspe3ZhciBoPWJbZ107XG5pZigvXihjbWR8bWV0YXxtKSQvaS50ZXN0KGgpKWY9ITA7ZWxzZSBpZigvXmEobHQpPyQvaS50ZXN0KGgpKWQ9ITA7ZWxzZSBpZigvXihjfGN0cmx8Y29udHJvbCkkL2kudGVzdChoKSljPSEwO2Vsc2UgaWYoL15zKGhpZnQpPyQvaS50ZXN0KGgpKWU9ITA7ZWxzZSB0aHJvdyBFcnJvcihcIlVucmVjb2duaXplZCBtb2RpZmllciBuYW1lOiBcIitoKTt9ZCYmKGE9XCJBbHQtXCIrYSk7YyYmKGE9XCJDdHJsLVwiK2EpO2YmJihhPVwiQ21kLVwiK2EpO2UmJihhPVwiU2hpZnQtXCIrYSk7cmV0dXJuIGF9ZnVuY3Rpb24gamgoYSl7dmFyIGI9e30sZDtmb3IoZCBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoZCkpe3ZhciBjPWFbZF07aWYoIS9eKG5hbWV8ZmFsbHRocm91Z2h8KGRlfGF0KXRhY2gpJC8udGVzdChkKSl7aWYoXCIuLi5cIiE9Yylmb3IodmFyIGU9d2MoZC5zcGxpdChcIiBcIiksaWgpLGY9MDtmPGUubGVuZ3RoO2YrKyl7aWYoZj09ZS5sZW5ndGgtMSl7dmFyIGc9ZS5qb2luKFwiIFwiKTt2YXIgaD1jfWVsc2UgZz1cbmUuc2xpY2UoMCxmKzEpLmpvaW4oXCIgXCIpLGg9XCIuLi5cIjt2YXIgaz1iW2ddO2lmKCFrKWJbZ109aDtlbHNlIGlmKGshPWgpdGhyb3cgRXJyb3IoXCJJbmNvbnNpc3RlbnQgYmluZGluZ3MgZm9yIFwiK2cpO31kZWxldGUgYVtkXX19Zm9yKHZhciBsIGluIGIpYVtsXT1iW2xdO3JldHVybiBhfWZ1bmN0aW9uIEZiKGEsYixkLGMpe2I9WGMoYik7dmFyIGU9Yi5jYWxsP2IuY2FsbChhLGMpOmJbYV07aWYoITE9PT1lKXJldHVyblwibm90aGluZ1wiO2lmKFwiLi4uXCI9PT1lKXJldHVyblwibXVsdGlcIjtpZihudWxsIT1lJiZkKGUpKXJldHVyblwiaGFuZGxlZFwiO2lmKGIuZmFsbHRocm91Z2gpe2lmKFwiW29iamVjdCBBcnJheV1cIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGIuZmFsbHRocm91Z2gpKXJldHVybiBGYihhLGIuZmFsbHRocm91Z2gsZCxjKTtmb3IoZT0wO2U8Yi5mYWxsdGhyb3VnaC5sZW5ndGg7ZSsrKXt2YXIgZj1GYihhLGIuZmFsbHRocm91Z2hbZV0sZCxjKTtpZihmKXJldHVybiBmfX19XG5mdW5jdGlvbiBZZihhKXthPVwic3RyaW5nXCI9PXR5cGVvZiBhP2E6V2FbYS5rZXlDb2RlXTtyZXR1cm5cIkN0cmxcIj09YXx8XCJBbHRcIj09YXx8XCJTaGlmdFwiPT1hfHxcIk1vZFwiPT1hfWZ1bmN0aW9uIFpmKGEsYixkKXt2YXIgYz1hO2IuYWx0S2V5JiZcIkFsdFwiIT1jJiYoYT1cIkFsdC1cIithKTsoJGY/Yi5tZXRhS2V5OmIuY3RybEtleSkmJlwiQ3RybFwiIT1jJiYoYT1cIkN0cmwtXCIrYSk7KCRmP2IuY3RybEtleTpiLm1ldGFLZXkpJiZcIk1vZFwiIT1jJiYoYT1cIkNtZC1cIithKTshZCYmYi5zaGlmdEtleSYmXCJTaGlmdFwiIT1jJiYoYT1cIlNoaWZ0LVwiK2EpO3JldHVybiBhfWZ1bmN0aW9uIGFnKGEsYil7aWYoQ2EmJjM0PT1hLmtleUNvZGUmJmFbXCJjaGFyXCJdKXJldHVybiExO3ZhciBkPVdhW2Eua2V5Q29kZV07aWYobnVsbD09ZHx8YS5hbHRHcmFwaEtleSlyZXR1cm4hMTszPT1hLmtleUNvZGUmJmEuY29kZSYmKGQ9YS5jb2RlKTtyZXR1cm4gWmYoZCxhLGIpfWZ1bmN0aW9uIFhjKGEpe3JldHVyblwic3RyaW5nXCI9PVxudHlwZW9mIGE/aWNbYV06YX1mdW5jdGlvbiBHYihhLGIpe2Zvcih2YXIgZD1hLmRvYy5zZWwucmFuZ2VzLGM9W10sZT0wO2U8ZC5sZW5ndGg7ZSsrKXtmb3IodmFyIGY9YihkW2VdKTtjLmxlbmd0aCYmMD49QihmLmZyb20sSihjKS50byk7KXt2YXIgZz1jLnBvcCgpO2lmKDA+QihnLmZyb20sZi5mcm9tKSl7Zi5mcm9tPWcuZnJvbTticmVha319Yy5wdXNoKGYpfXJhKGEsZnVuY3Rpb24oKXtmb3IodmFyIGg9Yy5sZW5ndGgtMTswPD1oO2gtLSlEYihhLmRvYyxcIlwiLGNbaF0uZnJvbSxjW2hdLnRvLFwiK2RlbGV0ZVwiKTt4YihhKX0pfWZ1bmN0aW9uIGVlKGEsYixkKXtiPXNlKGEudGV4dCxiK2QsZCk7cmV0dXJuIDA+Ynx8Yj5hLnRleHQubGVuZ3RoP251bGw6Yn1mdW5jdGlvbiBmZShhLGIsZCl7YT1lZShhLGIuY2gsZCk7cmV0dXJuIG51bGw9PWE/bnVsbDpuZXcgdChiLmxpbmUsYSwwPmQ/XCJhZnRlclwiOlwiYmVmb3JlXCIpfWZ1bmN0aW9uIGdlKGEsYixkLGMsZSl7aWYoYSYmKFwicnRsXCI9PVxuYi5kb2MuZGlyZWN0aW9uJiYoZT0tZSksYT1KYShkLGIuZG9jLmRpcmVjdGlvbikpKXthPTA+ZT9KKGEpOmFbMF07dmFyIGY9MD5lPT0oMT09YS5sZXZlbCk/XCJhZnRlclwiOlwiYmVmb3JlXCI7aWYoMDxhLmxldmVsfHxcInJ0bFwiPT1iLmRvYy5kaXJlY3Rpb24pe3ZhciBnPWViKGIsZCk7dmFyIGg9MD5lP2QudGV4dC5sZW5ndGgtMTowO3ZhciBrPUFhKGIsZyxoKS50b3A7aD1KYihmdW5jdGlvbihsKXtyZXR1cm4gQWEoYixnLGwpLnRvcD09a30sMD5lPT0oMT09YS5sZXZlbCk/YS5mcm9tOmEudG8tMSxoKTtcImJlZm9yZVwiPT1mJiYoaD1lZShkLGgsMSkpfWVsc2UgaD0wPmU/YS50bzphLmZyb207cmV0dXJuIG5ldyB0KGMsaCxmKX1yZXR1cm4gbmV3IHQoYywwPmU/ZC50ZXh0Lmxlbmd0aDowLDA+ZT9cImJlZm9yZVwiOlwiYWZ0ZXJcIil9ZnVuY3Rpb24ga2goYSxiLGQsYyl7dmFyIGU9SmEoYixhLmRvYy5kaXJlY3Rpb24pO2lmKCFlKXJldHVybiBmZShiLGQsYyk7ZC5jaD49Yi50ZXh0Lmxlbmd0aD9cbihkLmNoPWIudGV4dC5sZW5ndGgsZC5zdGlja3k9XCJiZWZvcmVcIik6MD49ZC5jaCYmKGQuY2g9MCxkLnN0aWNreT1cImFmdGVyXCIpO3ZhciBmPUtiKGUsZC5jaCxkLnN0aWNreSksZz1lW2ZdO2lmKFwibHRyXCI9PWEuZG9jLmRpcmVjdGlvbiYmMD09Zy5sZXZlbCUyJiYoMDxjP2cudG8+ZC5jaDpnLmZyb208ZC5jaCkpcmV0dXJuIGZlKGIsZCxjKTt2YXIgaD1mdW5jdGlvbihxLHIpe3JldHVybiBlZShiLHEgaW5zdGFuY2VvZiB0P3EuY2g6cSxyKX0sayxsPWZ1bmN0aW9uKHEpe2lmKCFhLm9wdGlvbnMubGluZVdyYXBwaW5nKXJldHVybntiZWdpbjowLGVuZDpiLnRleHQubGVuZ3RofTtrPWt8fGViKGEsYik7cmV0dXJuIGRmKGEsYixrLHEpfSxtPWwoXCJiZWZvcmVcIj09ZC5zdGlja3k/aChkLC0xKTpkLmNoKTtpZihcInJ0bFwiPT1hLmRvYy5kaXJlY3Rpb258fDE9PWcubGV2ZWwpe3ZhciBuPTE9PWcubGV2ZWw9PTA+YyxwPWgoZCxuPzE6LTEpO2lmKG51bGwhPXAmJihuP3A8PWcudG8mJnA8PW0uZW5kOlxucD49Zy5mcm9tJiZwPj1tLmJlZ2luKSlyZXR1cm4gbmV3IHQoZC5saW5lLHAsbj9cImJlZm9yZVwiOlwiYWZ0ZXJcIil9Zz1mdW5jdGlvbihxLHIsdSl7Zm9yKHZhciBBPWZ1bmN0aW9uKEssUSl7cmV0dXJuIFE/bmV3IHQoZC5saW5lLGgoSywxKSxcImJlZm9yZVwiKTpuZXcgdChkLmxpbmUsSyxcImFmdGVyXCIpfTswPD1xJiZxPGUubGVuZ3RoO3ErPXIpe3ZhciBZPWVbcV0seD0wPHI9PSgxIT1ZLmxldmVsKSxQPXg/dS5iZWdpbjpoKHUuZW5kLC0xKTtpZihZLmZyb208PVAmJlA8WS50bylyZXR1cm4gQShQLHgpO1A9eD9ZLmZyb206aChZLnRvLC0xKTtpZih1LmJlZ2luPD1QJiZQPHUuZW5kKXJldHVybiBBKFAseCl9fTtpZihmPWcoZitjLGMsbSkpcmV0dXJuIGY7bT0wPGM/bS5lbmQ6aChtLmJlZ2luLC0xKTtyZXR1cm4gbnVsbD09bXx8MDxjJiZtPT1iLnRleHQubGVuZ3RofHwhKGY9ZygwPGM/MDplLmxlbmd0aC0xLGMsbChtKSkpP251bGw6Zn1mdW5jdGlvbiBiZyhhLGIpe3ZhciBkPXcoYS5kb2MsXG5iKSxjPXphKGQpO2MhPWQmJihiPU4oYykpO3JldHVybiBnZSghMCxhLGMsYiwxKX1mdW5jdGlvbiBjZyhhLGIpe3ZhciBkPWJnKGEsYi5saW5lKSxjPXcoYS5kb2MsZC5saW5lKTthPUphKGMsYS5kb2MuZGlyZWN0aW9uKTtyZXR1cm4gYSYmMCE9YVswXS5sZXZlbD9kOihjPU1hdGgubWF4KGQuY2gsYy50ZXh0LnNlYXJjaCgvXFxTLykpLHQoZC5saW5lLGIubGluZT09ZC5saW5lJiZiLmNoPD1jJiZiLmNoPzA6YyxkLnN0aWNreSkpfWZ1bmN0aW9uIFljKGEsYixkKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYiYmKGI9amNbYl0sIWIpKXJldHVybiExO2EuZGlzcGxheS5pbnB1dC5lbnN1cmVQb2xsZWQoKTt2YXIgYz1hLmRpc3BsYXkuc2hpZnQsZT0hMTt0cnl7YS5pc1JlYWRPbmx5KCkmJihhLnN0YXRlLnN1cHByZXNzRWRpdHM9ITApLGQmJihhLmRpc3BsYXkuc2hpZnQ9ITEpLGU9YihhKSE9WmN9ZmluYWxseXthLmRpc3BsYXkuc2hpZnQ9YyxhLnN0YXRlLnN1cHByZXNzRWRpdHM9ITF9cmV0dXJuIGV9XG5mdW5jdGlvbiBrYyhhLGIsZCxjKXt2YXIgZT1hLnN0YXRlLmtleVNlcTtpZihlKXtpZihZZihiKSlyZXR1cm5cImhhbmRsZWRcIjsvJyQvLnRlc3QoYik/YS5zdGF0ZS5rZXlTZXE9bnVsbDpsaC5zZXQoNTAsZnVuY3Rpb24oKXthLnN0YXRlLmtleVNlcT09ZSYmKGEuc3RhdGUua2V5U2VxPW51bGwsYS5kaXNwbGF5LmlucHV0LnJlc2V0KCkpfSk7aWYoZGcoYSxlK1wiIFwiK2IsZCxjKSlyZXR1cm4hMH1yZXR1cm4gZGcoYSxiLGQsYyl9ZnVuY3Rpb24gZGcoYSxiLGQsYyl7YTp7Zm9yKHZhciBlPTA7ZTxhLnN0YXRlLmtleU1hcHMubGVuZ3RoO2UrKyl7dmFyIGY9RmIoYixhLnN0YXRlLmtleU1hcHNbZV0sYyxhKTtpZihmKXtjPWY7YnJlYWsgYX19Yz1hLm9wdGlvbnMuZXh0cmFLZXlzJiZGYihiLGEub3B0aW9ucy5leHRyYUtleXMsYyxhKXx8RmIoYixhLm9wdGlvbnMua2V5TWFwLGMsYSl9XCJtdWx0aVwiPT1jJiYoYS5zdGF0ZS5rZXlTZXE9Yik7XCJoYW5kbGVkXCI9PWMmJmFhKGEsXCJrZXlIYW5kbGVkXCIsXG5hLGIsZCk7aWYoXCJoYW5kbGVkXCI9PWN8fFwibXVsdGlcIj09YylsYShkKSxRZChhKTtyZXR1cm4hIWN9ZnVuY3Rpb24gZWcoYSxiKXt2YXIgZD1hZyhiLCEwKTtyZXR1cm4gZD9iLnNoaWZ0S2V5JiYhYS5zdGF0ZS5rZXlTZXE/a2MoYSxcIlNoaWZ0LVwiK2QsYixmdW5jdGlvbihjKXtyZXR1cm4gWWMoYSxjLCEwKX0pfHxrYyhhLGQsYixmdW5jdGlvbihjKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYz8vXmdvW0EtWl0vLnRlc3QoYyk6Yy5tb3Rpb24pcmV0dXJuIFljKGEsYyl9KTprYyhhLGQsYixmdW5jdGlvbihjKXtyZXR1cm4gWWMoYSxjKX0pOiExfWZ1bmN0aW9uIG1oKGEsYixkKXtyZXR1cm4ga2MoYSxcIidcIitkK1wiJ1wiLGIsZnVuY3Rpb24oYyl7cmV0dXJuIFljKGEsYywhMCl9KX1mdW5jdGlvbiBmZyhhKXtpZighYS50YXJnZXR8fGEudGFyZ2V0PT10aGlzLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKSlpZih0aGlzLmN1ck9wLmZvY3VzPWthKHFhKHRoaXMpKSwhWih0aGlzLGEpKXtHJiYxMT5cblQmJjI3PT1hLmtleUNvZGUmJihhLnJldHVyblZhbHVlPSExKTt2YXIgYj1hLmtleUNvZGU7dGhpcy5kaXNwbGF5LnNoaWZ0PTE2PT1ifHxhLnNoaWZ0S2V5O3ZhciBkPWVnKHRoaXMsYSk7Q2EmJihoZT1kP2I6bnVsbCwhZCYmODg9PWImJiFuaCYmKHlhP2EubWV0YUtleTphLmN0cmxLZXkpJiZ0aGlzLnJlcGxhY2VTZWxlY3Rpb24oXCJcIixudWxsLFwiY3V0XCIpKTtNYSYmIXlhJiYhZCYmNDY9PWImJmEuc2hpZnRLZXkmJiFhLmN0cmxLZXkmJmRvY3VtZW50LmV4ZWNDb21tYW5kJiZkb2N1bWVudC5leGVjQ29tbWFuZChcImN1dFwiKTsxOCE9Ynx8L1xcYkNvZGVNaXJyb3ItY3Jvc3NoYWlyXFxiLy50ZXN0KHRoaXMuZGlzcGxheS5saW5lRGl2LmNsYXNzTmFtZSl8fG9oKHRoaXMpfX1mdW5jdGlvbiBvaChhKXtmdW5jdGlvbiBiKGMpezE4IT1jLmtleUNvZGUmJmMuYWx0S2V5fHwoamIoZCxcIkNvZGVNaXJyb3ItY3Jvc3NoYWlyXCIpLHRhKGRvY3VtZW50LFwia2V5dXBcIixiKSx0YShkb2N1bWVudCxcIm1vdXNlb3ZlclwiLFxuYikpfXZhciBkPWEuZGlzcGxheS5saW5lRGl2O1lhKGQsXCJDb2RlTWlycm9yLWNyb3NzaGFpclwiKTt6KGRvY3VtZW50LFwia2V5dXBcIixiKTt6KGRvY3VtZW50LFwibW91c2VvdmVyXCIsYil9ZnVuY3Rpb24gZ2coYSl7MTY9PWEua2V5Q29kZSYmKHRoaXMuZG9jLnNlbC5zaGlmdD0hMSk7Wih0aGlzLGEpfWZ1bmN0aW9uIGhnKGEpe2lmKCEoYS50YXJnZXQmJmEudGFyZ2V0IT10aGlzLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKXx8TGEodGhpcy5kaXNwbGF5LGEpfHxaKHRoaXMsYSl8fGEuY3RybEtleSYmIWEuYWx0S2V5fHx5YSYmYS5tZXRhS2V5KSl7dmFyIGI9YS5rZXlDb2RlLGQ9YS5jaGFyQ29kZTtpZihDYSYmYj09aGUpaGU9bnVsbCxsYShhKTtlbHNlIGlmKCFDYXx8YS53aGljaCYmISgxMD5hLndoaWNoKXx8IWVnKHRoaXMsYSkpaWYoYj1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PWQ/YjpkKSxcIlxcYlwiIT1iJiYhbWgodGhpcyxhLGIpKXRoaXMuZGlzcGxheS5pbnB1dC5vbktleVByZXNzKGEpfX1cbmZ1bmN0aW9uIHBoKGEsYil7dmFyIGQ9K25ldyBEYXRlO2lmKGxjJiZsYy5jb21wYXJlKGQsYSxiKSlyZXR1cm4gbWM9bGM9bnVsbCxcInRyaXBsZVwiO2lmKG1jJiZtYy5jb21wYXJlKGQsYSxiKSlyZXR1cm4gbGM9bmV3IGllKGQsYSxiKSxtYz1udWxsLFwiZG91YmxlXCI7bWM9bmV3IGllKGQsYSxiKTtsYz1udWxsO3JldHVyblwic2luZ2xlXCJ9ZnVuY3Rpb24gaWcoYSl7dmFyIGI9dGhpcy5kaXNwbGF5O2lmKCEoWih0aGlzLGEpfHxiLmFjdGl2ZVRvdWNoJiZiLmlucHV0LnN1cHBvcnRzVG91Y2goKSkpaWYoYi5pbnB1dC5lbnN1cmVQb2xsZWQoKSxiLnNoaWZ0PWEuc2hpZnRLZXksTGEoYixhKSlmYXx8KGIuc2Nyb2xsZXIuZHJhZ2dhYmxlPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gYi5zY3JvbGxlci5kcmFnZ2FibGU9ITB9LDEwMCkpO2Vsc2UgaWYoISRjKHRoaXMsYSxcImd1dHRlckNsaWNrXCIsITApKXt2YXIgZD1nYih0aGlzLGEpLGM9dmUoYSksZT1kP3BoKGQsYyk6XCJzaW5nbGVcIjtcbnFhKHRoaXMpLmRlZmF1bHRWaWV3LmZvY3VzKCk7MT09YyYmdGhpcy5zdGF0ZS5zZWxlY3RpbmdUZXh0JiZ0aGlzLnN0YXRlLnNlbGVjdGluZ1RleHQoYSk7aWYoIWR8fCFxaCh0aGlzLGMsZCxlLGEpKWlmKDE9PWMpZD9yaCh0aGlzLGQsZSxhKTooYS50YXJnZXR8fGEuc3JjRWxlbWVudCk9PWIuc2Nyb2xsZXImJmxhKGEpO2Vsc2UgaWYoMj09YylkJiZUYyh0aGlzLmRvYyxkKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGIuaW5wdXQuZm9jdXMoKX0sMjApO2Vsc2UgaWYoMz09YylpZihqZSl0aGlzLmRpc3BsYXkuaW5wdXQub25Db250ZXh0TWVudShhKTtlbHNlIFNkKHRoaXMpfX1mdW5jdGlvbiBxaChhLGIsZCxjLGUpe3ZhciBmPVwiQ2xpY2tcIjtcImRvdWJsZVwiPT1jP2Y9XCJEb3VibGVcIitmOlwidHJpcGxlXCI9PWMmJihmPVwiVHJpcGxlXCIrZik7cmV0dXJuIGtjKGEsWmYoKDE9PWI/XCJMZWZ0XCI6Mj09Yj9cIk1pZGRsZVwiOlwiUmlnaHRcIikrZixlKSxlLGZ1bmN0aW9uKGcpe1wic3RyaW5nXCI9PVxudHlwZW9mIGcmJihnPWpjW2ddKTtpZighZylyZXR1cm4hMTt2YXIgaD0hMTt0cnl7YS5pc1JlYWRPbmx5KCkmJihhLnN0YXRlLnN1cHByZXNzRWRpdHM9ITApLGg9ZyhhLGQpIT1aY31maW5hbGx5e2Euc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gaH0pfWZ1bmN0aW9uIHJoKGEsYixkLGMpe0c/c2V0VGltZW91dChnZChoZixhKSwwKTphLmN1ck9wLmZvY3VzPWthKHFhKGEpKTt2YXIgZT1hLmdldE9wdGlvbihcImNvbmZpZ3VyZU1vdXNlXCIpO2U9ZT9lKGEsZCxjKTp7fTtudWxsPT1lLnVuaXQmJihlLnVuaXQ9KHNoP2Muc2hpZnRLZXkmJmMubWV0YUtleTpjLmFsdEtleSk/XCJyZWN0YW5nbGVcIjpcInNpbmdsZVwiPT1kP1wiY2hhclwiOlwiZG91YmxlXCI9PWQ/XCJ3b3JkXCI6XCJsaW5lXCIpO2lmKG51bGw9PWUuZXh0ZW5kfHxhLmRvYy5leHRlbmQpZS5leHRlbmQ9YS5kb2MuZXh0ZW5kfHxjLnNoaWZ0S2V5O251bGw9PWUuYWRkTmV3JiYoZS5hZGROZXc9eWE/Yy5tZXRhS2V5OmMuY3RybEtleSk7XG5udWxsPT1lLm1vdmVPbkRyYWcmJihlLm1vdmVPbkRyYWc9ISh5YT9jLmFsdEtleTpjLmN0cmxLZXkpKTt2YXIgZj1hLmRvYy5zZWwsZzthLm9wdGlvbnMuZHJhZ0Ryb3AmJnRoJiYhYS5pc1JlYWRPbmx5KCkmJlwic2luZ2xlXCI9PWQmJi0xPChnPWYuY29udGFpbnMoYikpJiYoMD5CKChnPWYucmFuZ2VzW2ddKS5mcm9tKCksYil8fDA8Yi54UmVsKSYmKDA8QihnLnRvKCksYil8fDA+Yi54UmVsKT91aChhLGMsYixlKTp2aChhLGMsYixlKX1mdW5jdGlvbiB1aChhLGIsZCxjKXt2YXIgZT1hLmRpc3BsYXksZj0hMSxnPWJhKGEsZnVuY3Rpb24obCl7ZmEmJihlLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSk7YS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ITE7YS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCYmKGEuaGFzRm9jdXMoKT9hLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50PSExOlNkKGEpKTt0YShlLndyYXBwZXIub3duZXJEb2N1bWVudCxcIm1vdXNldXBcIixnKTt0YShlLndyYXBwZXIub3duZXJEb2N1bWVudCxcblwibW91c2Vtb3ZlXCIsaCk7dGEoZS5zY3JvbGxlcixcImRyYWdzdGFydFwiLGspO3RhKGUuc2Nyb2xsZXIsXCJkcm9wXCIsZyk7Znx8KGxhKGwpLGMuYWRkTmV3fHxUYyhhLmRvYyxkLG51bGwsbnVsbCxjLmV4dGVuZCksZmEmJiFhZHx8RyYmOT09VD9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS53cmFwcGVyLm93bmVyRG9jdW1lbnQuYm9keS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pO2UuaW5wdXQuZm9jdXMoKX0sMjApOmUuaW5wdXQuZm9jdXMoKSl9KSxoPWZ1bmN0aW9uKGwpe2Y9Znx8MTA8PU1hdGguYWJzKGIuY2xpZW50WC1sLmNsaWVudFgpK01hdGguYWJzKGIuY2xpZW50WS1sLmNsaWVudFkpfSxrPWZ1bmN0aW9uKCl7cmV0dXJuIGY9ITB9O2ZhJiYoZS5zY3JvbGxlci5kcmFnZ2FibGU9ITApO2Euc3RhdGUuZHJhZ2dpbmdUZXh0PWc7Zy5jb3B5PSFjLm1vdmVPbkRyYWc7eihlLndyYXBwZXIub3duZXJEb2N1bWVudCxcIm1vdXNldXBcIixnKTt6KGUud3JhcHBlci5vd25lckRvY3VtZW50LFxuXCJtb3VzZW1vdmVcIixoKTt6KGUuc2Nyb2xsZXIsXCJkcmFnc3RhcnRcIixrKTt6KGUuc2Nyb2xsZXIsXCJkcm9wXCIsZyk7YS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudD0hMDtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuaW5wdXQuZm9jdXMoKX0sMjApO2Uuc2Nyb2xsZXIuZHJhZ0Ryb3AmJmUuc2Nyb2xsZXIuZHJhZ0Ryb3AoKX1mdW5jdGlvbiBqZyhhLGIsZCl7aWYoXCJjaGFyXCI9PWQpcmV0dXJuIG5ldyBJKGIsYik7aWYoXCJ3b3JkXCI9PWQpcmV0dXJuIGEuZmluZFdvcmRBdChiKTtpZihcImxpbmVcIj09ZClyZXR1cm4gbmV3IEkodChiLmxpbmUsMCksQyhhLmRvYyx0KGIubGluZSsxLDApKSk7YT1kKGEsYik7cmV0dXJuIG5ldyBJKGEuZnJvbSxhLnRvKX1mdW5jdGlvbiB2aChhLGIsZCxjKXtmdW5jdGlvbiBlKHgpe2lmKDAhPUIocSx4KSlpZihxPXgsXCJyZWN0YW5nbGVcIj09Yy51bml0KXt2YXIgUD1bXSxLPWEub3B0aW9ucy50YWJTaXplLFE9d2EodyhrLGQubGluZSkudGV4dCxkLmNoLFxuSyksUz13YSh3KGsseC5saW5lKS50ZXh0LHguY2gsSyksRj1NYXRoLm1pbihRLFMpO1E9TWF0aC5tYXgoUSxTKTtTPU1hdGgubWluKGQubGluZSx4LmxpbmUpO2Zvcih2YXIgUj1NYXRoLm1pbihhLmxhc3RMaW5lKCksTWF0aC5tYXgoZC5saW5lLHgubGluZSkpO1M8PVI7UysrKXt2YXIgSD13KGssUykudGV4dCxMPWhkKEgsRixLKTtGPT1RP1AucHVzaChuZXcgSSh0KFMsTCksdChTLEwpKSk6SC5sZW5ndGg+TCYmUC5wdXNoKG5ldyBJKHQoUyxMKSx0KFMsaGQoSCxRLEspKSkpfVAubGVuZ3RofHxQLnB1c2gobmV3IEkoZCxkKSk7ZGEoayxEYShhLGwucmFuZ2VzLnNsaWNlKDAsbikuY29uY2F0KFApLG4pLHtvcmlnaW46XCIqbW91c2VcIixzY3JvbGw6ITF9KTthLnNjcm9sbEludG9WaWV3KHgpfWVsc2UgUD1wLEY9amcoYSx4LGMudW5pdCkseD1QLmFuY2hvciwwPEIoRi5hbmNob3IseCk/KEs9Ri5oZWFkLHg9QmMoUC5mcm9tKCksRi5hbmNob3IpKTooSz1GLmFuY2hvcix4PUFjKFAudG8oKSxcbkYuaGVhZCkpLFA9bC5yYW5nZXMuc2xpY2UoMCksUFtuXT13aChhLG5ldyBJKEMoayx4KSxLKSksZGEoayxEYShhLFAsbiksa2UpfWZ1bmN0aW9uIGYoeCl7dmFyIFA9Kyt1LEs9Z2IoYSx4LCEwLFwicmVjdGFuZ2xlXCI9PWMudW5pdCk7aWYoSylpZigwIT1CKEsscSkpe2EuY3VyT3AuZm9jdXM9a2EocWEoYSkpO2UoSyk7dmFyIFE9TWMoaCxrKTsoSy5saW5lPj1RLnRvfHxLLmxpbmU8US5mcm9tKSYmc2V0VGltZW91dChiYShhLGZ1bmN0aW9uKCl7dT09UCYmZih4KX0pLDE1MCl9ZWxzZXt2YXIgUz14LmNsaWVudFk8ci50b3A/LTIwOnguY2xpZW50WT5yLmJvdHRvbT8yMDowO1MmJnNldFRpbWVvdXQoYmEoYSxmdW5jdGlvbigpe3U9PVAmJihoLnNjcm9sbGVyLnNjcm9sbFRvcCs9UyxmKHgpKX0pLDUwKX19ZnVuY3Rpb24gZyh4KXthLnN0YXRlLnNlbGVjdGluZ1RleHQ9ITE7dT1JbmZpbml0eTt4JiYobGEoeCksaC5pbnB1dC5mb2N1cygpKTt0YShoLndyYXBwZXIub3duZXJEb2N1bWVudCxcblwibW91c2Vtb3ZlXCIsQSk7dGEoaC53cmFwcGVyLm93bmVyRG9jdW1lbnQsXCJtb3VzZXVwXCIsWSk7ay5oaXN0b3J5Lmxhc3RTZWxPcmlnaW49bnVsbH1HJiZTZChhKTt2YXIgaD1hLmRpc3BsYXksaz1hLmRvYztsYShiKTt2YXIgbD1rLnNlbCxtPWwucmFuZ2VzO2lmKGMuYWRkTmV3JiYhYy5leHRlbmQpe3ZhciBuPWsuc2VsLmNvbnRhaW5zKGQpO3ZhciBwPS0xPG4/bVtuXTpuZXcgSShkLGQpfWVsc2UgcD1rLnNlbC5wcmltYXJ5KCksbj1rLnNlbC5wcmltSW5kZXg7XCJyZWN0YW5nbGVcIj09Yy51bml0PyhjLmFkZE5ld3x8KHA9bmV3IEkoZCxkKSksZD1nYihhLGIsITAsITApLG49LTEpOihiPWpnKGEsZCxjLnVuaXQpLHA9Yy5leHRlbmQ/Y2UocCxiLmFuY2hvcixiLmhlYWQsYy5leHRlbmQpOmIpO2MuYWRkTmV3Py0xPT1uPyhuPW0ubGVuZ3RoLGRhKGssRGEoYSxtLmNvbmNhdChbcF0pLG4pLHtzY3JvbGw6ITEsb3JpZ2luOlwiKm1vdXNlXCJ9KSk6MTxtLmxlbmd0aCYmbVtuXS5lbXB0eSgpJiZcblwiY2hhclwiPT1jLnVuaXQmJiFjLmV4dGVuZD8oZGEoayxEYShhLG0uc2xpY2UoMCxuKS5jb25jYXQobS5zbGljZShuKzEpKSwwKSx7c2Nyb2xsOiExLG9yaWdpbjpcIiptb3VzZVwifSksbD1rLnNlbCk6ZGUoayxuLHAsa2UpOihuPTAsZGEoayxuZXcgdmEoW3BdLDApLGtlKSxsPWsuc2VsKTt2YXIgcT1kLHI9aC53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9MCxBPWJhKGEsZnVuY3Rpb24oeCl7MCE9PXguYnV0dG9ucyYmdmUoeCk/Zih4KTpnKHgpfSksWT1iYShhLGcpO2Euc3RhdGUuc2VsZWN0aW5nVGV4dD1ZO3ooaC53cmFwcGVyLm93bmVyRG9jdW1lbnQsXCJtb3VzZW1vdmVcIixBKTt6KGgud3JhcHBlci5vd25lckRvY3VtZW50LFwibW91c2V1cFwiLFkpfWZ1bmN0aW9uIHdoKGEsYil7dmFyIGQ9Yi5hbmNob3IsYz1iLmhlYWQsZT13KGEuZG9jLGQubGluZSk7aWYoMD09QihkLGMpJiZkLnN0aWNreT09Yy5zdGlja3kpcmV0dXJuIGI7ZT1KYShlKTtpZighZSlyZXR1cm4gYjt2YXIgZj1cbktiKGUsZC5jaCxkLnN0aWNreSksZz1lW2ZdO2lmKGcuZnJvbSE9ZC5jaCYmZy50byE9ZC5jaClyZXR1cm4gYjt2YXIgaD1mKyhnLmZyb209PWQuY2g9PSgxIT1nLmxldmVsKT8wOjEpO2lmKDA9PWh8fGg9PWUubGVuZ3RoKXJldHVybiBiO2MubGluZSE9ZC5saW5lP2E9MDwoYy5saW5lLWQubGluZSkqKFwibHRyXCI9PWEuZG9jLmRpcmVjdGlvbj8xOi0xKTooYT1LYihlLGMuY2gsYy5zdGlja3kpLGY9YS1mfHwoYy5jaC1kLmNoKSooMT09Zy5sZXZlbD8tMToxKSxhPWE9PWgtMXx8YT09aD8wPmY6MDxmKTtlPWVbaCsoYT8tMTowKV07ZT0oaD1hPT0oMT09ZS5sZXZlbCkpP2UuZnJvbTplLnRvO2g9aD9cImFmdGVyXCI6XCJiZWZvcmVcIjtyZXR1cm4gZC5jaD09ZSYmZC5zdGlja3k9PWg/YjpuZXcgSShuZXcgdChkLmxpbmUsZSxoKSxjKX1mdW5jdGlvbiAkYyhhLGIsZCxjKXtpZihiLnRvdWNoZXMpe3ZhciBlPWIudG91Y2hlc1swXS5jbGllbnRYO3ZhciBmPWIudG91Y2hlc1swXS5jbGllbnRZfWVsc2UgdHJ5e2U9XG5iLmNsaWVudFgsZj1iLmNsaWVudFl9Y2F0Y2goayl7cmV0dXJuITF9aWYoZT49TWF0aC5mbG9vcihhLmRpc3BsYXkuZ3V0dGVycy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCkpcmV0dXJuITE7YyYmbGEoYik7Yz1hLmRpc3BsYXk7dmFyIGc9Yy5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGY+Zy5ib3R0b218fCF4YShhLGQpKXJldHVybiBsZChiKTtmLT1nLnRvcC1jLnZpZXdPZmZzZXQ7Zm9yKGc9MDtnPGEuZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGg7KytnKXt2YXIgaD1jLmd1dHRlcnMuY2hpbGROb2Rlc1tnXTtpZihoJiZoLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0Pj1lKXJldHVybiBlPWJiKGEuZG9jLGYpLFcoYSxkLGEsZSxhLmRpc3BsYXkuZ3V0dGVyU3BlY3NbZ10uY2xhc3NOYW1lLGIpLGxkKGIpfX1mdW5jdGlvbiBrZyhhLGIpe3ZhciBkOyhkPUxhKGEuZGlzcGxheSxiKSl8fChkPXhhKGEsXCJndXR0ZXJDb250ZXh0TWVudVwiKT8kYyhhLFxuYixcImd1dHRlckNvbnRleHRNZW51XCIsITEpOiExKTtpZighZCYmIVooYSxiLFwiY29udGV4dG1lbnVcIikmJiFqZSlhLmRpc3BsYXkuaW5wdXQub25Db250ZXh0TWVudShiKX1mdW5jdGlvbiBsZyhhKXthLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9YS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xccypjbS1zLVxcUysvZyxcIlwiKSthLm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XFxzKVxccyovZyxcIiBjbS1zLVwiKTtVYihhKX1mdW5jdGlvbiB4aChhLGIsZCl7IWIhPSEoZCYmZCE9SGIpJiYoZD1hLmRpc3BsYXkuZHJhZ0Z1bmN0aW9ucyxiPWI/ejp0YSxiKGEuZGlzcGxheS5zY3JvbGxlcixcImRyYWdzdGFydFwiLGQuc3RhcnQpLGIoYS5kaXNwbGF5LnNjcm9sbGVyLFwiZHJhZ2VudGVyXCIsZC5lbnRlciksYihhLmRpc3BsYXkuc2Nyb2xsZXIsXCJkcmFnb3ZlclwiLGQub3ZlciksYihhLmRpc3BsYXkuc2Nyb2xsZXIsXCJkcmFnbGVhdmVcIixkLmxlYXZlKSxiKGEuZGlzcGxheS5zY3JvbGxlcixcblwiZHJvcFwiLGQuZHJvcCkpfWZ1bmN0aW9uIHloKGEpe2Eub3B0aW9ucy5saW5lV3JhcHBpbmc/KFlhKGEuZGlzcGxheS53cmFwcGVyLFwiQ29kZU1pcnJvci13cmFwXCIpLGEuZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aD1cIlwiLGEuZGlzcGxheS5zaXplcldpZHRoPW51bGwpOihqYihhLmRpc3BsYXkud3JhcHBlcixcIkNvZGVNaXJyb3Itd3JhcFwiKSx6ZChhKSk7TmQoYSk7bWEoYSk7VWIoYSk7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB5YihhKX0sMTAwKX1mdW5jdGlvbiBVKGEsYil7dmFyIGQ9dGhpcztpZighKHRoaXMgaW5zdGFuY2VvZiBVKSlyZXR1cm4gbmV3IFUoYSxiKTt0aGlzLm9wdGlvbnM9Yj1iP1phKGIpOnt9O1phKG1nLGIsITEpO3ZhciBjPWIudmFsdWU7XCJzdHJpbmdcIj09dHlwZW9mIGM/Yz1uZXcgb2EoYyxiLm1vZGUsbnVsbCxiLmxpbmVTZXBhcmF0b3IsYi5kaXJlY3Rpb24pOmIubW9kZSYmKGMubW9kZU9wdGlvbj1iLm1vZGUpO3RoaXMuZG9jPWM7dmFyIGU9XG5uZXcgVS5pbnB1dFN0eWxlc1tiLmlucHV0U3R5bGVdKHRoaXMpO2E9dGhpcy5kaXNwbGF5PW5ldyBZZyhhLGMsZSxiKTthLndyYXBwZXIuQ29kZU1pcnJvcj10aGlzO2xnKHRoaXMpO2IubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz1cIiBDb2RlTWlycm9yLXdyYXBcIik7b2YodGhpcyk7dGhpcy5zdGF0ZT17a2V5TWFwczpbXSxvdmVybGF5czpbXSxtb2RlR2VuOjAsb3ZlcndyaXRlOiExLGRlbGF5aW5nQmx1ckV2ZW50OiExLGZvY3VzZWQ6ITEsc3VwcHJlc3NFZGl0czohMSxwYXN0ZUluY29taW5nOi0xLGN1dEluY29taW5nOi0xLHNlbGVjdGluZ1RleHQ6ITEsZHJhZ2dpbmdUZXh0OiExLGhpZ2hsaWdodDpuZXcgWGEsa2V5U2VxOm51bGwsc3BlY2lhbENoYXJzOm51bGx9O2IuYXV0b2ZvY3VzJiYhYWMmJmEuaW5wdXQuZm9jdXMoKTtHJiYxMT5UJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGlzcGxheS5pbnB1dC5yZXNldCghMCl9LFxuMjApO3poKHRoaXMpO25nfHwoZ2goKSxuZz0hMCk7bGIodGhpcyk7dGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMDt6Zih0aGlzLGMpO2IuYXV0b2ZvY3VzJiYhYWN8fHRoaXMuaGFzRm9jdXMoKT9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5oYXNGb2N1cygpJiYhZC5zdGF0ZS5mb2N1c2VkJiZSZChkKX0sMjApOndiKHRoaXMpO2Zvcih2YXIgZiBpbiBiZClpZihiZC5oYXNPd25Qcm9wZXJ0eShmKSliZFtmXSh0aGlzLGJbZl0sSGIpO3JmKHRoaXMpO2IuZmluaXNoSW5pdCYmYi5maW5pc2hJbml0KHRoaXMpO2ZvcihjPTA7YzxsZS5sZW5ndGg7KytjKWxlW2NdKHRoaXMpO21iKHRoaXMpO2ZhJiZiLmxpbmVXcmFwcGluZyYmXCJvcHRpbWl6ZWxlZ2liaWxpdHlcIj09Z2V0Q29tcHV0ZWRTdHlsZShhLmxpbmVEaXYpLnRleHRSZW5kZXJpbmcmJihhLmxpbmVEaXYuc3R5bGUudGV4dFJlbmRlcmluZz1cImF1dG9cIil9ZnVuY3Rpb24gemgoYSl7ZnVuY3Rpb24gYigpe2MuYWN0aXZlVG91Y2gmJihlPVxuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBjLmFjdGl2ZVRvdWNoPW51bGx9LDFFMyksZj1jLmFjdGl2ZVRvdWNoLGYuZW5kPStuZXcgRGF0ZSl9ZnVuY3Rpb24gZChoLGspe2lmKG51bGw9PWsubGVmdClyZXR1cm4hMDt2YXIgbD1rLmxlZnQtaC5sZWZ0O2g9ay50b3AtaC50b3A7cmV0dXJuIDQwMDxsKmwraCpofXZhciBjPWEuZGlzcGxheTt6KGMuc2Nyb2xsZXIsXCJtb3VzZWRvd25cIixiYShhLGlnKSk7RyYmMTE+VD96KGMuc2Nyb2xsZXIsXCJkYmxjbGlja1wiLGJhKGEsZnVuY3Rpb24oaCl7aWYoIVooYSxoKSl7dmFyIGs9Z2IoYSxoKTsha3x8JGMoYSxoLFwiZ3V0dGVyQ2xpY2tcIiwhMCl8fExhKGEuZGlzcGxheSxoKXx8KGxhKGgpLGg9YS5maW5kV29yZEF0KGspLFRjKGEuZG9jLGguYW5jaG9yLGguaGVhZCkpfX0pKTp6KGMuc2Nyb2xsZXIsXCJkYmxjbGlja1wiLGZ1bmN0aW9uKGgpe3JldHVybiBaKGEsaCl8fGxhKGgpfSk7eihjLnNjcm9sbGVyLFwiY29udGV4dG1lbnVcIixmdW5jdGlvbihoKXtyZXR1cm4ga2coYSxcbmgpfSk7eihjLmlucHV0LmdldEZpZWxkKCksXCJjb250ZXh0bWVudVwiLGZ1bmN0aW9uKGgpe2Muc2Nyb2xsZXIuY29udGFpbnMoaC50YXJnZXQpfHxrZyhhLGgpfSk7dmFyIGUsZj17ZW5kOjB9O3ooYy5zY3JvbGxlcixcInRvdWNoc3RhcnRcIixmdW5jdGlvbihoKXt2YXIgaztpZihrPSFaKGEsaCkpMSE9aC50b3VjaGVzLmxlbmd0aD9rPSExOihrPWgudG91Y2hlc1swXSxrPTE+PWsucmFkaXVzWCYmMT49ay5yYWRpdXNZKSxrPSFrO2smJiEkYyhhLGgsXCJndXR0ZXJDbGlja1wiLCEwKSYmKGMuaW5wdXQuZW5zdXJlUG9sbGVkKCksY2xlYXJUaW1lb3V0KGUpLGs9K25ldyBEYXRlLGMuYWN0aXZlVG91Y2g9e3N0YXJ0OmssbW92ZWQ6ITEscHJldjozMDA+PWstZi5lbmQ/ZjpudWxsfSwxPT1oLnRvdWNoZXMubGVuZ3RoJiYoYy5hY3RpdmVUb3VjaC5sZWZ0PWgudG91Y2hlc1swXS5wYWdlWCxjLmFjdGl2ZVRvdWNoLnRvcD1oLnRvdWNoZXNbMF0ucGFnZVkpKX0pO3ooYy5zY3JvbGxlcixcInRvdWNobW92ZVwiLFxuZnVuY3Rpb24oKXtjLmFjdGl2ZVRvdWNoJiYoYy5hY3RpdmVUb3VjaC5tb3ZlZD0hMCl9KTt6KGMuc2Nyb2xsZXIsXCJ0b3VjaGVuZFwiLGZ1bmN0aW9uKGgpe3ZhciBrPWMuYWN0aXZlVG91Y2g7aWYoayYmIUxhKGMsaCkmJm51bGwhPWsubGVmdCYmIWsubW92ZWQmJjMwMD5uZXcgRGF0ZS1rLnN0YXJ0KXt2YXIgbD1hLmNvb3Jkc0NoYXIoYy5hY3RpdmVUb3VjaCxcInBhZ2VcIik7az0hay5wcmV2fHxkKGssay5wcmV2KT9uZXcgSShsLGwpOiFrLnByZXYucHJldnx8ZChrLGsucHJldi5wcmV2KT9hLmZpbmRXb3JkQXQobCk6bmV3IEkodChsLmxpbmUsMCksQyhhLmRvYyx0KGwubGluZSsxLDApKSk7YS5zZXRTZWxlY3Rpb24oay5hbmNob3Isay5oZWFkKTthLmZvY3VzKCk7bGEoaCl9YigpfSk7eihjLnNjcm9sbGVyLFwidG91Y2hjYW5jZWxcIixiKTt6KGMuc2Nyb2xsZXIsXCJzY3JvbGxcIixmdW5jdGlvbigpe2Muc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiYoWGIoYSxjLnNjcm9sbGVyLnNjcm9sbFRvcCksXG5rYihhLGMuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksVyhhLFwic2Nyb2xsXCIsYSkpfSk7eihjLnNjcm9sbGVyLFwibW91c2V3aGVlbFwiLGZ1bmN0aW9uKGgpe3JldHVybiB2ZihhLGgpfSk7eihjLnNjcm9sbGVyLFwiRE9NTW91c2VTY3JvbGxcIixmdW5jdGlvbihoKXtyZXR1cm4gdmYoYSxoKX0pO3ooYy53cmFwcGVyLFwic2Nyb2xsXCIsZnVuY3Rpb24oKXtyZXR1cm4gYy53cmFwcGVyLnNjcm9sbFRvcD1jLndyYXBwZXIuc2Nyb2xsTGVmdD0wfSk7Yy5kcmFnRnVuY3Rpb25zPXtlbnRlcjpmdW5jdGlvbihoKXtaKGEsaCl8fE1iKGgpfSxvdmVyOmZ1bmN0aW9uKGgpe2lmKCFaKGEsaCkpe3ZhciBrPWdiKGEsaCk7aWYoayl7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO09kKGEsayxsKTthLmRpc3BsYXkuZHJhZ0N1cnNvcnx8KGEuZGlzcGxheS5kcmFnQ3Vyc29yPXYoXCJkaXZcIixudWxsLFwiQ29kZU1pcnJvci1jdXJzb3JzIENvZGVNaXJyb3ItZHJhZ2N1cnNvcnNcIiksYS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoYS5kaXNwbGF5LmRyYWdDdXJzb3IsXG5hLmRpc3BsYXkuY3Vyc29yRGl2KSk7RChhLmRpc3BsYXkuZHJhZ0N1cnNvcixsKX1NYihoKX19LHN0YXJ0OmZ1bmN0aW9uKGgpe2lmKEcmJighYS5zdGF0ZS5kcmFnZ2luZ1RleHR8fDEwMD4rbmV3IERhdGUtV2YpKU1iKGgpO2Vsc2UgaWYoIVooYSxoKSYmIUxhKGEuZGlzcGxheSxoKSYmKGguZGF0YVRyYW5zZmVyLnNldERhdGEoXCJUZXh0XCIsYS5nZXRTZWxlY3Rpb24oKSksaC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZD1cImNvcHlNb3ZlXCIsaC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhYWQpKXt2YXIgaz12KFwiaW1nXCIsbnVsbCxudWxsLFwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7XCIpO2suc3JjPVwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBQUFBQ0g1QkFFS0FBRUFMQUFBQUFBQkFBRUFBQUlDVEFFQU93PT1cIjtDYSYmKGsud2lkdGg9ay5oZWlnaHQ9MSxhLmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChrKSxrLl90b3A9ay5vZmZzZXRUb3ApO1xuaC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGssMCwwKTtDYSYmay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGspfX0sZHJvcDpiYShhLGZoKSxsZWF2ZTpmdW5jdGlvbihoKXtaKGEsaCl8fFZmKGEpfX07dmFyIGc9Yy5pbnB1dC5nZXRGaWVsZCgpO3ooZyxcImtleXVwXCIsZnVuY3Rpb24oaCl7cmV0dXJuIGdnLmNhbGwoYSxoKX0pO3ooZyxcImtleWRvd25cIixiYShhLGZnKSk7eihnLFwia2V5cHJlc3NcIixiYShhLGhnKSk7eihnLFwiZm9jdXNcIixmdW5jdGlvbihoKXtyZXR1cm4gUmQoYSxoKX0pO3ooZyxcImJsdXJcIixmdW5jdGlvbihoKXtyZXR1cm4gd2IoYSxoKX0pfWZ1bmN0aW9uIG5jKGEsYixkLGMpe3ZhciBlPWEuZG9jLGY7bnVsbD09ZCYmKGQ9XCJhZGRcIik7XCJzbWFydFwiPT1kJiYoZS5tb2RlLmluZGVudD9mPU9iKGEsYikuc3RhdGU6ZD1cInByZXZcIik7dmFyIGc9YS5vcHRpb25zLnRhYlNpemUsaD13KGUsYiksaz13YShoLnRleHQsbnVsbCxnKTtoLnN0YXRlQWZ0ZXImJihoLnN0YXRlQWZ0ZXI9XG5udWxsKTt2YXIgbD1oLnRleHQubWF0Y2goL15cXHMqLylbMF07aWYoIWMmJiEvXFxTLy50ZXN0KGgudGV4dCkpe3ZhciBtPTA7ZD1cIm5vdFwifWVsc2UgaWYoXCJzbWFydFwiPT1kJiYobT1lLm1vZGUuaW5kZW50KGYsaC50ZXh0LnNsaWNlKGwubGVuZ3RoKSxoLnRleHQpLG09PVpjfHwxNTA8bSkpe2lmKCFjKXJldHVybjtkPVwicHJldlwifVwicHJldlwiPT1kP209Yj5lLmZpcnN0P3dhKHcoZSxiLTEpLnRleHQsbnVsbCxnKTowOlwiYWRkXCI9PWQ/bT1rK2Eub3B0aW9ucy5pbmRlbnRVbml0Olwic3VidHJhY3RcIj09ZD9tPWstYS5vcHRpb25zLmluZGVudFVuaXQ6XCJudW1iZXJcIj09dHlwZW9mIGQmJihtPWsrZCk7bT1NYXRoLm1heCgwLG0pO2Q9XCJcIjtjPTA7aWYoYS5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcihhPU1hdGguZmxvb3IobS9nKTthOy0tYSljKz1nLGQrPVwiXFx0XCI7YzxtJiYoZCs9aWQobS1jKSk7aWYoZCE9bClyZXR1cm4gRGIoZSxkLHQoYiwwKSx0KGIsbC5sZW5ndGgpLFwiK2lucHV0XCIpLFxuaC5zdGF0ZUFmdGVyPW51bGwsITA7Zm9yKGc9MDtnPGUuc2VsLnJhbmdlcy5sZW5ndGg7ZysrKWlmKGg9ZS5zZWwucmFuZ2VzW2ddLGguaGVhZC5saW5lPT1iJiZoLmhlYWQuY2g8bC5sZW5ndGgpe2I9dChiLGwubGVuZ3RoKTtkZShlLGcsbmV3IEkoYixiKSk7YnJlYWt9fWZ1bmN0aW9uIG1lKGEsYixkLGMsZSl7dmFyIGY9YS5kb2M7YS5kaXNwbGF5LnNoaWZ0PSExO2N8fChjPWYuc2VsKTt2YXIgZz0rbmV3IERhdGUtMjAwLGg9XCJwYXN0ZVwiPT1lfHxhLnN0YXRlLnBhc3RlSW5jb21pbmc+ZyxrPW5lKGIpLGw9bnVsbDtpZihoJiYxPGMucmFuZ2VzLmxlbmd0aClpZihzYSYmc2EudGV4dC5qb2luKFwiXFxuXCIpPT1iKXtpZigwPT1jLnJhbmdlcy5sZW5ndGglc2EudGV4dC5sZW5ndGgpe2w9W107Zm9yKHZhciBtPTA7bTxzYS50ZXh0Lmxlbmd0aDttKyspbC5wdXNoKGYuc3BsaXRMaW5lcyhzYS50ZXh0W21dKSl9fWVsc2Ugay5sZW5ndGg9PWMucmFuZ2VzLmxlbmd0aCYmYS5vcHRpb25zLnBhc3RlTGluZXNQZXJTZWxlY3Rpb24mJlxuKGw9d2MoayxmdW5jdGlvbih1KXtyZXR1cm5bdV19KSk7bT1hLmN1ck9wLnVwZGF0ZUlucHV0O2Zvcih2YXIgbj1jLnJhbmdlcy5sZW5ndGgtMTswPD1uO24tLSl7dmFyIHA9Yy5yYW5nZXNbbl0scT1wLmZyb20oKSxyPXAudG8oKTtwLmVtcHR5KCkmJihkJiYwPGQ/cT10KHEubGluZSxxLmNoLWQpOmEuc3RhdGUub3ZlcndyaXRlJiYhaD9yPXQoci5saW5lLE1hdGgubWluKHcoZixyLmxpbmUpLnRleHQubGVuZ3RoLHIuY2grSihrKS5sZW5ndGgpKTpoJiZzYSYmc2EubGluZVdpc2UmJnNhLnRleHQuam9pbihcIlxcblwiKT09ay5qb2luKFwiXFxuXCIpJiYocT1yPXQocS5saW5lLDApKSk7cD17ZnJvbTpxLHRvOnIsdGV4dDpsP2xbbiVsLmxlbmd0aF06ayxvcmlnaW46ZXx8KGg/XCJwYXN0ZVwiOmEuc3RhdGUuY3V0SW5jb21pbmc+Zz9cImN1dFwiOlwiK2lucHV0XCIpfTtDYihhLmRvYyxwKTthYShhLFwiaW5wdXRSZWFkXCIsYSxwKX1iJiYhaCYmb2coYSxiKTt4YihhKTsyPmEuY3VyT3AudXBkYXRlSW5wdXQmJlxuKGEuY3VyT3AudXBkYXRlSW5wdXQ9bSk7YS5jdXJPcC50eXBpbmc9ITA7YS5zdGF0ZS5wYXN0ZUluY29taW5nPWEuc3RhdGUuY3V0SW5jb21pbmc9LTF9ZnVuY3Rpb24gcGcoYSxiKXt2YXIgZD1hLmNsaXBib2FyZERhdGEmJmEuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwiVGV4dFwiKTtpZihkKXJldHVybiBhLnByZXZlbnREZWZhdWx0KCksYi5pc1JlYWRPbmx5KCl8fGIub3B0aW9ucy5kaXNhYmxlSW5wdXR8fCFiLmhhc0ZvY3VzKCl8fHJhKGIsZnVuY3Rpb24oKXtyZXR1cm4gbWUoYixkLDAsbnVsbCxcInBhc3RlXCIpfSksITB9ZnVuY3Rpb24gb2coYSxiKXtpZihhLm9wdGlvbnMuZWxlY3RyaWNDaGFycyYmYS5vcHRpb25zLnNtYXJ0SW5kZW50KWZvcih2YXIgZD1hLmRvYy5zZWwsYz1kLnJhbmdlcy5sZW5ndGgtMTswPD1jO2MtLSl7dmFyIGU9ZC5yYW5nZXNbY107aWYoISgxMDA8ZS5oZWFkLmNofHxjJiZkLnJhbmdlc1tjLTFdLmhlYWQubGluZT09ZS5oZWFkLmxpbmUpKXt2YXIgZj1hLmdldE1vZGVBdChlLmhlYWQpLFxuZz0hMTtpZihmLmVsZWN0cmljQ2hhcnMpZm9yKHZhciBoPTA7aDxmLmVsZWN0cmljQ2hhcnMubGVuZ3RoO2grKyl7aWYoLTE8Yi5pbmRleE9mKGYuZWxlY3RyaWNDaGFycy5jaGFyQXQoaCkpKXtnPW5jKGEsZS5oZWFkLmxpbmUsXCJzbWFydFwiKTticmVha319ZWxzZSBmLmVsZWN0cmljSW5wdXQmJmYuZWxlY3RyaWNJbnB1dC50ZXN0KHcoYS5kb2MsZS5oZWFkLmxpbmUpLnRleHQuc2xpY2UoMCxlLmhlYWQuY2gpKSYmKGc9bmMoYSxlLmhlYWQubGluZSxcInNtYXJ0XCIpKTtnJiZhYShhLFwiZWxlY3RyaWNJbnB1dFwiLGEsZS5oZWFkLmxpbmUpfX19ZnVuY3Rpb24gcWcoYSl7Zm9yKHZhciBiPVtdLGQ9W10sYz0wO2M8YS5kb2Muc2VsLnJhbmdlcy5sZW5ndGg7YysrKXt2YXIgZT1hLmRvYy5zZWwucmFuZ2VzW2NdLmhlYWQubGluZTtlPXthbmNob3I6dChlLDApLGhlYWQ6dChlKzEsMCl9O2QucHVzaChlKTtiLnB1c2goYS5nZXRSYW5nZShlLmFuY2hvcixlLmhlYWQpKX1yZXR1cm57dGV4dDpiLFxucmFuZ2VzOmR9fWZ1bmN0aW9uIHJnKGEsYixkLGMpe2Euc2V0QXR0cmlidXRlKFwiYXV0b2NvcnJlY3RcIixkP1wiXCI6XCJvZmZcIik7YS5zZXRBdHRyaWJ1dGUoXCJhdXRvY2FwaXRhbGl6ZVwiLGM/XCJcIjpcIm9mZlwiKTthLnNldEF0dHJpYnV0ZShcInNwZWxsY2hlY2tcIiwhIWIpfWZ1bmN0aW9uIHNnKCl7dmFyIGE9dihcInRleHRhcmVhXCIsbnVsbCxudWxsLFwicG9zaXRpb246IGFic29sdXRlOyBib3R0b206IC0xZW07IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBtaW4taGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmVcIiksYj12KFwiZGl2XCIsW2FdLG51bGwsXCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4O1wiKTtmYT9hLnN0eWxlLndpZHRoPVwiMTAwMHB4XCI6YS5zZXRBdHRyaWJ1dGUoXCJ3cmFwXCIsXCJvZmZcIik7b2MmJihhLnN0eWxlLmJvcmRlcj1cIjFweCBzb2xpZCBibGFja1wiKTtyZyhhKTtyZXR1cm4gYn1mdW5jdGlvbiBvZShhLFxuYixkLGMsZSl7ZnVuY3Rpb24gZih1KXtpZihcImNvZGVwb2ludFwiPT1jKXt2YXIgQT1rLnRleHQuY2hhckNvZGVBdChiLmNoKygwPGQ/MDotMSkpO0E9aXNOYU4oQSk/bnVsbDpuZXcgdChiLmxpbmUsTWF0aC5tYXgoMCxNYXRoLm1pbihrLnRleHQubGVuZ3RoLGIuY2grZCooKDA8ZD81NTI5Njw9QSYmNTYzMjA+QTo1NjMyMDw9QSYmNTczNDM+QSk/MjoxKSkpLC1kKX1lbHNlIEE9ZT9raChhLmNtLGssYixkKTpmZShrLGIsZCk7aWYobnVsbD09QSl7aWYodT0hdSl1PWIubGluZStsLHU8YS5maXJzdHx8dT49YS5maXJzdCthLnNpemU/dT0hMTooYj1uZXcgdCh1LGIuY2gsYi5zdGlja3kpLHU9az13KGEsdSkpO2lmKHUpYj1nZShlLGEuY20sayxiLmxpbmUsbCk7ZWxzZSByZXR1cm4hMX1lbHNlIGI9QTtyZXR1cm4hMH12YXIgZz1iLGg9ZCxrPXcoYSxiLmxpbmUpLGw9ZSYmXCJydGxcIj09YS5kaXJlY3Rpb24/LWQ6ZDtpZihcImNoYXJcIj09Y3x8XCJjb2RlcG9pbnRcIj09YylmKCk7ZWxzZSBpZihcImNvbHVtblwiPT1cbmMpZighMCk7ZWxzZSBpZihcIndvcmRcIj09Y3x8XCJncm91cFwiPT1jKWZvcih2YXIgbT1udWxsLG49XCJncm91cFwiPT1jLHA9YS5jbSYmYS5jbS5nZXRIZWxwZXIoYixcIndvcmRDaGFyc1wiKSxxPSEwOyEoMD5kKXx8ZighcSk7cT0hMSl7dmFyIHI9ay50ZXh0LmNoYXJBdChiLmNoKXx8XCJcXG5cIjtyPXhjKHIscCk/XCJ3XCI6biYmXCJcXG5cIj09cj9cIm5cIjohbnx8L1xccy8udGVzdChyKT9udWxsOlwicFwiOyFufHxxfHxyfHwocj1cInNcIik7aWYobSYmbSE9cil7MD5kJiYoZD0xLGYoKSxiLnN0aWNreT1cImFmdGVyXCIpO2JyZWFrfXImJihtPXIpO2lmKDA8ZCYmIWYoIXEpKWJyZWFrfWg9VmMoYSxiLGcsaCwhMCk7cmQoZyxoKSYmKGguaGl0U2lkZT0hMCk7cmV0dXJuIGh9ZnVuY3Rpb24gdGcoYSxiLGQsYyl7dmFyIGU9YS5kb2MsZj1iLmxlZnQ7aWYoXCJwYWdlXCI9PWMpe3ZhciBnPU1hdGgubWluKGEuZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCxxYShhKS5kZWZhdWx0Vmlldy5pbm5lckhlaWdodHx8ZShhKS5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcbmc9TWF0aC5tYXgoZy0uNSp2YihhLmRpc3BsYXkpLDMpO2c9KDA8ZD9iLmJvdHRvbTpiLnRvcCkrZCpnfWVsc2VcImxpbmVcIj09YyYmKGc9MDxkP2IuYm90dG9tKzM6Yi50b3AtMyk7Zm9yKDs7KXtiPUtkKGEsZixnKTtpZighYi5vdXRzaWRlKWJyZWFrO2lmKDA+ZD8wPj1nOmc+PWUuaGVpZ2h0KXtiLmhpdFNpZGU9ITA7YnJlYWt9Zys9NSpkfXJldHVybiBifWZ1bmN0aW9uIHVnKGEsYil7dmFyIGQ9RmQoYSxiLmxpbmUpO2lmKCFkfHxkLmhpZGRlbilyZXR1cm4gbnVsbDt2YXIgYz13KGEuZG9jLGIubGluZSk7ZD1VZShkLGMsYi5saW5lKTthPUphKGMsYS5kb2MuZGlyZWN0aW9uKTtjPVwibGVmdFwiO2EmJihjPUtiKGEsYi5jaCklMj9cInJpZ2h0XCI6XCJsZWZ0XCIpO2I9VmUoZC5tYXAsYi5jaCxjKTtiLm9mZnNldD1cInJpZ2h0XCI9PWIuY29sbGFwc2U/Yi5lbmQ6Yi5zdGFydDtyZXR1cm4gYn1mdW5jdGlvbiBBaChhKXtmb3IoO2E7YT1hLnBhcmVudE5vZGUpaWYoL0NvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIvLnRlc3QoYS5jbGFzc05hbWUpKXJldHVybiEwO1xucmV0dXJuITF9ZnVuY3Rpb24gSWIoYSxiKXtiJiYoYS5iYWQ9ITApO3JldHVybiBhfWZ1bmN0aW9uIEJoKGEsYixkLGMsZSl7ZnVuY3Rpb24gZihxKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHIuaWQ9PXF9fWZ1bmN0aW9uIGcoKXttJiYobCs9bixwJiYobCs9biksbT1wPSExKX1mdW5jdGlvbiBoKHEpe3EmJihnKCksbCs9cSl9ZnVuY3Rpb24gayhxKXtpZigxPT1xLm5vZGVUeXBlKXt2YXIgcj1xLmdldEF0dHJpYnV0ZShcImNtLXRleHRcIik7aWYociloKHIpO2Vsc2V7cj1xLmdldEF0dHJpYnV0ZShcImNtLW1hcmtlclwiKTt2YXIgdTtpZihyKXE9YS5maW5kTWFya3ModChjLDApLHQoZSsxLDApLGYoK3IpKSxxLmxlbmd0aCYmKHU9cVswXS5maW5kKDApKSYmaChhYihhLmRvYyx1LmZyb20sdS50bykuam9pbihuKSk7ZWxzZSBpZihcImZhbHNlXCIhPXEuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpJiYodT0vXihwcmV8ZGl2fHB8bGl8dGFibGV8YnIpJC9pLnRlc3QocS5ub2RlTmFtZSksXG4vXmJyJC9pLnRlc3QocS5ub2RlTmFtZSl8fDAhPXEudGV4dENvbnRlbnQubGVuZ3RoKSl7dSYmZygpO2ZvcihyPTA7cjxxLmNoaWxkTm9kZXMubGVuZ3RoO3IrKylrKHEuY2hpbGROb2Rlc1tyXSk7L14ocHJlfHApJC9pLnRlc3QocS5ub2RlTmFtZSkmJihwPSEwKTt1JiYobT0hMCl9fX1lbHNlIDM9PXEubm9kZVR5cGUmJmgocS5ub2RlVmFsdWUucmVwbGFjZSgvXFx1MjAwYi9nLFwiXCIpLnJlcGxhY2UoL1xcdTAwYTAvZyxcIiBcIikpfWZvcih2YXIgbD1cIlwiLG09ITEsbj1hLmRvYy5saW5lU2VwYXJhdG9yKCkscD0hMTs7KXtrKGIpO2lmKGI9PWQpYnJlYWs7Yj1iLm5leHRTaWJsaW5nO3A9ITF9cmV0dXJuIGx9ZnVuY3Rpb24gY2QoYSxiLGQpe2lmKGI9PWEuZGlzcGxheS5saW5lRGl2KXt2YXIgYz1hLmRpc3BsYXkubGluZURpdi5jaGlsZE5vZGVzW2RdO2lmKCFjKXJldHVybiBJYihhLmNsaXBQb3ModChhLmRpc3BsYXkudmlld1RvLTEpKSwhMCk7Yj1udWxsO2Q9MH1lbHNlIGZvcihjPWI7O2M9XG5jLnBhcmVudE5vZGUpe2lmKCFjfHxjPT1hLmRpc3BsYXkubGluZURpdilyZXR1cm4gbnVsbDtpZihjLnBhcmVudE5vZGUmJmMucGFyZW50Tm9kZT09YS5kaXNwbGF5LmxpbmVEaXYpYnJlYWt9Zm9yKHZhciBlPTA7ZTxhLmRpc3BsYXkudmlldy5sZW5ndGg7ZSsrKXt2YXIgZj1hLmRpc3BsYXkudmlld1tlXTtpZihmLm5vZGU9PWMpcmV0dXJuIENoKGYsYixkKX19ZnVuY3Rpb24gQ2goYSxiLGQpe2Z1bmN0aW9uIGMobSxuLHApe2Zvcih2YXIgcT0tMTtxPChsP2wubGVuZ3RoOjApO3ErKylmb3IodmFyIHI9MD5xP2subWFwOmxbcV0sdT0wO3U8ci5sZW5ndGg7dSs9Myl7dmFyIEE9clt1KzJdO2lmKEE9PW18fEE9PW4pe249TigwPnE/YS5saW5lOmEucmVzdFtxXSk7cT1yW3VdK3A7aWYoMD5wfHxBIT1tKXE9clt1KyhwPzE6MCldO3JldHVybiB0KG4scSl9fX12YXIgZT1hLnRleHQuZmlyc3RDaGlsZCxmPSExO2lmKCFifHwhamEoZSxiKSlyZXR1cm4gSWIodChOKGEubGluZSksMCksITApO1xuaWYoYj09ZSYmKGY9ITAsYj1lLmNoaWxkTm9kZXNbZF0sZD0wLCFiKSlyZXR1cm4gZD1hLnJlc3Q/SihhLnJlc3QpOmEubGluZSxJYih0KE4oZCksZC50ZXh0Lmxlbmd0aCksZik7dmFyIGc9Mz09Yi5ub2RlVHlwZT9iOm51bGwsaD1iO2d8fDEhPWIuY2hpbGROb2Rlcy5sZW5ndGh8fDMhPWIuZmlyc3RDaGlsZC5ub2RlVHlwZXx8KGc9Yi5maXJzdENoaWxkLGQmJihkPWcubm9kZVZhbHVlLmxlbmd0aCkpO2Zvcig7aC5wYXJlbnROb2RlIT1lOyloPWgucGFyZW50Tm9kZTt2YXIgaz1hLm1lYXN1cmUsbD1rLm1hcHM7aWYoYj1jKGcsaCxkKSlyZXR1cm4gSWIoYixmKTtlPWgubmV4dFNpYmxpbmc7Zm9yKGc9Zz9nLm5vZGVWYWx1ZS5sZW5ndGgtZDowO2U7ZT1lLm5leHRTaWJsaW5nKXtpZihiPWMoZSxlLmZpcnN0Q2hpbGQsMCkpcmV0dXJuIEliKHQoYi5saW5lLGIuY2gtZyksZik7Zys9ZS50ZXh0Q29udGVudC5sZW5ndGh9Zm9yKGg9aC5wcmV2aW91c1NpYmxpbmc7aDtoPWgucHJldmlvdXNTaWJsaW5nKXtpZihiPVxuYyhoLGguZmlyc3RDaGlsZCwtMSkpcmV0dXJuIEliKHQoYi5saW5lLGIuY2grZCksZik7ZCs9aC50ZXh0Q29udGVudC5sZW5ndGh9fXZhciBwYT1uYXZpZ2F0b3IudXNlckFnZW50LHZnPW5hdmlnYXRvci5wbGF0Zm9ybSxNYT0vZ2Vja29cXC9cXGQvaS50ZXN0KHBhKSx3Zz0vTVNJRSBcXGQvLnRlc3QocGEpLHhnPS9UcmlkZW50XFwvKD86WzctOV18XFxkezIsfSlcXC4uKnJ2OihcXGQrKS8uZXhlYyhwYSksZGQ9L0VkZ2VcXC8oXFxkKykvLmV4ZWMocGEpLEc9d2d8fHhnfHxkZCxUPUcmJih3Zz9kb2N1bWVudC5kb2N1bWVudE1vZGV8fDY6KyhkZHx8eGcpWzFdKSxmYT0hZGQmJi9XZWJLaXRcXC8vLnRlc3QocGEpLERoPWZhJiYvUXRcXC9cXGQrXFwuXFxkKy8udGVzdChwYSksUWE9IWRkJiYvQ2hyb21lXFwvKFxcZCspLy5leGVjKHBhKSx0Zj1RYSYmK1FhWzFdLENhPS9PcGVyYVxcLy8udGVzdChwYSksYWQ9L0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLEVoPS9NYWMgT1MgWCAxXFxkXFxEKFs4LTldfFxcZFxcZClcXEQvLnRlc3QocGEpLFxuVmc9L1BoYW50b21KUy8udGVzdChwYSksb2M9YWQmJigvTW9iaWxlXFwvXFx3Ky8udGVzdChwYSl8fDI8bmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzKSxHYz0vQW5kcm9pZC8udGVzdChwYSksYWM9b2N8fEdjfHwvd2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KHBhKSx5YT1vY3x8L01hYy8udGVzdCh2Zyksc2g9L1xcYkNyT1NcXGIvLnRlc3QocGEpLEZoPS93aW4vaS50ZXN0KHZnKSxuYj1DYSYmcGEubWF0Y2goL1ZlcnNpb25cXC8oXFxkKlxcLlxcZCopLyk7bmImJihuYj1OdW1iZXIobmJbMV0pKTtuYiYmMTU8PW5iJiYoQ2E9ITEsZmE9ITApO3ZhciAkZj15YSYmKERofHxDYSYmKG51bGw9PW5ifHwxMi4xMT5uYikpLGplPU1hfHxHJiY5PD1ULGpiPWZ1bmN0aW9uKGEsYil7dmFyIGQ9YS5jbGFzc05hbWU7aWYoYj15KGIpLmV4ZWMoZCkpe3ZhciBjPWQuc2xpY2UoYi5pbmRleCtiWzBdLmxlbmd0aCk7YS5jbGFzc05hbWU9ZC5zbGljZSgwLGIuaW5kZXgpK1xuKGM/YlsxXStjOlwiXCIpfX07dmFyIFFiPWRvY3VtZW50LmNyZWF0ZVJhbmdlP2Z1bmN0aW9uKGEsYixkLGMpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7ZS5zZXRFbmQoY3x8YSxkKTtlLnNldFN0YXJ0KGEsYik7cmV0dXJuIGV9OmZ1bmN0aW9uKGEsYixkKXt2YXIgYz1kb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpO3RyeXtjLm1vdmVUb0VsZW1lbnRUZXh0KGEucGFyZW50Tm9kZSl9Y2F0Y2goZSl7cmV0dXJuIGN9Yy5jb2xsYXBzZSghMCk7Yy5tb3ZlRW5kKFwiY2hhcmFjdGVyXCIsZCk7Yy5tb3ZlU3RhcnQoXCJjaGFyYWN0ZXJcIixiKTtyZXR1cm4gY307dmFyIHBjPWZ1bmN0aW9uKGEpe2Euc2VsZWN0KCl9O29jP3BjPWZ1bmN0aW9uKGEpe2Euc2VsZWN0aW9uU3RhcnQ9MDthLnNlbGVjdGlvbkVuZD1hLnZhbHVlLmxlbmd0aH06RyYmKHBjPWZ1bmN0aW9uKGEpe3RyeXthLnNlbGVjdCgpfWNhdGNoKGIpe319KTt2YXIgWGE9ZnVuY3Rpb24oKXt0aGlzLmY9dGhpcy5pZD1udWxsO1xudGhpcy50aW1lPTA7dGhpcy5oYW5kbGVyPWdkKHRoaXMub25UaW1lb3V0LHRoaXMpfTtYYS5wcm90b3R5cGUub25UaW1lb3V0PWZ1bmN0aW9uKGEpe2EuaWQ9MDthLnRpbWU8PStuZXcgRGF0ZT9hLmYoKTpzZXRUaW1lb3V0KGEuaGFuZGxlcixhLnRpbWUtK25ldyBEYXRlKX07WGEucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3RoaXMuZj1iO2I9K25ldyBEYXRlK2E7aWYoIXRoaXMuaWR8fGI8dGhpcy50aW1lKWNsZWFyVGltZW91dCh0aGlzLmlkKSx0aGlzLmlkPXNldFRpbWVvdXQodGhpcy5oYW5kbGVyLGEpLHRoaXMudGltZT1ifTt2YXIgWmM9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJDb2RlTWlycm9yLlBhc3NcIn19LElhPXtzY3JvbGw6ITF9LGtlPXtvcmlnaW46XCIqbW91c2VcIn0scWM9e29yaWdpbjpcIittb3ZlXCJ9LHZjPVtcIlwiXSx6Zz0vW1xcdTAwZGZcXHUwNTg3XFx1MDU5MC1cXHUwNWY0XFx1MDYwMC1cXHUwNmZmXFx1MzA0MC1cXHUzMDlmXFx1MzBhMC1cXHUzMGZmXFx1MzQwMC1cXHU0ZGI1XFx1NGUwMC1cXHU5ZmNjXFx1YWMwMC1cXHVkN2FmXS8sXG5BZz0vW1xcdTAzMDAtXFx1MDM2ZlxcdTA0ODMtXFx1MDQ4OVxcdTA1OTEtXFx1MDViZFxcdTA1YmZcXHUwNWMxXFx1MDVjMlxcdTA1YzRcXHUwNWM1XFx1MDVjN1xcdTA2MTAtXFx1MDYxYVxcdTA2NGItXFx1MDY1ZVxcdTA2NzBcXHUwNmQ2LVxcdTA2ZGNcXHUwNmRlLVxcdTA2ZTRcXHUwNmU3XFx1MDZlOFxcdTA2ZWEtXFx1MDZlZFxcdTA3MTFcXHUwNzMwLVxcdTA3NGFcXHUwN2E2LVxcdTA3YjBcXHUwN2ViLVxcdTA3ZjNcXHUwODE2LVxcdTA4MTlcXHUwODFiLVxcdTA4MjNcXHUwODI1LVxcdTA4MjdcXHUwODI5LVxcdTA4MmRcXHUwOTAwLVxcdTA5MDJcXHUwOTNjXFx1MDk0MS1cXHUwOTQ4XFx1MDk0ZFxcdTA5NTEtXFx1MDk1NVxcdTA5NjJcXHUwOTYzXFx1MDk4MVxcdTA5YmNcXHUwOWJlXFx1MDljMS1cXHUwOWM0XFx1MDljZFxcdTA5ZDdcXHUwOWUyXFx1MDllM1xcdTBhMDFcXHUwYTAyXFx1MGEzY1xcdTBhNDFcXHUwYTQyXFx1MGE0N1xcdTBhNDhcXHUwYTRiLVxcdTBhNGRcXHUwYTUxXFx1MGE3MFxcdTBhNzFcXHUwYTc1XFx1MGE4MVxcdTBhODJcXHUwYWJjXFx1MGFjMS1cXHUwYWM1XFx1MGFjN1xcdTBhYzhcXHUwYWNkXFx1MGFlMlxcdTBhZTNcXHUwYjAxXFx1MGIzY1xcdTBiM2VcXHUwYjNmXFx1MGI0MS1cXHUwYjQ0XFx1MGI0ZFxcdTBiNTZcXHUwYjU3XFx1MGI2MlxcdTBiNjNcXHUwYjgyXFx1MGJiZVxcdTBiYzBcXHUwYmNkXFx1MGJkN1xcdTBjM2UtXFx1MGM0MFxcdTBjNDYtXFx1MGM0OFxcdTBjNGEtXFx1MGM0ZFxcdTBjNTVcXHUwYzU2XFx1MGM2MlxcdTBjNjNcXHUwY2JjXFx1MGNiZlxcdTBjYzJcXHUwY2M2XFx1MGNjY1xcdTBjY2RcXHUwY2Q1XFx1MGNkNlxcdTBjZTJcXHUwY2UzXFx1MGQzZVxcdTBkNDEtXFx1MGQ0NFxcdTBkNGRcXHUwZDU3XFx1MGQ2MlxcdTBkNjNcXHUwZGNhXFx1MGRjZlxcdTBkZDItXFx1MGRkNFxcdTBkZDZcXHUwZGRmXFx1MGUzMVxcdTBlMzQtXFx1MGUzYVxcdTBlNDctXFx1MGU0ZVxcdTBlYjFcXHUwZWI0LVxcdTBlYjlcXHUwZWJiXFx1MGViY1xcdTBlYzgtXFx1MGVjZFxcdTBmMThcXHUwZjE5XFx1MGYzNVxcdTBmMzdcXHUwZjM5XFx1MGY3MS1cXHUwZjdlXFx1MGY4MC1cXHUwZjg0XFx1MGY4NlxcdTBmODdcXHUwZjkwLVxcdTBmOTdcXHUwZjk5LVxcdTBmYmNcXHUwZmM2XFx1MTAyZC1cXHUxMDMwXFx1MTAzMi1cXHUxMDM3XFx1MTAzOVxcdTEwM2FcXHUxMDNkXFx1MTAzZVxcdTEwNThcXHUxMDU5XFx1MTA1ZS1cXHUxMDYwXFx1MTA3MS1cXHUxMDc0XFx1MTA4MlxcdTEwODVcXHUxMDg2XFx1MTA4ZFxcdTEwOWRcXHUxMzVmXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3YjctXFx1MTdiZFxcdTE3YzZcXHUxN2M5LVxcdTE3ZDNcXHUxN2RkXFx1MTgwYi1cXHUxODBkXFx1MThhOVxcdTE5MjAtXFx1MTkyMlxcdTE5MjdcXHUxOTI4XFx1MTkzMlxcdTE5MzktXFx1MTkzYlxcdTFhMTdcXHUxYTE4XFx1MWE1NlxcdTFhNTgtXFx1MWE1ZVxcdTFhNjBcXHUxYTYyXFx1MWE2NS1cXHUxYTZjXFx1MWE3My1cXHUxYTdjXFx1MWE3ZlxcdTFiMDAtXFx1MWIwM1xcdTFiMzRcXHUxYjM2LVxcdTFiM2FcXHUxYjNjXFx1MWI0MlxcdTFiNmItXFx1MWI3M1xcdTFiODBcXHUxYjgxXFx1MWJhMi1cXHUxYmE1XFx1MWJhOFxcdTFiYTlcXHUxYzJjLVxcdTFjMzNcXHUxYzM2XFx1MWMzN1xcdTFjZDAtXFx1MWNkMlxcdTFjZDQtXFx1MWNlMFxcdTFjZTItXFx1MWNlOFxcdTFjZWRcXHUxZGMwLVxcdTFkZTZcXHUxZGZkLVxcdTFkZmZcXHUyMDBjXFx1MjAwZFxcdTIwZDAtXFx1MjBmMFxcdTJjZWYtXFx1MmNmMVxcdTJkZTAtXFx1MmRmZlxcdTMwMmEtXFx1MzAyZlxcdTMwOTlcXHUzMDlhXFx1YTY2Zi1cXHVhNjcyXFx1YTY3Y1xcdWE2N2RcXHVhNmYwXFx1YTZmMVxcdWE4MDJcXHVhODA2XFx1YTgwYlxcdWE4MjVcXHVhODI2XFx1YThjNFxcdWE4ZTAtXFx1YThmMVxcdWE5MjYtXFx1YTkyZFxcdWE5NDctXFx1YTk1MVxcdWE5ODAtXFx1YTk4MlxcdWE5YjNcXHVhOWI2LVxcdWE5YjlcXHVhOWJjXFx1YWEyOS1cXHVhYTJlXFx1YWEzMVxcdWFhMzJcXHVhYTM1XFx1YWEzNlxcdWFhNDNcXHVhYTRjXFx1YWFiMFxcdWFhYjItXFx1YWFiNFxcdWFhYjdcXHVhYWI4XFx1YWFiZVxcdWFhYmZcXHVhYWMxXFx1YWJlNVxcdWFiZThcXHVhYmVkXFx1ZGMwMC1cXHVkZmZmXFx1ZmIxZVxcdWZlMDAtXFx1ZmUwZlxcdWZlMjAtXFx1ZmUyNlxcdWZmOWVcXHVmZjlmXS8sXG5MYj1udWxsLENnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShnLGgsayl7dGhpcy5sZXZlbD1nO3RoaXMuZnJvbT1oO3RoaXMudG89a312YXIgYj0vW1xcdTA1OTAtXFx1MDVmNFxcdTA2MDAtXFx1MDZmZlxcdTA3MDAtXFx1MDhhY10vLGQ9L1tzdHdOXS8sYz0vW0xScl0vLGU9L1tMYjFuXS8sZj0vWzFuXS87cmV0dXJuIGZ1bmN0aW9uKGcsaCl7dmFyIGs9XCJsdHJcIj09aD9cIkxcIjpcIlJcIjtpZigwPT1nLmxlbmd0aHx8XCJsdHJcIj09aCYmIWIudGVzdChnKSlyZXR1cm4hMTtmb3IodmFyIGw9Zy5sZW5ndGgsbT1bXSxuPTA7bjxsOysrbil7dmFyIHA9bSxxPXAucHVzaDt2YXIgcj1nLmNoYXJDb2RlQXQobik7cj0yNDc+PXI/XCJiYmJiYmJiYmJ0c3R3c2JiYmJiYmJiYmJiYmJic3NzdHdOTiUlJU5OTk5OTixOLE4xMTExMTExMTExTk5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OYmJiYmJic2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLE4lJSUlTk5OTkxOTk5OTiUlMTFOTE5OTjFMTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTlwiLmNoYXJBdChyKTpcbjE0MjQ8PXImJjE1MjQ+PXI/XCJSXCI6MTUzNjw9ciYmMTc4NT49cj9cIm5ubm5ubk5OciUlcixyTk5tbW1tbW1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1tbW5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbk5tbW1tbW1ycm1tTm1tbW1ycjExMTExMTExMTFcIi5jaGFyQXQoci0xNTM2KToxNzc0PD1yJiYyMjIwPj1yP1wiclwiOjgxOTI8PXImJjgyMDM+PXI/XCJ3XCI6ODIwND09cj9cImJcIjpcIkxcIjtxLmNhbGwocCxyKX1uPTA7Zm9yKHA9aztuPGw7KytuKXE9bVtuXSxcIm1cIj09cT9tW25dPXA6cD1xO249MDtmb3IocD1rO248bDsrK24pcT1tW25dLFwiMVwiPT1xJiZcInJcIj09cD9tW25dPVwiblwiOmMudGVzdChxKSYmKHA9cSxcInJcIj09cSYmKG1bbl09XG5cIlJcIikpO249MTtmb3IocD1tWzBdO248bC0xOysrbilxPW1bbl0sXCIrXCI9PXEmJlwiMVwiPT1wJiZcIjFcIj09bVtuKzFdP21bbl09XCIxXCI6XCIsXCIhPXF8fHAhPW1bbisxXXx8XCIxXCIhPXAmJlwiblwiIT1wfHwobVtuXT1wKSxwPXE7Zm9yKG49MDtuPGw7KytuKWlmKHA9bVtuXSxcIixcIj09cCltW25dPVwiTlwiO2Vsc2UgaWYoXCIlXCI9PXApe2ZvcihwPW4rMTtwPGwmJlwiJVwiPT1tW3BdOysrcCk7Zm9yKHE9biYmXCIhXCI9PW1bbi0xXXx8cDxsJiZcIjFcIj09bVtwXT9cIjFcIjpcIk5cIjtuPHA7KytuKW1bbl09cTtuPXAtMX1uPTA7Zm9yKHA9aztuPGw7KytuKXE9bVtuXSxcIkxcIj09cCYmXCIxXCI9PXE/bVtuXT1cIkxcIjpjLnRlc3QocSkmJihwPXEpO2ZvcihwPTA7cDxsOysrcClpZihkLnRlc3QobVtwXSkpe2ZvcihuPXArMTtuPGwmJmQudGVzdChtW25dKTsrK24pO3E9XCJMXCI9PShwP21bcC0xXTprKTtmb3IocT1xPT0oXCJMXCI9PShuPGw/bVtuXTprKSk/cT9cIkxcIjpcIlJcIjprO3A8bjsrK3ApbVtwXT1xO3A9bi0xfWs9W107dmFyIHU7XG5mb3Iobj0wO248bDspaWYoZS50ZXN0KG1bbl0pKXtwPW47Zm9yKCsrbjtuPGwmJmUudGVzdChtW25dKTsrK24pO2sucHVzaChuZXcgYSgwLHAsbikpfWVsc2V7dmFyIEE9bjtwPWsubGVuZ3RoO3E9XCJydGxcIj09aD8xOjA7Zm9yKCsrbjtuPGwmJlwiTFwiIT1tW25dOysrbik7Zm9yKHI9QTtyPG47KWlmKGYudGVzdChtW3JdKSl7QTxyJiYoay5zcGxpY2UocCwwLG5ldyBhKDEsQSxyKSkscCs9cSk7QT1yO2ZvcigrK3I7cjxuJiZmLnRlc3QobVtyXSk7KytyKTtrLnNwbGljZShwLDAsbmV3IGEoMixBLHIpKTtwKz1xO0E9cn1lbHNlKytyO0E8biYmay5zcGxpY2UocCwwLG5ldyBhKDEsQSxuKSl9XCJsdHJcIj09aCYmKDE9PWtbMF0ubGV2ZWwmJih1PWcubWF0Y2goL15cXHMrLykpJiYoa1swXS5mcm9tPXVbMF0ubGVuZ3RoLGsudW5zaGlmdChuZXcgYSgwLDAsdVswXS5sZW5ndGgpKSksMT09SihrKS5sZXZlbCYmKHU9Zy5tYXRjaCgvXFxzKyQvKSkmJihKKGspLnRvLT11WzBdLmxlbmd0aCxrLnB1c2gobmV3IGEoMCxcbmwtdVswXS5sZW5ndGgsbCkpKSk7cmV0dXJuXCJydGxcIj09aD9rLnJldmVyc2UoKTprfX0oKSx5Yz1bXSx6PWZ1bmN0aW9uKGEsYixkKXthLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKGIsZCwhMSk6YS5hdHRhY2hFdmVudD9hLmF0dGFjaEV2ZW50KFwib25cIitiLGQpOihhPWEuX2hhbmRsZXJzfHwoYS5faGFuZGxlcnM9e30pLGFbYl09KGFbYl18fHljKS5jb25jYXQoZCkpfSx0aD1mdW5jdGlvbigpe2lmKEcmJjk+VClyZXR1cm4hMTt2YXIgYT12KFwiZGl2XCIpO3JldHVyblwiZHJhZ2dhYmxlXCJpbiBhfHxcImRyYWdEcm9wXCJpbiBhfSgpLEJkLEFkLG5lPTMhPVwiXFxuXFxuYlwiLnNwbGl0KC9cXG4vKS5sZW5ndGg/ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsZD1bXSxjPWEubGVuZ3RoO2I8PWM7KXt2YXIgZT1hLmluZGV4T2YoXCJcXG5cIixiKTstMT09ZSYmKGU9YS5sZW5ndGgpO3ZhciBmPWEuc2xpY2UoYixcIlxcclwiPT1hLmNoYXJBdChlLTEpP2UtMTplKSxnPWYuaW5kZXhPZihcIlxcclwiKTtcbi0xIT1nPyhkLnB1c2goZi5zbGljZSgwLGcpKSxiKz1nKzEpOihkLnB1c2goZiksYj1lKzEpfXJldHVybiBkfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5zcGxpdCgvXFxyXFxuP3xcXG4vKX0sR2g9d2luZG93LmdldFNlbGVjdGlvbj9mdW5jdGlvbihhKXt0cnl7cmV0dXJuIGEuc2VsZWN0aW9uU3RhcnQhPWEuc2VsZWN0aW9uRW5kfWNhdGNoKGIpe3JldHVybiExfX06ZnVuY3Rpb24oYSl7dHJ5e3ZhciBiPWEub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX1jYXRjaChkKXt9cmV0dXJuIGImJmIucGFyZW50RWxlbWVudCgpPT1hPzAhPWIuY29tcGFyZUVuZFBvaW50cyhcIlN0YXJ0VG9FbmRcIixiKTohMX0sbmg9ZnVuY3Rpb24oKXt2YXIgYT12KFwiZGl2XCIpO2lmKFwib25jb3B5XCJpbiBhKXJldHVybiEwO2Euc2V0QXR0cmlidXRlKFwib25jb3B5XCIsXCJyZXR1cm47XCIpO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGEub25jb3B5fSgpLEhkPW51bGwsbWQ9e30scWI9e30scmI9e30sWD1cbmZ1bmN0aW9uKGEsYixkKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTA7dGhpcy5zdHJpbmc9YTt0aGlzLnRhYlNpemU9Ynx8ODt0aGlzLmxpbmVTdGFydD10aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MDt0aGlzLmxpbmVPcmFjbGU9ZH07WC5wcm90b3R5cGUuZW9sPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLnN0cmluZy5sZW5ndGh9O1gucHJvdG90eXBlLnNvbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcz09dGhpcy5saW5lU3RhcnR9O1gucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKXx8dm9pZCAwfTtYLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7aWYodGhpcy5wb3M8dGhpcy5zdHJpbmcubGVuZ3RoKXJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyl9O1gucHJvdG90eXBlLmVhdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpO1xuaWYoXCJzdHJpbmdcIj09dHlwZW9mIGE/Yj09YTpiJiYoYS50ZXN0P2EudGVzdChiKTphKGIpKSlyZXR1cm4rK3RoaXMucG9zLGJ9O1gucHJvdG90eXBlLmVhdFdoaWxlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnBvczt0aGlzLmVhdChhKTspO3JldHVybiB0aGlzLnBvcz5ifTtYLnByb3RvdHlwZS5lYXRTcGFjZT1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnBvczsvW1xcc1xcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOykrK3RoaXMucG9zO3JldHVybiB0aGlzLnBvcz5hfTtYLnByb3RvdHlwZS5za2lwVG9FbmQ9ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0cmluZy5sZW5ndGh9O1gucHJvdG90eXBlLnNraXBUbz1mdW5jdGlvbihhKXthPXRoaXMuc3RyaW5nLmluZGV4T2YoYSx0aGlzLnBvcyk7aWYoLTE8YSlyZXR1cm4gdGhpcy5wb3M9YSwhMH07WC5wcm90b3R5cGUuYmFja1VwPWZ1bmN0aW9uKGEpe3RoaXMucG9zLT1hfTtYLnByb3RvdHlwZS5jb2x1bW49XG5mdW5jdGlvbigpe3RoaXMubGFzdENvbHVtblBvczx0aGlzLnN0YXJ0JiYodGhpcy5sYXN0Q29sdW1uVmFsdWU9d2EodGhpcy5zdHJpbmcsdGhpcy5zdGFydCx0aGlzLnRhYlNpemUsdGhpcy5sYXN0Q29sdW1uUG9zLHRoaXMubGFzdENvbHVtblZhbHVlKSx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5zdGFydCk7cmV0dXJuIHRoaXMubGFzdENvbHVtblZhbHVlLSh0aGlzLmxpbmVTdGFydD93YSh0aGlzLnN0cmluZyx0aGlzLmxpbmVTdGFydCx0aGlzLnRhYlNpemUpOjApfTtYLnByb3RvdHlwZS5pbmRlbnRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB3YSh0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSktKHRoaXMubGluZVN0YXJ0P3dhKHRoaXMuc3RyaW5nLHRoaXMubGluZVN0YXJ0LHRoaXMudGFiU2l6ZSk6MCl9O1gucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKGEsYixkKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIGM9ZnVuY3Rpb24oZil7cmV0dXJuIGQ/Zi50b0xvd2VyQ2FzZSgpOlxuZn0sZT10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsYS5sZW5ndGgpO2lmKGMoZSk9PWMoYSkpcmV0dXJuITEhPT1iJiYodGhpcy5wb3MrPWEubGVuZ3RoKSwhMH1lbHNle2lmKChhPXRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChhKSkmJjA8YS5pbmRleClyZXR1cm4gbnVsbDthJiYhMSE9PWImJih0aGlzLnBvcys9YVswXS5sZW5ndGgpO3JldHVybiBhfX07WC5wcm90b3R5cGUuY3VycmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LHRoaXMucG9zKX07WC5wcm90b3R5cGUuaGlkZUZpcnN0Q2hhcnM9ZnVuY3Rpb24oYSxiKXt0aGlzLmxpbmVTdGFydCs9YTt0cnl7cmV0dXJuIGIoKX1maW5hbGx5e3RoaXMubGluZVN0YXJ0LT1hfX07WC5wcm90b3R5cGUubG9va0FoZWFkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGluZU9yYWNsZTtyZXR1cm4gYiYmYi5sb29rQWhlYWQoYSl9O1gucHJvdG90eXBlLmJhc2VUb2tlbj1mdW5jdGlvbigpe3ZhciBhPVxudGhpcy5saW5lT3JhY2xlO3JldHVybiBhJiZhLmJhc2VUb2tlbih0aGlzLnBvcyl9O3ZhciBDYz1mdW5jdGlvbihhLGIpe3RoaXMuc3RhdGU9YTt0aGlzLmxvb2tBaGVhZD1ifSxGYT1mdW5jdGlvbihhLGIsZCxjKXt0aGlzLnN0YXRlPWI7dGhpcy5kb2M9YTt0aGlzLmxpbmU9ZDt0aGlzLm1heExvb2tBaGVhZD1jfHwwO3RoaXMuYmFzZVRva2Vucz1udWxsO3RoaXMuYmFzZVRva2VuUG9zPTF9O0ZhLnByb3RvdHlwZS5sb29rQWhlYWQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kb2MuZ2V0TGluZSh0aGlzLmxpbmUrYSk7bnVsbCE9YiYmYT50aGlzLm1heExvb2tBaGVhZCYmKHRoaXMubWF4TG9va0FoZWFkPWEpO3JldHVybiBifTtGYS5wcm90b3R5cGUuYmFzZVRva2VuPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLmJhc2VUb2tlbnMpcmV0dXJuIG51bGw7Zm9yKDt0aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3NdPD1hOyl0aGlzLmJhc2VUb2tlblBvcys9Mjt2YXIgYj10aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3MrXG4xXTtyZXR1cm57dHlwZTpiJiZiLnJlcGxhY2UoLyggfF4pb3ZlcmxheSAuKi8sXCJcIiksc2l6ZTp0aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3NdLWF9fTtGYS5wcm90b3R5cGUubmV4dExpbmU9ZnVuY3Rpb24oKXt0aGlzLmxpbmUrKzswPHRoaXMubWF4TG9va0FoZWFkJiZ0aGlzLm1heExvb2tBaGVhZC0tfTtGYS5mcm9tU2F2ZWQ9ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBiIGluc3RhbmNlb2YgQ2M/bmV3IEZhKGEsJGEoYS5tb2RlLGIuc3RhdGUpLGQsYi5sb29rQWhlYWQpOm5ldyBGYShhLCRhKGEubW9kZSxiKSxkKX07RmEucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oYSl7YT0hMSE9PWE/JGEodGhpcy5kb2MubW9kZSx0aGlzLnN0YXRlKTp0aGlzLnN0YXRlO3JldHVybiAwPHRoaXMubWF4TG9va0FoZWFkP25ldyBDYyhhLHRoaXMubWF4TG9va0FoZWFkKTphfTt2YXIgRGU9ZnVuY3Rpb24oYSxiLGQpe3RoaXMuc3RhcnQ9YS5zdGFydDt0aGlzLmVuZD1hLnBvczt0aGlzLnN0cmluZz1cbmEuY3VycmVudCgpO3RoaXMudHlwZT1ifHxudWxsO3RoaXMuc3RhdGU9ZH0sTmY9ITEsS2E9ITEsemI9ZnVuY3Rpb24oYSxiLGQpe3RoaXMudGV4dD1hO0hlKHRoaXMsYik7dGhpcy5oZWlnaHQ9ZD9kKHRoaXMpOjF9O3piLnByb3RvdHlwZS5saW5lTm89ZnVuY3Rpb24oKXtyZXR1cm4gTih0aGlzKX07cGIoemIpO3ZhciBKZz17fSxJZz17fSx0Yj1udWxsLFJiPW51bGwsV2U9e2xlZnQ6MCxyaWdodDowLHRvcDowLGJvdHRvbTowfSxmYixvYj1mdW5jdGlvbihhLGIsZCl7dGhpcy5jbT1kO3ZhciBjPXRoaXMudmVydD12KFwiZGl2XCIsW3YoXCJkaXZcIixudWxsLG51bGwsXCJtaW4td2lkdGg6IDFweFwiKV0sXCJDb2RlTWlycm9yLXZzY3JvbGxiYXJcIiksZT10aGlzLmhvcml6PXYoXCJkaXZcIixbdihcImRpdlwiLG51bGwsbnVsbCxcImhlaWdodDogMTAwJTsgbWluLWhlaWdodDogMXB4XCIpXSxcIkNvZGVNaXJyb3ItaHNjcm9sbGJhclwiKTtjLnRhYkluZGV4PWUudGFiSW5kZXg9LTE7YShjKTthKGUpO3ooYyxcblwic2Nyb2xsXCIsZnVuY3Rpb24oKXtjLmNsaWVudEhlaWdodCYmYihjLnNjcm9sbFRvcCxcInZlcnRpY2FsXCIpfSk7eihlLFwic2Nyb2xsXCIsZnVuY3Rpb24oKXtlLmNsaWVudFdpZHRoJiZiKGUuc2Nyb2xsTGVmdCxcImhvcml6b250YWxcIil9KTt0aGlzLmNoZWNrZWRaZXJvV2lkdGg9ITE7RyYmOD5UJiYodGhpcy5ob3Jpei5zdHlsZS5taW5IZWlnaHQ9dGhpcy52ZXJ0LnN0eWxlLm1pbldpZHRoPVwiMThweFwiKX07b2IucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhKXt2YXIgYj1hLnNjcm9sbFdpZHRoPmEuY2xpZW50V2lkdGgrMSxkPWEuc2Nyb2xsSGVpZ2h0PmEuY2xpZW50SGVpZ2h0KzEsYz1hLm5hdGl2ZUJhcldpZHRoO2Q/KHRoaXMudmVydC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIix0aGlzLnZlcnQuc3R5bGUuYm90dG9tPWI/YytcInB4XCI6XCIwXCIsdGhpcy52ZXJ0LmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KDAsYS5zY3JvbGxIZWlnaHQtYS5jbGllbnRIZWlnaHQrKGEudmlld0hlaWdodC1cbihiP2M6MCkpKStcInB4XCIpOih0aGlzLnZlcnQuc2Nyb2xsVG9wPTAsdGhpcy52ZXJ0LnN0eWxlLmRpc3BsYXk9XCJcIix0aGlzLnZlcnQuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9XCIwXCIpO2I/KHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheT1cImJsb2NrXCIsdGhpcy5ob3Jpei5zdHlsZS5yaWdodD1kP2MrXCJweFwiOlwiMFwiLHRoaXMuaG9yaXouc3R5bGUubGVmdD1hLmJhckxlZnQrXCJweFwiLHRoaXMuaG9yaXouZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1NYXRoLm1heCgwLGEuc2Nyb2xsV2lkdGgtYS5jbGllbnRXaWR0aCsoYS52aWV3V2lkdGgtYS5iYXJMZWZ0LShkP2M6MCkpKStcInB4XCIpOih0aGlzLmhvcml6LnN0eWxlLmRpc3BsYXk9XCJcIix0aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9XCIwXCIpOyF0aGlzLmNoZWNrZWRaZXJvV2lkdGgmJjA8YS5jbGllbnRIZWlnaHQmJigwPT1jJiZ0aGlzLnplcm9XaWR0aEhhY2soKSx0aGlzLmNoZWNrZWRaZXJvV2lkdGg9ITApO3JldHVybntyaWdodDpkP1xuYzowLGJvdHRvbTpiP2M6MH19O29iLnByb3RvdHlwZS5zZXRTY3JvbGxMZWZ0PWZ1bmN0aW9uKGEpe3RoaXMuaG9yaXouc2Nyb2xsTGVmdCE9YSYmKHRoaXMuaG9yaXouc2Nyb2xsTGVmdD1hKTt0aGlzLmRpc2FibGVIb3JpeiYmdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy5ob3Jpeix0aGlzLmRpc2FibGVIb3JpeixcImhvcml6XCIpfTtvYi5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKGEpe3RoaXMudmVydC5zY3JvbGxUb3AhPWEmJih0aGlzLnZlcnQuc2Nyb2xsVG9wPWEpO3RoaXMuZGlzYWJsZVZlcnQmJnRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMudmVydCx0aGlzLmRpc2FibGVWZXJ0LFwidmVydFwiKX07b2IucHJvdG90eXBlLnplcm9XaWR0aEhhY2s9ZnVuY3Rpb24oKXt0aGlzLmhvcml6LnN0eWxlLmhlaWdodD10aGlzLnZlcnQuc3R5bGUud2lkdGg9eWEmJiFFaD9cIjEycHhcIjpcIjE4cHhcIjt0aGlzLmhvcml6LnN0eWxlLnZpc2liaWxpdHk9dGhpcy52ZXJ0LnN0eWxlLnZpc2liaWxpdHk9XG5cImhpZGRlblwiO3RoaXMuZGlzYWJsZUhvcml6PW5ldyBYYTt0aGlzLmRpc2FibGVWZXJ0PW5ldyBYYX07b2IucHJvdG90eXBlLmVuYWJsZVplcm9XaWR0aEJhcj1mdW5jdGlvbihhLGIsZCl7ZnVuY3Rpb24gYygpe3ZhciBlPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KFwidmVydFwiPT1kP2RvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5yaWdodC0xLChlLnRvcCtlLmJvdHRvbSkvMik6ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCgoZS5yaWdodCtlLmxlZnQpLzIsZS5ib3R0b20tMSkpIT1hP2Euc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiOmIuc2V0KDFFMyxjKX1hLnN0eWxlLnZpc2liaWxpdHk9XCJcIjtiLnNldCgxRTMsYyl9O29iLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaG9yaXoucGFyZW50Tm9kZTthLnJlbW92ZUNoaWxkKHRoaXMuaG9yaXopO2EucmVtb3ZlQ2hpbGQodGhpcy52ZXJ0KX07dmFyIHJjPWZ1bmN0aW9uKCl7fTtyYy5wcm90b3R5cGUudXBkYXRlPVxuZnVuY3Rpb24oKXtyZXR1cm57Ym90dG9tOjAscmlnaHQ6MH19O3JjLnByb3RvdHlwZS5zZXRTY3JvbGxMZWZ0PWZ1bmN0aW9uKCl7fTtyYy5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKCl7fTtyYy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt9O3ZhciBwZj17XCJuYXRpdmVcIjpvYixcIm51bGxcIjpyY30sVWc9MCxQYz1mdW5jdGlvbihhLGIsZCl7dmFyIGM9YS5kaXNwbGF5O3RoaXMudmlld3BvcnQ9Yjt0aGlzLnZpc2libGU9TWMoYyxhLmRvYyxiKTt0aGlzLmVkaXRvcklzSGlkZGVuPSFjLndyYXBwZXIub2Zmc2V0V2lkdGg7dGhpcy53cmFwcGVySGVpZ2h0PWMud3JhcHBlci5jbGllbnRIZWlnaHQ7dGhpcy53cmFwcGVyV2lkdGg9Yy53cmFwcGVyLmNsaWVudFdpZHRoO3RoaXMub2xkRGlzcGxheVdpZHRoPWNiKGEpO3RoaXMuZm9yY2U9ZDt0aGlzLmRpbXM9R2QoYSk7dGhpcy5ldmVudHM9W119O1BjLnByb3RvdHlwZS5zaWduYWw9ZnVuY3Rpb24oYSxiKXt4YShhLGIpJiZcbnRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKX07UGMucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy5ldmVudHMubGVuZ3RoO2ErKylXLmFwcGx5KG51bGwsdGhpcy5ldmVudHNbYV0pfTt2YXIgUWM9MCxOYT1udWxsO0c/TmE9LS41MzpNYT9OYT0xNTpRYT9OYT0tLjc6YWQmJihOYT0tMS8zKTt2YXIgdmE9ZnVuY3Rpb24oYSxiKXt0aGlzLnJhbmdlcz1hO3RoaXMucHJpbUluZGV4PWJ9O3ZhLnByb3RvdHlwZS5wcmltYXJ5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZ2VzW3RoaXMucHJpbUluZGV4XX07dmEucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihhKXtpZihhPT10aGlzKXJldHVybiEwO2lmKGEucHJpbUluZGV4IT10aGlzLnByaW1JbmRleHx8YS5yYW5nZXMubGVuZ3RoIT10aGlzLnJhbmdlcy5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBiPTA7Yjx0aGlzLnJhbmdlcy5sZW5ndGg7YisrKXt2YXIgZD10aGlzLnJhbmdlc1tiXSxjPWEucmFuZ2VzW2JdO1xuaWYoIXJkKGQuYW5jaG9yLGMuYW5jaG9yKXx8IXJkKGQuaGVhZCxjLmhlYWQpKXJldHVybiExfXJldHVybiEwfTt2YS5wcm90b3R5cGUuZGVlcENvcHk9ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYj0wO2I8dGhpcy5yYW5nZXMubGVuZ3RoO2IrKylhW2JdPW5ldyBJKHNkKHRoaXMucmFuZ2VzW2JdLmFuY2hvciksc2QodGhpcy5yYW5nZXNbYl0uaGVhZCkpO3JldHVybiBuZXcgdmEoYSx0aGlzLnByaW1JbmRleCl9O3ZhLnByb3RvdHlwZS5zb21ldGhpbmdTZWxlY3RlZD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy5yYW5nZXMubGVuZ3RoO2ErKylpZighdGhpcy5yYW5nZXNbYV0uZW1wdHkoKSlyZXR1cm4hMDtyZXR1cm4hMX07dmEucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7Ynx8KGI9YSk7Zm9yKHZhciBkPTA7ZDx0aGlzLnJhbmdlcy5sZW5ndGg7ZCsrKXt2YXIgYz10aGlzLnJhbmdlc1tkXTtpZigwPD1CKGIsYy5mcm9tKCkpJiYwPj1CKGEsYy50bygpKSlyZXR1cm4gZH1yZXR1cm4tMX07XG52YXIgST1mdW5jdGlvbihhLGIpe3RoaXMuYW5jaG9yPWE7dGhpcy5oZWFkPWJ9O0kucHJvdG90eXBlLmZyb209ZnVuY3Rpb24oKXtyZXR1cm4gQmModGhpcy5hbmNob3IsdGhpcy5oZWFkKX07SS5wcm90b3R5cGUudG89ZnVuY3Rpb24oKXtyZXR1cm4gQWModGhpcy5hbmNob3IsdGhpcy5oZWFkKX07SS5wcm90b3R5cGUuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmxpbmU9PXRoaXMuYW5jaG9yLmxpbmUmJnRoaXMuaGVhZC5jaD09dGhpcy5hbmNob3IuY2h9O2VjLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZXMubGVuZ3RofSxyZW1vdmVJbm5lcjpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1hLGM9YStiO2Q8YzsrK2Qpe3ZhciBlPXRoaXMubGluZXNbZF07dGhpcy5oZWlnaHQtPWUuaGVpZ2h0O3ZhciBmPWU7Zi5wYXJlbnQ9bnVsbDtHZShmKTthYShlLFwiZGVsZXRlXCIpfXRoaXMubGluZXMuc3BsaWNlKGEsYil9LGNvbGxhcHNlOmZ1bmN0aW9uKGEpe2EucHVzaC5hcHBseShhLFxudGhpcy5saW5lcyl9LGluc2VydElubmVyOmZ1bmN0aW9uKGEsYixkKXt0aGlzLmhlaWdodCs9ZDt0aGlzLmxpbmVzPXRoaXMubGluZXMuc2xpY2UoMCxhKS5jb25jYXQoYikuY29uY2F0KHRoaXMubGluZXMuc2xpY2UoYSkpO2ZvcihhPTA7YTxiLmxlbmd0aDsrK2EpYlthXS5wYXJlbnQ9dGhpc30saXRlck46ZnVuY3Rpb24oYSxiLGQpe2ZvcihiPWErYjthPGI7KythKWlmKGQodGhpcy5saW5lc1thXSkpcmV0dXJuITB9fTtmYy5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKGEsYil7dGhpcy5zaXplLT1iO2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytkKXt2YXIgYz10aGlzLmNoaWxkcmVuW2RdLGU9Yy5jaHVua1NpemUoKTtpZihhPGUpe3ZhciBmPU1hdGgubWluKGIsZS1hKSxnPWMuaGVpZ2h0O2MucmVtb3ZlSW5uZXIoYSxmKTt0aGlzLmhlaWdodC09Zy1jLmhlaWdodDtlPT1mJiYodGhpcy5jaGlsZHJlbi5zcGxpY2UoZC0tLFxuMSksYy5wYXJlbnQ9bnVsbCk7aWYoMD09KGItPWYpKWJyZWFrO2E9MH1lbHNlIGEtPWV9MjU+dGhpcy5zaXplLWImJigxPHRoaXMuY2hpbGRyZW4ubGVuZ3RofHwhKHRoaXMuY2hpbGRyZW5bMF1pbnN0YW5jZW9mIGVjKSkmJihhPVtdLHRoaXMuY29sbGFwc2UoYSksdGhpcy5jaGlsZHJlbj1bbmV3IGVjKGEpXSx0aGlzLmNoaWxkcmVuWzBdLnBhcmVudD10aGlzKX0sY29sbGFwc2U6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7Yjx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK2IpdGhpcy5jaGlsZHJlbltiXS5jb2xsYXBzZShhKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24oYSxiLGQpe3RoaXMuc2l6ZSs9Yi5sZW5ndGg7dGhpcy5oZWlnaHQrPWQ7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK2Mpe3ZhciBlPXRoaXMuY2hpbGRyZW5bY10sZj1lLmNodW5rU2l6ZSgpO2lmKGE8PWYpe2UuaW5zZXJ0SW5uZXIoYSxiLGQpO2lmKGUubGluZXMmJjUwPGUubGluZXMubGVuZ3RoKXtmb3IoYj1cbmE9ZS5saW5lcy5sZW5ndGglMjUrMjU7YjxlLmxpbmVzLmxlbmd0aDspZD1uZXcgZWMoZS5saW5lcy5zbGljZShiLGIrPTI1KSksZS5oZWlnaHQtPWQuaGVpZ2h0LHRoaXMuY2hpbGRyZW4uc3BsaWNlKCsrYywwLGQpLGQucGFyZW50PXRoaXM7ZS5saW5lcz1lLmxpbmVzLnNsaWNlKDAsYSk7dGhpcy5tYXliZVNwaWxsKCl9YnJlYWt9YS09Zn19LG1heWJlU3BpbGw6ZnVuY3Rpb24oKXtpZighKDEwPj10aGlzLmNoaWxkcmVuLmxlbmd0aCkpe3ZhciBhPXRoaXM7ZG97dmFyIGI9YS5jaGlsZHJlbi5zcGxpY2UoYS5jaGlsZHJlbi5sZW5ndGgtNSw1KTtiPW5ldyBmYyhiKTtpZihhLnBhcmVudCl7YS5zaXplLT1iLnNpemU7YS5oZWlnaHQtPWIuaGVpZ2h0O3ZhciBkPWVhKGEucGFyZW50LmNoaWxkcmVuLGEpO2EucGFyZW50LmNoaWxkcmVuLnNwbGljZShkKzEsMCxiKX1lbHNlIGQ9bmV3IGZjKGEuY2hpbGRyZW4pLGQucGFyZW50PWEsYS5jaGlsZHJlbj1bZCxiXSxhPWQ7Yi5wYXJlbnQ9YS5wYXJlbnR9d2hpbGUoMTA8XG5hLmNoaWxkcmVuLmxlbmd0aCk7YS5wYXJlbnQubWF5YmVTcGlsbCgpfX0saXRlck46ZnVuY3Rpb24oYSxiLGQpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytjKXt2YXIgZT10aGlzLmNoaWxkcmVuW2NdLGY9ZS5jaHVua1NpemUoKTtpZihhPGYpe2Y9TWF0aC5taW4oYixmLWEpO2lmKGUuaXRlck4oYSxmLGQpKXJldHVybiEwO2lmKDA9PShiLT1mKSlicmVhazthPTB9ZWxzZSBhLT1mfX19O3ZhciBnYz1mdW5jdGlvbihhLGIsZCl7aWYoZClmb3IodmFyIGMgaW4gZClkLmhhc093blByb3BlcnR5KGMpJiYodGhpc1tjXT1kW2NdKTt0aGlzLmRvYz1hO3RoaXMubm9kZT1ifTtnYy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRvYy5jbSxiPXRoaXMubGluZS53aWRnZXRzLGQ9dGhpcy5saW5lLGM9TihkKTtpZihudWxsIT1jJiZiKXtmb3IodmFyIGU9MDtlPGIubGVuZ3RoOysrZSliW2VdPT10aGlzJiZiLnNwbGljZShlLS0sMSk7Yi5sZW5ndGh8fFxuKGQud2lkZ2V0cz1udWxsKTt2YXIgZj1UYih0aGlzKTtFYShkLE1hdGgubWF4KDAsZC5oZWlnaHQtZikpO2EmJihyYShhLGZ1bmN0aW9uKCl7dmFyIGc9LWY7R2EoZCk8KGEuY3VyT3AmJmEuY3VyT3Auc2Nyb2xsVG9wfHxhLmRvYy5zY3JvbGxUb3ApJiZOYyhhLGcpO1NhKGEsYyxcIndpZGdldFwiKX0pLGFhKGEsXCJsaW5lV2lkZ2V0Q2xlYXJlZFwiLGEsdGhpcyxjKSl9fTtnYy5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLmhlaWdodCxkPXRoaXMuZG9jLmNtLGM9dGhpcy5saW5lO3RoaXMuaGVpZ2h0PW51bGw7dmFyIGU9VGIodGhpcyktYjtlJiYoUGEodGhpcy5kb2MsYyl8fEVhKGMsYy5oZWlnaHQrZSksZCYmcmEoZCxmdW5jdGlvbigpe2QuY3VyT3AuZm9yY2VVcGRhdGU9ITA7R2EoYyk8KGQuY3VyT3AmJmQuY3VyT3Auc2Nyb2xsVG9wfHxkLmRvYy5zY3JvbGxUb3ApJiZOYyhkLGUpO2FhKGQsXCJsaW5lV2lkZ2V0Q2hhbmdlZFwiLGQsYSxOKGMpKX0pKX07XG5wYihnYyk7dmFyIFRmPTAsVmE9ZnVuY3Rpb24oYSxiKXt0aGlzLmxpbmVzPVtdO3RoaXMudHlwZT1iO3RoaXMuZG9jPWE7dGhpcy5pZD0rK1RmfTtWYS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dmFyIGE9dGhpcy5kb2MuY20sYj1hJiYhYS5jdXJPcDtiJiZsYihhKTtpZih4YSh0aGlzLFwiY2xlYXJcIikpe3ZhciBkPXRoaXMuZmluZCgpO2QmJmFhKHRoaXMsXCJjbGVhclwiLGQuZnJvbSxkLnRvKX1mb3IodmFyIGM9ZD1udWxsLGU9MDtlPHRoaXMubGluZXMubGVuZ3RoOysrZSl7dmFyIGY9dGhpcy5saW5lc1tlXSxnPVBiKGYubWFya2VkU3BhbnMsdGhpcyk7YSYmIXRoaXMuY29sbGFwc2VkP1NhKGEsTihmKSxcInRleHRcIik6YSYmKG51bGwhPWcudG8mJihjPU4oZikpLG51bGwhPWcuZnJvbSYmKGQ9TihmKSkpO2Zvcih2YXIgaD1mLGs9dm9pZCAwLGw9Zi5tYXJrZWRTcGFucyxtPWcsbj0wO248bC5sZW5ndGg7KytuKWxbbl0hPW0mJihrfHxcbihrPVtdKSkucHVzaChsW25dKTtoLm1hcmtlZFNwYW5zPWs7bnVsbD09Zy5mcm9tJiZ0aGlzLmNvbGxhcHNlZCYmIVBhKHRoaXMuZG9jLGYpJiZhJiZFYShmLHZiKGEuZGlzcGxheSkpfWlmKGEmJnRoaXMuY29sbGFwc2VkJiYhYS5vcHRpb25zLmxpbmVXcmFwcGluZylmb3IoZT0wO2U8dGhpcy5saW5lcy5sZW5ndGg7KytlKWY9emEodGhpcy5saW5lc1tlXSksZz1FYyhmKSxnPmEuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYoYS5kaXNwbGF5Lm1heExpbmU9ZixhLmRpc3BsYXkubWF4TGluZUxlbmd0aD1nLGEuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCk7bnVsbCE9ZCYmYSYmdGhpcy5jb2xsYXBzZWQmJm1hKGEsZCxjKzEpO3RoaXMubGluZXMubGVuZ3RoPTA7dGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMDt0aGlzLmF0b21pYyYmdGhpcy5kb2MuY2FudEVkaXQmJih0aGlzLmRvYy5jYW50RWRpdD0hMSxhJiZKZihhLmRvYykpO2EmJmFhKGEsXCJtYXJrZXJDbGVhcmVkXCIsYSx0aGlzLGQsXG5jKTtiJiZtYihhKTt0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuY2xlYXIoKX19O1ZhLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKGEsYil7bnVsbD09YSYmXCJib29rbWFya1wiPT10aGlzLnR5cGUmJihhPTEpO2Zvcih2YXIgZCxjLGU9MDtlPHRoaXMubGluZXMubGVuZ3RoOysrZSl7dmFyIGY9dGhpcy5saW5lc1tlXSxnPVBiKGYubWFya2VkU3BhbnMsdGhpcyk7aWYobnVsbCE9Zy5mcm9tJiYoZD10KGI/ZjpOKGYpLGcuZnJvbSksLTE9PWEpKXJldHVybiBkO2lmKG51bGwhPWcudG8mJihjPXQoYj9mOk4oZiksZy50byksMT09YSkpcmV0dXJuIGN9cmV0dXJuIGQmJntmcm9tOmQsdG86Y319O1ZhLnByb3RvdHlwZS5jaGFuZ2VkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMuZmluZCgtMSwhMCksZD10aGlzLGM9dGhpcy5kb2MuY207YiYmYyYmcmEoYyxmdW5jdGlvbigpe3ZhciBlPWIubGluZSxmPU4oYi5saW5lKTtpZihmPUZkKGMsZikpWGUoZiksYy5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPVxuYy5jdXJPcC5mb3JjZVVwZGF0ZT0hMDtjLmN1ck9wLnVwZGF0ZU1heExpbmU9ITA7UGEoZC5kb2MsZSl8fG51bGw9PWQuaGVpZ2h0fHwoZj1kLmhlaWdodCxkLmhlaWdodD1udWxsLChmPVRiKGQpLWYpJiZFYShlLGUuaGVpZ2h0K2YpKTthYShjLFwibWFya2VyQ2hhbmdlZFwiLGMsYSl9KX07VmEucHJvdG90eXBlLmF0dGFjaExpbmU9ZnVuY3Rpb24oYSl7aWYoIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGI9dGhpcy5kb2MuY20uY3VyT3A7Yi5tYXliZUhpZGRlbk1hcmtlcnMmJi0xIT1lYShiLm1heWJlSGlkZGVuTWFya2Vycyx0aGlzKXx8KGIubWF5YmVVbmhpZGRlbk1hcmtlcnN8fChiLm1heWJlVW5oaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX10aGlzLmxpbmVzLnB1c2goYSl9O1ZhLnByb3RvdHlwZS5kZXRhY2hMaW5lPWZ1bmN0aW9uKGEpe3RoaXMubGluZXMuc3BsaWNlKGVhKHRoaXMubGluZXMsYSksMSk7IXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSYmXG4oYT10aGlzLmRvYy5jbS5jdXJPcCwoYS5tYXliZUhpZGRlbk1hcmtlcnN8fChhLm1heWJlSGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcykpfTtwYihWYSk7dmFyIGhjPWZ1bmN0aW9uKGEsYil7dGhpcy5tYXJrZXJzPWE7dGhpcy5wcmltYXJ5PWI7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYilhW2JdLnBhcmVudD10aGlzfTtoYy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMDtmb3IodmFyIGE9MDthPHRoaXMubWFya2Vycy5sZW5ndGg7KythKXRoaXMubWFya2Vyc1thXS5jbGVhcigpO2FhKHRoaXMsXCJjbGVhclwiKX19O2hjLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucHJpbWFyeS5maW5kKGEsYil9O3BiKGhjKTt2YXIgSGg9MCxvYT1mdW5jdGlvbihhLGIsZCxjLGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG9hKSlyZXR1cm4gbmV3IG9hKGEsYixkLGMsZSk7bnVsbD09XG5kJiYoZD0wKTtmYy5jYWxsKHRoaXMsW25ldyBlYyhbbmV3IHpiKFwiXCIsbnVsbCldKV0pO3RoaXMuZmlyc3Q9ZDt0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbExlZnQ9MDt0aGlzLmNhbnRFZGl0PSExO3RoaXMuY2xlYW5HZW5lcmF0aW9uPTE7dGhpcy5tb2RlRnJvbnRpZXI9dGhpcy5oaWdobGlnaHRGcm9udGllcj1kO2Q9dChkLDApO3RoaXMuc2VsPU9hKGQpO3RoaXMuaGlzdG9yeT1uZXcgUmMobnVsbCk7dGhpcy5pZD0rK0hoO3RoaXMubW9kZU9wdGlvbj1iO3RoaXMubGluZVNlcD1jO3RoaXMuZGlyZWN0aW9uPVwicnRsXCI9PWU/XCJydGxcIjpcImx0clwiO3RoaXMuZXh0ZW5kPSExO1wic3RyaW5nXCI9PXR5cGVvZiBhJiYoYT10aGlzLnNwbGl0TGluZXMoYSkpO2FlKHRoaXMse2Zyb206ZCx0bzpkLHRleHQ6YX0pO2RhKHRoaXMsT2EoZCksSWEpfTtvYS5wcm90b3R5cGU9cWUoZmMucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpvYSxpdGVyOmZ1bmN0aW9uKGEsYixkKXtkP3RoaXMuaXRlck4oYS10aGlzLmZpcnN0LFxuYi1hLGQpOnRoaXMuaXRlck4odGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSxhKX0saW5zZXJ0OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkPTAsYz0wO2M8Yi5sZW5ndGg7KytjKWQrPWJbY10uaGVpZ2h0O3RoaXMuaW5zZXJ0SW5uZXIoYS10aGlzLmZpcnN0LGIsZCl9LHJlbW92ZTpmdW5jdGlvbihhLGIpe3RoaXMucmVtb3ZlSW5uZXIoYS10aGlzLmZpcnN0LGIpfSxnZXRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj1wZCh0aGlzLHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUpO3JldHVybiExPT09YT9iOmIuam9pbihhfHx0aGlzLmxpbmVTZXBhcmF0b3IoKSl9LHNldFZhbHVlOmNhKGZ1bmN0aW9uKGEpe3ZhciBiPXQodGhpcy5maXJzdCwwKSxkPXRoaXMuZmlyc3QrdGhpcy5zaXplLTE7Q2IodGhpcyx7ZnJvbTpiLHRvOnQoZCx3KHRoaXMsZCkudGV4dC5sZW5ndGgpLHRleHQ6dGhpcy5zcGxpdExpbmVzKGEpLG9yaWdpbjpcInNldFZhbHVlXCIsZnVsbDohMH0sITApO3RoaXMuY20mJlxuV2IodGhpcy5jbSwwLDApO2RhKHRoaXMsT2EoYiksSWEpfSkscmVwbGFjZVJhbmdlOmZ1bmN0aW9uKGEsYixkLGMpe2I9Qyh0aGlzLGIpO2Q9ZD9DKHRoaXMsZCk6YjtEYih0aGlzLGEsYixkLGMpfSxnZXRSYW5nZTpmdW5jdGlvbihhLGIsZCl7YT1hYih0aGlzLEModGhpcyxhKSxDKHRoaXMsYikpO3JldHVybiExPT09ZD9hOlwiXCI9PT1kP2Euam9pbihcIlwiKTphLmpvaW4oZHx8dGhpcy5saW5lU2VwYXJhdG9yKCkpfSxnZXRMaW5lOmZ1bmN0aW9uKGEpe3JldHVybihhPXRoaXMuZ2V0TGluZUhhbmRsZShhKSkmJmEudGV4dH0sZ2V0TGluZUhhbmRsZTpmdW5jdGlvbihhKXtpZihOYih0aGlzLGEpKXJldHVybiB3KHRoaXMsYSl9LGdldExpbmVOdW1iZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIE4oYSl9LGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDpmdW5jdGlvbihhKXtcIm51bWJlclwiPT10eXBlb2YgYSYmKGE9dyh0aGlzLGEpKTtyZXR1cm4gemEoYSl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LFxuZmlyc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3R9LGxhc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3QrdGhpcy5zaXplLTF9LGNsaXBQb3M6ZnVuY3Rpb24oYSl7cmV0dXJuIEModGhpcyxhKX0sZ2V0Q3Vyc29yOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc2VsLnByaW1hcnkoKTtyZXR1cm4gbnVsbD09YXx8XCJoZWFkXCI9PWE/Yi5oZWFkOlwiYW5jaG9yXCI9PWE/Yi5hbmNob3I6XCJlbmRcIj09YXx8XCJ0b1wiPT1hfHwhMT09PWE/Yi50bygpOmIuZnJvbSgpfSxsaXN0U2VsZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbC5yYW5nZXN9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCl9LHNldEN1cnNvcjpjYShmdW5jdGlvbihhLGIsZCl7YT1DKHRoaXMsXCJudW1iZXJcIj09dHlwZW9mIGE/dChhLGJ8fDApOmEpO2RhKHRoaXMsT2EoYSxudWxsKSxkKX0pLHNldFNlbGVjdGlvbjpjYShmdW5jdGlvbihhLFxuYixkKXt2YXIgYz1DKHRoaXMsYSk7YT1DKHRoaXMsYnx8YSk7ZGEodGhpcyxPYShjLGEpLGQpfSksZXh0ZW5kU2VsZWN0aW9uOmNhKGZ1bmN0aW9uKGEsYixkKXtUYyh0aGlzLEModGhpcyxhKSxiJiZDKHRoaXMsYiksZCl9KSxleHRlbmRTZWxlY3Rpb25zOmNhKGZ1bmN0aW9uKGEsYil7RmYodGhpcyx4ZSh0aGlzLGEpLGIpfSksZXh0ZW5kU2VsZWN0aW9uc0J5OmNhKGZ1bmN0aW9uKGEsYil7YT13Yyh0aGlzLnNlbC5yYW5nZXMsYSk7RmYodGhpcyx4ZSh0aGlzLGEpLGIpfSksc2V0U2VsZWN0aW9uczpjYShmdW5jdGlvbihhLGIsZCl7aWYoYS5sZW5ndGgpe2Zvcih2YXIgYz1bXSxlPTA7ZTxhLmxlbmd0aDtlKyspY1tlXT1uZXcgSShDKHRoaXMsYVtlXS5hbmNob3IpLEModGhpcyxhW2VdLmhlYWR8fGFbZV0uYW5jaG9yKSk7bnVsbD09YiYmKGI9TWF0aC5taW4oYS5sZW5ndGgtMSx0aGlzLnNlbC5wcmltSW5kZXgpKTtkYSh0aGlzLERhKHRoaXMuY20sYyxiKSxkKX19KSxhZGRTZWxlY3Rpb246Y2EoZnVuY3Rpb24oYSxcbmIsZCl7dmFyIGM9dGhpcy5zZWwucmFuZ2VzLnNsaWNlKDApO2MucHVzaChuZXcgSShDKHRoaXMsYSksQyh0aGlzLGJ8fGEpKSk7ZGEodGhpcyxEYSh0aGlzLmNtLGMsYy5sZW5ndGgtMSksZCl9KSxnZXRTZWxlY3Rpb246ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuc2VsLnJhbmdlcyxkLGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGU9YWIodGhpcyxiW2NdLmZyb20oKSxiW2NdLnRvKCkpO2Q9ZD9kLmNvbmNhdChlKTplfXJldHVybiExPT09YT9kOmQuam9pbihhfHx0aGlzLmxpbmVTZXBhcmF0b3IoKSl9LGdldFNlbGVjdGlvbnM6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGQ9dGhpcy5zZWwucmFuZ2VzLGM9MDtjPGQubGVuZ3RoO2MrKyl7dmFyIGU9YWIodGhpcyxkW2NdLmZyb20oKSxkW2NdLnRvKCkpOyExIT09YSYmKGU9ZS5qb2luKGF8fHRoaXMubGluZVNlcGFyYXRvcigpKSk7YltjXT1lfXJldHVybiBifSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKGEsYixkKXtmb3IodmFyIGM9XG5bXSxlPTA7ZTx0aGlzLnNlbC5yYW5nZXMubGVuZ3RoO2UrKyljW2VdPWE7dGhpcy5yZXBsYWNlU2VsZWN0aW9ucyhjLGIsZHx8XCIraW5wdXRcIil9LHJlcGxhY2VTZWxlY3Rpb25zOmNhKGZ1bmN0aW9uKGEsYixkKXtmb3IodmFyIGM9W10sZT10aGlzLnNlbCxmPTA7ZjxlLnJhbmdlcy5sZW5ndGg7ZisrKXt2YXIgZz1lLnJhbmdlc1tmXTtjW2ZdPXtmcm9tOmcuZnJvbSgpLHRvOmcudG8oKSx0ZXh0OnRoaXMuc3BsaXRMaW5lcyhhW2ZdKSxvcmlnaW46ZH19aWYoYT1iJiZcImVuZFwiIT1iKXthPVtdO2U9ZD10KHRoaXMuZmlyc3QsMCk7Zm9yKGY9MDtmPGMubGVuZ3RoO2YrKyl7dmFyIGg9Y1tmXTtnPXhmKGguZnJvbSxkLGUpO3ZhciBrPXhmKFRhKGgpLGQsZSk7ZD1oLnRvO2U9aztcImFyb3VuZFwiPT1iPyhoPXRoaXMuc2VsLnJhbmdlc1tmXSxoPTA+QihoLmhlYWQsaC5hbmNob3IpLGFbZl09bmV3IEkoaD9rOmcsaD9nOmspKTphW2ZdPW5ldyBJKGcsZyl9YT1uZXcgdmEoYSx0aGlzLnNlbC5wcmltSW5kZXgpfWI9XG5hO2ZvcihhPWMubGVuZ3RoLTE7MDw9YTthLS0pQ2IodGhpcyxjW2FdKTtiP0dmKHRoaXMsYik6dGhpcy5jbSYmeGIodGhpcy5jbSl9KSx1bmRvOmNhKGZ1bmN0aW9uKCl7V2ModGhpcyxcInVuZG9cIil9KSxyZWRvOmNhKGZ1bmN0aW9uKCl7V2ModGhpcyxcInJlZG9cIil9KSx1bmRvU2VsZWN0aW9uOmNhKGZ1bmN0aW9uKCl7V2ModGhpcyxcInVuZG9cIiwhMCl9KSxyZWRvU2VsZWN0aW9uOmNhKGZ1bmN0aW9uKCl7V2ModGhpcyxcInJlZG9cIiwhMCl9KSxzZXRFeHRlbmRpbmc6ZnVuY3Rpb24oYSl7dGhpcy5leHRlbmQ9YX0sZ2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXh0ZW5kfSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLmhpc3RvcnksYj0wLGQ9MCxjPTA7YzxhLmRvbmUubGVuZ3RoO2MrKylhLmRvbmVbY10ucmFuZ2VzfHwrK2I7Zm9yKGM9MDtjPGEudW5kb25lLmxlbmd0aDtjKyspYS51bmRvbmVbY10ucmFuZ2VzfHwrK2Q7cmV0dXJue3VuZG86YixcbnJlZG86ZH19LGNsZWFySGlzdG9yeTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5oaXN0b3J5PW5ldyBSYyh0aGlzLmhpc3RvcnkpO1VhKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIGIuaGlzdG9yeT1hLmhpc3Rvcnl9LCEwKX0sbWFya0NsZWFuOmZ1bmN0aW9uKCl7dGhpcy5jbGVhbkdlbmVyYXRpb249dGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCEwKX0sY2hhbmdlR2VuZXJhdGlvbjpmdW5jdGlvbihhKXthJiYodGhpcy5oaXN0b3J5Lmxhc3RPcD10aGlzLmhpc3RvcnkubGFzdFNlbE9wPXRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luPW51bGwpO3JldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbn0saXNDbGVhbjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb249PShhfHx0aGlzLmNsZWFuR2VuZXJhdGlvbil9LGdldEhpc3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpBYih0aGlzLmhpc3RvcnkuZG9uZSksdW5kb25lOkFiKHRoaXMuaGlzdG9yeS51bmRvbmUpfX0sXG5zZXRIaXN0b3J5OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaGlzdG9yeT1uZXcgUmModGhpcy5oaXN0b3J5KTtiLmRvbmU9QWIoYS5kb25lLnNsaWNlKDApLG51bGwsITApO2IudW5kb25lPUFiKGEudW5kb25lLnNsaWNlKDApLG51bGwsITApfSxzZXRHdXR0ZXJNYXJrZXI6Y2EoZnVuY3Rpb24oYSxiLGQpe3JldHVybiBkYyh0aGlzLGEsXCJndXR0ZXJcIixmdW5jdGlvbihjKXt2YXIgZT1jLmd1dHRlck1hcmtlcnN8fChjLmd1dHRlck1hcmtlcnM9e30pO2VbYl09ZDshZCYmcmUoZSkmJihjLmd1dHRlck1hcmtlcnM9bnVsbCk7cmV0dXJuITB9KX0pLGNsZWFyR3V0dGVyOmNhKGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7dGhpcy5pdGVyKGZ1bmN0aW9uKGQpe2QuZ3V0dGVyTWFya2VycyYmZC5ndXR0ZXJNYXJrZXJzW2FdJiZkYyhiLGQsXCJndXR0ZXJcIixmdW5jdGlvbigpe2QuZ3V0dGVyTWFya2Vyc1thXT1udWxsO3JlKGQuZ3V0dGVyTWFya2VycykmJihkLmd1dHRlck1hcmtlcnM9bnVsbCk7XG5yZXR1cm4hMH0pfSl9KSxsaW5lSW5mbzpmdW5jdGlvbihhKXtpZihcIm51bWJlclwiPT10eXBlb2YgYSl7aWYoIU5iKHRoaXMsYSkpcmV0dXJuIG51bGw7dmFyIGI9YTthPXcodGhpcyxhKTtpZighYSlyZXR1cm4gbnVsbH1lbHNlIGlmKGI9TihhKSxudWxsPT1iKXJldHVybiBudWxsO3JldHVybntsaW5lOmIsaGFuZGxlOmEsdGV4dDphLnRleHQsZ3V0dGVyTWFya2VyczphLmd1dHRlck1hcmtlcnMsdGV4dENsYXNzOmEudGV4dENsYXNzLGJnQ2xhc3M6YS5iZ0NsYXNzLHdyYXBDbGFzczphLndyYXBDbGFzcyx3aWRnZXRzOmEud2lkZ2V0c319LGFkZExpbmVDbGFzczpjYShmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGRjKHRoaXMsYSxcImd1dHRlclwiPT1iP1wiZ3V0dGVyXCI6XCJjbGFzc1wiLGZ1bmN0aW9uKGMpe3ZhciBlPVwidGV4dFwiPT1iP1widGV4dENsYXNzXCI6XCJiYWNrZ3JvdW5kXCI9PWI/XCJiZ0NsYXNzXCI6XCJndXR0ZXJcIj09Yj9cImd1dHRlckNsYXNzXCI6XCJ3cmFwQ2xhc3NcIjtpZihjW2VdKXtpZih5KGQpLnRlc3QoY1tlXSkpcmV0dXJuITE7XG5jW2VdKz1cIiBcIitkfWVsc2UgY1tlXT1kO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6Y2EoZnVuY3Rpb24oYSxiLGQpe3JldHVybiBkYyh0aGlzLGEsXCJndXR0ZXJcIj09Yj9cImd1dHRlclwiOlwiY2xhc3NcIixmdW5jdGlvbihjKXt2YXIgZT1cInRleHRcIj09Yj9cInRleHRDbGFzc1wiOlwiYmFja2dyb3VuZFwiPT1iP1wiYmdDbGFzc1wiOlwiZ3V0dGVyXCI9PWI/XCJndXR0ZXJDbGFzc1wiOlwid3JhcENsYXNzXCIsZj1jW2VdO2lmKGYpaWYobnVsbD09ZCljW2VdPW51bGw7ZWxzZXt2YXIgZz1mLm1hdGNoKHkoZCkpO2lmKCFnKXJldHVybiExO3ZhciBoPWcuaW5kZXgrZ1swXS5sZW5ndGg7Y1tlXT1mLnNsaWNlKDAsZy5pbmRleCkrKGcuaW5kZXgmJmghPWYubGVuZ3RoP1wiIFwiOlwiXCIpK2Yuc2xpY2UoaCl8fG51bGx9ZWxzZSByZXR1cm4hMTtyZXR1cm4hMH0pfSksYWRkTGluZVdpZGdldDpjYShmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGNoKHRoaXMsYSxiLGQpfSkscmVtb3ZlTGluZVdpZGdldDpmdW5jdGlvbihhKXthLmNsZWFyKCl9LFxubWFya1RleHQ6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBFYih0aGlzLEModGhpcyxhKSxDKHRoaXMsYiksZCxkJiZkLnR5cGV8fFwicmFuZ2VcIil9LHNldEJvb2ttYXJrOmZ1bmN0aW9uKGEsYil7Yj17cmVwbGFjZWRXaXRoOmImJihudWxsPT1iLm5vZGVUeXBlP2Iud2lkZ2V0OmIpLGluc2VydExlZnQ6YiYmYi5pbnNlcnRMZWZ0LGNsZWFyV2hlbkVtcHR5OiExLHNoYXJlZDpiJiZiLnNoYXJlZCxoYW5kbGVNb3VzZUV2ZW50czpiJiZiLmhhbmRsZU1vdXNlRXZlbnRzfTthPUModGhpcyxhKTtyZXR1cm4gRWIodGhpcyxhLGEsYixcImJvb2ttYXJrXCIpfSxmaW5kTWFya3NBdDpmdW5jdGlvbihhKXthPUModGhpcyxhKTt2YXIgYj1bXSxkPXcodGhpcyxhLmxpbmUpLm1hcmtlZFNwYW5zO2lmKGQpZm9yKHZhciBjPTA7YzxkLmxlbmd0aDsrK2Mpe3ZhciBlPWRbY107KG51bGw9PWUuZnJvbXx8ZS5mcm9tPD1hLmNoKSYmKG51bGw9PWUudG98fGUudG8+PWEuY2gpJiZiLnB1c2goZS5tYXJrZXIucGFyZW50fHxcbmUubWFya2VyKX1yZXR1cm4gYn0sZmluZE1hcmtzOmZ1bmN0aW9uKGEsYixkKXthPUModGhpcyxhKTtiPUModGhpcyxiKTt2YXIgYz1bXSxlPWEubGluZTt0aGlzLml0ZXIoYS5saW5lLGIubGluZSsxLGZ1bmN0aW9uKGYpe2lmKGY9Zi5tYXJrZWRTcGFucylmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9ZltnXTtudWxsIT1oLnRvJiZlPT1hLmxpbmUmJmEuY2g+PWgudG98fG51bGw9PWguZnJvbSYmZSE9YS5saW5lfHxudWxsIT1oLmZyb20mJmU9PWIubGluZSYmaC5mcm9tPj1iLmNofHxkJiYhZChoLm1hcmtlcil8fGMucHVzaChoLm1hcmtlci5wYXJlbnR8fGgubWFya2VyKX0rK2V9KTtyZXR1cm4gY30sZ2V0QWxsTWFya3M6ZnVuY3Rpb24oKXt2YXIgYT1bXTt0aGlzLml0ZXIoZnVuY3Rpb24oYil7aWYoYj1iLm1hcmtlZFNwYW5zKWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7KytkKW51bGwhPWJbZF0uZnJvbSYmYS5wdXNoKGJbZF0ubWFya2VyKX0pO3JldHVybiBhfSxwb3NGcm9tSW5kZXg6ZnVuY3Rpb24oYSl7dmFyIGIsXG5kPXRoaXMuZmlyc3QsYz10aGlzLmxpbmVTZXBhcmF0b3IoKS5sZW5ndGg7dGhpcy5pdGVyKGZ1bmN0aW9uKGUpe2U9ZS50ZXh0Lmxlbmd0aCtjO2lmKGU+YSlyZXR1cm4gYj1hLCEwO2EtPWU7KytkfSk7cmV0dXJuIEModGhpcyx0KGQsYikpfSxpbmRleEZyb21Qb3M6ZnVuY3Rpb24oYSl7YT1DKHRoaXMsYSk7dmFyIGI9YS5jaDtpZihhLmxpbmU8dGhpcy5maXJzdHx8MD5hLmNoKXJldHVybiAwO3ZhciBkPXRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDt0aGlzLml0ZXIodGhpcy5maXJzdCxhLmxpbmUsZnVuY3Rpb24oYyl7Yis9Yy50ZXh0Lmxlbmd0aCtkfSk7cmV0dXJuIGJ9LGNvcHk6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IG9hKHBkKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSksdGhpcy5tb2RlT3B0aW9uLHRoaXMuZmlyc3QsdGhpcy5saW5lU2VwLHRoaXMuZGlyZWN0aW9uKTtiLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcDtiLnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0O1xuYi5zZWw9dGhpcy5zZWw7Yi5leHRlbmQ9ITE7YSYmKGIuaGlzdG9yeS51bmRvRGVwdGg9dGhpcy5oaXN0b3J5LnVuZG9EZXB0aCxiLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpKTtyZXR1cm4gYn0sbGlua2VkRG9jOmZ1bmN0aW9uKGEpe2F8fChhPXt9KTt2YXIgYj10aGlzLmZpcnN0LGQ9dGhpcy5maXJzdCt0aGlzLnNpemU7bnVsbCE9YS5mcm9tJiZhLmZyb20+YiYmKGI9YS5mcm9tKTtudWxsIT1hLnRvJiZhLnRvPGQmJihkPWEudG8pO2I9bmV3IG9hKHBkKHRoaXMsYixkKSxhLm1vZGV8fHRoaXMubW9kZU9wdGlvbixiLHRoaXMubGluZVNlcCx0aGlzLmRpcmVjdGlvbik7YS5zaGFyZWRIaXN0JiYoYi5oaXN0b3J5PXRoaXMuaGlzdG9yeSk7KHRoaXMubGlua2VkfHwodGhpcy5saW5rZWQ9W10pKS5wdXNoKHtkb2M6YixzaGFyZWRIaXN0OmEuc2hhcmVkSGlzdH0pO2IubGlua2VkPVt7ZG9jOnRoaXMsaXNQYXJlbnQ6ITAsc2hhcmVkSGlzdDphLnNoYXJlZEhpc3R9XTthPVVmKHRoaXMpO1xuZm9yKGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGM9YVtkXSxlPWMuZmluZCgpLGY9Yi5jbGlwUG9zKGUuZnJvbSk7ZT1iLmNsaXBQb3MoZS50byk7QihmLGUpJiYoZj1FYihiLGYsZSxjLnByaW1hcnksYy5wcmltYXJ5LnR5cGUpLGMubWFya2Vycy5wdXNoKGYpLGYucGFyZW50PWMpfXJldHVybiBifSx1bmxpbmtEb2M6ZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIFUmJihhPWEuZG9jKTtpZih0aGlzLmxpbmtlZClmb3IodmFyIGI9MDtiPHRoaXMubGlua2VkLmxlbmd0aDsrK2IpaWYodGhpcy5saW5rZWRbYl0uZG9jPT1hKXt0aGlzLmxpbmtlZC5zcGxpY2UoYiwxKTthLnVubGlua0RvYyh0aGlzKTtlaChVZih0aGlzKSk7YnJlYWt9aWYoYS5oaXN0b3J5PT10aGlzLmhpc3Rvcnkpe3ZhciBkPVthLmlkXTtVYShhLGZ1bmN0aW9uKGMpe3JldHVybiBkLnB1c2goYy5pZCl9LCEwKTthLmhpc3Rvcnk9bmV3IFJjKG51bGwpO2EuaGlzdG9yeS5kb25lPUFiKHRoaXMuaGlzdG9yeS5kb25lLGQpO1xuYS5oaXN0b3J5LnVuZG9uZT1BYih0aGlzLmhpc3RvcnkudW5kb25lLGQpfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24oYSl7VWEodGhpcyxhKX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfSxzcGxpdExpbmVzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmxpbmVTZXA/YS5zcGxpdCh0aGlzLmxpbmVTZXApOm5lKGEpfSxsaW5lU2VwYXJhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZVNlcHx8XCJcXG5cIn0sc2V0RGlyZWN0aW9uOmNhKGZ1bmN0aW9uKGEpe1wicnRsXCIhPWEmJihhPVwibHRyXCIpO2EhPXRoaXMuZGlyZWN0aW9uJiYodGhpcy5kaXJlY3Rpb249YSx0aGlzLml0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGIub3JkZXI9bnVsbH0pLHRoaXMuY20mJiRnKHRoaXMuY20pKX0pfSk7b2EucHJvdG90eXBlLmVhY2hMaW5lPW9hLnByb3RvdHlwZS5pdGVyO2Zvcih2YXIgV2Y9MCxuZz0hMSxXYT17MzpcIlBhdXNlXCIsXG44OlwiQmFja3NwYWNlXCIsOTpcIlRhYlwiLDEzOlwiRW50ZXJcIiwxNjpcIlNoaWZ0XCIsMTc6XCJDdHJsXCIsMTg6XCJBbHRcIiwxOTpcIlBhdXNlXCIsMjA6XCJDYXBzTG9ja1wiLDI3OlwiRXNjXCIsMzI6XCJTcGFjZVwiLDMzOlwiUGFnZVVwXCIsMzQ6XCJQYWdlRG93blwiLDM1OlwiRW5kXCIsMzY6XCJIb21lXCIsMzc6XCJMZWZ0XCIsMzg6XCJVcFwiLDM5OlwiUmlnaHRcIiw0MDpcIkRvd25cIiw0NDpcIlByaW50U2NyblwiLDQ1OlwiSW5zZXJ0XCIsNDY6XCJEZWxldGVcIiw1OTpcIjtcIiw2MTpcIj1cIiw5MTpcIk1vZFwiLDkyOlwiTW9kXCIsOTM6XCJNb2RcIiwxMDY6XCIqXCIsMTA3OlwiPVwiLDEwOTpcIi1cIiwxMTA6XCIuXCIsMTExOlwiL1wiLDE0NTpcIlNjcm9sbExvY2tcIiwxNzM6XCItXCIsMTg2OlwiO1wiLDE4NzpcIj1cIiwxODg6XCIsXCIsMTg5OlwiLVwiLDE5MDpcIi5cIiwxOTE6XCIvXCIsMTkyOlwiYFwiLDIxOTpcIltcIiwyMjA6XCJcXFxcXCIsMjIxOlwiXVwiLDIyMjpcIidcIiwyMjQ6XCJNb2RcIiw2MzIzMjpcIlVwXCIsNjMyMzM6XCJEb3duXCIsNjMyMzQ6XCJMZWZ0XCIsNjMyMzU6XCJSaWdodFwiLDYzMjcyOlwiRGVsZXRlXCIsXG42MzI3MzpcIkhvbWVcIiw2MzI3NTpcIkVuZFwiLDYzMjc2OlwiUGFnZVVwXCIsNjMyNzc6XCJQYWdlRG93blwiLDYzMzAyOlwiSW5zZXJ0XCJ9LHNjPTA7MTA+c2M7c2MrKylXYVtzYys0OF09V2Fbc2MrOTZdPVN0cmluZyhzYyk7Zm9yKHZhciBlZD02NTs5MD49ZWQ7ZWQrKylXYVtlZF09U3RyaW5nLmZyb21DaGFyQ29kZShlZCk7Zm9yKHZhciB0Yz0xOzEyPj10Yzt0YysrKVdhW3RjKzExMV09V2FbdGMrNjMyMzVdPVwiRlwiK3RjO3ZhciBpYz17YmFzaWM6e0xlZnQ6XCJnb0NoYXJMZWZ0XCIsUmlnaHQ6XCJnb0NoYXJSaWdodFwiLFVwOlwiZ29MaW5lVXBcIixEb3duOlwiZ29MaW5lRG93blwiLEVuZDpcImdvTGluZUVuZFwiLEhvbWU6XCJnb0xpbmVTdGFydFNtYXJ0XCIsUGFnZVVwOlwiZ29QYWdlVXBcIixQYWdlRG93bjpcImdvUGFnZURvd25cIixEZWxldGU6XCJkZWxDaGFyQWZ0ZXJcIixCYWNrc3BhY2U6XCJkZWxDaGFyQmVmb3JlXCIsXCJTaGlmdC1CYWNrc3BhY2VcIjpcImRlbENoYXJCZWZvcmVcIixUYWI6XCJkZWZhdWx0VGFiXCIsXCJTaGlmdC1UYWJcIjpcImluZGVudEF1dG9cIixcbkVudGVyOlwibmV3bGluZUFuZEluZGVudFwiLEluc2VydDpcInRvZ2dsZU92ZXJ3cml0ZVwiLEVzYzpcInNpbmdsZVNlbGVjdGlvblwifSxwY0RlZmF1bHQ6e1wiQ3RybC1BXCI6XCJzZWxlY3RBbGxcIixcIkN0cmwtRFwiOlwiZGVsZXRlTGluZVwiLFwiQ3RybC1aXCI6XCJ1bmRvXCIsXCJTaGlmdC1DdHJsLVpcIjpcInJlZG9cIixcIkN0cmwtWVwiOlwicmVkb1wiLFwiQ3RybC1Ib21lXCI6XCJnb0RvY1N0YXJ0XCIsXCJDdHJsLUVuZFwiOlwiZ29Eb2NFbmRcIixcIkN0cmwtVXBcIjpcImdvTGluZVVwXCIsXCJDdHJsLURvd25cIjpcImdvTGluZURvd25cIixcIkN0cmwtTGVmdFwiOlwiZ29Hcm91cExlZnRcIixcIkN0cmwtUmlnaHRcIjpcImdvR3JvdXBSaWdodFwiLFwiQWx0LUxlZnRcIjpcImdvTGluZVN0YXJ0XCIsXCJBbHQtUmlnaHRcIjpcImdvTGluZUVuZFwiLFwiQ3RybC1CYWNrc3BhY2VcIjpcImRlbEdyb3VwQmVmb3JlXCIsXCJDdHJsLURlbGV0ZVwiOlwiZGVsR3JvdXBBZnRlclwiLFwiQ3RybC1TXCI6XCJzYXZlXCIsXCJDdHJsLUZcIjpcImZpbmRcIixcIkN0cmwtR1wiOlwiZmluZE5leHRcIixcIlNoaWZ0LUN0cmwtR1wiOlwiZmluZFByZXZcIixcblwiU2hpZnQtQ3RybC1GXCI6XCJyZXBsYWNlXCIsXCJTaGlmdC1DdHJsLVJcIjpcInJlcGxhY2VBbGxcIixcIkN0cmwtW1wiOlwiaW5kZW50TGVzc1wiLFwiQ3RybC1dXCI6XCJpbmRlbnRNb3JlXCIsXCJDdHJsLVVcIjpcInVuZG9TZWxlY3Rpb25cIixcIlNoaWZ0LUN0cmwtVVwiOlwicmVkb1NlbGVjdGlvblwiLFwiQWx0LVVcIjpcInJlZG9TZWxlY3Rpb25cIixmYWxsdGhyb3VnaDpcImJhc2ljXCJ9LGVtYWNzeTp7XCJDdHJsLUZcIjpcImdvQ2hhclJpZ2h0XCIsXCJDdHJsLUJcIjpcImdvQ2hhckxlZnRcIixcIkN0cmwtUFwiOlwiZ29MaW5lVXBcIixcIkN0cmwtTlwiOlwiZ29MaW5lRG93blwiLFwiQ3RybC1BXCI6XCJnb0xpbmVTdGFydFwiLFwiQ3RybC1FXCI6XCJnb0xpbmVFbmRcIixcIkN0cmwtVlwiOlwiZ29QYWdlRG93blwiLFwiU2hpZnQtQ3RybC1WXCI6XCJnb1BhZ2VVcFwiLFwiQ3RybC1EXCI6XCJkZWxDaGFyQWZ0ZXJcIixcIkN0cmwtSFwiOlwiZGVsQ2hhckJlZm9yZVwiLFwiQWx0LUJhY2tzcGFjZVwiOlwiZGVsV29yZEJlZm9yZVwiLFwiQ3RybC1LXCI6XCJraWxsTGluZVwiLFwiQ3RybC1UXCI6XCJ0cmFuc3Bvc2VDaGFyc1wiLFxuXCJDdHJsLU9cIjpcIm9wZW5MaW5lXCJ9LG1hY0RlZmF1bHQ6e1wiQ21kLUFcIjpcInNlbGVjdEFsbFwiLFwiQ21kLURcIjpcImRlbGV0ZUxpbmVcIixcIkNtZC1aXCI6XCJ1bmRvXCIsXCJTaGlmdC1DbWQtWlwiOlwicmVkb1wiLFwiQ21kLVlcIjpcInJlZG9cIixcIkNtZC1Ib21lXCI6XCJnb0RvY1N0YXJ0XCIsXCJDbWQtVXBcIjpcImdvRG9jU3RhcnRcIixcIkNtZC1FbmRcIjpcImdvRG9jRW5kXCIsXCJDbWQtRG93blwiOlwiZ29Eb2NFbmRcIixcIkFsdC1MZWZ0XCI6XCJnb0dyb3VwTGVmdFwiLFwiQWx0LVJpZ2h0XCI6XCJnb0dyb3VwUmlnaHRcIixcIkNtZC1MZWZ0XCI6XCJnb0xpbmVMZWZ0XCIsXCJDbWQtUmlnaHRcIjpcImdvTGluZVJpZ2h0XCIsXCJBbHQtQmFja3NwYWNlXCI6XCJkZWxHcm91cEJlZm9yZVwiLFwiQ3RybC1BbHQtQmFja3NwYWNlXCI6XCJkZWxHcm91cEFmdGVyXCIsXCJBbHQtRGVsZXRlXCI6XCJkZWxHcm91cEFmdGVyXCIsXCJDbWQtU1wiOlwic2F2ZVwiLFwiQ21kLUZcIjpcImZpbmRcIixcIkNtZC1HXCI6XCJmaW5kTmV4dFwiLFwiU2hpZnQtQ21kLUdcIjpcImZpbmRQcmV2XCIsXCJDbWQtQWx0LUZcIjpcInJlcGxhY2VcIixcblwiU2hpZnQtQ21kLUFsdC1GXCI6XCJyZXBsYWNlQWxsXCIsXCJDbWQtW1wiOlwiaW5kZW50TGVzc1wiLFwiQ21kLV1cIjpcImluZGVudE1vcmVcIixcIkNtZC1CYWNrc3BhY2VcIjpcImRlbFdyYXBwZWRMaW5lTGVmdFwiLFwiQ21kLURlbGV0ZVwiOlwiZGVsV3JhcHBlZExpbmVSaWdodFwiLFwiQ21kLVVcIjpcInVuZG9TZWxlY3Rpb25cIixcIlNoaWZ0LUNtZC1VXCI6XCJyZWRvU2VsZWN0aW9uXCIsXCJDdHJsLVVwXCI6XCJnb0RvY1N0YXJ0XCIsXCJDdHJsLURvd25cIjpcImdvRG9jRW5kXCIsZmFsbHRocm91Z2g6W1wiYmFzaWNcIixcImVtYWNzeVwiXX19O2ljW1wiZGVmYXVsdFwiXT15YT9pYy5tYWNEZWZhdWx0OmljLnBjRGVmYXVsdDt2YXIgamM9e3NlbGVjdEFsbDpMZixzaW5nbGVTZWxlY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc2V0U2VsZWN0aW9uKGEuZ2V0Q3Vyc29yKFwiYW5jaG9yXCIpLGEuZ2V0Q3Vyc29yKFwiaGVhZFwiKSxJYSl9LGtpbGxMaW5lOmZ1bmN0aW9uKGEpe3JldHVybiBHYihhLGZ1bmN0aW9uKGIpe2lmKGIuZW1wdHkoKSl7dmFyIGQ9XG53KGEuZG9jLGIuaGVhZC5saW5lKS50ZXh0Lmxlbmd0aDtyZXR1cm4gYi5oZWFkLmNoPT1kJiZiLmhlYWQubGluZTxhLmxhc3RMaW5lKCk/e2Zyb206Yi5oZWFkLHRvOnQoYi5oZWFkLmxpbmUrMSwwKX06e2Zyb206Yi5oZWFkLHRvOnQoYi5oZWFkLmxpbmUsZCl9fXJldHVybntmcm9tOmIuZnJvbSgpLHRvOmIudG8oKX19KX0sZGVsZXRlTGluZTpmdW5jdGlvbihhKXtyZXR1cm4gR2IoYSxmdW5jdGlvbihiKXtyZXR1cm57ZnJvbTp0KGIuZnJvbSgpLmxpbmUsMCksdG86QyhhLmRvYyx0KGIudG8oKS5saW5lKzEsMCkpfX0pfSxkZWxMaW5lTGVmdDpmdW5jdGlvbihhKXtyZXR1cm4gR2IoYSxmdW5jdGlvbihiKXtyZXR1cm57ZnJvbTp0KGIuZnJvbSgpLmxpbmUsMCksdG86Yi5mcm9tKCl9fSl9LGRlbFdyYXBwZWRMaW5lTGVmdDpmdW5jdGlvbihhKXtyZXR1cm4gR2IoYSxmdW5jdGlvbihiKXt2YXIgZD1hLmNoYXJDb29yZHMoYi5oZWFkLFwiZGl2XCIpLnRvcCs1O3JldHVybntmcm9tOmEuY29vcmRzQ2hhcih7bGVmdDowLFxudG9wOmR9LFwiZGl2XCIpLHRvOmIuZnJvbSgpfX0pfSxkZWxXcmFwcGVkTGluZVJpZ2h0OmZ1bmN0aW9uKGEpe3JldHVybiBHYihhLGZ1bmN0aW9uKGIpe3ZhciBkPWEuY2hhckNvb3JkcyhiLmhlYWQsXCJkaXZcIikudG9wKzU7ZD1hLmNvb3Jkc0NoYXIoe2xlZnQ6YS5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGgrMTAwLHRvcDpkfSxcImRpdlwiKTtyZXR1cm57ZnJvbTpiLmZyb20oKSx0bzpkfX0pfSx1bmRvOmZ1bmN0aW9uKGEpe3JldHVybiBhLnVuZG8oKX0scmVkbzpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZWRvKCl9LHVuZG9TZWxlY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGEudW5kb1NlbGVjdGlvbigpfSxyZWRvU2VsZWN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlZG9TZWxlY3Rpb24oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbihhKXtyZXR1cm4gYS5leHRlbmRTZWxlY3Rpb24odChhLmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZXh0ZW5kU2VsZWN0aW9uKHQoYS5sYXN0TGluZSgpKSl9LFxuZ29MaW5lU3RhcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKGIpe3JldHVybiBiZyhhLGIuaGVhZC5saW5lKX0se29yaWdpbjpcIittb3ZlXCIsYmlhczoxfSl9LGdvTGluZVN0YXJ0U21hcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKGIpe3JldHVybiBjZyhhLGIuaGVhZCl9LHtvcmlnaW46XCIrbW92ZVwiLGJpYXM6MX0pfSxnb0xpbmVFbmQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKGIpe2I9Yi5oZWFkLmxpbmU7dmFyIGQ9dyhhLmRvYyxiKTt2YXIgYz1kO2Zvcih2YXIgZTtlPXNiKGMsITEpOyljPWUuZmluZCgxLCEwKS5saW5lO2MhPWQmJihiPU4oYykpO3JldHVybiBnZSghMCxhLGQsYiwtMSl9LHtvcmlnaW46XCIrbW92ZVwiLGJpYXM6LTF9KX0sZ29MaW5lUmlnaHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKGIpe2I9XG5hLmN1cnNvckNvb3JkcyhiLmhlYWQsXCJkaXZcIikudG9wKzU7cmV0dXJuIGEuY29vcmRzQ2hhcih7bGVmdDphLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCsxMDAsdG9wOmJ9LFwiZGl2XCIpfSxxYyl9LGdvTGluZUxlZnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKGIpe2I9YS5jdXJzb3JDb29yZHMoYi5oZWFkLFwiZGl2XCIpLnRvcCs1O3JldHVybiBhLmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6Yn0sXCJkaXZcIil9LHFjKX0sZ29MaW5lTGVmdFNtYXJ0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihiKXt2YXIgZD1hLmN1cnNvckNvb3JkcyhiLmhlYWQsXCJkaXZcIikudG9wKzU7ZD1hLmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6ZH0sXCJkaXZcIik7cmV0dXJuIGQuY2g8YS5nZXRMaW5lKGQubGluZSkuc2VhcmNoKC9cXFMvKT9jZyhhLGIuaGVhZCk6ZH0scWMpfSxnb0xpbmVVcDpmdW5jdGlvbihhKXtyZXR1cm4gYS5tb3ZlVigtMSxcblwibGluZVwiKX0sZ29MaW5lRG93bjpmdW5jdGlvbihhKXtyZXR1cm4gYS5tb3ZlVigxLFwibGluZVwiKX0sZ29QYWdlVXA6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubW92ZVYoLTEsXCJwYWdlXCIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1vdmVWKDEsXCJwYWdlXCIpfSxnb0NoYXJMZWZ0OmZ1bmN0aW9uKGEpe3JldHVybiBhLm1vdmVIKC0xLFwiY2hhclwiKX0sZ29DaGFyUmlnaHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubW92ZUgoMSxcImNoYXJcIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbihhKXtyZXR1cm4gYS5tb3ZlSCgtMSxcImNvbHVtblwiKX0sZ29Db2x1bW5SaWdodDpmdW5jdGlvbihhKXtyZXR1cm4gYS5tb3ZlSCgxLFwiY29sdW1uXCIpfSxnb1dvcmRMZWZ0OmZ1bmN0aW9uKGEpe3JldHVybiBhLm1vdmVIKC0xLFwid29yZFwiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKGEpe3JldHVybiBhLm1vdmVIKDEsXCJncm91cFwiKX0sZ29Hcm91cExlZnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubW92ZUgoLTEsXG5cImdyb3VwXCIpfSxnb1dvcmRSaWdodDpmdW5jdGlvbihhKXtyZXR1cm4gYS5tb3ZlSCgxLFwid29yZFwiKX0sZGVsQ2hhckJlZm9yZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5kZWxldGVIKC0xLFwiY29kZXBvaW50XCIpfSxkZWxDaGFyQWZ0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGVsZXRlSCgxLFwiY2hhclwiKX0sZGVsV29yZEJlZm9yZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5kZWxldGVIKC0xLFwid29yZFwiKX0sZGVsV29yZEFmdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRlbGV0ZUgoMSxcIndvcmRcIil9LGRlbEdyb3VwQmVmb3JlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRlbGV0ZUgoLTEsXCJncm91cFwiKX0sZGVsR3JvdXBBZnRlcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5kZWxldGVIKDEsXCJncm91cFwiKX0saW5kZW50QXV0bzpmdW5jdGlvbihhKXtyZXR1cm4gYS5pbmRlbnRTZWxlY3Rpb24oXCJzbWFydFwiKX0saW5kZW50TW9yZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5pbmRlbnRTZWxlY3Rpb24oXCJhZGRcIil9LFxuaW5kZW50TGVzczpmdW5jdGlvbihhKXtyZXR1cm4gYS5pbmRlbnRTZWxlY3Rpb24oXCJzdWJ0cmFjdFwiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2VTZWxlY3Rpb24oXCJcXHRcIil9LGluc2VydFNvZnRUYWI6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGQ9YS5saXN0U2VsZWN0aW9ucygpLGM9YS5vcHRpb25zLnRhYlNpemUsZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZj1kW2VdLmZyb20oKTtmPXdhKGEuZ2V0TGluZShmLmxpbmUpLGYuY2gsYyk7Yi5wdXNoKGlkKGMtZiVjKSl9YS5yZXBsYWNlU2VsZWN0aW9ucyhiKX0sZGVmYXVsdFRhYjpmdW5jdGlvbihhKXthLnNvbWV0aGluZ1NlbGVjdGVkKCk/YS5pbmRlbnRTZWxlY3Rpb24oXCJhZGRcIik6YS5leGVjQ29tbWFuZChcImluc2VydFRhYlwiKX0sdHJhbnNwb3NlQ2hhcnM6ZnVuY3Rpb24oYSl7cmV0dXJuIHJhKGEsZnVuY3Rpb24oKXtmb3IodmFyIGI9YS5saXN0U2VsZWN0aW9ucygpLGQ9W10sYz0wO2M8Yi5sZW5ndGg7YysrKWlmKGJbY10uZW1wdHkoKSl7dmFyIGU9XG5iW2NdLmhlYWQsZj13KGEuZG9jLGUubGluZSkudGV4dDtpZihmKWlmKGUuY2g9PWYubGVuZ3RoJiYoZT1uZXcgdChlLmxpbmUsZS5jaC0xKSksMDxlLmNoKWU9bmV3IHQoZS5saW5lLGUuY2grMSksYS5yZXBsYWNlUmFuZ2UoZi5jaGFyQXQoZS5jaC0xKStmLmNoYXJBdChlLmNoLTIpLHQoZS5saW5lLGUuY2gtMiksZSxcIit0cmFuc3Bvc2VcIik7ZWxzZSBpZihlLmxpbmU+YS5kb2MuZmlyc3Qpe3ZhciBnPXcoYS5kb2MsZS5saW5lLTEpLnRleHQ7ZyYmKGU9bmV3IHQoZS5saW5lLDEpLGEucmVwbGFjZVJhbmdlKGYuY2hhckF0KDApK2EuZG9jLmxpbmVTZXBhcmF0b3IoKStnLmNoYXJBdChnLmxlbmd0aC0xKSx0KGUubGluZS0xLGcubGVuZ3RoLTEpLGUsXCIrdHJhbnNwb3NlXCIpKX1kLnB1c2gobmV3IEkoZSxlKSl9YS5zZXRTZWxlY3Rpb25zKGQpfSl9LG5ld2xpbmVBbmRJbmRlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHJhKGEsZnVuY3Rpb24oKXtmb3IodmFyIGI9YS5saXN0U2VsZWN0aW9ucygpLFxuZD1iLmxlbmd0aC0xOzA8PWQ7ZC0tKWEucmVwbGFjZVJhbmdlKGEuZG9jLmxpbmVTZXBhcmF0b3IoKSxiW2RdLmFuY2hvcixiW2RdLmhlYWQsXCIraW5wdXRcIik7Yj1hLmxpc3RTZWxlY3Rpb25zKCk7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrKylhLmluZGVudExpbmUoYltkXS5mcm9tKCkubGluZSxudWxsLCEwKTt4YihhKX0pfSxvcGVuTGluZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlU2VsZWN0aW9uKFwiXFxuXCIsXCJzdGFydFwiKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRvZ2dsZU92ZXJ3cml0ZSgpfX0sbGg9bmV3IFhhLGhlPW51bGwsaWU9ZnVuY3Rpb24oYSxiLGQpe3RoaXMudGltZT1hO3RoaXMucG9zPWI7dGhpcy5idXR0b249ZH07aWUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYSxiLGQpe3JldHVybiB0aGlzLnRpbWUrNDAwPmEmJjA9PUIoYix0aGlzLnBvcykmJmQ9PXRoaXMuYnV0dG9ufTt2YXIgbWMsbGMsSGI9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJDb2RlTWlycm9yLkluaXRcIn19LFxubWc9e30sYmQ9e307VS5kZWZhdWx0cz1tZztVLm9wdGlvbkhhbmRsZXJzPWJkO3ZhciBsZT1bXTtVLmRlZmluZUluaXRIb29rPWZ1bmN0aW9uKGEpe3JldHVybiBsZS5wdXNoKGEpfTt2YXIgc2E9bnVsbCxPPWZ1bmN0aW9uKGEpe3RoaXMuY209YTt0aGlzLmxhc3RBbmNob3JOb2RlPXRoaXMubGFzdEFuY2hvck9mZnNldD10aGlzLmxhc3RGb2N1c05vZGU9dGhpcy5sYXN0Rm9jdXNPZmZzZXQ9bnVsbDt0aGlzLnBvbGxpbmc9bmV3IFhhO3RoaXMuY29tcG9zaW5nPW51bGw7dGhpcy5ncmFjZVBlcmlvZD0hMTt0aGlzLnJlYWRET01UaW1lb3V0PW51bGx9O08ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihoKXtmb3IoaD1oLnRhcmdldDtoO2g9aC5wYXJlbnROb2RlKXtpZihoPT1nKXJldHVybiEwO2lmKC9cXGJDb2RlTWlycm9yLSg/OmxpbmUpP3dpZGdldFxcYi8udGVzdChoLmNsYXNzTmFtZSkpYnJlYWt9cmV0dXJuITF9ZnVuY3Rpb24gZChoKXtpZihiKGgpJiYhWihmLFxuaCkpe2lmKGYuc29tZXRoaW5nU2VsZWN0ZWQoKSlzYT17bGluZVdpc2U6ITEsdGV4dDpmLmdldFNlbGVjdGlvbnMoKX0sXCJjdXRcIj09aC50eXBlJiZmLnJlcGxhY2VTZWxlY3Rpb24oXCJcIixudWxsLFwiY3V0XCIpO2Vsc2UgaWYoZi5vcHRpb25zLmxpbmVXaXNlQ29weUN1dCl7dmFyIGs9cWcoZik7c2E9e2xpbmVXaXNlOiEwLHRleHQ6ay50ZXh0fTtcImN1dFwiPT1oLnR5cGUmJmYub3BlcmF0aW9uKGZ1bmN0aW9uKCl7Zi5zZXRTZWxlY3Rpb25zKGsucmFuZ2VzLDAsSWEpO2YucmVwbGFjZVNlbGVjdGlvbihcIlwiLG51bGwsXCJjdXRcIil9KX1lbHNlIHJldHVybjtpZihoLmNsaXBib2FyZERhdGEpe2guY2xpcGJvYXJkRGF0YS5jbGVhckRhdGEoKTt2YXIgbD1zYS50ZXh0LmpvaW4oXCJcXG5cIik7aC5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJUZXh0XCIsbCk7aWYoaC5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJUZXh0XCIpPT1sKXtoLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufX12YXIgbT1zZygpO2g9bS5maXJzdENoaWxkO1xuZi5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUobSxmLmRpc3BsYXkubGluZVNwYWNlLmZpcnN0Q2hpbGQpO2gudmFsdWU9c2EudGV4dC5qb2luKFwiXFxuXCIpO3ZhciBuPWthKGcub3duZXJEb2N1bWVudCk7cGMoaCk7c2V0VGltZW91dChmdW5jdGlvbigpe2YuZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQobSk7bi5mb2N1cygpO249PWcmJmUuc2hvd1ByaW1hcnlTZWxlY3Rpb24oKX0sNTApfX12YXIgYz10aGlzLGU9dGhpcyxmPWUuY20sZz1lLmRpdj1hLmxpbmVEaXY7Zy5jb250ZW50RWRpdGFibGU9ITA7cmcoZyxmLm9wdGlvbnMuc3BlbGxjaGVjayxmLm9wdGlvbnMuYXV0b2NvcnJlY3QsZi5vcHRpb25zLmF1dG9jYXBpdGFsaXplKTt6KGcsXCJwYXN0ZVwiLGZ1bmN0aW9uKGgpeyFiKGgpfHxaKGYsaCl8fHBnKGgsZil8fDExPj1UJiZzZXRUaW1lb3V0KGJhKGYsZnVuY3Rpb24oKXtyZXR1cm4gYy51cGRhdGVGcm9tRE9NKCl9KSwyMCl9KTt6KGcsXCJjb21wb3NpdGlvbnN0YXJ0XCIsXG5mdW5jdGlvbihoKXtjLmNvbXBvc2luZz17ZGF0YTpoLmRhdGEsZG9uZTohMX19KTt6KGcsXCJjb21wb3NpdGlvbnVwZGF0ZVwiLGZ1bmN0aW9uKGgpe2MuY29tcG9zaW5nfHwoYy5jb21wb3Npbmc9e2RhdGE6aC5kYXRhLGRvbmU6ITF9KX0pO3ooZyxcImNvbXBvc2l0aW9uZW5kXCIsZnVuY3Rpb24oaCl7Yy5jb21wb3NpbmcmJihoLmRhdGEhPWMuY29tcG9zaW5nLmRhdGEmJmMucmVhZEZyb21ET01Tb29uKCksYy5jb21wb3NpbmcuZG9uZT0hMCl9KTt6KGcsXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24oKXtyZXR1cm4gZS5mb3JjZUNvbXBvc2l0aW9uRW5kKCl9KTt6KGcsXCJpbnB1dFwiLGZ1bmN0aW9uKCl7Yy5jb21wb3Npbmd8fGMucmVhZEZyb21ET01Tb29uKCl9KTt6KGcsXCJjb3B5XCIsZCk7eihnLFwiY3V0XCIsZCl9O08ucHJvdG90eXBlLnNjcmVlblJlYWRlckxhYmVsQ2hhbmdlZD1mdW5jdGlvbihhKXthP3RoaXMuZGl2LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixhKTp0aGlzLmRpdi5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpfTtcbk8ucHJvdG90eXBlLnByZXBhcmVTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT1nZih0aGlzLmNtLCExKTthLmZvY3VzPWthKHRoaXMuZGl2Lm93bmVyRG9jdW1lbnQpPT10aGlzLmRpdjtyZXR1cm4gYX07Ty5wcm90b3R5cGUuc2hvd1NlbGVjdGlvbj1mdW5jdGlvbihhLGIpe2EmJnRoaXMuY20uZGlzcGxheS52aWV3Lmxlbmd0aCYmKChhLmZvY3VzfHxiKSYmdGhpcy5zaG93UHJpbWFyeVNlbGVjdGlvbigpLHRoaXMuc2hvd011bHRpcGxlU2VsZWN0aW9ucyhhKSl9O08ucHJvdG90eXBlLmdldFNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNtLmRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LmdldFNlbGVjdGlvbigpfTtPLnByb3RvdHlwZS5zaG93UHJpbWFyeVNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2VsZWN0aW9uKCksYj10aGlzLmNtLGQ9Yi5kb2Muc2VsLnByaW1hcnkoKSxjPWQuZnJvbSgpO2Q9ZC50bygpO2lmKGIuZGlzcGxheS52aWV3VG89PVxuYi5kaXNwbGF5LnZpZXdGcm9tfHxjLmxpbmU+PWIuZGlzcGxheS52aWV3VG98fGQubGluZTxiLmRpc3BsYXkudmlld0Zyb20pYS5yZW1vdmVBbGxSYW5nZXMoKTtlbHNle3ZhciBlPWNkKGIsYS5hbmNob3JOb2RlLGEuYW5jaG9yT2Zmc2V0KSxmPWNkKGIsYS5mb2N1c05vZGUsYS5mb2N1c09mZnNldCk7aWYoIWV8fGUuYmFkfHwhZnx8Zi5iYWR8fDAhPUIoQmMoZSxmKSxjKXx8MCE9QihBYyhlLGYpLGQpKWlmKGU9Yi5kaXNwbGF5LnZpZXcsYz1jLmxpbmU+PWIuZGlzcGxheS52aWV3RnJvbSYmdWcoYixjKXx8e25vZGU6ZVswXS5tZWFzdXJlLm1hcFsyXSxvZmZzZXQ6MH0sZD1kLmxpbmU8Yi5kaXNwbGF5LnZpZXdUbyYmdWcoYixkKSxkfHwoZD1lW2UubGVuZ3RoLTFdLm1lYXN1cmUsZD1kLm1hcHM/ZC5tYXBzW2QubWFwcy5sZW5ndGgtMV06ZC5tYXAsZD17bm9kZTpkW2QubGVuZ3RoLTFdLG9mZnNldDpkW2QubGVuZ3RoLTJdLWRbZC5sZW5ndGgtM119KSxjJiZkKXtlPWEucmFuZ2VDb3VudCYmXG5hLmdldFJhbmdlQXQoMCk7dHJ5e3ZhciBnPVFiKGMubm9kZSxjLm9mZnNldCxkLm9mZnNldCxkLm5vZGUpfWNhdGNoKGgpe31nJiYoIU1hJiZiLnN0YXRlLmZvY3VzZWQ/KGEuY29sbGFwc2UoYy5ub2RlLGMub2Zmc2V0KSxnLmNvbGxhcHNlZHx8KGEucmVtb3ZlQWxsUmFuZ2VzKCksYS5hZGRSYW5nZShnKSkpOihhLnJlbW92ZUFsbFJhbmdlcygpLGEuYWRkUmFuZ2UoZykpLGUmJm51bGw9PWEuYW5jaG9yTm9kZT9hLmFkZFJhbmdlKGUpOk1hJiZ0aGlzLnN0YXJ0R3JhY2VQZXJpb2QoKSk7dGhpcy5yZW1lbWJlclNlbGVjdGlvbigpfWVsc2UgYS5yZW1vdmVBbGxSYW5nZXMoKX19O08ucHJvdG90eXBlLnN0YXJ0R3JhY2VQZXJpb2Q9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2NsZWFyVGltZW91dCh0aGlzLmdyYWNlUGVyaW9kKTt0aGlzLmdyYWNlUGVyaW9kPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmdyYWNlUGVyaW9kPSExO2Euc2VsZWN0aW9uQ2hhbmdlZCgpJiZhLmNtLm9wZXJhdGlvbihmdW5jdGlvbigpe3JldHVybiBhLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9XG4hMH0pfSwyMCl9O08ucHJvdG90eXBlLnNob3dNdWx0aXBsZVNlbGVjdGlvbnM9ZnVuY3Rpb24oYSl7RCh0aGlzLmNtLmRpc3BsYXkuY3Vyc29yRGl2LGEuY3Vyc29ycyk7RCh0aGlzLmNtLmRpc3BsYXkuc2VsZWN0aW9uRGl2LGEuc2VsZWN0aW9uKX07Ty5wcm90b3R5cGUucmVtZW1iZXJTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFNlbGVjdGlvbigpO3RoaXMubGFzdEFuY2hvck5vZGU9YS5hbmNob3JOb2RlO3RoaXMubGFzdEFuY2hvck9mZnNldD1hLmFuY2hvck9mZnNldDt0aGlzLmxhc3RGb2N1c05vZGU9YS5mb2N1c05vZGU7dGhpcy5sYXN0Rm9jdXNPZmZzZXQ9YS5mb2N1c09mZnNldH07Ty5wcm90b3R5cGUuc2VsZWN0aW9uSW5FZGl0b3I9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFNlbGVjdGlvbigpO2lmKCFhLnJhbmdlQ291bnQpcmV0dXJuITE7YT1hLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXI7cmV0dXJuIGphKHRoaXMuZGl2LGEpfTtcbk8ucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7XCJub2N1cnNvclwiIT10aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkmJih0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCkmJmthKHRoaXMuZGl2Lm93bmVyRG9jdW1lbnQpPT10aGlzLmRpdnx8dGhpcy5zaG93U2VsZWN0aW9uKHRoaXMucHJlcGFyZVNlbGVjdGlvbigpLCEwKSx0aGlzLmRpdi5mb2N1cygpKX07Ty5wcm90b3R5cGUuYmx1cj1mdW5jdGlvbigpe3RoaXMuZGl2LmJsdXIoKX07Ty5wcm90b3R5cGUuZ2V0RmllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXZ9O08ucHJvdG90eXBlLnN1cHBvcnRzVG91Y2g9ZnVuY3Rpb24oKXtyZXR1cm4hMH07Ty5wcm90b3R5cGUucmVjZWl2ZWRGb2N1cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtkLmNtLnN0YXRlLmZvY3VzZWQmJihkLnBvbGxTZWxlY3Rpb24oKSxkLnBvbGxpbmcuc2V0KGQuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsYSkpfXZhciBiPXRoaXMsZD10aGlzO3RoaXMuc2VsZWN0aW9uSW5FZGl0b3IoKT9cbnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gYi5wb2xsU2VsZWN0aW9uKCl9LDIwKTpyYSh0aGlzLmNtLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD0hMH0pO3RoaXMucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCxhKX07Ty5wcm90b3R5cGUuc2VsZWN0aW9uQ2hhbmdlZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIGEuYW5jaG9yTm9kZSE9dGhpcy5sYXN0QW5jaG9yTm9kZXx8YS5hbmNob3JPZmZzZXQhPXRoaXMubGFzdEFuY2hvck9mZnNldHx8YS5mb2N1c05vZGUhPXRoaXMubGFzdEZvY3VzTm9kZXx8YS5mb2N1c09mZnNldCE9dGhpcy5sYXN0Rm9jdXNPZmZzZXR9O08ucHJvdG90eXBlLnBvbGxTZWxlY3Rpb249ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLnJlYWRET01UaW1lb3V0JiYhdGhpcy5ncmFjZVBlcmlvZCYmdGhpcy5zZWxlY3Rpb25DaGFuZ2VkKCkpe3ZhciBhPXRoaXMuZ2V0U2VsZWN0aW9uKCksXG5iPXRoaXMuY207aWYoR2MmJlFhJiZ0aGlzLmNtLmRpc3BsYXkuZ3V0dGVyU3BlY3MubGVuZ3RoJiZBaChhLmFuY2hvck5vZGUpKXRoaXMuY20udHJpZ2dlck9uS2V5RG93bih7dHlwZTpcImtleWRvd25cIixrZXlDb2RlOjgscHJldmVudERlZmF1bHQ6TWF0aC5hYnN9KSx0aGlzLmJsdXIoKSx0aGlzLmZvY3VzKCk7ZWxzZSBpZighdGhpcy5jb21wb3Npbmcpe3RoaXMucmVtZW1iZXJTZWxlY3Rpb24oKTt2YXIgZD1jZChiLGEuYW5jaG9yTm9kZSxhLmFuY2hvck9mZnNldCksYz1jZChiLGEuZm9jdXNOb2RlLGEuZm9jdXNPZmZzZXQpO2QmJmMmJnJhKGIsZnVuY3Rpb24oKXtkYShiLmRvYyxPYShkLGMpLElhKTtpZihkLmJhZHx8Yy5iYWQpYi5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPSEwfSl9fX07Ty5wcm90b3R5cGUucG9sbENvbnRlbnQ9ZnVuY3Rpb24oKXtudWxsIT10aGlzLnJlYWRET01UaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMucmVhZERPTVRpbWVvdXQpLHRoaXMucmVhZERPTVRpbWVvdXQ9XG5udWxsKTt2YXIgYT10aGlzLmNtLGI9YS5kaXNwbGF5LGQ9YS5kb2Muc2VsLnByaW1hcnkoKSxjPWQuZnJvbSgpLGU9ZC50bygpOzA9PWMuY2gmJmMubGluZT5hLmZpcnN0TGluZSgpJiYoYz10KGMubGluZS0xLHcoYS5kb2MsYy5saW5lLTEpLmxlbmd0aCkpO2UuY2g9PXcoYS5kb2MsZS5saW5lKS50ZXh0Lmxlbmd0aCYmZS5saW5lPGEubGFzdExpbmUoKSYmKGU9dChlLmxpbmUrMSwwKSk7aWYoYy5saW5lPGIudmlld0Zyb218fGUubGluZT5iLnZpZXdUby0xKXJldHVybiExO3ZhciBmO2MubGluZT09Yi52aWV3RnJvbXx8MD09KGY9ZGIoYSxjLmxpbmUpKT8oZD1OKGIudmlld1swXS5saW5lKSxmPWIudmlld1swXS5ub2RlKTooZD1OKGIudmlld1tmXS5saW5lKSxmPWIudmlld1tmLTFdLm5vZGUubmV4dFNpYmxpbmcpO3ZhciBnPWRiKGEsZS5saW5lKTtnPT1iLnZpZXcubGVuZ3RoLTE/KGU9Yi52aWV3VG8tMSxiPWIubGluZURpdi5sYXN0Q2hpbGQpOihlPU4oYi52aWV3W2crMV0ubGluZSktXG4xLGI9Yi52aWV3W2crMV0ubm9kZS5wcmV2aW91c1NpYmxpbmcpO2lmKCFmKXJldHVybiExO2I9YS5kb2Muc3BsaXRMaW5lcyhCaChhLGYsYixkLGUpKTtmb3IoZj1hYihhLmRvYyx0KGQsMCksdChlLHcoYS5kb2MsZSkudGV4dC5sZW5ndGgpKTsxPGIubGVuZ3RoJiYxPGYubGVuZ3RoOylpZihKKGIpPT1KKGYpKWIucG9wKCksZi5wb3AoKSxlLS07ZWxzZSBpZihiWzBdPT1mWzBdKWIuc2hpZnQoKSxmLnNoaWZ0KCksZCsrO2Vsc2UgYnJlYWs7dmFyIGg9MDtnPTA7Zm9yKHZhciBrPWJbMF0sbD1mWzBdLG09TWF0aC5taW4oay5sZW5ndGgsbC5sZW5ndGgpO2g8bSYmay5jaGFyQ29kZUF0KGgpPT1sLmNoYXJDb2RlQXQoaCk7KSsraDtrPUooYik7bD1KKGYpO2ZvcihtPU1hdGgubWluKGsubGVuZ3RoLSgxPT1iLmxlbmd0aD9oOjApLGwubGVuZ3RoLSgxPT1mLmxlbmd0aD9oOjApKTtnPG0mJmsuY2hhckNvZGVBdChrLmxlbmd0aC1nLTEpPT1sLmNoYXJDb2RlQXQobC5sZW5ndGgtZy0xKTspKytnO1xuaWYoMT09Yi5sZW5ndGgmJjE9PWYubGVuZ3RoJiZkPT1jLmxpbmUpZm9yKDtoJiZoPmMuY2gmJmsuY2hhckNvZGVBdChrLmxlbmd0aC1nLTEpPT1sLmNoYXJDb2RlQXQobC5sZW5ndGgtZy0xKTspaC0tLGcrKztiW2IubGVuZ3RoLTFdPWsuc2xpY2UoMCxrLmxlbmd0aC1nKS5yZXBsYWNlKC9eXFx1MjAwYisvLFwiXCIpO2JbMF09YlswXS5zbGljZShoKS5yZXBsYWNlKC9cXHUyMDBiKyQvLFwiXCIpO2M9dChkLGgpO2Q9dChlLGYubGVuZ3RoP0ooZikubGVuZ3RoLWc6MCk7aWYoMTxiLmxlbmd0aHx8YlswXXx8QihjLGQpKXJldHVybiBEYihhLmRvYyxiLGMsZCxcIitpbnB1dFwiKSwhMH07Ty5wcm90b3R5cGUuZW5zdXJlUG9sbGVkPWZ1bmN0aW9uKCl7dGhpcy5mb3JjZUNvbXBvc2l0aW9uRW5kKCl9O08ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5mb3JjZUNvbXBvc2l0aW9uRW5kKCl9O08ucHJvdG90eXBlLmZvcmNlQ29tcG9zaXRpb25FbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvc2luZyYmXG4oY2xlYXJUaW1lb3V0KHRoaXMucmVhZERPTVRpbWVvdXQpLHRoaXMuY29tcG9zaW5nPW51bGwsdGhpcy51cGRhdGVGcm9tRE9NKCksdGhpcy5kaXYuYmx1cigpLHRoaXMuZGl2LmZvY3VzKCkpfTtPLnByb3RvdHlwZS5yZWFkRnJvbURPTVNvb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzO251bGw9PXRoaXMucmVhZERPTVRpbWVvdXQmJih0aGlzLnJlYWRET01UaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLnJlYWRET01UaW1lb3V0PW51bGw7aWYoYS5jb21wb3NpbmcpaWYoYS5jb21wb3NpbmcuZG9uZSlhLmNvbXBvc2luZz1udWxsO2Vsc2UgcmV0dXJuO2EudXBkYXRlRnJvbURPTSgpfSw4MCkpfTtPLnByb3RvdHlwZS51cGRhdGVGcm9tRE9NPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczshdGhpcy5jbS5pc1JlYWRPbmx5KCkmJnRoaXMucG9sbENvbnRlbnQoKXx8cmEodGhpcy5jbSxmdW5jdGlvbigpe3JldHVybiBtYShhLmNtKX0pfTtPLnByb3RvdHlwZS5zZXRVbmVkaXRhYmxlPWZ1bmN0aW9uKGEpe2EuY29udGVudEVkaXRhYmxlPVxuXCJmYWxzZVwifTtPLnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKGEpezA9PWEuY2hhckNvZGV8fHRoaXMuY29tcG9zaW5nfHwoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY20uaXNSZWFkT25seSgpfHxiYSh0aGlzLmNtLG1lKSh0aGlzLmNtLFN0cmluZy5mcm9tQ2hhckNvZGUobnVsbD09YS5jaGFyQ29kZT9hLmtleUNvZGU6YS5jaGFyQ29kZSksMCkpfTtPLnByb3RvdHlwZS5yZWFkT25seUNoYW5nZWQ9ZnVuY3Rpb24oYSl7dGhpcy5kaXYuY29udGVudEVkaXRhYmxlPVN0cmluZyhcIm5vY3Vyc29yXCIhPWEpfTtPLnByb3RvdHlwZS5vbkNvbnRleHRNZW51PWZ1bmN0aW9uKCl7fTtPLnByb3RvdHlwZS5yZXNldFBvc2l0aW9uPWZ1bmN0aW9uKCl7fTtPLnByb3RvdHlwZS5uZWVkc0NvbnRlbnRBdHRyaWJ1dGU9ITA7dmFyIFY9ZnVuY3Rpb24oYSl7dGhpcy5jbT1hO3RoaXMucHJldklucHV0PVwiXCI7dGhpcy5wb2xsaW5nRmFzdD0hMTt0aGlzLnBvbGxpbmc9bmV3IFhhO3RoaXMuaGFzU2VsZWN0aW9uPVxuITE7dGhpcy5jb21wb3Npbmc9bnVsbDt0aGlzLnJlc2V0dGluZz0hMX07Vi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGcpe2lmKCFaKGUsZykpe2lmKGUuc29tZXRoaW5nU2VsZWN0ZWQoKSlzYT17bGluZVdpc2U6ITEsdGV4dDplLmdldFNlbGVjdGlvbnMoKX07ZWxzZSBpZihlLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KXt2YXIgaD1xZyhlKTtzYT17bGluZVdpc2U6ITAsdGV4dDpoLnRleHR9O1wiY3V0XCI9PWcudHlwZT9lLnNldFNlbGVjdGlvbnMoaC5yYW5nZXMsbnVsbCxJYSk6KGMucHJldklucHV0PVwiXCIsZi52YWx1ZT1oLnRleHQuam9pbihcIlxcblwiKSxwYyhmKSl9ZWxzZSByZXR1cm47XCJjdXRcIj09Zy50eXBlJiYoZS5zdGF0ZS5jdXRJbmNvbWluZz0rbmV3IERhdGUpfX12YXIgZD10aGlzLGM9dGhpcyxlPXRoaXMuY207dGhpcy5jcmVhdGVGaWVsZChhKTt2YXIgZj10aGlzLnRleHRhcmVhO2Eud3JhcHBlci5pbnNlcnRCZWZvcmUodGhpcy53cmFwcGVyLGEud3JhcHBlci5maXJzdENoaWxkKTtcbm9jJiYoZi5zdHlsZS53aWR0aD1cIjBweFwiKTt6KGYsXCJpbnB1dFwiLGZ1bmN0aW9uKCl7RyYmOTw9VCYmZC5oYXNTZWxlY3Rpb24mJihkLmhhc1NlbGVjdGlvbj1udWxsKTtjLnBvbGwoKX0pO3ooZixcInBhc3RlXCIsZnVuY3Rpb24oZyl7WihlLGcpfHxwZyhnLGUpfHwoZS5zdGF0ZS5wYXN0ZUluY29taW5nPStuZXcgRGF0ZSxjLmZhc3RQb2xsKCkpfSk7eihmLFwiY3V0XCIsYik7eihmLFwiY29weVwiLGIpO3ooYS5zY3JvbGxlcixcInBhc3RlXCIsZnVuY3Rpb24oZyl7aWYoIUxhKGEsZykmJiFaKGUsZykpaWYoZi5kaXNwYXRjaEV2ZW50KXt2YXIgaD1uZXcgRXZlbnQoXCJwYXN0ZVwiKTtoLmNsaXBib2FyZERhdGE9Zy5jbGlwYm9hcmREYXRhO2YuZGlzcGF0Y2hFdmVudChoKX1lbHNlIGUuc3RhdGUucGFzdGVJbmNvbWluZz0rbmV3IERhdGUsYy5mb2N1cygpfSk7eihhLmxpbmVTcGFjZSxcInNlbGVjdHN0YXJ0XCIsZnVuY3Rpb24oZyl7TGEoYSxnKXx8bGEoZyl9KTt6KGYsXCJjb21wb3NpdGlvbnN0YXJ0XCIsXG5mdW5jdGlvbigpe3ZhciBnPWUuZ2V0Q3Vyc29yKFwiZnJvbVwiKTtjLmNvbXBvc2luZyYmYy5jb21wb3NpbmcucmFuZ2UuY2xlYXIoKTtjLmNvbXBvc2luZz17c3RhcnQ6ZyxyYW5nZTplLm1hcmtUZXh0KGcsZS5nZXRDdXJzb3IoXCJ0b1wiKSx7Y2xhc3NOYW1lOlwiQ29kZU1pcnJvci1jb21wb3NpbmdcIn0pfX0pO3ooZixcImNvbXBvc2l0aW9uZW5kXCIsZnVuY3Rpb24oKXtjLmNvbXBvc2luZyYmKGMucG9sbCgpLGMuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCksYy5jb21wb3Npbmc9bnVsbCl9KX07Vi5wcm90b3R5cGUuY3JlYXRlRmllbGQ9ZnVuY3Rpb24oYSl7dGhpcy53cmFwcGVyPXNnKCk7dGhpcy50ZXh0YXJlYT10aGlzLndyYXBwZXIuZmlyc3RDaGlsZH07Vi5wcm90b3R5cGUuc2NyZWVuUmVhZGVyTGFiZWxDaGFuZ2VkPWZ1bmN0aW9uKGEpe2E/dGhpcy50ZXh0YXJlYS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsYSk6dGhpcy50ZXh0YXJlYS5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpfTtcblYucHJvdG90eXBlLnByZXBhcmVTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNtLGI9YS5kaXNwbGF5LGQ9YS5kb2MsYz1nZihhKTtpZihhLm9wdGlvbnMubW92ZUlucHV0V2l0aEN1cnNvcil7YT1CYShhLGQuc2VsLnByaW1hcnkoKS5oZWFkLFwiZGl2XCIpO2Q9Yi53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciBlPWIubGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjLnRlVG9wPU1hdGgubWF4KDAsTWF0aC5taW4oYi53cmFwcGVyLmNsaWVudEhlaWdodC0xMCxhLnRvcCtlLnRvcC1kLnRvcCkpO2MudGVMZWZ0PU1hdGgubWF4KDAsTWF0aC5taW4oYi53cmFwcGVyLmNsaWVudFdpZHRoLTEwLGEubGVmdCtlLmxlZnQtZC5sZWZ0KSl9cmV0dXJuIGN9O1YucHJvdG90eXBlLnNob3dTZWxlY3Rpb249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jbS5kaXNwbGF5O0QoYi5jdXJzb3JEaXYsYS5jdXJzb3JzKTtEKGIuc2VsZWN0aW9uRGl2LGEuc2VsZWN0aW9uKTtcbm51bGwhPWEudGVUb3AmJih0aGlzLndyYXBwZXIuc3R5bGUudG9wPWEudGVUb3ArXCJweFwiLHRoaXMud3JhcHBlci5zdHlsZS5sZWZ0PWEudGVMZWZ0K1wicHhcIil9O1YucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKGEpe2lmKCEodGhpcy5jb250ZXh0TWVudVBlbmRpbmd8fHRoaXMuY29tcG9zaW5nJiZhKSl7dmFyIGI9dGhpcy5jbTt0aGlzLnJlc2V0dGluZz0hMDtiLnNvbWV0aGluZ1NlbGVjdGVkKCk/KHRoaXMucHJldklucHV0PVwiXCIsYT1iLmdldFNlbGVjdGlvbigpLHRoaXMudGV4dGFyZWEudmFsdWU9YSxiLnN0YXRlLmZvY3VzZWQmJnBjKHRoaXMudGV4dGFyZWEpLEcmJjk8PVQmJih0aGlzLmhhc1NlbGVjdGlvbj1hKSk6YXx8KHRoaXMucHJldklucHV0PXRoaXMudGV4dGFyZWEudmFsdWU9XCJcIixHJiY5PD1UJiYodGhpcy5oYXNTZWxlY3Rpb249bnVsbCkpO3RoaXMucmVzZXR0aW5nPSExfX07Vi5wcm90b3R5cGUuZ2V0RmllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0YXJlYX07XG5WLnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoPWZ1bmN0aW9uKCl7cmV0dXJuITF9O1YucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7aWYoXCJub2N1cnNvclwiIT10aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkmJighYWN8fGthKHRoaXMudGV4dGFyZWEub3duZXJEb2N1bWVudCkhPXRoaXMudGV4dGFyZWEpKXRyeXt0aGlzLnRleHRhcmVhLmZvY3VzKCl9Y2F0Y2goYSl7fX07Vi5wcm90b3R5cGUuYmx1cj1mdW5jdGlvbigpe3RoaXMudGV4dGFyZWEuYmx1cigpfTtWLnByb3RvdHlwZS5yZXNldFBvc2l0aW9uPWZ1bmN0aW9uKCl7dGhpcy53cmFwcGVyLnN0eWxlLnRvcD10aGlzLndyYXBwZXIuc3R5bGUubGVmdD0wfTtWLnByb3RvdHlwZS5yZWNlaXZlZEZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5zbG93UG9sbCgpfTtWLnByb3RvdHlwZS5zbG93UG9sbD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5wb2xsaW5nRmFzdHx8dGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9wdGlvbnMucG9sbEludGVydmFsLFxuZnVuY3Rpb24oKXthLnBvbGwoKTthLmNtLnN0YXRlLmZvY3VzZWQmJmEuc2xvd1BvbGwoKX0pfTtWLnByb3RvdHlwZS5mYXN0UG9sbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtkLnBvbGwoKXx8Yj8oZC5wb2xsaW5nRmFzdD0hMSxkLnNsb3dQb2xsKCkpOihiPSEwLGQucG9sbGluZy5zZXQoNjAsYSkpfXZhciBiPSExLGQ9dGhpcztkLnBvbGxpbmdGYXN0PSEwO2QucG9sbGluZy5zZXQoMjAsYSl9O1YucHJvdG90eXBlLnBvbGw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5jbSxkPXRoaXMudGV4dGFyZWEsYz10aGlzLnByZXZJbnB1dDtpZih0aGlzLmNvbnRleHRNZW51UGVuZGluZ3x8dGhpcy5yZXNldHRpbmd8fCFiLnN0YXRlLmZvY3VzZWR8fEdoKGQpJiYhYyYmIXRoaXMuY29tcG9zaW5nfHxiLmlzUmVhZE9ubHkoKXx8Yi5vcHRpb25zLmRpc2FibGVJbnB1dHx8Yi5zdGF0ZS5rZXlTZXEpcmV0dXJuITE7dmFyIGU9ZC52YWx1ZTtpZihlPT1jJiYhYi5zb21ldGhpbmdTZWxlY3RlZCgpKXJldHVybiExO1xuaWYoRyYmOTw9VCYmdGhpcy5oYXNTZWxlY3Rpb249PT1lfHx5YSYmL1tcXHVmNzAwLVxcdWY3ZmZdLy50ZXN0KGUpKXJldHVybiBiLmRpc3BsYXkuaW5wdXQucmVzZXQoKSwhMTtpZihiLmRvYy5zZWw9PWIuZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSl7dmFyIGY9ZS5jaGFyQ29kZUF0KDApOzgyMDMhPWZ8fGN8fChjPVwiXFx1MjAwYlwiKTtpZig4NjY2PT1mKXJldHVybiB0aGlzLnJlc2V0KCksdGhpcy5jbS5leGVjQ29tbWFuZChcInVuZG9cIil9dmFyIGc9MDtmb3IoZj1NYXRoLm1pbihjLmxlbmd0aCxlLmxlbmd0aCk7ZzxmJiZjLmNoYXJDb2RlQXQoZyk9PWUuY2hhckNvZGVBdChnKTspKytnO3JhKGIsZnVuY3Rpb24oKXttZShiLGUuc2xpY2UoZyksYy5sZW5ndGgtZyxudWxsLGEuY29tcG9zaW5nP1wiKmNvbXBvc2VcIjpudWxsKTsxRTM8ZS5sZW5ndGh8fC0xPGUuaW5kZXhPZihcIlxcblwiKT9kLnZhbHVlPWEucHJldklucHV0PVwiXCI6YS5wcmV2SW5wdXQ9ZTthLmNvbXBvc2luZyYmKGEuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCksXG5hLmNvbXBvc2luZy5yYW5nZT1iLm1hcmtUZXh0KGEuY29tcG9zaW5nLnN0YXJ0LGIuZ2V0Q3Vyc29yKFwidG9cIikse2NsYXNzTmFtZTpcIkNvZGVNaXJyb3ItY29tcG9zaW5nXCJ9KSl9KTtyZXR1cm4hMH07Vi5wcm90b3R5cGUuZW5zdXJlUG9sbGVkPWZ1bmN0aW9uKCl7dGhpcy5wb2xsaW5nRmFzdCYmdGhpcy5wb2xsKCkmJih0aGlzLnBvbGxpbmdGYXN0PSExKX07Vi5wcm90b3R5cGUub25LZXlQcmVzcz1mdW5jdGlvbigpe0cmJjk8PVQmJih0aGlzLmhhc1NlbGVjdGlvbj1udWxsKTt0aGlzLmZhc3RQb2xsKCl9O1YucHJvdG90eXBlLm9uQ29udGV4dE1lbnU9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe2lmKG51bGwhPWcuc2VsZWN0aW9uU3RhcnQpe3ZhciBxPWUuc29tZXRoaW5nU2VsZWN0ZWQoKSxyPVwiXFx1MjAwYlwiKyhxP2cudmFsdWU6XCJcIik7Zy52YWx1ZT1cIlxcdTIxZGFcIjtnLnZhbHVlPXI7Yy5wcmV2SW5wdXQ9cT9cIlwiOlwiXFx1MjAwYlwiO2cuc2VsZWN0aW9uU3RhcnQ9MTtnLnNlbGVjdGlvbkVuZD1cbnIubGVuZ3RoO2Yuc2VsRm9yQ29udGV4dE1lbnU9ZS5kb2Muc2VsfX1mdW5jdGlvbiBkKCl7aWYoYy5jb250ZXh0TWVudVBlbmRpbmc9PWQmJihjLmNvbnRleHRNZW51UGVuZGluZz0hMSxjLndyYXBwZXIuc3R5bGUuY3NzVGV4dD1tLGcuc3R5bGUuY3NzVGV4dD1sLEcmJjk+VCYmZi5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcChmLnNjcm9sbGVyLnNjcm9sbFRvcD1rKSxudWxsIT1nLnNlbGVjdGlvblN0YXJ0KSl7KCFHfHxHJiY5PlQpJiZiKCk7dmFyIHE9MCxyPWZ1bmN0aW9uKCl7Zi5zZWxGb3JDb250ZXh0TWVudT09ZS5kb2Muc2VsJiYwPT1nLnNlbGVjdGlvblN0YXJ0JiYwPGcuc2VsZWN0aW9uRW5kJiZcIlxcdTIwMGJcIj09Yy5wcmV2SW5wdXQ/YmEoZSxMZikoZSk6MTA+cSsrP2YuZGV0ZWN0aW5nU2VsZWN0QWxsPXNldFRpbWVvdXQociw1MDApOihmLnNlbEZvckNvbnRleHRNZW51PW51bGwsZi5pbnB1dC5yZXNldCgpKX07Zi5kZXRlY3RpbmdTZWxlY3RBbGw9c2V0VGltZW91dChyLFxuMjAwKX19dmFyIGM9dGhpcyxlPWMuY20sZj1lLmRpc3BsYXksZz1jLnRleHRhcmVhO2MuY29udGV4dE1lbnVQZW5kaW5nJiZjLmNvbnRleHRNZW51UGVuZGluZygpO3ZhciBoPWdiKGUsYSksaz1mLnNjcm9sbGVyLnNjcm9sbFRvcDtpZihoJiYhQ2Epe2Uub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUmJi0xPT1lLmRvYy5zZWwuY29udGFpbnMoaCkmJmJhKGUsZGEpKGUuZG9jLE9hKGgpLElhKTt2YXIgbD1nLnN0eWxlLmNzc1RleHQsbT1jLndyYXBwZXIuc3R5bGUuY3NzVGV4dDtoPWMud3JhcHBlci5vZmZzZXRQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Yy53cmFwcGVyLnN0eWxlLmNzc1RleHQ9XCJwb3NpdGlvbjogc3RhdGljXCI7Zy5zdHlsZS5jc3NUZXh0PVwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMzBweDsgaGVpZ2h0OiAzMHB4O1xcbiAgICAgIHRvcDogXCIrKGEuY2xpZW50WS1oLnRvcC01KStcInB4OyBsZWZ0OiBcIisoYS5jbGllbnRYLWgubGVmdC1cbjUpK1wicHg7XFxuICAgICAgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogXCIrKEc/XCJyZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSlcIjpcInRyYW5zcGFyZW50XCIpK1wiO1xcbiAgICAgIG91dGxpbmU6IG5vbmU7IGJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7XCI7aWYoZmEpdmFyIG49Zy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LnNjcm9sbFk7Zi5pbnB1dC5mb2N1cygpO2ZhJiZnLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuc2Nyb2xsVG8obnVsbCxuKTtmLmlucHV0LnJlc2V0KCk7ZS5zb21ldGhpbmdTZWxlY3RlZCgpfHwoZy52YWx1ZT1jLnByZXZJbnB1dD1cIiBcIik7Yy5jb250ZXh0TWVudVBlbmRpbmc9ZDtmLnNlbEZvckNvbnRleHRNZW51PWUuZG9jLnNlbDtjbGVhclRpbWVvdXQoZi5kZXRlY3RpbmdTZWxlY3RBbGwpO0cmJjk8PVQmJmIoKTtpZihqZSl7TWIoYSk7dmFyIHA9XG5mdW5jdGlvbigpe3RhKHdpbmRvdyxcIm1vdXNldXBcIixwKTtzZXRUaW1lb3V0KGQsMjApfTt6KHdpbmRvdyxcIm1vdXNldXBcIixwKX1lbHNlIHNldFRpbWVvdXQoZCw1MCl9fTtWLnByb3RvdHlwZS5yZWFkT25seUNoYW5nZWQ9ZnVuY3Rpb24oYSl7YXx8dGhpcy5yZXNldCgpO3RoaXMudGV4dGFyZWEuZGlzYWJsZWQ9XCJub2N1cnNvclwiPT1hO3RoaXMudGV4dGFyZWEucmVhZE9ubHk9ISFhfTtWLnByb3RvdHlwZS5zZXRVbmVkaXRhYmxlPWZ1bmN0aW9uKCl7fTtWLnByb3RvdHlwZS5uZWVkc0NvbnRlbnRBdHRyaWJ1dGU9ITE7KGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYyxlLGYsZyl7YS5kZWZhdWx0c1tjXT1lO2YmJihkW2NdPWc/ZnVuY3Rpb24oaCxrLGwpe2whPUhiJiZmKGgsayxsKX06Zil9dmFyIGQ9YS5vcHRpb25IYW5kbGVyczthLmRlZmluZU9wdGlvbj1iO2EuSW5pdD1IYjtiKFwidmFsdWVcIixcIlwiLGZ1bmN0aW9uKGMsZSl7cmV0dXJuIGMuc2V0VmFsdWUoZSl9LCEwKTtiKFwibW9kZVwiLFxubnVsbCxmdW5jdGlvbihjLGUpe2MuZG9jLm1vZGVPcHRpb249ZTskZChjKX0sITApO2IoXCJpbmRlbnRVbml0XCIsMiwkZCwhMCk7YihcImluZGVudFdpdGhUYWJzXCIsITEpO2IoXCJzbWFydEluZGVudFwiLCEwKTtiKFwidGFiU2l6ZVwiLDQsZnVuY3Rpb24oYyl7YmMoYyk7VWIoYyk7bWEoYyl9LCEwKTtiKFwibGluZVNlcGFyYXRvclwiLG51bGwsZnVuY3Rpb24oYyxlKXtpZihjLmRvYy5saW5lU2VwPWUpe3ZhciBmPVtdLGc9Yy5kb2MuZmlyc3Q7Yy5kb2MuaXRlcihmdW5jdGlvbihrKXtmb3IodmFyIGw9MDs7KXt2YXIgbT1rLnRleHQuaW5kZXhPZihlLGwpO2lmKC0xPT1tKWJyZWFrO2w9bStlLmxlbmd0aDtmLnB1c2godChnLG0pKX1nKyt9KTtmb3IodmFyIGg9Zi5sZW5ndGgtMTswPD1oO2gtLSlEYihjLmRvYyxlLGZbaF0sdChmW2hdLmxpbmUsZltoXS5jaCtlLmxlbmd0aCkpfX0pO2IoXCJzcGVjaWFsQ2hhcnNcIiwvW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2YtXFx1MDA5ZlxcdTAwYWRcXHUwNjFjXFx1MjAwYlxcdTIwMGVcXHUyMDBmXFx1MjAyOFxcdTIwMjlcXHUyMDJkXFx1MjAyZVxcdTIwNjZcXHUyMDY3XFx1MjA2OVxcdWZlZmZcXHVmZmY5LVxcdWZmZmNdL2csXG5mdW5jdGlvbihjLGUsZil7Yy5zdGF0ZS5zcGVjaWFsQ2hhcnM9bmV3IFJlZ0V4cChlLnNvdXJjZSsoZS50ZXN0KFwiXFx0XCIpP1wiXCI6XCJ8XFx0XCIpLFwiZ1wiKTtmIT1IYiYmYy5yZWZyZXNoKCl9KTtiKFwic3BlY2lhbENoYXJQbGFjZWhvbGRlclwiLE1nLGZ1bmN0aW9uKGMpe3JldHVybiBjLnJlZnJlc2goKX0sITApO2IoXCJlbGVjdHJpY0NoYXJzXCIsITApO2IoXCJpbnB1dFN0eWxlXCIsYWM/XCJjb250ZW50ZWRpdGFibGVcIjpcInRleHRhcmVhXCIsZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihcImlucHV0U3R5bGUgY2FuIG5vdCAoeWV0KSBiZSBjaGFuZ2VkIGluIGEgcnVubmluZyBlZGl0b3JcIik7fSwhMCk7YihcInNwZWxsY2hlY2tcIiwhMSxmdW5jdGlvbihjLGUpe3JldHVybiBjLmdldElucHV0RmllbGQoKS5zcGVsbGNoZWNrPWV9LCEwKTtiKFwiYXV0b2NvcnJlY3RcIiwhMSxmdW5jdGlvbihjLGUpe3JldHVybiBjLmdldElucHV0RmllbGQoKS5hdXRvY29ycmVjdD1lfSwhMCk7YihcImF1dG9jYXBpdGFsaXplXCIsXG4hMSxmdW5jdGlvbihjLGUpe3JldHVybiBjLmdldElucHV0RmllbGQoKS5hdXRvY2FwaXRhbGl6ZT1lfSwhMCk7YihcInJ0bE1vdmVWaXN1YWxseVwiLCFGaCk7YihcIndob2xlTGluZVVwZGF0ZUJlZm9yZVwiLCEwKTtiKFwidGhlbWVcIixcImRlZmF1bHRcIixmdW5jdGlvbihjKXtsZyhjKTskYihjKX0sITApO2IoXCJrZXlNYXBcIixcImRlZmF1bHRcIixmdW5jdGlvbihjLGUsZil7ZT1YYyhlKTsoZj1mIT1IYiYmWGMoZikpJiZmLmRldGFjaCYmZi5kZXRhY2goYyxlKTtlLmF0dGFjaCYmZS5hdHRhY2goYyxmfHxudWxsKX0pO2IoXCJleHRyYUtleXNcIixudWxsKTtiKFwiY29uZmlndXJlTW91c2VcIixudWxsKTtiKFwibGluZVdyYXBwaW5nXCIsITEseWgsITApO2IoXCJndXR0ZXJzXCIsW10sZnVuY3Rpb24oYyxlKXtjLmRpc3BsYXkuZ3V0dGVyU3BlY3M9WWQoZSxjLm9wdGlvbnMubGluZU51bWJlcnMpOyRiKGMpfSwhMCk7YihcImZpeGVkR3V0dGVyXCIsITAsZnVuY3Rpb24oYyxlKXtjLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0PVxuZT9NZChjLmRpc3BsYXkpK1wicHhcIjpcIjBcIjtjLnJlZnJlc2goKX0sITApO2IoXCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhclwiLCExLGZ1bmN0aW9uKGMpe3JldHVybiB5YihjKX0sITApO2IoXCJzY3JvbGxiYXJTdHlsZVwiLFwibmF0aXZlXCIsZnVuY3Rpb24oYyl7b2YoYyk7eWIoYyk7Yy5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGMuZG9jLnNjcm9sbFRvcCk7Yy5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChjLmRvYy5zY3JvbGxMZWZ0KX0sITApO2IoXCJsaW5lTnVtYmVyc1wiLCExLGZ1bmN0aW9uKGMsZSl7Yy5kaXNwbGF5Lmd1dHRlclNwZWNzPVlkKGMub3B0aW9ucy5ndXR0ZXJzLGUpOyRiKGMpfSwhMCk7YihcImZpcnN0TGluZU51bWJlclwiLDEsJGIsITApO2IoXCJsaW5lTnVtYmVyRm9ybWF0dGVyXCIsZnVuY3Rpb24oYyl7cmV0dXJuIGN9LCRiLCEwKTtiKFwic2hvd0N1cnNvcldoZW5TZWxlY3RpbmdcIiwhMSxWYiwhMCk7YihcInJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudVwiLFxuITApO2IoXCJsaW5lV2lzZUNvcHlDdXRcIiwhMCk7YihcInBhc3RlTGluZXNQZXJTZWxlY3Rpb25cIiwhMCk7YihcInNlbGVjdGlvbnNNYXlUb3VjaFwiLCExKTtiKFwicmVhZE9ubHlcIiwhMSxmdW5jdGlvbihjLGUpe1wibm9jdXJzb3JcIj09ZSYmKHdiKGMpLGMuZGlzcGxheS5pbnB1dC5ibHVyKCkpO2MuZGlzcGxheS5pbnB1dC5yZWFkT25seUNoYW5nZWQoZSl9KTtiKFwic2NyZWVuUmVhZGVyTGFiZWxcIixudWxsLGZ1bmN0aW9uKGMsZSl7Yy5kaXNwbGF5LmlucHV0LnNjcmVlblJlYWRlckxhYmVsQ2hhbmdlZChcIlwiPT09ZT9udWxsOmUpfSk7YihcImRpc2FibGVJbnB1dFwiLCExLGZ1bmN0aW9uKGMsZSl7ZXx8Yy5kaXNwbGF5LmlucHV0LnJlc2V0KCl9LCEwKTtiKFwiZHJhZ0Ryb3BcIiwhMCx4aCk7YihcImFsbG93RHJvcEZpbGVUeXBlc1wiLG51bGwpO2IoXCJjdXJzb3JCbGlua1JhdGVcIiw1MzApO2IoXCJjdXJzb3JTY3JvbGxNYXJnaW5cIiwwKTtiKFwiY3Vyc29ySGVpZ2h0XCIsMSxWYiwhMCk7YihcInNpbmdsZUN1cnNvckhlaWdodFBlckxpbmVcIixcbiEwLFZiLCEwKTtiKFwid29ya1RpbWVcIiwxMDApO2IoXCJ3b3JrRGVsYXlcIiwxMDApO2IoXCJmbGF0dGVuU3BhbnNcIiwhMCxiYywhMCk7YihcImFkZE1vZGVDbGFzc1wiLCExLGJjLCEwKTtiKFwicG9sbEludGVydmFsXCIsMTAwKTtiKFwidW5kb0RlcHRoXCIsMjAwLGZ1bmN0aW9uKGMsZSl7cmV0dXJuIGMuZG9jLmhpc3RvcnkudW5kb0RlcHRoPWV9KTtiKFwiaGlzdG9yeUV2ZW50RGVsYXlcIiwxMjUwKTtiKFwidmlld3BvcnRNYXJnaW5cIiwxMCxmdW5jdGlvbihjKXtyZXR1cm4gYy5yZWZyZXNoKCl9LCEwKTtiKFwibWF4SGlnaGxpZ2h0TGVuZ3RoXCIsMUU0LGJjLCEwKTtiKFwibW92ZUlucHV0V2l0aEN1cnNvclwiLCEwLGZ1bmN0aW9uKGMsZSl7ZXx8Yy5kaXNwbGF5LmlucHV0LnJlc2V0UG9zaXRpb24oKX0pO2IoXCJ0YWJpbmRleFwiLG51bGwsZnVuY3Rpb24oYyxlKXtyZXR1cm4gYy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkudGFiSW5kZXg9ZXx8XCJcIn0pO2IoXCJhdXRvZm9jdXNcIixudWxsKTtiKFwiZGlyZWN0aW9uXCIsXG5cImx0clwiLGZ1bmN0aW9uKGMsZSl7cmV0dXJuIGMuZG9jLnNldERpcmVjdGlvbihlKX0sITApO2IoXCJwaHJhc2VzXCIsbnVsbCl9KShVKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS5vcHRpb25IYW5kbGVycyxkPWEuaGVscGVycz17fTthLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YSxmb2N1czpmdW5jdGlvbigpe3FhKHRoaXMpLmRlZmF1bHRWaWV3LmZvY3VzKCk7dGhpcy5kaXNwbGF5LmlucHV0LmZvY3VzKCl9LHNldE9wdGlvbjpmdW5jdGlvbihjLGUpe3ZhciBmPXRoaXMub3B0aW9ucyxnPWZbY107aWYoZltjXSE9ZXx8XCJtb2RlXCI9PWMpZltjXT1lLGIuaGFzT3duUHJvcGVydHkoYykmJmJhKHRoaXMsYltjXSkodGhpcyxlLGcpLFcodGhpcyxcIm9wdGlvbkNoYW5nZVwiLHRoaXMsYyl9LGdldE9wdGlvbjpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5vcHRpb25zW2NdfSxnZXREb2M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2N9LGFkZEtleU1hcDpmdW5jdGlvbihjLGUpe3RoaXMuc3RhdGUua2V5TWFwc1tlP1xuXCJwdXNoXCI6XCJ1bnNoaWZ0XCJdKFhjKGMpKX0scmVtb3ZlS2V5TWFwOmZ1bmN0aW9uKGMpe2Zvcih2YXIgZT10aGlzLnN0YXRlLmtleU1hcHMsZj0wO2Y8ZS5sZW5ndGg7KytmKWlmKGVbZl09PWN8fGVbZl0ubmFtZT09YylyZXR1cm4gZS5zcGxpY2UoZiwxKSwhMH0sYWRkT3ZlcmxheTppYShmdW5jdGlvbihjLGUpe3ZhciBmPWMudG9rZW4/YzphLmdldE1vZGUodGhpcy5vcHRpb25zLGMpO2lmKGYuc3RhcnRTdGF0ZSl0aHJvdyBFcnJvcihcIk92ZXJsYXlzIG1heSBub3QgYmUgc3RhdGVmdWwuXCIpO3lnKHRoaXMuc3RhdGUub3ZlcmxheXMse21vZGU6Zixtb2RlU3BlYzpjLG9wYXF1ZTplJiZlLm9wYXF1ZSxwcmlvcml0eTplJiZlLnByaW9yaXR5fHwwfSxmdW5jdGlvbihnKXtyZXR1cm4gZy5wcmlvcml0eX0pO3RoaXMuc3RhdGUubW9kZUdlbisrO21hKHRoaXMpfSkscmVtb3ZlT3ZlcmxheTppYShmdW5jdGlvbihjKXtmb3IodmFyIGU9dGhpcy5zdGF0ZS5vdmVybGF5cyxmPTA7ZjxlLmxlbmd0aDsrK2Ype3ZhciBnPVxuZVtmXS5tb2RlU3BlYztpZihnPT1jfHxcInN0cmluZ1wiPT10eXBlb2YgYyYmZy5uYW1lPT1jKXtlLnNwbGljZShmLDEpO3RoaXMuc3RhdGUubW9kZUdlbisrO21hKHRoaXMpO2JyZWFrfX19KSxpbmRlbnRMaW5lOmlhKGZ1bmN0aW9uKGMsZSxmKXtcInN0cmluZ1wiIT10eXBlb2YgZSYmXCJudW1iZXJcIiE9dHlwZW9mIGUmJihlPW51bGw9PWU/dGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50P1wic21hcnRcIjpcInByZXZcIjplP1wiYWRkXCI6XCJzdWJ0cmFjdFwiKTtOYih0aGlzLmRvYyxjKSYmbmModGhpcyxjLGUsZil9KSxpbmRlbnRTZWxlY3Rpb246aWEoZnVuY3Rpb24oYyl7Zm9yKHZhciBlPXRoaXMuZG9jLnNlbC5yYW5nZXMsZj0tMSxnPTA7ZzxlLmxlbmd0aDtnKyspe3ZhciBoPWVbZ107aWYoaC5lbXB0eSgpKWguaGVhZC5saW5lPmYmJihuYyh0aGlzLGguaGVhZC5saW5lLGMsITApLGY9aC5oZWFkLmxpbmUsZz09dGhpcy5kb2Muc2VsLnByaW1JbmRleCYmeGIodGhpcykpO2Vsc2V7dmFyIGs9aC5mcm9tKCk7XG5oPWgudG8oKTt2YXIgbD1NYXRoLm1heChmLGsubGluZSk7Zj1NYXRoLm1pbih0aGlzLmxhc3RMaW5lKCksaC5saW5lLShoLmNoPzA6MSkpKzE7Zm9yKGg9bDtoPGY7KytoKW5jKHRoaXMsaCxjKTtoPXRoaXMuZG9jLnNlbC5yYW5nZXM7MD09ay5jaCYmZS5sZW5ndGg9PWgubGVuZ3RoJiYwPGhbZ10uZnJvbSgpLmNoJiZkZSh0aGlzLmRvYyxnLG5ldyBJKGssaFtnXS50bygpKSxJYSl9fX0pLGdldFRva2VuQXQ6ZnVuY3Rpb24oYyxlKXtyZXR1cm4gQ2UodGhpcyxjLGUpfSxnZXRMaW5lVG9rZW5zOmZ1bmN0aW9uKGMsZSl7cmV0dXJuIENlKHRoaXMsdChjKSxlLCEwKX0sZ2V0VG9rZW5UeXBlQXQ6ZnVuY3Rpb24oYyl7Yz1DKHRoaXMuZG9jLGMpO3ZhciBlPUFlKHRoaXMsdyh0aGlzLmRvYyxjLmxpbmUpKSxmPTAsZz0oZS5sZW5ndGgtMSkvMjtjPWMuY2g7aWYoMD09YyllPWVbMl07ZWxzZSBmb3IoOzspe3ZhciBoPWYrZz4+MTtpZigoaD9lWzIqaC0xXTowKT49YylnPWg7ZWxzZSBpZihlWzIqXG5oKzFdPGMpZj1oKzE7ZWxzZXtlPWVbMipoKzJdO2JyZWFrfX1mPWU/ZS5pbmRleE9mKFwib3ZlcmxheSBcIik6LTE7cmV0dXJuIDA+Zj9lOjA9PWY/bnVsbDplLnNsaWNlKDAsZi0xKX0sZ2V0TW9kZUF0OmZ1bmN0aW9uKGMpe3ZhciBlPXRoaXMuZG9jLm1vZGU7cmV0dXJuIGUuaW5uZXJNb2RlP2EuaW5uZXJNb2RlKGUsdGhpcy5nZXRUb2tlbkF0KGMpLnN0YXRlKS5tb2RlOmV9LGdldEhlbHBlcjpmdW5jdGlvbihjLGUpe3JldHVybiB0aGlzLmdldEhlbHBlcnMoYyxlKVswXX0sZ2V0SGVscGVyczpmdW5jdGlvbihjLGUpe3ZhciBmPVtdO2lmKCFkLmhhc093blByb3BlcnR5KGUpKXJldHVybiBmO3ZhciBnPWRbZV07Yz10aGlzLmdldE1vZGVBdChjKTtpZihcInN0cmluZ1wiPT10eXBlb2YgY1tlXSlnW2NbZV1dJiZmLnB1c2goZ1tjW2VdXSk7ZWxzZSBpZihjW2VdKWZvcih2YXIgaD0wO2g8Y1tlXS5sZW5ndGg7aCsrKXt2YXIgaz1nW2NbZV1baF1dO2smJmYucHVzaChrKX1lbHNlIGMuaGVscGVyVHlwZSYmXG5nW2MuaGVscGVyVHlwZV0/Zi5wdXNoKGdbYy5oZWxwZXJUeXBlXSk6Z1tjLm5hbWVdJiZmLnB1c2goZ1tjLm5hbWVdKTtmb3IoZT0wO2U8Zy5fZ2xvYmFsLmxlbmd0aDtlKyspaD1nLl9nbG9iYWxbZV0saC5wcmVkKGMsdGhpcykmJi0xPT1lYShmLGgudmFsKSYmZi5wdXNoKGgudmFsKTtyZXR1cm4gZn0sZ2V0U3RhdGVBZnRlcjpmdW5jdGlvbihjLGUpe3ZhciBmPXRoaXMuZG9jO2M9TWF0aC5tYXgoZi5maXJzdCxNYXRoLm1pbihudWxsPT1jP2YuZmlyc3QrZi5zaXplLTE6YyxmLmZpcnN0K2Yuc2l6ZS0xKSk7cmV0dXJuIE9iKHRoaXMsYysxLGUpLnN0YXRlfSxjdXJzb3JDb29yZHM6ZnVuY3Rpb24oYyxlKXt2YXIgZj10aGlzLmRvYy5zZWwucHJpbWFyeSgpO2M9bnVsbD09Yz9mLmhlYWQ6XCJvYmplY3RcIj09dHlwZW9mIGM/Qyh0aGlzLmRvYyxjKTpjP2YuZnJvbSgpOmYudG8oKTtyZXR1cm4gQmEodGhpcyxjLGV8fFwicGFnZVwiKX0sY2hhckNvb3JkczpmdW5jdGlvbihjLGUpe3JldHVybiBJYyh0aGlzLFxuQyh0aGlzLmRvYyxjKSxlfHxcInBhZ2VcIil9LGNvb3Jkc0NoYXI6ZnVuY3Rpb24oYyxlKXtjPWFmKHRoaXMsYyxlfHxcInBhZ2VcIik7cmV0dXJuIEtkKHRoaXMsYy5sZWZ0LGMudG9wKX0sbGluZUF0SGVpZ2h0OmZ1bmN0aW9uKGMsZSl7Yz1hZih0aGlzLHt0b3A6YyxsZWZ0OjB9LGV8fFwicGFnZVwiKS50b3A7cmV0dXJuIGJiKHRoaXMuZG9jLGMrdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpfSxoZWlnaHRBdExpbmU6ZnVuY3Rpb24oYyxlLGYpe3ZhciBnPSExO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBjKXt2YXIgaD10aGlzLmRvYy5maXJzdCt0aGlzLmRvYy5zaXplLTE7Yzx0aGlzLmRvYy5maXJzdD9jPXRoaXMuZG9jLmZpcnN0OmM+aCYmKGM9aCxnPSEwKTtjPXcodGhpcy5kb2MsYyl9cmV0dXJuIEhjKHRoaXMsYyx7dG9wOjAsbGVmdDowfSxlfHxcInBhZ2VcIixmfHxnKS50b3ArKGc/dGhpcy5kb2MuaGVpZ2h0LUdhKGMpOjApfSxkZWZhdWx0VGV4dEhlaWdodDpmdW5jdGlvbigpe3JldHVybiB2Yih0aGlzLmRpc3BsYXkpfSxcbmRlZmF1bHRDaGFyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gdWIodGhpcy5kaXNwbGF5KX0sZ2V0Vmlld3BvcnQ6ZnVuY3Rpb24oKXtyZXR1cm57ZnJvbTp0aGlzLmRpc3BsYXkudmlld0Zyb20sdG86dGhpcy5kaXNwbGF5LnZpZXdUb319LGFkZFdpZGdldDpmdW5jdGlvbihjLGUsZixnLGgpe3ZhciBrPXRoaXMuZGlzcGxheTtjPUJhKHRoaXMsQyh0aGlzLmRvYyxjKSk7dmFyIGw9Yy5ib3R0b20sbT1jLmxlZnQ7ZS5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCI7ZS5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsXCJ0cnVlXCIpO3RoaXMuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGUpO2suc2l6ZXIuYXBwZW5kQ2hpbGQoZSk7aWYoXCJvdmVyXCI9PWcpbD1jLnRvcDtlbHNlIGlmKFwiYWJvdmVcIj09Z3x8XCJuZWFyXCI9PWcpe3ZhciBuPU1hdGgubWF4KGsud3JhcHBlci5jbGllbnRIZWlnaHQsdGhpcy5kb2MuaGVpZ2h0KSxwPU1hdGgubWF4KGsuc2l6ZXIuY2xpZW50V2lkdGgsay5saW5lU3BhY2UuY2xpZW50V2lkdGgpO1xuKFwiYWJvdmVcIj09Z3x8Yy5ib3R0b20rZS5vZmZzZXRIZWlnaHQ+bikmJmMudG9wPmUub2Zmc2V0SGVpZ2h0P2w9Yy50b3AtZS5vZmZzZXRIZWlnaHQ6Yy5ib3R0b20rZS5vZmZzZXRIZWlnaHQ8PW4mJihsPWMuYm90dG9tKTttK2Uub2Zmc2V0V2lkdGg+cCYmKG09cC1lLm9mZnNldFdpZHRoKX1lLnN0eWxlLnRvcD1sK1wicHhcIjtlLnN0eWxlLmxlZnQ9ZS5zdHlsZS5yaWdodD1cIlwiO1wicmlnaHRcIj09aD8obT1rLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgsZS5zdHlsZS5yaWdodD1cIjBweFwiKTooXCJsZWZ0XCI9PWg/bT0wOlwibWlkZGxlXCI9PWgmJihtPShrLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgpLzIpLGUuc3R5bGUubGVmdD1tK1wicHhcIik7ZiYmKGM9VGQodGhpcyx7bGVmdDptLHRvcDpsLHJpZ2h0Om0rZS5vZmZzZXRXaWR0aCxib3R0b206bCtlLm9mZnNldEhlaWdodH0pLG51bGwhPWMuc2Nyb2xsVG9wJiZYYih0aGlzLGMuc2Nyb2xsVG9wKSxudWxsIT1jLnNjcm9sbExlZnQmJlxua2IodGhpcyxjLnNjcm9sbExlZnQpKX0sdHJpZ2dlck9uS2V5RG93bjppYShmZyksdHJpZ2dlck9uS2V5UHJlc3M6aWEoaGcpLHRyaWdnZXJPbktleVVwOmdnLHRyaWdnZXJPbk1vdXNlRG93bjppYShpZyksZXhlY0NvbW1hbmQ6ZnVuY3Rpb24oYyl7aWYoamMuaGFzT3duUHJvcGVydHkoYykpcmV0dXJuIGpjW2NdLmNhbGwobnVsbCx0aGlzKX0sdHJpZ2dlckVsZWN0cmljOmlhKGZ1bmN0aW9uKGMpe29nKHRoaXMsYyl9KSxmaW5kUG9zSDpmdW5jdGlvbihjLGUsZixnKXt2YXIgaD0xOzA+ZSYmKGg9LTEsZT0tZSk7Yz1DKHRoaXMuZG9jLGMpO2Zvcih2YXIgaz0wO2s8ZSYmKGM9b2UodGhpcy5kb2MsYyxoLGYsZyksIWMuaGl0U2lkZSk7KytrKTtyZXR1cm4gY30sbW92ZUg6aWEoZnVuY3Rpb24oYyxlKXt2YXIgZj10aGlzO3RoaXMuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKGcpe3JldHVybiBmLmRpc3BsYXkuc2hpZnR8fGYuZG9jLmV4dGVuZHx8Zy5lbXB0eSgpP29lKGYuZG9jLFxuZy5oZWFkLGMsZSxmLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTowPmM/Zy5mcm9tKCk6Zy50bygpfSxxYyl9KSxkZWxldGVIOmlhKGZ1bmN0aW9uKGMsZSl7dmFyIGY9dGhpcy5kb2M7dGhpcy5kb2Muc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCk/Zi5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsbnVsbCxcIitkZWxldGVcIik6R2IodGhpcyxmdW5jdGlvbihnKXt2YXIgaD1vZShmLGcuaGVhZCxjLGUsITEpO3JldHVybiAwPmM/e2Zyb206aCx0bzpnLmhlYWR9Ontmcm9tOmcuaGVhZCx0bzpofX0pfSksZmluZFBvc1Y6ZnVuY3Rpb24oYyxlLGYsZyl7dmFyIGg9MTswPmUmJihoPS0xLGU9LWUpO3ZhciBrPUModGhpcy5kb2MsYyk7Zm9yKGM9MDtjPGUmJihrPUJhKHRoaXMsayxcImRpdlwiKSxudWxsPT1nP2c9ay5sZWZ0OmsubGVmdD1nLGs9dGcodGhpcyxrLGgsZiksIWsuaGl0U2lkZSk7KytjKTtyZXR1cm4ga30sbW92ZVY6aWEoZnVuY3Rpb24oYyxlKXt2YXIgZj10aGlzLGc9dGhpcy5kb2MsaD1bXSxrPVxuIXRoaXMuZGlzcGxheS5zaGlmdCYmIWcuZXh0ZW5kJiZnLnNlbC5zb21ldGhpbmdTZWxlY3RlZCgpO2cuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKG0pe2lmKGspcmV0dXJuIDA+Yz9tLmZyb20oKTptLnRvKCk7dmFyIG49QmEoZixtLmhlYWQsXCJkaXZcIik7bnVsbCE9bS5nb2FsQ29sdW1uJiYobi5sZWZ0PW0uZ29hbENvbHVtbik7aC5wdXNoKG4ubGVmdCk7dmFyIHA9dGcoZixuLGMsZSk7XCJwYWdlXCI9PWUmJm09PWcuc2VsLnByaW1hcnkoKSYmTmMoZixJYyhmLHAsXCJkaXZcIikudG9wLW4udG9wKTtyZXR1cm4gcH0scWMpO2lmKGgubGVuZ3RoKWZvcih2YXIgbD0wO2w8Zy5zZWwucmFuZ2VzLmxlbmd0aDtsKyspZy5zZWwucmFuZ2VzW2xdLmdvYWxDb2x1bW49aFtsXX0pLGZpbmRXb3JkQXQ6ZnVuY3Rpb24oYyl7dmFyIGU9dyh0aGlzLmRvYyxjLmxpbmUpLnRleHQsZj1jLmNoLGc9Yy5jaDtpZihlKXt2YXIgaD10aGlzLmdldEhlbHBlcihjLFwid29yZENoYXJzXCIpO1wiYmVmb3JlXCIhPVxuYy5zdGlja3kmJmchPWUubGVuZ3RofHwhZj8rK2c6LS1mO3ZhciBrPWUuY2hhckF0KGYpO2ZvcihrPXhjKGssaCk/ZnVuY3Rpb24obCl7cmV0dXJuIHhjKGwsaCl9Oi9cXHMvLnRlc3Qoayk/ZnVuY3Rpb24obCl7cmV0dXJuL1xccy8udGVzdChsKX06ZnVuY3Rpb24obCl7cmV0dXJuIS9cXHMvLnRlc3QobCkmJiF4YyhsKX07MDxmJiZrKGUuY2hhckF0KGYtMSkpOyktLWY7Zm9yKDtnPGUubGVuZ3RoJiZrKGUuY2hhckF0KGcpKTspKytnfXJldHVybiBuZXcgSSh0KGMubGluZSxmKSx0KGMubGluZSxnKSl9LHRvZ2dsZU92ZXJ3cml0ZTpmdW5jdGlvbihjKXtpZihudWxsPT1jfHxjIT10aGlzLnN0YXRlLm92ZXJ3cml0ZSkodGhpcy5zdGF0ZS5vdmVyd3JpdGU9IXRoaXMuc3RhdGUub3ZlcndyaXRlKT9ZYSh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LFwiQ29kZU1pcnJvci1vdmVyd3JpdGVcIik6amIodGhpcy5kaXNwbGF5LmN1cnNvckRpdixcIkNvZGVNaXJyb3Itb3ZlcndyaXRlXCIpLFcodGhpcyxcIm92ZXJ3cml0ZVRvZ2dsZVwiLFxudGhpcyx0aGlzLnN0YXRlLm92ZXJ3cml0ZSl9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpPT1rYShxYSh0aGlzKSl9LGlzUmVhZE9ubHk6ZnVuY3Rpb24oKXtyZXR1cm4hKCF0aGlzLm9wdGlvbnMucmVhZE9ubHkmJiF0aGlzLmRvYy5jYW50RWRpdCl9LHNjcm9sbFRvOmlhKGZ1bmN0aW9uKGMsZSl7V2IodGhpcyxjLGUpfSksZ2V0U2Nyb2xsSW5mbzpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZGlzcGxheS5zY3JvbGxlcjtyZXR1cm57bGVmdDpjLnNjcm9sbExlZnQsdG9wOmMuc2Nyb2xsVG9wLGhlaWdodDpjLnNjcm9sbEhlaWdodC1IYSh0aGlzKS10aGlzLmRpc3BsYXkuYmFySGVpZ2h0LHdpZHRoOmMuc2Nyb2xsV2lkdGgtSGEodGhpcyktdGhpcy5kaXNwbGF5LmJhcldpZHRoLGNsaWVudEhlaWdodDpFZCh0aGlzKSxjbGllbnRXaWR0aDpjYih0aGlzKX19LHNjcm9sbEludG9WaWV3OmlhKGZ1bmN0aW9uKGMsZSl7bnVsbD09Yz8oYz1cbntmcm9tOnRoaXMuZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCx0bzpudWxsfSxudWxsPT1lJiYoZT10aGlzLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luKSk6XCJudW1iZXJcIj09dHlwZW9mIGM/Yz17ZnJvbTp0KGMsMCksdG86bnVsbH06bnVsbD09Yy5mcm9tJiYoYz17ZnJvbTpjLHRvOm51bGx9KTtjLnRvfHwoYy50bz1jLmZyb20pO2MubWFyZ2luPWV8fDA7bnVsbCE9Yy5mcm9tLmxpbmU/KE9jKHRoaXMpLHRoaXMuY3VyT3Auc2Nyb2xsVG9Qb3M9Yyk6a2YodGhpcyxjLmZyb20sYy50byxjLm1hcmdpbil9KSxzZXRTaXplOmlhKGZ1bmN0aW9uKGMsZSl7dmFyIGY9dGhpcyxnPWZ1bmN0aW9uKGspe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBrfHwvXlxcZCskLy50ZXN0KFN0cmluZyhrKSk/aytcInB4XCI6a307bnVsbCE9YyYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoPWcoYykpO251bGwhPWUmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQ9ZyhlKSk7dGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZyYmXG5ZZSh0aGlzKTt2YXIgaD10aGlzLmRpc3BsYXkudmlld0Zyb207dGhpcy5kb2MuaXRlcihoLHRoaXMuZGlzcGxheS52aWV3VG8sZnVuY3Rpb24oayl7aWYoay53aWRnZXRzKWZvcih2YXIgbD0wO2w8ay53aWRnZXRzLmxlbmd0aDtsKyspaWYoay53aWRnZXRzW2xdLm5vSFNjcm9sbCl7U2EoZixoLFwid2lkZ2V0XCIpO2JyZWFrfSsraH0pO3RoaXMuY3VyT3AuZm9yY2VVcGRhdGU9ITA7Vyh0aGlzLFwicmVmcmVzaFwiLHRoaXMpfSksb3BlcmF0aW9uOmZ1bmN0aW9uKGMpe3JldHVybiByYSh0aGlzLGMpfSxzdGFydE9wZXJhdGlvbjpmdW5jdGlvbigpe3JldHVybiBsYih0aGlzKX0sZW5kT3BlcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG1iKHRoaXMpfSxyZWZyZXNoOmlhKGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7bWEodGhpcyk7dGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMDtVYih0aGlzKTtXYih0aGlzLHRoaXMuZG9jLnNjcm9sbExlZnQsdGhpcy5kb2Muc2Nyb2xsVG9wKTtcblhkKHRoaXMuZGlzcGxheSk7KG51bGw9PWN8fC41PE1hdGguYWJzKGMtdmIodGhpcy5kaXNwbGF5KSl8fHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcpJiZOZCh0aGlzKTtXKHRoaXMsXCJyZWZyZXNoXCIsdGhpcyl9KSxzd2FwRG9jOmlhKGZ1bmN0aW9uKGMpe3ZhciBlPXRoaXMuZG9jO2UuY209bnVsbDt0aGlzLnN0YXRlLnNlbGVjdGluZ1RleHQmJnRoaXMuc3RhdGUuc2VsZWN0aW5nVGV4dCgpO3pmKHRoaXMsYyk7VWIodGhpcyk7dGhpcy5kaXNwbGF5LmlucHV0LnJlc2V0KCk7V2IodGhpcyxjLnNjcm9sbExlZnQsYy5zY3JvbGxUb3ApO3RoaXMuY3VyT3AuZm9yY2VTY3JvbGw9ITA7YWEodGhpcyxcInN3YXBEb2NcIix0aGlzLGUpO3JldHVybiBlfSkscGhyYXNlOmZ1bmN0aW9uKGMpe3ZhciBlPXRoaXMub3B0aW9ucy5waHJhc2VzO3JldHVybiBlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxjKT9lW2NdOmN9LGdldElucHV0RmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCl9LFxuZ2V0V3JhcHBlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LGdldFNjcm9sbGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LGdldEd1dHRlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnN9fTtwYihhKTthLnJlZ2lzdGVySGVscGVyPWZ1bmN0aW9uKGMsZSxmKXtkLmhhc093blByb3BlcnR5KGMpfHwoZFtjXT1hW2NdPXtfZ2xvYmFsOltdfSk7ZFtjXVtlXT1mfTthLnJlZ2lzdGVyR2xvYmFsSGVscGVyPWZ1bmN0aW9uKGMsZSxmLGcpe2EucmVnaXN0ZXJIZWxwZXIoYyxlLGcpO2RbY10uX2dsb2JhbC5wdXNoKHtwcmVkOmYsdmFsOmd9KX19KShVKTt2YXIgSWg9XCJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IgY29uc3RydWN0b3JcIi5zcGxpdChcIiBcIiksdWM7Zm9yKHVjIGluIG9hLnByb3RvdHlwZSlvYS5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodWMpJiZcbjA+ZWEoSWgsdWMpJiYoVS5wcm90b3R5cGVbdWNdPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KHRoaXMuZG9jLGFyZ3VtZW50cyl9fShvYS5wcm90b3R5cGVbdWNdKSk7cGIob2EpO1UuaW5wdXRTdHlsZXM9e3RleHRhcmVhOlYsY29udGVudGVkaXRhYmxlOk99O1UuZGVmaW5lTW9kZT1mdW5jdGlvbihhKXtVLmRlZmF1bHRzLm1vZGV8fFwibnVsbFwiPT1hfHwoVS5kZWZhdWx0cy5tb2RlPWEpO0RnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07VS5kZWZpbmVNSU1FPWZ1bmN0aW9uKGEsYil7cWJbYV09Yn07VS5kZWZpbmVNb2RlKFwibnVsbFwiLGZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuOmZ1bmN0aW9uKGEpe3JldHVybiBhLnNraXBUb0VuZCgpfX19KTtVLmRlZmluZU1JTUUoXCJ0ZXh0L3BsYWluXCIsXCJudWxsXCIpO1UuZGVmaW5lRXh0ZW5zaW9uPWZ1bmN0aW9uKGEsYil7VS5wcm90b3R5cGVbYV09Yn07VS5kZWZpbmVEb2NFeHRlbnNpb249ZnVuY3Rpb24oYSxiKXtvYS5wcm90b3R5cGVbYV09XG5ifTtVLmZyb21UZXh0QXJlYT1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoKXthLnZhbHVlPWguZ2V0VmFsdWUoKX1iPWI/WmEoYik6e307Yi52YWx1ZT1hLnZhbHVlOyFiLnRhYmluZGV4JiZhLnRhYkluZGV4JiYoYi50YWJpbmRleD1hLnRhYkluZGV4KTshYi5wbGFjZWhvbGRlciYmYS5wbGFjZWhvbGRlciYmKGIucGxhY2Vob2xkZXI9YS5wbGFjZWhvbGRlcik7aWYobnVsbD09Yi5hdXRvZm9jdXMpe3ZhciBjPWthKGEub3duZXJEb2N1bWVudCk7Yi5hdXRvZm9jdXM9Yz09YXx8bnVsbCE9YS5nZXRBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIikmJmM9PWRvY3VtZW50LmJvZHl9aWYoYS5mb3JtJiYoeihhLmZvcm0sXCJzdWJtaXRcIixkKSwhYi5sZWF2ZVN1Ym1pdE1ldGhvZEFsb25lKSl7dmFyIGU9YS5mb3JtO3ZhciBmPWUuc3VibWl0O3RyeXt2YXIgZz1lLnN1Ym1pdD1mdW5jdGlvbigpe2QoKTtlLnN1Ym1pdD1mO2Uuc3VibWl0KCk7ZS5zdWJtaXQ9Z319Y2F0Y2goayl7fX1iLmZpbmlzaEluaXQ9XG5mdW5jdGlvbihrKXtrLnNhdmU9ZDtrLmdldFRleHRBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGF9O2sudG9UZXh0QXJlYT1mdW5jdGlvbigpe2sudG9UZXh0QXJlYT1pc05hTjtkKCk7YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGsuZ2V0V3JhcHBlckVsZW1lbnQoKSk7YS5zdHlsZS5kaXNwbGF5PVwiXCI7YS5mb3JtJiYodGEoYS5mb3JtLFwic3VibWl0XCIsZCksYi5sZWF2ZVN1Ym1pdE1ldGhvZEFsb25lfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmZvcm0uc3VibWl0fHwoYS5mb3JtLnN1Ym1pdD1mKSl9fTthLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7dmFyIGg9VShmdW5jdGlvbihrKXtyZXR1cm4gYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShrLGEubmV4dFNpYmxpbmcpfSxiKTtyZXR1cm4gaH07KGZ1bmN0aW9uKGEpe2Eub2ZmPXRhO2Eub249ejthLndoZWVsRXZlbnRQaXhlbHM9Wmc7YS5Eb2M9b2E7YS5zcGxpdExpbmVzPW5lO2EuY291bnRDb2x1bW49d2E7YS5maW5kQ29sdW1uPWhkO2EuaXNXb3JkQ2hhcj1cbmpkO2EuUGFzcz1aYzthLnNpZ25hbD1XO2EuTGluZT16YjthLmNoYW5nZUVuZD1UYTthLnNjcm9sbGJhck1vZGVsPXBmO2EuUG9zPXQ7YS5jbXBQb3M9QjthLm1vZGVzPW1kO2EubWltZU1vZGVzPXFiO2EucmVzb2x2ZU1vZGU9emM7YS5nZXRNb2RlPW5kO2EubW9kZUV4dGVuc2lvbnM9cmI7YS5leHRlbmRNb2RlPUVnO2EuY29weVN0YXRlPSRhO2Euc3RhcnRTdGF0ZT13ZTthLmlubmVyTW9kZT1vZDthLmNvbW1hbmRzPWpjO2Eua2V5TWFwPWljO2Eua2V5TmFtZT1hZzthLmlzTW9kaWZpZXJLZXk9WWY7YS5sb29rdXBLZXk9RmI7YS5ub3JtYWxpemVLZXlNYXA9amg7YS5TdHJpbmdTdHJlYW09WDthLlNoYXJlZFRleHRNYXJrZXI9aGM7YS5UZXh0TWFya2VyPVZhO2EuTGluZVdpZGdldD1nYzthLmVfcHJldmVudERlZmF1bHQ9bGE7YS5lX3N0b3BQcm9wYWdhdGlvbj11ZTthLmVfc3RvcD1NYjthLmFkZENsYXNzPVlhO2EuY29udGFpbnM9amE7YS5ybUNsYXNzPWpiO2Eua2V5TmFtZXM9V2F9KShVKTtcblUudmVyc2lvbj1cIjUuNjUuOVwiO3JldHVybiBVfSk7XG4iLCIoZnVuY3Rpb24odil7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/dihyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sdik6dihDb2RlTWlycm9yKX0pKGZ1bmN0aW9uKHYpe3YuZGVmaW5lTW9kZShcImphdmFzY3JpcHRcIixmdW5jdGlvbihVYSxBKXt2YXIgcCx3LGY7ZnVuY3Rpb24gdShhLGIsZCl7Vj1hO2NhPWQ7cmV0dXJuIGJ9ZnVuY3Rpb24gSShhLGIpe3ZhciBkPWEubmV4dCgpO2lmKCdcIic9PWR8fFwiJ1wiPT1kKXJldHVybiBiLnRva2VuaXplPVZhKGQpLGIudG9rZW5pemUoYSxiKTtpZihcIi5cIj09ZCYmYS5tYXRjaCgvXlxcZFtcXGRfXSooPzpbZUVdWytcXC1dP1tcXGRfXSspPy8pKXJldHVybiB1KFwibnVtYmVyXCIsXCJudW1iZXJcIik7aWYoXCIuXCI9PWQmJmEubWF0Y2goXCIuLlwiKSlyZXR1cm4gdShcInNwcmVhZFwiLFwibWV0YVwiKTtcbmlmKC9bXFxbXFxde31cXChcXCksOzpcXC5dLy50ZXN0KGQpKXJldHVybiB1KGQpO2lmKFwiPVwiPT1kJiZhLmVhdChcIj5cIikpcmV0dXJuIHUoXCI9PlwiLFwib3BlcmF0b3JcIik7aWYoXCIwXCI9PWQmJmEubWF0Y2goL14oPzp4W1xcZEEtRmEtZl9dK3xvWzAtN19dK3xiWzAxX10rKW4/LykpcmV0dXJuIHUoXCJudW1iZXJcIixcIm51bWJlclwiKTtpZigvXFxkLy50ZXN0KGQpKXJldHVybiBhLm1hdGNoKC9eW1xcZF9dKig/Om58KD86XFwuW1xcZF9dKik/KD86W2VFXVsrXFwtXT9bXFxkX10rKT8pPy8pLHUoXCJudW1iZXJcIixcIm51bWJlclwiKTtpZihcIi9cIj09ZCl7aWYoYS5lYXQoXCIqXCIpKXJldHVybiBiLnRva2VuaXplPWRhLGRhKGEsYik7aWYoYS5lYXQoXCIvXCIpKXJldHVybiBhLnNraXBUb0VuZCgpLHUoXCJjb21tZW50XCIsXCJjb21tZW50XCIpO2lmKEFhKGEsYiwxKSl7YTpmb3IodmFyIGU9Yj0hMTtudWxsIT0oZD1hLm5leHQoKSk7KXtpZighYil7aWYoXCIvXCI9PWQmJiFlKWJyZWFrIGE7XCJbXCI9PWQ/ZT0hMDplJiZcIl1cIj09ZCYmKGU9XG4hMSl9Yj0hYiYmXCJcXFxcXCI9PWR9YS5tYXRjaCgvXlxcYigoW2dpbXl1c10pKD8hW2dpbXl1c10qXFwyKSkrXFxiLyk7cmV0dXJuIHUoXCJyZWdleHBcIixcInN0cmluZy0yXCIpfWEuZWF0KFwiPVwiKTtyZXR1cm4gdShcIm9wZXJhdG9yXCIsXCJvcGVyYXRvclwiLGEuY3VycmVudCgpKX1pZihcImBcIj09ZClyZXR1cm4gYi50b2tlbml6ZT1XLFcoYSxiKTtpZihcIiNcIj09ZCYmXCIhXCI9PWEucGVlaygpKXJldHVybiBhLnNraXBUb0VuZCgpLHUoXCJtZXRhXCIsXCJtZXRhXCIpO2lmKFwiI1wiPT1kJiZhLmVhdFdoaWxlKGVhKSlyZXR1cm4gdShcInZhcmlhYmxlXCIsXCJwcm9wZXJ0eVwiKTtpZihcIjxcIj09ZCYmYS5tYXRjaChcIiEtLVwiKXx8XCItXCI9PWQmJmEubWF0Y2goXCItPlwiKSYmIS9cXFMvLnRlc3QoYS5zdHJpbmcuc2xpY2UoMCxhLnN0YXJ0KSkpcmV0dXJuIGEuc2tpcFRvRW5kKCksdShcImNvbW1lbnRcIixcImNvbW1lbnRcIik7aWYoQmEudGVzdChkKSlyZXR1cm5cIj5cIj09ZCYmYi5sZXhpY2FsJiZcIj5cIj09Yi5sZXhpY2FsLnR5cGV8fChhLmVhdChcIj1cIik/XG5cIiFcIiE9ZCYmXCI9XCIhPWR8fGEuZWF0KFwiPVwiKTovWzw+KitcXC18Jj9dLy50ZXN0KGQpJiYoYS5lYXQoZCksXCI+XCI9PWQmJmEuZWF0KGQpKSksXCI/XCI9PWQmJmEuZWF0KFwiLlwiKT91KFwiLlwiKTp1KFwib3BlcmF0b3JcIixcIm9wZXJhdG9yXCIsYS5jdXJyZW50KCkpO2lmKGVhLnRlc3QoZCkpe2EuZWF0V2hpbGUoZWEpO2Q9YS5jdXJyZW50KCk7aWYoXCIuXCIhPWIubGFzdFR5cGUpe2lmKENhLnByb3BlcnR5SXNFbnVtZXJhYmxlKGQpKXJldHVybiBhPUNhW2RdLHUoYS50eXBlLGEuc3R5bGUsZCk7aWYoXCJhc3luY1wiPT1kJiZhLm1hdGNoKC9eKFxcc3xcXC9cXCooW14qXXxcXCooPyFcXC8pKSo/XFwqXFwvKSpbXFxbXFwoXFx3XS8sITEpKXJldHVybiB1KFwiYXN5bmNcIixcImtleXdvcmRcIixkKX1yZXR1cm4gdShcInZhcmlhYmxlXCIsXCJ2YXJpYWJsZVwiLGQpfX1mdW5jdGlvbiBWYShhKXtyZXR1cm4gZnVuY3Rpb24oYixkKXt2YXIgZT0hMSxoO2lmKGZhJiZcIkBcIj09Yi5wZWVrKCkmJmIubWF0Y2goV2EpKXJldHVybiBkLnRva2VuaXplPVxuSSx1KFwianNvbmxkLWtleXdvcmRcIixcIm1ldGFcIik7Zm9yKDtudWxsIT0oaD1iLm5leHQoKSkmJihoIT1hfHxlKTspZT0hZSYmXCJcXFxcXCI9PWg7ZXx8KGQudG9rZW5pemU9SSk7cmV0dXJuIHUoXCJzdHJpbmdcIixcInN0cmluZ1wiKX19ZnVuY3Rpb24gZGEoYSxiKXtmb3IodmFyIGQ9ITEsZTtlPWEubmV4dCgpOyl7aWYoXCIvXCI9PWUmJmQpe2IudG9rZW5pemU9STticmVha31kPVwiKlwiPT1lfXJldHVybiB1KFwiY29tbWVudFwiLFwiY29tbWVudFwiKX1mdW5jdGlvbiBXKGEsYil7Zm9yKHZhciBkPSExLGU7bnVsbCE9KGU9YS5uZXh0KCkpOyl7aWYoIWQmJihcImBcIj09ZXx8XCIkXCI9PWUmJmEuZWF0KFwie1wiKSkpe2IudG9rZW5pemU9STticmVha31kPSFkJiZcIlxcXFxcIj09ZX1yZXR1cm4gdShcInF1YXNpXCIsXCJzdHJpbmctMlwiLGEuY3VycmVudCgpKX1mdW5jdGlvbiBxYShhLGIpe2IuZmF0QXJyb3dBdCYmKGIuZmF0QXJyb3dBdD1udWxsKTt2YXIgZD1hLnN0cmluZy5pbmRleE9mKFwiPT5cIixhLnN0YXJ0KTtpZighKDA+XG5kKSl7aWYocil7dmFyIGU9LzpcXHMqKD86XFx3Kyg/OjxbXj5dKj58XFxbXFxdKT98XFx7W159XSpcXH0pXFxzKiQvLmV4ZWMoYS5zdHJpbmcuc2xpY2UoYS5zdGFydCxkKSk7ZSYmKGQ9ZS5pbmRleCl9ZT0wO3ZhciBoPSExO2ZvcigtLWQ7MDw9ZDstLWQpe3ZhciBtPWEuc3RyaW5nLmNoYXJBdChkKSx5PVwiKFt7fV0pXCIuaW5kZXhPZihtKTtpZigwPD15JiYzPnkpe2lmKCFlKXsrK2Q7YnJlYWt9aWYoMD09LS1lKXtcIihcIj09bSYmKGg9ITApO2JyZWFrfX1lbHNlIGlmKDM8PXkmJjY+eSkrK2U7ZWxzZSBpZihlYS50ZXN0KG0pKWg9ITA7ZWxzZSBpZigvW1wiJ1xcL2BdLy50ZXN0KG0pKWZvcig7Oy0tZCl7aWYoMD09ZClyZXR1cm47aWYoYS5zdHJpbmcuY2hhckF0KGQtMSk9PW0mJlwiXFxcXFwiIT1hLnN0cmluZy5jaGFyQXQoZC0yKSl7ZC0tO2JyZWFrfX1lbHNlIGlmKGgmJiFlKXsrK2Q7YnJlYWt9fWgmJiFlJiYoYi5mYXRBcnJvd0F0PWQpfX1mdW5jdGlvbiBEYShhLGIsZCxlLGgsbSl7dGhpcy5pbmRlbnRlZD1cbmE7dGhpcy5jb2x1bW49Yjt0aGlzLnR5cGU9ZDt0aGlzLnByZXY9aDt0aGlzLmluZm89bTtudWxsIT1lJiYodGhpcy5hbGlnbj1lKX1mdW5jdGlvbiBFYShhLGIsZCxlLGgpe3ZhciBtPWEuY2M7cD1hO3c9aDtmPW51bGw7cmE9bTtYPWI7YS5sZXhpY2FsLmhhc093blByb3BlcnR5KFwiYWxpZ25cIil8fChhLmxleGljYWwuYWxpZ249ITApO2Zvcig7OylpZigobS5sZW5ndGg/bS5wb3AoKTpKP3Q6eCkoZCxlKSl7Zm9yKDttLmxlbmd0aCYmbVttLmxlbmd0aC0xXS5sZXg7KW0ucG9wKCkoKTtpZihmKXJldHVybiBmO2lmKGQ9XCJ2YXJpYWJsZVwiPT1kKWE6aWYoRmEpe2ZvcihkPWEubG9jYWxWYXJzO2Q7ZD1kLm5leHQpaWYoZC5uYW1lPT1lKXtkPSEwO2JyZWFrIGF9Zm9yKGE9YS5jb250ZXh0O2E7YT1hLnByZXYpZm9yKGQ9YS52YXJzO2Q7ZD1kLm5leHQpaWYoZC5uYW1lPT1lKXtkPSEwO2JyZWFrIGF9ZD12b2lkIDB9ZWxzZSBkPSExO3JldHVybiBkP1widmFyaWFibGUtMlwiOmJ9fWZ1bmN0aW9uIGsoKXtmb3IodmFyIGE9XG5hcmd1bWVudHMubGVuZ3RoLTE7MDw9YTthLS0pcmEucHVzaChhcmd1bWVudHNbYV0pfWZ1bmN0aW9uIGMoKXtrLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4hMH1mdW5jdGlvbiBzYShhLGIpe2Zvcig7YjtiPWIubmV4dClpZihiLm5hbWU9PWEpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTyhhKXt2YXIgYj1wO2Y9XCJkZWZcIjtpZihGYSl7aWYoYi5jb250ZXh0KWlmKFwidmFyXCI9PWIubGV4aWNhbC5pbmZvJiZiLmNvbnRleHQmJmIuY29udGV4dC5ibG9jayl7dmFyIGQ9R2EoYSxiLmNvbnRleHQpO2lmKG51bGwhPWQpe2IuY29udGV4dD1kO3JldHVybn19ZWxzZSBpZighc2EoYSxiLmxvY2FsVmFycykpe2IubG9jYWxWYXJzPW5ldyBZKGEsYi5sb2NhbFZhcnMpO3JldHVybn1BLmdsb2JhbFZhcnMmJiFzYShhLGIuZ2xvYmFsVmFycykmJihiLmdsb2JhbFZhcnM9bmV3IFkoYSxiLmdsb2JhbFZhcnMpKX19ZnVuY3Rpb24gR2EoYSxiKXtyZXR1cm4gYj9iLmJsb2NrPyhhPUdhKGEsXG5iLnByZXYpKT9hPT1iLnByZXY/YjpuZXcgWihhLGIudmFycywhMCk6bnVsbDpzYShhLGIudmFycyk/YjpuZXcgWihiLnByZXYsbmV3IFkoYSxiLnZhcnMpLCExKTpudWxsfWZ1bmN0aW9uIGhhKGEpe3JldHVyblwicHVibGljXCI9PWF8fFwicHJpdmF0ZVwiPT1hfHxcInByb3RlY3RlZFwiPT1hfHxcImFic3RyYWN0XCI9PWF8fFwicmVhZG9ubHlcIj09YX1mdW5jdGlvbiBaKGEsYixkKXt0aGlzLnByZXY9YTt0aGlzLnZhcnM9Yjt0aGlzLmJsb2NrPWR9ZnVuY3Rpb24gWShhLGIpe3RoaXMubmFtZT1hO3RoaXMubmV4dD1ifWZ1bmN0aW9uIEsoKXtwLmNvbnRleHQ9bmV3IFoocC5jb250ZXh0LHAubG9jYWxWYXJzLCExKTtwLmxvY2FsVmFycz1YYX1mdW5jdGlvbiBpYSgpe3AuY29udGV4dD1uZXcgWihwLmNvbnRleHQscC5sb2NhbFZhcnMsITApO3AubG9jYWxWYXJzPW51bGx9ZnVuY3Rpb24gQygpe3AubG9jYWxWYXJzPXAuY29udGV4dC52YXJzO3AuY29udGV4dD1wLmNvbnRleHQucHJldn1mdW5jdGlvbiBsKGEsXG5iKXt2YXIgZD1mdW5jdGlvbigpe3ZhciBlPXAsaD1lLmluZGVudGVkO2lmKFwic3RhdFwiPT1lLmxleGljYWwudHlwZSloPWUubGV4aWNhbC5pbmRlbnRlZDtlbHNlIGZvcih2YXIgbT1lLmxleGljYWw7bSYmXCIpXCI9PW0udHlwZSYmbS5hbGlnbjttPW0ucHJldiloPW0uaW5kZW50ZWQ7ZS5sZXhpY2FsPW5ldyBEYShoLHcuY29sdW1uKCksYSxudWxsLGUubGV4aWNhbCxiKX07ZC5sZXg9ITA7cmV0dXJuIGR9ZnVuY3Rpb24gZygpe3ZhciBhPXA7YS5sZXhpY2FsLnByZXYmJihcIilcIj09YS5sZXhpY2FsLnR5cGUmJihhLmluZGVudGVkPWEubGV4aWNhbC5pbmRlbnRlZCksYS5sZXhpY2FsPWEubGV4aWNhbC5wcmV2KX1mdW5jdGlvbiBuKGEpe2Z1bmN0aW9uIGIoZCl7cmV0dXJuIGQ9PWE/YygpOlwiO1wiPT1hfHxcIn1cIj09ZHx8XCIpXCI9PWR8fFwiXVwiPT1kP2soKTpjKGIpfXJldHVybiBifWZ1bmN0aW9uIHgoYSxiKXtyZXR1cm5cInZhclwiPT1hP2MobChcInZhcmRlZlwiLGIpLHRhLG4oXCI7XCIpLGcpOlwia2V5d29yZCBhXCI9PVxuYT9jKGwoXCJmb3JtXCIpLHVhLHgsZyk6XCJrZXl3b3JkIGJcIj09YT9jKGwoXCJmb3JtXCIpLHgsZyk6XCJrZXl3b3JkIGRcIj09YT93Lm1hdGNoKC9eXFxzKiQvLCExKT9jKCk6YyhsKFwic3RhdFwiKSxQLG4oXCI7XCIpLGcpOlwiZGVidWdnZXJcIj09YT9jKG4oXCI7XCIpKTpcIntcIj09YT9jKGwoXCJ9XCIpLGlhLGphLGcsQyk6XCI7XCI9PWE/YygpOlwiaWZcIj09YT8oXCJlbHNlXCI9PXAubGV4aWNhbC5pbmZvJiZwLmNjW3AuY2MubGVuZ3RoLTFdPT1nJiZwLmNjLnBvcCgpKCksYyhsKFwiZm9ybVwiKSx1YSx4LGcsSGEpKTpcImZ1bmN0aW9uXCI9PWE/YyhHKTpcImZvclwiPT1hP2MobChcImZvcm1cIiksaWEsSWEseCxDLGcpOlwiY2xhc3NcIj09YXx8ciYmXCJpbnRlcmZhY2VcIj09Yj8oZj1cImtleXdvcmRcIixjKGwoXCJmb3JtXCIsXCJjbGFzc1wiPT1hP2E6YiksSmEsZykpOlwidmFyaWFibGVcIj09YT9yJiZcImRlY2xhcmVcIj09Yj8oZj1cImtleXdvcmRcIixjKHgpKTpyJiYoXCJtb2R1bGVcIj09Ynx8XCJlbnVtXCI9PWJ8fFwidHlwZVwiPT1iKSYmdy5tYXRjaCgvXlxccypcXHcvLFxuITEpPyhmPVwia2V5d29yZFwiLFwiZW51bVwiPT1iP2MoS2EpOlwidHlwZVwiPT1iP2MoTGEsbihcIm9wZXJhdG9yXCIpLHEsbihcIjtcIikpOmMobChcImZvcm1cIiksRCxuKFwie1wiKSxsKFwifVwiKSxqYSxnLGcpKTpyJiZcIm5hbWVzcGFjZVwiPT1iPyhmPVwia2V5d29yZFwiLGMobChcImZvcm1cIiksdCx4LGcpKTpyJiZcImFic3RyYWN0XCI9PWI/KGY9XCJrZXl3b3JkXCIsYyh4KSk6YyhsKFwic3RhdFwiKSxZYSk6XCJzd2l0Y2hcIj09YT9jKGwoXCJmb3JtXCIpLHVhLG4oXCJ7XCIpLGwoXCJ9XCIsXCJzd2l0Y2hcIiksaWEsamEsZyxnLEMpOlwiY2FzZVwiPT1hP2ModCxuKFwiOlwiKSk6XCJkZWZhdWx0XCI9PWE/YyhuKFwiOlwiKSk6XCJjYXRjaFwiPT1hP2MobChcImZvcm1cIiksSyxaYSx4LGcsQyk6XCJleHBvcnRcIj09YT9jKGwoXCJzdGF0XCIpLCRhLGcpOlwiaW1wb3J0XCI9PWE/YyhsKFwic3RhdFwiKSxhYixnKTpcImFzeW5jXCI9PWE/Yyh4KTpcIkBcIj09Yj9jKHQseCk6ayhsKFwic3RhdFwiKSx0LG4oXCI7XCIpLGcpfWZ1bmN0aW9uIFphKGEpe2lmKFwiKFwiPT1hKXJldHVybiBjKEwsXG5uKFwiKVwiKSl9ZnVuY3Rpb24gdChhLGIpe3JldHVybiBNYShhLGIsITEpfWZ1bmN0aW9uIEIoYSxiKXtyZXR1cm4gTWEoYSxiLCEwKX1mdW5jdGlvbiB1YShhKXtyZXR1cm5cIihcIiE9YT9rKCk6YyhsKFwiKVwiKSxQLG4oXCIpXCIpLGcpfWZ1bmN0aW9uIE1hKGEsYixkKXtpZihwLmZhdEFycm93QXQ9PXcuc3RhcnQpe3ZhciBlPWQ/TmE6T2E7aWYoXCIoXCI9PWEpcmV0dXJuIGMoSyxsKFwiKVwiKSx6KEwsXCIpXCIpLGcsbihcIj0+XCIpLGUsQyk7aWYoXCJ2YXJpYWJsZVwiPT1hKXJldHVybiBrKEssRCxuKFwiPT5cIiksZSxDKX1lPWQ/UTpNO3JldHVybiBiYi5oYXNPd25Qcm9wZXJ0eShhKT9jKGUpOlwiZnVuY3Rpb25cIj09YT9jKEcsZSk6XCJjbGFzc1wiPT1hfHxyJiZcImludGVyZmFjZVwiPT1iPyhmPVwia2V5d29yZFwiLGMobChcImZvcm1cIiksY2IsZykpOlwia2V5d29yZCBjXCI9PWF8fFwiYXN5bmNcIj09YT9jKGQ/Qjp0KTpcIihcIj09YT9jKGwoXCIpXCIpLFAsbihcIilcIiksZyxlKTpcIm9wZXJhdG9yXCI9PWF8fFwic3ByZWFkXCI9PWE/YyhkP1xuQjp0KTpcIltcIj09YT9jKGwoXCJdXCIpLGRiLGcsZSk6XCJ7XCI9PWE/YWEoa2EsXCJ9XCIsbnVsbCxlKTpcInF1YXNpXCI9PWE/ayhsYSxlKTpcIm5ld1wiPT1hP2MoZWIoZCkpOmMoKX1mdW5jdGlvbiBQKGEpe3JldHVybiBhLm1hdGNoKC9bO1xcfVxcKVxcXSxdLyk/aygpOmsodCl9ZnVuY3Rpb24gTShhLGIpe3JldHVyblwiLFwiPT1hP2MoUCk6UShhLGIsITEpfWZ1bmN0aW9uIFEoYSxiLGQpe3ZhciBlPTA9PWQ/TTpRLGg9MD09ZD90OkI7aWYoXCI9PlwiPT1hKXJldHVybiBjKEssZD9OYTpPYSxDKTtpZihcIm9wZXJhdG9yXCI9PWEpcmV0dXJuL1xcK1xcK3wtLS8udGVzdChiKXx8ciYmXCIhXCI9PWI/YyhlKTpyJiZcIjxcIj09YiYmdy5tYXRjaCgvXihbXjw+XXw8W148Pl0qPikqPlxccypcXCgvLCExKT9jKGwoXCI+XCIpLHoocSxcIj5cIiksZyxlKTpcIj9cIj09Yj9jKHQsbihcIjpcIiksaCk6YyhoKTtpZihcInF1YXNpXCI9PWEpcmV0dXJuIGsobGEsZSk7aWYoXCI7XCIhPWEpe2lmKFwiKFwiPT1hKXJldHVybiBhYShCLFwiKVwiLFwiY2FsbFwiLGUpO2lmKFwiLlwiPT1cbmEpcmV0dXJuIGMoZmIsZSk7aWYoXCJbXCI9PWEpcmV0dXJuIGMobChcIl1cIiksUCxuKFwiXVwiKSxnLGUpO2lmKHImJlwiYXNcIj09YilyZXR1cm4gZj1cImtleXdvcmRcIixjKHEsZSk7aWYoXCJyZWdleHBcIj09YSlyZXR1cm4gcC5sYXN0VHlwZT1mPVwib3BlcmF0b3JcIix3LmJhY2tVcCh3LnBvcy13LnN0YXJ0LTEpLGMoaCl9fWZ1bmN0aW9uIGxhKGEsYil7cmV0dXJuXCJxdWFzaVwiIT1hP2soKTpcIiR7XCIhPWIuc2xpY2UoYi5sZW5ndGgtMik/YyhsYSk6YyhQLGdiKX1mdW5jdGlvbiBnYihhKXtpZihcIn1cIj09YSlyZXR1cm4gZj1cInN0cmluZy0yXCIscC50b2tlbml6ZT1XLGMobGEpfWZ1bmN0aW9uIE9hKGEpe3FhKHcscCk7cmV0dXJuIGsoXCJ7XCI9PWE/eDp0KX1mdW5jdGlvbiBOYShhKXtxYSh3LHApO3JldHVybiBrKFwie1wiPT1hP3g6Qil9ZnVuY3Rpb24gZWIoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVyblwiLlwiPT1iP2MoYT9oYjppYik6XCJ2YXJpYWJsZVwiPT1iJiZyP2MoamIsYT9ROk0pOmsoYT9COnQpfX1cbmZ1bmN0aW9uIGliKGEsYil7aWYoXCJ0YXJnZXRcIj09YilyZXR1cm4gZj1cImtleXdvcmRcIixjKE0pfWZ1bmN0aW9uIGhiKGEsYil7aWYoXCJ0YXJnZXRcIj09YilyZXR1cm4gZj1cImtleXdvcmRcIixjKFEpfWZ1bmN0aW9uIFlhKGEpe3JldHVyblwiOlwiPT1hP2MoZyx4KTprKE0sbihcIjtcIiksZyl9ZnVuY3Rpb24gZmIoYSl7aWYoXCJ2YXJpYWJsZVwiPT1hKXJldHVybiBmPVwicHJvcGVydHlcIixjKCl9ZnVuY3Rpb24ga2EoYSxiKXtpZihcImFzeW5jXCI9PWEpcmV0dXJuIGY9XCJwcm9wZXJ0eVwiLGMoa2EpO2lmKFwidmFyaWFibGVcIj09YXx8XCJrZXl3b3JkXCI9PVgpe2Y9XCJwcm9wZXJ0eVwiO2lmKFwiZ2V0XCI9PWJ8fFwic2V0XCI9PWIpcmV0dXJuIGMoa2IpO3ZhciBkO3ImJnAuZmF0QXJyb3dBdD09dy5zdGFydCYmKGQ9dy5tYXRjaCgvXlxccyo6XFxzKi8sITEpKSYmKHAuZmF0QXJyb3dBdD13LnBvcytkWzBdLmxlbmd0aCk7cmV0dXJuIGMoTil9aWYoXCJudW1iZXJcIj09YXx8XCJzdHJpbmdcIj09YSlyZXR1cm4gZj1mYT9cInByb3BlcnR5XCI6XG5YK1wiIHByb3BlcnR5XCIsYyhOKTtpZihcImpzb25sZC1rZXl3b3JkXCI9PWEpcmV0dXJuIGMoTik7aWYociYmaGEoYikpcmV0dXJuIGY9XCJrZXl3b3JkXCIsYyhrYSk7aWYoXCJbXCI9PWEpcmV0dXJuIGModCxSLG4oXCJdXCIpLE4pO2lmKFwic3ByZWFkXCI9PWEpcmV0dXJuIGMoQixOKTtpZihcIipcIj09YilyZXR1cm4gZj1cImtleXdvcmRcIixjKGthKTtpZihcIjpcIj09YSlyZXR1cm4gayhOKX1mdW5jdGlvbiBrYihhKXtpZihcInZhcmlhYmxlXCIhPWEpcmV0dXJuIGsoTik7Zj1cInByb3BlcnR5XCI7cmV0dXJuIGMoRyl9ZnVuY3Rpb24gTihhKXtpZihcIjpcIj09YSlyZXR1cm4gYyhCKTtpZihcIihcIj09YSlyZXR1cm4gayhHKX1mdW5jdGlvbiB6KGEsYixkKXtmdW5jdGlvbiBlKGgsbSl7cmV0dXJuKGQ/LTE8ZC5pbmRleE9mKGgpOlwiLFwiPT1oKT8oaD1wLmxleGljYWwsXCJjYWxsXCI9PWguaW5mbyYmKGgucG9zPShoLnBvc3x8MCkrMSksYyhmdW5jdGlvbih5LHZhKXtyZXR1cm4geT09Ynx8dmE9PWI/aygpOmsoYSl9LGUpKTpcbmg9PWJ8fG09PWI/YygpOmQmJi0xPGQuaW5kZXhPZihcIjtcIik/ayhhKTpjKG4oYikpfXJldHVybiBmdW5jdGlvbihoLG0pe3JldHVybiBoPT1ifHxtPT1iP2MoKTprKGEsZSl9fWZ1bmN0aW9uIGFhKGEsYixkKXtmb3IodmFyIGU9MztlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXJhLnB1c2goYXJndW1lbnRzW2VdKTtyZXR1cm4gYyhsKGIsZCkseihhLGIpLGcpfWZ1bmN0aW9uIGphKGEpe3JldHVyblwifVwiPT1hP2MoKTprKHgsamEpfWZ1bmN0aW9uIFIoYSxiKXtpZihyKXtpZihcIjpcIj09YSlyZXR1cm4gYyhxKTtpZihcIj9cIj09YilyZXR1cm4gYyhSKX19ZnVuY3Rpb24gbGIoYSxiKXtpZihyJiYoXCI6XCI9PWF8fFwiaW5cIj09YikpcmV0dXJuIGMocSl9ZnVuY3Rpb24gUGEoYSl7aWYociYmXCI6XCI9PWEpcmV0dXJuIHcubWF0Y2goL15cXHMqXFx3K1xccytpc1xcYi8sITEpP2ModCxtYixxKTpjKHEpfWZ1bmN0aW9uIG1iKGEsYil7aWYoXCJpc1wiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMoKX1mdW5jdGlvbiBxKGEsXG5iKXtpZihcImtleW9mXCI9PWJ8fFwidHlwZW9mXCI9PWJ8fFwiaW5mZXJcIj09Ynx8XCJyZWFkb25seVwiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMoXCJ0eXBlb2ZcIj09Yj9COnEpO2lmKFwidmFyaWFibGVcIj09YXx8XCJ2b2lkXCI9PWIpcmV0dXJuIGY9XCJ0eXBlXCIsYyhFKTtpZihcInxcIj09Ynx8XCImXCI9PWIpcmV0dXJuIGMocSk7aWYoXCJzdHJpbmdcIj09YXx8XCJudW1iZXJcIj09YXx8XCJhdG9tXCI9PWEpcmV0dXJuIGMoRSk7aWYoXCJbXCI9PWEpcmV0dXJuIGMobChcIl1cIikseihxLFwiXVwiLFwiLFwiKSxnLEUpO2lmKFwie1wiPT1hKXJldHVybiBjKGwoXCJ9XCIpLHdhLGcsRSk7aWYoXCIoXCI9PWEpcmV0dXJuIGMoeih4YSxcIilcIiksbmIsRSk7aWYoXCI8XCI9PWEpcmV0dXJuIGMoeihxLFwiPlwiKSxxKTtpZihcInF1YXNpXCI9PWEpcmV0dXJuIGsoeWEsRSl9ZnVuY3Rpb24gbmIoYSl7aWYoXCI9PlwiPT1hKXJldHVybiBjKHEpfWZ1bmN0aW9uIHdhKGEpe3JldHVybiBhLm1hdGNoKC9bXFx9XFwpXFxdXS8pP2MoKTpcIixcIj09YXx8XCI7XCI9PWE/Yyh3YSk6XG5rKGJhLHdhKX1mdW5jdGlvbiBiYShhLGIpe2lmKFwidmFyaWFibGVcIj09YXx8XCJrZXl3b3JkXCI9PVgpcmV0dXJuIGY9XCJwcm9wZXJ0eVwiLGMoYmEpO2lmKFwiP1wiPT1ifHxcIm51bWJlclwiPT1hfHxcInN0cmluZ1wiPT1hKXJldHVybiBjKGJhKTtpZihcIjpcIj09YSlyZXR1cm4gYyhxKTtpZihcIltcIj09YSlyZXR1cm4gYyhuKFwidmFyaWFibGVcIiksbGIsbihcIl1cIiksYmEpO2lmKFwiKFwiPT1hKXJldHVybiBrKFMsYmEpO2lmKCFhLm1hdGNoKC9bO1xcfVxcKVxcXSxdLykpcmV0dXJuIGMoKX1mdW5jdGlvbiB5YShhLGIpe3JldHVyblwicXVhc2lcIiE9YT9rKCk6XCIke1wiIT1iLnNsaWNlKGIubGVuZ3RoLTIpP2MoeWEpOmMocSxvYil9ZnVuY3Rpb24gb2IoYSl7aWYoXCJ9XCI9PWEpcmV0dXJuIGY9XCJzdHJpbmctMlwiLHAudG9rZW5pemU9VyxjKHlhKX1mdW5jdGlvbiB4YShhLGIpe3JldHVyblwidmFyaWFibGVcIj09YSYmdy5tYXRjaCgvXlxccypbPzpdLywhMSl8fFwiP1wiPT1iP2MoeGEpOlwiOlwiPT1hP2MocSk6XCJzcHJlYWRcIj09XG5hP2MoeGEpOmsocSl9ZnVuY3Rpb24gRShhLGIpe2lmKFwiPFwiPT1iKXJldHVybiBjKGwoXCI+XCIpLHoocSxcIj5cIiksZyxFKTtpZihcInxcIj09Ynx8XCIuXCI9PWF8fFwiJlwiPT1iKXJldHVybiBjKHEpO2lmKFwiW1wiPT1hKXJldHVybiBjKHEsbihcIl1cIiksRSk7aWYoXCJleHRlbmRzXCI9PWJ8fFwiaW1wbGVtZW50c1wiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMocSk7aWYoXCI/XCI9PWIpcmV0dXJuIGMocSxuKFwiOlwiKSxxKX1mdW5jdGlvbiBqYihhLGIpe2lmKFwiPFwiPT1iKXJldHVybiBjKGwoXCI+XCIpLHoocSxcIj5cIiksZyxFKX1mdW5jdGlvbiBtYSgpe3JldHVybiBrKHEscGIpfWZ1bmN0aW9uIHBiKGEsYil7aWYoXCI9XCI9PWIpcmV0dXJuIGMocSl9ZnVuY3Rpb24gdGEoYSxiKXtyZXR1cm5cImVudW1cIj09Yj8oZj1cImtleXdvcmRcIixjKEthKSk6ayhELFIsSCxxYil9ZnVuY3Rpb24gRChhLGIpe2lmKHImJmhhKGIpKXJldHVybiBmPVwia2V5d29yZFwiLGMoRCk7aWYoXCJ2YXJpYWJsZVwiPT1hKXJldHVybiBPKGIpLGMoKTtcbmlmKFwic3ByZWFkXCI9PWEpcmV0dXJuIGMoRCk7aWYoXCJbXCI9PWEpcmV0dXJuIGFhKHJiLFwiXVwiKTtpZihcIntcIj09YSlyZXR1cm4gYWEoUWEsXCJ9XCIpfWZ1bmN0aW9uIFFhKGEsYil7aWYoXCJ2YXJpYWJsZVwiPT1hJiYhdy5tYXRjaCgvXlxccyo6LywhMSkpcmV0dXJuIE8oYiksYyhIKTtcInZhcmlhYmxlXCI9PWEmJihmPVwicHJvcGVydHlcIik7cmV0dXJuXCJzcHJlYWRcIj09YT9jKEQpOlwifVwiPT1hP2soKTpcIltcIj09YT9jKHQsbihcIl1cIiksbihcIjpcIiksUWEpOmMobihcIjpcIiksRCxIKX1mdW5jdGlvbiByYigpe3JldHVybiBrKEQsSCl9ZnVuY3Rpb24gSChhLGIpe2lmKFwiPVwiPT1iKXJldHVybiBjKEIpfWZ1bmN0aW9uIHFiKGEpe2lmKFwiLFwiPT1hKXJldHVybiBjKHRhKX1mdW5jdGlvbiBIYShhLGIpe2lmKFwia2V5d29yZCBiXCI9PWEmJlwiZWxzZVwiPT1iKXJldHVybiBjKGwoXCJmb3JtXCIsXCJlbHNlXCIpLHgsZyl9ZnVuY3Rpb24gSWEoYSxiKXtpZihcImF3YWl0XCI9PWIpcmV0dXJuIGMoSWEpO2lmKFwiKFwiPT1hKXJldHVybiBjKGwoXCIpXCIpLFxuc2IsZyl9ZnVuY3Rpb24gc2IoYSl7cmV0dXJuXCJ2YXJcIj09YT9jKHRhLFQpOlwidmFyaWFibGVcIj09YT9jKFQpOmsoVCl9ZnVuY3Rpb24gVChhLGIpe3JldHVyblwiKVwiPT1hP2MoKTpcIjtcIj09YT9jKFQpOlwiaW5cIj09Ynx8XCJvZlwiPT1iPyhmPVwia2V5d29yZFwiLGModCxUKSk6ayh0LFQpfWZ1bmN0aW9uIEcoYSxiKXtpZihcIipcIj09YilyZXR1cm4gZj1cImtleXdvcmRcIixjKEcpO2lmKFwidmFyaWFibGVcIj09YSlyZXR1cm4gTyhiKSxjKEcpO2lmKFwiKFwiPT1hKXJldHVybiBjKEssbChcIilcIikseihMLFwiKVwiKSxnLFBhLHgsQyk7aWYociYmXCI8XCI9PWIpcmV0dXJuIGMobChcIj5cIikseihtYSxcIj5cIiksZyxHKX1mdW5jdGlvbiBTKGEsYil7aWYoXCIqXCI9PWIpcmV0dXJuIGY9XCJrZXl3b3JkXCIsYyhTKTtpZihcInZhcmlhYmxlXCI9PWEpcmV0dXJuIE8oYiksYyhTKTtpZihcIihcIj09YSlyZXR1cm4gYyhLLGwoXCIpXCIpLHooTCxcIilcIiksZyxQYSxDKTtpZihyJiZcIjxcIj09YilyZXR1cm4gYyhsKFwiPlwiKSx6KG1hLFwiPlwiKSxcbmcsUyl9ZnVuY3Rpb24gTGEoYSxiKXtpZihcImtleXdvcmRcIj09YXx8XCJ2YXJpYWJsZVwiPT1hKXJldHVybiBmPVwidHlwZVwiLGMoTGEpO2lmKFwiPFwiPT1iKXJldHVybiBjKGwoXCI+XCIpLHoobWEsXCI+XCIpLGcpfWZ1bmN0aW9uIEwoYSxiKXtcIkBcIj09YiYmYyh0LEwpO3JldHVyblwic3ByZWFkXCI9PWE/YyhMKTpyJiZoYShiKT8oZj1cImtleXdvcmRcIixjKEwpKTpyJiZcInRoaXNcIj09YT9jKFIsSCk6ayhELFIsSCl9ZnVuY3Rpb24gY2IoYSxiKXtyZXR1cm5cInZhcmlhYmxlXCI9PWE/SmEoYSxiKTpuYShhLGIpfWZ1bmN0aW9uIEphKGEsYil7aWYoXCJ2YXJpYWJsZVwiPT1hKXJldHVybiBPKGIpLGMobmEpfWZ1bmN0aW9uIG5hKGEsYil7aWYoXCI8XCI9PWIpcmV0dXJuIGMobChcIj5cIikseihtYSxcIj5cIiksZyxuYSk7aWYoXCJleHRlbmRzXCI9PWJ8fFwiaW1wbGVtZW50c1wiPT1ifHxyJiZcIixcIj09YSlyZXR1cm5cImltcGxlbWVudHNcIj09YiYmKGY9XCJrZXl3b3JkXCIpLGMocj9xOnQsbmEpO2lmKFwie1wiPT1hKXJldHVybiBjKGwoXCJ9XCIpLFxuRixnKX1mdW5jdGlvbiBGKGEsYil7aWYoXCJhc3luY1wiPT1hfHxcInZhcmlhYmxlXCI9PWEmJihcInN0YXRpY1wiPT1ifHxcImdldFwiPT1ifHxcInNldFwiPT1ifHxyJiZoYShiKSkmJncubWF0Y2goL15cXHMrW1xcdyRcXHhhMS1cXHVmZmZmXS8sITEpKXJldHVybiBmPVwia2V5d29yZFwiLGMoRik7aWYoXCJ2YXJpYWJsZVwiPT1hfHxcImtleXdvcmRcIj09WClyZXR1cm4gZj1cInByb3BlcnR5XCIsYyhvYSxGKTtpZihcIm51bWJlclwiPT1hfHxcInN0cmluZ1wiPT1hKXJldHVybiBjKG9hLEYpO2lmKFwiW1wiPT1hKXJldHVybiBjKHQsUixuKFwiXVwiKSxvYSxGKTtpZihcIipcIj09YilyZXR1cm4gZj1cImtleXdvcmRcIixjKEYpO2lmKHImJlwiKFwiPT1hKXJldHVybiBrKFMsRik7aWYoXCI7XCI9PWF8fFwiLFwiPT1hKXJldHVybiBjKEYpO2lmKFwifVwiPT1hKXJldHVybiBjKCk7aWYoXCJAXCI9PWIpcmV0dXJuIGModCxGKX1mdW5jdGlvbiBvYShhLGIpe2lmKFwiIVwiPT1ifHxcIj9cIj09YilyZXR1cm4gYyhvYSk7aWYoXCI6XCI9PWEpcmV0dXJuIGMocSxIKTtcbmlmKFwiPVwiPT1iKXJldHVybiBjKEIpO2E9cC5sZXhpY2FsLnByZXY7cmV0dXJuIGsoYSYmXCJpbnRlcmZhY2VcIj09YS5pbmZvP1M6Ryl9ZnVuY3Rpb24gJGEoYSxiKXtyZXR1cm5cIipcIj09Yj8oZj1cImtleXdvcmRcIixjKHphLG4oXCI7XCIpKSk6XCJkZWZhdWx0XCI9PWI/KGY9XCJrZXl3b3JkXCIsYyh0LG4oXCI7XCIpKSk6XCJ7XCI9PWE/Yyh6KFJhLFwifVwiKSx6YSxuKFwiO1wiKSk6ayh4KX1mdW5jdGlvbiBSYShhLGIpe2lmKFwiYXNcIj09YilyZXR1cm4gZj1cImtleXdvcmRcIixjKG4oXCJ2YXJpYWJsZVwiKSk7aWYoXCJ2YXJpYWJsZVwiPT1hKXJldHVybiBrKEIsUmEpfWZ1bmN0aW9uIGFiKGEpe3JldHVyblwic3RyaW5nXCI9PWE/YygpOlwiKFwiPT1hP2sodCk6XCIuXCI9PWE/ayhNKTprKHBhLFNhLHphKX1mdW5jdGlvbiBwYShhLGIpe2lmKFwie1wiPT1hKXJldHVybiBhYShwYSxcIn1cIik7XCJ2YXJpYWJsZVwiPT1hJiZPKGIpO1wiKlwiPT1iJiYoZj1cImtleXdvcmRcIik7cmV0dXJuIGModGIpfWZ1bmN0aW9uIFNhKGEpe2lmKFwiLFwiPT1hKXJldHVybiBjKHBhLFxuU2EpfWZ1bmN0aW9uIHRiKGEsYil7aWYoXCJhc1wiPT1iKXJldHVybiBmPVwia2V5d29yZFwiLGMocGEpfWZ1bmN0aW9uIHphKGEsYil7aWYoXCJmcm9tXCI9PWIpcmV0dXJuIGY9XCJrZXl3b3JkXCIsYyh0KX1mdW5jdGlvbiBkYihhKXtyZXR1cm5cIl1cIj09YT9jKCk6ayh6KEIsXCJdXCIpKX1mdW5jdGlvbiBLYSgpe3JldHVybiBrKGwoXCJmb3JtXCIpLEQsbihcIntcIiksbChcIn1cIikseih1YixcIn1cIiksZyxnKX1mdW5jdGlvbiB1Yigpe3JldHVybiBrKEQsSCl9ZnVuY3Rpb24gQWEoYSxiLGQpe3JldHVybiBiLnRva2VuaXplPT1JJiYvXig/Om9wZXJhdG9yfHNvZnxrZXl3b3JkIFtiY2RdfGNhc2V8bmV3fGV4cG9ydHxkZWZhdWx0fHNwcmVhZHxbXFxbe31cXCgsOzpdfD0+KSQvLnRlc3QoYi5sYXN0VHlwZSl8fFwicXVhc2lcIj09Yi5sYXN0VHlwZSYmL1xce1xccyokLy50ZXN0KGEuc3RyaW5nLnNsaWNlKDAsYS5wb3MtKGR8fDApKSl9dmFyIFU9VWEuaW5kZW50VW5pdCxUYT1BLnN0YXRlbWVudEluZGVudCxmYT1BLmpzb25sZCxcbko9QS5qc29ufHxmYSxGYT0hMSE9PUEudHJhY2tTY29wZSxyPUEudHlwZXNjcmlwdCxlYT1BLndvcmRDaGFyYWN0ZXJzfHwvW1xcdyRcXHhhMS1cXHVmZmZmXS8sQ2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHZhKXtyZXR1cm57dHlwZTp2YSxzdHlsZTpcImtleXdvcmRcIn19dmFyIGI9YShcImtleXdvcmQgYVwiKSxkPWEoXCJrZXl3b3JkIGJcIiksZT1hKFwia2V5d29yZCBjXCIpLGg9YShcImtleXdvcmQgZFwiKSxtPWEoXCJvcGVyYXRvclwiKSx5PXt0eXBlOlwiYXRvbVwiLHN0eWxlOlwiYXRvbVwifTtyZXR1cm57XCJpZlwiOmEoXCJpZlwiKSxcIndoaWxlXCI6YixcIndpdGhcIjpiLFwiZWxzZVwiOmQsXCJkb1wiOmQsXCJ0cnlcIjpkLFwiZmluYWxseVwiOmQsXCJyZXR1cm5cIjpoLFwiYnJlYWtcIjpoLFwiY29udGludWVcIjpoLFwibmV3XCI6YShcIm5ld1wiKSxcImRlbGV0ZVwiOmUsXCJ2b2lkXCI6ZSxcInRocm93XCI6ZSxcImRlYnVnZ2VyXCI6YShcImRlYnVnZ2VyXCIpLFwidmFyXCI6YShcInZhclwiKSxcImNvbnN0XCI6YShcInZhclwiKSxsZXQ6YShcInZhclwiKSxcImZ1bmN0aW9uXCI6YShcImZ1bmN0aW9uXCIpLFxuXCJjYXRjaFwiOmEoXCJjYXRjaFwiKSxcImZvclwiOmEoXCJmb3JcIiksXCJzd2l0Y2hcIjphKFwic3dpdGNoXCIpLFwiY2FzZVwiOmEoXCJjYXNlXCIpLFwiZGVmYXVsdFwiOmEoXCJkZWZhdWx0XCIpLFwiaW5cIjptLFwidHlwZW9mXCI6bSxcImluc3RhbmNlb2ZcIjptLFwidHJ1ZVwiOnksXCJmYWxzZVwiOnksXCJudWxsXCI6eSx1bmRlZmluZWQ6eSxOYU46eSxJbmZpbml0eTp5LFwidGhpc1wiOmEoXCJ0aGlzXCIpLFwiY2xhc3NcIjphKFwiY2xhc3NcIiksXCJzdXBlclwiOmEoXCJhdG9tXCIpLHlpZWxkOmUsXCJleHBvcnRcIjphKFwiZXhwb3J0XCIpLFwiaW1wb3J0XCI6YShcImltcG9ydFwiKSxcImV4dGVuZHNcIjplLGF3YWl0OmV9fSgpLEJhPS9bK1xcLSomJT08PiE/fH5eQF0vLFdhPS9eQChjb250ZXh0fGlkfHZhbHVlfGxhbmd1YWdlfHR5cGV8Y29udGFpbmVyfGxpc3R8c2V0fHJldmVyc2V8aW5kZXh8YmFzZXx2b2NhYnxncmFwaClcIi8sVixjYSxiYj17YXRvbTohMCxudW1iZXI6ITAsdmFyaWFibGU6ITAsc3RyaW5nOiEwLHJlZ2V4cDohMCxcInRoaXNcIjohMCxcImltcG9ydFwiOiEwLFxuXCJqc29ubGQta2V5d29yZFwiOiEwfTt2YXIgcmE9Zj1wPW51bGw7dmFyIFg9dz12b2lkIDA7dmFyIFhhPW5ldyBZKFwidGhpc1wiLG5ldyBZKFwiYXJndW1lbnRzXCIsbnVsbCkpO0subGV4PWlhLmxleD0hMDtDLmxleD0hMDtnLmxleD0hMDtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbihhKXthPXt0b2tlbml6ZTpJLGxhc3RUeXBlOlwic29mXCIsY2M6W10sbGV4aWNhbDpuZXcgRGEoKGF8fDApLVUsMCxcImJsb2NrXCIsITEpLGxvY2FsVmFyczpBLmxvY2FsVmFycyxjb250ZXh0OkEubG9jYWxWYXJzJiZuZXcgWihudWxsLG51bGwsITEpLGluZGVudGVkOmF8fDB9O0EuZ2xvYmFsVmFycyYmXCJvYmplY3RcIj09dHlwZW9mIEEuZ2xvYmFsVmFycyYmKGEuZ2xvYmFsVmFycz1BLmdsb2JhbFZhcnMpO3JldHVybiBhfSx0b2tlbjpmdW5jdGlvbihhLGIpe2Euc29sKCkmJihiLmxleGljYWwuaGFzT3duUHJvcGVydHkoXCJhbGlnblwiKXx8KGIubGV4aWNhbC5hbGlnbj0hMSksYi5pbmRlbnRlZD1hLmluZGVudGF0aW9uKCksXG5xYShhLGIpKTtpZihiLnRva2VuaXplIT1kYSYmYS5lYXRTcGFjZSgpKXJldHVybiBudWxsO3ZhciBkPWIudG9rZW5pemUoYSxiKTtpZihcImNvbW1lbnRcIj09VilyZXR1cm4gZDtiLmxhc3RUeXBlPVwib3BlcmF0b3JcIiE9Vnx8XCIrK1wiIT1jYSYmXCItLVwiIT1jYT9WOlwiaW5jZGVjXCI7cmV0dXJuIEVhKGIsZCxWLGNhLGEpfSxpbmRlbnQ6ZnVuY3Rpb24oYSxiKXtpZihhLnRva2VuaXplPT1kYXx8YS50b2tlbml6ZT09VylyZXR1cm4gdi5QYXNzO2lmKGEudG9rZW5pemUhPUkpcmV0dXJuIDA7dmFyIGQ9YiYmYi5jaGFyQXQoMCksZT1hLmxleGljYWwsaDtpZighL15cXHMqZWxzZVxcYi8udGVzdChiKSlmb3IodmFyIG09YS5jYy5sZW5ndGgtMTswPD1tOy0tbSl7dmFyIHk9YS5jY1ttXTtpZih5PT1nKWU9ZS5wcmV2O2Vsc2UgaWYoeSE9SGEmJnkhPUMpYnJlYWt9Zm9yKDshKFwic3RhdFwiIT1lLnR5cGUmJlwiZm9ybVwiIT1lLnR5cGV8fFwifVwiIT1kJiYoIShoPWEuY2NbYS5jYy5sZW5ndGgtMV0pfHxoIT1cbk0mJmghPVF8fC9eWyxcXC49K1xcLSo6P1tcXChdLy50ZXN0KGIpKSk7KWU9ZS5wcmV2O1RhJiZcIilcIj09ZS50eXBlJiZcInN0YXRcIj09ZS5wcmV2LnR5cGUmJihlPWUucHJldik7aD1lLnR5cGU7bT1kPT1oO3JldHVyblwidmFyZGVmXCI9PWg/ZS5pbmRlbnRlZCsoXCJvcGVyYXRvclwiPT1hLmxhc3RUeXBlfHxcIixcIj09YS5sYXN0VHlwZT9lLmluZm8ubGVuZ3RoKzE6MCk6XCJmb3JtXCI9PWgmJlwie1wiPT1kP2UuaW5kZW50ZWQ6XCJmb3JtXCI9PWg/ZS5pbmRlbnRlZCtVOlwic3RhdFwiPT1oPyhkPWUuaW5kZW50ZWQsYT1cIm9wZXJhdG9yXCI9PWEubGFzdFR5cGV8fFwiLFwiPT1hLmxhc3RUeXBlfHxCYS50ZXN0KGIuY2hhckF0KDApKXx8L1ssLl0vLnRlc3QoYi5jaGFyQXQoMCkpLGQrKGE/VGF8fFU6MCkpOlwic3dpdGNoXCIhPWUuaW5mb3x8bXx8MD09QS5kb3VibGVJbmRlbnRTd2l0Y2g/ZS5hbGlnbj9lLmNvbHVtbisobT8wOjEpOmUuaW5kZW50ZWQrKG0/MDpVKTplLmluZGVudGVkKygvXig/OmNhc2V8ZGVmYXVsdClcXGIvLnRlc3QoYik/XG5VOjIqVSl9LGVsZWN0cmljSW5wdXQ6L15cXHMqKD86Y2FzZSAuKj86fGRlZmF1bHQ6fFxce3xcXH0pJC8sYmxvY2tDb21tZW50U3RhcnQ6Sj9udWxsOlwiLypcIixibG9ja0NvbW1lbnRFbmQ6Sj9udWxsOlwiKi9cIixibG9ja0NvbW1lbnRDb250aW51ZTpKP251bGw6XCIgKiBcIixsaW5lQ29tbWVudDpKP251bGw6XCIvL1wiLGZvbGQ6XCJicmFjZVwiLGNsb3NlQnJhY2tldHM6XCIoKVtde30nJ1xcXCJcXFwiYGBcIixoZWxwZXJUeXBlOko/XCJqc29uXCI6XCJqYXZhc2NyaXB0XCIsanNvbmxkTW9kZTpmYSxqc29uTW9kZTpKLGV4cHJlc3Npb25BbGxvd2VkOkFhLHNraXBFeHByZXNzaW9uOmZ1bmN0aW9uKGEpe0VhKGEsXCJhdG9tXCIsXCJhdG9tXCIsXCJ0cnVlXCIsbmV3IHYuU3RyaW5nU3RyZWFtKFwiXCIsMixudWxsKSl9fX0pO3YucmVnaXN0ZXJIZWxwZXIoXCJ3b3JkQ2hhcnNcIixcImphdmFzY3JpcHRcIiwvW1xcdyRdLyk7di5kZWZpbmVNSU1FKFwidGV4dC9qYXZhc2NyaXB0XCIsXCJqYXZhc2NyaXB0XCIpO3YuZGVmaW5lTUlNRShcInRleHQvZWNtYXNjcmlwdFwiLFxuXCJqYXZhc2NyaXB0XCIpO3YuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIixcImphdmFzY3JpcHRcIik7di5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0XCIsXCJqYXZhc2NyaXB0XCIpO3YuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIixcImphdmFzY3JpcHRcIik7di5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vanNvblwiLHtuYW1lOlwiamF2YXNjcmlwdFwiLGpzb246ITB9KTt2LmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi94LWpzb25cIix7bmFtZTpcImphdmFzY3JpcHRcIixqc29uOiEwfSk7di5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vbWFuaWZlc3QranNvblwiLHtuYW1lOlwiamF2YXNjcmlwdFwiLGpzb246ITB9KTt2LmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9sZCtqc29uXCIse25hbWU6XCJqYXZhc2NyaXB0XCIsanNvbmxkOiEwfSk7di5kZWZpbmVNSU1FKFwidGV4dC90eXBlc2NyaXB0XCIse25hbWU6XCJqYXZhc2NyaXB0XCIsdHlwZXNjcmlwdDohMH0pO3YuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3R5cGVzY3JpcHRcIixcbntuYW1lOlwiamF2YXNjcmlwdFwiLHR5cGVzY3JpcHQ6ITB9KX0pO1xuIiwiLyoqXG4gKiBTbGljZSByZWZlcmVuY2UuXG4gKi9cblxudmFyIHNsaWNlID0gW10uc2xpY2U7XG5cbi8qKlxuICogQmluZCBgb2JqYCB0byBgZm5gLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBmbiBvciBzdHJpbmdcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgZm4pe1xuICBpZiAoJ3N0cmluZycgPT0gdHlwZW9mIGZuKSBmbiA9IG9ialtmbl07XG4gIGlmICgnZnVuY3Rpb24nICE9IHR5cGVvZiBmbikgdGhyb3cgbmV3IEVycm9yKCdiaW5kKCkgcmVxdWlyZXMgYSBmdW5jdGlvbicpO1xuICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIGZuLmFwcGx5KG9iaiwgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gIH1cbn07XG4iLCJcclxuLyoqXHJcbiAqIEV4cG9zZSBgRW1pdHRlcmAuXHJcbiAqL1xyXG5cclxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgbW9kdWxlLmV4cG9ydHMgPSBFbWl0dGVyO1xyXG59XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZSBhIG5ldyBgRW1pdHRlcmAuXHJcbiAqXHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gRW1pdHRlcihvYmopIHtcclxuICBpZiAob2JqKSByZXR1cm4gbWl4aW4ob2JqKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNaXhpbiB0aGUgZW1pdHRlciBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXHJcbiAqIEByZXR1cm4ge09iamVjdH1cclxuICogQGFwaSBwcml2YXRlXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWl4aW4ob2JqKSB7XHJcbiAgZm9yICh2YXIga2V5IGluIEVtaXR0ZXIucHJvdG90eXBlKSB7XHJcbiAgICBvYmpba2V5XSA9IEVtaXR0ZXIucHJvdG90eXBlW2tleV07XHJcbiAgfVxyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMaXN0ZW4gb24gdGhlIGdpdmVuIGBldmVudGAgd2l0aCBgZm5gLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuICAodGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF0gfHwgW10pXHJcbiAgICAucHVzaChmbik7XHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyBhbiBgZXZlbnRgIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBpbnZva2VkIGEgc2luZ2xlXHJcbiAqIHRpbWUgdGhlbiBhdXRvbWF0aWNhbGx5IHJlbW92ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIGZ1bmN0aW9uIG9uKCkge1xyXG4gICAgdGhpcy5vZmYoZXZlbnQsIG9uKTtcclxuICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgfVxyXG5cclxuICBvbi5mbiA9IGZuO1xyXG4gIHRoaXMub24oZXZlbnQsIG9uKTtcclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgdGhlIGdpdmVuIGNhbGxiYWNrIGZvciBgZXZlbnRgIG9yIGFsbFxyXG4gKiByZWdpc3RlcmVkIGNhbGxiYWNrcy5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXHJcbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUub2ZmID1cclxuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQsIGZuKXtcclxuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XHJcblxyXG4gIC8vIGFsbFxyXG4gIGlmICgwID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9O1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBzcGVjaWZpYyBldmVudFxyXG4gIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xyXG4gIGlmICghY2FsbGJhY2tzKSByZXR1cm4gdGhpcztcclxuXHJcbiAgLy8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xyXG4gIGlmICgxID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmUgc3BlY2lmaWMgaGFuZGxlclxyXG4gIHZhciBjYjtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgY2IgPSBjYWxsYmFja3NbaV07XHJcbiAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xyXG4gICAgICBjYWxsYmFja3Muc3BsaWNlKGksIDEpO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFJlbW92ZSBldmVudCBzcGVjaWZpYyBhcnJheXMgZm9yIGV2ZW50IHR5cGVzIHRoYXQgbm9cclxuICAvLyBvbmUgaXMgc3Vic2NyaWJlZCBmb3IgdG8gYXZvaWQgbWVtb3J5IGxlYWsuXHJcbiAgaWYgKGNhbGxiYWNrcy5sZW5ndGggPT09IDApIHtcclxuICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogRW1pdCBgZXZlbnRgIHdpdGggdGhlIGdpdmVuIGFyZ3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge01peGVkfSAuLi5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oZXZlbnQpe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuXHJcbiAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpXHJcbiAgICAsIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcblxyXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcclxuICB9XHJcblxyXG4gIGlmIChjYWxsYmFja3MpIHtcclxuICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcclxuICAgICAgY2FsbGJhY2tzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJuIGFycmF5IG9mIGNhbGxiYWNrcyBmb3IgYGV2ZW50YC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEByZXR1cm4ge0FycmF5fVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcclxuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XHJcbiAgcmV0dXJuIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF0gfHwgW107XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdGhpcyBlbWl0dGVyIGhhcyBgZXZlbnRgIGhhbmRsZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHJldHVybiB7Qm9vbGVhbn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudCl7XHJcbiAgcmV0dXJuICEhIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XHJcbn07XHJcbiIsIlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhLCBiKXtcbiAgdmFyIGZuID0gZnVuY3Rpb24oKXt9O1xuICBmbi5wcm90b3R5cGUgPSBiLnByb3RvdHlwZTtcbiAgYS5wcm90b3R5cGUgPSBuZXcgZm47XG4gIGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gYTtcbn07IiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gcmVhZHlcblxuZnVuY3Rpb24gcmVhZHkgKGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkb2N1bWVudC1yZWFkeSBvbmx5IHJ1bnMgaW4gdGhlIGJyb3dzZXInKVxuICB9XG4gIHZhciBzdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGVcbiAgaWYgKHN0YXRlID09PSAnY29tcGxldGUnIHx8IHN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApXG4gIH1cblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gb25Mb2FkICgpIHtcbiAgICBjYWxsYmFjaygpXG4gIH0pXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LWZ1bmNcbiAgfVxufSkoKTtcbiIsIlxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3NvY2tldCcpO1xuXG4vKipcbiAqIEV4cG9ydHMgcGFyc2VyXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzLnBhcnNlciA9IHJlcXVpcmUoJ2VuZ2luZS5pby1wYXJzZXInKTtcbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgdHJhbnNwb3J0cyA9IHJlcXVpcmUoJy4vdHJhbnNwb3J0cy9pbmRleCcpO1xudmFyIEVtaXR0ZXIgPSByZXF1aXJlKCdjb21wb25lbnQtZW1pdHRlcicpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnZW5naW5lLmlvLWNsaWVudDpzb2NrZXQnKTtcbnZhciBpbmRleCA9IHJlcXVpcmUoJ2luZGV4b2YnKTtcbnZhciBwYXJzZXIgPSByZXF1aXJlKCdlbmdpbmUuaW8tcGFyc2VyJyk7XG52YXIgcGFyc2V1cmkgPSByZXF1aXJlKCdwYXJzZXVyaScpO1xudmFyIHBhcnNlcXMgPSByZXF1aXJlKCdwYXJzZXFzJyk7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBTb2NrZXQ7XG5cbi8qKlxuICogU29ja2V0IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gdXJpIG9yIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFNvY2tldCAodXJpLCBvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTb2NrZXQpKSByZXR1cm4gbmV3IFNvY2tldCh1cmksIG9wdHMpO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gIGlmICh1cmkgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB1cmkpIHtcbiAgICBvcHRzID0gdXJpO1xuICAgIHVyaSA9IG51bGw7XG4gIH1cblxuICBpZiAodXJpKSB7XG4gICAgdXJpID0gcGFyc2V1cmkodXJpKTtcbiAgICBvcHRzLmhvc3RuYW1lID0gdXJpLmhvc3Q7XG4gICAgb3B0cy5zZWN1cmUgPSB1cmkucHJvdG9jb2wgPT09ICdodHRwcycgfHwgdXJpLnByb3RvY29sID09PSAnd3NzJztcbiAgICBvcHRzLnBvcnQgPSB1cmkucG9ydDtcbiAgICBpZiAodXJpLnF1ZXJ5KSBvcHRzLnF1ZXJ5ID0gdXJpLnF1ZXJ5O1xuICB9IGVsc2UgaWYgKG9wdHMuaG9zdCkge1xuICAgIG9wdHMuaG9zdG5hbWUgPSBwYXJzZXVyaShvcHRzLmhvc3QpLmhvc3Q7XG4gIH1cblxuICB0aGlzLnNlY3VyZSA9IG51bGwgIT0gb3B0cy5zZWN1cmUgPyBvcHRzLnNlY3VyZVxuICAgIDogKHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2h0dHBzOicgPT09IGxvY2F0aW9uLnByb3RvY29sKTtcblxuICBpZiAob3B0cy5ob3N0bmFtZSAmJiAhb3B0cy5wb3J0KSB7XG4gICAgLy8gaWYgbm8gcG9ydCBpcyBzcGVjaWZpZWQgbWFudWFsbHksIHVzZSB0aGUgcHJvdG9jb2wgZGVmYXVsdFxuICAgIG9wdHMucG9ydCA9IHRoaXMuc2VjdXJlID8gJzQ0MycgOiAnODAnO1xuICB9XG5cbiAgdGhpcy5hZ2VudCA9IG9wdHMuYWdlbnQgfHwgZmFsc2U7XG4gIHRoaXMuaG9zdG5hbWUgPSBvcHRzLmhvc3RuYW1lIHx8XG4gICAgKHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhdGlvbi5ob3N0bmFtZSA6ICdsb2NhbGhvc3QnKTtcbiAgdGhpcy5wb3J0ID0gb3B0cy5wb3J0IHx8ICh0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnICYmIGxvY2F0aW9uLnBvcnRcbiAgICAgID8gbG9jYXRpb24ucG9ydFxuICAgICAgOiAodGhpcy5zZWN1cmUgPyA0NDMgOiA4MCkpO1xuICB0aGlzLnF1ZXJ5ID0gb3B0cy5xdWVyeSB8fCB7fTtcbiAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdGhpcy5xdWVyeSkgdGhpcy5xdWVyeSA9IHBhcnNlcXMuZGVjb2RlKHRoaXMucXVlcnkpO1xuICB0aGlzLnVwZ3JhZGUgPSBmYWxzZSAhPT0gb3B0cy51cGdyYWRlO1xuICB0aGlzLnBhdGggPSAob3B0cy5wYXRoIHx8ICcvZW5naW5lLmlvJykucmVwbGFjZSgvXFwvJC8sICcnKSArICcvJztcbiAgdGhpcy5mb3JjZUpTT05QID0gISFvcHRzLmZvcmNlSlNPTlA7XG4gIHRoaXMuanNvbnAgPSBmYWxzZSAhPT0gb3B0cy5qc29ucDtcbiAgdGhpcy5mb3JjZUJhc2U2NCA9ICEhb3B0cy5mb3JjZUJhc2U2NDtcbiAgdGhpcy5lbmFibGVzWERSID0gISFvcHRzLmVuYWJsZXNYRFI7XG4gIHRoaXMud2l0aENyZWRlbnRpYWxzID0gZmFsc2UgIT09IG9wdHMud2l0aENyZWRlbnRpYWxzO1xuICB0aGlzLnRpbWVzdGFtcFBhcmFtID0gb3B0cy50aW1lc3RhbXBQYXJhbSB8fCAndCc7XG4gIHRoaXMudGltZXN0YW1wUmVxdWVzdHMgPSBvcHRzLnRpbWVzdGFtcFJlcXVlc3RzO1xuICB0aGlzLnRyYW5zcG9ydHMgPSBvcHRzLnRyYW5zcG9ydHMgfHwgWydwb2xsaW5nJywgJ3dlYnNvY2tldCddO1xuICB0aGlzLnRyYW5zcG9ydE9wdGlvbnMgPSBvcHRzLnRyYW5zcG9ydE9wdGlvbnMgfHwge307XG4gIHRoaXMucmVhZHlTdGF0ZSA9ICcnO1xuICB0aGlzLndyaXRlQnVmZmVyID0gW107XG4gIHRoaXMucHJldkJ1ZmZlckxlbiA9IDA7XG4gIHRoaXMucG9saWN5UG9ydCA9IG9wdHMucG9saWN5UG9ydCB8fCA4NDM7XG4gIHRoaXMucmVtZW1iZXJVcGdyYWRlID0gb3B0cy5yZW1lbWJlclVwZ3JhZGUgfHwgZmFsc2U7XG4gIHRoaXMuYmluYXJ5VHlwZSA9IG51bGw7XG4gIHRoaXMub25seUJpbmFyeVVwZ3JhZGVzID0gb3B0cy5vbmx5QmluYXJ5VXBncmFkZXM7XG4gIHRoaXMucGVyTWVzc2FnZURlZmxhdGUgPSBmYWxzZSAhPT0gb3B0cy5wZXJNZXNzYWdlRGVmbGF0ZSA/IChvcHRzLnBlck1lc3NhZ2VEZWZsYXRlIHx8IHt9KSA6IGZhbHNlO1xuXG4gIGlmICh0cnVlID09PSB0aGlzLnBlck1lc3NhZ2VEZWZsYXRlKSB0aGlzLnBlck1lc3NhZ2VEZWZsYXRlID0ge307XG4gIGlmICh0aGlzLnBlck1lc3NhZ2VEZWZsYXRlICYmIG51bGwgPT0gdGhpcy5wZXJNZXNzYWdlRGVmbGF0ZS50aHJlc2hvbGQpIHtcbiAgICB0aGlzLnBlck1lc3NhZ2VEZWZsYXRlLnRocmVzaG9sZCA9IDEwMjQ7XG4gIH1cblxuICAvLyBTU0wgb3B0aW9ucyBmb3IgTm9kZS5qcyBjbGllbnRcbiAgdGhpcy5wZnggPSBvcHRzLnBmeCB8fCB1bmRlZmluZWQ7XG4gIHRoaXMua2V5ID0gb3B0cy5rZXkgfHwgdW5kZWZpbmVkO1xuICB0aGlzLnBhc3NwaHJhc2UgPSBvcHRzLnBhc3NwaHJhc2UgfHwgdW5kZWZpbmVkO1xuICB0aGlzLmNlcnQgPSBvcHRzLmNlcnQgfHwgdW5kZWZpbmVkO1xuICB0aGlzLmNhID0gb3B0cy5jYSB8fCB1bmRlZmluZWQ7XG4gIHRoaXMuY2lwaGVycyA9IG9wdHMuY2lwaGVycyB8fCB1bmRlZmluZWQ7XG4gIHRoaXMucmVqZWN0VW5hdXRob3JpemVkID0gb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRzLnJlamVjdFVuYXV0aG9yaXplZDtcbiAgdGhpcy5mb3JjZU5vZGUgPSAhIW9wdHMuZm9yY2VOb2RlO1xuXG4gIC8vIGRldGVjdCBSZWFjdE5hdGl2ZSBlbnZpcm9ubWVudFxuICB0aGlzLmlzUmVhY3ROYXRpdmUgPSAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnc3RyaW5nJyAmJiBuYXZpZ2F0b3IucHJvZHVjdC50b0xvd2VyQ2FzZSgpID09PSAncmVhY3RuYXRpdmUnKTtcblxuICAvLyBvdGhlciBvcHRpb25zIGZvciBOb2RlLmpzIG9yIFJlYWN0TmF0aXZlIGNsaWVudFxuICBpZiAodHlwZW9mIHNlbGYgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMuaXNSZWFjdE5hdGl2ZSkge1xuICAgIGlmIChvcHRzLmV4dHJhSGVhZGVycyAmJiBPYmplY3Qua2V5cyhvcHRzLmV4dHJhSGVhZGVycykubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5leHRyYUhlYWRlcnMgPSBvcHRzLmV4dHJhSGVhZGVycztcbiAgICB9XG5cbiAgICBpZiAob3B0cy5sb2NhbEFkZHJlc3MpIHtcbiAgICAgIHRoaXMubG9jYWxBZGRyZXNzID0gb3B0cy5sb2NhbEFkZHJlc3M7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IG9uIGhhbmRzaGFrZVxuICB0aGlzLmlkID0gbnVsbDtcbiAgdGhpcy51cGdyYWRlcyA9IG51bGw7XG4gIHRoaXMucGluZ0ludGVydmFsID0gbnVsbDtcbiAgdGhpcy5waW5nVGltZW91dCA9IG51bGw7XG5cbiAgLy8gc2V0IG9uIGhlYXJ0YmVhdFxuICB0aGlzLnBpbmdJbnRlcnZhbFRpbWVyID0gbnVsbDtcbiAgdGhpcy5waW5nVGltZW91dFRpbWVyID0gbnVsbDtcblxuICB0aGlzLm9wZW4oKTtcbn1cblxuU29ja2V0LnByaW9yV2Vic29ja2V0U3VjY2VzcyA9IGZhbHNlO1xuXG4vKipcbiAqIE1peCBpbiBgRW1pdHRlcmAuXG4gKi9cblxuRW1pdHRlcihTb2NrZXQucHJvdG90eXBlKTtcblxuLyoqXG4gKiBQcm90b2NvbCB2ZXJzaW9uLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU29ja2V0LnByb3RvY29sID0gcGFyc2VyLnByb3RvY29sOyAvLyB0aGlzIGlzIGFuIGludFxuXG4vKipcbiAqIEV4cG9zZSBkZXBzIGZvciBsZWdhY3kgY29tcGF0aWJpbGl0eVxuICogYW5kIHN0YW5kYWxvbmUgYnJvd3NlciBhY2Nlc3MuXG4gKi9cblxuU29ja2V0LlNvY2tldCA9IFNvY2tldDtcblNvY2tldC5UcmFuc3BvcnQgPSByZXF1aXJlKCcuL3RyYW5zcG9ydCcpO1xuU29ja2V0LnRyYW5zcG9ydHMgPSByZXF1aXJlKCcuL3RyYW5zcG9ydHMvaW5kZXgnKTtcblNvY2tldC5wYXJzZXIgPSByZXF1aXJlKCdlbmdpbmUuaW8tcGFyc2VyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyB0cmFuc3BvcnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHRyYW5zcG9ydCBuYW1lXG4gKiBAcmV0dXJuIHtUcmFuc3BvcnR9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLmNyZWF0ZVRyYW5zcG9ydCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlYnVnKCdjcmVhdGluZyB0cmFuc3BvcnQgXCIlc1wiJywgbmFtZSk7XG4gIHZhciBxdWVyeSA9IGNsb25lKHRoaXMucXVlcnkpO1xuXG4gIC8vIGFwcGVuZCBlbmdpbmUuaW8gcHJvdG9jb2wgaWRlbnRpZmllclxuICBxdWVyeS5FSU8gPSBwYXJzZXIucHJvdG9jb2w7XG5cbiAgLy8gdHJhbnNwb3J0IG5hbWVcbiAgcXVlcnkudHJhbnNwb3J0ID0gbmFtZTtcblxuICAvLyBwZXItdHJhbnNwb3J0IG9wdGlvbnNcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLnRyYW5zcG9ydE9wdGlvbnNbbmFtZV0gfHwge307XG5cbiAgLy8gc2Vzc2lvbiBpZCBpZiB3ZSBhbHJlYWR5IGhhdmUgb25lXG4gIGlmICh0aGlzLmlkKSBxdWVyeS5zaWQgPSB0aGlzLmlkO1xuXG4gIHZhciB0cmFuc3BvcnQgPSBuZXcgdHJhbnNwb3J0c1tuYW1lXSh7XG4gICAgcXVlcnk6IHF1ZXJ5LFxuICAgIHNvY2tldDogdGhpcyxcbiAgICBhZ2VudDogb3B0aW9ucy5hZ2VudCB8fCB0aGlzLmFnZW50LFxuICAgIGhvc3RuYW1lOiBvcHRpb25zLmhvc3RuYW1lIHx8IHRoaXMuaG9zdG5hbWUsXG4gICAgcG9ydDogb3B0aW9ucy5wb3J0IHx8IHRoaXMucG9ydCxcbiAgICBzZWN1cmU6IG9wdGlvbnMuc2VjdXJlIHx8IHRoaXMuc2VjdXJlLFxuICAgIHBhdGg6IG9wdGlvbnMucGF0aCB8fCB0aGlzLnBhdGgsXG4gICAgZm9yY2VKU09OUDogb3B0aW9ucy5mb3JjZUpTT05QIHx8IHRoaXMuZm9yY2VKU09OUCxcbiAgICBqc29ucDogb3B0aW9ucy5qc29ucCB8fCB0aGlzLmpzb25wLFxuICAgIGZvcmNlQmFzZTY0OiBvcHRpb25zLmZvcmNlQmFzZTY0IHx8IHRoaXMuZm9yY2VCYXNlNjQsXG4gICAgZW5hYmxlc1hEUjogb3B0aW9ucy5lbmFibGVzWERSIHx8IHRoaXMuZW5hYmxlc1hEUixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzIHx8IHRoaXMud2l0aENyZWRlbnRpYWxzLFxuICAgIHRpbWVzdGFtcFJlcXVlc3RzOiBvcHRpb25zLnRpbWVzdGFtcFJlcXVlc3RzIHx8IHRoaXMudGltZXN0YW1wUmVxdWVzdHMsXG4gICAgdGltZXN0YW1wUGFyYW06IG9wdGlvbnMudGltZXN0YW1wUGFyYW0gfHwgdGhpcy50aW1lc3RhbXBQYXJhbSxcbiAgICBwb2xpY3lQb3J0OiBvcHRpb25zLnBvbGljeVBvcnQgfHwgdGhpcy5wb2xpY3lQb3J0LFxuICAgIHBmeDogb3B0aW9ucy5wZnggfHwgdGhpcy5wZngsXG4gICAga2V5OiBvcHRpb25zLmtleSB8fCB0aGlzLmtleSxcbiAgICBwYXNzcGhyYXNlOiBvcHRpb25zLnBhc3NwaHJhc2UgfHwgdGhpcy5wYXNzcGhyYXNlLFxuICAgIGNlcnQ6IG9wdGlvbnMuY2VydCB8fCB0aGlzLmNlcnQsXG4gICAgY2E6IG9wdGlvbnMuY2EgfHwgdGhpcy5jYSxcbiAgICBjaXBoZXJzOiBvcHRpb25zLmNpcGhlcnMgfHwgdGhpcy5jaXBoZXJzLFxuICAgIHJlamVjdFVuYXV0aG9yaXplZDogb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgfHwgdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQsXG4gICAgcGVyTWVzc2FnZURlZmxhdGU6IG9wdGlvbnMucGVyTWVzc2FnZURlZmxhdGUgfHwgdGhpcy5wZXJNZXNzYWdlRGVmbGF0ZSxcbiAgICBleHRyYUhlYWRlcnM6IG9wdGlvbnMuZXh0cmFIZWFkZXJzIHx8IHRoaXMuZXh0cmFIZWFkZXJzLFxuICAgIGZvcmNlTm9kZTogb3B0aW9ucy5mb3JjZU5vZGUgfHwgdGhpcy5mb3JjZU5vZGUsXG4gICAgbG9jYWxBZGRyZXNzOiBvcHRpb25zLmxvY2FsQWRkcmVzcyB8fCB0aGlzLmxvY2FsQWRkcmVzcyxcbiAgICByZXF1ZXN0VGltZW91dDogb3B0aW9ucy5yZXF1ZXN0VGltZW91dCB8fCB0aGlzLnJlcXVlc3RUaW1lb3V0LFxuICAgIHByb3RvY29sczogb3B0aW9ucy5wcm90b2NvbHMgfHwgdm9pZCAoMCksXG4gICAgaXNSZWFjdE5hdGl2ZTogdGhpcy5pc1JlYWN0TmF0aXZlXG4gIH0pO1xuXG4gIHJldHVybiB0cmFuc3BvcnQ7XG59O1xuXG5mdW5jdGlvbiBjbG9uZSAob2JqKSB7XG4gIHZhciBvID0ge307XG4gIGZvciAodmFyIGkgaW4gb2JqKSB7XG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgb1tpXSA9IG9ialtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdHJhbnNwb3J0IHRvIHVzZSBhbmQgc3RhcnRzIHByb2JlLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5Tb2NrZXQucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0cmFuc3BvcnQ7XG4gIGlmICh0aGlzLnJlbWVtYmVyVXBncmFkZSAmJiBTb2NrZXQucHJpb3JXZWJzb2NrZXRTdWNjZXNzICYmIHRoaXMudHJhbnNwb3J0cy5pbmRleE9mKCd3ZWJzb2NrZXQnKSAhPT0gLTEpIHtcbiAgICB0cmFuc3BvcnQgPSAnd2Vic29ja2V0JztcbiAgfSBlbHNlIGlmICgwID09PSB0aGlzLnRyYW5zcG9ydHMubGVuZ3RoKSB7XG4gICAgLy8gRW1pdCBlcnJvciBvbiBuZXh0IHRpY2sgc28gaXQgY2FuIGJlIGxpc3RlbmVkIHRvXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5lbWl0KCdlcnJvcicsICdObyB0cmFuc3BvcnRzIGF2YWlsYWJsZScpO1xuICAgIH0sIDApO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICB0cmFuc3BvcnQgPSB0aGlzLnRyYW5zcG9ydHNbMF07XG4gIH1cbiAgdGhpcy5yZWFkeVN0YXRlID0gJ29wZW5pbmcnO1xuXG4gIC8vIFJldHJ5IHdpdGggdGhlIG5leHQgdHJhbnNwb3J0IGlmIHRoZSB0cmFuc3BvcnQgaXMgZGlzYWJsZWQgKGpzb25wOiBmYWxzZSlcbiAgdHJ5IHtcbiAgICB0cmFuc3BvcnQgPSB0aGlzLmNyZWF0ZVRyYW5zcG9ydCh0cmFuc3BvcnQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy50cmFuc3BvcnRzLnNoaWZ0KCk7XG4gICAgdGhpcy5vcGVuKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJhbnNwb3J0Lm9wZW4oKTtcbiAgdGhpcy5zZXRUcmFuc3BvcnQodHJhbnNwb3J0KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY3VycmVudCB0cmFuc3BvcnQuIERpc2FibGVzIHRoZSBleGlzdGluZyBvbmUgKGlmIGFueSkuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5zZXRUcmFuc3BvcnQgPSBmdW5jdGlvbiAodHJhbnNwb3J0KSB7XG4gIGRlYnVnKCdzZXR0aW5nIHRyYW5zcG9ydCAlcycsIHRyYW5zcG9ydC5uYW1lKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0aGlzLnRyYW5zcG9ydCkge1xuICAgIGRlYnVnKCdjbGVhcmluZyBleGlzdGluZyB0cmFuc3BvcnQgJXMnLCB0aGlzLnRyYW5zcG9ydC5uYW1lKTtcbiAgICB0aGlzLnRyYW5zcG9ydC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIHNldCB1cCB0cmFuc3BvcnRcbiAgdGhpcy50cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG5cbiAgLy8gc2V0IHVwIHRyYW5zcG9ydCBsaXN0ZW5lcnNcbiAgdHJhbnNwb3J0XG4gIC5vbignZHJhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5vbkRyYWluKCk7XG4gIH0pXG4gIC5vbigncGFja2V0JywgZnVuY3Rpb24gKHBhY2tldCkge1xuICAgIHNlbGYub25QYWNrZXQocGFja2V0KTtcbiAgfSlcbiAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7XG4gICAgc2VsZi5vbkVycm9yKGUpO1xuICB9KVxuICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIHNlbGYub25DbG9zZSgndHJhbnNwb3J0IGNsb3NlJyk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQcm9iZXMgYSB0cmFuc3BvcnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHRyYW5zcG9ydCBuYW1lXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLnByb2JlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVidWcoJ3Byb2JpbmcgdHJhbnNwb3J0IFwiJXNcIicsIG5hbWUpO1xuICB2YXIgdHJhbnNwb3J0ID0gdGhpcy5jcmVhdGVUcmFuc3BvcnQobmFtZSwgeyBwcm9iZTogMSB9KTtcbiAgdmFyIGZhaWxlZCA9IGZhbHNlO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgU29ja2V0LnByaW9yV2Vic29ja2V0U3VjY2VzcyA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIG9uVHJhbnNwb3J0T3BlbiAoKSB7XG4gICAgaWYgKHNlbGYub25seUJpbmFyeVVwZ3JhZGVzKSB7XG4gICAgICB2YXIgdXBncmFkZUxvc2VzQmluYXJ5ID0gIXRoaXMuc3VwcG9ydHNCaW5hcnkgJiYgc2VsZi50cmFuc3BvcnQuc3VwcG9ydHNCaW5hcnk7XG4gICAgICBmYWlsZWQgPSBmYWlsZWQgfHwgdXBncmFkZUxvc2VzQmluYXJ5O1xuICAgIH1cbiAgICBpZiAoZmFpbGVkKSByZXR1cm47XG5cbiAgICBkZWJ1ZygncHJvYmUgdHJhbnNwb3J0IFwiJXNcIiBvcGVuZWQnLCBuYW1lKTtcbiAgICB0cmFuc3BvcnQuc2VuZChbeyB0eXBlOiAncGluZycsIGRhdGE6ICdwcm9iZScgfV0pO1xuICAgIHRyYW5zcG9ydC5vbmNlKCdwYWNrZXQnLCBmdW5jdGlvbiAobXNnKSB7XG4gICAgICBpZiAoZmFpbGVkKSByZXR1cm47XG4gICAgICBpZiAoJ3BvbmcnID09PSBtc2cudHlwZSAmJiAncHJvYmUnID09PSBtc2cuZGF0YSkge1xuICAgICAgICBkZWJ1ZygncHJvYmUgdHJhbnNwb3J0IFwiJXNcIiBwb25nJywgbmFtZSk7XG4gICAgICAgIHNlbGYudXBncmFkaW5nID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5lbWl0KCd1cGdyYWRpbmcnLCB0cmFuc3BvcnQpO1xuICAgICAgICBpZiAoIXRyYW5zcG9ydCkgcmV0dXJuO1xuICAgICAgICBTb2NrZXQucHJpb3JXZWJzb2NrZXRTdWNjZXNzID0gJ3dlYnNvY2tldCcgPT09IHRyYW5zcG9ydC5uYW1lO1xuXG4gICAgICAgIGRlYnVnKCdwYXVzaW5nIGN1cnJlbnQgdHJhbnNwb3J0IFwiJXNcIicsIHNlbGYudHJhbnNwb3J0Lm5hbWUpO1xuICAgICAgICBzZWxmLnRyYW5zcG9ydC5wYXVzZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGZhaWxlZCkgcmV0dXJuO1xuICAgICAgICAgIGlmICgnY2xvc2VkJyA9PT0gc2VsZi5yZWFkeVN0YXRlKSByZXR1cm47XG4gICAgICAgICAgZGVidWcoJ2NoYW5naW5nIHRyYW5zcG9ydCBhbmQgc2VuZGluZyB1cGdyYWRlIHBhY2tldCcpO1xuXG4gICAgICAgICAgY2xlYW51cCgpO1xuXG4gICAgICAgICAgc2VsZi5zZXRUcmFuc3BvcnQodHJhbnNwb3J0KTtcbiAgICAgICAgICB0cmFuc3BvcnQuc2VuZChbeyB0eXBlOiAndXBncmFkZScgfV0pO1xuICAgICAgICAgIHNlbGYuZW1pdCgndXBncmFkZScsIHRyYW5zcG9ydCk7XG4gICAgICAgICAgdHJhbnNwb3J0ID0gbnVsbDtcbiAgICAgICAgICBzZWxmLnVwZ3JhZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHNlbGYuZmx1c2goKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygncHJvYmUgdHJhbnNwb3J0IFwiJXNcIiBmYWlsZWQnLCBuYW1lKTtcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigncHJvYmUgZXJyb3InKTtcbiAgICAgICAgZXJyLnRyYW5zcG9ydCA9IHRyYW5zcG9ydC5uYW1lO1xuICAgICAgICBzZWxmLmVtaXQoJ3VwZ3JhZGVFcnJvcicsIGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBmcmVlemVUcmFuc3BvcnQgKCkge1xuICAgIGlmIChmYWlsZWQpIHJldHVybjtcblxuICAgIC8vIEFueSBjYWxsYmFjayBjYWxsZWQgYnkgdHJhbnNwb3J0IHNob3VsZCBiZSBpZ25vcmVkIHNpbmNlIG5vd1xuICAgIGZhaWxlZCA9IHRydWU7XG5cbiAgICBjbGVhbnVwKCk7XG5cbiAgICB0cmFuc3BvcnQuY2xvc2UoKTtcbiAgICB0cmFuc3BvcnQgPSBudWxsO1xuICB9XG5cbiAgLy8gSGFuZGxlIGFueSBlcnJvciB0aGF0IGhhcHBlbnMgd2hpbGUgcHJvYmluZ1xuICBmdW5jdGlvbiBvbmVycm9yIChlcnIpIHtcbiAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ3Byb2JlIGVycm9yOiAnICsgZXJyKTtcbiAgICBlcnJvci50cmFuc3BvcnQgPSB0cmFuc3BvcnQubmFtZTtcblxuICAgIGZyZWV6ZVRyYW5zcG9ydCgpO1xuXG4gICAgZGVidWcoJ3Byb2JlIHRyYW5zcG9ydCBcIiVzXCIgZmFpbGVkIGJlY2F1c2Ugb2YgZXJyb3I6ICVzJywgbmFtZSwgZXJyKTtcblxuICAgIHNlbGYuZW1pdCgndXBncmFkZUVycm9yJywgZXJyb3IpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25UcmFuc3BvcnRDbG9zZSAoKSB7XG4gICAgb25lcnJvcigndHJhbnNwb3J0IGNsb3NlZCcpO1xuICB9XG5cbiAgLy8gV2hlbiB0aGUgc29ja2V0IGlzIGNsb3NlZCB3aGlsZSB3ZSdyZSBwcm9iaW5nXG4gIGZ1bmN0aW9uIG9uY2xvc2UgKCkge1xuICAgIG9uZXJyb3IoJ3NvY2tldCBjbG9zZWQnKTtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHNvY2tldCBpcyB1cGdyYWRlZCB3aGlsZSB3ZSdyZSBwcm9iaW5nXG4gIGZ1bmN0aW9uIG9udXBncmFkZSAodG8pIHtcbiAgICBpZiAodHJhbnNwb3J0ICYmIHRvLm5hbWUgIT09IHRyYW5zcG9ydC5uYW1lKSB7XG4gICAgICBkZWJ1ZygnXCIlc1wiIHdvcmtzIC0gYWJvcnRpbmcgXCIlc1wiJywgdG8ubmFtZSwgdHJhbnNwb3J0Lm5hbWUpO1xuICAgICAgZnJlZXplVHJhbnNwb3J0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb24gdGhlIHRyYW5zcG9ydCBhbmQgb24gc2VsZlxuICBmdW5jdGlvbiBjbGVhbnVwICgpIHtcbiAgICB0cmFuc3BvcnQucmVtb3ZlTGlzdGVuZXIoJ29wZW4nLCBvblRyYW5zcG9ydE9wZW4pO1xuICAgIHRyYW5zcG9ydC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICB0cmFuc3BvcnQucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25UcmFuc3BvcnRDbG9zZSk7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKCd1cGdyYWRpbmcnLCBvbnVwZ3JhZGUpO1xuICB9XG5cbiAgdHJhbnNwb3J0Lm9uY2UoJ29wZW4nLCBvblRyYW5zcG9ydE9wZW4pO1xuICB0cmFuc3BvcnQub25jZSgnZXJyb3InLCBvbmVycm9yKTtcbiAgdHJhbnNwb3J0Lm9uY2UoJ2Nsb3NlJywgb25UcmFuc3BvcnRDbG9zZSk7XG5cbiAgdGhpcy5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICB0aGlzLm9uY2UoJ3VwZ3JhZGluZycsIG9udXBncmFkZSk7XG5cbiAgdHJhbnNwb3J0Lm9wZW4oKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gY29ubmVjdGlvbiBpcyBkZWVtZWQgb3Blbi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblNvY2tldC5wcm90b3R5cGUub25PcGVuID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1Zygnc29ja2V0IG9wZW4nKTtcbiAgdGhpcy5yZWFkeVN0YXRlID0gJ29wZW4nO1xuICBTb2NrZXQucHJpb3JXZWJzb2NrZXRTdWNjZXNzID0gJ3dlYnNvY2tldCcgPT09IHRoaXMudHJhbnNwb3J0Lm5hbWU7XG4gIHRoaXMuZW1pdCgnb3BlbicpO1xuICB0aGlzLmZsdXNoKCk7XG5cbiAgLy8gd2UgY2hlY2sgZm9yIGByZWFkeVN0YXRlYCBpbiBjYXNlIGFuIGBvcGVuYFxuICAvLyBsaXN0ZW5lciBhbHJlYWR5IGNsb3NlZCB0aGUgc29ja2V0XG4gIGlmICgnb3BlbicgPT09IHRoaXMucmVhZHlTdGF0ZSAmJiB0aGlzLnVwZ3JhZGUgJiYgdGhpcy50cmFuc3BvcnQucGF1c2UpIHtcbiAgICBkZWJ1Zygnc3RhcnRpbmcgdXBncmFkZSBwcm9iZXMnKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMudXBncmFkZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnByb2JlKHRoaXMudXBncmFkZXNbaV0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcGFja2V0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUub25QYWNrZXQgPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gIGlmICgnb3BlbmluZycgPT09IHRoaXMucmVhZHlTdGF0ZSB8fCAnb3BlbicgPT09IHRoaXMucmVhZHlTdGF0ZSB8fFxuICAgICAgJ2Nsb3NpbmcnID09PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICBkZWJ1Zygnc29ja2V0IHJlY2VpdmU6IHR5cGUgXCIlc1wiLCBkYXRhIFwiJXNcIicsIHBhY2tldC50eXBlLCBwYWNrZXQuZGF0YSk7XG5cbiAgICB0aGlzLmVtaXQoJ3BhY2tldCcsIHBhY2tldCk7XG5cbiAgICAvLyBTb2NrZXQgaXMgbGl2ZSAtIGFueSBwYWNrZXQgY291bnRzXG4gICAgdGhpcy5lbWl0KCdoZWFydGJlYXQnKTtcblxuICAgIHN3aXRjaCAocGFja2V0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ29wZW4nOlxuICAgICAgICB0aGlzLm9uSGFuZHNoYWtlKEpTT04ucGFyc2UocGFja2V0LmRhdGEpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3BvbmcnOlxuICAgICAgICB0aGlzLnNldFBpbmcoKTtcbiAgICAgICAgdGhpcy5lbWl0KCdwb25nJyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ3NlcnZlciBlcnJvcicpO1xuICAgICAgICBlcnIuY29kZSA9IHBhY2tldC5kYXRhO1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21lc3NhZ2UnOlxuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBwYWNrZXQuZGF0YSk7XG4gICAgICAgIHRoaXMuZW1pdCgnbWVzc2FnZScsIHBhY2tldC5kYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRlYnVnKCdwYWNrZXQgcmVjZWl2ZWQgd2l0aCBzb2NrZXQgcmVhZHlTdGF0ZSBcIiVzXCInLCB0aGlzLnJlYWR5U3RhdGUpO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIGhhbmRzaGFrZSBjb21wbGV0aW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYW5kc2hha2Ugb2JqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLm9uSGFuZHNoYWtlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5lbWl0KCdoYW5kc2hha2UnLCBkYXRhKTtcbiAgdGhpcy5pZCA9IGRhdGEuc2lkO1xuICB0aGlzLnRyYW5zcG9ydC5xdWVyeS5zaWQgPSBkYXRhLnNpZDtcbiAgdGhpcy51cGdyYWRlcyA9IHRoaXMuZmlsdGVyVXBncmFkZXMoZGF0YS51cGdyYWRlcyk7XG4gIHRoaXMucGluZ0ludGVydmFsID0gZGF0YS5waW5nSW50ZXJ2YWw7XG4gIHRoaXMucGluZ1RpbWVvdXQgPSBkYXRhLnBpbmdUaW1lb3V0O1xuICB0aGlzLm9uT3BlbigpO1xuICAvLyBJbiBjYXNlIG9wZW4gaGFuZGxlciBjbG9zZXMgc29ja2V0XG4gIGlmICgnY2xvc2VkJyA9PT0gdGhpcy5yZWFkeVN0YXRlKSByZXR1cm47XG4gIHRoaXMuc2V0UGluZygpO1xuXG4gIC8vIFByb2xvbmcgbGl2ZW5lc3Mgb2Ygc29ja2V0IG9uIGhlYXJ0YmVhdFxuICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdoZWFydGJlYXQnLCB0aGlzLm9uSGVhcnRiZWF0KTtcbiAgdGhpcy5vbignaGVhcnRiZWF0JywgdGhpcy5vbkhlYXJ0YmVhdCk7XG59O1xuXG4vKipcbiAqIFJlc2V0cyBwaW5nIHRpbWVvdXQuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vbkhlYXJ0YmVhdCA9IGZ1bmN0aW9uICh0aW1lb3V0KSB7XG4gIGNsZWFyVGltZW91dCh0aGlzLnBpbmdUaW1lb3V0VGltZXIpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYucGluZ1RpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGlmICgnY2xvc2VkJyA9PT0gc2VsZi5yZWFkeVN0YXRlKSByZXR1cm47XG4gICAgc2VsZi5vbkNsb3NlKCdwaW5nIHRpbWVvdXQnKTtcbiAgfSwgdGltZW91dCB8fCAoc2VsZi5waW5nSW50ZXJ2YWwgKyBzZWxmLnBpbmdUaW1lb3V0KSk7XG59O1xuXG4vKipcbiAqIFBpbmdzIHNlcnZlciBldmVyeSBgdGhpcy5waW5nSW50ZXJ2YWxgIGFuZCBleHBlY3RzIHJlc3BvbnNlXG4gKiB3aXRoaW4gYHRoaXMucGluZ1RpbWVvdXRgIG9yIGNsb3NlcyBjb25uZWN0aW9uLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUuc2V0UGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBjbGVhclRpbWVvdXQoc2VsZi5waW5nSW50ZXJ2YWxUaW1lcik7XG4gIHNlbGYucGluZ0ludGVydmFsVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JpdGluZyBwaW5nIHBhY2tldCAtIGV4cGVjdGluZyBwb25nIHdpdGhpbiAlc21zJywgc2VsZi5waW5nVGltZW91dCk7XG4gICAgc2VsZi5waW5nKCk7XG4gICAgc2VsZi5vbkhlYXJ0YmVhdChzZWxmLnBpbmdUaW1lb3V0KTtcbiAgfSwgc2VsZi5waW5nSW50ZXJ2YWwpO1xufTtcblxuLyoqXG4qIFNlbmRzIGEgcGluZyBwYWNrZXQuXG4qXG4qIEBhcGkgcHJpdmF0ZVxuKi9cblxuU29ja2V0LnByb3RvdHlwZS5waW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuc2VuZFBhY2tldCgncGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLmVtaXQoJ3BpbmcnKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbiBgZHJhaW5gIGV2ZW50XG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vbkRyYWluID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLndyaXRlQnVmZmVyLnNwbGljZSgwLCB0aGlzLnByZXZCdWZmZXJMZW4pO1xuXG4gIC8vIHNldHRpbmcgcHJldkJ1ZmZlckxlbiA9IDAgaXMgdmVyeSBpbXBvcnRhbnRcbiAgLy8gZm9yIGV4YW1wbGUsIHdoZW4gdXBncmFkaW5nLCB1cGdyYWRlIHBhY2tldCBpcyBzZW50IG92ZXIsXG4gIC8vIGFuZCBhIG5vbnplcm8gcHJldkJ1ZmZlckxlbiBjb3VsZCBjYXVzZSBwcm9ibGVtcyBvbiBgZHJhaW5gXG4gIHRoaXMucHJldkJ1ZmZlckxlbiA9IDA7XG5cbiAgaWYgKDAgPT09IHRoaXMud3JpdGVCdWZmZXIubGVuZ3RoKSB7XG4gICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZmx1c2goKTtcbiAgfVxufTtcblxuLyoqXG4gKiBGbHVzaCB3cml0ZSBidWZmZXJzLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICgnY2xvc2VkJyAhPT0gdGhpcy5yZWFkeVN0YXRlICYmIHRoaXMudHJhbnNwb3J0LndyaXRhYmxlICYmXG4gICAgIXRoaXMudXBncmFkaW5nICYmIHRoaXMud3JpdGVCdWZmZXIubGVuZ3RoKSB7XG4gICAgZGVidWcoJ2ZsdXNoaW5nICVkIHBhY2tldHMgaW4gc29ja2V0JywgdGhpcy53cml0ZUJ1ZmZlci5sZW5ndGgpO1xuICAgIHRoaXMudHJhbnNwb3J0LnNlbmQodGhpcy53cml0ZUJ1ZmZlcik7XG4gICAgLy8ga2VlcCB0cmFjayBvZiBjdXJyZW50IGxlbmd0aCBvZiB3cml0ZUJ1ZmZlclxuICAgIC8vIHNwbGljZSB3cml0ZUJ1ZmZlciBhbmQgY2FsbGJhY2tCdWZmZXIgb24gYGRyYWluYFxuICAgIHRoaXMucHJldkJ1ZmZlckxlbiA9IHRoaXMud3JpdGVCdWZmZXIubGVuZ3RoO1xuICAgIHRoaXMuZW1pdCgnZmx1c2gnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTZW5kcyBhIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLlxuICogQHJldHVybiB7U29ja2V0fSBmb3IgY2hhaW5pbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblNvY2tldC5wcm90b3R5cGUud3JpdGUgPVxuU29ja2V0LnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKG1zZywgb3B0aW9ucywgZm4pIHtcbiAgdGhpcy5zZW5kUGFja2V0KCdtZXNzYWdlJywgbXNnLCBvcHRpb25zLCBmbik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZW5kcyBhIHBhY2tldC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFja2V0IHR5cGUuXG4gKiBAcGFyYW0ge1N0cmluZ30gZGF0YS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLnNlbmRQYWNrZXQgPSBmdW5jdGlvbiAodHlwZSwgZGF0YSwgb3B0aW9ucywgZm4pIHtcbiAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBkYXRhKSB7XG4gICAgZm4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9wdGlvbnMpIHtcbiAgICBmbiA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IG51bGw7XG4gIH1cblxuICBpZiAoJ2Nsb3NpbmcnID09PSB0aGlzLnJlYWR5U3RhdGUgfHwgJ2Nsb3NlZCcgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLmNvbXByZXNzID0gZmFsc2UgIT09IG9wdGlvbnMuY29tcHJlc3M7XG5cbiAgdmFyIHBhY2tldCA9IHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIGRhdGE6IGRhdGEsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9O1xuICB0aGlzLmVtaXQoJ3BhY2tldENyZWF0ZScsIHBhY2tldCk7XG4gIHRoaXMud3JpdGVCdWZmZXIucHVzaChwYWNrZXQpO1xuICBpZiAoZm4pIHRoaXMub25jZSgnZmx1c2gnLCBmbik7XG4gIHRoaXMuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2xvc2VzIHRoZSBjb25uZWN0aW9uLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICgnb3BlbmluZycgPT09IHRoaXMucmVhZHlTdGF0ZSB8fCAnb3BlbicgPT09IHRoaXMucmVhZHlTdGF0ZSkge1xuICAgIHRoaXMucmVhZHlTdGF0ZSA9ICdjbG9zaW5nJztcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGlmICh0aGlzLndyaXRlQnVmZmVyLmxlbmd0aCkge1xuICAgICAgdGhpcy5vbmNlKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMudXBncmFkaW5nKSB7XG4gICAgICAgICAgd2FpdEZvclVwZ3JhZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXBncmFkaW5nKSB7XG4gICAgICB3YWl0Rm9yVXBncmFkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlICgpIHtcbiAgICBzZWxmLm9uQ2xvc2UoJ2ZvcmNlZCBjbG9zZScpO1xuICAgIGRlYnVnKCdzb2NrZXQgY2xvc2luZyAtIHRlbGxpbmcgdHJhbnNwb3J0IHRvIGNsb3NlJyk7XG4gICAgc2VsZi50cmFuc3BvcnQuY2xvc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFudXBBbmRDbG9zZSAoKSB7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcigndXBncmFkZScsIGNsZWFudXBBbmRDbG9zZSk7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcigndXBncmFkZUVycm9yJywgY2xlYW51cEFuZENsb3NlKTtcbiAgICBjbG9zZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gd2FpdEZvclVwZ3JhZGUgKCkge1xuICAgIC8vIHdhaXQgZm9yIHVwZ3JhZGUgdG8gZmluaXNoIHNpbmNlIHdlIGNhbid0IHNlbmQgcGFja2V0cyB3aGlsZSBwYXVzaW5nIGEgdHJhbnNwb3J0XG4gICAgc2VsZi5vbmNlKCd1cGdyYWRlJywgY2xlYW51cEFuZENsb3NlKTtcbiAgICBzZWxmLm9uY2UoJ3VwZ3JhZGVFcnJvcicsIGNsZWFudXBBbmRDbG9zZSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gdHJhbnNwb3J0IGVycm9yXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vbkVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICBkZWJ1Zygnc29ja2V0IGVycm9yICVqJywgZXJyKTtcbiAgU29ja2V0LnByaW9yV2Vic29ja2V0U3VjY2VzcyA9IGZhbHNlO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgdGhpcy5vbkNsb3NlKCd0cmFuc3BvcnQgZXJyb3InLCBlcnIpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiB0cmFuc3BvcnQgY2xvc2UuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5vbkNsb3NlID0gZnVuY3Rpb24gKHJlYXNvbiwgZGVzYykge1xuICBpZiAoJ29wZW5pbmcnID09PSB0aGlzLnJlYWR5U3RhdGUgfHwgJ29wZW4nID09PSB0aGlzLnJlYWR5U3RhdGUgfHwgJ2Nsb3NpbmcnID09PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICBkZWJ1Zygnc29ja2V0IGNsb3NlIHdpdGggcmVhc29uOiBcIiVzXCInLCByZWFzb24pO1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIC8vIGNsZWFyIHRpbWVyc1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnBpbmdJbnRlcnZhbFRpbWVyKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5waW5nVGltZW91dFRpbWVyKTtcblxuICAgIC8vIHN0b3AgZXZlbnQgZnJvbSBmaXJpbmcgYWdhaW4gZm9yIHRyYW5zcG9ydFxuICAgIHRoaXMudHJhbnNwb3J0LnJlbW92ZUFsbExpc3RlbmVycygnY2xvc2UnKTtcblxuICAgIC8vIGVuc3VyZSB0cmFuc3BvcnQgd29uJ3Qgc3RheSBvcGVuXG4gICAgdGhpcy50cmFuc3BvcnQuY2xvc2UoKTtcblxuICAgIC8vIGlnbm9yZSBmdXJ0aGVyIHRyYW5zcG9ydCBjb21tdW5pY2F0aW9uXG4gICAgdGhpcy50cmFuc3BvcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cbiAgICAvLyBzZXQgcmVhZHkgc3RhdGVcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSAnY2xvc2VkJztcblxuICAgIC8vIGNsZWFyIHNlc3Npb24gaWRcbiAgICB0aGlzLmlkID0gbnVsbDtcblxuICAgIC8vIGVtaXQgY2xvc2UgZXZlbnRcbiAgICB0aGlzLmVtaXQoJ2Nsb3NlJywgcmVhc29uLCBkZXNjKTtcblxuICAgIC8vIGNsZWFuIGJ1ZmZlcnMgYWZ0ZXIsIHNvIHVzZXJzIGNhbiBzdGlsbFxuICAgIC8vIGdyYWIgdGhlIGJ1ZmZlcnMgb24gYGNsb3NlYCBldmVudFxuICAgIHNlbGYud3JpdGVCdWZmZXIgPSBbXTtcbiAgICBzZWxmLnByZXZCdWZmZXJMZW4gPSAwO1xuICB9XG59O1xuXG4vKipcbiAqIEZpbHRlcnMgdXBncmFkZXMsIHJldHVybmluZyBvbmx5IHRob3NlIG1hdGNoaW5nIGNsaWVudCB0cmFuc3BvcnRzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHNlcnZlciB1cGdyYWRlc1xuICogQGFwaSBwcml2YXRlXG4gKlxuICovXG5cblNvY2tldC5wcm90b3R5cGUuZmlsdGVyVXBncmFkZXMgPSBmdW5jdGlvbiAodXBncmFkZXMpIHtcbiAgdmFyIGZpbHRlcmVkVXBncmFkZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGogPSB1cGdyYWRlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICBpZiAofmluZGV4KHRoaXMudHJhbnNwb3J0cywgdXBncmFkZXNbaV0pKSBmaWx0ZXJlZFVwZ3JhZGVzLnB1c2godXBncmFkZXNbaV0pO1xuICB9XG4gIHJldHVybiBmaWx0ZXJlZFVwZ3JhZGVzO1xufTtcbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgcGFyc2VyID0gcmVxdWlyZSgnZW5naW5lLmlvLXBhcnNlcicpO1xudmFyIEVtaXR0ZXIgPSByZXF1aXJlKCdjb21wb25lbnQtZW1pdHRlcicpO1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNwb3J0O1xuXG4vKipcbiAqIFRyYW5zcG9ydCBhYnN0cmFjdCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIFRyYW5zcG9ydCAob3B0cykge1xuICB0aGlzLnBhdGggPSBvcHRzLnBhdGg7XG4gIHRoaXMuaG9zdG5hbWUgPSBvcHRzLmhvc3RuYW1lO1xuICB0aGlzLnBvcnQgPSBvcHRzLnBvcnQ7XG4gIHRoaXMuc2VjdXJlID0gb3B0cy5zZWN1cmU7XG4gIHRoaXMucXVlcnkgPSBvcHRzLnF1ZXJ5O1xuICB0aGlzLnRpbWVzdGFtcFBhcmFtID0gb3B0cy50aW1lc3RhbXBQYXJhbTtcbiAgdGhpcy50aW1lc3RhbXBSZXF1ZXN0cyA9IG9wdHMudGltZXN0YW1wUmVxdWVzdHM7XG4gIHRoaXMucmVhZHlTdGF0ZSA9ICcnO1xuICB0aGlzLmFnZW50ID0gb3B0cy5hZ2VudCB8fCBmYWxzZTtcbiAgdGhpcy5zb2NrZXQgPSBvcHRzLnNvY2tldDtcbiAgdGhpcy5lbmFibGVzWERSID0gb3B0cy5lbmFibGVzWERSO1xuICB0aGlzLndpdGhDcmVkZW50aWFscyA9IG9wdHMud2l0aENyZWRlbnRpYWxzO1xuXG4gIC8vIFNTTCBvcHRpb25zIGZvciBOb2RlLmpzIGNsaWVudFxuICB0aGlzLnBmeCA9IG9wdHMucGZ4O1xuICB0aGlzLmtleSA9IG9wdHMua2V5O1xuICB0aGlzLnBhc3NwaHJhc2UgPSBvcHRzLnBhc3NwaHJhc2U7XG4gIHRoaXMuY2VydCA9IG9wdHMuY2VydDtcbiAgdGhpcy5jYSA9IG9wdHMuY2E7XG4gIHRoaXMuY2lwaGVycyA9IG9wdHMuY2lwaGVycztcbiAgdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQgPSBvcHRzLnJlamVjdFVuYXV0aG9yaXplZDtcbiAgdGhpcy5mb3JjZU5vZGUgPSBvcHRzLmZvcmNlTm9kZTtcblxuICAvLyByZXN1bHRzIG9mIFJlYWN0TmF0aXZlIGVudmlyb25tZW50IGRldGVjdGlvblxuICB0aGlzLmlzUmVhY3ROYXRpdmUgPSBvcHRzLmlzUmVhY3ROYXRpdmU7XG5cbiAgLy8gb3RoZXIgb3B0aW9ucyBmb3IgTm9kZS5qcyBjbGllbnRcbiAgdGhpcy5leHRyYUhlYWRlcnMgPSBvcHRzLmV4dHJhSGVhZGVycztcbiAgdGhpcy5sb2NhbEFkZHJlc3MgPSBvcHRzLmxvY2FsQWRkcmVzcztcbn1cblxuLyoqXG4gKiBNaXggaW4gYEVtaXR0ZXJgLlxuICovXG5cbkVtaXR0ZXIoVHJhbnNwb3J0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRW1pdHMgYW4gZXJyb3IuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7VHJhbnNwb3J0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuVHJhbnNwb3J0LnByb3RvdHlwZS5vbkVycm9yID0gZnVuY3Rpb24gKG1zZywgZGVzYykge1xuICB2YXIgZXJyID0gbmV3IEVycm9yKG1zZyk7XG4gIGVyci50eXBlID0gJ1RyYW5zcG9ydEVycm9yJztcbiAgZXJyLmRlc2NyaXB0aW9uID0gZGVzYztcbiAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBPcGVucyB0aGUgdHJhbnNwb3J0LlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuVHJhbnNwb3J0LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gKCkge1xuICBpZiAoJ2Nsb3NlZCcgPT09IHRoaXMucmVhZHlTdGF0ZSB8fCAnJyA9PT0gdGhpcy5yZWFkeVN0YXRlKSB7XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gJ29wZW5pbmcnO1xuICAgIHRoaXMuZG9PcGVuKCk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xvc2VzIHRoZSB0cmFuc3BvcnQuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuVHJhbnNwb3J0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCdvcGVuaW5nJyA9PT0gdGhpcy5yZWFkeVN0YXRlIHx8ICdvcGVuJyA9PT0gdGhpcy5yZWFkeVN0YXRlKSB7XG4gICAgdGhpcy5kb0Nsb3NlKCk7XG4gICAgdGhpcy5vbkNsb3NlKCk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2VuZHMgbXVsdGlwbGUgcGFja2V0cy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYWNrZXRzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5UcmFuc3BvcnQucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbiAocGFja2V0cykge1xuICBpZiAoJ29wZW4nID09PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICB0aGlzLndyaXRlKHBhY2tldHMpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNwb3J0IG5vdCBvcGVuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gb3BlblxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblRyYW5zcG9ydC5wcm90b3R5cGUub25PcGVuID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnJlYWR5U3RhdGUgPSAnb3Blbic7XG4gIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICB0aGlzLmVtaXQoJ29wZW4nKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdpdGggZGF0YS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGF0YVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuVHJhbnNwb3J0LnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB2YXIgcGFja2V0ID0gcGFyc2VyLmRlY29kZVBhY2tldChkYXRhLCB0aGlzLnNvY2tldC5iaW5hcnlUeXBlKTtcbiAgdGhpcy5vblBhY2tldChwYWNrZXQpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2l0aCBhIGRlY29kZWQgcGFja2V0LlxuICovXG5cblRyYW5zcG9ydC5wcm90b3R5cGUub25QYWNrZXQgPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gIHRoaXMuZW1pdCgncGFja2V0JywgcGFja2V0KTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gY2xvc2UuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuVHJhbnNwb3J0LnByb3RvdHlwZS5vbkNsb3NlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnJlYWR5U3RhdGUgPSAnY2xvc2VkJztcbiAgdGhpcy5lbWl0KCdjbG9zZScpO1xufTtcbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llc1xuICovXG5cbnZhciBYTUxIdHRwUmVxdWVzdCA9IHJlcXVpcmUoJy4veG1saHR0cHJlcXVlc3QnKTtcbnZhciBYSFIgPSByZXF1aXJlKCcuL3BvbGxpbmcteGhyJyk7XG52YXIgSlNPTlAgPSByZXF1aXJlKCcuL3BvbGxpbmctanNvbnAnKTtcbnZhciB3ZWJzb2NrZXQgPSByZXF1aXJlKCcuL3dlYnNvY2tldCcpO1xuXG4vKipcbiAqIEV4cG9ydCB0cmFuc3BvcnRzLlxuICovXG5cbmV4cG9ydHMucG9sbGluZyA9IHBvbGxpbmc7XG5leHBvcnRzLndlYnNvY2tldCA9IHdlYnNvY2tldDtcblxuLyoqXG4gKiBQb2xsaW5nIHRyYW5zcG9ydCBwb2x5bW9ycGhpYyBjb25zdHJ1Y3Rvci5cbiAqIERlY2lkZXMgb24geGhyIHZzIGpzb25wIGJhc2VkIG9uIGZlYXR1cmUgZGV0ZWN0aW9uLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBvbGxpbmcgKG9wdHMpIHtcbiAgdmFyIHhocjtcbiAgdmFyIHhkID0gZmFsc2U7XG4gIHZhciB4cyA9IGZhbHNlO1xuICB2YXIganNvbnAgPSBmYWxzZSAhPT0gb3B0cy5qc29ucDtcblxuICBpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBpc1NTTCA9ICdodHRwczonID09PSBsb2NhdGlvbi5wcm90b2NvbDtcbiAgICB2YXIgcG9ydCA9IGxvY2F0aW9uLnBvcnQ7XG5cbiAgICAvLyBzb21lIHVzZXIgYWdlbnRzIGhhdmUgZW1wdHkgYGxvY2F0aW9uLnBvcnRgXG4gICAgaWYgKCFwb3J0KSB7XG4gICAgICBwb3J0ID0gaXNTU0wgPyA0NDMgOiA4MDtcbiAgICB9XG5cbiAgICB4ZCA9IG9wdHMuaG9zdG5hbWUgIT09IGxvY2F0aW9uLmhvc3RuYW1lIHx8IHBvcnQgIT09IG9wdHMucG9ydDtcbiAgICB4cyA9IG9wdHMuc2VjdXJlICE9PSBpc1NTTDtcbiAgfVxuXG4gIG9wdHMueGRvbWFpbiA9IHhkO1xuICBvcHRzLnhzY2hlbWUgPSB4cztcbiAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KG9wdHMpO1xuXG4gIGlmICgnb3BlbicgaW4geGhyICYmICFvcHRzLmZvcmNlSlNPTlApIHtcbiAgICByZXR1cm4gbmV3IFhIUihvcHRzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWpzb25wKSB0aHJvdyBuZXcgRXJyb3IoJ0pTT05QIGRpc2FibGVkJyk7XG4gICAgcmV0dXJuIG5ldyBKU09OUChvcHRzKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBNb2R1bGUgcmVxdWlyZW1lbnRzLlxuICovXG5cbnZhciBQb2xsaW5nID0gcmVxdWlyZSgnLi9wb2xsaW5nJyk7XG52YXIgaW5oZXJpdCA9IHJlcXVpcmUoJ2NvbXBvbmVudC1pbmhlcml0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2dsb2JhbFRoaXMnKTtcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IEpTT05QUG9sbGluZztcblxuLyoqXG4gKiBDYWNoZWQgcmVndWxhciBleHByZXNzaW9ucy5cbiAqL1xuXG52YXIgck5ld2xpbmUgPSAvXFxuL2c7XG52YXIgckVzY2FwZWROZXdsaW5lID0gL1xcXFxuL2c7XG5cbi8qKlxuICogR2xvYmFsIEpTT05QIGNhbGxiYWNrcy5cbiAqL1xuXG52YXIgY2FsbGJhY2tzO1xuXG4vKipcbiAqIE5vb3AuXG4gKi9cblxuZnVuY3Rpb24gZW1wdHkgKCkgeyB9XG5cbi8qKlxuICogSlNPTlAgUG9sbGluZyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gSlNPTlBQb2xsaW5nIChvcHRzKSB7XG4gIFBvbGxpbmcuY2FsbCh0aGlzLCBvcHRzKTtcblxuICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB7fTtcblxuICAvLyBkZWZpbmUgZ2xvYmFsIGNhbGxiYWNrcyBhcnJheSBpZiBub3QgcHJlc2VudFxuICAvLyB3ZSBkbyB0aGlzIGhlcmUgKGxhemlseSkgdG8gYXZvaWQgdW5uZWVkZWQgZ2xvYmFsIHBvbGx1dGlvblxuICBpZiAoIWNhbGxiYWNrcykge1xuICAgIC8vIHdlIG5lZWQgdG8gY29uc2lkZXIgbXVsdGlwbGUgZW5naW5lcyBpbiB0aGUgc2FtZSBwYWdlXG4gICAgY2FsbGJhY2tzID0gZ2xvYmFsVGhpcy5fX19laW8gPSAoZ2xvYmFsVGhpcy5fX19laW8gfHwgW10pO1xuICB9XG5cbiAgLy8gY2FsbGJhY2sgaWRlbnRpZmllclxuICB0aGlzLmluZGV4ID0gY2FsbGJhY2tzLmxlbmd0aDtcblxuICAvLyBhZGQgY2FsbGJhY2sgdG8ganNvbnAgZ2xvYmFsXG4gIHZhciBzZWxmID0gdGhpcztcbiAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKG1zZykge1xuICAgIHNlbGYub25EYXRhKG1zZyk7XG4gIH0pO1xuXG4gIC8vIGFwcGVuZCB0byBxdWVyeSBzdHJpbmdcbiAgdGhpcy5xdWVyeS5qID0gdGhpcy5pbmRleDtcblxuICAvLyBwcmV2ZW50IHNwdXJpb3VzIGVycm9ycyBmcm9tIGJlaW5nIGVtaXR0ZWQgd2hlbiB0aGUgd2luZG93IGlzIHVubG9hZGVkXG4gIGlmICh0eXBlb2YgYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzZWxmLnNjcmlwdCkgc2VsZi5zY3JpcHQub25lcnJvciA9IGVtcHR5O1xuICAgIH0sIGZhbHNlKTtcbiAgfVxufVxuXG4vKipcbiAqIEluaGVyaXRzIGZyb20gUG9sbGluZy5cbiAqL1xuXG5pbmhlcml0KEpTT05QUG9sbGluZywgUG9sbGluZyk7XG5cbi8qXG4gKiBKU09OUCBvbmx5IHN1cHBvcnRzIGJpbmFyeSBhcyBiYXNlNjQgZW5jb2RlZCBzdHJpbmdzXG4gKi9cblxuSlNPTlBQb2xsaW5nLnByb3RvdHlwZS5zdXBwb3J0c0JpbmFyeSA9IGZhbHNlO1xuXG4vKipcbiAqIENsb3NlcyB0aGUgc29ja2V0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkpTT05QUG9sbGluZy5wcm90b3R5cGUuZG9DbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuc2NyaXB0KSB7XG4gICAgdGhpcy5zY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnNjcmlwdCk7XG4gICAgdGhpcy5zY3JpcHQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHRoaXMuZm9ybSkge1xuICAgIHRoaXMuZm9ybS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZm9ybSk7XG4gICAgdGhpcy5mb3JtID0gbnVsbDtcbiAgICB0aGlzLmlmcmFtZSA9IG51bGw7XG4gIH1cblxuICBQb2xsaW5nLnByb3RvdHlwZS5kb0Nsb3NlLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIHBvbGwgY3ljbGUuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuSlNPTlBQb2xsaW5nLnByb3RvdHlwZS5kb1BvbGwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXG4gIGlmICh0aGlzLnNjcmlwdCkge1xuICAgIHRoaXMuc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zY3JpcHQpO1xuICAgIHRoaXMuc2NyaXB0ID0gbnVsbDtcbiAgfVxuXG4gIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gIHNjcmlwdC5zcmMgPSB0aGlzLnVyaSgpO1xuICBzY3JpcHQub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgc2VsZi5vbkVycm9yKCdqc29ucCBwb2xsIGVycm9yJywgZSk7XG4gIH07XG5cbiAgdmFyIGluc2VydEF0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdO1xuICBpZiAoaW5zZXJ0QXQpIHtcbiAgICBpbnNlcnRBdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzY3JpcHQsIGluc2VydEF0KTtcbiAgfSBlbHNlIHtcbiAgICAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9XG4gIHRoaXMuc2NyaXB0ID0gc2NyaXB0O1xuXG4gIHZhciBpc1VBZ2Vja28gPSAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG5hdmlnYXRvciAmJiAvZ2Vja28vaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4gIGlmIChpc1VBZ2Vja28pIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICB9LCAxMDApO1xuICB9XG59O1xuXG4vKipcbiAqIFdyaXRlcyB3aXRoIGEgaGlkZGVuIGlmcmFtZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGF0YSB0byBzZW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsZWQgdXBvbiBmbHVzaC5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkpTT05QUG9sbGluZy5wcm90b3R5cGUuZG9Xcml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBmbikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKCF0aGlzLmZvcm0pIHtcbiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICB2YXIgYXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgdmFyIGlkID0gdGhpcy5pZnJhbWVJZCA9ICdlaW9faWZyYW1lXycgKyB0aGlzLmluZGV4O1xuICAgIHZhciBpZnJhbWU7XG5cbiAgICBmb3JtLmNsYXNzTmFtZSA9ICdzb2NrZXRpbyc7XG4gICAgZm9ybS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgZm9ybS5zdHlsZS50b3AgPSAnLTEwMDBweCc7XG4gICAgZm9ybS5zdHlsZS5sZWZ0ID0gJy0xMDAwcHgnO1xuICAgIGZvcm0udGFyZ2V0ID0gaWQ7XG4gICAgZm9ybS5tZXRob2QgPSAnUE9TVCc7XG4gICAgZm9ybS5zZXRBdHRyaWJ1dGUoJ2FjY2VwdC1jaGFyc2V0JywgJ3V0Zi04Jyk7XG4gICAgYXJlYS5uYW1lID0gJ2QnO1xuICAgIGZvcm0uYXBwZW5kQ2hpbGQoYXJlYSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcblxuICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgdGhpcy5hcmVhID0gYXJlYTtcbiAgfVxuXG4gIHRoaXMuZm9ybS5hY3Rpb24gPSB0aGlzLnVyaSgpO1xuXG4gIGZ1bmN0aW9uIGNvbXBsZXRlICgpIHtcbiAgICBpbml0SWZyYW1lKCk7XG4gICAgZm4oKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRJZnJhbWUgKCkge1xuICAgIGlmIChzZWxmLmlmcmFtZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZi5mb3JtLnJlbW92ZUNoaWxkKHNlbGYuaWZyYW1lKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2VsZi5vbkVycm9yKCdqc29ucCBwb2xsaW5nIGlmcmFtZSByZW1vdmFsIGVycm9yJywgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGllNiBkeW5hbWljIGlmcmFtZXMgd2l0aCB0YXJnZXQ9XCJcIiBzdXBwb3J0ICh0aGFua3MgQ2hyaXMgTGFtYmFjaGVyKVxuICAgICAgdmFyIGh0bWwgPSAnPGlmcmFtZSBzcmM9XCJqYXZhc2NyaXB0OjBcIiBuYW1lPVwiJyArIHNlbGYuaWZyYW1lSWQgKyAnXCI+JztcbiAgICAgIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaHRtbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgICBpZnJhbWUubmFtZSA9IHNlbGYuaWZyYW1lSWQ7XG4gICAgICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6MCc7XG4gICAgfVxuXG4gICAgaWZyYW1lLmlkID0gc2VsZi5pZnJhbWVJZDtcblxuICAgIHNlbGYuZm9ybS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAgIHNlbGYuaWZyYW1lID0gaWZyYW1lO1xuICB9XG5cbiAgaW5pdElmcmFtZSgpO1xuXG4gIC8vIGVzY2FwZSBcXG4gdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGNvbnZlcnRlZCBpbnRvIFxcclxcbiBieSBzb21lIFVBc1xuICAvLyBkb3VibGUgZXNjYXBpbmcgaXMgcmVxdWlyZWQgZm9yIGVzY2FwZWQgbmV3IGxpbmVzIGJlY2F1c2UgdW5lc2NhcGluZyBvZiBuZXcgbGluZXMgY2FuIGJlIGRvbmUgc2FmZWx5IG9uIHNlcnZlci1zaWRlXG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UockVzY2FwZWROZXdsaW5lLCAnXFxcXFxcbicpO1xuICB0aGlzLmFyZWEudmFsdWUgPSBkYXRhLnJlcGxhY2Uock5ld2xpbmUsICdcXFxcbicpO1xuXG4gIHRyeSB7XG4gICAgdGhpcy5mb3JtLnN1Ym1pdCgpO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIGlmICh0aGlzLmlmcmFtZS5hdHRhY2hFdmVudCkge1xuICAgIHRoaXMuaWZyYW1lLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzZWxmLmlmcmFtZS5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlmcmFtZS5vbmxvYWQgPSBjb21wbGV0ZTtcbiAgfVxufTtcbiIsIi8qIGdsb2JhbCBhdHRhY2hFdmVudCAqL1xuXG4vKipcbiAqIE1vZHVsZSByZXF1aXJlbWVudHMuXG4gKi9cblxudmFyIFhNTEh0dHBSZXF1ZXN0ID0gcmVxdWlyZSgnLi94bWxodHRwcmVxdWVzdCcpO1xudmFyIFBvbGxpbmcgPSByZXF1aXJlKCcuL3BvbGxpbmcnKTtcbnZhciBFbWl0dGVyID0gcmVxdWlyZSgnY29tcG9uZW50LWVtaXR0ZXInKTtcbnZhciBpbmhlcml0ID0gcmVxdWlyZSgnY29tcG9uZW50LWluaGVyaXQnKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ2VuZ2luZS5pby1jbGllbnQ6cG9sbGluZy14aHInKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vZ2xvYmFsVGhpcycpO1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gWEhSO1xubW9kdWxlLmV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG5cbi8qKlxuICogRW1wdHkgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBlbXB0eSAoKSB7fVxuXG4vKipcbiAqIFhIUiBQb2xsaW5nIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFhIUiAob3B0cykge1xuICBQb2xsaW5nLmNhbGwodGhpcywgb3B0cyk7XG4gIHRoaXMucmVxdWVzdFRpbWVvdXQgPSBvcHRzLnJlcXVlc3RUaW1lb3V0O1xuICB0aGlzLmV4dHJhSGVhZGVycyA9IG9wdHMuZXh0cmFIZWFkZXJzO1xuXG4gIGlmICh0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIGlzU1NMID0gJ2h0dHBzOicgPT09IGxvY2F0aW9uLnByb3RvY29sO1xuICAgIHZhciBwb3J0ID0gbG9jYXRpb24ucG9ydDtcblxuICAgIC8vIHNvbWUgdXNlciBhZ2VudHMgaGF2ZSBlbXB0eSBgbG9jYXRpb24ucG9ydGBcbiAgICBpZiAoIXBvcnQpIHtcbiAgICAgIHBvcnQgPSBpc1NTTCA/IDQ0MyA6IDgwO1xuICAgIH1cblxuICAgIHRoaXMueGQgPSAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBvcHRzLmhvc3RuYW1lICE9PSBsb2NhdGlvbi5ob3N0bmFtZSkgfHxcbiAgICAgIHBvcnQgIT09IG9wdHMucG9ydDtcbiAgICB0aGlzLnhzID0gb3B0cy5zZWN1cmUgIT09IGlzU1NMO1xuICB9XG59XG5cbi8qKlxuICogSW5oZXJpdHMgZnJvbSBQb2xsaW5nLlxuICovXG5cbmluaGVyaXQoWEhSLCBQb2xsaW5nKTtcblxuLyoqXG4gKiBYSFIgc3VwcG9ydHMgYmluYXJ5XG4gKi9cblxuWEhSLnByb3RvdHlwZS5zdXBwb3J0c0JpbmFyeSA9IHRydWU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuWEhSLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gKG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIG9wdHMudXJpID0gdGhpcy51cmkoKTtcbiAgb3B0cy54ZCA9IHRoaXMueGQ7XG4gIG9wdHMueHMgPSB0aGlzLnhzO1xuICBvcHRzLmFnZW50ID0gdGhpcy5hZ2VudCB8fCBmYWxzZTtcbiAgb3B0cy5zdXBwb3J0c0JpbmFyeSA9IHRoaXMuc3VwcG9ydHNCaW5hcnk7XG4gIG9wdHMuZW5hYmxlc1hEUiA9IHRoaXMuZW5hYmxlc1hEUjtcbiAgb3B0cy53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFscztcblxuICAvLyBTU0wgb3B0aW9ucyBmb3IgTm9kZS5qcyBjbGllbnRcbiAgb3B0cy5wZnggPSB0aGlzLnBmeDtcbiAgb3B0cy5rZXkgPSB0aGlzLmtleTtcbiAgb3B0cy5wYXNzcGhyYXNlID0gdGhpcy5wYXNzcGhyYXNlO1xuICBvcHRzLmNlcnQgPSB0aGlzLmNlcnQ7XG4gIG9wdHMuY2EgPSB0aGlzLmNhO1xuICBvcHRzLmNpcGhlcnMgPSB0aGlzLmNpcGhlcnM7XG4gIG9wdHMucmVqZWN0VW5hdXRob3JpemVkID0gdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQ7XG4gIG9wdHMucmVxdWVzdFRpbWVvdXQgPSB0aGlzLnJlcXVlc3RUaW1lb3V0O1xuXG4gIC8vIG90aGVyIG9wdGlvbnMgZm9yIE5vZGUuanMgY2xpZW50XG4gIG9wdHMuZXh0cmFIZWFkZXJzID0gdGhpcy5leHRyYUhlYWRlcnM7XG5cbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KG9wdHMpO1xufTtcblxuLyoqXG4gKiBTZW5kcyBkYXRhLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhIHRvIHNlbmQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsZWQgdXBvbiBmbHVzaC5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblhIUi5wcm90b3R5cGUuZG9Xcml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBmbikge1xuICB2YXIgaXNCaW5hcnkgPSB0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycgJiYgZGF0YSAhPT0gdW5kZWZpbmVkO1xuICB2YXIgcmVxID0gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAnUE9TVCcsIGRhdGE6IGRhdGEsIGlzQmluYXJ5OiBpc0JpbmFyeSB9KTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXEub24oJ3N1Y2Nlc3MnLCBmbik7XG4gIHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgc2VsZi5vbkVycm9yKCd4aHIgcG9zdCBlcnJvcicsIGVycik7XG4gIH0pO1xuICB0aGlzLnNlbmRYaHIgPSByZXE7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIHBvbGwgY3ljbGUuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuWEhSLnByb3RvdHlwZS5kb1BvbGwgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCd4aHIgcG9sbCcpO1xuICB2YXIgcmVxID0gdGhpcy5yZXF1ZXN0KCk7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgcmVxLm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBzZWxmLm9uRGF0YShkYXRhKTtcbiAgfSk7XG4gIHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgc2VsZi5vbkVycm9yKCd4aHIgcG9sbCBlcnJvcicsIGVycik7XG4gIH0pO1xuICB0aGlzLnBvbGxYaHIgPSByZXE7XG59O1xuXG4vKipcbiAqIFJlcXVlc3QgY29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBSZXF1ZXN0IChvcHRzKSB7XG4gIHRoaXMubWV0aG9kID0gb3B0cy5tZXRob2QgfHwgJ0dFVCc7XG4gIHRoaXMudXJpID0gb3B0cy51cmk7XG4gIHRoaXMueGQgPSAhIW9wdHMueGQ7XG4gIHRoaXMueHMgPSAhIW9wdHMueHM7XG4gIHRoaXMuYXN5bmMgPSBmYWxzZSAhPT0gb3B0cy5hc3luYztcbiAgdGhpcy5kYXRhID0gdW5kZWZpbmVkICE9PSBvcHRzLmRhdGEgPyBvcHRzLmRhdGEgOiBudWxsO1xuICB0aGlzLmFnZW50ID0gb3B0cy5hZ2VudDtcbiAgdGhpcy5pc0JpbmFyeSA9IG9wdHMuaXNCaW5hcnk7XG4gIHRoaXMuc3VwcG9ydHNCaW5hcnkgPSBvcHRzLnN1cHBvcnRzQmluYXJ5O1xuICB0aGlzLmVuYWJsZXNYRFIgPSBvcHRzLmVuYWJsZXNYRFI7XG4gIHRoaXMud2l0aENyZWRlbnRpYWxzID0gb3B0cy53aXRoQ3JlZGVudGlhbHM7XG4gIHRoaXMucmVxdWVzdFRpbWVvdXQgPSBvcHRzLnJlcXVlc3RUaW1lb3V0O1xuXG4gIC8vIFNTTCBvcHRpb25zIGZvciBOb2RlLmpzIGNsaWVudFxuICB0aGlzLnBmeCA9IG9wdHMucGZ4O1xuICB0aGlzLmtleSA9IG9wdHMua2V5O1xuICB0aGlzLnBhc3NwaHJhc2UgPSBvcHRzLnBhc3NwaHJhc2U7XG4gIHRoaXMuY2VydCA9IG9wdHMuY2VydDtcbiAgdGhpcy5jYSA9IG9wdHMuY2E7XG4gIHRoaXMuY2lwaGVycyA9IG9wdHMuY2lwaGVycztcbiAgdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQgPSBvcHRzLnJlamVjdFVuYXV0aG9yaXplZDtcblxuICAvLyBvdGhlciBvcHRpb25zIGZvciBOb2RlLmpzIGNsaWVudFxuICB0aGlzLmV4dHJhSGVhZGVycyA9IG9wdHMuZXh0cmFIZWFkZXJzO1xuXG4gIHRoaXMuY3JlYXRlKCk7XG59XG5cbi8qKlxuICogTWl4IGluIGBFbWl0dGVyYC5cbiAqL1xuXG5FbWl0dGVyKFJlcXVlc3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBYSFIgb2JqZWN0IGFuZCBzZW5kcyB0aGUgcmVxdWVzdC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRzID0geyBhZ2VudDogdGhpcy5hZ2VudCwgeGRvbWFpbjogdGhpcy54ZCwgeHNjaGVtZTogdGhpcy54cywgZW5hYmxlc1hEUjogdGhpcy5lbmFibGVzWERSIH07XG5cbiAgLy8gU1NMIG9wdGlvbnMgZm9yIE5vZGUuanMgY2xpZW50XG4gIG9wdHMucGZ4ID0gdGhpcy5wZng7XG4gIG9wdHMua2V5ID0gdGhpcy5rZXk7XG4gIG9wdHMucGFzc3BocmFzZSA9IHRoaXMucGFzc3BocmFzZTtcbiAgb3B0cy5jZXJ0ID0gdGhpcy5jZXJ0O1xuICBvcHRzLmNhID0gdGhpcy5jYTtcbiAgb3B0cy5jaXBoZXJzID0gdGhpcy5jaXBoZXJzO1xuICBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA9IHRoaXMucmVqZWN0VW5hdXRob3JpemVkO1xuXG4gIHZhciB4aHIgPSB0aGlzLnhociA9IG5ldyBYTUxIdHRwUmVxdWVzdChvcHRzKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRyeSB7XG4gICAgZGVidWcoJ3hociBvcGVuICVzOiAlcycsIHRoaXMubWV0aG9kLCB0aGlzLnVyaSk7XG4gICAgeGhyLm9wZW4odGhpcy5tZXRob2QsIHRoaXMudXJpLCB0aGlzLmFzeW5jKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZXh0cmFIZWFkZXJzKSB7XG4gICAgICAgIHhoci5zZXREaXNhYmxlSGVhZGVyQ2hlY2sgJiYgeGhyLnNldERpc2FibGVIZWFkZXJDaGVjayh0cnVlKTtcbiAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLmV4dHJhSGVhZGVycykge1xuICAgICAgICAgIGlmICh0aGlzLmV4dHJhSGVhZGVycy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaSwgdGhpcy5leHRyYUhlYWRlcnNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICBpZiAoJ1BPU1QnID09PSB0aGlzLm1ldGhvZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuaXNCaW5hcnkpIHtcbiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnKi8qJyk7XG4gICAgfSBjYXRjaCAoZSkge31cblxuICAgIC8vIGllNiBjaGVja1xuICAgIGlmICgnd2l0aENyZWRlbnRpYWxzJyBpbiB4aHIpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0VGltZW91dCkge1xuICAgICAgeGhyLnRpbWVvdXQgPSB0aGlzLnJlcXVlc3RUaW1lb3V0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc1hEUigpKSB7XG4gICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLm9uTG9hZCgpO1xuICAgICAgfTtcbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLm9uRXJyb3IoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICAgICAgICAgIGlmIChzZWxmLnN1cHBvcnRzQmluYXJ5ICYmIGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTsgY2hhcnNldD1VVEYtOCcpIHtcbiAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuICAgICAgICBpZiAoNCAhPT0geGhyLnJlYWR5U3RhdGUpIHJldHVybjtcbiAgICAgICAgaWYgKDIwMCA9PT0geGhyLnN0YXR1cyB8fCAxMjIzID09PSB4aHIuc3RhdHVzKSB7XG4gICAgICAgICAgc2VsZi5vbkxvYWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGBlcnJvcmAgZXZlbnQgaGFuZGxlciB0aGF0J3MgdXNlci1zZXRcbiAgICAgICAgICAvLyBkb2VzIG5vdCB0aHJvdyBpbiB0aGUgc2FtZSB0aWNrIGFuZCBnZXRzIGNhdWdodCBoZXJlXG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLm9uRXJyb3IodHlwZW9mIHhoci5zdGF0dXMgPT09ICdudW1iZXInID8geGhyLnN0YXR1cyA6IDApO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGRlYnVnKCd4aHIgZGF0YSAlcycsIHRoaXMuZGF0YSk7XG4gICAgeGhyLnNlbmQodGhpcy5kYXRhKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIE5lZWQgdG8gZGVmZXIgc2luY2UgLmNyZWF0ZSgpIGlzIGNhbGxlZCBkaXJlY3RseSBmaHJvbSB0aGUgY29uc3RydWN0b3JcbiAgICAvLyBhbmQgdGh1cyB0aGUgJ2Vycm9yJyBldmVudCBjYW4gb25seSBiZSBvbmx5IGJvdW5kICphZnRlciogdGhpcyBleGNlcHRpb25cbiAgICAvLyBvY2N1cnMuICBUaGVyZWZvcmUsIGFsc28sIHdlIGNhbm5vdCB0aHJvdyBoZXJlIGF0IGFsbC5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYub25FcnJvcihlKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMuaW5kZXggPSBSZXF1ZXN0LnJlcXVlc3RzQ291bnQrKztcbiAgICBSZXF1ZXN0LnJlcXVlc3RzW3RoaXMuaW5kZXhdID0gdGhpcztcbiAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLm9uU3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5lbWl0KCdzdWNjZXNzJyk7XG4gIHRoaXMuY2xlYW51cCgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgd2UgaGF2ZSBkYXRhLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLm9uRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpO1xuICB0aGlzLm9uU3VjY2VzcygpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBlcnJvci5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5vbkVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgdGhpcy5jbGVhbnVwKHRydWUpO1xufTtcblxuLyoqXG4gKiBDbGVhbnMgdXAgaG91c2UuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xlYW51cCA9IGZ1bmN0aW9uIChmcm9tRXJyb3IpIHtcbiAgaWYgKCd1bmRlZmluZWQnID09PSB0eXBlb2YgdGhpcy54aHIgfHwgbnVsbCA9PT0gdGhpcy54aHIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8geG1saHR0cHJlcXVlc3RcbiAgaWYgKHRoaXMuaGFzWERSKCkpIHtcbiAgICB0aGlzLnhoci5vbmxvYWQgPSB0aGlzLnhoci5vbmVycm9yID0gZW1wdHk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7XG4gIH1cblxuICBpZiAoZnJvbUVycm9yKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMueGhyLmFib3J0KCk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGVsZXRlIFJlcXVlc3QucmVxdWVzdHNbdGhpcy5pbmRleF07XG4gIH1cblxuICB0aGlzLnhociA9IG51bGw7XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIGxvYWQuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUub25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZGF0YTtcbiAgdHJ5IHtcbiAgICB2YXIgY29udGVudFR5cGU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnRlbnRUeXBlID0gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0NvbnRlbnQtVHlwZScpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgaWYgKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTsgY2hhcnNldD1VVEYtOCcpIHtcbiAgICAgIGRhdGEgPSB0aGlzLnhoci5yZXNwb25zZSB8fCB0aGlzLnhoci5yZXNwb25zZVRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSB0aGlzLnhoci5yZXNwb25zZVRleHQ7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5vbkVycm9yKGUpO1xuICB9XG4gIGlmIChudWxsICE9IGRhdGEpIHtcbiAgICB0aGlzLm9uRGF0YShkYXRhKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiBpdCBoYXMgWERvbWFpblJlcXVlc3QuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuaGFzWERSID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHlwZW9mIFhEb21haW5SZXF1ZXN0ICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy54cyAmJiB0aGlzLmVuYWJsZXNYRFI7XG59O1xuXG4vKipcbiAqIEFib3J0cyB0aGUgcmVxdWVzdC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNsZWFudXAoKTtcbn07XG5cbi8qKlxuICogQWJvcnRzIHBlbmRpbmcgcmVxdWVzdHMgd2hlbiB1bmxvYWRpbmcgdGhlIHdpbmRvdy4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudFxuICogbWVtb3J5IGxlYWtzIChlLmcuIHdoZW4gdXNpbmcgSUUpIGFuZCB0byBlbnN1cmUgdGhhdCBubyBzcHVyaW91cyBlcnJvciBpc1xuICogZW1pdHRlZC5cbiAqL1xuXG5SZXF1ZXN0LnJlcXVlc3RzQ291bnQgPSAwO1xuUmVxdWVzdC5yZXF1ZXN0cyA9IHt9O1xuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICBpZiAodHlwZW9mIGF0dGFjaEV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkSGFuZGxlcik7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgdGVybWluYXRpb25FdmVudCA9ICdvbnBhZ2VoaWRlJyBpbiBnbG9iYWxUaGlzID8gJ3BhZ2VoaWRlJyA6ICd1bmxvYWQnO1xuICAgIGFkZEV2ZW50TGlzdGVuZXIodGVybWluYXRpb25FdmVudCwgdW5sb2FkSGFuZGxlciwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVubG9hZEhhbmRsZXIgKCkge1xuICBmb3IgKHZhciBpIGluIFJlcXVlc3QucmVxdWVzdHMpIHtcbiAgICBpZiAoUmVxdWVzdC5yZXF1ZXN0cy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgUmVxdWVzdC5yZXF1ZXN0c1tpXS5hYm9ydCgpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBUcmFuc3BvcnQgPSByZXF1aXJlKCcuLi90cmFuc3BvcnQnKTtcbnZhciBwYXJzZXFzID0gcmVxdWlyZSgncGFyc2VxcycpO1xudmFyIHBhcnNlciA9IHJlcXVpcmUoJ2VuZ2luZS5pby1wYXJzZXInKTtcbnZhciBpbmhlcml0ID0gcmVxdWlyZSgnY29tcG9uZW50LWluaGVyaXQnKTtcbnZhciB5ZWFzdCA9IHJlcXVpcmUoJ3llYXN0Jyk7XG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdlbmdpbmUuaW8tY2xpZW50OnBvbGxpbmcnKTtcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvbGxpbmc7XG5cbi8qKlxuICogSXMgWEhSMiBzdXBwb3J0ZWQ/XG4gKi9cblxudmFyIGhhc1hIUjIgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgWE1MSHR0cFJlcXVlc3QgPSByZXF1aXJlKCcuL3htbGh0dHByZXF1ZXN0Jyk7XG4gIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoeyB4ZG9tYWluOiBmYWxzZSB9KTtcbiAgcmV0dXJuIG51bGwgIT0geGhyLnJlc3BvbnNlVHlwZTtcbn0pKCk7XG5cbi8qKlxuICogUG9sbGluZyBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIFBvbGxpbmcgKG9wdHMpIHtcbiAgdmFyIGZvcmNlQmFzZTY0ID0gKG9wdHMgJiYgb3B0cy5mb3JjZUJhc2U2NCk7XG4gIGlmICghaGFzWEhSMiB8fCBmb3JjZUJhc2U2NCkge1xuICAgIHRoaXMuc3VwcG9ydHNCaW5hcnkgPSBmYWxzZTtcbiAgfVxuICBUcmFuc3BvcnQuY2FsbCh0aGlzLCBvcHRzKTtcbn1cblxuLyoqXG4gKiBJbmhlcml0cyBmcm9tIFRyYW5zcG9ydC5cbiAqL1xuXG5pbmhlcml0KFBvbGxpbmcsIFRyYW5zcG9ydCk7XG5cbi8qKlxuICogVHJhbnNwb3J0IG5hbWUuXG4gKi9cblxuUG9sbGluZy5wcm90b3R5cGUubmFtZSA9ICdwb2xsaW5nJztcblxuLyoqXG4gKiBPcGVucyB0aGUgc29ja2V0ICh0cmlnZ2VycyBwb2xsaW5nKS4gV2Ugd3JpdGUgYSBQSU5HIG1lc3NhZ2UgdG8gZGV0ZXJtaW5lXG4gKiB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgb3Blbi5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Qb2xsaW5nLnByb3RvdHlwZS5kb09wZW4gPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucG9sbCgpO1xufTtcblxuLyoqXG4gKiBQYXVzZXMgcG9sbGluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayB1cG9uIGJ1ZmZlcnMgYXJlIGZsdXNoZWQgYW5kIHRyYW5zcG9ydCBpcyBwYXVzZWRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblBvbGxpbmcucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKG9uUGF1c2UpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMucmVhZHlTdGF0ZSA9ICdwYXVzaW5nJztcblxuICBmdW5jdGlvbiBwYXVzZSAoKSB7XG4gICAgZGVidWcoJ3BhdXNlZCcpO1xuICAgIHNlbGYucmVhZHlTdGF0ZSA9ICdwYXVzZWQnO1xuICAgIG9uUGF1c2UoKTtcbiAgfVxuXG4gIGlmICh0aGlzLnBvbGxpbmcgfHwgIXRoaXMud3JpdGFibGUpIHtcbiAgICB2YXIgdG90YWwgPSAwO1xuXG4gICAgaWYgKHRoaXMucG9sbGluZykge1xuICAgICAgZGVidWcoJ3dlIGFyZSBjdXJyZW50bHkgcG9sbGluZyAtIHdhaXRpbmcgdG8gcGF1c2UnKTtcbiAgICAgIHRvdGFsKys7XG4gICAgICB0aGlzLm9uY2UoJ3BvbGxDb21wbGV0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ3ByZS1wYXVzZSBwb2xsaW5nIGNvbXBsZXRlJyk7XG4gICAgICAgIC0tdG90YWwgfHwgcGF1c2UoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53cml0YWJsZSkge1xuICAgICAgZGVidWcoJ3dlIGFyZSBjdXJyZW50bHkgd3JpdGluZyAtIHdhaXRpbmcgdG8gcGF1c2UnKTtcbiAgICAgIHRvdGFsKys7XG4gICAgICB0aGlzLm9uY2UoJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1ZygncHJlLXBhdXNlIHdyaXRpbmcgY29tcGxldGUnKTtcbiAgICAgICAgLS10b3RhbCB8fCBwYXVzZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhdXNlKCk7XG4gIH1cbn07XG5cbi8qKlxuICogU3RhcnRzIHBvbGxpbmcgY3ljbGUuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Qb2xsaW5nLnByb3RvdHlwZS5wb2xsID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygncG9sbGluZycpO1xuICB0aGlzLnBvbGxpbmcgPSB0cnVlO1xuICB0aGlzLmRvUG9sbCgpO1xuICB0aGlzLmVtaXQoJ3BvbGwnKTtcbn07XG5cbi8qKlxuICogT3ZlcmxvYWRzIG9uRGF0YSB0byBkZXRlY3QgcGF5bG9hZHMuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUG9sbGluZy5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBkZWJ1ZygncG9sbGluZyBnb3QgZGF0YSAlcycsIGRhdGEpO1xuICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiAocGFja2V0LCBpbmRleCwgdG90YWwpIHtcbiAgICAvLyBpZiBpdHMgdGhlIGZpcnN0IG1lc3NhZ2Ugd2UgY29uc2lkZXIgdGhlIHRyYW5zcG9ydCBvcGVuXG4gICAgaWYgKCdvcGVuaW5nJyA9PT0gc2VsZi5yZWFkeVN0YXRlICYmIHBhY2tldC50eXBlID09PSAnb3BlbicpIHtcbiAgICAgIHNlbGYub25PcGVuKCk7XG4gICAgfVxuXG4gICAgLy8gaWYgaXRzIGEgY2xvc2UgcGFja2V0LCB3ZSBjbG9zZSB0aGUgb25nb2luZyByZXF1ZXN0c1xuICAgIGlmICgnY2xvc2UnID09PSBwYWNrZXQudHlwZSkge1xuICAgICAgc2VsZi5vbkNsb3NlKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlIGJ5cGFzcyBvbkRhdGEgYW5kIGhhbmRsZSB0aGUgbWVzc2FnZVxuICAgIHNlbGYub25QYWNrZXQocGFja2V0KTtcbiAgfTtcblxuICAvLyBkZWNvZGUgcGF5bG9hZFxuICBwYXJzZXIuZGVjb2RlUGF5bG9hZChkYXRhLCB0aGlzLnNvY2tldC5iaW5hcnlUeXBlLCBjYWxsYmFjayk7XG5cbiAgLy8gaWYgYW4gZXZlbnQgZGlkIG5vdCB0cmlnZ2VyIGNsb3NpbmdcbiAgaWYgKCdjbG9zZWQnICE9PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICAvLyBpZiB3ZSBnb3QgZGF0YSB3ZSdyZSBub3QgcG9sbGluZ1xuICAgIHRoaXMucG9sbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncG9sbENvbXBsZXRlJyk7XG5cbiAgICBpZiAoJ29wZW4nID09PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICAgIHRoaXMucG9sbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZygnaWdub3JpbmcgcG9sbCAtIHRyYW5zcG9ydCBzdGF0ZSBcIiVzXCInLCB0aGlzLnJlYWR5U3RhdGUpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBGb3IgcG9sbGluZywgc2VuZCBhIGNsb3NlIHBhY2tldC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Qb2xsaW5nLnByb3RvdHlwZS5kb0Nsb3NlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gY2xvc2UgKCkge1xuICAgIGRlYnVnKCd3cml0aW5nIGNsb3NlIHBhY2tldCcpO1xuICAgIHNlbGYud3JpdGUoW3sgdHlwZTogJ2Nsb3NlJyB9XSk7XG4gIH1cblxuICBpZiAoJ29wZW4nID09PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICBkZWJ1ZygndHJhbnNwb3J0IG9wZW4gLSBjbG9zaW5nJyk7XG4gICAgY2xvc2UoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpbiBjYXNlIHdlJ3JlIHRyeWluZyB0byBjbG9zZSB3aGlsZVxuICAgIC8vIGhhbmRzaGFraW5nIGlzIGluIHByb2dyZXNzIChHSC0xNjQpXG4gICAgZGVidWcoJ3RyYW5zcG9ydCBub3Qgb3BlbiAtIGRlZmVycmluZyBjbG9zZScpO1xuICAgIHRoaXMub25jZSgnb3BlbicsIGNsb3NlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBwYWNrZXRzIHBheWxvYWQuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBwYWNrZXRzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkcmFpbiBjYWxsYmFja1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUG9sbGluZy5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAocGFja2V0cykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdmFyIGNhbGxiYWNrZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi53cml0YWJsZSA9IHRydWU7XG4gICAgc2VsZi5lbWl0KCdkcmFpbicpO1xuICB9O1xuXG4gIHBhcnNlci5lbmNvZGVQYXlsb2FkKHBhY2tldHMsIHRoaXMuc3VwcG9ydHNCaW5hcnksIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgc2VsZi5kb1dyaXRlKGRhdGEsIGNhbGxiYWNrZm4pO1xuICB9KTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHVyaSBmb3IgY29ubmVjdGlvbi5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Qb2xsaW5nLnByb3RvdHlwZS51cmkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBxdWVyeSA9IHRoaXMucXVlcnkgfHwge307XG4gIHZhciBzY2hlbWEgPSB0aGlzLnNlY3VyZSA/ICdodHRwcycgOiAnaHR0cCc7XG4gIHZhciBwb3J0ID0gJyc7XG5cbiAgLy8gY2FjaGUgYnVzdGluZyBpcyBmb3JjZWRcbiAgaWYgKGZhbHNlICE9PSB0aGlzLnRpbWVzdGFtcFJlcXVlc3RzKSB7XG4gICAgcXVlcnlbdGhpcy50aW1lc3RhbXBQYXJhbV0gPSB5ZWFzdCgpO1xuICB9XG5cbiAgaWYgKCF0aGlzLnN1cHBvcnRzQmluYXJ5ICYmICFxdWVyeS5zaWQpIHtcbiAgICBxdWVyeS5iNjQgPSAxO1xuICB9XG5cbiAgcXVlcnkgPSBwYXJzZXFzLmVuY29kZShxdWVyeSk7XG5cbiAgLy8gYXZvaWQgcG9ydCBpZiBkZWZhdWx0IGZvciBzY2hlbWFcbiAgaWYgKHRoaXMucG9ydCAmJiAoKCdodHRwcycgPT09IHNjaGVtYSAmJiBOdW1iZXIodGhpcy5wb3J0KSAhPT0gNDQzKSB8fFxuICAgICAoJ2h0dHAnID09PSBzY2hlbWEgJiYgTnVtYmVyKHRoaXMucG9ydCkgIT09IDgwKSkpIHtcbiAgICBwb3J0ID0gJzonICsgdGhpcy5wb3J0O1xuICB9XG5cbiAgLy8gcHJlcGVuZCA/IHRvIHF1ZXJ5XG4gIGlmIChxdWVyeS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9ICc/JyArIHF1ZXJ5O1xuICB9XG5cbiAgdmFyIGlwdjYgPSB0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSAhPT0gLTE7XG4gIHJldHVybiBzY2hlbWEgKyAnOi8vJyArIChpcHY2ID8gJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyA6IHRoaXMuaG9zdG5hbWUpICsgcG9ydCArIHRoaXMucGF0aCArIHF1ZXJ5O1xufTtcbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgVHJhbnNwb3J0ID0gcmVxdWlyZSgnLi4vdHJhbnNwb3J0Jyk7XG52YXIgcGFyc2VyID0gcmVxdWlyZSgnZW5naW5lLmlvLXBhcnNlcicpO1xudmFyIHBhcnNlcXMgPSByZXF1aXJlKCdwYXJzZXFzJyk7XG52YXIgaW5oZXJpdCA9IHJlcXVpcmUoJ2NvbXBvbmVudC1pbmhlcml0Jyk7XG52YXIgeWVhc3QgPSByZXF1aXJlKCd5ZWFzdCcpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnZW5naW5lLmlvLWNsaWVudDp3ZWJzb2NrZXQnKTtcblxudmFyIEJyb3dzZXJXZWJTb2NrZXQsIE5vZGVXZWJTb2NrZXQ7XG5cbmlmICh0eXBlb2YgV2ViU29ja2V0ICE9PSAndW5kZWZpbmVkJykge1xuICBCcm93c2VyV2ViU29ja2V0ID0gV2ViU29ja2V0O1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgQnJvd3NlcldlYlNvY2tldCA9IHNlbGYuV2ViU29ja2V0IHx8IHNlbGYuTW96V2ViU29ja2V0O1xufVxuXG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgdHJ5IHtcbiAgICBOb2RlV2ViU29ja2V0ID0gcmVxdWlyZSgnd3MnKTtcbiAgfSBjYXRjaCAoZSkgeyB9XG59XG5cbi8qKlxuICogR2V0IGVpdGhlciB0aGUgYFdlYlNvY2tldGAgb3IgYE1veldlYlNvY2tldGAgZ2xvYmFsc1xuICogaW4gdGhlIGJyb3dzZXIgb3IgdHJ5IHRvIHJlc29sdmUgV2ViU29ja2V0LWNvbXBhdGlibGVcbiAqIGludGVyZmFjZSBleHBvc2VkIGJ5IGB3c2AgZm9yIE5vZGUtbGlrZSBlbnZpcm9ubWVudC5cbiAqL1xuXG52YXIgV2ViU29ja2V0SW1wbCA9IEJyb3dzZXJXZWJTb2NrZXQgfHwgTm9kZVdlYlNvY2tldDtcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdTO1xuXG4vKipcbiAqIFdlYlNvY2tldCB0cmFuc3BvcnQgY29uc3RydWN0b3IuXG4gKlxuICogQGFwaSB7T2JqZWN0fSBjb25uZWN0aW9uIG9wdGlvbnNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gV1MgKG9wdHMpIHtcbiAgdmFyIGZvcmNlQmFzZTY0ID0gKG9wdHMgJiYgb3B0cy5mb3JjZUJhc2U2NCk7XG4gIGlmIChmb3JjZUJhc2U2NCkge1xuICAgIHRoaXMuc3VwcG9ydHNCaW5hcnkgPSBmYWxzZTtcbiAgfVxuICB0aGlzLnBlck1lc3NhZ2VEZWZsYXRlID0gb3B0cy5wZXJNZXNzYWdlRGVmbGF0ZTtcbiAgdGhpcy51c2luZ0Jyb3dzZXJXZWJTb2NrZXQgPSBCcm93c2VyV2ViU29ja2V0ICYmICFvcHRzLmZvcmNlTm9kZTtcbiAgdGhpcy5wcm90b2NvbHMgPSBvcHRzLnByb3RvY29scztcbiAgaWYgKCF0aGlzLnVzaW5nQnJvd3NlcldlYlNvY2tldCkge1xuICAgIFdlYlNvY2tldEltcGwgPSBOb2RlV2ViU29ja2V0O1xuICB9XG4gIFRyYW5zcG9ydC5jYWxsKHRoaXMsIG9wdHMpO1xufVxuXG4vKipcbiAqIEluaGVyaXRzIGZyb20gVHJhbnNwb3J0LlxuICovXG5cbmluaGVyaXQoV1MsIFRyYW5zcG9ydCk7XG5cbi8qKlxuICogVHJhbnNwb3J0IG5hbWUuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5XUy5wcm90b3R5cGUubmFtZSA9ICd3ZWJzb2NrZXQnO1xuXG4vKlxuICogV2ViU29ja2V0cyBzdXBwb3J0IGJpbmFyeVxuICovXG5cbldTLnByb3RvdHlwZS5zdXBwb3J0c0JpbmFyeSA9IHRydWU7XG5cbi8qKlxuICogT3BlbnMgc29ja2V0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbldTLnByb3RvdHlwZS5kb09wZW4gPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5jaGVjaygpKSB7XG4gICAgLy8gbGV0IHByb2JlIHRpbWVvdXRcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdXJpID0gdGhpcy51cmkoKTtcbiAgdmFyIHByb3RvY29scyA9IHRoaXMucHJvdG9jb2xzO1xuXG4gIHZhciBvcHRzID0ge307XG5cbiAgaWYgKCF0aGlzLmlzUmVhY3ROYXRpdmUpIHtcbiAgICBvcHRzLmFnZW50ID0gdGhpcy5hZ2VudDtcbiAgICBvcHRzLnBlck1lc3NhZ2VEZWZsYXRlID0gdGhpcy5wZXJNZXNzYWdlRGVmbGF0ZTtcblxuICAgIC8vIFNTTCBvcHRpb25zIGZvciBOb2RlLmpzIGNsaWVudFxuICAgIG9wdHMucGZ4ID0gdGhpcy5wZng7XG4gICAgb3B0cy5rZXkgPSB0aGlzLmtleTtcbiAgICBvcHRzLnBhc3NwaHJhc2UgPSB0aGlzLnBhc3NwaHJhc2U7XG4gICAgb3B0cy5jZXJ0ID0gdGhpcy5jZXJ0O1xuICAgIG9wdHMuY2EgPSB0aGlzLmNhO1xuICAgIG9wdHMuY2lwaGVycyA9IHRoaXMuY2lwaGVycztcbiAgICBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA9IHRoaXMucmVqZWN0VW5hdXRob3JpemVkO1xuICB9XG5cbiAgaWYgKHRoaXMuZXh0cmFIZWFkZXJzKSB7XG4gICAgb3B0cy5oZWFkZXJzID0gdGhpcy5leHRyYUhlYWRlcnM7XG4gIH1cbiAgaWYgKHRoaXMubG9jYWxBZGRyZXNzKSB7XG4gICAgb3B0cy5sb2NhbEFkZHJlc3MgPSB0aGlzLmxvY2FsQWRkcmVzcztcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy53cyA9XG4gICAgICB0aGlzLnVzaW5nQnJvd3NlcldlYlNvY2tldCAmJiAhdGhpcy5pc1JlYWN0TmF0aXZlXG4gICAgICAgID8gcHJvdG9jb2xzXG4gICAgICAgICAgPyBuZXcgV2ViU29ja2V0SW1wbCh1cmksIHByb3RvY29scylcbiAgICAgICAgICA6IG5ldyBXZWJTb2NrZXRJbXBsKHVyaSlcbiAgICAgICAgOiBuZXcgV2ViU29ja2V0SW1wbCh1cmksIHByb3RvY29scywgb3B0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGlmICh0aGlzLndzLmJpbmFyeVR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc3VwcG9ydHNCaW5hcnkgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICh0aGlzLndzLnN1cHBvcnRzICYmIHRoaXMud3Muc3VwcG9ydHMuYmluYXJ5KSB7XG4gICAgdGhpcy5zdXBwb3J0c0JpbmFyeSA9IHRydWU7XG4gICAgdGhpcy53cy5iaW5hcnlUeXBlID0gJ25vZGVidWZmZXInO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud3MuYmluYXJ5VHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gIH1cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXJzKCk7XG59O1xuXG4vKipcbiAqIEFkZHMgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBzb2NrZXRcbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5XUy5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLndzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLm9uT3BlbigpO1xuICB9O1xuICB0aGlzLndzLm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5vbkNsb3NlKCk7XG4gIH07XG4gIHRoaXMud3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgc2VsZi5vbkRhdGEoZXYuZGF0YSk7XG4gIH07XG4gIHRoaXMud3Mub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgc2VsZi5vbkVycm9yKCd3ZWJzb2NrZXQgZXJyb3InLCBlKTtcbiAgfTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGRhdGEgdG8gc29ja2V0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IG9mIHBhY2tldHMuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5XUy5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAocGFja2V0cykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcblxuICAvLyBlbmNvZGVQYWNrZXQgZWZmaWNpZW50IGFzIGl0IHVzZXMgV1MgZnJhbWluZ1xuICAvLyBubyBuZWVkIGZvciBlbmNvZGVQYXlsb2FkXG4gIHZhciB0b3RhbCA9IHBhY2tldHMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHRvdGFsOyBpIDwgbDsgaSsrKSB7XG4gICAgKGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgICAgIHBhcnNlci5lbmNvZGVQYWNrZXQocGFja2V0LCBzZWxmLnN1cHBvcnRzQmluYXJ5LCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoIXNlbGYudXNpbmdCcm93c2VyV2ViU29ja2V0KSB7XG4gICAgICAgICAgLy8gYWx3YXlzIGNyZWF0ZSBhIG5ldyBvYmplY3QgKEdILTQzNylcbiAgICAgICAgICB2YXIgb3B0cyA9IHt9O1xuICAgICAgICAgIGlmIChwYWNrZXQub3B0aW9ucykge1xuICAgICAgICAgICAgb3B0cy5jb21wcmVzcyA9IHBhY2tldC5vcHRpb25zLmNvbXByZXNzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWxmLnBlck1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgICAgICB2YXIgbGVuID0gJ3N0cmluZycgPT09IHR5cGVvZiBkYXRhID8gQnVmZmVyLmJ5dGVMZW5ndGgoZGF0YSkgOiBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChsZW4gPCBzZWxmLnBlck1lc3NhZ2VEZWZsYXRlLnRocmVzaG9sZCkge1xuICAgICAgICAgICAgICBvcHRzLmNvbXByZXNzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29tZXRpbWVzIHRoZSB3ZWJzb2NrZXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQgYnV0IHRoZSBicm93c2VyIGRpZG4ndFxuICAgICAgICAvLyBoYXZlIGEgY2hhbmNlIG9mIGluZm9ybWluZyB1cyBhYm91dCBpdCB5ZXQsIGluIHRoYXQgY2FzZSBzZW5kIHdpbGxcbiAgICAgICAgLy8gdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc2VsZi51c2luZ0Jyb3dzZXJXZWJTb2NrZXQpIHtcbiAgICAgICAgICAgIC8vIFR5cGVFcnJvciBpcyB0aHJvd24gd2hlbiBwYXNzaW5nIHRoZSBzZWNvbmQgYXJndW1lbnQgb24gU2FmYXJpXG4gICAgICAgICAgICBzZWxmLndzLnNlbmQoZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYud3Muc2VuZChkYXRhLCBvcHRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBkZWJ1Zygnd2Vic29ja2V0IGNsb3NlZCBiZWZvcmUgb25jbG9zZSBldmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLS10b3RhbCB8fCBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KShwYWNrZXRzW2ldKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRvbmUgKCkge1xuICAgIHNlbGYuZW1pdCgnZmx1c2gnKTtcblxuICAgIC8vIGZha2UgZHJhaW5cbiAgICAvLyBkZWZlciB0byBuZXh0IHRpY2sgdG8gYWxsb3cgU29ja2V0IHRvIGNsZWFyIHdyaXRlQnVmZmVyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIHNlbGYuZW1pdCgnZHJhaW4nKTtcbiAgICB9LCAwKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBjbG9zZVxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbldTLnByb3RvdHlwZS5vbkNsb3NlID0gZnVuY3Rpb24gKCkge1xuICBUcmFuc3BvcnQucHJvdG90eXBlLm9uQ2xvc2UuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQ2xvc2VzIHNvY2tldC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5XUy5wcm90b3R5cGUuZG9DbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiB0aGlzLndzICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMud3MuY2xvc2UoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdXJpIGZvciBjb25uZWN0aW9uLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbldTLnByb3RvdHlwZS51cmkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBxdWVyeSA9IHRoaXMucXVlcnkgfHwge307XG4gIHZhciBzY2hlbWEgPSB0aGlzLnNlY3VyZSA/ICd3c3MnIDogJ3dzJztcbiAgdmFyIHBvcnQgPSAnJztcblxuICAvLyBhdm9pZCBwb3J0IGlmIGRlZmF1bHQgZm9yIHNjaGVtYVxuICBpZiAodGhpcy5wb3J0ICYmICgoJ3dzcycgPT09IHNjaGVtYSAmJiBOdW1iZXIodGhpcy5wb3J0KSAhPT0gNDQzKSB8fFxuICAgICgnd3MnID09PSBzY2hlbWEgJiYgTnVtYmVyKHRoaXMucG9ydCkgIT09IDgwKSkpIHtcbiAgICBwb3J0ID0gJzonICsgdGhpcy5wb3J0O1xuICB9XG5cbiAgLy8gYXBwZW5kIHRpbWVzdGFtcCB0byBVUklcbiAgaWYgKHRoaXMudGltZXN0YW1wUmVxdWVzdHMpIHtcbiAgICBxdWVyeVt0aGlzLnRpbWVzdGFtcFBhcmFtXSA9IHllYXN0KCk7XG4gIH1cblxuICAvLyBjb21tdW5pY2F0ZSBiaW5hcnkgc3VwcG9ydCBjYXBhYmlsaXRpZXNcbiAgaWYgKCF0aGlzLnN1cHBvcnRzQmluYXJ5KSB7XG4gICAgcXVlcnkuYjY0ID0gMTtcbiAgfVxuXG4gIHF1ZXJ5ID0gcGFyc2Vxcy5lbmNvZGUocXVlcnkpO1xuXG4gIC8vIHByZXBlbmQgPyB0byBxdWVyeVxuICBpZiAocXVlcnkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSAnPycgKyBxdWVyeTtcbiAgfVxuXG4gIHZhciBpcHY2ID0gdGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgIT09IC0xO1xuICByZXR1cm4gc2NoZW1hICsgJzovLycgKyAoaXB2NiA/ICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScgOiB0aGlzLmhvc3RuYW1lKSArIHBvcnQgKyB0aGlzLnBhdGggKyBxdWVyeTtcbn07XG5cbi8qKlxuICogRmVhdHVyZSBkZXRlY3Rpb24gZm9yIFdlYlNvY2tldC5cbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufSB3aGV0aGVyIHRoaXMgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZS5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuV1MucHJvdG90eXBlLmNoZWNrID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISFXZWJTb2NrZXRJbXBsICYmICEoJ19faW5pdGlhbGl6ZScgaW4gV2ViU29ja2V0SW1wbCAmJiB0aGlzLm5hbWUgPT09IFdTLnByb3RvdHlwZS5uYW1lKTtcbn07XG4iLCIvLyBicm93c2VyIHNoaW0gZm9yIHhtbGh0dHByZXF1ZXN0IG1vZHVsZVxuXG52YXIgaGFzQ09SUyA9IHJlcXVpcmUoJ2hhcy1jb3JzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2dsb2JhbFRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0cykge1xuICB2YXIgeGRvbWFpbiA9IG9wdHMueGRvbWFpbjtcblxuICAvLyBzY2hlbWUgbXVzdCBiZSBzYW1lIHdoZW4gdXNpZ24gWERvbWFpblJlcXVlc3RcbiAgLy8gaHR0cDovL2Jsb2dzLm1zZG4uY29tL2IvaWVpbnRlcm5hbHMvYXJjaGl2ZS8yMDEwLzA1LzEzL3hkb21haW5yZXF1ZXN0LXJlc3RyaWN0aW9ucy1saW1pdGF0aW9ucy1hbmQtd29ya2Fyb3VuZHMuYXNweFxuICB2YXIgeHNjaGVtZSA9IG9wdHMueHNjaGVtZTtcblxuICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmbG93IG9mIG5vdCBzZW5kaW5nIGNvb2tpZSwgdGhlcmVmb3JlIGl0IHNob3VsZCBiZSBkaXNhYmxlZCBhcyBhIGRlZmF1bHQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9BdXRvbWF0dGljL2VuZ2luZS5pby1jbGllbnQvcHVsbC8yMTdcbiAgdmFyIGVuYWJsZXNYRFIgPSBvcHRzLmVuYWJsZXNYRFI7XG5cbiAgLy8gWE1MSHR0cFJlcXVlc3QgY2FuIGJlIGRpc2FibGVkIG9uIElFXG4gIHRyeSB7XG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgJiYgKCF4ZG9tYWluIHx8IGhhc0NPUlMpKSB7XG4gICAgICByZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7IH1cblxuICAvLyBVc2UgWERvbWFpblJlcXVlc3QgZm9yIElFOCBpZiBlbmFibGVzWERSIGlzIHRydWVcbiAgLy8gYmVjYXVzZSBsb2FkaW5nIGJhciBrZWVwcyBmbGFzaGluZyB3aGVuIHVzaW5nIGpzb25wLXBvbGxpbmdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3l1amlvc2FrYS9zb2NrZS5pby1pZTgtbG9hZGluZy1leGFtcGxlXG4gIHRyeSB7XG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgWERvbWFpblJlcXVlc3QgJiYgIXhzY2hlbWUgJiYgZW5hYmxlc1hEUikge1xuICAgICAgcmV0dXJuIG5ldyBYRG9tYWluUmVxdWVzdCgpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkgeyB9XG5cbiAgaWYgKCF4ZG9tYWluKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgZ2xvYmFsVGhpc1tbJ0FjdGl2ZSddLmNvbmNhdCgnT2JqZWN0Jykuam9pbignWCcpXSgnTWljcm9zb2Z0LlhNTEhUVFAnKTtcbiAgICB9IGNhdGNoIChlKSB7IH1cbiAgfVxufTtcbiIsIi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICpcbiAqIEV4cG9zZSBgZGVidWcoKWAgYXMgdGhlIG1vZHVsZS5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RlYnVnJyk7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZVxuICAgICAgICAgICAgICAgJiYgJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZS5zdG9yYWdlXG4gICAgICAgICAgICAgICAgICA/IGNocm9tZS5zdG9yYWdlLmxvY2FsXG4gICAgICAgICAgICAgICAgICA6IGxvY2Fsc3RvcmFnZSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcbiAgJyMwMDAwQ0MnLCAnIzAwMDBGRicsICcjMDAzM0NDJywgJyMwMDMzRkYnLCAnIzAwNjZDQycsICcjMDA2NkZGJywgJyMwMDk5Q0MnLFxuICAnIzAwOTlGRicsICcjMDBDQzAwJywgJyMwMENDMzMnLCAnIzAwQ0M2NicsICcjMDBDQzk5JywgJyMwMENDQ0MnLCAnIzAwQ0NGRicsXG4gICcjMzMwMENDJywgJyMzMzAwRkYnLCAnIzMzMzNDQycsICcjMzMzM0ZGJywgJyMzMzY2Q0MnLCAnIzMzNjZGRicsICcjMzM5OUNDJyxcbiAgJyMzMzk5RkYnLCAnIzMzQ0MwMCcsICcjMzNDQzMzJywgJyMzM0NDNjYnLCAnIzMzQ0M5OScsICcjMzNDQ0NDJywgJyMzM0NDRkYnLFxuICAnIzY2MDBDQycsICcjNjYwMEZGJywgJyM2NjMzQ0MnLCAnIzY2MzNGRicsICcjNjZDQzAwJywgJyM2NkNDMzMnLCAnIzk5MDBDQycsXG4gICcjOTkwMEZGJywgJyM5OTMzQ0MnLCAnIzk5MzNGRicsICcjOTlDQzAwJywgJyM5OUNDMzMnLCAnI0NDMDAwMCcsICcjQ0MwMDMzJyxcbiAgJyNDQzAwNjYnLCAnI0NDMDA5OScsICcjQ0MwMENDJywgJyNDQzAwRkYnLCAnI0NDMzMwMCcsICcjQ0MzMzMzJywgJyNDQzMzNjYnLFxuICAnI0NDMzM5OScsICcjQ0MzM0NDJywgJyNDQzMzRkYnLCAnI0NDNjYwMCcsICcjQ0M2NjMzJywgJyNDQzk5MDAnLCAnI0NDOTkzMycsXG4gICcjQ0NDQzAwJywgJyNDQ0NDMzMnLCAnI0ZGMDAwMCcsICcjRkYwMDMzJywgJyNGRjAwNjYnLCAnI0ZGMDA5OScsICcjRkYwMENDJyxcbiAgJyNGRjAwRkYnLCAnI0ZGMzMwMCcsICcjRkYzMzMzJywgJyNGRjMzNjYnLCAnI0ZGMzM5OScsICcjRkYzM0NDJywgJyNGRjMzRkYnLFxuICAnI0ZGNjYwMCcsICcjRkY2NjMzJywgJyNGRjk5MDAnLCAnI0ZGOTkzMycsICcjRkZDQzAwJywgJyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgLy8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuICAvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuICAvLyBleHBsaWNpdGx5XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiB3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGlzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG4gIC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG4gIHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuICAgIC8vIGlzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcbiAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuICAgIC8vIGlzIGZpcmVmb3ggPj0gdjMxP1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuICAgIC8vIGRvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcbiAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uKHYpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnIubWVzc2FnZTtcbiAgfVxufTtcblxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuICB2YXIgdXNlQ29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cbiAgYXJnc1swXSA9ICh1c2VDb2xvcnMgPyAnJWMnIDogJycpXG4gICAgKyB0aGlzLm5hbWVzcGFjZVxuICAgICsgKHVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKVxuICAgICsgYXJnc1swXVxuICAgICsgKHVzZUNvbG9ycyA/ICclYyAnIDogJyAnKVxuICAgICsgJysnICsgZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG4gIGlmICghdXNlQ29sb3JzKSByZXR1cm47XG5cbiAgdmFyIGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuICBhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKVxuXG4gIC8vIHRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG4gIC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cbiAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0QyA9IDA7XG4gIGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIGlmICgnJSUnID09PSBtYXRjaCkgcmV0dXJuO1xuICAgIGluZGV4Kys7XG4gICAgaWYgKCclYycgPT09IG1hdGNoKSB7XG4gICAgICAvLyB3ZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcbiAgICAgIC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG4gICAgICBsYXN0QyA9IGluZGV4O1xuICAgIH1cbiAgfSk7XG5cbiAgYXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUubG9nKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5sb2dgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgLy8gdGhpcyBoYWNrZXJ5IGlzIHJlcXVpcmVkIGZvciBJRTgvOSwgd2hlcmVcbiAgLy8gdGhlIGBjb25zb2xlLmxvZ2AgZnVuY3Rpb24gZG9lc24ndCBoYXZlICdhcHBseSdcbiAgcmV0dXJuICdvYmplY3QnID09PSB0eXBlb2YgY29uc29sZVxuICAgICYmIGNvbnNvbGUubG9nXG4gICAgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICB0cnkge1xuICAgIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UuZGVidWcgPSBuYW1lc3BhY2VzO1xuICAgIH1cbiAgfSBjYXRjaChlKSB7fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHZhciByO1xuICB0cnkge1xuICAgIHIgPSBleHBvcnRzLnN0b3JhZ2UuZGVidWc7XG4gIH0gY2F0Y2goZSkge31cblxuICAvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG4gIGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuICAgIHIgPSBwcm9jZXNzLmVudi5ERUJVRztcbiAgfVxuXG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIEVuYWJsZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiBgbG9jYWxTdG9yYWdlLmRlYnVnYCBpbml0aWFsbHkuXG4gKi9cblxuZXhwb3J0cy5lbmFibGUobG9hZCgpKTtcblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG4iLCJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqXG4gKiBFeHBvc2UgYGRlYnVnKClgIGFzIHRoZSBtb2R1bGUuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gY3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Z1snZGVmYXVsdCddID0gY3JlYXRlRGVidWc7XG5leHBvcnRzLmNvZXJjZSA9IGNvZXJjZTtcbmV4cG9ydHMuZGlzYWJsZSA9IGRpc2FibGU7XG5leHBvcnRzLmVuYWJsZSA9IGVuYWJsZTtcbmV4cG9ydHMuZW5hYmxlZCA9IGVuYWJsZWQ7XG5leHBvcnRzLmh1bWFuaXplID0gcmVxdWlyZSgnbXMnKTtcblxuLyoqXG4gKiBBY3RpdmUgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKi9cbmV4cG9ydHMuaW5zdGFuY2VzID0gW107XG5cbi8qKlxuICogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG4gKi9cblxuZXhwb3J0cy5uYW1lcyA9IFtdO1xuZXhwb3J0cy5za2lwcyA9IFtdO1xuXG4vKipcbiAqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cbiAqXG4gKiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzID0ge307XG5cbi8qKlxuICogU2VsZWN0IGEgY29sb3IuXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzZWxlY3RDb2xvcihuYW1lc3BhY2UpIHtcbiAgdmFyIGhhc2ggPSAwLCBpO1xuXG4gIGZvciAoaSBpbiBuYW1lc3BhY2UpIHtcbiAgICBoYXNoICA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgbmFtZXNwYWNlLmNoYXJDb2RlQXQoaSk7XG4gICAgaGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGV4cG9ydHMuY29sb3JzLmxlbmd0aF07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuXG4gIHZhciBwcmV2VGltZTtcblxuICBmdW5jdGlvbiBkZWJ1ZygpIHtcbiAgICAvLyBkaXNhYmxlZD9cbiAgICBpZiAoIWRlYnVnLmVuYWJsZWQpIHJldHVybjtcblxuICAgIHZhciBzZWxmID0gZGVidWc7XG5cbiAgICAvLyBzZXQgYGRpZmZgIHRpbWVzdGFtcFxuICAgIHZhciBjdXJyID0gK25ldyBEYXRlKCk7XG4gICAgdmFyIG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcbiAgICBzZWxmLmRpZmYgPSBtcztcbiAgICBzZWxmLnByZXYgPSBwcmV2VGltZTtcbiAgICBzZWxmLmN1cnIgPSBjdXJyO1xuICAgIHByZXZUaW1lID0gY3VycjtcblxuICAgIC8vIHR1cm4gdGhlIGBhcmd1bWVudHNgIGludG8gYSBwcm9wZXIgQXJyYXlcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgYXJnc1swXSA9IGV4cG9ydHMuY29lcmNlKGFyZ3NbMF0pO1xuXG4gICAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgYXJnc1swXSkge1xuICAgICAgLy8gYW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cbiAgICAgIGFyZ3MudW5zaGlmdCgnJU8nKTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgYXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIGZ1bmN0aW9uKG1hdGNoLCBmb3JtYXQpIHtcbiAgICAgIC8vIGlmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcbiAgICAgIGlmIChtYXRjaCA9PT0gJyUlJykgcmV0dXJuIG1hdGNoO1xuICAgICAgaW5kZXgrKztcbiAgICAgIHZhciBmb3JtYXR0ZXIgPSBleHBvcnRzLmZvcm1hdHRlcnNbZm9ybWF0XTtcbiAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZm9ybWF0dGVyKSB7XG4gICAgICAgIHZhciB2YWwgPSBhcmdzW2luZGV4XTtcbiAgICAgICAgbWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG4gICAgICAgIC8vIG5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcbiAgICAgICAgYXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBpbmRleC0tO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuXG4gICAgLy8gYXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcbiAgICBleHBvcnRzLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcblxuICAgIHZhciBsb2dGbiA9IGRlYnVnLmxvZyB8fCBleHBvcnRzLmxvZyB8fCBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuICAgIGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICBkZWJ1Zy5lbmFibGVkID0gZXhwb3J0cy5lbmFibGVkKG5hbWVzcGFjZSk7XG4gIGRlYnVnLnVzZUNvbG9ycyA9IGV4cG9ydHMudXNlQ29sb3JzKCk7XG4gIGRlYnVnLmNvbG9yID0gc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcbiAgZGVidWcuZGVzdHJveSA9IGRlc3Ryb3k7XG5cbiAgLy8gZW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcbiAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBleHBvcnRzLmluaXQpIHtcbiAgICBleHBvcnRzLmluaXQoZGVidWcpO1xuICB9XG5cbiAgZXhwb3J0cy5pbnN0YW5jZXMucHVzaChkZWJ1Zyk7XG5cbiAgcmV0dXJuIGRlYnVnO1xufVxuXG5mdW5jdGlvbiBkZXN0cm95ICgpIHtcbiAgdmFyIGluZGV4ID0gZXhwb3J0cy5pbnN0YW5jZXMuaW5kZXhPZih0aGlzKTtcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIGV4cG9ydHMuaW5zdGFuY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRW5hYmxlcyBhIGRlYnVnIG1vZGUgYnkgbmFtZXNwYWNlcy4gVGhpcyBjYW4gaW5jbHVkZSBtb2Rlc1xuICogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuICBleHBvcnRzLnNhdmUobmFtZXNwYWNlcyk7XG5cbiAgZXhwb3J0cy5uYW1lcyA9IFtdO1xuICBleHBvcnRzLnNraXBzID0gW107XG5cbiAgdmFyIGk7XG4gIHZhciBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG4gIHZhciBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKCFzcGxpdFtpXSkgY29udGludWU7IC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG4gICAgbmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG4gICAgaWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuICAgICAgZXhwb3J0cy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zdWJzdHIoMSkgKyAnJCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwb3J0cy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBleHBvcnRzLmluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpbnN0YW5jZSA9IGV4cG9ydHMuaW5zdGFuY2VzW2ldO1xuICAgIGluc3RhbmNlLmVuYWJsZWQgPSBleHBvcnRzLmVuYWJsZWQoaW5zdGFuY2UubmFtZXNwYWNlKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgZXhwb3J0cy5lbmFibGUoJycpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG4gIGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBpLCBsZW47XG4gIGZvciAoaSA9IDAsIGxlbiA9IGV4cG9ydHMuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoZXhwb3J0cy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGZvciAoaSA9IDAsIGxlbiA9IGV4cG9ydHMubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoZXhwb3J0cy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvZXJjZSBgdmFsYC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSB2YWxcbiAqIEByZXR1cm4ge01peGVkfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuICBpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG4gIHJldHVybiB2YWw7XG59XG4iLCIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWwpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oKD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICBpZiAobXMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtcyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgcmV0dXJuIHBsdXJhbChtcywgZCwgJ2RheScpIHx8XG4gICAgcGx1cmFsKG1zLCBoLCAnaG91cicpIHx8XG4gICAgcGx1cmFsKG1zLCBtLCAnbWludXRlJykgfHxcbiAgICBwbHVyYWwobXMsIHMsICdzZWNvbmQnKSB8fFxuICAgIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBuLCBuYW1lKSB7XG4gIGlmIChtcyA8IG4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG1zIDwgbiAqIDEuNSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKG1zIC8gbikgKyAnICcgKyBuYW1lO1xuICB9XG4gIHJldHVybiBNYXRoLmNlaWwobXMgLyBuKSArICcgJyArIG5hbWUgKyAncyc7XG59XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcbnZhciBoYXNCaW5hcnkgPSByZXF1aXJlKCdoYXMtYmluYXJ5MicpO1xudmFyIHNsaWNlQnVmZmVyID0gcmVxdWlyZSgnYXJyYXlidWZmZXIuc2xpY2UnKTtcbnZhciBhZnRlciA9IHJlcXVpcmUoJ2FmdGVyJyk7XG52YXIgdXRmOCA9IHJlcXVpcmUoJy4vdXRmOCcpO1xuXG52YXIgYmFzZTY0ZW5jb2RlcjtcbmlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gIGJhc2U2NGVuY29kZXIgPSByZXF1aXJlKCdiYXNlNjQtYXJyYXlidWZmZXInKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB3ZSBhcmUgcnVubmluZyBhbiBhbmRyb2lkIGJyb3dzZXIuIFRoYXQgcmVxdWlyZXMgdXMgdG8gdXNlXG4gKiBBcnJheUJ1ZmZlciB3aXRoIHBvbGxpbmcgdHJhbnNwb3J0cy4uLlxuICpcbiAqIGh0dHA6Ly9naGluZGEubmV0L2pwZWctYmxvYi1hamF4LWFuZHJvaWQvXG4gKi9cblxudmFyIGlzQW5kcm9pZCA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIC9BbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuLyoqXG4gKiBDaGVjayBpZiB3ZSBhcmUgcnVubmluZyBpbiBQaGFudG9tSlMuXG4gKiBVcGxvYWRpbmcgYSBCbG9iIHdpdGggUGhhbnRvbUpTIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5LCBhcyByZXBvcnRlZCBoZXJlOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyaXlhL3BoYW50b21qcy9pc3N1ZXMvMTEzOTVcbiAqIEB0eXBlIGJvb2xlYW5cbiAqL1xudmFyIGlzUGhhbnRvbUpTID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL1BoYW50b21KUy9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogV2hlbiB0cnVlLCBhdm9pZHMgdXNpbmcgQmxvYnMgdG8gZW5jb2RlIHBheWxvYWRzLlxuICogQHR5cGUgYm9vbGVhblxuICovXG52YXIgZG9udFNlbmRCbG9icyA9IGlzQW5kcm9pZCB8fCBpc1BoYW50b21KUztcblxuLyoqXG4gKiBDdXJyZW50IHByb3RvY29sIHZlcnNpb24uXG4gKi9cblxuZXhwb3J0cy5wcm90b2NvbCA9IDM7XG5cbi8qKlxuICogUGFja2V0IHR5cGVzLlxuICovXG5cbnZhciBwYWNrZXRzID0gZXhwb3J0cy5wYWNrZXRzID0ge1xuICAgIG9wZW46ICAgICAwICAgIC8vIG5vbi13c1xuICAsIGNsb3NlOiAgICAxICAgIC8vIG5vbi13c1xuICAsIHBpbmc6ICAgICAyXG4gICwgcG9uZzogICAgIDNcbiAgLCBtZXNzYWdlOiAgNFxuICAsIHVwZ3JhZGU6ICA1XG4gICwgbm9vcDogICAgIDZcbn07XG5cbnZhciBwYWNrZXRzbGlzdCA9IGtleXMocGFja2V0cyk7XG5cbi8qKlxuICogUHJlbWFkZSBlcnJvciBwYWNrZXQuXG4gKi9cblxudmFyIGVyciA9IHsgdHlwZTogJ2Vycm9yJywgZGF0YTogJ3BhcnNlciBlcnJvcicgfTtcblxuLyoqXG4gKiBDcmVhdGUgYSBibG9iIGFwaSBldmVuIGZvciBibG9iIGJ1aWxkZXIgd2hlbiB2ZW5kb3IgcHJlZml4ZXMgZXhpc3RcbiAqL1xuXG52YXIgQmxvYiA9IHJlcXVpcmUoJ2Jsb2InKTtcblxuLyoqXG4gKiBFbmNvZGVzIGEgcGFja2V0LlxuICpcbiAqICAgICA8cGFja2V0IHR5cGUgaWQ+IFsgPGRhdGE+IF1cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgICA1aGVsbG8gd29ybGRcbiAqICAgICAzXG4gKiAgICAgNFxuICpcbiAqIEJpbmFyeSBpcyBlbmNvZGVkIGluIGFuIGlkZW50aWNhbCBwcmluY2lwbGVcbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmVuY29kZVBhY2tldCA9IGZ1bmN0aW9uIChwYWNrZXQsIHN1cHBvcnRzQmluYXJ5LCB1dGY4ZW5jb2RlLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIHN1cHBvcnRzQmluYXJ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBzdXBwb3J0c0JpbmFyeTtcbiAgICBzdXBwb3J0c0JpbmFyeSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB1dGY4ZW5jb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSB1dGY4ZW5jb2RlO1xuICAgIHV0ZjhlbmNvZGUgPSBudWxsO1xuICB9XG5cbiAgdmFyIGRhdGEgPSAocGFja2V0LmRhdGEgPT09IHVuZGVmaW5lZClcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogcGFja2V0LmRhdGEuYnVmZmVyIHx8IHBhY2tldC5kYXRhO1xuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBlbmNvZGVBcnJheUJ1ZmZlcihwYWNrZXQsIHN1cHBvcnRzQmluYXJ5LCBjYWxsYmFjayk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIGRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgcmV0dXJuIGVuY29kZUJsb2IocGFja2V0LCBzdXBwb3J0c0JpbmFyeSwgY2FsbGJhY2spO1xuICB9XG5cbiAgLy8gbWlnaHQgYmUgYW4gb2JqZWN0IHdpdGggeyBiYXNlNjQ6IHRydWUsIGRhdGE6IGRhdGFBc0Jhc2U2NFN0cmluZyB9XG4gIGlmIChkYXRhICYmIGRhdGEuYmFzZTY0KSB7XG4gICAgcmV0dXJuIGVuY29kZUJhc2U2NE9iamVjdChwYWNrZXQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFNlbmRpbmcgZGF0YSBhcyBhIHV0Zi04IHN0cmluZ1xuICB2YXIgZW5jb2RlZCA9IHBhY2tldHNbcGFja2V0LnR5cGVdO1xuXG4gIC8vIGRhdGEgZnJhZ21lbnQgaXMgb3B0aW9uYWxcbiAgaWYgKHVuZGVmaW5lZCAhPT0gcGFja2V0LmRhdGEpIHtcbiAgICBlbmNvZGVkICs9IHV0ZjhlbmNvZGUgPyB1dGY4LmVuY29kZShTdHJpbmcocGFja2V0LmRhdGEpLCB7IHN0cmljdDogZmFsc2UgfSkgOiBTdHJpbmcocGFja2V0LmRhdGEpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGxiYWNrKCcnICsgZW5jb2RlZCk7XG5cbn07XG5cbmZ1bmN0aW9uIGVuY29kZUJhc2U2NE9iamVjdChwYWNrZXQsIGNhbGxiYWNrKSB7XG4gIC8vIHBhY2tldCBkYXRhIGlzIGFuIG9iamVjdCB7IGJhc2U2NDogdHJ1ZSwgZGF0YTogZGF0YUFzQmFzZTY0U3RyaW5nIH1cbiAgdmFyIG1lc3NhZ2UgPSAnYicgKyBleHBvcnRzLnBhY2tldHNbcGFja2V0LnR5cGVdICsgcGFja2V0LmRhdGEuZGF0YTtcbiAgcmV0dXJuIGNhbGxiYWNrKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIEVuY29kZSBwYWNrZXQgaGVscGVycyBmb3IgYmluYXJ5IHR5cGVzXG4gKi9cblxuZnVuY3Rpb24gZW5jb2RlQXJyYXlCdWZmZXIocGFja2V0LCBzdXBwb3J0c0JpbmFyeSwgY2FsbGJhY2spIHtcbiAgaWYgKCFzdXBwb3J0c0JpbmFyeSkge1xuICAgIHJldHVybiBleHBvcnRzLmVuY29kZUJhc2U2NFBhY2tldChwYWNrZXQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcGFja2V0LmRhdGE7XG4gIHZhciBjb250ZW50QXJyYXkgPSBuZXcgVWludDhBcnJheShkYXRhKTtcbiAgdmFyIHJlc3VsdEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDEgKyBkYXRhLmJ5dGVMZW5ndGgpO1xuXG4gIHJlc3VsdEJ1ZmZlclswXSA9IHBhY2tldHNbcGFja2V0LnR5cGVdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRlbnRBcnJheS5sZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdEJ1ZmZlcltpKzFdID0gY29udGVudEFycmF5W2ldO1xuICB9XG5cbiAgcmV0dXJuIGNhbGxiYWNrKHJlc3VsdEJ1ZmZlci5idWZmZXIpO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVCbG9iQXNBcnJheUJ1ZmZlcihwYWNrZXQsIHN1cHBvcnRzQmluYXJ5LCBjYWxsYmFjaykge1xuICBpZiAoIXN1cHBvcnRzQmluYXJ5KSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuZW5jb2RlQmFzZTY0UGFja2V0KHBhY2tldCwgY2FsbGJhY2spO1xuICB9XG5cbiAgdmFyIGZyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgZnIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgZXhwb3J0cy5lbmNvZGVQYWNrZXQoeyB0eXBlOiBwYWNrZXQudHlwZSwgZGF0YTogZnIucmVzdWx0IH0sIHN1cHBvcnRzQmluYXJ5LCB0cnVlLCBjYWxsYmFjayk7XG4gIH07XG4gIHJldHVybiBmci5yZWFkQXNBcnJheUJ1ZmZlcihwYWNrZXQuZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUJsb2IocGFja2V0LCBzdXBwb3J0c0JpbmFyeSwgY2FsbGJhY2spIHtcbiAgaWYgKCFzdXBwb3J0c0JpbmFyeSkge1xuICAgIHJldHVybiBleHBvcnRzLmVuY29kZUJhc2U2NFBhY2tldChwYWNrZXQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGlmIChkb250U2VuZEJsb2JzKSB7XG4gICAgcmV0dXJuIGVuY29kZUJsb2JBc0FycmF5QnVmZmVyKHBhY2tldCwgc3VwcG9ydHNCaW5hcnksIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBuZXcgVWludDhBcnJheSgxKTtcbiAgbGVuZ3RoWzBdID0gcGFja2V0c1twYWNrZXQudHlwZV07XG4gIHZhciBibG9iID0gbmV3IEJsb2IoW2xlbmd0aC5idWZmZXIsIHBhY2tldC5kYXRhXSk7XG5cbiAgcmV0dXJuIGNhbGxiYWNrKGJsb2IpO1xufVxuXG4vKipcbiAqIEVuY29kZXMgYSBwYWNrZXQgd2l0aCBiaW5hcnkgZGF0YSBpbiBhIGJhc2U2NCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFja2V0LCBoYXMgYHR5cGVgIGFuZCBgZGF0YWBcbiAqIEByZXR1cm4ge1N0cmluZ30gYmFzZTY0IGVuY29kZWQgbWVzc2FnZVxuICovXG5cbmV4cG9ydHMuZW5jb2RlQmFzZTY0UGFja2V0ID0gZnVuY3Rpb24ocGFja2V0LCBjYWxsYmFjaykge1xuICB2YXIgbWVzc2FnZSA9ICdiJyArIGV4cG9ydHMucGFja2V0c1twYWNrZXQudHlwZV07XG4gIGlmICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgcGFja2V0LmRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgdmFyIGZyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICBmci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBiNjQgPSBmci5yZXN1bHQuc3BsaXQoJywnKVsxXTtcbiAgICAgIGNhbGxiYWNrKG1lc3NhZ2UgKyBiNjQpO1xuICAgIH07XG4gICAgcmV0dXJuIGZyLnJlYWRBc0RhdGFVUkwocGFja2V0LmRhdGEpO1xuICB9XG5cbiAgdmFyIGI2NGRhdGE7XG4gIHRyeSB7XG4gICAgYjY0ZGF0YSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkocGFja2V0LmRhdGEpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGlQaG9uZSBTYWZhcmkgZG9lc24ndCBsZXQgeW91IGFwcGx5IHdpdGggdHlwZWQgYXJyYXlzXG4gICAgdmFyIHR5cGVkID0gbmV3IFVpbnQ4QXJyYXkocGFja2V0LmRhdGEpO1xuICAgIHZhciBiYXNpYyA9IG5ldyBBcnJheSh0eXBlZC5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJhc2ljW2ldID0gdHlwZWRbaV07XG4gICAgfVxuICAgIGI2NGRhdGEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGJhc2ljKTtcbiAgfVxuICBtZXNzYWdlICs9IGJ0b2EoYjY0ZGF0YSk7XG4gIHJldHVybiBjYWxsYmFjayhtZXNzYWdlKTtcbn07XG5cbi8qKlxuICogRGVjb2RlcyBhIHBhY2tldC4gQ2hhbmdlcyBmb3JtYXQgdG8gQmxvYiBpZiByZXF1ZXN0ZWQuXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB3aXRoIGB0eXBlYCBhbmQgYGRhdGFgIChpZiBhbnkpXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmRlY29kZVBhY2tldCA9IGZ1bmN0aW9uIChkYXRhLCBiaW5hcnlUeXBlLCB1dGY4ZGVjb2RlKSB7XG4gIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZXJyO1xuICB9XG4gIC8vIFN0cmluZyBkYXRhXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoZGF0YS5jaGFyQXQoMCkgPT09ICdiJykge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVjb2RlQmFzZTY0UGFja2V0KGRhdGEuc3Vic3RyKDEpLCBiaW5hcnlUeXBlKTtcbiAgICB9XG5cbiAgICBpZiAodXRmOGRlY29kZSkge1xuICAgICAgZGF0YSA9IHRyeURlY29kZShkYXRhKTtcbiAgICAgIGlmIChkYXRhID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgdHlwZSA9IGRhdGEuY2hhckF0KDApO1xuXG4gICAgaWYgKE51bWJlcih0eXBlKSAhPSB0eXBlIHx8ICFwYWNrZXRzbGlzdFt0eXBlXSkge1xuICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBwYWNrZXRzbGlzdFt0eXBlXSwgZGF0YTogZGF0YS5zdWJzdHJpbmcoMSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgdHlwZTogcGFja2V0c2xpc3RbdHlwZV0gfTtcbiAgICB9XG4gIH1cblxuICB2YXIgYXNBcnJheSA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICB2YXIgdHlwZSA9IGFzQXJyYXlbMF07XG4gIHZhciByZXN0ID0gc2xpY2VCdWZmZXIoZGF0YSwgMSk7XG4gIGlmIChCbG9iICYmIGJpbmFyeVR5cGUgPT09ICdibG9iJykge1xuICAgIHJlc3QgPSBuZXcgQmxvYihbcmVzdF0pO1xuICB9XG4gIHJldHVybiB7IHR5cGU6IHBhY2tldHNsaXN0W3R5cGVdLCBkYXRhOiByZXN0IH07XG59O1xuXG5mdW5jdGlvbiB0cnlEZWNvZGUoZGF0YSkge1xuICB0cnkge1xuICAgIGRhdGEgPSB1dGY4LmRlY29kZShkYXRhLCB7IHN0cmljdDogZmFsc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogRGVjb2RlcyBhIHBhY2tldCBlbmNvZGVkIGluIGEgYmFzZTY0IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlNjQgZW5jb2RlZCBtZXNzYWdlXG4gKiBAcmV0dXJuIHtPYmplY3R9IHdpdGggYHR5cGVgIGFuZCBgZGF0YWAgKGlmIGFueSlcbiAqL1xuXG5leHBvcnRzLmRlY29kZUJhc2U2NFBhY2tldCA9IGZ1bmN0aW9uKG1zZywgYmluYXJ5VHlwZSkge1xuICB2YXIgdHlwZSA9IHBhY2tldHNsaXN0W21zZy5jaGFyQXQoMCldO1xuICBpZiAoIWJhc2U2NGVuY29kZXIpIHtcbiAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBkYXRhOiB7IGJhc2U2NDogdHJ1ZSwgZGF0YTogbXNnLnN1YnN0cigxKSB9IH07XG4gIH1cblxuICB2YXIgZGF0YSA9IGJhc2U2NGVuY29kZXIuZGVjb2RlKG1zZy5zdWJzdHIoMSkpO1xuXG4gIGlmIChiaW5hcnlUeXBlID09PSAnYmxvYicgJiYgQmxvYikge1xuICAgIGRhdGEgPSBuZXcgQmxvYihbZGF0YV0pO1xuICB9XG5cbiAgcmV0dXJuIHsgdHlwZTogdHlwZSwgZGF0YTogZGF0YSB9O1xufTtcblxuLyoqXG4gKiBFbmNvZGVzIG11bHRpcGxlIG1lc3NhZ2VzIChwYXlsb2FkKS5cbiAqXG4gKiAgICAgPGxlbmd0aD46ZGF0YVxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgIDExOmhlbGxvIHdvcmxkMjpoaVxuICpcbiAqIElmIGFueSBjb250ZW50cyBhcmUgYmluYXJ5LCB0aGV5IHdpbGwgYmUgZW5jb2RlZCBhcyBiYXNlNjQgc3RyaW5ncy4gQmFzZTY0XG4gKiBlbmNvZGVkIHN0cmluZ3MgYXJlIG1hcmtlZCB3aXRoIGEgYiBiZWZvcmUgdGhlIGxlbmd0aCBzcGVjaWZpZXJcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYWNrZXRzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmVuY29kZVBheWxvYWQgPSBmdW5jdGlvbiAocGFja2V0cywgc3VwcG9ydHNCaW5hcnksIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygc3VwcG9ydHNCaW5hcnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IHN1cHBvcnRzQmluYXJ5O1xuICAgIHN1cHBvcnRzQmluYXJ5ID0gbnVsbDtcbiAgfVxuXG4gIHZhciBpc0JpbmFyeSA9IGhhc0JpbmFyeShwYWNrZXRzKTtcblxuICBpZiAoc3VwcG9ydHNCaW5hcnkgJiYgaXNCaW5hcnkpIHtcbiAgICBpZiAoQmxvYiAmJiAhZG9udFNlbmRCbG9icykge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZW5jb2RlUGF5bG9hZEFzQmxvYihwYWNrZXRzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cG9ydHMuZW5jb2RlUGF5bG9hZEFzQXJyYXlCdWZmZXIocGFja2V0cywgY2FsbGJhY2spO1xuICB9XG5cbiAgaWYgKCFwYWNrZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiBjYWxsYmFjaygnMDonKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldExlbmd0aEhlYWRlcihtZXNzYWdlKSB7XG4gICAgcmV0dXJuIG1lc3NhZ2UubGVuZ3RoICsgJzonICsgbWVzc2FnZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuY29kZU9uZShwYWNrZXQsIGRvbmVDYWxsYmFjaykge1xuICAgIGV4cG9ydHMuZW5jb2RlUGFja2V0KHBhY2tldCwgIWlzQmluYXJ5ID8gZmFsc2UgOiBzdXBwb3J0c0JpbmFyeSwgZmFsc2UsIGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgICAgIGRvbmVDYWxsYmFjayhudWxsLCBzZXRMZW5ndGhIZWFkZXIobWVzc2FnZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgbWFwKHBhY2tldHMsIGVuY29kZU9uZSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKHJlc3VsdHMuam9pbignJykpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQXN5bmMgYXJyYXkgbWFwIHVzaW5nIGFmdGVyXG4gKi9cblxuZnVuY3Rpb24gbWFwKGFyeSwgZWFjaCwgZG9uZSkge1xuICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGFyeS5sZW5ndGgpO1xuICB2YXIgbmV4dCA9IGFmdGVyKGFyeS5sZW5ndGgsIGRvbmUpO1xuXG4gIHZhciBlYWNoV2l0aEluZGV4ID0gZnVuY3Rpb24oaSwgZWwsIGNiKSB7XG4gICAgZWFjaChlbCwgZnVuY3Rpb24oZXJyb3IsIG1zZykge1xuICAgICAgcmVzdWx0W2ldID0gbXNnO1xuICAgICAgY2IoZXJyb3IsIHJlc3VsdCk7XG4gICAgfSk7XG4gIH07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpKyspIHtcbiAgICBlYWNoV2l0aEluZGV4KGksIGFyeVtpXSwgbmV4dCk7XG4gIH1cbn1cblxuLypcbiAqIERlY29kZXMgZGF0YSB3aGVuIGEgcGF5bG9hZCBpcyBtYXliZSBleHBlY3RlZC4gUG9zc2libGUgYmluYXJ5IGNvbnRlbnRzIGFyZVxuICogZGVjb2RlZCBmcm9tIHRoZWlyIGJhc2U2NCByZXByZXNlbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhLCBjYWxsYmFjayBtZXRob2RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5kZWNvZGVQYXlsb2FkID0gZnVuY3Rpb24gKGRhdGEsIGJpbmFyeVR5cGUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5kZWNvZGVQYXlsb2FkQXNCaW5hcnkoZGF0YSwgYmluYXJ5VHlwZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBiaW5hcnlUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBiaW5hcnlUeXBlO1xuICAgIGJpbmFyeVR5cGUgPSBudWxsO1xuICB9XG5cbiAgdmFyIHBhY2tldDtcbiAgaWYgKGRhdGEgPT09ICcnKSB7XG4gICAgLy8gcGFyc2VyIGVycm9yIC0gaWdub3JpbmcgcGF5bG9hZFxuICAgIHJldHVybiBjYWxsYmFjayhlcnIsIDAsIDEpO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9ICcnLCBuLCBtc2c7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBkYXRhLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBjaHIgPSBkYXRhLmNoYXJBdChpKTtcblxuICAgIGlmIChjaHIgIT09ICc6Jykge1xuICAgICAgbGVuZ3RoICs9IGNocjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChsZW5ndGggPT09ICcnIHx8IChsZW5ndGggIT0gKG4gPSBOdW1iZXIobGVuZ3RoKSkpKSB7XG4gICAgICAvLyBwYXJzZXIgZXJyb3IgLSBpZ25vcmluZyBwYXlsb2FkXG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCAwLCAxKTtcbiAgICB9XG5cbiAgICBtc2cgPSBkYXRhLnN1YnN0cihpICsgMSwgbik7XG5cbiAgICBpZiAobGVuZ3RoICE9IG1zZy5sZW5ndGgpIHtcbiAgICAgIC8vIHBhcnNlciBlcnJvciAtIGlnbm9yaW5nIHBheWxvYWRcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIDAsIDEpO1xuICAgIH1cblxuICAgIGlmIChtc2cubGVuZ3RoKSB7XG4gICAgICBwYWNrZXQgPSBleHBvcnRzLmRlY29kZVBhY2tldChtc2csIGJpbmFyeVR5cGUsIGZhbHNlKTtcblxuICAgICAgaWYgKGVyci50eXBlID09PSBwYWNrZXQudHlwZSAmJiBlcnIuZGF0YSA9PT0gcGFja2V0LmRhdGEpIHtcbiAgICAgICAgLy8gcGFyc2VyIGVycm9yIGluIGluZGl2aWR1YWwgcGFja2V0IC0gaWdub3JpbmcgcGF5bG9hZFxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCAwLCAxKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJldCA9IGNhbGxiYWNrKHBhY2tldCwgaSArIG4sIGwpO1xuICAgICAgaWYgKGZhbHNlID09PSByZXQpIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhZHZhbmNlIGN1cnNvclxuICAgIGkgKz0gbjtcbiAgICBsZW5ndGggPSAnJztcbiAgfVxuXG4gIGlmIChsZW5ndGggIT09ICcnKSB7XG4gICAgLy8gcGFyc2VyIGVycm9yIC0gaWdub3JpbmcgcGF5bG9hZFxuICAgIHJldHVybiBjYWxsYmFjayhlcnIsIDAsIDEpO1xuICB9XG5cbn07XG5cbi8qKlxuICogRW5jb2RlcyBtdWx0aXBsZSBtZXNzYWdlcyAocGF5bG9hZCkgYXMgYmluYXJ5LlxuICpcbiAqIDwxID0gYmluYXJ5LCAwID0gc3RyaW5nPjxudW1iZXIgZnJvbSAwLTk+PG51bWJlciBmcm9tIDAtOT5bLi4uXTxudW1iZXJcbiAqIDI1NT48ZGF0YT5cbiAqXG4gKiBFeGFtcGxlOlxuICogMSAzIDI1NSAxIDIgMywgaWYgdGhlIGJpbmFyeSBjb250ZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgOCBiaXQgaW50ZWdlcnNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYWNrZXRzXG4gKiBAcmV0dXJuIHtBcnJheUJ1ZmZlcn0gZW5jb2RlZCBwYXlsb2FkXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmVuY29kZVBheWxvYWRBc0FycmF5QnVmZmVyID0gZnVuY3Rpb24ocGFja2V0cywgY2FsbGJhY2spIHtcbiAgaWYgKCFwYWNrZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgQXJyYXlCdWZmZXIoMCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZW5jb2RlT25lKHBhY2tldCwgZG9uZUNhbGxiYWNrKSB7XG4gICAgZXhwb3J0cy5lbmNvZGVQYWNrZXQocGFja2V0LCB0cnVlLCB0cnVlLCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gZG9uZUNhbGxiYWNrKG51bGwsIGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgbWFwKHBhY2tldHMsIGVuY29kZU9uZSwgZnVuY3Rpb24oZXJyLCBlbmNvZGVkUGFja2V0cykge1xuICAgIHZhciB0b3RhbExlbmd0aCA9IGVuY29kZWRQYWNrZXRzLnJlZHVjZShmdW5jdGlvbihhY2MsIHApIHtcbiAgICAgIHZhciBsZW47XG4gICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKXtcbiAgICAgICAgbGVuID0gcC5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZW4gPSBwLmJ5dGVMZW5ndGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjICsgbGVuLnRvU3RyaW5nKCkubGVuZ3RoICsgbGVuICsgMjsgLy8gc3RyaW5nL2JpbmFyeSBpZGVudGlmaWVyICsgc2VwYXJhdG9yID0gMlxuICAgIH0sIDApO1xuXG4gICAgdmFyIHJlc3VsdEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpO1xuXG4gICAgdmFyIGJ1ZmZlckluZGV4ID0gMDtcbiAgICBlbmNvZGVkUGFja2V0cy5mb3JFYWNoKGZ1bmN0aW9uKHApIHtcbiAgICAgIHZhciBpc1N0cmluZyA9IHR5cGVvZiBwID09PSAnc3RyaW5nJztcbiAgICAgIHZhciBhYiA9IHA7XG4gICAgICBpZiAoaXNTdHJpbmcpIHtcbiAgICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShwLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZpZXdbaV0gPSBwLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgICAgYWIgPSB2aWV3LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU3RyaW5nKSB7IC8vIG5vdCB0cnVlIGJpbmFyeVxuICAgICAgICByZXN1bHRBcnJheVtidWZmZXJJbmRleCsrXSA9IDA7XG4gICAgICB9IGVsc2UgeyAvLyB0cnVlIGJpbmFyeVxuICAgICAgICByZXN1bHRBcnJheVtidWZmZXJJbmRleCsrXSA9IDE7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW5TdHIgPSBhYi5ieXRlTGVuZ3RoLnRvU3RyaW5nKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlblN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHRBcnJheVtidWZmZXJJbmRleCsrXSA9IHBhcnNlSW50KGxlblN0cltpXSk7XG4gICAgICB9XG4gICAgICByZXN1bHRBcnJheVtidWZmZXJJbmRleCsrXSA9IDI1NTtcblxuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShhYik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0QXJyYXlbYnVmZmVySW5kZXgrK10gPSB2aWV3W2ldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKHJlc3VsdEFycmF5LmJ1ZmZlcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBFbmNvZGUgYXMgQmxvYlxuICovXG5cbmV4cG9ydHMuZW5jb2RlUGF5bG9hZEFzQmxvYiA9IGZ1bmN0aW9uKHBhY2tldHMsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIGVuY29kZU9uZShwYWNrZXQsIGRvbmVDYWxsYmFjaykge1xuICAgIGV4cG9ydHMuZW5jb2RlUGFja2V0KHBhY2tldCwgdHJ1ZSwgdHJ1ZSwgZnVuY3Rpb24oZW5jb2RlZCkge1xuICAgICAgdmFyIGJpbmFyeUlkZW50aWZpZXIgPSBuZXcgVWludDhBcnJheSgxKTtcbiAgICAgIGJpbmFyeUlkZW50aWZpZXJbMF0gPSAxO1xuICAgICAgaWYgKHR5cGVvZiBlbmNvZGVkID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWQubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmNvZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmlld1tpXSA9IGVuY29kZWQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICBlbmNvZGVkID0gdmlldy5idWZmZXI7XG4gICAgICAgIGJpbmFyeUlkZW50aWZpZXJbMF0gPSAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGVuID0gKGVuY29kZWQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilcbiAgICAgICAgPyBlbmNvZGVkLmJ5dGVMZW5ndGhcbiAgICAgICAgOiBlbmNvZGVkLnNpemU7XG5cbiAgICAgIHZhciBsZW5TdHIgPSBsZW4udG9TdHJpbmcoKTtcbiAgICAgIHZhciBsZW5ndGhBcnkgPSBuZXcgVWludDhBcnJheShsZW5TdHIubGVuZ3RoICsgMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlblN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZW5ndGhBcnlbaV0gPSBwYXJzZUludChsZW5TdHJbaV0pO1xuICAgICAgfVxuICAgICAgbGVuZ3RoQXJ5W2xlblN0ci5sZW5ndGhdID0gMjU1O1xuXG4gICAgICBpZiAoQmxvYikge1xuICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtiaW5hcnlJZGVudGlmaWVyLmJ1ZmZlciwgbGVuZ3RoQXJ5LmJ1ZmZlciwgZW5jb2RlZF0pO1xuICAgICAgICBkb25lQ2FsbGJhY2sobnVsbCwgYmxvYik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBtYXAocGFja2V0cywgZW5jb2RlT25lLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICByZXR1cm4gY2FsbGJhY2sobmV3IEJsb2IocmVzdWx0cykpO1xuICB9KTtcbn07XG5cbi8qXG4gKiBEZWNvZGVzIGRhdGEgd2hlbiBhIHBheWxvYWQgaXMgbWF5YmUgZXhwZWN0ZWQuIFN0cmluZ3MgYXJlIGRlY29kZWQgYnlcbiAqIGludGVycHJldGluZyBlYWNoIGJ5dGUgYXMgYSBrZXkgY29kZSBmb3IgZW50cmllcyBtYXJrZWQgdG8gc3RhcnQgd2l0aCAwLiBTZWVcbiAqIGRlc2NyaXB0aW9uIG9mIGVuY29kZVBheWxvYWRBc0JpbmFyeVxuICpcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGRhdGEsIGNhbGxiYWNrIG1ldGhvZFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmRlY29kZVBheWxvYWRBc0JpbmFyeSA9IGZ1bmN0aW9uIChkYXRhLCBiaW5hcnlUeXBlLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGJpbmFyeVR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGJpbmFyeVR5cGU7XG4gICAgYmluYXJ5VHlwZSA9IG51bGw7XG4gIH1cblxuICB2YXIgYnVmZmVyVGFpbCA9IGRhdGE7XG4gIHZhciBidWZmZXJzID0gW107XG5cbiAgd2hpbGUgKGJ1ZmZlclRhaWwuYnl0ZUxlbmd0aCA+IDApIHtcbiAgICB2YXIgdGFpbEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyVGFpbCk7XG4gICAgdmFyIGlzU3RyaW5nID0gdGFpbEFycmF5WzBdID09PSAwO1xuICAgIHZhciBtc2dMZW5ndGggPSAnJztcblxuICAgIGZvciAodmFyIGkgPSAxOyA7IGkrKykge1xuICAgICAgaWYgKHRhaWxBcnJheVtpXSA9PT0gMjU1KSBicmVhaztcblxuICAgICAgLy8gMzEwID0gY2hhciBsZW5ndGggb2YgTnVtYmVyLk1BWF9WQUxVRVxuICAgICAgaWYgKG1zZ0xlbmd0aC5sZW5ndGggPiAzMTApIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgMCwgMSk7XG4gICAgICB9XG5cbiAgICAgIG1zZ0xlbmd0aCArPSB0YWlsQXJyYXlbaV07XG4gICAgfVxuXG4gICAgYnVmZmVyVGFpbCA9IHNsaWNlQnVmZmVyKGJ1ZmZlclRhaWwsIDIgKyBtc2dMZW5ndGgubGVuZ3RoKTtcbiAgICBtc2dMZW5ndGggPSBwYXJzZUludChtc2dMZW5ndGgpO1xuXG4gICAgdmFyIG1zZyA9IHNsaWNlQnVmZmVyKGJ1ZmZlclRhaWwsIDAsIG1zZ0xlbmd0aCk7XG4gICAgaWYgKGlzU3RyaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBtc2cgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KG1zZykpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpUGhvbmUgU2FmYXJpIGRvZXNuJ3QgbGV0IHlvdSBhcHBseSB0byB0eXBlZCBhcnJheXNcbiAgICAgICAgdmFyIHR5cGVkID0gbmV3IFVpbnQ4QXJyYXkobXNnKTtcbiAgICAgICAgbXNnID0gJyc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBtc2cgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0eXBlZFtpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBidWZmZXJzLnB1c2gobXNnKTtcbiAgICBidWZmZXJUYWlsID0gc2xpY2VCdWZmZXIoYnVmZmVyVGFpbCwgbXNnTGVuZ3RoKTtcbiAgfVxuXG4gIHZhciB0b3RhbCA9IGJ1ZmZlcnMubGVuZ3RoO1xuICBidWZmZXJzLmZvckVhY2goZnVuY3Rpb24oYnVmZmVyLCBpKSB7XG4gICAgY2FsbGJhY2soZXhwb3J0cy5kZWNvZGVQYWNrZXQoYnVmZmVyLCBiaW5hcnlUeXBlLCB0cnVlKSwgaSwgdG90YWwpO1xuICB9KTtcbn07XG4iLCJcbi8qKlxuICogR2V0cyB0aGUga2V5cyBmb3IgYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm4ge0FycmF5fSBrZXlzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMgKG9iail7XG4gIHZhciBhcnIgPSBbXTtcbiAgdmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbiAgZm9yICh2YXIgaSBpbiBvYmopIHtcbiAgICBpZiAoaGFzLmNhbGwob2JqLCBpKSkge1xuICAgICAgYXJyLnB1c2goaSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnI7XG59O1xuIiwiLyohIGh0dHBzOi8vbXRocy5iZS91dGY4anMgdjIuMS4yIGJ5IEBtYXRoaWFzICovXG5cbnZhciBzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4vLyBUYWtlbiBmcm9tIGh0dHBzOi8vbXRocy5iZS9wdW55Y29kZVxuZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0dmFyIG91dHB1dCA9IFtdO1xuXHR2YXIgY291bnRlciA9IDA7XG5cdHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXHR2YXIgdmFsdWU7XG5cdHZhciBleHRyYTtcblx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0aWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHsgLy8gbG93IHN1cnJvZ2F0ZVxuXHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlIG5leHRcblx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cbi8vIFRha2VuIGZyb20gaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlXG5mdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdHZhciBpbmRleCA9IC0xO1xuXHR2YXIgdmFsdWU7XG5cdHZhciBvdXRwdXQgPSAnJztcblx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcblx0XHR2YWx1ZSA9IGFycmF5W2luZGV4XTtcblx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdHZhbHVlIC09IDB4MTAwMDA7XG5cdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHR9XG5cdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gY2hlY2tTY2FsYXJWYWx1ZShjb2RlUG9pbnQsIHN0cmljdCkge1xuXHRpZiAoY29kZVBvaW50ID49IDB4RDgwMCAmJiBjb2RlUG9pbnQgPD0gMHhERkZGKSB7XG5cdFx0aWYgKHN0cmljdCkge1xuXHRcdFx0dGhyb3cgRXJyb3IoXG5cdFx0XHRcdCdMb25lIHN1cnJvZ2F0ZSBVKycgKyBjb2RlUG9pbnQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgK1xuXHRcdFx0XHQnIGlzIG5vdCBhIHNjYWxhciB2YWx1ZSdcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5mdW5jdGlvbiBjcmVhdGVCeXRlKGNvZGVQb2ludCwgc2hpZnQpIHtcblx0cmV0dXJuIHN0cmluZ0Zyb21DaGFyQ29kZSgoKGNvZGVQb2ludCA+PiBzaGlmdCkgJiAweDNGKSB8IDB4ODApO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVDb2RlUG9pbnQoY29kZVBvaW50LCBzdHJpY3QpIHtcblx0aWYgKChjb2RlUG9pbnQgJiAweEZGRkZGRjgwKSA9PSAwKSB7IC8vIDEtYnl0ZSBzZXF1ZW5jZVxuXHRcdHJldHVybiBzdHJpbmdGcm9tQ2hhckNvZGUoY29kZVBvaW50KTtcblx0fVxuXHR2YXIgc3ltYm9sID0gJyc7XG5cdGlmICgoY29kZVBvaW50ICYgMHhGRkZGRjgwMCkgPT0gMCkgeyAvLyAyLWJ5dGUgc2VxdWVuY2Vcblx0XHRzeW1ib2wgPSBzdHJpbmdGcm9tQ2hhckNvZGUoKChjb2RlUG9pbnQgPj4gNikgJiAweDFGKSB8IDB4QzApO1xuXHR9XG5cdGVsc2UgaWYgKChjb2RlUG9pbnQgJiAweEZGRkYwMDAwKSA9PSAwKSB7IC8vIDMtYnl0ZSBzZXF1ZW5jZVxuXHRcdGlmICghY2hlY2tTY2FsYXJWYWx1ZShjb2RlUG9pbnQsIHN0cmljdCkpIHtcblx0XHRcdGNvZGVQb2ludCA9IDB4RkZGRDtcblx0XHR9XG5cdFx0c3ltYm9sID0gc3RyaW5nRnJvbUNoYXJDb2RlKCgoY29kZVBvaW50ID4+IDEyKSAmIDB4MEYpIHwgMHhFMCk7XG5cdFx0c3ltYm9sICs9IGNyZWF0ZUJ5dGUoY29kZVBvaW50LCA2KTtcblx0fVxuXHRlbHNlIGlmICgoY29kZVBvaW50ICYgMHhGRkUwMDAwMCkgPT0gMCkgeyAvLyA0LWJ5dGUgc2VxdWVuY2Vcblx0XHRzeW1ib2wgPSBzdHJpbmdGcm9tQ2hhckNvZGUoKChjb2RlUG9pbnQgPj4gMTgpICYgMHgwNykgfCAweEYwKTtcblx0XHRzeW1ib2wgKz0gY3JlYXRlQnl0ZShjb2RlUG9pbnQsIDEyKTtcblx0XHRzeW1ib2wgKz0gY3JlYXRlQnl0ZShjb2RlUG9pbnQsIDYpO1xuXHR9XG5cdHN5bWJvbCArPSBzdHJpbmdGcm9tQ2hhckNvZGUoKGNvZGVQb2ludCAmIDB4M0YpIHwgMHg4MCk7XG5cdHJldHVybiBzeW1ib2w7XG59XG5cbmZ1bmN0aW9uIHV0ZjhlbmNvZGUoc3RyaW5nLCBvcHRzKSB7XG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXHR2YXIgc3RyaWN0ID0gZmFsc2UgIT09IG9wdHMuc3RyaWN0O1xuXG5cdHZhciBjb2RlUG9pbnRzID0gdWNzMmRlY29kZShzdHJpbmcpO1xuXHR2YXIgbGVuZ3RoID0gY29kZVBvaW50cy5sZW5ndGg7XG5cdHZhciBpbmRleCA9IC0xO1xuXHR2YXIgY29kZVBvaW50O1xuXHR2YXIgYnl0ZVN0cmluZyA9ICcnO1xuXHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdGNvZGVQb2ludCA9IGNvZGVQb2ludHNbaW5kZXhdO1xuXHRcdGJ5dGVTdHJpbmcgKz0gZW5jb2RlQ29kZVBvaW50KGNvZGVQb2ludCwgc3RyaWN0KTtcblx0fVxuXHRyZXR1cm4gYnl0ZVN0cmluZztcbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmZ1bmN0aW9uIHJlYWRDb250aW51YXRpb25CeXRlKCkge1xuXHRpZiAoYnl0ZUluZGV4ID49IGJ5dGVDb3VudCkge1xuXHRcdHRocm93IEVycm9yKCdJbnZhbGlkIGJ5dGUgaW5kZXgnKTtcblx0fVxuXG5cdHZhciBjb250aW51YXRpb25CeXRlID0gYnl0ZUFycmF5W2J5dGVJbmRleF0gJiAweEZGO1xuXHRieXRlSW5kZXgrKztcblxuXHRpZiAoKGNvbnRpbnVhdGlvbkJ5dGUgJiAweEMwKSA9PSAweDgwKSB7XG5cdFx0cmV0dXJuIGNvbnRpbnVhdGlvbkJ5dGUgJiAweDNGO1xuXHR9XG5cblx0Ly8gSWYgd2UgZW5kIHVwIGhlcmUsIGl04oCZcyBub3QgYSBjb250aW51YXRpb24gYnl0ZVxuXHR0aHJvdyBFcnJvcignSW52YWxpZCBjb250aW51YXRpb24gYnl0ZScpO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVTeW1ib2woc3RyaWN0KSB7XG5cdHZhciBieXRlMTtcblx0dmFyIGJ5dGUyO1xuXHR2YXIgYnl0ZTM7XG5cdHZhciBieXRlNDtcblx0dmFyIGNvZGVQb2ludDtcblxuXHRpZiAoYnl0ZUluZGV4ID4gYnl0ZUNvdW50KSB7XG5cdFx0dGhyb3cgRXJyb3IoJ0ludmFsaWQgYnl0ZSBpbmRleCcpO1xuXHR9XG5cblx0aWYgKGJ5dGVJbmRleCA9PSBieXRlQ291bnQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBSZWFkIGZpcnN0IGJ5dGVcblx0Ynl0ZTEgPSBieXRlQXJyYXlbYnl0ZUluZGV4XSAmIDB4RkY7XG5cdGJ5dGVJbmRleCsrO1xuXG5cdC8vIDEtYnl0ZSBzZXF1ZW5jZSAobm8gY29udGludWF0aW9uIGJ5dGVzKVxuXHRpZiAoKGJ5dGUxICYgMHg4MCkgPT0gMCkge1xuXHRcdHJldHVybiBieXRlMTtcblx0fVxuXG5cdC8vIDItYnl0ZSBzZXF1ZW5jZVxuXHRpZiAoKGJ5dGUxICYgMHhFMCkgPT0gMHhDMCkge1xuXHRcdGJ5dGUyID0gcmVhZENvbnRpbnVhdGlvbkJ5dGUoKTtcblx0XHRjb2RlUG9pbnQgPSAoKGJ5dGUxICYgMHgxRikgPDwgNikgfCBieXRlMjtcblx0XHRpZiAoY29kZVBvaW50ID49IDB4ODApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IEVycm9yKCdJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlJyk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gMy1ieXRlIHNlcXVlbmNlIChtYXkgaW5jbHVkZSB1bnBhaXJlZCBzdXJyb2dhdGVzKVxuXHRpZiAoKGJ5dGUxICYgMHhGMCkgPT0gMHhFMCkge1xuXHRcdGJ5dGUyID0gcmVhZENvbnRpbnVhdGlvbkJ5dGUoKTtcblx0XHRieXRlMyA9IHJlYWRDb250aW51YXRpb25CeXRlKCk7XG5cdFx0Y29kZVBvaW50ID0gKChieXRlMSAmIDB4MEYpIDw8IDEyKSB8IChieXRlMiA8PCA2KSB8IGJ5dGUzO1xuXHRcdGlmIChjb2RlUG9pbnQgPj0gMHgwODAwKSB7XG5cdFx0XHRyZXR1cm4gY2hlY2tTY2FsYXJWYWx1ZShjb2RlUG9pbnQsIHN0cmljdCkgPyBjb2RlUG9pbnQgOiAweEZGRkQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IEVycm9yKCdJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlJyk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gNC1ieXRlIHNlcXVlbmNlXG5cdGlmICgoYnl0ZTEgJiAweEY4KSA9PSAweEYwKSB7XG5cdFx0Ynl0ZTIgPSByZWFkQ29udGludWF0aW9uQnl0ZSgpO1xuXHRcdGJ5dGUzID0gcmVhZENvbnRpbnVhdGlvbkJ5dGUoKTtcblx0XHRieXRlNCA9IHJlYWRDb250aW51YXRpb25CeXRlKCk7XG5cdFx0Y29kZVBvaW50ID0gKChieXRlMSAmIDB4MDcpIDw8IDB4MTIpIHwgKGJ5dGUyIDw8IDB4MEMpIHxcblx0XHRcdChieXRlMyA8PCAweDA2KSB8IGJ5dGU0O1xuXHRcdGlmIChjb2RlUG9pbnQgPj0gMHgwMTAwMDAgJiYgY29kZVBvaW50IDw9IDB4MTBGRkZGKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50O1xuXHRcdH1cblx0fVxuXG5cdHRocm93IEVycm9yKCdJbnZhbGlkIFVURi04IGRldGVjdGVkJyk7XG59XG5cbnZhciBieXRlQXJyYXk7XG52YXIgYnl0ZUNvdW50O1xudmFyIGJ5dGVJbmRleDtcbmZ1bmN0aW9uIHV0ZjhkZWNvZGUoYnl0ZVN0cmluZywgb3B0cykge1xuXHRvcHRzID0gb3B0cyB8fCB7fTtcblx0dmFyIHN0cmljdCA9IGZhbHNlICE9PSBvcHRzLnN0cmljdDtcblxuXHRieXRlQXJyYXkgPSB1Y3MyZGVjb2RlKGJ5dGVTdHJpbmcpO1xuXHRieXRlQ291bnQgPSBieXRlQXJyYXkubGVuZ3RoO1xuXHRieXRlSW5kZXggPSAwO1xuXHR2YXIgY29kZVBvaW50cyA9IFtdO1xuXHR2YXIgdG1wO1xuXHR3aGlsZSAoKHRtcCA9IGRlY29kZVN5bWJvbChzdHJpY3QpKSAhPT0gZmFsc2UpIHtcblx0XHRjb2RlUG9pbnRzLnB1c2godG1wKTtcblx0fVxuXHRyZXR1cm4gdWNzMmVuY29kZShjb2RlUG9pbnRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHZlcnNpb246ICcyLjEuMicsXG5cdGVuY29kZTogdXRmOGVuY29kZSxcblx0ZGVjb2RlOiB1dGY4ZGVjb2RlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7IFtrZXk6IHN0cmluZ106IGFueSB9fSBFeHRlbnNpb25zXG4gKiBAdHlwZWRlZiB7RXJyb3J9IEVyclxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBvYmpcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uc30gcHJvcHNcbiAqIEByZXR1cm5zIHtFcnJvciAmIEV4dGVuc2lvbnN9XG4gKi9cbmZ1bmN0aW9uIGFzc2lnbihvYmosIHByb3BzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHNba2V5XSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7YW55fSBlcnIgLSBBbiBFcnJvclxuICogQHBhcmFtIHtzdHJpbmd8RXh0ZW5zaW9uc30gY29kZSAtIEEgc3RyaW5nIGNvZGUgb3IgcHJvcHMgdG8gc2V0IG9uIHRoZSBlcnJvclxuICogQHBhcmFtIHtFeHRlbnNpb25zfSBbcHJvcHNdIC0gUHJvcHMgdG8gc2V0IG9uIHRoZSBlcnJvclxuICogQHJldHVybnMge0Vycm9yICYgRXh0ZW5zaW9uc31cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXJyb3IoZXJyLCBjb2RlLCBwcm9wcykge1xuICAgIGlmICghZXJyIHx8IHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSBwYXNzIGFuIEVycm9yIHRvIGVyci1jb2RlJyk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcykge1xuICAgICAgICBwcm9wcyA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29kZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcHJvcHMgPSBjb2RlO1xuICAgICAgICBjb2RlID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUpIHtcbiAgICAgICAgcHJvcHMuY29kZSA9IGNvZGU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGFzc2lnbihlcnIsIHByb3BzKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIHByb3BzLm1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgcHJvcHMuc3RhY2sgPSBlcnIuc3RhY2s7XG5cbiAgICAgICAgY29uc3QgRXJyQ2xhc3MgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgICAgICBFcnJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlcnIpKTtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGFzc2lnbihuZXcgRXJyQ2xhc3MoKSwgcHJvcHMpO1xuXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUVycm9yO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gc3RyaW5naWZ5XG5zdHJpbmdpZnkuZGVmYXVsdCA9IHN0cmluZ2lmeVxuc3RyaW5naWZ5LnN0YWJsZSA9IGRldGVybWluaXN0aWNTdHJpbmdpZnlcbnN0cmluZ2lmeS5zdGFibGVTdHJpbmdpZnkgPSBkZXRlcm1pbmlzdGljU3RyaW5naWZ5XG5cbnZhciBMSU1JVF9SRVBMQUNFX05PREUgPSAnWy4uLl0nXG52YXIgQ0lSQ1VMQVJfUkVQTEFDRV9OT0RFID0gJ1tDaXJjdWxhcl0nXG5cbnZhciBhcnIgPSBbXVxudmFyIHJlcGxhY2VyU3RhY2sgPSBbXVxuXG5mdW5jdGlvbiBkZWZhdWx0T3B0aW9ucyAoKSB7XG4gIHJldHVybiB7XG4gICAgZGVwdGhMaW1pdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgZWRnZXNMaW1pdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgfVxufVxuXG4vLyBSZWd1bGFyIHN0cmluZ2lmeVxuZnVuY3Rpb24gc3RyaW5naWZ5IChvYmosIHJlcGxhY2VyLCBzcGFjZXIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucygpXG4gIH1cblxuICBkZWNpcmMob2JqLCAnJywgMCwgW10sIHVuZGVmaW5lZCwgMCwgb3B0aW9ucylcbiAgdmFyIHJlc1xuICB0cnkge1xuICAgIGlmIChyZXBsYWNlclN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzID0gSlNPTi5zdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2VyKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VHZXR0ZXJWYWx1ZXMocmVwbGFjZXIpLCBzcGFjZXIpXG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCdbdW5hYmxlIHRvIHNlcmlhbGl6ZSwgY2lyY3VsYXIgcmVmZXJlbmNlIGlzIHRvbyBjb21wbGV4IHRvIGFuYWx5emVdJylcbiAgfSBmaW5hbGx5IHtcbiAgICB3aGlsZSAoYXJyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdmFyIHBhcnQgPSBhcnIucG9wKClcbiAgICAgIGlmIChwYXJ0Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFydFswXSwgcGFydFsxXSwgcGFydFszXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRbMF1bcGFydFsxXV0gPSBwYXJ0WzJdXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gc2V0UmVwbGFjZSAocmVwbGFjZSwgdmFsLCBrLCBwYXJlbnQpIHtcbiAgdmFyIHByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBrKVxuICBpZiAocHJvcGVydHlEZXNjcmlwdG9yLmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb3BlcnR5RGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGssIHsgdmFsdWU6IHJlcGxhY2UgfSlcbiAgICAgIGFyci5wdXNoKFtwYXJlbnQsIGssIHZhbCwgcHJvcGVydHlEZXNjcmlwdG9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwbGFjZXJTdGFjay5wdXNoKFt2YWwsIGssIHJlcGxhY2VdKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYXJlbnRba10gPSByZXBsYWNlXG4gICAgYXJyLnB1c2goW3BhcmVudCwgaywgdmFsXSlcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNpcmMgKHZhbCwgaywgZWRnZUluZGV4LCBzdGFjaywgcGFyZW50LCBkZXB0aCwgb3B0aW9ucykge1xuICBkZXB0aCArPSAxXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzdGFja1tpXSA9PT0gdmFsKSB7XG4gICAgICAgIHNldFJlcGxhY2UoQ0lSQ1VMQVJfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdGlvbnMuZGVwdGhMaW1pdCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIGRlcHRoID4gb3B0aW9ucy5kZXB0aExpbWl0XG4gICAgKSB7XG4gICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5lZGdlc0xpbWl0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgZWRnZUluZGV4ICsgMSA+IG9wdGlvbnMuZWRnZXNMaW1pdFxuICAgICkge1xuICAgICAgc2V0UmVwbGFjZShMSU1JVF9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWwpXG4gICAgLy8gT3B0aW1pemUgZm9yIEFycmF5cy4gQmlnIGFycmF5cyBjb3VsZCBraWxsIHRoZSBwZXJmb3JtYW5jZSBvdGhlcndpc2UhXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBkZWNpcmModmFsW2ldLCBpLCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpXG4gICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXVxuICAgICAgICBkZWNpcmModmFsW2tleV0sIGtleSwgaSwgc3RhY2ssIHZhbCwgZGVwdGgsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuICAgIHN0YWNrLnBvcCgpXG4gIH1cbn1cblxuLy8gU3RhYmxlLXN0cmluZ2lmeVxuZnVuY3Rpb24gY29tcGFyZUZ1bmN0aW9uIChhLCBiKSB7XG4gIGlmIChhIDwgYikge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChhID4gYikge1xuICAgIHJldHVybiAxXG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5pc3RpY1N0cmluZ2lmeSAob2JqLCByZXBsYWNlciwgc3BhY2VyLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnMoKVxuICB9XG5cbiAgdmFyIHRtcCA9IGRldGVybWluaXN0aWNEZWNpcmMob2JqLCAnJywgMCwgW10sIHVuZGVmaW5lZCwgMCwgb3B0aW9ucykgfHwgb2JqXG4gIHZhciByZXNcbiAgdHJ5IHtcbiAgICBpZiAocmVwbGFjZXJTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlcyA9IEpTT04uc3RyaW5naWZ5KHRtcCwgcmVwbGFjZXIsIHNwYWNlcilcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gSlNPTi5zdHJpbmdpZnkodG1wLCByZXBsYWNlR2V0dGVyVmFsdWVzKHJlcGxhY2VyKSwgc3BhY2VyKVxuICAgIH1cbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSgnW3VuYWJsZSB0byBzZXJpYWxpemUsIGNpcmN1bGFyIHJlZmVyZW5jZSBpcyB0b28gY29tcGxleCB0byBhbmFseXplXScpXG4gIH0gZmluYWxseSB7XG4gICAgLy8gRW5zdXJlIHRoYXQgd2UgcmVzdG9yZSB0aGUgb2JqZWN0IGFzIGl0IHdhcy5cbiAgICB3aGlsZSAoYXJyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdmFyIHBhcnQgPSBhcnIucG9wKClcbiAgICAgIGlmIChwYXJ0Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFydFswXSwgcGFydFsxXSwgcGFydFszXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRbMF1bcGFydFsxXV0gPSBwYXJ0WzJdXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5pc3RpY0RlY2lyYyAodmFsLCBrLCBlZGdlSW5kZXgsIHN0YWNrLCBwYXJlbnQsIGRlcHRoLCBvcHRpb25zKSB7XG4gIGRlcHRoICs9IDFcbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0YWNrW2ldID09PSB2YWwpIHtcbiAgICAgICAgc2V0UmVwbGFjZShDSVJDVUxBUl9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5kZXB0aExpbWl0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgZGVwdGggPiBvcHRpb25zLmRlcHRoTGltaXRcbiAgICApIHtcbiAgICAgIHNldFJlcGxhY2UoTElNSVRfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvcHRpb25zLmVkZ2VzTGltaXQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBlZGdlSW5kZXggKyAxID4gb3B0aW9ucy5lZGdlc0xpbWl0XG4gICAgKSB7XG4gICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbClcbiAgICAvLyBPcHRpbWl6ZSBmb3IgQXJyYXlzLiBCaWcgYXJyYXlzIGNvdWxkIGtpbGwgdGhlIHBlcmZvcm1hbmNlIG90aGVyd2lzZSFcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRldGVybWluaXN0aWNEZWNpcmModmFsW2ldLCBpLCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IG9iamVjdCBpbiB0aGUgcmVxdWlyZWQgd2F5XG4gICAgICB2YXIgdG1wID0ge31cbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsKS5zb3J0KGNvbXBhcmVGdW5jdGlvbilcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldXG4gICAgICAgIGRldGVybWluaXN0aWNEZWNpcmModmFsW2tleV0sIGtleSwgaSwgc3RhY2ssIHZhbCwgZGVwdGgsIG9wdGlvbnMpXG4gICAgICAgIHRtcFtrZXldID0gdmFsW2tleV1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgcGFyZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhcnIucHVzaChbcGFyZW50LCBrLCB2YWxdKVxuICAgICAgICBwYXJlbnRba10gPSB0bXBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0bXBcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhY2sucG9wKClcbiAgfVxufVxuXG4vLyB3cmFwcyByZXBsYWNlciBmdW5jdGlvbiB0byBoYW5kbGUgdmFsdWVzIHdlIGNvdWxkbid0IHJlcGxhY2Vcbi8vIGFuZCBtYXJrIHRoZW0gYXMgcmVwbGFjZWQgdmFsdWVcbmZ1bmN0aW9uIHJlcGxhY2VHZXR0ZXJWYWx1ZXMgKHJlcGxhY2VyKSB7XG4gIHJlcGxhY2VyID1cbiAgICB0eXBlb2YgcmVwbGFjZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICA/IHJlcGxhY2VyXG4gICAgICA6IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgICAgIHJldHVybiB2XG4gICAgICB9XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWwpIHtcbiAgICBpZiAocmVwbGFjZXJTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcGxhY2VyU3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSByZXBsYWNlclN0YWNrW2ldXG4gICAgICAgIGlmIChwYXJ0WzFdID09PSBrZXkgJiYgcGFydFswXSA9PT0gdmFsKSB7XG4gICAgICAgICAgdmFsID0gcGFydFsyXVxuICAgICAgICAgIHJlcGxhY2VyU3RhY2suc3BsaWNlKGksIDEpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbClcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgbm8taW52YWxpZC10aGlzOiAxICovXG5cbnZhciBFUlJPUl9NRVNTQUdFID0gJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgJztcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY1R5cGUgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQodGhhdCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHRvU3RyLmNhbGwodGFyZ2V0KSAhPT0gZnVuY1R5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJPUl9NRVNTQUdFICsgdGFyZ2V0KTtcbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cbiAgICB2YXIgYm91bmQ7XG4gICAgdmFyIGJpbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBib3VuZExlbmd0aCA9IE1hdGgubWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG4gICAgdmFyIGJvdW5kQXJncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICBib3VuZEFyZ3MucHVzaCgnJCcgKyBpKTtcbiAgICB9XG5cbiAgICBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgYm91bmRBcmdzLmpvaW4oJywnKSArICcpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfScpKGJpbmRlcik7XG5cbiAgICBpZiAodGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICB2YXIgRW1wdHkgPSBmdW5jdGlvbiBFbXB0eSgpIHt9O1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYm91bmQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iLCIvLyBvcmlnaW5hbGx5IHB1bGxlZCBvdXQgb2Ygc2ltcGxlLXBlZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRCcm93c2VyUlRDICgpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGxcbiAgdmFyIHdydGMgPSB7XG4gICAgUlRDUGVlckNvbm5lY3Rpb246IGdsb2JhbFRoaXMuUlRDUGVlckNvbm5lY3Rpb24gfHwgZ2xvYmFsVGhpcy5tb3pSVENQZWVyQ29ubmVjdGlvbiB8fFxuICAgICAgZ2xvYmFsVGhpcy53ZWJraXRSVENQZWVyQ29ubmVjdGlvbixcbiAgICBSVENTZXNzaW9uRGVzY3JpcHRpb246IGdsb2JhbFRoaXMuUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHx8XG4gICAgICBnbG9iYWxUaGlzLm1velJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8fCBnbG9iYWxUaGlzLndlYmtpdFJUQ1Nlc3Npb25EZXNjcmlwdGlvbixcbiAgICBSVENJY2VDYW5kaWRhdGU6IGdsb2JhbFRoaXMuUlRDSWNlQ2FuZGlkYXRlIHx8IGdsb2JhbFRoaXMubW96UlRDSWNlQ2FuZGlkYXRlIHx8XG4gICAgICBnbG9iYWxUaGlzLndlYmtpdFJUQ0ljZUNhbmRpZGF0ZVxuICB9XG4gIGlmICghd3J0Yy5SVENQZWVyQ29ubmVjdGlvbikgcmV0dXJuIG51bGxcbiAgcmV0dXJuIHdydGNcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG52YXIgaGFzUHJvdG8gPSByZXF1aXJlKCdoYXMtcHJvdG8nKSgpO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgKFxuXHRoYXNQcm90b1xuXHRcdD8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguX19wcm90b19fOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblx0XHQ6IG51bGxcbik7XG5cbnZhciBuZWVkc0V2YWwgPSB7fTtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHQnJUFnZ3JlZ2F0ZUVycm9yJSc6IHR5cGVvZiBBZ2dyZWdhdGVFcnJvciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBZ2dyZWdhdGVFcnJvcixcblx0JyVBcnJheSUnOiBBcnJheSxcblx0JyVBcnJheUJ1ZmZlciUnOiB0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXJyYXlCdWZmZXIsXG5cdCclQXJyYXlJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzICYmIGdldFByb3RvID8gZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IG5lZWRzRXZhbCxcblx0JyVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCclQmlnSW50JSc6IHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50LFxuXHQnJUJpZ0ludDY0QXJyYXklJzogdHlwZW9mIEJpZ0ludDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50NjRBcnJheSxcblx0JyVCaWdVaW50NjRBcnJheSUnOiB0eXBlb2YgQmlnVWludDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnVWludDY0QXJyYXksXG5cdCclQm9vbGVhbiUnOiBCb29sZWFuLFxuXHQnJURhdGFWaWV3JSc6IHR5cGVvZiBEYXRhVmlldyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBEYXRhVmlldyxcblx0JyVEYXRlJSc6IERhdGUsXG5cdCclZGVjb2RlVVJJJSc6IGRlY29kZVVSSSxcblx0JyVkZWNvZGVVUklDb21wb25lbnQlJzogZGVjb2RlVVJJQ29tcG9uZW50LFxuXHQnJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCclZW5jb2RlVVJJQ29tcG9uZW50JSc6IGVuY29kZVVSSUNvbXBvbmVudCxcblx0JyVFcnJvciUnOiBFcnJvcixcblx0JyVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJUV2YWxFcnJvciUnOiBFdmFsRXJyb3IsXG5cdCclRmxvYXQzMkFycmF5JSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LFxuXHQnJUZsb2F0NjRBcnJheSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheSxcblx0JyVGaW5hbGl6YXRpb25SZWdpc3RyeSUnOiB0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmluYWxpemF0aW9uUmVnaXN0cnksXG5cdCclRnVuY3Rpb24lJzogJEZ1bmN0aW9uLFxuXHQnJUdlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVJbnQ4QXJyYXklJzogdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQ4QXJyYXksXG5cdCclSW50MTZBcnJheSUnOiB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQxNkFycmF5LFxuXHQnJUludDMyQXJyYXklJzogdHlwZW9mIEludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MzJBcnJheSxcblx0JyVpc0Zpbml0ZSUnOiBpc0Zpbml0ZSxcblx0JyVpc05hTiUnOiBpc05hTixcblx0JyVJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzICYmIGdldFByb3RvID8gZ2V0UHJvdG8oZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSkgOiB1bmRlZmluZWQsXG5cdCclSlNPTiUnOiB0eXBlb2YgSlNPTiA9PT0gJ29iamVjdCcgPyBKU09OIDogdW5kZWZpbmVkLFxuXHQnJU1hcCUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcCxcblx0JyVNYXBJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyB8fCAhZ2V0UHJvdG8gPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVNYXRoJSc6IE1hdGgsXG5cdCclTnVtYmVyJSc6IE51bWJlcixcblx0JyVPYmplY3QlJzogT2JqZWN0LFxuXHQnJXBhcnNlRmxvYXQlJzogcGFyc2VGbG9hdCxcblx0JyVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyVQcm9taXNlJSc6IHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb21pc2UsXG5cdCclUHJveHklJzogdHlwZW9mIFByb3h5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb3h5LFxuXHQnJVJhbmdlRXJyb3IlJzogUmFuZ2VFcnJvcixcblx0JyVSZWZlcmVuY2VFcnJvciUnOiBSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbmlmIChnZXRQcm90bykge1xuXHR0cnkge1xuXHRcdG51bGwuZXJyb3I7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zaGFkb3dyZWFsbS9wdWxsLzM4NCNpc3N1ZWNvbW1lbnQtMTM2NDI2NDIyOVxuXHRcdHZhciBlcnJvclByb3RvID0gZ2V0UHJvdG8oZ2V0UHJvdG8oZSkpO1xuXHRcdElOVFJJTlNJQ1NbJyVFcnJvci5wcm90b3R5cGUlJ10gPSBlcnJvclByb3RvO1xuXHR9XG59XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4gJiYgZ2V0UHJvdG8pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG52YXIgJGV4ZWMgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgUmVnRXhwLnByb3RvdHlwZS5leGVjKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgZmlyc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAwLCAxKTtcblx0dmFyIGxhc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAtMSk7XG5cdGlmIChmaXJzdCA9PT0gJyUnICYmIGxhc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAnKTtcblx0fSBlbHNlIGlmIChsYXN0ID09PSAnJScgJiYgZmlyc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gbmVlZHNFdmFsKSB7XG5cdFx0XHR2YWx1ZSA9IGRvRXZhbChpbnRyaW5zaWNOYW1lKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdG5hbWU6IGludHJpbnNpY05hbWUsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG5cblx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVvZiBhbGxvd01pc3NpbmcgIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHRpZiAoJGV4ZWMoL14lP1teJV0qJT8kLywgbmFtZSkgPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lJyk7XG5cdH1cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iLCJ2YXIgdG9wTGV2ZWwgPSB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fVxudmFyIG1pbkRvYyA9IHJlcXVpcmUoJ21pbi1kb2N1bWVudCcpO1xuXG52YXIgZG9jY3k7XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZG9jY3kgPSBkb2N1bWVudDtcbn0gZWxzZSB7XG4gICAgZG9jY3kgPSB0b3BMZXZlbFsnX19HTE9CQUxfRE9DVU1FTlRfQ0FDSEVANCddO1xuXG4gICAgaWYgKCFkb2NjeSkge1xuICAgICAgICBkb2NjeSA9IHRvcExldmVsWydfX0dMT0JBTF9ET0NVTUVOVF9DQUNIRUA0J10gPSBtaW5Eb2M7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvY2N5O1xuIiwidmFyIHdpbjtcblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB3aW4gPSB3aW5kb3c7XG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB3aW4gPSBnbG9iYWw7XG59IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKXtcbiAgICB3aW4gPSBzZWxmO1xufSBlbHNlIHtcbiAgICB3aW4gPSB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aW47XG4iLCIvKiBnbG9iYWwgQmxvYiBGaWxlICovXG5cbi8qXG4gKiBNb2R1bGUgcmVxdWlyZW1lbnRzLlxuICovXG5cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIHdpdGhOYXRpdmVCbG9iID0gdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiB0b1N0cmluZy5jYWxsKEJsb2IpID09PSAnW29iamVjdCBCbG9iQ29uc3RydWN0b3JdJztcbnZhciB3aXRoTmF0aXZlRmlsZSA9IHR5cGVvZiBGaWxlID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgRmlsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdG9TdHJpbmcuY2FsbChGaWxlKSA9PT0gJ1tvYmplY3QgRmlsZUNvbnN0cnVjdG9yXSc7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNCaW5hcnk7XG5cbi8qKlxuICogQ2hlY2tzIGZvciBiaW5hcnkgZGF0YS5cbiAqXG4gKiBTdXBwb3J0cyBCdWZmZXIsIEFycmF5QnVmZmVyLCBCbG9iIGFuZCBGaWxlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhbnl0aGluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBoYXNCaW5hcnkgKG9iaikge1xuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChoYXNCaW5hcnkob2JqW2ldKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCh0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIEJ1ZmZlci5pc0J1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIob2JqKSkgfHxcbiAgICAodHlwZW9mIEFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nICYmIG9iaiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fFxuICAgICh3aXRoTmF0aXZlQmxvYiAmJiBvYmogaW5zdGFuY2VvZiBCbG9iKSB8fFxuICAgICh3aXRoTmF0aXZlRmlsZSAmJiBvYmogaW5zdGFuY2VvZiBGaWxlKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL0F1dG9tYXR0aWMvaGFzLWJpbmFyeS9wdWxsLzRcbiAgaWYgKG9iai50b0pTT04gJiYgdHlwZW9mIG9iai50b0pTT04gPT09ICdmdW5jdGlvbicgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBoYXNCaW5hcnkob2JqLnRvSlNPTigpLCB0cnVlKTtcbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSAmJiBoYXNCaW5hcnkob2JqW2tleV0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIlxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqXG4gKiBMb2dpYyBib3Jyb3dlZCBmcm9tIE1vZGVybml6cjpcbiAqXG4gKiAgIC0gaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2NvcnMuanNcbiAqL1xuXG50cnkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAnd2l0aENyZWRlbnRpYWxzJyBpbiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbn0gY2F0Y2ggKGVycikge1xuICAvLyBpZiBYTUxIdHRwIHN1cHBvcnQgaXMgZGlzYWJsZWQgaW4gSUUgdGhlbiBpdCB3aWxsIHRocm93XG4gIC8vIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdGVzdCA9IHtcblx0Zm9vOiB7fVxufTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzUHJvdG8oKSB7XG5cdHJldHVybiB7IF9fcHJvdG9fXzogdGVzdCB9LmZvbyA9PT0gdGVzdC5mb28gJiYgISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgJE9iamVjdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb3JpZ1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbDtcbnZhciBoYXNTeW1ib2xTaGFtID0gcmVxdWlyZSgnLi9zaGFtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBoYXNTeW1ib2xTaGFtKCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgY29tcGxleGl0eTogWzIsIDE4XSwgbWF4LXN0YXRlbWVudHM6IFsyLCAzM10gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJykgeyByZXR1cm4gdHJ1ZTsgfVxuXG5cdHZhciBvYmogPSB7fTtcblx0dmFyIHN5bSA9IFN5bWJvbCgndGVzdCcpO1xuXHR2YXIgc3ltT2JqID0gT2JqZWN0KHN5bSk7XG5cdGlmICh0eXBlb2Ygc3ltID09PSAnc3RyaW5nJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bU9iaikgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvb2JqZWN0LmFzc2lnbi9pc3N1ZXMvMTdcblx0Ly8gaWYgKHN5bSBpbnN0YW5jZW9mIFN5bWJvbCkgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzL2lzc3Vlcy80XG5cdC8vIGlmICghKHN5bU9iaiBpbnN0YW5jZW9mIFN5bWJvbCkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gaWYgKHR5cGVvZiBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyBpZiAoU3RyaW5nKHN5bSkgIT09IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1WYWwgPSA0Mjtcblx0b2JqW3N5bV0gPSBzeW1WYWw7XG5cdGZvciAoc3ltIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tdW5yZWFjaGFibGUtbG9vcFxuXHRpZiAodHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaik7XG5cdGlmIChzeW1zLmxlbmd0aCAhPT0gMSB8fCBzeW1zWzBdICE9PSBzeW0pIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSk7XG5cdFx0aWYgKGRlc2NyaXB0b3IudmFsdWUgIT09IHN5bVZhbCB8fCBkZXNjcmlwdG9yLmVudW1lcmFibGUgIT09IHRydWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gYXR0cmlidXRlVG9Qcm9wZXJ0eVxuXG52YXIgdHJhbnNmb3JtID0ge1xuICAnY2xhc3MnOiAnY2xhc3NOYW1lJyxcbiAgJ2Zvcic6ICdodG1sRm9yJyxcbiAgJ2h0dHAtZXF1aXYnOiAnaHR0cEVxdWl2J1xufVxuXG5mdW5jdGlvbiBhdHRyaWJ1dGVUb1Byb3BlcnR5IChoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFnTmFtZSwgYXR0cnMsIGNoaWxkcmVuKSB7XG4gICAgZm9yICh2YXIgYXR0ciBpbiBhdHRycykge1xuICAgICAgaWYgKGF0dHIgaW4gdHJhbnNmb3JtKSB7XG4gICAgICAgIGF0dHJzW3RyYW5zZm9ybVthdHRyXV0gPSBhdHRyc1thdHRyXVxuICAgICAgICBkZWxldGUgYXR0cnNbYXR0cl1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGgodGFnTmFtZSwgYXR0cnMsIGNoaWxkcmVuKVxuICB9XG59XG4iLCJ2YXIgYXR0clRvUHJvcCA9IHJlcXVpcmUoJ2h5cGVyc2NyaXB0LWF0dHJpYnV0ZS10by1wcm9wZXJ0eScpXG5cbnZhciBWQVIgPSAwLCBURVhUID0gMSwgT1BFTiA9IDIsIENMT1NFID0gMywgQVRUUiA9IDRcbnZhciBBVFRSX0tFWSA9IDUsIEFUVFJfS0VZX1cgPSA2XG52YXIgQVRUUl9WQUxVRV9XID0gNywgQVRUUl9WQUxVRSA9IDhcbnZhciBBVFRSX1ZBTFVFX1NRID0gOSwgQVRUUl9WQUxVRV9EUSA9IDEwXG52YXIgQVRUUl9FUSA9IDExLCBBVFRSX0JSRUFLID0gMTJcbnZhciBDT01NRU5UID0gMTNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICB2YXIgY29uY2F0ID0gb3B0cy5jb25jYXQgfHwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpICsgU3RyaW5nKGIpXG4gIH1cbiAgaWYgKG9wdHMuYXR0clRvUHJvcCAhPT0gZmFsc2UpIHtcbiAgICBoID0gYXR0clRvUHJvcChoKVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmdzKSB7XG4gICAgdmFyIHN0YXRlID0gVEVYVCwgcmVnID0gJydcbiAgICB2YXIgYXJnbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgIHZhciBwYXJ0cyA9IFtdXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpIDwgYXJnbGVuIC0gMSkge1xuICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2krMV1cbiAgICAgICAgdmFyIHAgPSBwYXJzZShzdHJpbmdzW2ldKVxuICAgICAgICB2YXIgeHN0YXRlID0gc3RhdGVcbiAgICAgICAgaWYgKHhzdGF0ZSA9PT0gQVRUUl9WQUxVRV9EUSkgeHN0YXRlID0gQVRUUl9WQUxVRVxuICAgICAgICBpZiAoeHN0YXRlID09PSBBVFRSX1ZBTFVFX1NRKSB4c3RhdGUgPSBBVFRSX1ZBTFVFXG4gICAgICAgIGlmICh4c3RhdGUgPT09IEFUVFJfVkFMVUVfVykgeHN0YXRlID0gQVRUUl9WQUxVRVxuICAgICAgICBpZiAoeHN0YXRlID09PSBBVFRSKSB4c3RhdGUgPSBBVFRSX0tFWVxuICAgICAgICBpZiAoeHN0YXRlID09PSBPUEVOKSB7XG4gICAgICAgICAgaWYgKHJlZyA9PT0gJy8nKSB7XG4gICAgICAgICAgICBwLnB1c2goWyBPUEVOLCAnLycsIGFyZyBdKVxuICAgICAgICAgICAgcmVnID0gJydcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcC5wdXNoKFsgT1BFTiwgYXJnIF0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHhzdGF0ZSA9PT0gQ09NTUVOVCAmJiBvcHRzLmNvbW1lbnRzKSB7XG4gICAgICAgICAgcmVnICs9IFN0cmluZyhhcmcpXG4gICAgICAgIH0gZWxzZSBpZiAoeHN0YXRlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgcC5wdXNoKFsgVkFSLCB4c3RhdGUsIGFyZyBdKVxuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2guYXBwbHkocGFydHMsIHApXG4gICAgICB9IGVsc2UgcGFydHMucHVzaC5hcHBseShwYXJ0cywgcGFyc2Uoc3RyaW5nc1tpXSkpXG4gICAgfVxuXG4gICAgdmFyIHRyZWUgPSBbbnVsbCx7fSxbXV1cbiAgICB2YXIgc3RhY2sgPSBbW3RyZWUsLTFdXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjdXIgPSBzdGFja1tzdGFjay5sZW5ndGgtMV1bMF1cbiAgICAgIHZhciBwID0gcGFydHNbaV0sIHMgPSBwWzBdXG4gICAgICBpZiAocyA9PT0gT1BFTiAmJiAvXlxcLy8udGVzdChwWzFdKSkge1xuICAgICAgICB2YXIgaXggPSBzdGFja1tzdGFjay5sZW5ndGgtMV1bMV1cbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBzdGFjay5wb3AoKVxuICAgICAgICAgIHN0YWNrW3N0YWNrLmxlbmd0aC0xXVswXVsyXVtpeF0gPSBoKFxuICAgICAgICAgICAgY3VyWzBdLCBjdXJbMV0sIGN1clsyXS5sZW5ndGggPyBjdXJbMl0gOiB1bmRlZmluZWRcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocyA9PT0gT1BFTikge1xuICAgICAgICB2YXIgYyA9IFtwWzFdLHt9LFtdXVxuICAgICAgICBjdXJbMl0ucHVzaChjKVxuICAgICAgICBzdGFjay5wdXNoKFtjLGN1clsyXS5sZW5ndGgtMV0pXG4gICAgICB9IGVsc2UgaWYgKHMgPT09IEFUVFJfS0VZIHx8IChzID09PSBWQVIgJiYgcFsxXSA9PT0gQVRUUl9LRVkpKSB7XG4gICAgICAgIHZhciBrZXkgPSAnJ1xuICAgICAgICB2YXIgY29weUtleVxuICAgICAgICBmb3IgKDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHBhcnRzW2ldWzBdID09PSBBVFRSX0tFWSkge1xuICAgICAgICAgICAga2V5ID0gY29uY2F0KGtleSwgcGFydHNbaV1bMV0pXG4gICAgICAgICAgfSBlbHNlIGlmIChwYXJ0c1tpXVswXSA9PT0gVkFSICYmIHBhcnRzW2ldWzFdID09PSBBVFRSX0tFWSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0c1tpXVsyXSA9PT0gJ29iamVjdCcgJiYgIWtleSkge1xuICAgICAgICAgICAgICBmb3IgKGNvcHlLZXkgaW4gcGFydHNbaV1bMl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFydHNbaV1bMl0uaGFzT3duUHJvcGVydHkoY29weUtleSkgJiYgIWN1clsxXVtjb3B5S2V5XSkge1xuICAgICAgICAgICAgICAgICAgY3VyWzFdW2NvcHlLZXldID0gcGFydHNbaV1bMl1bY29weUtleV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGtleSA9IGNvbmNhdChrZXksIHBhcnRzW2ldWzJdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0c1tpXVswXSA9PT0gQVRUUl9FUSkgaSsrXG4gICAgICAgIHZhciBqID0gaVxuICAgICAgICBmb3IgKDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHBhcnRzW2ldWzBdID09PSBBVFRSX1ZBTFVFIHx8IHBhcnRzW2ldWzBdID09PSBBVFRSX0tFWSkge1xuICAgICAgICAgICAgaWYgKCFjdXJbMV1ba2V5XSkgY3VyWzFdW2tleV0gPSBzdHJmbihwYXJ0c1tpXVsxXSlcbiAgICAgICAgICAgIGVsc2UgcGFydHNbaV1bMV09PT1cIlwiIHx8IChjdXJbMV1ba2V5XSA9IGNvbmNhdChjdXJbMV1ba2V5XSwgcGFydHNbaV1bMV0pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcnRzW2ldWzBdID09PSBWQVJcbiAgICAgICAgICAmJiAocGFydHNbaV1bMV0gPT09IEFUVFJfVkFMVUUgfHwgcGFydHNbaV1bMV0gPT09IEFUVFJfS0VZKSkge1xuICAgICAgICAgICAgaWYgKCFjdXJbMV1ba2V5XSkgY3VyWzFdW2tleV0gPSBzdHJmbihwYXJ0c1tpXVsyXSlcbiAgICAgICAgICAgIGVsc2UgcGFydHNbaV1bMl09PT1cIlwiIHx8IChjdXJbMV1ba2V5XSA9IGNvbmNhdChjdXJbMV1ba2V5XSwgcGFydHNbaV1bMl0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGtleS5sZW5ndGggJiYgIWN1clsxXVtrZXldICYmIGkgPT09IGpcbiAgICAgICAgICAgICYmIChwYXJ0c1tpXVswXSA9PT0gQ0xPU0UgfHwgcGFydHNbaV1bMF0gPT09IEFUVFJfQlJFQUspKSB7XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjYm9vbGVhbi1hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgIC8vIGVtcHR5IHN0cmluZyBpcyBmYWxzeSwgbm90IHdlbGwgYmVoYXZlZCB2YWx1ZSBpbiBicm93c2VyXG4gICAgICAgICAgICAgIGN1clsxXVtrZXldID0ga2V5LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJ0c1tpXVswXSA9PT0gQ0xPU0UpIHtcbiAgICAgICAgICAgICAgaS0tXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzID09PSBBVFRSX0tFWSkge1xuICAgICAgICBjdXJbMV1bcFsxXV0gPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHMgPT09IFZBUiAmJiBwWzFdID09PSBBVFRSX0tFWSkge1xuICAgICAgICBjdXJbMV1bcFsyXV0gPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHMgPT09IENMT1NFKSB7XG4gICAgICAgIGlmIChzZWxmQ2xvc2luZyhjdXJbMF0pICYmIHN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBpeCA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXVsxXVxuICAgICAgICAgIHN0YWNrLnBvcCgpXG4gICAgICAgICAgc3RhY2tbc3RhY2subGVuZ3RoLTFdWzBdWzJdW2l4XSA9IGgoXG4gICAgICAgICAgICBjdXJbMF0sIGN1clsxXSwgY3VyWzJdLmxlbmd0aCA/IGN1clsyXSA6IHVuZGVmaW5lZFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzID09PSBWQVIgJiYgcFsxXSA9PT0gVEVYVCkge1xuICAgICAgICBpZiAocFsyXSA9PT0gdW5kZWZpbmVkIHx8IHBbMl0gPT09IG51bGwpIHBbMl0gPSAnJ1xuICAgICAgICBlbHNlIGlmICghcFsyXSkgcFsyXSA9IGNvbmNhdCgnJywgcFsyXSlcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocFsyXVswXSkpIHtcbiAgICAgICAgICBjdXJbMl0ucHVzaC5hcHBseShjdXJbMl0sIHBbMl0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VyWzJdLnB1c2gocFsyXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzID09PSBURVhUKSB7XG4gICAgICAgIGN1clsyXS5wdXNoKHBbMV0pXG4gICAgICB9IGVsc2UgaWYgKHMgPT09IEFUVFJfRVEgfHwgcyA9PT0gQVRUUl9CUkVBSykge1xuICAgICAgICAvLyBuby1vcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmhhbmRsZWQ6ICcgKyBzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0cmVlWzJdLmxlbmd0aCA+IDEgJiYgL15cXHMqJC8udGVzdCh0cmVlWzJdWzBdKSkge1xuICAgICAgdHJlZVsyXS5zaGlmdCgpXG4gICAgfVxuXG4gICAgaWYgKHRyZWVbMl0ubGVuZ3RoID4gMlxuICAgIHx8ICh0cmVlWzJdLmxlbmd0aCA9PT0gMiAmJiAvXFxTLy50ZXN0KHRyZWVbMl1bMV0pKSkge1xuICAgICAgaWYgKG9wdHMuY3JlYXRlRnJhZ21lbnQpIHJldHVybiBvcHRzLmNyZWF0ZUZyYWdtZW50KHRyZWVbMl0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdtdWx0aXBsZSByb290IGVsZW1lbnRzIG11c3QgYmUgd3JhcHBlZCBpbiBhbiBlbmNsb3NpbmcgdGFnJ1xuICAgICAgKVxuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0cmVlWzJdWzBdKSAmJiB0eXBlb2YgdHJlZVsyXVswXVswXSA9PT0gJ3N0cmluZydcbiAgICAmJiBBcnJheS5pc0FycmF5KHRyZWVbMl1bMF1bMl0pKSB7XG4gICAgICB0cmVlWzJdWzBdID0gaCh0cmVlWzJdWzBdWzBdLCB0cmVlWzJdWzBdWzFdLCB0cmVlWzJdWzBdWzJdKVxuICAgIH1cbiAgICByZXR1cm4gdHJlZVsyXVswXVxuXG4gICAgZnVuY3Rpb24gcGFyc2UgKHN0cikge1xuICAgICAgdmFyIHJlcyA9IFtdXG4gICAgICBpZiAoc3RhdGUgPT09IEFUVFJfVkFMVUVfVykgc3RhdGUgPSBBVFRSXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQXQoaSlcbiAgICAgICAgaWYgKHN0YXRlID09PSBURVhUICYmIGMgPT09ICc8Jykge1xuICAgICAgICAgIGlmIChyZWcubGVuZ3RoKSByZXMucHVzaChbVEVYVCwgcmVnXSlcbiAgICAgICAgICByZWcgPSAnJ1xuICAgICAgICAgIHN0YXRlID0gT1BFTlxuICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc+JyAmJiAhcXVvdChzdGF0ZSkgJiYgc3RhdGUgIT09IENPTU1FTlQpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IE9QRU4gJiYgcmVnLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzLnB1c2goW09QRU4scmVnXSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX0tFWSkge1xuICAgICAgICAgICAgcmVzLnB1c2goW0FUVFJfS0VZLHJlZ10pXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9WQUxVRSAmJiByZWcubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXMucHVzaChbQVRUUl9WQUxVRSxyZWddKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXMucHVzaChbQ0xPU0VdKVxuICAgICAgICAgIHJlZyA9ICcnXG4gICAgICAgICAgc3RhdGUgPSBURVhUXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IENPTU1FTlQgJiYgLy0kLy50ZXN0KHJlZykgJiYgYyA9PT0gJy0nKSB7XG4gICAgICAgICAgaWYgKG9wdHMuY29tbWVudHMpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKFtBVFRSX1ZBTFVFLHJlZy5zdWJzdHIoMCwgcmVnLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVnID0gJydcbiAgICAgICAgICBzdGF0ZSA9IFRFWFRcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gT1BFTiAmJiAvXiEtLSQvLnRlc3QocmVnKSkge1xuICAgICAgICAgIGlmIChvcHRzLmNvbW1lbnRzKSB7XG4gICAgICAgICAgICByZXMucHVzaChbT1BFTiwgcmVnXSxbQVRUUl9LRVksJ2NvbW1lbnQnXSxbQVRUUl9FUV0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZyA9IGNcbiAgICAgICAgICBzdGF0ZSA9IENPTU1FTlRcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVEVYVCB8fCBzdGF0ZSA9PT0gQ09NTUVOVCkge1xuICAgICAgICAgIHJlZyArPSBjXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IE9QRU4gJiYgYyA9PT0gJy8nICYmIHJlZy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBuby1vcCwgc2VsZiBjbG9zaW5nIHRhZyB3aXRob3V0IGEgc3BhY2UgPGJyLz5cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gT1BFTiAmJiAvXFxzLy50ZXN0KGMpKSB7XG4gICAgICAgICAgaWYgKHJlZy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKFtPUEVOLCByZWddKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWcgPSAnJ1xuICAgICAgICAgIHN0YXRlID0gQVRUUlxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBPUEVOKSB7XG4gICAgICAgICAgcmVnICs9IGNcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUiAmJiAvW15cXHNcIic9L10vLnRlc3QoYykpIHtcbiAgICAgICAgICBzdGF0ZSA9IEFUVFJfS0VZXG4gICAgICAgICAgcmVnID0gY1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSICYmIC9cXHMvLnRlc3QoYykpIHtcbiAgICAgICAgICBpZiAocmVnLmxlbmd0aCkgcmVzLnB1c2goW0FUVFJfS0VZLHJlZ10pXG4gICAgICAgICAgcmVzLnB1c2goW0FUVFJfQlJFQUtdKVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX0tFWSAmJiAvXFxzLy50ZXN0KGMpKSB7XG4gICAgICAgICAgcmVzLnB1c2goW0FUVFJfS0VZLHJlZ10pXG4gICAgICAgICAgcmVnID0gJydcbiAgICAgICAgICBzdGF0ZSA9IEFUVFJfS0VZX1dcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9LRVkgJiYgYyA9PT0gJz0nKSB7XG4gICAgICAgICAgcmVzLnB1c2goW0FUVFJfS0VZLHJlZ10sW0FUVFJfRVFdKVxuICAgICAgICAgIHJlZyA9ICcnXG4gICAgICAgICAgc3RhdGUgPSBBVFRSX1ZBTFVFX1dcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9LRVkpIHtcbiAgICAgICAgICByZWcgKz0gY1xuICAgICAgICB9IGVsc2UgaWYgKChzdGF0ZSA9PT0gQVRUUl9LRVlfVyB8fCBzdGF0ZSA9PT0gQVRUUikgJiYgYyA9PT0gJz0nKSB7XG4gICAgICAgICAgcmVzLnB1c2goW0FUVFJfRVFdKVxuICAgICAgICAgIHN0YXRlID0gQVRUUl9WQUxVRV9XXG4gICAgICAgIH0gZWxzZSBpZiAoKHN0YXRlID09PSBBVFRSX0tFWV9XIHx8IHN0YXRlID09PSBBVFRSKSAmJiAhL1xccy8udGVzdChjKSkge1xuICAgICAgICAgIHJlcy5wdXNoKFtBVFRSX0JSRUFLXSlcbiAgICAgICAgICBpZiAoL1tcXHctXS8udGVzdChjKSkge1xuICAgICAgICAgICAgcmVnICs9IGNcbiAgICAgICAgICAgIHN0YXRlID0gQVRUUl9LRVlcbiAgICAgICAgICB9IGVsc2Ugc3RhdGUgPSBBVFRSXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFJfVkFMVUVfVyAmJiBjID09PSAnXCInKSB7XG4gICAgICAgICAgc3RhdGUgPSBBVFRSX1ZBTFVFX0RRXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFJfVkFMVUVfVyAmJiBjID09PSBcIidcIikge1xuICAgICAgICAgIHN0YXRlID0gQVRUUl9WQUxVRV9TUVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX1ZBTFVFX0RRICYmIGMgPT09ICdcIicpIHtcbiAgICAgICAgICByZXMucHVzaChbQVRUUl9WQUxVRSxyZWddLFtBVFRSX0JSRUFLXSlcbiAgICAgICAgICByZWcgPSAnJ1xuICAgICAgICAgIHN0YXRlID0gQVRUUlxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX1ZBTFVFX1NRICYmIGMgPT09IFwiJ1wiKSB7XG4gICAgICAgICAgcmVzLnB1c2goW0FUVFJfVkFMVUUscmVnXSxbQVRUUl9CUkVBS10pXG4gICAgICAgICAgcmVnID0gJydcbiAgICAgICAgICBzdGF0ZSA9IEFUVFJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9WQUxVRV9XICYmICEvXFxzLy50ZXN0KGMpKSB7XG4gICAgICAgICAgc3RhdGUgPSBBVFRSX1ZBTFVFXG4gICAgICAgICAgaS0tXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFJfVkFMVUUgJiYgL1xccy8udGVzdChjKSkge1xuICAgICAgICAgIHJlcy5wdXNoKFtBVFRSX1ZBTFVFLHJlZ10sW0FUVFJfQlJFQUtdKVxuICAgICAgICAgIHJlZyA9ICcnXG4gICAgICAgICAgc3RhdGUgPSBBVFRSXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFJfVkFMVUUgfHwgc3RhdGUgPT09IEFUVFJfVkFMVUVfU1FcbiAgICAgICAgfHwgc3RhdGUgPT09IEFUVFJfVkFMVUVfRFEpIHtcbiAgICAgICAgICByZWcgKz0gY1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUgPT09IFRFWFQgJiYgcmVnLmxlbmd0aCkge1xuICAgICAgICByZXMucHVzaChbVEVYVCxyZWddKVxuICAgICAgICByZWcgPSAnJ1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9WQUxVRSAmJiByZWcubGVuZ3RoKSB7XG4gICAgICAgIHJlcy5wdXNoKFtBVFRSX1ZBTFVFLHJlZ10pXG4gICAgICAgIHJlZyA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBBVFRSX1ZBTFVFX0RRICYmIHJlZy5sZW5ndGgpIHtcbiAgICAgICAgcmVzLnB1c2goW0FUVFJfVkFMVUUscmVnXSlcbiAgICAgICAgcmVnID0gJydcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEFUVFJfVkFMVUVfU1EgJiYgcmVnLmxlbmd0aCkge1xuICAgICAgICByZXMucHVzaChbQVRUUl9WQUxVRSxyZWddKVxuICAgICAgICByZWcgPSAnJ1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQVRUUl9LRVkpIHtcbiAgICAgICAgcmVzLnB1c2goW0FUVFJfS0VZLHJlZ10pXG4gICAgICAgIHJlZyA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RyZm4gKHgpIHtcbiAgICBpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicpIHJldHVybiB4XG4gICAgZWxzZSBpZiAodHlwZW9mIHggPT09ICdzdHJpbmcnKSByZXR1cm4geFxuICAgIGVsc2UgaWYgKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnKSByZXR1cm4geFxuICAgIGVsc2UgaWYgKHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkKSByZXR1cm4geFxuICAgIGVsc2UgcmV0dXJuIGNvbmNhdCgnJywgeClcbiAgfVxufVxuXG5mdW5jdGlvbiBxdW90IChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUgPT09IEFUVFJfVkFMVUVfU1EgfHwgc3RhdGUgPT09IEFUVFJfVkFMVUVfRFFcbn1cblxudmFyIGNsb3NlUkUgPSBSZWdFeHAoJ14oJyArIFtcbiAgJ2FyZWEnLCAnYmFzZScsICdiYXNlZm9udCcsICdiZ3NvdW5kJywgJ2JyJywgJ2NvbCcsICdjb21tYW5kJywgJ2VtYmVkJyxcbiAgJ2ZyYW1lJywgJ2hyJywgJ2ltZycsICdpbnB1dCcsICdpc2luZGV4JywgJ2tleWdlbicsICdsaW5rJywgJ21ldGEnLCAncGFyYW0nLFxuICAnc291cmNlJywgJ3RyYWNrJywgJ3dicicsICchLS0nLFxuICAvLyBTVkcgVEFHU1xuICAnYW5pbWF0ZScsICdhbmltYXRlVHJhbnNmb3JtJywgJ2NpcmNsZScsICdjdXJzb3InLCAnZGVzYycsICdlbGxpcHNlJyxcbiAgJ2ZlQmxlbmQnLCAnZmVDb2xvck1hdHJpeCcsICdmZUNvbXBvc2l0ZScsXG4gICdmZUNvbnZvbHZlTWF0cml4JywgJ2ZlRGlmZnVzZUxpZ2h0aW5nJywgJ2ZlRGlzcGxhY2VtZW50TWFwJyxcbiAgJ2ZlRGlzdGFudExpZ2h0JywgJ2ZlRmxvb2QnLCAnZmVGdW5jQScsICdmZUZ1bmNCJywgJ2ZlRnVuY0cnLCAnZmVGdW5jUicsXG4gICdmZUdhdXNzaWFuQmx1cicsICdmZUltYWdlJywgJ2ZlTWVyZ2VOb2RlJywgJ2ZlTW9ycGhvbG9neScsXG4gICdmZU9mZnNldCcsICdmZVBvaW50TGlnaHQnLCAnZmVTcGVjdWxhckxpZ2h0aW5nJywgJ2ZlU3BvdExpZ2h0JywgJ2ZlVGlsZScsXG4gICdmZVR1cmJ1bGVuY2UnLCAnZm9udC1mYWNlLWZvcm1hdCcsICdmb250LWZhY2UtbmFtZScsICdmb250LWZhY2UtdXJpJyxcbiAgJ2dseXBoJywgJ2dseXBoUmVmJywgJ2hrZXJuJywgJ2ltYWdlJywgJ2xpbmUnLCAnbWlzc2luZy1nbHlwaCcsICdtcGF0aCcsXG4gICdwYXRoJywgJ3BvbHlnb24nLCAncG9seWxpbmUnLCAncmVjdCcsICdzZXQnLCAnc3RvcCcsICd0cmVmJywgJ3VzZScsICd2aWV3JyxcbiAgJ3ZrZXJuJ1xuXS5qb2luKCd8JykgKyAnKSg/OltcXC4jXVthLXpBLVowLTlcXHUwMDdGLVxcdUZGRkZfOi1dKykqJCcpXG5mdW5jdGlvbiBzZWxmQ2xvc2luZyAodGFnKSB7IHJldHVybiBjbG9zZVJFLnRlc3QodGFnKSB9XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2sgPSByZXF1aXJlKCdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG52YXIgX2NyZWF0ZUNsYXNzID0gcmVxdWlyZSgnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHRMZWdhY3kgKGUpIHsgcmV0dXJuIGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICdkZWZhdWx0JyBpbiBlID8gZSA6IHsgJ2RlZmF1bHQnOiBlIH07IH1cblxudmFyIF9jbGFzc0NhbGxDaGVja19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koX2NsYXNzQ2FsbENoZWNrKTtcbnZhciBfY3JlYXRlQ2xhc3NfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF9jcmVhdGVDbGFzcyk7XG5cbnZhciBhcnIgPSBbXTtcbnZhciBlYWNoID0gYXJyLmZvckVhY2g7XG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5mdW5jdGlvbiBkZWZhdWx0cyhvYmopIHtcbiAgZWFjaC5jYWxsKHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSwgZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UpIHtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChvYmpbcHJvcF0gPT09IHVuZGVmaW5lZCkgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvYmo7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG52YXIgZmllbGRDb250ZW50UmVnRXhwID0gL15bXFx1MDAwOVxcdTAwMjAtXFx1MDA3ZVxcdTAwODAtXFx1MDBmZl0rJC87XG5cbnZhciBzZXJpYWxpemVDb29raWUgPSBmdW5jdGlvbiBzZXJpYWxpemVDb29raWUobmFtZSwgdmFsLCBvcHRpb25zKSB7XG4gIHZhciBvcHQgPSBvcHRpb25zIHx8IHt9O1xuICBvcHQucGF0aCA9IG9wdC5wYXRoIHx8ICcvJztcbiAgdmFyIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCk7XG4gIHZhciBzdHIgPSBcIlwiLmNvbmNhdChuYW1lLCBcIj1cIikuY29uY2F0KHZhbHVlKTtcblxuICBpZiAob3B0Lm1heEFnZSA+IDApIHtcbiAgICB2YXIgbWF4QWdlID0gb3B0Lm1heEFnZSAtIDA7XG4gICAgaWYgKE51bWJlci5pc05hTihtYXhBZ2UpKSB0aHJvdyBuZXcgRXJyb3IoJ21heEFnZSBzaG91bGQgYmUgYSBOdW1iZXInKTtcbiAgICBzdHIgKz0gXCI7IE1heC1BZ2U9XCIuY29uY2F0KE1hdGguZmxvb3IobWF4QWdlKSk7XG4gIH1cblxuICBpZiAob3B0LmRvbWFpbikge1xuICAgIGlmICghZmllbGRDb250ZW50UmVnRXhwLnRlc3Qob3B0LmRvbWFpbikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBkb21haW4gaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIHN0ciArPSBcIjsgRG9tYWluPVwiLmNvbmNhdChvcHQuZG9tYWluKTtcbiAgfVxuXG4gIGlmIChvcHQucGF0aCkge1xuICAgIGlmICghZmllbGRDb250ZW50UmVnRXhwLnRlc3Qob3B0LnBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gcGF0aCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgc3RyICs9IFwiOyBQYXRoPVwiLmNvbmNhdChvcHQucGF0aCk7XG4gIH1cblxuICBpZiAob3B0LmV4cGlyZXMpIHtcbiAgICBpZiAodHlwZW9mIG9wdC5leHBpcmVzLnRvVVRDU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gZXhwaXJlcyBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgc3RyICs9IFwiOyBFeHBpcmVzPVwiLmNvbmNhdChvcHQuZXhwaXJlcy50b1VUQ1N0cmluZygpKTtcbiAgfVxuXG4gIGlmIChvcHQuaHR0cE9ubHkpIHN0ciArPSAnOyBIdHRwT25seSc7XG4gIGlmIChvcHQuc2VjdXJlKSBzdHIgKz0gJzsgU2VjdXJlJztcblxuICBpZiAob3B0LnNhbWVTaXRlKSB7XG4gICAgdmFyIHNhbWVTaXRlID0gdHlwZW9mIG9wdC5zYW1lU2l0ZSA9PT0gJ3N0cmluZycgPyBvcHQuc2FtZVNpdGUudG9Mb3dlckNhc2UoKSA6IG9wdC5zYW1lU2l0ZTtcblxuICAgIHN3aXRjaCAoc2FtZVNpdGUpIHtcbiAgICAgIGNhc2UgdHJ1ZTpcbiAgICAgICAgc3RyICs9ICc7IFNhbWVTaXRlPVN0cmljdCc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsYXgnOlxuICAgICAgICBzdHIgKz0gJzsgU2FtZVNpdGU9TGF4JztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N0cmljdCc6XG4gICAgICAgIHN0ciArPSAnOyBTYW1lU2l0ZT1TdHJpY3QnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHN0ciArPSAnOyBTYW1lU2l0ZT1Ob25lJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBzYW1lU2l0ZSBpcyBpbnZhbGlkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cbnZhciBjb29raWUgPSB7XG4gIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKG5hbWUsIHZhbHVlLCBtaW51dGVzLCBkb21haW4pIHtcbiAgICB2YXIgY29va2llT3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge1xuICAgICAgcGF0aDogJy8nLFxuICAgICAgc2FtZVNpdGU6ICdzdHJpY3QnXG4gICAgfTtcblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBjb29raWVPcHRpb25zLmV4cGlyZXMgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29va2llT3B0aW9ucy5leHBpcmVzLnNldFRpbWUoY29va2llT3B0aW9ucy5leHBpcmVzLmdldFRpbWUoKSArIG1pbnV0ZXMgKiA2MCAqIDEwMDApO1xuICAgIH1cblxuICAgIGlmIChkb21haW4pIGNvb2tpZU9wdGlvbnMuZG9tYWluID0gZG9tYWluO1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IHNlcmlhbGl6ZUNvb2tpZShuYW1lLCBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpLCBjb29raWVPcHRpb25zKTtcbiAgfSxcbiAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgdmFyIG5hbWVFUSA9IFwiXCIuY29uY2F0KG5hbWUsIFwiPVwiKTtcbiAgICB2YXIgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY2FbaV07XG5cbiAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PT0gJyAnKSB7XG4gICAgICAgIGMgPSBjLnN1YnN0cmluZygxLCBjLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjLmluZGV4T2YobmFtZUVRKSA9PT0gMCkgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWVFUS5sZW5ndGgsIGMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgIHRoaXMuY3JlYXRlKG5hbWUsICcnLCAtMSk7XG4gIH1cbn07XG52YXIgY29va2llJDEgPSB7XG4gIG5hbWU6ICdjb29raWUnLFxuICBsb29rdXA6IGZ1bmN0aW9uIGxvb2t1cChvcHRpb25zKSB7XG4gICAgdmFyIGZvdW5kO1xuXG4gICAgaWYgKG9wdGlvbnMubG9va3VwQ29va2llICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBjID0gY29va2llLnJlYWQob3B0aW9ucy5sb29rdXBDb29raWUpO1xuICAgICAgaWYgKGMpIGZvdW5kID0gYztcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH0sXG4gIGNhY2hlVXNlckxhbmd1YWdlOiBmdW5jdGlvbiBjYWNoZVVzZXJMYW5ndWFnZShsbmcsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5sb29rdXBDb29raWUgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29va2llLmNyZWF0ZShvcHRpb25zLmxvb2t1cENvb2tpZSwgbG5nLCBvcHRpb25zLmNvb2tpZU1pbnV0ZXMsIG9wdGlvbnMuY29va2llRG9tYWluLCBvcHRpb25zLmNvb2tpZU9wdGlvbnMpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHF1ZXJ5c3RyaW5nID0ge1xuICBuYW1lOiAncXVlcnlzdHJpbmcnLFxuICBsb29rdXA6IGZ1bmN0aW9uIGxvb2t1cChvcHRpb25zKSB7XG4gICAgdmFyIGZvdW5kO1xuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgc2VhcmNoID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcblxuICAgICAgaWYgKCF3aW5kb3cubG9jYXRpb24uc2VhcmNoICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoLmluZGV4T2YoJz8nKSA+IC0xKSB7XG4gICAgICAgIHNlYXJjaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZyh3aW5kb3cubG9jYXRpb24uaGFzaC5pbmRleE9mKCc/JykpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcXVlcnkgPSBzZWFyY2guc3Vic3RyaW5nKDEpO1xuICAgICAgdmFyIHBhcmFtcyA9IHF1ZXJ5LnNwbGl0KCcmJyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwb3MgPSBwYXJhbXNbaV0uaW5kZXhPZignPScpO1xuXG4gICAgICAgIGlmIChwb3MgPiAwKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHBhcmFtc1tpXS5zdWJzdHJpbmcoMCwgcG9zKTtcblxuICAgICAgICAgIGlmIChrZXkgPT09IG9wdGlvbnMubG9va3VwUXVlcnlzdHJpbmcpIHtcbiAgICAgICAgICAgIGZvdW5kID0gcGFyYW1zW2ldLnN1YnN0cmluZyhwb3MgKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cbn07XG5cbnZhciBoYXNMb2NhbFN0b3JhZ2VTdXBwb3J0ID0gbnVsbDtcblxudmFyIGxvY2FsU3RvcmFnZUF2YWlsYWJsZSA9IGZ1bmN0aW9uIGxvY2FsU3RvcmFnZUF2YWlsYWJsZSgpIHtcbiAgaWYgKGhhc0xvY2FsU3RvcmFnZVN1cHBvcnQgIT09IG51bGwpIHJldHVybiBoYXNMb2NhbFN0b3JhZ2VTdXBwb3J0O1xuXG4gIHRyeSB7XG4gICAgaGFzTG9jYWxTdG9yYWdlU3VwcG9ydCA9IHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSAhPT0gbnVsbDtcbiAgICB2YXIgdGVzdEtleSA9ICdpMThuZXh0LnRyYW5zbGF0ZS5ib28nO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0ZXN0S2V5LCAnZm9vJyk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRlc3RLZXkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaGFzTG9jYWxTdG9yYWdlU3VwcG9ydCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGhhc0xvY2FsU3RvcmFnZVN1cHBvcnQ7XG59O1xuXG52YXIgbG9jYWxTdG9yYWdlID0ge1xuICBuYW1lOiAnbG9jYWxTdG9yYWdlJyxcbiAgbG9va3VwOiBmdW5jdGlvbiBsb29rdXAob3B0aW9ucykge1xuICAgIHZhciBmb3VuZDtcblxuICAgIGlmIChvcHRpb25zLmxvb2t1cExvY2FsU3RvcmFnZSAmJiBsb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSkge1xuICAgICAgdmFyIGxuZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShvcHRpb25zLmxvb2t1cExvY2FsU3RvcmFnZSk7XG4gICAgICBpZiAobG5nKSBmb3VuZCA9IGxuZztcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH0sXG4gIGNhY2hlVXNlckxhbmd1YWdlOiBmdW5jdGlvbiBjYWNoZVVzZXJMYW5ndWFnZShsbmcsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5sb29rdXBMb2NhbFN0b3JhZ2UgJiYgbG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkpIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShvcHRpb25zLmxvb2t1cExvY2FsU3RvcmFnZSwgbG5nKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBoYXNTZXNzaW9uU3RvcmFnZVN1cHBvcnQgPSBudWxsO1xuXG52YXIgc2Vzc2lvblN0b3JhZ2VBdmFpbGFibGUgPSBmdW5jdGlvbiBzZXNzaW9uU3RvcmFnZUF2YWlsYWJsZSgpIHtcbiAgaWYgKGhhc1Nlc3Npb25TdG9yYWdlU3VwcG9ydCAhPT0gbnVsbCkgcmV0dXJuIGhhc1Nlc3Npb25TdG9yYWdlU3VwcG9ydDtcblxuICB0cnkge1xuICAgIGhhc1Nlc3Npb25TdG9yYWdlU3VwcG9ydCA9IHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlICE9PSBudWxsO1xuICAgIHZhciB0ZXN0S2V5ID0gJ2kxOG5leHQudHJhbnNsYXRlLmJvbyc7XG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGVzdEtleSwgJ2ZvbycpO1xuICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRlc3RLZXkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaGFzU2Vzc2lvblN0b3JhZ2VTdXBwb3J0ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaGFzU2Vzc2lvblN0b3JhZ2VTdXBwb3J0O1xufTtcblxudmFyIHNlc3Npb25TdG9yYWdlID0ge1xuICBuYW1lOiAnc2Vzc2lvblN0b3JhZ2UnLFxuICBsb29rdXA6IGZ1bmN0aW9uIGxvb2t1cChvcHRpb25zKSB7XG4gICAgdmFyIGZvdW5kO1xuXG4gICAgaWYgKG9wdGlvbnMubG9va3VwU2Vzc2lvblN0b3JhZ2UgJiYgc2Vzc2lvblN0b3JhZ2VBdmFpbGFibGUoKSkge1xuICAgICAgdmFyIGxuZyA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKG9wdGlvbnMubG9va3VwU2Vzc2lvblN0b3JhZ2UpO1xuICAgICAgaWYgKGxuZykgZm91bmQgPSBsbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9LFxuICBjYWNoZVVzZXJMYW5ndWFnZTogZnVuY3Rpb24gY2FjaGVVc2VyTGFuZ3VhZ2UobG5nLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMubG9va3VwU2Vzc2lvblN0b3JhZ2UgJiYgc2Vzc2lvblN0b3JhZ2VBdmFpbGFibGUoKSkge1xuICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0ob3B0aW9ucy5sb29rdXBTZXNzaW9uU3RvcmFnZSwgbG5nKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBuYXZpZ2F0b3IkMSA9IHtcbiAgbmFtZTogJ25hdmlnYXRvcicsXG4gIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKG9wdGlvbnMpIHtcbiAgICB2YXIgZm91bmQgPSBbXTtcblxuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKG5hdmlnYXRvci5sYW5ndWFnZXMpIHtcbiAgICAgICAgLy8gY2hyb21lIG9ubHk7IG5vdCBhbiBhcnJheSwgc28gY2FuJ3QgdXNlIC5wdXNoLmFwcGx5IGluc3RlYWQgb2YgaXRlcmF0aW5nXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvdW5kLnB1c2gobmF2aWdhdG9yLmxhbmd1YWdlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5hdmlnYXRvci51c2VyTGFuZ3VhZ2UpIHtcbiAgICAgICAgZm91bmQucHVzaChuYXZpZ2F0b3IudXNlckxhbmd1YWdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdmlnYXRvci5sYW5ndWFnZSkge1xuICAgICAgICBmb3VuZC5wdXNoKG5hdmlnYXRvci5sYW5ndWFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kLmxlbmd0aCA+IDAgPyBmb3VuZCA6IHVuZGVmaW5lZDtcbiAgfVxufTtcblxudmFyIGh0bWxUYWcgPSB7XG4gIG5hbWU6ICdodG1sVGFnJyxcbiAgbG9va3VwOiBmdW5jdGlvbiBsb29rdXAob3B0aW9ucykge1xuICAgIHZhciBmb3VuZDtcbiAgICB2YXIgaHRtbFRhZyA9IG9wdGlvbnMuaHRtbFRhZyB8fCAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IG51bGwpO1xuXG4gICAgaWYgKGh0bWxUYWcgJiYgdHlwZW9mIGh0bWxUYWcuZ2V0QXR0cmlidXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmb3VuZCA9IGh0bWxUYWcuZ2V0QXR0cmlidXRlKCdsYW5nJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG59O1xuXG52YXIgcGF0aCA9IHtcbiAgbmFtZTogJ3BhdGgnLFxuICBsb29rdXA6IGZ1bmN0aW9uIGxvb2t1cChvcHRpb25zKSB7XG4gICAgdmFyIGZvdW5kO1xuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL1xcLyhbYS16QS1aLV0qKS9nKTtcblxuICAgICAgaWYgKGxhbmd1YWdlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxvb2t1cEZyb21QYXRoSW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBsYW5ndWFnZVtvcHRpb25zLmxvb2t1cEZyb21QYXRoSW5kZXhdICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3VuZCA9IGxhbmd1YWdlW29wdGlvbnMubG9va3VwRnJvbVBhdGhJbmRleF0ucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3VuZCA9IGxhbmd1YWdlWzBdLnJlcGxhY2UoJy8nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cbn07XG5cbnZhciBzdWJkb21haW4gPSB7XG4gIG5hbWU6ICdzdWJkb21haW4nLFxuICBsb29rdXA6IGZ1bmN0aW9uIGxvb2t1cChvcHRpb25zKSB7XG4gICAgLy8gSWYgZ2l2ZW4gZ2V0IHRoZSBzdWJkb21haW4gaW5kZXggZWxzZSAxXG4gICAgdmFyIGxvb2t1cEZyb21TdWJkb21haW5JbmRleCA9IHR5cGVvZiBvcHRpb25zLmxvb2t1cEZyb21TdWJkb21haW5JbmRleCA9PT0gJ251bWJlcicgPyBvcHRpb25zLmxvb2t1cEZyb21TdWJkb21haW5JbmRleCArIDEgOiAxOyAvLyBnZXQgYWxsIG1hdGNoZXMgaWYgd2luZG93LmxvY2F0aW9uLiBpcyBleGlzdGluZ1xuICAgIC8vIGZpcnN0IGl0ZW0gb2YgbWF0Y2ggaXMgdGhlIG1hdGNoIGl0c2VsZiBhbmQgdGhlIHNlY29uZCBpcyB0aGUgZmlyc3QgZ3JvdXAgbWFjaHQgd2hpY2ggc291bGQgYmUgdGhlIGZpcnN0IHN1YmRvbWFpbiBtYXRjaFxuICAgIC8vIGlzIHRoZSBob3N0bmFtZSBubyBwdWJsaWMgZG9tYWluIGdldCB0aGUgb3Igb3B0aW9uIG9mIGxvY2FsaG9zdFxuXG4gICAgdmFyIGxhbmd1YWdlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSAmJiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUubWF0Y2goL14oXFx3ezIsNX0pXFwuKChbYS16MC05LV17MSw2M31cXC5bYS16XXsyLDZ9KXxsb2NhbGhvc3QpL2kpOyAvLyBpZiB0aGVyZSBpcyBubyBtYXRjaCAobnVsbCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgaWYgKCFsYW5ndWFnZSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gcmV0dXJuIHRoZSBnaXZlbiBncm91cCBtYXRjaFxuXG4gICAgcmV0dXJuIGxhbmd1YWdlW2xvb2t1cEZyb21TdWJkb21haW5JbmRleF07XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRzKCkge1xuICByZXR1cm4ge1xuICAgIG9yZGVyOiBbJ3F1ZXJ5c3RyaW5nJywgJ2Nvb2tpZScsICdsb2NhbFN0b3JhZ2UnLCAnc2Vzc2lvblN0b3JhZ2UnLCAnbmF2aWdhdG9yJywgJ2h0bWxUYWcnXSxcbiAgICBsb29rdXBRdWVyeXN0cmluZzogJ2xuZycsXG4gICAgbG9va3VwQ29va2llOiAnaTE4bmV4dCcsXG4gICAgbG9va3VwTG9jYWxTdG9yYWdlOiAnaTE4bmV4dExuZycsXG4gICAgbG9va3VwU2Vzc2lvblN0b3JhZ2U6ICdpMThuZXh0TG5nJyxcbiAgICAvLyBjYWNoZSB1c2VyIGxhbmd1YWdlXG4gICAgY2FjaGVzOiBbJ2xvY2FsU3RvcmFnZSddLFxuICAgIGV4Y2x1ZGVDYWNoZUZvcjogWydjaW1vZGUnXSAvLyBjb29raWVNaW51dGVzOiAxMCxcbiAgICAvLyBjb29raWVEb21haW46ICdteURvbWFpbidcblxuICB9O1xufVxuXG52YXIgQnJvd3NlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJyb3dzZXIoc2VydmljZXMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2tfX2RlZmF1bHRbXCJkZWZhdWx0XCJdKHRoaXMsIEJyb3dzZXIpO1xuXG4gICAgdGhpcy50eXBlID0gJ2xhbmd1YWdlRGV0ZWN0b3InO1xuICAgIHRoaXMuZGV0ZWN0b3JzID0ge307XG4gICAgdGhpcy5pbml0KHNlcnZpY2VzLCBvcHRpb25zKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzc19fZGVmYXVsdFtcImRlZmF1bHRcIl0oQnJvd3NlciwgW3tcbiAgICBrZXk6IFwiaW5pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KHNlcnZpY2VzKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgaTE4bk9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgdGhpcy5zZXJ2aWNlcyA9IHNlcnZpY2VzO1xuICAgICAgdGhpcy5vcHRpb25zID0gZGVmYXVsdHMob3B0aW9ucywgdGhpcy5vcHRpb25zIHx8IHt9LCBnZXREZWZhdWx0cygpKTsgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb29rdXBGcm9tVXJsSW5kZXgpIHRoaXMub3B0aW9ucy5sb29rdXBGcm9tUGF0aEluZGV4ID0gdGhpcy5vcHRpb25zLmxvb2t1cEZyb21VcmxJbmRleDtcbiAgICAgIHRoaXMuaTE4bk9wdGlvbnMgPSBpMThuT3B0aW9ucztcbiAgICAgIHRoaXMuYWRkRGV0ZWN0b3IoY29va2llJDEpO1xuICAgICAgdGhpcy5hZGREZXRlY3RvcihxdWVyeXN0cmluZyk7XG4gICAgICB0aGlzLmFkZERldGVjdG9yKGxvY2FsU3RvcmFnZSk7XG4gICAgICB0aGlzLmFkZERldGVjdG9yKHNlc3Npb25TdG9yYWdlKTtcbiAgICAgIHRoaXMuYWRkRGV0ZWN0b3IobmF2aWdhdG9yJDEpO1xuICAgICAgdGhpcy5hZGREZXRlY3RvcihodG1sVGFnKTtcbiAgICAgIHRoaXMuYWRkRGV0ZWN0b3IocGF0aCk7XG4gICAgICB0aGlzLmFkZERldGVjdG9yKHN1YmRvbWFpbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZERldGVjdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZERldGVjdG9yKGRldGVjdG9yKSB7XG4gICAgICB0aGlzLmRldGVjdG9yc1tkZXRlY3Rvci5uYW1lXSA9IGRldGVjdG9yO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkZXRlY3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGV0ZWN0KGRldGVjdGlvbk9yZGVyKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoIWRldGVjdGlvbk9yZGVyKSBkZXRlY3Rpb25PcmRlciA9IHRoaXMub3B0aW9ucy5vcmRlcjtcbiAgICAgIHZhciBkZXRlY3RlZCA9IFtdO1xuICAgICAgZGV0ZWN0aW9uT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoZGV0ZWN0b3JOYW1lKSB7XG4gICAgICAgIGlmIChfdGhpcy5kZXRlY3RvcnNbZGV0ZWN0b3JOYW1lXSkge1xuICAgICAgICAgIHZhciBsb29rdXAgPSBfdGhpcy5kZXRlY3RvcnNbZGV0ZWN0b3JOYW1lXS5sb29rdXAoX3RoaXMub3B0aW9ucyk7XG5cbiAgICAgICAgICBpZiAobG9va3VwICYmIHR5cGVvZiBsb29rdXAgPT09ICdzdHJpbmcnKSBsb29rdXAgPSBbbG9va3VwXTtcbiAgICAgICAgICBpZiAobG9va3VwKSBkZXRlY3RlZCA9IGRldGVjdGVkLmNvbmNhdChsb29rdXApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0QmVzdE1hdGNoRnJvbUNvZGVzKSByZXR1cm4gZGV0ZWN0ZWQ7IC8vIG5ldyBpMThuZXh0IHYxOS41LjBcblxuICAgICAgcmV0dXJuIGRldGVjdGVkLmxlbmd0aCA+IDAgPyBkZXRlY3RlZFswXSA6IG51bGw7IC8vIGEgbGl0dGxlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2FjaGVVc2VyTGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2FjaGVVc2VyTGFuZ3VhZ2UobG5nLCBjYWNoZXMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIWNhY2hlcykgY2FjaGVzID0gdGhpcy5vcHRpb25zLmNhY2hlcztcbiAgICAgIGlmICghY2FjaGVzKSByZXR1cm47XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4Y2x1ZGVDYWNoZUZvciAmJiB0aGlzLm9wdGlvbnMuZXhjbHVkZUNhY2hlRm9yLmluZGV4T2YobG5nKSA+IC0xKSByZXR1cm47XG4gICAgICBjYWNoZXMuZm9yRWFjaChmdW5jdGlvbiAoY2FjaGVOYW1lKSB7XG4gICAgICAgIGlmIChfdGhpczIuZGV0ZWN0b3JzW2NhY2hlTmFtZV0pIF90aGlzMi5kZXRlY3RvcnNbY2FjaGVOYW1lXS5jYWNoZVVzZXJMYW5ndWFnZShsbmcsIF90aGlzMi5vcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBCcm93c2VyO1xufSgpO1xuXG5Ccm93c2VyLnR5cGUgPSAnbGFuZ3VhZ2VEZXRlY3Rvcic7XG5cbm1vZHVsZS5leHBvcnRzID0gQnJvd3NlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIF90eXBlb2YgPSByZXF1aXJlKCdAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZicpO1xudmFyIF9jbGFzc0NhbGxDaGVjayA9IHJlcXVpcmUoJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcbnZhciBfY3JlYXRlQ2xhc3MgPSByZXF1aXJlKCdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG52YXIgX2Fzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkJyk7XG52YXIgX2luaGVyaXRzID0gcmVxdWlyZSgnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0cycpO1xudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gcmVxdWlyZSgnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJyk7XG52YXIgX2dldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZicpO1xudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHknKTtcbnZhciBfdG9BcnJheSA9IHJlcXVpcmUoJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9BcnJheScpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHRMZWdhY3kgKGUpIHsgcmV0dXJuIGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICdkZWZhdWx0JyBpbiBlID8gZSA6IHsgJ2RlZmF1bHQnOiBlIH07IH1cblxudmFyIF90eXBlb2ZfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF90eXBlb2YpO1xudmFyIF9jbGFzc0NhbGxDaGVja19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koX2NsYXNzQ2FsbENoZWNrKTtcbnZhciBfY3JlYXRlQ2xhc3NfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF9jcmVhdGVDbGFzcyk7XG52YXIgX2Fzc2VydFRoaXNJbml0aWFsaXplZF9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koX2Fzc2VydFRoaXNJbml0aWFsaXplZCk7XG52YXIgX2luaGVyaXRzX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShfaW5oZXJpdHMpO1xudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybik7XG52YXIgX2dldFByb3RvdHlwZU9mX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShfZ2V0UHJvdG90eXBlT2YpO1xudmFyIF9kZWZpbmVQcm9wZXJ0eV9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koX2RlZmluZVByb3BlcnR5KTtcbnZhciBfdG9BcnJheV9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koX3RvQXJyYXkpO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5X19kZWZhdWx0WydkZWZhdWx0J10odGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxudmFyIGNvbnNvbGVMb2dnZXIgPSB7XG4gIHR5cGU6ICdsb2dnZXInLFxuICBsb2c6IGZ1bmN0aW9uIGxvZyhhcmdzKSB7XG4gICAgdGhpcy5vdXRwdXQoJ2xvZycsIGFyZ3MpO1xuICB9LFxuICB3YXJuOiBmdW5jdGlvbiB3YXJuKGFyZ3MpIHtcbiAgICB0aGlzLm91dHB1dCgnd2FybicsIGFyZ3MpO1xuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IoYXJncykge1xuICAgIHRoaXMub3V0cHV0KCdlcnJvcicsIGFyZ3MpO1xuICB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uIG91dHB1dCh0eXBlLCBhcmdzKSB7XG4gICAgaWYgKGNvbnNvbGUgJiYgY29uc29sZVt0eXBlXSkgY29uc29sZVt0eXBlXS5hcHBseShjb25zb2xlLCBhcmdzKTtcbiAgfVxufTtcblxudmFyIExvZ2dlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTG9nZ2VyKGNvbmNyZXRlTG9nZ2VyKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrX19kZWZhdWx0WydkZWZhdWx0J10odGhpcywgTG9nZ2VyKTtcblxuICAgIHRoaXMuaW5pdChjb25jcmV0ZUxvZ2dlciwgb3B0aW9ucyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3NfX2RlZmF1bHRbJ2RlZmF1bHQnXShMb2dnZXIsIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdChjb25jcmV0ZUxvZ2dlcikge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdGhpcy5wcmVmaXggPSBvcHRpb25zLnByZWZpeCB8fCAnaTE4bmV4dDonO1xuICAgICAgdGhpcy5sb2dnZXIgPSBjb25jcmV0ZUxvZ2dlciB8fCBjb25zb2xlTG9nZ2VyO1xuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHRoaXMuZGVidWcgPSBvcHRpb25zLmRlYnVnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXREZWJ1Z1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXREZWJ1Zyhib29sKSB7XG4gICAgICB0aGlzLmRlYnVnID0gYm9vbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvZygpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICdsb2cnLCAnJywgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIndhcm5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd2FybigpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ3dhcm4nLCAnJywgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVycm9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVycm9yKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZm9yd2FyZChhcmdzLCAnZXJyb3InLCAnJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRlcHJlY2F0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXByZWNhdGUoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICd3YXJuJywgJ1dBUk5JTkcgREVQUkVDQVRFRDogJywgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvcndhcmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9yd2FyZChhcmdzLCBsdmwsIHByZWZpeCwgZGVidWdPbmx5KSB7XG4gICAgICBpZiAoZGVidWdPbmx5ICYmICF0aGlzLmRlYnVnKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIGFyZ3NbMF0gPSBcIlwiLmNvbmNhdChwcmVmaXgpLmNvbmNhdCh0aGlzLnByZWZpeCwgXCIgXCIpLmNvbmNhdChhcmdzWzBdKTtcbiAgICAgIHJldHVybiB0aGlzLmxvZ2dlcltsdmxdKGFyZ3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjcmVhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlKG1vZHVsZU5hbWUpIHtcbiAgICAgIHJldHVybiBuZXcgTG9nZ2VyKHRoaXMubG9nZ2VyLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHtcbiAgICAgICAgcHJlZml4OiBcIlwiLmNvbmNhdCh0aGlzLnByZWZpeCwgXCI6XCIpLmNvbmNhdChtb2R1bGVOYW1lLCBcIjpcIilcbiAgICAgIH0pLCB0aGlzLm9wdGlvbnMpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xvbmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUob3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwgdGhpcy5vcHRpb25zO1xuICAgICAgb3B0aW9ucy5wcmVmaXggPSBvcHRpb25zLnByZWZpeCB8fCB0aGlzLnByZWZpeDtcbiAgICAgIHJldHVybiBuZXcgTG9nZ2VyKHRoaXMubG9nZ2VyLCBvcHRpb25zKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTG9nZ2VyO1xufSgpO1xuXG52YXIgYmFzZUxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxudmFyIEV2ZW50RW1pdHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVja19fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICB0aGlzLm9ic2VydmVycyA9IHt9O1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzX19kZWZhdWx0WydkZWZhdWx0J10oRXZlbnRFbWl0dGVyLCBbe1xuICAgIGtleTogXCJvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbihldmVudHMsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnNbZXZlbnRdID0gX3RoaXMub2JzZXJ2ZXJzW2V2ZW50XSB8fCBbXTtcblxuICAgICAgICBfdGhpcy5vYnNlcnZlcnNbZXZlbnRdLnB1c2gobGlzdGVuZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib2ZmXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9mZihldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnNbZXZlbnRdKSByZXR1cm47XG5cbiAgICAgIGlmICghbGlzdGVuZXIpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMub2JzZXJ2ZXJzW2V2ZW50XTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9ic2VydmVyc1tldmVudF0gPSB0aGlzLm9ic2VydmVyc1tldmVudF0uZmlsdGVyKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgIHJldHVybiBsICE9PSBsaXN0ZW5lcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbWl0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9ic2VydmVyc1tldmVudF0pIHtcbiAgICAgICAgdmFyIGNsb25lZCA9IFtdLmNvbmNhdCh0aGlzLm9ic2VydmVyc1tldmVudF0pO1xuICAgICAgICBjbG9uZWQuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgICBvYnNlcnZlci5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub2JzZXJ2ZXJzWycqJ10pIHtcbiAgICAgICAgdmFyIF9jbG9uZWQgPSBbXS5jb25jYXQodGhpcy5vYnNlcnZlcnNbJyonXSk7XG5cbiAgICAgICAgX2Nsb25lZC5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICAgIG9ic2VydmVyLmFwcGx5KG9ic2VydmVyLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdmVudEVtaXR0ZXI7XG59KCk7XG5cbmZ1bmN0aW9uIGRlZmVyKCkge1xuICB2YXIgcmVzO1xuICB2YXIgcmVqO1xuICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZXMgPSByZXNvbHZlO1xuICAgIHJlaiA9IHJlamVjdDtcbiAgfSk7XG4gIHByb21pc2UucmVzb2x2ZSA9IHJlcztcbiAgcHJvbWlzZS5yZWplY3QgPSByZWo7XG4gIHJldHVybiBwcm9taXNlO1xufVxuZnVuY3Rpb24gbWFrZVN0cmluZyhvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gJyc7XG4gIHJldHVybiAnJyArIG9iamVjdDtcbn1cbmZ1bmN0aW9uIGNvcHkoYSwgcywgdCkge1xuICBhLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICBpZiAoc1ttXSkgdFttXSA9IHNbbV07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRMYXN0T2ZQYXRoKG9iamVjdCwgcGF0aCwgRW1wdHkpIHtcbiAgZnVuY3Rpb24gY2xlYW5LZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSAmJiBrZXkuaW5kZXhPZignIyMjJykgPiAtMSA/IGtleS5yZXBsYWNlKC8jIyMvZywgJy4nKSA6IGtleTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbk5vdFRyYXZlcnNlRGVlcGVyKCkge1xuICAgIHJldHVybiAhb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgdmFyIHN0YWNrID0gdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnID8gW10uY29uY2F0KHBhdGgpIDogcGF0aC5zcGxpdCgnLicpO1xuXG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAxKSB7XG4gICAgaWYgKGNhbk5vdFRyYXZlcnNlRGVlcGVyKCkpIHJldHVybiB7fTtcbiAgICB2YXIga2V5ID0gY2xlYW5LZXkoc3RhY2suc2hpZnQoKSk7XG4gICAgaWYgKCFvYmplY3Rba2V5XSAmJiBFbXB0eSkgb2JqZWN0W2tleV0gPSBuZXcgRW1wdHkoKTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0ID0ge307XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhbk5vdFRyYXZlcnNlRGVlcGVyKCkpIHJldHVybiB7fTtcbiAgcmV0dXJuIHtcbiAgICBvYmo6IG9iamVjdCxcbiAgICBrOiBjbGVhbktleShzdGFjay5zaGlmdCgpKVxuICB9O1xufVxuXG5mdW5jdGlvbiBzZXRQYXRoKG9iamVjdCwgcGF0aCwgbmV3VmFsdWUpIHtcbiAgdmFyIF9nZXRMYXN0T2ZQYXRoID0gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgsIE9iamVjdCksXG4gICAgICBvYmogPSBfZ2V0TGFzdE9mUGF0aC5vYmosXG4gICAgICBrID0gX2dldExhc3RPZlBhdGguaztcblxuICBvYmpba10gPSBuZXdWYWx1ZTtcbn1cbmZ1bmN0aW9uIHB1c2hQYXRoKG9iamVjdCwgcGF0aCwgbmV3VmFsdWUsIGNvbmNhdCkge1xuICB2YXIgX2dldExhc3RPZlBhdGgyID0gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgsIE9iamVjdCksXG4gICAgICBvYmogPSBfZ2V0TGFzdE9mUGF0aDIub2JqLFxuICAgICAgayA9IF9nZXRMYXN0T2ZQYXRoMi5rO1xuXG4gIG9ialtrXSA9IG9ialtrXSB8fCBbXTtcbiAgaWYgKGNvbmNhdCkgb2JqW2tdID0gb2JqW2tdLmNvbmNhdChuZXdWYWx1ZSk7XG4gIGlmICghY29uY2F0KSBvYmpba10ucHVzaChuZXdWYWx1ZSk7XG59XG5mdW5jdGlvbiBnZXRQYXRoKG9iamVjdCwgcGF0aCkge1xuICB2YXIgX2dldExhc3RPZlBhdGgzID0gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgpLFxuICAgICAgb2JqID0gX2dldExhc3RPZlBhdGgzLm9iaixcbiAgICAgIGsgPSBfZ2V0TGFzdE9mUGF0aDMuaztcblxuICBpZiAoIW9iaikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIG9ialtrXTtcbn1cbmZ1bmN0aW9uIGdldFBhdGhXaXRoRGVmYXVsdHMoZGF0YSwgZGVmYXVsdERhdGEsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRQYXRoKGRhdGEsIGtleSk7XG5cbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gZ2V0UGF0aChkZWZhdWx0RGF0YSwga2V5KTtcbn1cbmZ1bmN0aW9uIGRlZXBFeHRlbmQodGFyZ2V0LCBzb3VyY2UsIG92ZXJ3cml0ZSkge1xuICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgIGlmIChwcm9wICE9PSAnX19wcm90b19fJyAmJiBwcm9wICE9PSAnY29uc3RydWN0b3InKSB7XG4gICAgICBpZiAocHJvcCBpbiB0YXJnZXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRbcHJvcF0gPT09ICdzdHJpbmcnIHx8IHRhcmdldFtwcm9wXSBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2Ygc291cmNlW3Byb3BdID09PSAnc3RyaW5nJyB8fCBzb3VyY2VbcHJvcF0gaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICBpZiAob3ZlcndyaXRlKSB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVlcEV4dGVuZCh0YXJnZXRbcHJvcF0sIHNvdXJjZVtwcm9wXSwgb3ZlcndyaXRlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiByZWdleEVzY2FwZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXFwtXFxbXFxdXFwvXFx7XFx9XFwoXFwpXFwqXFwrXFw/XFwuXFxcXFxcXlxcJFxcfF0vZywgJ1xcXFwkJicpO1xufVxudmFyIF9lbnRpdHlNYXAgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5OycsXG4gICcvJzogJyYjeDJGOydcbn07XG5mdW5jdGlvbiBlc2NhcGUoZGF0YSkge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvWyY8PlwiJ1xcL10vZywgZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBfZW50aXR5TWFwW3NdO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG52YXIgaXNJRTEwID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnREYXRhID09PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgPiAtMTtcbnZhciBjaGFycyA9IFsnICcsICcsJywgJz8nLCAnIScsICc7J107XG5mdW5jdGlvbiBsb29rc0xpa2VPYmplY3RQYXRoKGtleSwgbnNTZXBhcmF0b3IsIGtleVNlcGFyYXRvcikge1xuICBuc1NlcGFyYXRvciA9IG5zU2VwYXJhdG9yIHx8ICcnO1xuICBrZXlTZXBhcmF0b3IgPSBrZXlTZXBhcmF0b3IgfHwgJyc7XG4gIHZhciBwb3NzaWJsZUNoYXJzID0gY2hhcnMuZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIG5zU2VwYXJhdG9yLmluZGV4T2YoYykgPCAwICYmIGtleVNlcGFyYXRvci5pbmRleE9mKGMpIDwgMDtcbiAgfSk7XG4gIGlmIChwb3NzaWJsZUNoYXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIihcIi5jb25jYXQocG9zc2libGVDaGFycy5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYyA9PT0gJz8nID8gJ1xcXFw/JyA6IGM7XG4gIH0pLmpvaW4oJ3wnKSwgXCIpXCIpKTtcbiAgdmFyIG1hdGNoZWQgPSAhci50ZXN0KGtleSk7XG5cbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgdmFyIGtpID0ga2V5LmluZGV4T2Yoa2V5U2VwYXJhdG9yKTtcblxuICAgIGlmIChraSA+IDAgJiYgIXIudGVzdChrZXkuc3Vic3RyaW5nKDAsIGtpKSkpIHtcbiAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBvd25LZXlzJDEob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDEodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQxKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5X19kZWZhdWx0WydkZWZhdWx0J10odGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQxKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2ZfX2RlZmF1bHRbJ2RlZmF1bHQnXShEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mX19kZWZhdWx0WydkZWZhdWx0J10odGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19kZWZhdWx0WydkZWZhdWx0J10odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gZGVlcEZpbmQob2JqLCBwYXRoKSB7XG4gIHZhciBrZXlTZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICcuJztcbiAgaWYgKCFvYmopIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChvYmpbcGF0aF0pIHJldHVybiBvYmpbcGF0aF07XG4gIHZhciBwYXRocyA9IHBhdGguc3BsaXQoa2V5U2VwYXJhdG9yKTtcbiAgdmFyIGN1cnJlbnQgPSBvYmo7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7ICsraSkge1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2YgY3VycmVudFtwYXRoc1tpXV0gPT09ICdzdHJpbmcnICYmIGkgKyAxIDwgcGF0aHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50W3BhdGhzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgaiA9IDI7XG4gICAgICB2YXIgcCA9IHBhdGhzLnNsaWNlKGksIGkgKyBqKS5qb2luKGtleVNlcGFyYXRvcik7XG4gICAgICB2YXIgbWl4ID0gY3VycmVudFtwXTtcblxuICAgICAgd2hpbGUgKG1peCA9PT0gdW5kZWZpbmVkICYmIHBhdGhzLmxlbmd0aCA+IGkgKyBqKSB7XG4gICAgICAgIGorKztcbiAgICAgICAgcCA9IHBhdGhzLnNsaWNlKGksIGkgKyBqKS5qb2luKGtleVNlcGFyYXRvcik7XG4gICAgICAgIG1peCA9IGN1cnJlbnRbcF07XG4gICAgICB9XG5cbiAgICAgIGlmIChtaXggPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmIChtaXggPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgICBpZiAocGF0aC5lbmRzV2l0aChwKSkge1xuICAgICAgICBpZiAodHlwZW9mIG1peCA9PT0gJ3N0cmluZycpIHJldHVybiBtaXg7XG4gICAgICAgIGlmIChwICYmIHR5cGVvZiBtaXhbcF0gPT09ICdzdHJpbmcnKSByZXR1cm4gbWl4W3BdO1xuICAgICAgfVxuXG4gICAgICB2YXIgam9pbmVkUGF0aCA9IHBhdGhzLnNsaWNlKGkgKyBqKS5qb2luKGtleVNlcGFyYXRvcik7XG4gICAgICBpZiAoam9pbmVkUGF0aCkgcmV0dXJuIGRlZXBGaW5kKG1peCwgam9pbmVkUGF0aCwga2V5U2VwYXJhdG9yKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY3VycmVudCA9IGN1cnJlbnRbcGF0aHNbaV1dO1xuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbnZhciBSZXNvdXJjZVN0b3JlID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzX19kZWZhdWx0WydkZWZhdWx0J10oUmVzb3VyY2VTdG9yZSwgX0V2ZW50RW1pdHRlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihSZXNvdXJjZVN0b3JlKTtcblxuICBmdW5jdGlvbiBSZXNvdXJjZVN0b3JlKGRhdGEpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgbnM6IFsndHJhbnNsYXRpb24nXSxcbiAgICAgIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJ1xuICAgIH07XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2tfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLCBSZXNvdXJjZVN0b3JlKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkX19kZWZhdWx0WydkZWZhdWx0J10oX3RoaXMpKTtcbiAgICB9XG5cbiAgICBfdGhpcy5kYXRhID0gZGF0YSB8fCB7fTtcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmIChfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9ICcuJztcbiAgICB9XG5cbiAgICBpZiAoX3RoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIF90aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzX19kZWZhdWx0WydkZWZhdWx0J10oUmVzb3VyY2VTdG9yZSwgW3tcbiAgICBrZXk6IFwiYWRkTmFtZXNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGROYW1lc3BhY2VzKG5zKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5zLmluZGV4T2YobnMpIDwgMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubnMucHVzaChucyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZU5hbWVzcGFjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlcyhucykge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5vcHRpb25zLm5zLmluZGV4T2YobnMpO1xuXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UmVzb3VyY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVzb3VyY2UobG5nLCBucywga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIHZhciBpZ25vcmVKU09OU3RydWN0dXJlID0gb3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgOiB0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZTtcbiAgICAgIHZhciBwYXRoID0gW2xuZywgbnNdO1xuICAgICAgaWYgKGtleSAmJiB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcGF0aCA9IHBhdGguY29uY2F0KGtleSk7XG4gICAgICBpZiAoa2V5ICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aC5jb25jYXQoa2V5U2VwYXJhdG9yID8ga2V5LnNwbGl0KGtleVNlcGFyYXRvcikgOiBrZXkpO1xuXG4gICAgICBpZiAobG5nLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGggPSBsbmcuc3BsaXQoJy4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IGdldFBhdGgodGhpcy5kYXRhLCBwYXRoKTtcbiAgICAgIGlmIChyZXN1bHQgfHwgIWlnbm9yZUpTT05TdHJ1Y3R1cmUgfHwgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHJldHVybiByZXN1bHQ7XG4gICAgICByZXR1cm4gZGVlcEZpbmQodGhpcy5kYXRhICYmIHRoaXMuZGF0YVtsbmddICYmIHRoaXMuZGF0YVtsbmddW25zXSwga2V5LCBrZXlTZXBhcmF0b3IpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRSZXNvdXJjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRSZXNvdXJjZShsbmcsIG5zLCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge1xuICAgICAgICBzaWxlbnQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdmFyIGtleVNlcGFyYXRvciA9IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG4gICAgICBpZiAoa2V5U2VwYXJhdG9yID09PSB1bmRlZmluZWQpIGtleVNlcGFyYXRvciA9ICcuJztcbiAgICAgIHZhciBwYXRoID0gW2xuZywgbnNdO1xuICAgICAgaWYgKGtleSkgcGF0aCA9IHBhdGguY29uY2F0KGtleVNlcGFyYXRvciA/IGtleS5zcGxpdChrZXlTZXBhcmF0b3IpIDoga2V5KTtcblxuICAgICAgaWYgKGxuZy5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoID0gbG5nLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhbHVlID0gbnM7XG4gICAgICAgIG5zID0gcGF0aFsxXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGROYW1lc3BhY2VzKG5zKTtcbiAgICAgIHNldFBhdGgodGhpcy5kYXRhLCBwYXRoLCB2YWx1ZSk7XG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLmVtaXQoJ2FkZGVkJywgbG5nLCBucywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFJlc291cmNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRSZXNvdXJjZXMobG5nLCBucywgcmVzb3VyY2VzKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge1xuICAgICAgICBzaWxlbnQ6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBtIGluIHJlc291cmNlcykge1xuICAgICAgICBpZiAodHlwZW9mIHJlc291cmNlc1ttXSA9PT0gJ3N0cmluZycgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShyZXNvdXJjZXNbbV0pID09PSAnW29iamVjdCBBcnJheV0nKSB0aGlzLmFkZFJlc291cmNlKGxuZywgbnMsIG0sIHJlc291cmNlc1ttXSwge1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy5lbWl0KCdhZGRlZCcsIGxuZywgbnMsIHJlc291cmNlcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFJlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIHJlc291cmNlcywgZGVlcCwgb3ZlcndyaXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDoge1xuICAgICAgICBzaWxlbnQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdmFyIHBhdGggPSBbbG5nLCBuc107XG5cbiAgICAgIGlmIChsbmcuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aCA9IGxuZy5zcGxpdCgnLicpO1xuICAgICAgICBkZWVwID0gcmVzb3VyY2VzO1xuICAgICAgICByZXNvdXJjZXMgPSBucztcbiAgICAgICAgbnMgPSBwYXRoWzFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFkZE5hbWVzcGFjZXMobnMpO1xuICAgICAgdmFyIHBhY2sgPSBnZXRQYXRoKHRoaXMuZGF0YSwgcGF0aCkgfHwge307XG5cbiAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgIGRlZXBFeHRlbmQocGFjaywgcmVzb3VyY2VzLCBvdmVyd3JpdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFjayA9IF9vYmplY3RTcHJlYWQkMShfb2JqZWN0U3ByZWFkJDEoe30sIHBhY2spLCByZXNvdXJjZXMpO1xuICAgICAgfVxuXG4gICAgICBzZXRQYXRoKHRoaXMuZGF0YSwgcGF0aCwgcGFjayk7XG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLmVtaXQoJ2FkZGVkJywgbG5nLCBucywgcmVzb3VyY2VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlUmVzb3VyY2VCdW5kbGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlUmVzb3VyY2VCdW5kbGUobG5nLCBucykge1xuICAgICAgaWYgKHRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobG5nLCBucykpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZGF0YVtsbmddW25zXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW1vdmVOYW1lc3BhY2VzKG5zKTtcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlZCcsIGxuZywgbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgICBpZiAoIW5zKSBucyA9IHRoaXMub3B0aW9ucy5kZWZhdWx0TlM7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgPT09ICd2MScpIHJldHVybiBfb2JqZWN0U3ByZWFkJDEoX29iamVjdFNwcmVhZCQxKHt9LCB7fSksIHRoaXMuZ2V0UmVzb3VyY2UobG5nLCBucykpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UobG5nLCBucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERhdGFCeUxhbmd1YWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERhdGFCeUxhbmd1YWdlKGxuZykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVtsbmddO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zKGxuZykge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldERhdGFCeUxhbmd1YWdlKGxuZyk7XG4gICAgICB2YXIgbiA9IGRhdGEgJiYgT2JqZWN0LmtleXMoZGF0YSkgfHwgW107XG4gICAgICByZXR1cm4gISFuLmZpbmQoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFbdl0gJiYgT2JqZWN0LmtleXMoZGF0YVt2XSkubGVuZ3RoID4gMDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b0pTT05cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUmVzb3VyY2VTdG9yZTtcbn0oRXZlbnRFbWl0dGVyKTtcblxudmFyIHBvc3RQcm9jZXNzb3IgPSB7XG4gIHByb2Nlc3NvcnM6IHt9LFxuICBhZGRQb3N0UHJvY2Vzc29yOiBmdW5jdGlvbiBhZGRQb3N0UHJvY2Vzc29yKG1vZHVsZSkge1xuICAgIHRoaXMucHJvY2Vzc29yc1ttb2R1bGUubmFtZV0gPSBtb2R1bGU7XG4gIH0sXG4gIGhhbmRsZTogZnVuY3Rpb24gaGFuZGxlKHByb2Nlc3NvcnMsIHZhbHVlLCBrZXksIG9wdGlvbnMsIHRyYW5zbGF0b3IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcHJvY2Vzc29ycy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9jZXNzb3IpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9jZXNzb3JzW3Byb2Nlc3Nvcl0pIHZhbHVlID0gX3RoaXMucHJvY2Vzc29yc1twcm9jZXNzb3JdLnByb2Nlc3ModmFsdWUsIGtleSwgb3B0aW9ucywgdHJhbnNsYXRvcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBvd25LZXlzJDIob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDIodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQyKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5X19kZWZhdWx0WydkZWZhdWx0J10odGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQyKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIkMShEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQxKCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mX19kZWZhdWx0WydkZWZhdWx0J10oRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZl9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQxKCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cbnZhciBjaGVja2VkTG9hZGVkRm9yID0ge307XG5cbnZhciBUcmFuc2xhdG9yID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzX19kZWZhdWx0WydkZWZhdWx0J10oVHJhbnNsYXRvciwgX0V2ZW50RW1pdHRlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlciQxKFRyYW5zbGF0b3IpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zbGF0b3Ioc2VydmljZXMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2tfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLCBUcmFuc2xhdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkX19kZWZhdWx0WydkZWZhdWx0J10oX3RoaXMpKTtcbiAgICB9XG5cbiAgICBjb3B5KFsncmVzb3VyY2VTdG9yZScsICdsYW5ndWFnZVV0aWxzJywgJ3BsdXJhbFJlc29sdmVyJywgJ2ludGVycG9sYXRvcicsICdiYWNrZW5kQ29ubmVjdG9yJywgJ2kxOG5Gb3JtYXQnLCAndXRpbHMnXSwgc2VydmljZXMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRfX2RlZmF1bHRbJ2RlZmF1bHQnXShfdGhpcykpO1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKF90aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIF90aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yID0gJy4nO1xuICAgIH1cblxuICAgIF90aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCd0cmFuc2xhdG9yJyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzX19kZWZhdWx0WydkZWZhdWx0J10oVHJhbnNsYXRvciwgW3tcbiAgICBrZXk6IFwiY2hhbmdlTGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlTGFuZ3VhZ2UobG5nKSB7XG4gICAgICBpZiAobG5nKSB0aGlzLmxhbmd1YWdlID0gbG5nO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleGlzdHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXhpc3RzKGtleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICAgICAgaW50ZXJwb2xhdGlvbjoge31cbiAgICAgIH07XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmUoa2V5LCBvcHRpb25zKTtcbiAgICAgIHJldHVybiByZXNvbHZlZCAmJiByZXNvbHZlZC5yZXMgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXh0cmFjdEZyb21LZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXh0cmFjdEZyb21LZXkoa2V5LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbnNTZXBhcmF0b3IgPSBvcHRpb25zLm5zU2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5zU2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO1xuICAgICAgaWYgKG5zU2VwYXJhdG9yID09PSB1bmRlZmluZWQpIG5zU2VwYXJhdG9yID0gJzonO1xuICAgICAgdmFyIGtleVNlcGFyYXRvciA9IG9wdGlvbnMua2V5U2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmtleVNlcGFyYXRvciA6IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG4gICAgICB2YXIgbmFtZXNwYWNlcyA9IG9wdGlvbnMubnMgfHwgdGhpcy5vcHRpb25zLmRlZmF1bHROUyB8fCBbXTtcbiAgICAgIHZhciB3b3VsZENoZWNrRm9yTnNJbktleSA9IG5zU2VwYXJhdG9yICYmIGtleS5pbmRleE9mKG5zU2VwYXJhdG9yKSA+IC0xO1xuICAgICAgdmFyIHNlZW1zTmF0dXJhbExhbmd1YWdlID0gIXRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvciAmJiAhb3B0aW9ucy5rZXlTZXBhcmF0b3IgJiYgIXRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yICYmICFvcHRpb25zLm5zU2VwYXJhdG9yICYmICFsb29rc0xpa2VPYmplY3RQYXRoKGtleSwgbnNTZXBhcmF0b3IsIGtleVNlcGFyYXRvcik7XG5cbiAgICAgIGlmICh3b3VsZENoZWNrRm9yTnNJbktleSAmJiAhc2VlbXNOYXR1cmFsTGFuZ3VhZ2UpIHtcbiAgICAgICAgdmFyIG0gPSBrZXkubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7XG5cbiAgICAgICAgaWYgKG0gJiYgbS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgbmFtZXNwYWNlczogbmFtZXNwYWNlc1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQobnNTZXBhcmF0b3IpO1xuICAgICAgICBpZiAobnNTZXBhcmF0b3IgIT09IGtleVNlcGFyYXRvciB8fCBuc1NlcGFyYXRvciA9PT0ga2V5U2VwYXJhdG9yICYmIHRoaXMub3B0aW9ucy5ucy5pbmRleE9mKHBhcnRzWzBdKSA+IC0xKSBuYW1lc3BhY2VzID0gcGFydHMuc2hpZnQoKTtcbiAgICAgICAga2V5ID0gcGFydHMuam9pbihrZXlTZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnKSBuYW1lc3BhY2VzID0gW25hbWVzcGFjZXNdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIG5hbWVzcGFjZXM6IG5hbWVzcGFjZXNcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRyYW5zbGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0cmFuc2xhdGUoa2V5cywgb3B0aW9ucywgbGFzdEtleSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmIChfdHlwZW9mX19kZWZhdWx0WydkZWZhdWx0J10ob3B0aW9ucykgIT09ICdvYmplY3QnICYmIHRoaXMub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcikge1xuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKGtleXMgPT09IHVuZGVmaW5lZCB8fCBrZXlzID09PSBudWxsKSByZXR1cm4gJyc7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2V5cykpIGtleXMgPSBbU3RyaW5nKGtleXMpXTtcbiAgICAgIHZhciByZXR1cm5EZXRhaWxzID0gb3B0aW9ucy5yZXR1cm5EZXRhaWxzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnJldHVybkRldGFpbHMgOiB0aGlzLm9wdGlvbnMucmV0dXJuRGV0YWlscztcbiAgICAgIHZhciBrZXlTZXBhcmF0b3IgPSBvcHRpb25zLmtleVNlcGFyYXRvciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5rZXlTZXBhcmF0b3IgOiB0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yO1xuXG4gICAgICB2YXIgX3RoaXMkZXh0cmFjdEZyb21LZXkgPSB0aGlzLmV4dHJhY3RGcm9tS2V5KGtleXNba2V5cy5sZW5ndGggLSAxXSwgb3B0aW9ucyksXG4gICAgICAgICAga2V5ID0gX3RoaXMkZXh0cmFjdEZyb21LZXkua2V5LFxuICAgICAgICAgIG5hbWVzcGFjZXMgPSBfdGhpcyRleHRyYWN0RnJvbUtleS5uYW1lc3BhY2VzO1xuXG4gICAgICB2YXIgbmFtZXNwYWNlID0gbmFtZXNwYWNlc1tuYW1lc3BhY2VzLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIGxuZyA9IG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2U7XG4gICAgICB2YXIgYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGUgPSBvcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlIHx8IHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZTtcblxuICAgICAgaWYgKGxuZyAmJiBsbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHtcbiAgICAgICAgaWYgKGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlKSB7XG4gICAgICAgICAgdmFyIG5zU2VwYXJhdG9yID0gb3B0aW9ucy5uc1NlcGFyYXRvciB8fCB0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7XG5cbiAgICAgICAgICBpZiAocmV0dXJuRGV0YWlscykge1xuICAgICAgICAgICAgcmVzb2x2ZWQucmVzID0gXCJcIi5jb25jYXQobmFtZXNwYWNlKS5jb25jYXQobnNTZXBhcmF0b3IpLmNvbmNhdChrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChuYW1lc3BhY2UpLmNvbmNhdChuc1NlcGFyYXRvcikuY29uY2F0KGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0dXJuRGV0YWlscykge1xuICAgICAgICAgIHJlc29sdmVkLnJlcyA9IGtleTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmUoa2V5cywgb3B0aW9ucyk7XG4gICAgICB2YXIgcmVzID0gcmVzb2x2ZWQgJiYgcmVzb2x2ZWQucmVzO1xuICAgICAgdmFyIHJlc1VzZWRLZXkgPSByZXNvbHZlZCAmJiByZXNvbHZlZC51c2VkS2V5IHx8IGtleTtcbiAgICAgIHZhciByZXNFeGFjdFVzZWRLZXkgPSByZXNvbHZlZCAmJiByZXNvbHZlZC5leGFjdFVzZWRLZXkgfHwga2V5O1xuICAgICAgdmFyIHJlc1R5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHJlcyk7XG4gICAgICB2YXIgbm9PYmplY3QgPSBbJ1tvYmplY3QgTnVtYmVyXScsICdbb2JqZWN0IEZ1bmN0aW9uXScsICdbb2JqZWN0IFJlZ0V4cF0nXTtcbiAgICAgIHZhciBqb2luQXJyYXlzID0gb3B0aW9ucy5qb2luQXJyYXlzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmpvaW5BcnJheXMgOiB0aGlzLm9wdGlvbnMuam9pbkFycmF5cztcbiAgICAgIHZhciBoYW5kbGVBc09iamVjdEluSTE4bkZvcm1hdCA9ICF0aGlzLmkxOG5Gb3JtYXQgfHwgdGhpcy5pMThuRm9ybWF0LmhhbmRsZUFzT2JqZWN0O1xuICAgICAgdmFyIGhhbmRsZUFzT2JqZWN0ID0gdHlwZW9mIHJlcyAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHJlcyAhPT0gJ2Jvb2xlYW4nICYmIHR5cGVvZiByZXMgIT09ICdudW1iZXInO1xuXG4gICAgICBpZiAoaGFuZGxlQXNPYmplY3RJbkkxOG5Gb3JtYXQgJiYgcmVzICYmIGhhbmRsZUFzT2JqZWN0ICYmIG5vT2JqZWN0LmluZGV4T2YocmVzVHlwZSkgPCAwICYmICEodHlwZW9mIGpvaW5BcnJheXMgPT09ICdzdHJpbmcnICYmIHJlc1R5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5yZXR1cm5PYmplY3RzICYmICF0aGlzLm9wdGlvbnMucmV0dXJuT2JqZWN0cykge1xuICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignYWNjZXNzaW5nIGFuIG9iamVjdCAtIGJ1dCByZXR1cm5PYmplY3RzIG9wdGlvbnMgaXMgbm90IGVuYWJsZWQhJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHIgPSB0aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyID8gdGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcihyZXNVc2VkS2V5LCByZXMsIF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgICAgbnM6IG5hbWVzcGFjZXNcbiAgICAgICAgICB9KSkgOiBcImtleSAnXCIuY29uY2F0KGtleSwgXCIgKFwiKS5jb25jYXQodGhpcy5sYW5ndWFnZSwgXCIpJyByZXR1cm5lZCBhbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcuXCIpO1xuXG4gICAgICAgICAgaWYgKHJldHVybkRldGFpbHMpIHtcbiAgICAgICAgICAgIHJlc29sdmVkLnJlcyA9IHI7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5U2VwYXJhdG9yKSB7XG4gICAgICAgICAgdmFyIHJlc1R5cGVJc0FycmF5ID0gcmVzVHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgICB2YXIgY29weSA9IHJlc1R5cGVJc0FycmF5ID8gW10gOiB7fTtcbiAgICAgICAgICB2YXIgbmV3S2V5VG9Vc2UgPSByZXNUeXBlSXNBcnJheSA/IHJlc0V4YWN0VXNlZEtleSA6IHJlc1VzZWRLZXk7XG5cbiAgICAgICAgICBmb3IgKHZhciBtIGluIHJlcykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsIG0pKSB7XG4gICAgICAgICAgICAgIHZhciBkZWVwS2V5ID0gXCJcIi5jb25jYXQobmV3S2V5VG9Vc2UpLmNvbmNhdChrZXlTZXBhcmF0b3IpLmNvbmNhdChtKTtcbiAgICAgICAgICAgICAgY29weVttXSA9IHRoaXMudHJhbnNsYXRlKGRlZXBLZXksIF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIG9wdGlvbnMpLCB7XG4gICAgICAgICAgICAgICAgam9pbkFycmF5czogZmFsc2UsXG4gICAgICAgICAgICAgICAgbnM6IG5hbWVzcGFjZXNcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAoY29weVttXSA9PT0gZGVlcEtleSkgY29weVttXSA9IHJlc1ttXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXMgPSBjb3B5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZUFzT2JqZWN0SW5JMThuRm9ybWF0ICYmIHR5cGVvZiBqb2luQXJyYXlzID09PSAnc3RyaW5nJyAmJiByZXNUeXBlID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgIHJlcyA9IHJlcy5qb2luKGpvaW5BcnJheXMpO1xuICAgICAgICBpZiAocmVzKSByZXMgPSB0aGlzLmV4dGVuZFRyYW5zbGF0aW9uKHJlcywga2V5cywgb3B0aW9ucywgbGFzdEtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdXNlZERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgdmFyIHVzZWRLZXkgPSBmYWxzZTtcbiAgICAgICAgdmFyIG5lZWRzUGx1cmFsSGFuZGxpbmcgPSBvcHRpb25zLmNvdW50ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY291bnQgIT09ICdzdHJpbmcnO1xuICAgICAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gVHJhbnNsYXRvci5oYXNEZWZhdWx0VmFsdWUob3B0aW9ucyk7XG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWVTdWZmaXggPSBuZWVkc1BsdXJhbEhhbmRsaW5nID8gdGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgobG5nLCBvcHRpb25zLmNvdW50LCBvcHRpb25zKSA6ICcnO1xuICAgICAgICB2YXIgZGVmYXVsdFZhbHVlID0gb3B0aW9uc1tcImRlZmF1bHRWYWx1ZVwiLmNvbmNhdChkZWZhdWx0VmFsdWVTdWZmaXgpXSB8fCBvcHRpb25zLmRlZmF1bHRWYWx1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZExvb2t1cChyZXMpICYmIGhhc0RlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgIHVzZWREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICByZXMgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZExvb2t1cChyZXMpKSB7XG4gICAgICAgICAgdXNlZEtleSA9IHRydWU7XG4gICAgICAgICAgcmVzID0ga2V5O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleSA9IG9wdGlvbnMubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5IHx8IHRoaXMub3B0aW9ucy5taXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXk7XG4gICAgICAgIHZhciByZXNGb3JNaXNzaW5nID0gbWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5ICYmIHVzZWRLZXkgPyB1bmRlZmluZWQgOiByZXM7XG4gICAgICAgIHZhciB1cGRhdGVNaXNzaW5nID0gaGFzRGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZSAhPT0gcmVzICYmIHRoaXMub3B0aW9ucy51cGRhdGVNaXNzaW5nO1xuXG4gICAgICAgIGlmICh1c2VkS2V5IHx8IHVzZWREZWZhdWx0IHx8IHVwZGF0ZU1pc3NpbmcpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5sb2codXBkYXRlTWlzc2luZyA/ICd1cGRhdGVLZXknIDogJ21pc3NpbmdLZXknLCBsbmcsIG5hbWVzcGFjZSwga2V5LCB1cGRhdGVNaXNzaW5nID8gZGVmYXVsdFZhbHVlIDogcmVzKTtcblxuICAgICAgICAgIGlmIChrZXlTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciBmayA9IHRoaXMucmVzb2x2ZShrZXksIF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgICAgICBrZXlTZXBhcmF0b3I6IGZhbHNlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBpZiAoZmsgJiYgZmsucmVzKSB0aGlzLmxvZ2dlci53YXJuKCdTZWVtcyB0aGUgbG9hZGVkIHRyYW5zbGF0aW9ucyB3ZXJlIGluIGZsYXQgSlNPTiBmb3JtYXQgaW5zdGVhZCBvZiBuZXN0ZWQuIEVpdGhlciBzZXQga2V5U2VwYXJhdG9yOiBmYWxzZSBvbiBpbml0IG9yIG1ha2Ugc3VyZSB5b3VyIHRyYW5zbGF0aW9ucyBhcmUgcHVibGlzaGVkIGluIG5lc3RlZCBmb3JtYXQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGxuZ3MgPSBbXTtcbiAgICAgICAgICB2YXIgZmFsbGJhY2tMbmdzID0gdGhpcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLCBvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlKTtcblxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbyA9PT0gJ2ZhbGxiYWNrJyAmJiBmYWxsYmFja0xuZ3MgJiYgZmFsbGJhY2tMbmdzWzBdKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhbGxiYWNrTG5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBsbmdzLnB1c2goZmFsbGJhY2tMbmdzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvID09PSAnYWxsJykge1xuICAgICAgICAgICAgbG5ncyA9IHRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkob3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxuZ3MucHVzaChvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc2VuZCA9IGZ1bmN0aW9uIHNlbmQobCwgaywgc3BlY2lmaWNEZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0Rm9yTWlzc2luZyA9IGhhc0RlZmF1bHRWYWx1ZSAmJiBzcGVjaWZpY0RlZmF1bHRWYWx1ZSAhPT0gcmVzID8gc3BlY2lmaWNEZWZhdWx0VmFsdWUgOiByZXNGb3JNaXNzaW5nO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMyLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgX3RoaXMyLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXIobCwgbmFtZXNwYWNlLCBrLCBkZWZhdWx0Rm9yTWlzc2luZywgdXBkYXRlTWlzc2luZywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzMi5iYWNrZW5kQ29ubmVjdG9yICYmIF90aGlzMi5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKSB7XG4gICAgICAgICAgICAgIF90aGlzMi5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKGwsIG5hbWVzcGFjZSwgaywgZGVmYXVsdEZvck1pc3NpbmcsIHVwZGF0ZU1pc3NpbmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfdGhpczIuZW1pdCgnbWlzc2luZ0tleScsIGwsIG5hbWVzcGFjZSwgaywgcmVzKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZykge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1BsdXJhbHMgJiYgbmVlZHNQbHVyYWxIYW5kbGluZykge1xuICAgICAgICAgICAgICBsbmdzLmZvckVhY2goZnVuY3Rpb24gKGxhbmd1YWdlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeGVzKGxhbmd1YWdlLCBvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgIHNlbmQoW2xhbmd1YWdlXSwga2V5ICsgc3VmZml4LCBvcHRpb25zW1wiZGVmYXVsdFZhbHVlXCIuY29uY2F0KHN1ZmZpeCldIHx8IGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VuZChsbmdzLCBrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzID0gdGhpcy5leHRlbmRUcmFuc2xhdGlvbihyZXMsIGtleXMsIG9wdGlvbnMsIHJlc29sdmVkLCBsYXN0S2V5KTtcbiAgICAgICAgaWYgKHVzZWRLZXkgJiYgcmVzID09PSBrZXkgJiYgdGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSkgcmVzID0gXCJcIi5jb25jYXQobmFtZXNwYWNlLCBcIjpcIikuY29uY2F0KGtleSk7XG5cbiAgICAgICAgaWYgKCh1c2VkS2V5IHx8IHVzZWREZWZhdWx0KSAmJiB0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcikge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSAhPT0gJ3YxJykge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIodGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSA/IFwiXCIuY29uY2F0KG5hbWVzcGFjZSwgXCI6XCIpLmNvbmNhdChrZXkpIDoga2V5LCB1c2VkRGVmYXVsdCA/IHJlcyA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5EZXRhaWxzKSB7XG4gICAgICAgIHJlc29sdmVkLnJlcyA9IHJlcztcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleHRlbmRUcmFuc2xhdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBleHRlbmRUcmFuc2xhdGlvbihyZXMsIGtleSwgb3B0aW9ucywgcmVzb2x2ZWQsIGxhc3RLZXkpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5pMThuRm9ybWF0ICYmIHRoaXMuaTE4bkZvcm1hdC5wYXJzZSkge1xuICAgICAgICByZXMgPSB0aGlzLmkxOG5Gb3JtYXQucGFyc2UocmVzLCBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzKSwgb3B0aW9ucyksIHJlc29sdmVkLnVzZWRMbmcsIHJlc29sdmVkLnVzZWROUywgcmVzb2x2ZWQudXNlZEtleSwge1xuICAgICAgICAgIHJlc29sdmVkOiByZXNvbHZlZFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuc2tpcEludGVycG9sYXRpb24pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJwb2xhdGlvbikgdGhpcy5pbnRlcnBvbGF0b3IuaW5pdChfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCBvcHRpb25zKSwge1xuICAgICAgICAgIGludGVycG9sYXRpb246IF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uKSwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uKVxuICAgICAgICB9KSk7XG4gICAgICAgIHZhciBza2lwT25WYXJpYWJsZXMgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyAmJiAob3B0aW9ucyAmJiBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyA6IHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyk7XG4gICAgICAgIHZhciBuZXN0QmVmO1xuXG4gICAgICAgIGlmIChza2lwT25WYXJpYWJsZXMpIHtcbiAgICAgICAgICB2YXIgbmIgPSByZXMubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7XG4gICAgICAgICAgbmVzdEJlZiA9IG5iICYmIG5iLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5yZXBsYWNlICYmIHR5cGVvZiBvcHRpb25zLnJlcGxhY2UgIT09ICdzdHJpbmcnID8gb3B0aW9ucy5yZXBsYWNlIDogb3B0aW9ucztcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMpIGRhdGEgPSBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzKSwgZGF0YSk7XG4gICAgICAgIHJlcyA9IHRoaXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKHJlcywgZGF0YSwgb3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHNraXBPblZhcmlhYmxlcykge1xuICAgICAgICAgIHZhciBuYSA9IHJlcy5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtcbiAgICAgICAgICB2YXIgbmVzdEFmdCA9IG5hICYmIG5hLmxlbmd0aDtcbiAgICAgICAgICBpZiAobmVzdEJlZiA8IG5lc3RBZnQpIG9wdGlvbnMubmVzdCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubmVzdCAhPT0gZmFsc2UpIHJlcyA9IHRoaXMuaW50ZXJwb2xhdG9yLm5lc3QocmVzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChsYXN0S2V5ICYmIGxhc3RLZXlbMF0gPT09IGFyZ3NbMF0gJiYgIW9wdGlvbnMuY29udGV4dCkge1xuICAgICAgICAgICAgX3RoaXMzLmxvZ2dlci53YXJuKFwiSXQgc2VlbXMgeW91IGFyZSBuZXN0aW5nIHJlY3Vyc2l2ZWx5IGtleTogXCIuY29uY2F0KGFyZ3NbMF0sIFwiIGluIGtleTogXCIpLmNvbmNhdChrZXlbMF0pKTtcblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF90aGlzMy50cmFuc2xhdGUuYXBwbHkoX3RoaXMzLCBhcmdzLmNvbmNhdChba2V5XSkpO1xuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJwb2xhdGlvbikgdGhpcy5pbnRlcnBvbGF0b3IucmVzZXQoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvc3RQcm9jZXNzID0gb3B0aW9ucy5wb3N0UHJvY2VzcyB8fCB0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3M7XG4gICAgICB2YXIgcG9zdFByb2Nlc3Nvck5hbWVzID0gdHlwZW9mIHBvc3RQcm9jZXNzID09PSAnc3RyaW5nJyA/IFtwb3N0UHJvY2Vzc10gOiBwb3N0UHJvY2VzcztcblxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkICYmIHJlcyAhPT0gbnVsbCAmJiBwb3N0UHJvY2Vzc29yTmFtZXMgJiYgcG9zdFByb2Nlc3Nvck5hbWVzLmxlbmd0aCAmJiBvcHRpb25zLmFwcGx5UG9zdFByb2Nlc3NvciAhPT0gZmFsc2UpIHtcbiAgICAgICAgcmVzID0gcG9zdFByb2Nlc3Nvci5oYW5kbGUocG9zdFByb2Nlc3Nvck5hbWVzLCByZXMsIGtleSwgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZCA/IF9vYmplY3RTcHJlYWQkMih7XG4gICAgICAgICAgaTE4blJlc29sdmVkOiByZXNvbHZlZFxuICAgICAgICB9LCBvcHRpb25zKSA6IG9wdGlvbnMsIHRoaXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZXNvbHZlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc29sdmUoa2V5cykge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBmb3VuZDtcbiAgICAgIHZhciB1c2VkS2V5O1xuICAgICAgdmFyIGV4YWN0VXNlZEtleTtcbiAgICAgIHZhciB1c2VkTG5nO1xuICAgICAgdmFyIHVzZWROUztcbiAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ3N0cmluZycpIGtleXMgPSBba2V5c107XG4gICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKF90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBleHRyYWN0ZWQgPSBfdGhpczQuZXh0cmFjdEZyb21LZXkoaywgb3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIGtleSA9IGV4dHJhY3RlZC5rZXk7XG4gICAgICAgIHVzZWRLZXkgPSBrZXk7XG4gICAgICAgIHZhciBuYW1lc3BhY2VzID0gZXh0cmFjdGVkLm5hbWVzcGFjZXM7XG4gICAgICAgIGlmIChfdGhpczQub3B0aW9ucy5mYWxsYmFja05TKSBuYW1lc3BhY2VzID0gbmFtZXNwYWNlcy5jb25jYXQoX3RoaXM0Lm9wdGlvbnMuZmFsbGJhY2tOUyk7XG4gICAgICAgIHZhciBuZWVkc1BsdXJhbEhhbmRsaW5nID0gb3B0aW9ucy5jb3VudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmNvdW50ICE9PSAnc3RyaW5nJztcblxuICAgICAgICB2YXIgbmVlZHNaZXJvU3VmZml4TG9va3VwID0gbmVlZHNQbHVyYWxIYW5kbGluZyAmJiAhb3B0aW9ucy5vcmRpbmFsICYmIG9wdGlvbnMuY291bnQgPT09IDAgJiYgX3RoaXM0LnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKTtcblxuICAgICAgICB2YXIgbmVlZHNDb250ZXh0SGFuZGxpbmcgPSBvcHRpb25zLmNvbnRleHQgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ251bWJlcicpICYmIG9wdGlvbnMuY29udGV4dCAhPT0gJyc7XG4gICAgICAgIHZhciBjb2RlcyA9IG9wdGlvbnMubG5ncyA/IG9wdGlvbnMubG5ncyA6IF90aGlzNC5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShvcHRpb25zLmxuZyB8fCBfdGhpczQubGFuZ3VhZ2UsIG9wdGlvbnMuZmFsbGJhY2tMbmcpO1xuICAgICAgICBuYW1lc3BhY2VzLmZvckVhY2goZnVuY3Rpb24gKG5zKSB7XG4gICAgICAgICAgaWYgKF90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkgcmV0dXJuO1xuICAgICAgICAgIHVzZWROUyA9IG5zO1xuXG4gICAgICAgICAgaWYgKCFjaGVja2VkTG9hZGVkRm9yW1wiXCIuY29uY2F0KGNvZGVzWzBdLCBcIi1cIikuY29uY2F0KG5zKV0gJiYgX3RoaXM0LnV0aWxzICYmIF90aGlzNC51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UgJiYgIV90aGlzNC51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UodXNlZE5TKSkge1xuICAgICAgICAgICAgY2hlY2tlZExvYWRlZEZvcltcIlwiLmNvbmNhdChjb2Rlc1swXSwgXCItXCIpLmNvbmNhdChucyldID0gdHJ1ZTtcblxuICAgICAgICAgICAgX3RoaXM0LmxvZ2dlci53YXJuKFwia2V5IFxcXCJcIi5jb25jYXQodXNlZEtleSwgXCJcXFwiIGZvciBsYW5ndWFnZXMgXFxcIlwiKS5jb25jYXQoY29kZXMuam9pbignLCAnKSwgXCJcXFwiIHdvbid0IGdldCByZXNvbHZlZCBhcyBuYW1lc3BhY2UgXFxcIlwiKS5jb25jYXQodXNlZE5TLCBcIlxcXCIgd2FzIG5vdCB5ZXQgbG9hZGVkXCIpLCAnVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29kZXMuZm9yRWFjaChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICAgICAgaWYgKF90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkgcmV0dXJuO1xuICAgICAgICAgICAgdXNlZExuZyA9IGNvZGU7XG4gICAgICAgICAgICB2YXIgZmluYWxLZXlzID0gW2tleV07XG5cbiAgICAgICAgICAgIGlmIChfdGhpczQuaTE4bkZvcm1hdCAmJiBfdGhpczQuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKSB7XG4gICAgICAgICAgICAgIF90aGlzNC5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMoZmluYWxLZXlzLCBrZXksIGNvZGUsIG5zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBwbHVyYWxTdWZmaXg7XG4gICAgICAgICAgICAgIGlmIChuZWVkc1BsdXJhbEhhbmRsaW5nKSBwbHVyYWxTdWZmaXggPSBfdGhpczQucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KGNvZGUsIG9wdGlvbnMuY291bnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB2YXIgemVyb1N1ZmZpeCA9IFwiXCIuY29uY2F0KF90aGlzNC5vcHRpb25zLnBsdXJhbFNlcGFyYXRvciwgXCJ6ZXJvXCIpO1xuXG4gICAgICAgICAgICAgIGlmIChuZWVkc1BsdXJhbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goa2V5ICsgcGx1cmFsU3VmZml4KTtcblxuICAgICAgICAgICAgICAgIGlmIChuZWVkc1plcm9TdWZmaXhMb29rdXApIHtcbiAgICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGtleSArIHplcm9TdWZmaXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChuZWVkc0NvbnRleHRIYW5kbGluZykge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0S2V5ID0gXCJcIi5jb25jYXQoa2V5KS5jb25jYXQoX3RoaXM0Lm9wdGlvbnMuY29udGV4dFNlcGFyYXRvcikuY29uY2F0KG9wdGlvbnMuY29udGV4dCk7XG4gICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goY29udGV4dEtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmVlZHNQbHVyYWxIYW5kbGluZykge1xuICAgICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goY29udGV4dEtleSArIHBsdXJhbFN1ZmZpeCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChuZWVkc1plcm9TdWZmaXhMb29rdXApIHtcbiAgICAgICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goY29udGV4dEtleSArIHplcm9TdWZmaXgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcG9zc2libGVLZXk7XG5cbiAgICAgICAgICAgIHdoaWxlIChwb3NzaWJsZUtleSA9IGZpbmFsS2V5cy5wb3AoKSkge1xuICAgICAgICAgICAgICBpZiAoIV90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkge1xuICAgICAgICAgICAgICAgIGV4YWN0VXNlZEtleSA9IHBvc3NpYmxlS2V5O1xuICAgICAgICAgICAgICAgIGZvdW5kID0gX3RoaXM0LmdldFJlc291cmNlKGNvZGUsIG5zLCBwb3NzaWJsZUtleSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlczogZm91bmQsXG4gICAgICAgIHVzZWRLZXk6IHVzZWRLZXksXG4gICAgICAgIGV4YWN0VXNlZEtleTogZXhhY3RVc2VkS2V5LFxuICAgICAgICB1c2VkTG5nOiB1c2VkTG5nLFxuICAgICAgICB1c2VkTlM6IHVzZWROU1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNWYWxpZExvb2t1cFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkTG9va3VwKHJlcykge1xuICAgICAgcmV0dXJuIHJlcyAhPT0gdW5kZWZpbmVkICYmICEoIXRoaXMub3B0aW9ucy5yZXR1cm5OdWxsICYmIHJlcyA9PT0gbnVsbCkgJiYgISghdGhpcy5vcHRpb25zLnJldHVybkVtcHR5U3RyaW5nICYmIHJlcyA9PT0gJycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZXNvdXJjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNvdXJjZShjb2RlLCBucywga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgICBpZiAodGhpcy5pMThuRm9ybWF0ICYmIHRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZSkgcmV0dXJuIHRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZShjb2RlLCBucywga2V5LCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RvcmUuZ2V0UmVzb3VyY2UoY29kZSwgbnMsIGtleSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiaGFzRGVmYXVsdFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0RlZmF1bHRWYWx1ZShvcHRpb25zKSB7XG4gICAgICB2YXIgcHJlZml4ID0gJ2RlZmF1bHRWYWx1ZSc7XG5cbiAgICAgIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgb3B0aW9uKSAmJiBwcmVmaXggPT09IG9wdGlvbi5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCkgJiYgdW5kZWZpbmVkICE9PSBvcHRpb25zW29wdGlvbl0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRyYW5zbGF0b3I7XG59KEV2ZW50RW1pdHRlcik7XG5cbmZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59XG5cbnZhciBMYW5ndWFnZVV0aWwgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExhbmd1YWdlVXRpbChvcHRpb25zKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrX19kZWZhdWx0WydkZWZhdWx0J10odGhpcywgTGFuZ3VhZ2VVdGlsKTtcblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zdXBwb3J0ZWRMbmdzID0gdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MgfHwgZmFsc2U7XG4gICAgdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgnbGFuZ3VhZ2VVdGlscycpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzX19kZWZhdWx0WydkZWZhdWx0J10oTGFuZ3VhZ2VVdGlsLCBbe1xuICAgIGtleTogXCJnZXRTY3JpcHRQYXJ0RnJvbUNvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpIHtcbiAgICAgIGlmICghY29kZSB8fCBjb2RlLmluZGV4T2YoJy0nKSA8IDApIHJldHVybiBudWxsO1xuICAgICAgdmFyIHAgPSBjb2RlLnNwbGl0KCctJyk7XG4gICAgICBpZiAocC5sZW5ndGggPT09IDIpIHJldHVybiBudWxsO1xuICAgICAgcC5wb3AoKTtcbiAgICAgIGlmIChwW3AubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKSA9PT0gJ3gnKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShwLmpvaW4oJy0nKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldExhbmd1YWdlUGFydEZyb21Db2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpIHtcbiAgICAgIGlmICghY29kZSB8fCBjb2RlLmluZGV4T2YoJy0nKSA8IDApIHJldHVybiBjb2RlO1xuICAgICAgdmFyIHAgPSBjb2RlLnNwbGl0KCctJyk7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUocFswXSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvcm1hdExhbmd1YWdlQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRMYW5ndWFnZUNvZGUoY29kZSkge1xuICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJyAmJiBjb2RlLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgIHZhciBzcGVjaWFsQ2FzZXMgPSBbJ2hhbnMnLCAnaGFudCcsICdsYXRuJywgJ2N5cmwnLCAnY2FucycsICdtb25nJywgJ2FyYWInXTtcbiAgICAgICAgdmFyIHAgPSBjb2RlLnNwbGl0KCctJyk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmcpIHtcbiAgICAgICAgICBwID0gcC5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBwWzBdID0gcFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHBbMV0gPSBwWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHNwZWNpYWxDYXNlcy5pbmRleE9mKHBbMV0udG9Mb3dlckNhc2UoKSkgPiAtMSkgcFsxXSA9IGNhcGl0YWxpemUocFsxXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChwLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgIHBbMF0gPSBwWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHBbMV0ubGVuZ3RoID09PSAyKSBwWzFdID0gcFsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGlmIChwWzBdICE9PSAnc2duJyAmJiBwWzJdLmxlbmd0aCA9PT0gMikgcFsyXSA9IHBbMl0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBpZiAoc3BlY2lhbENhc2VzLmluZGV4T2YocFsxXS50b0xvd2VyQ2FzZSgpKSA+IC0xKSBwWzFdID0gY2FwaXRhbGl6ZShwWzFdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGlmIChzcGVjaWFsQ2FzZXMuaW5kZXhPZihwWzJdLnRvTG93ZXJDYXNlKCkpID4gLTEpIHBbMl0gPSBjYXBpdGFsaXplKHBbMl0udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcC5qb2luKCctJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY2xlYW5Db2RlIHx8IHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmcgPyBjb2RlLnRvTG93ZXJDYXNlKCkgOiBjb2RlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc1N1cHBvcnRlZENvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNTdXBwb3J0ZWRDb2RlKGNvZGUpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCA9PT0gJ2xhbmd1YWdlT25seScgfHwgdGhpcy5vcHRpb25zLm5vbkV4cGxpY2l0U3VwcG9ydGVkTG5ncykge1xuICAgICAgICBjb2RlID0gdGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICF0aGlzLnN1cHBvcnRlZExuZ3MgfHwgIXRoaXMuc3VwcG9ydGVkTG5ncy5sZW5ndGggfHwgdGhpcy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoY29kZSkgPiAtMTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0QmVzdE1hdGNoRnJvbUNvZGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJlc3RNYXRjaEZyb21Db2Rlcyhjb2Rlcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCFjb2RlcykgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgZm91bmQ7XG4gICAgICBjb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBjbGVhbmVkTG5nID0gX3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGNvZGUpO1xuXG4gICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzIHx8IF90aGlzLmlzU3VwcG9ydGVkQ29kZShjbGVhbmVkTG5nKSkgZm91bmQgPSBjbGVhbmVkTG5nO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghZm91bmQgJiYgdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MpIHtcbiAgICAgICAgY29kZXMuZm9yRWFjaChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICAgIGlmIChmb3VuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdmFyIGxuZ09ubHkgPSBfdGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5pc1N1cHBvcnRlZENvZGUobG5nT25seSkpIHJldHVybiBmb3VuZCA9IGxuZ09ubHk7XG4gICAgICAgICAgZm91bmQgPSBfdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MuZmluZChmdW5jdGlvbiAoc3VwcG9ydGVkTG5nKSB7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydGVkTG5nLmluZGV4T2YobG5nT25seSkgPT09IDApIHJldHVybiBzdXBwb3J0ZWRMbmc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZvdW5kKSBmb3VuZCA9IHRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpWzBdO1xuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRGYWxsYmFja0NvZGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZhbGxiYWNrQ29kZXMoZmFsbGJhY2tzLCBjb2RlKSB7XG4gICAgICBpZiAoIWZhbGxiYWNrcykgcmV0dXJuIFtdO1xuICAgICAgaWYgKHR5cGVvZiBmYWxsYmFja3MgPT09ICdmdW5jdGlvbicpIGZhbGxiYWNrcyA9IGZhbGxiYWNrcyhjb2RlKTtcbiAgICAgIGlmICh0eXBlb2YgZmFsbGJhY2tzID09PSAnc3RyaW5nJykgZmFsbGJhY2tzID0gW2ZhbGxiYWNrc107XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShmYWxsYmFja3MpID09PSAnW29iamVjdCBBcnJheV0nKSByZXR1cm4gZmFsbGJhY2tzO1xuICAgICAgaWYgKCFjb2RlKSByZXR1cm4gZmFsbGJhY2tzW1wiZGVmYXVsdFwiXSB8fCBbXTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbGxiYWNrc1tjb2RlXTtcbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gZmFsbGJhY2tzW3RoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpXTtcbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gZmFsbGJhY2tzW3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGNvZGUpXTtcbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gZmFsbGJhY2tzW3RoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbXCJkZWZhdWx0XCJdO1xuICAgICAgcmV0dXJuIGZvdW5kIHx8IFtdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b1Jlc29sdmVIaWVyYXJjaHlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9SZXNvbHZlSGllcmFyY2h5KGNvZGUsIGZhbGxiYWNrQ29kZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBmYWxsYmFja0NvZGVzID0gdGhpcy5nZXRGYWxsYmFja0NvZGVzKGZhbGxiYWNrQ29kZSB8fCB0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcgfHwgW10sIGNvZGUpO1xuICAgICAgdmFyIGNvZGVzID0gW107XG5cbiAgICAgIHZhciBhZGRDb2RlID0gZnVuY3Rpb24gYWRkQ29kZShjKSB7XG4gICAgICAgIGlmICghYykgcmV0dXJuO1xuXG4gICAgICAgIGlmIChfdGhpczIuaXNTdXBwb3J0ZWRDb2RlKGMpKSB7XG4gICAgICAgICAgY29kZXMucHVzaChjKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczIubG9nZ2VyLndhcm4oXCJyZWplY3RpbmcgbGFuZ3VhZ2UgY29kZSBub3QgZm91bmQgaW4gc3VwcG9ydGVkTG5nczogXCIuY29uY2F0KGMpKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJyAmJiBjb2RlLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCAhPT0gJ2xhbmd1YWdlT25seScpIGFkZENvZGUodGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSkpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvYWQgIT09ICdsYW5ndWFnZU9ubHknICYmIHRoaXMub3B0aW9ucy5sb2FkICE9PSAnY3VycmVudE9ubHknKSBhZGRDb2RlKHRoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkICE9PSAnY3VycmVudE9ubHknKSBhZGRDb2RlKHRoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYWRkQ29kZSh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIGZhbGxiYWNrQ29kZXMuZm9yRWFjaChmdW5jdGlvbiAoZmMpIHtcbiAgICAgICAgaWYgKGNvZGVzLmluZGV4T2YoZmMpIDwgMCkgYWRkQ29kZShfdGhpczIuZm9ybWF0TGFuZ3VhZ2VDb2RlKGZjKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2RlcztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTGFuZ3VhZ2VVdGlsO1xufSgpO1xuXG52YXIgc2V0cyA9IFt7XG4gIGxuZ3M6IFsnYWNoJywgJ2FrJywgJ2FtJywgJ2FybicsICdicicsICdmaWwnLCAnZ3VuJywgJ2xuJywgJ21mZScsICdtZycsICdtaScsICdvYycsICdwdCcsICdwdC1CUicsICd0ZycsICd0bCcsICd0aScsICd0cicsICd1eicsICd3YSddLFxuICBucjogWzEsIDJdLFxuICBmYzogMVxufSwge1xuICBsbmdzOiBbJ2FmJywgJ2FuJywgJ2FzdCcsICdheicsICdiZycsICdibicsICdjYScsICdkYScsICdkZScsICdkZXYnLCAnZWwnLCAnZW4nLCAnZW8nLCAnZXMnLCAnZXQnLCAnZXUnLCAnZmknLCAnZm8nLCAnZnVyJywgJ2Z5JywgJ2dsJywgJ2d1JywgJ2hhJywgJ2hpJywgJ2h1JywgJ2h5JywgJ2lhJywgJ2l0JywgJ2trJywgJ2tuJywgJ2t1JywgJ2xiJywgJ21haScsICdtbCcsICdtbicsICdtcicsICduYWgnLCAnbmFwJywgJ25iJywgJ25lJywgJ25sJywgJ25uJywgJ25vJywgJ25zbycsICdwYScsICdwYXAnLCAncG1zJywgJ3BzJywgJ3B0LVBUJywgJ3JtJywgJ3NjbycsICdzZScsICdzaScsICdzbycsICdzb24nLCAnc3EnLCAnc3YnLCAnc3cnLCAndGEnLCAndGUnLCAndGsnLCAndXInLCAneW8nXSxcbiAgbnI6IFsxLCAyXSxcbiAgZmM6IDJcbn0sIHtcbiAgbG5nczogWydheScsICdibycsICdjZ2cnLCAnZmEnLCAnaHQnLCAnaWQnLCAnamEnLCAnamJvJywgJ2thJywgJ2ttJywgJ2tvJywgJ2t5JywgJ2xvJywgJ21zJywgJ3NhaCcsICdzdScsICd0aCcsICd0dCcsICd1ZycsICd2aScsICd3bycsICd6aCddLFxuICBucjogWzFdLFxuICBmYzogM1xufSwge1xuICBsbmdzOiBbJ2JlJywgJ2JzJywgJ2NucicsICdkeicsICdocicsICdydScsICdzcicsICd1ayddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogNFxufSwge1xuICBsbmdzOiBbJ2FyJ10sXG4gIG5yOiBbMCwgMSwgMiwgMywgMTEsIDEwMF0sXG4gIGZjOiA1XG59LCB7XG4gIGxuZ3M6IFsnY3MnLCAnc2snXSxcbiAgbnI6IFsxLCAyLCA1XSxcbiAgZmM6IDZcbn0sIHtcbiAgbG5nczogWydjc2InLCAncGwnXSxcbiAgbnI6IFsxLCAyLCA1XSxcbiAgZmM6IDdcbn0sIHtcbiAgbG5nczogWydjeSddLFxuICBucjogWzEsIDIsIDMsIDhdLFxuICBmYzogOFxufSwge1xuICBsbmdzOiBbJ2ZyJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiA5XG59LCB7XG4gIGxuZ3M6IFsnZ2EnXSxcbiAgbnI6IFsxLCAyLCAzLCA3LCAxMV0sXG4gIGZjOiAxMFxufSwge1xuICBsbmdzOiBbJ2dkJ10sXG4gIG5yOiBbMSwgMiwgMywgMjBdLFxuICBmYzogMTFcbn0sIHtcbiAgbG5nczogWydpcyddLFxuICBucjogWzEsIDJdLFxuICBmYzogMTJcbn0sIHtcbiAgbG5nczogWydqdiddLFxuICBucjogWzAsIDFdLFxuICBmYzogMTNcbn0sIHtcbiAgbG5nczogWydrdyddLFxuICBucjogWzEsIDIsIDMsIDRdLFxuICBmYzogMTRcbn0sIHtcbiAgbG5nczogWydsdCddLFxuICBucjogWzEsIDIsIDEwXSxcbiAgZmM6IDE1XG59LCB7XG4gIGxuZ3M6IFsnbHYnXSxcbiAgbnI6IFsxLCAyLCAwXSxcbiAgZmM6IDE2XG59LCB7XG4gIGxuZ3M6IFsnbWsnXSxcbiAgbnI6IFsxLCAyXSxcbiAgZmM6IDE3XG59LCB7XG4gIGxuZ3M6IFsnbW5rJ10sXG4gIG5yOiBbMCwgMSwgMl0sXG4gIGZjOiAxOFxufSwge1xuICBsbmdzOiBbJ210J10sXG4gIG5yOiBbMSwgMiwgMTEsIDIwXSxcbiAgZmM6IDE5XG59LCB7XG4gIGxuZ3M6IFsnb3InXSxcbiAgbnI6IFsyLCAxXSxcbiAgZmM6IDJcbn0sIHtcbiAgbG5nczogWydybyddLFxuICBucjogWzEsIDIsIDIwXSxcbiAgZmM6IDIwXG59LCB7XG4gIGxuZ3M6IFsnc2wnXSxcbiAgbnI6IFs1LCAxLCAyLCAzXSxcbiAgZmM6IDIxXG59LCB7XG4gIGxuZ3M6IFsnaGUnLCAnaXcnXSxcbiAgbnI6IFsxLCAyLCAyMCwgMjFdLFxuICBmYzogMjJcbn1dO1xudmFyIF9ydWxlc1BsdXJhbHNUeXBlcyA9IHtcbiAgMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID4gMSk7XG4gIH0sXG4gIDI6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAhPSAxKTtcbiAgfSxcbiAgMzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIDQ6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiBuICUgMTAgPj0gMiAmJiBuICUgMTAgPD0gNCAmJiAobiAlIDEwMCA8IDEwIHx8IG4gJSAxMDAgPj0gMjApID8gMSA6IDIpO1xuICB9LFxuICA1OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMCA/IDAgOiBuID09IDEgPyAxIDogbiA9PSAyID8gMiA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwID8gMyA6IG4gJSAxMDAgPj0gMTEgPyA0IDogNSk7XG4gIH0sXG4gIDY6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPj0gMiAmJiBuIDw9IDQgPyAxIDogMik7XG4gIH0sXG4gIDc6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gJSAxMCA+PSAyICYmIG4gJSAxMCA8PSA0ICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDg6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiBuICE9IDggJiYgbiAhPSAxMSA/IDIgOiAzKTtcbiAgfSxcbiAgOTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID49IDIpO1xuICB9LFxuICAxMDogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA9PSAyID8gMSA6IG4gPCA3ID8gMiA6IG4gPCAxMSA/IDMgOiA0KTtcbiAgfSxcbiAgMTE6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxIHx8IG4gPT0gMTEgPyAwIDogbiA9PSAyIHx8IG4gPT0gMTIgPyAxIDogbiA+IDIgJiYgbiA8IDIwID8gMiA6IDMpO1xuICB9LFxuICAxMjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgIT0gMSB8fCBuICUgMTAwID09IDExKTtcbiAgfSxcbiAgMTM6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAhPT0gMCk7XG4gIH0sXG4gIDE0OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogbiA9PSAzID8gMiA6IDMpO1xuICB9LFxuICAxNTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgPT0gMSAmJiBuICUgMTAwICE9IDExID8gMCA6IG4gJSAxMCA+PSAyICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDE2OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogbiAhPT0gMCA/IDEgOiAyKTtcbiAgfSxcbiAgMTc6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxIHx8IG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogMSk7XG4gIH0sXG4gIDE4OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMCA/IDAgOiBuID09IDEgPyAxIDogMik7XG4gIH0sXG4gIDE5OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDAgfHwgbiAlIDEwMCA+IDEgJiYgbiAlIDEwMCA8IDExID8gMSA6IG4gJSAxMDAgPiAxMCAmJiBuICUgMTAwIDwgMjAgPyAyIDogMyk7XG4gIH0sXG4gIDIwOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDAgfHwgbiAlIDEwMCA+IDAgJiYgbiAlIDEwMCA8IDIwID8gMSA6IDIpO1xuICB9LFxuICAyMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAwID09IDEgPyAxIDogbiAlIDEwMCA9PSAyID8gMiA6IG4gJSAxMDAgPT0gMyB8fCBuICUgMTAwID09IDQgPyAzIDogMCk7XG4gIH0sXG4gIDIyOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogKG4gPCAwIHx8IG4gPiAxMCkgJiYgbiAlIDEwID09IDAgPyAyIDogMyk7XG4gIH1cbn07XG52YXIgZGVwcmVjYXRlZEpzb25WZXJzaW9ucyA9IFsndjEnLCAndjInLCAndjMnXTtcbnZhciBzdWZmaXhlc09yZGVyID0ge1xuICB6ZXJvOiAwLFxuICBvbmU6IDEsXG4gIHR3bzogMixcbiAgZmV3OiAzLFxuICBtYW55OiA0LFxuICBvdGhlcjogNVxufTtcblxuZnVuY3Rpb24gY3JlYXRlUnVsZXMoKSB7XG4gIHZhciBydWxlcyA9IHt9O1xuICBzZXRzLmZvckVhY2goZnVuY3Rpb24gKHNldCkge1xuICAgIHNldC5sbmdzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgIHJ1bGVzW2xdID0ge1xuICAgICAgICBudW1iZXJzOiBzZXQubnIsXG4gICAgICAgIHBsdXJhbHM6IF9ydWxlc1BsdXJhbHNUeXBlc1tzZXQuZmNdXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG52YXIgUGx1cmFsUmVzb2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBsdXJhbFJlc29sdmVyKGxhbmd1YWdlVXRpbHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2tfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLCBQbHVyYWxSZXNvbHZlcik7XG5cbiAgICB0aGlzLmxhbmd1YWdlVXRpbHMgPSBsYW5ndWFnZVV0aWxzO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgncGx1cmFsUmVzb2x2ZXInKTtcblxuICAgIGlmICgoIXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiB8fCB0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04gPT09ICd2NCcpICYmICh0eXBlb2YgSW50bCA9PT0gJ3VuZGVmaW5lZCcgfHwgIUludGwuUGx1cmFsUnVsZXMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04gPSAndjMnO1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1lvdXIgZW52aXJvbm1lbnQgc2VlbXMgbm90IHRvIGJlIEludGwgQVBJIGNvbXBhdGlibGUsIHVzZSBhbiBJbnRsLlBsdXJhbFJ1bGVzIHBvbHlmaWxsLiBXaWxsIGZhbGxiYWNrIHRvIHRoZSBjb21wYXRpYmlsaXR5SlNPTiB2MyBmb3JtYXQgaGFuZGxpbmcuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5ydWxlcyA9IGNyZWF0ZVJ1bGVzKCk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3NfX2RlZmF1bHRbJ2RlZmF1bHQnXShQbHVyYWxSZXNvbHZlciwgW3tcbiAgICBrZXk6IFwiYWRkUnVsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRSdWxlKGxuZywgb2JqKSB7XG4gICAgICB0aGlzLnJ1bGVzW2xuZ10gPSBvYmo7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFJ1bGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UnVsZShjb2RlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICAgIGlmICh0aGlzLnNob3VsZFVzZUludGxBcGkoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBuZXcgSW50bC5QbHVyYWxSdWxlcyhjb2RlLCB7XG4gICAgICAgICAgICB0eXBlOiBvcHRpb25zLm9yZGluYWwgPyAnb3JkaW5hbCcgOiAnY2FyZGluYWwnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnVsZXNbY29kZV0gfHwgdGhpcy5ydWxlc1t0aGlzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSldO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJuZWVkc1BsdXJhbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBuZWVkc1BsdXJhbChjb2RlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgcnVsZSA9IHRoaXMuZ2V0UnVsZShjb2RlLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKSB7XG4gICAgICAgIHJldHVybiBydWxlICYmIHJ1bGUucmVzb2x2ZWRPcHRpb25zKCkucGx1cmFsQ2F0ZWdvcmllcy5sZW5ndGggPiAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcnVsZSAmJiBydWxlLm51bWJlcnMubGVuZ3RoID4gMTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UGx1cmFsRm9ybXNPZktleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQbHVyYWxGb3Jtc09mS2V5KGNvZGUsIGtleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VmZml4ZXMoY29kZSwgb3B0aW9ucykubWFwKGZ1bmN0aW9uIChzdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGtleSkuY29uY2F0KHN1ZmZpeCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VmZml4ZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3VmZml4ZXMoY29kZSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIHJ1bGUgPSB0aGlzLmdldFJ1bGUoY29kZSwgb3B0aW9ucyk7XG5cbiAgICAgIGlmICghcnVsZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNob3VsZFVzZUludGxBcGkoKSkge1xuICAgICAgICByZXR1cm4gcnVsZS5yZXNvbHZlZE9wdGlvbnMoKS5wbHVyYWxDYXRlZ29yaWVzLnNvcnQoZnVuY3Rpb24gKHBsdXJhbENhdGVnb3J5MSwgcGx1cmFsQ2F0ZWdvcnkyKSB7XG4gICAgICAgICAgcmV0dXJuIHN1ZmZpeGVzT3JkZXJbcGx1cmFsQ2F0ZWdvcnkxXSAtIHN1ZmZpeGVzT3JkZXJbcGx1cmFsQ2F0ZWdvcnkyXTtcbiAgICAgICAgfSkubWFwKGZ1bmN0aW9uIChwbHVyYWxDYXRlZ29yeSkge1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChfdGhpcy5vcHRpb25zLnByZXBlbmQpLmNvbmNhdChwbHVyYWxDYXRlZ29yeSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcnVsZS5udW1iZXJzLm1hcChmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5nZXRTdWZmaXgoY29kZSwgbnVtYmVyLCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTdWZmaXhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3VmZml4KGNvZGUsIGNvdW50KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB2YXIgcnVsZSA9IHRoaXMuZ2V0UnVsZShjb2RlLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHJ1bGUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKSB7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHRoaXMub3B0aW9ucy5wcmVwZW5kKS5jb25jYXQocnVsZS5zZWxlY3QoY291bnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZShydWxlLCBjb3VudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJubyBwbHVyYWwgcnVsZSBmb3VuZCBmb3I6IFwiLmNvbmNhdChjb2RlKSk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWZmaXhSZXRyb0NvbXBhdGlibGUocnVsZSwgY291bnQpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgaWR4ID0gcnVsZS5ub0FicyA/IHJ1bGUucGx1cmFscyhjb3VudCkgOiBydWxlLnBsdXJhbHMoTWF0aC5hYnMoY291bnQpKTtcbiAgICAgIHZhciBzdWZmaXggPSBydWxlLm51bWJlcnNbaWR4XTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCAmJiBydWxlLm51bWJlcnMubGVuZ3RoID09PSAyICYmIHJ1bGUubnVtYmVyc1swXSA9PT0gMSkge1xuICAgICAgICBpZiAoc3VmZml4ID09PSAyKSB7XG4gICAgICAgICAgc3VmZml4ID0gJ3BsdXJhbCc7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VmZml4ID09PSAxKSB7XG4gICAgICAgICAgc3VmZml4ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJldHVyblN1ZmZpeCA9IGZ1bmN0aW9uIHJldHVyblN1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLnByZXBlbmQgJiYgc3VmZml4LnRvU3RyaW5nKCkgPyBfdGhpczIub3B0aW9ucy5wcmVwZW5kICsgc3VmZml4LnRvU3RyaW5nKCkgOiBzdWZmaXgudG9TdHJpbmcoKTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04gPT09ICd2MScpIHtcbiAgICAgICAgaWYgKHN1ZmZpeCA9PT0gMSkgcmV0dXJuICcnO1xuICAgICAgICBpZiAodHlwZW9mIHN1ZmZpeCA9PT0gJ251bWJlcicpIHJldHVybiBcIl9wbHVyYWxfXCIuY29uY2F0KHN1ZmZpeC50b1N0cmluZygpKTtcbiAgICAgICAgcmV0dXJuIHJldHVyblN1ZmZpeCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04gPT09ICd2MicpIHtcbiAgICAgICAgcmV0dXJuIHJldHVyblN1ZmZpeCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXggJiYgcnVsZS5udW1iZXJzLmxlbmd0aCA9PT0gMiAmJiBydWxlLm51bWJlcnNbMF0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVyblN1ZmZpeCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnByZXBlbmQgJiYgaWR4LnRvU3RyaW5nKCkgPyB0aGlzLm9wdGlvbnMucHJlcGVuZCArIGlkeC50b1N0cmluZygpIDogaWR4LnRvU3RyaW5nKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNob3VsZFVzZUludGxBcGlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkVXNlSW50bEFwaSgpIHtcbiAgICAgIHJldHVybiAhZGVwcmVjYXRlZEpzb25WZXJzaW9ucy5pbmNsdWRlcyh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQbHVyYWxSZXNvbHZlcjtcbn0oKTtcblxuZnVuY3Rpb24gb3duS2V5cyQzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCQzKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMkMyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eV9fZGVmYXVsdFsnZGVmYXVsdCddKHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkMyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxudmFyIEludGVycG9sYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSW50ZXJwb2xhdG9yKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVja19fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMsIEludGVycG9sYXRvcik7XG5cbiAgICB0aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdpbnRlcnBvbGF0b3InKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgdGhpcy5mb3JtYXQgPSBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCB8fCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5pbml0KG9wdGlvbnMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzX19kZWZhdWx0WydkZWZhdWx0J10oSW50ZXJwb2xhdG9yLCBbe1xuICAgIGtleTogXCJpbml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICBpZiAoIW9wdGlvbnMuaW50ZXJwb2xhdGlvbikgb3B0aW9ucy5pbnRlcnBvbGF0aW9uID0ge1xuICAgICAgICBlc2NhcGVWYWx1ZTogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHZhciBpT3B0cyA9IG9wdGlvbnMuaW50ZXJwb2xhdGlvbjtcbiAgICAgIHRoaXMuZXNjYXBlID0gaU9wdHMuZXNjYXBlICE9PSB1bmRlZmluZWQgPyBpT3B0cy5lc2NhcGUgOiBlc2NhcGU7XG4gICAgICB0aGlzLmVzY2FwZVZhbHVlID0gaU9wdHMuZXNjYXBlVmFsdWUgIT09IHVuZGVmaW5lZCA/IGlPcHRzLmVzY2FwZVZhbHVlIDogdHJ1ZTtcbiAgICAgIHRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZSA9IGlPcHRzLnVzZVJhd1ZhbHVlVG9Fc2NhcGUgIT09IHVuZGVmaW5lZCA/IGlPcHRzLnVzZVJhd1ZhbHVlVG9Fc2NhcGUgOiBmYWxzZTtcbiAgICAgIHRoaXMucHJlZml4ID0gaU9wdHMucHJlZml4ID8gcmVnZXhFc2NhcGUoaU9wdHMucHJlZml4KSA6IGlPcHRzLnByZWZpeEVzY2FwZWQgfHwgJ3t7JztcbiAgICAgIHRoaXMuc3VmZml4ID0gaU9wdHMuc3VmZml4ID8gcmVnZXhFc2NhcGUoaU9wdHMuc3VmZml4KSA6IGlPcHRzLnN1ZmZpeEVzY2FwZWQgfHwgJ319JztcbiAgICAgIHRoaXMuZm9ybWF0U2VwYXJhdG9yID0gaU9wdHMuZm9ybWF0U2VwYXJhdG9yID8gaU9wdHMuZm9ybWF0U2VwYXJhdG9yIDogaU9wdHMuZm9ybWF0U2VwYXJhdG9yIHx8ICcsJztcbiAgICAgIHRoaXMudW5lc2NhcGVQcmVmaXggPSBpT3B0cy51bmVzY2FwZVN1ZmZpeCA/ICcnIDogaU9wdHMudW5lc2NhcGVQcmVmaXggfHwgJy0nO1xuICAgICAgdGhpcy51bmVzY2FwZVN1ZmZpeCA9IHRoaXMudW5lc2NhcGVQcmVmaXggPyAnJyA6IGlPcHRzLnVuZXNjYXBlU3VmZml4IHx8ICcnO1xuICAgICAgdGhpcy5uZXN0aW5nUHJlZml4ID0gaU9wdHMubmVzdGluZ1ByZWZpeCA/IHJlZ2V4RXNjYXBlKGlPcHRzLm5lc3RpbmdQcmVmaXgpIDogaU9wdHMubmVzdGluZ1ByZWZpeEVzY2FwZWQgfHwgcmVnZXhFc2NhcGUoJyR0KCcpO1xuICAgICAgdGhpcy5uZXN0aW5nU3VmZml4ID0gaU9wdHMubmVzdGluZ1N1ZmZpeCA/IHJlZ2V4RXNjYXBlKGlPcHRzLm5lc3RpbmdTdWZmaXgpIDogaU9wdHMubmVzdGluZ1N1ZmZpeEVzY2FwZWQgfHwgcmVnZXhFc2NhcGUoJyknKTtcbiAgICAgIHRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3IgPSBpT3B0cy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvciA/IGlPcHRzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yIDogaU9wdHMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3IgfHwgJywnO1xuICAgICAgdGhpcy5tYXhSZXBsYWNlcyA9IGlPcHRzLm1heFJlcGxhY2VzID8gaU9wdHMubWF4UmVwbGFjZXMgOiAxMDAwO1xuICAgICAgdGhpcy5hbHdheXNGb3JtYXQgPSBpT3B0cy5hbHdheXNGb3JtYXQgIT09IHVuZGVmaW5lZCA/IGlPcHRzLmFsd2F5c0Zvcm1hdCA6IGZhbHNlO1xuICAgICAgdGhpcy5yZXNldFJlZ0V4cCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZXNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMpIHRoaXMuaW5pdCh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZXNldFJlZ0V4cFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldFJlZ0V4cCgpIHtcbiAgICAgIHZhciByZWdleHBTdHIgPSBcIlwiLmNvbmNhdCh0aGlzLnByZWZpeCwgXCIoLis/KVwiKS5jb25jYXQodGhpcy5zdWZmaXgpO1xuICAgICAgdGhpcy5yZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cFN0ciwgJ2cnKTtcbiAgICAgIHZhciByZWdleHBVbmVzY2FwZVN0ciA9IFwiXCIuY29uY2F0KHRoaXMucHJlZml4KS5jb25jYXQodGhpcy51bmVzY2FwZVByZWZpeCwgXCIoLis/KVwiKS5jb25jYXQodGhpcy51bmVzY2FwZVN1ZmZpeCkuY29uY2F0KHRoaXMuc3VmZml4KTtcbiAgICAgIHRoaXMucmVnZXhwVW5lc2NhcGUgPSBuZXcgUmVnRXhwKHJlZ2V4cFVuZXNjYXBlU3RyLCAnZycpO1xuICAgICAgdmFyIG5lc3RpbmdSZWdleHBTdHIgPSBcIlwiLmNvbmNhdCh0aGlzLm5lc3RpbmdQcmVmaXgsIFwiKC4rPylcIikuY29uY2F0KHRoaXMubmVzdGluZ1N1ZmZpeCk7XG4gICAgICB0aGlzLm5lc3RpbmdSZWdleHAgPSBuZXcgUmVnRXhwKG5lc3RpbmdSZWdleHBTdHIsICdnJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludGVycG9sYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGludGVycG9sYXRlKHN0ciwgZGF0YSwgbG5nLCBvcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgbWF0Y2g7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB2YXIgcmVwbGFjZXM7XG4gICAgICB2YXIgZGVmYXVsdERhdGEgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24gJiYgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyB8fCB7fTtcblxuICAgICAgZnVuY3Rpb24gcmVnZXhTYWZlKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsLnJlcGxhY2UoL1xcJC9nLCAnJCQkJCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGFuZGxlRm9ybWF0ID0gZnVuY3Rpb24gaGFuZGxlRm9ybWF0KGtleSkge1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YoX3RoaXMuZm9ybWF0U2VwYXJhdG9yKSA8IDApIHtcbiAgICAgICAgICB2YXIgcGF0aCA9IGdldFBhdGhXaXRoRGVmYXVsdHMoZGF0YSwgZGVmYXVsdERhdGEsIGtleSk7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmFsd2F5c0Zvcm1hdCA/IF90aGlzLmZvcm1hdChwYXRoLCB1bmRlZmluZWQsIGxuZywgX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoe30sIG9wdGlvbnMpLCBkYXRhKSwge30sIHtcbiAgICAgICAgICAgIGludGVycG9sYXRpb25rZXk6IGtleVxuICAgICAgICAgIH0pKSA6IHBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcCA9IGtleS5zcGxpdChfdGhpcy5mb3JtYXRTZXBhcmF0b3IpO1xuICAgICAgICB2YXIgayA9IHAuc2hpZnQoKS50cmltKCk7XG4gICAgICAgIHZhciBmID0gcC5qb2luKF90aGlzLmZvcm1hdFNlcGFyYXRvcikudHJpbSgpO1xuICAgICAgICByZXR1cm4gX3RoaXMuZm9ybWF0KGdldFBhdGhXaXRoRGVmYXVsdHMoZGF0YSwgZGVmYXVsdERhdGEsIGspLCBmLCBsbmcsIF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoX29iamVjdFNwcmVhZCQzKHt9LCBvcHRpb25zKSwgZGF0YSksIHt9LCB7XG4gICAgICAgICAgaW50ZXJwb2xhdGlvbmtleToga1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJlc2V0UmVnRXhwKCk7XG4gICAgICB2YXIgbWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLm1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlciB8fCB0aGlzLm9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyO1xuICAgICAgdmFyIHNraXBPblZhcmlhYmxlcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uICYmIG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMgOiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM7XG4gICAgICB2YXIgdG9kb3MgPSBbe1xuICAgICAgICByZWdleDogdGhpcy5yZWdleHBVbmVzY2FwZSxcbiAgICAgICAgc2FmZVZhbHVlOiBmdW5jdGlvbiBzYWZlVmFsdWUodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlZ2V4U2FmZSh2YWwpO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIHJlZ2V4OiB0aGlzLnJlZ2V4cCxcbiAgICAgICAgc2FmZVZhbHVlOiBmdW5jdGlvbiBzYWZlVmFsdWUodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmVzY2FwZVZhbHVlID8gcmVnZXhTYWZlKF90aGlzLmVzY2FwZSh2YWwpKSA6IHJlZ2V4U2FmZSh2YWwpO1xuICAgICAgICB9XG4gICAgICB9XTtcbiAgICAgIHRvZG9zLmZvckVhY2goZnVuY3Rpb24gKHRvZG8pIHtcbiAgICAgICAgcmVwbGFjZXMgPSAwO1xuXG4gICAgICAgIHdoaWxlIChtYXRjaCA9IHRvZG8ucmVnZXguZXhlYyhzdHIpKSB7XG4gICAgICAgICAgdmFyIG1hdGNoZWRWYXIgPSBtYXRjaFsxXS50cmltKCk7XG4gICAgICAgICAgdmFsdWUgPSBoYW5kbGVGb3JtYXQobWF0Y2hlZFZhcik7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdmFyIHRlbXAgPSBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIoc3RyLCBtYXRjaCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIHZhbHVlID0gdHlwZW9mIHRlbXAgPT09ICdzdHJpbmcnID8gdGVtcCA6ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkobWF0Y2hlZFZhcikpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2tpcE9uVmFyaWFibGVzKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2hbMF07XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgX3RoaXMubG9nZ2VyLndhcm4oXCJtaXNzZWQgdG8gcGFzcyBpbiB2YXJpYWJsZSBcIi5jb25jYXQobWF0Y2hlZFZhciwgXCIgZm9yIGludGVycG9sYXRpbmcgXCIpLmNvbmNhdChzdHIpKTtcblxuICAgICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiAhX3RoaXMudXNlUmF3VmFsdWVUb0VzY2FwZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBtYWtlU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc2FmZVZhbHVlID0gdG9kby5zYWZlVmFsdWUodmFsdWUpO1xuICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKG1hdGNoWzBdLCBzYWZlVmFsdWUpO1xuXG4gICAgICAgICAgaWYgKHNraXBPblZhcmlhYmxlcykge1xuICAgICAgICAgICAgdG9kby5yZWdleC5sYXN0SW5kZXggKz0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgdG9kby5yZWdleC5sYXN0SW5kZXggLT0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2RvLnJlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVwbGFjZXMrKztcblxuICAgICAgICAgIGlmIChyZXBsYWNlcyA+PSBfdGhpcy5tYXhSZXBsYWNlcykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm5lc3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbmVzdChzdHIsIGZjKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgdmFyIG1hdGNoO1xuICAgICAgdmFyIHZhbHVlO1xuXG4gICAgICB2YXIgY2xvbmVkT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQkMyh7fSwgb3B0aW9ucyk7XG5cbiAgICAgIGNsb25lZE9wdGlvbnMuYXBwbHlQb3N0UHJvY2Vzc29yID0gZmFsc2U7XG4gICAgICBkZWxldGUgY2xvbmVkT3B0aW9ucy5kZWZhdWx0VmFsdWU7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZUhhc09wdGlvbnMoa2V5LCBpbmhlcml0ZWRPcHRpb25zKSB7XG4gICAgICAgIHZhciBzZXAgPSB0aGlzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yO1xuICAgICAgICBpZiAoa2V5LmluZGV4T2Yoc2VwKSA8IDApIHJldHVybiBrZXk7XG4gICAgICAgIHZhciBjID0ga2V5LnNwbGl0KG5ldyBSZWdFeHAoXCJcIi5jb25jYXQoc2VwLCBcIlsgXSp7XCIpKSk7XG4gICAgICAgIHZhciBvcHRpb25zU3RyaW5nID0gXCJ7XCIuY29uY2F0KGNbMV0pO1xuICAgICAgICBrZXkgPSBjWzBdO1xuICAgICAgICBvcHRpb25zU3RyaW5nID0gdGhpcy5pbnRlcnBvbGF0ZShvcHRpb25zU3RyaW5nLCBjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgdmFyIG1hdGNoZWRTaW5nbGVRdW90ZXMgPSBvcHRpb25zU3RyaW5nLm1hdGNoKC8nL2cpO1xuICAgICAgICB2YXIgbWF0Y2hlZERvdWJsZVF1b3RlcyA9IG9wdGlvbnNTdHJpbmcubWF0Y2goL1wiL2cpO1xuXG4gICAgICAgIGlmIChtYXRjaGVkU2luZ2xlUXVvdGVzICYmIG1hdGNoZWRTaW5nbGVRdW90ZXMubGVuZ3RoICUgMiA9PT0gMCAmJiAhbWF0Y2hlZERvdWJsZVF1b3RlcyB8fCBtYXRjaGVkRG91YmxlUXVvdGVzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgICBvcHRpb25zU3RyaW5nID0gb3B0aW9uc1N0cmluZy5yZXBsYWNlKC8nL2csICdcIicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbG9uZWRPcHRpb25zID0gSlNPTi5wYXJzZShvcHRpb25zU3RyaW5nKTtcbiAgICAgICAgICBpZiAoaW5oZXJpdGVkT3B0aW9ucykgY2xvbmVkT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoe30sIGluaGVyaXRlZE9wdGlvbnMpLCBjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJmYWlsZWQgcGFyc2luZyBvcHRpb25zIHN0cmluZyBpbiBuZXN0aW5nIGZvciBrZXkgXCIuY29uY2F0KGtleSksIGUpO1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChrZXkpLmNvbmNhdChzZXApLmNvbmNhdChvcHRpb25zU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBjbG9uZWRPcHRpb25zLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG1hdGNoID0gdGhpcy5uZXN0aW5nUmVnZXhwLmV4ZWMoc3RyKSkge1xuICAgICAgICB2YXIgZm9ybWF0dGVycyA9IFtdO1xuICAgICAgICB2YXIgZG9SZWR1Y2UgPSBmYWxzZTtcblxuICAgICAgICBpZiAobWF0Y2hbMF0uaW5kZXhPZih0aGlzLmZvcm1hdFNlcGFyYXRvcikgIT09IC0xICYmICEvey4qfS8udGVzdChtYXRjaFsxXSkpIHtcbiAgICAgICAgICB2YXIgciA9IG1hdGNoWzFdLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKS5tYXAoZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtLnRyaW0oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtYXRjaFsxXSA9IHIuc2hpZnQoKTtcbiAgICAgICAgICBmb3JtYXR0ZXJzID0gcjtcbiAgICAgICAgICBkb1JlZHVjZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IGZjKGhhbmRsZUhhc09wdGlvbnMuY2FsbCh0aGlzLCBtYXRjaFsxXS50cmltKCksIGNsb25lZE9wdGlvbnMpLCBjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgaWYgKHZhbHVlICYmIG1hdGNoWzBdID09PSBzdHIgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgdmFsdWUgPSBtYWtlU3RyaW5nKHZhbHVlKTtcblxuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm1pc3NlZCB0byByZXNvbHZlIFwiLmNvbmNhdChtYXRjaFsxXSwgXCIgZm9yIG5lc3RpbmcgXCIpLmNvbmNhdChzdHIpKTtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRvUmVkdWNlKSB7XG4gICAgICAgICAgdmFsdWUgPSBmb3JtYXR0ZXJzLnJlZHVjZShmdW5jdGlvbiAodiwgZikge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5mb3JtYXQodiwgZiwgb3B0aW9ucy5sbmcsIF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9ua2V5OiBtYXRjaFsxXS50cmltKClcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9LCB2YWx1ZS50cmltKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHZhbHVlKTtcbiAgICAgICAgdGhpcy5yZWdleHAubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSW50ZXJwb2xhdG9yO1xufSgpO1xuXG5mdW5jdGlvbiBvd25LZXlzJDQob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQ0KE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5X19kZWZhdWx0WydkZWZhdWx0J10odGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQ0KE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBwYXJzZUZvcm1hdFN0cihmb3JtYXRTdHIpIHtcbiAgdmFyIGZvcm1hdE5hbWUgPSBmb3JtYXRTdHIudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHZhciBmb3JtYXRPcHRpb25zID0ge307XG5cbiAgaWYgKGZvcm1hdFN0ci5pbmRleE9mKCcoJykgPiAtMSkge1xuICAgIHZhciBwID0gZm9ybWF0U3RyLnNwbGl0KCcoJyk7XG4gICAgZm9ybWF0TmFtZSA9IHBbMF0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdmFyIG9wdFN0ciA9IHBbMV0uc3Vic3RyaW5nKDAsIHBbMV0ubGVuZ3RoIC0gMSk7XG5cbiAgICBpZiAoZm9ybWF0TmFtZSA9PT0gJ2N1cnJlbmN5JyAmJiBvcHRTdHIuaW5kZXhPZignOicpIDwgMCkge1xuICAgICAgaWYgKCFmb3JtYXRPcHRpb25zLmN1cnJlbmN5KSBmb3JtYXRPcHRpb25zLmN1cnJlbmN5ID0gb3B0U3RyLnRyaW0oKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdE5hbWUgPT09ICdyZWxhdGl2ZXRpbWUnICYmIG9wdFN0ci5pbmRleE9mKCc6JykgPCAwKSB7XG4gICAgICBpZiAoIWZvcm1hdE9wdGlvbnMucmFuZ2UpIGZvcm1hdE9wdGlvbnMucmFuZ2UgPSBvcHRTdHIudHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb3B0cyA9IG9wdFN0ci5zcGxpdCgnOycpO1xuICAgICAgb3B0cy5mb3JFYWNoKGZ1bmN0aW9uIChvcHQpIHtcbiAgICAgICAgaWYgKCFvcHQpIHJldHVybjtcblxuICAgICAgICB2YXIgX29wdCRzcGxpdCA9IG9wdC5zcGxpdCgnOicpLFxuICAgICAgICAgICAgX29wdCRzcGxpdDIgPSBfdG9BcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKF9vcHQkc3BsaXQpLFxuICAgICAgICAgICAga2V5ID0gX29wdCRzcGxpdDJbMF0sXG4gICAgICAgICAgICByZXN0ID0gX29wdCRzcGxpdDIuc2xpY2UoMSk7XG5cbiAgICAgICAgdmFyIHZhbCA9IHJlc3Quam9pbignOicpLnRyaW0oKS5yZXBsYWNlKC9eJyt8JyskL2csICcnKTtcbiAgICAgICAgaWYgKCFmb3JtYXRPcHRpb25zW2tleS50cmltKCldKSBmb3JtYXRPcHRpb25zW2tleS50cmltKCldID0gdmFsO1xuICAgICAgICBpZiAodmFsID09PSAnZmFsc2UnKSBmb3JtYXRPcHRpb25zW2tleS50cmltKCldID0gZmFsc2U7XG4gICAgICAgIGlmICh2YWwgPT09ICd0cnVlJykgZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSA9IHRydWU7XG4gICAgICAgIGlmICghaXNOYU4odmFsKSkgZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSA9IHBhcnNlSW50KHZhbCwgMTApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXROYW1lOiBmb3JtYXROYW1lLFxuICAgIGZvcm1hdE9wdGlvbnM6IGZvcm1hdE9wdGlvbnNcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZuKSB7XG4gIHZhciBjYWNoZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gaW52b2tlRm9ybWF0dGVyKHZhbCwgbG5nLCBvcHRpb25zKSB7XG4gICAgdmFyIGtleSA9IGxuZyArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpO1xuICAgIHZhciBmb3JtYXR0ZXIgPSBjYWNoZVtrZXldO1xuXG4gICAgaWYgKCFmb3JtYXR0ZXIpIHtcbiAgICAgIGZvcm1hdHRlciA9IGZuKGxuZywgb3B0aW9ucyk7XG4gICAgICBjYWNoZVtrZXldID0gZm9ybWF0dGVyO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXR0ZXIodmFsKTtcbiAgfTtcbn1cblxudmFyIEZvcm1hdHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRm9ybWF0dGVyKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVja19fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMsIEZvcm1hdHRlcik7XG5cbiAgICB0aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdmb3JtYXR0ZXInKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuZm9ybWF0cyA9IHtcbiAgICAgIG51bWJlcjogY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZ1bmN0aW9uIChsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsbmcsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbCk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIGN1cnJlbmN5OiBjcmVhdGVDYWNoZWRGb3JtYXR0ZXIoZnVuY3Rpb24gKGxuZywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxuZywgX29iamVjdFNwcmVhZCQ0KF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeSdcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbCk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIGRhdGV0aW1lOiBjcmVhdGVDYWNoZWRGb3JtYXR0ZXIoZnVuY3Rpb24gKGxuZywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG5nLCBfb2JqZWN0U3ByZWFkJDQoe30sIG9wdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh2YWwpO1xuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICByZWxhdGl2ZXRpbWU6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQobG5nLCBfb2JqZWN0U3ByZWFkJDQoe30sIG9wdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh2YWwsIG9wdGlvbnMucmFuZ2UgfHwgJ2RheScpO1xuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBsaXN0OiBjcmVhdGVDYWNoZWRGb3JtYXR0ZXIoZnVuY3Rpb24gKGxuZywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEludGwuTGlzdEZvcm1hdChsbmcsIF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucykpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbCk7XG4gICAgICAgIH07XG4gICAgICB9KVxuICAgIH07XG4gICAgdGhpcy5pbml0KG9wdGlvbnMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzX19kZWZhdWx0WydkZWZhdWx0J10oRm9ybWF0dGVyLCBbe1xuICAgIGtleTogXCJpbml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoc2VydmljZXMpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgICAgIGludGVycG9sYXRpb246IHt9XG4gICAgICB9O1xuICAgICAgdmFyIGlPcHRzID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uO1xuICAgICAgdGhpcy5mb3JtYXRTZXBhcmF0b3IgPSBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgPyBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgOiBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgfHwgJywnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKG5hbWUsIGZjKSB7XG4gICAgICB0aGlzLmZvcm1hdHNbbmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKV0gPSBmYztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkQ2FjaGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZENhY2hlZChuYW1lLCBmYykge1xuICAgICAgdGhpcy5mb3JtYXRzW25hbWUudG9Mb3dlckNhc2UoKS50cmltKCldID0gY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZjKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgX2Zvcm1hdCwgbG5nLCBvcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgZm9ybWF0cyA9IF9mb3JtYXQuc3BsaXQodGhpcy5mb3JtYXRTZXBhcmF0b3IpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gZm9ybWF0cy5yZWR1Y2UoZnVuY3Rpb24gKG1lbSwgZikge1xuICAgICAgICB2YXIgX3BhcnNlRm9ybWF0U3RyID0gcGFyc2VGb3JtYXRTdHIoZiksXG4gICAgICAgICAgICBmb3JtYXROYW1lID0gX3BhcnNlRm9ybWF0U3RyLmZvcm1hdE5hbWUsXG4gICAgICAgICAgICBmb3JtYXRPcHRpb25zID0gX3BhcnNlRm9ybWF0U3RyLmZvcm1hdE9wdGlvbnM7XG5cbiAgICAgICAgaWYgKF90aGlzLmZvcm1hdHNbZm9ybWF0TmFtZV0pIHtcbiAgICAgICAgICB2YXIgZm9ybWF0dGVkID0gbWVtO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciB2YWxPcHRpb25zID0gb3B0aW9ucyAmJiBvcHRpb25zLmZvcm1hdFBhcmFtcyAmJiBvcHRpb25zLmZvcm1hdFBhcmFtc1tvcHRpb25zLmludGVycG9sYXRpb25rZXldIHx8IHt9O1xuICAgICAgICAgICAgdmFyIGwgPSB2YWxPcHRpb25zLmxvY2FsZSB8fCB2YWxPcHRpb25zLmxuZyB8fCBvcHRpb25zLmxvY2FsZSB8fCBvcHRpb25zLmxuZyB8fCBsbmc7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgPSBfdGhpcy5mb3JtYXRzW2Zvcm1hdE5hbWVdKG1lbSwgbCwgX29iamVjdFNwcmVhZCQ0KF9vYmplY3RTcHJlYWQkNChfb2JqZWN0U3ByZWFkJDQoe30sIGZvcm1hdE9wdGlvbnMpLCBvcHRpb25zKSwgdmFsT3B0aW9ucykpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBfdGhpcy5sb2dnZXIud2FybihlcnJvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5sb2dnZXIud2FybihcInRoZXJlIHdhcyBubyBmb3JtYXQgZnVuY3Rpb24gZm9yIFwiLmNvbmNhdChmb3JtYXROYW1lKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVtO1xuICAgICAgfSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRm9ybWF0dGVyO1xufSgpO1xuXG5mdW5jdGlvbiBvd25LZXlzJDUob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDUodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQ1KE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5X19kZWZhdWx0WydkZWZhdWx0J10odGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQ1KE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIkMihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQyKCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mX19kZWZhdWx0WydkZWZhdWx0J10oRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZl9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQyKCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gcmVtb3ZlUGVuZGluZyhxLCBuYW1lKSB7XG4gIGlmIChxLnBlbmRpbmdbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgIGRlbGV0ZSBxLnBlbmRpbmdbbmFtZV07XG4gICAgcS5wZW5kaW5nQ291bnQtLTtcbiAgfVxufVxuXG52YXIgQ29ubmVjdG9yID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzX19kZWZhdWx0WydkZWZhdWx0J10oQ29ubmVjdG9yLCBfRXZlbnRFbWl0dGVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyJDIoQ29ubmVjdG9yKTtcblxuICBmdW5jdGlvbiBDb25uZWN0b3IoYmFja2VuZCwgc3RvcmUsIHNlcnZpY2VzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrX19kZWZhdWx0WydkZWZhdWx0J10odGhpcywgQ29ubmVjdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkX19kZWZhdWx0WydkZWZhdWx0J10oX3RoaXMpKTtcbiAgICB9XG5cbiAgICBfdGhpcy5iYWNrZW5kID0gYmFja2VuZDtcbiAgICBfdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIF90aGlzLnNlcnZpY2VzID0gc2VydmljZXM7XG4gICAgX3RoaXMubGFuZ3VhZ2VVdGlscyA9IHNlcnZpY2VzLmxhbmd1YWdlVXRpbHM7XG4gICAgX3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgX3RoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ2JhY2tlbmRDb25uZWN0b3InKTtcbiAgICBfdGhpcy53YWl0aW5nUmVhZHMgPSBbXTtcbiAgICBfdGhpcy5tYXhQYXJhbGxlbFJlYWRzID0gb3B0aW9ucy5tYXhQYXJhbGxlbFJlYWRzIHx8IDEwO1xuICAgIF90aGlzLnJlYWRpbmdDYWxscyA9IDA7XG4gICAgX3RoaXMubWF4UmV0cmllcyA9IG9wdGlvbnMubWF4UmV0cmllcyA+PSAwID8gb3B0aW9ucy5tYXhSZXRyaWVzIDogNTtcbiAgICBfdGhpcy5yZXRyeVRpbWVvdXQgPSBvcHRpb25zLnJldHJ5VGltZW91dCA+PSAxID8gb3B0aW9ucy5yZXRyeVRpbWVvdXQgOiAzNTA7XG4gICAgX3RoaXMuc3RhdGUgPSB7fTtcbiAgICBfdGhpcy5xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKF90aGlzLmJhY2tlbmQgJiYgX3RoaXMuYmFja2VuZC5pbml0KSB7XG4gICAgICBfdGhpcy5iYWNrZW5kLmluaXQoc2VydmljZXMsIG9wdGlvbnMuYmFja2VuZCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzX19kZWZhdWx0WydkZWZhdWx0J10oQ29ubmVjdG9yLCBbe1xuICAgIGtleTogXCJxdWV1ZUxvYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcXVldWVMb2FkKGxhbmd1YWdlcywgbmFtZXNwYWNlcywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgdG9Mb2FkID0ge307XG4gICAgICB2YXIgcGVuZGluZyA9IHt9O1xuICAgICAgdmFyIHRvTG9hZExhbmd1YWdlcyA9IHt9O1xuICAgICAgdmFyIHRvTG9hZE5hbWVzcGFjZXMgPSB7fTtcbiAgICAgIGxhbmd1YWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChsbmcpIHtcbiAgICAgICAgdmFyIGhhc0FsbE5hbWVzcGFjZXMgPSB0cnVlO1xuICAgICAgICBuYW1lc3BhY2VzLmZvckVhY2goZnVuY3Rpb24gKG5zKSB7XG4gICAgICAgICAgdmFyIG5hbWUgPSBcIlwiLmNvbmNhdChsbmcsIFwifFwiKS5jb25jYXQobnMpO1xuXG4gICAgICAgICAgaWYgKCFvcHRpb25zLnJlbG9hZCAmJiBfdGhpczIuc3RvcmUuaGFzUmVzb3VyY2VCdW5kbGUobG5nLCBucykpIHtcbiAgICAgICAgICAgIF90aGlzMi5zdGF0ZVtuYW1lXSA9IDI7XG4gICAgICAgICAgfSBlbHNlIGlmIChfdGhpczIuc3RhdGVbbmFtZV0gPCAwKSA7IGVsc2UgaWYgKF90aGlzMi5zdGF0ZVtuYW1lXSA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKHBlbmRpbmdbbmFtZV0gPT09IHVuZGVmaW5lZCkgcGVuZGluZ1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzMi5zdGF0ZVtuYW1lXSA9IDE7XG4gICAgICAgICAgICBoYXNBbGxOYW1lc3BhY2VzID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAocGVuZGluZ1tuYW1lXSA9PT0gdW5kZWZpbmVkKSBwZW5kaW5nW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0b0xvYWRbbmFtZV0gPT09IHVuZGVmaW5lZCkgdG9Mb2FkW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0b0xvYWROYW1lc3BhY2VzW25zXSA9PT0gdW5kZWZpbmVkKSB0b0xvYWROYW1lc3BhY2VzW25zXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoYXNBbGxOYW1lc3BhY2VzKSB0b0xvYWRMYW5ndWFnZXNbbG5nXSA9IHRydWU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRvTG9hZCkubGVuZ3RoIHx8IE9iamVjdC5rZXlzKHBlbmRpbmcpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnF1ZXVlLnB1c2goe1xuICAgICAgICAgIHBlbmRpbmc6IHBlbmRpbmcsXG4gICAgICAgICAgcGVuZGluZ0NvdW50OiBPYmplY3Qua2V5cyhwZW5kaW5nKS5sZW5ndGgsXG4gICAgICAgICAgbG9hZGVkOiB7fSxcbiAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9Mb2FkOiBPYmplY3Qua2V5cyh0b0xvYWQpLFxuICAgICAgICBwZW5kaW5nOiBPYmplY3Qua2V5cyhwZW5kaW5nKSxcbiAgICAgICAgdG9Mb2FkTGFuZ3VhZ2VzOiBPYmplY3Qua2V5cyh0b0xvYWRMYW5ndWFnZXMpLFxuICAgICAgICB0b0xvYWROYW1lc3BhY2VzOiBPYmplY3Qua2V5cyh0b0xvYWROYW1lc3BhY2VzKVxuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9hZGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRlZChuYW1lLCBlcnIsIGRhdGEpIHtcbiAgICAgIHZhciBzID0gbmFtZS5zcGxpdCgnfCcpO1xuICAgICAgdmFyIGxuZyA9IHNbMF07XG4gICAgICB2YXIgbnMgPSBzWzFdO1xuICAgICAgaWYgKGVycikgdGhpcy5lbWl0KCdmYWlsZWRMb2FkaW5nJywgbG5nLCBucywgZXJyKTtcblxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5hZGRSZXNvdXJjZUJ1bmRsZShsbmcsIG5zLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0ZVtuYW1lXSA9IGVyciA/IC0xIDogMjtcbiAgICAgIHZhciBsb2FkZWQgPSB7fTtcbiAgICAgIHRoaXMucXVldWUuZm9yRWFjaChmdW5jdGlvbiAocSkge1xuICAgICAgICBwdXNoUGF0aChxLmxvYWRlZCwgW2xuZ10sIG5zKTtcbiAgICAgICAgcmVtb3ZlUGVuZGluZyhxLCBuYW1lKTtcbiAgICAgICAgaWYgKGVycikgcS5lcnJvcnMucHVzaChlcnIpO1xuXG4gICAgICAgIGlmIChxLnBlbmRpbmdDb3VudCA9PT0gMCAmJiAhcS5kb25lKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMocS5sb2FkZWQpLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIGlmICghbG9hZGVkW2xdKSBsb2FkZWRbbF0gPSB7fTtcbiAgICAgICAgICAgIHZhciBsb2FkZWRLZXlzID0gcS5sb2FkZWRbbF07XG5cbiAgICAgICAgICAgIGlmIChsb2FkZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBsb2FkZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKG5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvYWRlZFtsXVtuc10gPT09IHVuZGVmaW5lZCkgbG9hZGVkW2xdW25zXSA9IHRydWU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHEuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICBpZiAocS5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBxLmNhbGxiYWNrKHEuZXJyb3JzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcS5jYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIGxvYWRlZCk7XG4gICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5maWx0ZXIoZnVuY3Rpb24gKHEpIHtcbiAgICAgICAgcmV0dXJuICFxLmRvbmU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkKGxuZywgbnMsIGZjTmFtZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciB0cmllZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogMDtcbiAgICAgIHZhciB3YWl0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB0aGlzLnJldHJ5VGltZW91dDtcbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ID8gYXJndW1lbnRzWzVdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFsbmcubGVuZ3RoKSByZXR1cm4gY2FsbGJhY2sobnVsbCwge30pO1xuXG4gICAgICBpZiAodGhpcy5yZWFkaW5nQ2FsbHMgPj0gdGhpcy5tYXhQYXJhbGxlbFJlYWRzKSB7XG4gICAgICAgIHRoaXMud2FpdGluZ1JlYWRzLnB1c2goe1xuICAgICAgICAgIGxuZzogbG5nLFxuICAgICAgICAgIG5zOiBucyxcbiAgICAgICAgICBmY05hbWU6IGZjTmFtZSxcbiAgICAgICAgICB0cmllZDogdHJpZWQsXG4gICAgICAgICAgd2FpdDogd2FpdCxcbiAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWFkaW5nQ2FsbHMrKztcbiAgICAgIHJldHVybiB0aGlzLmJhY2tlbmRbZmNOYW1lXShsbmcsIG5zLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgIF90aGlzMy5yZWFkaW5nQ2FsbHMtLTtcblxuICAgICAgICBpZiAoX3RoaXMzLndhaXRpbmdSZWFkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBfdGhpczMud2FpdGluZ1JlYWRzLnNoaWZ0KCk7XG5cbiAgICAgICAgICBfdGhpczMucmVhZChuZXh0LmxuZywgbmV4dC5ucywgbmV4dC5mY05hbWUsIG5leHQudHJpZWQsIG5leHQud2FpdCwgbmV4dC5jYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyICYmIGRhdGEgJiYgdHJpZWQgPCBfdGhpczMubWF4UmV0cmllcykge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMzLnJlYWQuY2FsbChfdGhpczMsIGxuZywgbnMsIGZjTmFtZSwgdHJpZWQgKyAxLCB3YWl0ICogMiwgY2FsbGJhY2spO1xuICAgICAgICAgIH0sIHdhaXQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHJlcGFyZUxvYWRpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJlcGFyZUxvYWRpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICghdGhpcy5iYWNrZW5kKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ05vIGJhY2tlbmQgd2FzIGFkZGVkIHZpYSBpMThuZXh0LnVzZS4gV2lsbCBub3QgbG9hZCByZXNvdXJjZXMuJyk7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGxhbmd1YWdlcyA9PT0gJ3N0cmluZycpIGxhbmd1YWdlcyA9IHRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkobGFuZ3VhZ2VzKTtcbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycpIG5hbWVzcGFjZXMgPSBbbmFtZXNwYWNlc107XG4gICAgICB2YXIgdG9Mb2FkID0gdGhpcy5xdWV1ZUxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBvcHRpb25zLCBjYWxsYmFjayk7XG5cbiAgICAgIGlmICghdG9Mb2FkLnRvTG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCF0b0xvYWQucGVuZGluZy5sZW5ndGgpIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB0b0xvYWQudG9Mb2FkLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgX3RoaXM0LmxvYWRPbmUobmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9hZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkKGxhbmd1YWdlcywgbmFtZXNwYWNlcywgY2FsbGJhY2spIHtcbiAgICAgIHRoaXMucHJlcGFyZUxvYWRpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCB7fSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWxvYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVsb2FkKGxhbmd1YWdlcywgbmFtZXNwYWNlcywgY2FsbGJhY2spIHtcbiAgICAgIHRoaXMucHJlcGFyZUxvYWRpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCB7XG4gICAgICAgIHJlbG9hZDogdHJ1ZVxuICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkT25lXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRPbmUobmFtZSkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBwcmVmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICAgICAgdmFyIHMgPSBuYW1lLnNwbGl0KCd8Jyk7XG4gICAgICB2YXIgbG5nID0gc1swXTtcbiAgICAgIHZhciBucyA9IHNbMV07XG4gICAgICB0aGlzLnJlYWQobG5nLCBucywgJ3JlYWQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuICAgICAgICBpZiAoZXJyKSBfdGhpczUubG9nZ2VyLndhcm4oXCJcIi5jb25jYXQocHJlZml4LCBcImxvYWRpbmcgbmFtZXNwYWNlIFwiKS5jb25jYXQobnMsIFwiIGZvciBsYW5ndWFnZSBcIikuY29uY2F0KGxuZywgXCIgZmFpbGVkXCIpLCBlcnIpO1xuICAgICAgICBpZiAoIWVyciAmJiBkYXRhKSBfdGhpczUubG9nZ2VyLmxvZyhcIlwiLmNvbmNhdChwcmVmaXgsIFwibG9hZGVkIG5hbWVzcGFjZSBcIikuY29uY2F0KG5zLCBcIiBmb3IgbGFuZ3VhZ2UgXCIpLmNvbmNhdChsbmcpLCBkYXRhKTtcblxuICAgICAgICBfdGhpczUubG9hZGVkKG5hbWUsIGVyciwgZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2F2ZU1pc3NpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2F2ZU1pc3NpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSwgaXNVcGRhdGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB7fTtcblxuICAgICAgaWYgKHRoaXMuc2VydmljZXMudXRpbHMgJiYgdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UgJiYgIXRoaXMuc2VydmljZXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcImRpZCBub3Qgc2F2ZSBrZXkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBhcyB0aGUgbmFtZXNwYWNlIFxcXCJcIikuY29uY2F0KG5hbWVzcGFjZSwgXCJcXFwiIHdhcyBub3QgeWV0IGxvYWRlZFwiKSwgJ1RoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwgfHwga2V5ID09PSAnJykgcmV0dXJuO1xuXG4gICAgICBpZiAodGhpcy5iYWNrZW5kICYmIHRoaXMuYmFja2VuZC5jcmVhdGUpIHtcbiAgICAgICAgdGhpcy5iYWNrZW5kLmNyZWF0ZShsYW5ndWFnZXMsIG5hbWVzcGFjZSwga2V5LCBmYWxsYmFja1ZhbHVlLCBudWxsLCBfb2JqZWN0U3ByZWFkJDUoX29iamVjdFNwcmVhZCQ1KHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgICBpc1VwZGF0ZTogaXNVcGRhdGVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWxhbmd1YWdlcyB8fCAhbGFuZ3VhZ2VzWzBdKSByZXR1cm47XG4gICAgICB0aGlzLnN0b3JlLmFkZFJlc291cmNlKGxhbmd1YWdlc1swXSwgbmFtZXNwYWNlLCBrZXksIGZhbGxiYWNrVmFsdWUpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDb25uZWN0b3I7XG59KEV2ZW50RW1pdHRlcik7XG5cbmZ1bmN0aW9uIGdldCgpIHtcbiAgcmV0dXJuIHtcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgaW5pdEltbWVkaWF0ZTogdHJ1ZSxcbiAgICBuczogWyd0cmFuc2xhdGlvbiddLFxuICAgIGRlZmF1bHROUzogWyd0cmFuc2xhdGlvbiddLFxuICAgIGZhbGxiYWNrTG5nOiBbJ2RldiddLFxuICAgIGZhbGxiYWNrTlM6IGZhbHNlLFxuICAgIHN1cHBvcnRlZExuZ3M6IGZhbHNlLFxuICAgIG5vbkV4cGxpY2l0U3VwcG9ydGVkTG5nczogZmFsc2UsXG4gICAgbG9hZDogJ2FsbCcsXG4gICAgcHJlbG9hZDogZmFsc2UsXG4gICAgc2ltcGxpZnlQbHVyYWxTdWZmaXg6IHRydWUsXG4gICAga2V5U2VwYXJhdG9yOiAnLicsXG4gICAgbnNTZXBhcmF0b3I6ICc6JyxcbiAgICBwbHVyYWxTZXBhcmF0b3I6ICdfJyxcbiAgICBjb250ZXh0U2VwYXJhdG9yOiAnXycsXG4gICAgcGFydGlhbEJ1bmRsZWRMYW5ndWFnZXM6IGZhbHNlLFxuICAgIHNhdmVNaXNzaW5nOiBmYWxzZSxcbiAgICB1cGRhdGVNaXNzaW5nOiBmYWxzZSxcbiAgICBzYXZlTWlzc2luZ1RvOiAnZmFsbGJhY2snLFxuICAgIHNhdmVNaXNzaW5nUGx1cmFsczogdHJ1ZSxcbiAgICBtaXNzaW5nS2V5SGFuZGxlcjogZmFsc2UsXG4gICAgbWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyOiBmYWxzZSxcbiAgICBwb3N0UHJvY2VzczogZmFsc2UsXG4gICAgcG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgIHJldHVybk51bGw6IHRydWUsXG4gICAgcmV0dXJuRW1wdHlTdHJpbmc6IHRydWUsXG4gICAgcmV0dXJuT2JqZWN0czogZmFsc2UsXG4gICAgam9pbkFycmF5czogZmFsc2UsXG4gICAgcmV0dXJuZWRPYmplY3RIYW5kbGVyOiBmYWxzZSxcbiAgICBwYXJzZU1pc3NpbmdLZXlIYW5kbGVyOiBmYWxzZSxcbiAgICBhcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXk6IGZhbHNlLFxuICAgIGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlOiBmYWxzZSxcbiAgICBvdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlKGFyZ3MpIHtcbiAgICAgIHZhciByZXQgPSB7fTtcbiAgICAgIGlmIChfdHlwZW9mX19kZWZhdWx0WydkZWZhdWx0J10oYXJnc1sxXSkgPT09ICdvYmplY3QnKSByZXQgPSBhcmdzWzFdO1xuICAgICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnc3RyaW5nJykgcmV0LmRlZmF1bHRWYWx1ZSA9IGFyZ3NbMV07XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMl0gPT09ICdzdHJpbmcnKSByZXQudERlc2NyaXB0aW9uID0gYXJnc1syXTtcblxuICAgICAgaWYgKF90eXBlb2ZfX2RlZmF1bHRbJ2RlZmF1bHQnXShhcmdzWzJdKSA9PT0gJ29iamVjdCcgfHwgX3R5cGVvZl9fZGVmYXVsdFsnZGVmYXVsdCddKGFyZ3NbM10pID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3NbM10gfHwgYXJnc1syXTtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0W2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG4gICAgaW50ZXJwb2xhdGlvbjoge1xuICAgICAgZXNjYXBlVmFsdWU6IHRydWUsXG4gICAgICBmb3JtYXQ6IGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgX2Zvcm1hdCwgbG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBwcmVmaXg6ICd7eycsXG4gICAgICBzdWZmaXg6ICd9fScsXG4gICAgICBmb3JtYXRTZXBhcmF0b3I6ICcsJyxcbiAgICAgIHVuZXNjYXBlUHJlZml4OiAnLScsXG4gICAgICBuZXN0aW5nUHJlZml4OiAnJHQoJyxcbiAgICAgIG5lc3RpbmdTdWZmaXg6ICcpJyxcbiAgICAgIG5lc3RpbmdPcHRpb25zU2VwYXJhdG9yOiAnLCcsXG4gICAgICBtYXhSZXBsYWNlczogMTAwMCxcbiAgICAgIHNraXBPblZhcmlhYmxlczogdHJ1ZVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybU9wdGlvbnMob3B0aW9ucykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMubnMgPT09ICdzdHJpbmcnKSBvcHRpb25zLm5zID0gW29wdGlvbnMubnNdO1xuICBpZiAodHlwZW9mIG9wdGlvbnMuZmFsbGJhY2tMbmcgPT09ICdzdHJpbmcnKSBvcHRpb25zLmZhbGxiYWNrTG5nID0gW29wdGlvbnMuZmFsbGJhY2tMbmddO1xuICBpZiAodHlwZW9mIG9wdGlvbnMuZmFsbGJhY2tOUyA9PT0gJ3N0cmluZycpIG9wdGlvbnMuZmFsbGJhY2tOUyA9IFtvcHRpb25zLmZhbGxiYWNrTlNdO1xuXG4gIGlmIChvcHRpb25zLnN1cHBvcnRlZExuZ3MgJiYgb3B0aW9ucy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoJ2NpbW9kZScpIDwgMCkge1xuICAgIG9wdGlvbnMuc3VwcG9ydGVkTG5ncyA9IG9wdGlvbnMuc3VwcG9ydGVkTG5ncy5jb25jYXQoWydjaW1vZGUnXSk7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gb3duS2V5cyQ2KG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCQ2KHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMkNihPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eV9fZGVmYXVsdFsnZGVmYXVsdCddKHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkNihPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyJDMoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMygpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZl9fZGVmYXVsdFsnZGVmYXVsdCddKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2ZfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMygpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiBiaW5kTWVtYmVyRnVuY3Rpb25zKGluc3QpIHtcbiAgdmFyIG1lbXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdCkpO1xuICBtZW1zLmZvckVhY2goZnVuY3Rpb24gKG1lbSkge1xuICAgIGlmICh0eXBlb2YgaW5zdFttZW1dID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbnN0W21lbV0gPSBpbnN0W21lbV0uYmluZChpbnN0KTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgSTE4biA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0c19fZGVmYXVsdFsnZGVmYXVsdCddKEkxOG4sIF9FdmVudEVtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIkMyhJMThuKTtcblxuICBmdW5jdGlvbiBJMThuKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuICAgIF9jbGFzc0NhbGxDaGVja19fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMsIEkxOG4pO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcblxuICAgIGlmIChpc0lFMTApIHtcbiAgICAgIEV2ZW50RW1pdHRlci5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRfX2RlZmF1bHRbJ2RlZmF1bHQnXShfdGhpcykpO1xuICAgIH1cblxuICAgIF90aGlzLm9wdGlvbnMgPSB0cmFuc2Zvcm1PcHRpb25zKG9wdGlvbnMpO1xuICAgIF90aGlzLnNlcnZpY2VzID0ge307XG4gICAgX3RoaXMubG9nZ2VyID0gYmFzZUxvZ2dlcjtcbiAgICBfdGhpcy5tb2R1bGVzID0ge1xuICAgICAgZXh0ZXJuYWw6IFtdXG4gICAgfTtcbiAgICBiaW5kTWVtYmVyRnVuY3Rpb25zKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRfX2RlZmF1bHRbJ2RlZmF1bHQnXShfdGhpcykpO1xuXG4gICAgaWYgKGNhbGxiYWNrICYmICFfdGhpcy5pc0luaXRpYWxpemVkICYmICFvcHRpb25zLmlzQ2xvbmUpIHtcbiAgICAgIGlmICghX3RoaXMub3B0aW9ucy5pbml0SW1tZWRpYXRlKSB7XG4gICAgICAgIF90aGlzLmluaXQob3B0aW9ucywgY2FsbGJhY2spO1xuXG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fZGVmYXVsdFsnZGVmYXVsdCddKF90aGlzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkX19kZWZhdWx0WydkZWZhdWx0J10oX3RoaXMpKTtcbiAgICAgIH1cblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmluaXQob3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzX19kZWZhdWx0WydkZWZhdWx0J10oSTE4biwgW3tcbiAgICBrZXk6IFwiaW5pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy5kZWZhdWx0TlMgJiYgb3B0aW9ucy5kZWZhdWx0TlMgIT09IGZhbHNlICYmIG9wdGlvbnMubnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm5zID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdE5TID0gb3B0aW9ucy5ucztcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm5zLmluZGV4T2YoJ3RyYW5zbGF0aW9uJykgPCAwKSB7XG4gICAgICAgICAgb3B0aW9ucy5kZWZhdWx0TlMgPSBvcHRpb25zLm5zWzBdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWZPcHRzID0gZ2V0KCk7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkJDYoX29iamVjdFNwcmVhZCQ2KF9vYmplY3RTcHJlYWQkNih7fSwgZGVmT3B0cyksIHRoaXMub3B0aW9ucyksIHRyYW5zZm9ybU9wdGlvbnMob3B0aW9ucykpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgIT09ICd2MScpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24gPSBfb2JqZWN0U3ByZWFkJDYoX29iamVjdFNwcmVhZCQ2KHt9LCBkZWZPcHRzLmludGVycG9sYXRpb24pLCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmtleVNlcGFyYXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvciA9IG9wdGlvbnMua2V5U2VwYXJhdG9yO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5uc1NlcGFyYXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yID0gb3B0aW9ucy5uc1NlcGFyYXRvcjtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY3JlYXRlQ2xhc3NPbkRlbWFuZChDbGFzc09yT2JqZWN0KSB7XG4gICAgICAgIGlmICghQ2xhc3NPck9iamVjdCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICh0eXBlb2YgQ2xhc3NPck9iamVjdCA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIG5ldyBDbGFzc09yT2JqZWN0KCk7XG4gICAgICAgIHJldHVybiBDbGFzc09yT2JqZWN0O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5pc0Nsb25lKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXMubG9nZ2VyKSB7XG4gICAgICAgICAgYmFzZUxvZ2dlci5pbml0KGNyZWF0ZUNsYXNzT25EZW1hbmQodGhpcy5tb2R1bGVzLmxvZ2dlciksIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZUxvZ2dlci5pbml0KG51bGwsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZm9ybWF0dGVyO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXMuZm9ybWF0dGVyKSB7XG4gICAgICAgICAgZm9ybWF0dGVyID0gdGhpcy5tb2R1bGVzLmZvcm1hdHRlcjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgSW50bCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBmb3JtYXR0ZXIgPSBGb3JtYXR0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbHUgPSBuZXcgTGFuZ3VhZ2VVdGlsKHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBuZXcgUmVzb3VyY2VTdG9yZSh0aGlzLm9wdGlvbnMucmVzb3VyY2VzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB2YXIgcyA9IHRoaXMuc2VydmljZXM7XG4gICAgICAgIHMubG9nZ2VyID0gYmFzZUxvZ2dlcjtcbiAgICAgICAgcy5yZXNvdXJjZVN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICAgICAgcy5sYW5ndWFnZVV0aWxzID0gbHU7XG4gICAgICAgIHMucGx1cmFsUmVzb2x2ZXIgPSBuZXcgUGx1cmFsUmVzb2x2ZXIobHUsIHtcbiAgICAgICAgICBwcmVwZW5kOiB0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yLFxuICAgICAgICAgIGNvbXBhdGliaWxpdHlKU09OOiB0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04sXG4gICAgICAgICAgc2ltcGxpZnlQbHVyYWxTdWZmaXg6IHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZm9ybWF0dGVyICYmICghdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0IHx8IHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCA9PT0gZGVmT3B0cy5pbnRlcnBvbGF0aW9uLmZvcm1hdCkpIHtcbiAgICAgICAgICBzLmZvcm1hdHRlciA9IGNyZWF0ZUNsYXNzT25EZW1hbmQoZm9ybWF0dGVyKTtcbiAgICAgICAgICBzLmZvcm1hdHRlci5pbml0KHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0ID0gcy5mb3JtYXR0ZXIuZm9ybWF0LmJpbmQocy5mb3JtYXR0ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcy5pbnRlcnBvbGF0b3IgPSBuZXcgSW50ZXJwb2xhdG9yKHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHMudXRpbHMgPSB7XG4gICAgICAgICAgaGFzTG9hZGVkTmFtZXNwYWNlOiB0aGlzLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKHRoaXMpXG4gICAgICAgIH07XG4gICAgICAgIHMuYmFja2VuZENvbm5lY3RvciA9IG5ldyBDb25uZWN0b3IoY3JlYXRlQ2xhc3NPbkRlbWFuZCh0aGlzLm1vZHVsZXMuYmFja2VuZCksIHMucmVzb3VyY2VTdG9yZSwgcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgcy5iYWNrZW5kQ29ubmVjdG9yLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMyLmVtaXQuYXBwbHkoX3RoaXMyLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3Rvcikge1xuICAgICAgICAgIHMubGFuZ3VhZ2VEZXRlY3RvciA9IGNyZWF0ZUNsYXNzT25EZW1hbmQodGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IpO1xuICAgICAgICAgIHMubGFuZ3VhZ2VEZXRlY3Rvci5pbml0KHMsIHRoaXMub3B0aW9ucy5kZXRlY3Rpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQpIHtcbiAgICAgICAgICBzLmkxOG5Gb3JtYXQgPSBjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0KTtcbiAgICAgICAgICBpZiAocy5pMThuRm9ybWF0LmluaXQpIHMuaTE4bkZvcm1hdC5pbml0KHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0b3IodGhpcy5zZXJ2aWNlcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdG9yLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMyLmVtaXQuYXBwbHkoX3RoaXMyLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1vZHVsZXMuZXh0ZXJuYWwuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgICAgICAgIGlmIChtLmluaXQpIG0uaW5pdChfdGhpczIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb3JtYXQgPSB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQ7XG4gICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IG5vb3A7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcgJiYgIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiAhdGhpcy5vcHRpb25zLmxuZykge1xuICAgICAgICB2YXIgY29kZXMgPSB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpO1xuICAgICAgICBpZiAoY29kZXMubGVuZ3RoID4gMCAmJiBjb2Rlc1swXSAhPT0gJ2RldicpIHRoaXMub3B0aW9ucy5sbmcgPSBjb2Rlc1swXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgIXRoaXMub3B0aW9ucy5sbmcpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignaW5pdDogbm8gbGFuZ3VhZ2VEZXRlY3RvciBpcyB1c2VkIGFuZCBubyBsbmcgaXMgZGVmaW5lZCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RvcmVBcGkgPSBbJ2dldFJlc291cmNlJywgJ2hhc1Jlc291cmNlQnVuZGxlJywgJ2dldFJlc291cmNlQnVuZGxlJywgJ2dldERhdGFCeUxhbmd1YWdlJ107XG4gICAgICBzdG9yZUFwaS5mb3JFYWNoKGZ1bmN0aW9uIChmY05hbWUpIHtcbiAgICAgICAgX3RoaXMyW2ZjTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzMiRzdG9yZTtcblxuICAgICAgICAgIHJldHVybiAoX3RoaXMyJHN0b3JlID0gX3RoaXMyLnN0b3JlKVtmY05hbWVdLmFwcGx5KF90aGlzMiRzdG9yZSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHN0b3JlQXBpQ2hhaW5lZCA9IFsnYWRkUmVzb3VyY2UnLCAnYWRkUmVzb3VyY2VzJywgJ2FkZFJlc291cmNlQnVuZGxlJywgJ3JlbW92ZVJlc291cmNlQnVuZGxlJ107XG4gICAgICBzdG9yZUFwaUNoYWluZWQuZm9yRWFjaChmdW5jdGlvbiAoZmNOYW1lKSB7XG4gICAgICAgIF90aGlzMltmY05hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBfdGhpczIkc3RvcmUyO1xuXG4gICAgICAgICAgKF90aGlzMiRzdG9yZTIgPSBfdGhpczIuc3RvcmUpW2ZjTmFtZV0uYXBwbHkoX3RoaXMyJHN0b3JlMiwgYXJndW1lbnRzKTtcblxuICAgICAgICAgIHJldHVybiBfdGhpczI7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG5cbiAgICAgIHZhciBsb2FkID0gZnVuY3Rpb24gbG9hZCgpIHtcbiAgICAgICAgdmFyIGZpbmlzaCA9IGZ1bmN0aW9uIGZpbmlzaChlcnIsIHQpIHtcbiAgICAgICAgICBpZiAoX3RoaXMyLmlzSW5pdGlhbGl6ZWQgJiYgIV90aGlzMi5pbml0aWFsaXplZFN0b3JlT25jZSkgX3RoaXMyLmxvZ2dlci53YXJuKCdpbml0OiBpMThuZXh0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIFlvdSBzaG91bGQgY2FsbCBpbml0IGp1c3Qgb25jZSEnKTtcbiAgICAgICAgICBfdGhpczIuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5pc0Nsb25lKSBfdGhpczIubG9nZ2VyLmxvZygnaW5pdGlhbGl6ZWQnLCBfdGhpczIub3B0aW9ucyk7XG5cbiAgICAgICAgICBfdGhpczIuZW1pdCgnaW5pdGlhbGl6ZWQnLCBfdGhpczIub3B0aW9ucyk7XG5cbiAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHQpO1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgdCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKF90aGlzMi5sYW5ndWFnZXMgJiYgX3RoaXMyLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSAhPT0gJ3YxJyAmJiAhX3RoaXMyLmlzSW5pdGlhbGl6ZWQpIHJldHVybiBmaW5pc2gobnVsbCwgX3RoaXMyLnQuYmluZChfdGhpczIpKTtcblxuICAgICAgICBfdGhpczIuY2hhbmdlTGFuZ3VhZ2UoX3RoaXMyLm9wdGlvbnMubG5nLCBmaW5pc2gpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZXNvdXJjZXMgfHwgIXRoaXMub3B0aW9ucy5pbml0SW1tZWRpYXRlKSB7XG4gICAgICAgIGxvYWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQobG9hZCwgMCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9hZFJlc291cmNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkUmVzb3VyY2VzKGxhbmd1YWdlKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBub29wO1xuICAgICAgdmFyIHVzZWRDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgdmFyIHVzZWRMbmcgPSB0eXBlb2YgbGFuZ3VhZ2UgPT09ICdzdHJpbmcnID8gbGFuZ3VhZ2UgOiB0aGlzLmxhbmd1YWdlO1xuICAgICAgaWYgKHR5cGVvZiBsYW5ndWFnZSA9PT0gJ2Z1bmN0aW9uJykgdXNlZENhbGxiYWNrID0gbGFuZ3VhZ2U7XG5cbiAgICAgIGlmICghdGhpcy5vcHRpb25zLnJlc291cmNlcyB8fCB0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpIHtcbiAgICAgICAgaWYgKHVzZWRMbmcgJiYgdXNlZExuZy50b0xvd2VyQ2FzZSgpID09PSAnY2ltb2RlJykgcmV0dXJuIHVzZWRDYWxsYmFjaygpO1xuICAgICAgICB2YXIgdG9Mb2FkID0gW107XG5cbiAgICAgICAgdmFyIGFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChsbmcpIHtcbiAgICAgICAgICBpZiAoIWxuZykgcmV0dXJuO1xuXG4gICAgICAgICAgdmFyIGxuZ3MgPSBfdGhpczMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkobG5nKTtcblxuICAgICAgICAgIGxuZ3MuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgaWYgKHRvTG9hZC5pbmRleE9mKGwpIDwgMCkgdG9Mb2FkLnB1c2gobCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCF1c2VkTG5nKSB7XG4gICAgICAgICAgdmFyIGZhbGxiYWNrcyA9IHRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyk7XG4gICAgICAgICAgZmFsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmQobCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXBwZW5kKHVzZWRMbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wcmVsb2FkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnByZWxvYWQuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcGVuZChsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5sb2FkKHRvTG9hZCwgdGhpcy5vcHRpb25zLm5zLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIGlmICghZSAmJiAhX3RoaXMzLnJlc29sdmVkTGFuZ3VhZ2UgJiYgX3RoaXMzLmxhbmd1YWdlKSBfdGhpczMuc2V0UmVzb2x2ZWRMYW5ndWFnZShfdGhpczMubGFuZ3VhZ2UpO1xuICAgICAgICAgIHVzZWRDYWxsYmFjayhlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1c2VkQ2FsbGJhY2sobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbG9hZFJlc291cmNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWxvYWRSZXNvdXJjZXMobG5ncywgbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuICAgICAgaWYgKCFsbmdzKSBsbmdzID0gdGhpcy5sYW5ndWFnZXM7XG4gICAgICBpZiAoIW5zKSBucyA9IHRoaXMub3B0aW9ucy5ucztcbiAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gbm9vcDtcbiAgICAgIHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5yZWxvYWQobG5ncywgbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1c2UobW9kdWxlKSB7XG4gICAgICBpZiAoIW1vZHVsZSkgdGhyb3cgbmV3IEVycm9yKCdZb3UgYXJlIHBhc3NpbmcgYW4gdW5kZWZpbmVkIG1vZHVsZSEgUGxlYXNlIGNoZWNrIHRoZSBvYmplY3QgeW91IGFyZSBwYXNzaW5nIHRvIGkxOG5leHQudXNlKCknKTtcbiAgICAgIGlmICghbW9kdWxlLnR5cGUpIHRocm93IG5ldyBFcnJvcignWW91IGFyZSBwYXNzaW5nIGEgd3JvbmcgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKScpO1xuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdiYWNrZW5kJykge1xuICAgICAgICB0aGlzLm1vZHVsZXMuYmFja2VuZCA9IG1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnbG9nZ2VyJyB8fCBtb2R1bGUubG9nICYmIG1vZHVsZS53YXJuICYmIG1vZHVsZS5lcnJvcikge1xuICAgICAgICB0aGlzLm1vZHVsZXMubG9nZ2VyID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdsYW5ndWFnZURldGVjdG9yJykge1xuICAgICAgICB0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3RvciA9IG1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnaTE4bkZvcm1hdCcpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQgPSBtb2R1bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ3Bvc3RQcm9jZXNzb3InKSB7XG4gICAgICAgIHBvc3RQcm9jZXNzb3IuYWRkUG9zdFByb2Nlc3Nvcihtb2R1bGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdmb3JtYXR0ZXInKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5mb3JtYXR0ZXIgPSBtb2R1bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJzNyZFBhcnR5Jykge1xuICAgICAgICB0aGlzLm1vZHVsZXMuZXh0ZXJuYWwucHVzaChtb2R1bGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0UmVzb2x2ZWRMYW5ndWFnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRSZXNvbHZlZExhbmd1YWdlKGwpIHtcbiAgICAgIGlmICghbCB8fCAhdGhpcy5sYW5ndWFnZXMpIHJldHVybjtcbiAgICAgIGlmIChbJ2NpbW9kZScsICdkZXYnXS5pbmRleE9mKGwpID4gLTEpIHJldHVybjtcblxuICAgICAgZm9yICh2YXIgbGkgPSAwOyBsaSA8IHRoaXMubGFuZ3VhZ2VzLmxlbmd0aDsgbGkrKykge1xuICAgICAgICB2YXIgbG5nSW5MbmdzID0gdGhpcy5sYW5ndWFnZXNbbGldO1xuICAgICAgICBpZiAoWydjaW1vZGUnLCAnZGV2J10uaW5kZXhPZihsbmdJbkxuZ3MpID4gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICh0aGlzLnN0b3JlLmhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9ucyhsbmdJbkxuZ3MpKSB7XG4gICAgICAgICAgdGhpcy5yZXNvbHZlZExhbmd1YWdlID0gbG5nSW5MbmdzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNoYW5nZUxhbmd1YWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNoYW5nZUxhbmd1YWdlKGxuZywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB0aGlzLmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvID0gbG5nO1xuICAgICAgdmFyIGRlZmVycmVkID0gZGVmZXIoKTtcbiAgICAgIHRoaXMuZW1pdCgnbGFuZ3VhZ2VDaGFuZ2luZycsIGxuZyk7XG5cbiAgICAgIHZhciBzZXRMbmdQcm9wcyA9IGZ1bmN0aW9uIHNldExuZ1Byb3BzKGwpIHtcbiAgICAgICAgX3RoaXM0Lmxhbmd1YWdlID0gbDtcbiAgICAgICAgX3RoaXM0Lmxhbmd1YWdlcyA9IF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShsKTtcbiAgICAgICAgX3RoaXM0LnJlc29sdmVkTGFuZ3VhZ2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgX3RoaXM0LnNldFJlc29sdmVkTGFuZ3VhZ2UobCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uIGRvbmUoZXJyLCBsKSB7XG4gICAgICAgIGlmIChsKSB7XG4gICAgICAgICAgc2V0TG5nUHJvcHMobCk7XG5cbiAgICAgICAgICBfdGhpczQudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShsKTtcblxuICAgICAgICAgIF90aGlzNC5pc0xhbmd1YWdlQ2hhbmdpbmdUbyA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIF90aGlzNC5lbWl0KCdsYW5ndWFnZUNoYW5nZWQnLCBsKTtcblxuICAgICAgICAgIF90aGlzNC5sb2dnZXIubG9nKCdsYW5ndWFnZUNoYW5nZWQnLCBsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczQuaXNMYW5ndWFnZUNoYW5naW5nVG8gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM0LnQuYXBwbHkoX3RoaXM0LCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM0LnQuYXBwbHkoX3RoaXM0LCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBzZXRMbmcgPSBmdW5jdGlvbiBzZXRMbmcobG5ncykge1xuICAgICAgICBpZiAoIWxuZyAmJiAhbG5ncyAmJiBfdGhpczQuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvcikgbG5ncyA9IFtdO1xuICAgICAgICB2YXIgbCA9IHR5cGVvZiBsbmdzID09PSAnc3RyaW5nJyA/IGxuZ3MgOiBfdGhpczQuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRCZXN0TWF0Y2hGcm9tQ29kZXMobG5ncyk7XG5cbiAgICAgICAgaWYgKGwpIHtcbiAgICAgICAgICBpZiAoIV90aGlzNC5sYW5ndWFnZSkge1xuICAgICAgICAgICAgc2V0TG5nUHJvcHMobCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFfdGhpczQudHJhbnNsYXRvci5sYW5ndWFnZSkgX3RoaXM0LnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UobCk7XG4gICAgICAgICAgaWYgKF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yKSBfdGhpczQuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5jYWNoZVVzZXJMYW5ndWFnZShsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzNC5sb2FkUmVzb3VyY2VzKGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBkb25lKGVyciwgbCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKCFsbmcgJiYgdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yICYmICF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuYXN5bmMpIHtcbiAgICAgICAgc2V0TG5nKHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5kZXRlY3QoKSk7XG4gICAgICB9IGVsc2UgaWYgKCFsbmcgJiYgdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yICYmIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYykge1xuICAgICAgICB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KHNldExuZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRMbmcobG5nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRGaXhlZFRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Rml4ZWRUKGxuZywgbnMsIGtleVByZWZpeCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBmaXhlZFQgPSBmdW5jdGlvbiBmaXhlZFQoa2V5LCBvcHRzKSB7XG4gICAgICAgIHZhciBvcHRpb25zO1xuXG4gICAgICAgIGlmIChfdHlwZW9mX19kZWZhdWx0WydkZWZhdWx0J10ob3B0cykgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMiA/IF9sZW4zIC0gMiA6IDApLCBfa2V5MyA9IDI7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgICAgIHJlc3RbX2tleTMgLSAyXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzNS5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKFtrZXksIG9wdHNdLmNvbmNhdChyZXN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucyA9IF9vYmplY3RTcHJlYWQkNih7fSwgb3B0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLmxuZyA9IG9wdGlvbnMubG5nIHx8IGZpeGVkVC5sbmc7XG4gICAgICAgIG9wdGlvbnMubG5ncyA9IG9wdGlvbnMubG5ncyB8fCBmaXhlZFQubG5ncztcbiAgICAgICAgb3B0aW9ucy5ucyA9IG9wdGlvbnMubnMgfHwgZml4ZWRULm5zO1xuICAgICAgICBvcHRpb25zLmtleVByZWZpeCA9IG9wdGlvbnMua2V5UHJlZml4IHx8IGtleVByZWZpeCB8fCBmaXhlZFQua2V5UHJlZml4O1xuICAgICAgICB2YXIga2V5U2VwYXJhdG9yID0gX3RoaXM1Lm9wdGlvbnMua2V5U2VwYXJhdG9yIHx8ICcuJztcbiAgICAgICAgdmFyIHJlc3VsdEtleSA9IG9wdGlvbnMua2V5UHJlZml4ID8gXCJcIi5jb25jYXQob3B0aW9ucy5rZXlQcmVmaXgpLmNvbmNhdChrZXlTZXBhcmF0b3IpLmNvbmNhdChrZXkpIDoga2V5O1xuICAgICAgICByZXR1cm4gX3RoaXM1LnQocmVzdWx0S2V5LCBvcHRpb25zKTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0eXBlb2YgbG5nID09PSAnc3RyaW5nJykge1xuICAgICAgICBmaXhlZFQubG5nID0gbG5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZml4ZWRULmxuZ3MgPSBsbmc7XG4gICAgICB9XG5cbiAgICAgIGZpeGVkVC5ucyA9IG5zO1xuICAgICAgZml4ZWRULmtleVByZWZpeCA9IGtleVByZWZpeDtcbiAgICAgIHJldHVybiBmaXhlZFQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdCgpIHtcbiAgICAgIHZhciBfdGhpcyR0cmFuc2xhdG9yO1xuXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdG9yICYmIChfdGhpcyR0cmFuc2xhdG9yID0gdGhpcy50cmFuc2xhdG9yKS50cmFuc2xhdGUuYXBwbHkoX3RoaXMkdHJhbnNsYXRvciwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXhpc3RzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGV4aXN0cygpIHtcbiAgICAgIHZhciBfdGhpcyR0cmFuc2xhdG9yMjtcblxuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRvciAmJiAoX3RoaXMkdHJhbnNsYXRvcjIgPSB0aGlzLnRyYW5zbGF0b3IpLmV4aXN0cy5hcHBseShfdGhpcyR0cmFuc2xhdG9yMiwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0RGVmYXVsdE5hbWVzcGFjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXREZWZhdWx0TmFtZXNwYWNlKG5zKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZGVmYXVsdE5TID0gbnM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc0xvYWRlZE5hbWVzcGFjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNMb2FkZWROYW1lc3BhY2UobnMpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2hhc0xvYWRlZE5hbWVzcGFjZTogaTE4bmV4dCB3YXMgbm90IGluaXRpYWxpemVkJywgdGhpcy5sYW5ndWFnZXMpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5sYW5ndWFnZXMgfHwgIXRoaXMubGFuZ3VhZ2VzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG4ubGFuZ3VhZ2VzIHdlcmUgdW5kZWZpbmVkIG9yIGVtcHR5JywgdGhpcy5sYW5ndWFnZXMpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBsbmcgPSB0aGlzLnJlc29sdmVkTGFuZ3VhZ2UgfHwgdGhpcy5sYW5ndWFnZXNbMF07XG4gICAgICB2YXIgZmFsbGJhY2tMbmcgPSB0aGlzLm9wdGlvbnMgPyB0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcgOiBmYWxzZTtcbiAgICAgIHZhciBsYXN0TG5nID0gdGhpcy5sYW5ndWFnZXNbdGhpcy5sYW5ndWFnZXMubGVuZ3RoIC0gMV07XG4gICAgICBpZiAobG5nLnRvTG93ZXJDYXNlKCkgPT09ICdjaW1vZGUnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgdmFyIGxvYWROb3RQZW5kaW5nID0gZnVuY3Rpb24gbG9hZE5vdFBlbmRpbmcobCwgbikge1xuICAgICAgICB2YXIgbG9hZFN0YXRlID0gX3RoaXM2LnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3Iuc3RhdGVbXCJcIi5jb25jYXQobCwgXCJ8XCIpLmNvbmNhdChuKV07XG5cbiAgICAgICAgcmV0dXJuIGxvYWRTdGF0ZSA9PT0gLTEgfHwgbG9hZFN0YXRlID09PSAyO1xuICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMucHJlY2hlY2spIHtcbiAgICAgICAgdmFyIHByZVJlc3VsdCA9IG9wdGlvbnMucHJlY2hlY2sodGhpcywgbG9hZE5vdFBlbmRpbmcpO1xuICAgICAgICBpZiAocHJlUmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiBwcmVSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmhhc1Jlc291cmNlQnVuZGxlKGxuZywgbnMpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICghdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmJhY2tlbmQgfHwgdGhpcy5vcHRpb25zLnJlc291cmNlcyAmJiAhdGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChsb2FkTm90UGVuZGluZyhsbmcsIG5zKSAmJiAoIWZhbGxiYWNrTG5nIHx8IGxvYWROb3RQZW5kaW5nKGxhc3RMbmcsIG5zKSkpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkTmFtZXNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkTmFtZXNwYWNlcyhucywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5ucykge1xuICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbnMgPT09ICdzdHJpbmcnKSBucyA9IFtuc107XG4gICAgICBucy5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIGlmIChfdGhpczcub3B0aW9ucy5ucy5pbmRleE9mKG4pIDwgMCkgX3RoaXM3Lm9wdGlvbnMubnMucHVzaChuKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2FkUmVzb3VyY2VzKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9hZExhbmd1YWdlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkTGFuZ3VhZ2VzKGxuZ3MsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuICAgICAgaWYgKHR5cGVvZiBsbmdzID09PSAnc3RyaW5nJykgbG5ncyA9IFtsbmdzXTtcbiAgICAgIHZhciBwcmVsb2FkZWQgPSB0aGlzLm9wdGlvbnMucHJlbG9hZCB8fCBbXTtcbiAgICAgIHZhciBuZXdMbmdzID0gbG5ncy5maWx0ZXIoZnVuY3Rpb24gKGxuZykge1xuICAgICAgICByZXR1cm4gcHJlbG9hZGVkLmluZGV4T2YobG5nKSA8IDA7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFuZXdMbmdzLmxlbmd0aCkge1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcHRpb25zLnByZWxvYWQgPSBwcmVsb2FkZWQuY29uY2F0KG5ld0xuZ3MpO1xuICAgICAgdGhpcy5sb2FkUmVzb3VyY2VzKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGlyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRpcihsbmcpIHtcbiAgICAgIGlmICghbG5nKSBsbmcgPSB0aGlzLnJlc29sdmVkTGFuZ3VhZ2UgfHwgKHRoaXMubGFuZ3VhZ2VzICYmIHRoaXMubGFuZ3VhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLmxhbmd1YWdlc1swXSA6IHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgaWYgKCFsbmcpIHJldHVybiAncnRsJztcbiAgICAgIHZhciBydGxMbmdzID0gWydhcicsICdzaHUnLCAnc3FyJywgJ3NzaCcsICd4YWEnLCAneWhkJywgJ3l1ZCcsICdhYW8nLCAnYWJoJywgJ2FidicsICdhY20nLCAnYWNxJywgJ2FjdycsICdhY3gnLCAnYWN5JywgJ2FkZicsICdhZHMnLCAnYWViJywgJ2FlYycsICdhZmInLCAnYWpwJywgJ2FwYycsICdhcGQnLCAnYXJiJywgJ2FycScsICdhcnMnLCAnYXJ5JywgJ2FyeicsICdhdXonLCAnYXZsJywgJ2F5aCcsICdheWwnLCAnYXluJywgJ2F5cCcsICdiYnonLCAncGdhJywgJ2hlJywgJ2l3JywgJ3BzJywgJ3BidCcsICdwYnUnLCAncHN0JywgJ3BycCcsICdwcmQnLCAndWcnLCAndXInLCAneWRkJywgJ3lkcycsICd5aWgnLCAnamknLCAneWknLCAnaGJvJywgJ21lbicsICd4bW4nLCAnZmEnLCAnanByJywgJ3BlbycsICdwZXMnLCAncHJzJywgJ2R2JywgJ3NhbScsICdja2InXTtcbiAgICAgIHJldHVybiBydGxMbmdzLmluZGV4T2YodGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGxuZykpID4gLTEgfHwgbG5nLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignLWFyYWInKSA+IDEgPyAncnRsJyA6ICdsdHInO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbG9uZUluc3RhbmNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lSW5zdGFuY2UoKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBub29wO1xuXG4gICAgICB2YXIgbWVyZ2VkT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoX29iamVjdFNwcmVhZCQ2KHt9LCB0aGlzLm9wdGlvbnMpLCBvcHRpb25zKSwge1xuICAgICAgICBpc0Nsb25lOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgdmFyIGNsb25lID0gbmV3IEkxOG4obWVyZ2VkT3B0aW9ucyk7XG5cbiAgICAgIGlmIChvcHRpb25zLmRlYnVnICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5wcmVmaXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbG9uZS5sb2dnZXIgPSBjbG9uZS5sb2dnZXIuY2xvbmUob3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBtZW1iZXJzVG9Db3B5ID0gWydzdG9yZScsICdzZXJ2aWNlcycsICdsYW5ndWFnZSddO1xuICAgICAgbWVtYmVyc1RvQ29weS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgIGNsb25lW21dID0gX3RoaXM4W21dO1xuICAgICAgfSk7XG4gICAgICBjbG9uZS5zZXJ2aWNlcyA9IF9vYmplY3RTcHJlYWQkNih7fSwgdGhpcy5zZXJ2aWNlcyk7XG4gICAgICBjbG9uZS5zZXJ2aWNlcy51dGlscyA9IHtcbiAgICAgICAgaGFzTG9hZGVkTmFtZXNwYWNlOiBjbG9uZS5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChjbG9uZSlcbiAgICAgIH07XG4gICAgICBjbG9uZS50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0b3IoY2xvbmUuc2VydmljZXMsIGNsb25lLm9wdGlvbnMpO1xuICAgICAgY2xvbmUudHJhbnNsYXRvci5vbignKicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICAgIGFyZ3NbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9uZS5lbWl0LmFwcGx5KGNsb25lLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICB9KTtcbiAgICAgIGNsb25lLmluaXQobWVyZ2VkT3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgY2xvbmUudHJhbnNsYXRvci5vcHRpb25zID0gY2xvbmUub3B0aW9ucztcbiAgICAgIGNsb25lLnRyYW5zbGF0b3IuYmFja2VuZENvbm5lY3Rvci5zZXJ2aWNlcy51dGlscyA9IHtcbiAgICAgICAgaGFzTG9hZGVkTmFtZXNwYWNlOiBjbG9uZS5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChjbG9uZSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvSlNPTlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLFxuICAgICAgICBsYW5ndWFnZTogdGhpcy5sYW5ndWFnZSxcbiAgICAgICAgbGFuZ3VhZ2VzOiB0aGlzLmxhbmd1YWdlcyxcbiAgICAgICAgcmVzb2x2ZWRMYW5ndWFnZTogdGhpcy5yZXNvbHZlZExhbmd1YWdlXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBJMThuO1xufShFdmVudEVtaXR0ZXIpO1xuXG5fZGVmaW5lUHJvcGVydHlfX2RlZmF1bHRbJ2RlZmF1bHQnXShJMThuLCBcImNyZWF0ZUluc3RhbmNlXCIsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG5ldyBJMThuKG9wdGlvbnMsIGNhbGxiYWNrKTtcbn0pO1xuXG52YXIgaW5zdGFuY2UgPSBJMThuLmNyZWF0ZUluc3RhbmNlKCk7XG5pbnN0YW5jZS5jcmVhdGVJbnN0YW5jZSA9IEkxOG4uY3JlYXRlSW5zdGFuY2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zdGFuY2U7XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiXG52YXIgaW5kZXhPZiA9IFtdLmluZGV4T2Y7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYXJyLCBvYmope1xuICBpZiAoaW5kZXhPZikgcmV0dXJuIGFyci5pbmRleE9mKG9iaik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFycltpXSA9PT0gb2JqKSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gLTE7XG59OyIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLyogZ2xvYmFscyBkZWZpbmUgKi9cbi8qXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cblxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcblRoZSBmb2xsb3dpbmcgYmF0Y2hlcyBhcmUgZXF1aXZhbGVudDpcblxudmFyIGJlYXV0aWZ5X2pzID0gcmVxdWlyZSgnanMtYmVhdXRpZnknKTtcbnZhciBiZWF1dGlmeV9qcyA9IHJlcXVpcmUoJ2pzLWJlYXV0aWZ5JykuanM7XG52YXIgYmVhdXRpZnlfanMgPSByZXF1aXJlKCdqcy1iZWF1dGlmeScpLmpzX2JlYXV0aWZ5O1xuXG52YXIgYmVhdXRpZnlfY3NzID0gcmVxdWlyZSgnanMtYmVhdXRpZnknKS5jc3M7XG52YXIgYmVhdXRpZnlfY3NzID0gcmVxdWlyZSgnanMtYmVhdXRpZnknKS5jc3NfYmVhdXRpZnk7XG5cbnZhciBiZWF1dGlmeV9odG1sID0gcmVxdWlyZSgnanMtYmVhdXRpZnknKS5odG1sO1xudmFyIGJlYXV0aWZ5X2h0bWwgPSByZXF1aXJlKCdqcy1iZWF1dGlmeScpLmh0bWxfYmVhdXRpZnk7XG5cbkFsbCBtZXRob2RzIHJldHVybmVkIGFjY2VwdCB0d28gYXJndW1lbnRzLCB0aGUgc291cmNlIHN0cmluZyBhbmQgYW4gb3B0aW9ucyBvYmplY3QuXG4qKi9cblxuZnVuY3Rpb24gZ2V0X2JlYXV0aWZ5KGpzX2JlYXV0aWZ5LCBjc3NfYmVhdXRpZnksIGh0bWxfYmVhdXRpZnkpIHtcbiAgLy8gdGhlIGRlZmF1bHQgaXMganNcbiAgdmFyIGJlYXV0aWZ5ID0gZnVuY3Rpb24oc3JjLCBjb25maWcpIHtcbiAgICByZXR1cm4ganNfYmVhdXRpZnkuanNfYmVhdXRpZnkoc3JjLCBjb25maWcpO1xuICB9O1xuXG4gIC8vIHNob3J0IGFsaWFzZXNcbiAgYmVhdXRpZnkuanMgPSBqc19iZWF1dGlmeS5qc19iZWF1dGlmeTtcbiAgYmVhdXRpZnkuY3NzID0gY3NzX2JlYXV0aWZ5LmNzc19iZWF1dGlmeTtcbiAgYmVhdXRpZnkuaHRtbCA9IGh0bWxfYmVhdXRpZnkuaHRtbF9iZWF1dGlmeTtcblxuICAvLyBsZWdhY3kgYWxpYXNlc1xuICBiZWF1dGlmeS5qc19iZWF1dGlmeSA9IGpzX2JlYXV0aWZ5LmpzX2JlYXV0aWZ5O1xuICBiZWF1dGlmeS5jc3NfYmVhdXRpZnkgPSBjc3NfYmVhdXRpZnkuY3NzX2JlYXV0aWZ5O1xuICBiZWF1dGlmeS5odG1sX2JlYXV0aWZ5ID0gaHRtbF9iZWF1dGlmeS5odG1sX2JlYXV0aWZ5O1xuXG4gIHJldHVybiBiZWF1dGlmeTtcbn1cblxuaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gIC8vIEFkZCBzdXBwb3J0IGZvciBBTUQgKCBodHRwczovL2dpdGh1Yi5jb20vYW1kanMvYW1kanMtYXBpL3dpa2kvQU1EI2RlZmluZWFtZC1wcm9wZXJ0eS0gKVxuICBkZWZpbmUoW1xuICAgIFwiLi9saWIvYmVhdXRpZnlcIixcbiAgICBcIi4vbGliL2JlYXV0aWZ5LWNzc1wiLFxuICAgIFwiLi9saWIvYmVhdXRpZnktaHRtbFwiXG4gIF0sIGZ1bmN0aW9uKGpzX2JlYXV0aWZ5LCBjc3NfYmVhdXRpZnksIGh0bWxfYmVhdXRpZnkpIHtcbiAgICByZXR1cm4gZ2V0X2JlYXV0aWZ5KGpzX2JlYXV0aWZ5LCBjc3NfYmVhdXRpZnksIGh0bWxfYmVhdXRpZnkpO1xuICB9KTtcbn0gZWxzZSB7XG4gIChmdW5jdGlvbihtb2QpIHtcbiAgICB2YXIgYmVhdXRpZmllciA9IHJlcXVpcmUoJy4vc3JjL2luZGV4Jyk7XG4gICAgYmVhdXRpZmllci5qc19iZWF1dGlmeSA9IGJlYXV0aWZpZXIuanM7XG4gICAgYmVhdXRpZmllci5jc3NfYmVhdXRpZnkgPSBiZWF1dGlmaWVyLmNzcztcbiAgICBiZWF1dGlmaWVyLmh0bWxfYmVhdXRpZnkgPSBiZWF1dGlmaWVyLmh0bWw7XG5cbiAgICBtb2QuZXhwb3J0cyA9IGdldF9iZWF1dGlmeShiZWF1dGlmaWVyLCBiZWF1dGlmaWVyLCBiZWF1dGlmaWVyKTtcblxuICB9KShtb2R1bGUpO1xufSIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIERpcmVjdGl2ZXMoc3RhcnRfYmxvY2tfcGF0dGVybiwgZW5kX2Jsb2NrX3BhdHRlcm4pIHtcbiAgc3RhcnRfYmxvY2tfcGF0dGVybiA9IHR5cGVvZiBzdGFydF9ibG9ja19wYXR0ZXJuID09PSAnc3RyaW5nJyA/IHN0YXJ0X2Jsb2NrX3BhdHRlcm4gOiBzdGFydF9ibG9ja19wYXR0ZXJuLnNvdXJjZTtcbiAgZW5kX2Jsb2NrX3BhdHRlcm4gPSB0eXBlb2YgZW5kX2Jsb2NrX3BhdHRlcm4gPT09ICdzdHJpbmcnID8gZW5kX2Jsb2NrX3BhdHRlcm4gOiBlbmRfYmxvY2tfcGF0dGVybi5zb3VyY2U7XG4gIHRoaXMuX19kaXJlY3RpdmVzX2Jsb2NrX3BhdHRlcm4gPSBuZXcgUmVnRXhwKHN0YXJ0X2Jsb2NrX3BhdHRlcm4gKyAvIGJlYXV0aWZ5KCBcXHcrWzpdXFx3KykrIC8uc291cmNlICsgZW5kX2Jsb2NrX3BhdHRlcm4sICdnJyk7XG4gIHRoaXMuX19kaXJlY3RpdmVfcGF0dGVybiA9IC8gKFxcdyspWzpdKFxcdyspL2c7XG5cbiAgdGhpcy5fX2RpcmVjdGl2ZXNfZW5kX2lnbm9yZV9wYXR0ZXJuID0gbmV3IFJlZ0V4cChzdGFydF9ibG9ja19wYXR0ZXJuICsgL1xcc2JlYXV0aWZ5XFxzaWdub3JlOmVuZFxccy8uc291cmNlICsgZW5kX2Jsb2NrX3BhdHRlcm4sICdnJyk7XG59XG5cbkRpcmVjdGl2ZXMucHJvdG90eXBlLmdldF9kaXJlY3RpdmVzID0gZnVuY3Rpb24odGV4dCkge1xuICBpZiAoIXRleHQubWF0Y2godGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBkaXJlY3RpdmVzID0ge307XG4gIHRoaXMuX19kaXJlY3RpdmVfcGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICB2YXIgZGlyZWN0aXZlX21hdGNoID0gdGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmV4ZWModGV4dCk7XG5cbiAgd2hpbGUgKGRpcmVjdGl2ZV9tYXRjaCkge1xuICAgIGRpcmVjdGl2ZXNbZGlyZWN0aXZlX21hdGNoWzFdXSA9IGRpcmVjdGl2ZV9tYXRjaFsyXTtcbiAgICBkaXJlY3RpdmVfbWF0Y2ggPSB0aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyh0ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkaXJlY3RpdmVzO1xufTtcblxuRGlyZWN0aXZlcy5wcm90b3R5cGUucmVhZElnbm9yZWQgPSBmdW5jdGlvbihpbnB1dCkge1xuICByZXR1cm4gaW5wdXQucmVhZFVudGlsQWZ0ZXIodGhpcy5fX2RpcmVjdGl2ZXNfZW5kX2lnbm9yZV9wYXR0ZXJuKTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMuRGlyZWN0aXZlcyA9IERpcmVjdGl2ZXM7XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwX2hhc19zdGlja3kgPSBSZWdFeHAucHJvdG90eXBlLmhhc093blByb3BlcnR5KCdzdGlja3knKTtcblxuZnVuY3Rpb24gSW5wdXRTY2FubmVyKGlucHV0X3N0cmluZykge1xuICB0aGlzLl9faW5wdXQgPSBpbnB1dF9zdHJpbmcgfHwgJyc7XG4gIHRoaXMuX19pbnB1dF9sZW5ndGggPSB0aGlzLl9faW5wdXQubGVuZ3RoO1xuICB0aGlzLl9fcG9zaXRpb24gPSAwO1xufVxuXG5JbnB1dFNjYW5uZXIucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fX3Bvc2l0aW9uID0gMDtcbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUuYmFjayA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fX3Bvc2l0aW9uID4gMCkge1xuICAgIHRoaXMuX19wb3NpdGlvbiAtPSAxO1xuICB9XG59O1xuXG5JbnB1dFNjYW5uZXIucHJvdG90eXBlLmhhc05leHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX19wb3NpdGlvbiA8IHRoaXMuX19pbnB1dF9sZW5ndGg7XG59O1xuXG5JbnB1dFNjYW5uZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbCA9IG51bGw7XG4gIGlmICh0aGlzLmhhc05leHQoKSkge1xuICAgIHZhbCA9IHRoaXMuX19pbnB1dC5jaGFyQXQodGhpcy5fX3Bvc2l0aW9uKTtcbiAgICB0aGlzLl9fcG9zaXRpb24gKz0gMTtcbiAgfVxuICByZXR1cm4gdmFsO1xufTtcblxuSW5wdXRTY2FubmVyLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgdmFyIHZhbCA9IG51bGw7XG4gIGluZGV4ID0gaW5kZXggfHwgMDtcbiAgaW5kZXggKz0gdGhpcy5fX3Bvc2l0aW9uO1xuICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuX19pbnB1dF9sZW5ndGgpIHtcbiAgICB2YWwgPSB0aGlzLl9faW5wdXQuY2hhckF0KGluZGV4KTtcbiAgfVxuICByZXR1cm4gdmFsO1xufTtcblxuLy8gVGhpcyBpcyBhIEphdmFTY3JpcHQgb25seSBoZWxwZXIgZnVuY3Rpb24gKG5vdCBpbiBweXRob24pXG4vLyBKYXZhc2NyaXB0IGRvZXNuJ3QgaGF2ZSBhIG1hdGNoIG1ldGhvZFxuLy8gYW5kIG5vdCBhbGwgaW1wbGVtZW50YXRpb24gc3VwcG9ydCBcInN0aWNreVwiIGZsYWcuXG4vLyBJZiB0aGV5IGRvIG5vdCBzdXBwb3J0IHN0aWNreSB0aGVuIGJvdGggdGhpcy5tYXRjaCgpIGFuZCB0aGlzLnRlc3QoKSBtZXRob2Rcbi8vIG11c3QgZ2V0IHRoZSBtYXRjaCBhbmQgY2hlY2sgdGhlIGluZGV4IG9mIHRoZSBtYXRjaC5cbi8vIElmIHN0aWNreSBpcyBzdXBwb3J0ZWQgYW5kIHNldCwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgaXQuXG4vLyBPdGhlcndpc2UgaXQgd2lsbCBjaGVjayB0aGF0IGdsb2JhbCBpcyBzZXQsIGFuZCBmYWxsIGJhY2sgdG8gdGhlIHNsb3dlciBtZXRob2QuXG5JbnB1dFNjYW5uZXIucHJvdG90eXBlLl9fbWF0Y2ggPSBmdW5jdGlvbihwYXR0ZXJuLCBpbmRleCkge1xuICBwYXR0ZXJuLmxhc3RJbmRleCA9IGluZGV4O1xuICB2YXIgcGF0dGVybl9tYXRjaCA9IHBhdHRlcm4uZXhlYyh0aGlzLl9faW5wdXQpO1xuXG4gIGlmIChwYXR0ZXJuX21hdGNoICYmICEocmVnZXhwX2hhc19zdGlja3kgJiYgcGF0dGVybi5zdGlja3kpKSB7XG4gICAgaWYgKHBhdHRlcm5fbWF0Y2guaW5kZXggIT09IGluZGV4KSB7XG4gICAgICBwYXR0ZXJuX21hdGNoID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGF0dGVybl9tYXRjaDtcbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUudGVzdCA9IGZ1bmN0aW9uKHBhdHRlcm4sIGluZGV4KSB7XG4gIGluZGV4ID0gaW5kZXggfHwgMDtcbiAgaW5kZXggKz0gdGhpcy5fX3Bvc2l0aW9uO1xuXG4gIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5fX2lucHV0X2xlbmd0aCkge1xuICAgIHJldHVybiAhIXRoaXMuX19tYXRjaChwYXR0ZXJuLCBpbmRleCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5JbnB1dFNjYW5uZXIucHJvdG90eXBlLnRlc3RDaGFyID0gZnVuY3Rpb24ocGF0dGVybiwgaW5kZXgpIHtcbiAgLy8gdGVzdCBvbmUgY2hhcmFjdGVyIHJlZ2V4IG1hdGNoXG4gIHZhciB2YWwgPSB0aGlzLnBlZWsoaW5kZXgpO1xuICBwYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgcGF0dGVybi50ZXN0KHZhbCk7XG59O1xuXG5JbnB1dFNjYW5uZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24ocGF0dGVybikge1xuICB2YXIgcGF0dGVybl9tYXRjaCA9IHRoaXMuX19tYXRjaChwYXR0ZXJuLCB0aGlzLl9fcG9zaXRpb24pO1xuICBpZiAocGF0dGVybl9tYXRjaCkge1xuICAgIHRoaXMuX19wb3NpdGlvbiArPSBwYXR0ZXJuX21hdGNoWzBdLmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICBwYXR0ZXJuX21hdGNoID0gbnVsbDtcbiAgfVxuICByZXR1cm4gcGF0dGVybl9tYXRjaDtcbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKHN0YXJ0aW5nX3BhdHRlcm4sIHVudGlsX3BhdHRlcm4sIHVudGlsX2FmdGVyKSB7XG4gIHZhciB2YWwgPSAnJztcbiAgdmFyIG1hdGNoO1xuICBpZiAoc3RhcnRpbmdfcGF0dGVybikge1xuICAgIG1hdGNoID0gdGhpcy5tYXRjaChzdGFydGluZ19wYXR0ZXJuKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHZhbCArPSBtYXRjaFswXTtcbiAgICB9XG4gIH1cbiAgaWYgKHVudGlsX3BhdHRlcm4gJiYgKG1hdGNoIHx8ICFzdGFydGluZ19wYXR0ZXJuKSkge1xuICAgIHZhbCArPSB0aGlzLnJlYWRVbnRpbCh1bnRpbF9wYXR0ZXJuLCB1bnRpbF9hZnRlcik7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUucmVhZFVudGlsID0gZnVuY3Rpb24ocGF0dGVybiwgdW50aWxfYWZ0ZXIpIHtcbiAgdmFyIHZhbCA9ICcnO1xuICB2YXIgbWF0Y2hfaW5kZXggPSB0aGlzLl9fcG9zaXRpb247XG4gIHBhdHRlcm4ubGFzdEluZGV4ID0gdGhpcy5fX3Bvc2l0aW9uO1xuICB2YXIgcGF0dGVybl9tYXRjaCA9IHBhdHRlcm4uZXhlYyh0aGlzLl9faW5wdXQpO1xuICBpZiAocGF0dGVybl9tYXRjaCkge1xuICAgIG1hdGNoX2luZGV4ID0gcGF0dGVybl9tYXRjaC5pbmRleDtcbiAgICBpZiAodW50aWxfYWZ0ZXIpIHtcbiAgICAgIG1hdGNoX2luZGV4ICs9IHBhdHRlcm5fbWF0Y2hbMF0ubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBtYXRjaF9pbmRleCA9IHRoaXMuX19pbnB1dF9sZW5ndGg7XG4gIH1cblxuICB2YWwgPSB0aGlzLl9faW5wdXQuc3Vic3RyaW5nKHRoaXMuX19wb3NpdGlvbiwgbWF0Y2hfaW5kZXgpO1xuICB0aGlzLl9fcG9zaXRpb24gPSBtYXRjaF9pbmRleDtcbiAgcmV0dXJuIHZhbDtcbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUucmVhZFVudGlsQWZ0ZXIgPSBmdW5jdGlvbihwYXR0ZXJuKSB7XG4gIHJldHVybiB0aGlzLnJlYWRVbnRpbChwYXR0ZXJuLCB0cnVlKTtcbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUuZ2V0X3JlZ2V4cCA9IGZ1bmN0aW9uKHBhdHRlcm4sIG1hdGNoX2Zyb20pIHtcbiAgdmFyIHJlc3VsdCA9IG51bGw7XG4gIHZhciBmbGFncyA9ICdnJztcbiAgaWYgKG1hdGNoX2Zyb20gJiYgcmVnZXhwX2hhc19zdGlja3kpIHtcbiAgICBmbGFncyA9ICd5JztcbiAgfVxuICAvLyBzdHJpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gcmVnZXhwXG4gIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gXCJzdHJpbmdcIiAmJiBwYXR0ZXJuICE9PSAnJykge1xuICAgIC8vIHJlc3VsdCA9IG5ldyBSZWdFeHAocGF0dGVybi5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKSwgZmxhZ3MpO1xuICAgIHJlc3VsdCA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuICB9IGVsc2UgaWYgKHBhdHRlcm4pIHtcbiAgICByZXN1bHQgPSBuZXcgUmVnRXhwKHBhdHRlcm4uc291cmNlLCBmbGFncyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbklucHV0U2Nhbm5lci5wcm90b3R5cGUuZ2V0X2xpdGVyYWxfcmVnZXhwID0gZnVuY3Rpb24obGl0ZXJhbF9zdHJpbmcpIHtcbiAgcmV0dXJuIFJlZ0V4cChsaXRlcmFsX3N0cmluZy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKSk7XG59O1xuXG4vKiBjc3MgYmVhdXRpZmllciBsZWdhY3kgaGVscGVycyAqL1xuSW5wdXRTY2FubmVyLnByb3RvdHlwZS5wZWVrVW50aWxBZnRlciA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgdmFyIHN0YXJ0ID0gdGhpcy5fX3Bvc2l0aW9uO1xuICB2YXIgdmFsID0gdGhpcy5yZWFkVW50aWxBZnRlcihwYXR0ZXJuKTtcbiAgdGhpcy5fX3Bvc2l0aW9uID0gc3RhcnQ7XG4gIHJldHVybiB2YWw7XG59O1xuXG5JbnB1dFNjYW5uZXIucHJvdG90eXBlLmxvb2tCYWNrID0gZnVuY3Rpb24odGVzdFZhbCkge1xuICB2YXIgc3RhcnQgPSB0aGlzLl9fcG9zaXRpb24gLSAxO1xuICByZXR1cm4gc3RhcnQgPj0gdGVzdFZhbC5sZW5ndGggJiYgdGhpcy5fX2lucHV0LnN1YnN0cmluZyhzdGFydCAtIHRlc3RWYWwubGVuZ3RoLCBzdGFydClcbiAgICAudG9Mb3dlckNhc2UoKSA9PT0gdGVzdFZhbDtcbn07XG5cbm1vZHVsZS5leHBvcnRzLklucHV0U2Nhbm5lciA9IElucHV0U2Nhbm5lcjtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIE9wdGlvbnMob3B0aW9ucywgbWVyZ2VfY2hpbGRfZmllbGQpIHtcbiAgdGhpcy5yYXdfb3B0aW9ucyA9IF9tZXJnZU9wdHMob3B0aW9ucywgbWVyZ2VfY2hpbGRfZmllbGQpO1xuXG4gIC8vIFN1cHBvcnQgcGFzc2luZyB0aGUgc291cmNlIHRleHQgYmFjayB3aXRoIG5vIGNoYW5nZVxuICB0aGlzLmRpc2FibGVkID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2Rpc2FibGVkJyk7XG5cbiAgdGhpcy5lb2wgPSB0aGlzLl9nZXRfY2hhcmFjdGVycygnZW9sJywgJ2F1dG8nKTtcbiAgdGhpcy5lbmRfd2l0aF9uZXdsaW5lID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2VuZF93aXRoX25ld2xpbmUnKTtcbiAgdGhpcy5pbmRlbnRfc2l6ZSA9IHRoaXMuX2dldF9udW1iZXIoJ2luZGVudF9zaXplJywgNCk7XG4gIHRoaXMuaW5kZW50X2NoYXIgPSB0aGlzLl9nZXRfY2hhcmFjdGVycygnaW5kZW50X2NoYXInLCAnICcpO1xuICB0aGlzLmluZGVudF9sZXZlbCA9IHRoaXMuX2dldF9udW1iZXIoJ2luZGVudF9sZXZlbCcpO1xuXG4gIHRoaXMucHJlc2VydmVfbmV3bGluZXMgPSB0aGlzLl9nZXRfYm9vbGVhbigncHJlc2VydmVfbmV3bGluZXMnLCB0cnVlKTtcbiAgdGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXMgPSB0aGlzLl9nZXRfbnVtYmVyKCdtYXhfcHJlc2VydmVfbmV3bGluZXMnLCAzMjc4Nik7XG4gIGlmICghdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lcykge1xuICAgIHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzID0gMDtcbiAgfVxuXG4gIHRoaXMuaW5kZW50X3dpdGhfdGFicyA9IHRoaXMuX2dldF9ib29sZWFuKCdpbmRlbnRfd2l0aF90YWJzJywgdGhpcy5pbmRlbnRfY2hhciA9PT0gJ1xcdCcpO1xuICBpZiAodGhpcy5pbmRlbnRfd2l0aF90YWJzKSB7XG4gICAgdGhpcy5pbmRlbnRfY2hhciA9ICdcXHQnO1xuXG4gICAgLy8gaW5kZW50X3NpemUgYmVoYXZpb3IgY2hhbmdlZCBhZnRlciAxLjguNlxuICAgIC8vIEl0IHVzZWQgdG8gYmUgdGhhdCBpbmRlbnRfc2l6ZSB3b3VsZCBiZVxuICAgIC8vIHNldCB0byAxIGZvciBpbmRlbnRfd2l0aF90YWJzLiBUaGF0IGlzIG5vIGxvbmdlciBuZWVkZWQgYW5kXG4gICAgLy8gYWN0dWFsbHkgZG9lc24ndCBtYWtlIHNlbnNlIC0gd2h5IG5vdCB1c2Ugc3BhY2VzPyBGdXJ0aGVyLFxuICAgIC8vIHRoYXQgbWlnaHQgcHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIC0gdGFicyBiZWluZyB1c2VkXG4gICAgLy8gZm9yIHNpbmdsZS1jb2x1bW4gYWxpZ25tZW50LiBTbywgd2hlbiBpbmRlbnRfd2l0aF90YWJzIGlzIHRydWVcbiAgICAvLyBhbmQgaW5kZW50X3NpemUgaXMgMSwgcmVzZXQgaW5kZW50X3NpemUgdG8gNC5cbiAgICBpZiAodGhpcy5pbmRlbnRfc2l6ZSA9PT0gMSkge1xuICAgICAgdGhpcy5pbmRlbnRfc2l6ZSA9IDQ7XG4gICAgfVxuICB9XG5cbiAgLy8gQmFja3dhcmRzIGNvbXBhdCB3aXRoIDEuMy54XG4gIHRoaXMud3JhcF9saW5lX2xlbmd0aCA9IHRoaXMuX2dldF9udW1iZXIoJ3dyYXBfbGluZV9sZW5ndGgnLCB0aGlzLl9nZXRfbnVtYmVyKCdtYXhfY2hhcicpKTtcblxuICB0aGlzLmluZGVudF9lbXB0eV9saW5lcyA9IHRoaXMuX2dldF9ib29sZWFuKCdpbmRlbnRfZW1wdHlfbGluZXMnKTtcblxuICAvLyB2YWxpZCB0ZW1wbGF0aW5nIGxhbmd1YWdlcyBbJ2RqYW5nbycsICdlcmInLCAnaGFuZGxlYmFycycsICdwaHAnLCAnc21hcnR5J11cbiAgLy8gRm9yIG5vdywgJ2F1dG8nID0gYWxsIG9mZiBmb3IgamF2YXNjcmlwdCwgYWxsIG9uIGZvciBodG1sIChhbmQgaW5saW5lIGphdmFzY3JpcHQpLlxuICAvLyBvdGhlciB2YWx1ZXMgaWdub3JlZFxuICB0aGlzLnRlbXBsYXRpbmcgPSB0aGlzLl9nZXRfc2VsZWN0aW9uX2xpc3QoJ3RlbXBsYXRpbmcnLCBbJ2F1dG8nLCAnbm9uZScsICdkamFuZ28nLCAnZXJiJywgJ2hhbmRsZWJhcnMnLCAncGhwJywgJ3NtYXJ0eSddLCBbJ2F1dG8nXSk7XG59XG5cbk9wdGlvbnMucHJvdG90eXBlLl9nZXRfYXJyYXkgPSBmdW5jdGlvbihuYW1lLCBkZWZhdWx0X3ZhbHVlKSB7XG4gIHZhciBvcHRpb25fdmFsdWUgPSB0aGlzLnJhd19vcHRpb25zW25hbWVdO1xuICB2YXIgcmVzdWx0ID0gZGVmYXVsdF92YWx1ZSB8fCBbXTtcbiAgaWYgKHR5cGVvZiBvcHRpb25fdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKG9wdGlvbl92YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9uX3ZhbHVlLmNvbmNhdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVzdWx0ID0gb3B0aW9uX3ZhbHVlLmNvbmNhdCgpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uX3ZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJlc3VsdCA9IG9wdGlvbl92YWx1ZS5zcGxpdCgvW15hLXpBLVowLTlfXFwvXFwtXSsvKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuT3B0aW9ucy5wcm90b3R5cGUuX2dldF9ib29sZWFuID0gZnVuY3Rpb24obmFtZSwgZGVmYXVsdF92YWx1ZSkge1xuICB2YXIgb3B0aW9uX3ZhbHVlID0gdGhpcy5yYXdfb3B0aW9uc1tuYW1lXTtcbiAgdmFyIHJlc3VsdCA9IG9wdGlvbl92YWx1ZSA9PT0gdW5kZWZpbmVkID8gISFkZWZhdWx0X3ZhbHVlIDogISFvcHRpb25fdmFsdWU7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5PcHRpb25zLnByb3RvdHlwZS5fZ2V0X2NoYXJhY3RlcnMgPSBmdW5jdGlvbihuYW1lLCBkZWZhdWx0X3ZhbHVlKSB7XG4gIHZhciBvcHRpb25fdmFsdWUgPSB0aGlzLnJhd19vcHRpb25zW25hbWVdO1xuICB2YXIgcmVzdWx0ID0gZGVmYXVsdF92YWx1ZSB8fCAnJztcbiAgaWYgKHR5cGVvZiBvcHRpb25fdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVzdWx0ID0gb3B0aW9uX3ZhbHVlLnJlcGxhY2UoL1xcXFxyLywgJ1xccicpLnJlcGxhY2UoL1xcXFxuLywgJ1xcbicpLnJlcGxhY2UoL1xcXFx0LywgJ1xcdCcpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5PcHRpb25zLnByb3RvdHlwZS5fZ2V0X251bWJlciA9IGZ1bmN0aW9uKG5hbWUsIGRlZmF1bHRfdmFsdWUpIHtcbiAgdmFyIG9wdGlvbl92YWx1ZSA9IHRoaXMucmF3X29wdGlvbnNbbmFtZV07XG4gIGRlZmF1bHRfdmFsdWUgPSBwYXJzZUludChkZWZhdWx0X3ZhbHVlLCAxMCk7XG4gIGlmIChpc05hTihkZWZhdWx0X3ZhbHVlKSkge1xuICAgIGRlZmF1bHRfdmFsdWUgPSAwO1xuICB9XG4gIHZhciByZXN1bHQgPSBwYXJzZUludChvcHRpb25fdmFsdWUsIDEwKTtcbiAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICByZXN1bHQgPSBkZWZhdWx0X3ZhbHVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5PcHRpb25zLnByb3RvdHlwZS5fZ2V0X3NlbGVjdGlvbiA9IGZ1bmN0aW9uKG5hbWUsIHNlbGVjdGlvbl9saXN0LCBkZWZhdWx0X3ZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLl9nZXRfc2VsZWN0aW9uX2xpc3QobmFtZSwgc2VsZWN0aW9uX2xpc3QsIGRlZmF1bHRfdmFsdWUpO1xuICBpZiAocmVzdWx0Lmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJ1wiICsgbmFtZSArIFwiJyBjYW4gb25seSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XFxuXCIgK1xuICAgICAgc2VsZWN0aW9uX2xpc3QgKyBcIlxcbllvdSBwYXNzZWQgaW46ICdcIiArIHRoaXMucmF3X29wdGlvbnNbbmFtZV0gKyBcIidcIik7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0WzBdO1xufTtcblxuXG5PcHRpb25zLnByb3RvdHlwZS5fZ2V0X3NlbGVjdGlvbl9saXN0ID0gZnVuY3Rpb24obmFtZSwgc2VsZWN0aW9uX2xpc3QsIGRlZmF1bHRfdmFsdWUpIHtcbiAgaWYgKCFzZWxlY3Rpb25fbGlzdCB8fCBzZWxlY3Rpb25fbGlzdC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3Rpb24gbGlzdCBjYW5ub3QgYmUgZW1wdHkuXCIpO1xuICB9XG5cbiAgZGVmYXVsdF92YWx1ZSA9IGRlZmF1bHRfdmFsdWUgfHwgW3NlbGVjdGlvbl9saXN0WzBdXTtcbiAgaWYgKCF0aGlzLl9pc192YWxpZF9zZWxlY3Rpb24oZGVmYXVsdF92YWx1ZSwgc2VsZWN0aW9uX2xpc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBEZWZhdWx0IFZhbHVlIVwiKTtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSB0aGlzLl9nZXRfYXJyYXkobmFtZSwgZGVmYXVsdF92YWx1ZSk7XG4gIGlmICghdGhpcy5faXNfdmFsaWRfc2VsZWN0aW9uKHJlc3VsdCwgc2VsZWN0aW9uX2xpc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJJbnZhbGlkIE9wdGlvbiBWYWx1ZTogVGhlIG9wdGlvbiAnXCIgKyBuYW1lICsgXCInIGNhbiBjb250YWluIG9ubHkgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XFxuXCIgK1xuICAgICAgc2VsZWN0aW9uX2xpc3QgKyBcIlxcbllvdSBwYXNzZWQgaW46ICdcIiArIHRoaXMucmF3X29wdGlvbnNbbmFtZV0gKyBcIidcIik7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuT3B0aW9ucy5wcm90b3R5cGUuX2lzX3ZhbGlkX3NlbGVjdGlvbiA9IGZ1bmN0aW9uKHJlc3VsdCwgc2VsZWN0aW9uX2xpc3QpIHtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggJiYgc2VsZWN0aW9uX2xpc3QubGVuZ3RoICYmXG4gICAgIXJlc3VsdC5zb21lKGZ1bmN0aW9uKGl0ZW0pIHsgcmV0dXJuIHNlbGVjdGlvbl9saXN0LmluZGV4T2YoaXRlbSkgPT09IC0xOyB9KTtcbn07XG5cblxuLy8gbWVyZ2VzIGNoaWxkIG9wdGlvbnMgdXAgd2l0aCB0aGUgcGFyZW50IG9wdGlvbnMgb2JqZWN0XG4vLyBFeGFtcGxlOiBvYmogPSB7YTogMSwgYjoge2E6IDJ9fVxuLy8gICAgICAgICAgbWVyZ2VPcHRzKG9iaiwgJ2InKVxuLy9cbi8vICAgICAgICAgIFJldHVybnM6IHthOiAyfVxuZnVuY3Rpb24gX21lcmdlT3B0cyhhbGxPcHRpb25zLCBjaGlsZEZpZWxkTmFtZSkge1xuICB2YXIgZmluYWxPcHRzID0ge307XG4gIGFsbE9wdGlvbnMgPSBfbm9ybWFsaXplT3B0cyhhbGxPcHRpb25zKTtcbiAgdmFyIG5hbWU7XG5cbiAgZm9yIChuYW1lIGluIGFsbE9wdGlvbnMpIHtcbiAgICBpZiAobmFtZSAhPT0gY2hpbGRGaWVsZE5hbWUpIHtcbiAgICAgIGZpbmFsT3B0c1tuYW1lXSA9IGFsbE9wdGlvbnNbbmFtZV07XG4gICAgfVxuICB9XG5cbiAgLy9tZXJnZSBpbiB0aGUgcGVyIHR5cGUgc2V0dGluZ3MgZm9yIHRoZSBjaGlsZEZpZWxkTmFtZVxuICBpZiAoY2hpbGRGaWVsZE5hbWUgJiYgYWxsT3B0aW9uc1tjaGlsZEZpZWxkTmFtZV0pIHtcbiAgICBmb3IgKG5hbWUgaW4gYWxsT3B0aW9uc1tjaGlsZEZpZWxkTmFtZV0pIHtcbiAgICAgIGZpbmFsT3B0c1tuYW1lXSA9IGFsbE9wdGlvbnNbY2hpbGRGaWVsZE5hbWVdW25hbWVdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmluYWxPcHRzO1xufVxuXG5mdW5jdGlvbiBfbm9ybWFsaXplT3B0cyhvcHRpb25zKSB7XG4gIHZhciBjb252ZXJ0ZWRPcHRzID0ge307XG4gIHZhciBrZXk7XG5cbiAgZm9yIChrZXkgaW4gb3B0aW9ucykge1xuICAgIHZhciBuZXdLZXkgPSBrZXkucmVwbGFjZSgvLS9nLCBcIl9cIik7XG4gICAgY29udmVydGVkT3B0c1tuZXdLZXldID0gb3B0aW9uc1trZXldO1xuICB9XG4gIHJldHVybiBjb252ZXJ0ZWRPcHRzO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5PcHRpb25zID0gT3B0aW9ucztcbm1vZHVsZS5leHBvcnRzLm5vcm1hbGl6ZU9wdHMgPSBfbm9ybWFsaXplT3B0cztcbm1vZHVsZS5leHBvcnRzLm1lcmdlT3B0cyA9IF9tZXJnZU9wdHM7XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gT3V0cHV0TGluZShwYXJlbnQpIHtcbiAgdGhpcy5fX3BhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5fX2NoYXJhY3Rlcl9jb3VudCA9IDA7XG4gIC8vIHVzZSBpbmRlbnRfY291bnQgYXMgYSBtYXJrZXIgZm9yIHRoaXMuX19saW5lcyB0aGF0IGhhdmUgcHJlc2VydmVkIGluZGVudGF0aW9uXG4gIHRoaXMuX19pbmRlbnRfY291bnQgPSAtMTtcbiAgdGhpcy5fX2FsaWdubWVudF9jb3VudCA9IDA7XG4gIHRoaXMuX193cmFwX3BvaW50X2luZGV4ID0gMDtcbiAgdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50ID0gMDtcbiAgdGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50ID0gLTE7XG4gIHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudCA9IDA7XG5cbiAgdGhpcy5fX2l0ZW1zID0gW107XG59XG5cbk91dHB1dExpbmUucHJvdG90eXBlLmNsb25lX2VtcHR5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBsaW5lID0gbmV3IE91dHB1dExpbmUodGhpcy5fX3BhcmVudCk7XG4gIGxpbmUuc2V0X2luZGVudCh0aGlzLl9faW5kZW50X2NvdW50LCB0aGlzLl9fYWxpZ25tZW50X2NvdW50KTtcbiAgcmV0dXJuIGxpbmU7XG59O1xuXG5PdXRwdXRMaW5lLnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiB0aGlzLl9faXRlbXNbdGhpcy5fX2l0ZW1zLmxlbmd0aCArIGluZGV4XTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5fX2l0ZW1zW2luZGV4XTtcbiAgfVxufTtcblxuT3V0cHV0TGluZS5wcm90b3R5cGUuaGFzX21hdGNoID0gZnVuY3Rpb24ocGF0dGVybikge1xuICBmb3IgKHZhciBsYXN0Q2hlY2tlZE91dHB1dCA9IHRoaXMuX19pdGVtcy5sZW5ndGggLSAxOyBsYXN0Q2hlY2tlZE91dHB1dCA+PSAwOyBsYXN0Q2hlY2tlZE91dHB1dC0tKSB7XG4gICAgaWYgKHRoaXMuX19pdGVtc1tsYXN0Q2hlY2tlZE91dHB1dF0ubWF0Y2gocGF0dGVybikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5PdXRwdXRMaW5lLnByb3RvdHlwZS5zZXRfaW5kZW50ID0gZnVuY3Rpb24oaW5kZW50LCBhbGlnbm1lbnQpIHtcbiAgaWYgKHRoaXMuaXNfZW1wdHkoKSkge1xuICAgIHRoaXMuX19pbmRlbnRfY291bnQgPSBpbmRlbnQgfHwgMDtcbiAgICB0aGlzLl9fYWxpZ25tZW50X2NvdW50ID0gYWxpZ25tZW50IHx8IDA7XG4gICAgdGhpcy5fX2NoYXJhY3Rlcl9jb3VudCA9IHRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zaXplKHRoaXMuX19pbmRlbnRfY291bnQsIHRoaXMuX19hbGlnbm1lbnRfY291bnQpO1xuICB9XG59O1xuXG5PdXRwdXRMaW5lLnByb3RvdHlwZS5fc2V0X3dyYXBfcG9pbnQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX19wYXJlbnQud3JhcF9saW5lX2xlbmd0aCkge1xuICAgIHRoaXMuX193cmFwX3BvaW50X2luZGV4ID0gdGhpcy5fX2l0ZW1zLmxlbmd0aDtcbiAgICB0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQgPSB0aGlzLl9fY2hhcmFjdGVyX2NvdW50O1xuICAgIHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudCA9IHRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9faW5kZW50X2NvdW50O1xuICAgIHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudCA9IHRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9fYWxpZ25tZW50X2NvdW50O1xuICB9XG59O1xuXG5PdXRwdXRMaW5lLnByb3RvdHlwZS5fc2hvdWxkX3dyYXAgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX193cmFwX3BvaW50X2luZGV4ICYmXG4gICAgdGhpcy5fX2NoYXJhY3Rlcl9jb3VudCA+IHRoaXMuX19wYXJlbnQud3JhcF9saW5lX2xlbmd0aCAmJlxuICAgIHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudCA+IHRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9fY2hhcmFjdGVyX2NvdW50O1xufTtcblxuT3V0cHV0TGluZS5wcm90b3R5cGUuX2FsbG93X3dyYXAgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX3Nob3VsZF93cmFwKCkpIHtcbiAgICB0aGlzLl9fcGFyZW50LmFkZF9uZXdfbGluZSgpO1xuICAgIHZhciBuZXh0ID0gdGhpcy5fX3BhcmVudC5jdXJyZW50X2xpbmU7XG4gICAgbmV4dC5zZXRfaW5kZW50KHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudCwgdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50KTtcbiAgICBuZXh0Ll9faXRlbXMgPSB0aGlzLl9faXRlbXMuc2xpY2UodGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgpO1xuICAgIHRoaXMuX19pdGVtcyA9IHRoaXMuX19pdGVtcy5zbGljZSgwLCB0aGlzLl9fd3JhcF9wb2ludF9pbmRleCk7XG5cbiAgICBuZXh0Ll9fY2hhcmFjdGVyX2NvdW50ICs9IHRoaXMuX19jaGFyYWN0ZXJfY291bnQgLSB0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ7XG4gICAgdGhpcy5fX2NoYXJhY3Rlcl9jb3VudCA9IHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudDtcblxuICAgIGlmIChuZXh0Ll9faXRlbXNbMF0gPT09IFwiIFwiKSB7XG4gICAgICBuZXh0Ll9faXRlbXMuc3BsaWNlKDAsIDEpO1xuICAgICAgbmV4dC5fX2NoYXJhY3Rlcl9jb3VudCAtPSAxO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5PdXRwdXRMaW5lLnByb3RvdHlwZS5pc19lbXB0eSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fX2l0ZW1zLmxlbmd0aCA9PT0gMDtcbn07XG5cbk91dHB1dExpbmUucHJvdG90eXBlLmxhc3QgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLmlzX2VtcHR5KCkpIHtcbiAgICByZXR1cm4gdGhpcy5fX2l0ZW1zW3RoaXMuX19pdGVtcy5sZW5ndGggLSAxXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuT3V0cHV0TGluZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgdGhpcy5fX2l0ZW1zLnB1c2goaXRlbSk7XG4gIHZhciBsYXN0X25ld2xpbmVfaW5kZXggPSBpdGVtLmxhc3RJbmRleE9mKCdcXG4nKTtcbiAgaWYgKGxhc3RfbmV3bGluZV9pbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9fY2hhcmFjdGVyX2NvdW50ID0gaXRlbS5sZW5ndGggLSBsYXN0X25ld2xpbmVfaW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fX2NoYXJhY3Rlcl9jb3VudCArPSBpdGVtLmxlbmd0aDtcbiAgfVxufTtcblxuT3V0cHV0TGluZS5wcm90b3R5cGUucG9wID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtID0gbnVsbDtcbiAgaWYgKCF0aGlzLmlzX2VtcHR5KCkpIHtcbiAgICBpdGVtID0gdGhpcy5fX2l0ZW1zLnBvcCgpO1xuICAgIHRoaXMuX19jaGFyYWN0ZXJfY291bnQgLT0gaXRlbS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIGl0ZW07XG59O1xuXG5cbk91dHB1dExpbmUucHJvdG90eXBlLl9yZW1vdmVfaW5kZW50ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9faW5kZW50X2NvdW50ID4gMCkge1xuICAgIHRoaXMuX19pbmRlbnRfY291bnQgLT0gMTtcbiAgICB0aGlzLl9fY2hhcmFjdGVyX2NvdW50IC09IHRoaXMuX19wYXJlbnQuaW5kZW50X3NpemU7XG4gIH1cbn07XG5cbk91dHB1dExpbmUucHJvdG90eXBlLl9yZW1vdmVfd3JhcF9pbmRlbnQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudCA+IDApIHtcbiAgICB0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQgLT0gMTtcbiAgfVxufTtcbk91dHB1dExpbmUucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlvbigpIHtcbiAgd2hpbGUgKHRoaXMubGFzdCgpID09PSAnICcpIHtcbiAgICB0aGlzLl9faXRlbXMucG9wKCk7XG4gICAgdGhpcy5fX2NoYXJhY3Rlcl9jb3VudCAtPSAxO1xuICB9XG59O1xuXG5PdXRwdXRMaW5lLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGlzLmlzX2VtcHR5KCkpIHtcbiAgICBpZiAodGhpcy5fX3BhcmVudC5pbmRlbnRfZW1wdHlfbGluZXMpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zdHJpbmcodGhpcy5fX2luZGVudF9jb3VudCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zdHJpbmcodGhpcy5fX2luZGVudF9jb3VudCwgdGhpcy5fX2FsaWdubWVudF9jb3VudCk7XG4gICAgcmVzdWx0ICs9IHRoaXMuX19pdGVtcy5qb2luKCcnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZnVuY3Rpb24gSW5kZW50U3RyaW5nQ2FjaGUob3B0aW9ucywgYmFzZUluZGVudFN0cmluZykge1xuICB0aGlzLl9fY2FjaGUgPSBbJyddO1xuICB0aGlzLl9faW5kZW50X3NpemUgPSBvcHRpb25zLmluZGVudF9zaXplO1xuICB0aGlzLl9faW5kZW50X3N0cmluZyA9IG9wdGlvbnMuaW5kZW50X2NoYXI7XG4gIGlmICghb3B0aW9ucy5pbmRlbnRfd2l0aF90YWJzKSB7XG4gICAgdGhpcy5fX2luZGVudF9zdHJpbmcgPSBuZXcgQXJyYXkob3B0aW9ucy5pbmRlbnRfc2l6ZSArIDEpLmpvaW4ob3B0aW9ucy5pbmRlbnRfY2hhcik7XG4gIH1cblxuICAvLyBTZXQgdG8gbnVsbCB0byBjb250aW51ZSBzdXBwb3J0IGZvciBhdXRvIGRldGVjdGlvbiBvZiBiYXNlIGluZGVudFxuICBiYXNlSW5kZW50U3RyaW5nID0gYmFzZUluZGVudFN0cmluZyB8fCAnJztcbiAgaWYgKG9wdGlvbnMuaW5kZW50X2xldmVsID4gMCkge1xuICAgIGJhc2VJbmRlbnRTdHJpbmcgPSBuZXcgQXJyYXkob3B0aW9ucy5pbmRlbnRfbGV2ZWwgKyAxKS5qb2luKHRoaXMuX19pbmRlbnRfc3RyaW5nKTtcbiAgfVxuXG4gIHRoaXMuX19iYXNlX3N0cmluZyA9IGJhc2VJbmRlbnRTdHJpbmc7XG4gIHRoaXMuX19iYXNlX3N0cmluZ19sZW5ndGggPSBiYXNlSW5kZW50U3RyaW5nLmxlbmd0aDtcbn1cblxuSW5kZW50U3RyaW5nQ2FjaGUucHJvdG90eXBlLmdldF9pbmRlbnRfc2l6ZSA9IGZ1bmN0aW9uKGluZGVudCwgY29sdW1uKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLl9fYmFzZV9zdHJpbmdfbGVuZ3RoO1xuICBjb2x1bW4gPSBjb2x1bW4gfHwgMDtcbiAgaWYgKGluZGVudCA8IDApIHtcbiAgICByZXN1bHQgPSAwO1xuICB9XG4gIHJlc3VsdCArPSBpbmRlbnQgKiB0aGlzLl9faW5kZW50X3NpemU7XG4gIHJlc3VsdCArPSBjb2x1bW47XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5JbmRlbnRTdHJpbmdDYWNoZS5wcm90b3R5cGUuZ2V0X2luZGVudF9zdHJpbmcgPSBmdW5jdGlvbihpbmRlbnRfbGV2ZWwsIGNvbHVtbikge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5fX2Jhc2Vfc3RyaW5nO1xuICBjb2x1bW4gPSBjb2x1bW4gfHwgMDtcbiAgaWYgKGluZGVudF9sZXZlbCA8IDApIHtcbiAgICBpbmRlbnRfbGV2ZWwgPSAwO1xuICAgIHJlc3VsdCA9ICcnO1xuICB9XG4gIGNvbHVtbiArPSBpbmRlbnRfbGV2ZWwgKiB0aGlzLl9faW5kZW50X3NpemU7XG4gIHRoaXMuX19lbnN1cmVfY2FjaGUoY29sdW1uKTtcbiAgcmVzdWx0ICs9IHRoaXMuX19jYWNoZVtjb2x1bW5dO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuSW5kZW50U3RyaW5nQ2FjaGUucHJvdG90eXBlLl9fZW5zdXJlX2NhY2hlID0gZnVuY3Rpb24oY29sdW1uKSB7XG4gIHdoaWxlIChjb2x1bW4gPj0gdGhpcy5fX2NhY2hlLmxlbmd0aCkge1xuICAgIHRoaXMuX19hZGRfY29sdW1uKCk7XG4gIH1cbn07XG5cbkluZGVudFN0cmluZ0NhY2hlLnByb3RvdHlwZS5fX2FkZF9jb2x1bW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbHVtbiA9IHRoaXMuX19jYWNoZS5sZW5ndGg7XG4gIHZhciBpbmRlbnQgPSAwO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGlzLl9faW5kZW50X3NpemUgJiYgY29sdW1uID49IHRoaXMuX19pbmRlbnRfc2l6ZSkge1xuICAgIGluZGVudCA9IE1hdGguZmxvb3IoY29sdW1uIC8gdGhpcy5fX2luZGVudF9zaXplKTtcbiAgICBjb2x1bW4gLT0gaW5kZW50ICogdGhpcy5fX2luZGVudF9zaXplO1xuICAgIHJlc3VsdCA9IG5ldyBBcnJheShpbmRlbnQgKyAxKS5qb2luKHRoaXMuX19pbmRlbnRfc3RyaW5nKTtcbiAgfVxuICBpZiAoY29sdW1uKSB7XG4gICAgcmVzdWx0ICs9IG5ldyBBcnJheShjb2x1bW4gKyAxKS5qb2luKCcgJyk7XG4gIH1cblxuICB0aGlzLl9fY2FjaGUucHVzaChyZXN1bHQpO1xufTtcblxuZnVuY3Rpb24gT3V0cHV0KG9wdGlvbnMsIGJhc2VJbmRlbnRTdHJpbmcpIHtcbiAgdGhpcy5fX2luZGVudF9jYWNoZSA9IG5ldyBJbmRlbnRTdHJpbmdDYWNoZShvcHRpb25zLCBiYXNlSW5kZW50U3RyaW5nKTtcbiAgdGhpcy5yYXcgPSBmYWxzZTtcbiAgdGhpcy5fZW5kX3dpdGhfbmV3bGluZSA9IG9wdGlvbnMuZW5kX3dpdGhfbmV3bGluZTtcbiAgdGhpcy5pbmRlbnRfc2l6ZSA9IG9wdGlvbnMuaW5kZW50X3NpemU7XG4gIHRoaXMud3JhcF9saW5lX2xlbmd0aCA9IG9wdGlvbnMud3JhcF9saW5lX2xlbmd0aDtcbiAgdGhpcy5pbmRlbnRfZW1wdHlfbGluZXMgPSBvcHRpb25zLmluZGVudF9lbXB0eV9saW5lcztcbiAgdGhpcy5fX2xpbmVzID0gW107XG4gIHRoaXMucHJldmlvdXNfbGluZSA9IG51bGw7XG4gIHRoaXMuY3VycmVudF9saW5lID0gbnVsbDtcbiAgdGhpcy5uZXh0X2xpbmUgPSBuZXcgT3V0cHV0TGluZSh0aGlzKTtcbiAgdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW4gPSBmYWxzZTtcbiAgdGhpcy5ub25fYnJlYWtpbmdfc3BhY2UgPSBmYWxzZTtcbiAgdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkID0gZmFsc2U7XG4gIC8vIGluaXRpYWxpemVcbiAgdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7XG59XG5cbk91dHB1dC5wcm90b3R5cGUuX19hZGRfb3V0cHV0bGluZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnByZXZpb3VzX2xpbmUgPSB0aGlzLmN1cnJlbnRfbGluZTtcbiAgdGhpcy5jdXJyZW50X2xpbmUgPSB0aGlzLm5leHRfbGluZS5jbG9uZV9lbXB0eSgpO1xuICB0aGlzLl9fbGluZXMucHVzaCh0aGlzLmN1cnJlbnRfbGluZSk7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLmdldF9saW5lX251bWJlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fX2xpbmVzLmxlbmd0aDtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUuZ2V0X2luZGVudF9zdHJpbmcgPSBmdW5jdGlvbihpbmRlbnQsIGNvbHVtbikge1xuICByZXR1cm4gdGhpcy5fX2luZGVudF9jYWNoZS5nZXRfaW5kZW50X3N0cmluZyhpbmRlbnQsIGNvbHVtbik7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLmdldF9pbmRlbnRfc2l6ZSA9IGZ1bmN0aW9uKGluZGVudCwgY29sdW1uKSB7XG4gIHJldHVybiB0aGlzLl9faW5kZW50X2NhY2hlLmdldF9pbmRlbnRfc2l6ZShpbmRlbnQsIGNvbHVtbik7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLmlzX2VtcHR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5wcmV2aW91c19saW5lICYmIHRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCk7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLmFkZF9uZXdfbGluZSA9IGZ1bmN0aW9uKGZvcmNlX25ld2xpbmUpIHtcbiAgLy8gbmV2ZXIgbmV3bGluZSBhdCB0aGUgc3RhcnQgb2YgZmlsZVxuICAvLyBvdGhlcndpc2UsIG5ld2xpbmUgb25seSBpZiB3ZSBkaWRuJ3QganVzdCBhZGQgb25lIG9yIHdlJ3JlIGZvcmNlZFxuICBpZiAodGhpcy5pc19lbXB0eSgpIHx8XG4gICAgKCFmb3JjZV9uZXdsaW5lICYmIHRoaXMuanVzdF9hZGRlZF9uZXdsaW5lKCkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gaWYgcmF3IG91dHB1dCBpcyBlbmFibGVkLCBkb24ndCBwcmludCBhZGRpdGlvbmFsIG5ld2xpbmVzLFxuICAvLyBidXQgc3RpbGwgcmV0dXJuIFRydWUgYXMgdGhvdWdoIHlvdSBoYWRcbiAgaWYgKCF0aGlzLnJhdykge1xuICAgIHRoaXMuX19hZGRfb3V0cHV0bGluZSgpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuT3V0cHV0LnByb3RvdHlwZS5nZXRfY29kZSA9IGZ1bmN0aW9uKGVvbCkge1xuICB0aGlzLnRyaW0odHJ1ZSk7XG5cbiAgLy8gaGFuZGxlIHNvbWUgZWRnZSBjYXNlcyB3aGVyZSB0aGUgbGFzdCB0b2tlbnNcbiAgLy8gaGFzIHRleHQgdGhhdCBlbmRzIHdpdGggbmV3bGluZShzKVxuICB2YXIgbGFzdF9pdGVtID0gdGhpcy5jdXJyZW50X2xpbmUucG9wKCk7XG4gIGlmIChsYXN0X2l0ZW0pIHtcbiAgICBpZiAobGFzdF9pdGVtW2xhc3RfaXRlbS5sZW5ndGggLSAxXSA9PT0gJ1xcbicpIHtcbiAgICAgIGxhc3RfaXRlbSA9IGxhc3RfaXRlbS5yZXBsYWNlKC9cXG4rJC9nLCAnJyk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudF9saW5lLnB1c2gobGFzdF9pdGVtKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9lbmRfd2l0aF9uZXdsaW5lKSB7XG4gICAgdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7XG4gIH1cblxuICB2YXIgc3dlZXRfY29kZSA9IHRoaXMuX19saW5lcy5qb2luKCdcXG4nKTtcblxuICBpZiAoZW9sICE9PSAnXFxuJykge1xuICAgIHN3ZWV0X2NvZGUgPSBzd2VldF9jb2RlLnJlcGxhY2UoL1tcXG5dL2csIGVvbCk7XG4gIH1cbiAgcmV0dXJuIHN3ZWV0X2NvZGU7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLnNldF93cmFwX3BvaW50ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY3VycmVudF9saW5lLl9zZXRfd3JhcF9wb2ludCgpO1xufTtcblxuT3V0cHV0LnByb3RvdHlwZS5zZXRfaW5kZW50ID0gZnVuY3Rpb24oaW5kZW50LCBhbGlnbm1lbnQpIHtcbiAgaW5kZW50ID0gaW5kZW50IHx8IDA7XG4gIGFsaWdubWVudCA9IGFsaWdubWVudCB8fCAwO1xuXG4gIC8vIE5leHQgbGluZSBzdG9yZXMgYWxpZ25tZW50IHZhbHVlc1xuICB0aGlzLm5leHRfbGluZS5zZXRfaW5kZW50KGluZGVudCwgYWxpZ25tZW50KTtcblxuICAvLyBOZXZlciBpbmRlbnQgeW91ciBmaXJzdCBvdXRwdXQgaW5kZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZVxuICBpZiAodGhpcy5fX2xpbmVzLmxlbmd0aCA+IDEpIHtcbiAgICB0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KGluZGVudCwgYWxpZ25tZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQoKTtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuT3V0cHV0LnByb3RvdHlwZS5hZGRfcmF3X3Rva2VuID0gZnVuY3Rpb24odG9rZW4pIHtcbiAgZm9yICh2YXIgeCA9IDA7IHggPCB0b2tlbi5uZXdsaW5lczsgeCsrKSB7XG4gICAgdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7XG4gIH1cbiAgdGhpcy5jdXJyZW50X2xpbmUuc2V0X2luZGVudCgtMSk7XG4gIHRoaXMuY3VycmVudF9saW5lLnB1c2godG9rZW4ud2hpdGVzcGFjZV9iZWZvcmUpO1xuICB0aGlzLmN1cnJlbnRfbGluZS5wdXNoKHRva2VuLnRleHQpO1xuICB0aGlzLnNwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNlO1xuICB0aGlzLm5vbl9icmVha2luZ19zcGFjZSA9IGZhbHNlO1xuICB0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQgPSBmYWxzZTtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUuYWRkX3Rva2VuID0gZnVuY3Rpb24ocHJpbnRhYmxlX3Rva2VuKSB7XG4gIHRoaXMuX19hZGRfc3BhY2VfYmVmb3JlX3Rva2VuKCk7XG4gIHRoaXMuY3VycmVudF9saW5lLnB1c2gocHJpbnRhYmxlX3Rva2VuKTtcbiAgdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW4gPSBmYWxzZTtcbiAgdGhpcy5ub25fYnJlYWtpbmdfc3BhY2UgPSBmYWxzZTtcbiAgdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkID0gdGhpcy5jdXJyZW50X2xpbmUuX2FsbG93X3dyYXAoKTtcbn07XG5cbk91dHB1dC5wcm90b3R5cGUuX19hZGRfc3BhY2VfYmVmb3JlX3Rva2VuID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLnNwYWNlX2JlZm9yZV90b2tlbiAmJiAhdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKSkge1xuICAgIGlmICghdGhpcy5ub25fYnJlYWtpbmdfc3BhY2UpIHtcbiAgICAgIHRoaXMuc2V0X3dyYXBfcG9pbnQoKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50X2xpbmUucHVzaCgnICcpO1xuICB9XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLnJlbW92ZV9pbmRlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuICB2YXIgb3V0cHV0X2xlbmd0aCA9IHRoaXMuX19saW5lcy5sZW5ndGg7XG4gIHdoaWxlIChpbmRleCA8IG91dHB1dF9sZW5ndGgpIHtcbiAgICB0aGlzLl9fbGluZXNbaW5kZXhdLl9yZW1vdmVfaW5kZW50KCk7XG4gICAgaW5kZXgrKztcbiAgfVxuICB0aGlzLmN1cnJlbnRfbGluZS5fcmVtb3ZlX3dyYXBfaW5kZW50KCk7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlvbihlYXRfbmV3bGluZXMpIHtcbiAgZWF0X25ld2xpbmVzID0gKGVhdF9uZXdsaW5lcyA9PT0gdW5kZWZpbmVkKSA/IGZhbHNlIDogZWF0X25ld2xpbmVzO1xuXG4gIHRoaXMuY3VycmVudF9saW5lLnRyaW0oKTtcblxuICB3aGlsZSAoZWF0X25ld2xpbmVzICYmIHRoaXMuX19saW5lcy5sZW5ndGggPiAxICYmXG4gICAgdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKSkge1xuICAgIHRoaXMuX19saW5lcy5wb3AoKTtcbiAgICB0aGlzLmN1cnJlbnRfbGluZSA9IHRoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5jdXJyZW50X2xpbmUudHJpbSgpO1xuICB9XG5cbiAgdGhpcy5wcmV2aW91c19saW5lID0gdGhpcy5fX2xpbmVzLmxlbmd0aCA+IDEgP1xuICAgIHRoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoIC0gMl0gOiBudWxsO1xufTtcblxuT3V0cHV0LnByb3RvdHlwZS5qdXN0X2FkZGVkX25ld2xpbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCk7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLmp1c3RfYWRkZWRfYmxhbmtsaW5lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmlzX2VtcHR5KCkgfHxcbiAgICAodGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKSAmJiB0aGlzLnByZXZpb3VzX2xpbmUuaXNfZW1wdHkoKSk7XG59O1xuXG5PdXRwdXQucHJvdG90eXBlLmVuc3VyZV9lbXB0eV9saW5lX2Fib3ZlID0gZnVuY3Rpb24oc3RhcnRzX3dpdGgsIGVuZHNfd2l0aCkge1xuICB2YXIgaW5kZXggPSB0aGlzLl9fbGluZXMubGVuZ3RoIC0gMjtcbiAgd2hpbGUgKGluZGV4ID49IDApIHtcbiAgICB2YXIgcG90ZW50aWFsRW1wdHlMaW5lID0gdGhpcy5fX2xpbmVzW2luZGV4XTtcbiAgICBpZiAocG90ZW50aWFsRW1wdHlMaW5lLmlzX2VtcHR5KCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAocG90ZW50aWFsRW1wdHlMaW5lLml0ZW0oMCkuaW5kZXhPZihzdGFydHNfd2l0aCkgIT09IDAgJiZcbiAgICAgIHBvdGVudGlhbEVtcHR5TGluZS5pdGVtKC0xKSAhPT0gZW5kc193aXRoKSB7XG4gICAgICB0aGlzLl9fbGluZXMuc3BsaWNlKGluZGV4ICsgMSwgMCwgbmV3IE91dHB1dExpbmUodGhpcykpO1xuICAgICAgdGhpcy5wcmV2aW91c19saW5lID0gdGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGggLSAyXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpbmRleC0tO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5PdXRwdXQgPSBPdXRwdXQ7XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBQYXR0ZXJuKGlucHV0X3NjYW5uZXIsIHBhcmVudCkge1xuICB0aGlzLl9pbnB1dCA9IGlucHV0X3NjYW5uZXI7XG4gIHRoaXMuX3N0YXJ0aW5nX3BhdHRlcm4gPSBudWxsO1xuICB0aGlzLl9tYXRjaF9wYXR0ZXJuID0gbnVsbDtcbiAgdGhpcy5fdW50aWxfcGF0dGVybiA9IG51bGw7XG4gIHRoaXMuX3VudGlsX2FmdGVyID0gZmFsc2U7XG5cbiAgaWYgKHBhcmVudCkge1xuICAgIHRoaXMuX3N0YXJ0aW5nX3BhdHRlcm4gPSB0aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHBhcmVudC5fc3RhcnRpbmdfcGF0dGVybiwgdHJ1ZSk7XG4gICAgdGhpcy5fbWF0Y2hfcGF0dGVybiA9IHRoaXMuX2lucHV0LmdldF9yZWdleHAocGFyZW50Ll9tYXRjaF9wYXR0ZXJuLCB0cnVlKTtcbiAgICB0aGlzLl91bnRpbF9wYXR0ZXJuID0gdGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChwYXJlbnQuX3VudGlsX3BhdHRlcm4pO1xuICAgIHRoaXMuX3VudGlsX2FmdGVyID0gcGFyZW50Ll91bnRpbF9hZnRlcjtcbiAgfVxufVxuXG5QYXR0ZXJuLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLl9pbnB1dC5yZWFkKHRoaXMuX3N0YXJ0aW5nX3BhdHRlcm4pO1xuICBpZiAoIXRoaXMuX3N0YXJ0aW5nX3BhdHRlcm4gfHwgcmVzdWx0KSB7XG4gICAgcmVzdWx0ICs9IHRoaXMuX2lucHV0LnJlYWQodGhpcy5fbWF0Y2hfcGF0dGVybiwgdGhpcy5fdW50aWxfcGF0dGVybiwgdGhpcy5fdW50aWxfYWZ0ZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5QYXR0ZXJuLnByb3RvdHlwZS5yZWFkX21hdGNoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLl9tYXRjaF9wYXR0ZXJuKTtcbn07XG5cblBhdHRlcm4ucHJvdG90eXBlLnVudGlsX2FmdGVyID0gZnVuY3Rpb24ocGF0dGVybikge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5fY3JlYXRlKCk7XG4gIHJlc3VsdC5fdW50aWxfYWZ0ZXIgPSB0cnVlO1xuICByZXN1bHQuX3VudGlsX3BhdHRlcm4gPSB0aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHBhdHRlcm4pO1xuICByZXN1bHQuX3VwZGF0ZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuUGF0dGVybi5wcm90b3R5cGUudW50aWwgPSBmdW5jdGlvbihwYXR0ZXJuKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLl9jcmVhdGUoKTtcbiAgcmVzdWx0Ll91bnRpbF9hZnRlciA9IGZhbHNlO1xuICByZXN1bHQuX3VudGlsX3BhdHRlcm4gPSB0aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHBhdHRlcm4pO1xuICByZXN1bHQuX3VwZGF0ZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuUGF0dGVybi5wcm90b3R5cGUuc3RhcnRpbmdfd2l0aCA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2NyZWF0ZSgpO1xuICByZXN1bHQuX3N0YXJ0aW5nX3BhdHRlcm4gPSB0aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHBhdHRlcm4sIHRydWUpO1xuICByZXN1bHQuX3VwZGF0ZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuUGF0dGVybi5wcm90b3R5cGUubWF0Y2hpbmcgPSBmdW5jdGlvbihwYXR0ZXJuKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLl9jcmVhdGUoKTtcbiAgcmVzdWx0Ll9tYXRjaF9wYXR0ZXJuID0gdGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChwYXR0ZXJuLCB0cnVlKTtcbiAgcmVzdWx0Ll91cGRhdGUoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblBhdHRlcm4ucHJvdG90eXBlLl9jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBQYXR0ZXJuKHRoaXMuX2lucHV0LCB0aGlzKTtcbn07XG5cblBhdHRlcm4ucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbigpIHt9O1xuXG5tb2R1bGUuZXhwb3J0cy5QYXR0ZXJuID0gUGF0dGVybjtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBQYXR0ZXJuID0gcmVxdWlyZSgnLi9wYXR0ZXJuJykuUGF0dGVybjtcblxuXG52YXIgdGVtcGxhdGVfbmFtZXMgPSB7XG4gIGRqYW5nbzogZmFsc2UsXG4gIGVyYjogZmFsc2UsXG4gIGhhbmRsZWJhcnM6IGZhbHNlLFxuICBwaHA6IGZhbHNlLFxuICBzbWFydHk6IGZhbHNlXG59O1xuXG4vLyBUaGlzIGxldHMgdGVtcGxhdGVzIGFwcGVhciBhbnl3aGVyZSB3ZSB3b3VsZCBkbyBhIHJlYWRVbnRpbFxuLy8gVGhlIGNvc3QgaXMgaGlnaGVyIGJ1dCBpdCBpcyBwYXkgdG8gcGxheS5cbmZ1bmN0aW9uIFRlbXBsYXRhYmxlUGF0dGVybihpbnB1dF9zY2FubmVyLCBwYXJlbnQpIHtcbiAgUGF0dGVybi5jYWxsKHRoaXMsIGlucHV0X3NjYW5uZXIsIHBhcmVudCk7XG4gIHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuID0gbnVsbDtcbiAgdGhpcy5fZGlzYWJsZWQgPSBPYmplY3QuYXNzaWduKHt9LCB0ZW1wbGF0ZV9uYW1lcyk7XG4gIHRoaXMuX2V4Y2x1ZGVkID0gT2JqZWN0LmFzc2lnbih7fSwgdGVtcGxhdGVfbmFtZXMpO1xuXG4gIGlmIChwYXJlbnQpIHtcbiAgICB0aGlzLl9fdGVtcGxhdGVfcGF0dGVybiA9IHRoaXMuX2lucHV0LmdldF9yZWdleHAocGFyZW50Ll9fdGVtcGxhdGVfcGF0dGVybik7XG4gICAgdGhpcy5fZXhjbHVkZWQgPSBPYmplY3QuYXNzaWduKHRoaXMuX2V4Y2x1ZGVkLCBwYXJlbnQuX2V4Y2x1ZGVkKTtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IE9iamVjdC5hc3NpZ24odGhpcy5fZGlzYWJsZWQsIHBhcmVudC5fZGlzYWJsZWQpO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gbmV3IFBhdHRlcm4oaW5wdXRfc2Nhbm5lcik7XG4gIHRoaXMuX19wYXR0ZXJucyA9IHtcbiAgICBoYW5kbGViYXJzX2NvbW1lbnQ6IHBhdHRlcm4uc3RhcnRpbmdfd2l0aCgve3shLS0vKS51bnRpbF9hZnRlcigvLS19fS8pLFxuICAgIGhhbmRsZWJhcnNfdW5lc2NhcGVkOiBwYXR0ZXJuLnN0YXJ0aW5nX3dpdGgoL3t7ey8pLnVudGlsX2FmdGVyKC99fX0vKSxcbiAgICBoYW5kbGViYXJzOiBwYXR0ZXJuLnN0YXJ0aW5nX3dpdGgoL3t7LykudW50aWxfYWZ0ZXIoL319LyksXG4gICAgcGhwOiBwYXR0ZXJuLnN0YXJ0aW5nX3dpdGgoLzxcXD8oPzpbPSBdfHBocCkvKS51bnRpbF9hZnRlcigvXFw/Pi8pLFxuICAgIGVyYjogcGF0dGVybi5zdGFydGluZ193aXRoKC88JVteJV0vKS51bnRpbF9hZnRlcigvW14lXSU+LyksXG4gICAgLy8gZGphbmdvIGNvZmxpY3RzIHdpdGggaGFuZGxlYmFycyBhIGJpdC5cbiAgICBkamFuZ286IHBhdHRlcm4uc3RhcnRpbmdfd2l0aCgveyUvKS51bnRpbF9hZnRlcigvJX0vKSxcbiAgICBkamFuZ29fdmFsdWU6IHBhdHRlcm4uc3RhcnRpbmdfd2l0aCgve3svKS51bnRpbF9hZnRlcigvfX0vKSxcbiAgICBkamFuZ29fY29tbWVudDogcGF0dGVybi5zdGFydGluZ193aXRoKC97Iy8pLnVudGlsX2FmdGVyKC8jfS8pLFxuICAgIHNtYXJ0eTogcGF0dGVybi5zdGFydGluZ193aXRoKC97KD89W159e1xcc1xcbl0pLykudW50aWxfYWZ0ZXIoL1teXFxzXFxuXX0vKSxcbiAgICBzbWFydHlfY29tbWVudDogcGF0dGVybi5zdGFydGluZ193aXRoKC97XFwqLykudW50aWxfYWZ0ZXIoL1xcKn0vKSxcbiAgICBzbWFydHlfbGl0ZXJhbDogcGF0dGVybi5zdGFydGluZ193aXRoKC97bGl0ZXJhbH0vKS51bnRpbF9hZnRlcigve1xcL2xpdGVyYWx9LylcbiAgfTtcbn1cblRlbXBsYXRhYmxlUGF0dGVybi5wcm90b3R5cGUgPSBuZXcgUGF0dGVybigpO1xuXG5UZW1wbGF0YWJsZVBhdHRlcm4ucHJvdG90eXBlLl9jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUZW1wbGF0YWJsZVBhdHRlcm4odGhpcy5faW5wdXQsIHRoaXMpO1xufTtcblxuVGVtcGxhdGFibGVQYXR0ZXJuLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX19zZXRfdGVtcGxhdGVkX3BhdHRlcm4oKTtcbn07XG5cblRlbXBsYXRhYmxlUGF0dGVybi5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKGxhbmd1YWdlKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLl9jcmVhdGUoKTtcbiAgcmVzdWx0Ll9kaXNhYmxlZFtsYW5ndWFnZV0gPSB0cnVlO1xuICByZXN1bHQuX3VwZGF0ZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVGVtcGxhdGFibGVQYXR0ZXJuLnByb3RvdHlwZS5yZWFkX29wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLl9jcmVhdGUoKTtcbiAgZm9yICh2YXIgbGFuZ3VhZ2UgaW4gdGVtcGxhdGVfbmFtZXMpIHtcbiAgICByZXN1bHQuX2Rpc2FibGVkW2xhbmd1YWdlXSA9IG9wdGlvbnMudGVtcGxhdGluZy5pbmRleE9mKGxhbmd1YWdlKSA9PT0gLTE7XG4gIH1cbiAgcmVzdWx0Ll91cGRhdGUoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblRlbXBsYXRhYmxlUGF0dGVybi5wcm90b3R5cGUuZXhjbHVkZSA9IGZ1bmN0aW9uKGxhbmd1YWdlKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLl9jcmVhdGUoKTtcbiAgcmVzdWx0Ll9leGNsdWRlZFtsYW5ndWFnZV0gPSB0cnVlO1xuICByZXN1bHQuX3VwZGF0ZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVGVtcGxhdGFibGVQYXR0ZXJuLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoaXMuX21hdGNoX3BhdHRlcm4pIHtcbiAgICByZXN1bHQgPSB0aGlzLl9pbnB1dC5yZWFkKHRoaXMuX3N0YXJ0aW5nX3BhdHRlcm4pO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRoaXMuX2lucHV0LnJlYWQodGhpcy5fc3RhcnRpbmdfcGF0dGVybiwgdGhpcy5fX3RlbXBsYXRlX3BhdHRlcm4pO1xuICB9XG4gIHZhciBuZXh0ID0gdGhpcy5fcmVhZF90ZW1wbGF0ZSgpO1xuICB3aGlsZSAobmV4dCkge1xuICAgIGlmICh0aGlzLl9tYXRjaF9wYXR0ZXJuKSB7XG4gICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnJlYWQodGhpcy5fbWF0Y2hfcGF0dGVybik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQucmVhZFVudGlsKHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuKTtcbiAgICB9XG4gICAgcmVzdWx0ICs9IG5leHQ7XG4gICAgbmV4dCA9IHRoaXMuX3JlYWRfdGVtcGxhdGUoKTtcbiAgfVxuXG4gIGlmICh0aGlzLl91bnRpbF9hZnRlcikge1xuICAgIHJlc3VsdCArPSB0aGlzLl9pbnB1dC5yZWFkVW50aWxBZnRlcih0aGlzLl91bnRpbF9wYXR0ZXJuKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVGVtcGxhdGFibGVQYXR0ZXJuLnByb3RvdHlwZS5fX3NldF90ZW1wbGF0ZWRfcGF0dGVybiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXTtcblxuICBpZiAoIXRoaXMuX2Rpc2FibGVkLnBocCkge1xuICAgIGl0ZW1zLnB1c2godGhpcy5fX3BhdHRlcm5zLnBocC5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpO1xuICB9XG4gIGlmICghdGhpcy5fZGlzYWJsZWQuaGFuZGxlYmFycykge1xuICAgIGl0ZW1zLnB1c2godGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnMuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKTtcbiAgfVxuICBpZiAoIXRoaXMuX2Rpc2FibGVkLmVyYikge1xuICAgIGl0ZW1zLnB1c2godGhpcy5fX3BhdHRlcm5zLmVyYi5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpO1xuICB9XG4gIGlmICghdGhpcy5fZGlzYWJsZWQuZGphbmdvKSB7XG4gICAgaXRlbXMucHVzaCh0aGlzLl9fcGF0dGVybnMuZGphbmdvLl9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSk7XG4gICAgLy8gVGhlIHN0YXJ0aW5nIHBhdHRlcm4gZm9yIGRqYW5nbyBpcyBtb3JlIGNvbXBsZXggYmVjYXVzZSBpdCBoYXMgZGlmZmVyZW50XG4gICAgLy8gcGF0dGVybnMgZm9yIHZhbHVlLCBjb21tZW50LCBhbmQgb3RoZXIgc2VjdGlvbnNcbiAgICBpdGVtcy5wdXNoKHRoaXMuX19wYXR0ZXJucy5kamFuZ29fdmFsdWUuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKTtcbiAgICBpdGVtcy5wdXNoKHRoaXMuX19wYXR0ZXJucy5kamFuZ29fY29tbWVudC5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpO1xuICB9XG4gIGlmICghdGhpcy5fZGlzYWJsZWQuc21hcnR5KSB7XG4gICAgaXRlbXMucHVzaCh0aGlzLl9fcGF0dGVybnMuc21hcnR5Ll9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSk7XG4gIH1cblxuICBpZiAodGhpcy5fdW50aWxfcGF0dGVybikge1xuICAgIGl0ZW1zLnB1c2godGhpcy5fdW50aWxfcGF0dGVybi5zb3VyY2UpO1xuICB9XG4gIHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuID0gdGhpcy5faW5wdXQuZ2V0X3JlZ2V4cCgnKD86JyArIGl0ZW1zLmpvaW4oJ3wnKSArICcpJyk7XG59O1xuXG5UZW1wbGF0YWJsZVBhdHRlcm4ucHJvdG90eXBlLl9yZWFkX3RlbXBsYXRlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gJyc7XG4gIHZhciBjID0gdGhpcy5faW5wdXQucGVlaygpO1xuICBpZiAoYyA9PT0gJzwnKSB7XG4gICAgdmFyIHBlZWsxID0gdGhpcy5faW5wdXQucGVlaygxKTtcbiAgICAvL2lmIHdlJ3JlIGluIGEgY29tbWVudCwgZG8gc29tZXRoaW5nIHNwZWNpYWxcbiAgICAvLyBXZSB0cmVhdCBhbGwgY29tbWVudHMgYXMgbGl0ZXJhbHMsIGV2ZW4gbW9yZSB0aGFuIHByZWZvcm1hdHRlZCB0YWdzXG4gICAgLy8gd2UganVzdCBsb29rIGZvciB0aGUgYXBwcm9wcmlhdGUgY2xvc2UgdGFnXG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZC5waHAgJiYgIXRoaXMuX2V4Y2x1ZGVkLnBocCAmJiBwZWVrMSA9PT0gJz8nKSB7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gcmVzdWx0aW5nX3N0cmluZyB8fFxuICAgICAgICB0aGlzLl9fcGF0dGVybnMucGhwLnJlYWQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZC5lcmIgJiYgIXRoaXMuX2V4Y2x1ZGVkLmVyYiAmJiBwZWVrMSA9PT0gJyUnKSB7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gcmVzdWx0aW5nX3N0cmluZyB8fFxuICAgICAgICB0aGlzLl9fcGF0dGVybnMuZXJiLnJlYWQoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYyA9PT0gJ3snKSB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZC5oYW5kbGViYXJzICYmICF0aGlzLl9leGNsdWRlZC5oYW5kbGViYXJzKSB7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gcmVzdWx0aW5nX3N0cmluZyB8fFxuICAgICAgICB0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFyc19jb21tZW50LnJlYWQoKTtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nIHx8XG4gICAgICAgIHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX3VuZXNjYXBlZC5yZWFkKCk7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gcmVzdWx0aW5nX3N0cmluZyB8fFxuICAgICAgICB0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFycy5yZWFkKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZGlzYWJsZWQuZGphbmdvKSB7XG4gICAgICAvLyBkamFuZ28gY29mbGljdHMgd2l0aCBoYW5kbGViYXJzIGEgYml0LlxuICAgICAgaWYgKCF0aGlzLl9leGNsdWRlZC5kamFuZ28gJiYgIXRoaXMuX2V4Y2x1ZGVkLmhhbmRsZWJhcnMpIHtcbiAgICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHJlc3VsdGluZ19zdHJpbmcgfHxcbiAgICAgICAgICB0aGlzLl9fcGF0dGVybnMuZGphbmdvX3ZhbHVlLnJlYWQoKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fZXhjbHVkZWQuZGphbmdvKSB7XG4gICAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nIHx8XG4gICAgICAgICAgdGhpcy5fX3BhdHRlcm5zLmRqYW5nb19jb21tZW50LnJlYWQoKTtcbiAgICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHJlc3VsdGluZ19zdHJpbmcgfHxcbiAgICAgICAgICB0aGlzLl9fcGF0dGVybnMuZGphbmdvLnJlYWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZC5zbWFydHkpIHtcbiAgICAgIC8vIHNtYXJ0eSBjYW5ub3QgYmUgZW5hYmxlZCB3aXRoIGRqYW5nbyBvciBoYW5kbGViYXJzIGVuYWJsZWRcbiAgICAgIGlmICh0aGlzLl9kaXNhYmxlZC5kamFuZ28gJiYgdGhpcy5fZGlzYWJsZWQuaGFuZGxlYmFycykge1xuICAgICAgICByZXN1bHRpbmdfc3RyaW5nID0gcmVzdWx0aW5nX3N0cmluZyB8fFxuICAgICAgICAgIHRoaXMuX19wYXR0ZXJucy5zbWFydHlfY29tbWVudC5yZWFkKCk7XG4gICAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nIHx8XG4gICAgICAgICAgdGhpcy5fX3BhdHRlcm5zLnNtYXJ0eV9saXRlcmFsLnJlYWQoKTtcbiAgICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHJlc3VsdGluZ19zdHJpbmcgfHxcbiAgICAgICAgICB0aGlzLl9fcGF0dGVybnMuc21hcnR5LnJlYWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdGluZ19zdHJpbmc7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzLlRlbXBsYXRhYmxlUGF0dGVybiA9IFRlbXBsYXRhYmxlUGF0dGVybjtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIFRva2VuKHR5cGUsIHRleHQsIG5ld2xpbmVzLCB3aGl0ZXNwYWNlX2JlZm9yZSkge1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnRleHQgPSB0ZXh0O1xuXG4gIC8vIGNvbW1lbnRzX2JlZm9yZSBhcmVcbiAgLy8gY29tbWVudHMgdGhhdCBoYXZlIGEgbmV3IGxpbmUgYmVmb3JlIHRoZW1cbiAgLy8gYW5kIG1heSBvciBtYXkgbm90IGhhdmUgYSBuZXdsaW5lIGFmdGVyXG4gIC8vIHRoaXMgaXMgYSBzZXQgb2YgY29tbWVudHMgYmVmb3JlXG4gIHRoaXMuY29tbWVudHNfYmVmb3JlID0gbnVsbDsgLyogaW5saW5lIGNvbW1lbnQqL1xuXG5cbiAgLy8gdGhpcy5jb21tZW50c19hZnRlciA9ICBuZXcgVG9rZW5TdHJlYW0oKTsgLy8gbm8gbmV3IGxpbmUgYmVmb3JlIGFuZCBuZXdsaW5lIGFmdGVyXG4gIHRoaXMubmV3bGluZXMgPSBuZXdsaW5lcyB8fCAwO1xuICB0aGlzLndoaXRlc3BhY2VfYmVmb3JlID0gd2hpdGVzcGFjZV9iZWZvcmUgfHwgJyc7XG4gIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5wcmV2aW91cyA9IG51bGw7XG4gIHRoaXMub3BlbmVkID0gbnVsbDtcbiAgdGhpcy5jbG9zZWQgPSBudWxsO1xuICB0aGlzLmRpcmVjdGl2ZXMgPSBudWxsO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzLlRva2VuID0gVG9rZW47XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgSW5wdXRTY2FubmVyID0gcmVxdWlyZSgnLi4vY29yZS9pbnB1dHNjYW5uZXInKS5JbnB1dFNjYW5uZXI7XG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLi9jb3JlL3Rva2VuJykuVG9rZW47XG52YXIgVG9rZW5TdHJlYW0gPSByZXF1aXJlKCcuLi9jb3JlL3Rva2Vuc3RyZWFtJykuVG9rZW5TdHJlYW07XG52YXIgV2hpdGVzcGFjZVBhdHRlcm4gPSByZXF1aXJlKCcuL3doaXRlc3BhY2VwYXR0ZXJuJykuV2hpdGVzcGFjZVBhdHRlcm47XG5cbnZhciBUT0tFTiA9IHtcbiAgU1RBUlQ6ICdUS19TVEFSVCcsXG4gIFJBVzogJ1RLX1JBVycsXG4gIEVPRjogJ1RLX0VPRidcbn07XG5cbnZhciBUb2tlbml6ZXIgPSBmdW5jdGlvbihpbnB1dF9zdHJpbmcsIG9wdGlvbnMpIHtcbiAgdGhpcy5faW5wdXQgPSBuZXcgSW5wdXRTY2FubmVyKGlucHV0X3N0cmluZyk7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB0aGlzLl9fdG9rZW5zID0gbnVsbDtcblxuICB0aGlzLl9wYXR0ZXJucyA9IHt9O1xuICB0aGlzLl9wYXR0ZXJucy53aGl0ZXNwYWNlID0gbmV3IFdoaXRlc3BhY2VQYXR0ZXJuKHRoaXMuX2lucHV0KTtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUudG9rZW5pemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5faW5wdXQucmVzdGFydCgpO1xuICB0aGlzLl9fdG9rZW5zID0gbmV3IFRva2VuU3RyZWFtKCk7XG5cbiAgdGhpcy5fcmVzZXQoKTtcblxuICB2YXIgY3VycmVudDtcbiAgdmFyIHByZXZpb3VzID0gbmV3IFRva2VuKFRPS0VOLlNUQVJULCAnJyk7XG4gIHZhciBvcGVuX3Rva2VuID0gbnVsbDtcbiAgdmFyIG9wZW5fc3RhY2sgPSBbXTtcbiAgdmFyIGNvbW1lbnRzID0gbmV3IFRva2VuU3RyZWFtKCk7XG5cbiAgd2hpbGUgKHByZXZpb3VzLnR5cGUgIT09IFRPS0VOLkVPRikge1xuICAgIGN1cnJlbnQgPSB0aGlzLl9nZXRfbmV4dF90b2tlbihwcmV2aW91cywgb3Blbl90b2tlbik7XG4gICAgd2hpbGUgKHRoaXMuX2lzX2NvbW1lbnQoY3VycmVudCkpIHtcbiAgICAgIGNvbW1lbnRzLmFkZChjdXJyZW50KTtcbiAgICAgIGN1cnJlbnQgPSB0aGlzLl9nZXRfbmV4dF90b2tlbihwcmV2aW91cywgb3Blbl90b2tlbik7XG4gICAgfVxuXG4gICAgaWYgKCFjb21tZW50cy5pc0VtcHR5KCkpIHtcbiAgICAgIGN1cnJlbnQuY29tbWVudHNfYmVmb3JlID0gY29tbWVudHM7XG4gICAgICBjb21tZW50cyA9IG5ldyBUb2tlblN0cmVhbSgpO1xuICAgIH1cblxuICAgIGN1cnJlbnQucGFyZW50ID0gb3Blbl90b2tlbjtcblxuICAgIGlmICh0aGlzLl9pc19vcGVuaW5nKGN1cnJlbnQpKSB7XG4gICAgICBvcGVuX3N0YWNrLnB1c2gob3Blbl90b2tlbik7XG4gICAgICBvcGVuX3Rva2VuID0gY3VycmVudDtcbiAgICB9IGVsc2UgaWYgKG9wZW5fdG9rZW4gJiYgdGhpcy5faXNfY2xvc2luZyhjdXJyZW50LCBvcGVuX3Rva2VuKSkge1xuICAgICAgY3VycmVudC5vcGVuZWQgPSBvcGVuX3Rva2VuO1xuICAgICAgb3Blbl90b2tlbi5jbG9zZWQgPSBjdXJyZW50O1xuICAgICAgb3Blbl90b2tlbiA9IG9wZW5fc3RhY2sucG9wKCk7XG4gICAgICBjdXJyZW50LnBhcmVudCA9IG9wZW5fdG9rZW47XG4gICAgfVxuXG4gICAgY3VycmVudC5wcmV2aW91cyA9IHByZXZpb3VzO1xuICAgIHByZXZpb3VzLm5leHQgPSBjdXJyZW50O1xuXG4gICAgdGhpcy5fX3Rva2Vucy5hZGQoY3VycmVudCk7XG4gICAgcHJldmlvdXMgPSBjdXJyZW50O1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX190b2tlbnM7XG59O1xuXG5cblRva2VuaXplci5wcm90b3R5cGUuX2lzX2ZpcnN0X3Rva2VuID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9fdG9rZW5zLmlzRW1wdHkoKTtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24oKSB7fTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fZ2V0X25leHRfdG9rZW4gPSBmdW5jdGlvbihwcmV2aW91c190b2tlbiwgb3Blbl90b2tlbikgeyAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG4gIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7XG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5faW5wdXQucmVhZCgvLisvZyk7XG4gIGlmIChyZXN1bHRpbmdfc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5SQVcsIHJlc3VsdGluZ19zdHJpbmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uRU9GLCAnJyk7XG4gIH1cbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX2lzX2NvbW1lbnQgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7IC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5faXNfb3BlbmluZyA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHsgLy8ganNoaW50IHVudXNlZDpmYWxzZVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc19jbG9zaW5nID0gZnVuY3Rpb24oY3VycmVudF90b2tlbiwgb3Blbl90b2tlbikgeyAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX2NyZWF0ZV90b2tlbiA9IGZ1bmN0aW9uKHR5cGUsIHRleHQpIHtcbiAgdmFyIHRva2VuID0gbmV3IFRva2VuKHR5cGUsIHRleHQsXG4gICAgdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZS5uZXdsaW5lX2NvdW50LFxuICAgIHRoaXMuX3BhdHRlcm5zLndoaXRlc3BhY2Uud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW4pO1xuICByZXR1cm4gdG9rZW47XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkV2hpdGVzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZS5yZWFkKCk7XG59O1xuXG5cblxubW9kdWxlLmV4cG9ydHMuVG9rZW5pemVyID0gVG9rZW5pemVyO1xubW9kdWxlLmV4cG9ydHMuVE9LRU4gPSBUT0tFTjtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIFRva2VuU3RyZWFtKHBhcmVudF90b2tlbikge1xuICAvLyBwcml2YXRlXG4gIHRoaXMuX190b2tlbnMgPSBbXTtcbiAgdGhpcy5fX3Rva2Vuc19sZW5ndGggPSB0aGlzLl9fdG9rZW5zLmxlbmd0aDtcbiAgdGhpcy5fX3Bvc2l0aW9uID0gMDtcbiAgdGhpcy5fX3BhcmVudF90b2tlbiA9IHBhcmVudF90b2tlbjtcbn1cblxuVG9rZW5TdHJlYW0ucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fX3Bvc2l0aW9uID0gMDtcbn07XG5cblRva2VuU3RyZWFtLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9fdG9rZW5zX2xlbmd0aCA9PT0gMDtcbn07XG5cblRva2VuU3RyZWFtLnByb3RvdHlwZS5oYXNOZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9fcG9zaXRpb24gPCB0aGlzLl9fdG9rZW5zX2xlbmd0aDtcbn07XG5cblRva2VuU3RyZWFtLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB2YWwgPSBudWxsO1xuICBpZiAodGhpcy5oYXNOZXh0KCkpIHtcbiAgICB2YWwgPSB0aGlzLl9fdG9rZW5zW3RoaXMuX19wb3NpdGlvbl07XG4gICAgdGhpcy5fX3Bvc2l0aW9uICs9IDE7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn07XG5cblRva2VuU3RyZWFtLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgdmFyIHZhbCA9IG51bGw7XG4gIGluZGV4ID0gaW5kZXggfHwgMDtcbiAgaW5kZXggKz0gdGhpcy5fX3Bvc2l0aW9uO1xuICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuX190b2tlbnNfbGVuZ3RoKSB7XG4gICAgdmFsID0gdGhpcy5fX3Rva2Vuc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn07XG5cblRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0b2tlbikge1xuICBpZiAodGhpcy5fX3BhcmVudF90b2tlbikge1xuICAgIHRva2VuLnBhcmVudCA9IHRoaXMuX19wYXJlbnRfdG9rZW47XG4gIH1cbiAgdGhpcy5fX3Rva2Vucy5wdXNoKHRva2VuKTtcbiAgdGhpcy5fX3Rva2Vuc19sZW5ndGggKz0gMTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLlRva2VuU3RyZWFtID0gVG9rZW5TdHJlYW07XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUGF0dGVybiA9IHJlcXVpcmUoJy4uL2NvcmUvcGF0dGVybicpLlBhdHRlcm47XG5cbmZ1bmN0aW9uIFdoaXRlc3BhY2VQYXR0ZXJuKGlucHV0X3NjYW5uZXIsIHBhcmVudCkge1xuICBQYXR0ZXJuLmNhbGwodGhpcywgaW5wdXRfc2Nhbm5lciwgcGFyZW50KTtcbiAgaWYgKHBhcmVudCkge1xuICAgIHRoaXMuX2xpbmVfcmVnZXhwID0gdGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChwYXJlbnQuX2xpbmVfcmVnZXhwKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9fc2V0X3doaXRlc3BhY2VfcGF0dGVybnMoJycsICcnKTtcbiAgfVxuXG4gIHRoaXMubmV3bGluZV9jb3VudCA9IDA7XG4gIHRoaXMud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW4gPSAnJztcbn1cbldoaXRlc3BhY2VQYXR0ZXJuLnByb3RvdHlwZSA9IG5ldyBQYXR0ZXJuKCk7XG5cbldoaXRlc3BhY2VQYXR0ZXJuLnByb3RvdHlwZS5fX3NldF93aGl0ZXNwYWNlX3BhdHRlcm5zID0gZnVuY3Rpb24od2hpdGVzcGFjZV9jaGFycywgbmV3bGluZV9jaGFycykge1xuICB3aGl0ZXNwYWNlX2NoYXJzICs9ICdcXFxcdCAnO1xuICBuZXdsaW5lX2NoYXJzICs9ICdcXFxcblxcXFxyJztcblxuICB0aGlzLl9tYXRjaF9wYXR0ZXJuID0gdGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChcbiAgICAnWycgKyB3aGl0ZXNwYWNlX2NoYXJzICsgbmV3bGluZV9jaGFycyArICddKycsIHRydWUpO1xuICB0aGlzLl9uZXdsaW5lX3JlZ2V4cCA9IHRoaXMuX2lucHV0LmdldF9yZWdleHAoXG4gICAgJ1xcXFxyXFxcXG58WycgKyBuZXdsaW5lX2NoYXJzICsgJ10nKTtcbn07XG5cbldoaXRlc3BhY2VQYXR0ZXJuLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmV3bGluZV9jb3VudCA9IDA7XG4gIHRoaXMud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW4gPSAnJztcblxuICB2YXIgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX2lucHV0LnJlYWQodGhpcy5fbWF0Y2hfcGF0dGVybik7XG4gIGlmIChyZXN1bHRpbmdfc3RyaW5nID09PSAnICcpIHtcbiAgICB0aGlzLndoaXRlc3BhY2VfYmVmb3JlX3Rva2VuID0gJyAnO1xuICB9IGVsc2UgaWYgKHJlc3VsdGluZ19zdHJpbmcpIHtcbiAgICB2YXIgbWF0Y2hlcyA9IHRoaXMuX19zcGxpdCh0aGlzLl9uZXdsaW5lX3JlZ2V4cCwgcmVzdWx0aW5nX3N0cmluZyk7XG4gICAgdGhpcy5uZXdsaW5lX2NvdW50ID0gbWF0Y2hlcy5sZW5ndGggLSAxO1xuICAgIHRoaXMud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW4gPSBtYXRjaGVzW3RoaXMubmV3bGluZV9jb3VudF07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0aW5nX3N0cmluZztcbn07XG5cbldoaXRlc3BhY2VQYXR0ZXJuLnByb3RvdHlwZS5tYXRjaGluZyA9IGZ1bmN0aW9uKHdoaXRlc3BhY2VfY2hhcnMsIG5ld2xpbmVfY2hhcnMpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2NyZWF0ZSgpO1xuICByZXN1bHQuX19zZXRfd2hpdGVzcGFjZV9wYXR0ZXJucyh3aGl0ZXNwYWNlX2NoYXJzLCBuZXdsaW5lX2NoYXJzKTtcbiAgcmVzdWx0Ll91cGRhdGUoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbldoaXRlc3BhY2VQYXR0ZXJuLnByb3RvdHlwZS5fY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgV2hpdGVzcGFjZVBhdHRlcm4odGhpcy5faW5wdXQsIHRoaXMpO1xufTtcblxuV2hpdGVzcGFjZVBhdHRlcm4ucHJvdG90eXBlLl9fc3BsaXQgPSBmdW5jdGlvbihyZWdleHAsIGlucHV0X3N0cmluZykge1xuICByZWdleHAubGFzdEluZGV4ID0gMDtcbiAgdmFyIHN0YXJ0X2luZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgbmV4dF9tYXRjaCA9IHJlZ2V4cC5leGVjKGlucHV0X3N0cmluZyk7XG4gIHdoaWxlIChuZXh0X21hdGNoKSB7XG4gICAgcmVzdWx0LnB1c2goaW5wdXRfc3RyaW5nLnN1YnN0cmluZyhzdGFydF9pbmRleCwgbmV4dF9tYXRjaC5pbmRleCkpO1xuICAgIHN0YXJ0X2luZGV4ID0gbmV4dF9tYXRjaC5pbmRleCArIG5leHRfbWF0Y2hbMF0ubGVuZ3RoO1xuICAgIG5leHRfbWF0Y2ggPSByZWdleHAuZXhlYyhpbnB1dF9zdHJpbmcpO1xuICB9XG5cbiAgaWYgKHN0YXJ0X2luZGV4IDwgaW5wdXRfc3RyaW5nLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wdXNoKGlucHV0X3N0cmluZy5zdWJzdHJpbmcoc3RhcnRfaW5kZXgsIGlucHV0X3N0cmluZy5sZW5ndGgpKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzLldoaXRlc3BhY2VQYXR0ZXJuID0gV2hpdGVzcGFjZVBhdHRlcm47XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgT3B0aW9ucyA9IHJlcXVpcmUoJy4vb3B0aW9ucycpLk9wdGlvbnM7XG52YXIgT3V0cHV0ID0gcmVxdWlyZSgnLi4vY29yZS9vdXRwdXQnKS5PdXRwdXQ7XG52YXIgSW5wdXRTY2FubmVyID0gcmVxdWlyZSgnLi4vY29yZS9pbnB1dHNjYW5uZXInKS5JbnB1dFNjYW5uZXI7XG52YXIgRGlyZWN0aXZlcyA9IHJlcXVpcmUoJy4uL2NvcmUvZGlyZWN0aXZlcycpLkRpcmVjdGl2ZXM7XG5cbnZhciBkaXJlY3RpdmVzX2NvcmUgPSBuZXcgRGlyZWN0aXZlcygvXFwvXFwqLywgL1xcKlxcLy8pO1xuXG52YXIgbGluZUJyZWFrID0gL1xcclxcbnxbXFxyXFxuXS87XG52YXIgYWxsTGluZUJyZWFrcyA9IC9cXHJcXG58W1xcclxcbl0vZztcblxuLy8gdG9rZW5pemVyXG52YXIgd2hpdGVzcGFjZUNoYXIgPSAvXFxzLztcbnZhciB3aGl0ZXNwYWNlUGF0dGVybiA9IC8oPzpcXHN8XFxuKSsvZztcbnZhciBibG9ja19jb21tZW50X3BhdHRlcm4gPSAvXFwvXFwqKD86W1xcc1xcU10qPykoKD86XFwqXFwvKXwkKS9nO1xudmFyIGNvbW1lbnRfcGF0dGVybiA9IC9cXC9cXC8oPzpbXlxcblxcclxcdTIwMjhcXHUyMDI5XSopL2c7XG5cbmZ1bmN0aW9uIEJlYXV0aWZpZXIoc291cmNlX3RleHQsIG9wdGlvbnMpIHtcbiAgdGhpcy5fc291cmNlX3RleHQgPSBzb3VyY2VfdGV4dCB8fCAnJztcbiAgLy8gQWxsb3cgdGhlIHNldHRpbmcgb2YgbGFuZ3VhZ2UvZmlsZS10eXBlIHNwZWNpZmljIG9wdGlvbnNcbiAgLy8gd2l0aCBpbmhlcml0YW5jZSBvZiBvdmVyYWxsIHNldHRpbmdzXG4gIHRoaXMuX29wdGlvbnMgPSBuZXcgT3B0aW9ucyhvcHRpb25zKTtcbiAgdGhpcy5fY2ggPSBudWxsO1xuICB0aGlzLl9pbnB1dCA9IG51bGw7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0F0LXJ1bGVcbiAgdGhpcy5ORVNURURfQVRfUlVMRSA9IHtcbiAgICBcInBhZ2VcIjogdHJ1ZSxcbiAgICBcImZvbnQtZmFjZVwiOiB0cnVlLFxuICAgIFwia2V5ZnJhbWVzXCI6IHRydWUsXG4gICAgLy8gYWxzbyBpbiBDT05ESVRJT05BTF9HUk9VUF9SVUxFIGJlbG93XG4gICAgXCJtZWRpYVwiOiB0cnVlLFxuICAgIFwic3VwcG9ydHNcIjogdHJ1ZSxcbiAgICBcImRvY3VtZW50XCI6IHRydWVcbiAgfTtcbiAgdGhpcy5DT05ESVRJT05BTF9HUk9VUF9SVUxFID0ge1xuICAgIFwibWVkaWFcIjogdHJ1ZSxcbiAgICBcInN1cHBvcnRzXCI6IHRydWUsXG4gICAgXCJkb2N1bWVudFwiOiB0cnVlXG4gIH07XG4gIHRoaXMuTk9OX1NFTUlDT0xPTl9ORVdMSU5FX1BST1BFUlRZID0gW1xuICAgIFwiZ3JpZC10ZW1wbGF0ZS1hcmVhc1wiLFxuICAgIFwiZ3JpZC10ZW1wbGF0ZVwiXG4gIF07XG5cbn1cblxuQmVhdXRpZmllci5wcm90b3R5cGUuZWF0U3RyaW5nID0gZnVuY3Rpb24oZW5kQ2hhcnMpIHtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB0aGlzLl9jaCA9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgd2hpbGUgKHRoaXMuX2NoKSB7XG4gICAgcmVzdWx0ICs9IHRoaXMuX2NoO1xuICAgIGlmICh0aGlzLl9jaCA9PT0gXCJcXFxcXCIpIHtcbiAgICAgIHJlc3VsdCArPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgfSBlbHNlIGlmIChlbmRDaGFycy5pbmRleE9mKHRoaXMuX2NoKSAhPT0gLTEgfHwgdGhpcy5fY2ggPT09IFwiXFxuXCIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl9jaCA9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gU2tpcHMgYW55IHdoaXRlIHNwYWNlIGluIHRoZSBzb3VyY2UgdGV4dCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuLy8gV2hlbiBhbGxvd0F0TGVhc3RPbmVOZXdMaW5lIGlzIHRydWUsIHdpbGwgb3V0cHV0IG5ldyBsaW5lcyBmb3IgZWFjaFxuLy8gbmV3bGluZSBjaGFyYWN0ZXIgZm91bmQ7IGlmIHRoZSB1c2VyIGhhcyBwcmVzZXJ2ZV9uZXdsaW5lcyBvZmYsIG9ubHlcbi8vIHRoZSBmaXJzdCBuZXdsaW5lIHdpbGwgYmUgb3V0cHV0XG5CZWF1dGlmaWVyLnByb3RvdHlwZS5lYXRXaGl0ZXNwYWNlID0gZnVuY3Rpb24oYWxsb3dBdExlYXN0T25lTmV3TGluZSkge1xuICB2YXIgcmVzdWx0ID0gd2hpdGVzcGFjZUNoYXIudGVzdCh0aGlzLl9pbnB1dC5wZWVrKCkpO1xuICB2YXIgbmV3bGluZV9jb3VudCA9IDA7XG4gIHdoaWxlICh3aGl0ZXNwYWNlQ2hhci50ZXN0KHRoaXMuX2lucHV0LnBlZWsoKSkpIHtcbiAgICB0aGlzLl9jaCA9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICBpZiAoYWxsb3dBdExlYXN0T25lTmV3TGluZSAmJiB0aGlzLl9jaCA9PT0gJ1xcbicpIHtcbiAgICAgIGlmIChuZXdsaW5lX2NvdW50ID09PSAwIHx8IG5ld2xpbmVfY291bnQgPCB0aGlzLl9vcHRpb25zLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcykge1xuICAgICAgICBuZXdsaW5lX2NvdW50Kys7XG4gICAgICAgIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBOZXN0ZWQgcHNldWRvLWNsYXNzIGlmIHdlIGFyZSBpbnNpZGVSdWxlXG4vLyBhbmQgdGhlIG5leHQgc3BlY2lhbCBjaGFyYWN0ZXIgZm91bmQgb3BlbnNcbi8vIGEgbmV3IGJsb2NrXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5mb3VuZE5lc3RlZFBzZXVkb0NsYXNzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvcGVuUGFyZW4gPSAwO1xuICB2YXIgaSA9IDE7XG4gIHZhciBjaCA9IHRoaXMuX2lucHV0LnBlZWsoaSk7XG4gIHdoaWxlIChjaCkge1xuICAgIGlmIChjaCA9PT0gXCJ7XCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcoJykge1xuICAgICAgLy8gcHNldWRvY2xhc3NlcyBjYW4gY29udGFpbiAoKVxuICAgICAgb3BlblBhcmVuICs9IDE7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJyknKSB7XG4gICAgICBpZiAob3BlblBhcmVuID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9wZW5QYXJlbiAtPSAxO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiO1wiIHx8IGNoID09PSBcIn1cIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpKys7XG4gICAgY2ggPSB0aGlzLl9pbnB1dC5wZWVrKGkpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLnByaW50X3N0cmluZyA9IGZ1bmN0aW9uKG91dHB1dF9zdHJpbmcpIHtcbiAgdGhpcy5fb3V0cHV0LnNldF9pbmRlbnQodGhpcy5faW5kZW50TGV2ZWwpO1xuICB0aGlzLl9vdXRwdXQubm9uX2JyZWFraW5nX3NwYWNlID0gdHJ1ZTtcbiAgdGhpcy5fb3V0cHV0LmFkZF90b2tlbihvdXRwdXRfc3RyaW5nKTtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLnByZXNlcnZlU2luZ2xlU3BhY2UgPSBmdW5jdGlvbihpc0FmdGVyU3BhY2UpIHtcbiAgaWYgKGlzQWZ0ZXJTcGFjZSkge1xuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5pbmRlbnQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5faW5kZW50TGV2ZWwrKztcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLm91dGRlbnQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX2luZGVudExldmVsID4gMCkge1xuICAgIHRoaXMuX2luZGVudExldmVsLS07XG4gIH1cbn07XG5cbi8qX19fX19fX19fX19fX19fX19fX19fLS0tLS0tLS0tLS0tLS0tLS0tLS1fX19fX19fX19fX19fX19fX19fX18qL1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5iZWF1dGlmeSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fb3B0aW9ucy5kaXNhYmxlZCkge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2VfdGV4dDtcbiAgfVxuXG4gIHZhciBzb3VyY2VfdGV4dCA9IHRoaXMuX3NvdXJjZV90ZXh0O1xuICB2YXIgZW9sID0gdGhpcy5fb3B0aW9ucy5lb2w7XG4gIGlmIChlb2wgPT09ICdhdXRvJykge1xuICAgIGVvbCA9ICdcXG4nO1xuICAgIGlmIChzb3VyY2VfdGV4dCAmJiBsaW5lQnJlYWsudGVzdChzb3VyY2VfdGV4dCB8fCAnJykpIHtcbiAgICAgIGVvbCA9IHNvdXJjZV90ZXh0Lm1hdGNoKGxpbmVCcmVhaylbMF07XG4gICAgfVxuICB9XG5cblxuICAvLyBIQUNLOiBuZXdsaW5lIHBhcnNpbmcgaW5jb25zaXN0ZW50LiBUaGlzIGJydXRlIGZvcmNlIG5vcm1hbGl6ZXMgdGhlIHRoaXMuX2lucHV0LlxuICBzb3VyY2VfdGV4dCA9IHNvdXJjZV90ZXh0LnJlcGxhY2UoYWxsTGluZUJyZWFrcywgJ1xcbicpO1xuXG4gIC8vIHJlc2V0XG4gIHZhciBiYXNlSW5kZW50U3RyaW5nID0gc291cmNlX3RleHQubWF0Y2goL15bXFx0IF0qLylbMF07XG5cbiAgdGhpcy5fb3V0cHV0ID0gbmV3IE91dHB1dCh0aGlzLl9vcHRpb25zLCBiYXNlSW5kZW50U3RyaW5nKTtcbiAgdGhpcy5faW5wdXQgPSBuZXcgSW5wdXRTY2FubmVyKHNvdXJjZV90ZXh0KTtcbiAgdGhpcy5faW5kZW50TGV2ZWwgPSAwO1xuICB0aGlzLl9uZXN0ZWRMZXZlbCA9IDA7XG5cbiAgdGhpcy5fY2ggPSBudWxsO1xuICB2YXIgcGFyZW5MZXZlbCA9IDA7XG5cbiAgdmFyIGluc2lkZVJ1bGUgPSBmYWxzZTtcbiAgLy8gVGhpcyBpcyB0aGUgdmFsdWUgc2lkZSBvZiBhIHByb3BlcnR5IHZhbHVlIHBhaXIgKGJsdWUgaW4gdGhlIGZvbGxvd2luZyBleClcbiAgLy8gbGFiZWwgeyBjb250ZW50OiBibHVlIH1cbiAgdmFyIGluc2lkZVByb3BlcnR5VmFsdWUgPSBmYWxzZTtcbiAgdmFyIGVudGVyaW5nQ29uZGl0aW9uYWxHcm91cCA9IGZhbHNlO1xuICB2YXIgaW5zaWRlTm9uTmVzdGVkQXRSdWxlID0gZmFsc2U7XG4gIHZhciBpbnNpZGVTY3NzTWFwID0gZmFsc2U7XG4gIHZhciB0b3BDaGFyYWN0ZXIgPSB0aGlzLl9jaDtcbiAgdmFyIGluc2lkZU5vblNlbWlDb2xvblZhbHVlcyA9IGZhbHNlO1xuICB2YXIgd2hpdGVzcGFjZTtcbiAgdmFyIGlzQWZ0ZXJTcGFjZTtcbiAgdmFyIHByZXZpb3VzX2NoO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgd2hpdGVzcGFjZSA9IHRoaXMuX2lucHV0LnJlYWQod2hpdGVzcGFjZVBhdHRlcm4pO1xuICAgIGlzQWZ0ZXJTcGFjZSA9IHdoaXRlc3BhY2UgIT09ICcnO1xuICAgIHByZXZpb3VzX2NoID0gdG9wQ2hhcmFjdGVyO1xuICAgIHRoaXMuX2NoID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgIGlmICh0aGlzLl9jaCA9PT0gJ1xcXFwnICYmIHRoaXMuX2lucHV0Lmhhc05leHQoKSkge1xuICAgICAgdGhpcy5fY2ggKz0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgIH1cbiAgICB0b3BDaGFyYWN0ZXIgPSB0aGlzLl9jaDtcblxuICAgIGlmICghdGhpcy5fY2gpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fY2ggPT09ICcvJyAmJiB0aGlzLl9pbnB1dC5wZWVrKCkgPT09ICcqJykge1xuICAgICAgLy8gLyogY3NzIGNvbW1lbnQgKi9cbiAgICAgIC8vIEFsd2F5cyBzdGFydCBibG9jayBjb21tZW50cyBvbiBhIG5ldyBsaW5lLlxuICAgICAgLy8gVGhpcyBoYW5kbGVzIHNjZW5hcmlvcyB3aGVyZSBhIGJsb2NrIGNvbW1lbnQgaW1tZWRpYXRlbHlcbiAgICAgIC8vIGZvbGxvd3MgYSBwcm9wZXJ0eSBkZWZpbml0aW9uIG9uIHRoZSBzYW1lIGxpbmUgb3Igd2hlcmVcbiAgICAgIC8vIG1pbmlmaWVkIGNvZGUgaXMgYmVpbmcgYmVhdXRpZmllZC5cbiAgICAgIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKTtcbiAgICAgIHRoaXMuX2lucHV0LmJhY2soKTtcblxuICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLl9pbnB1dC5yZWFkKGJsb2NrX2NvbW1lbnRfcGF0dGVybik7XG5cbiAgICAgIC8vIEhhbmRsZSBpZ25vcmUgZGlyZWN0aXZlXG4gICAgICB2YXIgZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXNfY29yZS5nZXRfZGlyZWN0aXZlcyhjb21tZW50KTtcbiAgICAgIGlmIChkaXJlY3RpdmVzICYmIGRpcmVjdGl2ZXMuaWdub3JlID09PSAnc3RhcnQnKSB7XG4gICAgICAgIGNvbW1lbnQgKz0gZGlyZWN0aXZlc19jb3JlLnJlYWRJZ25vcmVkKHRoaXMuX2lucHV0KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmludF9zdHJpbmcoY29tbWVudCk7XG5cbiAgICAgIC8vIEVuc3VyZXMgYW55IG5ldyBsaW5lcyBmb2xsb3dpbmcgdGhlIGNvbW1lbnQgYXJlIHByZXNlcnZlZFxuICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKHRydWUpO1xuXG4gICAgICAvLyBCbG9jayBjb21tZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBuZXcgbGluZSBzbyB0aGV5IGRvbid0XG4gICAgICAvLyBzaGFyZSBhIGxpbmUgd2l0aCBvdGhlciBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gJy8nICYmIHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gJy8nKSB7XG4gICAgICAvLyAvLyBzaW5nbGUgbGluZSBjb21tZW50XG4gICAgICAvLyBQcmVzZXJ2ZXMgdGhlIHNwYWNlIGJlZm9yZSBhIGNvbW1lbnRcbiAgICAgIC8vIG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBydWxlXG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2lucHV0LmJhY2soKTtcbiAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2lucHV0LnJlYWQoY29tbWVudF9wYXR0ZXJuKSk7XG5cbiAgICAgIC8vIEVuc3VyZXMgYW55IG5ldyBsaW5lcyBmb2xsb3dpbmcgdGhlIGNvbW1lbnQgYXJlIHByZXNlcnZlZFxuICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fY2ggPT09ICckJykge1xuICAgICAgdGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKGlzQWZ0ZXJTcGFjZSk7XG5cbiAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcblxuICAgICAgLy8gc3RyaXAgdHJhaWxpbmcgc3BhY2UsIGlmIHByZXNlbnQsIGZvciBoYXNoIHByb3BlcnR5IGNoZWNrc1xuICAgICAgdmFyIHZhcmlhYmxlID0gdGhpcy5faW5wdXQucGVla1VudGlsQWZ0ZXIoL1s6ICw7e30oKVtcXF1cXC89J1wiXS9nKTtcblxuICAgICAgaWYgKHZhcmlhYmxlLm1hdGNoKC9bIDpdJC8pKSB7XG4gICAgICAgIC8vIHdlIGhhdmUgYSB2YXJpYWJsZSBvciBwc2V1ZG8tY2xhc3MsIGFkZCBpdCBhbmQgaW5zZXJ0IG9uZSBzcGFjZSBiZWZvcmUgY29udGludWluZ1xuICAgICAgICB2YXJpYWJsZSA9IHRoaXMuZWF0U3RyaW5nKFwiOiBcIikucmVwbGFjZSgvXFxzJC8sICcnKTtcbiAgICAgICAgdGhpcy5wcmludF9zdHJpbmcodmFyaWFibGUpO1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5yZXBsYWNlKC9cXHMkLywgJycpO1xuXG4gICAgICAvLyBtaWdodCBiZSBzYXNzIHZhcmlhYmxlXG4gICAgICBpZiAocGFyZW5MZXZlbCA9PT0gMCAmJiB2YXJpYWJsZS5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgICAgIGluc2lkZVByb3BlcnR5VmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5fY2ggPT09ICdAJykge1xuICAgICAgdGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKGlzQWZ0ZXJTcGFjZSk7XG5cbiAgICAgIC8vIGRlYWwgd2l0aCBsZXNzIHByb3BlcnR5IG1peGlucyBAey4uLn1cbiAgICAgIGlmICh0aGlzLl9pbnB1dC5wZWVrKCkgPT09ICd7Jykge1xuICAgICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCArIHRoaXMuZWF0U3RyaW5nKCd9JykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuXG4gICAgICAgIC8vIHN0cmlwIHRyYWlsaW5nIHNwYWNlLCBpZiBwcmVzZW50LCBmb3IgaGFzaCBwcm9wZXJ0eSBjaGVja3NcbiAgICAgICAgdmFyIHZhcmlhYmxlT3JSdWxlID0gdGhpcy5faW5wdXQucGVla1VudGlsQWZ0ZXIoL1s6ICw7e30oKVtcXF1cXC89J1wiXS9nKTtcblxuICAgICAgICBpZiAodmFyaWFibGVPclJ1bGUubWF0Y2goL1sgOl0kLykpIHtcbiAgICAgICAgICAvLyB3ZSBoYXZlIGEgdmFyaWFibGUgb3IgcHNldWRvLWNsYXNzLCBhZGQgaXQgYW5kIGluc2VydCBvbmUgc3BhY2UgYmVmb3JlIGNvbnRpbnVpbmdcbiAgICAgICAgICB2YXJpYWJsZU9yUnVsZSA9IHRoaXMuZWF0U3RyaW5nKFwiOiBcIikucmVwbGFjZSgvXFxzJC8sICcnKTtcbiAgICAgICAgICB0aGlzLnByaW50X3N0cmluZyh2YXJpYWJsZU9yUnVsZSk7XG4gICAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXJpYWJsZU9yUnVsZSA9IHZhcmlhYmxlT3JSdWxlLnJlcGxhY2UoL1xccyQvLCAnJyk7XG5cbiAgICAgICAgLy8gbWlnaHQgYmUgbGVzcyB2YXJpYWJsZVxuICAgICAgICBpZiAocGFyZW5MZXZlbCA9PT0gMCAmJiB2YXJpYWJsZU9yUnVsZS5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgICAgICAgaW5zaWRlUHJvcGVydHlWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pbmRlbnQoKTtcblxuICAgICAgICAgIC8vIG1pZ2h0IGJlIGEgbmVzdGluZyBhdC1ydWxlXG4gICAgICAgIH0gZWxzZSBpZiAodmFyaWFibGVPclJ1bGUgaW4gdGhpcy5ORVNURURfQVRfUlVMRSkge1xuICAgICAgICAgIHRoaXMuX25lc3RlZExldmVsICs9IDE7XG4gICAgICAgICAgaWYgKHZhcmlhYmxlT3JSdWxlIGluIHRoaXMuQ09ORElUSU9OQUxfR1JPVVBfUlVMRSkge1xuICAgICAgICAgICAgZW50ZXJpbmdDb25kaXRpb25hbEdyb3VwID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBtaWdodCBiZSBhIG5vbi1uZXN0ZWQgYXQtcnVsZVxuICAgICAgICB9IGVsc2UgaWYgKHBhcmVuTGV2ZWwgPT09IDAgJiYgIWluc2lkZVByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICBpbnNpZGVOb25OZXN0ZWRBdFJ1bGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gJyMnICYmIHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gJ3snKSB7XG4gICAgICB0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoaXNBZnRlclNwYWNlKTtcbiAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoICsgdGhpcy5lYXRTdHJpbmcoJ30nKSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gJ3snKSB7XG4gICAgICBpZiAoaW5zaWRlUHJvcGVydHlWYWx1ZSkge1xuICAgICAgICBpbnNpZGVQcm9wZXJ0eVZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3V0ZGVudCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBub24gbmVzdGVkIGF0IHJ1bGUgYmVjb21lcyBuZXN0ZWRcbiAgICAgIGluc2lkZU5vbk5lc3RlZEF0UnVsZSA9IGZhbHNlO1xuXG4gICAgICAvLyB3aGVuIGVudGVyaW5nIGNvbmRpdGlvbmFsIGdyb3Vwcywgb25seSBydWxlc2V0cyBhcmUgYWxsb3dlZFxuICAgICAgaWYgKGVudGVyaW5nQ29uZGl0aW9uYWxHcm91cCkge1xuICAgICAgICBlbnRlcmluZ0NvbmRpdGlvbmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgaW5zaWRlUnVsZSA9ICh0aGlzLl9pbmRlbnRMZXZlbCA+PSB0aGlzLl9uZXN0ZWRMZXZlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UsIGRlY2xhcmF0aW9ucyBhcmUgYWxzbyBhbGxvd2VkXG4gICAgICAgIGluc2lkZVJ1bGUgPSAodGhpcy5faW5kZW50TGV2ZWwgPj0gdGhpcy5fbmVzdGVkTGV2ZWwgLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9vcHRpb25zLm5ld2xpbmVfYmV0d2Vlbl9ydWxlcyAmJiBpbnNpZGVSdWxlKSB7XG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXQucHJldmlvdXNfbGluZSAmJiB0aGlzLl9vdXRwdXQucHJldmlvdXNfbGluZS5pdGVtKC0xKSAhPT0gJ3snKSB7XG4gICAgICAgICAgdGhpcy5fb3V0cHV0LmVuc3VyZV9lbXB0eV9saW5lX2Fib3ZlKCcvJywgJywnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcblxuICAgICAgLy8gVGhlIGRpZmZlcmVuY2UgaW4gcHJpbnRfc3RyaW5nIGFuZCBpbmRlbnQgb3JkZXIgaXMgbmVjZXNzYXJ5IHRvIGluZGVudCB0aGUgJ3snIGNvcnJlY3RseVxuICAgICAgaWYgKHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGUgPT09ICdleHBhbmQnKSB7XG4gICAgICAgIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKTtcbiAgICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuICAgICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgICB0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLl9pbmRlbnRMZXZlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpbnNpZGUgbWl4aW4gYW5kIGZpcnN0IHBhcmFtIGlzIG9iamVjdFxuICAgICAgICBpZiAocHJldmlvdXNfY2ggPT09ICcoJykge1xuICAgICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c19jaCAhPT0gJywnKSB7XG4gICAgICAgICAgdGhpcy5pbmRlbnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWF0V2hpdGVzcGFjZSh0cnVlKTtcbiAgICAgIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnfScpIHtcbiAgICAgIHRoaXMub3V0ZGVudCgpO1xuICAgICAgdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpO1xuICAgICAgaWYgKHByZXZpb3VzX2NoID09PSAneycpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnRyaW0odHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnNpZGVQcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgIHRoaXMub3V0ZGVudCgpO1xuICAgICAgICBpbnNpZGVQcm9wZXJ0eVZhbHVlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7XG4gICAgICBpbnNpZGVSdWxlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5fbmVzdGVkTGV2ZWwpIHtcbiAgICAgICAgdGhpcy5fbmVzdGVkTGV2ZWwtLTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKHRydWUpO1xuICAgICAgdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpO1xuXG4gICAgICBpZiAodGhpcy5fb3B0aW9ucy5uZXdsaW5lX2JldHdlZW5fcnVsZXMgJiYgIXRoaXMuX291dHB1dC5qdXN0X2FkZGVkX2JsYW5rbGluZSgpKSB7XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dC5wZWVrKCkgIT09ICd9Jykge1xuICAgICAgICAgIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9pbnB1dC5wZWVrKCkgPT09ICcpJykge1xuICAgICAgICB0aGlzLl9vdXRwdXQudHJpbSh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGUgPT09IFwiZXhwYW5kXCIpIHtcbiAgICAgICAgICB0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gXCI6XCIpIHtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLk5PTl9TRU1JQ09MT05fTkVXTElORV9QUk9QRVJUWS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5faW5wdXQubG9va0JhY2sodGhpcy5OT05fU0VNSUNPTE9OX05FV0xJTkVfUFJPUEVSVFlbaV0pKSB7XG4gICAgICAgICAgaW5zaWRlTm9uU2VtaUNvbG9uVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoKGluc2lkZVJ1bGUgfHwgZW50ZXJpbmdDb25kaXRpb25hbEdyb3VwKSAmJiAhKHRoaXMuX2lucHV0Lmxvb2tCYWNrKFwiJlwiKSB8fCB0aGlzLmZvdW5kTmVzdGVkUHNldWRvQ2xhc3MoKSkgJiYgIXRoaXMuX2lucHV0Lmxvb2tCYWNrKFwiKFwiKSAmJiAhaW5zaWRlTm9uTmVzdGVkQXRSdWxlICYmIHBhcmVuTGV2ZWwgPT09IDApIHtcbiAgICAgICAgLy8gJ3Byb3BlcnR5OiB2YWx1ZScgZGVsaW1pdGVyXG4gICAgICAgIC8vIHdoaWNoIGNvdWxkIGJlIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAgcXVlcnlcblxuICAgICAgICB0aGlzLnByaW50X3N0cmluZygnOicpO1xuICAgICAgICBpZiAoIWluc2lkZVByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICBpbnNpZGVQcm9wZXJ0eVZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVhdFdoaXRlc3BhY2UodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5pbmRlbnQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2Fzcy9sZXNzIHBhcmVudCByZWZlcmVuY2UgZG9uJ3QgdXNlIGEgc3BhY2VcbiAgICAgICAgLy8gc2FzcyBuZXN0ZWQgcHNldWRvLWNsYXNzIGRvbid0IHVzZSBhIHNwYWNlXG5cbiAgICAgICAgLy8gcHJlc2VydmUgc3BhY2UgYmVmb3JlIHBzZXVkb2NsYXNzZXMvcHNldWRvZWxlbWVudHMsIGFzIGl0IG1lYW5zIFwiaW4gYW55IGNoaWxkXCJcbiAgICAgICAgaWYgKHRoaXMuX2lucHV0Lmxvb2tCYWNrKFwiIFwiKSkge1xuICAgICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dC5wZWVrKCkgPT09IFwiOlwiKSB7XG4gICAgICAgICAgLy8gcHNldWRvLWVsZW1lbnRcbiAgICAgICAgICB0aGlzLl9jaCA9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgICAgICB0aGlzLnByaW50X3N0cmluZyhcIjo6XCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHBzZXVkby1jbGFzc1xuICAgICAgICAgIHRoaXMucHJpbnRfc3RyaW5nKCc6Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnXCInIHx8IHRoaXMuX2NoID09PSAnXFwnJykge1xuICAgICAgdmFyIHByZXNlcnZlUXVvdGVTcGFjZSA9IHByZXZpb3VzX2NoID09PSAnXCInIHx8IHByZXZpb3VzX2NoID09PSAnXFwnJztcbiAgICAgIHRoaXMucHJlc2VydmVTaW5nbGVTcGFjZShwcmVzZXJ2ZVF1b3RlU3BhY2UgfHwgaXNBZnRlclNwYWNlKTtcbiAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoICsgdGhpcy5lYXRTdHJpbmcodGhpcy5fY2gpKTtcbiAgICAgIHRoaXMuZWF0V2hpdGVzcGFjZSh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnOycpIHtcbiAgICAgIGluc2lkZU5vblNlbWlDb2xvblZhbHVlcyA9IGZhbHNlO1xuICAgICAgaWYgKHBhcmVuTGV2ZWwgPT09IDApIHtcbiAgICAgICAgaWYgKGluc2lkZVByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm91dGRlbnQoKTtcbiAgICAgICAgICBpbnNpZGVQcm9wZXJ0eVZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5zaWRlTm9uTmVzdGVkQXRSdWxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcbiAgICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKHRydWUpO1xuXG4gICAgICAgIC8vIFRoaXMgbWFpbnRhaW5zIHNpbmdsZSBsaW5lIGNvbW1lbnRzIG9uIHRoZSBzYW1lXG4gICAgICAgIC8vIGxpbmUuIEJsb2NrIGNvbW1lbnRzIGFyZSBhbHNvIGFmZmVjdGVkLCBidXRcbiAgICAgICAgLy8gYSBuZXcgbGluZSBpcyBhbHdheXMgb3V0cHV0IGJlZm9yZSBvbmUgaW5zaWRlXG4gICAgICAgIC8vIHRoYXQgc2VjdGlvblxuICAgICAgICBpZiAodGhpcy5faW5wdXQucGVlaygpICE9PSAnLycpIHtcbiAgICAgICAgICB0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcbiAgICAgICAgdGhpcy5lYXRXaGl0ZXNwYWNlKHRydWUpO1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnKCcpIHsgLy8gbWF5IGJlIGEgdXJsXG4gICAgICBpZiAodGhpcy5faW5wdXQubG9va0JhY2soXCJ1cmxcIikpIHtcbiAgICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuICAgICAgICB0aGlzLmVhdFdoaXRlc3BhY2UoKTtcbiAgICAgICAgcGFyZW5MZXZlbCsrO1xuICAgICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgICB0aGlzLl9jaCA9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoID09PSAnKScgfHwgdGhpcy5fY2ggPT09ICdcIicgfHwgdGhpcy5fY2ggPT09ICdcXCcnKSB7XG4gICAgICAgICAgdGhpcy5faW5wdXQuYmFjaygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoKSB7XG4gICAgICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2ggKyB0aGlzLmVhdFN0cmluZygnKScpKTtcbiAgICAgICAgICBpZiAocGFyZW5MZXZlbCkge1xuICAgICAgICAgICAgcGFyZW5MZXZlbC0tO1xuICAgICAgICAgICAgdGhpcy5vdXRkZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc3BhY2VfbmVlZGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dC5sb29rQmFjayhcIndpdGhcIikpIHtcbiAgICAgICAgICAvLyBsb29rIGJhY2sgaXMgbm90IGFuIGFjY3VyYXRlIHNvbHV0aW9uLCB3ZSBuZWVkIHRva2VucyB0byBjb25maXJtIHdpdGhvdXQgd2hpdGVzcGFjZXNcbiAgICAgICAgICBzcGFjZV9uZWVkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlc2VydmVTaW5nbGVTcGFjZShpc0FmdGVyU3BhY2UgfHwgc3BhY2VfbmVlZGVkKTtcbiAgICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuXG4gICAgICAgIC8vIGhhbmRsZSBzY3NzL3Nhc3MgbWFwXG4gICAgICAgIGlmIChpbnNpZGVQcm9wZXJ0eVZhbHVlICYmIHByZXZpb3VzX2NoID09PSBcIiRcIiAmJiB0aGlzLl9vcHRpb25zLnNlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lKSB7XG4gICAgICAgICAgdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpO1xuICAgICAgICAgIGluc2lkZVNjc3NNYXAgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWF0V2hpdGVzcGFjZSgpO1xuICAgICAgICAgIHBhcmVuTGV2ZWwrKztcbiAgICAgICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gJyknKSB7XG4gICAgICBpZiAocGFyZW5MZXZlbCkge1xuICAgICAgICBwYXJlbkxldmVsLS07XG4gICAgICAgIHRoaXMub3V0ZGVudCgpO1xuICAgICAgfVxuICAgICAgaWYgKGluc2lkZVNjc3NNYXAgJiYgdGhpcy5faW5wdXQucGVlaygpID09PSBcIjtcIiAmJiB0aGlzLl9vcHRpb25zLnNlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lKSB7XG4gICAgICAgIGluc2lkZVNjc3NNYXAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vdXRkZW50KCk7XG4gICAgICAgIHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnLCcpIHtcbiAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcbiAgICAgIHRoaXMuZWF0V2hpdGVzcGFjZSh0cnVlKTtcbiAgICAgIGlmICh0aGlzLl9vcHRpb25zLnNlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lICYmICghaW5zaWRlUHJvcGVydHlWYWx1ZSB8fCBpbnNpZGVTY3NzTWFwKSAmJiBwYXJlbkxldmVsID09PSAwICYmICFpbnNpZGVOb25OZXN0ZWRBdFJ1bGUpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgodGhpcy5fY2ggPT09ICc+JyB8fCB0aGlzLl9jaCA9PT0gJysnIHx8IHRoaXMuX2NoID09PSAnficpICYmICFpbnNpZGVQcm9wZXJ0eVZhbHVlICYmIHBhcmVuTGV2ZWwgPT09IDApIHtcbiAgICAgIC8vaGFuZGxlIGNvbWJpbmF0b3Igc3BhY2luZ1xuICAgICAgaWYgKHRoaXMuX29wdGlvbnMuc3BhY2VfYXJvdW5kX2NvbWJpbmF0b3IpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7XG4gICAgICAgIHRoaXMuZWF0V2hpdGVzcGFjZSgpO1xuICAgICAgICAvLyBzcXVhc2ggZXh0cmEgd2hpdGVzcGFjZVxuICAgICAgICBpZiAodGhpcy5fY2ggJiYgd2hpdGVzcGFjZUNoYXIudGVzdCh0aGlzLl9jaCkpIHtcbiAgICAgICAgICB0aGlzLl9jaCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gJ10nKSB7XG4gICAgICB0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jaCA9PT0gJ1snKSB7XG4gICAgICB0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoaXNBZnRlclNwYWNlKTtcbiAgICAgIHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NoID09PSAnPScpIHsgLy8gbm8gd2hpdGVzcGFjZSBiZWZvcmUgb3IgYWZ0ZXJcbiAgICAgIHRoaXMuZWF0V2hpdGVzcGFjZSgpO1xuICAgICAgdGhpcy5wcmludF9zdHJpbmcoJz0nKTtcbiAgICAgIGlmICh3aGl0ZXNwYWNlQ2hhci50ZXN0KHRoaXMuX2NoKSkge1xuICAgICAgICB0aGlzLl9jaCA9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5fY2ggPT09ICchJyAmJiAhdGhpcy5faW5wdXQubG9va0JhY2soXCJcXFxcXCIpKSB7IC8vICFpbXBvcnRhbnRcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJlc2VydmVBZnRlclNwYWNlID0gcHJldmlvdXNfY2ggPT09ICdcIicgfHwgcHJldmlvdXNfY2ggPT09ICdcXCcnO1xuICAgICAgdGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKHByZXNlcnZlQWZ0ZXJTcGFjZSB8fCBpc0FmdGVyU3BhY2UpO1xuICAgICAgdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO1xuXG4gICAgICBpZiAoIXRoaXMuX291dHB1dC5qdXN0X2FkZGVkX25ld2xpbmUoKSAmJiB0aGlzLl9pbnB1dC5wZWVrKCkgPT09ICdcXG4nICYmIGluc2lkZU5vblNlbWlDb2xvblZhbHVlcykge1xuICAgICAgICB0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHN3ZWV0Q29kZSA9IHRoaXMuX291dHB1dC5nZXRfY29kZShlb2wpO1xuXG4gIHJldHVybiBzd2VldENvZGU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5CZWF1dGlmaWVyID0gQmVhdXRpZmllcjtcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBCZWF1dGlmaWVyID0gcmVxdWlyZSgnLi9iZWF1dGlmaWVyJykuQmVhdXRpZmllcixcbiAgT3B0aW9ucyA9IHJlcXVpcmUoJy4vb3B0aW9ucycpLk9wdGlvbnM7XG5cbmZ1bmN0aW9uIGNzc19iZWF1dGlmeShzb3VyY2VfdGV4dCwgb3B0aW9ucykge1xuICB2YXIgYmVhdXRpZmllciA9IG5ldyBCZWF1dGlmaWVyKHNvdXJjZV90ZXh0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGJlYXV0aWZpZXIuYmVhdXRpZnkoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjc3NfYmVhdXRpZnk7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IE9wdGlvbnMoKTtcbn07XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQmFzZU9wdGlvbnMgPSByZXF1aXJlKCcuLi9jb3JlL29wdGlvbnMnKS5PcHRpb25zO1xuXG5mdW5jdGlvbiBPcHRpb25zKG9wdGlvbnMpIHtcbiAgQmFzZU9wdGlvbnMuY2FsbCh0aGlzLCBvcHRpb25zLCAnY3NzJyk7XG5cbiAgdGhpcy5zZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZSA9IHRoaXMuX2dldF9ib29sZWFuKCdzZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZScsIHRydWUpO1xuICB0aGlzLm5ld2xpbmVfYmV0d2Vlbl9ydWxlcyA9IHRoaXMuX2dldF9ib29sZWFuKCduZXdsaW5lX2JldHdlZW5fcnVsZXMnLCB0cnVlKTtcbiAgdmFyIHNwYWNlX2Fyb3VuZF9zZWxlY3Rvcl9zZXBhcmF0b3IgPSB0aGlzLl9nZXRfYm9vbGVhbignc3BhY2VfYXJvdW5kX3NlbGVjdG9yX3NlcGFyYXRvcicpO1xuICB0aGlzLnNwYWNlX2Fyb3VuZF9jb21iaW5hdG9yID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ3NwYWNlX2Fyb3VuZF9jb21iaW5hdG9yJykgfHwgc3BhY2VfYXJvdW5kX3NlbGVjdG9yX3NlcGFyYXRvcjtcblxuICB2YXIgYnJhY2Vfc3R5bGVfc3BsaXQgPSB0aGlzLl9nZXRfc2VsZWN0aW9uX2xpc3QoJ2JyYWNlX3N0eWxlJywgWydjb2xsYXBzZScsICdleHBhbmQnLCAnZW5kLWV4cGFuZCcsICdub25lJywgJ3ByZXNlcnZlLWlubGluZSddKTtcbiAgdGhpcy5icmFjZV9zdHlsZSA9ICdjb2xsYXBzZSc7XG4gIGZvciAodmFyIGJzID0gMDsgYnMgPCBicmFjZV9zdHlsZV9zcGxpdC5sZW5ndGg7IGJzKyspIHtcbiAgICBpZiAoYnJhY2Vfc3R5bGVfc3BsaXRbYnNdICE9PSAnZXhwYW5kJykge1xuICAgICAgLy8gZGVmYXVsdCB0byBjb2xsYXBzZSwgYXMgb25seSBjb2xsYXBzZXxleHBhbmQgaXMgaW1wbGVtZW50ZWQgZm9yIG5vd1xuICAgICAgdGhpcy5icmFjZV9zdHlsZSA9ICdjb2xsYXBzZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnJhY2Vfc3R5bGUgPSBicmFjZV9zdHlsZV9zcGxpdFtic107XG4gICAgfVxuICB9XG59XG5PcHRpb25zLnByb3RvdHlwZSA9IG5ldyBCYXNlT3B0aW9ucygpO1xuXG5cblxubW9kdWxlLmV4cG9ydHMuT3B0aW9ucyA9IE9wdGlvbnM7XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2h0bWwvb3B0aW9ucycpLk9wdGlvbnM7XG52YXIgT3V0cHV0ID0gcmVxdWlyZSgnLi4vY29yZS9vdXRwdXQnKS5PdXRwdXQ7XG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vaHRtbC90b2tlbml6ZXInKS5Ub2tlbml6ZXI7XG52YXIgVE9LRU4gPSByZXF1aXJlKCcuLi9odG1sL3Rva2VuaXplcicpLlRPS0VOO1xuXG52YXIgbGluZUJyZWFrID0gL1xcclxcbnxbXFxyXFxuXS87XG52YXIgYWxsTGluZUJyZWFrcyA9IC9cXHJcXG58W1xcclxcbl0vZztcblxudmFyIFByaW50ZXIgPSBmdW5jdGlvbihvcHRpb25zLCBiYXNlX2luZGVudF9zdHJpbmcpIHsgLy9oYW5kbGVzIGlucHV0L291dHB1dCBhbmQgc29tZSBvdGhlciBwcmludGluZyBmdW5jdGlvbnNcblxuICB0aGlzLmluZGVudF9sZXZlbCA9IDA7XG4gIHRoaXMuYWxpZ25tZW50X3NpemUgPSAwO1xuICB0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcyA9IG9wdGlvbnMubWF4X3ByZXNlcnZlX25ld2xpbmVzO1xuICB0aGlzLnByZXNlcnZlX25ld2xpbmVzID0gb3B0aW9ucy5wcmVzZXJ2ZV9uZXdsaW5lcztcblxuICB0aGlzLl9vdXRwdXQgPSBuZXcgT3V0cHV0KG9wdGlvbnMsIGJhc2VfaW5kZW50X3N0cmluZyk7XG5cbn07XG5cblByaW50ZXIucHJvdG90eXBlLmN1cnJlbnRfbGluZV9oYXNfbWF0Y2ggPSBmdW5jdGlvbihwYXR0ZXJuKSB7XG4gIHJldHVybiB0aGlzLl9vdXRwdXQuY3VycmVudF9saW5lLmhhc19tYXRjaChwYXR0ZXJuKTtcbn07XG5cblByaW50ZXIucHJvdG90eXBlLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4gPSBmdW5jdGlvbih2YWx1ZSwgbm9uX2JyZWFraW5nKSB7XG4gIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB2YWx1ZTtcbiAgdGhpcy5fb3V0cHV0Lm5vbl9icmVha2luZ19zcGFjZSA9IG5vbl9icmVha2luZztcbn07XG5cblByaW50ZXIucHJvdG90eXBlLnNldF93cmFwX3BvaW50ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuaW5kZW50X2xldmVsLCB0aGlzLmFsaWdubWVudF9zaXplKTtcbiAgdGhpcy5fb3V0cHV0LnNldF93cmFwX3BvaW50KCk7XG59O1xuXG5cblByaW50ZXIucHJvdG90eXBlLmFkZF9yYXdfdG9rZW4gPSBmdW5jdGlvbih0b2tlbikge1xuICB0aGlzLl9vdXRwdXQuYWRkX3Jhd190b2tlbih0b2tlbik7XG59O1xuXG5QcmludGVyLnByb3RvdHlwZS5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXMgPSBmdW5jdGlvbihyYXdfdG9rZW4pIHtcbiAgdmFyIG5ld2xpbmVzID0gMDtcbiAgaWYgKHJhd190b2tlbi50eXBlICE9PSBUT0tFTi5URVhUICYmIHJhd190b2tlbi5wcmV2aW91cy50eXBlICE9PSBUT0tFTi5URVhUKSB7XG4gICAgbmV3bGluZXMgPSByYXdfdG9rZW4ubmV3bGluZXMgPyAxIDogMDtcbiAgfVxuXG4gIGlmICh0aGlzLnByZXNlcnZlX25ld2xpbmVzKSB7XG4gICAgbmV3bGluZXMgPSByYXdfdG9rZW4ubmV3bGluZXMgPCB0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcyArIDEgPyByYXdfdG9rZW4ubmV3bGluZXMgOiB0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcyArIDE7XG4gIH1cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBuZXdsaW5lczsgbisrKSB7XG4gICAgdGhpcy5wcmludF9uZXdsaW5lKG4gPiAwKTtcbiAgfVxuXG4gIHJldHVybiBuZXdsaW5lcyAhPT0gMDtcbn07XG5cblByaW50ZXIucHJvdG90eXBlLnRyYXZlcnNlX3doaXRlc3BhY2UgPSBmdW5jdGlvbihyYXdfdG9rZW4pIHtcbiAgaWYgKHJhd190b2tlbi53aGl0ZXNwYWNlX2JlZm9yZSB8fCByYXdfdG9rZW4ubmV3bGluZXMpIHtcbiAgICBpZiAoIXRoaXMucHJpbnRfcHJlc2VydmVkX25ld2xpbmVzKHJhd190b2tlbikpIHtcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5QcmludGVyLnByb3RvdHlwZS5wcmV2aW91c190b2tlbl93cmFwcGVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9vdXRwdXQucHJldmlvdXNfdG9rZW5fd3JhcHBlZDtcbn07XG5cblByaW50ZXIucHJvdG90eXBlLnByaW50X25ld2xpbmUgPSBmdW5jdGlvbihmb3JjZSkge1xuICB0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKGZvcmNlKTtcbn07XG5cblByaW50ZXIucHJvdG90eXBlLnByaW50X3Rva2VuID0gZnVuY3Rpb24odG9rZW4pIHtcbiAgaWYgKHRva2VuLnRleHQpIHtcbiAgICB0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLmluZGVudF9sZXZlbCwgdGhpcy5hbGlnbm1lbnRfc2l6ZSk7XG4gICAgdGhpcy5fb3V0cHV0LmFkZF90b2tlbih0b2tlbi50ZXh0KTtcbiAgfVxufTtcblxuUHJpbnRlci5wcm90b3R5cGUuaW5kZW50ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaW5kZW50X2xldmVsKys7XG59O1xuXG5QcmludGVyLnByb3RvdHlwZS5nZXRfZnVsbF9pbmRlbnQgPSBmdW5jdGlvbihsZXZlbCkge1xuICBsZXZlbCA9IHRoaXMuaW5kZW50X2xldmVsICsgKGxldmVsIHx8IDApO1xuICBpZiAobGV2ZWwgPCAxKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX291dHB1dC5nZXRfaW5kZW50X3N0cmluZyhsZXZlbCk7XG59O1xuXG52YXIgZ2V0X3R5cGVfYXR0cmlidXRlID0gZnVuY3Rpb24oc3RhcnRfdG9rZW4pIHtcbiAgdmFyIHJlc3VsdCA9IG51bGw7XG4gIHZhciByYXdfdG9rZW4gPSBzdGFydF90b2tlbi5uZXh0O1xuXG4gIC8vIFNlYXJjaCBhdHRyaWJ1dGVzIGZvciBhIHR5cGUgYXR0cmlidXRlXG4gIHdoaWxlIChyYXdfdG9rZW4udHlwZSAhPT0gVE9LRU4uRU9GICYmIHN0YXJ0X3Rva2VuLmNsb3NlZCAhPT0gcmF3X3Rva2VuKSB7XG4gICAgaWYgKHJhd190b2tlbi50eXBlID09PSBUT0tFTi5BVFRSSUJVVEUgJiYgcmF3X3Rva2VuLnRleHQgPT09ICd0eXBlJykge1xuICAgICAgaWYgKHJhd190b2tlbi5uZXh0ICYmIHJhd190b2tlbi5uZXh0LnR5cGUgPT09IFRPS0VOLkVRVUFMUyAmJlxuICAgICAgICByYXdfdG9rZW4ubmV4dC5uZXh0ICYmIHJhd190b2tlbi5uZXh0Lm5leHQudHlwZSA9PT0gVE9LRU4uVkFMVUUpIHtcbiAgICAgICAgcmVzdWx0ID0gcmF3X3Rva2VuLm5leHQubmV4dC50ZXh0O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJhd190b2tlbiA9IHJhd190b2tlbi5uZXh0O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBnZXRfY3VzdG9tX2JlYXV0aWZpZXJfbmFtZSA9IGZ1bmN0aW9uKHRhZ19jaGVjaywgcmF3X3Rva2VuKSB7XG4gIHZhciB0eXBlQXR0cmlidXRlID0gbnVsbDtcbiAgdmFyIHJlc3VsdCA9IG51bGw7XG5cbiAgaWYgKCFyYXdfdG9rZW4uY2xvc2VkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodGFnX2NoZWNrID09PSAnc2NyaXB0Jykge1xuICAgIHR5cGVBdHRyaWJ1dGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgfSBlbHNlIGlmICh0YWdfY2hlY2sgPT09ICdzdHlsZScpIHtcbiAgICB0eXBlQXR0cmlidXRlID0gJ3RleHQvY3NzJztcbiAgfVxuXG4gIHR5cGVBdHRyaWJ1dGUgPSBnZXRfdHlwZV9hdHRyaWJ1dGUocmF3X3Rva2VuKSB8fCB0eXBlQXR0cmlidXRlO1xuXG4gIC8vIEZvciBzY3JpcHQgYW5kIHN0eWxlIHRhZ3MgdGhhdCBoYXZlIGEgdHlwZSBhdHRyaWJ1dGUsIG9ubHkgZW5hYmxlIGN1c3RvbSBiZWF1dGlmaWVycyBmb3IgbWF0Y2hpbmcgdmFsdWVzXG4gIC8vIEZvciB0aG9zZSB3aXRob3V0IGEgdHlwZSBhdHRyaWJ1dGUgdXNlIGRlZmF1bHQ7XG4gIGlmICh0eXBlQXR0cmlidXRlLnNlYXJjaCgndGV4dC9jc3MnKSA+IC0xKSB7XG4gICAgcmVzdWx0ID0gJ2Nzcyc7XG4gIH0gZWxzZSBpZiAodHlwZUF0dHJpYnV0ZS5zZWFyY2goL21vZHVsZXwoKHRleHR8YXBwbGljYXRpb258ZG9qbylcXC8oeC0pPyhqYXZhc2NyaXB0fGVjbWFzY3JpcHR8anNjcmlwdHxsaXZlc2NyaXB0fChsZFxcKyk/anNvbnxtZXRob2R8YXNwZWN0KSkvKSA+IC0xKSB7XG4gICAgcmVzdWx0ID0gJ2phdmFzY3JpcHQnO1xuICB9IGVsc2UgaWYgKHR5cGVBdHRyaWJ1dGUuc2VhcmNoKC8odGV4dHxhcHBsaWNhdGlvbnxkb2pvKVxcLyh4LSk/KGh0bWwpLykgPiAtMSkge1xuICAgIHJlc3VsdCA9ICdodG1sJztcbiAgfSBlbHNlIGlmICh0eXBlQXR0cmlidXRlLnNlYXJjaCgvdGVzdFxcL251bGwvKSA+IC0xKSB7XG4gICAgLy8gVGVzdCBvbmx5IG1pbWUtdHlwZSBmb3IgdGVzdGluZyB0aGUgYmVhdXRpZmllciB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGJlYXV0aWZpbmcgZnVuY3Rpb25cbiAgICByZXN1bHQgPSAnbnVsbCc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZnVuY3Rpb24gaW5fYXJyYXkod2hhdCwgYXJyKSB7XG4gIHJldHVybiBhcnIuaW5kZXhPZih3aGF0KSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIFRhZ0ZyYW1lKHBhcmVudCwgcGFyc2VyX3Rva2VuLCBpbmRlbnRfbGV2ZWwpIHtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQgfHwgbnVsbDtcbiAgdGhpcy50YWcgPSBwYXJzZXJfdG9rZW4gPyBwYXJzZXJfdG9rZW4udGFnX25hbWUgOiAnJztcbiAgdGhpcy5pbmRlbnRfbGV2ZWwgPSBpbmRlbnRfbGV2ZWwgfHwgMDtcbiAgdGhpcy5wYXJzZXJfdG9rZW4gPSBwYXJzZXJfdG9rZW4gfHwgbnVsbDtcbn1cblxuZnVuY3Rpb24gVGFnU3RhY2socHJpbnRlcikge1xuICB0aGlzLl9wcmludGVyID0gcHJpbnRlcjtcbiAgdGhpcy5fY3VycmVudF9mcmFtZSA9IG51bGw7XG59XG5cblRhZ1N0YWNrLnByb3RvdHlwZS5nZXRfcGFyc2VyX3Rva2VuID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jdXJyZW50X2ZyYW1lID8gdGhpcy5fY3VycmVudF9mcmFtZS5wYXJzZXJfdG9rZW4gOiBudWxsO1xufTtcblxuVGFnU3RhY2sucHJvdG90eXBlLnJlY29yZF90YWcgPSBmdW5jdGlvbihwYXJzZXJfdG9rZW4pIHsgLy9mdW5jdGlvbiB0byByZWNvcmQgYSB0YWcgYW5kIGl0cyBwYXJlbnQgaW4gdGhpcy50YWdzIE9iamVjdFxuICB2YXIgbmV3X2ZyYW1lID0gbmV3IFRhZ0ZyYW1lKHRoaXMuX2N1cnJlbnRfZnJhbWUsIHBhcnNlcl90b2tlbiwgdGhpcy5fcHJpbnRlci5pbmRlbnRfbGV2ZWwpO1xuICB0aGlzLl9jdXJyZW50X2ZyYW1lID0gbmV3X2ZyYW1lO1xufTtcblxuVGFnU3RhY2sucHJvdG90eXBlLl90cnlfcG9wX2ZyYW1lID0gZnVuY3Rpb24oZnJhbWUpIHsgLy9mdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgb3BlbmluZyB0YWcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY2xvc2VyXG4gIHZhciBwYXJzZXJfdG9rZW4gPSBudWxsO1xuXG4gIGlmIChmcmFtZSkge1xuICAgIHBhcnNlcl90b2tlbiA9IGZyYW1lLnBhcnNlcl90b2tlbjtcbiAgICB0aGlzLl9wcmludGVyLmluZGVudF9sZXZlbCA9IGZyYW1lLmluZGVudF9sZXZlbDtcbiAgICB0aGlzLl9jdXJyZW50X2ZyYW1lID0gZnJhbWUucGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlcl90b2tlbjtcbn07XG5cblRhZ1N0YWNrLnByb3RvdHlwZS5fZ2V0X2ZyYW1lID0gZnVuY3Rpb24odGFnX2xpc3QsIHN0b3BfbGlzdCkgeyAvL2Z1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBvcGVuaW5nIHRhZyB0byB0aGUgY29ycmVzcG9uZGluZyBjbG9zZXJcbiAgdmFyIGZyYW1lID0gdGhpcy5fY3VycmVudF9mcmFtZTtcblxuICB3aGlsZSAoZnJhbWUpIHsgLy90aWxsIHdlIHJlYWNoICcnICh0aGUgaW5pdGlhbCB2YWx1ZSk7XG4gICAgaWYgKHRhZ19saXN0LmluZGV4T2YoZnJhbWUudGFnKSAhPT0gLTEpIHsgLy9pZiB0aGlzIGlzIGl0IHVzZSBpdFxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChzdG9wX2xpc3QgJiYgc3RvcF9saXN0LmluZGV4T2YoZnJhbWUudGFnKSAhPT0gLTEpIHtcbiAgICAgIGZyYW1lID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBmcmFtZSA9IGZyYW1lLnBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn07XG5cblRhZ1N0YWNrLnByb3RvdHlwZS50cnlfcG9wID0gZnVuY3Rpb24odGFnLCBzdG9wX2xpc3QpIHsgLy9mdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgb3BlbmluZyB0YWcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY2xvc2VyXG4gIHZhciBmcmFtZSA9IHRoaXMuX2dldF9mcmFtZShbdGFnXSwgc3RvcF9saXN0KTtcbiAgcmV0dXJuIHRoaXMuX3RyeV9wb3BfZnJhbWUoZnJhbWUpO1xufTtcblxuVGFnU3RhY2sucHJvdG90eXBlLmluZGVudF90b190YWcgPSBmdW5jdGlvbih0YWdfbGlzdCkge1xuICB2YXIgZnJhbWUgPSB0aGlzLl9nZXRfZnJhbWUodGFnX2xpc3QpO1xuICBpZiAoZnJhbWUpIHtcbiAgICB0aGlzLl9wcmludGVyLmluZGVudF9sZXZlbCA9IGZyYW1lLmluZGVudF9sZXZlbDtcbiAgfVxufTtcblxuZnVuY3Rpb24gQmVhdXRpZmllcihzb3VyY2VfdGV4dCwgb3B0aW9ucywganNfYmVhdXRpZnksIGNzc19iZWF1dGlmeSkge1xuICAvL1dyYXBwZXIgZnVuY3Rpb24gdG8gaW52b2tlIGFsbCB0aGUgbmVjZXNzYXJ5IGNvbnN0cnVjdG9ycyBhbmQgZGVhbCB3aXRoIHRoZSBvdXRwdXQuXG4gIHRoaXMuX3NvdXJjZV90ZXh0ID0gc291cmNlX3RleHQgfHwgJyc7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB0aGlzLl9qc19iZWF1dGlmeSA9IGpzX2JlYXV0aWZ5O1xuICB0aGlzLl9jc3NfYmVhdXRpZnkgPSBjc3NfYmVhdXRpZnk7XG4gIHRoaXMuX3RhZ19zdGFjayA9IG51bGw7XG5cbiAgLy8gQWxsb3cgdGhlIHNldHRpbmcgb2YgbGFuZ3VhZ2UvZmlsZS10eXBlIHNwZWNpZmljIG9wdGlvbnNcbiAgLy8gd2l0aCBpbmhlcml0YW5jZSBvZiBvdmVyYWxsIHNldHRpbmdzXG4gIHZhciBvcHRpb25IdG1sID0gbmV3IE9wdGlvbnMob3B0aW9ucywgJ2h0bWwnKTtcblxuICB0aGlzLl9vcHRpb25zID0gb3B0aW9uSHRtbDtcblxuICB0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2UgPSB0aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcy5zdWJzdHIoMCwgJ2ZvcmNlJy5sZW5ndGgpID09PSAnZm9yY2UnO1xuICB0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfZXhwYW5kX211bHRpbGluZSA9ICh0aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcyA9PT0gJ2ZvcmNlLWV4cGFuZC1tdWx0aWxpbmUnKTtcbiAgdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2FsaWduZWQgPSAodGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXMgPT09ICdmb3JjZS1hbGlnbmVkJyk7XG4gIHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19hbGlnbmVkX211bHRpcGxlID0gKHRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzID09PSAnYWxpZ25lZC1tdWx0aXBsZScpO1xuICB0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmUgPSB0aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcy5zdWJzdHIoMCwgJ3ByZXNlcnZlJy5sZW5ndGgpID09PSAncHJlc2VydmUnO1xuICB0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmVfYWxpZ25lZCA9ICh0aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcyA9PT0gJ3ByZXNlcnZlLWFsaWduZWQnKTtcbn1cblxuQmVhdXRpZmllci5wcm90b3R5cGUuYmVhdXRpZnkgPSBmdW5jdGlvbigpIHtcblxuICAvLyBpZiBkaXNhYmxlZCwgcmV0dXJuIHRoZSBpbnB1dCB1bmNoYW5nZWQuXG4gIGlmICh0aGlzLl9vcHRpb25zLmRpc2FibGVkKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZV90ZXh0O1xuICB9XG5cbiAgdmFyIHNvdXJjZV90ZXh0ID0gdGhpcy5fc291cmNlX3RleHQ7XG4gIHZhciBlb2wgPSB0aGlzLl9vcHRpb25zLmVvbDtcbiAgaWYgKHRoaXMuX29wdGlvbnMuZW9sID09PSAnYXV0bycpIHtcbiAgICBlb2wgPSAnXFxuJztcbiAgICBpZiAoc291cmNlX3RleHQgJiYgbGluZUJyZWFrLnRlc3Qoc291cmNlX3RleHQpKSB7XG4gICAgICBlb2wgPSBzb3VyY2VfdGV4dC5tYXRjaChsaW5lQnJlYWspWzBdO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhBQ0s6IG5ld2xpbmUgcGFyc2luZyBpbmNvbnNpc3RlbnQuIFRoaXMgYnJ1dGUgZm9yY2Ugbm9ybWFsaXplcyB0aGUgaW5wdXQuXG4gIHNvdXJjZV90ZXh0ID0gc291cmNlX3RleHQucmVwbGFjZShhbGxMaW5lQnJlYWtzLCAnXFxuJyk7XG5cbiAgdmFyIGJhc2VJbmRlbnRTdHJpbmcgPSBzb3VyY2VfdGV4dC5tYXRjaCgvXltcXHQgXSovKVswXTtcblxuICB2YXIgbGFzdF90b2tlbiA9IHtcbiAgICB0ZXh0OiAnJyxcbiAgICB0eXBlOiAnJ1xuICB9O1xuXG4gIHZhciBsYXN0X3RhZ190b2tlbiA9IG5ldyBUYWdPcGVuUGFyc2VyVG9rZW4oKTtcblxuICB2YXIgcHJpbnRlciA9IG5ldyBQcmludGVyKHRoaXMuX29wdGlvbnMsIGJhc2VJbmRlbnRTdHJpbmcpO1xuICB2YXIgdG9rZW5zID0gbmV3IFRva2VuaXplcihzb3VyY2VfdGV4dCwgdGhpcy5fb3B0aW9ucykudG9rZW5pemUoKTtcblxuICB0aGlzLl90YWdfc3RhY2sgPSBuZXcgVGFnU3RhY2socHJpbnRlcik7XG5cbiAgdmFyIHBhcnNlcl90b2tlbiA9IG51bGw7XG4gIHZhciByYXdfdG9rZW4gPSB0b2tlbnMubmV4dCgpO1xuICB3aGlsZSAocmF3X3Rva2VuLnR5cGUgIT09IFRPS0VOLkVPRikge1xuXG4gICAgaWYgKHJhd190b2tlbi50eXBlID09PSBUT0tFTi5UQUdfT1BFTiB8fCByYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uQ09NTUVOVCkge1xuICAgICAgcGFyc2VyX3Rva2VuID0gdGhpcy5faGFuZGxlX3RhZ19vcGVuKHByaW50ZXIsIHJhd190b2tlbiwgbGFzdF90YWdfdG9rZW4sIGxhc3RfdG9rZW4sIHRva2Vucyk7XG4gICAgICBsYXN0X3RhZ190b2tlbiA9IHBhcnNlcl90b2tlbjtcbiAgICB9IGVsc2UgaWYgKChyYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uQVRUUklCVVRFIHx8IHJhd190b2tlbi50eXBlID09PSBUT0tFTi5FUVVBTFMgfHwgcmF3X3Rva2VuLnR5cGUgPT09IFRPS0VOLlZBTFVFKSB8fFxuICAgICAgKHJhd190b2tlbi50eXBlID09PSBUT0tFTi5URVhUICYmICFsYXN0X3RhZ190b2tlbi50YWdfY29tcGxldGUpKSB7XG4gICAgICBwYXJzZXJfdG9rZW4gPSB0aGlzLl9oYW5kbGVfaW5zaWRlX3RhZyhwcmludGVyLCByYXdfdG9rZW4sIGxhc3RfdGFnX3Rva2VuLCBsYXN0X3Rva2VuKTtcbiAgICB9IGVsc2UgaWYgKHJhd190b2tlbi50eXBlID09PSBUT0tFTi5UQUdfQ0xPU0UpIHtcbiAgICAgIHBhcnNlcl90b2tlbiA9IHRoaXMuX2hhbmRsZV90YWdfY2xvc2UocHJpbnRlciwgcmF3X3Rva2VuLCBsYXN0X3RhZ190b2tlbik7XG4gICAgfSBlbHNlIGlmIChyYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uVEVYVCkge1xuICAgICAgcGFyc2VyX3Rva2VuID0gdGhpcy5faGFuZGxlX3RleHQocHJpbnRlciwgcmF3X3Rva2VuLCBsYXN0X3RhZ190b2tlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMuIFByaW50IHRoZSByYXcgdG9rZW5cbiAgICAgIHByaW50ZXIuYWRkX3Jhd190b2tlbihyYXdfdG9rZW4pO1xuICAgIH1cblxuICAgIGxhc3RfdG9rZW4gPSBwYXJzZXJfdG9rZW47XG5cbiAgICByYXdfdG9rZW4gPSB0b2tlbnMubmV4dCgpO1xuICB9XG4gIHZhciBzd2VldF9jb2RlID0gcHJpbnRlci5fb3V0cHV0LmdldF9jb2RlKGVvbCk7XG5cbiAgcmV0dXJuIHN3ZWV0X2NvZGU7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5faGFuZGxlX3RhZ19jbG9zZSA9IGZ1bmN0aW9uKHByaW50ZXIsIHJhd190b2tlbiwgbGFzdF90YWdfdG9rZW4pIHtcbiAgdmFyIHBhcnNlcl90b2tlbiA9IHtcbiAgICB0ZXh0OiByYXdfdG9rZW4udGV4dCxcbiAgICB0eXBlOiByYXdfdG9rZW4udHlwZVxuICB9O1xuICBwcmludGVyLmFsaWdubWVudF9zaXplID0gMDtcbiAgbGFzdF90YWdfdG9rZW4udGFnX2NvbXBsZXRlID0gdHJ1ZTtcblxuICBwcmludGVyLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4ocmF3X3Rva2VuLm5ld2xpbmVzIHx8IHJhd190b2tlbi53aGl0ZXNwYWNlX2JlZm9yZSAhPT0gJycsIHRydWUpO1xuICBpZiAobGFzdF90YWdfdG9rZW4uaXNfdW5mb3JtYXR0ZWQpIHtcbiAgICBwcmludGVyLmFkZF9yYXdfdG9rZW4ocmF3X3Rva2VuKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAobGFzdF90YWdfdG9rZW4udGFnX3N0YXJ0X2NoYXIgPT09ICc8Jykge1xuICAgICAgcHJpbnRlci5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKHJhd190b2tlbi50ZXh0WzBdID09PSAnLycsIHRydWUpOyAvLyBzcGFjZSBiZWZvcmUgLz4sIG5vIHNwYWNlIGJlZm9yZSA+XG4gICAgICBpZiAodGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2V4cGFuZF9tdWx0aWxpbmUgJiYgbGFzdF90YWdfdG9rZW4uaGFzX3dyYXBwZWRfYXR0cnMpIHtcbiAgICAgICAgcHJpbnRlci5wcmludF9uZXdsaW5lKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcHJpbnRlci5wcmludF90b2tlbihyYXdfdG9rZW4pO1xuXG4gIH1cblxuICBpZiAobGFzdF90YWdfdG9rZW4uaW5kZW50X2NvbnRlbnQgJiZcbiAgICAhKGxhc3RfdGFnX3Rva2VuLmlzX3VuZm9ybWF0dGVkIHx8IGxhc3RfdGFnX3Rva2VuLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpKSB7XG4gICAgcHJpbnRlci5pbmRlbnQoKTtcblxuICAgIC8vIG9ubHkgaW5kZW50IG9uY2UgcGVyIG9wZW5lZCB0YWdcbiAgICBsYXN0X3RhZ190b2tlbi5pbmRlbnRfY29udGVudCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKCFsYXN0X3RhZ190b2tlbi5pc19pbmxpbmVfZWxlbWVudCAmJlxuICAgICEobGFzdF90YWdfdG9rZW4uaXNfdW5mb3JtYXR0ZWQgfHwgbGFzdF90YWdfdG9rZW4uaXNfY29udGVudF91bmZvcm1hdHRlZCkpIHtcbiAgICBwcmludGVyLnNldF93cmFwX3BvaW50KCk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VyX3Rva2VuO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuX2hhbmRsZV9pbnNpZGVfdGFnID0gZnVuY3Rpb24ocHJpbnRlciwgcmF3X3Rva2VuLCBsYXN0X3RhZ190b2tlbiwgbGFzdF90b2tlbikge1xuICB2YXIgd3JhcHBlZCA9IGxhc3RfdGFnX3Rva2VuLmhhc193cmFwcGVkX2F0dHJzO1xuICB2YXIgcGFyc2VyX3Rva2VuID0ge1xuICAgIHRleHQ6IHJhd190b2tlbi50ZXh0LFxuICAgIHR5cGU6IHJhd190b2tlbi50eXBlXG4gIH07XG5cbiAgcHJpbnRlci5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKHJhd190b2tlbi5uZXdsaW5lcyB8fCByYXdfdG9rZW4ud2hpdGVzcGFjZV9iZWZvcmUgIT09ICcnLCB0cnVlKTtcbiAgaWYgKGxhc3RfdGFnX3Rva2VuLmlzX3VuZm9ybWF0dGVkKSB7XG4gICAgcHJpbnRlci5hZGRfcmF3X3Rva2VuKHJhd190b2tlbik7XG4gIH0gZWxzZSBpZiAobGFzdF90YWdfdG9rZW4udGFnX3N0YXJ0X2NoYXIgPT09ICd7JyAmJiByYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uVEVYVCkge1xuICAgIC8vIEZvciB0aGUgaW5zaWRlcyBvZiBoYW5kbGViYXJzIGFsbG93IG5ld2xpbmVzIG9yIGEgc2luZ2xlIHNwYWNlIGJldHdlZW4gb3BlbiBhbmQgY29udGVudHNcbiAgICBpZiAocHJpbnRlci5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXMocmF3X3Rva2VuKSkge1xuICAgICAgcmF3X3Rva2VuLm5ld2xpbmVzID0gMDtcbiAgICAgIHByaW50ZXIuYWRkX3Jhd190b2tlbihyYXdfdG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmludGVyLnByaW50X3Rva2VuKHJhd190b2tlbik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChyYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uQVRUUklCVVRFKSB7XG4gICAgICBwcmludGVyLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4odHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChyYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uRVFVQUxTKSB7IC8vbm8gc3BhY2UgYmVmb3JlID1cbiAgICAgIHByaW50ZXIuc2V0X3NwYWNlX2JlZm9yZV90b2tlbihmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChyYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uVkFMVUUgJiYgcmF3X3Rva2VuLnByZXZpb3VzLnR5cGUgPT09IFRPS0VOLkVRVUFMUykgeyAvL25vIHNwYWNlIGJlZm9yZSB2YWx1ZVxuICAgICAgcHJpbnRlci5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocmF3X3Rva2VuLnR5cGUgPT09IFRPS0VOLkFUVFJJQlVURSAmJiBsYXN0X3RhZ190b2tlbi50YWdfc3RhcnRfY2hhciA9PT0gJzwnKSB7XG4gICAgICBpZiAodGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX3ByZXNlcnZlIHx8IHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZV9hbGlnbmVkKSB7XG4gICAgICAgIHByaW50ZXIudHJhdmVyc2Vfd2hpdGVzcGFjZShyYXdfdG9rZW4pO1xuICAgICAgICB3cmFwcGVkID0gd3JhcHBlZCB8fCByYXdfdG9rZW4ubmV3bGluZXMgIT09IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIFdyYXAgZm9yICdmb3JjZScgb3B0aW9ucywgYW5kIGlmIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBpcyBhdCBsZWFzdCB0aGF0IHNwZWNpZmllZCBpbiAnd3JhcF9hdHRyaWJ1dGVzX21pbl9hdHRycyc6XG4gICAgICAvLyAxLiBhbHdheXMgd3JhcCB0aGUgc2Vjb25kIGFuZCBiZXlvbmQgYXR0cmlidXRlc1xuICAgICAgLy8gMi4gd3JhcCB0aGUgZmlyc3QgYXR0cmlidXRlIG9ubHkgaWYgJ2ZvcmNlLWV4cGFuZC1tdWx0aWxpbmUnIGlzIHNwZWNpZmllZFxuICAgICAgaWYgKHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZSAmJlxuICAgICAgICBsYXN0X3RhZ190b2tlbi5hdHRyX2NvdW50ID49IHRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzX21pbl9hdHRycyAmJlxuICAgICAgICAobGFzdF90b2tlbi50eXBlICE9PSBUT0tFTi5UQUdfT1BFTiB8fCAvLyBpZS4gc2Vjb25kIGF0dHJpYnV0ZSBhbmQgYmV5b25kXG4gICAgICAgICAgdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2V4cGFuZF9tdWx0aWxpbmUpKSB7XG4gICAgICAgIHByaW50ZXIucHJpbnRfbmV3bGluZShmYWxzZSk7XG4gICAgICAgIHdyYXBwZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmludGVyLnByaW50X3Rva2VuKHJhd190b2tlbik7XG4gICAgd3JhcHBlZCA9IHdyYXBwZWQgfHwgcHJpbnRlci5wcmV2aW91c190b2tlbl93cmFwcGVkKCk7XG4gICAgbGFzdF90YWdfdG9rZW4uaGFzX3dyYXBwZWRfYXR0cnMgPSB3cmFwcGVkO1xuICB9XG4gIHJldHVybiBwYXJzZXJfdG9rZW47XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5faGFuZGxlX3RleHQgPSBmdW5jdGlvbihwcmludGVyLCByYXdfdG9rZW4sIGxhc3RfdGFnX3Rva2VuKSB7XG4gIHZhciBwYXJzZXJfdG9rZW4gPSB7XG4gICAgdGV4dDogcmF3X3Rva2VuLnRleHQsXG4gICAgdHlwZTogJ1RLX0NPTlRFTlQnXG4gIH07XG4gIGlmIChsYXN0X3RhZ190b2tlbi5jdXN0b21fYmVhdXRpZmllcl9uYW1lKSB7IC8vY2hlY2sgaWYgd2UgbmVlZCB0byBmb3JtYXQgamF2YXNjcmlwdFxuICAgIHRoaXMuX3ByaW50X2N1c3RvbV9iZWF0aWZpZXJfdGV4dChwcmludGVyLCByYXdfdG9rZW4sIGxhc3RfdGFnX3Rva2VuKTtcbiAgfSBlbHNlIGlmIChsYXN0X3RhZ190b2tlbi5pc191bmZvcm1hdHRlZCB8fCBsYXN0X3RhZ190b2tlbi5pc19jb250ZW50X3VuZm9ybWF0dGVkKSB7XG4gICAgcHJpbnRlci5hZGRfcmF3X3Rva2VuKHJhd190b2tlbik7XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRlci50cmF2ZXJzZV93aGl0ZXNwYWNlKHJhd190b2tlbik7XG4gICAgcHJpbnRlci5wcmludF90b2tlbihyYXdfdG9rZW4pO1xuICB9XG4gIHJldHVybiBwYXJzZXJfdG9rZW47XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5fcHJpbnRfY3VzdG9tX2JlYXRpZmllcl90ZXh0ID0gZnVuY3Rpb24ocHJpbnRlciwgcmF3X3Rva2VuLCBsYXN0X3RhZ190b2tlbikge1xuICB2YXIgbG9jYWwgPSB0aGlzO1xuICBpZiAocmF3X3Rva2VuLnRleHQgIT09ICcnKSB7XG5cbiAgICB2YXIgdGV4dCA9IHJhd190b2tlbi50ZXh0LFxuICAgICAgX2JlYXV0aWZpZXIsXG4gICAgICBzY3JpcHRfaW5kZW50X2xldmVsID0gMSxcbiAgICAgIHByZSA9ICcnLFxuICAgICAgcG9zdCA9ICcnO1xuICAgIGlmIChsYXN0X3RhZ190b2tlbi5jdXN0b21fYmVhdXRpZmllcl9uYW1lID09PSAnamF2YXNjcmlwdCcgJiYgdHlwZW9mIHRoaXMuX2pzX2JlYXV0aWZ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBfYmVhdXRpZmllciA9IHRoaXMuX2pzX2JlYXV0aWZ5O1xuICAgIH0gZWxzZSBpZiAobGFzdF90YWdfdG9rZW4uY3VzdG9tX2JlYXV0aWZpZXJfbmFtZSA9PT0gJ2NzcycgJiYgdHlwZW9mIHRoaXMuX2Nzc19iZWF1dGlmeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgX2JlYXV0aWZpZXIgPSB0aGlzLl9jc3NfYmVhdXRpZnk7XG4gICAgfSBlbHNlIGlmIChsYXN0X3RhZ190b2tlbi5jdXN0b21fYmVhdXRpZmllcl9uYW1lID09PSAnaHRtbCcpIHtcbiAgICAgIF9iZWF1dGlmaWVyID0gZnVuY3Rpb24oaHRtbF9zb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGJlYXV0aWZpZXIgPSBuZXcgQmVhdXRpZmllcihodG1sX3NvdXJjZSwgb3B0aW9ucywgbG9jYWwuX2pzX2JlYXV0aWZ5LCBsb2NhbC5fY3NzX2JlYXV0aWZ5KTtcbiAgICAgICAgcmV0dXJuIGJlYXV0aWZpZXIuYmVhdXRpZnkoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuaW5kZW50X3NjcmlwdHMgPT09IFwia2VlcFwiKSB7XG4gICAgICBzY3JpcHRfaW5kZW50X2xldmVsID0gMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX29wdGlvbnMuaW5kZW50X3NjcmlwdHMgPT09IFwic2VwYXJhdGVcIikge1xuICAgICAgc2NyaXB0X2luZGVudF9sZXZlbCA9IC1wcmludGVyLmluZGVudF9sZXZlbDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50YXRpb24gPSBwcmludGVyLmdldF9mdWxsX2luZGVudChzY3JpcHRfaW5kZW50X2xldmVsKTtcblxuICAgIC8vIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBlbXB0eSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhpcyB0ZXh0LCBzdHJpcCBpdFxuICAgIC8vIHdlJ2xsIGJlIGFkZGluZyBvbmUgYmFjayBhZnRlciB0aGUgdGV4dCBidXQgYmVmb3JlIHRoZSBjb250YWluaW5nIHRhZy5cbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXG5bIFxcdF0qJC8sICcnKTtcblxuICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBjb250ZW50IGlzIHdyYXBwZWQgaW4gYSBjb21tZW50IG9yIGNkYXRhLlxuICAgIGlmIChsYXN0X3RhZ190b2tlbi5jdXN0b21fYmVhdXRpZmllcl9uYW1lICE9PSAnaHRtbCcgJiZcbiAgICAgIHRleHRbMF0gPT09ICc8JyAmJiB0ZXh0Lm1hdGNoKC9eKDwhLS18PCFcXFtDREFUQVxcWykvKSkge1xuICAgICAgdmFyIG1hdGNoZWQgPSAvXig8IS0tW15cXG5dKnw8IVxcW0NEQVRBXFxbKShcXG4/KShbIFxcdFxcbl0qKShbXFxzXFxTXSopKC0tPnxdXT4pJC8uZXhlYyh0ZXh0KTtcblxuICAgICAgLy8gaWYgd2Ugc3RhcnQgdG8gd3JhcCBidXQgZG9uJ3QgZmluaXNoLCBwcmludCByYXdcbiAgICAgIGlmICghbWF0Y2hlZCkge1xuICAgICAgICBwcmludGVyLmFkZF9yYXdfdG9rZW4ocmF3X3Rva2VuKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwcmUgPSBpbmRlbnRhdGlvbiArIG1hdGNoZWRbMV0gKyAnXFxuJztcbiAgICAgIHRleHQgPSBtYXRjaGVkWzRdO1xuICAgICAgaWYgKG1hdGNoZWRbNV0pIHtcbiAgICAgICAgcG9zdCA9IGluZGVudGF0aW9uICsgbWF0Y2hlZFs1XTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGVtcHR5IGxpbmUgYXQgdGhlIGVuZCBvZiB0aGlzIHRleHQsIHN0cmlwIGl0XG4gICAgICAvLyB3ZSdsbCBiZSBhZGRpbmcgb25lIGJhY2sgYWZ0ZXIgdGhlIHRleHQgYnV0IGJlZm9yZSB0aGUgY29udGFpbmluZyB0YWcuXG4gICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXG5bIFxcdF0qJC8sICcnKTtcblxuICAgICAgaWYgKG1hdGNoZWRbMl0gfHwgbWF0Y2hlZFszXS5pbmRleE9mKCdcXG4nKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIG5vbi1jb21tZW50IHRleHQgaGFzIHNwYWNlc1xuICAgICAgICAvLyB1c2UgdGhhdCBhcyB0aGUgYmFzaXMgZm9yIGluZGVudGluZyBpbiBudWxsIGNhc2UuXG4gICAgICAgIG1hdGNoZWQgPSBtYXRjaGVkWzNdLm1hdGNoKC9bIFxcdF0rJC8pO1xuICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgIHJhd190b2tlbi53aGl0ZXNwYWNlX2JlZm9yZSA9IG1hdGNoZWRbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dCkge1xuICAgICAgaWYgKF9iZWF1dGlmaWVyKSB7XG5cbiAgICAgICAgLy8gY2FsbCB0aGUgQmVhdXRpZmllciBpZiBhdmFsaWFibGVcbiAgICAgICAgdmFyIENoaWxkX29wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLmVvbCA9ICdcXG4nO1xuICAgICAgICB9O1xuICAgICAgICBDaGlsZF9vcHRpb25zLnByb3RvdHlwZSA9IHRoaXMuX29wdGlvbnMucmF3X29wdGlvbnM7XG4gICAgICAgIHZhciBjaGlsZF9vcHRpb25zID0gbmV3IENoaWxkX29wdGlvbnMoKTtcbiAgICAgICAgdGV4dCA9IF9iZWF1dGlmaWVyKGluZGVudGF0aW9uICsgdGV4dCwgY2hpbGRfb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzaW1wbHkgaW5kZW50IHRoZSBzdHJpbmcgb3RoZXJ3aXNlXG4gICAgICAgIHZhciB3aGl0ZSA9IHJhd190b2tlbi53aGl0ZXNwYWNlX2JlZm9yZTtcbiAgICAgICAgaWYgKHdoaXRlKSB7XG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShuZXcgUmVnRXhwKCdcXG4oJyArIHdoaXRlICsgJyk/JywgJ2cnKSwgJ1xcbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGV4dCA9IGluZGVudGF0aW9uICsgdGV4dC5yZXBsYWNlKC9cXG4vZywgJ1xcbicgKyBpbmRlbnRhdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZSkge1xuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHRleHQgPSBwcmUgKyBwb3N0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IHByZSArIHRleHQgKyAnXFxuJyArIHBvc3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpbnRlci5wcmludF9uZXdsaW5lKGZhbHNlKTtcbiAgICBpZiAodGV4dCkge1xuICAgICAgcmF3X3Rva2VuLnRleHQgPSB0ZXh0O1xuICAgICAgcmF3X3Rva2VuLndoaXRlc3BhY2VfYmVmb3JlID0gJyc7XG4gICAgICByYXdfdG9rZW4ubmV3bGluZXMgPSAwO1xuICAgICAgcHJpbnRlci5hZGRfcmF3X3Rva2VuKHJhd190b2tlbik7XG4gICAgICBwcmludGVyLnByaW50X25ld2xpbmUodHJ1ZSk7XG4gICAgfVxuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5faGFuZGxlX3RhZ19vcGVuID0gZnVuY3Rpb24ocHJpbnRlciwgcmF3X3Rva2VuLCBsYXN0X3RhZ190b2tlbiwgbGFzdF90b2tlbiwgdG9rZW5zKSB7XG4gIHZhciBwYXJzZXJfdG9rZW4gPSB0aGlzLl9nZXRfdGFnX29wZW5fdG9rZW4ocmF3X3Rva2VuKTtcblxuICBpZiAoKGxhc3RfdGFnX3Rva2VuLmlzX3VuZm9ybWF0dGVkIHx8IGxhc3RfdGFnX3Rva2VuLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpICYmXG4gICAgIWxhc3RfdGFnX3Rva2VuLmlzX2VtcHR5X2VsZW1lbnQgJiZcbiAgICByYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uVEFHX09QRU4gJiYgIXBhcnNlcl90b2tlbi5pc19zdGFydF90YWcpIHtcbiAgICAvLyBFbmQgZWxlbWVudCB0YWdzIGZvciB1bmZvcm1hdHRlZCBvciBjb250ZW50X3VuZm9ybWF0dGVkIGVsZW1lbnRzXG4gICAgLy8gYXJlIHByaW50ZWQgcmF3IHRvIGtlZXAgYW55IG5ld2xpbmVzIGluc2lkZSB0aGVtIGV4YWN0bHkgdGhlIHNhbWUuXG4gICAgcHJpbnRlci5hZGRfcmF3X3Rva2VuKHJhd190b2tlbik7XG4gICAgcGFyc2VyX3Rva2VuLnN0YXJ0X3RhZ190b2tlbiA9IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKHBhcnNlcl90b2tlbi50YWdfbmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRlci50cmF2ZXJzZV93aGl0ZXNwYWNlKHJhd190b2tlbik7XG4gICAgdGhpcy5fc2V0X3RhZ19wb3NpdGlvbihwcmludGVyLCByYXdfdG9rZW4sIHBhcnNlcl90b2tlbiwgbGFzdF90YWdfdG9rZW4sIGxhc3RfdG9rZW4pO1xuICAgIGlmICghcGFyc2VyX3Rva2VuLmlzX2lubGluZV9lbGVtZW50KSB7XG4gICAgICBwcmludGVyLnNldF93cmFwX3BvaW50KCk7XG4gICAgfVxuICAgIHByaW50ZXIucHJpbnRfdG9rZW4ocmF3X3Rva2VuKTtcbiAgfVxuXG4gIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYXR0cmlidXRlc1xuICBpZiAocGFyc2VyX3Rva2VuLmlzX3N0YXJ0X3RhZyAmJiB0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2UpIHtcbiAgICB2YXIgcGVla19pbmRleCA9IDA7XG4gICAgdmFyIHBlZWtfdG9rZW47XG4gICAgZG8ge1xuICAgICAgcGVla190b2tlbiA9IHRva2Vucy5wZWVrKHBlZWtfaW5kZXgpO1xuICAgICAgaWYgKHBlZWtfdG9rZW4udHlwZSA9PT0gVE9LRU4uQVRUUklCVVRFKSB7XG4gICAgICAgIHBhcnNlcl90b2tlbi5hdHRyX2NvdW50ICs9IDE7XG4gICAgICB9XG4gICAgICBwZWVrX2luZGV4ICs9IDE7XG4gICAgfSB3aGlsZSAocGVla190b2tlbi50eXBlICE9PSBUT0tFTi5FT0YgJiYgcGVla190b2tlbi50eXBlICE9PSBUT0tFTi5UQUdfQ0xPU0UpO1xuICB9XG5cbiAgLy9pbmRlbnQgYXR0cmlidXRlcyBhbiBhdXRvLCBmb3JjZWQsIGFsaWduZWQgb3IgZm9yY2VkLWFsaWduIGxpbmUtd3JhcFxuICBpZiAodGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2FsaWduZWQgfHwgdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2FsaWduZWRfbXVsdGlwbGUgfHwgdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX3ByZXNlcnZlX2FsaWduZWQpIHtcbiAgICBwYXJzZXJfdG9rZW4uYWxpZ25tZW50X3NpemUgPSByYXdfdG9rZW4udGV4dC5sZW5ndGggKyAxO1xuICB9XG5cbiAgaWYgKCFwYXJzZXJfdG9rZW4udGFnX2NvbXBsZXRlICYmICFwYXJzZXJfdG9rZW4uaXNfdW5mb3JtYXR0ZWQpIHtcbiAgICBwcmludGVyLmFsaWdubWVudF9zaXplID0gcGFyc2VyX3Rva2VuLmFsaWdubWVudF9zaXplO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlcl90b2tlbjtcbn07XG5cbnZhciBUYWdPcGVuUGFyc2VyVG9rZW4gPSBmdW5jdGlvbihwYXJlbnQsIHJhd190b2tlbikge1xuICB0aGlzLnBhcmVudCA9IHBhcmVudCB8fCBudWxsO1xuICB0aGlzLnRleHQgPSAnJztcbiAgdGhpcy50eXBlID0gJ1RLX1RBR19PUEVOJztcbiAgdGhpcy50YWdfbmFtZSA9ICcnO1xuICB0aGlzLmlzX2lubGluZV9lbGVtZW50ID0gZmFsc2U7XG4gIHRoaXMuaXNfdW5mb3JtYXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5pc19jb250ZW50X3VuZm9ybWF0dGVkID0gZmFsc2U7XG4gIHRoaXMuaXNfZW1wdHlfZWxlbWVudCA9IGZhbHNlO1xuICB0aGlzLmlzX3N0YXJ0X3RhZyA9IGZhbHNlO1xuICB0aGlzLmlzX2VuZF90YWcgPSBmYWxzZTtcbiAgdGhpcy5pbmRlbnRfY29udGVudCA9IGZhbHNlO1xuICB0aGlzLm11bHRpbGluZV9jb250ZW50ID0gZmFsc2U7XG4gIHRoaXMuY3VzdG9tX2JlYXV0aWZpZXJfbmFtZSA9IG51bGw7XG4gIHRoaXMuc3RhcnRfdGFnX3Rva2VuID0gbnVsbDtcbiAgdGhpcy5hdHRyX2NvdW50ID0gMDtcbiAgdGhpcy5oYXNfd3JhcHBlZF9hdHRycyA9IGZhbHNlO1xuICB0aGlzLmFsaWdubWVudF9zaXplID0gMDtcbiAgdGhpcy50YWdfY29tcGxldGUgPSBmYWxzZTtcbiAgdGhpcy50YWdfc3RhcnRfY2hhciA9ICcnO1xuICB0aGlzLnRhZ19jaGVjayA9ICcnO1xuXG4gIGlmICghcmF3X3Rva2VuKSB7XG4gICAgdGhpcy50YWdfY29tcGxldGUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciB0YWdfY2hlY2tfbWF0Y2g7XG5cbiAgICB0aGlzLnRhZ19zdGFydF9jaGFyID0gcmF3X3Rva2VuLnRleHRbMF07XG4gICAgdGhpcy50ZXh0ID0gcmF3X3Rva2VuLnRleHQ7XG5cbiAgICBpZiAodGhpcy50YWdfc3RhcnRfY2hhciA9PT0gJzwnKSB7XG4gICAgICB0YWdfY2hlY2tfbWF0Y2ggPSByYXdfdG9rZW4udGV4dC5tYXRjaCgvXjwoW15cXHM+XSopLyk7XG4gICAgICB0aGlzLnRhZ19jaGVjayA9IHRhZ19jaGVja19tYXRjaCA/IHRhZ19jaGVja19tYXRjaFsxXSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWdfY2hlY2tfbWF0Y2ggPSByYXdfdG9rZW4udGV4dC5tYXRjaCgvXnt7fj8oPzpbXFxeXXwjXFwqPyk/KFteXFxzfV0rKS8pO1xuICAgICAgdGhpcy50YWdfY2hlY2sgPSB0YWdfY2hlY2tfbWF0Y2ggPyB0YWdfY2hlY2tfbWF0Y2hbMV0gOiAnJztcblxuICAgICAgLy8gaGFuZGxlIFwie3sjPiBteVBhcnRpYWx9fVwiIG9yIFwie3t+Iz4gbXlQYXJ0aWFsfX1cIlxuICAgICAgaWYgKChyYXdfdG9rZW4udGV4dC5zdGFydHNXaXRoKCd7eyM+JykgfHwgcmF3X3Rva2VuLnRleHQuc3RhcnRzV2l0aCgne3t+Iz4nKSkgJiYgdGhpcy50YWdfY2hlY2tbMF0gPT09ICc+Jykge1xuICAgICAgICBpZiAodGhpcy50YWdfY2hlY2sgPT09ICc+JyAmJiByYXdfdG9rZW4ubmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMudGFnX2NoZWNrID0gcmF3X3Rva2VuLm5leHQudGV4dC5zcGxpdCgnICcpWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudGFnX2NoZWNrID0gcmF3X3Rva2VuLnRleHQuc3BsaXQoJz4nKVsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGFnX2NoZWNrID0gdGhpcy50YWdfY2hlY2sudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChyYXdfdG9rZW4udHlwZSA9PT0gVE9LRU4uQ09NTUVOVCkge1xuICAgICAgdGhpcy50YWdfY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaXNfc3RhcnRfdGFnID0gdGhpcy50YWdfY2hlY2suY2hhckF0KDApICE9PSAnLyc7XG4gICAgdGhpcy50YWdfbmFtZSA9ICF0aGlzLmlzX3N0YXJ0X3RhZyA/IHRoaXMudGFnX2NoZWNrLnN1YnN0cigxKSA6IHRoaXMudGFnX2NoZWNrO1xuICAgIHRoaXMuaXNfZW5kX3RhZyA9ICF0aGlzLmlzX3N0YXJ0X3RhZyB8fFxuICAgICAgKHJhd190b2tlbi5jbG9zZWQgJiYgcmF3X3Rva2VuLmNsb3NlZC50ZXh0ID09PSAnLz4nKTtcblxuICAgIC8vIGlmIHdoaXRlc3BhY2UgaGFuZGxlciB+IGluY2x1ZGVkIChpLmUuIHt7fiNpZiB0cnVlfX0pLCBoYW5kbGViYXJzIHRhZ3Mgc3RhcnQgYXQgcG9zIDMgbm90IHBvcyAyXG4gICAgdmFyIGhhbmRsZWJhcl9zdGFydHMgPSAyO1xuICAgIGlmICh0aGlzLnRhZ19zdGFydF9jaGFyID09PSAneycgJiYgdGhpcy50ZXh0Lmxlbmd0aCA+PSAzKSB7XG4gICAgICBpZiAodGhpcy50ZXh0LmNoYXJBdCgyKSA9PT0gJ34nKSB7XG4gICAgICAgIGhhbmRsZWJhcl9zdGFydHMgPSAzO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhhbmRsZWJhcnMgdGFncyB0aGF0IGRvbid0IHN0YXJ0IHdpdGggIyBvciBeIGFyZSBzaW5nbGVfdGFncywgYW5kIHNvIGFsc28gc3RhcnQgYW5kIGVuZC5cbiAgICB0aGlzLmlzX2VuZF90YWcgPSB0aGlzLmlzX2VuZF90YWcgfHxcbiAgICAgICh0aGlzLnRhZ19zdGFydF9jaGFyID09PSAneycgJiYgKHRoaXMudGV4dC5sZW5ndGggPCAzIHx8ICgvW14jXFxeXS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGhhbmRsZWJhcl9zdGFydHMpKSkpKTtcbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuX2dldF90YWdfb3Blbl90b2tlbiA9IGZ1bmN0aW9uKHJhd190b2tlbikgeyAvL2Z1bmN0aW9uIHRvIGdldCBhIGZ1bGwgdGFnIGFuZCBwYXJzZSBpdHMgdHlwZVxuICB2YXIgcGFyc2VyX3Rva2VuID0gbmV3IFRhZ09wZW5QYXJzZXJUb2tlbih0aGlzLl90YWdfc3RhY2suZ2V0X3BhcnNlcl90b2tlbigpLCByYXdfdG9rZW4pO1xuXG4gIHBhcnNlcl90b2tlbi5hbGlnbm1lbnRfc2l6ZSA9IHRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzX2luZGVudF9zaXplO1xuXG4gIHBhcnNlcl90b2tlbi5pc19lbmRfdGFnID0gcGFyc2VyX3Rva2VuLmlzX2VuZF90YWcgfHxcbiAgICBpbl9hcnJheShwYXJzZXJfdG9rZW4udGFnX2NoZWNrLCB0aGlzLl9vcHRpb25zLnZvaWRfZWxlbWVudHMpO1xuXG4gIHBhcnNlcl90b2tlbi5pc19lbXB0eV9lbGVtZW50ID0gcGFyc2VyX3Rva2VuLnRhZ19jb21wbGV0ZSB8fFxuICAgIChwYXJzZXJfdG9rZW4uaXNfc3RhcnRfdGFnICYmIHBhcnNlcl90b2tlbi5pc19lbmRfdGFnKTtcblxuICBwYXJzZXJfdG9rZW4uaXNfdW5mb3JtYXR0ZWQgPSAhcGFyc2VyX3Rva2VuLnRhZ19jb21wbGV0ZSAmJiBpbl9hcnJheShwYXJzZXJfdG9rZW4udGFnX2NoZWNrLCB0aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkKTtcbiAgcGFyc2VyX3Rva2VuLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQgPSAhcGFyc2VyX3Rva2VuLmlzX2VtcHR5X2VsZW1lbnQgJiYgaW5fYXJyYXkocGFyc2VyX3Rva2VuLnRhZ19jaGVjaywgdGhpcy5fb3B0aW9ucy5jb250ZW50X3VuZm9ybWF0dGVkKTtcbiAgcGFyc2VyX3Rva2VuLmlzX2lubGluZV9lbGVtZW50ID0gaW5fYXJyYXkocGFyc2VyX3Rva2VuLnRhZ19uYW1lLCB0aGlzLl9vcHRpb25zLmlubGluZSkgfHwgcGFyc2VyX3Rva2VuLnRhZ19uYW1lLmluY2x1ZGVzKFwiLVwiKSB8fCBwYXJzZXJfdG9rZW4udGFnX3N0YXJ0X2NoYXIgPT09ICd7JztcblxuICByZXR1cm4gcGFyc2VyX3Rva2VuO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuX3NldF90YWdfcG9zaXRpb24gPSBmdW5jdGlvbihwcmludGVyLCByYXdfdG9rZW4sIHBhcnNlcl90b2tlbiwgbGFzdF90YWdfdG9rZW4sIGxhc3RfdG9rZW4pIHtcblxuICBpZiAoIXBhcnNlcl90b2tlbi5pc19lbXB0eV9lbGVtZW50KSB7XG4gICAgaWYgKHBhcnNlcl90b2tlbi5pc19lbmRfdGFnKSB7IC8vdGhpcyB0YWcgaXMgYSBkb3VibGUgdGFnIHNvIGNoZWNrIGZvciB0YWctZW5kaW5nXG4gICAgICBwYXJzZXJfdG9rZW4uc3RhcnRfdGFnX3Rva2VuID0gdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AocGFyc2VyX3Rva2VuLnRhZ19uYW1lKTsgLy9yZW1vdmUgaXQgYW5kIGFsbCBhbmNlc3RvcnNcbiAgICB9IGVsc2UgeyAvLyBpdCdzIGEgc3RhcnQtdGFnXG4gICAgICAvLyBjaGVjayBpZiB0aGlzIHRhZyBpcyBzdGFydGluZyBhbiBlbGVtZW50IHRoYXQgaGFzIG9wdGlvbmFsIGVuZCBlbGVtZW50XG4gICAgICAvLyBhbmQgZG8gYW4gZW5kaW5nIG5lZWRlZFxuICAgICAgaWYgKHRoaXMuX2RvX29wdGlvbmFsX2VuZF9lbGVtZW50KHBhcnNlcl90b2tlbikpIHtcbiAgICAgICAgaWYgKCFwYXJzZXJfdG9rZW4uaXNfaW5saW5lX2VsZW1lbnQpIHtcbiAgICAgICAgICBwcmludGVyLnByaW50X25ld2xpbmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3RhZ19zdGFjay5yZWNvcmRfdGFnKHBhcnNlcl90b2tlbik7IC8vcHVzaCBpdCBvbiB0aGUgdGFnIHN0YWNrXG5cbiAgICAgIGlmICgocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAnc2NyaXB0JyB8fCBwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdzdHlsZScpICYmXG4gICAgICAgICEocGFyc2VyX3Rva2VuLmlzX3VuZm9ybWF0dGVkIHx8IHBhcnNlcl90b2tlbi5pc19jb250ZW50X3VuZm9ybWF0dGVkKSkge1xuICAgICAgICBwYXJzZXJfdG9rZW4uY3VzdG9tX2JlYXV0aWZpZXJfbmFtZSA9IGdldF9jdXN0b21fYmVhdXRpZmllcl9uYW1lKHBhcnNlcl90b2tlbi50YWdfY2hlY2ssIHJhd190b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGluX2FycmF5KHBhcnNlcl90b2tlbi50YWdfY2hlY2ssIHRoaXMuX29wdGlvbnMuZXh0cmFfbGluZXJzKSkgeyAvL2NoZWNrIGlmIHRoaXMgZG91YmxlIG5lZWRzIGFuIGV4dHJhIGxpbmVcbiAgICBwcmludGVyLnByaW50X25ld2xpbmUoZmFsc2UpO1xuICAgIGlmICghcHJpbnRlci5fb3V0cHV0Lmp1c3RfYWRkZWRfYmxhbmtsaW5lKCkpIHtcbiAgICAgIHByaW50ZXIucHJpbnRfbmV3bGluZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFyc2VyX3Rva2VuLmlzX2VtcHR5X2VsZW1lbnQpIHsgLy9pZiB0aGlzIHRhZyBuYW1lIGlzIGEgc2luZ2xlIHRhZyB0eXBlIChlaXRoZXIgaW4gdGhlIGxpc3Qgb3IgaGFzIGEgY2xvc2luZyAvKVxuXG4gICAgLy8gaWYgeW91IGhpdCBhbiBlbHNlIGNhc2UsIHJlc2V0IHRoZSBpbmRlbnQgbGV2ZWwgaWYgeW91IGFyZSBpbnNpZGUgYW46XG4gICAgLy8gJ2lmJywgJ3VubGVzcycsIG9yICdlYWNoJyBibG9jay5cbiAgICBpZiAocGFyc2VyX3Rva2VuLnRhZ19zdGFydF9jaGFyID09PSAneycgJiYgcGFyc2VyX3Rva2VuLnRhZ19jaGVjayA9PT0gJ2Vsc2UnKSB7XG4gICAgICB0aGlzLl90YWdfc3RhY2suaW5kZW50X3RvX3RhZyhbJ2lmJywgJ3VubGVzcycsICdlYWNoJ10pO1xuICAgICAgcGFyc2VyX3Rva2VuLmluZGVudF9jb250ZW50ID0gdHJ1ZTtcbiAgICAgIC8vIERvbid0IGFkZCBhIG5ld2xpbmUgaWYgb3BlbmluZyB7eyNpZn19IHRhZyBpcyBvbiB0aGUgY3VycmVudCBsaW5lXG4gICAgICB2YXIgZm91bmRJZk9uQ3VycmVudExpbmUgPSBwcmludGVyLmN1cnJlbnRfbGluZV9oYXNfbWF0Y2goL3t7I2lmLyk7XG4gICAgICBpZiAoIWZvdW5kSWZPbkN1cnJlbnRMaW5lKSB7XG4gICAgICAgIHByaW50ZXIucHJpbnRfbmV3bGluZShmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgYWRkIGEgbmV3bGluZSBiZWZvcmUgZWxlbWVudHMgdGhhdCBzaG91bGQgcmVtYWluIHdoZXJlIHRoZXkgYXJlLlxuICAgIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICchLS0nICYmIGxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uVEFHX0NMT1NFICYmXG4gICAgICBsYXN0X3RhZ190b2tlbi5pc19lbmRfdGFnICYmIHBhcnNlcl90b2tlbi50ZXh0LmluZGV4T2YoJ1xcbicpID09PSAtMSkge1xuICAgICAgLy9EbyBub3RoaW5nLiBMZWF2ZSBjb21tZW50cyBvbiBzYW1lIGxpbmUuXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHBhcnNlcl90b2tlbi5pc19pbmxpbmVfZWxlbWVudCB8fCBwYXJzZXJfdG9rZW4uaXNfdW5mb3JtYXR0ZWQpKSB7XG4gICAgICAgIHByaW50ZXIucHJpbnRfbmV3bGluZShmYWxzZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jYWxjbHVhdGVfcGFyZW50X211bHRpbGluZShwcmludGVyLCBwYXJzZXJfdG9rZW4pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4uaXNfZW5kX3RhZykgeyAvL3RoaXMgdGFnIGlzIGEgZG91YmxlIHRhZyBzbyBjaGVjayBmb3IgdGFnLWVuZGluZ1xuICAgIHZhciBkb19lbmRfZXhwYW5kID0gZmFsc2U7XG5cbiAgICAvLyBkZWNpZGluZyB3aGV0aGVyIGEgYmxvY2sgaXMgbXVsdGlsaW5lIHNob3VsZCBub3QgYmUgdGhpcyBoYXJkXG4gICAgZG9fZW5kX2V4cGFuZCA9IHBhcnNlcl90b2tlbi5zdGFydF90YWdfdG9rZW4gJiYgcGFyc2VyX3Rva2VuLnN0YXJ0X3RhZ190b2tlbi5tdWx0aWxpbmVfY29udGVudDtcbiAgICBkb19lbmRfZXhwYW5kID0gZG9fZW5kX2V4cGFuZCB8fCAoIXBhcnNlcl90b2tlbi5pc19pbmxpbmVfZWxlbWVudCAmJlxuICAgICAgIShsYXN0X3RhZ190b2tlbi5pc19pbmxpbmVfZWxlbWVudCB8fCBsYXN0X3RhZ190b2tlbi5pc191bmZvcm1hdHRlZCkgJiZcbiAgICAgICEobGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5UQUdfQ0xPU0UgJiYgcGFyc2VyX3Rva2VuLnN0YXJ0X3RhZ190b2tlbiA9PT0gbGFzdF90YWdfdG9rZW4pICYmXG4gICAgICBsYXN0X3Rva2VuLnR5cGUgIT09ICdUS19DT05URU5UJ1xuICAgICk7XG5cbiAgICBpZiAocGFyc2VyX3Rva2VuLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQgfHwgcGFyc2VyX3Rva2VuLmlzX3VuZm9ybWF0dGVkKSB7XG4gICAgICBkb19lbmRfZXhwYW5kID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGRvX2VuZF9leHBhbmQpIHtcbiAgICAgIHByaW50ZXIucHJpbnRfbmV3bGluZShmYWxzZSk7XG4gICAgfVxuICB9IGVsc2UgeyAvLyBpdCdzIGEgc3RhcnQtdGFnXG4gICAgcGFyc2VyX3Rva2VuLmluZGVudF9jb250ZW50ID0gIXBhcnNlcl90b2tlbi5jdXN0b21fYmVhdXRpZmllcl9uYW1lO1xuXG4gICAgaWYgKHBhcnNlcl90b2tlbi50YWdfc3RhcnRfY2hhciA9PT0gJzwnKSB7XG4gICAgICBpZiAocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAnaHRtbCcpIHtcbiAgICAgICAgcGFyc2VyX3Rva2VuLmluZGVudF9jb250ZW50ID0gdGhpcy5fb3B0aW9ucy5pbmRlbnRfaW5uZXJfaHRtbDtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAnaGVhZCcpIHtcbiAgICAgICAgcGFyc2VyX3Rva2VuLmluZGVudF9jb250ZW50ID0gdGhpcy5fb3B0aW9ucy5pbmRlbnRfaGVhZF9pbm5lcl9odG1sO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdib2R5Jykge1xuICAgICAgICBwYXJzZXJfdG9rZW4uaW5kZW50X2NvbnRlbnQgPSB0aGlzLl9vcHRpb25zLmluZGVudF9ib2R5X2lubmVyX2h0bWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEocGFyc2VyX3Rva2VuLmlzX2lubGluZV9lbGVtZW50IHx8IHBhcnNlcl90b2tlbi5pc191bmZvcm1hdHRlZCkgJiZcbiAgICAgIChsYXN0X3Rva2VuLnR5cGUgIT09ICdUS19DT05URU5UJyB8fCBwYXJzZXJfdG9rZW4uaXNfY29udGVudF91bmZvcm1hdHRlZCkpIHtcbiAgICAgIHByaW50ZXIucHJpbnRfbmV3bGluZShmYWxzZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2FsY2x1YXRlX3BhcmVudF9tdWx0aWxpbmUocHJpbnRlciwgcGFyc2VyX3Rva2VuKTtcbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuX2NhbGNsdWF0ZV9wYXJlbnRfbXVsdGlsaW5lID0gZnVuY3Rpb24ocHJpbnRlciwgcGFyc2VyX3Rva2VuKSB7XG4gIGlmIChwYXJzZXJfdG9rZW4ucGFyZW50ICYmIHByaW50ZXIuX291dHB1dC5qdXN0X2FkZGVkX25ld2xpbmUoKSAmJlxuICAgICEoKHBhcnNlcl90b2tlbi5pc19pbmxpbmVfZWxlbWVudCB8fCBwYXJzZXJfdG9rZW4uaXNfdW5mb3JtYXR0ZWQpICYmIHBhcnNlcl90b2tlbi5wYXJlbnQuaXNfaW5saW5lX2VsZW1lbnQpKSB7XG4gICAgcGFyc2VyX3Rva2VuLnBhcmVudC5tdWx0aWxpbmVfY29udGVudCA9IHRydWU7XG4gIH1cbn07XG5cbi8vVG8gYmUgdXNlZCBmb3IgPHA+IHRhZyBzcGVjaWFsIGNhc2U6XG52YXIgcF9jbG9zZXJzID0gWydhZGRyZXNzJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYmxvY2txdW90ZScsICdkZXRhaWxzJywgJ2RpdicsICdkbCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkZXInLCAnaHInLCAnbWFpbicsICdtZW51JywgJ25hdicsICdvbCcsICdwJywgJ3ByZScsICdzZWN0aW9uJywgJ3RhYmxlJywgJ3VsJ107XG52YXIgcF9wYXJlbnRfZXhjbHVkZXMgPSBbJ2EnLCAnYXVkaW8nLCAnZGVsJywgJ2lucycsICdtYXAnLCAnbm9zY3JpcHQnLCAndmlkZW8nXTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuX2RvX29wdGlvbmFsX2VuZF9lbGVtZW50ID0gZnVuY3Rpb24ocGFyc2VyX3Rva2VuKSB7XG4gIHZhciByZXN1bHQgPSBudWxsO1xuICAvLyBOT1RFOiBjYXNlcyBvZiBcImlmIHRoZXJlIGlzIG5vIG1vcmUgY29udGVudCBpbiB0aGUgcGFyZW50IGVsZW1lbnRcIlxuICAvLyBhcmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBiZWF1dGlmaWVyLlxuICAvLyBJdCBhc3N1bWVzIHBhcmVudCBvciBhbmNlc3RvciBjbG9zZSB0YWcgY2xvc2VzIGFsbCBjaGlsZHJlbi5cbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI29wdGlvbmFsLXRhZ3NcbiAgaWYgKHBhcnNlcl90b2tlbi5pc19lbXB0eV9lbGVtZW50IHx8ICFwYXJzZXJfdG9rZW4uaXNfc3RhcnRfdGFnIHx8ICFwYXJzZXJfdG9rZW4ucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuXG4gIH1cblxuICBpZiAocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAnYm9keScpIHtcbiAgICAvLyBBIGhlYWQgZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgaGVhZCBlbGVtZW50IGlzIG5vdCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHNwYWNlIGNoYXJhY3RlciBvciBhIGNvbW1lbnQuXG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCdoZWFkJyk7XG5cbiAgICAvL30gZWxzZSBpZiAocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAnYm9keScpIHtcbiAgICAvLyBET05FOiBBIGJvZHkgZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgYm9keSBlbGVtZW50IGlzIG5vdCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGNvbW1lbnQuXG5cbiAgfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdsaScpIHtcbiAgICAvLyBBbiBsaSBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBsaSBlbGVtZW50IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFub3RoZXIgbGkgZWxlbWVudCBvciBpZiB0aGVyZSBpcyBubyBtb3JlIGNvbnRlbnQgaW4gdGhlIHBhcmVudCBlbGVtZW50LlxuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgnbGknLCBbJ29sJywgJ3VsJywgJ21lbnUnXSk7XG5cbiAgfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdkZCcgfHwgcGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAnZHQnKSB7XG4gICAgLy8gQSBkZCBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBkZCBlbGVtZW50IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFub3RoZXIgZGQgZWxlbWVudCBvciBhIGR0IGVsZW1lbnQsIG9yIGlmIHRoZXJlIGlzIG5vIG1vcmUgY29udGVudCBpbiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgLy8gQSBkdCBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBkdCBlbGVtZW50IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFub3RoZXIgZHQgZWxlbWVudCBvciBhIGRkIGVsZW1lbnQuXG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCdkdCcsIFsnZGwnXSk7XG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCdkZCcsIFsnZGwnXSk7XG5cblxuICB9IGVsc2UgaWYgKHBhcnNlcl90b2tlbi5wYXJlbnQudGFnX25hbWUgPT09ICdwJyAmJiBwX2Nsb3NlcnMuaW5kZXhPZihwYXJzZXJfdG9rZW4udGFnX25hbWUpICE9PSAtMSkge1xuICAgIC8vIElNUE9SVEFOVDogdGhpcyBlbHNlLWlmIHdvcmtzIGJlY2F1c2UgcF9jbG9zZXJzIGhhcyBubyBvdmVybGFwIHdpdGggYW55IG90aGVyIGVsZW1lbnQgd2UgbG9vayBmb3IgaW4gdGhpcyBtZXRob2RcbiAgICAvLyBjaGVjayBmb3IgdGhlIHBhcmVudCBlbGVtZW50IGlzIGFuIEhUTUwgZWxlbWVudCB0aGF0IGlzIG5vdCBhbiA8YT4sIDxhdWRpbz4sIDxkZWw+LCA8aW5zPiwgPG1hcD4sIDxub3NjcmlwdD4sIG9yIDx2aWRlbz4gZWxlbWVudCwgIG9yIGFuIGF1dG9ub21vdXMgY3VzdG9tIGVsZW1lbnQuXG4gICAgLy8gVG8gZG8gdGhpcyByaWdodCwgdGhpcyBuZWVkcyB0byBiZSBjb2RlZCBhcyBhbiBpbmNsdXNpb24gb2YgdGhlIGludmVyc2Ugb2YgdGhlIGV4Y2x1c2lvbiBhYm92ZS5cbiAgICAvLyBCdXQgdG8gc3RhcnQgd2l0aCAoaWYgd2UgaWdub3JlIFwiYXV0b25vbW91cyBjdXN0b20gZWxlbWVudHNcIikgdGhlIGV4Y2x1c2lvbiB3b3VsZCBiZSBmaW5lLlxuICAgIHZhciBwX3BhcmVudCA9IHBhcnNlcl90b2tlbi5wYXJlbnQucGFyZW50O1xuICAgIGlmICghcF9wYXJlbnQgfHwgcF9wYXJlbnRfZXhjbHVkZXMuaW5kZXhPZihwX3BhcmVudC50YWdfbmFtZSkgPT09IC0xKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ3AnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAncnAnIHx8IHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ3J0Jykge1xuICAgIC8vIEFuIHJ0IGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIHJ0IGVsZW1lbnQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW4gcnQgb3IgcnAgZWxlbWVudCwgb3IgaWYgdGhlcmUgaXMgbm8gbW9yZSBjb250ZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAvLyBBbiBycCBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBycCBlbGVtZW50IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFuIHJ0IG9yIHJwIGVsZW1lbnQsIG9yIGlmIHRoZXJlIGlzIG5vIG1vcmUgY29udGVudCBpbiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCdydCcsIFsncnVieScsICdydGMnXSk7XG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCdycCcsIFsncnVieScsICdydGMnXSk7XG5cbiAgfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdvcHRncm91cCcpIHtcbiAgICAvLyBBbiBvcHRncm91cCBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBvcHRncm91cCBlbGVtZW50IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFub3RoZXIgb3B0Z3JvdXAgZWxlbWVudCwgb3IgaWYgdGhlcmUgaXMgbm8gbW9yZSBjb250ZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAvLyBBbiBvcHRpb24gZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgb3B0aW9uIGVsZW1lbnQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW5vdGhlciBvcHRpb24gZWxlbWVudCwgb3IgaWYgaXQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW4gb3B0Z3JvdXAgZWxlbWVudCwgb3IgaWYgdGhlcmUgaXMgbm8gbW9yZSBjb250ZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ29wdGdyb3VwJywgWydzZWxlY3QnXSk7XG4gICAgLy9yZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ29wdGlvbicsIFsnc2VsZWN0J10pO1xuXG4gIH0gZWxzZSBpZiAocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAnb3B0aW9uJykge1xuICAgIC8vIEFuIG9wdGlvbiBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBvcHRpb24gZWxlbWVudCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbm90aGVyIG9wdGlvbiBlbGVtZW50LCBvciBpZiBpdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbiBvcHRncm91cCBlbGVtZW50LCBvciBpZiB0aGVyZSBpcyBubyBtb3JlIGNvbnRlbnQgaW4gdGhlIHBhcmVudCBlbGVtZW50LlxuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgnb3B0aW9uJywgWydzZWxlY3QnLCAnZGF0YWxpc3QnLCAnb3B0Z3JvdXAnXSk7XG5cbiAgfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdjb2xncm91cCcpIHtcbiAgICAvLyBET05FOiBBIGNvbGdyb3VwIGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGNvbGdyb3VwIGVsZW1lbnQgaXMgbm90IGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgc3BhY2UgY2hhcmFjdGVyIG9yIGEgY29tbWVudC5cbiAgICAvLyBBIGNhcHRpb24gZWxlbWVudCdzIGVuZCB0YWcgbWF5IGJlIG9tbWl0dGVkIGlmIGEgY29sZ3JvdXAsIHRoZWFkLCB0Zm9vdCwgdGJvZHksIG9yIHRyIGVsZW1lbnQgaXMgc3RhcnRlZC5cbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ2NhcHRpb24nLCBbJ3RhYmxlJ10pO1xuXG4gIH0gZWxzZSBpZiAocGFyc2VyX3Rva2VuLnRhZ19uYW1lID09PSAndGhlYWQnKSB7XG4gICAgLy8gQSBjb2xncm91cCBlbGVtZW50J3MgZW5kIHRhZyBtYXkgYmUgb21taXR0ZWQgaWYgYSB0aGVhZCwgdGZvb3QsIHRib2R5LCBvciB0ciBlbGVtZW50IGlzIHN0YXJ0ZWQuXG4gICAgLy8gQSBjYXB0aW9uIGVsZW1lbnQncyBlbmQgdGFnIG1heSBiZSBvbW1pdHRlZCBpZiBhIGNvbGdyb3VwLCB0aGVhZCwgdGZvb3QsIHRib2R5LCBvciB0ciBlbGVtZW50IGlzIHN0YXJ0ZWQuXG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCdjYXB0aW9uJywgWyd0YWJsZSddKTtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ2NvbGdyb3VwJywgWyd0YWJsZSddKTtcblxuICAgIC8vfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICdjYXB0aW9uJykge1xuICAgIC8vIERPTkU6IEEgY2FwdGlvbiBlbGVtZW504oCZcyBlbmQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBjYXB0aW9uIGVsZW1lbnQgaXMgbm90IGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgc3BhY2UgY2hhcmFjdGVyIG9yIGEgY29tbWVudC5cblxuICB9IGVsc2UgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ3Rib2R5JyB8fCBwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICd0Zm9vdCcpIHtcbiAgICAvLyBBIHRoZWFkIGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIHRoZWFkIGVsZW1lbnQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSB0Ym9keSBvciB0Zm9vdCBlbGVtZW50LlxuICAgIC8vIEEgdGJvZHkgZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgdGJvZHkgZWxlbWVudCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRib2R5IG9yIHRmb290IGVsZW1lbnQsIG9yIGlmIHRoZXJlIGlzIG5vIG1vcmUgY29udGVudCBpbiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgLy8gQSBjb2xncm91cCBlbGVtZW50J3MgZW5kIHRhZyBtYXkgYmUgb21taXR0ZWQgaWYgYSB0aGVhZCwgdGZvb3QsIHRib2R5LCBvciB0ciBlbGVtZW50IGlzIHN0YXJ0ZWQuXG4gICAgLy8gQSBjYXB0aW9uIGVsZW1lbnQncyBlbmQgdGFnIG1heSBiZSBvbW1pdHRlZCBpZiBhIGNvbGdyb3VwLCB0aGVhZCwgdGZvb3QsIHRib2R5LCBvciB0ciBlbGVtZW50IGlzIHN0YXJ0ZWQuXG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCdjYXB0aW9uJywgWyd0YWJsZSddKTtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ2NvbGdyb3VwJywgWyd0YWJsZSddKTtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ3RoZWFkJywgWyd0YWJsZSddKTtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ3Rib2R5JywgWyd0YWJsZSddKTtcblxuICAgIC8vfSBlbHNlIGlmIChwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICd0Zm9vdCcpIHtcbiAgICAvLyBET05FOiBBIHRmb290IGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlcmUgaXMgbm8gbW9yZSBjb250ZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC5cblxuICB9IGVsc2UgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ3RyJykge1xuICAgIC8vIEEgdHIgZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgdHIgZWxlbWVudCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbm90aGVyIHRyIGVsZW1lbnQsIG9yIGlmIHRoZXJlIGlzIG5vIG1vcmUgY29udGVudCBpbiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgLy8gQSBjb2xncm91cCBlbGVtZW50J3MgZW5kIHRhZyBtYXkgYmUgb21taXR0ZWQgaWYgYSB0aGVhZCwgdGZvb3QsIHRib2R5LCBvciB0ciBlbGVtZW50IGlzIHN0YXJ0ZWQuXG4gICAgLy8gQSBjYXB0aW9uIGVsZW1lbnQncyBlbmQgdGFnIG1heSBiZSBvbW1pdHRlZCBpZiBhIGNvbGdyb3VwLCB0aGVhZCwgdGZvb3QsIHRib2R5LCBvciB0ciBlbGVtZW50IGlzIHN0YXJ0ZWQuXG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCdjYXB0aW9uJywgWyd0YWJsZSddKTtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ2NvbGdyb3VwJywgWyd0YWJsZSddKTtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgdGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoJ3RyJywgWyd0YWJsZScsICd0aGVhZCcsICd0Ym9keScsICd0Zm9vdCddKTtcblxuICB9IGVsc2UgaWYgKHBhcnNlcl90b2tlbi50YWdfbmFtZSA9PT0gJ3RoJyB8fCBwYXJzZXJfdG9rZW4udGFnX25hbWUgPT09ICd0ZCcpIHtcbiAgICAvLyBBIHRkIGVsZW1lbnTigJlzIGVuZCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIHRkIGVsZW1lbnQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSB0ZCBvciB0aCBlbGVtZW50LCBvciBpZiB0aGVyZSBpcyBubyBtb3JlIGNvbnRlbnQgaW4gdGhlIHBhcmVudCBlbGVtZW50LlxuICAgIC8vIEEgdGggZWxlbWVudOKAmXMgZW5kIHRhZyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgdGggZWxlbWVudCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRkIG9yIHRoIGVsZW1lbnQsIG9yIGlmIHRoZXJlIGlzIG5vIG1vcmUgY29udGVudCBpbiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCd0ZCcsIFsndGFibGUnLCAndGhlYWQnLCAndGJvZHknLCAndGZvb3QnLCAndHInXSk7XG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCd0aCcsIFsndGFibGUnLCAndGhlYWQnLCAndGJvZHknLCAndGZvb3QnLCAndHInXSk7XG4gIH1cblxuICAvLyBTdGFydCBlbGVtZW50IG9taXNzaW9uIG5vdCBoYW5kbGVkIGN1cnJlbnRseVxuICAvLyBBIGhlYWQgZWxlbWVudOKAmXMgc3RhcnQgdGFnIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBlbGVtZW50IGlzIGVtcHR5LCBvciBpZiB0aGUgZmlyc3QgdGhpbmcgaW5zaWRlIHRoZSBoZWFkIGVsZW1lbnQgaXMgYW4gZWxlbWVudC5cbiAgLy8gQSB0Ym9keSBlbGVtZW504oCZcyBzdGFydCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGZpcnN0IHRoaW5nIGluc2lkZSB0aGUgdGJvZHkgZWxlbWVudCBpcyBhIHRyIGVsZW1lbnQsIGFuZCBpZiB0aGUgZWxlbWVudCBpcyBub3QgaW1tZWRpYXRlbHkgcHJlY2VkZWQgYnkgYSB0Ym9keSwgdGhlYWQsIG9yIHRmb290IGVsZW1lbnQgd2hvc2UgZW5kIHRhZyBoYXMgYmVlbiBvbWl0dGVkLiAoSXQgY2Fu4oCZdCBiZSBvbWl0dGVkIGlmIHRoZSBlbGVtZW50IGlzIGVtcHR5LilcbiAgLy8gQSBjb2xncm91cCBlbGVtZW504oCZcyBzdGFydCB0YWcgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGZpcnN0IHRoaW5nIGluc2lkZSB0aGUgY29sZ3JvdXAgZWxlbWVudCBpcyBhIGNvbCBlbGVtZW50LCBhbmQgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGltbWVkaWF0ZWx5IHByZWNlZGVkIGJ5IGFub3RoZXIgY29sZ3JvdXAgZWxlbWVudCB3aG9zZSBlbmQgdGFnIGhhcyBiZWVuIG9taXR0ZWQuIChJdCBjYW7igJl0IGJlIG9taXR0ZWQgaWYgdGhlIGVsZW1lbnQgaXMgZW1wdHkuKVxuXG4gIC8vIEZpeCB1cCB0aGUgcGFyZW50IG9mIHRoZSBwYXJzZXIgdG9rZW5cbiAgcGFyc2VyX3Rva2VuLnBhcmVudCA9IHRoaXMuX3RhZ19zdGFjay5nZXRfcGFyc2VyX3Rva2VuKCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzLkJlYXV0aWZpZXIgPSBCZWF1dGlmaWVyO1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEJlYXV0aWZpZXIgPSByZXF1aXJlKCcuL2JlYXV0aWZpZXInKS5CZWF1dGlmaWVyLFxuICBPcHRpb25zID0gcmVxdWlyZSgnLi9vcHRpb25zJykuT3B0aW9ucztcblxuZnVuY3Rpb24gc3R5bGVfaHRtbChodG1sX3NvdXJjZSwgb3B0aW9ucywganNfYmVhdXRpZnksIGNzc19iZWF1dGlmeSkge1xuICB2YXIgYmVhdXRpZmllciA9IG5ldyBCZWF1dGlmaWVyKGh0bWxfc291cmNlLCBvcHRpb25zLCBqc19iZWF1dGlmeSwgY3NzX2JlYXV0aWZ5KTtcbiAgcmV0dXJuIGJlYXV0aWZpZXIuYmVhdXRpZnkoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZV9odG1sO1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBPcHRpb25zKCk7XG59O1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEJhc2VPcHRpb25zID0gcmVxdWlyZSgnLi4vY29yZS9vcHRpb25zJykuT3B0aW9ucztcblxuZnVuY3Rpb24gT3B0aW9ucyhvcHRpb25zKSB7XG4gIEJhc2VPcHRpb25zLmNhbGwodGhpcywgb3B0aW9ucywgJ2h0bWwnKTtcbiAgaWYgKHRoaXMudGVtcGxhdGluZy5sZW5ndGggPT09IDEgJiYgdGhpcy50ZW1wbGF0aW5nWzBdID09PSAnYXV0bycpIHtcbiAgICB0aGlzLnRlbXBsYXRpbmcgPSBbJ2RqYW5nbycsICdlcmInLCAnaGFuZGxlYmFycycsICdwaHAnXTtcbiAgfVxuXG4gIHRoaXMuaW5kZW50X2lubmVyX2h0bWwgPSB0aGlzLl9nZXRfYm9vbGVhbignaW5kZW50X2lubmVyX2h0bWwnKTtcbiAgdGhpcy5pbmRlbnRfYm9keV9pbm5lcl9odG1sID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2luZGVudF9ib2R5X2lubmVyX2h0bWwnLCB0cnVlKTtcbiAgdGhpcy5pbmRlbnRfaGVhZF9pbm5lcl9odG1sID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2luZGVudF9oZWFkX2lubmVyX2h0bWwnLCB0cnVlKTtcblxuICB0aGlzLmluZGVudF9oYW5kbGViYXJzID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2luZGVudF9oYW5kbGViYXJzJywgdHJ1ZSk7XG4gIHRoaXMud3JhcF9hdHRyaWJ1dGVzID0gdGhpcy5fZ2V0X3NlbGVjdGlvbignd3JhcF9hdHRyaWJ1dGVzJyxcbiAgICBbJ2F1dG8nLCAnZm9yY2UnLCAnZm9yY2UtYWxpZ25lZCcsICdmb3JjZS1leHBhbmQtbXVsdGlsaW5lJywgJ2FsaWduZWQtbXVsdGlwbGUnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxpZ25lZCddKTtcbiAgdGhpcy53cmFwX2F0dHJpYnV0ZXNfbWluX2F0dHJzID0gdGhpcy5fZ2V0X251bWJlcignd3JhcF9hdHRyaWJ1dGVzX21pbl9hdHRycycsIDIpO1xuICB0aGlzLndyYXBfYXR0cmlidXRlc19pbmRlbnRfc2l6ZSA9IHRoaXMuX2dldF9udW1iZXIoJ3dyYXBfYXR0cmlidXRlc19pbmRlbnRfc2l6ZScsIHRoaXMuaW5kZW50X3NpemUpO1xuICB0aGlzLmV4dHJhX2xpbmVycyA9IHRoaXMuX2dldF9hcnJheSgnZXh0cmFfbGluZXJzJywgWydoZWFkJywgJ2JvZHknLCAnL2h0bWwnXSk7XG5cbiAgLy8gQmxvY2sgdnMgaW5saW5lIGVsZW1lbnRzXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQmxvY2stbGV2ZWxfZWxlbWVudHNcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9JbmxpbmVfZWxlbWVudHNcbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2RvbS5odG1sI3BocmFzaW5nLWNvbnRlbnRcbiAgdGhpcy5pbmxpbmUgPSB0aGlzLl9nZXRfYXJyYXkoJ2lubGluZScsIFtcbiAgICAnYScsICdhYmJyJywgJ2FyZWEnLCAnYXVkaW8nLCAnYicsICdiZGknLCAnYmRvJywgJ2JyJywgJ2J1dHRvbicsICdjYW52YXMnLCAnY2l0ZScsXG4gICAgJ2NvZGUnLCAnZGF0YScsICdkYXRhbGlzdCcsICdkZWwnLCAnZGZuJywgJ2VtJywgJ2VtYmVkJywgJ2knLCAnaWZyYW1lJywgJ2ltZycsXG4gICAgJ2lucHV0JywgJ2lucycsICdrYmQnLCAna2V5Z2VuJywgJ2xhYmVsJywgJ21hcCcsICdtYXJrJywgJ21hdGgnLCAnbWV0ZXInLCAnbm9zY3JpcHQnLFxuICAgICdvYmplY3QnLCAnb3V0cHV0JywgJ3Byb2dyZXNzJywgJ3EnLCAncnVieScsICdzJywgJ3NhbXAnLCAvKiAnc2NyaXB0JywgKi8gJ3NlbGVjdCcsICdzbWFsbCcsXG4gICAgJ3NwYW4nLCAnc3Ryb25nJywgJ3N1YicsICdzdXAnLCAnc3ZnJywgJ3RlbXBsYXRlJywgJ3RleHRhcmVhJywgJ3RpbWUnLCAndScsICd2YXInLFxuICAgICd2aWRlbycsICd3YnInLCAndGV4dCcsXG4gICAgLy8gb2Jzb2xldGUgaW5saW5lIHRhZ3NcbiAgICAnYWNyb255bScsICdiaWcnLCAnc3RyaWtlJywgJ3R0J1xuICBdKTtcbiAgdGhpcy52b2lkX2VsZW1lbnRzID0gdGhpcy5fZ2V0X2FycmF5KCd2b2lkX2VsZW1lbnRzJywgW1xuICAgIC8vIEhUTE0gdm9pZCBlbGVtZW50cyAtIGFrYSBzZWxmLWNsb3NpbmcgdGFncyAtIGFrYSBzaW5nbGV0b25zXG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL2h0bWwvd2cvZHJhZnRzL2h0bWwvbWFzdGVyL3N5bnRheC5odG1sI3ZvaWQtZWxlbWVudHNcbiAgICAnYXJlYScsICdiYXNlJywgJ2JyJywgJ2NvbCcsICdlbWJlZCcsICdocicsICdpbWcnLCAnaW5wdXQnLCAna2V5Z2VuJyxcbiAgICAnbGluaycsICdtZW51aXRlbScsICdtZXRhJywgJ3BhcmFtJywgJ3NvdXJjZScsICd0cmFjaycsICd3YnInLFxuICAgIC8vIE5PVEU6IE9wdGlvbmFsIHRhZ3MgYXJlIHRvbyBjb21wbGV4IGZvciBhIHNpbXBsZSBsaXN0XG4gICAgLy8gdGhleSBhcmUgaGFyZCBjb2RlZCBpbiBfZG9fb3B0aW9uYWxfZW5kX2VsZW1lbnRcblxuICAgIC8vIERvY3R5cGUgYW5kIHhtbCBlbGVtZW50c1xuICAgICchZG9jdHlwZScsICc/eG1sJyxcblxuICAgIC8vIG9ic29sZXRlIHRhZ3NcbiAgICAvLyBiYXNlZm9udDogaHR0cHM6Ly93d3cuY29tcHV0ZXJob3BlLmNvbS9qYXJnb24vaC9odG1sLWJhc2Vmb250LXRhZy5odG1cbiAgICAvLyBpc25kZXg6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pc2luZGV4XG4gICAgJ2Jhc2Vmb250JywgJ2lzaW5kZXgnXG4gIF0pO1xuICB0aGlzLnVuZm9ybWF0dGVkID0gdGhpcy5fZ2V0X2FycmF5KCd1bmZvcm1hdHRlZCcsIFtdKTtcbiAgdGhpcy5jb250ZW50X3VuZm9ybWF0dGVkID0gdGhpcy5fZ2V0X2FycmF5KCdjb250ZW50X3VuZm9ybWF0dGVkJywgW1xuICAgICdwcmUnLCAndGV4dGFyZWEnXG4gIF0pO1xuICB0aGlzLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyID0gdGhpcy5fZ2V0X2NoYXJhY3RlcnMoJ3VuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyJyk7XG4gIHRoaXMuaW5kZW50X3NjcmlwdHMgPSB0aGlzLl9nZXRfc2VsZWN0aW9uKCdpbmRlbnRfc2NyaXB0cycsIFsnbm9ybWFsJywgJ2tlZXAnLCAnc2VwYXJhdGUnXSk7XG5cbn1cbk9wdGlvbnMucHJvdG90eXBlID0gbmV3IEJhc2VPcHRpb25zKCk7XG5cblxuXG5tb2R1bGUuZXhwb3J0cy5PcHRpb25zID0gT3B0aW9ucztcbiIsIi8qanNoaW50IG5vZGU6dHJ1ZSAqL1xuLypcblxuICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxOCBFaW5hciBMaWVsbWFuaXMsIExpYW0gTmV3bWFuLCBhbmQgY29udHJpYnV0b3JzLlxuXG4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG4gIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzXG4gICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbiAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSxcbiAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4gIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlNcbiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4gIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4gIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgU09GVFdBUkUuXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBCYXNlVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vY29yZS90b2tlbml6ZXInKS5Ub2tlbml6ZXI7XG52YXIgQkFTRVRPS0VOID0gcmVxdWlyZSgnLi4vY29yZS90b2tlbml6ZXInKS5UT0tFTjtcbnZhciBEaXJlY3RpdmVzID0gcmVxdWlyZSgnLi4vY29yZS9kaXJlY3RpdmVzJykuRGlyZWN0aXZlcztcbnZhciBUZW1wbGF0YWJsZVBhdHRlcm4gPSByZXF1aXJlKCcuLi9jb3JlL3RlbXBsYXRhYmxlcGF0dGVybicpLlRlbXBsYXRhYmxlUGF0dGVybjtcbnZhciBQYXR0ZXJuID0gcmVxdWlyZSgnLi4vY29yZS9wYXR0ZXJuJykuUGF0dGVybjtcblxudmFyIFRPS0VOID0ge1xuICBUQUdfT1BFTjogJ1RLX1RBR19PUEVOJyxcbiAgVEFHX0NMT1NFOiAnVEtfVEFHX0NMT1NFJyxcbiAgQVRUUklCVVRFOiAnVEtfQVRUUklCVVRFJyxcbiAgRVFVQUxTOiAnVEtfRVFVQUxTJyxcbiAgVkFMVUU6ICdUS19WQUxVRScsXG4gIENPTU1FTlQ6ICdUS19DT01NRU5UJyxcbiAgVEVYVDogJ1RLX1RFWFQnLFxuICBVTktOT1dOOiAnVEtfVU5LTk9XTicsXG4gIFNUQVJUOiBCQVNFVE9LRU4uU1RBUlQsXG4gIFJBVzogQkFTRVRPS0VOLlJBVyxcbiAgRU9GOiBCQVNFVE9LRU4uRU9GXG59O1xuXG52YXIgZGlyZWN0aXZlc19jb3JlID0gbmV3IERpcmVjdGl2ZXMoLzxcXCEtLS8sIC8tLT4vKTtcblxudmFyIFRva2VuaXplciA9IGZ1bmN0aW9uKGlucHV0X3N0cmluZywgb3B0aW9ucykge1xuICBCYXNlVG9rZW5pemVyLmNhbGwodGhpcywgaW5wdXRfc3RyaW5nLCBvcHRpb25zKTtcbiAgdGhpcy5fY3VycmVudF90YWdfbmFtZSA9ICcnO1xuXG4gIC8vIFdvcmRzIGVuZCBhdCB3aGl0ZXNwYWNlIG9yIHdoZW4gYSB0YWcgc3RhcnRzXG4gIC8vIGlmIHdlIGFyZSBpbmRlbnRpbmcgaGFuZGxlYmFycywgdGhleSBhcmUgY29uc2lkZXJlZCB0YWdzXG4gIHZhciB0ZW1wbGF0YWJsZV9yZWFkZXIgPSBuZXcgVGVtcGxhdGFibGVQYXR0ZXJuKHRoaXMuX2lucHV0KS5yZWFkX29wdGlvbnModGhpcy5fb3B0aW9ucyk7XG4gIHZhciBwYXR0ZXJuX3JlYWRlciA9IG5ldyBQYXR0ZXJuKHRoaXMuX2lucHV0KTtcblxuICB0aGlzLl9fcGF0dGVybnMgPSB7XG4gICAgd29yZDogdGVtcGxhdGFibGVfcmVhZGVyLnVudGlsKC9bXFxuXFxyXFx0IDxdLyksXG4gICAgc2luZ2xlX3F1b3RlOiB0ZW1wbGF0YWJsZV9yZWFkZXIudW50aWxfYWZ0ZXIoLycvKSxcbiAgICBkb3VibGVfcXVvdGU6IHRlbXBsYXRhYmxlX3JlYWRlci51bnRpbF9hZnRlcigvXCIvKSxcbiAgICBhdHRyaWJ1dGU6IHRlbXBsYXRhYmxlX3JlYWRlci51bnRpbCgvW1xcblxcclxcdCA9Pl18XFwvPi8pLFxuICAgIGVsZW1lbnRfbmFtZTogdGVtcGxhdGFibGVfcmVhZGVyLnVudGlsKC9bXFxuXFxyXFx0ID5cXC9dLyksXG5cbiAgICBoYW5kbGViYXJzX2NvbW1lbnQ6IHBhdHRlcm5fcmVhZGVyLnN0YXJ0aW5nX3dpdGgoL3t7IS0tLykudW50aWxfYWZ0ZXIoLy0tfX0vKSxcbiAgICBoYW5kbGViYXJzOiBwYXR0ZXJuX3JlYWRlci5zdGFydGluZ193aXRoKC97ey8pLnVudGlsX2FmdGVyKC99fS8pLFxuICAgIGhhbmRsZWJhcnNfb3BlbjogcGF0dGVybl9yZWFkZXIudW50aWwoL1tcXG5cXHJcXHQgfV0vKSxcbiAgICBoYW5kbGViYXJzX3Jhd19jbG9zZTogcGF0dGVybl9yZWFkZXIudW50aWwoL319LyksXG4gICAgY29tbWVudDogcGF0dGVybl9yZWFkZXIuc3RhcnRpbmdfd2l0aCgvPCEtLS8pLnVudGlsX2FmdGVyKC8tLT4vKSxcbiAgICBjZGF0YTogcGF0dGVybl9yZWFkZXIuc3RhcnRpbmdfd2l0aCgvPCFcXFtDREFUQVxcWy8pLnVudGlsX2FmdGVyKC9dXT4vKSxcbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db25kaXRpb25hbF9jb21tZW50XG4gICAgY29uZGl0aW9uYWxfY29tbWVudDogcGF0dGVybl9yZWFkZXIuc3RhcnRpbmdfd2l0aCgvPCFcXFsvKS51bnRpbF9hZnRlcigvXT4vKSxcbiAgICBwcm9jZXNzaW5nOiBwYXR0ZXJuX3JlYWRlci5zdGFydGluZ193aXRoKC88XFw/LykudW50aWxfYWZ0ZXIoL1xcPz4vKVxuICB9O1xuXG4gIGlmICh0aGlzLl9vcHRpb25zLmluZGVudF9oYW5kbGViYXJzKSB7XG4gICAgdGhpcy5fX3BhdHRlcm5zLndvcmQgPSB0aGlzLl9fcGF0dGVybnMud29yZC5leGNsdWRlKCdoYW5kbGViYXJzJyk7XG4gIH1cblxuICB0aGlzLl91bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlciA9IG51bGw7XG5cbiAgaWYgKHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIpIHtcbiAgICB2YXIgbGl0ZXJhbF9yZWdleHAgPSB0aGlzLl9pbnB1dC5nZXRfbGl0ZXJhbF9yZWdleHAodGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcik7XG4gICAgdGhpcy5fX3BhdHRlcm5zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyID1cbiAgICAgIHBhdHRlcm5fcmVhZGVyLm1hdGNoaW5nKGxpdGVyYWxfcmVnZXhwKVxuICAgICAgLnVudGlsX2FmdGVyKGxpdGVyYWxfcmVnZXhwKTtcbiAgfVxufTtcblRva2VuaXplci5wcm90b3R5cGUgPSBuZXcgQmFzZVRva2VuaXplcigpO1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc19jb21tZW50ID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikgeyAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG4gIHJldHVybiBmYWxzZTsgLy9jdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLkNPTU1FTlQgfHwgY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5VTktOT1dOO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5faXNfb3BlbmluZyA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHtcbiAgcmV0dXJuIGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uVEFHX09QRU47XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc19jbG9zaW5nID0gZnVuY3Rpb24oY3VycmVudF90b2tlbiwgb3Blbl90b2tlbikge1xuICByZXR1cm4gY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5UQUdfQ0xPU0UgJiZcbiAgICAob3Blbl90b2tlbiAmJiAoXG4gICAgICAoKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJz4nIHx8IGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJy8+JykgJiYgb3Blbl90b2tlbi50ZXh0WzBdID09PSAnPCcpIHx8XG4gICAgICAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnfX0nICYmIG9wZW5fdG9rZW4udGV4dFswXSA9PT0gJ3snICYmIG9wZW5fdG9rZW4udGV4dFsxXSA9PT0gJ3snKSkpO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY3VycmVudF90YWdfbmFtZSA9ICcnO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fZ2V0X25leHRfdG9rZW4gPSBmdW5jdGlvbihwcmV2aW91c190b2tlbiwgb3Blbl90b2tlbikgeyAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG4gIHZhciB0b2tlbiA9IG51bGw7XG4gIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7XG4gIHZhciBjID0gdGhpcy5faW5wdXQucGVlaygpO1xuXG4gIGlmIChjID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5FT0YsICcnKTtcbiAgfVxuXG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9vcGVuX2hhbmRsZWJhcnMoYywgb3Blbl90b2tlbik7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9hdHRyaWJ1dGUoYywgcHJldmlvdXNfdG9rZW4sIG9wZW5fdG9rZW4pO1xuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX3JlYWRfY2xvc2UoYywgb3Blbl90b2tlbik7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9yYXdfY29udGVudChjLCBwcmV2aW91c190b2tlbiwgb3Blbl90b2tlbik7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9jb250ZW50X3dvcmQoYyk7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9jb21tZW50X29yX2NkYXRhKGMpO1xuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX3JlYWRfcHJvY2Vzc2luZyhjKTtcbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9yZWFkX29wZW4oYywgb3Blbl90b2tlbik7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlVOS05PV04sIHRoaXMuX2lucHV0Lm5leHQoKSk7XG5cbiAgcmV0dXJuIHRva2VuO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVhZF9jb21tZW50X29yX2NkYXRhID0gZnVuY3Rpb24oYykgeyAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG4gIHZhciB0b2tlbiA9IG51bGw7XG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gbnVsbDtcbiAgdmFyIGRpcmVjdGl2ZXMgPSBudWxsO1xuXG4gIGlmIChjID09PSAnPCcpIHtcbiAgICB2YXIgcGVlazEgPSB0aGlzLl9pbnB1dC5wZWVrKDEpO1xuICAgIC8vIFdlIHRyZWF0IGFsbCBjb21tZW50cyBhcyBsaXRlcmFscywgZXZlbiBtb3JlIHRoYW4gcHJlZm9ybWF0dGVkIHRhZ3NcbiAgICAvLyB3ZSBvbmx5IGxvb2sgZm9yIHRoZSBhcHByb3ByaWF0ZSBjbG9zaW5nIG1hcmtlclxuICAgIGlmIChwZWVrMSA9PT0gJyEnKSB7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmNvbW1lbnQucmVhZCgpO1xuXG4gICAgICAvLyBvbmx5IHByb2Nlc3MgZGlyZWN0aXZlIG9uIGh0bWwgY29tbWVudHNcbiAgICAgIGlmIChyZXN1bHRpbmdfc3RyaW5nKSB7XG4gICAgICAgIGRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzX2NvcmUuZ2V0X2RpcmVjdGl2ZXMocmVzdWx0aW5nX3N0cmluZyk7XG4gICAgICAgIGlmIChkaXJlY3RpdmVzICYmIGRpcmVjdGl2ZXMuaWdub3JlID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSBkaXJlY3RpdmVzX2NvcmUucmVhZElnbm9yZWQodGhpcy5faW5wdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmNkYXRhLnJlYWQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0aW5nX3N0cmluZykge1xuICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uQ09NTUVOVCwgcmVzdWx0aW5nX3N0cmluZyk7XG4gICAgICB0b2tlbi5kaXJlY3RpdmVzID0gZGlyZWN0aXZlcztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9rZW47XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX3Byb2Nlc3NpbmcgPSBmdW5jdGlvbihjKSB7IC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbiAgdmFyIHRva2VuID0gbnVsbDtcbiAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSBudWxsO1xuICB2YXIgZGlyZWN0aXZlcyA9IG51bGw7XG5cbiAgaWYgKGMgPT09ICc8Jykge1xuICAgIHZhciBwZWVrMSA9IHRoaXMuX2lucHV0LnBlZWsoMSk7XG4gICAgaWYgKHBlZWsxID09PSAnIScgfHwgcGVlazEgPT09ICc/Jykge1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX19wYXR0ZXJucy5jb25kaXRpb25hbF9jb21tZW50LnJlYWQoKTtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nIHx8IHRoaXMuX19wYXR0ZXJucy5wcm9jZXNzaW5nLnJlYWQoKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0aW5nX3N0cmluZykge1xuICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uQ09NTUVOVCwgcmVzdWx0aW5nX3N0cmluZyk7XG4gICAgICB0b2tlbi5kaXJlY3RpdmVzID0gZGlyZWN0aXZlcztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9rZW47XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX29wZW4gPSBmdW5jdGlvbihjLCBvcGVuX3Rva2VuKSB7XG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gbnVsbDtcbiAgdmFyIHRva2VuID0gbnVsbDtcbiAgaWYgKCFvcGVuX3Rva2VuKSB7XG4gICAgaWYgKGMgPT09ICc8Jykge1xuXG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgaWYgKHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gJy8nKSB7XG4gICAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgfVxuICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSB0aGlzLl9fcGF0dGVybnMuZWxlbWVudF9uYW1lLnJlYWQoKTtcbiAgICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlRBR19PUEVOLCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRva2VuO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVhZF9vcGVuX2hhbmRsZWJhcnMgPSBmdW5jdGlvbihjLCBvcGVuX3Rva2VuKSB7XG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gbnVsbDtcbiAgdmFyIHRva2VuID0gbnVsbDtcbiAgaWYgKCFvcGVuX3Rva2VuKSB7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMuaW5kZW50X2hhbmRsZWJhcnMgJiYgYyA9PT0gJ3snICYmIHRoaXMuX2lucHV0LnBlZWsoMSkgPT09ICd7Jykge1xuICAgICAgaWYgKHRoaXMuX2lucHV0LnBlZWsoMikgPT09ICchJykge1xuICAgICAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfY29tbWVudC5yZWFkKCk7XG4gICAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nIHx8IHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzLnJlYWQoKTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uQ09NTUVOVCwgcmVzdWx0aW5nX3N0cmluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfb3Blbi5yZWFkKCk7XG4gICAgICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlRBR19PUEVOLCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRva2VuO1xufTtcblxuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX2Nsb3NlID0gZnVuY3Rpb24oYywgb3Blbl90b2tlbikge1xuICB2YXIgcmVzdWx0aW5nX3N0cmluZyA9IG51bGw7XG4gIHZhciB0b2tlbiA9IG51bGw7XG4gIGlmIChvcGVuX3Rva2VuKSB7XG4gICAgaWYgKG9wZW5fdG9rZW4udGV4dFswXSA9PT0gJzwnICYmIChjID09PSAnPicgfHwgKGMgPT09ICcvJyAmJiB0aGlzLl9pbnB1dC5wZWVrKDEpID09PSAnPicpKSkge1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgIGlmIChjID09PSAnLycpIHsgLy8gIGZvciBjbG9zZSB0YWcgXCIvPlwiXG4gICAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgfVxuICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uVEFHX0NMT1NFLCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICB9IGVsc2UgaWYgKG9wZW5fdG9rZW4udGV4dFswXSA9PT0gJ3snICYmIGMgPT09ICd9JyAmJiB0aGlzLl9pbnB1dC5wZWVrKDEpID09PSAnfScpIHtcbiAgICAgIHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgIHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlRBR19DTE9TRSwgJ319Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRva2VuO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVhZF9hdHRyaWJ1dGUgPSBmdW5jdGlvbihjLCBwcmV2aW91c190b2tlbiwgb3Blbl90b2tlbikge1xuICB2YXIgdG9rZW4gPSBudWxsO1xuICB2YXIgcmVzdWx0aW5nX3N0cmluZyA9ICcnO1xuICBpZiAob3Blbl90b2tlbiAmJiBvcGVuX3Rva2VuLnRleHRbMF0gPT09ICc8Jykge1xuXG4gICAgaWYgKGMgPT09ICc9Jykge1xuICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uRVFVQUxTLCB0aGlzLl9pbnB1dC5uZXh0KCkpO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ1wiJyB8fCBjID09PSBcIidcIikge1xuICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgICBpZiAoYyA9PT0gJ1wiJykge1xuICAgICAgICBjb250ZW50ICs9IHRoaXMuX19wYXR0ZXJucy5kb3VibGVfcXVvdGUucmVhZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGVudCArPSB0aGlzLl9fcGF0dGVybnMuc2luZ2xlX3F1b3RlLnJlYWQoKTtcbiAgICAgIH1cbiAgICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlZBTFVFLCBjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX19wYXR0ZXJucy5hdHRyaWJ1dGUucmVhZCgpO1xuXG4gICAgICBpZiAocmVzdWx0aW5nX3N0cmluZykge1xuICAgICAgICBpZiAocHJldmlvdXNfdG9rZW4udHlwZSA9PT0gVE9LRU4uRVFVQUxTKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uVkFMVUUsIHJlc3VsdGluZ19zdHJpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLkFUVFJJQlVURSwgcmVzdWx0aW5nX3N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRva2VuO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5faXNfY29udGVudF91bmZvcm1hdHRlZCA9IGZ1bmN0aW9uKHRhZ19uYW1lKSB7XG4gIC8vIHZvaWRfZWxlbWVudHMgaGF2ZSBubyBjb250ZW50IGFuZCBzbyBjYW5ub3QgaGF2ZSB1bmZvcm1hdHRlZCBjb250ZW50XG4gIC8vIHNjcmlwdCBhbmQgc3R5bGUgdGFncyBzaG91bGQgYWx3YXlzIGJlIHJlYWQgYXMgdW5mb3JtYXR0ZWQgY29udGVudFxuICAvLyBmaW5hbGx5IGNvbnRlbnRfdW5mb3JtYXR0ZWQgYW5kIHVuZm9ybWF0dGVkIGVsZW1lbnQgY29udGVudHMgYXJlIHVuZm9ybWF0dGVkXG4gIHJldHVybiB0aGlzLl9vcHRpb25zLnZvaWRfZWxlbWVudHMuaW5kZXhPZih0YWdfbmFtZSkgPT09IC0xICYmXG4gICAgKHRoaXMuX29wdGlvbnMuY29udGVudF91bmZvcm1hdHRlZC5pbmRleE9mKHRhZ19uYW1lKSAhPT0gLTEgfHxcbiAgICAgIHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWQuaW5kZXhPZih0YWdfbmFtZSkgIT09IC0xKTtcbn07XG5cblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVhZF9yYXdfY29udGVudCA9IGZ1bmN0aW9uKGMsIHByZXZpb3VzX3Rva2VuLCBvcGVuX3Rva2VuKSB7IC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbiAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSAnJztcbiAgaWYgKG9wZW5fdG9rZW4gJiYgb3Blbl90b2tlbi50ZXh0WzBdID09PSAneycpIHtcbiAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfcmF3X2Nsb3NlLnJlYWQoKTtcbiAgfSBlbHNlIGlmIChwcmV2aW91c190b2tlbi50eXBlID09PSBUT0tFTi5UQUdfQ0xPU0UgJiZcbiAgICBwcmV2aW91c190b2tlbi5vcGVuZWQudGV4dFswXSA9PT0gJzwnICYmIHByZXZpb3VzX3Rva2VuLnRleHRbMF0gIT09ICcvJykge1xuICAgIC8vIF5eIGVtcHR5IHRhZyBoYXMgbm8gY29udGVudCBcbiAgICB2YXIgdGFnX25hbWUgPSBwcmV2aW91c190b2tlbi5vcGVuZWQudGV4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGFnX25hbWUgPT09ICdzY3JpcHQnIHx8IHRhZ19uYW1lID09PSAnc3R5bGUnKSB7XG4gICAgICAvLyBTY3JpcHQgYW5kIHN0eWxlIHRhZ3MgYXJlIGFsbG93ZWQgdG8gaGF2ZSBjb21tZW50cyB3cmFwcGluZyB0aGVpciBjb250ZW50XG4gICAgICAvLyBvciBqdXN0IGhhdmUgcmVndWxhciBjb250ZW50LlxuICAgICAgdmFyIHRva2VuID0gdGhpcy5fcmVhZF9jb21tZW50X29yX2NkYXRhKGMpO1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIHRva2VuLnR5cGUgPSBUT0tFTi5URVhUO1xuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5faW5wdXQucmVhZFVudGlsKG5ldyBSZWdFeHAoJzwvJyArIHRhZ19uYW1lICsgJ1tcXFxcblxcXFxyXFxcXHQgXSo/PicsICdpZycpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzX2NvbnRlbnRfdW5mb3JtYXR0ZWQodGFnX25hbWUpKSB7XG5cbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9pbnB1dC5yZWFkVW50aWwobmV3IFJlZ0V4cCgnPC8nICsgdGFnX25hbWUgKyAnW1xcXFxuXFxcXHJcXFxcdCBdKj8+JywgJ2lnJykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXN1bHRpbmdfc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5URVhULCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVhZF9jb250ZW50X3dvcmQgPSBmdW5jdGlvbihjKSB7XG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gJyc7XG4gIGlmICh0aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyKSB7XG4gICAgaWYgKGMgPT09IHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXJbMF0pIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIucmVhZCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcmVzdWx0aW5nX3N0cmluZykge1xuICAgIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMud29yZC5yZWFkKCk7XG4gIH1cbiAgaWYgKHJlc3VsdGluZ19zdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlRFWFQsIHJlc3VsdGluZ19zdHJpbmcpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6ZXI7XG5tb2R1bGUuZXhwb3J0cy5UT0tFTiA9IFRPS0VOO1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGpzX2JlYXV0aWZ5ID0gcmVxdWlyZSgnLi9qYXZhc2NyaXB0L2luZGV4Jyk7XG52YXIgY3NzX2JlYXV0aWZ5ID0gcmVxdWlyZSgnLi9jc3MvaW5kZXgnKTtcbnZhciBodG1sX2JlYXV0aWZ5ID0gcmVxdWlyZSgnLi9odG1sL2luZGV4Jyk7XG5cbmZ1bmN0aW9uIHN0eWxlX2h0bWwoaHRtbF9zb3VyY2UsIG9wdGlvbnMsIGpzLCBjc3MpIHtcbiAganMgPSBqcyB8fCBqc19iZWF1dGlmeTtcbiAgY3NzID0gY3NzIHx8IGNzc19iZWF1dGlmeTtcbiAgcmV0dXJuIGh0bWxfYmVhdXRpZnkoaHRtbF9zb3VyY2UsIG9wdGlvbnMsIGpzLCBjc3MpO1xufVxuc3R5bGVfaHRtbC5kZWZhdWx0T3B0aW9ucyA9IGh0bWxfYmVhdXRpZnkuZGVmYXVsdE9wdGlvbnM7XG5cbm1vZHVsZS5leHBvcnRzLmpzID0ganNfYmVhdXRpZnk7XG5tb2R1bGUuZXhwb3J0cy5jc3MgPSBjc3NfYmVhdXRpZnk7XG5tb2R1bGUuZXhwb3J0cy5odG1sID0gc3R5bGVfaHRtbDtcbiIsIi8qIGpzaGludCBub2RlOiB0cnVlLCBjdXJseTogZmFsc2UgKi9cbi8vIFBhcnRzIG9mIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHRha2VuIGZyb20gYWNvcm4uXG4vL1xuLy8gQWNvcm4gd2FzIHdyaXR0ZW4gYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgcmVsZWFzZWQgdW5kZXIgYW4gTUlUXG4vLyBsaWNlbnNlLiBUaGUgVW5pY29kZSByZWdleHBzIChmb3IgaWRlbnRpZmllcnMgYW5kIHdoaXRlc3BhY2UpIHdlcmVcbi8vIHRha2VuIGZyb20gW0VzcHJpbWFdKGh0dHA6Ly9lc3ByaW1hLm9yZykgYnkgQXJpeWEgSGlkYXlhdC5cbi8vXG4vLyBHaXQgcmVwb3NpdG9yaWVzIGZvciBBY29ybiBhcmUgYXZhaWxhYmxlIGF0XG4vL1xuLy8gICAgIGh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2Fjb3JuXG4vLyAgICAgaHR0cHM6Ly9naXRodWIuY29tL21hcmlqbmgvYWNvcm4uZ2l0XG5cbi8vICMjIENoYXJhY3RlciBjYXRlZ29yaWVzXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBhY29ybiB1c2VkIGNoYXIgY29kZXMgdG8gc3F1ZWV6ZSB0aGUgbGFzdCBiaXQgb2YgcGVyZm9ybWFuY2Ugb3V0XG4vLyBCZWF1dGlmaWVyIGlzIG9rYXkgd2l0aG91dCB0aGF0LCBzbyB3ZSdyZSB1c2luZyByZWdleFxuLy8gcGVybWl0ICMgKDIzKSwgJCAoMzYpLCBhbmQgQCAoNjQpLiBAIGlzIHVzZWQgaW4gRVM3IGRlY29yYXRvcnMuXG4vLyA2NSB0aHJvdWdoIDkxIGFyZSB1cHBlcmNhc2UgbGV0dGVycy5cbi8vIHBlcm1pdCBfICg5NSkuXG4vLyA5NyB0aHJvdWdoIDEyMyBhcmUgbG93ZXJjYXNlIGxldHRlcnMuXG52YXIgYmFzZUFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgPSBcIlxcXFx4MjNcXFxceDI0XFxcXHg0MFxcXFx4NDEtXFxcXHg1YVxcXFx4NWZcXFxceDYxLVxcXFx4N2FcIjtcblxuLy8gaW5zaWRlIGFuIGlkZW50aWZpZXIgQCBpcyBub3QgYWxsb3dlZCBidXQgMC05IGFyZS5cbnZhciBiYXNlQVNDSUlpZGVudGlmaWVyQ2hhcnMgPSBcIlxcXFx4MjRcXFxceDMwLVxcXFx4MzlcXFxceDQxLVxcXFx4NWFcXFxceDVmXFxcXHg2MS1cXFxceDdhXCI7XG5cbi8vIEJpZyB1Z2x5IHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBtYXRjaCBjaGFyYWN0ZXJzIGluIHRoZVxuLy8gd2hpdGVzcGFjZSwgaWRlbnRpZmllciwgYW5kIGlkZW50aWZpZXItc3RhcnQgY2F0ZWdvcmllcy4gVGhlc2Vcbi8vIGFyZSBvbmx5IGFwcGxpZWQgd2hlbiBhIGNoYXJhY3RlciBpcyBmb3VuZCB0byBhY3R1YWxseSBoYXZlIGFcbi8vIGNvZGUgcG9pbnQgYWJvdmUgMTI4LlxudmFyIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgPSBcIlxcXFx4YWFcXFxceGI1XFxcXHhiYVxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhmNlxcXFx4ZjgtXFxcXHUwMmMxXFxcXHUwMmM2LVxcXFx1MDJkMVxcXFx1MDJlMC1cXFxcdTAyZTRcXFxcdTAyZWNcXFxcdTAyZWVcXFxcdTAzNzAtXFxcXHUwMzc0XFxcXHUwMzc2XFxcXHUwMzc3XFxcXHUwMzdhLVxcXFx1MDM3ZFxcXFx1MDM4NlxcXFx1MDM4OC1cXFxcdTAzOGFcXFxcdTAzOGNcXFxcdTAzOGUtXFxcXHUwM2ExXFxcXHUwM2EzLVxcXFx1MDNmNVxcXFx1MDNmNy1cXFxcdTA0ODFcXFxcdTA0OGEtXFxcXHUwNTI3XFxcXHUwNTMxLVxcXFx1MDU1NlxcXFx1MDU1OVxcXFx1MDU2MS1cXFxcdTA1ODdcXFxcdTA1ZDAtXFxcXHUwNWVhXFxcXHUwNWYwLVxcXFx1MDVmMlxcXFx1MDYyMC1cXFxcdTA2NGFcXFxcdTA2NmVcXFxcdTA2NmZcXFxcdTA2NzEtXFxcXHUwNmQzXFxcXHUwNmQ1XFxcXHUwNmU1XFxcXHUwNmU2XFxcXHUwNmVlXFxcXHUwNmVmXFxcXHUwNmZhLVxcXFx1MDZmY1xcXFx1MDZmZlxcXFx1MDcxMFxcXFx1MDcxMi1cXFxcdTA3MmZcXFxcdTA3NGQtXFxcXHUwN2E1XFxcXHUwN2IxXFxcXHUwN2NhLVxcXFx1MDdlYVxcXFx1MDdmNFxcXFx1MDdmNVxcXFx1MDdmYVxcXFx1MDgwMC1cXFxcdTA4MTVcXFxcdTA4MWFcXFxcdTA4MjRcXFxcdTA4MjhcXFxcdTA4NDAtXFxcXHUwODU4XFxcXHUwOGEwXFxcXHUwOGEyLVxcXFx1MDhhY1xcXFx1MDkwNC1cXFxcdTA5MzlcXFxcdTA5M2RcXFxcdTA5NTBcXFxcdTA5NTgtXFxcXHUwOTYxXFxcXHUwOTcxLVxcXFx1MDk3N1xcXFx1MDk3OS1cXFxcdTA5N2ZcXFxcdTA5ODUtXFxcXHUwOThjXFxcXHUwOThmXFxcXHUwOTkwXFxcXHUwOTkzLVxcXFx1MDlhOFxcXFx1MDlhYS1cXFxcdTA5YjBcXFxcdTA5YjJcXFxcdTA5YjYtXFxcXHUwOWI5XFxcXHUwOWJkXFxcXHUwOWNlXFxcXHUwOWRjXFxcXHUwOWRkXFxcXHUwOWRmLVxcXFx1MDllMVxcXFx1MDlmMFxcXFx1MDlmMVxcXFx1MGEwNS1cXFxcdTBhMGFcXFxcdTBhMGZcXFxcdTBhMTBcXFxcdTBhMTMtXFxcXHUwYTI4XFxcXHUwYTJhLVxcXFx1MGEzMFxcXFx1MGEzMlxcXFx1MGEzM1xcXFx1MGEzNVxcXFx1MGEzNlxcXFx1MGEzOFxcXFx1MGEzOVxcXFx1MGE1OS1cXFxcdTBhNWNcXFxcdTBhNWVcXFxcdTBhNzItXFxcXHUwYTc0XFxcXHUwYTg1LVxcXFx1MGE4ZFxcXFx1MGE4Zi1cXFxcdTBhOTFcXFxcdTBhOTMtXFxcXHUwYWE4XFxcXHUwYWFhLVxcXFx1MGFiMFxcXFx1MGFiMlxcXFx1MGFiM1xcXFx1MGFiNS1cXFxcdTBhYjlcXFxcdTBhYmRcXFxcdTBhZDBcXFxcdTBhZTBcXFxcdTBhZTFcXFxcdTBiMDUtXFxcXHUwYjBjXFxcXHUwYjBmXFxcXHUwYjEwXFxcXHUwYjEzLVxcXFx1MGIyOFxcXFx1MGIyYS1cXFxcdTBiMzBcXFxcdTBiMzJcXFxcdTBiMzNcXFxcdTBiMzUtXFxcXHUwYjM5XFxcXHUwYjNkXFxcXHUwYjVjXFxcXHUwYjVkXFxcXHUwYjVmLVxcXFx1MGI2MVxcXFx1MGI3MVxcXFx1MGI4M1xcXFx1MGI4NS1cXFxcdTBiOGFcXFxcdTBiOGUtXFxcXHUwYjkwXFxcXHUwYjkyLVxcXFx1MGI5NVxcXFx1MGI5OVxcXFx1MGI5YVxcXFx1MGI5Y1xcXFx1MGI5ZVxcXFx1MGI5ZlxcXFx1MGJhM1xcXFx1MGJhNFxcXFx1MGJhOC1cXFxcdTBiYWFcXFxcdTBiYWUtXFxcXHUwYmI5XFxcXHUwYmQwXFxcXHUwYzA1LVxcXFx1MGMwY1xcXFx1MGMwZS1cXFxcdTBjMTBcXFxcdTBjMTItXFxcXHUwYzI4XFxcXHUwYzJhLVxcXFx1MGMzM1xcXFx1MGMzNS1cXFxcdTBjMzlcXFxcdTBjM2RcXFxcdTBjNThcXFxcdTBjNTlcXFxcdTBjNjBcXFxcdTBjNjFcXFxcdTBjODUtXFxcXHUwYzhjXFxcXHUwYzhlLVxcXFx1MGM5MFxcXFx1MGM5Mi1cXFxcdTBjYThcXFxcdTBjYWEtXFxcXHUwY2IzXFxcXHUwY2I1LVxcXFx1MGNiOVxcXFx1MGNiZFxcXFx1MGNkZVxcXFx1MGNlMFxcXFx1MGNlMVxcXFx1MGNmMVxcXFx1MGNmMlxcXFx1MGQwNS1cXFxcdTBkMGNcXFxcdTBkMGUtXFxcXHUwZDEwXFxcXHUwZDEyLVxcXFx1MGQzYVxcXFx1MGQzZFxcXFx1MGQ0ZVxcXFx1MGQ2MFxcXFx1MGQ2MVxcXFx1MGQ3YS1cXFxcdTBkN2ZcXFxcdTBkODUtXFxcXHUwZDk2XFxcXHUwZDlhLVxcXFx1MGRiMVxcXFx1MGRiMy1cXFxcdTBkYmJcXFxcdTBkYmRcXFxcdTBkYzAtXFxcXHUwZGM2XFxcXHUwZTAxLVxcXFx1MGUzMFxcXFx1MGUzMlxcXFx1MGUzM1xcXFx1MGU0MC1cXFxcdTBlNDZcXFxcdTBlODFcXFxcdTBlODJcXFxcdTBlODRcXFxcdTBlODdcXFxcdTBlODhcXFxcdTBlOGFcXFxcdTBlOGRcXFxcdTBlOTQtXFxcXHUwZTk3XFxcXHUwZTk5LVxcXFx1MGU5ZlxcXFx1MGVhMS1cXFxcdTBlYTNcXFxcdTBlYTVcXFxcdTBlYTdcXFxcdTBlYWFcXFxcdTBlYWJcXFxcdTBlYWQtXFxcXHUwZWIwXFxcXHUwZWIyXFxcXHUwZWIzXFxcXHUwZWJkXFxcXHUwZWMwLVxcXFx1MGVjNFxcXFx1MGVjNlxcXFx1MGVkYy1cXFxcdTBlZGZcXFxcdTBmMDBcXFxcdTBmNDAtXFxcXHUwZjQ3XFxcXHUwZjQ5LVxcXFx1MGY2Y1xcXFx1MGY4OC1cXFxcdTBmOGNcXFxcdTEwMDAtXFxcXHUxMDJhXFxcXHUxMDNmXFxcXHUxMDUwLVxcXFx1MTA1NVxcXFx1MTA1YS1cXFxcdTEwNWRcXFxcdTEwNjFcXFxcdTEwNjVcXFxcdTEwNjZcXFxcdTEwNmUtXFxcXHUxMDcwXFxcXHUxMDc1LVxcXFx1MTA4MVxcXFx1MTA4ZVxcXFx1MTBhMC1cXFxcdTEwYzVcXFxcdTEwYzdcXFxcdTEwY2RcXFxcdTEwZDAtXFxcXHUxMGZhXFxcXHUxMGZjLVxcXFx1MTI0OFxcXFx1MTI0YS1cXFxcdTEyNGRcXFxcdTEyNTAtXFxcXHUxMjU2XFxcXHUxMjU4XFxcXHUxMjVhLVxcXFx1MTI1ZFxcXFx1MTI2MC1cXFxcdTEyODhcXFxcdTEyOGEtXFxcXHUxMjhkXFxcXHUxMjkwLVxcXFx1MTJiMFxcXFx1MTJiMi1cXFxcdTEyYjVcXFxcdTEyYjgtXFxcXHUxMmJlXFxcXHUxMmMwXFxcXHUxMmMyLVxcXFx1MTJjNVxcXFx1MTJjOC1cXFxcdTEyZDZcXFxcdTEyZDgtXFxcXHUxMzEwXFxcXHUxMzEyLVxcXFx1MTMxNVxcXFx1MTMxOC1cXFxcdTEzNWFcXFxcdTEzODAtXFxcXHUxMzhmXFxcXHUxM2EwLVxcXFx1MTNmNFxcXFx1MTQwMS1cXFxcdTE2NmNcXFxcdTE2NmYtXFxcXHUxNjdmXFxcXHUxNjgxLVxcXFx1MTY5YVxcXFx1MTZhMC1cXFxcdTE2ZWFcXFxcdTE2ZWUtXFxcXHUxNmYwXFxcXHUxNzAwLVxcXFx1MTcwY1xcXFx1MTcwZS1cXFxcdTE3MTFcXFxcdTE3MjAtXFxcXHUxNzMxXFxcXHUxNzQwLVxcXFx1MTc1MVxcXFx1MTc2MC1cXFxcdTE3NmNcXFxcdTE3NmUtXFxcXHUxNzcwXFxcXHUxNzgwLVxcXFx1MTdiM1xcXFx1MTdkN1xcXFx1MTdkY1xcXFx1MTgyMC1cXFxcdTE4NzdcXFxcdTE4ODAtXFxcXHUxOGE4XFxcXHUxOGFhXFxcXHUxOGIwLVxcXFx1MThmNVxcXFx1MTkwMC1cXFxcdTE5MWNcXFxcdTE5NTAtXFxcXHUxOTZkXFxcXHUxOTcwLVxcXFx1MTk3NFxcXFx1MTk4MC1cXFxcdTE5YWJcXFxcdTE5YzEtXFxcXHUxOWM3XFxcXHUxYTAwLVxcXFx1MWExNlxcXFx1MWEyMC1cXFxcdTFhNTRcXFxcdTFhYTdcXFxcdTFiMDUtXFxcXHUxYjMzXFxcXHUxYjQ1LVxcXFx1MWI0YlxcXFx1MWI4My1cXFxcdTFiYTBcXFxcdTFiYWVcXFxcdTFiYWZcXFxcdTFiYmEtXFxcXHUxYmU1XFxcXHUxYzAwLVxcXFx1MWMyM1xcXFx1MWM0ZC1cXFxcdTFjNGZcXFxcdTFjNWEtXFxcXHUxYzdkXFxcXHUxY2U5LVxcXFx1MWNlY1xcXFx1MWNlZS1cXFxcdTFjZjFcXFxcdTFjZjVcXFxcdTFjZjZcXFxcdTFkMDAtXFxcXHUxZGJmXFxcXHUxZTAwLVxcXFx1MWYxNVxcXFx1MWYxOC1cXFxcdTFmMWRcXFxcdTFmMjAtXFxcXHUxZjQ1XFxcXHUxZjQ4LVxcXFx1MWY0ZFxcXFx1MWY1MC1cXFxcdTFmNTdcXFxcdTFmNTlcXFxcdTFmNWJcXFxcdTFmNWRcXFxcdTFmNWYtXFxcXHUxZjdkXFxcXHUxZjgwLVxcXFx1MWZiNFxcXFx1MWZiNi1cXFxcdTFmYmNcXFxcdTFmYmVcXFxcdTFmYzItXFxcXHUxZmM0XFxcXHUxZmM2LVxcXFx1MWZjY1xcXFx1MWZkMC1cXFxcdTFmZDNcXFxcdTFmZDYtXFxcXHUxZmRiXFxcXHUxZmUwLVxcXFx1MWZlY1xcXFx1MWZmMi1cXFxcdTFmZjRcXFxcdTFmZjYtXFxcXHUxZmZjXFxcXHUyMDcxXFxcXHUyMDdmXFxcXHUyMDkwLVxcXFx1MjA5Y1xcXFx1MjEwMlxcXFx1MjEwN1xcXFx1MjEwYS1cXFxcdTIxMTNcXFxcdTIxMTVcXFxcdTIxMTktXFxcXHUyMTFkXFxcXHUyMTI0XFxcXHUyMTI2XFxcXHUyMTI4XFxcXHUyMTJhLVxcXFx1MjEyZFxcXFx1MjEyZi1cXFxcdTIxMzlcXFxcdTIxM2MtXFxcXHUyMTNmXFxcXHUyMTQ1LVxcXFx1MjE0OVxcXFx1MjE0ZVxcXFx1MjE2MC1cXFxcdTIxODhcXFxcdTJjMDAtXFxcXHUyYzJlXFxcXHUyYzMwLVxcXFx1MmM1ZVxcXFx1MmM2MC1cXFxcdTJjZTRcXFxcdTJjZWItXFxcXHUyY2VlXFxcXHUyY2YyXFxcXHUyY2YzXFxcXHUyZDAwLVxcXFx1MmQyNVxcXFx1MmQyN1xcXFx1MmQyZFxcXFx1MmQzMC1cXFxcdTJkNjdcXFxcdTJkNmZcXFxcdTJkODAtXFxcXHUyZDk2XFxcXHUyZGEwLVxcXFx1MmRhNlxcXFx1MmRhOC1cXFxcdTJkYWVcXFxcdTJkYjAtXFxcXHUyZGI2XFxcXHUyZGI4LVxcXFx1MmRiZVxcXFx1MmRjMC1cXFxcdTJkYzZcXFxcdTJkYzgtXFxcXHUyZGNlXFxcXHUyZGQwLVxcXFx1MmRkNlxcXFx1MmRkOC1cXFxcdTJkZGVcXFxcdTJlMmZcXFxcdTMwMDUtXFxcXHUzMDA3XFxcXHUzMDIxLVxcXFx1MzAyOVxcXFx1MzAzMS1cXFxcdTMwMzVcXFxcdTMwMzgtXFxcXHUzMDNjXFxcXHUzMDQxLVxcXFx1MzA5NlxcXFx1MzA5ZC1cXFxcdTMwOWZcXFxcdTMwYTEtXFxcXHUzMGZhXFxcXHUzMGZjLVxcXFx1MzBmZlxcXFx1MzEwNS1cXFxcdTMxMmRcXFxcdTMxMzEtXFxcXHUzMThlXFxcXHUzMWEwLVxcXFx1MzFiYVxcXFx1MzFmMC1cXFxcdTMxZmZcXFxcdTM0MDAtXFxcXHU0ZGI1XFxcXHU0ZTAwLVxcXFx1OWZjY1xcXFx1YTAwMC1cXFxcdWE0OGNcXFxcdWE0ZDAtXFxcXHVhNGZkXFxcXHVhNTAwLVxcXFx1YTYwY1xcXFx1YTYxMC1cXFxcdWE2MWZcXFxcdWE2MmFcXFxcdWE2MmJcXFxcdWE2NDAtXFxcXHVhNjZlXFxcXHVhNjdmLVxcXFx1YTY5N1xcXFx1YTZhMC1cXFxcdWE2ZWZcXFxcdWE3MTctXFxcXHVhNzFmXFxcXHVhNzIyLVxcXFx1YTc4OFxcXFx1YTc4Yi1cXFxcdWE3OGVcXFxcdWE3OTAtXFxcXHVhNzkzXFxcXHVhN2EwLVxcXFx1YTdhYVxcXFx1YTdmOC1cXFxcdWE4MDFcXFxcdWE4MDMtXFxcXHVhODA1XFxcXHVhODA3LVxcXFx1YTgwYVxcXFx1YTgwYy1cXFxcdWE4MjJcXFxcdWE4NDAtXFxcXHVhODczXFxcXHVhODgyLVxcXFx1YThiM1xcXFx1YThmMi1cXFxcdWE4ZjdcXFxcdWE4ZmJcXFxcdWE5MGEtXFxcXHVhOTI1XFxcXHVhOTMwLVxcXFx1YTk0NlxcXFx1YTk2MC1cXFxcdWE5N2NcXFxcdWE5ODQtXFxcXHVhOWIyXFxcXHVhOWNmXFxcXHVhYTAwLVxcXFx1YWEyOFxcXFx1YWE0MC1cXFxcdWFhNDJcXFxcdWFhNDQtXFxcXHVhYTRiXFxcXHVhYTYwLVxcXFx1YWE3NlxcXFx1YWE3YVxcXFx1YWE4MC1cXFxcdWFhYWZcXFxcdWFhYjFcXFxcdWFhYjVcXFxcdWFhYjZcXFxcdWFhYjktXFxcXHVhYWJkXFxcXHVhYWMwXFxcXHVhYWMyXFxcXHVhYWRiLVxcXFx1YWFkZFxcXFx1YWFlMC1cXFxcdWFhZWFcXFxcdWFhZjItXFxcXHVhYWY0XFxcXHVhYjAxLVxcXFx1YWIwNlxcXFx1YWIwOS1cXFxcdWFiMGVcXFxcdWFiMTEtXFxcXHVhYjE2XFxcXHVhYjIwLVxcXFx1YWIyNlxcXFx1YWIyOC1cXFxcdWFiMmVcXFxcdWFiYzAtXFxcXHVhYmUyXFxcXHVhYzAwLVxcXFx1ZDdhM1xcXFx1ZDdiMC1cXFxcdWQ3YzZcXFxcdWQ3Y2ItXFxcXHVkN2ZiXFxcXHVmOTAwLVxcXFx1ZmE2ZFxcXFx1ZmE3MC1cXFxcdWZhZDlcXFxcdWZiMDAtXFxcXHVmYjA2XFxcXHVmYjEzLVxcXFx1ZmIxN1xcXFx1ZmIxZFxcXFx1ZmIxZi1cXFxcdWZiMjhcXFxcdWZiMmEtXFxcXHVmYjM2XFxcXHVmYjM4LVxcXFx1ZmIzY1xcXFx1ZmIzZVxcXFx1ZmI0MFxcXFx1ZmI0MVxcXFx1ZmI0M1xcXFx1ZmI0NFxcXFx1ZmI0Ni1cXFxcdWZiYjFcXFxcdWZiZDMtXFxcXHVmZDNkXFxcXHVmZDUwLVxcXFx1ZmQ4ZlxcXFx1ZmQ5Mi1cXFxcdWZkYzdcXFxcdWZkZjAtXFxcXHVmZGZiXFxcXHVmZTcwLVxcXFx1ZmU3NFxcXFx1ZmU3Ni1cXFxcdWZlZmNcXFxcdWZmMjEtXFxcXHVmZjNhXFxcXHVmZjQxLVxcXFx1ZmY1YVxcXFx1ZmY2Ni1cXFxcdWZmYmVcXFxcdWZmYzItXFxcXHVmZmM3XFxcXHVmZmNhLVxcXFx1ZmZjZlxcXFx1ZmZkMi1cXFxcdWZmZDdcXFxcdWZmZGEtXFxcXHVmZmRjXCI7XG52YXIgbm9uQVNDSUlpZGVudGlmaWVyQ2hhcnMgPSBcIlxcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdTA0ODMtXFxcXHUwNDg3XFxcXHUwNTkxLVxcXFx1MDViZFxcXFx1MDViZlxcXFx1MDVjMVxcXFx1MDVjMlxcXFx1MDVjNFxcXFx1MDVjNVxcXFx1MDVjN1xcXFx1MDYxMC1cXFxcdTA2MWFcXFxcdTA2MjAtXFxcXHUwNjQ5XFxcXHUwNjcyLVxcXFx1MDZkM1xcXFx1MDZlNy1cXFxcdTA2ZThcXFxcdTA2ZmItXFxcXHUwNmZjXFxcXHUwNzMwLVxcXFx1MDc0YVxcXFx1MDgwMC1cXFxcdTA4MTRcXFxcdTA4MWItXFxcXHUwODIzXFxcXHUwODI1LVxcXFx1MDgyN1xcXFx1MDgyOS1cXFxcdTA4MmRcXFxcdTA4NDAtXFxcXHUwODU3XFxcXHUwOGU0LVxcXFx1MDhmZVxcXFx1MDkwMC1cXFxcdTA5MDNcXFxcdTA5M2EtXFxcXHUwOTNjXFxcXHUwOTNlLVxcXFx1MDk0ZlxcXFx1MDk1MS1cXFxcdTA5NTdcXFxcdTA5NjItXFxcXHUwOTYzXFxcXHUwOTY2LVxcXFx1MDk2ZlxcXFx1MDk4MS1cXFxcdTA5ODNcXFxcdTA5YmNcXFxcdTA5YmUtXFxcXHUwOWM0XFxcXHUwOWM3XFxcXHUwOWM4XFxcXHUwOWQ3XFxcXHUwOWRmLVxcXFx1MDllMFxcXFx1MGEwMS1cXFxcdTBhMDNcXFxcdTBhM2NcXFxcdTBhM2UtXFxcXHUwYTQyXFxcXHUwYTQ3XFxcXHUwYTQ4XFxcXHUwYTRiLVxcXFx1MGE0ZFxcXFx1MGE1MVxcXFx1MGE2Ni1cXFxcdTBhNzFcXFxcdTBhNzVcXFxcdTBhODEtXFxcXHUwYTgzXFxcXHUwYWJjXFxcXHUwYWJlLVxcXFx1MGFjNVxcXFx1MGFjNy1cXFxcdTBhYzlcXFxcdTBhY2ItXFxcXHUwYWNkXFxcXHUwYWUyLVxcXFx1MGFlM1xcXFx1MGFlNi1cXFxcdTBhZWZcXFxcdTBiMDEtXFxcXHUwYjAzXFxcXHUwYjNjXFxcXHUwYjNlLVxcXFx1MGI0NFxcXFx1MGI0N1xcXFx1MGI0OFxcXFx1MGI0Yi1cXFxcdTBiNGRcXFxcdTBiNTZcXFxcdTBiNTdcXFxcdTBiNWYtXFxcXHUwYjYwXFxcXHUwYjY2LVxcXFx1MGI2ZlxcXFx1MGI4MlxcXFx1MGJiZS1cXFxcdTBiYzJcXFxcdTBiYzYtXFxcXHUwYmM4XFxcXHUwYmNhLVxcXFx1MGJjZFxcXFx1MGJkN1xcXFx1MGJlNi1cXFxcdTBiZWZcXFxcdTBjMDEtXFxcXHUwYzAzXFxcXHUwYzQ2LVxcXFx1MGM0OFxcXFx1MGM0YS1cXFxcdTBjNGRcXFxcdTBjNTVcXFxcdTBjNTZcXFxcdTBjNjItXFxcXHUwYzYzXFxcXHUwYzY2LVxcXFx1MGM2ZlxcXFx1MGM4MlxcXFx1MGM4M1xcXFx1MGNiY1xcXFx1MGNiZS1cXFxcdTBjYzRcXFxcdTBjYzYtXFxcXHUwY2M4XFxcXHUwY2NhLVxcXFx1MGNjZFxcXFx1MGNkNVxcXFx1MGNkNlxcXFx1MGNlMi1cXFxcdTBjZTNcXFxcdTBjZTYtXFxcXHUwY2VmXFxcXHUwZDAyXFxcXHUwZDAzXFxcXHUwZDQ2LVxcXFx1MGQ0OFxcXFx1MGQ1N1xcXFx1MGQ2Mi1cXFxcdTBkNjNcXFxcdTBkNjYtXFxcXHUwZDZmXFxcXHUwZDgyXFxcXHUwZDgzXFxcXHUwZGNhXFxcXHUwZGNmLVxcXFx1MGRkNFxcXFx1MGRkNlxcXFx1MGRkOC1cXFxcdTBkZGZcXFxcdTBkZjJcXFxcdTBkZjNcXFxcdTBlMzQtXFxcXHUwZTNhXFxcXHUwZTQwLVxcXFx1MGU0NVxcXFx1MGU1MC1cXFxcdTBlNTlcXFxcdTBlYjQtXFxcXHUwZWI5XFxcXHUwZWM4LVxcXFx1MGVjZFxcXFx1MGVkMC1cXFxcdTBlZDlcXFxcdTBmMThcXFxcdTBmMTlcXFxcdTBmMjAtXFxcXHUwZjI5XFxcXHUwZjM1XFxcXHUwZjM3XFxcXHUwZjM5XFxcXHUwZjQxLVxcXFx1MGY0N1xcXFx1MGY3MS1cXFxcdTBmODRcXFxcdTBmODYtXFxcXHUwZjg3XFxcXHUwZjhkLVxcXFx1MGY5N1xcXFx1MGY5OS1cXFxcdTBmYmNcXFxcdTBmYzZcXFxcdTEwMDAtXFxcXHUxMDI5XFxcXHUxMDQwLVxcXFx1MTA0OVxcXFx1MTA2Ny1cXFxcdTEwNmRcXFxcdTEwNzEtXFxcXHUxMDc0XFxcXHUxMDgyLVxcXFx1MTA4ZFxcXFx1MTA4Zi1cXFxcdTEwOWRcXFxcdTEzNWQtXFxcXHUxMzVmXFxcXHUxNzBlLVxcXFx1MTcxMFxcXFx1MTcyMC1cXFxcdTE3MzBcXFxcdTE3NDAtXFxcXHUxNzUwXFxcXHUxNzcyXFxcXHUxNzczXFxcXHUxNzgwLVxcXFx1MTdiMlxcXFx1MTdkZFxcXFx1MTdlMC1cXFxcdTE3ZTlcXFxcdTE4MGItXFxcXHUxODBkXFxcXHUxODEwLVxcXFx1MTgxOVxcXFx1MTkyMC1cXFxcdTE5MmJcXFxcdTE5MzAtXFxcXHUxOTNiXFxcXHUxOTUxLVxcXFx1MTk2ZFxcXFx1MTliMC1cXFxcdTE5YzBcXFxcdTE5YzgtXFxcXHUxOWM5XFxcXHUxOWQwLVxcXFx1MTlkOVxcXFx1MWEwMC1cXFxcdTFhMTVcXFxcdTFhMjAtXFxcXHUxYTUzXFxcXHUxYTYwLVxcXFx1MWE3Y1xcXFx1MWE3Zi1cXFxcdTFhODlcXFxcdTFhOTAtXFxcXHUxYTk5XFxcXHUxYjQ2LVxcXFx1MWI0YlxcXFx1MWI1MC1cXFxcdTFiNTlcXFxcdTFiNmItXFxcXHUxYjczXFxcXHUxYmIwLVxcXFx1MWJiOVxcXFx1MWJlNi1cXFxcdTFiZjNcXFxcdTFjMDAtXFxcXHUxYzIyXFxcXHUxYzQwLVxcXFx1MWM0OVxcXFx1MWM1Yi1cXFxcdTFjN2RcXFxcdTFjZDAtXFxcXHUxY2QyXFxcXHUxZDAwLVxcXFx1MWRiZVxcXFx1MWUwMS1cXFxcdTFmMTVcXFxcdTIwMGNcXFxcdTIwMGRcXFxcdTIwM2ZcXFxcdTIwNDBcXFxcdTIwNTRcXFxcdTIwZDAtXFxcXHUyMGRjXFxcXHUyMGUxXFxcXHUyMGU1LVxcXFx1MjBmMFxcXFx1MmQ4MS1cXFxcdTJkOTZcXFxcdTJkZTAtXFxcXHUyZGZmXFxcXHUzMDIxLVxcXFx1MzAyOFxcXFx1MzA5OVxcXFx1MzA5YVxcXFx1YTY0MC1cXFxcdWE2NmRcXFxcdWE2NzQtXFxcXHVhNjdkXFxcXHVhNjlmXFxcXHVhNmYwLVxcXFx1YTZmMVxcXFx1YTdmOC1cXFxcdWE4MDBcXFxcdWE4MDZcXFxcdWE4MGJcXFxcdWE4MjMtXFxcXHVhODI3XFxcXHVhODgwLVxcXFx1YTg4MVxcXFx1YThiNC1cXFxcdWE4YzRcXFxcdWE4ZDAtXFxcXHVhOGQ5XFxcXHVhOGYzLVxcXFx1YThmN1xcXFx1YTkwMC1cXFxcdWE5MDlcXFxcdWE5MjYtXFxcXHVhOTJkXFxcXHVhOTMwLVxcXFx1YTk0NVxcXFx1YTk4MC1cXFxcdWE5ODNcXFxcdWE5YjMtXFxcXHVhOWMwXFxcXHVhYTAwLVxcXFx1YWEyN1xcXFx1YWE0MC1cXFxcdWFhNDFcXFxcdWFhNGMtXFxcXHVhYTRkXFxcXHVhYTUwLVxcXFx1YWE1OVxcXFx1YWE3YlxcXFx1YWFlMC1cXFxcdWFhZTlcXFxcdWFhZjItXFxcXHVhYWYzXFxcXHVhYmMwLVxcXFx1YWJlMVxcXFx1YWJlY1xcXFx1YWJlZFxcXFx1YWJmMC1cXFxcdWFiZjlcXFxcdWZiMjAtXFxcXHVmYjI4XFxcXHVmZTAwLVxcXFx1ZmUwZlxcXFx1ZmUyMC1cXFxcdWZlMjZcXFxcdWZlMzNcXFxcdWZlMzRcXFxcdWZlNGQtXFxcXHVmZTRmXFxcXHVmZjEwLVxcXFx1ZmYxOVxcXFx1ZmYzZlwiO1xuLy92YXIgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnQgPSBuZXcgUmVnRXhwKFwiW1wiICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyArIFwiXVwiKTtcbi8vdmFyIG5vbkFTQ0lJaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoXCJbXCIgKyBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzICsgbm9uQVNDSUlpZGVudGlmaWVyQ2hhcnMgKyBcIl1cIik7XG5cbnZhciBpZGVudGlmaWVyU3RhcnQgPSBcIig/OlxcXFxcXFxcdVswLTlhLWZBLUZdezR9fFtcIiArIGJhc2VBU0NJSWlkZW50aWZpZXJTdGFydENoYXJzICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyArIFwiXSlcIjtcbnZhciBpZGVudGlmaWVyQ2hhcnMgPSBcIig/OlxcXFxcXFxcdVswLTlhLWZBLUZdezR9fFtcIiArIGJhc2VBU0NJSWlkZW50aWZpZXJDaGFycyArIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgKyBub25BU0NJSWlkZW50aWZpZXJDaGFycyArIFwiXSkqXCI7XG5cbmV4cG9ydHMuaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoaWRlbnRpZmllclN0YXJ0ICsgaWRlbnRpZmllckNoYXJzLCAnZycpO1xuZXhwb3J0cy5pZGVudGlmaWVyU3RhcnQgPSBuZXcgUmVnRXhwKGlkZW50aWZpZXJTdGFydCk7XG5leHBvcnRzLmlkZW50aWZpZXJNYXRjaCA9IG5ldyBSZWdFeHAoXCIoPzpcXFxcXFxcXHVbMC05YS1mQS1GXXs0fXxbXCIgKyBiYXNlQVNDSUlpZGVudGlmaWVyQ2hhcnMgKyBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzICsgbm9uQVNDSUlpZGVudGlmaWVyQ2hhcnMgKyBcIl0pK1wiKTtcblxudmFyIG5vbkFTQ0lJd2hpdGVzcGFjZSA9IC9bXFx1MTY4MFxcdTE4MGVcXHUyMDAwLVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHVmZWZmXS87IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG4vLyBXaGV0aGVyIGEgc2luZ2xlIGNoYXJhY3RlciBkZW5vdGVzIGEgbmV3bGluZS5cblxuZXhwb3J0cy5uZXdsaW5lID0gL1tcXG5cXHJcXHUyMDI4XFx1MjAyOV0vO1xuXG4vLyBNYXRjaGVzIGEgd2hvbGUgbGluZSBicmVhayAod2hlcmUgQ1JMRiBpcyBjb25zaWRlcmVkIGEgc2luZ2xlXG4vLyBsaW5lIGJyZWFrKS4gVXNlZCB0byBjb3VudCBsaW5lcy5cblxuLy8gaW4gamF2YXNjcmlwdCwgdGhlc2UgdHdvIGRpZmZlclxuLy8gaW4gcHl0aG9uIHRoZXkgYXJlIHRoZSBzYW1lLCBkaWZmZXJlbnQgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZW1cbmV4cG9ydHMubGluZUJyZWFrID0gbmV3IFJlZ0V4cCgnXFxyXFxufCcgKyBleHBvcnRzLm5ld2xpbmUuc291cmNlKTtcbmV4cG9ydHMuYWxsTGluZUJyZWFrcyA9IG5ldyBSZWdFeHAoZXhwb3J0cy5saW5lQnJlYWsuc291cmNlLCAnZycpO1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIE91dHB1dCA9IHJlcXVpcmUoJy4uL2NvcmUvb3V0cHV0JykuT3V0cHV0O1xudmFyIFRva2VuID0gcmVxdWlyZSgnLi4vY29yZS90b2tlbicpLlRva2VuO1xudmFyIGFjb3JuID0gcmVxdWlyZSgnLi9hY29ybicpO1xudmFyIE9wdGlvbnMgPSByZXF1aXJlKCcuL29wdGlvbnMnKS5PcHRpb25zO1xudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4vdG9rZW5pemVyJykuVG9rZW5pemVyO1xudmFyIGxpbmVfc3RhcnRlcnMgPSByZXF1aXJlKCcuL3Rva2VuaXplcicpLmxpbmVfc3RhcnRlcnM7XG52YXIgcG9zaXRpb25hYmxlX29wZXJhdG9ycyA9IHJlcXVpcmUoJy4vdG9rZW5pemVyJykucG9zaXRpb25hYmxlX29wZXJhdG9ycztcbnZhciBUT0tFTiA9IHJlcXVpcmUoJy4vdG9rZW5pemVyJykuVE9LRU47XG5cblxuZnVuY3Rpb24gaW5fYXJyYXkod2hhdCwgYXJyKSB7XG4gIHJldHVybiBhcnIuaW5kZXhPZih3aGF0KSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGx0cmltKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvXlxccysvZywgJycpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU1hcEZyb21TdHJpbmdzKGxpc3QpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmb3IgKHZhciB4ID0gMDsgeCA8IGxpc3QubGVuZ3RoOyB4KyspIHtcbiAgICAvLyBtYWtlIHRoZSBtYXBwZWQgbmFtZXMgdW5kZXJzY29yZWQgaW5zdGVhZCBvZiBkYXNoXG4gICAgcmVzdWx0W2xpc3RbeF0ucmVwbGFjZSgvLS9nLCAnXycpXSA9IGxpc3RbeF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVzZXJ2ZWRfd29yZCh0b2tlbiwgd29yZCkge1xuICByZXR1cm4gdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gVE9LRU4uUkVTRVJWRUQgJiYgdG9rZW4udGV4dCA9PT0gd29yZDtcbn1cblxuZnVuY3Rpb24gcmVzZXJ2ZWRfYXJyYXkodG9rZW4sIHdvcmRzKSB7XG4gIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlID09PSBUT0tFTi5SRVNFUlZFRCAmJiBpbl9hcnJheSh0b2tlbi50ZXh0LCB3b3Jkcyk7XG59XG4vLyBVbnN1cmUgb2Ygd2hhdCB0aGV5IG1lYW4sIGJ1dCB0aGV5IHdvcmsuIFdvcnRoIGNsZWFuaW5nIHVwIGluIGZ1dHVyZS5cbnZhciBzcGVjaWFsX3dvcmRzID0gWydjYXNlJywgJ3JldHVybicsICdkbycsICdpZicsICd0aHJvdycsICdlbHNlJywgJ2F3YWl0JywgJ2JyZWFrJywgJ2NvbnRpbnVlJywgJ2FzeW5jJ107XG5cbnZhciB2YWxpZFBvc2l0aW9uVmFsdWVzID0gWydiZWZvcmUtbmV3bGluZScsICdhZnRlci1uZXdsaW5lJywgJ3ByZXNlcnZlLW5ld2xpbmUnXTtcblxuLy8gR2VuZXJhdGUgbWFwIGZyb20gYXJyYXlcbnZhciBPUEVSQVRPUl9QT1NJVElPTiA9IGdlbmVyYXRlTWFwRnJvbVN0cmluZ3ModmFsaWRQb3NpdGlvblZhbHVlcyk7XG5cbnZhciBPUEVSQVRPUl9QT1NJVElPTl9CRUZPUkVfT1JfUFJFU0VSVkUgPSBbT1BFUkFUT1JfUE9TSVRJT04uYmVmb3JlX25ld2xpbmUsIE9QRVJBVE9SX1BPU0lUSU9OLnByZXNlcnZlX25ld2xpbmVdO1xuXG52YXIgTU9ERSA9IHtcbiAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsIC8vICdCTE9DSydcbiAgU3RhdGVtZW50OiAnU3RhdGVtZW50JywgLy8gJ1NUQVRFTUVOVCdcbiAgT2JqZWN0TGl0ZXJhbDogJ09iamVjdExpdGVyYWwnLCAvLyAnT0JKRUNUJyxcbiAgQXJyYXlMaXRlcmFsOiAnQXJyYXlMaXRlcmFsJywgLy8nW0VYUFJFU1NJT05dJyxcbiAgRm9ySW5pdGlhbGl6ZXI6ICdGb3JJbml0aWFsaXplcicsIC8vJyhGT1ItRVhQUkVTU0lPTiknLFxuICBDb25kaXRpb25hbDogJ0NvbmRpdGlvbmFsJywgLy8nKENPTkQtRVhQUkVTU0lPTiknLFxuICBFeHByZXNzaW9uOiAnRXhwcmVzc2lvbicgLy8nKEVYUFJFU1NJT04pJ1xufTtcblxuZnVuY3Rpb24gcmVtb3ZlX3JlZHVuZGFudF9pbmRlbnRhdGlvbihvdXRwdXQsIGZyYW1lKSB7XG4gIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgZWZmZWN0aXZlIGJ1dCBoYXMgc29tZSBpc3N1ZXM6XG4gIC8vICAgICAtIGNhbiBjYXVzZSBsaW5lIHdyYXAgdG8gaGFwcGVuIHRvbyBzb29uIGR1ZSB0byBpbmRlbnQgcmVtb3ZhbFxuICAvLyAgICAgICAgICAgYWZ0ZXIgd3JhcCBwb2ludHMgYXJlIGNhbGN1bGF0ZWRcbiAgLy8gVGhlc2UgaXNzdWVzIGFyZSBtaW5vciBjb21wYXJlZCB0byB1Z2x5IGluZGVudGF0aW9uLlxuXG4gIGlmIChmcmFtZS5tdWx0aWxpbmVfZnJhbWUgfHxcbiAgICBmcmFtZS5tb2RlID09PSBNT0RFLkZvckluaXRpYWxpemVyIHx8XG4gICAgZnJhbWUubW9kZSA9PT0gTU9ERS5Db25kaXRpb25hbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHJlbW92ZSBvbmUgaW5kZW50IGZyb20gZWFjaCBsaW5lIGluc2lkZSB0aGlzIHNlY3Rpb25cbiAgb3V0cHV0LnJlbW92ZV9pbmRlbnQoZnJhbWUuc3RhcnRfbGluZV9pbmRleCk7XG59XG5cbi8vIHdlIGNvdWxkIHVzZSBqdXN0IHN0cmluZy5zcGxpdCwgYnV0XG4vLyBJRSBkb2Vzbid0IGxpa2UgcmV0dXJuaW5nIGVtcHR5IHN0cmluZ3NcbmZ1bmN0aW9uIHNwbGl0X2xpbmVicmVha3Mocykge1xuICAvL3JldHVybiBzLnNwbGl0KC9cXHgwZFxceDBhfFxceDBhLyk7XG5cbiAgcyA9IHMucmVwbGFjZShhY29ybi5hbGxMaW5lQnJlYWtzLCAnXFxuJyk7XG4gIHZhciBvdXQgPSBbXSxcbiAgICBpZHggPSBzLmluZGV4T2YoXCJcXG5cIik7XG4gIHdoaWxlIChpZHggIT09IC0xKSB7XG4gICAgb3V0LnB1c2gocy5zdWJzdHJpbmcoMCwgaWR4KSk7XG4gICAgcyA9IHMuc3Vic3RyaW5nKGlkeCArIDEpO1xuICAgIGlkeCA9IHMuaW5kZXhPZihcIlxcblwiKTtcbiAgfVxuICBpZiAocy5sZW5ndGgpIHtcbiAgICBvdXQucHVzaChzKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBpc19hcnJheShtb2RlKSB7XG4gIHJldHVybiBtb2RlID09PSBNT0RFLkFycmF5TGl0ZXJhbDtcbn1cblxuZnVuY3Rpb24gaXNfZXhwcmVzc2lvbihtb2RlKSB7XG4gIHJldHVybiBpbl9hcnJheShtb2RlLCBbTU9ERS5FeHByZXNzaW9uLCBNT0RFLkZvckluaXRpYWxpemVyLCBNT0RFLkNvbmRpdGlvbmFsXSk7XG59XG5cbmZ1bmN0aW9uIGFsbF9saW5lc19zdGFydF93aXRoKGxpbmVzLCBjKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcbiAgICBpZiAobGluZS5jaGFyQXQoMCkgIT09IGMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGVhY2hfbGluZV9tYXRjaGVzX2luZGVudChsaW5lcywgaW5kZW50KSB7XG4gIHZhciBpID0gMCxcbiAgICBsZW4gPSBsaW5lcy5sZW5ndGgsXG4gICAgbGluZTtcbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIGxpbmUgPSBsaW5lc1tpXTtcbiAgICAvLyBhbGxvdyBlbXB0eSBsaW5lcyB0byBwYXNzIHRocm91Z2hcbiAgICBpZiAobGluZSAmJiBsaW5lLmluZGV4T2YoaW5kZW50KSAhPT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuXG5mdW5jdGlvbiBCZWF1dGlmaWVyKHNvdXJjZV90ZXh0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB0aGlzLl9zb3VyY2VfdGV4dCA9IHNvdXJjZV90ZXh0IHx8ICcnO1xuXG4gIHRoaXMuX291dHB1dCA9IG51bGw7XG4gIHRoaXMuX3Rva2VucyA9IG51bGw7XG4gIHRoaXMuX2xhc3RfbGFzdF90ZXh0ID0gbnVsbDtcbiAgdGhpcy5fZmxhZ3MgPSBudWxsO1xuICB0aGlzLl9wcmV2aW91c19mbGFncyA9IG51bGw7XG5cbiAgdGhpcy5fZmxhZ19zdG9yZSA9IG51bGw7XG4gIHRoaXMuX29wdGlvbnMgPSBuZXcgT3B0aW9ucyhvcHRpb25zKTtcbn1cblxuQmVhdXRpZmllci5wcm90b3R5cGUuY3JlYXRlX2ZsYWdzID0gZnVuY3Rpb24oZmxhZ3NfYmFzZSwgbW9kZSkge1xuICB2YXIgbmV4dF9pbmRlbnRfbGV2ZWwgPSAwO1xuICBpZiAoZmxhZ3NfYmFzZSkge1xuICAgIG5leHRfaW5kZW50X2xldmVsID0gZmxhZ3NfYmFzZS5pbmRlbnRhdGlvbl9sZXZlbDtcbiAgICBpZiAoIXRoaXMuX291dHB1dC5qdXN0X2FkZGVkX25ld2xpbmUoKSAmJlxuICAgICAgZmxhZ3NfYmFzZS5saW5lX2luZGVudF9sZXZlbCA+IG5leHRfaW5kZW50X2xldmVsKSB7XG4gICAgICBuZXh0X2luZGVudF9sZXZlbCA9IGZsYWdzX2Jhc2UubGluZV9pbmRlbnRfbGV2ZWw7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRfZmxhZ3MgPSB7XG4gICAgbW9kZTogbW9kZSxcbiAgICBwYXJlbnQ6IGZsYWdzX2Jhc2UsXG4gICAgbGFzdF90b2tlbjogZmxhZ3NfYmFzZSA/IGZsYWdzX2Jhc2UubGFzdF90b2tlbiA6IG5ldyBUb2tlbihUT0tFTi5TVEFSVF9CTE9DSywgJycpLCAvLyBsYXN0IHRva2VuIHRleHRcbiAgICBsYXN0X3dvcmQ6IGZsYWdzX2Jhc2UgPyBmbGFnc19iYXNlLmxhc3Rfd29yZCA6ICcnLCAvLyBsYXN0IFRPS0VOLldPUkQgcGFzc2VkXG4gICAgZGVjbGFyYXRpb25fc3RhdGVtZW50OiBmYWxzZSxcbiAgICBkZWNsYXJhdGlvbl9hc3NpZ25tZW50OiBmYWxzZSxcbiAgICBtdWx0aWxpbmVfZnJhbWU6IGZhbHNlLFxuICAgIGlubGluZV9mcmFtZTogZmFsc2UsXG4gICAgaWZfYmxvY2s6IGZhbHNlLFxuICAgIGVsc2VfYmxvY2s6IGZhbHNlLFxuICAgIGNsYXNzX3N0YXJ0X2Jsb2NrOiBmYWxzZSwgLy8gY2xhc3MgQSB7IElOU0lERSBIRVJFIH0gb3IgY2xhc3MgQiBleHRlbmRzIEMgeyBJTlNJREUgSEVSRSB9XG4gICAgZG9fYmxvY2s6IGZhbHNlLFxuICAgIGRvX3doaWxlOiBmYWxzZSxcbiAgICBpbXBvcnRfYmxvY2s6IGZhbHNlLFxuICAgIGluX2Nhc2Vfc3RhdGVtZW50OiBmYWxzZSwgLy8gc3dpdGNoKC4uKXsgSU5TSURFIEhFUkUgfVxuICAgIGluX2Nhc2U6IGZhbHNlLCAvLyB3ZSdyZSBvbiB0aGUgZXhhY3QgbGluZSB3aXRoIFwiY2FzZSAwOlwiXG4gICAgY2FzZV9ib2R5OiBmYWxzZSwgLy8gdGhlIGluZGVudGVkIGNhc2UtYWN0aW9uIGJsb2NrXG4gICAgY2FzZV9ibG9jazogZmFsc2UsIC8vIHRoZSBpbmRlbnRlZCBjYXNlLWFjdGlvbiBibG9jayBpcyB3cmFwcGVkIHdpdGgge31cbiAgICBpbmRlbnRhdGlvbl9sZXZlbDogbmV4dF9pbmRlbnRfbGV2ZWwsXG4gICAgYWxpZ25tZW50OiAwLFxuICAgIGxpbmVfaW5kZW50X2xldmVsOiBmbGFnc19iYXNlID8gZmxhZ3NfYmFzZS5saW5lX2luZGVudF9sZXZlbCA6IG5leHRfaW5kZW50X2xldmVsLFxuICAgIHN0YXJ0X2xpbmVfaW5kZXg6IHRoaXMuX291dHB1dC5nZXRfbGluZV9udW1iZXIoKSxcbiAgICB0ZXJuYXJ5X2RlcHRoOiAwXG4gIH07XG4gIHJldHVybiBuZXh0X2ZsYWdzO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24oc291cmNlX3RleHQpIHtcbiAgdmFyIGJhc2VJbmRlbnRTdHJpbmcgPSBzb3VyY2VfdGV4dC5tYXRjaCgvXltcXHQgXSovKVswXTtcblxuICB0aGlzLl9sYXN0X2xhc3RfdGV4dCA9ICcnOyAvLyBwcmUtbGFzdCB0b2tlbiB0ZXh0XG4gIHRoaXMuX291dHB1dCA9IG5ldyBPdXRwdXQodGhpcy5fb3B0aW9ucywgYmFzZUluZGVudFN0cmluZyk7XG5cbiAgLy8gSWYgdGVzdGluZyB0aGUgaWdub3JlIGRpcmVjdGl2ZSwgc3RhcnQgd2l0aCBvdXRwdXQgZGlzYWJsZSBzZXQgdG8gdHJ1ZVxuICB0aGlzLl9vdXRwdXQucmF3ID0gdGhpcy5fb3B0aW9ucy50ZXN0X291dHB1dF9yYXc7XG5cblxuICAvLyBTdGFjayBvZiBwYXJzaW5nL2Zvcm1hdHRpbmcgc3RhdGVzLCBpbmNsdWRpbmcgTU9ERS5cbiAgLy8gV2UgdG9rZW5pemUsIHBhcnNlLCBhbmQgb3V0cHV0IGluIGFuIGFsbW9zdCBwdXJlbHkgYSBmb3J3YXJkLW9ubHkgc3RyZWFtIG9mIHRva2VuIGlucHV0XG4gIC8vIGFuZCBmb3JtYXR0ZWQgb3V0cHV0LiAgVGhpcyBtYWtlcyB0aGUgYmVhdXRpZmllciBsZXNzIGFjY3VyYXRlIHRoYW4gZnVsbCBwYXJzZXJzXG4gIC8vIGJ1dCBhbHNvIGZhciBtb3JlIHRvbGVyYW50IG9mIHN5bnRheCBlcnJvcnMuXG4gIC8vXG4gIC8vIEZvciBleGFtcGxlLCB0aGUgZGVmYXVsdCBtb2RlIGlzIE1PREUuQmxvY2tTdGF0ZW1lbnQuIElmIHdlIHNlZSBhICd7JyB3ZSBwdXNoIGEgbmV3IGZyYW1lIG9mIHR5cGVcbiAgLy8gTU9ERS5CbG9ja1N0YXRlbWVudCBvbiB0aGUgdGhlIHN0YWNrLCBldmVuIHRob3VnaCBpdCBjb3VsZCBiZSBvYmplY3QgbGl0ZXJhbC4gIElmIHdlIGxhdGVyXG4gIC8vIGVuY291bnRlciBhIFwiOlwiLCB3ZSdsbCBzd2l0Y2ggdG8gdG8gTU9ERS5PYmplY3RMaXRlcmFsLiAgSWYgd2UgdGhlbiBzZWUgYSBcIjtcIixcbiAgLy8gbW9zdCBmdWxsIHBhcnNlcnMgd291bGQgZGllLCBidXQgdGhlIGJlYXV0aWZpZXIgZ3JhY2VmdWxseSBmYWxscyBiYWNrIHRvXG4gIC8vIE1PREUuQmxvY2tTdGF0ZW1lbnQgYW5kIGNvbnRpbnVlcyBvbi5cbiAgdGhpcy5fZmxhZ19zdG9yZSA9IFtdO1xuICB0aGlzLnNldF9tb2RlKE1PREUuQmxvY2tTdGF0ZW1lbnQpO1xuICB2YXIgdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihzb3VyY2VfdGV4dCwgdGhpcy5fb3B0aW9ucyk7XG4gIHRoaXMuX3Rva2VucyA9IHRva2VuaXplci50b2tlbml6ZSgpO1xuICByZXR1cm4gc291cmNlX3RleHQ7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5iZWF1dGlmeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBpZiBkaXNhYmxlZCwgcmV0dXJuIHRoZSBpbnB1dCB1bmNoYW5nZWQuXG4gIGlmICh0aGlzLl9vcHRpb25zLmRpc2FibGVkKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZV90ZXh0O1xuICB9XG5cbiAgdmFyIHN3ZWV0X2NvZGU7XG4gIHZhciBzb3VyY2VfdGV4dCA9IHRoaXMuX3Jlc2V0KHRoaXMuX3NvdXJjZV90ZXh0KTtcblxuICB2YXIgZW9sID0gdGhpcy5fb3B0aW9ucy5lb2w7XG4gIGlmICh0aGlzLl9vcHRpb25zLmVvbCA9PT0gJ2F1dG8nKSB7XG4gICAgZW9sID0gJ1xcbic7XG4gICAgaWYgKHNvdXJjZV90ZXh0ICYmIGFjb3JuLmxpbmVCcmVhay50ZXN0KHNvdXJjZV90ZXh0IHx8ICcnKSkge1xuICAgICAgZW9sID0gc291cmNlX3RleHQubWF0Y2goYWNvcm4ubGluZUJyZWFrKVswXTtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudF90b2tlbiA9IHRoaXMuX3Rva2Vucy5uZXh0KCk7XG4gIHdoaWxlIChjdXJyZW50X3Rva2VuKSB7XG4gICAgdGhpcy5oYW5kbGVfdG9rZW4oY3VycmVudF90b2tlbik7XG5cbiAgICB0aGlzLl9sYXN0X2xhc3RfdGV4dCA9IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dDtcbiAgICB0aGlzLl9mbGFncy5sYXN0X3Rva2VuID0gY3VycmVudF90b2tlbjtcblxuICAgIGN1cnJlbnRfdG9rZW4gPSB0aGlzLl90b2tlbnMubmV4dCgpO1xuICB9XG5cbiAgc3dlZXRfY29kZSA9IHRoaXMuX291dHB1dC5nZXRfY29kZShlb2wpO1xuXG4gIHJldHVybiBzd2VldF9jb2RlO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX3Rva2VuID0gZnVuY3Rpb24oY3VycmVudF90b2tlbiwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKSB7XG4gIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0VYUFIpIHtcbiAgICB0aGlzLmhhbmRsZV9zdGFydF9leHByKGN1cnJlbnRfdG9rZW4pO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0VYUFIpIHtcbiAgICB0aGlzLmhhbmRsZV9lbmRfZXhwcihjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0JMT0NLKSB7XG4gICAgdGhpcy5oYW5kbGVfc3RhcnRfYmxvY2soY3VycmVudF90b2tlbik7XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5FTkRfQkxPQ0spIHtcbiAgICB0aGlzLmhhbmRsZV9lbmRfYmxvY2soY3VycmVudF90b2tlbik7XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5XT1JEKSB7XG4gICAgdGhpcy5oYW5kbGVfd29yZChjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlJFU0VSVkVEKSB7XG4gICAgdGhpcy5oYW5kbGVfd29yZChjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNFTUlDT0xPTikge1xuICAgIHRoaXMuaGFuZGxlX3NlbWljb2xvbihjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUUklORykge1xuICAgIHRoaXMuaGFuZGxlX3N0cmluZyhjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVRVUFMUykge1xuICAgIHRoaXMuaGFuZGxlX2VxdWFscyhjdXJyZW50X3Rva2VuKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLk9QRVJBVE9SKSB7XG4gICAgdGhpcy5oYW5kbGVfb3BlcmF0b3IoY3VycmVudF90b2tlbik7XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5DT01NQSkge1xuICAgIHRoaXMuaGFuZGxlX2NvbW1hKGN1cnJlbnRfdG9rZW4pO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uQkxPQ0tfQ09NTUVOVCkge1xuICAgIHRoaXMuaGFuZGxlX2Jsb2NrX2NvbW1lbnQoY3VycmVudF90b2tlbiwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcbiAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLkNPTU1FTlQpIHtcbiAgICB0aGlzLmhhbmRsZV9jb21tZW50KGN1cnJlbnRfdG9rZW4sIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5ET1QpIHtcbiAgICB0aGlzLmhhbmRsZV9kb3QoY3VycmVudF90b2tlbik7XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5FT0YpIHtcbiAgICB0aGlzLmhhbmRsZV9lb2YoY3VycmVudF90b2tlbik7XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5VTktOT1dOKSB7XG4gICAgdGhpcy5oYW5kbGVfdW5rbm93bihjdXJyZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaGFuZGxlX3Vua25vd24oY3VycmVudF90b2tlbiwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzID0gZnVuY3Rpb24oY3VycmVudF90b2tlbiwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKSB7XG4gIHZhciBuZXdsaW5lcyA9IGN1cnJlbnRfdG9rZW4ubmV3bGluZXM7XG4gIHZhciBrZWVwX3doaXRlc3BhY2UgPSB0aGlzLl9vcHRpb25zLmtlZXBfYXJyYXlfaW5kZW50YXRpb24gJiYgaXNfYXJyYXkodGhpcy5fZmxhZ3MubW9kZSk7XG5cbiAgaWYgKGN1cnJlbnRfdG9rZW4uY29tbWVudHNfYmVmb3JlKSB7XG4gICAgdmFyIGNvbW1lbnRfdG9rZW4gPSBjdXJyZW50X3Rva2VuLmNvbW1lbnRzX2JlZm9yZS5uZXh0KCk7XG4gICAgd2hpbGUgKGNvbW1lbnRfdG9rZW4pIHtcbiAgICAgIC8vIFRoZSBjbGVhbmVzdCBoYW5kbGluZyBvZiBpbmxpbmUgY29tbWVudHMgaXMgdG8gdHJlYXQgdGhlbSBhcyB0aG91Z2ggdGhleSBhcmVuJ3QgdGhlcmUuXG4gICAgICAvLyBKdXN0IGNvbnRpbnVlIGZvcm1hdHRpbmcgYW5kIHRoZSBiZWhhdmlvciBzaG91bGQgYmUgbG9naWNhbC5cbiAgICAgIC8vIEFsc28gaWdub3JlIHVua25vd24gdG9rZW5zLiAgQWdhaW4sIHRoaXMgc2hvdWxkIHJlc3VsdCBpbiBiZXR0ZXIgYmVoYXZpb3IuXG4gICAgICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjb21tZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICAgICAgdGhpcy5oYW5kbGVfdG9rZW4oY29tbWVudF90b2tlbiwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcbiAgICAgIGNvbW1lbnRfdG9rZW4gPSBjdXJyZW50X3Rva2VuLmNvbW1lbnRzX2JlZm9yZS5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGtlZXBfd2hpdGVzcGFjZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3bGluZXM7IGkgKz0gMSkge1xuICAgICAgdGhpcy5wcmludF9uZXdsaW5lKGkgPiAwLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5tYXhfcHJlc2VydmVfbmV3bGluZXMgJiYgbmV3bGluZXMgPiB0aGlzLl9vcHRpb25zLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcykge1xuICAgICAgbmV3bGluZXMgPSB0aGlzLl9vcHRpb25zLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy5wcmVzZXJ2ZV9uZXdsaW5lcykge1xuICAgICAgaWYgKG5ld2xpbmVzID4gMSkge1xuICAgICAgICB0aGlzLnByaW50X25ld2xpbmUoZmFsc2UsIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgbmV3bGluZXM7IGogKz0gMSkge1xuICAgICAgICAgIHRoaXMucHJpbnRfbmV3bGluZSh0cnVlLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn07XG5cbnZhciBuZXdsaW5lX3Jlc3RyaWN0ZWRfdG9rZW5zID0gWydhc3luYycsICdicmVhaycsICdjb250aW51ZScsICdyZXR1cm4nLCAndGhyb3cnLCAneWllbGQnXTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZSA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4sIGZvcmNlX2xpbmV3cmFwKSB7XG4gIGZvcmNlX2xpbmV3cmFwID0gKGZvcmNlX2xpbmV3cmFwID09PSB1bmRlZmluZWQpID8gZmFsc2UgOiBmb3JjZV9saW5ld3JhcDtcblxuICAvLyBOZXZlciB3cmFwIHRoZSBmaXJzdCB0b2tlbiBvbiBhIGxpbmVcbiAgaWYgKHRoaXMuX291dHB1dC5qdXN0X2FkZGVkX25ld2xpbmUoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzaG91bGRQcmVzZXJ2ZU9yRm9yY2UgPSAodGhpcy5fb3B0aW9ucy5wcmVzZXJ2ZV9uZXdsaW5lcyAmJiBjdXJyZW50X3Rva2VuLm5ld2xpbmVzKSB8fCBmb3JjZV9saW5ld3JhcDtcbiAgdmFyIG9wZXJhdG9yTG9naWNBcHBsaWVzID0gaW5fYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0LCBwb3NpdGlvbmFibGVfb3BlcmF0b3JzKSB8fFxuICAgIGluX2FycmF5KGN1cnJlbnRfdG9rZW4udGV4dCwgcG9zaXRpb25hYmxlX29wZXJhdG9ycyk7XG5cbiAgaWYgKG9wZXJhdG9yTG9naWNBcHBsaWVzKSB7XG4gICAgdmFyIHNob3VsZFByaW50T3BlcmF0b3JOZXdsaW5lID0gKFxuICAgICAgICBpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQsIHBvc2l0aW9uYWJsZV9vcGVyYXRvcnMpICYmXG4gICAgICAgIGluX2FycmF5KHRoaXMuX29wdGlvbnMub3BlcmF0b3JfcG9zaXRpb24sIE9QRVJBVE9SX1BPU0lUSU9OX0JFRk9SRV9PUl9QUkVTRVJWRSlcbiAgICAgICkgfHxcbiAgICAgIGluX2FycmF5KGN1cnJlbnRfdG9rZW4udGV4dCwgcG9zaXRpb25hYmxlX29wZXJhdG9ycyk7XG4gICAgc2hvdWxkUHJlc2VydmVPckZvcmNlID0gc2hvdWxkUHJlc2VydmVPckZvcmNlICYmIHNob3VsZFByaW50T3BlcmF0b3JOZXdsaW5lO1xuICB9XG5cbiAgaWYgKHNob3VsZFByZXNlcnZlT3JGb3JjZSkge1xuICAgIHRoaXMucHJpbnRfbmV3bGluZShmYWxzZSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAodGhpcy5fb3B0aW9ucy53cmFwX2xpbmVfbGVuZ3RoKSB7XG4gICAgaWYgKHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIG5ld2xpbmVfcmVzdHJpY3RlZF90b2tlbnMpKSB7XG4gICAgICAvLyBUaGVzZSB0b2tlbnMgc2hvdWxkIG5ldmVyIGhhdmUgYSBuZXdsaW5lIGluc2VydGVkXG4gICAgICAvLyBiZXR3ZWVuIHRoZW0gYW5kIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbi5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fb3V0cHV0LnNldF93cmFwX3BvaW50KCk7XG4gIH1cbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLnByaW50X25ld2xpbmUgPSBmdW5jdGlvbihmb3JjZV9uZXdsaW5lLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpIHtcbiAgaWYgKCFwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpIHtcbiAgICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ICE9PSAnOycgJiYgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ICE9PSAnLCcgJiYgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ICE9PSAnPScgJiYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSAhPT0gVE9LRU4uT1BFUkFUT1IgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnLS0nIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJysrJykpIHtcbiAgICAgIHZhciBuZXh0X3Rva2VuID0gdGhpcy5fdG9rZW5zLnBlZWsoKTtcbiAgICAgIHdoaWxlICh0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLlN0YXRlbWVudCAmJlxuICAgICAgICAhKHRoaXMuX2ZsYWdzLmlmX2Jsb2NrICYmIHJlc2VydmVkX3dvcmQobmV4dF90b2tlbiwgJ2Vsc2UnKSkgJiZcbiAgICAgICAgIXRoaXMuX2ZsYWdzLmRvX2Jsb2NrKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZV9tb2RlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoZm9yY2VfbmV3bGluZSkpIHtcbiAgICB0aGlzLl9mbGFncy5tdWx0aWxpbmVfZnJhbWUgPSB0cnVlO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5wcmludF90b2tlbl9saW5lX2luZGVudGF0aW9uID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICBpZiAodGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfbmV3bGluZSgpKSB7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMua2VlcF9hcnJheV9pbmRlbnRhdGlvbiAmJlxuICAgICAgY3VycmVudF90b2tlbi5uZXdsaW5lcyAmJlxuICAgICAgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJ1snIHx8IGlzX2FycmF5KHRoaXMuX2ZsYWdzLm1vZGUpKSkge1xuICAgICAgdGhpcy5fb3V0cHV0LmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KC0xKTtcbiAgICAgIHRoaXMuX291dHB1dC5jdXJyZW50X2xpbmUucHVzaChjdXJyZW50X3Rva2VuLndoaXRlc3BhY2VfYmVmb3JlKTtcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuX2ZsYWdzLmluZGVudGF0aW9uX2xldmVsLCB0aGlzLl9mbGFncy5hbGlnbm1lbnQpKSB7XG4gICAgICB0aGlzLl9mbGFncy5saW5lX2luZGVudF9sZXZlbCA9IHRoaXMuX2ZsYWdzLmluZGVudGF0aW9uX2xldmVsO1xuICAgIH1cbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUucHJpbnRfdG9rZW4gPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIGlmICh0aGlzLl9vdXRwdXQucmF3KSB7XG4gICAgdGhpcy5fb3V0cHV0LmFkZF9yYXdfdG9rZW4oY3VycmVudF90b2tlbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX29wdGlvbnMuY29tbWFfZmlyc3QgJiYgY3VycmVudF90b2tlbi5wcmV2aW91cyAmJiBjdXJyZW50X3Rva2VuLnByZXZpb3VzLnR5cGUgPT09IFRPS0VOLkNPTU1BICYmXG4gICAgdGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfbmV3bGluZSgpKSB7XG4gICAgaWYgKHRoaXMuX291dHB1dC5wcmV2aW91c19saW5lLmxhc3QoKSA9PT0gJywnKSB7XG4gICAgICB2YXIgcG9wcGVkID0gdGhpcy5fb3V0cHV0LnByZXZpb3VzX2xpbmUucG9wKCk7XG4gICAgICAvLyBpZiB0aGUgY29tbWEgd2FzIGFscmVhZHkgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLFxuICAgICAgLy8gcHVsbCBiYWNrIG9udG8gdGhhdCBsaW5lIGFuZCByZXByaW50IHRoZSBpbmRlbnRhdGlvblxuICAgICAgaWYgKHRoaXMuX291dHB1dC5wcmV2aW91c19saW5lLmlzX2VtcHR5KCkpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnByZXZpb3VzX2xpbmUucHVzaChwb3BwZWQpO1xuICAgICAgICB0aGlzLl9vdXRwdXQudHJpbSh0cnVlKTtcbiAgICAgICAgdGhpcy5fb3V0cHV0LmN1cnJlbnRfbGluZS5wb3AoKTtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnRyaW0oKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRoZSBjb21tYSBpbiBmcm9udCBvZiB0aGUgbmV4dCB0b2tlblxuICAgICAgdGhpcy5wcmludF90b2tlbl9saW5lX2luZGVudGF0aW9uKGN1cnJlbnRfdG9rZW4pO1xuICAgICAgdGhpcy5fb3V0cHV0LmFkZF90b2tlbignLCcpO1xuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5wcmludF90b2tlbl9saW5lX2luZGVudGF0aW9uKGN1cnJlbnRfdG9rZW4pO1xuICB0aGlzLl9vdXRwdXQubm9uX2JyZWFraW5nX3NwYWNlID0gdHJ1ZTtcbiAgdGhpcy5fb3V0cHV0LmFkZF90b2tlbihjdXJyZW50X3Rva2VuLnRleHQpO1xuICBpZiAodGhpcy5fb3V0cHV0LnByZXZpb3VzX3Rva2VuX3dyYXBwZWQpIHtcbiAgICB0aGlzLl9mbGFncy5tdWx0aWxpbmVfZnJhbWUgPSB0cnVlO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5pbmRlbnQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZmxhZ3MuaW5kZW50YXRpb25fbGV2ZWwgKz0gMTtcbiAgdGhpcy5fb3V0cHV0LnNldF9pbmRlbnQodGhpcy5fZmxhZ3MuaW5kZW50YXRpb25fbGV2ZWwsIHRoaXMuX2ZsYWdzLmFsaWdubWVudCk7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5kZWluZGVudCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fZmxhZ3MuaW5kZW50YXRpb25fbGV2ZWwgPiAwICYmXG4gICAgKCghdGhpcy5fZmxhZ3MucGFyZW50KSB8fCB0aGlzLl9mbGFncy5pbmRlbnRhdGlvbl9sZXZlbCA+IHRoaXMuX2ZsYWdzLnBhcmVudC5pbmRlbnRhdGlvbl9sZXZlbCkpIHtcbiAgICB0aGlzLl9mbGFncy5pbmRlbnRhdGlvbl9sZXZlbCAtPSAxO1xuICAgIHRoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuX2ZsYWdzLmluZGVudGF0aW9uX2xldmVsLCB0aGlzLl9mbGFncy5hbGlnbm1lbnQpO1xuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5zZXRfbW9kZSA9IGZ1bmN0aW9uKG1vZGUpIHtcbiAgaWYgKHRoaXMuX2ZsYWdzKSB7XG4gICAgdGhpcy5fZmxhZ19zdG9yZS5wdXNoKHRoaXMuX2ZsYWdzKTtcbiAgICB0aGlzLl9wcmV2aW91c19mbGFncyA9IHRoaXMuX2ZsYWdzO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX3ByZXZpb3VzX2ZsYWdzID0gdGhpcy5jcmVhdGVfZmxhZ3MobnVsbCwgbW9kZSk7XG4gIH1cblxuICB0aGlzLl9mbGFncyA9IHRoaXMuY3JlYXRlX2ZsYWdzKHRoaXMuX3ByZXZpb3VzX2ZsYWdzLCBtb2RlKTtcbiAgdGhpcy5fb3V0cHV0LnNldF9pbmRlbnQodGhpcy5fZmxhZ3MuaW5kZW50YXRpb25fbGV2ZWwsIHRoaXMuX2ZsYWdzLmFsaWdubWVudCk7XG59O1xuXG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLnJlc3RvcmVfbW9kZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fZmxhZ19zdG9yZS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5fcHJldmlvdXNfZmxhZ3MgPSB0aGlzLl9mbGFncztcbiAgICB0aGlzLl9mbGFncyA9IHRoaXMuX2ZsYWdfc3RvcmUucG9wKCk7XG4gICAgaWYgKHRoaXMuX3ByZXZpb3VzX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50KSB7XG4gICAgICByZW1vdmVfcmVkdW5kYW50X2luZGVudGF0aW9uKHRoaXMuX291dHB1dCwgdGhpcy5fcHJldmlvdXNfZmxhZ3MpO1xuICAgIH1cbiAgICB0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLl9mbGFncy5pbmRlbnRhdGlvbl9sZXZlbCwgdGhpcy5fZmxhZ3MuYWxpZ25tZW50KTtcbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuc3RhcnRfb2Zfb2JqZWN0X3Byb3BlcnR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9mbGFncy5wYXJlbnQubW9kZSA9PT0gTU9ERS5PYmplY3RMaXRlcmFsICYmIHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50ICYmIChcbiAgICAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnOicgJiYgdGhpcy5fZmxhZ3MudGVybmFyeV9kZXB0aCA9PT0gMCkgfHwgKHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIFsnZ2V0JywgJ3NldCddKSkpO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuc3RhcnRfb2Zfc3RhdGVtZW50ID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICB2YXIgc3RhcnQgPSBmYWxzZTtcbiAgc3RhcnQgPSBzdGFydCB8fCByZXNlcnZlZF9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLCBbJ3ZhcicsICdsZXQnLCAnY29uc3QnXSkgJiYgY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5XT1JEO1xuICBzdGFydCA9IHN0YXJ0IHx8IHJlc2VydmVkX3dvcmQodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgJ2RvJyk7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgKCEodGhpcy5fZmxhZ3MucGFyZW50Lm1vZGUgPT09IE1PREUuT2JqZWN0TGl0ZXJhbCAmJiB0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLlN0YXRlbWVudCkpICYmIHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIG5ld2xpbmVfcmVzdHJpY3RlZF90b2tlbnMpICYmICFjdXJyZW50X3Rva2VuLm5ld2xpbmVzO1xuICBzdGFydCA9IHN0YXJ0IHx8IHJlc2VydmVkX3dvcmQodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgJ2Vsc2UnKSAmJlxuICAgICEocmVzZXJ2ZWRfd29yZChjdXJyZW50X3Rva2VuLCAnaWYnKSAmJiAhY3VycmVudF90b2tlbi5jb21tZW50c19iZWZvcmUpO1xuICBzdGFydCA9IHN0YXJ0IHx8ICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVORF9FWFBSICYmICh0aGlzLl9wcmV2aW91c19mbGFncy5tb2RlID09PSBNT0RFLkZvckluaXRpYWxpemVyIHx8IHRoaXMuX3ByZXZpb3VzX2ZsYWdzLm1vZGUgPT09IE1PREUuQ29uZGl0aW9uYWwpKTtcbiAgc3RhcnQgPSBzdGFydCB8fCAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5XT1JEICYmIHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuQmxvY2tTdGF0ZW1lbnQgJiZcbiAgICAhdGhpcy5fZmxhZ3MuaW5fY2FzZSAmJlxuICAgICEoY3VycmVudF90b2tlbi50ZXh0ID09PSAnLS0nIHx8IGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJysrJykgJiZcbiAgICB0aGlzLl9sYXN0X2xhc3RfdGV4dCAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgIGN1cnJlbnRfdG9rZW4udHlwZSAhPT0gVE9LRU4uV09SRCAmJiBjdXJyZW50X3Rva2VuLnR5cGUgIT09IFRPS0VOLlJFU0VSVkVEKTtcbiAgc3RhcnQgPSBzdGFydCB8fCAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5PYmplY3RMaXRlcmFsICYmIChcbiAgICAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnOicgJiYgdGhpcy5fZmxhZ3MudGVybmFyeV9kZXB0aCA9PT0gMCkgfHwgcmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgWydnZXQnLCAnc2V0J10pKSk7XG5cbiAgaWYgKHN0YXJ0KSB7XG4gICAgdGhpcy5zZXRfbW9kZShNT0RFLlN0YXRlbWVudCk7XG4gICAgdGhpcy5pbmRlbnQoKTtcblxuICAgIHRoaXMuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzKGN1cnJlbnRfdG9rZW4sIHRydWUpO1xuXG4gICAgLy8gSXNzdWUgIzI3NjpcbiAgICAvLyBJZiBzdGFydGluZyBhIG5ldyBzdGF0ZW1lbnQgd2l0aCBbaWYsIGZvciwgd2hpbGUsIGRvXSwgcHVzaCB0byBhIG5ldyBsaW5lLlxuICAgIC8vIGlmIChhKSBpZiAoYikgaWYoYykgZCgpOyBlbHNlIGUoKTsgZWxzZSBmKCk7XG4gICAgaWYgKCF0aGlzLnN0YXJ0X29mX29iamVjdF9wcm9wZXJ0eSgpKSB7XG4gICAgICB0aGlzLmFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUoY3VycmVudF90b2tlbixcbiAgICAgICAgcmVzZXJ2ZWRfYXJyYXkoY3VycmVudF90b2tlbiwgWydkbycsICdmb3InLCAnaWYnLCAnd2hpbGUnXSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5oYW5kbGVfc3RhcnRfZXhwciA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHtcbiAgLy8gVGhlIGNvbmRpdGlvbmFsIHN0YXJ0cyB0aGUgc3RhdGVtZW50IGlmIGFwcHJvcHJpYXRlLlxuICBpZiAoIXRoaXMuc3RhcnRfb2Zfc3RhdGVtZW50KGN1cnJlbnRfdG9rZW4pKSB7XG4gICAgdGhpcy5oYW5kbGVfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoY3VycmVudF90b2tlbik7XG4gIH1cblxuICB2YXIgbmV4dF9tb2RlID0gTU9ERS5FeHByZXNzaW9uO1xuICBpZiAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnWycpIHtcblxuICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLldPUkQgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnKScpIHtcbiAgICAgIC8vIHRoaXMgaXMgYXJyYXkgaW5kZXggc3BlY2lmaWVyLCBicmVhayBpbW1lZGlhdGVseVxuICAgICAgLy8gYVt4XSwgZm4oKVt4XVxuICAgICAgaWYgKHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIGxpbmVfc3RhcnRlcnMpKSB7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgICAgIHRoaXMuc2V0X21vZGUobmV4dF9tb2RlKTtcbiAgICAgIHRoaXMuaW5kZW50KCk7XG4gICAgICBpZiAodGhpcy5fb3B0aW9ucy5zcGFjZV9pbl9wYXJlbikge1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuZXh0X21vZGUgPSBNT0RFLkFycmF5TGl0ZXJhbDtcbiAgICBpZiAoaXNfYXJyYXkodGhpcy5fZmxhZ3MubW9kZSkpIHtcbiAgICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICdbJyB8fFxuICAgICAgICAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnLCcgJiYgKHRoaXMuX2xhc3RfbGFzdF90ZXh0ID09PSAnXScgfHwgdGhpcy5fbGFzdF9sYXN0X3RleHQgPT09ICd9JykpKSB7XG4gICAgICAgIC8vIF0sIFsgZ29lcyB0byBuZXcgbGluZVxuICAgICAgICAvLyB9LCBbIGdvZXMgdG8gbmV3IGxpbmVcbiAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLmtlZXBfYXJyYXlfaW5kZW50YXRpb24pIHtcbiAgICAgICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaW5fYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlLCBbVE9LRU4uU1RBUlRfRVhQUiwgVE9LRU4uRU5EX0VYUFIsIFRPS0VOLldPUkQsIFRPS0VOLk9QRVJBVE9SLCBUT0tFTi5ET1RdKSkge1xuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlJFU0VSVkVEKSB7XG4gICAgICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnZm9yJykge1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdGhpcy5fb3B0aW9ucy5zcGFjZV9iZWZvcmVfY29uZGl0aW9uYWw7XG4gICAgICAgIG5leHRfbW9kZSA9IE1PREUuRm9ySW5pdGlhbGl6ZXI7XG4gICAgICB9IGVsc2UgaWYgKGluX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCwgWydpZicsICd3aGlsZScsICdzd2l0Y2gnXSkpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRoaXMuX29wdGlvbnMuc3BhY2VfYmVmb3JlX2NvbmRpdGlvbmFsO1xuICAgICAgICBuZXh0X21vZGUgPSBNT0RFLkNvbmRpdGlvbmFsO1xuICAgICAgfSBlbHNlIGlmIChpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3dvcmQsIFsnYXdhaXQnLCAnYXN5bmMnXSkpIHtcbiAgICAgICAgLy8gU2hvdWxkIGJlIGEgc3BhY2UgYmV0d2VlbiBhd2FpdCBhbmQgYW4gSUlGRSwgb3IgYXN5bmMgYW5kIGFuIGFycm93IGZ1bmN0aW9uXG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICdpbXBvcnQnICYmIGN1cnJlbnRfdG9rZW4ud2hpdGVzcGFjZV9iZWZvcmUgPT09ICcnKSB7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoaW5fYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0LCBsaW5lX3N0YXJ0ZXJzKSB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICdjYXRjaCcpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVRVUFMUyB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLk9QRVJBVE9SKSB7XG4gICAgICAvLyBTdXBwb3J0IG9mIHRoaXMga2luZCBvZiBuZXdsaW5lIHByZXNlcnZhdGlvbi5cbiAgICAgIC8vIGEgPSAoYiAmJlxuICAgICAgLy8gICAgIChjIHx8IGQpKTtcbiAgICAgIGlmICghdGhpcy5zdGFydF9vZl9vYmplY3RfcHJvcGVydHkoKSkge1xuICAgICAgICB0aGlzLmFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUoY3VycmVudF90b2tlbik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLldPUkQpIHtcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSBmYWxzZTtcblxuICAgICAgLy8gZnVuY3Rpb24gbmFtZSgpIHZzIGZ1bmN0aW9uIG5hbWUgKClcbiAgICAgIC8vIGZ1bmN0aW9uKiBuYW1lKCkgdnMgZnVuY3Rpb24qIG5hbWUgKClcbiAgICAgIC8vIGFzeW5jIG5hbWUoKSB2cyBhc3luYyBuYW1lICgpXG4gICAgICAvLyBJbiBFUzYsIHlvdSBjYW4gYWxzbyBkZWZpbmUgdGhlIG1ldGhvZCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdFxuICAgICAgLy8gdmFyIG9iaiA9IHthOiBmdW5jdGlvbigpIHt9fVxuICAgICAgLy8gSXQgY2FuIGJlIGFiYnJldmlhdGVkXG4gICAgICAvLyB2YXIgb2JqID0ge2EoKSB7fX1cbiAgICAgIC8vIHZhciBvYmogPSB7IGEoKSB7fX0gdnMgdmFyIG9iaiA9IHsgYSAoKSB7fX1cbiAgICAgIC8vIHZhciBvYmogPSB7ICogYSgpIHt9fSB2cyB2YXIgb2JqID0geyAqIGEgKCkge319XG4gICAgICB2YXIgcGVla19iYWNrX3R3byA9IHRoaXMuX3Rva2Vucy5wZWVrKC0zKTtcbiAgICAgIGlmICh0aGlzLl9vcHRpb25zLnNwYWNlX2FmdGVyX25hbWVkX2Z1bmN0aW9uICYmIHBlZWtfYmFja190d28pIHtcbiAgICAgICAgLy8gcGVlayBzdGFydHMgYXQgbmV4dCBjaGFyYWN0ZXIgc28gLTEgaXMgY3VycmVudCB0b2tlblxuICAgICAgICB2YXIgcGVla19iYWNrX3RocmVlID0gdGhpcy5fdG9rZW5zLnBlZWsoLTQpO1xuICAgICAgICBpZiAocmVzZXJ2ZWRfYXJyYXkocGVla19iYWNrX3R3bywgWydhc3luYycsICdmdW5jdGlvbiddKSB8fFxuICAgICAgICAgIChwZWVrX2JhY2tfdHdvLnRleHQgPT09ICcqJyAmJiByZXNlcnZlZF9hcnJheShwZWVrX2JhY2tfdGhyZWUsIFsnYXN5bmMnLCAnZnVuY3Rpb24nXSkpKSB7XG4gICAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5PYmplY3RMaXRlcmFsKSB7XG4gICAgICAgICAgaWYgKChwZWVrX2JhY2tfdHdvLnRleHQgPT09ICd7JyB8fCBwZWVrX2JhY2tfdHdvLnRleHQgPT09ICcsJykgfHxcbiAgICAgICAgICAgIChwZWVrX2JhY2tfdHdvLnRleHQgPT09ICcqJyAmJiAocGVla19iYWNrX3RocmVlLnRleHQgPT09ICd7JyB8fCBwZWVrX2JhY2tfdGhyZWUudGV4dCA9PT0gJywnKSkpIHtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5wYXJlbnQgJiYgdGhpcy5fZmxhZ3MucGFyZW50LmNsYXNzX3N0YXJ0X2Jsb2NrKSB7XG4gICAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3VwcG9ydCBwcmVzZXJ2aW5nIHdyYXBwZWQgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvbnNcbiAgICAgIC8vIGEuYignYycsXG4gICAgICAvLyAgICAgKCkgPT4gZC5lXG4gICAgICAvLyApXG4gICAgICB0aGlzLmFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUoY3VycmVudF90b2tlbik7XG4gICAgfVxuXG4gICAgLy8gZnVuY3Rpb24oKSB2cyBmdW5jdGlvbiAoKVxuICAgIC8vIHlpZWxkKigpIHZzIHlpZWxkKiAoKVxuICAgIC8vIGZ1bmN0aW9uKigpIHZzIGZ1bmN0aW9uKiAoKVxuICAgIGlmICgodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5SRVNFUlZFRCAmJiAodGhpcy5fZmxhZ3MubGFzdF93b3JkID09PSAnZnVuY3Rpb24nIHx8IHRoaXMuX2ZsYWdzLmxhc3Rfd29yZCA9PT0gJ3R5cGVvZicpKSB8fFxuICAgICAgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJyonICYmXG4gICAgICAgIChpbl9hcnJheSh0aGlzLl9sYXN0X2xhc3RfdGV4dCwgWydmdW5jdGlvbicsICd5aWVsZCddKSB8fFxuICAgICAgICAgICh0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLk9iamVjdExpdGVyYWwgJiYgaW5fYXJyYXkodGhpcy5fbGFzdF9sYXN0X3RleHQsIFsneycsICcsJ10pKSkpKSB7XG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdGhpcy5fb3B0aW9ucy5zcGFjZV9hZnRlcl9hbm9uX2Z1bmN0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICc7JyB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0JMT0NLKSB7XG4gICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5FTkRfRVhQUiB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0VYUFIgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5FTkRfQkxPQ0sgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnLicgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5DT01NQSkge1xuICAgIC8vIGRvIG5vdGhpbmcgb24gKCggYW5kICkoIGFuZCBdWyBhbmQgXSggYW5kIC4oXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2hldGhlciBmb3JjaW5nIHRoaXMgaXMgcmVxdWlyZWQuICBSZXZpZXcgZmFpbGluZyB0ZXN0cyB3aGVuIHJlbW92ZWQuXG4gICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4sIGN1cnJlbnRfdG9rZW4ubmV3bGluZXMpO1xuICB9XG5cbiAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgdGhpcy5zZXRfbW9kZShuZXh0X21vZGUpO1xuICBpZiAodGhpcy5fb3B0aW9ucy5zcGFjZV9pbl9wYXJlbikge1xuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICB9XG5cbiAgLy8gSW4gYWxsIGNhc2VzLCBpZiB3ZSBuZXdsaW5lIHdoaWxlIGluc2lkZSBhbiBleHByZXNzaW9uIGl0IHNob3VsZCBiZSBpbmRlbnRlZC5cbiAgdGhpcy5pbmRlbnQoKTtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV9lbmRfZXhwciA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHtcbiAgLy8gc3RhdGVtZW50cyBpbnNpZGUgZXhwcmVzc2lvbnMgYXJlIG5vdCB2YWxpZCBzeW50YXgsIGJ1dC4uLlxuICAvLyBzdGF0ZW1lbnRzIG11c3QgYWxsIGJlIGNsb3NlZCB3aGVuIHRoZWlyIGNvbnRhaW5lciBjbG9zZXNcbiAgd2hpbGUgKHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50KSB7XG4gICAgdGhpcy5yZXN0b3JlX21vZGUoKTtcbiAgfVxuXG4gIHRoaXMuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzKGN1cnJlbnRfdG9rZW4pO1xuXG4gIGlmICh0aGlzLl9mbGFncy5tdWx0aWxpbmVfZnJhbWUpIHtcbiAgICB0aGlzLmFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUoY3VycmVudF90b2tlbixcbiAgICAgIGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJ10nICYmIGlzX2FycmF5KHRoaXMuX2ZsYWdzLm1vZGUpICYmICF0aGlzLl9vcHRpb25zLmtlZXBfYXJyYXlfaW5kZW50YXRpb24pO1xuICB9XG5cbiAgaWYgKHRoaXMuX29wdGlvbnMuc3BhY2VfaW5fcGFyZW4pIHtcbiAgICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5TVEFSVF9FWFBSICYmICF0aGlzLl9vcHRpb25zLnNwYWNlX2luX2VtcHR5X3BhcmVuKSB7XG4gICAgICAvLyAoKSBbXSBubyBpbm5lciBzcGFjZSBpbiBlbXB0eSBwYXJlbnMgbGlrZSB0aGVzZSwgZXZlciwgcmVmICMzMjBcbiAgICAgIHRoaXMuX291dHB1dC50cmltKCk7XG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuICB0aGlzLmRlaW5kZW50KCk7XG4gIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gIHRoaXMucmVzdG9yZV9tb2RlKCk7XG5cbiAgcmVtb3ZlX3JlZHVuZGFudF9pbmRlbnRhdGlvbih0aGlzLl9vdXRwdXQsIHRoaXMuX3ByZXZpb3VzX2ZsYWdzKTtcblxuICAvLyBkbyB7fSB3aGlsZSAoKSAvLyBubyBzdGF0ZW1lbnQgcmVxdWlyZWQgYWZ0ZXJcbiAgaWYgKHRoaXMuX2ZsYWdzLmRvX3doaWxlICYmIHRoaXMuX3ByZXZpb3VzX2ZsYWdzLm1vZGUgPT09IE1PREUuQ29uZGl0aW9uYWwpIHtcbiAgICB0aGlzLl9wcmV2aW91c19mbGFncy5tb2RlID0gTU9ERS5FeHByZXNzaW9uO1xuICAgIHRoaXMuX2ZsYWdzLmRvX2Jsb2NrID0gZmFsc2U7XG4gICAgdGhpcy5fZmxhZ3MuZG9fd2hpbGUgPSBmYWxzZTtcblxuICB9XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5oYW5kbGVfc3RhcnRfYmxvY2sgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIHRoaXMuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzKGN1cnJlbnRfdG9rZW4pO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBPYmplY3RMaXRlcmFsXG4gIHZhciBuZXh0X3Rva2VuID0gdGhpcy5fdG9rZW5zLnBlZWsoKTtcbiAgdmFyIHNlY29uZF90b2tlbiA9IHRoaXMuX3Rva2Vucy5wZWVrKDEpO1xuICBpZiAodGhpcy5fZmxhZ3MubGFzdF93b3JkID09PSAnc3dpdGNoJyAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVORF9FWFBSKSB7XG4gICAgdGhpcy5zZXRfbW9kZShNT0RFLkJsb2NrU3RhdGVtZW50KTtcbiAgICB0aGlzLl9mbGFncy5pbl9jYXNlX3N0YXRlbWVudCA9IHRydWU7XG4gIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MuY2FzZV9ib2R5KSB7XG4gICAgdGhpcy5zZXRfbW9kZShNT0RFLkJsb2NrU3RhdGVtZW50KTtcbiAgfSBlbHNlIGlmIChzZWNvbmRfdG9rZW4gJiYgKFxuICAgICAgKGluX2FycmF5KHNlY29uZF90b2tlbi50ZXh0LCBbJzonLCAnLCddKSAmJiBpbl9hcnJheShuZXh0X3Rva2VuLnR5cGUsIFtUT0tFTi5TVFJJTkcsIFRPS0VOLldPUkQsIFRPS0VOLlJFU0VSVkVEXSkpIHx8XG4gICAgICAoaW5fYXJyYXkobmV4dF90b2tlbi50ZXh0LCBbJ2dldCcsICdzZXQnLCAnLi4uJ10pICYmIGluX2FycmF5KHNlY29uZF90b2tlbi50eXBlLCBbVE9LRU4uV09SRCwgVE9LRU4uUkVTRVJWRURdKSlcbiAgICApKSB7XG4gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBUeXBlU2NyaXB0LGJ1dCB3ZSBkaWRuJ3QgYnJlYWsgaXQgZm9yIGEgdmVyeSBsb25nIHRpbWUuXG4gICAgLy8gV2UnbGwgdHJ5IHRvIGtlZXAgbm90IGJyZWFraW5nIGl0LlxuICAgIGlmIChpbl9hcnJheSh0aGlzLl9sYXN0X2xhc3RfdGV4dCwgWydjbGFzcycsICdpbnRlcmZhY2UnXSkgJiYgIWluX2FycmF5KHNlY29uZF90b2tlbi50ZXh0LCBbJzonLCAnLCddKSkge1xuICAgICAgdGhpcy5zZXRfbW9kZShNT0RFLkJsb2NrU3RhdGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRfbW9kZShNT0RFLk9iamVjdExpdGVyYWwpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLk9QRVJBVE9SICYmIHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJz0+Jykge1xuICAgIC8vIGFycm93IGZ1bmN0aW9uOiAocGFyYW0xLCBwYXJhbU4pID0+IHsgc3RhdGVtZW50cyB9XG4gICAgdGhpcy5zZXRfbW9kZShNT0RFLkJsb2NrU3RhdGVtZW50KTtcbiAgfSBlbHNlIGlmIChpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUsIFtUT0tFTi5FUVVBTFMsIFRPS0VOLlNUQVJUX0VYUFIsIFRPS0VOLkNPTU1BLCBUT0tFTi5PUEVSQVRPUl0pIHx8XG4gICAgcmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgWydyZXR1cm4nLCAndGhyb3cnLCAnaW1wb3J0JywgJ2RlZmF1bHQnXSlcbiAgKSB7XG4gICAgLy8gRGV0ZWN0aW5nIHNob3J0aGFuZCBmdW5jdGlvbiBzeW50YXggaXMgZGlmZmljdWx0IGJ5IHNjYW5uaW5nIGZvcndhcmQsXG4gICAgLy8gICAgIHNvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LlxuICAgIC8vIElmIHRoZSBibG9jayBpcyBiZWluZyByZXR1cm5lZCwgaW1wb3J0ZWQsIGV4cG9ydCBkZWZhdWx0LCBwYXNzZWQgYXMgYXJnLFxuICAgIC8vICAgICBhc3NpZ25lZCB3aXRoID0gb3IgYXNzaWduZWQgaW4gYSBuZXN0ZWQgb2JqZWN0LCB0cmVhdCBhcyBhbiBPYmplY3RMaXRlcmFsLlxuICAgIHRoaXMuc2V0X21vZGUoTU9ERS5PYmplY3RMaXRlcmFsKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnNldF9tb2RlKE1PREUuQmxvY2tTdGF0ZW1lbnQpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4pIHtcbiAgICBpZiAocmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbi5wcmV2aW91cywgWydjbGFzcycsICdleHRlbmRzJ10pKSB7XG4gICAgICB0aGlzLl9mbGFncy5jbGFzc19zdGFydF9ibG9jayA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVtcHR5X2JyYWNlcyA9ICFuZXh0X3Rva2VuLmNvbW1lbnRzX2JlZm9yZSAmJiBuZXh0X3Rva2VuLnRleHQgPT09ICd9JztcbiAgdmFyIGVtcHR5X2Fub255bW91c19mdW5jdGlvbiA9IGVtcHR5X2JyYWNlcyAmJiB0aGlzLl9mbGFncy5sYXN0X3dvcmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVORF9FWFBSO1xuXG4gIGlmICh0aGlzLl9vcHRpb25zLmJyYWNlX3ByZXNlcnZlX2lubGluZSkgLy8gY2hlY2sgZm9yIGlubGluZSwgc2V0IGlubGluZV9mcmFtZSBpZiBzb1xuICB7XG4gICAgLy8gc2VhcmNoIGZvcndhcmQgZm9yIGEgbmV3bGluZSB3YW50ZWQgaW5zaWRlIHRoaXMgYmxvY2tcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjaGVja190b2tlbiA9IG51bGw7XG4gICAgdGhpcy5fZmxhZ3MuaW5saW5lX2ZyYW1lID0gdHJ1ZTtcbiAgICBkbyB7XG4gICAgICBpbmRleCArPSAxO1xuICAgICAgY2hlY2tfdG9rZW4gPSB0aGlzLl90b2tlbnMucGVlayhpbmRleCAtIDEpO1xuICAgICAgaWYgKGNoZWNrX3Rva2VuLm5ld2xpbmVzKSB7XG4gICAgICAgIHRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IHdoaWxlIChjaGVja190b2tlbi50eXBlICE9PSBUT0tFTi5FT0YgJiZcbiAgICAgICEoY2hlY2tfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0JMT0NLICYmIGNoZWNrX3Rva2VuLm9wZW5lZCA9PT0gY3VycmVudF90b2tlbikpO1xuICB9XG5cbiAgaWYgKCh0aGlzLl9vcHRpb25zLmJyYWNlX3N0eWxlID09PSBcImV4cGFuZFwiIHx8XG4gICAgICAodGhpcy5fb3B0aW9ucy5icmFjZV9zdHlsZSA9PT0gXCJub25lXCIgJiYgY3VycmVudF90b2tlbi5uZXdsaW5lcykpICYmXG4gICAgIXRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSkge1xuICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgIT09IFRPS0VOLk9QRVJBVE9SICYmXG4gICAgICAoZW1wdHlfYW5vbnltb3VzX2Z1bmN0aW9uIHx8XG4gICAgICAgIHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uRVFVQUxTIHx8XG4gICAgICAgIChyZXNlcnZlZF9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLCBzcGVjaWFsX3dvcmRzKSAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgIT09ICdlbHNlJykpKSB7XG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmludF9uZXdsaW5lKGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gIH0gZWxzZSB7IC8vIGNvbGxhcHNlIHx8IGlubGluZV9mcmFtZVxuICAgIGlmIChpc19hcnJheSh0aGlzLl9wcmV2aW91c19mbGFncy5tb2RlKSAmJiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5TVEFSVF9FWFBSIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uQ09NTUEpKSB7XG4gICAgICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5DT01NQSB8fCB0aGlzLl9vcHRpb25zLnNwYWNlX2luX3BhcmVuKSB7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5DT01NQSB8fCAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5TVEFSVF9FWFBSICYmIHRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSkpIHtcbiAgICAgICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICAgICAgICB0aGlzLl9wcmV2aW91c19mbGFncy5tdWx0aWxpbmVfZnJhbWUgPSB0aGlzLl9wcmV2aW91c19mbGFncy5tdWx0aWxpbmVfZnJhbWUgfHwgdGhpcy5fZmxhZ3MubXVsdGlsaW5lX2ZyYW1lO1xuICAgICAgICB0aGlzLl9mbGFncy5tdWx0aWxpbmVfZnJhbWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSAhPT0gVE9LRU4uT1BFUkFUT1IgJiYgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlICE9PSBUT0tFTi5TVEFSVF9FWFBSKSB7XG4gICAgICBpZiAoaW5fYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlLCBbVE9LRU4uU1RBUlRfQkxPQ0ssIFRPS0VOLlNFTUlDT0xPTl0pICYmICF0aGlzLl9mbGFncy5pbmxpbmVfZnJhbWUpIHtcbiAgICAgICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgdGhpcy5pbmRlbnQoKTtcblxuICAvLyBFeGNlcHQgZm9yIHNwZWNpZmljIGNhc2VzLCBvcGVuIGJyYWNlcyBhcmUgZm9sbG93ZWQgYnkgYSBuZXcgbGluZS5cbiAgaWYgKCFlbXB0eV9icmFjZXMgJiYgISh0aGlzLl9vcHRpb25zLmJyYWNlX3ByZXNlcnZlX2lubGluZSAmJiB0aGlzLl9mbGFncy5pbmxpbmVfZnJhbWUpKSB7XG4gICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gIH1cbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV9lbmRfYmxvY2sgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIC8vIHN0YXRlbWVudHMgbXVzdCBhbGwgYmUgY2xvc2VkIHdoZW4gdGhlaXIgY29udGFpbmVyIGNsb3Nlc1xuICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjdXJyZW50X3Rva2VuKTtcblxuICB3aGlsZSAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnJlc3RvcmVfbW9kZSgpO1xuICB9XG5cbiAgdmFyIGVtcHR5X2JyYWNlcyA9IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uU1RBUlRfQkxPQ0s7XG5cbiAgaWYgKHRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSAmJiAhZW1wdHlfYnJhY2VzKSB7IC8vIHRyeSBpbmxpbmVfZnJhbWUgKG9ubHkgc2V0IGlmIHRoaXMuX29wdGlvbnMuYnJhY2VzLXByZXNlcnZlLWlubGluZSkgZmlyc3RcbiAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgfSBlbHNlIGlmICh0aGlzLl9vcHRpb25zLmJyYWNlX3N0eWxlID09PSBcImV4cGFuZFwiKSB7XG4gICAgaWYgKCFlbXB0eV9icmFjZXMpIHtcbiAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBza2lwIHt9XG4gICAgaWYgKCFlbXB0eV9icmFjZXMpIHtcbiAgICAgIGlmIChpc19hcnJheSh0aGlzLl9mbGFncy5tb2RlKSAmJiB0aGlzLl9vcHRpb25zLmtlZXBfYXJyYXlfaW5kZW50YXRpb24pIHtcbiAgICAgICAgLy8gd2UgUkVBTExZIG5lZWQgYSBuZXdsaW5lIGhlcmUsIGJ1dCBuZXdsaW5lciB3b3VsZCBza2lwIHRoYXRcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5rZWVwX2FycmF5X2luZGVudGF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgICAgICB0aGlzLl9vcHRpb25zLmtlZXBfYXJyYXlfaW5kZW50YXRpb24gPSB0cnVlO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdGhpcy5yZXN0b3JlX21vZGUoKTtcbiAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV93b3JkID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICBpZiAoY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5SRVNFUlZFRCkge1xuICAgIGlmIChpbl9hcnJheShjdXJyZW50X3Rva2VuLnRleHQsIFsnc2V0JywgJ2dldCddKSAmJiB0aGlzLl9mbGFncy5tb2RlICE9PSBNT0RFLk9iamVjdExpdGVyYWwpIHtcbiAgICAgIGN1cnJlbnRfdG9rZW4udHlwZSA9IFRPS0VOLldPUkQ7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICdpbXBvcnQnICYmIGluX2FycmF5KHRoaXMuX3Rva2Vucy5wZWVrKCkudGV4dCwgWycoJywgJy4nXSkpIHtcbiAgICAgIGN1cnJlbnRfdG9rZW4udHlwZSA9IFRPS0VOLldPUkQ7XG4gICAgfSBlbHNlIGlmIChpbl9hcnJheShjdXJyZW50X3Rva2VuLnRleHQsIFsnYXMnLCAnZnJvbSddKSAmJiAhdGhpcy5fZmxhZ3MuaW1wb3J0X2Jsb2NrKSB7XG4gICAgICBjdXJyZW50X3Rva2VuLnR5cGUgPSBUT0tFTi5XT1JEO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5PYmplY3RMaXRlcmFsKSB7XG4gICAgICB2YXIgbmV4dF90b2tlbiA9IHRoaXMuX3Rva2Vucy5wZWVrKCk7XG4gICAgICBpZiAobmV4dF90b2tlbi50ZXh0ID09PSAnOicpIHtcbiAgICAgICAgY3VycmVudF90b2tlbi50eXBlID0gVE9LRU4uV09SRDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5zdGFydF9vZl9zdGF0ZW1lbnQoY3VycmVudF90b2tlbikpIHtcbiAgICAvLyBUaGUgY29uZGl0aW9uYWwgc3RhcnRzIHRoZSBzdGF0ZW1lbnQgaWYgYXBwcm9wcmlhdGUuXG4gICAgaWYgKHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIFsndmFyJywgJ2xldCcsICdjb25zdCddKSAmJiBjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLldPUkQpIHtcbiAgICAgIHRoaXMuX2ZsYWdzLmRlY2xhcmF0aW9uX3N0YXRlbWVudCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4ubmV3bGluZXMgJiYgIWlzX2V4cHJlc3Npb24odGhpcy5fZmxhZ3MubW9kZSkgJiZcbiAgICAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlICE9PSBUT0tFTi5PUEVSQVRPUiB8fCAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnLS0nIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJysrJykpICYmXG4gICAgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlICE9PSBUT0tFTi5FUVVBTFMgJiZcbiAgICAodGhpcy5fb3B0aW9ucy5wcmVzZXJ2ZV9uZXdsaW5lcyB8fCAhcmVzZXJ2ZWRfYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbiwgWyd2YXInLCAnbGV0JywgJ2NvbnN0JywgJ3NldCcsICdnZXQnXSkpKSB7XG4gICAgdGhpcy5oYW5kbGVfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoY3VycmVudF90b2tlbik7XG4gICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oYW5kbGVfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoY3VycmVudF90b2tlbik7XG4gIH1cblxuICBpZiAodGhpcy5fZmxhZ3MuZG9fYmxvY2sgJiYgIXRoaXMuX2ZsYWdzLmRvX3doaWxlKSB7XG4gICAgaWYgKHJlc2VydmVkX3dvcmQoY3VycmVudF90b2tlbiwgJ3doaWxlJykpIHtcbiAgICAgIC8vIGRvIHt9ICMjIHdoaWxlICgpXG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2ZsYWdzLmRvX3doaWxlID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZG8ge30gc2hvdWxkIGFsd2F5cyBoYXZlIHdoaWxlIGFzIHRoZSBuZXh0IHdvcmQuXG4gICAgICAvLyBpZiB3ZSBkb24ndCBzZWUgdGhlIGV4cGVjdGVkIHdoaWxlLCByZWNvdmVyXG4gICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICAgIHRoaXMuX2ZsYWdzLmRvX2Jsb2NrID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgbWF5IGJlIGZvbGxvd2VkIGJ5IGVsc2UsIG9yIG5vdFxuICAvLyBCYXJlL2lubGluZSBpZnMgYXJlIHRyaWNreVxuICAvLyBOZWVkIHRvIHVud2luZCB0aGUgbW9kZXMgY29ycmVjdGx5OiBpZiAoYSkgaWYgKGIpIGMoKTsgZWxzZSBkKCk7IGVsc2UgZSgpO1xuICBpZiAodGhpcy5fZmxhZ3MuaWZfYmxvY2spIHtcbiAgICBpZiAoIXRoaXMuX2ZsYWdzLmVsc2VfYmxvY2sgJiYgcmVzZXJ2ZWRfd29yZChjdXJyZW50X3Rva2VuLCAnZWxzZScpKSB7XG4gICAgICB0aGlzLl9mbGFncy5lbHNlX2Jsb2NrID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVzdG9yZV9tb2RlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9mbGFncy5pZl9ibG9jayA9IGZhbHNlO1xuICAgICAgdGhpcy5fZmxhZ3MuZWxzZV9ibG9jayA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9mbGFncy5pbl9jYXNlX3N0YXRlbWVudCAmJiByZXNlcnZlZF9hcnJheShjdXJyZW50X3Rva2VuLCBbJ2Nhc2UnLCAnZGVmYXVsdCddKSkge1xuICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgIGlmICghdGhpcy5fZmxhZ3MuY2FzZV9ibG9jayAmJiAodGhpcy5fZmxhZ3MuY2FzZV9ib2R5IHx8IHRoaXMuX29wdGlvbnMuanNsaW50X2hhcHB5KSkge1xuICAgICAgLy8gc3dpdGNoIGNhc2VzIGZvbGxvd2luZyBvbmUgYW5vdGhlclxuICAgICAgdGhpcy5kZWluZGVudCgpO1xuICAgIH1cbiAgICB0aGlzLl9mbGFncy5jYXNlX2JvZHkgPSBmYWxzZTtcblxuICAgIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gICAgdGhpcy5fZmxhZ3MuaW5fY2FzZSA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uQ09NTUEgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5TVEFSVF9FWFBSIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uRVFVQUxTIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uT1BFUkFUT1IpIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRfb2Zfb2JqZWN0X3Byb3BlcnR5KCkpIHtcbiAgICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVzZXJ2ZWRfd29yZChjdXJyZW50X3Rva2VuLCAnZnVuY3Rpb24nKSkge1xuICAgIGlmIChpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQsIFsnfScsICc7J10pIHx8XG4gICAgICAodGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfbmV3bGluZSgpICYmICEoaW5fYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0LCBbJygnLCAnWycsICd7JywgJzonLCAnPScsICcsJ10pIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uT1BFUkFUT1IpKSkge1xuICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGlzIGEgbmljZSBjbGVhbiBzcGFjZSBvZiBhdCBsZWFzdCBvbmUgYmxhbmsgbGluZVxuICAgICAgLy8gYmVmb3JlIGEgbmV3IGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgIGlmICghdGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfYmxhbmtsaW5lKCkgJiYgIWN1cnJlbnRfdG9rZW4uY29tbWVudHNfYmVmb3JlKSB7XG4gICAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgICAgICB0aGlzLnByaW50X25ld2xpbmUodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlJFU0VSVkVEIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uV09SRCkge1xuICAgICAgaWYgKHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIFsnZ2V0JywgJ3NldCcsICduZXcnLCAnZXhwb3J0J10pIHx8XG4gICAgICAgIHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIG5ld2xpbmVfcmVzdHJpY3RlZF90b2tlbnMpKSB7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChyZXNlcnZlZF93b3JkKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sICdkZWZhdWx0JykgJiYgdGhpcy5fbGFzdF9sYXN0X3RleHQgPT09ICdleHBvcnQnKSB7XG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICdkZWNsYXJlJykge1xuICAgICAgICAvLyBhY2NvbW9kYXRlcyBUeXBlc2NyaXB0IGRlY2xhcmUgZnVuY3Rpb24gZm9ybWF0dGluZ1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5PUEVSQVRPUiB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICc9Jykge1xuICAgICAgLy8gZm9vID0gZnVuY3Rpb25cbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2ZsYWdzLm11bHRpbGluZV9mcmFtZSAmJiAoaXNfZXhwcmVzc2lvbih0aGlzLl9mbGFncy5tb2RlKSB8fCBpc19hcnJheSh0aGlzLl9mbGFncy5tb2RlKSkpIHtcbiAgICAgIC8vIChmdW5jdGlvblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuICAgIHRoaXMuX2ZsYWdzLmxhc3Rfd29yZCA9IGN1cnJlbnRfdG9rZW4udGV4dDtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcHJlZml4ID0gJ05PTkUnO1xuXG4gIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVORF9CTE9DSykge1xuXG4gICAgaWYgKHRoaXMuX3ByZXZpb3VzX2ZsYWdzLmlubGluZV9mcmFtZSkge1xuICAgICAgcHJlZml4ID0gJ1NQQUNFJztcbiAgICB9IGVsc2UgaWYgKCFyZXNlcnZlZF9hcnJheShjdXJyZW50X3Rva2VuLCBbJ2Vsc2UnLCAnY2F0Y2gnLCAnZmluYWxseScsICdmcm9tJ10pKSB7XG4gICAgICBwcmVmaXggPSAnTkVXTElORSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9vcHRpb25zLmJyYWNlX3N0eWxlID09PSBcImV4cGFuZFwiIHx8XG4gICAgICAgIHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGUgPT09IFwiZW5kLWV4cGFuZFwiIHx8XG4gICAgICAgICh0aGlzLl9vcHRpb25zLmJyYWNlX3N0eWxlID09PSBcIm5vbmVcIiAmJiBjdXJyZW50X3Rva2VuLm5ld2xpbmVzKSkge1xuICAgICAgICBwcmVmaXggPSAnTkVXTElORSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmVmaXggPSAnU1BBQ0UnO1xuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5TRU1JQ09MT04gJiYgdGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5CbG9ja1N0YXRlbWVudCkge1xuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIGZvciBTVEFURU1FTlQgYXMgd2VsbD9cbiAgICBwcmVmaXggPSAnTkVXTElORSc7XG4gIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5TRU1JQ09MT04gJiYgaXNfZXhwcmVzc2lvbih0aGlzLl9mbGFncy5tb2RlKSkge1xuICAgIHByZWZpeCA9ICdTUEFDRSc7XG4gIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5TVFJJTkcpIHtcbiAgICBwcmVmaXggPSAnTkVXTElORSc7XG4gIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5SRVNFUlZFRCB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLldPUkQgfHxcbiAgICAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnKicgJiZcbiAgICAgIChpbl9hcnJheSh0aGlzLl9sYXN0X2xhc3RfdGV4dCwgWydmdW5jdGlvbicsICd5aWVsZCddKSB8fFxuICAgICAgICAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5PYmplY3RMaXRlcmFsICYmIGluX2FycmF5KHRoaXMuX2xhc3RfbGFzdF90ZXh0LCBbJ3snLCAnLCddKSkpKSkge1xuICAgIHByZWZpeCA9ICdTUEFDRSc7XG4gIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5TVEFSVF9CTE9DSykge1xuICAgIGlmICh0aGlzLl9mbGFncy5pbmxpbmVfZnJhbWUpIHtcbiAgICAgIHByZWZpeCA9ICdTUEFDRSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWZpeCA9ICdORVdMSU5FJztcbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5FTkRfRVhQUikge1xuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgIHByZWZpeCA9ICdORVdMSU5FJztcbiAgfVxuXG4gIGlmIChyZXNlcnZlZF9hcnJheShjdXJyZW50X3Rva2VuLCBsaW5lX3N0YXJ0ZXJzKSAmJiB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgIT09ICcpJykge1xuICAgIGlmICh0aGlzLl9mbGFncy5pbmxpbmVfZnJhbWUgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnZWxzZScgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnZXhwb3J0Jykge1xuICAgICAgcHJlZml4ID0gJ1NQQUNFJztcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ID0gJ05FV0xJTkUnO1xuICAgIH1cblxuICB9XG5cbiAgaWYgKHJlc2VydmVkX2FycmF5KGN1cnJlbnRfdG9rZW4sIFsnZWxzZScsICdjYXRjaCcsICdmaW5hbGx5J10pKSB7XG4gICAgaWYgKCghKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0JMT0NLICYmIHRoaXMuX3ByZXZpb3VzX2ZsYWdzLm1vZGUgPT09IE1PREUuQmxvY2tTdGF0ZW1lbnQpIHx8XG4gICAgICAgIHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGUgPT09IFwiZXhwYW5kXCIgfHxcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5icmFjZV9zdHlsZSA9PT0gXCJlbmQtZXhwYW5kXCIgfHxcbiAgICAgICAgKHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGUgPT09IFwibm9uZVwiICYmIGN1cnJlbnRfdG9rZW4ubmV3bGluZXMpKSAmJlxuICAgICAgIXRoaXMuX2ZsYWdzLmlubGluZV9mcmFtZSkge1xuICAgICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX291dHB1dC50cmltKHRydWUpO1xuICAgICAgdmFyIGxpbmUgPSB0aGlzLl9vdXRwdXQuY3VycmVudF9saW5lO1xuICAgICAgLy8gSWYgd2UgdHJpbW1lZCBhbmQgdGhlcmUncyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGNsb3NlIGJsb2NrIGJlZm9yZSB1c1xuICAgICAgLy8gcHV0IGEgbmV3bGluZSBiYWNrIGluLiAgSGFuZGxlcyAnfSAvLyBjb21tZW50JyBzY2VuYXJpby5cbiAgICAgIGlmIChsaW5lLmxhc3QoKSAhPT0gJ30nKSB7XG4gICAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKHByZWZpeCA9PT0gJ05FV0xJTkUnKSB7XG4gICAgaWYgKHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIHNwZWNpYWxfd29yZHMpKSB7XG4gICAgICAvLyBubyBuZXdsaW5lIGJldHdlZW4gJ3JldHVybiBubm4nXG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJ2RlY2xhcmUnICYmIHJlc2VydmVkX2FycmF5KGN1cnJlbnRfdG9rZW4sIFsndmFyJywgJ2xldCcsICdjb25zdCddKSkge1xuICAgICAgLy8gYWNjb21vZGF0ZXMgVHlwZXNjcmlwdCBkZWNsYXJlIGZvcm1hdHRpbmdcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlICE9PSBUT0tFTi5FTkRfRVhQUikge1xuICAgICAgaWYgKCh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgIT09IFRPS0VOLlNUQVJUX0VYUFIgfHwgIXJlc2VydmVkX2FycmF5KGN1cnJlbnRfdG9rZW4sIFsndmFyJywgJ2xldCcsICdjb25zdCddKSkgJiYgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ICE9PSAnOicpIHtcbiAgICAgICAgLy8gbm8gbmVlZCB0byBmb3JjZSBuZXdsaW5lIG9uICd2YXInOiBmb3IgKHZhciB4ID0gMC4uLilcbiAgICAgICAgaWYgKHJlc2VydmVkX3dvcmQoY3VycmVudF90b2tlbiwgJ2lmJykgJiYgcmVzZXJ2ZWRfd29yZChjdXJyZW50X3Rva2VuLnByZXZpb3VzLCAnZWxzZScpKSB7XG4gICAgICAgICAgLy8gbm8gbmV3bGluZSBmb3IgfSBlbHNlIGlmIHtcbiAgICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVzZXJ2ZWRfYXJyYXkoY3VycmVudF90b2tlbiwgbGluZV9zdGFydGVycykgJiYgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ICE9PSAnKScpIHtcbiAgICAgIHRoaXMucHJpbnRfbmV3bGluZSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5tdWx0aWxpbmVfZnJhbWUgJiYgaXNfYXJyYXkodGhpcy5fZmxhZ3MubW9kZSkgJiYgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0ID09PSAnLCcgJiYgdGhpcy5fbGFzdF9sYXN0X3RleHQgPT09ICd9Jykge1xuICAgIHRoaXMucHJpbnRfbmV3bGluZSgpOyAvLyB9LCBpbiBsaXN0cyBnZXQgYSBuZXdsaW5lIHRyZWF0bWVudFxuICB9IGVsc2UgaWYgKHByZWZpeCA9PT0gJ1NQQUNFJykge1xuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICB9XG4gIGlmIChjdXJyZW50X3Rva2VuLnByZXZpb3VzICYmIChjdXJyZW50X3Rva2VuLnByZXZpb3VzLnR5cGUgPT09IFRPS0VOLldPUkQgfHwgY3VycmVudF90b2tlbi5wcmV2aW91cy50eXBlID09PSBUT0tFTi5SRVNFUlZFRCkpIHtcbiAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgfVxuICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuICB0aGlzLl9mbGFncy5sYXN0X3dvcmQgPSBjdXJyZW50X3Rva2VuLnRleHQ7XG5cbiAgaWYgKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uUkVTRVJWRUQpIHtcbiAgICBpZiAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnZG8nKSB7XG4gICAgICB0aGlzLl9mbGFncy5kb19ibG9jayA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICdpZicpIHtcbiAgICAgIHRoaXMuX2ZsYWdzLmlmX2Jsb2NrID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJ2ltcG9ydCcpIHtcbiAgICAgIHRoaXMuX2ZsYWdzLmltcG9ydF9ibG9jayA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5pbXBvcnRfYmxvY2sgJiYgcmVzZXJ2ZWRfd29yZChjdXJyZW50X3Rva2VuLCAnZnJvbScpKSB7XG4gICAgICB0aGlzLl9mbGFncy5pbXBvcnRfYmxvY2sgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV9zZW1pY29sb24gPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIGlmICh0aGlzLnN0YXJ0X29mX3N0YXRlbWVudChjdXJyZW50X3Rva2VuKSkge1xuICAgIC8vIFRoZSBjb25kaXRpb25hbCBzdGFydHMgdGhlIHN0YXRlbWVudCBpZiBhcHByb3ByaWF0ZS5cbiAgICAvLyBTZW1pY29sb24gY2FuIGJlIHRoZSBzdGFydCAoYW5kIGVuZCkgb2YgYSBzdGF0ZW1lbnRcbiAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oYW5kbGVfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoY3VycmVudF90b2tlbik7XG4gIH1cblxuICB2YXIgbmV4dF90b2tlbiA9IHRoaXMuX3Rva2Vucy5wZWVrKCk7XG4gIHdoaWxlICh0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLlN0YXRlbWVudCAmJlxuICAgICEodGhpcy5fZmxhZ3MuaWZfYmxvY2sgJiYgcmVzZXJ2ZWRfd29yZChuZXh0X3Rva2VuLCAnZWxzZScpKSAmJlxuICAgICF0aGlzLl9mbGFncy5kb19ibG9jaykge1xuICAgIHRoaXMucmVzdG9yZV9tb2RlKCk7XG4gIH1cblxuICAvLyBoYWNreSBidXQgZWZmZWN0aXZlIGZvciB0aGUgbW9tZW50XG4gIGlmICh0aGlzLl9mbGFncy5pbXBvcnRfYmxvY2spIHtcbiAgICB0aGlzLl9mbGFncy5pbXBvcnRfYmxvY2sgPSBmYWxzZTtcbiAgfVxuICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX3N0cmluZyA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHtcbiAgaWYgKGN1cnJlbnRfdG9rZW4udGV4dC5zdGFydHNXaXRoKFwiYFwiKSAmJiBjdXJyZW50X3Rva2VuLm5ld2xpbmVzID09PSAwICYmIGN1cnJlbnRfdG9rZW4ud2hpdGVzcGFjZV9iZWZvcmUgPT09ICcnICYmIChjdXJyZW50X3Rva2VuLnByZXZpb3VzLnRleHQgPT09ICcpJyB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLldPUkQpKSB7XG4gICAgLy9Db25kaXRpb25hbCBmb3IgZGV0ZWN0aWduIGJhY2t0aWNrIHN0cmluZ3NcbiAgfSBlbHNlIGlmICh0aGlzLnN0YXJ0X29mX3N0YXRlbWVudChjdXJyZW50X3Rva2VuKSkge1xuICAgIC8vIFRoZSBjb25kaXRpb25hbCBzdGFydHMgdGhlIHN0YXRlbWVudCBpZiBhcHByb3ByaWF0ZS5cbiAgICAvLyBPbmUgZGlmZmVyZW5jZSAtIHN0cmluZ3Mgd2FudCBhdCBsZWFzdCBhIHNwYWNlIGJlZm9yZVxuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaGFuZGxlX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzKGN1cnJlbnRfdG9rZW4pO1xuICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlJFU0VSVkVEIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uV09SRCB8fCB0aGlzLl9mbGFncy5pbmxpbmVfZnJhbWUpIHtcbiAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5DT01NQSB8fCB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0VYUFIgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5FUVVBTFMgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5PUEVSQVRPUikge1xuICAgICAgaWYgKCF0aGlzLnN0YXJ0X29mX29iamVjdF9wcm9wZXJ0eSgpKSB7XG4gICAgICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChjdXJyZW50X3Rva2VuLnRleHQuc3RhcnRzV2l0aChcImBcIikgJiYgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5FTkRfRVhQUiAmJiAoY3VycmVudF90b2tlbi5wcmV2aW91cy50ZXh0ID09PSAnXScgfHwgY3VycmVudF90b2tlbi5wcmV2aW91cy50ZXh0ID09PSAnKScpICYmIGN1cnJlbnRfdG9rZW4ubmV3bGluZXMgPT09IDApKSB7XG4gICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgfVxuICB9XG4gIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5oYW5kbGVfZXF1YWxzID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICBpZiAodGhpcy5zdGFydF9vZl9zdGF0ZW1lbnQoY3VycmVudF90b2tlbikpIHtcbiAgICAvLyBUaGUgY29uZGl0aW9uYWwgc3RhcnRzIHRoZSBzdGF0ZW1lbnQgaWYgYXBwcm9wcmlhdGUuXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oYW5kbGVfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoY3VycmVudF90b2tlbik7XG4gIH1cblxuICBpZiAodGhpcy5fZmxhZ3MuZGVjbGFyYXRpb25fc3RhdGVtZW50KSB7XG4gICAgLy8ganVzdCBnb3QgYW4gJz0nIGluIGEgdmFyLWxpbmUsIGRpZmZlcmVudCBmb3JtYXR0aW5nL2xpbmUtYnJlYWtpbmcsIGV0YyB3aWxsIG5vdyBiZSBkb25lXG4gICAgdGhpcy5fZmxhZ3MuZGVjbGFyYXRpb25fYXNzaWdubWVudCA9IHRydWU7XG4gIH1cbiAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX2NvbW1hID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjdXJyZW50X3Rva2VuLCB0cnVlKTtcblxuICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgaWYgKHRoaXMuX2ZsYWdzLmRlY2xhcmF0aW9uX3N0YXRlbWVudCkge1xuICAgIGlmIChpc19leHByZXNzaW9uKHRoaXMuX2ZsYWdzLnBhcmVudC5tb2RlKSkge1xuICAgICAgLy8gZG8gbm90IGJyZWFrIG9uIGNvbW1hLCBmb3IodmFyIGEgPSAxLCBiID0gMilcbiAgICAgIHRoaXMuX2ZsYWdzLmRlY2xhcmF0aW9uX2Fzc2lnbm1lbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZmxhZ3MuZGVjbGFyYXRpb25fYXNzaWdubWVudCkge1xuICAgICAgdGhpcy5fZmxhZ3MuZGVjbGFyYXRpb25fYXNzaWdubWVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5wcmludF9uZXdsaW5lKGZhbHNlLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX29wdGlvbnMuY29tbWFfZmlyc3QpIHtcbiAgICAgIC8vIGZvciBjb21tYS1maXJzdCwgd2Ugd2FudCB0byBhbGxvdyBhIG5ld2xpbmUgYmVmb3JlIHRoZSBjb21tYVxuICAgICAgLy8gdG8gdHVybiBpbnRvIGEgbmV3bGluZSBhZnRlciB0aGUgY29tbWEsIHdoaWNoIHdlIHdpbGwgZml4dXAgbGF0ZXJcbiAgICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3MubW9kZSA9PT0gTU9ERS5PYmplY3RMaXRlcmFsIHx8XG4gICAgKHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50ICYmIHRoaXMuX2ZsYWdzLnBhcmVudC5tb2RlID09PSBNT0RFLk9iamVjdExpdGVyYWwpKSB7XG4gICAgaWYgKHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50KSB7XG4gICAgICB0aGlzLnJlc3RvcmVfbW9kZSgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fZmxhZ3MuaW5saW5lX2ZyYW1lKSB7XG4gICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5fb3B0aW9ucy5jb21tYV9maXJzdCkge1xuICAgIC8vIEVYUFIgb3IgRE9fQkxPQ0tcbiAgICAvLyBmb3IgY29tbWEtZmlyc3QsIHdlIHdhbnQgdG8gYWxsb3cgYSBuZXdsaW5lIGJlZm9yZSB0aGUgY29tbWFcbiAgICAvLyB0byB0dXJuIGludG8gYSBuZXdsaW5lIGFmdGVyIHRoZSBjb21tYSwgd2hpY2ggd2Ugd2lsbCBmaXh1cCBsYXRlclxuICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX29wZXJhdG9yID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICB2YXIgaXNHZW5lcmF0b3JBc3RlcmlzayA9IGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJyonICYmXG4gICAgKHJlc2VydmVkX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4sIFsnZnVuY3Rpb24nLCAneWllbGQnXSkgfHxcbiAgICAgIChpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUsIFtUT0tFTi5TVEFSVF9CTE9DSywgVE9LRU4uQ09NTUEsIFRPS0VOLkVORF9CTE9DSywgVE9LRU4uU0VNSUNPTE9OXSkpXG4gICAgKTtcbiAgdmFyIGlzVW5hcnkgPSBpbl9hcnJheShjdXJyZW50X3Rva2VuLnRleHQsIFsnLScsICcrJ10pICYmIChcbiAgICBpbl9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUsIFtUT0tFTi5TVEFSVF9CTE9DSywgVE9LRU4uU1RBUlRfRVhQUiwgVE9LRU4uRVFVQUxTLCBUT0tFTi5PUEVSQVRPUl0pIHx8XG4gICAgaW5fYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0LCBsaW5lX3N0YXJ0ZXJzKSB8fFxuICAgIHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJywnXG4gICk7XG5cbiAgaWYgKHRoaXMuc3RhcnRfb2Zfc3RhdGVtZW50KGN1cnJlbnRfdG9rZW4pKSB7XG4gICAgLy8gVGhlIGNvbmRpdGlvbmFsIHN0YXJ0cyB0aGUgc3RhdGVtZW50IGlmIGFwcHJvcHJpYXRlLlxuICB9IGVsc2Uge1xuICAgIHZhciBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MgPSAhaXNHZW5lcmF0b3JBc3RlcmlzaztcbiAgICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjdXJyZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICB9XG5cbiAgLy8gaGFjayBmb3IgYWN0aW9uc2NyaXB0J3MgaW1wb3J0IC4qO1xuICBpZiAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnKicgJiYgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5ET1QpIHtcbiAgICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICc6OicpIHtcbiAgICAvLyBubyBzcGFjZXMgYXJvdW5kIGV4b3RpYyBuYW1lc3BhY2luZyBzeW50YXggb3BlcmF0b3JcbiAgICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEFsbG93IGxpbmUgd3JhcHBpbmcgYmV0d2VlbiBvcGVyYXRvcnMgd2hlbiBvcGVyYXRvcl9wb3NpdGlvbiBpc1xuICAvLyAgIHNldCB0byBiZWZvcmUgb3IgcHJlc2VydmVcbiAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uT1BFUkFUT1IgJiYgaW5fYXJyYXkodGhpcy5fb3B0aW9ucy5vcGVyYXRvcl9wb3NpdGlvbiwgT1BFUkFUT1JfUE9TSVRJT05fQkVGT1JFX09SX1BSRVNFUlZFKSkge1xuICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICc6JyAmJiB0aGlzLl9mbGFncy5pbl9jYXNlKSB7XG4gICAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcblxuICAgIHRoaXMuX2ZsYWdzLmluX2Nhc2UgPSBmYWxzZTtcbiAgICB0aGlzLl9mbGFncy5jYXNlX2JvZHkgPSB0cnVlO1xuICAgIGlmICh0aGlzLl90b2tlbnMucGVlaygpLnR5cGUgIT09IFRPS0VOLlNUQVJUX0JMT0NLKSB7XG4gICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgdGhpcy5wcmludF9uZXdsaW5lKCk7XG4gICAgICB0aGlzLl9mbGFncy5jYXNlX2Jsb2NrID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2ZsYWdzLmNhc2VfYmxvY2sgPSB0cnVlO1xuICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzcGFjZV9iZWZvcmUgPSB0cnVlO1xuICB2YXIgc3BhY2VfYWZ0ZXIgPSB0cnVlO1xuICB2YXIgaW5fdGVybmFyeSA9IGZhbHNlO1xuICBpZiAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnOicpIHtcbiAgICBpZiAodGhpcy5fZmxhZ3MudGVybmFyeV9kZXB0aCA9PT0gMCkge1xuICAgICAgLy8gQ29sb24gaXMgaW52YWxpZCBqYXZhc2NyaXB0IG91dHNpZGUgb2YgdGVybmFyeSBhbmQgb2JqZWN0LCBidXQgZG8gb3VyIGJlc3QgdG8gZ3Vlc3Mgd2hhdCB3YXMgbWVhbnQuXG4gICAgICBzcGFjZV9iZWZvcmUgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZmxhZ3MudGVybmFyeV9kZXB0aCAtPSAxO1xuICAgICAgaW5fdGVybmFyeSA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJz8nKSB7XG4gICAgdGhpcy5fZmxhZ3MudGVybmFyeV9kZXB0aCArPSAxO1xuICB9XG5cbiAgLy8gbGV0J3MgaGFuZGxlIHRoZSBvcGVyYXRvcl9wb3NpdGlvbiBvcHRpb24gcHJpb3IgdG8gYW55IGNvbmZsaWN0aW5nIGxvZ2ljXG4gIGlmICghaXNVbmFyeSAmJiAhaXNHZW5lcmF0b3JBc3RlcmlzayAmJiB0aGlzLl9vcHRpb25zLnByZXNlcnZlX25ld2xpbmVzICYmIGluX2FycmF5KGN1cnJlbnRfdG9rZW4udGV4dCwgcG9zaXRpb25hYmxlX29wZXJhdG9ycykpIHtcbiAgICB2YXIgaXNDb2xvbiA9IGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJzonO1xuICAgIHZhciBpc1Rlcm5hcnlDb2xvbiA9IChpc0NvbG9uICYmIGluX3Rlcm5hcnkpO1xuICAgIHZhciBpc090aGVyQ29sb24gPSAoaXNDb2xvbiAmJiAhaW5fdGVybmFyeSk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX29wdGlvbnMub3BlcmF0b3JfcG9zaXRpb24pIHtcbiAgICAgIGNhc2UgT1BFUkFUT1JfUE9TSVRJT04uYmVmb3JlX25ld2xpbmU6XG4gICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHRva2VuIGlzIDogYW5kIGl0J3Mgbm90IGEgdGVybmFyeSBzdGF0ZW1lbnQgdGhlbiB3ZSBzZXQgc3BhY2VfYmVmb3JlIHRvIGZhbHNlXG4gICAgICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSAhaXNPdGhlckNvbG9uO1xuXG4gICAgICAgIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG5cbiAgICAgICAgaWYgKCFpc0NvbG9uIHx8IGlzVGVybmFyeUNvbG9uKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICAgIHJldHVybjtcblxuICAgICAgY2FzZSBPUEVSQVRPUl9QT1NJVElPTi5hZnRlcl9uZXdsaW5lOlxuICAgICAgICAvLyBpZiB0aGUgY3VycmVudCB0b2tlbiBpcyBhbnl0aGluZyBidXQgY29sb24sIG9yICh2aWEgZGVkdWN0aW9uKSBpdCdzIGEgY29sb24gYW5kIGluIGEgdGVybmFyeSBzdGF0ZW1lbnQsXG4gICAgICAgIC8vICAgdGhlbiBwcmludCBhIG5ld2xpbmUuXG5cbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFpc0NvbG9uIHx8IGlzVGVybmFyeUNvbG9uKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3Rva2Vucy5wZWVrKCkubmV3bGluZXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJpbnRfbmV3bGluZShmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcblxuICAgICAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYXNlIE9QRVJBVE9SX1BPU0lUSU9OLnByZXNlcnZlX25ld2xpbmU6XG4gICAgICAgIGlmICghaXNPdGhlckNvbG9uKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgd2UganVzdCBhZGRlZCBhIG5ld2xpbmUsIG9yIHRoZSBjdXJyZW50IHRva2VuIGlzIDogYW5kIGl0J3Mgbm90IGEgdGVybmFyeSBzdGF0ZW1lbnQsXG4gICAgICAgIC8vICAgdGhlbiB3ZSBzZXQgc3BhY2VfYmVmb3JlIHRvIGZhbHNlXG4gICAgICAgIHNwYWNlX2JlZm9yZSA9ICEodGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfbmV3bGluZSgpIHx8IGlzT3RoZXJDb2xvbik7XG5cbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHNwYWNlX2JlZm9yZTtcbiAgICAgICAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgICAgICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNHZW5lcmF0b3JBc3Rlcmlzaykge1xuICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgICBzcGFjZV9iZWZvcmUgPSBmYWxzZTtcbiAgICB2YXIgbmV4dF90b2tlbiA9IHRoaXMuX3Rva2Vucy5wZWVrKCk7XG4gICAgc3BhY2VfYWZ0ZXIgPSBuZXh0X3Rva2VuICYmIGluX2FycmF5KG5leHRfdG9rZW4udHlwZSwgW1RPS0VOLldPUkQsIFRPS0VOLlJFU0VSVkVEXSk7XG4gIH0gZWxzZSBpZiAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnLi4uJykge1xuICAgIHRoaXMuYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZShjdXJyZW50X3Rva2VuKTtcbiAgICBzcGFjZV9iZWZvcmUgPSB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0JMT0NLO1xuICAgIHNwYWNlX2FmdGVyID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaW5fYXJyYXkoY3VycmVudF90b2tlbi50ZXh0LCBbJy0tJywgJysrJywgJyEnLCAnfiddKSB8fCBpc1VuYXJ5KSB7XG4gICAgLy8gdW5hcnkgb3BlcmF0b3JzIChhbmQgYmluYXJ5ICsvLSBwcmV0ZW5kaW5nIHRvIGJlIHVuYXJ5KSBzcGVjaWFsIGNhc2VzXG4gICAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uQ09NTUEgfHwgdGhpcy5fZmxhZ3MubGFzdF90b2tlbi50eXBlID09PSBUT0tFTi5TVEFSVF9FWFBSKSB7XG4gICAgICB0aGlzLmFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUoY3VycmVudF90b2tlbik7XG4gICAgfVxuXG4gICAgc3BhY2VfYmVmb3JlID0gZmFsc2U7XG4gICAgc3BhY2VfYWZ0ZXIgPSBmYWxzZTtcblxuICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy03LjkuMVxuICAgIC8vIGlmIHRoZXJlIGlzIGEgbmV3bGluZSBiZXR3ZWVuIC0tIG9yICsrIGFuZCBhbnl0aGluZyBlbHNlIHdlIHNob3VsZCBwcmVzZXJ2ZSBpdC5cbiAgICBpZiAoY3VycmVudF90b2tlbi5uZXdsaW5lcyAmJiAoY3VycmVudF90b2tlbi50ZXh0ID09PSAnLS0nIHx8IGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJysrJyB8fCBjdXJyZW50X3Rva2VuLnRleHQgPT09ICd+JykpIHtcbiAgICAgIHZhciBuZXdfbGluZV9uZWVkZWQgPSByZXNlcnZlZF9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLCBzcGVjaWFsX3dvcmRzKSAmJiBjdXJyZW50X3Rva2VuLm5ld2xpbmVzO1xuICAgICAgaWYgKG5ld19saW5lX25lZWRlZCAmJiAodGhpcy5fcHJldmlvdXNfZmxhZ3MuaWZfYmxvY2sgfHwgdGhpcy5fcHJldmlvdXNfZmxhZ3MuZWxzZV9ibG9jaykpIHtcbiAgICAgICAgdGhpcy5yZXN0b3JlX21vZGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJpbnRfbmV3bGluZShuZXdfbGluZV9uZWVkZWQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICc7JyAmJiBpc19leHByZXNzaW9uKHRoaXMuX2ZsYWdzLm1vZGUpKSB7XG4gICAgICAvLyBmb3IgKDs7ICsraSlcbiAgICAgIC8vICAgICAgICBeXl5cbiAgICAgIHNwYWNlX2JlZm9yZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udHlwZSA9PT0gVE9LRU4uUkVTRVJWRUQpIHtcbiAgICAgIHNwYWNlX2JlZm9yZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLkVORF9FWFBSKSB7XG4gICAgICBzcGFjZV9iZWZvcmUgPSAhKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJ10nICYmIChjdXJyZW50X3Rva2VuLnRleHQgPT09ICctLScgfHwgY3VycmVudF90b2tlbi50ZXh0ID09PSAnKysnKSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnR5cGUgPT09IFRPS0VOLk9QRVJBVE9SKSB7XG4gICAgICAvLyBhKysgKyArK2I7XG4gICAgICAvLyBhIC0gLWJcbiAgICAgIHNwYWNlX2JlZm9yZSA9IGluX2FycmF5KGN1cnJlbnRfdG9rZW4udGV4dCwgWyctLScsICctJywgJysrJywgJysnXSkgJiYgaW5fYXJyYXkodGhpcy5fZmxhZ3MubGFzdF90b2tlbi50ZXh0LCBbJy0tJywgJy0nLCAnKysnLCAnKyddKTtcbiAgICAgIC8vICsgYW5kIC0gYXJlIG5vdCB1bmFyeSB3aGVuIHByZWNlZWRlZCBieSAtLSBvciArKyBvcGVyYXRvclxuICAgICAgLy8gYS0tICsgYlxuICAgICAgLy8gYSAqICtiXG4gICAgICAvLyBhIC0gLWJcbiAgICAgIGlmIChpbl9hcnJheShjdXJyZW50X3Rva2VuLnRleHQsIFsnKycsICctJ10pICYmIGluX2FycmF5KHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCwgWyctLScsICcrKyddKSkge1xuICAgICAgICBzcGFjZV9hZnRlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICBpZiAoKCh0aGlzLl9mbGFncy5tb2RlID09PSBNT0RFLkJsb2NrU3RhdGVtZW50ICYmICF0aGlzLl9mbGFncy5pbmxpbmVfZnJhbWUpIHx8IHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50KSAmJlxuICAgICAgKHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJ3snIHx8IHRoaXMuX2ZsYWdzLmxhc3RfdG9rZW4udGV4dCA9PT0gJzsnKSkge1xuICAgICAgLy8geyBmb287IC0taSB9XG4gICAgICAvLyBmb28oKTsgLS1iYXI7XG4gICAgICB0aGlzLnByaW50X25ld2xpbmUoKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiB8fCBzcGFjZV9iZWZvcmU7XG4gIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSBzcGFjZV9hZnRlcjtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV9ibG9ja19jb21tZW50ID0gZnVuY3Rpb24oY3VycmVudF90b2tlbiwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKSB7XG4gIGlmICh0aGlzLl9vdXRwdXQucmF3KSB7XG4gICAgdGhpcy5fb3V0cHV0LmFkZF9yYXdfdG9rZW4oY3VycmVudF90b2tlbik7XG4gICAgaWYgKGN1cnJlbnRfdG9rZW4uZGlyZWN0aXZlcyAmJiBjdXJyZW50X3Rva2VuLmRpcmVjdGl2ZXMucHJlc2VydmUgPT09ICdlbmQnKSB7XG4gICAgICAvLyBJZiB3ZSdyZSB0ZXN0aW5nIHRoZSByYXcgb3V0cHV0IGJlaGF2aW9yLCBkbyBub3QgYWxsb3cgYSBkaXJlY3RpdmUgdG8gdHVybiBpdCBvZmYuXG4gICAgICB0aGlzLl9vdXRwdXQucmF3ID0gdGhpcy5fb3B0aW9ucy50ZXN0X291dHB1dF9yYXc7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjdXJyZW50X3Rva2VuLmRpcmVjdGl2ZXMpIHtcbiAgICB0aGlzLnByaW50X25ld2xpbmUoZmFsc2UsIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG4gICAgdGhpcy5wcmludF90b2tlbihjdXJyZW50X3Rva2VuKTtcbiAgICBpZiAoY3VycmVudF90b2tlbi5kaXJlY3RpdmVzLnByZXNlcnZlID09PSAnc3RhcnQnKSB7XG4gICAgICB0aGlzLl9vdXRwdXQucmF3ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wcmludF9uZXdsaW5lKGZhbHNlLCB0cnVlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBpbmxpbmUgYmxvY2tcbiAgaWYgKCFhY29ybi5uZXdsaW5lLnRlc3QoY3VycmVudF90b2tlbi50ZXh0KSAmJiAhY3VycmVudF90b2tlbi5uZXdsaW5lcykge1xuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlO1xuICAgIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gICAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucHJpbnRfYmxvY2tfY29tbW1lbnQoY3VycmVudF90b2tlbiwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUucHJpbnRfYmxvY2tfY29tbW1lbnQgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpIHtcbiAgdmFyIGxpbmVzID0gc3BsaXRfbGluZWJyZWFrcyhjdXJyZW50X3Rva2VuLnRleHQpO1xuICB2YXIgajsgLy8gaXRlcmF0b3IgZm9yIHRoaXMgY2FzZVxuICB2YXIgamF2YWRvYyA9IGZhbHNlO1xuICB2YXIgc3Rhcmxlc3MgPSBmYWxzZTtcbiAgdmFyIGxhc3RJbmRlbnQgPSBjdXJyZW50X3Rva2VuLndoaXRlc3BhY2VfYmVmb3JlO1xuICB2YXIgbGFzdEluZGVudExlbmd0aCA9IGxhc3RJbmRlbnQubGVuZ3RoO1xuXG4gIC8vIGJsb2NrIGNvbW1lbnQgc3RhcnRzIHdpdGggYSBuZXcgbGluZVxuICB0aGlzLnByaW50X25ld2xpbmUoZmFsc2UsIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncyk7XG5cbiAgLy8gZmlyc3QgbGluZSBhbHdheXMgaW5kZW50ZWRcbiAgdGhpcy5wcmludF90b2tlbl9saW5lX2luZGVudGF0aW9uKGN1cnJlbnRfdG9rZW4pO1xuICB0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKGxpbmVzWzBdKTtcbiAgdGhpcy5wcmludF9uZXdsaW5lKGZhbHNlLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuXG5cbiAgaWYgKGxpbmVzLmxlbmd0aCA+IDEpIHtcbiAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKDEpO1xuICAgIGphdmFkb2MgPSBhbGxfbGluZXNfc3RhcnRfd2l0aChsaW5lcywgJyonKTtcbiAgICBzdGFybGVzcyA9IGVhY2hfbGluZV9tYXRjaGVzX2luZGVudChsaW5lcywgbGFzdEluZGVudCk7XG5cbiAgICBpZiAoamF2YWRvYykge1xuICAgICAgdGhpcy5fZmxhZ3MuYWxpZ25tZW50ID0gMTtcbiAgICB9XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgbGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChqYXZhZG9jKSB7XG4gICAgICAgIC8vIGphdmFkb2M6IHJlZm9ybWF0IGFuZCByZS1pbmRlbnRcbiAgICAgICAgdGhpcy5wcmludF90b2tlbl9saW5lX2luZGVudGF0aW9uKGN1cnJlbnRfdG9rZW4pO1xuICAgICAgICB0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKGx0cmltKGxpbmVzW2pdKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJsZXNzICYmIGxpbmVzW2pdKSB7XG4gICAgICAgIC8vIHN0YXJsZXNzOiByZS1pbmRlbnQgbm9uLWVtcHR5IGNvbnRlbnQsIGF2b2lkaW5nIHRyaW1cbiAgICAgICAgdGhpcy5wcmludF90b2tlbl9saW5lX2luZGVudGF0aW9uKGN1cnJlbnRfdG9rZW4pO1xuICAgICAgICB0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKGxpbmVzW2pdLnN1YnN0cmluZyhsYXN0SW5kZW50TGVuZ3RoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3JtYWwgY29tbWVudHMgb3V0cHV0IHJhd1xuICAgICAgICB0aGlzLl9vdXRwdXQuY3VycmVudF9saW5lLnNldF9pbmRlbnQoLTEpO1xuICAgICAgICB0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKGxpbmVzW2pdKTtcbiAgICAgIH1cblxuICAgICAgLy8gZm9yIGNvbW1lbnRzIG9uIHRoZWlyIG93biBsaW5lIG9yICBtb3JlIHRoYW4gb25lIGxpbmUsIG1ha2Ugc3VyZSB0aGVyZSdzIGEgbmV3IGxpbmUgYWZ0ZXJcbiAgICAgIHRoaXMucHJpbnRfbmV3bGluZShmYWxzZSwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mbGFncy5hbGlnbm1lbnQgPSAwO1xuICB9XG59O1xuXG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV9jb21tZW50ID0gZnVuY3Rpb24oY3VycmVudF90b2tlbiwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKSB7XG4gIGlmIChjdXJyZW50X3Rva2VuLm5ld2xpbmVzKSB7XG4gICAgdGhpcy5wcmludF9uZXdsaW5lKGZhbHNlLCBwcmVzZXJ2ZV9zdGF0ZW1lbnRfZmxhZ3MpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX291dHB1dC50cmltKHRydWUpO1xuICB9XG5cbiAgdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7XG4gIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG4gIHRoaXMucHJpbnRfbmV3bGluZShmYWxzZSwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcbn07XG5cbkJlYXV0aWZpZXIucHJvdG90eXBlLmhhbmRsZV9kb3QgPSBmdW5jdGlvbihjdXJyZW50X3Rva2VuKSB7XG4gIGlmICh0aGlzLnN0YXJ0X29mX3N0YXRlbWVudChjdXJyZW50X3Rva2VuKSkge1xuICAgIC8vIFRoZSBjb25kaXRpb25hbCBzdGFydHMgdGhlIHN0YXRlbWVudCBpZiBhcHByb3ByaWF0ZS5cbiAgfSBlbHNlIHtcbiAgICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjdXJyZW50X3Rva2VuLCB0cnVlKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQubWF0Y2goJ15bMC05XSskJykpIHtcbiAgICB0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChyZXNlcnZlZF9hcnJheSh0aGlzLl9mbGFncy5sYXN0X3Rva2VuLCBzcGVjaWFsX3dvcmRzKSkge1xuICAgIHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW4gPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBhbGxvdyBwcmVzZXJ2ZWQgbmV3bGluZXMgYmVmb3JlIGRvdHMgaW4gZ2VuZXJhbFxuICAgIC8vIGZvcmNlIG5ld2xpbmVzIG9uIGRvdHMgYWZ0ZXIgY2xvc2UgcGFyZW4gd2hlbiBicmVha19jaGFpbmVkIC0gZm9yIGJhcigpLmJheigpXG4gICAgdGhpcy5hbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKGN1cnJlbnRfdG9rZW4sXG4gICAgICB0aGlzLl9mbGFncy5sYXN0X3Rva2VuLnRleHQgPT09ICcpJyAmJiB0aGlzLl9vcHRpb25zLmJyZWFrX2NoYWluZWRfbWV0aG9kcyk7XG4gIH1cblxuICAvLyBPbmx5IHVuaW5kZW50IGNoYWluZWQgbWV0aG9kIGRvdCBpZiB0aGlzIGRvdCBzdGFydHMgYSBuZXcgbGluZS5cbiAgLy8gT3RoZXJ3aXNlIHRoZSBhdXRvbWF0aWMgZXh0cmEgaW5kZW50YXRpb24gcmVtb3ZhbCB3aWxsIGhhbmRsZSB0aGUgb3ZlciBpbmRlbnRcbiAgaWYgKHRoaXMuX29wdGlvbnMudW5pbmRlbnRfY2hhaW5lZF9tZXRob2RzICYmIHRoaXMuX291dHB1dC5qdXN0X2FkZGVkX25ld2xpbmUoKSkge1xuICAgIHRoaXMuZGVpbmRlbnQoKTtcbiAgfVxuXG4gIHRoaXMucHJpbnRfdG9rZW4oY3VycmVudF90b2tlbik7XG59O1xuXG5CZWF1dGlmaWVyLnByb3RvdHlwZS5oYW5kbGVfdW5rbm93biA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4sIHByZXNlcnZlX3N0YXRlbWVudF9mbGFncykge1xuICB0aGlzLnByaW50X3Rva2VuKGN1cnJlbnRfdG9rZW4pO1xuXG4gIGlmIChjdXJyZW50X3Rva2VuLnRleHRbY3VycmVudF90b2tlbi50ZXh0Lmxlbmd0aCAtIDFdID09PSAnXFxuJykge1xuICAgIHRoaXMucHJpbnRfbmV3bGluZShmYWxzZSwgcHJlc2VydmVfc3RhdGVtZW50X2ZsYWdzKTtcbiAgfVxufTtcblxuQmVhdXRpZmllci5wcm90b3R5cGUuaGFuZGxlX2VvZiA9IGZ1bmN0aW9uKGN1cnJlbnRfdG9rZW4pIHtcbiAgLy8gVW53aW5kIGFueSBvcGVuIHN0YXRlbWVudHNcbiAgd2hpbGUgKHRoaXMuX2ZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50KSB7XG4gICAgdGhpcy5yZXN0b3JlX21vZGUoKTtcbiAgfVxuICB0aGlzLmhhbmRsZV93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyhjdXJyZW50X3Rva2VuKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLkJlYXV0aWZpZXIgPSBCZWF1dGlmaWVyO1xuIiwiLypqc2hpbnQgbm9kZTp0cnVlICovXG4vKlxuXG4gIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gIENvcHlyaWdodCAoYykgMjAwNy0yMDE4IEVpbmFyIExpZWxtYW5pcywgTGlhbSBOZXdtYW4sIGFuZCBjb250cmlidXRvcnMuXG5cbiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXNcbiAgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLFxuICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLFxuICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLFxuICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0ZcbiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSU1xuICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbiAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICBTT0ZUV0FSRS5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEJlYXV0aWZpZXIgPSByZXF1aXJlKCcuL2JlYXV0aWZpZXInKS5CZWF1dGlmaWVyLFxuICBPcHRpb25zID0gcmVxdWlyZSgnLi9vcHRpb25zJykuT3B0aW9ucztcblxuZnVuY3Rpb24ganNfYmVhdXRpZnkoanNfc291cmNlX3RleHQsIG9wdGlvbnMpIHtcbiAgdmFyIGJlYXV0aWZpZXIgPSBuZXcgQmVhdXRpZmllcihqc19zb3VyY2VfdGV4dCwgb3B0aW9ucyk7XG4gIHJldHVybiBiZWF1dGlmaWVyLmJlYXV0aWZ5KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ganNfYmVhdXRpZnk7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IE9wdGlvbnMoKTtcbn07XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQmFzZU9wdGlvbnMgPSByZXF1aXJlKCcuLi9jb3JlL29wdGlvbnMnKS5PcHRpb25zO1xuXG52YXIgdmFsaWRQb3NpdGlvblZhbHVlcyA9IFsnYmVmb3JlLW5ld2xpbmUnLCAnYWZ0ZXItbmV3bGluZScsICdwcmVzZXJ2ZS1uZXdsaW5lJ107XG5cbmZ1bmN0aW9uIE9wdGlvbnMob3B0aW9ucykge1xuICBCYXNlT3B0aW9ucy5jYWxsKHRoaXMsIG9wdGlvbnMsICdqcycpO1xuXG4gIC8vIGNvbXBhdGliaWxpdHksIHJlXG4gIHZhciByYXdfYnJhY2Vfc3R5bGUgPSB0aGlzLnJhd19vcHRpb25zLmJyYWNlX3N0eWxlIHx8IG51bGw7XG4gIGlmIChyYXdfYnJhY2Vfc3R5bGUgPT09IFwiZXhwYW5kLXN0cmljdFwiKSB7IC8vZ3JhY2VmdWwgaGFuZGxpbmcgb2YgZGVwcmVjYXRlZCBvcHRpb25cbiAgICB0aGlzLnJhd19vcHRpb25zLmJyYWNlX3N0eWxlID0gXCJleHBhbmRcIjtcbiAgfSBlbHNlIGlmIChyYXdfYnJhY2Vfc3R5bGUgPT09IFwiY29sbGFwc2UtcHJlc2VydmUtaW5saW5lXCIpIHsgLy9ncmFjZWZ1bCBoYW5kbGluZyBvZiBkZXByZWNhdGVkIG9wdGlvblxuICAgIHRoaXMucmF3X29wdGlvbnMuYnJhY2Vfc3R5bGUgPSBcImNvbGxhcHNlLHByZXNlcnZlLWlubGluZVwiO1xuICB9IGVsc2UgaWYgKHRoaXMucmF3X29wdGlvbnMuYnJhY2VzX29uX293bl9saW5lICE9PSB1bmRlZmluZWQpIHsgLy9ncmFjZWZ1bCBoYW5kbGluZyBvZiBkZXByZWNhdGVkIG9wdGlvblxuICAgIHRoaXMucmF3X29wdGlvbnMuYnJhY2Vfc3R5bGUgPSB0aGlzLnJhd19vcHRpb25zLmJyYWNlc19vbl9vd25fbGluZSA/IFwiZXhwYW5kXCIgOiBcImNvbGxhcHNlXCI7XG4gICAgLy8gfSBlbHNlIGlmICghcmF3X2JyYWNlX3N0eWxlKSB7IC8vTm90aGluZyBleGlzdHMgdG8gc2V0IGl0XG4gICAgLy8gICByYXdfYnJhY2Vfc3R5bGUgPSBcImNvbGxhcHNlXCI7XG4gIH1cblxuICAvL3ByZXNlcnZlLWlubGluZSBpbiBkZWxpbWl0ZWQgc3RyaW5nIHdpbGwgdHJpZ2dlciBicmFjZV9wcmVzZXJ2ZV9pbmxpbmUsIGV2ZXJ5dGhpbmdcbiAgLy9lbHNlIGlzIGNvbnNpZGVyZWQgYSBicmFjZV9zdHlsZSBhbmQgdGhlIGxhc3Qgb25lIG9ubHkgd2lsbCBoYXZlIGFuIGVmZmVjdFxuXG4gIHZhciBicmFjZV9zdHlsZV9zcGxpdCA9IHRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgnYnJhY2Vfc3R5bGUnLCBbJ2NvbGxhcHNlJywgJ2V4cGFuZCcsICdlbmQtZXhwYW5kJywgJ25vbmUnLCAncHJlc2VydmUtaW5saW5lJ10pO1xuXG4gIHRoaXMuYnJhY2VfcHJlc2VydmVfaW5saW5lID0gZmFsc2U7IC8vRGVmYXVsdHMgaW4gY2FzZSBvbmUgb3Igb3RoZXIgd2FzIG5vdCBzcGVjaWZpZWQgaW4gbWV0YS1vcHRpb25cbiAgdGhpcy5icmFjZV9zdHlsZSA9IFwiY29sbGFwc2VcIjtcblxuICBmb3IgKHZhciBicyA9IDA7IGJzIDwgYnJhY2Vfc3R5bGVfc3BsaXQubGVuZ3RoOyBicysrKSB7XG4gICAgaWYgKGJyYWNlX3N0eWxlX3NwbGl0W2JzXSA9PT0gXCJwcmVzZXJ2ZS1pbmxpbmVcIikge1xuICAgICAgdGhpcy5icmFjZV9wcmVzZXJ2ZV9pbmxpbmUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJyYWNlX3N0eWxlID0gYnJhY2Vfc3R5bGVfc3BsaXRbYnNdO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMudW5pbmRlbnRfY2hhaW5lZF9tZXRob2RzID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ3VuaW5kZW50X2NoYWluZWRfbWV0aG9kcycpO1xuICB0aGlzLmJyZWFrX2NoYWluZWRfbWV0aG9kcyA9IHRoaXMuX2dldF9ib29sZWFuKCdicmVha19jaGFpbmVkX21ldGhvZHMnKTtcbiAgdGhpcy5zcGFjZV9pbl9wYXJlbiA9IHRoaXMuX2dldF9ib29sZWFuKCdzcGFjZV9pbl9wYXJlbicpO1xuICB0aGlzLnNwYWNlX2luX2VtcHR5X3BhcmVuID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ3NwYWNlX2luX2VtcHR5X3BhcmVuJyk7XG4gIHRoaXMuanNsaW50X2hhcHB5ID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ2pzbGludF9oYXBweScpO1xuICB0aGlzLnNwYWNlX2FmdGVyX2Fub25fZnVuY3Rpb24gPSB0aGlzLl9nZXRfYm9vbGVhbignc3BhY2VfYWZ0ZXJfYW5vbl9mdW5jdGlvbicpO1xuICB0aGlzLnNwYWNlX2FmdGVyX25hbWVkX2Z1bmN0aW9uID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ3NwYWNlX2FmdGVyX25hbWVkX2Z1bmN0aW9uJyk7XG4gIHRoaXMua2VlcF9hcnJheV9pbmRlbnRhdGlvbiA9IHRoaXMuX2dldF9ib29sZWFuKCdrZWVwX2FycmF5X2luZGVudGF0aW9uJyk7XG4gIHRoaXMuc3BhY2VfYmVmb3JlX2NvbmRpdGlvbmFsID0gdGhpcy5fZ2V0X2Jvb2xlYW4oJ3NwYWNlX2JlZm9yZV9jb25kaXRpb25hbCcsIHRydWUpO1xuICB0aGlzLnVuZXNjYXBlX3N0cmluZ3MgPSB0aGlzLl9nZXRfYm9vbGVhbigndW5lc2NhcGVfc3RyaW5ncycpO1xuICB0aGlzLmU0eCA9IHRoaXMuX2dldF9ib29sZWFuKCdlNHgnKTtcbiAgdGhpcy5jb21tYV9maXJzdCA9IHRoaXMuX2dldF9ib29sZWFuKCdjb21tYV9maXJzdCcpO1xuICB0aGlzLm9wZXJhdG9yX3Bvc2l0aW9uID0gdGhpcy5fZ2V0X3NlbGVjdGlvbignb3BlcmF0b3JfcG9zaXRpb24nLCB2YWxpZFBvc2l0aW9uVmFsdWVzKTtcblxuICAvLyBGb3IgdGVzdGluZyBvZiBiZWF1dGlmeSBwcmVzZXJ2ZTpzdGFydCBkaXJlY3RpdmVcbiAgdGhpcy50ZXN0X291dHB1dF9yYXcgPSB0aGlzLl9nZXRfYm9vbGVhbigndGVzdF9vdXRwdXRfcmF3Jyk7XG5cbiAgLy8gZm9yY2UgdGhpcy5fb3B0aW9ucy5zcGFjZV9hZnRlcl9hbm9uX2Z1bmN0aW9uIHRvIHRydWUgaWYgdGhpcy5fb3B0aW9ucy5qc2xpbnRfaGFwcHlcbiAgaWYgKHRoaXMuanNsaW50X2hhcHB5KSB7XG4gICAgdGhpcy5zcGFjZV9hZnRlcl9hbm9uX2Z1bmN0aW9uID0gdHJ1ZTtcbiAgfVxuXG59XG5PcHRpb25zLnByb3RvdHlwZSA9IG5ldyBCYXNlT3B0aW9ucygpO1xuXG5cblxubW9kdWxlLmV4cG9ydHMuT3B0aW9ucyA9IE9wdGlvbnM7XG4iLCIvKmpzaGludCBub2RlOnRydWUgKi9cbi8qXG5cbiAgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTggRWluYXIgTGllbG1hbmlzLCBMaWFtIE5ld21hbiwgYW5kIGNvbnRyaWJ1dG9ycy5cblxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlc1xuICAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sXG4gIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsXG4gIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4gIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4gIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTXG4gIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gIFNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgSW5wdXRTY2FubmVyID0gcmVxdWlyZSgnLi4vY29yZS9pbnB1dHNjYW5uZXInKS5JbnB1dFNjYW5uZXI7XG52YXIgQmFzZVRva2VuaXplciA9IHJlcXVpcmUoJy4uL2NvcmUvdG9rZW5pemVyJykuVG9rZW5pemVyO1xudmFyIEJBU0VUT0tFTiA9IHJlcXVpcmUoJy4uL2NvcmUvdG9rZW5pemVyJykuVE9LRU47XG52YXIgRGlyZWN0aXZlcyA9IHJlcXVpcmUoJy4uL2NvcmUvZGlyZWN0aXZlcycpLkRpcmVjdGl2ZXM7XG52YXIgYWNvcm4gPSByZXF1aXJlKCcuL2Fjb3JuJyk7XG52YXIgUGF0dGVybiA9IHJlcXVpcmUoJy4uL2NvcmUvcGF0dGVybicpLlBhdHRlcm47XG52YXIgVGVtcGxhdGFibGVQYXR0ZXJuID0gcmVxdWlyZSgnLi4vY29yZS90ZW1wbGF0YWJsZXBhdHRlcm4nKS5UZW1wbGF0YWJsZVBhdHRlcm47XG5cblxuZnVuY3Rpb24gaW5fYXJyYXkod2hhdCwgYXJyKSB7XG4gIHJldHVybiBhcnIuaW5kZXhPZih3aGF0KSAhPT0gLTE7XG59XG5cblxudmFyIFRPS0VOID0ge1xuICBTVEFSVF9FWFBSOiAnVEtfU1RBUlRfRVhQUicsXG4gIEVORF9FWFBSOiAnVEtfRU5EX0VYUFInLFxuICBTVEFSVF9CTE9DSzogJ1RLX1NUQVJUX0JMT0NLJyxcbiAgRU5EX0JMT0NLOiAnVEtfRU5EX0JMT0NLJyxcbiAgV09SRDogJ1RLX1dPUkQnLFxuICBSRVNFUlZFRDogJ1RLX1JFU0VSVkVEJyxcbiAgU0VNSUNPTE9OOiAnVEtfU0VNSUNPTE9OJyxcbiAgU1RSSU5HOiAnVEtfU1RSSU5HJyxcbiAgRVFVQUxTOiAnVEtfRVFVQUxTJyxcbiAgT1BFUkFUT1I6ICdUS19PUEVSQVRPUicsXG4gIENPTU1BOiAnVEtfQ09NTUEnLFxuICBCTE9DS19DT01NRU5UOiAnVEtfQkxPQ0tfQ09NTUVOVCcsXG4gIENPTU1FTlQ6ICdUS19DT01NRU5UJyxcbiAgRE9UOiAnVEtfRE9UJyxcbiAgVU5LTk9XTjogJ1RLX1VOS05PV04nLFxuICBTVEFSVDogQkFTRVRPS0VOLlNUQVJULFxuICBSQVc6IEJBU0VUT0tFTi5SQVcsXG4gIEVPRjogQkFTRVRPS0VOLkVPRlxufTtcblxuXG52YXIgZGlyZWN0aXZlc19jb3JlID0gbmV3IERpcmVjdGl2ZXMoL1xcL1xcKi8sIC9cXCpcXC8vKTtcblxudmFyIG51bWJlcl9wYXR0ZXJuID0gLzBbeFhdWzAxMjM0NTY3ODlhYmNkZWZBQkNERUZfXSpuP3wwW29PXVswMTIzNDU2N19dKm4/fDBbYkJdWzAxX10qbj98XFxkW1xcZF9dKm58KD86XFwuXFxkW1xcZF9dKnxcXGRbXFxkX10qXFwuP1tcXGRfXSopKD86W2VFXVsrLV0/W1xcZF9dKyk/LztcblxudmFyIGRpZ2l0ID0gL1swLTldLztcblxuLy8gRG90IFwiLlwiIG11c3QgYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIFwiLi4uXCIgYW5kIGRlY2ltYWxcbnZhciBkb3RfcGF0dGVybiA9IC9bXlxcZFxcLl0vO1xuXG52YXIgcG9zaXRpb25hYmxlX29wZXJhdG9ycyA9IChcbiAgXCI+Pj4gPT09ICE9PSAmJj0gPz89IHx8PSBcIiArXG4gIFwiPDwgJiYgPj0gKiogIT0gPT0gPD0gPj4gfHwgPz8gfD4gXCIgK1xuICBcIjwgLyAtICsgPiA6ICYgJSA/IF4gfCAqXCIpLnNwbGl0KCcgJyk7XG5cbi8vIElNUE9SVEFOVDogdGhpcyBtdXN0IGJlIHNvcnRlZCBsb25nZXN0IHRvIHNob3J0ZXN0IG9yIHRva2VuaXppbmcgbWFueSBub3Qgd29yay5cbi8vIEFsc28sIHlvdSBtdXN0IHVwZGF0ZSBwb3NzaXRpb25hYmxlIG9wZXJhdG9ycyBzZXBhcmF0ZWx5IGZyb20gcHVuY3RcbnZhciBwdW5jdCA9XG4gIFwiPj4+PSBcIiArXG4gIFwiLi4uID4+PSA8PD0gPT09ID4+PiAhPT0gKio9ICYmPSA/Pz0gfHw9IFwiICtcbiAgXCI9PiBePSA6OiAvPSA8PCA8PSA9PSAmJiAtPSA+PSA+PiAhPSAtLSArPSAqKiB8fCA/PyArKyAlPSAmPSAqPSB8PSB8PiBcIiArXG4gIFwiPSAhID8gPiA8IDogLyBeIC0gKyAqICYgJSB+IHxcIjtcblxucHVuY3QgPSBwdW5jdC5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I10vZywgXCJcXFxcJCZcIik7XG4vLyA/LiBidXQgbm90IGlmIGZvbGxvd2VkIGJ5IGEgbnVtYmVyIFxucHVuY3QgPSAnXFxcXD9cXFxcLig/IVxcXFxkKSAnICsgcHVuY3Q7XG5wdW5jdCA9IHB1bmN0LnJlcGxhY2UoLyAvZywgJ3wnKTtcblxudmFyIHB1bmN0X3BhdHRlcm4gPSBuZXcgUmVnRXhwKHB1bmN0KTtcblxuLy8gd29yZHMgd2hpY2ggc2hvdWxkIGFsd2F5cyBzdGFydCBvbiBuZXcgbGluZS5cbnZhciBsaW5lX3N0YXJ0ZXJzID0gJ2NvbnRpbnVlLHRyeSx0aHJvdyxyZXR1cm4sdmFyLGxldCxjb25zdCxpZixzd2l0Y2gsY2FzZSxkZWZhdWx0LGZvcix3aGlsZSxicmVhayxmdW5jdGlvbixpbXBvcnQsZXhwb3J0Jy5zcGxpdCgnLCcpO1xudmFyIHJlc2VydmVkX3dvcmRzID0gbGluZV9zdGFydGVycy5jb25jYXQoWydkbycsICdpbicsICdvZicsICdlbHNlJywgJ2dldCcsICdzZXQnLCAnbmV3JywgJ2NhdGNoJywgJ2ZpbmFsbHknLCAndHlwZW9mJywgJ3lpZWxkJywgJ2FzeW5jJywgJ2F3YWl0JywgJ2Zyb20nLCAnYXMnLCAnY2xhc3MnLCAnZXh0ZW5kcyddKTtcbnZhciByZXNlcnZlZF93b3JkX3BhdHRlcm4gPSBuZXcgUmVnRXhwKCdeKD86JyArIHJlc2VydmVkX3dvcmRzLmpvaW4oJ3wnKSArICcpJCcpO1xuXG4vLyB2YXIgdGVtcGxhdGVfcGF0dGVybiA9IC8oPzooPzo8XFw/cGhwfDxcXD89KVtcXHNcXFNdKj9cXD8+KXwoPzo8JVtcXHNcXFNdKj8lPikvZztcblxudmFyIGluX2h0bWxfY29tbWVudDtcblxudmFyIFRva2VuaXplciA9IGZ1bmN0aW9uKGlucHV0X3N0cmluZywgb3B0aW9ucykge1xuICBCYXNlVG9rZW5pemVyLmNhbGwodGhpcywgaW5wdXRfc3RyaW5nLCBvcHRpb25zKTtcblxuICB0aGlzLl9wYXR0ZXJucy53aGl0ZXNwYWNlID0gdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZS5tYXRjaGluZyhcbiAgICAvXFx1MDBBMFxcdTE2ODBcXHUxODBlXFx1MjAwMC1cXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1ZmVmZi8uc291cmNlLFxuICAgIC9cXHUyMDI4XFx1MjAyOS8uc291cmNlKTtcblxuICB2YXIgcGF0dGVybl9yZWFkZXIgPSBuZXcgUGF0dGVybih0aGlzLl9pbnB1dCk7XG4gIHZhciB0ZW1wbGF0YWJsZSA9IG5ldyBUZW1wbGF0YWJsZVBhdHRlcm4odGhpcy5faW5wdXQpXG4gICAgLnJlYWRfb3B0aW9ucyh0aGlzLl9vcHRpb25zKTtcblxuICB0aGlzLl9fcGF0dGVybnMgPSB7XG4gICAgdGVtcGxhdGU6IHRlbXBsYXRhYmxlLFxuICAgIGlkZW50aWZpZXI6IHRlbXBsYXRhYmxlLnN0YXJ0aW5nX3dpdGgoYWNvcm4uaWRlbnRpZmllcikubWF0Y2hpbmcoYWNvcm4uaWRlbnRpZmllck1hdGNoKSxcbiAgICBudW1iZXI6IHBhdHRlcm5fcmVhZGVyLm1hdGNoaW5nKG51bWJlcl9wYXR0ZXJuKSxcbiAgICBwdW5jdDogcGF0dGVybl9yZWFkZXIubWF0Y2hpbmcocHVuY3RfcGF0dGVybiksXG4gICAgLy8gY29tbWVudCBlbmRzIGp1c3QgYmVmb3JlIG5lYXJlc3QgbGluZWZlZWQgb3IgZW5kIG9mIGZpbGVcbiAgICBjb21tZW50OiBwYXR0ZXJuX3JlYWRlci5zdGFydGluZ193aXRoKC9cXC9cXC8vKS51bnRpbCgvW1xcblxcclxcdTIwMjhcXHUyMDI5XS8pLFxuICAgIC8vICAvKiAuLi4gKi8gY29tbWVudCBlbmRzIHdpdGggbmVhcmVzdCAqLyBvciBlbmQgb2YgZmlsZVxuICAgIGJsb2NrX2NvbW1lbnQ6IHBhdHRlcm5fcmVhZGVyLnN0YXJ0aW5nX3dpdGgoL1xcL1xcKi8pLnVudGlsX2FmdGVyKC9cXCpcXC8vKSxcbiAgICBodG1sX2NvbW1lbnRfc3RhcnQ6IHBhdHRlcm5fcmVhZGVyLm1hdGNoaW5nKC88IS0tLyksXG4gICAgaHRtbF9jb21tZW50X2VuZDogcGF0dGVybl9yZWFkZXIubWF0Y2hpbmcoLy0tPi8pLFxuICAgIGluY2x1ZGU6IHBhdHRlcm5fcmVhZGVyLnN0YXJ0aW5nX3dpdGgoLyNpbmNsdWRlLykudW50aWxfYWZ0ZXIoYWNvcm4ubGluZUJyZWFrKSxcbiAgICBzaGViYW5nOiBwYXR0ZXJuX3JlYWRlci5zdGFydGluZ193aXRoKC8jIS8pLnVudGlsX2FmdGVyKGFjb3JuLmxpbmVCcmVhayksXG4gICAgeG1sOiBwYXR0ZXJuX3JlYWRlci5tYXRjaGluZygvW1xcc1xcU10qPzwoXFwvPykoWy1hLXpBLVo6MC05Xy5dK3x7W159XSs/fXwhXFxbQ0RBVEFcXFtbXlxcXV0qP1xcXVxcXXwpKFxccyp7W159XSs/fXxcXHMrWy1hLXpBLVo6MC05Xy5dK3xcXHMrWy1hLXpBLVo6MC05Xy5dK1xccyo9XFxzKignW14nXSonfFwiW15cIl0qXCJ8eyhbXnt9XXx7W159XSs/fSkrP30pKSpcXHMqKFxcLz8pXFxzKj4vKSxcbiAgICBzaW5nbGVfcXVvdGU6IHRlbXBsYXRhYmxlLnVudGlsKC9bJ1xcXFxcXG5cXHJcXHUyMDI4XFx1MjAyOV0vKSxcbiAgICBkb3VibGVfcXVvdGU6IHRlbXBsYXRhYmxlLnVudGlsKC9bXCJcXFxcXFxuXFxyXFx1MjAyOFxcdTIwMjldLyksXG4gICAgdGVtcGxhdGVfdGV4dDogdGVtcGxhdGFibGUudW50aWwoL1tgXFxcXCRdLyksXG4gICAgdGVtcGxhdGVfZXhwcmVzc2lvbjogdGVtcGxhdGFibGUudW50aWwoL1tgfVxcXFxdLylcbiAgfTtcblxufTtcblRva2VuaXplci5wcm90b3R5cGUgPSBuZXcgQmFzZVRva2VuaXplcigpO1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc19jb21tZW50ID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICByZXR1cm4gY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5DT01NRU5UIHx8IGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uQkxPQ0tfQ09NTUVOVCB8fCBjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlVOS05PV047XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc19vcGVuaW5nID0gZnVuY3Rpb24oY3VycmVudF90b2tlbikge1xuICByZXR1cm4gY3VycmVudF90b2tlbi50eXBlID09PSBUT0tFTi5TVEFSVF9CTE9DSyB8fCBjdXJyZW50X3Rva2VuLnR5cGUgPT09IFRPS0VOLlNUQVJUX0VYUFI7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc19jbG9zaW5nID0gZnVuY3Rpb24oY3VycmVudF90b2tlbiwgb3Blbl90b2tlbikge1xuICByZXR1cm4gKGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0JMT0NLIHx8IGN1cnJlbnRfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0VYUFIpICYmXG4gICAgKG9wZW5fdG9rZW4gJiYgKFxuICAgICAgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJ10nICYmIG9wZW5fdG9rZW4udGV4dCA9PT0gJ1snKSB8fFxuICAgICAgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJyknICYmIG9wZW5fdG9rZW4udGV4dCA9PT0gJygnKSB8fFxuICAgICAgKGN1cnJlbnRfdG9rZW4udGV4dCA9PT0gJ30nICYmIG9wZW5fdG9rZW4udGV4dCA9PT0gJ3snKSkpO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgaW5faHRtbF9jb21tZW50ID0gZmFsc2U7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9nZXRfbmV4dF90b2tlbiA9IGZ1bmN0aW9uKHByZXZpb3VzX3Rva2VuLCBvcGVuX3Rva2VuKSB7IC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbiAgdmFyIHRva2VuID0gbnVsbDtcbiAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTtcbiAgdmFyIGMgPSB0aGlzLl9pbnB1dC5wZWVrKCk7XG5cbiAgaWYgKGMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLkVPRiwgJycpO1xuICB9XG5cbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9yZWFkX25vbl9qYXZhc2NyaXB0KGMpO1xuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX3JlYWRfc3RyaW5nKGMpO1xuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX3JlYWRfcGFpcihjLCB0aGlzLl9pbnB1dC5wZWVrKDEpKTsgLy8gSXNzdWUgIzIwNjIgaGFjayBmb3IgcmVjb3JkIHR5cGUgJyN7J1xuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX3JlYWRfd29yZChwcmV2aW91c190b2tlbik7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF9zaW5nbGVzKGMpO1xuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX3JlYWRfY29tbWVudChjKTtcbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9yZWFkX3JlZ2V4cChjLCBwcmV2aW91c190b2tlbik7XG4gIHRva2VuID0gdG9rZW4gfHwgdGhpcy5fcmVhZF94bWwoYywgcHJldmlvdXNfdG9rZW4pO1xuICB0b2tlbiA9IHRva2VuIHx8IHRoaXMuX3JlYWRfcHVuY3R1YXRpb24oKTtcbiAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uVU5LTk9XTiwgdGhpcy5faW5wdXQubmV4dCgpKTtcblxuICByZXR1cm4gdG9rZW47XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX3dvcmQgPSBmdW5jdGlvbihwcmV2aW91c190b2tlbikge1xuICB2YXIgcmVzdWx0aW5nX3N0cmluZztcbiAgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX19wYXR0ZXJucy5pZGVudGlmaWVyLnJlYWQoKTtcbiAgaWYgKHJlc3VsdGluZ19zdHJpbmcgIT09ICcnKSB7XG4gICAgcmVzdWx0aW5nX3N0cmluZyA9IHJlc3VsdGluZ19zdHJpbmcucmVwbGFjZShhY29ybi5hbGxMaW5lQnJlYWtzLCAnXFxuJyk7XG4gICAgaWYgKCEocHJldmlvdXNfdG9rZW4udHlwZSA9PT0gVE9LRU4uRE9UIHx8XG4gICAgICAgIChwcmV2aW91c190b2tlbi50eXBlID09PSBUT0tFTi5SRVNFUlZFRCAmJiAocHJldmlvdXNfdG9rZW4udGV4dCA9PT0gJ3NldCcgfHwgcHJldmlvdXNfdG9rZW4udGV4dCA9PT0gJ2dldCcpKSkgJiZcbiAgICAgIHJlc2VydmVkX3dvcmRfcGF0dGVybi50ZXN0KHJlc3VsdGluZ19zdHJpbmcpKSB7XG4gICAgICBpZiAoKHJlc3VsdGluZ19zdHJpbmcgPT09ICdpbicgfHwgcmVzdWx0aW5nX3N0cmluZyA9PT0gJ29mJykgJiZcbiAgICAgICAgKHByZXZpb3VzX3Rva2VuLnR5cGUgPT09IFRPS0VOLldPUkQgfHwgcHJldmlvdXNfdG9rZW4udHlwZSA9PT0gVE9LRU4uU1RSSU5HKSkgeyAvLyBoYWNrIGZvciAnaW4nIGFuZCAnb2YnIG9wZXJhdG9yc1xuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLk9QRVJBVE9SLCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uUkVTRVJWRUQsIHJlc3VsdGluZ19zdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLldPUkQsIHJlc3VsdGluZ19zdHJpbmcpO1xuICB9XG5cbiAgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX19wYXR0ZXJucy5udW1iZXIucmVhZCgpO1xuICBpZiAocmVzdWx0aW5nX3N0cmluZyAhPT0gJycpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLldPUkQsIHJlc3VsdGluZ19zdHJpbmcpO1xuICB9XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX3NpbmdsZXMgPSBmdW5jdGlvbihjKSB7XG4gIHZhciB0b2tlbiA9IG51bGw7XG4gIGlmIChjID09PSAnKCcgfHwgYyA9PT0gJ1snKSB7XG4gICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uU1RBUlRfRVhQUiwgYyk7XG4gIH0gZWxzZSBpZiAoYyA9PT0gJyknIHx8IGMgPT09ICddJykge1xuICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLkVORF9FWFBSLCBjKTtcbiAgfSBlbHNlIGlmIChjID09PSAneycpIHtcbiAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5TVEFSVF9CTE9DSywgYyk7XG4gIH0gZWxzZSBpZiAoYyA9PT0gJ30nKSB7XG4gICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uRU5EX0JMT0NLLCBjKTtcbiAgfSBlbHNlIGlmIChjID09PSAnOycpIHtcbiAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5TRU1JQ09MT04sIGMpO1xuICB9IGVsc2UgaWYgKGMgPT09ICcuJyAmJiBkb3RfcGF0dGVybi50ZXN0KHRoaXMuX2lucHV0LnBlZWsoMSkpKSB7XG4gICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uRE9ULCBjKTtcbiAgfSBlbHNlIGlmIChjID09PSAnLCcpIHtcbiAgICB0b2tlbiA9IHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5DT01NQSwgYyk7XG4gIH1cblxuICBpZiAodG9rZW4pIHtcbiAgICB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gIH1cbiAgcmV0dXJuIHRva2VuO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVhZF9wYWlyID0gZnVuY3Rpb24oYywgZCkge1xuICB2YXIgdG9rZW4gPSBudWxsO1xuICBpZiAoYyA9PT0gJyMnICYmIGQgPT09ICd7Jykge1xuICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLlNUQVJUX0JMT0NLLCBjICsgZCk7XG4gIH1cblxuICBpZiAodG9rZW4pIHtcbiAgICB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgdGhpcy5faW5wdXQubmV4dCgpO1xuICB9XG4gIHJldHVybiB0b2tlbjtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRfcHVuY3R1YXRpb24gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3VsdGluZ19zdHJpbmcgPSB0aGlzLl9fcGF0dGVybnMucHVuY3QucmVhZCgpO1xuXG4gIGlmIChyZXN1bHRpbmdfc3RyaW5nICE9PSAnJykge1xuICAgIGlmIChyZXN1bHRpbmdfc3RyaW5nID09PSAnPScpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uRVFVQUxTLCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdGluZ19zdHJpbmcgPT09ICc/LicpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uRE9ULCByZXN1bHRpbmdfc3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5PUEVSQVRPUiwgcmVzdWx0aW5nX3N0cmluZyk7XG4gICAgfVxuICB9XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX25vbl9qYXZhc2NyaXB0ID0gZnVuY3Rpb24oYykge1xuICB2YXIgcmVzdWx0aW5nX3N0cmluZyA9ICcnO1xuXG4gIGlmIChjID09PSAnIycpIHtcbiAgICBpZiAodGhpcy5faXNfZmlyc3RfdG9rZW4oKSkge1xuICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX19wYXR0ZXJucy5zaGViYW5nLnJlYWQoKTtcblxuICAgICAgaWYgKHJlc3VsdGluZ19zdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5VTktOT1dOLCByZXN1bHRpbmdfc3RyaW5nLnRyaW0oKSArICdcXG4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoYW5kbGVzIGV4dGVuZHNjcmlwdCAjaW5jbHVkZXNcbiAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmluY2x1ZGUucmVhZCgpO1xuXG4gICAgaWYgKHJlc3VsdGluZ19zdHJpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uVU5LTk9XTiwgcmVzdWx0aW5nX3N0cmluZy50cmltKCkgKyAnXFxuJyk7XG4gICAgfVxuXG4gICAgYyA9IHRoaXMuX2lucHV0Lm5leHQoKTtcblxuICAgIC8vIFNwaWRlcm1vbmtleS1zcGVjaWZpYyBzaGFycCB2YXJpYWJsZXMgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMuIENvbnNpZGVyZWQgb2Jzb2xldGUuXG4gICAgdmFyIHNoYXJwID0gJyMnO1xuICAgIGlmICh0aGlzLl9pbnB1dC5oYXNOZXh0KCkgJiYgdGhpcy5faW5wdXQudGVzdENoYXIoZGlnaXQpKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGMgPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgICAgIHNoYXJwICs9IGM7XG4gICAgICB9IHdoaWxlICh0aGlzLl9pbnB1dC5oYXNOZXh0KCkgJiYgYyAhPT0gJyMnICYmIGMgIT09ICc9Jyk7XG4gICAgICBpZiAoYyA9PT0gJyMnKSB7XG4gICAgICAgIC8vXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gJ1snICYmIHRoaXMuX2lucHV0LnBlZWsoMSkgPT09ICddJykge1xuICAgICAgICBzaGFycCArPSAnW10nO1xuICAgICAgICB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXQucGVlaygpID09PSAneycgJiYgdGhpcy5faW5wdXQucGVlaygxKSA9PT0gJ30nKSB7XG4gICAgICAgIHNoYXJwICs9ICd7fSc7XG4gICAgICAgIHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgICAgdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5XT1JELCBzaGFycCk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5wdXQuYmFjaygpO1xuXG4gIH0gZWxzZSBpZiAoYyA9PT0gJzwnICYmIHRoaXMuX2lzX2ZpcnN0X3Rva2VuKCkpIHtcbiAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmh0bWxfY29tbWVudF9zdGFydC5yZWFkKCk7XG4gICAgaWYgKHJlc3VsdGluZ19zdHJpbmcpIHtcbiAgICAgIHdoaWxlICh0aGlzLl9pbnB1dC5oYXNOZXh0KCkgJiYgIXRoaXMuX2lucHV0LnRlc3RDaGFyKGFjb3JuLm5ld2xpbmUpKSB7XG4gICAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgICAgfVxuICAgICAgaW5faHRtbF9jb21tZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uQ09NTUVOVCwgcmVzdWx0aW5nX3N0cmluZyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGluX2h0bWxfY29tbWVudCAmJiBjID09PSAnLScpIHtcbiAgICByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5fX3BhdHRlcm5zLmh0bWxfY29tbWVudF9lbmQucmVhZCgpO1xuICAgIGlmIChyZXN1bHRpbmdfc3RyaW5nKSB7XG4gICAgICBpbl9odG1sX2NvbW1lbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uQ09NTUVOVCwgcmVzdWx0aW5nX3N0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX2NvbW1lbnQgPSBmdW5jdGlvbihjKSB7XG4gIHZhciB0b2tlbiA9IG51bGw7XG4gIGlmIChjID09PSAnLycpIHtcbiAgICB2YXIgY29tbWVudCA9ICcnO1xuICAgIGlmICh0aGlzLl9pbnB1dC5wZWVrKDEpID09PSAnKicpIHtcbiAgICAgIC8vIHBlZWsgZm9yIGNvbW1lbnQgLyogLi4uICovXG4gICAgICBjb21tZW50ID0gdGhpcy5fX3BhdHRlcm5zLmJsb2NrX2NvbW1lbnQucmVhZCgpO1xuICAgICAgdmFyIGRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzX2NvcmUuZ2V0X2RpcmVjdGl2ZXMoY29tbWVudCk7XG4gICAgICBpZiAoZGlyZWN0aXZlcyAmJiBkaXJlY3RpdmVzLmlnbm9yZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICBjb21tZW50ICs9IGRpcmVjdGl2ZXNfY29yZS5yZWFkSWdub3JlZCh0aGlzLl9pbnB1dCk7XG4gICAgICB9XG4gICAgICBjb21tZW50ID0gY29tbWVudC5yZXBsYWNlKGFjb3JuLmFsbExpbmVCcmVha3MsICdcXG4nKTtcbiAgICAgIHRva2VuID0gdGhpcy5fY3JlYXRlX3Rva2VuKFRPS0VOLkJMT0NLX0NPTU1FTlQsIGNvbW1lbnQpO1xuICAgICAgdG9rZW4uZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXM7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dC5wZWVrKDEpID09PSAnLycpIHtcbiAgICAgIC8vIHBlZWsgZm9yIGNvbW1lbnQgLy8gLi4uXG4gICAgICBjb21tZW50ID0gdGhpcy5fX3BhdHRlcm5zLmNvbW1lbnQucmVhZCgpO1xuICAgICAgdG9rZW4gPSB0aGlzLl9jcmVhdGVfdG9rZW4oVE9LRU4uQ09NTUVOVCwgY29tbWVudCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b2tlbjtcbn07XG5cblRva2VuaXplci5wcm90b3R5cGUuX3JlYWRfc3RyaW5nID0gZnVuY3Rpb24oYykge1xuICBpZiAoYyA9PT0gJ2AnIHx8IGMgPT09IFwiJ1wiIHx8IGMgPT09ICdcIicpIHtcbiAgICB2YXIgcmVzdWx0aW5nX3N0cmluZyA9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICB0aGlzLmhhc19jaGFyX2VzY2FwZXMgPSBmYWxzZTtcblxuICAgIGlmIChjID09PSAnYCcpIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gdGhpcy5fcmVhZF9zdHJpbmdfcmVjdXJzaXZlKCdgJywgdHJ1ZSwgJyR7Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gdGhpcy5fcmVhZF9zdHJpbmdfcmVjdXJzaXZlKGMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc19jaGFyX2VzY2FwZXMgJiYgdGhpcy5fb3B0aW9ucy51bmVzY2FwZV9zdHJpbmdzKSB7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nID0gdW5lc2NhcGVfc3RyaW5nKHJlc3VsdGluZ19zdHJpbmcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbnB1dC5wZWVrKCkgPT09IGMpIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgIH1cblxuICAgIHJlc3VsdGluZ19zdHJpbmcgPSByZXN1bHRpbmdfc3RyaW5nLnJlcGxhY2UoYWNvcm4uYWxsTGluZUJyZWFrcywgJ1xcbicpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5TVFJJTkcsIHJlc3VsdGluZ19zdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9hbGxvd19yZWdleHBfb3JfeG1sID0gZnVuY3Rpb24ocHJldmlvdXNfdG9rZW4pIHtcbiAgLy8gcmVnZXggYW5kIHhtbCBjYW4gb25seSBhcHBlYXIgaW4gc3BlY2lmaWMgbG9jYXRpb25zIGR1cmluZyBwYXJzaW5nXG4gIHJldHVybiAocHJldmlvdXNfdG9rZW4udHlwZSA9PT0gVE9LRU4uUkVTRVJWRUQgJiYgaW5fYXJyYXkocHJldmlvdXNfdG9rZW4udGV4dCwgWydyZXR1cm4nLCAnY2FzZScsICd0aHJvdycsICdlbHNlJywgJ2RvJywgJ3R5cGVvZicsICd5aWVsZCddKSkgfHxcbiAgICAocHJldmlvdXNfdG9rZW4udHlwZSA9PT0gVE9LRU4uRU5EX0VYUFIgJiYgcHJldmlvdXNfdG9rZW4udGV4dCA9PT0gJyknICYmXG4gICAgICBwcmV2aW91c190b2tlbi5vcGVuZWQucHJldmlvdXMudHlwZSA9PT0gVE9LRU4uUkVTRVJWRUQgJiYgaW5fYXJyYXkocHJldmlvdXNfdG9rZW4ub3BlbmVkLnByZXZpb3VzLnRleHQsIFsnaWYnLCAnd2hpbGUnLCAnZm9yJ10pKSB8fFxuICAgIChpbl9hcnJheShwcmV2aW91c190b2tlbi50eXBlLCBbVE9LRU4uQ09NTUVOVCwgVE9LRU4uU1RBUlRfRVhQUiwgVE9LRU4uU1RBUlRfQkxPQ0ssIFRPS0VOLlNUQVJULFxuICAgICAgVE9LRU4uRU5EX0JMT0NLLCBUT0tFTi5PUEVSQVRPUiwgVE9LRU4uRVFVQUxTLCBUT0tFTi5FT0YsIFRPS0VOLlNFTUlDT0xPTiwgVE9LRU4uQ09NTUFcbiAgICBdKSk7XG59O1xuXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWFkX3JlZ2V4cCA9IGZ1bmN0aW9uKGMsIHByZXZpb3VzX3Rva2VuKSB7XG5cbiAgaWYgKGMgPT09ICcvJyAmJiB0aGlzLl9hbGxvd19yZWdleHBfb3JfeG1sKHByZXZpb3VzX3Rva2VuKSkge1xuICAgIC8vIGhhbmRsZSByZWdleHBcbiAgICAvL1xuICAgIHZhciByZXN1bHRpbmdfc3RyaW5nID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgIHZhciBlc2MgPSBmYWxzZTtcblxuICAgIHZhciBpbl9jaGFyX2NsYXNzID0gZmFsc2U7XG4gICAgd2hpbGUgKHRoaXMuX2lucHV0Lmhhc05leHQoKSAmJlxuICAgICAgKChlc2MgfHwgaW5fY2hhcl9jbGFzcyB8fCB0aGlzLl9pbnB1dC5wZWVrKCkgIT09IGMpICYmXG4gICAgICAgICF0aGlzLl9pbnB1dC50ZXN0Q2hhcihhY29ybi5uZXdsaW5lKSkpIHtcbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gdGhpcy5faW5wdXQucGVlaygpO1xuICAgICAgaWYgKCFlc2MpIHtcbiAgICAgICAgZXNjID0gdGhpcy5faW5wdXQucGVlaygpID09PSAnXFxcXCc7XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dC5wZWVrKCkgPT09ICdbJykge1xuICAgICAgICAgIGluX2NoYXJfY2xhc3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lucHV0LnBlZWsoKSA9PT0gJ10nKSB7XG4gICAgICAgICAgaW5fY2hhcl9jbGFzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlc2MgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW5wdXQucGVlaygpID09PSBjKSB7XG4gICAgICByZXN1bHRpbmdfc3RyaW5nICs9IHRoaXMuX2lucHV0Lm5leHQoKTtcblxuICAgICAgLy8gcmVnZXhwcyBtYXkgaGF2ZSBtb2RpZmllcnMgL3JlZ2V4cC9NT0QgLCBzbyBmZXRjaCB0aG9zZSwgdG9vXG4gICAgICAvLyBPbmx5IFtnaW1dIGFyZSB2YWxpZCwgYnV0IGlmIHRoZSB1c2VyIHB1dHMgaW4gZ2FyYmFnZSwgZG8gd2hhdCB3ZSBjYW4gdG8gdGFrZSBpdC5cbiAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gdGhpcy5faW5wdXQucmVhZChhY29ybi5pZGVudGlmaWVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5TVFJJTkcsIHJlc3VsdGluZ19zdHJpbmcpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVhZF94bWwgPSBmdW5jdGlvbihjLCBwcmV2aW91c190b2tlbikge1xuXG4gIGlmICh0aGlzLl9vcHRpb25zLmU0eCAmJiBjID09PSBcIjxcIiAmJiB0aGlzLl9hbGxvd19yZWdleHBfb3JfeG1sKHByZXZpb3VzX3Rva2VuKSkge1xuICAgIHZhciB4bWxTdHIgPSAnJztcbiAgICB2YXIgbWF0Y2ggPSB0aGlzLl9fcGF0dGVybnMueG1sLnJlYWRfbWF0Y2goKTtcbiAgICAvLyBoYW5kbGUgZTR4IHhtbCBsaXRlcmFsc1xuICAgIC8vXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAvLyBUcmltIHJvb3QgdGFnIHRvIGF0dGVtcHQgdG9cbiAgICAgIHZhciByb290VGFnID0gbWF0Y2hbMl0ucmVwbGFjZSgvXntcXHMrLywgJ3snKS5yZXBsYWNlKC9cXHMrfSQvLCAnfScpO1xuICAgICAgdmFyIGlzQ3VybHlSb290ID0gcm9vdFRhZy5pbmRleE9mKCd7JykgPT09IDA7XG4gICAgICB2YXIgZGVwdGggPSAwO1xuICAgICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIHZhciBpc0VuZFRhZyA9ICEhbWF0Y2hbMV07XG4gICAgICAgIHZhciB0YWdOYW1lID0gbWF0Y2hbMl07XG4gICAgICAgIHZhciBpc1NpbmdsZXRvblRhZyA9ICghIW1hdGNoW21hdGNoLmxlbmd0aCAtIDFdKSB8fCAodGFnTmFtZS5zbGljZSgwLCA4KSA9PT0gXCIhW0NEQVRBW1wiKTtcbiAgICAgICAgaWYgKCFpc1NpbmdsZXRvblRhZyAmJlxuICAgICAgICAgICh0YWdOYW1lID09PSByb290VGFnIHx8IChpc0N1cmx5Um9vdCAmJiB0YWdOYW1lLnJlcGxhY2UoL157XFxzKy8sICd7JykucmVwbGFjZSgvXFxzK30kLywgJ30nKSkpKSB7XG4gICAgICAgICAgaWYgKGlzRW5kVGFnKSB7XG4gICAgICAgICAgICAtLWRlcHRoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICArK2RlcHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB4bWxTdHIgKz0gbWF0Y2hbMF07XG4gICAgICAgIGlmIChkZXB0aCA8PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbWF0Y2ggPSB0aGlzLl9fcGF0dGVybnMueG1sLnJlYWRfbWF0Y2goKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjbG9zZSBjb3JyZWN0bHksIGtlZXAgdW5mb3JtYXR0ZWQuXG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHhtbFN0ciArPSB0aGlzLl9pbnB1dC5tYXRjaCgvW1xcc1xcU10qL2cpWzBdO1xuICAgICAgfVxuICAgICAgeG1sU3RyID0geG1sU3RyLnJlcGxhY2UoYWNvcm4uYWxsTGluZUJyZWFrcywgJ1xcbicpO1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZV90b2tlbihUT0tFTi5TVFJJTkcsIHhtbFN0cik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5mdW5jdGlvbiB1bmVzY2FwZV9zdHJpbmcocykge1xuICAvLyBZb3UgdGhpbmsgdGhhdCBhIHJlZ2V4IHdvdWxkIHdvcmsgZm9yIHRoaXNcbiAgLy8gcmV0dXJuIHMucmVwbGFjZSgvXFxcXHgoWzAtOWEtZl17Mn0pL2dpLCBmdW5jdGlvbihtYXRjaCwgdmFsKSB7XG4gIC8vICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodmFsLCAxNikpO1xuICAvLyAgICAgfSlcbiAgLy8gSG93ZXZlciwgZGVhbGluZyB3aXRoICdcXHhmZicsICdcXFxceGZmJywgJ1xcXFxcXHhmZicgbWFrZXMgdGhpcyBtb3JlIGZ1bi5cbiAgdmFyIG91dCA9ICcnLFxuICAgIGVzY2FwZWQgPSAwO1xuXG4gIHZhciBpbnB1dF9zY2FuID0gbmV3IElucHV0U2Nhbm5lcihzKTtcbiAgdmFyIG1hdGNoZWQgPSBudWxsO1xuXG4gIHdoaWxlIChpbnB1dF9zY2FuLmhhc05leHQoKSkge1xuICAgIC8vIEtlZXAgYW55IHdoaXRlc3BhY2UsIG5vbi1zbGFzaCBjaGFyYWN0ZXJzXG4gICAgLy8gYWxzbyBrZWVwIHNsYXNoIHBhaXJzLlxuICAgIG1hdGNoZWQgPSBpbnB1dF9zY2FuLm1hdGNoKC8oW1xcc118W15cXFxcXXxcXFxcXFxcXCkrL2cpO1xuXG4gICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgIG91dCArPSBtYXRjaGVkWzBdO1xuICAgIH1cblxuICAgIGlmIChpbnB1dF9zY2FuLnBlZWsoKSA9PT0gJ1xcXFwnKSB7XG4gICAgICBpbnB1dF9zY2FuLm5leHQoKTtcbiAgICAgIGlmIChpbnB1dF9zY2FuLnBlZWsoKSA9PT0gJ3gnKSB7XG4gICAgICAgIG1hdGNoZWQgPSBpbnB1dF9zY2FuLm1hdGNoKC94KFswLTlBLUZhLWZdezJ9KS9nKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXRfc2Nhbi5wZWVrKCkgPT09ICd1Jykge1xuICAgICAgICBtYXRjaGVkID0gaW5wdXRfc2Nhbi5tYXRjaCgvdShbMC05QS1GYS1mXXs0fSkvZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ1xcXFwnO1xuICAgICAgICBpZiAoaW5wdXRfc2Nhbi5oYXNOZXh0KCkpIHtcbiAgICAgICAgICBvdXQgKz0gaW5wdXRfc2Nhbi5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZXJlJ3Mgc29tZSBlcnJvciBkZWNvZGluZywgcmV0dXJuIHRoZSBvcmlnaW5hbCBzdHJpbmdcbiAgICAgIGlmICghbWF0Y2hlZCkge1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH1cblxuICAgICAgZXNjYXBlZCA9IHBhcnNlSW50KG1hdGNoZWRbMV0sIDE2KTtcblxuICAgICAgaWYgKGVzY2FwZWQgPiAweDdlICYmIGVzY2FwZWQgPD0gMHhmZiAmJiBtYXRjaGVkWzBdLmluZGV4T2YoJ3gnKSA9PT0gMCkge1xuICAgICAgICAvLyB3ZSBiYWlsIG91dCBvbiBcXHg3Zi4uXFx4ZmYsXG4gICAgICAgIC8vIGxlYXZpbmcgd2hvbGUgc3RyaW5nIGVzY2FwZWQsXG4gICAgICAgIC8vIGFzIGl0J3MgcHJvYmFibHkgY29tcGxldGVseSBiaW5hcnlcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgICB9IGVsc2UgaWYgKGVzY2FwZWQgPj0gMHgwMCAmJiBlc2NhcGVkIDwgMHgyMCkge1xuICAgICAgICAvLyBsZWF2ZSAweDAwLi4uMHgxZiBlc2NhcGVkXG4gICAgICAgIG91dCArPSAnXFxcXCcgKyBtYXRjaGVkWzBdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoZXNjYXBlZCA9PT0gMHgyMiB8fCBlc2NhcGVkID09PSAweDI3IHx8IGVzY2FwZWQgPT09IDB4NWMpIHtcbiAgICAgICAgLy8gc2luZ2xlLXF1b3RlLCBhcG9zdHJvcGhlLCBiYWNrc2xhc2ggLSBlc2NhcGUgdGhlc2VcbiAgICAgICAgb3V0ICs9ICdcXFxcJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoZXNjYXBlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShlc2NhcGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG4vLyBoYW5kbGUgc3RyaW5nXG4vL1xuVG9rZW5pemVyLnByb3RvdHlwZS5fcmVhZF9zdHJpbmdfcmVjdXJzaXZlID0gZnVuY3Rpb24oZGVsaW1pdGVyLCBhbGxvd191bmVzY2FwZWRfbmV3bGluZXMsIHN0YXJ0X3N1Yikge1xuICB2YXIgY3VycmVudF9jaGFyO1xuICB2YXIgcGF0dGVybjtcbiAgaWYgKGRlbGltaXRlciA9PT0gJ1xcJycpIHtcbiAgICBwYXR0ZXJuID0gdGhpcy5fX3BhdHRlcm5zLnNpbmdsZV9xdW90ZTtcbiAgfSBlbHNlIGlmIChkZWxpbWl0ZXIgPT09ICdcIicpIHtcbiAgICBwYXR0ZXJuID0gdGhpcy5fX3BhdHRlcm5zLmRvdWJsZV9xdW90ZTtcbiAgfSBlbHNlIGlmIChkZWxpbWl0ZXIgPT09ICdgJykge1xuICAgIHBhdHRlcm4gPSB0aGlzLl9fcGF0dGVybnMudGVtcGxhdGVfdGV4dDtcbiAgfSBlbHNlIGlmIChkZWxpbWl0ZXIgPT09ICd9Jykge1xuICAgIHBhdHRlcm4gPSB0aGlzLl9fcGF0dGVybnMudGVtcGxhdGVfZXhwcmVzc2lvbjtcbiAgfVxuXG4gIHZhciByZXN1bHRpbmdfc3RyaW5nID0gcGF0dGVybi5yZWFkKCk7XG4gIHZhciBuZXh0ID0gJyc7XG4gIHdoaWxlICh0aGlzLl9pbnB1dC5oYXNOZXh0KCkpIHtcbiAgICBuZXh0ID0gdGhpcy5faW5wdXQubmV4dCgpO1xuICAgIGlmIChuZXh0ID09PSBkZWxpbWl0ZXIgfHxcbiAgICAgICghYWxsb3dfdW5lc2NhcGVkX25ld2xpbmVzICYmIGFjb3JuLm5ld2xpbmUudGVzdChuZXh0KSkpIHtcbiAgICAgIHRoaXMuX2lucHV0LmJhY2soKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAobmV4dCA9PT0gJ1xcXFwnICYmIHRoaXMuX2lucHV0Lmhhc05leHQoKSkge1xuICAgICAgY3VycmVudF9jaGFyID0gdGhpcy5faW5wdXQucGVlaygpO1xuXG4gICAgICBpZiAoY3VycmVudF9jaGFyID09PSAneCcgfHwgY3VycmVudF9jaGFyID09PSAndScpIHtcbiAgICAgICAgdGhpcy5oYXNfY2hhcl9lc2NhcGVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudF9jaGFyID09PSAnXFxyJyAmJiB0aGlzLl9pbnB1dC5wZWVrKDEpID09PSAnXFxuJykge1xuICAgICAgICB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgICB9XG4gICAgICBuZXh0ICs9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0X3N1Yikge1xuICAgICAgaWYgKHN0YXJ0X3N1YiA9PT0gJyR7JyAmJiBuZXh0ID09PSAnJCcgJiYgdGhpcy5faW5wdXQucGVlaygpID09PSAneycpIHtcbiAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5uZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydF9zdWIgPT09IG5leHQpIHtcbiAgICAgICAgaWYgKGRlbGltaXRlciA9PT0gJ2AnKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9yZWFkX3N0cmluZ19yZWN1cnNpdmUoJ30nLCBhbGxvd191bmVzY2FwZWRfbmV3bGluZXMsICdgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9yZWFkX3N0cmluZ19yZWN1cnNpdmUoJ2AnLCBhbGxvd191bmVzY2FwZWRfbmV3bGluZXMsICckeycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dC5oYXNOZXh0KCkpIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0Lm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBuZXh0ICs9IHBhdHRlcm4ucmVhZCgpO1xuICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gbmV4dDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRpbmdfc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMuVG9rZW5pemVyID0gVG9rZW5pemVyO1xubW9kdWxlLmV4cG9ydHMuVE9LRU4gPSBUT0tFTjtcbm1vZHVsZS5leHBvcnRzLnBvc2l0aW9uYWJsZV9vcGVyYXRvcnMgPSBwb3NpdGlvbmFibGVfb3BlcmF0b3JzLnNsaWNlKCk7XG5tb2R1bGUuZXhwb3J0cy5saW5lX3N0YXJ0ZXJzID0gbGluZV9zdGFydGVycy5zbGljZSgpO1xuIiwiYXNzZXJ0Lm5vdEVxdWFsID0gbm90RXF1YWxcbmFzc2VydC5ub3RPayA9IG5vdE9rXG5hc3NlcnQuZXF1YWwgPSBlcXVhbFxuYXNzZXJ0Lm9rID0gYXNzZXJ0XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0XG5cbmZ1bmN0aW9uIGVxdWFsIChhLCBiLCBtKSB7XG4gIGFzc2VydChhID09IGIsIG0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG59XG5cbmZ1bmN0aW9uIG5vdEVxdWFsIChhLCBiLCBtKSB7XG4gIGFzc2VydChhICE9IGIsIG0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG59XG5cbmZ1bmN0aW9uIG5vdE9rICh0LCBtKSB7XG4gIGFzc2VydCghdCwgbSlcbn1cblxuZnVuY3Rpb24gYXNzZXJ0ICh0LCBtKSB7XG4gIGlmICghdCkgdGhyb3cgbmV3IEVycm9yKG0gfHwgJ0Fzc2VydGlvbkVycm9yJylcbn1cbiIsInZhciBzcGxpY2UgPSByZXF1aXJlKCdyZW1vdmUtYXJyYXktaXRlbXMnKVxudmFyIG5hbm90aW1pbmcgPSByZXF1aXJlKCduYW5vdGltaW5nJylcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IE5hbm9idXNcblxuZnVuY3Rpb24gTmFub2J1cyAobmFtZSkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTmFub2J1cykpIHJldHVybiBuZXcgTmFub2J1cyhuYW1lKVxuXG4gIHRoaXMuX25hbWUgPSBuYW1lIHx8ICduYW5vYnVzJ1xuICB0aGlzLl9zdGFyTGlzdGVuZXJzID0gW11cbiAgdGhpcy5fbGlzdGVuZXJzID0ge31cbn1cblxuTmFub2J1cy5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgYXNzZXJ0Lm9rKHR5cGVvZiBldmVudE5hbWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBldmVudE5hbWUgPT09ICdzeW1ib2wnLCAnbmFub2J1cy5lbWl0OiBldmVudE5hbWUgc2hvdWxkIGJlIHR5cGUgc3RyaW5nIG9yIHN5bWJvbCcpXG5cbiAgdmFyIGRhdGEgPSBbXVxuICBmb3IgKHZhciBpID0gMSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgZGF0YS5wdXNoKGFyZ3VtZW50c1tpXSlcbiAgfVxuXG4gIHZhciBlbWl0VGltaW5nID0gbmFub3RpbWluZyh0aGlzLl9uYW1lICsgXCIoJ1wiICsgZXZlbnROYW1lLnRvU3RyaW5nKCkgKyBcIicpXCIpXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXVxuICBpZiAobGlzdGVuZXJzICYmIGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5fZW1pdCh0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXSwgZGF0YSlcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGFyTGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLl9lbWl0KHRoaXMuX3N0YXJMaXN0ZW5lcnMsIGV2ZW50TmFtZSwgZGF0YSwgZW1pdFRpbWluZy51dWlkKVxuICB9XG4gIGVtaXRUaW1pbmcoKVxuXG4gIHJldHVybiB0aGlzXG59XG5cbk5hbm9idXMucHJvdG90eXBlLm9uID0gTmFub2J1cy5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICBhc3NlcnQub2sodHlwZW9mIGV2ZW50TmFtZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGV2ZW50TmFtZSA9PT0gJ3N5bWJvbCcsICduYW5vYnVzLm9uOiBldmVudE5hbWUgc2hvdWxkIGJlIHR5cGUgc3RyaW5nIG9yIHN5bWJvbCcpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgbGlzdGVuZXIsICdmdW5jdGlvbicsICduYW5vYnVzLm9uOiBsaXN0ZW5lciBzaG91bGQgYmUgdHlwZSBmdW5jdGlvbicpXG5cbiAgaWYgKGV2ZW50TmFtZSA9PT0gJyonKSB7XG4gICAgdGhpcy5fc3Rhckxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKVxuICB9IGVsc2Uge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzW2V2ZW50TmFtZV0pIHRoaXMuX2xpc3RlbmVyc1tldmVudE5hbWVdID0gW11cbiAgICB0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXS5wdXNoKGxpc3RlbmVyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbk5hbm9idXMucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gIGFzc2VydC5vayh0eXBlb2YgZXZlbnROYW1lID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZXZlbnROYW1lID09PSAnc3ltYm9sJywgJ25hbm9idXMucHJlcGVuZExpc3RlbmVyOiBldmVudE5hbWUgc2hvdWxkIGJlIHR5cGUgc3RyaW5nIG9yIHN5bWJvbCcpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgbGlzdGVuZXIsICdmdW5jdGlvbicsICduYW5vYnVzLnByZXBlbmRMaXN0ZW5lcjogbGlzdGVuZXIgc2hvdWxkIGJlIHR5cGUgZnVuY3Rpb24nKVxuXG4gIGlmIChldmVudE5hbWUgPT09ICcqJykge1xuICAgIHRoaXMuX3N0YXJMaXN0ZW5lcnMudW5zaGlmdChsaXN0ZW5lcilcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVyc1tldmVudE5hbWVdKSB0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXSA9IFtdXG4gICAgdGhpcy5fbGlzdGVuZXJzW2V2ZW50TmFtZV0udW5zaGlmdChsaXN0ZW5lcilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5OYW5vYnVzLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHtcbiAgYXNzZXJ0Lm9rKHR5cGVvZiBldmVudE5hbWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBldmVudE5hbWUgPT09ICdzeW1ib2wnLCAnbmFub2J1cy5vbmNlOiBldmVudE5hbWUgc2hvdWxkIGJlIHR5cGUgc3RyaW5nIG9yIHN5bWJvbCcpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgbGlzdGVuZXIsICdmdW5jdGlvbicsICduYW5vYnVzLm9uY2U6IGxpc3RlbmVyIHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcblxuICB2YXIgc2VsZiA9IHRoaXNcbiAgdGhpcy5vbihldmVudE5hbWUsIG9uY2UpXG4gIGZ1bmN0aW9uIG9uY2UgKCkge1xuICAgIGxpc3RlbmVyLmFwcGx5KHNlbGYsIGFyZ3VtZW50cylcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgb25jZSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5OYW5vYnVzLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHtcbiAgYXNzZXJ0Lm9rKHR5cGVvZiBldmVudE5hbWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBldmVudE5hbWUgPT09ICdzeW1ib2wnLCAnbmFub2J1cy5wcmVwZW5kT25jZUxpc3RlbmVyOiBldmVudE5hbWUgc2hvdWxkIGJlIHR5cGUgc3RyaW5nIG9yIHN5bWJvbCcpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgbGlzdGVuZXIsICdmdW5jdGlvbicsICduYW5vYnVzLnByZXBlbmRPbmNlTGlzdGVuZXI6IGxpc3RlbmVyIHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcblxuICB2YXIgc2VsZiA9IHRoaXNcbiAgdGhpcy5wcmVwZW5kTGlzdGVuZXIoZXZlbnROYW1lLCBvbmNlKVxuICBmdW5jdGlvbiBvbmNlICgpIHtcbiAgICBsaXN0ZW5lci5hcHBseShzZWxmLCBhcmd1bWVudHMpXG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihldmVudE5hbWUsIG9uY2UpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuTmFub2J1cy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICBhc3NlcnQub2sodHlwZW9mIGV2ZW50TmFtZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGV2ZW50TmFtZSA9PT0gJ3N5bWJvbCcsICduYW5vYnVzLnJlbW92ZUxpc3RlbmVyOiBldmVudE5hbWUgc2hvdWxkIGJlIHR5cGUgc3RyaW5nIG9yIHN5bWJvbCcpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgbGlzdGVuZXIsICdmdW5jdGlvbicsICduYW5vYnVzLnJlbW92ZUxpc3RlbmVyOiBsaXN0ZW5lciBzaG91bGQgYmUgdHlwZSBmdW5jdGlvbicpXG5cbiAgaWYgKGV2ZW50TmFtZSA9PT0gJyonKSB7XG4gICAgdGhpcy5fc3Rhckxpc3RlbmVycyA9IHRoaXMuX3N0YXJMaXN0ZW5lcnMuc2xpY2UoKVxuICAgIHJldHVybiByZW1vdmUodGhpcy5fc3Rhckxpc3RlbmVycywgbGlzdGVuZXIpXG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVyc1tldmVudE5hbWVdID0gdGhpcy5fbGlzdGVuZXJzW2V2ZW50TmFtZV0uc2xpY2UoKVxuICAgIH1cblxuICAgIHJldHVybiByZW1vdmUodGhpcy5fbGlzdGVuZXJzW2V2ZW50TmFtZV0sIGxpc3RlbmVyKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlIChhcnIsIGxpc3RlbmVyKSB7XG4gICAgaWYgKCFhcnIpIHJldHVyblxuICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGxpc3RlbmVyKVxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHNwbGljZShhcnIsIGluZGV4LCAxKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbn1cblxuTmFub2J1cy5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICBpZiAoZXZlbnROYW1lKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJyonKSB7XG4gICAgICB0aGlzLl9zdGFyTGlzdGVuZXJzID0gW11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBbXVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9zdGFyTGlzdGVuZXJzID0gW11cbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbk5hbm9idXMucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgdmFyIGxpc3RlbmVycyA9IGV2ZW50TmFtZSAhPT0gJyonXG4gICAgPyB0aGlzLl9saXN0ZW5lcnNbZXZlbnROYW1lXVxuICAgIDogdGhpcy5fc3Rhckxpc3RlbmVyc1xuXG4gIHZhciByZXQgPSBbXVxuICBpZiAobGlzdGVuZXJzKSB7XG4gICAgdmFyIGlsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbGVuZ3RoOyBpKyspIHJldC5wdXNoKGxpc3RlbmVyc1tpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbk5hbm9idXMucHJvdG90eXBlLl9lbWl0ID0gZnVuY3Rpb24gKGFyciwgZXZlbnROYW1lLCBkYXRhLCB1dWlkKSB7XG4gIGlmICh0eXBlb2YgYXJyID09PSAndW5kZWZpbmVkJykgcmV0dXJuXG4gIGlmIChhcnIubGVuZ3RoID09PSAwKSByZXR1cm5cbiAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgIGRhdGEgPSBldmVudE5hbWVcbiAgICBldmVudE5hbWUgPSBudWxsXG4gIH1cblxuICBpZiAoZXZlbnROYW1lKSB7XG4gICAgaWYgKHV1aWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YSA9IFtldmVudE5hbWVdLmNvbmNhdChkYXRhLCB1dWlkKVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gW2V2ZW50TmFtZV0uY29uY2F0KGRhdGEpXG4gICAgfVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGhcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBsaXN0ZW5lciA9IGFycltpXVxuICAgIGxpc3RlbmVyLmFwcGx5KGxpc3RlbmVyLCBkYXRhKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBSZW1vdmUgYSByYW5nZSBvZiBpdGVtcyBmcm9tIGFuIGFycmF5XG4gKlxuICogQGZ1bmN0aW9uIHJlbW92ZUl0ZW1zXG4gKiBAcGFyYW0ge0FycmF5PCo+fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVtb3ZlSXRlbXMgKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KSB7XG4gIHZhciBpLCBsZW5ndGggPSBhcnIubGVuZ3RoXG5cbiAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHggKyByZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aCAtIHN0YXJ0SWR4IDogcmVtb3ZlQ291bnQpXG5cbiAgdmFyIGxlbiA9IGxlbmd0aCAtIHJlbW92ZUNvdW50XG5cbiAgZm9yIChpID0gc3RhcnRJZHg7IGkgPCBsZW47ICsraSkge1xuICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdXG4gIH1cblxuICBhcnIubGVuZ3RoID0gbGVuXG59XG4iLCJjb25zdCBkb2N1bWVudCA9IHJlcXVpcmUoJ2dsb2JhbC9kb2N1bWVudCcpXG5jb25zdCBuYW5vdGltaW5nID0gcmVxdWlyZSgnbmFub3RpbWluZycpXG5jb25zdCBtb3JwaCA9IHJlcXVpcmUoJ25hbm9tb3JwaCcpXG5jb25zdCBvbmxvYWQgPSByZXF1aXJlKCdvbi1sb2FkJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IE9MX0tFWV9JRCA9IG9ubG9hZC5LRVlfSURcbmNvbnN0IE9MX0FUVFJfSUQgPSBvbmxvYWQuS0VZX0FUVFJcblxubW9kdWxlLmV4cG9ydHMgPSBOYW5vY29tcG9uZW50XG5cbmZ1bmN0aW9uIG1ha2VJRCAoKSB7XG4gIHJldHVybiAnbmNpZC0nICsgTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKVxufVxuXG5OYW5vY29tcG9uZW50Lm1ha2VJRCA9IG1ha2VJRFxuXG5mdW5jdGlvbiBOYW5vY29tcG9uZW50IChuYW1lKSB7XG4gIHRoaXMuX2hhc1dpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gIHRoaXMuX2lkID0gbnVsbCAvLyByZXByZXNlbnRzIHRoZSBpZCBvZiB0aGUgcm9vdCBub2RlXG4gIHRoaXMuX25jSUQgPSBudWxsIC8vIGludGVybmFsIG5hbm9jb21wb25lbnQgaWRcbiAgdGhpcy5fb2xJRCA9IG51bGxcbiAgdGhpcy5fcHJveHkgPSBudWxsXG4gIHRoaXMuX2xvYWRlZCA9IGZhbHNlIC8vIFVzZWQgdG8gZGVib3VuY2Ugb24tbG9hZCB3aGVuIGNoaWxkLXJlb3JkZXJpbmdcbiAgdGhpcy5fcm9vdE5vZGVOYW1lID0gbnVsbFxuICB0aGlzLl9uYW1lID0gbmFtZSB8fCAnbmFub2NvbXBvbmVudCdcbiAgdGhpcy5fcmVyZW5kZXIgPSBmYWxzZVxuXG4gIHRoaXMuX2hhbmRsZUxvYWQgPSB0aGlzLl9oYW5kbGVMb2FkLmJpbmQodGhpcylcbiAgdGhpcy5faGFuZGxlVW5sb2FkID0gdGhpcy5faGFuZGxlVW5sb2FkLmJpbmQodGhpcylcblxuICB0aGlzLl9hcmd1bWVudHMgPSBbXVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbGVtZW50Jywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxmLl9pZClcbiAgICAgIGlmIChlbCkgcmV0dXJuIGVsLmRhdGFzZXQubmFub2NvbXBvbmVudCA9PT0gc2VsZi5fbmNJRCA/IGVsIDogdW5kZWZpbmVkXG4gICAgfVxuICB9KVxufVxuXG5OYW5vY29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHJlbmRlclRpbWluZyA9IG5hbm90aW1pbmcodGhpcy5fbmFtZSArICcucmVuZGVyJylcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgY29uc3QgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKVxuICBsZXQgZWxcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXVxuICBpZiAoIXRoaXMuX2hhc1dpbmRvdykge1xuICAgIGNvbnN0IGNyZWF0ZVRpbWluZyA9IG5hbm90aW1pbmcodGhpcy5fbmFtZSArICcuY3JlYXRlJylcbiAgICBlbCA9IHRoaXMuY3JlYXRlRWxlbWVudC5hcHBseSh0aGlzLCBhcmdzKVxuICAgIGNyZWF0ZVRpbWluZygpXG4gICAgcmVuZGVyVGltaW5nKClcbiAgICByZXR1cm4gZWxcbiAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICBlbCA9IHRoaXMuZWxlbWVudCAvLyByZXRhaW4gcmVmZXJlbmNlLCBhcyB0aGUgSUQgbWlnaHQgY2hhbmdlIG9uIHJlbmRlclxuICAgIGNvbnN0IHVwZGF0ZVRpbWluZyA9IG5hbm90aW1pbmcodGhpcy5fbmFtZSArICcudXBkYXRlJylcbiAgICBjb25zdCBzaG91bGRVcGRhdGUgPSB0aGlzLl9yZXJlbmRlciB8fCB0aGlzLnVwZGF0ZS5hcHBseSh0aGlzLCBhcmdzKVxuICAgIHVwZGF0ZVRpbWluZygpXG4gICAgaWYgKHRoaXMuX3JlcmVuZGVyKSB0aGlzLl9yZXJlbmRlciA9IGZhbHNlXG4gICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgY29uc3QgZGVzaXJlZEh0bWwgPSB0aGlzLl9oYW5kbGVSZW5kZXIoYXJncylcbiAgICAgIGNvbnN0IG1vcnBoVGltaW5nID0gbmFub3RpbWluZyh0aGlzLl9uYW1lICsgJy5tb3JwaCcpXG4gICAgICBtb3JwaChlbCwgZGVzaXJlZEh0bWwpXG4gICAgICBtb3JwaFRpbWluZygpXG4gICAgICBpZiAodGhpcy5hZnRlcnVwZGF0ZSkgdGhpcy5hZnRlcnVwZGF0ZShlbClcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9wcm94eSkgeyB0aGlzLl9wcm94eSA9IHRoaXMuX2NyZWF0ZVByb3h5KCkgfVxuICAgIHJlbmRlclRpbWluZygpXG4gICAgcmV0dXJuIHRoaXMuX3Byb3h5XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fcmVzZXQoKVxuICAgIGVsID0gdGhpcy5faGFuZGxlUmVuZGVyKGFyZ3MpXG4gICAgaWYgKHRoaXMuYmVmb3JlcmVuZGVyKSB0aGlzLmJlZm9yZXJlbmRlcihlbClcbiAgICBpZiAodGhpcy5sb2FkIHx8IHRoaXMudW5sb2FkIHx8IHRoaXMuYWZ0ZXJyZW9yZGVyKSB7XG4gICAgICBvbmxvYWQoZWwsIHNlbGYuX2hhbmRsZUxvYWQsIHNlbGYuX2hhbmRsZVVubG9hZCwgc2VsZi5fbmNJRClcbiAgICAgIHRoaXMuX29sSUQgPSBlbC5kYXRhc2V0W09MX0tFWV9JRF1cbiAgICB9XG4gICAgcmVuZGVyVGltaW5nKClcbiAgICByZXR1cm4gZWxcbiAgfVxufVxuXG5OYW5vY29tcG9uZW50LnByb3RvdHlwZS5yZXJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgYXNzZXJ0KHRoaXMuZWxlbWVudCwgJ25hbm9jb21wb25lbnQ6IGNhbnQgcmVyZW5kZXIgb24gYW4gdW5tb3VudGVkIGRvbSBub2RlJylcbiAgdGhpcy5fcmVyZW5kZXIgPSB0cnVlXG4gIHRoaXMucmVuZGVyLmFwcGx5KHRoaXMsIHRoaXMuX2FyZ3VtZW50cylcbn1cblxuTmFub2NvbXBvbmVudC5wcm90b3R5cGUuX2hhbmRsZVJlbmRlciA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gIGNvbnN0IGNyZWF0ZUVsZW1lbnRUaW1pbmcgPSBuYW5vdGltaW5nKHRoaXMuX25hbWUgKyAnLmNyZWF0ZUVsZW1lbnQnKVxuICBjb25zdCBlbCA9IHRoaXMuY3JlYXRlRWxlbWVudC5hcHBseSh0aGlzLCBhcmdzKVxuICBjcmVhdGVFbGVtZW50VGltaW5nKClcbiAgaWYgKCF0aGlzLl9yb290Tm9kZU5hbWUpIHRoaXMuX3Jvb3ROb2RlTmFtZSA9IGVsLm5vZGVOYW1lXG4gIGFzc2VydChlbCBpbnN0YW5jZW9mIHdpbmRvdy5FbGVtZW50LCAnbmFub2NvbXBvbmVudDogY3JlYXRlRWxlbWVudCBzaG91bGQgcmV0dXJuIGEgc2luZ2xlIERPTSBub2RlJylcbiAgYXNzZXJ0KHRoaXMuX3Jvb3ROb2RlTmFtZSA9PT0gZWwubm9kZU5hbWUsICduYW5vY29tcG9uZW50OiByb290IG5vZGUgdHlwZXMgY2Fubm90IGRpZmZlciBiZXR3ZWVuIHJlLXJlbmRlcnMnKVxuICB0aGlzLl9hcmd1bWVudHMgPSBhcmdzXG4gIHJldHVybiB0aGlzLl9icmFuZE5vZGUodGhpcy5fZW5zdXJlSUQoZWwpKVxufVxuXG5OYW5vY29tcG9uZW50LnByb3RvdHlwZS5fY3JlYXRlUHJveHkgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHByb3h5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLl9yb290Tm9kZU5hbWUpXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JyYW5kTm9kZShwcm94eSlcbiAgcHJveHkuaWQgPSB0aGlzLl9pZFxuICBwcm94eS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcHJveHknLCAnJylcbiAgcHJveHkuaXNTYW1lTm9kZSA9IGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiAoZWwgJiYgZWwuZGF0YXNldC5uYW5vY29tcG9uZW50ID09PSBzZWxmLl9uY0lEKVxuICB9XG4gIHJldHVybiBwcm94eVxufVxuXG5OYW5vY29tcG9uZW50LnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX25jSUQgPSBOYW5vY29tcG9uZW50Lm1ha2VJRCgpXG4gIHRoaXMuX29sSUQgPSBudWxsXG4gIHRoaXMuX2lkID0gbnVsbFxuICB0aGlzLl9wcm94eSA9IG51bGxcbiAgdGhpcy5fcm9vdE5vZGVOYW1lID0gbnVsbFxufVxuXG5OYW5vY29tcG9uZW50LnByb3RvdHlwZS5fYnJhbmROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbmFub2NvbXBvbmVudCcsIHRoaXMuX25jSUQpXG4gIGlmICh0aGlzLl9vbElEKSBub2RlLnNldEF0dHJpYnV0ZShPTF9BVFRSX0lELCB0aGlzLl9vbElEKVxuICByZXR1cm4gbm9kZVxufVxuXG5OYW5vY29tcG9uZW50LnByb3RvdHlwZS5fZW5zdXJlSUQgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAobm9kZS5pZCkgdGhpcy5faWQgPSBub2RlLmlkXG4gIGVsc2Ugbm9kZS5pZCA9IHRoaXMuX2lkID0gdGhpcy5fbmNJRFxuICAvLyBVcGRhdGUgcHJveHkgbm9kZSBJRCBpZiBpdCBjaGFuZ2VkXG4gIGlmICh0aGlzLl9wcm94eSAmJiB0aGlzLl9wcm94eS5pZCAhPT0gdGhpcy5faWQpIHRoaXMuX3Byb3h5LmlkID0gdGhpcy5faWRcbiAgcmV0dXJuIG5vZGVcbn1cblxuTmFub2NvbXBvbmVudC5wcm90b3R5cGUuX2hhbmRsZUxvYWQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgaWYgKHRoaXMuX2xvYWRlZCkge1xuICAgIGlmICh0aGlzLmFmdGVycmVvcmRlcikgdGhpcy5hZnRlcnJlb3JkZXIoZWwpXG4gICAgcmV0dXJuIC8vIERlYm91bmNlIGNoaWxkLXJlb3JkZXJzXG4gIH1cbiAgdGhpcy5fbG9hZGVkID0gdHJ1ZVxuICBpZiAodGhpcy5sb2FkKSB0aGlzLmxvYWQoZWwpXG59XG5cbk5hbm9jb21wb25lbnQucHJvdG90eXBlLl9oYW5kbGVVbmxvYWQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgaWYgKHRoaXMuZWxlbWVudCkgcmV0dXJuIC8vIERlYm91bmNlIGNoaWxkLXJlb3JkZXJzXG4gIHRoaXMuX2xvYWRlZCA9IGZhbHNlXG4gIGlmICh0aGlzLnVubG9hZCkgdGhpcy51bmxvYWQoZWwpXG59XG5cbk5hbm9jb21wb25lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcignbmFub2NvbXBvbmVudDogY3JlYXRlRWxlbWVudCBzaG91bGQgYmUgaW1wbGVtZW50ZWQhJylcbn1cblxuTmFub2NvbXBvbmVudC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ25hbm9jb21wb25lbnQ6IHVwZGF0ZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQhJylcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0XG5cbmNsYXNzIEFzc2VydGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige31cbkFzc2VydGlvbkVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0Fzc2VydGlvbkVycm9yJ1xuXG4vKipcbiAqIE1pbmltYWwgYXNzZXJ0IGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHthbnl9IHQgVmFsdWUgdG8gY2hlY2sgaWYgZmFsc3lcbiAqIEBwYXJhbSAge3N0cmluZz19IG0gT3B0aW9uYWwgYXNzZXJ0aW9uIGVycm9yIG1lc3NhZ2VcbiAqIEB0aHJvd3Mge0Fzc2VydGlvbkVycm9yfVxuICovXG5mdW5jdGlvbiBhc3NlcnQgKHQsIG0pIHtcbiAgaWYgKCF0KSB7XG4gICAgdmFyIGVyciA9IG5ldyBBc3NlcnRpb25FcnJvcihtKVxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCBhc3NlcnQpXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cbiIsInZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG52YXIgc2FmZUV4dGVybmFsTGluayA9IC8obm9vcGVuZXJ8bm9yZWZlcnJlcikgKG5vb3BlbmVyfG5vcmVmZXJyZXIpL1xudmFyIHByb3RvY29sTGluayA9IC9eW1xcdy1fXSs6L1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhyZWZcblxuZnVuY3Rpb24gaHJlZiAoY2IsIHJvb3QpIHtcbiAgYXNzZXJ0Lm5vdEVxdWFsKHR5cGVvZiB3aW5kb3csICd1bmRlZmluZWQnLCAnbmFub2hyZWY6IGV4cGVjdGVkIHdpbmRvdyB0byBleGlzdCcpXG5cbiAgcm9vdCA9IHJvb3QgfHwgd2luZG93LmRvY3VtZW50XG5cbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ25hbm9ocmVmOiBjYiBzaG91bGQgYmUgdHlwZSBmdW5jdGlvbicpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygcm9vdCwgJ29iamVjdCcsICduYW5vaHJlZjogcm9vdCBzaG91bGQgYmUgdHlwZSBvYmplY3QnKVxuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKChlLmJ1dHRvbiAmJiBlLmJ1dHRvbiAhPT0gMCkgfHxcbiAgICAgIGUuY3RybEtleSB8fCBlLm1ldGFLZXkgfHwgZS5hbHRLZXkgfHwgZS5zaGlmdEtleSB8fFxuICAgICAgZS5kZWZhdWx0UHJldmVudGVkKSByZXR1cm5cblxuICAgIHZhciBhbmNob3IgPSAoZnVuY3Rpb24gdHJhdmVyc2UgKG5vZGUpIHtcbiAgICAgIGlmICghbm9kZSB8fCBub2RlID09PSByb290KSByZXR1cm5cbiAgICAgIGlmIChub2RlLmxvY2FsTmFtZSAhPT0gJ2EnIHx8IG5vZGUuaHJlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cmF2ZXJzZShub2RlLnBhcmVudE5vZGUpXG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZVxuICAgIH0pKGUudGFyZ2V0KVxuXG4gICAgaWYgKCFhbmNob3IpIHJldHVyblxuXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCAhPT0gYW5jaG9yLnByb3RvY29sIHx8XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSAhPT0gYW5jaG9yLmhvc3RuYW1lIHx8XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICE9PSBhbmNob3IucG9ydCB8fFxuICAgICAgYW5jaG9yLmhhc0F0dHJpYnV0ZSgnZGF0YS1uYW5vaHJlZi1pZ25vcmUnKSB8fFxuICAgICAgYW5jaG9yLmhhc0F0dHJpYnV0ZSgnZG93bmxvYWQnKSB8fFxuICAgICAgKGFuY2hvci5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpID09PSAnX2JsYW5rJyAmJlxuICAgICAgICBzYWZlRXh0ZXJuYWxMaW5rLnRlc3QoYW5jaG9yLmdldEF0dHJpYnV0ZSgncmVsJykpKSB8fFxuICAgICAgcHJvdG9jb2xMaW5rLnRlc3QoYW5jaG9yLmdldEF0dHJpYnV0ZSgnaHJlZicpKSkgcmV0dXJuXG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBjYihhbmNob3IpXG4gIH0pXG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHRyYWlsaW5nTmV3bGluZVJlZ2V4ID0gL1xcbltcXHNdKyQvXG52YXIgbGVhZGluZ05ld2xpbmVSZWdleCA9IC9eXFxuW1xcc10rL1xudmFyIHRyYWlsaW5nU3BhY2VSZWdleCA9IC9bXFxzXSskL1xudmFyIGxlYWRpbmdTcGFjZVJlZ2V4ID0gL15bXFxzXSsvXG52YXIgbXVsdGlTcGFjZVJlZ2V4ID0gL1tcXG5cXHNdKy9nXG5cbnZhciBURVhUX1RBR1MgPSBbXG4gICdhJywgJ2FiYnInLCAnYicsICdiZGknLCAnYmRvJywgJ2JyJywgJ2NpdGUnLCAnZGF0YScsICdkZm4nLCAnZW0nLCAnaScsXG4gICdrYmQnLCAnbWFyaycsICdxJywgJ3JwJywgJ3J0JywgJ3J0YycsICdydWJ5JywgJ3MnLCAnYW1wJywgJ3NtYWxsJywgJ3NwYW4nLFxuICAnc3Ryb25nJywgJ3N1YicsICdzdXAnLCAndGltZScsICd1JywgJ3ZhcicsICd3YnInXG5dXG5cbnZhciBWRVJCQVRJTV9UQUdTID0gW1xuICAnY29kZScsICdwcmUnLCAndGV4dGFyZWEnXG5dXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXBwZW5kQ2hpbGQgKGVsLCBjaGlsZHMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcykpIHJldHVyblxuXG4gIHZhciBub2RlTmFtZSA9IGVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICB2YXIgaGFkVGV4dCA9IGZhbHNlXG4gIHZhciB2YWx1ZSwgbGVhZGVyXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNoaWxkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBub2RlID0gY2hpbGRzW2ldXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgIGFwcGVuZENoaWxkKGVsLCBub2RlKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2Ygbm9kZSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB0eXBlb2Ygbm9kZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgbm9kZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgIG5vZGUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIG5vZGUgPSBub2RlLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICB2YXIgbGFzdENoaWxkID0gZWwuY2hpbGROb2Rlc1tlbC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFdXG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGV4dCBub2Rlc1xuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhhZFRleHQgPSB0cnVlXG5cbiAgICAgIC8vIElmIHdlIGFscmVhZHkgaGFkIHRleHQsIGFwcGVuZCB0byB0aGUgZXhpc3RpbmcgdGV4dFxuICAgICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQubm9kZU5hbWUgPT09ICcjdGV4dCcpIHtcbiAgICAgICAgbGFzdENoaWxkLm5vZGVWYWx1ZSArPSBub2RlXG5cbiAgICAgIC8vIFdlIGRpZG4ndCBoYXZlIGEgdGV4dCBub2RlIHlldCwgY3JlYXRlIG9uZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZSlcbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQobm9kZSlcbiAgICAgICAgbGFzdENoaWxkID0gbm9kZVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGlzIGlzIHRoZSBsYXN0IG9mIHRoZSBjaGlsZCBub2RlcywgbWFrZSBzdXJlIHdlIGNsb3NlIGl0IG91dFxuICAgICAgLy8gcmlnaHRcbiAgICAgIGlmIChpID09PSBsZW4gLSAxKSB7XG4gICAgICAgIGhhZFRleHQgPSBmYWxzZVxuICAgICAgICAvLyBUcmltIHRoZSBjaGlsZCB0ZXh0IG5vZGVzIGlmIHRoZSBjdXJyZW50IG5vZGUgaXNuJ3QgYVxuICAgICAgICAvLyBub2RlIHdoZXJlIHdoaXRlc3BhY2UgbWF0dGVycy5cbiAgICAgICAgaWYgKFRFWFRfVEFHUy5pbmRleE9mKG5vZGVOYW1lKSA9PT0gLTEgJiZcbiAgICAgICAgICBWRVJCQVRJTV9UQUdTLmluZGV4T2Yobm9kZU5hbWUpID09PSAtMSkge1xuICAgICAgICAgIHZhbHVlID0gbGFzdENoaWxkLm5vZGVWYWx1ZVxuICAgICAgICAgICAgLnJlcGxhY2UobGVhZGluZ05ld2xpbmVSZWdleCwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0cmFpbGluZ1NwYWNlUmVnZXgsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UodHJhaWxpbmdOZXdsaW5lUmVnZXgsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UobXVsdGlTcGFjZVJlZ2V4LCAnICcpXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgZWwucmVtb3ZlQ2hpbGQobGFzdENoaWxkKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQubm9kZVZhbHVlID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoVkVSQkFUSU1fVEFHUy5pbmRleE9mKG5vZGVOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAvLyBUaGUgdmVyeSBmaXJzdCBub2RlIGluIHRoZSBsaXN0IHNob3VsZCBub3QgaGF2ZSBsZWFkaW5nXG4gICAgICAgICAgLy8gd2hpdGVzcGFjZS4gU2libGluZyB0ZXh0IG5vZGVzIHNob3VsZCBoYXZlIHdoaXRlc3BhY2UgaWYgdGhlcmVcbiAgICAgICAgICAvLyB3YXMgYW55LlxuICAgICAgICAgIGxlYWRlciA9IGkgPT09IDAgPyAnJyA6ICcgJ1xuICAgICAgICAgIHZhbHVlID0gbGFzdENoaWxkLm5vZGVWYWx1ZVxuICAgICAgICAgICAgLnJlcGxhY2UobGVhZGluZ05ld2xpbmVSZWdleCwgbGVhZGVyKVxuICAgICAgICAgICAgLnJlcGxhY2UobGVhZGluZ1NwYWNlUmVnZXgsICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRyYWlsaW5nU3BhY2VSZWdleCwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0cmFpbGluZ05ld2xpbmVSZWdleCwgJycpXG4gICAgICAgICAgICAucmVwbGFjZShtdWx0aVNwYWNlUmVnZXgsICcgJylcbiAgICAgICAgICBsYXN0Q2hpbGQubm9kZVZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIERPTSBub2Rlc1xuICAgIH0gZWxzZSBpZiAobm9kZSAmJiBub2RlLm5vZGVUeXBlKSB7XG4gICAgICAvLyBJZiB0aGUgbGFzdCBub2RlIHdhcyBhIHRleHQgbm9kZSwgbWFrZSBzdXJlIGl0IGlzIHByb3Blcmx5IGNsb3NlZCBvdXRcbiAgICAgIGlmIChoYWRUZXh0KSB7XG4gICAgICAgIGhhZFRleHQgPSBmYWxzZVxuXG4gICAgICAgIC8vIFRyaW0gdGhlIGNoaWxkIHRleHQgbm9kZXMgaWYgdGhlIGN1cnJlbnQgbm9kZSBpc24ndCBhXG4gICAgICAgIC8vIHRleHQgbm9kZSBvciBhIGNvZGUgbm9kZVxuICAgICAgICBpZiAoVEVYVF9UQUdTLmluZGV4T2Yobm9kZU5hbWUpID09PSAtMSAmJlxuICAgICAgICAgIFZFUkJBVElNX1RBR1MuaW5kZXhPZihub2RlTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgdmFsdWUgPSBsYXN0Q2hpbGQubm9kZVZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZShsZWFkaW5nTmV3bGluZVJlZ2V4LCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRyYWlsaW5nTmV3bGluZVJlZ2V4LCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZShtdWx0aVNwYWNlUmVnZXgsICcgJylcblxuICAgICAgICAgIC8vIFJlbW92ZSBlbXB0eSB0ZXh0IG5vZGVzLCBhcHBlbmQgb3RoZXJ3aXNlXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgZWwucmVtb3ZlQ2hpbGQobGFzdENoaWxkKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQubm9kZVZhbHVlID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIC8vIFRyaW0gdGhlIGNoaWxkIG5vZGVzIGJ1dCBwcmVzZXJ2ZSB0aGUgYXBwcm9wcmlhdGUgd2hpdGVzcGFjZVxuICAgICAgICB9IGVsc2UgaWYgKFZFUkJBVElNX1RBR1MuaW5kZXhPZihub2RlTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgdmFsdWUgPSBsYXN0Q2hpbGQubm9kZVZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZShsZWFkaW5nU3BhY2VSZWdleCwgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UobGVhZGluZ05ld2xpbmVSZWdleCwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0cmFpbGluZ05ld2xpbmVSZWdleCwgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UobXVsdGlTcGFjZVJlZ2V4LCAnICcpXG4gICAgICAgICAgbGFzdENoaWxkLm5vZGVWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RvcmUgdGhlIGxhc3Qgbm9kZW5hbWVcbiAgICAgIHZhciBfbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lXG4gICAgICBpZiAoX25vZGVOYW1lKSBub2RlTmFtZSA9IF9ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAgIC8vIEFwcGVuZCB0aGUgbm9kZSB0byB0aGUgRE9NXG4gICAgICBlbC5hcHBlbmRDaGlsZChub2RlKVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gW1xuICAnYXN5bmMnLCAnYXV0b2ZvY3VzJywgJ2F1dG9wbGF5JywgJ2NoZWNrZWQnLCAnY29udHJvbHMnLCAnZGVmYXVsdCcsXG4gICdkZWZhdWx0Y2hlY2tlZCcsICdkZWZlcicsICdkaXNhYmxlZCcsICdmb3Jtbm92YWxpZGF0ZScsICdoaWRkZW4nLFxuICAnaXNtYXAnLCAnbG9vcCcsICdtdWx0aXBsZScsICdtdXRlZCcsICdub3ZhbGlkYXRlJywgJ29wZW4nLCAncGxheXNpbmxpbmUnLFxuICAncmVhZG9ubHknLCAncmVxdWlyZWQnLCAncmV2ZXJzZWQnLCAnc2VsZWN0ZWQnXG5dXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZG9tJykoZG9jdW1lbnQpXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdpbmRldGVybWluYXRlJ1xuXVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBoeXBlcnggPSByZXF1aXJlKCdoeXBlcngnKVxudmFyIGFwcGVuZENoaWxkID0gcmVxdWlyZSgnLi9hcHBlbmQtY2hpbGQnKVxudmFyIFNWR19UQUdTID0gcmVxdWlyZSgnLi9zdmctdGFncycpXG52YXIgQk9PTF9QUk9QUyA9IHJlcXVpcmUoJy4vYm9vbC1wcm9wcycpXG4vLyBQcm9wcyB0aGF0IG5lZWQgdG8gYmUgc2V0IGRpcmVjdGx5IHJhdGhlciB0aGFuIHdpdGggZWwuc2V0QXR0cmlidXRlKClcbnZhciBESVJFQ1RfUFJPUFMgPSByZXF1aXJlKCcuL2RpcmVjdC1wcm9wcycpXG5cbnZhciBTVkdOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZydcbnZhciBYTElOS05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnXG5cbnZhciBDT01NRU5UX1RBRyA9ICchLS0nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XG4gIGZ1bmN0aW9uIG5hbm9IdG1sQ3JlYXRlRWxlbWVudCAodGFnLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICB2YXIgZWxcblxuICAgIC8vIElmIGFuIHN2ZyB0YWcsIGl0IG5lZWRzIGEgbmFtZXNwYWNlXG4gICAgaWYgKFNWR19UQUdTLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIHByb3BzLm5hbWVzcGFjZSA9IFNWR05TXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgYXJlIHVzaW5nIGEgbmFtZXNwYWNlXG4gICAgdmFyIG5zID0gZmFsc2VcbiAgICBpZiAocHJvcHMubmFtZXNwYWNlKSB7XG4gICAgICBucyA9IHByb3BzLm5hbWVzcGFjZVxuICAgICAgZGVsZXRlIHByb3BzLm5hbWVzcGFjZVxuICAgIH1cblxuICAgIC8vIElmIHdlIGFyZSBleHRlbmRpbmcgYSBidWlsdGluIGVsZW1lbnRcbiAgICB2YXIgaXNDdXN0b21FbGVtZW50ID0gZmFsc2VcbiAgICBpZiAocHJvcHMuaXMpIHtcbiAgICAgIGlzQ3VzdG9tRWxlbWVudCA9IHByb3BzLmlzXG4gICAgICBkZWxldGUgcHJvcHMuaXNcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGVsZW1lbnRcbiAgICBpZiAobnMpIHtcbiAgICAgIGlmIChpc0N1c3RvbUVsZW1lbnQpIHtcbiAgICAgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsIHRhZywgeyBpczogaXNDdXN0b21FbGVtZW50IH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgdGFnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGFnID09PSBDT01NRU5UX1RBRykge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQocHJvcHMuY29tbWVudClcbiAgICB9IGVsc2UgaWYgKGlzQ3VzdG9tRWxlbWVudCkge1xuICAgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZywgeyBpczogaXNDdXN0b21FbGVtZW50IH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpXG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBwcm9wZXJ0aWVzXG4gICAgZm9yICh2YXIgcCBpbiBwcm9wcykge1xuICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgIHZhciBrZXkgPSBwLnRvTG93ZXJDYXNlKClcbiAgICAgICAgdmFyIHZhbCA9IHByb3BzW3BdXG4gICAgICAgIC8vIE5vcm1hbGl6ZSBjbGFzc05hbWVcbiAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzbmFtZScpIHtcbiAgICAgICAgICBrZXkgPSAnY2xhc3MnXG4gICAgICAgICAgcCA9ICdjbGFzcydcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgZm9yIGF0dHJpYnV0ZSBnZXRzIHRyYW5zZm9ybWVkIHRvIGh0bWxGb3IsIGJ1dCB3ZSBqdXN0IHNldCBhcyBmb3JcbiAgICAgICAgaWYgKHAgPT09ICdodG1sRm9yJykge1xuICAgICAgICAgIHAgPSAnZm9yJ1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgcHJvcGVydHkgaXMgYm9vbGVhbiwgc2V0IGl0c2VsZiB0byB0aGUga2V5XG4gICAgICAgIGlmIChCT09MX1BST1BTLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAoU3RyaW5nKHZhbCkgPT09ICd0cnVlJykgdmFsID0ga2V5XG4gICAgICAgICAgZWxzZSBpZiAoU3RyaW5nKHZhbCkgPT09ICdmYWxzZScpIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBwcm9wZXJ0eSBwcmVmZXJzIGJlaW5nIHNldCBkaXJlY3RseSB2cyBzZXRBdHRyaWJ1dGVcbiAgICAgICAgaWYgKGtleS5zbGljZSgwLCAyKSA9PT0gJ29uJyB8fCBESVJFQ1RfUFJPUFMuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgIGVsW3BdID0gdmFsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgICBpZiAocCA9PT0gJ3hsaW5rOmhyZWYnKSB7XG4gICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZU5TKFhMSU5LTlMsIHAsIHZhbClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL154bWxucygkfDopL2kudGVzdChwKSkge1xuICAgICAgICAgICAgICAvLyBza2lwIHhtbG5zIGRlZmluaXRpb25zXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBwLCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShwLCB2YWwpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXBwZW5kQ2hpbGQoZWwsIGNoaWxkcmVuKVxuICAgIHJldHVybiBlbFxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRnJhZ21lbnQgKG5vZGVzKSB7XG4gICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5vZGVzW2ldID09IG51bGwpIGNvbnRpbnVlXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShub2Rlc1tpXSkpIHtcbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlRnJhZ21lbnQobm9kZXNbaV0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGVvZiBub2Rlc1tpXSA9PT0gJ3N0cmluZycpIG5vZGVzW2ldID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZXNbaV0pXG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKG5vZGVzW2ldKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRcbiAgfVxuXG4gIHZhciBleHBvcnRzID0gaHlwZXJ4KG5hbm9IdG1sQ3JlYXRlRWxlbWVudCwge1xuICAgIGNvbW1lbnRzOiB0cnVlLFxuICAgIGNyZWF0ZUZyYWdtZW50OiBjcmVhdGVGcmFnbWVudFxuICB9KVxuICBleHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzXG4gIGV4cG9ydHMuY3JlYXRlQ29tbWVudCA9IG5hbm9IdG1sQ3JlYXRlRWxlbWVudFxuICByZXR1cm4gZXhwb3J0c1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIG5hbm9odG1sUmF3QnJvd3NlciAodGFnKSB7XG4gIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gIGVsLmlubmVySFRNTCA9IHRhZ1xuICByZXR1cm4gdG9BcnJheShlbC5jaGlsZE5vZGVzKVxufVxuXG5mdW5jdGlvbiB0b0FycmF5IChhcnIpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyKSA/IGFyciA6IFtdLnNsaWNlLmNhbGwoYXJyKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hbm9odG1sUmF3QnJvd3NlclxuIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gW1xuICAnc3ZnJywgJ2FsdEdseXBoJywgJ2FsdEdseXBoRGVmJywgJ2FsdEdseXBoSXRlbScsICdhbmltYXRlJywgJ2FuaW1hdGVDb2xvcicsXG4gICdhbmltYXRlTW90aW9uJywgJ2FuaW1hdGVUcmFuc2Zvcm0nLCAnY2lyY2xlJywgJ2NsaXBQYXRoJywgJ2NvbG9yLXByb2ZpbGUnLFxuICAnY3Vyc29yJywgJ2RlZnMnLCAnZGVzYycsICdlbGxpcHNlJywgJ2ZlQmxlbmQnLCAnZmVDb2xvck1hdHJpeCcsXG4gICdmZUNvbXBvbmVudFRyYW5zZmVyJywgJ2ZlQ29tcG9zaXRlJywgJ2ZlQ29udm9sdmVNYXRyaXgnLFxuICAnZmVEaWZmdXNlTGlnaHRpbmcnLCAnZmVEaXNwbGFjZW1lbnRNYXAnLCAnZmVEaXN0YW50TGlnaHQnLCAnZmVGbG9vZCcsXG4gICdmZUZ1bmNBJywgJ2ZlRnVuY0InLCAnZmVGdW5jRycsICdmZUZ1bmNSJywgJ2ZlR2F1c3NpYW5CbHVyJywgJ2ZlSW1hZ2UnLFxuICAnZmVNZXJnZScsICdmZU1lcmdlTm9kZScsICdmZU1vcnBob2xvZ3knLCAnZmVPZmZzZXQnLCAnZmVQb2ludExpZ2h0JyxcbiAgJ2ZlU3BlY3VsYXJMaWdodGluZycsICdmZVNwb3RMaWdodCcsICdmZVRpbGUnLCAnZmVUdXJidWxlbmNlJywgJ2ZpbHRlcicsXG4gICdmb250JywgJ2ZvbnQtZmFjZScsICdmb250LWZhY2UtZm9ybWF0JywgJ2ZvbnQtZmFjZS1uYW1lJywgJ2ZvbnQtZmFjZS1zcmMnLFxuICAnZm9udC1mYWNlLXVyaScsICdmb3JlaWduT2JqZWN0JywgJ2cnLCAnZ2x5cGgnLCAnZ2x5cGhSZWYnLCAnaGtlcm4nLCAnaW1hZ2UnLFxuICAnbGluZScsICdsaW5lYXJHcmFkaWVudCcsICdtYXJrZXInLCAnbWFzaycsICdtZXRhZGF0YScsICdtaXNzaW5nLWdseXBoJyxcbiAgJ21wYXRoJywgJ3BhdGgnLCAncGF0dGVybicsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JhZGlhbEdyYWRpZW50JywgJ3JlY3QnLFxuICAnc2V0JywgJ3N0b3AnLCAnc3dpdGNoJywgJ3N5bWJvbCcsICd0ZXh0JywgJ3RleHRQYXRoJywgJ3RpdGxlJywgJ3RyZWYnLFxuICAndHNwYW4nLCAndXNlJywgJ3ZpZXcnLCAndmtlcm4nXG5dXG4iLCIvLyBUaGlzIGZpbGUgcmVwbGFjZXMgYGZvcm1hdC5qc2AgaW4gYnVuZGxlcnMgbGlrZSB3ZWJwYWNrIG9yIFJvbGx1cCxcbi8vIGFjY29yZGluZyB0byBgYnJvd3NlcmAgY29uZmlnIGluIGBwYWNrYWdlLmpzb25gLlxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyYW5kb20sIGFscGhhYmV0LCBzaXplKSB7XG4gIC8vIFdlIGNhbuKAmXQgdXNlIGJ5dGVzIGJpZ2dlciB0aGFuIHRoZSBhbHBoYWJldC4gVG8gbWFrZSBieXRlcyB2YWx1ZXMgY2xvc2VyXG4gIC8vIHRvIHRoZSBhbHBoYWJldCwgd2UgYXBwbHkgYml0bWFzayBvbiB0aGVtLiBXZSBsb29rIGZvciB0aGUgY2xvc2VzdFxuICAvLyBgMiAqKiB4IC0gMWAgbnVtYmVyLCB3aGljaCB3aWxsIGJlIGJpZ2dlciB0aGFuIGFscGhhYmV0IHNpemUuIElmIHdlIGhhdmVcbiAgLy8gMzAgc3ltYm9scyBpbiB0aGUgYWxwaGFiZXQsIHdlIHdpbGwgdGFrZSAzMSAoMDAwMTExMTEpLlxuICAvLyBXZSBkbyBub3QgdXNlIGZhc3RlciBNYXRoLmNsejMyLCBiZWNhdXNlIGl0IGlzIG5vdCBhdmFpbGFibGUgaW4gYnJvd3NlcnMuXG4gIHZhciBtYXNrID0gKDIgPDwgTWF0aC5sb2coYWxwaGFiZXQubGVuZ3RoIC0gMSkgLyBNYXRoLkxOMikgLSAxXG4gIC8vIEJpdG1hc2sgaXMgbm90IGEgcGVyZmVjdCBzb2x1dGlvbiAoaW4gb3VyIGV4YW1wbGUgaXQgd2lsbCBwYXNzIDMxIGJ5dGVzLFxuICAvLyB3aGljaCBpcyBiaWdnZXIgdGhhbiB0aGUgYWxwaGFiZXQpLiBBcyBhIHJlc3VsdCwgd2Ugd2lsbCBuZWVkIG1vcmUgYnl0ZXMsXG4gIC8vIHRoYW4gSUQgc2l6ZSwgYmVjYXVzZSB3ZSB3aWxsIHJlZnVzZSBieXRlcyBiaWdnZXIgdGhhbiB0aGUgYWxwaGFiZXQuXG5cbiAgLy8gRXZlcnkgaGFyZHdhcmUgcmFuZG9tIGdlbmVyYXRvciBjYWxsIGlzIGNvc3RseSxcbiAgLy8gYmVjYXVzZSB3ZSBuZWVkIHRvIHdhaXQgZm9yIGVudHJvcHkgY29sbGVjdGlvbi4gVGhpcyBpcyB3aHkgb2Z0ZW4gaXQgd2lsbFxuICAvLyBiZSBmYXN0ZXIgdG8gYXNrIGZvciBmZXcgZXh0cmEgYnl0ZXMgaW4gYWR2YW5jZSwgdG8gYXZvaWQgYWRkaXRpb25hbCBjYWxscy5cblxuICAvLyBIZXJlIHdlIGNhbGN1bGF0ZSBob3cgbWFueSByYW5kb20gYnl0ZXMgc2hvdWxkIHdlIGNhbGwgaW4gYWR2YW5jZS5cbiAgLy8gSXQgZGVwZW5kcyBvbiBJRCBsZW5ndGgsIG1hc2sgLyBhbHBoYWJldCBzaXplIGFuZCBtYWdpYyBudW1iZXIgMS42XG4gIC8vICh3aGljaCB3YXMgc2VsZWN0ZWQgYWNjb3JkaW5nIGJlbmNobWFya3MpLlxuXG4gIC8vIC1+ZiA9PiBNYXRoLmNlaWwoZikgaWYgbiBpcyBmbG9hdCBudW1iZXJcbiAgLy8gLX5pID0+IGkgKyAxIGlmIG4gaXMgaW50ZWdlciBudW1iZXJcbiAgdmFyIHN0ZXAgPSAtfigxLjYgKiBtYXNrICogc2l6ZSAvIGFscGhhYmV0Lmxlbmd0aClcbiAgdmFyIGlkID0gJydcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBieXRlcyA9IHJhbmRvbShzdGVwKVxuICAgIC8vIENvbXBhY3QgYWx0ZXJuYXRpdmUgZm9yIGBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXA7IGkrKylgXG4gICAgdmFyIGkgPSBzdGVwXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgLy8gSWYgcmFuZG9tIGJ5dGUgaXMgYmlnZ2VyIHRoYW4gYWxwaGFiZXQgZXZlbiBhZnRlciBiaXRtYXNrLFxuICAgICAgLy8gd2UgcmVmdXNlIGl0IGJ5IGB8fCAnJ2AuXG4gICAgICBpZCArPSBhbHBoYWJldFtieXRlc1tpXSAmIG1hc2tdIHx8ICcnXG4gICAgICAvLyBNb3JlIGNvbXBhY3QgdGhhbiBgaWQubGVuZ3RoICsgMSA9PT0gc2l6ZWBcbiAgICAgIGlmIChpZC5sZW5ndGggPT09ICtzaXplKSByZXR1cm4gaWRcbiAgICB9XG4gIH1cbn1cbiIsInZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG52YXIgZW1vamlzID0ge1xuICB0cmFjZTogJ/CflI0nLFxuICBkZWJ1ZzogJ/CfkJsnLFxuICBpbmZvOiAn4pyoJyxcbiAgd2FybjogJ+KaoO+4jycsXG4gIGVycm9yOiAn8J+aqCcsXG4gIGZhdGFsOiAn8J+SgCdcbn1cblxudmFyIGxldmVscyA9IHtcbiAgdHJhY2U6IDEwLFxuICBkZWJ1ZzogMjAsXG4gIGluZm86IDMwLFxuICB3YXJuOiA0MCxcbiAgZXJyb3I6IDUwLFxuICBmYXRhbDogNjBcbn1cblxudmFyIGRlZmF1bHRDb2xvcnMgPSB7XG4gIGZvcmVncm91bmQ6ICcjZDNjMGM4JyxcbiAgYmFja2dyb3VuZDogJyMyZDJkMmQnLFxuICBibGFjazogJyMyZDJkMmQnLFxuICByZWQ6ICcjZjI3NzdhJyxcbiAgZ3JlZW46ICcjOTljYzk5JyxcbiAgeWVsbG93OiAnI2ZmY2M2NicsXG4gIGJsdWU6ICcjNjY5OWNjJyxcbiAgbWFnZW50YTogJyNjYzk5Y2MnLFxuICBjeWFuOiAnIzY2Y2NjYycsXG4gIHdoaXRlOiAnI2QzZDBjOCcsXG4gIGJyaWdodEJsYWNrOiAnIzc0NzM2OSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBOYW5vbG9nZ2VyXG5cbmZ1bmN0aW9uIE5hbm9sb2dnZXIgKG5hbWUsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE5hbm9sb2dnZXIpKSByZXR1cm4gbmV3IE5hbm9sb2dnZXIobmFtZSwgb3B0cylcblxuICBhc3NlcnQuZXF1YWwodHlwZW9mIG9wdHMsICdvYmplY3QnLCAnbmFub2xvZ2dlcjogb3B0cyBzaG91bGQgYmUgdHlwZSBvYmplY3QnKVxuXG4gIHRoaXMuX25hbWUgPSBuYW1lIHx8ICcnXG4gIHRoaXMuX2NvbG9ycyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb2xvcnMsIG9wdHMuY29sb3JzIHx8IHt9KVxuXG4gIHRyeSB7XG4gICAgdGhpcy5sb2dMZXZlbCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9nTGV2ZWwnKSB8fCAnaW5mbydcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMubG9nTGV2ZWwgPSAnaW5mbydcbiAgfVxuXG4gIHRoaXMuX2xvZ0xldmVsID0gbGV2ZWxzW3RoaXMubG9nTGV2ZWxdXG59XG5cbk5hbm9sb2dnZXIucHJvdG90eXBlLnRyYWNlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJncyA9IFsgJ3RyYWNlJyBdXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pXG4gIHRoaXMuX3ByaW50LmFwcGx5KHRoaXMsIGFyZ3MpXG59XG5cbk5hbm9sb2dnZXIucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJncyA9IFsgJ2RlYnVnJyBdXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pXG4gIHRoaXMuX3ByaW50LmFwcGx5KHRoaXMsIGFyZ3MpXG59XG5cbk5hbm9sb2dnZXIucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcmdzID0gWyAnaW5mbycgXVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKVxuICB0aGlzLl9wcmludC5hcHBseSh0aGlzLCBhcmdzKVxufVxuXG5OYW5vbG9nZ2VyLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJncyA9IFsgJ3dhcm4nIF1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSlcbiAgdGhpcy5fcHJpbnQuYXBwbHkodGhpcywgYXJncylcbn1cblxuTmFub2xvZ2dlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcmdzID0gWyAnZXJyb3InIF1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSlcbiAgdGhpcy5fcHJpbnQuYXBwbHkodGhpcywgYXJncylcbn1cblxuTmFub2xvZ2dlci5wcm90b3R5cGUuZmF0YWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcmdzID0gWyAnZmF0YWwnIF1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSlcbiAgdGhpcy5fcHJpbnQuYXBwbHkodGhpcywgYXJncylcbn1cblxuTmFub2xvZ2dlci5wcm90b3R5cGUuX3ByaW50ID0gZnVuY3Rpb24gKGxldmVsKSB7XG4gIGlmIChsZXZlbHNbbGV2ZWxdIDwgdGhpcy5fbG9nTGV2ZWwpIHJldHVyblxuXG4gIHZhciB0aW1lID0gZ2V0VGltZVN0YW1wKClcbiAgdmFyIGVtb2ppID0gZW1vamlzW2xldmVsXVxuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUgfHwgJ3Vua25vd24nXG5cbiAgdmFyIG1zZ0NvbG9yID0gKGxldmVsID09PSAnZXJyb3InIHx8IGxldmVsLmZhdGFsKVxuICAgID8gdGhpcy5fY29sb3JzLnJlZFxuICAgIDogbGV2ZWwgPT09ICd3YXJuJ1xuICAgICAgPyB0aGlzLl9jb2xvcnMueWVsbG93XG4gICAgICA6IHRoaXMuX2NvbG9ycy5ncmVlblxuXG4gIHZhciBvYmpzID0gW11cbiAgdmFyIGFyZ3MgPSBbIG51bGwgXVxuICB2YXIgbXNnID0gJyVjJXMgJyArIGVtb2ppICsgJyAlYyVzJ1xuXG4gIGFyZ3MucHVzaChjb2xvcih0aGlzLl9jb2xvcnMuYnJpZ2h0QmxhY2spLCB0aW1lKVxuICBhcmdzLnB1c2goY29sb3IodGhpcy5fY29sb3JzLm1hZ2VudGEpLCBuYW1lKVxuXG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldXG4gICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoaSA9PT0gMSkge1xuICAgICAgICAvLyBmaXJzdCBzdHJpbmcgYXJndW1lbnQgaXMgaW4gY29sb3JcbiAgICAgICAgbXNnICs9ICcgJWMlcydcbiAgICAgICAgYXJncy5wdXNoKGNvbG9yKG1zZ0NvbG9yKSlcbiAgICAgICAgYXJncy5wdXNoKGFyZylcbiAgICAgIH0gZWxzZSBpZiAoL21zJC8udGVzdChhcmcpKSB7XG4gICAgICAgIC8vIGFyZ3VtZW50cyBmaW5pc2hpbmcgd2l0aCAnbXMnLCBncmV5IG91dFxuICAgICAgICBtc2cgKz0gJyAlYyVzJ1xuICAgICAgICBhcmdzLnB1c2goY29sb3IodGhpcy5fY29sb3JzLmJyaWdodEJsYWNrKSlcbiAgICAgICAgYXJncy5wdXNoKGFyZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5vcm1hbCBjb2xvcnNcbiAgICAgICAgbXNnICs9ICcgJWMlcydcbiAgICAgICAgYXJncy5wdXNoKGNvbG9yKHRoaXMuX2NvbG9ycy53aGl0ZSkpXG4gICAgICAgIGFyZ3MucHVzaChhcmcpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgICAgbXNnICs9ICcgJWMlZCdcbiAgICAgIGFyZ3MucHVzaChjb2xvcih0aGlzLl9jb2xvcnMubWFnZW50YSkpXG4gICAgICBhcmdzLnB1c2goYXJnKVxuICAgIH0gZWxzZSB7XG4gICAgICBvYmpzLnB1c2goYXJnKVxuICAgIH1cbiAgfVxuXG4gIGFyZ3NbMF0gPSBtc2dcbiAgb2Jqcy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICBhcmdzLnB1c2gob2JqKVxuICB9KVxuXG4gIC8vIEluIElFL0VkZ2UgY29uc29sZSBmdW5jdGlvbnMgZG9uJ3QgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZVxuICAvLyBzbyB0aGlzIGlzIG5lY2Vzc2FyeSB0byBnZXQgYWxsIHRoZSBhcmdzIGFwcGxpZWQuXG4gIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5hcHBseShjb25zb2xlLmxvZywgW2NvbnNvbGUsIGFyZ3NdKVxufVxuXG5mdW5jdGlvbiBjb2xvciAoY29sb3IpIHtcbiAgcmV0dXJuICdjb2xvcjogJyArIGNvbG9yICsgJzsnXG59XG5cbmZ1bmN0aW9uIGdldFRpbWVTdGFtcCAoKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoKVxuICB2YXIgaG91cnMgPSBwYWQoZGF0ZS5nZXRIb3VycygpLnRvU3RyaW5nKCkpXG4gIHZhciBtaW51dGVzID0gcGFkKGRhdGUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpXG4gIHZhciBzZWNvbmRzID0gcGFkKGRhdGUuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpXG4gIHJldHVybiBob3VycyArICc6JyArIG1pbnV0ZXMgKyAnOicgKyBzZWNvbmRzXG59XG5cbmZ1bmN0aW9uIHBhZCAoc3RyKSB7XG4gIHJldHVybiBzdHIubGVuZ3RoICE9PSAyID8gMCArIHN0ciA6IHN0clxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBMUlVcblxuZnVuY3Rpb24gTFJVIChvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMUlUpKSByZXR1cm4gbmV3IExSVShvcHRzKVxuICBpZiAodHlwZW9mIG9wdHMgPT09ICdudW1iZXInKSBvcHRzID0ge21heDogb3B0c31cbiAgaWYgKCFvcHRzKSBvcHRzID0ge31cbiAgdGhpcy5jYWNoZSA9IHt9XG4gIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGxcbiAgdGhpcy5sZW5ndGggPSAwXG4gIHRoaXMubWF4ID0gb3B0cy5tYXggfHwgMTAwMFxuICB0aGlzLm1heEFnZSA9IG9wdHMubWF4QWdlIHx8IDBcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExSVS5wcm90b3R5cGUsICdrZXlzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2FjaGUpIH1cbn0pXG5cbkxSVS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2FjaGUgPSB7fVxuICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gIHRoaXMubGVuZ3RoID0gMFxufVxuXG5MUlUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJyArIGtleVxuICBpZiAoIXRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuXG5cbiAgdmFyIGVsZW1lbnQgPSB0aGlzLmNhY2hlW2tleV1cbiAgZGVsZXRlIHRoaXMuY2FjaGVba2V5XVxuICB0aGlzLl91bmxpbmsoa2V5LCBlbGVtZW50LnByZXYsIGVsZW1lbnQubmV4dClcbiAgcmV0dXJuIGVsZW1lbnQudmFsdWVcbn1cblxuTFJVLnByb3RvdHlwZS5fdW5saW5rID0gZnVuY3Rpb24gKGtleSwgcHJldiwgbmV4dCkge1xuICB0aGlzLmxlbmd0aC0tXG5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbFxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLmhlYWQgPT09IGtleSkge1xuICAgICAgdGhpcy5oZWFkID0gcHJldlxuICAgICAgdGhpcy5jYWNoZVt0aGlzLmhlYWRdLm5leHQgPSBudWxsXG4gICAgfSBlbHNlIGlmICh0aGlzLnRhaWwgPT09IGtleSkge1xuICAgICAgdGhpcy50YWlsID0gbmV4dFxuICAgICAgdGhpcy5jYWNoZVt0aGlzLnRhaWxdLnByZXYgPSBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FjaGVbcHJldl0ubmV4dCA9IG5leHRcbiAgICAgIHRoaXMuY2FjaGVbbmV4dF0ucHJldiA9IHByZXZcbiAgICB9XG4gIH1cbn1cblxuTFJVLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gKGtleSkge1xuICBpZiAoIXRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuXG5cbiAgdmFyIGVsZW1lbnQgPSB0aGlzLmNhY2hlW2tleV1cblxuICBpZiAoIXRoaXMuX2NoZWNrQWdlKGtleSwgZWxlbWVudCkpIHJldHVyblxuICByZXR1cm4gZWxlbWVudC52YWx1ZVxufVxuXG5MUlUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykga2V5ID0gJycgKyBrZXlcblxuICB2YXIgZWxlbWVudFxuXG4gIGlmICh0aGlzLmNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICBlbGVtZW50ID0gdGhpcy5jYWNoZVtrZXldXG4gICAgZWxlbWVudC52YWx1ZSA9IHZhbHVlXG4gICAgaWYgKHRoaXMubWF4QWdlKSBlbGVtZW50Lm1vZGlmaWVkID0gRGF0ZS5ub3coKVxuXG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IHRoZSBoZWFkLCB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkbzpcbiAgICBpZiAoa2V5ID09PSB0aGlzLmhlYWQpIHJldHVybiB2YWx1ZVxuICAgIHRoaXMuX3VubGluayhrZXksIGVsZW1lbnQucHJldiwgZWxlbWVudC5uZXh0KVxuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQgPSB7dmFsdWU6IHZhbHVlLCBtb2RpZmllZDogMCwgbmV4dDogbnVsbCwgcHJldjogbnVsbH1cbiAgICBpZiAodGhpcy5tYXhBZ2UpIGVsZW1lbnQubW9kaWZpZWQgPSBEYXRlLm5vdygpXG4gICAgdGhpcy5jYWNoZVtrZXldID0gZWxlbWVudFxuXG4gICAgLy8gRXZpY3Rpb24gaXMgb25seSBwb3NzaWJsZSBpZiB0aGUga2V5IGRpZG4ndCBhbHJlYWR5IGV4aXN0OlxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gdGhpcy5tYXgpIHRoaXMuZXZpY3QoKVxuICB9XG5cbiAgdGhpcy5sZW5ndGgrK1xuICBlbGVtZW50Lm5leHQgPSBudWxsXG4gIGVsZW1lbnQucHJldiA9IHRoaXMuaGVhZFxuXG4gIGlmICh0aGlzLmhlYWQpIHRoaXMuY2FjaGVbdGhpcy5oZWFkXS5uZXh0ID0ga2V5XG4gIHRoaXMuaGVhZCA9IGtleVxuXG4gIGlmICghdGhpcy50YWlsKSB0aGlzLnRhaWwgPSBrZXlcbiAgcmV0dXJuIHZhbHVlXG59XG5cbkxSVS5wcm90b3R5cGUuX2NoZWNrQWdlID0gZnVuY3Rpb24gKGtleSwgZWxlbWVudCkge1xuICBpZiAodGhpcy5tYXhBZ2UgJiYgKERhdGUubm93KCkgLSBlbGVtZW50Lm1vZGlmaWVkKSA+IHRoaXMubWF4QWdlKSB7XG4gICAgdGhpcy5yZW1vdmUoa2V5KVxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbkxSVS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnICsga2V5XG4gIGlmICghdGhpcy5jYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm5cblxuICB2YXIgZWxlbWVudCA9IHRoaXMuY2FjaGVba2V5XVxuXG4gIGlmICghdGhpcy5fY2hlY2tBZ2Uoa2V5LCBlbGVtZW50KSkgcmV0dXJuXG5cbiAgaWYgKHRoaXMuaGVhZCAhPT0ga2V5KSB7XG4gICAgaWYgKGtleSA9PT0gdGhpcy50YWlsKSB7XG4gICAgICB0aGlzLnRhaWwgPSBlbGVtZW50Lm5leHRcbiAgICAgIHRoaXMuY2FjaGVbdGhpcy50YWlsXS5wcmV2ID0gbnVsbFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZXQgcHJldi5uZXh0IC0+IGVsZW1lbnQubmV4dDpcbiAgICAgIHRoaXMuY2FjaGVbZWxlbWVudC5wcmV2XS5uZXh0ID0gZWxlbWVudC5uZXh0XG4gICAgfVxuXG4gICAgLy8gU2V0IGVsZW1lbnQubmV4dC5wcmV2IC0+IGVsZW1lbnQucHJldjpcbiAgICB0aGlzLmNhY2hlW2VsZW1lbnQubmV4dF0ucHJldiA9IGVsZW1lbnQucHJldlxuXG4gICAgLy8gRWxlbWVudCBpcyB0aGUgbmV3IGhlYWRcbiAgICB0aGlzLmNhY2hlW3RoaXMuaGVhZF0ubmV4dCA9IGtleVxuICAgIGVsZW1lbnQucHJldiA9IHRoaXMuaGVhZFxuICAgIGVsZW1lbnQubmV4dCA9IG51bGxcbiAgICB0aGlzLmhlYWQgPSBrZXlcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50LnZhbHVlXG59XG5cbkxSVS5wcm90b3R5cGUuZXZpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy50YWlsKSByZXR1cm5cbiAgdGhpcy5yZW1vdmUodGhpcy50YWlsKVxufVxuIiwidmFyIGFzc2VydCA9IHJlcXVpcmUoJ25hbm9hc3NlcnQnKVxudmFyIG1vcnBoID0gcmVxdWlyZSgnLi9saWIvbW9ycGgnKVxuXG52YXIgVEVYVF9OT0RFID0gM1xuLy8gdmFyIERFQlVHID0gZmFsc2VcblxubW9kdWxlLmV4cG9ydHMgPSBuYW5vbW9ycGhcblxuLy8gTW9ycGggb25lIHRyZWUgaW50byBhbm90aGVyIHRyZWVcbi8vXG4vLyBubyBwYXJlbnRcbi8vICAgLT4gc2FtZTogZGlmZiBhbmQgd2FsayBjaGlsZHJlblxuLy8gICAtPiBub3Qgc2FtZTogcmVwbGFjZSBhbmQgcmV0dXJuXG4vLyBvbGQgbm9kZSBkb2Vzbid0IGV4aXN0XG4vLyAgIC0+IGluc2VydCBuZXcgbm9kZVxuLy8gbmV3IG5vZGUgZG9lc24ndCBleGlzdFxuLy8gICAtPiBkZWxldGUgb2xkIG5vZGVcbi8vIG5vZGVzIGFyZSBub3QgdGhlIHNhbWVcbi8vICAgLT4gZGlmZiBub2RlcyBhbmQgYXBwbHkgcGF0Y2ggdG8gb2xkIG5vZGVcbi8vIG5vZGVzIGFyZSB0aGUgc2FtZVxuLy8gICAtPiB3YWxrIGFsbCBjaGlsZCBub2RlcyBhbmQgYXBwZW5kIHRvIG9sZCBub2RlXG5mdW5jdGlvbiBuYW5vbW9ycGggKG9sZFRyZWUsIG5ld1RyZWUsIG9wdGlvbnMpIHtcbiAgLy8gaWYgKERFQlVHKSB7XG4gIC8vICAgY29uc29sZS5sb2coXG4gIC8vICAgJ25hbm9tb3JwaFxcbm9sZFxcbiAgJXNcXG5uZXdcXG4gICVzJyxcbiAgLy8gICBvbGRUcmVlICYmIG9sZFRyZWUub3V0ZXJIVE1MLFxuICAvLyAgIG5ld1RyZWUgJiYgbmV3VHJlZS5vdXRlckhUTUxcbiAgLy8gKVxuICAvLyB9XG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygb2xkVHJlZSwgJ29iamVjdCcsICduYW5vbW9ycGg6IG9sZFRyZWUgc2hvdWxkIGJlIGFuIG9iamVjdCcpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgbmV3VHJlZSwgJ29iamVjdCcsICduYW5vbW9ycGg6IG5ld1RyZWUgc2hvdWxkIGJlIGFuIG9iamVjdCcpXG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jaGlsZHJlbk9ubHkpIHtcbiAgICB1cGRhdGVDaGlsZHJlbihuZXdUcmVlLCBvbGRUcmVlKVxuICAgIHJldHVybiBvbGRUcmVlXG4gIH1cblxuICBhc3NlcnQubm90RXF1YWwoXG4gICAgbmV3VHJlZS5ub2RlVHlwZSxcbiAgICAxMSxcbiAgICAnbmFub21vcnBoOiBuZXdUcmVlIHNob3VsZCBoYXZlIG9uZSByb290IG5vZGUgKHdoaWNoIGlzIG5vdCBhIERvY3VtZW50RnJhZ21lbnQpJ1xuICApXG5cbiAgcmV0dXJuIHdhbGsobmV3VHJlZSwgb2xkVHJlZSlcbn1cblxuLy8gV2FsayBhbmQgbW9ycGggYSBkb20gdHJlZVxuZnVuY3Rpb24gd2FsayAobmV3Tm9kZSwgb2xkTm9kZSkge1xuICAvLyBpZiAoREVCVUcpIHtcbiAgLy8gICBjb25zb2xlLmxvZyhcbiAgLy8gICAnd2Fsa1xcbm9sZFxcbiAgJXNcXG5uZXdcXG4gICVzJyxcbiAgLy8gICBvbGROb2RlICYmIG9sZE5vZGUub3V0ZXJIVE1MLFxuICAvLyAgIG5ld05vZGUgJiYgbmV3Tm9kZS5vdXRlckhUTUxcbiAgLy8gKVxuICAvLyB9XG4gIGlmICghb2xkTm9kZSkge1xuICAgIHJldHVybiBuZXdOb2RlXG4gIH0gZWxzZSBpZiAoIW5ld05vZGUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9IGVsc2UgaWYgKG5ld05vZGUuaXNTYW1lTm9kZSAmJiBuZXdOb2RlLmlzU2FtZU5vZGUob2xkTm9kZSkpIHtcbiAgICByZXR1cm4gb2xkTm9kZVxuICB9IGVsc2UgaWYgKG5ld05vZGUudGFnTmFtZSAhPT0gb2xkTm9kZS50YWdOYW1lIHx8IGdldENvbXBvbmVudElkKG5ld05vZGUpICE9PSBnZXRDb21wb25lbnRJZChvbGROb2RlKSkge1xuICAgIHJldHVybiBuZXdOb2RlXG4gIH0gZWxzZSB7XG4gICAgbW9ycGgobmV3Tm9kZSwgb2xkTm9kZSlcbiAgICB1cGRhdGVDaGlsZHJlbihuZXdOb2RlLCBvbGROb2RlKVxuICAgIHJldHVybiBvbGROb2RlXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50SWQgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuZGF0YXNldCA/IG5vZGUuZGF0YXNldC5uYW5vbW9ycGhDb21wb25lbnRJZCA6IHVuZGVmaW5lZFxufVxuXG4vLyBVcGRhdGUgdGhlIGNoaWxkcmVuIG9mIGVsZW1lbnRzXG4vLyAob2JqLCBvYmopIC0+IG51bGxcbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuIChuZXdOb2RlLCBvbGROb2RlKSB7XG4gIC8vIGlmIChERUJVRykge1xuICAvLyAgIGNvbnNvbGUubG9nKFxuICAvLyAgICd1cGRhdGVDaGlsZHJlblxcbm9sZFxcbiAgJXNcXG5uZXdcXG4gICVzJyxcbiAgLy8gICBvbGROb2RlICYmIG9sZE5vZGUub3V0ZXJIVE1MLFxuICAvLyAgIG5ld05vZGUgJiYgbmV3Tm9kZS5vdXRlckhUTUxcbiAgLy8gKVxuICAvLyB9XG4gIHZhciBvbGRDaGlsZCwgbmV3Q2hpbGQsIG1vcnBoZWQsIG9sZE1hdGNoXG5cbiAgLy8gVGhlIG9mZnNldCBpcyBvbmx5IGV2ZXIgaW5jcmVhc2VkLCBhbmQgdXNlZCBmb3IgW2kgLSBvZmZzZXRdIGluIHRoZSBsb29wXG4gIHZhciBvZmZzZXQgPSAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IDsgaSsrKSB7XG4gICAgb2xkQ2hpbGQgPSBvbGROb2RlLmNoaWxkTm9kZXNbaV1cbiAgICBuZXdDaGlsZCA9IG5ld05vZGUuY2hpbGROb2Rlc1tpIC0gb2Zmc2V0XVxuICAgIC8vIGlmIChERUJVRykge1xuICAgIC8vICAgY29uc29sZS5sb2coXG4gICAgLy8gICAnPT09XFxuLSBvbGRcXG4gICVzXFxuLSBuZXdcXG4gICVzJyxcbiAgICAvLyAgIG9sZENoaWxkICYmIG9sZENoaWxkLm91dGVySFRNTCxcbiAgICAvLyAgIG5ld0NoaWxkICYmIG5ld0NoaWxkLm91dGVySFRNTFxuICAgIC8vIClcbiAgICAvLyB9XG4gICAgLy8gQm90aCBub2RlcyBhcmUgZW1wdHksIGRvIG5vdGhpbmdcbiAgICBpZiAoIW9sZENoaWxkICYmICFuZXdDaGlsZCkge1xuICAgICAgYnJlYWtcblxuICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBjaGlsZCwgcmVtb3ZlIG9sZFxuICAgIH0gZWxzZSBpZiAoIW5ld0NoaWxkKSB7XG4gICAgICBvbGROb2RlLnJlbW92ZUNoaWxkKG9sZENoaWxkKVxuICAgICAgaS0tXG5cbiAgICAvLyBUaGVyZSBpcyBubyBvbGQgY2hpbGQsIGFkZCBuZXdcbiAgICB9IGVsc2UgaWYgKCFvbGRDaGlsZCkge1xuICAgICAgb2xkTm9kZS5hcHBlbmRDaGlsZChuZXdDaGlsZClcbiAgICAgIG9mZnNldCsrXG5cbiAgICAvLyBCb3RoIG5vZGVzIGFyZSB0aGUgc2FtZSwgbW9ycGhcbiAgICB9IGVsc2UgaWYgKHNhbWUobmV3Q2hpbGQsIG9sZENoaWxkKSkge1xuICAgICAgbW9ycGhlZCA9IHdhbGsobmV3Q2hpbGQsIG9sZENoaWxkKVxuICAgICAgaWYgKG1vcnBoZWQgIT09IG9sZENoaWxkKSB7XG4gICAgICAgIG9sZE5vZGUucmVwbGFjZUNoaWxkKG1vcnBoZWQsIG9sZENoaWxkKVxuICAgICAgICBvZmZzZXQrK1xuICAgICAgfVxuXG4gICAgLy8gQm90aCBub2RlcyBkbyBub3Qgc2hhcmUgYW4gSUQgb3IgYSBwbGFjZWhvbGRlciwgdHJ5IHJlb3JkZXJcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkTWF0Y2ggPSBudWxsXG5cbiAgICAgIC8vIFRyeSBhbmQgZmluZCBhIHNpbWlsYXIgbm9kZSBzb21ld2hlcmUgaW4gdGhlIHRyZWVcbiAgICAgIGZvciAodmFyIGogPSBpOyBqIDwgb2xkTm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChzYW1lKG9sZE5vZGUuY2hpbGROb2Rlc1tqXSwgbmV3Q2hpbGQpKSB7XG4gICAgICAgICAgb2xkTWF0Y2ggPSBvbGROb2RlLmNoaWxkTm9kZXNbal1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZXJlIHdhcyBhIG5vZGUgd2l0aCB0aGUgc2FtZSBJRCBvciBwbGFjZWhvbGRlciBpbiB0aGUgb2xkIGxpc3RcbiAgICAgIGlmIChvbGRNYXRjaCkge1xuICAgICAgICBtb3JwaGVkID0gd2FsayhuZXdDaGlsZCwgb2xkTWF0Y2gpXG4gICAgICAgIGlmIChtb3JwaGVkICE9PSBvbGRNYXRjaCkgb2Zmc2V0KytcbiAgICAgICAgb2xkTm9kZS5pbnNlcnRCZWZvcmUobW9ycGhlZCwgb2xkQ2hpbGQpXG5cbiAgICAgIC8vIEl0J3Mgc2FmZSB0byBtb3JwaCB0d28gbm9kZXMgaW4tcGxhY2UgaWYgbmVpdGhlciBoYXMgYW4gSURcbiAgICAgIH0gZWxzZSBpZiAoIW5ld0NoaWxkLmlkICYmICFvbGRDaGlsZC5pZCkge1xuICAgICAgICBtb3JwaGVkID0gd2FsayhuZXdDaGlsZCwgb2xkQ2hpbGQpXG4gICAgICAgIGlmIChtb3JwaGVkICE9PSBvbGRDaGlsZCkge1xuICAgICAgICAgIG9sZE5vZGUucmVwbGFjZUNoaWxkKG1vcnBoZWQsIG9sZENoaWxkKVxuICAgICAgICAgIG9mZnNldCsrXG4gICAgICAgIH1cblxuICAgICAgLy8gSW5zZXJ0IHRoZSBub2RlIGF0IHRoZSBpbmRleCBpZiB3ZSBjb3VsZG4ndCBtb3JwaCBvciBmaW5kIGEgbWF0Y2hpbmcgbm9kZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2xkTm9kZS5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsIG9sZENoaWxkKVxuICAgICAgICBvZmZzZXQrK1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYW1lIChhLCBiKSB7XG4gIGlmIChhLmlkKSByZXR1cm4gYS5pZCA9PT0gYi5pZFxuICBpZiAoYS5pc1NhbWVOb2RlKSByZXR1cm4gYS5pc1NhbWVOb2RlKGIpXG4gIGlmIChhLnRhZ05hbWUgIT09IGIudGFnTmFtZSkgcmV0dXJuIGZhbHNlXG4gIGlmIChhLnR5cGUgPT09IFRFWFRfTk9ERSkgcmV0dXJuIGEubm9kZVZhbHVlID09PSBiLm5vZGVWYWx1ZVxuICByZXR1cm4gZmFsc2Vcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gW1xuICAvLyBhdHRyaWJ1dGUgZXZlbnRzIChjYW4gYmUgc2V0IHdpdGggYXR0cmlidXRlcylcbiAgJ29uY2xpY2snLFxuICAnb25kYmxjbGljaycsXG4gICdvbm1vdXNlZG93bicsXG4gICdvbm1vdXNldXAnLFxuICAnb25tb3VzZW92ZXInLFxuICAnb25tb3VzZW1vdmUnLFxuICAnb25tb3VzZW91dCcsXG4gICdvbm1vdXNlZW50ZXInLFxuICAnb25tb3VzZWxlYXZlJyxcbiAgJ29udG91Y2hjYW5jZWwnLFxuICAnb250b3VjaGVuZCcsXG4gICdvbnRvdWNobW92ZScsXG4gICdvbnRvdWNoc3RhcnQnLFxuICAnb25kcmFnc3RhcnQnLFxuICAnb25kcmFnJyxcbiAgJ29uZHJhZ2VudGVyJyxcbiAgJ29uZHJhZ2xlYXZlJyxcbiAgJ29uZHJhZ292ZXInLFxuICAnb25kcm9wJyxcbiAgJ29uZHJhZ2VuZCcsXG4gICdvbmtleWRvd24nLFxuICAnb25rZXlwcmVzcycsXG4gICdvbmtleXVwJyxcbiAgJ29udW5sb2FkJyxcbiAgJ29uYWJvcnQnLFxuICAnb25lcnJvcicsXG4gICdvbnJlc2l6ZScsXG4gICdvbnNjcm9sbCcsXG4gICdvbnNlbGVjdCcsXG4gICdvbmNoYW5nZScsXG4gICdvbnN1Ym1pdCcsXG4gICdvbnJlc2V0JyxcbiAgJ29uZm9jdXMnLFxuICAnb25ibHVyJyxcbiAgJ29uaW5wdXQnLFxuICAnb25hbmltYXRpb25lbmQnLFxuICAnb25hbmltYXRpb25pdGVyYXRpb24nLFxuICAnb25hbmltYXRpb25zdGFydCcsXG4gIC8vIG90aGVyIGNvbW1vbiBldmVudHNcbiAgJ29uY29udGV4dG1lbnUnLFxuICAnb25mb2N1c2luJyxcbiAgJ29uZm9jdXNvdXQnXG5dXG4iLCJ2YXIgZXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKVxudmFyIGV2ZW50c0xlbmd0aCA9IGV2ZW50cy5sZW5ndGhcblxudmFyIEVMRU1FTlRfTk9ERSA9IDFcbnZhciBURVhUX05PREUgPSAzXG52YXIgQ09NTUVOVF9OT0RFID0gOFxuXG5tb2R1bGUuZXhwb3J0cyA9IG1vcnBoXG5cbi8vIGRpZmYgZWxlbWVudHMgYW5kIGFwcGx5IHRoZSByZXN1bHRpbmcgcGF0Y2ggdG8gdGhlIG9sZCBub2RlXG4vLyAob2JqLCBvYmopIC0+IG51bGxcbmZ1bmN0aW9uIG1vcnBoIChuZXdOb2RlLCBvbGROb2RlKSB7XG4gIHZhciBub2RlVHlwZSA9IG5ld05vZGUubm9kZVR5cGVcbiAgdmFyIG5vZGVOYW1lID0gbmV3Tm9kZS5ub2RlTmFtZVxuXG4gIGlmIChub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgY29weUF0dHJzKG5ld05vZGUsIG9sZE5vZGUpXG4gIH1cblxuICBpZiAobm9kZVR5cGUgPT09IFRFWFRfTk9ERSB8fCBub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgaWYgKG9sZE5vZGUubm9kZVZhbHVlICE9PSBuZXdOb2RlLm5vZGVWYWx1ZSkge1xuICAgICAgb2xkTm9kZS5ub2RlVmFsdWUgPSBuZXdOb2RlLm5vZGVWYWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIFNvbWUgRE9NIG5vZGVzIGFyZSB3ZWlyZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGF0cmljay1zdGVlbGUtaWRlbS9tb3JwaGRvbS9ibG9iL21hc3Rlci9zcmMvc3BlY2lhbEVsSGFuZGxlcnMuanNcbiAgaWYgKG5vZGVOYW1lID09PSAnSU5QVVQnKSB1cGRhdGVJbnB1dChuZXdOb2RlLCBvbGROb2RlKVxuICBlbHNlIGlmIChub2RlTmFtZSA9PT0gJ09QVElPTicpIHVwZGF0ZU9wdGlvbihuZXdOb2RlLCBvbGROb2RlKVxuICBlbHNlIGlmIChub2RlTmFtZSA9PT0gJ1RFWFRBUkVBJykgdXBkYXRlVGV4dGFyZWEobmV3Tm9kZSwgb2xkTm9kZSlcblxuICBjb3B5RXZlbnRzKG5ld05vZGUsIG9sZE5vZGUpXG59XG5cbmZ1bmN0aW9uIGNvcHlBdHRycyAobmV3Tm9kZSwgb2xkTm9kZSkge1xuICB2YXIgb2xkQXR0cnMgPSBvbGROb2RlLmF0dHJpYnV0ZXNcbiAgdmFyIG5ld0F0dHJzID0gbmV3Tm9kZS5hdHRyaWJ1dGVzXG4gIHZhciBhdHRyTmFtZXNwYWNlVVJJID0gbnVsbFxuICB2YXIgYXR0clZhbHVlID0gbnVsbFxuICB2YXIgZnJvbVZhbHVlID0gbnVsbFxuICB2YXIgYXR0ck5hbWUgPSBudWxsXG4gIHZhciBhdHRyID0gbnVsbFxuXG4gIGZvciAodmFyIGkgPSBuZXdBdHRycy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgIGF0dHIgPSBuZXdBdHRyc1tpXVxuICAgIGF0dHJOYW1lID0gYXR0ci5uYW1lXG4gICAgYXR0ck5hbWVzcGFjZVVSSSA9IGF0dHIubmFtZXNwYWNlVVJJXG4gICAgYXR0clZhbHVlID0gYXR0ci52YWx1ZVxuICAgIGlmIChhdHRyTmFtZXNwYWNlVVJJKSB7XG4gICAgICBhdHRyTmFtZSA9IGF0dHIubG9jYWxOYW1lIHx8IGF0dHJOYW1lXG4gICAgICBmcm9tVmFsdWUgPSBvbGROb2RlLmdldEF0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lKVxuICAgICAgaWYgKGZyb21WYWx1ZSAhPT0gYXR0clZhbHVlKSB7XG4gICAgICAgIG9sZE5vZGUuc2V0QXR0cmlidXRlTlMoYXR0ck5hbWVzcGFjZVVSSSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvbGROb2RlLmhhc0F0dHJpYnV0ZShhdHRyTmFtZSkpIHtcbiAgICAgICAgb2xkTm9kZS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIGF0dHJWYWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb21WYWx1ZSA9IG9sZE5vZGUuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKVxuICAgICAgICBpZiAoZnJvbVZhbHVlICE9PSBhdHRyVmFsdWUpIHtcbiAgICAgICAgICAvLyBhcHBhcmVudGx5IHZhbHVlcyBhcmUgYWx3YXlzIGNhc3QgdG8gc3RyaW5ncywgYWggd2VsbFxuICAgICAgICAgIGlmIChhdHRyVmFsdWUgPT09ICdudWxsJyB8fCBhdHRyVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBvbGROb2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyTmFtZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2xkTm9kZS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIGF0dHJWYWx1ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgYW55IGV4dHJhIGF0dHJpYnV0ZXMgZm91bmQgb24gdGhlIG9yaWdpbmFsIERPTSBlbGVtZW50IHRoYXRcbiAgLy8gd2VyZW4ndCBmb3VuZCBvbiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gIGZvciAodmFyIGogPSBvbGRBdHRycy5sZW5ndGggLSAxOyBqID49IDA7IC0taikge1xuICAgIGF0dHIgPSBvbGRBdHRyc1tqXVxuICAgIGlmIChhdHRyLnNwZWNpZmllZCAhPT0gZmFsc2UpIHtcbiAgICAgIGF0dHJOYW1lID0gYXR0ci5uYW1lXG4gICAgICBhdHRyTmFtZXNwYWNlVVJJID0gYXR0ci5uYW1lc3BhY2VVUklcblxuICAgICAgaWYgKGF0dHJOYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgYXR0ck5hbWUgPSBhdHRyLmxvY2FsTmFtZSB8fCBhdHRyTmFtZVxuICAgICAgICBpZiAoIW5ld05vZGUuaGFzQXR0cmlidXRlTlMoYXR0ck5hbWVzcGFjZVVSSSwgYXR0ck5hbWUpKSB7XG4gICAgICAgICAgb2xkTm9kZS5yZW1vdmVBdHRyaWJ1dGVOUyhhdHRyTmFtZXNwYWNlVVJJLCBhdHRyTmFtZSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFuZXdOb2RlLmhhc0F0dHJpYnV0ZU5TKG51bGwsIGF0dHJOYW1lKSkge1xuICAgICAgICAgIG9sZE5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlFdmVudHMgKG5ld05vZGUsIG9sZE5vZGUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHNMZW5ndGg7IGkrKykge1xuICAgIHZhciBldiA9IGV2ZW50c1tpXVxuICAgIGlmIChuZXdOb2RlW2V2XSkgeyAgICAgICAgICAgLy8gaWYgbmV3IGVsZW1lbnQgaGFzIGEgd2hpdGVsaXN0ZWQgYXR0cmlidXRlXG4gICAgICBvbGROb2RlW2V2XSA9IG5ld05vZGVbZXZdICAvLyB1cGRhdGUgZXhpc3RpbmcgZWxlbWVudFxuICAgIH0gZWxzZSBpZiAob2xkTm9kZVtldl0pIHsgICAgLy8gaWYgZXhpc3RpbmcgZWxlbWVudCBoYXMgaXQgYW5kIG5ldyBvbmUgZG9lc250XG4gICAgICBvbGROb2RlW2V2XSA9IHVuZGVmaW5lZCAgICAvLyByZW1vdmUgaXQgZnJvbSBleGlzdGluZyBlbGVtZW50XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbiAobmV3Tm9kZSwgb2xkTm9kZSkge1xuICB1cGRhdGVBdHRyaWJ1dGUobmV3Tm9kZSwgb2xkTm9kZSwgJ3NlbGVjdGVkJylcbn1cblxuLy8gVGhlIFwidmFsdWVcIiBhdHRyaWJ1dGUgaXMgc3BlY2lhbCBmb3IgdGhlIDxpbnB1dD4gZWxlbWVudCBzaW5jZSBpdCBzZXRzIHRoZVxuLy8gaW5pdGlhbCB2YWx1ZS4gQ2hhbmdpbmcgdGhlIFwidmFsdWVcIiBhdHRyaWJ1dGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgXCJ2YWx1ZVwiXG4vLyBwcm9wZXJ0eSB3aWxsIGhhdmUgbm8gZWZmZWN0IHNpbmNlIGl0IGlzIG9ubHkgdXNlZCB0byB0aGUgc2V0IHRoZSBpbml0aWFsXG4vLyB2YWx1ZS4gU2ltaWxhciBmb3IgdGhlIFwiY2hlY2tlZFwiIGF0dHJpYnV0ZSwgYW5kIFwiZGlzYWJsZWRcIi5cbmZ1bmN0aW9uIHVwZGF0ZUlucHV0IChuZXdOb2RlLCBvbGROb2RlKSB7XG4gIHZhciBuZXdWYWx1ZSA9IG5ld05vZGUudmFsdWVcbiAgdmFyIG9sZFZhbHVlID0gb2xkTm9kZS52YWx1ZVxuXG4gIHVwZGF0ZUF0dHJpYnV0ZShuZXdOb2RlLCBvbGROb2RlLCAnY2hlY2tlZCcpXG4gIHVwZGF0ZUF0dHJpYnV0ZShuZXdOb2RlLCBvbGROb2RlLCAnZGlzYWJsZWQnKVxuXG4gIC8vIFRoZSBcImluZGV0ZXJtaW5hdGVcIiBwcm9wZXJ0eSBjYW4gbm90IGJlIHNldCB1c2luZyBhbiBIVE1MIGF0dHJpYnV0ZS5cbiAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dC9jaGVja2JveFxuICBpZiAobmV3Tm9kZS5pbmRldGVybWluYXRlICE9PSBvbGROb2RlLmluZGV0ZXJtaW5hdGUpIHtcbiAgICBvbGROb2RlLmluZGV0ZXJtaW5hdGUgPSBuZXdOb2RlLmluZGV0ZXJtaW5hdGVcbiAgfVxuXG4gIC8vIFBlcnNpc3QgZmlsZSB2YWx1ZSBzaW5jZSBmaWxlIGlucHV0cyBjYW4ndCBiZSBjaGFuZ2VkIHByb2dyYW1hdGljYWxseVxuICBpZiAob2xkTm9kZS50eXBlID09PSAnZmlsZScpIHJldHVyblxuXG4gIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICBvbGROb2RlLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBuZXdWYWx1ZSlcbiAgICBvbGROb2RlLnZhbHVlID0gbmV3VmFsdWVcbiAgfVxuXG4gIGlmIChuZXdWYWx1ZSA9PT0gJ251bGwnKSB7XG4gICAgb2xkTm9kZS52YWx1ZSA9ICcnXG4gICAgb2xkTm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJylcbiAgfVxuXG4gIGlmICghbmV3Tm9kZS5oYXNBdHRyaWJ1dGVOUyhudWxsLCAndmFsdWUnKSkge1xuICAgIG9sZE5vZGUucmVtb3ZlQXR0cmlidXRlKCd2YWx1ZScpXG4gIH0gZWxzZSBpZiAob2xkTm9kZS50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgLy8gdGhpcyBpcyBzbyBlbGVtZW50cyBsaWtlIHNsaWRlciBtb3ZlIHRoZWlyIFVJIHRoaW5neVxuICAgIG9sZE5vZGUudmFsdWUgPSBuZXdWYWx1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRhcmVhIChuZXdOb2RlLCBvbGROb2RlKSB7XG4gIHZhciBuZXdWYWx1ZSA9IG5ld05vZGUudmFsdWVcbiAgaWYgKG5ld1ZhbHVlICE9PSBvbGROb2RlLnZhbHVlKSB7XG4gICAgb2xkTm9kZS52YWx1ZSA9IG5ld1ZhbHVlXG4gIH1cblxuICBpZiAob2xkTm9kZS5maXJzdENoaWxkICYmIG9sZE5vZGUuZmlyc3RDaGlsZC5ub2RlVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgLy8gTmVlZGVkIGZvciBJRS4gQXBwYXJlbnRseSBJRSBzZXRzIHRoZSBwbGFjZWhvbGRlciBhcyB0aGVcbiAgICAvLyBub2RlIHZhbHVlIGFuZCB2aXNlIHZlcnNhLiBUaGlzIGlnbm9yZXMgYW4gZW1wdHkgdXBkYXRlLlxuICAgIGlmIChuZXdWYWx1ZSA9PT0gJycgJiYgb2xkTm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZSA9PT0gb2xkTm9kZS5wbGFjZWhvbGRlcikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgb2xkTm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IG5ld1ZhbHVlXG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlIChuZXdOb2RlLCBvbGROb2RlLCBuYW1lKSB7XG4gIGlmIChuZXdOb2RlW25hbWVdICE9PSBvbGROb2RlW25hbWVdKSB7XG4gICAgb2xkTm9kZVtuYW1lXSA9IG5ld05vZGVbbmFtZV1cbiAgICBpZiAobmV3Tm9kZVtuYW1lXSkge1xuICAgICAgb2xkTm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgJycpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZE5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpXG4gICAgfVxuICB9XG59XG4iLCJ2YXIgcmVnID0gLyhbXj89Jl0rKSg9KFteJl0qKSk/L2dcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHFzXG5cbmZ1bmN0aW9uIHFzICh1cmwpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiB1cmwsICdzdHJpbmcnLCAnbmFub3F1ZXJ5OiB1cmwgc2hvdWxkIGJlIHR5cGUgc3RyaW5nJylcblxuICB2YXIgb2JqID0ge31cbiAgdXJsLnJlcGxhY2UoL14uKlxcPy8sICcnKS5yZXBsYWNlKHJlZywgZnVuY3Rpb24gKGEwLCBhMSwgYTIsIGEzKSB7XG4gICAgdmFyIHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGEzKVxuICAgIHZhciBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQoYTEpXG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmpba2V5XSkpIG9ialtrZXldLnB1c2godmFsdWUpXG4gICAgICBlbHNlIG9ialtrZXldID0gW29ialtrZXldLCB2YWx1ZV1cbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gb2JqXG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbm1vZHVsZS5leHBvcnRzID0gbmFub3JhZlxuXG4vLyBPbmx5IGNhbGwgUkFGIHdoZW4gbmVlZGVkXG4vLyAoZm4sIGZuPykgLT4gZm5cbmZ1bmN0aW9uIG5hbm9yYWYgKHJlbmRlciwgcmFmKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgcmVuZGVyLCAnZnVuY3Rpb24nLCAnbmFub3JhZjogcmVuZGVyIHNob3VsZCBiZSBhIGZ1bmN0aW9uJylcbiAgYXNzZXJ0Lm9rKHR5cGVvZiByYWYgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHJhZiA9PT0gJ3VuZGVmaW5lZCcsICduYW5vcmFmOiByYWYgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb3IgdW5kZWZpbmVkJylcblxuICBpZiAoIXJhZikgcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICB2YXIgcmVkcmF3U2NoZWR1bGVkID0gZmFsc2VcbiAgdmFyIGFyZ3MgPSBudWxsXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGZyYW1lICgpIHtcbiAgICBpZiAoYXJncyA9PT0gbnVsbCAmJiAhcmVkcmF3U2NoZWR1bGVkKSB7XG4gICAgICByZWRyYXdTY2hlZHVsZWQgPSB0cnVlXG5cbiAgICAgIHJhZihmdW5jdGlvbiByZWRyYXcgKCkge1xuICAgICAgICByZWRyYXdTY2hlZHVsZWQgPSBmYWxzZVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmdzLmxlbmd0aFxuICAgICAgICB2YXIgX2FyZ3MgPSBuZXcgQXJyYXkobGVuZ3RoKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBfYXJnc1tpXSA9IGFyZ3NbaV1cblxuICAgICAgICByZW5kZXIuYXBwbHkocmVuZGVyLCBfYXJncylcbiAgICAgICAgYXJncyA9IG51bGxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgYXJncyA9IGFyZ3VtZW50c1xuICB9XG59XG4iLCJ2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbnZhciB3YXlmYXJlciA9IHJlcXVpcmUoJ3dheWZhcmVyJylcblxuLy8gZWxlY3Ryb24gc3VwcG9ydFxudmFyIGlzTG9jYWxGaWxlID0gKC9maWxlOlxcL1xcLy8udGVzdChcbiAgdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiZcbiAgd2luZG93LmxvY2F0aW9uICYmXG4gIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbikpXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG52YXIgZWxlY3Ryb24gPSAnXihmaWxlOlxcL1xcL3xcXC8pKC4qXFwuaHRtbD9cXC8/KT8nXG52YXIgcHJvdG9jb2wgPSAnXihodHRwKHMpPyg6XFwvXFwvKSk/KHd3d1xcLik/J1xudmFyIGRvbWFpbiA9ICdbYS16QS1aMC05LV9cXC5dKyg6WzAtOV17MSw1fSk/KFxcL3sxfSk/J1xudmFyIHFzID0gJ1tcXD9dLiokJ1xuLyogZXNsaW50LWVuYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuXG52YXIgc3RyaXBFbGVjdHJvbiA9IG5ldyBSZWdFeHAoZWxlY3Ryb24pXG52YXIgcHJlZml4ID0gbmV3IFJlZ0V4cChwcm90b2NvbCArIGRvbWFpbilcbnZhciBub3JtYWxpemUgPSBuZXcgUmVnRXhwKCcjJylcbnZhciBzdWZmaXggPSBuZXcgUmVnRXhwKHFzKVxuXG5tb2R1bGUuZXhwb3J0cyA9IE5hbm9yb3V0ZXJcblxuZnVuY3Rpb24gTmFub3JvdXRlciAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTmFub3JvdXRlcikpIHJldHVybiBuZXcgTmFub3JvdXRlcihvcHRzKVxuICBvcHRzID0gb3B0cyB8fCB7fVxuICB0aGlzLnJvdXRlciA9IHdheWZhcmVyKG9wdHMuZGVmYXVsdCB8fCAnLzQwNCcpXG59XG5cbk5hbm9yb3V0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKHJvdXRlbmFtZSwgbGlzdGVuZXIpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiByb3V0ZW5hbWUsICdzdHJpbmcnKVxuICByb3V0ZW5hbWUgPSByb3V0ZW5hbWUucmVwbGFjZSgvXlsjL10vLCAnJylcbiAgdGhpcy5yb3V0ZXIub24ocm91dGVuYW1lLCBsaXN0ZW5lcilcbn1cblxuTmFub3JvdXRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChyb3V0ZW5hbWUpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiByb3V0ZW5hbWUsICdzdHJpbmcnKVxuICByb3V0ZW5hbWUgPSBwYXRobmFtZShyb3V0ZW5hbWUsIGlzTG9jYWxGaWxlKVxuICByZXR1cm4gdGhpcy5yb3V0ZXIuZW1pdChyb3V0ZW5hbWUpXG59XG5cbk5hbm9yb3V0ZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKHJvdXRlbmFtZSkge1xuICBhc3NlcnQuZXF1YWwodHlwZW9mIHJvdXRlbmFtZSwgJ3N0cmluZycpXG4gIHJvdXRlbmFtZSA9IHBhdGhuYW1lKHJvdXRlbmFtZSwgaXNMb2NhbEZpbGUpXG4gIHJldHVybiB0aGlzLnJvdXRlci5tYXRjaChyb3V0ZW5hbWUpXG59XG5cbi8vIHJlcGxhY2UgZXZlcnl0aGluZyBpbiBhIHJvdXRlIGJ1dCB0aGUgcGF0aG5hbWUgYW5kIGhhc2hcbmZ1bmN0aW9uIHBhdGhuYW1lIChyb3V0ZW5hbWUsIGlzRWxlY3Ryb24pIHtcbiAgaWYgKGlzRWxlY3Ryb24pIHJvdXRlbmFtZSA9IHJvdXRlbmFtZS5yZXBsYWNlKHN0cmlwRWxlY3Ryb24sICcnKVxuICBlbHNlIHJvdXRlbmFtZSA9IHJvdXRlbmFtZS5yZXBsYWNlKHByZWZpeCwgJycpXG4gIHJldHVybiBkZWNvZGVVUkkocm91dGVuYW1lLnJlcGxhY2Uoc3VmZml4LCAnJykucmVwbGFjZShub3JtYWxpemUsICcvJykpXG59XG4iLCJ2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxudmFyIGhhc1dpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG5cbmZ1bmN0aW9uIGNyZWF0ZVNjaGVkdWxlciAoKSB7XG4gIHZhciBzY2hlZHVsZXJcbiAgaWYgKGhhc1dpbmRvdykge1xuICAgIGlmICghd2luZG93Ll9uYW5vU2NoZWR1bGVyKSB3aW5kb3cuX25hbm9TY2hlZHVsZXIgPSBuZXcgTmFub1NjaGVkdWxlcih0cnVlKVxuICAgIHNjaGVkdWxlciA9IHdpbmRvdy5fbmFub1NjaGVkdWxlclxuICB9IGVsc2Uge1xuICAgIHNjaGVkdWxlciA9IG5ldyBOYW5vU2NoZWR1bGVyKClcbiAgfVxuICByZXR1cm4gc2NoZWR1bGVyXG59XG5cbmZ1bmN0aW9uIE5hbm9TY2hlZHVsZXIgKGhhc1dpbmRvdykge1xuICB0aGlzLmhhc1dpbmRvdyA9IGhhc1dpbmRvd1xuICB0aGlzLmhhc0lkbGUgPSB0aGlzLmhhc1dpbmRvdyAmJiB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFja1xuICB0aGlzLm1ldGhvZCA9IHRoaXMuaGFzSWRsZSA/IHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrLmJpbmQod2luZG93KSA6IHRoaXMuc2V0VGltZW91dFxuICB0aGlzLnNjaGVkdWxlZCA9IGZhbHNlXG4gIHRoaXMucXVldWUgPSBbXVxufVxuXG5OYW5vU2NoZWR1bGVyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNiKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgY2IsICdmdW5jdGlvbicsICduYW5vc2NoZWR1bGVyLnB1c2g6IGNiIHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcblxuICB0aGlzLnF1ZXVlLnB1c2goY2IpXG4gIHRoaXMuc2NoZWR1bGUoKVxufVxuXG5OYW5vU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuc2NoZWR1bGVkKSByZXR1cm5cblxuICB0aGlzLnNjaGVkdWxlZCA9IHRydWVcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHRoaXMubWV0aG9kKGZ1bmN0aW9uIChpZGxlRGVhZGxpbmUpIHtcbiAgICB2YXIgY2JcbiAgICB3aGlsZSAoc2VsZi5xdWV1ZS5sZW5ndGggJiYgaWRsZURlYWRsaW5lLnRpbWVSZW1haW5pbmcoKSA+IDApIHtcbiAgICAgIGNiID0gc2VsZi5xdWV1ZS5zaGlmdCgpXG4gICAgICBjYihpZGxlRGVhZGxpbmUpXG4gICAgfVxuICAgIHNlbGYuc2NoZWR1bGVkID0gZmFsc2VcbiAgICBpZiAoc2VsZi5xdWV1ZS5sZW5ndGgpIHNlbGYuc2NoZWR1bGUoKVxuICB9KVxufVxuXG5OYW5vU2NoZWR1bGVyLnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKGNiKSB7XG4gIHNldFRpbWVvdXQoY2IsIDAsIHtcbiAgICB0aW1lUmVtYWluaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTY2hlZHVsZXJcbiIsInZhciBzY2hlZHVsZXIgPSByZXF1aXJlKCduYW5vc2NoZWR1bGVyJykoKVxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbnZhciBwZXJmXG5uYW5vdGltaW5nLmRpc2FibGVkID0gdHJ1ZVxudHJ5IHtcbiAgcGVyZiA9IHdpbmRvdy5wZXJmb3JtYW5jZVxuICBuYW5vdGltaW5nLmRpc2FibGVkID0gd2luZG93LmxvY2FsU3RvcmFnZS5ESVNBQkxFX05BTk9USU1JTkcgPT09ICd0cnVlJyB8fCAhcGVyZi5tYXJrXG59IGNhdGNoIChlKSB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBuYW5vdGltaW5nXG5cbmZ1bmN0aW9uIG5hbm90aW1pbmcgKG5hbWUpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBuYW1lLCAnc3RyaW5nJywgJ25hbm90aW1pbmc6IG5hbWUgc2hvdWxkIGJlIHR5cGUgc3RyaW5nJylcblxuICBpZiAobmFub3RpbWluZy5kaXNhYmxlZCkgcmV0dXJuIG5vb3BcblxuICB2YXIgdXVpZCA9IChwZXJmLm5vdygpICogMTAwMDApLnRvRml4ZWQoKSAlIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG4gIHZhciBzdGFydE5hbWUgPSAnc3RhcnQtJyArIHV1aWQgKyAnLScgKyBuYW1lXG4gIHBlcmYubWFyayhzdGFydE5hbWUpXG5cbiAgZnVuY3Rpb24gZW5kIChjYikge1xuICAgIHZhciBlbmROYW1lID0gJ2VuZC0nICsgdXVpZCArICctJyArIG5hbWVcbiAgICBwZXJmLm1hcmsoZW5kTmFtZSlcblxuICAgIHNjaGVkdWxlci5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBlcnIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbWVhc3VyZU5hbWUgPSBuYW1lICsgJyBbJyArIHV1aWQgKyAnXSdcbiAgICAgICAgcGVyZi5tZWFzdXJlKG1lYXN1cmVOYW1lLCBzdGFydE5hbWUsIGVuZE5hbWUpXG4gICAgICAgIHBlcmYuY2xlYXJNYXJrcyhzdGFydE5hbWUpXG4gICAgICAgIHBlcmYuY2xlYXJNYXJrcyhlbmROYW1lKVxuICAgICAgfSBjYXRjaCAoZSkgeyBlcnIgPSBlIH1cbiAgICAgIGlmIChjYikgY2IoZXJyLCBuYW1lKVxuICAgIH0pXG4gIH1cblxuICBlbmQudXVpZCA9IHV1aWRcbiAgcmV0dXJuIGVuZFxufVxuXG5mdW5jdGlvbiBub29wIChjYikge1xuICBpZiAoY2IpIHtcbiAgICBzY2hlZHVsZXIucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICBjYihuZXcgRXJyb3IoJ25hbm90aW1pbmc6IHBlcmZvcm1hbmNlIEFQSSB1bmF2YWlsYWJsZScpKVxuICAgIH0pXG4gIH1cbn1cbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCJ2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RDaGFuZ2VDYWxsc2l0ZVxuXG5mdW5jdGlvbiBvYmplY3RDaGFuZ2VDYWxsc2l0ZSAodGFyZ2V0LCBjYWxsYmFjaykge1xuICBhc3NlcnQuZXF1YWwodHlwZW9mIHRhcmdldCwgJ29iamVjdCcsICdvYmplY3QtY2hhbmdlLWNhbGxzaXRlOiB0YXJnZXQgc2hvdWxkIGJlIHR5cGUgb2JqZWN0JylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBjYWxsYmFjaywgJ2Z1bmN0aW9uJywgJ29iamVjdC1jaGFuZ2UtY2FsbHNpdGU6IGNhbGxiYWNrIHNob3VsZCBiZSB0eXBlIGZ1bmN0aW9uJylcblxuICByZXR1cm4gbmV3IFByb3h5KHRhcmdldCwge1xuICAgIHNldDogZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsdWUpIHtcbiAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKVxuICAgICAgdmFyIHRyYWNlID0gc3RyaXAoZXJyLnN0YWNrKVxuICAgICAgY2FsbGJhY2socHJvcCwgdmFsdWUsIHRyYWNlKVxuICAgICAgb2JqW3Byb3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwgcHJvcCkge1xuICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigpXG4gICAgICB2YXIgdHJhY2UgPSBzdHJpcChlcnIuc3RhY2spXG4gICAgICBjYWxsYmFjayhwcm9wLCB1bmRlZmluZWQsIHRyYWNlKVxuICAgICAgaWYgKHByb3AgaW4gdGFyZ2V0KSB7XG4gICAgICAgIGRlbGV0ZSB0YXJnZXRbcHJvcF1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gc3RyaXAgKHN0cikge1xuICB2YXIgYXJyID0gc3RyLnNwbGl0KCdcXG4nKVxuICBhcnIgPSBhcnIubGVuZ3RoID4gMiA/IGFyci5zbGljZSgyKSA6IGFyclxuICBhcnJbMF0gPSBhcnJbMF0ucmVwbGFjZSgvXiB7NH1hdCAvLCAnJylcbiAgcmV0dXJuICdcXG4nICsgYXJyLmpvaW4oJ1xcbicpXG59XG4iLCJ2YXIgaGFzTWFwID0gdHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9uJyAmJiBNYXAucHJvdG90eXBlO1xudmFyIG1hcFNpemVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiBoYXNNYXAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1hcC5wcm90b3R5cGUsICdzaXplJykgOiBudWxsO1xudmFyIG1hcFNpemUgPSBoYXNNYXAgJiYgbWFwU2l6ZURlc2NyaXB0b3IgJiYgdHlwZW9mIG1hcFNpemVEZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyA/IG1hcFNpemVEZXNjcmlwdG9yLmdldCA6IG51bGw7XG52YXIgbWFwRm9yRWFjaCA9IGhhc01hcCAmJiBNYXAucHJvdG90eXBlLmZvckVhY2g7XG52YXIgaGFzU2V0ID0gdHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9uJyAmJiBTZXQucHJvdG90eXBlO1xudmFyIHNldFNpemVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiBoYXNTZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFNldC5wcm90b3R5cGUsICdzaXplJykgOiBudWxsO1xudmFyIHNldFNpemUgPSBoYXNTZXQgJiYgc2V0U2l6ZURlc2NyaXB0b3IgJiYgdHlwZW9mIHNldFNpemVEZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFNpemVEZXNjcmlwdG9yLmdldCA6IG51bGw7XG52YXIgc2V0Rm9yRWFjaCA9IGhhc1NldCAmJiBTZXQucHJvdG90eXBlLmZvckVhY2g7XG52YXIgaGFzV2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nICYmIFdlYWtNYXAucHJvdG90eXBlO1xudmFyIHdlYWtNYXBIYXMgPSBoYXNXZWFrTWFwID8gV2Vha01hcC5wcm90b3R5cGUuaGFzIDogbnVsbDtcbnZhciBoYXNXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgJiYgV2Vha1NldC5wcm90b3R5cGU7XG52YXIgd2Vha1NldEhhcyA9IGhhc1dlYWtTZXQgPyBXZWFrU2V0LnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtSZWYgPSB0eXBlb2YgV2Vha1JlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrUmVmLnByb3RvdHlwZTtcbnZhciB3ZWFrUmVmRGVyZWYgPSBoYXNXZWFrUmVmID8gV2Vha1JlZi5wcm90b3R5cGUuZGVyZWYgOiBudWxsO1xudmFyIGJvb2xlYW5WYWx1ZU9mID0gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZjtcbnZhciBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciAkbWF0Y2ggPSBTdHJpbmcucHJvdG90eXBlLm1hdGNoO1xudmFyICRzbGljZSA9IFN0cmluZy5wcm90b3R5cGUuc2xpY2U7XG52YXIgJHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgJHRvVXBwZXJDYXNlID0gU3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZTtcbnZhciAkdG9Mb3dlckNhc2UgPSBTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlO1xudmFyICR0ZXN0ID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0O1xudmFyICRjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyICRqb2luID0gQXJyYXkucHJvdG90eXBlLmpvaW47XG52YXIgJGFyclNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgYmlnSW50VmFsdWVPZiA9IHR5cGVvZiBCaWdJbnQgPT09ICdmdW5jdGlvbicgPyBCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YgOiBudWxsO1xudmFyIGdPUFMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIHN5bVRvU3RyaW5nID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJyA/IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgOiBudWxsO1xudmFyIGhhc1NoYW1tZWRTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnb2JqZWN0Jztcbi8vIGllLCBgaGFzLXRvc3RyaW5ndGFnL3NoYW1zXG52YXIgdG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZyAmJiAodHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gaGFzU2hhbW1lZFN5bWJvbHMgPyAnb2JqZWN0JyA6ICdzeW1ib2wnKVxuICAgID8gU3ltYm9sLnRvU3RyaW5nVGFnXG4gICAgOiBudWxsO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbmZ1bmN0aW9uIGFkZE51bWVyaWNTZXBhcmF0b3IobnVtLCBzdHIpIHtcbiAgICBpZiAoXG4gICAgICAgIG51bSA9PT0gSW5maW5pdHlcbiAgICAgICAgfHwgbnVtID09PSAtSW5maW5pdHlcbiAgICAgICAgfHwgbnVtICE9PSBudW1cbiAgICAgICAgfHwgKG51bSAmJiBudW0gPiAtMTAwMCAmJiBudW0gPCAxMDAwKVxuICAgICAgICB8fCAkdGVzdC5jYWxsKC9lLywgc3RyKVxuICAgICkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICB2YXIgc2VwUmVnZXggPSAvWzAtOV0oPz0oPzpbMC05XXszfSkrKD8hWzAtOV0pKS9nO1xuICAgIGlmICh0eXBlb2YgbnVtID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YXIgaW50ID0gbnVtIDwgMCA/IC0kZmxvb3IoLW51bSkgOiAkZmxvb3IobnVtKTsgLy8gdHJ1bmMobnVtKVxuICAgICAgICBpZiAoaW50ICE9PSBudW0pIHtcbiAgICAgICAgICAgIHZhciBpbnRTdHIgPSBTdHJpbmcoaW50KTtcbiAgICAgICAgICAgIHZhciBkZWMgPSAkc2xpY2UuY2FsbChzdHIsIGludFN0ci5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKGludFN0ciwgc2VwUmVnZXgsICckJl8nKSArICcuJyArICRyZXBsYWNlLmNhbGwoJHJlcGxhY2UuY2FsbChkZWMsIC8oWzAtOV17M30pL2csICckJl8nKSwgL18kLywgJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHN0ciwgc2VwUmVnZXgsICckJl8nKTtcbn1cblxudmFyIHV0aWxJbnNwZWN0ID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKTtcbnZhciBpbnNwZWN0Q3VzdG9tID0gdXRpbEluc3BlY3QuY3VzdG9tO1xudmFyIGluc3BlY3RTeW1ib2wgPSBpc1N5bWJvbChpbnNwZWN0Q3VzdG9tKSA/IGluc3BlY3RDdXN0b20gOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJpbmRlbnRcIiBtdXN0IGJlIFwiXFxcXHRcIiwgYW4gaW50ZWdlciA+IDAsIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICBpZiAoaGFzKG9wdHMsICdudW1lcmljU2VwYXJhdG9yJykgJiYgdHlwZW9mIG9wdHMubnVtZXJpY1NlcGFyYXRvciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcIm51bWVyaWNTZXBhcmF0b3JcIiwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYHRydWVgIG9yIGBmYWxzZWAnKTtcbiAgICB9XG4gICAgdmFyIG51bWVyaWNTZXBhcmF0b3IgPSBvcHRzLm51bWVyaWNTZXBhcmF0b3I7XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3RyID0gU3RyaW5nKG9iaik7XG4gICAgICAgIHJldHVybiBudW1lcmljU2VwYXJhdG9yID8gYWRkTnVtZXJpY1NlcGFyYXRvcihvYmosIHN0cikgOiBzdHI7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICB2YXIgYmlnSW50U3RyID0gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgICAgIHJldHVybiBudW1lcmljU2VwYXJhdG9yID8gYWRkTnVtZXJpY1NlcGFyYXRvcihvYmosIGJpZ0ludFN0cikgOiBiaWdJbnRTdHI7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9ICRhcnJTbGljZS5jYWxsKHNlZW4pO1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub0luZGVudCkge1xuICAgICAgICAgICAgdmFyIG5ld09wdHMgPSB7XG4gICAgICAgICAgICAgICAgZGVwdGg6IG9wdHMuZGVwdGhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykpIHtcbiAgICAgICAgICAgICAgICBuZXdPcHRzLnF1b3RlU3R5bGUgPSBvcHRzLnF1b3RlU3R5bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zcGVjdF8odmFsdWUsIG5ld09wdHMsIGRlcHRoICsgMSwgc2Vlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBvcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nICYmICFpc1JlZ0V4cChvYmopKSB7IC8vIGluIG9sZGVyIGVuZ2luZXMsIHJlZ2V4ZXMgYXJlIGNhbGxhYmxlXG4gICAgICAgIHZhciBuYW1lID0gbmFtZU9mKG9iaik7XG4gICAgICAgIHZhciBrZXlzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICByZXR1cm4gJ1tGdW5jdGlvbicgKyAobmFtZSA/ICc6ICcgKyBuYW1lIDogJyAoYW5vbnltb3VzKScpICsgJ10nICsgKGtleXMubGVuZ3RoID4gMCA/ICcgeyAnICsgJGpvaW4uY2FsbChrZXlzLCAnLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/ICRyZXBsYWNlLmNhbGwoU3RyaW5nKG9iaiksIC9eKFN5bWJvbFxcKC4qXFwpKV9bXildKiQvLCAnJDEnKSA6IHN5bVRvU3RyaW5nLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFoYXNTaGFtbWVkU3ltYm9scyA/IG1hcmtCb3hlZChzeW1TdHJpbmcpIDogc3ltU3RyaW5nO1xuICAgIH1cbiAgICBpZiAoaXNFbGVtZW50KG9iaikpIHtcbiAgICAgICAgdmFyIHMgPSAnPCcgKyAkdG9Mb3dlckNhc2UuY2FsbChTdHJpbmcob2JqLm5vZGVOYW1lKSk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgJHRvTG93ZXJDYXNlLmNhbGwoU3RyaW5nKG9iai5ub2RlTmFtZSkpICsgJz4nO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICBpZiAob2JqLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1tdJzsgfVxuICAgICAgICB2YXIgeHMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIGlmIChpbmRlbnQgJiYgIXNpbmdsZUxpbmVWYWx1ZXMoeHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1snICsgaW5kZW50ZWRKb2luKHhzLCBpbmRlbnQpICsgJ10nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnWyAnICsgJGpvaW4uY2FsbCh4cywgJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKCEoJ2NhdXNlJyBpbiBFcnJvci5wcm90b3R5cGUpICYmICdjYXVzZScgaW4gb2JqICYmICFpc0VudW1lcmFibGUuY2FsbChvYmosICdjYXVzZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3sgWycgKyBTdHJpbmcob2JqKSArICddICcgKyAkam9pbi5jYWxsKCRjb25jYXQuY2FsbCgnW2NhdXNlXTogJyArIGluc3BlY3Qob2JqLmNhdXNlKSwgcGFydHMpLCAnLCAnKSArICcgfSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgJGpvaW4uY2FsbChwYXJ0cywgJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgY3VzdG9tSW5zcGVjdCkge1xuICAgICAgICBpZiAoaW5zcGVjdFN5bWJvbCAmJiB0eXBlb2Ygb2JqW2luc3BlY3RTeW1ib2xdID09PSAnZnVuY3Rpb24nICYmIHV0aWxJbnNwZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbEluc3BlY3Qob2JqLCB7IGRlcHRoOiBtYXhEZXB0aCAtIGRlcHRoIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGN1c3RvbUluc3BlY3QgIT09ICdzeW1ib2wnICYmIHR5cGVvZiBvYmouaW5zcGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5pbnNwZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzTWFwKG9iaikpIHtcbiAgICAgICAgdmFyIG1hcFBhcnRzID0gW107XG4gICAgICAgIGlmIChtYXBGb3JFYWNoKSB7XG4gICAgICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIG1hcFBhcnRzLnB1c2goaW5zcGVjdChrZXksIG9iaiwgdHJ1ZSkgKyAnID0+ICcgKyBpbnNwZWN0KHZhbHVlLCBvYmopKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uT2YoJ01hcCcsIG1hcFNpemUuY2FsbChvYmopLCBtYXBQYXJ0cywgaW5kZW50KTtcbiAgICB9XG4gICAgaWYgKGlzU2V0KG9iaikpIHtcbiAgICAgICAgdmFyIHNldFBhcnRzID0gW107XG4gICAgICAgIGlmIChzZXRGb3JFYWNoKSB7XG4gICAgICAgICAgICBzZXRGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyAkc2xpY2UuY2FsbCh0b1N0cihvYmopLCA4LCAtMSkgOiBwcm90b1RhZyA/ICdPYmplY3QnIDogJyc7XG4gICAgICAgIHZhciBjb25zdHJ1Y3RvclRhZyA9IGlzUGxhaW5PYmplY3QgfHwgdHlwZW9mIG9iai5jb25zdHJ1Y3RvciAhPT0gJ2Z1bmN0aW9uJyA/ICcnIDogb2JqLmNvbnN0cnVjdG9yLm5hbWUgPyBvYmouY29uc3RydWN0b3IubmFtZSArICcgJyA6ICcnO1xuICAgICAgICB2YXIgdGFnID0gY29uc3RydWN0b3JUYWcgKyAoc3RyaW5nVGFnIHx8IHByb3RvVGFnID8gJ1snICsgJGpvaW4uY2FsbCgkY29uY2F0LmNhbGwoW10sIHN0cmluZ1RhZyB8fCBbXSwgcHJvdG9UYWcgfHwgW10pLCAnOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArICRqb2luLmNhbGwoeXMsICcsICcpICsgJyB9JztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhvYmopO1xufTtcblxuZnVuY3Rpb24gd3JhcFF1b3RlcyhzLCBkZWZhdWx0U3R5bGUsIG9wdHMpIHtcbiAgICB2YXIgcXVvdGVDaGFyID0gKG9wdHMucXVvdGVTdHlsZSB8fCBkZWZhdWx0U3R5bGUpID09PSAnZG91YmxlJyA/ICdcIicgOiBcIidcIjtcbiAgICByZXR1cm4gcXVvdGVDaGFyICsgcyArIHF1b3RlQ2hhcjtcbn1cblxuZnVuY3Rpb24gcXVvdGUocykge1xuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKFN0cmluZyhzKSwgL1wiL2csICcmcXVvdDsnKTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheShvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0RhdGUob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBEYXRlXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc1JlZ0V4cChvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNFcnJvcihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEVycm9yXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc1N0cmluZyhvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFN0cmluZ10nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNOdW1iZXIob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBOdW1iZXJdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzQm9vbGVhbihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cblxuLy8gU3ltYm9sIGFuZCBCaWdJbnQgZG8gaGF2ZSBTeW1ib2wudG9TdHJpbmdUYWcgYnkgc3BlYywgc28gdGhhdCBjYW4ndCBiZSB1c2VkIHRvIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXNcbmZ1bmN0aW9uIGlzU3ltYm9sKG9iaikge1xuICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scykge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiBpbnN0YW5jZW9mIFN5bWJvbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCAhc3ltVG9TdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBzeW1Ub1N0cmluZy5jYWxsKG9iaik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0JpZ0ludChvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCAhYmlnSW50VmFsdWVPZikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGJpZ0ludFZhbHVlT2YuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgfHwgZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5IGluIHRoaXM7IH07XG5mdW5jdGlvbiBoYXMob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBrZXkpO1xufVxuXG5mdW5jdGlvbiB0b1N0cihvYmopIHtcbiAgICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbChvYmopO1xufVxuXG5mdW5jdGlvbiBuYW1lT2YoZikge1xuICAgIGlmIChmLm5hbWUpIHsgcmV0dXJuIGYubmFtZTsgfVxuICAgIHZhciBtID0gJG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKCRzbGljZS5jYWxsKHN0ciwgMCwgb3B0cy5tYXhTdHJpbmdMZW5ndGgpLCBvcHRzKSArIHRyYWlsZXI7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICAgdmFyIHMgPSAkcmVwbGFjZS5jYWxsKCRyZXBsYWNlLmNhbGwoc3RyLCAvKFsnXFxcXF0pL2csICdcXFxcJDEnKSwgL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyAkdG9VcHBlckNhc2UuY2FsbChuLnRvU3RyaW5nKDE2KSk7XG59XG5cbmZ1bmN0aW9uIG1hcmtCb3hlZChzdHIpIHtcbiAgICByZXR1cm4gJ09iamVjdCgnICsgc3RyICsgJyknO1xufVxuXG5mdW5jdGlvbiB3ZWFrQ29sbGVjdGlvbk9mKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSArICcgeyA/IH0nO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2YodHlwZSwgc2l6ZSwgZW50cmllcywgaW5kZW50KSB7XG4gICAgdmFyIGpvaW5lZEVudHJpZXMgPSBpbmRlbnQgPyBpbmRlbnRlZEpvaW4oZW50cmllcywgaW5kZW50KSA6ICRqb2luLmNhbGwoZW50cmllcywgJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICRqb2luLmNhbGwoQXJyYXkob3B0cy5pbmRlbnQgKyAxKSwgJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZTogYmFzZUluZGVudCxcbiAgICAgICAgcHJldjogJGpvaW4uY2FsbChBcnJheShkZXB0aCArIDEpLCBiYXNlSW5kZW50KVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGluZGVudGVkSm9pbih4cywgaW5kZW50KSB7XG4gICAgaWYgKHhzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cbiAgICB2YXIgbGluZUpvaW5lciA9ICdcXG4nICsgaW5kZW50LnByZXYgKyBpbmRlbnQuYmFzZTtcbiAgICByZXR1cm4gbGluZUpvaW5lciArICRqb2luLmNhbGwoeHMsICcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCR0ZXN0LmNhbGwoL1teXFx3JF0vLCBrZXkpKSB7XG4gICAgICAgICAgICB4cy5wdXNoKGluc3BlY3Qoa2V5LCBvYmopICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHMucHVzaChrZXkgKyAnOiAnICsgaW5zcGVjdChvYmpba2V5XSwgb2JqKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ltcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltc1tqXSkpIHtcbiAgICAgICAgICAgICAgICB4cy5wdXNoKCdbJyArIGluc3BlY3Qoc3ltc1tqXSkgKyAnXTogJyArIGluc3BlY3Qob2JqW3N5bXNbal1dLCBvYmopKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geHM7XG59XG4iLCIvKiBnbG9iYWwgTXV0YXRpb25PYnNlcnZlciAqL1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnZ2xvYmFsL2RvY3VtZW50JylcbnZhciB3aW5kb3cgPSByZXF1aXJlKCdnbG9iYWwvd2luZG93JylcbnZhciB3YXRjaCA9IE9iamVjdC5jcmVhdGUobnVsbClcbnZhciBLRVlfSUQgPSAnb25sb2FkaWQnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMilcbnZhciBLRVlfQVRUUiA9ICdkYXRhLScgKyBLRVlfSURcbnZhciBJTkRFWCA9IDBcblxuaWYgKHdpbmRvdyAmJiB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcikge1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHdhdGNoKS5sZW5ndGggPCAxKSByZXR1cm5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG11dGF0aW9uc1tpXS5hdHRyaWJ1dGVOYW1lID09PSBLRVlfQVRUUikge1xuICAgICAgICBlYWNoQXR0cihtdXRhdGlvbnNbaV0sIHR1cm5vbiwgdHVybm9mZilcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGVhY2hNdXRhdGlvbihtdXRhdGlvbnNbaV0ucmVtb3ZlZE5vZGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsKSB7XG4gICAgICAgIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGVsKSkgdHVybm9mZihpbmRleCwgZWwpXG4gICAgICB9KVxuICAgICAgZWFjaE11dGF0aW9uKG11dGF0aW9uc1tpXS5hZGRlZE5vZGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsKSB7XG4gICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoZWwpKSB0dXJub24oaW5kZXgsIGVsKVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHtcbiAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgc3VidHJlZTogdHJ1ZSxcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlLFxuICAgIGF0dHJpYnV0ZUZpbHRlcjogW0tFWV9BVFRSXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9ubG9hZCAoZWwsIG9uLCBvZmYsIGNhbGxlcikge1xuICBvbiA9IG9uIHx8IGZ1bmN0aW9uICgpIHt9XG4gIG9mZiA9IG9mZiB8fCBmdW5jdGlvbiAoKSB7fVxuICBlbC5zZXRBdHRyaWJ1dGUoS0VZX0FUVFIsICdvJyArIElOREVYKVxuICB3YXRjaFsnbycgKyBJTkRFWF0gPSBbb24sIG9mZiwgMCwgY2FsbGVyIHx8IG9ubG9hZC5jYWxsZXJdXG4gIElOREVYICs9IDFcbiAgcmV0dXJuIGVsXG59XG5cbm1vZHVsZS5leHBvcnRzLktFWV9BVFRSID0gS0VZX0FUVFJcbm1vZHVsZS5leHBvcnRzLktFWV9JRCA9IEtFWV9JRFxuXG5mdW5jdGlvbiB0dXJub24gKGluZGV4LCBlbCkge1xuICBpZiAod2F0Y2hbaW5kZXhdWzBdICYmIHdhdGNoW2luZGV4XVsyXSA9PT0gMCkge1xuICAgIHdhdGNoW2luZGV4XVswXShlbClcbiAgICB3YXRjaFtpbmRleF1bMl0gPSAxXG4gIH1cbn1cblxuZnVuY3Rpb24gdHVybm9mZiAoaW5kZXgsIGVsKSB7XG4gIGlmICh3YXRjaFtpbmRleF1bMV0gJiYgd2F0Y2hbaW5kZXhdWzJdID09PSAxKSB7XG4gICAgd2F0Y2hbaW5kZXhdWzFdKGVsKVxuICAgIHdhdGNoW2luZGV4XVsyXSA9IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBlYWNoQXR0ciAobXV0YXRpb24sIG9uLCBvZmYpIHtcbiAgdmFyIG5ld1ZhbHVlID0gbXV0YXRpb24udGFyZ2V0LmdldEF0dHJpYnV0ZShLRVlfQVRUUilcbiAgaWYgKHNhbWVPcmlnaW4obXV0YXRpb24ub2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgIHdhdGNoW25ld1ZhbHVlXSA9IHdhdGNoW211dGF0aW9uLm9sZFZhbHVlXVxuICAgIHJldHVyblxuICB9XG4gIGlmICh3YXRjaFttdXRhdGlvbi5vbGRWYWx1ZV0pIHtcbiAgICBvZmYobXV0YXRpb24ub2xkVmFsdWUsIG11dGF0aW9uLnRhcmdldClcbiAgfVxuICBpZiAod2F0Y2hbbmV3VmFsdWVdKSB7XG4gICAgb24obmV3VmFsdWUsIG11dGF0aW9uLnRhcmdldClcbiAgfVxufVxuXG5mdW5jdGlvbiBzYW1lT3JpZ2luIChvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgaWYgKCFvbGRWYWx1ZSB8fCAhbmV3VmFsdWUpIHJldHVybiBmYWxzZVxuICByZXR1cm4gd2F0Y2hbb2xkVmFsdWVdWzNdID09PSB3YXRjaFtuZXdWYWx1ZV1bM11cbn1cblxuZnVuY3Rpb24gZWFjaE11dGF0aW9uIChub2RlcywgZm4pIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh3YXRjaClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChub2Rlc1tpXSAmJiBub2Rlc1tpXS5nZXRBdHRyaWJ1dGUgJiYgbm9kZXNbaV0uZ2V0QXR0cmlidXRlKEtFWV9BVFRSKSkge1xuICAgICAgdmFyIG9ubG9hZGlkID0gbm9kZXNbaV0uZ2V0QXR0cmlidXRlKEtFWV9BVFRSKVxuICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChvbmxvYWRpZCA9PT0gaykge1xuICAgICAgICAgIGZuKGssIG5vZGVzW2ldKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAobm9kZXNbaV0gJiYgbm9kZXNbaV0uY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBlYWNoTXV0YXRpb24obm9kZXNbaV0uY2hpbGROb2RlcywgZm4pXG4gICAgfVxuICB9XG59XG4iLCJ2YXIgc2NoZWR1bGVyID0gcmVxdWlyZSgnbmFub3NjaGVkdWxlcicpKClcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG52YXIgZW50cnlUeXBlcyA9IFtcbiAgJ2ZyYW1lJyxcbiAgJ21lYXN1cmUnLFxuICAnbmF2aWdhdGlvbicsXG4gICdyZXNvdXJjZScsXG4gICdsb25ndGFzaydcbl1cblxubW9kdWxlLmV4cG9ydHMgPSBvblBlcmZvcm1hbmNlXG5cbmZ1bmN0aW9uIG9uUGVyZm9ybWFuY2UgKGNiKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgY2IsICdmdW5jdGlvbicsICdvbi1wZXJmb3JtYW5jZTogY2Igc2hvdWxkIGJlIHR5cGUgZnVuY3Rpb24nKVxuXG4gIHZhciBQZXJmb3JtYW5jZU9ic2VydmVyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlBlcmZvcm1hbmNlT2JzZXJ2ZXJcbiAgaWYgKCFQZXJmb3JtYW5jZU9ic2VydmVyKSByZXR1cm5cblxuICAvLyBFbmFibGUgc2luZ2xldG9uLlxuICBpZiAod2luZG93Ll9vbnBlcmZvcm1hbmNlKSB7XG4gICAgd2luZG93Ll9vbnBlcmZvcm1hbmNlLnB1c2goY2IpXG4gICAgcmV0dXJuIHN0b3BcbiAgfVxuXG4gIHdpbmRvdy5fb25wZXJmb3JtYW5jZSA9IFtjYl1cbiAgdmFyIG9ic2VydmVyID0gbmV3IFBlcmZvcm1hbmNlT2JzZXJ2ZXIocGFyc2VFbnRyaWVzKVxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBwYXJzZUVudHJpZXMod2luZG93LnBlcmZvcm1hbmNlKVxuICAgIG9ic2VydmVyLm9ic2VydmUoeyBlbnRyeVR5cGVzOiBlbnRyeVR5cGVzIH0pXG4gIH0sIDApXG5cbiAgcmV0dXJuIHN0b3BcblxuICBmdW5jdGlvbiBzdG9wICgpIHtcbiAgICB3aW5kb3cuX29ucGVyZm9ybWFuY2Uuc3BsaWNlKHdpbmRvdy5fb25wZXJmb3JtYW5jZS5pbmRleE9mKGNiKSwgMSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlRW50cmllcyAobGlzdCkge1xuICAgIGxpc3QuZ2V0RW50cmllcygpLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICBzY2hlZHVsZXIucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNsZWFyKGVudHJ5KVxuICAgICAgICB3aW5kb3cuX29ucGVyZm9ybWFuY2UuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICBjYihlbnRyeSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8vIE5hdmlnYXRpb24sIGxvbmd0YXNrIGFuZCBmcmFtZSBkb24ndCBoYXZlIGEgY2xlYXIgbWV0aG9kICh5ZXQpXG4gIC8vIFJlc291cmNlIHRpbWluZ3MgY2FuIG9ubHkgYmUgY2xlYXJlZCBpbiBidWxrXG4gIC8vIHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BlcmZvcm1hbmNlL2NsZWFyTWVhc3VyZXNcbiAgZnVuY3Rpb24gY2xlYXIgKGVudHJ5KSB7XG4gICAgdmFyIHR5cGUgPSBlbnRyeS5lbnRyeVR5cGVcbiAgICBpZiAodHlwZSA9PT0gJ21lYXN1cmUnKSB3aW5kb3cucGVyZm9ybWFuY2UuY2xlYXJNZWFzdXJlcyhlbnRyeS5uYW1lKVxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICdyZXNvdXJjZScpIHdpbmRvdy5wZXJmb3JtYW5jZS5jbGVhclJlc291cmNlVGltaW5ncygpXG4gIH1cbn1cbiIsIi8qKlxuICogQ29tcGlsZXMgYSBxdWVyeXN0cmluZ1xuICogUmV0dXJucyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBzdHIgPSAnJztcblxuICBmb3IgKHZhciBpIGluIG9iaikge1xuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgIGlmIChzdHIubGVuZ3RoKSBzdHIgKz0gJyYnO1xuICAgICAgc3RyICs9IGVuY29kZVVSSUNvbXBvbmVudChpKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChvYmpbaV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFBhcnNlcyBhIHNpbXBsZSBxdWVyeXN0cmluZyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBxc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbihxcyl7XG4gIHZhciBxcnkgPSB7fTtcbiAgdmFyIHBhaXJzID0gcXMuc3BsaXQoJyYnKTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYWlycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgcGFpciA9IHBhaXJzW2ldLnNwbGl0KCc9Jyk7XG4gICAgcXJ5W2RlY29kZVVSSUNvbXBvbmVudChwYWlyWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQocGFpclsxXSk7XG4gIH1cbiAgcmV0dXJuIHFyeTtcbn07XG4iLCIvKipcbiAqIFBhcnNlcyBhbiBVUklcbiAqXG4gKiBAYXV0aG9yIFN0ZXZlbiBMZXZpdGhhbiA8c3RldmVubGV2aXRoYW4uY29tPiAoTUlUIGxpY2Vuc2UpXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG52YXIgcmUgPSAvXig/Oig/IVteOkBdKzpbXjpAXFwvXSpAKShodHRwfGh0dHBzfHdzfHdzcyk6XFwvXFwvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPygoPzpbYS1mMC05XXswLDR9Oil7Miw3fVthLWYwLTldezAsNH18W146XFwvPyNdKikoPzo6KFxcZCopKT8pKCgoXFwvKD86W14/I10oPyFbXj8jXFwvXSpcXC5bXj8jXFwvLl0rKD86Wz8jXXwkKSkpKlxcLz8pPyhbXj8jXFwvXSopKSg/OlxcPyhbXiNdKikpPyg/OiMoLiopKT8pLztcblxudmFyIHBhcnRzID0gW1xuICAgICdzb3VyY2UnLCAncHJvdG9jb2wnLCAnYXV0aG9yaXR5JywgJ3VzZXJJbmZvJywgJ3VzZXInLCAncGFzc3dvcmQnLCAnaG9zdCcsICdwb3J0JywgJ3JlbGF0aXZlJywgJ3BhdGgnLCAnZGlyZWN0b3J5JywgJ2ZpbGUnLCAncXVlcnknLCAnYW5jaG9yJ1xuXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZXVyaShzdHIpIHtcbiAgICB2YXIgc3JjID0gc3RyLFxuICAgICAgICBiID0gc3RyLmluZGV4T2YoJ1snKSxcbiAgICAgICAgZSA9IHN0ci5pbmRleE9mKCddJyk7XG5cbiAgICBpZiAoYiAhPSAtMSAmJiBlICE9IC0xKSB7XG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgYikgKyBzdHIuc3Vic3RyaW5nKGIsIGUpLnJlcGxhY2UoLzovZywgJzsnKSArIHN0ci5zdWJzdHJpbmcoZSwgc3RyLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgdmFyIG0gPSByZS5leGVjKHN0ciB8fCAnJyksXG4gICAgICAgIHVyaSA9IHt9LFxuICAgICAgICBpID0gMTQ7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHVyaVtwYXJ0c1tpXV0gPSBtW2ldIHx8ICcnO1xuICAgIH1cblxuICAgIGlmIChiICE9IC0xICYmIGUgIT0gLTEpIHtcbiAgICAgICAgdXJpLnNvdXJjZSA9IHNyYztcbiAgICAgICAgdXJpLmhvc3QgPSB1cmkuaG9zdC5zdWJzdHJpbmcoMSwgdXJpLmhvc3QubGVuZ3RoIC0gMSkucmVwbGFjZSgvOy9nLCAnOicpO1xuICAgICAgICB1cmkuYXV0aG9yaXR5ID0gdXJpLmF1dGhvcml0eS5yZXBsYWNlKCdbJywgJycpLnJlcGxhY2UoJ10nLCAnJykucmVwbGFjZSgvOy9nLCAnOicpO1xuICAgICAgICB1cmkuaXB2NnVyaSA9IHRydWU7XG4gICAgfVxuXG4gICAgdXJpLnBhdGhOYW1lcyA9IHBhdGhOYW1lcyh1cmksIHVyaVsncGF0aCddKTtcbiAgICB1cmkucXVlcnlLZXkgPSBxdWVyeUtleSh1cmksIHVyaVsncXVlcnknXSk7XG5cbiAgICByZXR1cm4gdXJpO1xufTtcblxuZnVuY3Rpb24gcGF0aE5hbWVzKG9iaiwgcGF0aCkge1xuICAgIHZhciByZWd4ID0gL1xcL3syLDl9L2csXG4gICAgICAgIG5hbWVzID0gcGF0aC5yZXBsYWNlKHJlZ3gsIFwiL1wiKS5zcGxpdChcIi9cIik7XG5cbiAgICBpZiAocGF0aC5zdWJzdHIoMCwgMSkgPT0gJy8nIHx8IHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIG5hbWVzLnNwbGljZSgwLCAxKTtcbiAgICB9XG4gICAgaWYgKHBhdGguc3Vic3RyKHBhdGgubGVuZ3RoIC0gMSwgMSkgPT0gJy8nKSB7XG4gICAgICAgIG5hbWVzLnNwbGljZShuYW1lcy5sZW5ndGggLSAxLCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZXM7XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5S2V5KHVyaSwgcXVlcnkpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuXG4gICAgcXVlcnkucmVwbGFjZSgvKD86XnwmKShbXiY9XSopPT8oW14mXSopL2csIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7XG4gICAgICAgIGlmICgkMSkge1xuICAgICAgICAgICAgZGF0YVskMV0gPSAkMjtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHBsdWNrZXJcblxuZnVuY3Rpb24gcGx1Y2tlcihwYXRoLCBvYmplY3QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPj0gMlxuICAgID8gcGx1Y2socGF0aCkob2JqZWN0KVxuICAgIDogcGx1Y2socGF0aClcbn1cblxuZnVuY3Rpb24gcGx1Y2socGF0aCkge1xuICBwYXRoID0gdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnXG4gICAgPyBTdHJpbmcocGF0aCkudHJpbSgpLnNwbGl0KCcuJylcbiAgICA6IHBhdGhcblxuICBpZiAocGF0aC5sZW5ndGggPCAyKSB7XG4gICAgcGF0aCA9IHBhdGhbMF1cbiAgICByZXR1cm4gcGx1Y2tTaW5nbGVcbiAgfSBlbHNlIHtcbiAgICB2YXIgbCA9IHBhdGgubGVuZ3RoXG4gICAgcmV0dXJuIHBsdWNrUGF0aFxuICB9XG5cbiAgZnVuY3Rpb24gcGx1Y2tTaW5nbGUob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdFtwYXRoXVxuICB9XG5cbiAgZnVuY3Rpb24gcGx1Y2tQYXRoKG9iamVjdCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3VuZGVmaW5lZCcpIGJyZWFrXG5cbiAgICAgIG9iamVjdCA9IG9iamVjdFtwYXRoW2ldXVxuICAgIH1cblxuICAgIHJldHVybiBvYmplY3RcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBwcmV0dGllckJ5dGVzXG5cbmZ1bmN0aW9uIHByZXR0aWVyQnl0ZXMgKG51bSkge1xuICBpZiAodHlwZW9mIG51bSAhPT0gJ251bWJlcicgfHwgaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgbnVtYmVyLCBnb3QgJyArIHR5cGVvZiBudW0pXG4gIH1cblxuICB2YXIgbmVnID0gbnVtIDwgMFxuICB2YXIgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXVxuXG4gIGlmIChuZWcpIHtcbiAgICBudW0gPSAtbnVtXG4gIH1cblxuICBpZiAobnVtIDwgMSkge1xuICAgIHJldHVybiAobmVnID8gJy0nIDogJycpICsgbnVtICsgJyBCJ1xuICB9XG5cbiAgdmFyIGV4cG9uZW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcihNYXRoLmxvZyhudW0pIC8gTWF0aC5sb2coMTAwMCkpLCB1bml0cy5sZW5ndGggLSAxKVxuICBudW0gPSBOdW1iZXIobnVtIC8gTWF0aC5wb3coMTAwMCwgZXhwb25lbnQpKVxuICB2YXIgdW5pdCA9IHVuaXRzW2V4cG9uZW50XVxuXG4gIGlmIChudW0gPj0gMTAgfHwgbnVtICUgMSA9PT0gMCkge1xuICAgIC8vIERvIG5vdCBzaG93IGRlY2ltYWxzIHdoZW4gdGhlIG51bWJlciBpcyB0d28tZGlnaXQsIG9yIGlmIHRoZSBudW1iZXIgaGFzIG5vXG4gICAgLy8gZGVjaW1hbCBjb21wb25lbnQuXG4gICAgcmV0dXJuIChuZWcgPyAnLScgOiAnJykgKyBudW0udG9GaXhlZCgwKSArICcgJyArIHVuaXRcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKG5lZyA/ICctJyA6ICcnKSArIG51bS50b0ZpeGVkKDEpICsgJyAnICsgdW5pdFxuICB9XG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcbnZhciBwZXJjZW50VHdlbnRpZXMgPSAvJTIwL2c7XG5cbnZhciBGb3JtYXQgPSB7XG4gICAgUkZDMTczODogJ1JGQzE3MzgnLFxuICAgIFJGQzM5ODY6ICdSRkMzOTg2J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgJ2RlZmF1bHQnOiBGb3JtYXQuUkZDMzk4NixcbiAgICBmb3JtYXR0ZXJzOiB7XG4gICAgICAgIFJGQzE3Mzg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UuY2FsbCh2YWx1ZSwgcGVyY2VudFR3ZW50aWVzLCAnKycpO1xuICAgICAgICB9LFxuICAgICAgICBSRkMzOTg2OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBSRkMxNzM4OiBGb3JtYXQuUkZDMTczOCxcbiAgICBSRkMzOTg2OiBGb3JtYXQuUkZDMzk4NlxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG52YXIgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhbGxvd1NwYXJzZTogZmFsc2UsXG4gICAgYXJyYXlMaW1pdDogMjAsXG4gICAgY2hhcnNldDogJ3V0Zi04JyxcbiAgICBjaGFyc2V0U2VudGluZWw6IGZhbHNlLFxuICAgIGNvbW1hOiBmYWxzZSxcbiAgICBkZWNvZGVyOiB1dGlscy5kZWNvZGUsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZGVwdGg6IDUsXG4gICAgaWdub3JlUXVlcnlQcmVmaXg6IGZhbHNlLFxuICAgIGludGVycHJldE51bWVyaWNFbnRpdGllczogZmFsc2UsXG4gICAgcGFyYW1ldGVyTGltaXQ6IDEwMDAsXG4gICAgcGFyc2VBcnJheXM6IHRydWUsXG4gICAgcGxhaW5PYmplY3RzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvJiMoXFxkKyk7L2csIGZ1bmN0aW9uICgkMCwgbnVtYmVyU3RyKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG51bWJlclN0ciwgMTApKTtcbiAgICB9KTtcbn07XG5cbnZhciBwYXJzZUFycmF5VmFsdWUgPSBmdW5jdGlvbiAodmFsLCBvcHRpb25zKSB7XG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmNvbW1hICYmIHZhbC5pbmRleE9mKCcsJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdmFsLnNwbGl0KCcsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIFRoaXMgaXMgd2hhdCBicm93c2VycyB3aWxsIHN1Ym1pdCB3aGVuIHRoZSDinJMgY2hhcmFjdGVyIG9jY3VycyBpbiBhblxuLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIGJvZHkgYW5kIHRoZSBlbmNvZGluZyBvZiB0aGUgcGFnZSBjb250YWluaW5nXG4vLyB0aGUgZm9ybSBpcyBpc28tODg1OS0xLCBvciB3aGVuIHRoZSBzdWJtaXR0ZWQgZm9ybSBoYXMgYW4gYWNjZXB0LWNoYXJzZXRcbi8vIGF0dHJpYnV0ZSBvZiBpc28tODg1OS0xLiBQcmVzdW1hYmx5IGFsc28gd2l0aCBvdGhlciBjaGFyc2V0cyB0aGF0IGRvIG5vdCBjb250YWluXG4vLyB0aGUg4pyTIGNoYXJhY3Rlciwgc3VjaCBhcyB1cy1hc2NpaS5cbnZhciBpc29TZW50aW5lbCA9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpXG5cbi8vIFRoZXNlIGFyZSB0aGUgcGVyY2VudC1lbmNvZGVkIHV0Zi04IG9jdGV0cyByZXByZXNlbnRpbmcgYSBjaGVja21hcmssIGluZGljYXRpbmcgdGhhdCB0aGUgcmVxdWVzdCBhY3R1YWxseSBpcyB1dGYtOCBlbmNvZGVkLlxudmFyIGNoYXJzZXRTZW50aW5lbCA9ICd1dGY4PSVFMiU5QyU5Myc7IC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcblxudmFyIHBhcnNlVmFsdWVzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ1ZhbHVlcyhzdHIsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0geyBfX3Byb3RvX186IG51bGwgfTtcblxuICAgIHZhciBjbGVhblN0ciA9IG9wdGlvbnMuaWdub3JlUXVlcnlQcmVmaXggPyBzdHIucmVwbGFjZSgvXlxcPy8sICcnKSA6IHN0cjtcbiAgICB2YXIgbGltaXQgPSBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID09PSBJbmZpbml0eSA/IHVuZGVmaW5lZCA6IG9wdGlvbnMucGFyYW1ldGVyTGltaXQ7XG4gICAgdmFyIHBhcnRzID0gY2xlYW5TdHIuc3BsaXQob3B0aW9ucy5kZWxpbWl0ZXIsIGxpbWl0KTtcbiAgICB2YXIgc2tpcEluZGV4ID0gLTE7IC8vIEtlZXAgdHJhY2sgb2Ygd2hlcmUgdGhlIHV0Zjggc2VudGluZWwgd2FzIGZvdW5kXG4gICAgdmFyIGk7XG5cbiAgICB2YXIgY2hhcnNldCA9IG9wdGlvbnMuY2hhcnNldDtcbiAgICBpZiAob3B0aW9ucy5jaGFyc2V0U2VudGluZWwpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZigndXRmOD0nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0c1tpXSA9PT0gY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSAndXRmLTgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydHNbaV0gPT09IGlzb1NlbnRpbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSAnaXNvLTg4NTktMSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNraXBJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaSA9IHBhcnRzLmxlbmd0aDsgLy8gVGhlIGVzbGludCBzZXR0aW5ncyBkbyBub3QgYWxsb3cgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGkgPT09IHNraXBJbmRleCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgICB2YXIgYnJhY2tldEVxdWFsc1BvcyA9IHBhcnQuaW5kZXhPZignXT0nKTtcbiAgICAgICAgdmFyIHBvcyA9IGJyYWNrZXRFcXVhbHNQb3MgPT09IC0xID8gcGFydC5pbmRleE9mKCc9JykgOiBicmFja2V0RXF1YWxzUG9zICsgMTtcblxuICAgICAgICB2YXIga2V5LCB2YWw7XG4gICAgICAgIGlmIChwb3MgPT09IC0xKSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydCwgZGVmYXVsdHMuZGVjb2RlciwgY2hhcnNldCwgJ2tleScpO1xuICAgICAgICAgICAgdmFsID0gb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPyBudWxsIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydC5zbGljZSgwLCBwb3MpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAna2V5Jyk7XG4gICAgICAgICAgICB2YWwgPSB1dGlscy5tYXliZU1hcChcbiAgICAgICAgICAgICAgICBwYXJzZUFycmF5VmFsdWUocGFydC5zbGljZShwb3MgKyAxKSwgb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVuY29kZWRWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGVjb2RlcihlbmNvZGVkVmFsLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAndmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbCAmJiBvcHRpb25zLmludGVycHJldE51bWVyaWNFbnRpdGllcyAmJiBjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgICAgIHZhbCA9IGludGVycHJldE51bWVyaWNFbnRpdGllcyh2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQuaW5kZXhPZignW109JykgPiAtMSkge1xuICAgICAgICAgICAgdmFsID0gaXNBcnJheSh2YWwpID8gW3ZhbF0gOiB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHV0aWxzLmNvbWJpbmUob2JqW2tleV0sIHZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgcGFyc2VPYmplY3QgPSBmdW5jdGlvbiAoY2hhaW4sIHZhbCwgb3B0aW9ucywgdmFsdWVzUGFyc2VkKSB7XG4gICAgdmFyIGxlYWYgPSB2YWx1ZXNQYXJzZWQgPyB2YWwgOiBwYXJzZUFycmF5VmFsdWUodmFsLCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIGkgPSBjaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgb2JqO1xuICAgICAgICB2YXIgcm9vdCA9IGNoYWluW2ldO1xuXG4gICAgICAgIGlmIChyb290ID09PSAnW10nICYmIG9wdGlvbnMucGFyc2VBcnJheXMpIHtcbiAgICAgICAgICAgIG9iaiA9IFtdLmNvbmNhdChsZWFmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICAgICAgdmFyIGNsZWFuUm9vdCA9IHJvb3QuY2hhckF0KDApID09PSAnWycgJiYgcm9vdC5jaGFyQXQocm9vdC5sZW5ndGggLSAxKSA9PT0gJ10nID8gcm9vdC5zbGljZSgxLCAtMSkgOiByb290O1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoY2xlYW5Sb290LCAxMCk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMucGFyc2VBcnJheXMgJiYgY2xlYW5Sb290ID09PSAnJykge1xuICAgICAgICAgICAgICAgIG9iaiA9IHsgMDogbGVhZiB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICAgICAgJiYgcm9vdCAhPT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgU3RyaW5nKGluZGV4KSA9PT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgaW5kZXggPj0gMFxuICAgICAgICAgICAgICAgICYmIChvcHRpb25zLnBhcnNlQXJyYXlzICYmIGluZGV4IDw9IG9wdGlvbnMuYXJyYXlMaW1pdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG9iaiA9IFtdO1xuICAgICAgICAgICAgICAgIG9ialtpbmRleF0gPSBsZWFmO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGVhblJvb3QgIT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgICAgICAgICAgb2JqW2NsZWFuUm9vdF0gPSBsZWFmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGVhZiA9IG9iajtcbiAgICB9XG5cbiAgICByZXR1cm4gbGVhZjtcbn07XG5cbnZhciBwYXJzZUtleXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nS2V5cyhnaXZlbktleSwgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpIHtcbiAgICBpZiAoIWdpdmVuS2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gZG90IG5vdGF0aW9uIHRvIGJyYWNrZXQgbm90YXRpb25cbiAgICB2YXIga2V5ID0gb3B0aW9ucy5hbGxvd0RvdHMgPyBnaXZlbktleS5yZXBsYWNlKC9cXC4oW14uW10rKS9nLCAnWyQxXScpIDogZ2l2ZW5LZXk7XG5cbiAgICAvLyBUaGUgcmVnZXggY2h1bmtzXG5cbiAgICB2YXIgYnJhY2tldHMgPSAvKFxcW1teW1xcXV0qXSkvO1xuICAgIHZhciBjaGlsZCA9IC8oXFxbW15bXFxdXSpdKS9nO1xuXG4gICAgLy8gR2V0IHRoZSBwYXJlbnRcblxuICAgIHZhciBzZWdtZW50ID0gb3B0aW9ucy5kZXB0aCA+IDAgJiYgYnJhY2tldHMuZXhlYyhrZXkpO1xuICAgIHZhciBwYXJlbnQgPSBzZWdtZW50ID8ga2V5LnNsaWNlKDAsIHNlZ21lbnQuaW5kZXgpIDoga2V5O1xuXG4gICAgLy8gU3Rhc2ggdGhlIHBhcmVudCBpZiBpdCBleGlzdHNcblxuICAgIHZhciBrZXlzID0gW107XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgdXNpbmcgcGxhaW4gb2JqZWN0cywgb3B0aW9uYWxseSBwcmVmaXgga2V5cyB0aGF0IHdvdWxkIG92ZXJ3cml0ZSBvYmplY3QgcHJvdG90eXBlIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBwYXJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAga2V5cy5wdXNoKHBhcmVudCk7XG4gICAgfVxuXG4gICAgLy8gTG9vcCB0aHJvdWdoIGNoaWxkcmVuIGFwcGVuZGluZyB0byB0aGUgYXJyYXkgdW50aWwgd2UgaGl0IGRlcHRoXG5cbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKG9wdGlvbnMuZGVwdGggPiAwICYmIChzZWdtZW50ID0gY2hpbGQuZXhlYyhrZXkpKSAhPT0gbnVsbCAmJiBpIDwgb3B0aW9ucy5kZXB0aCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc2VnbWVudFsxXS5zbGljZSgxLCAtMSkpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleXMucHVzaChzZWdtZW50WzFdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIGEgcmVtYWluZGVyLCBqdXN0IGFkZCB3aGF0ZXZlciBpcyBsZWZ0XG5cbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBrZXlzLnB1c2goJ1snICsga2V5LnNsaWNlKHNlZ21lbnQuaW5kZXgpICsgJ10nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoa2V5cywgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpO1xufTtcblxudmFyIG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyhvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9XG5cbiAgICBpZiAob3B0cy5kZWNvZGVyICE9PSBudWxsICYmIG9wdHMuZGVjb2RlciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRzLmRlY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRGVjb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuY2hhcnNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAndXRmLTgnICYmIG9wdHMuY2hhcnNldCAhPT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHZhciBjaGFyc2V0ID0gdHlwZW9mIG9wdHMuY2hhcnNldCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5jaGFyc2V0IDogb3B0cy5jaGFyc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxsb3dEb3RzOiB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cyxcbiAgICAgICAgYWxsb3dQcm90b3R5cGVzOiB0eXBlb2Ygb3B0cy5hbGxvd1Byb3RvdHlwZXMgPT09ICdib29sZWFuJyA/IG9wdHMuYWxsb3dQcm90b3R5cGVzIDogZGVmYXVsdHMuYWxsb3dQcm90b3R5cGVzLFxuICAgICAgICBhbGxvd1NwYXJzZTogdHlwZW9mIG9wdHMuYWxsb3dTcGFyc2UgPT09ICdib29sZWFuJyA/IG9wdHMuYWxsb3dTcGFyc2UgOiBkZWZhdWx0cy5hbGxvd1NwYXJzZSxcbiAgICAgICAgYXJyYXlMaW1pdDogdHlwZW9mIG9wdHMuYXJyYXlMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRzLmFycmF5TGltaXQgOiBkZWZhdWx0cy5hcnJheUxpbWl0LFxuICAgICAgICBjaGFyc2V0OiBjaGFyc2V0LFxuICAgICAgICBjaGFyc2V0U2VudGluZWw6IHR5cGVvZiBvcHRzLmNoYXJzZXRTZW50aW5lbCA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5jaGFyc2V0U2VudGluZWwgOiBkZWZhdWx0cy5jaGFyc2V0U2VudGluZWwsXG4gICAgICAgIGNvbW1hOiB0eXBlb2Ygb3B0cy5jb21tYSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5jb21tYSA6IGRlZmF1bHRzLmNvbW1hLFxuICAgICAgICBkZWNvZGVyOiB0eXBlb2Ygb3B0cy5kZWNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5kZWNvZGVyIDogZGVmYXVsdHMuZGVjb2RlcixcbiAgICAgICAgZGVsaW1pdGVyOiB0eXBlb2Ygb3B0cy5kZWxpbWl0ZXIgPT09ICdzdHJpbmcnIHx8IHV0aWxzLmlzUmVnRXhwKG9wdHMuZGVsaW1pdGVyKSA/IG9wdHMuZGVsaW1pdGVyIDogZGVmYXVsdHMuZGVsaW1pdGVyLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb24sIG5vLWV4dHJhLXBhcmVuc1xuICAgICAgICBkZXB0aDogKHR5cGVvZiBvcHRzLmRlcHRoID09PSAnbnVtYmVyJyB8fCBvcHRzLmRlcHRoID09PSBmYWxzZSkgPyArb3B0cy5kZXB0aCA6IGRlZmF1bHRzLmRlcHRoLFxuICAgICAgICBpZ25vcmVRdWVyeVByZWZpeDogb3B0cy5pZ25vcmVRdWVyeVByZWZpeCA9PT0gdHJ1ZSxcbiAgICAgICAgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiB0eXBlb2Ygb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgPT09ICdib29sZWFuJyA/IG9wdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzIDogZGVmYXVsdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzLFxuICAgICAgICBwYXJhbWV0ZXJMaW1pdDogdHlwZW9mIG9wdHMucGFyYW1ldGVyTGltaXQgPT09ICdudW1iZXInID8gb3B0cy5wYXJhbWV0ZXJMaW1pdCA6IGRlZmF1bHRzLnBhcmFtZXRlckxpbWl0LFxuICAgICAgICBwYXJzZUFycmF5czogb3B0cy5wYXJzZUFycmF5cyAhPT0gZmFsc2UsXG4gICAgICAgIHBsYWluT2JqZWN0czogdHlwZW9mIG9wdHMucGxhaW5PYmplY3RzID09PSAnYm9vbGVhbicgPyBvcHRzLnBsYWluT2JqZWN0cyA6IGRlZmF1bHRzLnBsYWluT2JqZWN0cyxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0ciwgb3B0cykge1xuICAgIHZhciBvcHRpb25zID0gbm9ybWFsaXplUGFyc2VPcHRpb25zKG9wdHMpO1xuXG4gICAgaWYgKHN0ciA9PT0gJycgfHwgc3RyID09PSBudWxsIHx8IHR5cGVvZiBzdHIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcE9iaiA9IHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gcGFyc2VWYWx1ZXMoc3RyLCBvcHRpb25zKSA6IHN0cjtcbiAgICB2YXIgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGtleXMgYW5kIHNldHVwIHRoZSBuZXcgb2JqZWN0XG5cbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRlbXBPYmopO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdmFyIG5ld09iaiA9IHBhcnNlS2V5cyhrZXksIHRlbXBPYmpba2V5XSwgb3B0aW9ucywgdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycpO1xuICAgICAgICBvYmogPSB1dGlscy5tZXJnZShvYmosIG5ld09iaiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYWxsb3dTcGFyc2UgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICByZXR1cm4gdXRpbHMuY29tcGFjdChvYmopO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldFNpZGVDaGFubmVsID0gcmVxdWlyZSgnc2lkZS1jaGFubmVsJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGNvbW1hOiAnY29tbWEnLFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkge1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbnZhciBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG52YXIgcHVzaFRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyLCB2YWx1ZU9yQXJyYXkpIHtcbiAgICBwdXNoLmFwcGx5KGFyciwgaXNBcnJheSh2YWx1ZU9yQXJyYXkpID8gdmFsdWVPckFycmF5IDogW3ZhbHVlT3JBcnJheV0pO1xufTtcblxudmFyIHRvSVNPID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBkZWZhdWx0Rm9ybWF0ID0gZm9ybWF0c1snZGVmYXVsdCddO1xudmFyIGRlZmF1bHRzID0ge1xuICAgIGFkZFF1ZXJ5UHJlZml4OiBmYWxzZSxcbiAgICBhbGxvd0RvdHM6IGZhbHNlLFxuICAgIGNoYXJzZXQ6ICd1dGYtOCcsXG4gICAgY2hhcnNldFNlbnRpbmVsOiBmYWxzZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBlbmNvZGU6IHRydWUsXG4gICAgZW5jb2RlcjogdXRpbHMuZW5jb2RlLFxuICAgIGVuY29kZVZhbHVlc09ubHk6IGZhbHNlLFxuICAgIGZvcm1hdDogZGVmYXVsdEZvcm1hdCxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHMuZm9ybWF0dGVyc1tkZWZhdWx0Rm9ybWF0XSxcbiAgICAvLyBkZXByZWNhdGVkXG4gICAgaW5kaWNlczogZmFsc2UsXG4gICAgc2VyaWFsaXplRGF0ZTogZnVuY3Rpb24gc2VyaWFsaXplRGF0ZShkYXRlKSB7XG4gICAgICAgIHJldHVybiB0b0lTTy5jYWxsKGRhdGUpO1xuICAgIH0sXG4gICAgc2tpcE51bGxzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaXNOb25OdWxsaXNoUHJpbWl0aXZlID0gZnVuY3Rpb24gaXNOb25OdWxsaXNoUHJpbWl0aXZlKHYpIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnc3ltYm9sJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2JpZ2ludCc7XG59O1xuXG52YXIgc2VudGluZWwgPSB7fTtcblxudmFyIHN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeShcbiAgICBvYmplY3QsXG4gICAgcHJlZml4LFxuICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgY29tbWFSb3VuZFRyaXAsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgIHNraXBOdWxscyxcbiAgICBlbmNvZGVyLFxuICAgIGZpbHRlcixcbiAgICBzb3J0LFxuICAgIGFsbG93RG90cyxcbiAgICBzZXJpYWxpemVEYXRlLFxuICAgIGZvcm1hdCxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICBjaGFyc2V0LFxuICAgIHNpZGVDaGFubmVsXG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuXG4gICAgdmFyIHRtcFNjID0gc2lkZUNoYW5uZWw7XG4gICAgdmFyIHN0ZXAgPSAwO1xuICAgIHZhciBmaW5kRmxhZyA9IGZhbHNlO1xuICAgIHdoaWxlICgodG1wU2MgPSB0bXBTYy5nZXQoc2VudGluZWwpKSAhPT0gdm9pZCB1bmRlZmluZWQgJiYgIWZpbmRGbGFnKSB7XG4gICAgICAgIC8vIFdoZXJlIG9iamVjdCBsYXN0IGFwcGVhcmVkIGluIHRoZSByZWYgdHJlZVxuICAgICAgICB2YXIgcG9zID0gdG1wU2MuZ2V0KG9iamVjdCk7XG4gICAgICAgIHN0ZXAgKz0gMTtcbiAgICAgICAgaWYgKHR5cGVvZiBwb3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAocG9zID09PSBzdGVwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0N5Y2xpYyBvYmplY3QgdmFsdWUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmluZEZsYWcgPSB0cnVlOyAvLyBCcmVhayB3aGlsZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdG1wU2MuZ2V0KHNlbnRpbmVsKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHN0ZXAgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqID0gZmlsdGVyKHByZWZpeCwgb2JqKTtcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgb2JqID0gc2VyaWFsaXplRGF0ZShvYmopO1xuICAgIH0gZWxzZSBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgb2JqID0gdXRpbHMubWF5YmVNYXAob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHkgPyBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ2tleScsIGZvcm1hdCkgOiBwcmVmaXg7XG4gICAgICAgIH1cblxuICAgICAgICBvYmogPSAnJztcbiAgICB9XG5cbiAgICBpZiAoaXNOb25OdWxsaXNoUHJpbWl0aXZlKG9iaikgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAna2V5JywgZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ3ZhbHVlJywgZm9ybWF0KSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbZm9ybWF0dGVyKHByZWZpeCkgKyAnPScgKyBmb3JtYXR0ZXIoU3RyaW5nKG9iaikpXTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBqb2luIGVsZW1lbnRzIGluXG4gICAgICAgIGlmIChlbmNvZGVWYWx1ZXNPbmx5ICYmIGVuY29kZXIpIHtcbiAgICAgICAgICAgIG9iaiA9IHV0aWxzLm1heWJlTWFwKG9iaiwgZW5jb2Rlcik7XG4gICAgICAgIH1cbiAgICAgICAgb2JqS2V5cyA9IFt7IHZhbHVlOiBvYmoubGVuZ3RoID4gMCA/IG9iai5qb2luKCcsJykgfHwgbnVsbCA6IHZvaWQgdW5kZWZpbmVkIH1dO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICBvYmpLZXlzID0gc29ydCA/IGtleXMuc29ydChzb3J0KSA6IGtleXM7XG4gICAgfVxuXG4gICAgdmFyIGFkanVzdGVkUHJlZml4ID0gY29tbWFSb3VuZFRyaXAgJiYgaXNBcnJheShvYmopICYmIG9iai5sZW5ndGggPT09IDEgPyBwcmVmaXggKyAnW10nIDogcHJlZml4O1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBvYmpLZXlzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIHZhciBrZXkgPSBvYmpLZXlzW2pdO1xuICAgICAgICB2YXIgdmFsdWUgPSB0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyAmJiB0eXBlb2Yga2V5LnZhbHVlICE9PSAndW5kZWZpbmVkJyA/IGtleS52YWx1ZSA6IG9ialtrZXldO1xuXG4gICAgICAgIGlmIChza2lwTnVsbHMgJiYgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGlzQXJyYXkob2JqKVxuICAgICAgICAgICAgPyB0eXBlb2YgZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2Z1bmN0aW9uJyA/IGdlbmVyYXRlQXJyYXlQcmVmaXgoYWRqdXN0ZWRQcmVmaXgsIGtleSkgOiBhZGp1c3RlZFByZWZpeFxuICAgICAgICAgICAgOiBhZGp1c3RlZFByZWZpeCArIChhbGxvd0RvdHMgPyAnLicgKyBrZXkgOiAnWycgKyBrZXkgKyAnXScpO1xuXG4gICAgICAgIHNpZGVDaGFubmVsLnNldChvYmplY3QsIHN0ZXApO1xuICAgICAgICB2YXIgdmFsdWVTaWRlQ2hhbm5lbCA9IGdldFNpZGVDaGFubmVsKCk7XG4gICAgICAgIHZhbHVlU2lkZUNoYW5uZWwuc2V0KHNlbnRpbmVsLCBzaWRlQ2hhbm5lbCk7XG4gICAgICAgIHB1c2hUb0FycmF5KHZhbHVlcywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBrZXlQcmVmaXgsXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgY29tbWFSb3VuZFRyaXAsXG4gICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGVuY29kZVZhbHVlc09ubHkgJiYgaXNBcnJheShvYmopID8gbnVsbCA6IGVuY29kZXIsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBjaGFyc2V0LFxuICAgICAgICAgICAgdmFsdWVTaWRlQ2hhbm5lbFxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xufTtcblxudmFyIG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmVuY29kZXIgIT09IG51bGwgJiYgdHlwZW9mIG9wdHMuZW5jb2RlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuZW5jb2RlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIHZhciBjaGFyc2V0ID0gb3B0cy5jaGFyc2V0IHx8IGRlZmF1bHRzLmNoYXJzZXQ7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2hhcnNldCBvcHRpb24gbXVzdCBiZSBlaXRoZXIgdXRmLTgsIGlzby04ODU5LTEsIG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXQgPSBmb3JtYXRzWydkZWZhdWx0J107XG4gICAgaWYgKHR5cGVvZiBvcHRzLmZvcm1hdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKCFoYXMuY2FsbChmb3JtYXRzLmZvcm1hdHRlcnMsIG9wdHMuZm9ybWF0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBmb3JtYXQgb3B0aW9uIHByb3ZpZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1hdCA9IG9wdHMuZm9ybWF0O1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0cy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cbiAgICB2YXIgZmlsdGVyID0gZGVmYXVsdHMuZmlsdGVyO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicgfHwgaXNBcnJheShvcHRzLmZpbHRlcikpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0cy5maWx0ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWRkUXVlcnlQcmVmaXg6IHR5cGVvZiBvcHRzLmFkZFF1ZXJ5UHJlZml4ID09PSAnYm9vbGVhbicgPyBvcHRzLmFkZFF1ZXJ5UHJlZml4IDogZGVmYXVsdHMuYWRkUXVlcnlQcmVmaXgsXG4gICAgICAgIGFsbG93RG90czogdHlwZW9mIG9wdHMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmFsbG93RG90cyA6ICEhb3B0cy5hbGxvd0RvdHMsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgZGVsaW1pdGVyOiB0eXBlb2Ygb3B0cy5kZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuZGVsaW1pdGVyIDogb3B0cy5kZWxpbWl0ZXIsXG4gICAgICAgIGVuY29kZTogdHlwZW9mIG9wdHMuZW5jb2RlID09PSAnYm9vbGVhbicgPyBvcHRzLmVuY29kZSA6IGRlZmF1bHRzLmVuY29kZSxcbiAgICAgICAgZW5jb2RlcjogdHlwZW9mIG9wdHMuZW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuZW5jb2RlciA6IGRlZmF1bHRzLmVuY29kZXIsXG4gICAgICAgIGVuY29kZVZhbHVlc09ubHk6IHR5cGVvZiBvcHRzLmVuY29kZVZhbHVlc09ubHkgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlVmFsdWVzT25seSA6IGRlZmF1bHRzLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgIHNlcmlhbGl6ZURhdGU6IHR5cGVvZiBvcHRzLnNlcmlhbGl6ZURhdGUgPT09ICdmdW5jdGlvbicgPyBvcHRzLnNlcmlhbGl6ZURhdGUgOiBkZWZhdWx0cy5zZXJpYWxpemVEYXRlLFxuICAgICAgICBza2lwTnVsbHM6IHR5cGVvZiBvcHRzLnNraXBOdWxscyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5za2lwTnVsbHMgOiBkZWZhdWx0cy5za2lwTnVsbHMsXG4gICAgICAgIHNvcnQ6IHR5cGVvZiBvcHRzLnNvcnQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnNvcnQgOiBudWxsLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBvcHRzKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcbiAgICB2YXIgb3B0aW9ucyA9IG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMob3B0cyk7XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICB2YXIgZmlsdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcbiAgICAgICAgb2JqID0gZmlsdGVyKCcnLCBvYmopO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvcHRpb25zLmZpbHRlcikpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHZhciBhcnJheUZvcm1hdDtcbiAgICBpZiAob3B0cyAmJiBvcHRzLmFycmF5Rm9ybWF0IGluIGFycmF5UHJlZml4R2VuZXJhdG9ycykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdHMuYXJyYXlGb3JtYXQ7XG4gICAgfSBlbHNlIGlmIChvcHRzICYmICdpbmRpY2VzJyBpbiBvcHRzKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0cy5pbmRpY2VzID8gJ2luZGljZXMnIDogJ3JlcGVhdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSAnaW5kaWNlcyc7XG4gICAgfVxuXG4gICAgdmFyIGdlbmVyYXRlQXJyYXlQcmVmaXggPSBhcnJheVByZWZpeEdlbmVyYXRvcnNbYXJyYXlGb3JtYXRdO1xuICAgIGlmIChvcHRzICYmICdjb21tYVJvdW5kVHJpcCcgaW4gb3B0cyAmJiB0eXBlb2Ygb3B0cy5jb21tYVJvdW5kVHJpcCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Bjb21tYVJvdW5kVHJpcGAgbXVzdCBiZSBhIGJvb2xlYW4sIG9yIGFic2VudCcpO1xuICAgIH1cbiAgICB2YXIgY29tbWFSb3VuZFRyaXAgPSBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIG9wdHMgJiYgb3B0cy5jb21tYVJvdW5kVHJpcDtcblxuICAgIGlmICghb2JqS2V5cykge1xuICAgICAgICBvYmpLZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChvcHRpb25zLnNvcnQpO1xuICAgIH1cblxuICAgIHZhciBzaWRlQ2hhbm5lbCA9IGdldFNpZGVDaGFubmVsKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBvYmpLZXlzW2ldO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNraXBOdWxscyAmJiBvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVzaFRvQXJyYXkoa2V5cywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgY29tbWFSb3VuZFRyaXAsXG4gICAgICAgICAgICBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgIG9wdGlvbnMuc2tpcE51bGxzLFxuICAgICAgICAgICAgb3B0aW9ucy5lbmNvZGUgPyBvcHRpb25zLmVuY29kZXIgOiBudWxsLFxuICAgICAgICAgICAgb3B0aW9ucy5maWx0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLnNvcnQsXG4gICAgICAgICAgICBvcHRpb25zLmFsbG93RG90cyxcbiAgICAgICAgICAgIG9wdGlvbnMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIG9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzZXQsXG4gICAgICAgICAgICBzaWRlQ2hhbm5lbFxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICB2YXIgam9pbmVkID0ga2V5cy5qb2luKG9wdGlvbnMuZGVsaW1pdGVyKTtcbiAgICB2YXIgcHJlZml4ID0gb3B0aW9ucy5hZGRRdWVyeVByZWZpeCA9PT0gdHJ1ZSA/ICc/JyA6ICcnO1xuXG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpLCB0aGUgXCJudW1lcmljIGVudGl0eVwiIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hlY2ttYXJrXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0ImJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcbiAgICAgICAgICAgIHByZWZpeCArPSAndXRmOD0lRTIlOUMlOTMmJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqb2luZWQubGVuZ3RoID4gMCA/IHByZWZpeCArIGpvaW5lZCA6ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbnZhciBoZXhUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICBhcnJheS5wdXNoKCclJyArICgoaSA8IDE2ID8gJzAnIDogJycpICsgaS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn0oKSk7XG5cbnZhciBjb21wYWN0UXVldWUgPSBmdW5jdGlvbiBjb21wYWN0UXVldWUocXVldWUpIHtcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlLnBvcCgpO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICB2YXIgY29tcGFjdGVkID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb2JqLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpbal0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhY3RlZC5wdXNoKG9ialtqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdGVtLm9ialtpdGVtLnByb3BdID0gY29tcGFjdGVkO1xuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGFycmF5VG9PYmplY3QgPSBmdW5jdGlvbiBhcnJheVRvT2JqZWN0KHNvdXJjZSwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSBvcHRpb25zICYmIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgb2JqW2ldID0gc291cmNlW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgdGFyZ2V0LnB1c2goc291cmNlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyAmJiAob3B0aW9ucy5wbGFpbk9iamVjdHMgfHwgb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpKSB8fCAhaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtzb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0LCBzb3VyY2VdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gW3RhcmdldF0uY29uY2F0KHNvdXJjZSk7XG4gICAgfVxuXG4gICAgdmFyIG1lcmdlVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIGlmIChpc0FycmF5KHRhcmdldCkgJiYgIWlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBtZXJnZVRhcmdldCA9IGFycmF5VG9PYmplY3QodGFyZ2V0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgICAgaWYgKGhhcy5jYWxsKHRhcmdldCwgaSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0SXRlbSA9IHRhcmdldFtpXTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0SXRlbSAmJiB0eXBlb2YgdGFyZ2V0SXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gbWVyZ2UodGFyZ2V0SXRlbSwgaXRlbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuXG4gICAgICAgIGlmIChoYXMuY2FsbChhY2MsIGtleSkpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gbWVyZ2UoYWNjW2tleV0sIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBtZXJnZVRhcmdldCk7XG59O1xuXG52YXIgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduU2luZ2xlU291cmNlKHRhcmdldCwgc291cmNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICBhY2Nba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHRhcmdldCk7XG59O1xuXG52YXIgZGVjb2RlID0gZnVuY3Rpb24gKHN0ciwgZGVjb2RlciwgY2hhcnNldCkge1xuICAgIHZhciBzdHJXaXRob3V0UGx1cyA9IHN0ci5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICBpZiAoY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIC8vIHVuZXNjYXBlIG5ldmVyIHRocm93cywgbm8gdHJ5Li4uY2F0Y2ggbmVlZGVkOlxuICAgICAgICByZXR1cm4gc3RyV2l0aG91dFBsdXMucmVwbGFjZSgvJVswLTlhLWZdezJ9L2dpLCB1bmVzY2FwZSk7XG4gICAgfVxuICAgIC8vIHV0Zi04XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHJXaXRob3V0UGx1cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gc3RyV2l0aG91dFBsdXM7XG4gICAgfVxufTtcblxudmFyIGVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHIsIGRlZmF1bHRFbmNvZGVyLCBjaGFyc2V0LCBraW5kLCBmb3JtYXQpIHtcbiAgICAvLyBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBCcmlhbiBXaGl0ZSAobXNjZGV4KSBmb3IgdGhlIGlvLmpzIGNvcmUgcXVlcnlzdHJpbmcgbGlicmFyeS5cbiAgICAvLyBJdCBoYXMgYmVlbiBhZGFwdGVkIGhlcmUgZm9yIHN0cmljdGVyIGFkaGVyZW5jZSB0byBSRkMgMzk4NlxuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZyA9IHN0cjtcbiAgICBpZiAodHlwZW9mIHN0ciA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgc3RyaW5nID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN0cik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgICAgICBzdHJpbmcgPSBTdHJpbmcoc3RyKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHJldHVybiBlc2NhcGUoc3RyaW5nKS5yZXBsYWNlKC8ldVswLTlhLWZdezR9L2dpLCBmdW5jdGlvbiAoJDApIHtcbiAgICAgICAgICAgIHJldHVybiAnJTI2JTIzJyArIHBhcnNlSW50KCQwLnNsaWNlKDIpLCAxNikgKyAnJTNCJztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIG91dCA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYyA9PT0gMHgyRCAvLyAtXG4gICAgICAgICAgICB8fCBjID09PSAweDJFIC8vIC5cbiAgICAgICAgICAgIHx8IGMgPT09IDB4NUYgLy8gX1xuICAgICAgICAgICAgfHwgYyA9PT0gMHg3RSAvLyB+XG4gICAgICAgICAgICB8fCAoYyA+PSAweDMwICYmIGMgPD0gMHgzOSkgLy8gMC05XG4gICAgICAgICAgICB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgLy8gYS16XG4gICAgICAgICAgICB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg3QSkgLy8gQS1aXG4gICAgICAgICAgICB8fCAoZm9ybWF0ID09PSBmb3JtYXRzLlJGQzE3MzggJiYgKGMgPT09IDB4MjggfHwgYyA9PT0gMHgyOSkpIC8vICggKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG91dCArPSBzdHJpbmcuY2hhckF0KGkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIGhleFRhYmxlW2NdO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyAoaGV4VGFibGVbMHhDMCB8IChjID4+IDYpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPj0gMHhFMDAwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyAoaGV4VGFibGVbMHhFMCB8IChjID4+IDEyKV0gKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaSArPSAxO1xuICAgICAgICBjID0gMHgxMDAwMCArICgoKGMgJiAweDNGRikgPDwgMTApIHwgKHN0cmluZy5jaGFyQ29kZUF0KGkpICYgMHgzRkYpKTtcbiAgICAgICAgLyogZXNsaW50IG9wZXJhdG9yLWxpbmVicmVhazogWzIsIFwiYmVmb3JlXCJdICovXG4gICAgICAgIG91dCArPSBoZXhUYWJsZVsweEYwIHwgKGMgPj4gMTgpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDEyKSAmIDB4M0YpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxudmFyIGNvbXBhY3QgPSBmdW5jdGlvbiBjb21wYWN0KHZhbHVlKSB7XG4gICAgdmFyIHF1ZXVlID0gW3sgb2JqOiB7IG86IHZhbHVlIH0sIHByb3A6ICdvJyB9XTtcbiAgICB2YXIgcmVmcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlW2ldO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5cy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbal07XG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmIHJlZnMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goeyBvYmo6IG9iaiwgcHJvcDoga2V5IH0pO1xuICAgICAgICAgICAgICAgIHJlZnMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFjdFF1ZXVlKHF1ZXVlKTtcblxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBpc1JlZ0V4cCA9IGZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG52YXIgaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlcihvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhKG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpO1xufTtcblxudmFyIGNvbWJpbmUgPSBmdW5jdGlvbiBjb21iaW5lKGEsIGIpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KGEsIGIpO1xufTtcblxudmFyIG1heWJlTWFwID0gZnVuY3Rpb24gbWF5YmVNYXAodmFsLCBmbikge1xuICAgIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFyIG1hcHBlZCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgbWFwcGVkLnB1c2goZm4odmFsW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcHBlZDtcbiAgICB9XG4gICAgcmV0dXJuIGZuKHZhbCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhcnJheVRvT2JqZWN0OiBhcnJheVRvT2JqZWN0LFxuICAgIGFzc2lnbjogYXNzaWduLFxuICAgIGNvbWJpbmU6IGNvbWJpbmUsXG4gICAgY29tcGFjdDogY29tcGFjdCxcbiAgICBkZWNvZGU6IGRlY29kZSxcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gICAgaXNSZWdFeHA6IGlzUmVnRXhwLFxuICAgIG1heWJlTWFwOiBtYXliZU1hcCxcbiAgICBtZXJnZTogbWVyZ2Vcbn07XG4iLCIvKiEgcXVldWUtbWljcm90YXNrLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5sZXQgcHJvbWlzZVxuXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gJ2Z1bmN0aW9uJ1xuICA/IHF1ZXVlTWljcm90YXNrLmJpbmQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG4gIC8vIHJldXNlIHJlc29sdmVkIHByb21pc2UsIGFuZCBhbGxvY2F0ZSBpdCBsYXppbHlcbiAgOiBjYiA9PiAocHJvbWlzZSB8fCAocHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpKSlcbiAgICAudGhlbihjYilcbiAgICAuY2F0Y2goZXJyID0+IHNldFRpbWVvdXQoKCkgPT4geyB0aHJvdyBlcnIgfSwgMCkpXG4iLCIndXNlIHN0cmljdCdcblxuLy8gbGltaXQgb2YgQ3J5cHRvLmdldFJhbmRvbVZhbHVlcygpXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlc1xudmFyIE1BWF9CWVRFUyA9IDY1NTM2XG5cbi8vIE5vZGUgc3VwcG9ydHMgcmVxdWVzdGluZyB1cCB0byB0aGlzIG51bWJlciBvZiBieXRlc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9jcnlwdG8vcmFuZG9tLmpzI0w0OFxudmFyIE1BWF9VSU5UMzIgPSA0Mjk0OTY3Mjk1XG5cbmZ1bmN0aW9uIG9sZEJyb3dzZXIgKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXFxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMScpXG59XG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxudmFyIGNyeXB0byA9IGdsb2JhbC5jcnlwdG8gfHwgZ2xvYmFsLm1zQ3J5cHRvXG5cbmlmIChjcnlwdG8gJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJhbmRvbUJ5dGVzXG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IG9sZEJyb3dzZXJcbn1cblxuZnVuY3Rpb24gcmFuZG9tQnl0ZXMgKHNpemUsIGNiKSB7XG4gIC8vIHBoYW50b21qcyBuZWVkcyB0byB0aHJvd1xuICBpZiAoc2l6ZSA+IE1BWF9VSU5UMzIpIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzJylcblxuICB2YXIgYnl0ZXMgPSBCdWZmZXIuYWxsb2NVbnNhZmUoc2l6ZSlcblxuICBpZiAoc2l6ZSA+IDApIHsgIC8vIGdldFJhbmRvbVZhbHVlcyBmYWlscyBvbiBJRSBpZiBzaXplID09IDBcbiAgICBpZiAoc2l6ZSA+IE1BWF9CWVRFUykgeyAvLyB0aGlzIGlzIHRoZSBtYXggYnl0ZXMgY3J5cHRvLmdldFJhbmRvbVZhbHVlc1xuICAgICAgLy8gY2FuIGRvIGF0IG9uY2Ugc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS93aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlc1xuICAgICAgZm9yICh2YXIgZ2VuZXJhdGVkID0gMDsgZ2VuZXJhdGVkIDwgc2l6ZTsgZ2VuZXJhdGVkICs9IE1BWF9CWVRFUykge1xuICAgICAgICAvLyBidWZmZXIuc2xpY2UgYXV0b21hdGljYWxseSBjaGVja3MgaWYgdGhlIGVuZCBpcyBwYXN0IHRoZSBlbmQgb2ZcbiAgICAgICAgLy8gdGhlIGJ1ZmZlciBzbyB3ZSBkb24ndCBoYXZlIHRvIGhlcmVcbiAgICAgICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhieXRlcy5zbGljZShnZW5lcmF0ZWQsIGdlbmVyYXRlZCArIE1BWF9CWVRFUykpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnl0ZXMpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNiKG51bGwsIGJ5dGVzKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBSZW1vdmUgYSByYW5nZSBvZiBpdGVtcyBmcm9tIGFuIGFycmF5XG4gKlxuICogQGZ1bmN0aW9uIHJlbW92ZUl0ZW1zXG4gKiBAcGFyYW0ge0FycmF5PCo+fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlQ291bnQgSG93IG1hbnkgaXRlbXMgdG8gcmVtb3ZlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUl0ZW1zIChhcnIsIHN0YXJ0SWR4LCByZW1vdmVDb3VudCkge1xuICB2YXIgaSwgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50IDw9IDAgfHwgc3RhcnRJZHggPCAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICByZW1vdmVDb3VudCA9IChzdGFydElkeCArIHJlbW92ZUNvdW50ID4gbGVuZ3RoID8gbGVuZ3RoIC0gc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG5cbiAgdmFyIGxlbiA9IGxlbmd0aCAtIHJlbW92ZUNvdW50O1xuXG4gIGZvciAoaSA9IHN0YXJ0SWR4OyBpIDwgbGVuOyArK2kpIHtcbiAgICBhcnJbaV0gPSBhcnJbaSArIHJlbW92ZUNvdW50XTtcbiAgfVxuXG4gIGFyci5sZW5ndGggPSBsZW47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVtb3ZlSXRlbXM7XG4iLCIvKiEgc2FmZS1idWZmZXIuIE1JVCBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJ1ZmZlci5wcm90b3R5cGUpXG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBzY3JvbGxUb0FuY2hvclxuXG5mdW5jdGlvbiBzY3JvbGxUb0FuY2hvciAoYW5jaG9yLCBvcHRpb25zKSB7XG4gIGlmIChhbmNob3IpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhbmNob3IpXG4gICAgICBpZiAoZWwpIGVsLnNjcm9sbEludG9WaWV3KG9wdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9pbmRleCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmFuZG9tRnJvbVNlZWQgPSByZXF1aXJlKCcuL3JhbmRvbS9yYW5kb20tZnJvbS1zZWVkJyk7XG5cbnZhciBPUklHSU5BTCA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8tJztcbnZhciBhbHBoYWJldDtcbnZhciBwcmV2aW91c1NlZWQ7XG5cbnZhciBzaHVmZmxlZDtcblxuZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgc2h1ZmZsZWQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2V0Q2hhcmFjdGVycyhfYWxwaGFiZXRfKSB7XG4gICAgaWYgKCFfYWxwaGFiZXRfKSB7XG4gICAgICAgIGlmIChhbHBoYWJldCAhPT0gT1JJR0lOQUwpIHtcbiAgICAgICAgICAgIGFscGhhYmV0ID0gT1JJR0lOQUw7XG4gICAgICAgICAgICByZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoX2FscGhhYmV0XyA9PT0gYWxwaGFiZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChfYWxwaGFiZXRfLmxlbmd0aCAhPT0gT1JJR0lOQUwubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tIGFscGhhYmV0IGZvciBzaG9ydGlkIG11c3QgYmUgJyArIE9SSUdJTkFMLmxlbmd0aCArICcgdW5pcXVlIGNoYXJhY3RlcnMuIFlvdSBzdWJtaXR0ZWQgJyArIF9hbHBoYWJldF8ubGVuZ3RoICsgJyBjaGFyYWN0ZXJzOiAnICsgX2FscGhhYmV0Xyk7XG4gICAgfVxuXG4gICAgdmFyIHVuaXF1ZSA9IF9hbHBoYWJldF8uc3BsaXQoJycpLmZpbHRlcihmdW5jdGlvbihpdGVtLCBpbmQsIGFycil7XG4gICAgICAgcmV0dXJuIGluZCAhPT0gYXJyLmxhc3RJbmRleE9mKGl0ZW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKHVuaXF1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXN0b20gYWxwaGFiZXQgZm9yIHNob3J0aWQgbXVzdCBiZSAnICsgT1JJR0lOQUwubGVuZ3RoICsgJyB1bmlxdWUgY2hhcmFjdGVycy4gVGhlc2UgY2hhcmFjdGVycyB3ZXJlIG5vdCB1bmlxdWU6ICcgKyB1bmlxdWUuam9pbignLCAnKSk7XG4gICAgfVxuXG4gICAgYWxwaGFiZXQgPSBfYWxwaGFiZXRfO1xuICAgIHJlc2V0KCk7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlcnMoX2FscGhhYmV0Xykge1xuICAgIHNldENoYXJhY3RlcnMoX2FscGhhYmV0Xyk7XG4gICAgcmV0dXJuIGFscGhhYmV0O1xufVxuXG5mdW5jdGlvbiBzZXRTZWVkKHNlZWQpIHtcbiAgICByYW5kb21Gcm9tU2VlZC5zZWVkKHNlZWQpO1xuICAgIGlmIChwcmV2aW91c1NlZWQgIT09IHNlZWQpIHtcbiAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgcHJldmlvdXNTZWVkID0gc2VlZDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNodWZmbGUoKSB7XG4gICAgaWYgKCFhbHBoYWJldCkge1xuICAgICAgICBzZXRDaGFyYWN0ZXJzKE9SSUdJTkFMKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlQXJyYXkgPSBhbHBoYWJldC5zcGxpdCgnJyk7XG4gICAgdmFyIHRhcmdldEFycmF5ID0gW107XG4gICAgdmFyIHIgPSByYW5kb21Gcm9tU2VlZC5uZXh0VmFsdWUoKTtcbiAgICB2YXIgY2hhcmFjdGVySW5kZXg7XG5cbiAgICB3aGlsZSAoc291cmNlQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICByID0gcmFuZG9tRnJvbVNlZWQubmV4dFZhbHVlKCk7XG4gICAgICAgIGNoYXJhY3RlckluZGV4ID0gTWF0aC5mbG9vcihyICogc291cmNlQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgdGFyZ2V0QXJyYXkucHVzaChzb3VyY2VBcnJheS5zcGxpY2UoY2hhcmFjdGVySW5kZXgsIDEpWzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldEFycmF5LmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiBnZXRTaHVmZmxlZCgpIHtcbiAgICBpZiAoc2h1ZmZsZWQpIHtcbiAgICAgICAgcmV0dXJuIHNodWZmbGVkO1xuICAgIH1cbiAgICBzaHVmZmxlZCA9IHNodWZmbGUoKTtcbiAgICByZXR1cm4gc2h1ZmZsZWQ7XG59XG5cbi8qKlxuICogbG9va3VwIHNodWZmbGVkIGxldHRlclxuICogQHBhcmFtIGluZGV4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBsb29rdXAoaW5kZXgpIHtcbiAgICB2YXIgYWxwaGFiZXRTaHVmZmxlZCA9IGdldFNodWZmbGVkKCk7XG4gICAgcmV0dXJuIGFscGhhYmV0U2h1ZmZsZWRbaW5kZXhdO1xufVxuXG5mdW5jdGlvbiBnZXQgKCkge1xuICByZXR1cm4gYWxwaGFiZXQgfHwgT1JJR0lOQUw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGdldDogZ2V0LFxuICAgIGNoYXJhY3RlcnM6IGNoYXJhY3RlcnMsXG4gICAgc2VlZDogc2V0U2VlZCxcbiAgICBsb29rdXA6IGxvb2t1cCxcbiAgICBzaHVmZmxlZDogZ2V0U2h1ZmZsZWRcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZW5lcmF0ZSA9IHJlcXVpcmUoJy4vZ2VuZXJhdGUnKTtcbnZhciBhbHBoYWJldCA9IHJlcXVpcmUoJy4vYWxwaGFiZXQnKTtcblxuLy8gSWdub3JlIGFsbCBtaWxsaXNlY29uZHMgYmVmb3JlIGEgY2VydGFpbiB0aW1lIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZGF0ZSBlbnRyb3B5IHdpdGhvdXQgc2FjcmlmaWNpbmcgdW5pcXVlbmVzcy5cbi8vIFRoaXMgbnVtYmVyIHNob3VsZCBiZSB1cGRhdGVkIGV2ZXJ5IHllYXIgb3Igc28gdG8ga2VlcCB0aGUgZ2VuZXJhdGVkIGlkIHNob3J0LlxuLy8gVG8gcmVnZW5lcmF0ZSBgbmV3IERhdGUoKSAtIDBgIGFuZCBidW1wIHRoZSB2ZXJzaW9uLiBBbHdheXMgYnVtcCB0aGUgdmVyc2lvbiFcbnZhciBSRURVQ0VfVElNRSA9IDE1Njc3NTI4MDIwNjI7XG5cbi8vIGRvbid0IGNoYW5nZSB1bmxlc3Mgd2UgY2hhbmdlIHRoZSBhbGdvcyBvciBSRURVQ0VfVElNRVxuLy8gbXVzdCBiZSBhbiBpbnRlZ2VyIGFuZCBsZXNzIHRoYW4gMTZcbnZhciB2ZXJzaW9uID0gNztcblxuLy8gQ291bnRlciBpcyB1c2VkIHdoZW4gc2hvcnRpZCBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgaW4gb25lIHNlY29uZC5cbnZhciBjb3VudGVyO1xuXG4vLyBSZW1lbWJlciB0aGUgbGFzdCB0aW1lIHNob3J0aWQgd2FzIGNhbGxlZCBpbiBjYXNlIGNvdW50ZXIgaXMgbmVlZGVkLlxudmFyIHByZXZpb3VzU2Vjb25kcztcblxuLyoqXG4gKiBHZW5lcmF0ZSB1bmlxdWUgaWRcbiAqIFJldHVybnMgc3RyaW5nIGlkXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkKGNsdXN0ZXJXb3JrZXJJZCkge1xuICAgIHZhciBzdHIgPSAnJztcblxuICAgIHZhciBzZWNvbmRzID0gTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIFJFRFVDRV9USU1FKSAqIDAuMDAxKTtcblxuICAgIGlmIChzZWNvbmRzID09PSBwcmV2aW91c1NlY29uZHMpIHtcbiAgICAgICAgY291bnRlcisrO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvdW50ZXIgPSAwO1xuICAgICAgICBwcmV2aW91c1NlY29uZHMgPSBzZWNvbmRzO1xuICAgIH1cblxuICAgIHN0ciA9IHN0ciArIGdlbmVyYXRlKHZlcnNpb24pO1xuICAgIHN0ciA9IHN0ciArIGdlbmVyYXRlKGNsdXN0ZXJXb3JrZXJJZCk7XG4gICAgaWYgKGNvdW50ZXIgPiAwKSB7XG4gICAgICAgIHN0ciA9IHN0ciArIGdlbmVyYXRlKGNvdW50ZXIpO1xuICAgIH1cbiAgICBzdHIgPSBzdHIgKyBnZW5lcmF0ZShzZWNvbmRzKTtcbiAgICByZXR1cm4gc3RyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWxwaGFiZXQgPSByZXF1aXJlKCcuL2FscGhhYmV0Jyk7XG52YXIgcmFuZG9tID0gcmVxdWlyZSgnLi9yYW5kb20vcmFuZG9tLWJ5dGUnKTtcbnZhciBmb3JtYXQgPSByZXF1aXJlKCduYW5vaWQvZm9ybWF0Jyk7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlKG51bWJlcikge1xuICAgIHZhciBsb29wQ291bnRlciA9IDA7XG4gICAgdmFyIGRvbmU7XG5cbiAgICB2YXIgc3RyID0gJyc7XG5cbiAgICB3aGlsZSAoIWRvbmUpIHtcbiAgICAgICAgc3RyID0gc3RyICsgZm9ybWF0KHJhbmRvbSwgYWxwaGFiZXQuZ2V0KCksIDEpO1xuICAgICAgICBkb25lID0gbnVtYmVyIDwgKE1hdGgucG93KDE2LCBsb29wQ291bnRlciArIDEgKSApO1xuICAgICAgICBsb29wQ291bnRlcisrO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWxwaGFiZXQgPSByZXF1aXJlKCcuL2FscGhhYmV0Jyk7XG52YXIgYnVpbGQgPSByZXF1aXJlKCcuL2J1aWxkJyk7XG52YXIgaXNWYWxpZCA9IHJlcXVpcmUoJy4vaXMtdmFsaWQnKTtcblxuLy8gaWYgeW91IGFyZSB1c2luZyBjbHVzdGVyIG9yIG11bHRpcGxlIHNlcnZlcnMgdXNlIHRoaXMgdG8gbWFrZSBlYWNoIGluc3RhbmNlXG4vLyBoYXMgYSB1bmlxdWUgdmFsdWUgZm9yIHdvcmtlclxuLy8gTm90ZTogSSBkb24ndCBrbm93IGlmIHRoaXMgaXMgYXV0b21hdGljYWxseSBzZXQgd2hlbiB1c2luZyB0aGlyZFxuLy8gcGFydHkgY2x1c3RlciBzb2x1dGlvbnMgc3VjaCBhcyBwbTIuXG52YXIgY2x1c3RlcldvcmtlcklkID0gcmVxdWlyZSgnLi91dGlsL2NsdXN0ZXItd29ya2VyLWlkJykgfHwgMDtcblxuLyoqXG4gKiBTZXQgdGhlIHNlZWQuXG4gKiBIaWdobHkgcmVjb21tZW5kZWQgaWYgeW91IGRvbid0IHdhbnQgcGVvcGxlIHRvIHRyeSB0byBmaWd1cmUgb3V0IHlvdXIgaWQgc2NoZW1hLlxuICogZXhwb3NlZCBhcyBzaG9ydGlkLnNlZWQoaW50KVxuICogQHBhcmFtIHNlZWQgSW50ZWdlciB2YWx1ZSB0byBzZWVkIHRoZSByYW5kb20gYWxwaGFiZXQuICBBTFdBWVMgVVNFIFRIRSBTQU1FIFNFRUQgb3IgeW91IG1pZ2h0IGdldCBvdmVybGFwcy5cbiAqL1xuZnVuY3Rpb24gc2VlZChzZWVkVmFsdWUpIHtcbiAgICBhbHBoYWJldC5zZWVkKHNlZWRWYWx1ZSk7XG4gICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY2x1c3RlciB3b3JrZXIgb3IgbWFjaGluZSBpZFxuICogZXhwb3NlZCBhcyBzaG9ydGlkLndvcmtlcihpbnQpXG4gKiBAcGFyYW0gd29ya2VySWQgd29ya2VyIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlci4gIE51bWJlciBsZXNzIHRoYW4gMTYgaXMgcmVjb21tZW5kZWQuXG4gKiByZXR1cm5zIHNob3J0aWQgbW9kdWxlIHNvIGl0IGNhbiBiZSBjaGFpbmVkLlxuICovXG5mdW5jdGlvbiB3b3JrZXIod29ya2VySWQpIHtcbiAgICBjbHVzdGVyV29ya2VySWQgPSB3b3JrZXJJZDtcbiAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8qKlxuICpcbiAqIHNldHMgbmV3IGNoYXJhY3RlcnMgdG8gdXNlIGluIHRoZSBhbHBoYWJldFxuICogcmV0dXJucyB0aGUgc2h1ZmZsZWQgYWxwaGFiZXRcbiAqL1xuZnVuY3Rpb24gY2hhcmFjdGVycyhuZXdDaGFyYWN0ZXJzKSB7XG4gICAgaWYgKG5ld0NoYXJhY3RlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbHBoYWJldC5jaGFyYWN0ZXJzKG5ld0NoYXJhY3RlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBhbHBoYWJldC5zaHVmZmxlZCgpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIHVuaXF1ZSBpZFxuICogUmV0dXJucyBzdHJpbmcgaWRcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGUoKSB7XG4gIHJldHVybiBidWlsZChjbHVzdGVyV29ya2VySWQpO1xufVxuXG4vLyBFeHBvcnQgYWxsIG90aGVyIGZ1bmN0aW9ucyBhcyBwcm9wZXJ0aWVzIG9mIHRoZSBnZW5lcmF0ZSBmdW5jdGlvblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZTtcbm1vZHVsZS5leHBvcnRzLmdlbmVyYXRlID0gZ2VuZXJhdGU7XG5tb2R1bGUuZXhwb3J0cy5zZWVkID0gc2VlZDtcbm1vZHVsZS5leHBvcnRzLndvcmtlciA9IHdvcmtlcjtcbm1vZHVsZS5leHBvcnRzLmNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzO1xubW9kdWxlLmV4cG9ydHMuaXNWYWxpZCA9IGlzVmFsaWQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWxwaGFiZXQgPSByZXF1aXJlKCcuL2FscGhhYmV0Jyk7XG5cbmZ1bmN0aW9uIGlzU2hvcnRJZChpZCkge1xuICAgIGlmICghaWQgfHwgdHlwZW9mIGlkICE9PSAnc3RyaW5nJyB8fCBpZC5sZW5ndGggPCA2ICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG5vbkFscGhhYmV0aWMgPSBuZXcgUmVnRXhwKCdbXicgK1xuICAgICAgYWxwaGFiZXQuZ2V0KCkucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy4tXS9nLCAnXFxcXCQmJykgK1xuICAgICddJyk7XG4gICAgcmV0dXJuICFub25BbHBoYWJldGljLnRlc3QoaWQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU2hvcnRJZDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNyeXB0byA9IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmICh3aW5kb3cuY3J5cHRvIHx8IHdpbmRvdy5tc0NyeXB0byk7IC8vIElFIDExIHVzZXMgd2luZG93Lm1zQ3J5cHRvXG5cbnZhciByYW5kb21CeXRlO1xuXG5pZiAoIWNyeXB0byB8fCAhY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgIHJhbmRvbUJ5dGUgPSBmdW5jdGlvbihzaXplKSB7XG4gICAgICAgIHZhciBieXRlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICAgICAgYnl0ZXMucHVzaChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfTtcbn0gZWxzZSB7XG4gICAgcmFuZG9tQnl0ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoc2l6ZSkpO1xuICAgIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmFuZG9tQnl0ZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gRm91bmQgdGhpcyBzZWVkLWJhc2VkIHJhbmRvbSBnZW5lcmF0b3Igc29tZXdoZXJlXG4vLyBCYXNlZCBvbiBUaGUgQ2VudHJhbCBSYW5kb21pemVyIDEuMyAoQykgMTk5NyBieSBQYXVsIEhvdWxlIChob3VsZUBtc2MuY29ybmVsbC5lZHUpXG5cbnZhciBzZWVkID0gMTtcblxuLyoqXG4gKiByZXR1cm4gYSByYW5kb20gbnVtYmVyIGJhc2VkIG9uIGEgc2VlZFxuICogQHBhcmFtIHNlZWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldE5leHRWYWx1ZSgpIHtcbiAgICBzZWVkID0gKHNlZWQgKiA5MzAxICsgNDkyOTcpICUgMjMzMjgwO1xuICAgIHJldHVybiBzZWVkLygyMzMyODAuMCk7XG59XG5cbmZ1bmN0aW9uIHNldFNlZWQoX3NlZWRfKSB7XG4gICAgc2VlZCA9IF9zZWVkXztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbmV4dFZhbHVlOiBnZXROZXh0VmFsdWUsXG4gICAgc2VlZDogc2V0U2VlZFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAwO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJFdlYWtNYXAgPSBHZXRJbnRyaW5zaWMoJyVXZWFrTWFwJScsIHRydWUpO1xudmFyICRNYXAgPSBHZXRJbnRyaW5zaWMoJyVNYXAlJywgdHJ1ZSk7XG5cbnZhciAkd2Vha01hcEdldCA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuZ2V0JywgdHJ1ZSk7XG52YXIgJHdlYWtNYXBTZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwSGFzID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5oYXMnLCB0cnVlKTtcbnZhciAkbWFwR2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICRtYXBTZXQgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuc2V0JywgdHJ1ZSk7XG52YXIgJG1hcEhhcyA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5oYXMnLCB0cnVlKTtcblxuLypcbiAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSBsaXN0IHJldHVybmluZyB0aGUgbm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZVxuICogZ2l2ZW4ga2V5LlxuICpcbiAqIFRoYXQgbm9kZSBpcyBhbHNvIG1vdmVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0IGlmIGl0J3MgYWNjZXNzZWRcbiAqIGFnYWluIHdlIGRvbid0IG5lZWQgdG8gdHJhdmVyc2UgdGhlIHdob2xlIGxpc3QuIEJ5IGRvaW5nIHNvLCBhbGwgdGhlIHJlY2VudGx5XG4gKiB1c2VkIG5vZGVzIGNhbiBiZSBhY2Nlc3NlZCByZWxhdGl2ZWx5IHF1aWNrbHkuXG4gKi9cbnZhciBsaXN0R2V0Tm9kZSA9IGZ1bmN0aW9uIChsaXN0LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRmb3IgKHZhciBwcmV2ID0gbGlzdCwgY3VycjsgKGN1cnIgPSBwcmV2Lm5leHQpICE9PSBudWxsOyBwcmV2ID0gY3Vycikge1xuXHRcdGlmIChjdXJyLmtleSA9PT0ga2V5KSB7XG5cdFx0XHRwcmV2Lm5leHQgPSBjdXJyLm5leHQ7XG5cdFx0XHRjdXJyLm5leHQgPSBsaXN0Lm5leHQ7XG5cdFx0XHRsaXN0Lm5leHQgPSBjdXJyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRyZXR1cm4gY3Vycjtcblx0XHR9XG5cdH1cbn07XG5cbnZhciBsaXN0R2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSkge1xuXHR2YXIgbm9kZSA9IGxpc3RHZXROb2RlKG9iamVjdHMsIGtleSk7XG5cdHJldHVybiBub2RlICYmIG5vZGUudmFsdWU7XG59O1xudmFyIGxpc3RTZXQgPSBmdW5jdGlvbiAob2JqZWN0cywga2V5LCB2YWx1ZSkge1xuXHR2YXIgbm9kZSA9IGxpc3RHZXROb2RlKG9iamVjdHMsIGtleSk7XG5cdGlmIChub2RlKSB7XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFByZXBlbmQgdGhlIG5ldyBub2RlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3Rcblx0XHRvYmplY3RzLm5leHQgPSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRcdGtleToga2V5LFxuXHRcdFx0bmV4dDogb2JqZWN0cy5uZXh0LFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxufTtcbnZhciBsaXN0SGFzID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSkge1xuXHRyZXR1cm4gISFsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRTaWRlQ2hhbm5lbCgpIHtcblx0dmFyICR3bTtcblx0dmFyICRtO1xuXHR2YXIgJG87XG5cdHZhciBjaGFubmVsID0ge1xuXHRcdGFzc2VydDogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCFjaGFubmVsLmhhcyhrZXkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdTaWRlIGNoYW5uZWwgZG9lcyBub3QgY29udGFpbiAnICsgaW5zcGVjdChrZXkpKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGdldDogZnVuY3Rpb24gKGtleSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5cdFx0XHRpZiAoJFdlYWtNYXAgJiYga2V5ICYmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRpZiAoJHdtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICR3ZWFrTWFwR2V0KCR3bSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICgkTWFwKSB7XG5cdFx0XHRcdGlmICgkbSkge1xuXHRcdFx0XHRcdHJldHVybiAkbWFwR2V0KCRtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoJG8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sb25lbHktaWZcblx0XHRcdFx0XHRyZXR1cm4gbGlzdEdldCgkbywga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aGFzOiBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRpZiAoJFdlYWtNYXAgJiYga2V5ICYmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRpZiAoJHdtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICR3ZWFrTWFwSGFzKCR3bSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICgkTWFwKSB7XG5cdFx0XHRcdGlmICgkbSkge1xuXHRcdFx0XHRcdHJldHVybiAkbWFwSGFzKCRtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoJG8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sb25lbHktaWZcblx0XHRcdFx0XHRyZXR1cm4gbGlzdEhhcygkbywga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCEkd20pIHtcblx0XHRcdFx0XHQkd20gPSBuZXcgJFdlYWtNYXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQkd2Vha01hcFNldCgkd20sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmICgkTWFwKSB7XG5cdFx0XHRcdGlmICghJG0pIHtcblx0XHRcdFx0XHQkbSA9IG5ldyAkTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JG1hcFNldCgkbSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoISRvKSB7XG5cdFx0XHRcdFx0Lypcblx0XHRcdFx0XHQgKiBJbml0aWFsaXplIHRoZSBsaW5rZWQgbGlzdCBhcyBhbiBlbXB0eSBub2RlLCBzbyB0aGF0IHdlIGRvbid0IGhhdmVcblx0XHRcdFx0XHQgKiB0byBzcGVjaWFsLWNhc2UgaGFuZGxpbmcgb2YgdGhlIGZpcnN0IG5vZGU6IHdlIGNhbiBhbHdheXMgcmVmZXIgdG9cblx0XHRcdFx0XHQgKiBpdCBhcyAocHJldmlvdXMgbm9kZSkubmV4dCwgaW5zdGVhZCBvZiBzb21ldGhpbmcgbGlrZSAobGlzdCkuaGVhZFxuXHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdCRvID0geyBrZXk6IHt9LCBuZXh0OiBudWxsIH07XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdFNldCgkbywga2V5LCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gY2hhbm5lbDtcbn07XG4iLCIvKiEgc2ltcGxlLXBlZXIuIE1JVCBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc2ltcGxlLXBlZXInKVxuY29uc3QgZ2V0QnJvd3NlclJUQyA9IHJlcXVpcmUoJ2dldC1icm93c2VyLXJ0YycpXG5jb25zdCByYW5kb21ieXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpXG5jb25zdCBxdWV1ZU1pY3JvdGFzayA9IHJlcXVpcmUoJ3F1ZXVlLW1pY3JvdGFzaycpIC8vIFRPRE86IHJlbW92ZSB3aGVuIE5vZGUgMTAgaXMgbm90IHN1cHBvcnRlZFxuY29uc3QgZXJyQ29kZSA9IHJlcXVpcmUoJ2Vyci1jb2RlJylcbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG5jb25zdCBNQVhfQlVGRkVSRURfQU1PVU5UID0gNjQgKiAxMDI0XG5jb25zdCBJQ0VDT01QTEVURV9USU1FT1VUID0gNSAqIDEwMDBcbmNvbnN0IENIQU5ORUxfQ0xPU0lOR19USU1FT1VUID0gNSAqIDEwMDBcblxuLy8gSEFDSzogRmlsdGVyIHRyaWNrbGUgbGluZXMgd2hlbiB0cmlja2xlIGlzIGRpc2FibGVkICMzNTRcbmZ1bmN0aW9uIGZpbHRlclRyaWNrbGUgKHNkcCkge1xuICByZXR1cm4gc2RwLnJlcGxhY2UoL2E9aWNlLW9wdGlvbnM6dHJpY2tsZVxcc1xcbi9nLCAnJylcbn1cblxuZnVuY3Rpb24gd2FybiAobWVzc2FnZSkge1xuICBjb25zb2xlLndhcm4obWVzc2FnZSlcbn1cblxuLyoqXG4gKiBXZWJSVEMgcGVlciBjb25uZWN0aW9uLiBTYW1lIEFQSSBhcyBub2RlIGNvcmUgYG5ldC5Tb2NrZXRgLCBwbHVzIGEgZmV3IGV4dHJhIG1ldGhvZHMuXG4gKiBEdXBsZXggc3RyZWFtLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqL1xuY2xhc3MgUGVlciBleHRlbmRzIHN0cmVhbS5EdXBsZXgge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIG9wdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFsbG93SGFsZk9wZW46IGZhbHNlXG4gICAgfSwgb3B0cylcblxuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzLl9pZCA9IHJhbmRvbWJ5dGVzKDQpLnRvU3RyaW5nKCdoZXgnKS5zbGljZSgwLCA3KVxuICAgIHRoaXMuX2RlYnVnKCduZXcgcGVlciAlbycsIG9wdHMpXG5cbiAgICB0aGlzLmNoYW5uZWxOYW1lID0gb3B0cy5pbml0aWF0b3JcbiAgICAgID8gb3B0cy5jaGFubmVsTmFtZSB8fCByYW5kb21ieXRlcygyMCkudG9TdHJpbmcoJ2hleCcpXG4gICAgICA6IG51bGxcblxuICAgIHRoaXMuaW5pdGlhdG9yID0gb3B0cy5pbml0aWF0b3IgfHwgZmFsc2VcbiAgICB0aGlzLmNoYW5uZWxDb25maWcgPSBvcHRzLmNoYW5uZWxDb25maWcgfHwgUGVlci5jaGFubmVsQ29uZmlnXG4gICAgdGhpcy5jaGFubmVsTmVnb3RpYXRlZCA9IHRoaXMuY2hhbm5lbENvbmZpZy5uZWdvdGlhdGVkXG4gICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBQZWVyLmNvbmZpZywgb3B0cy5jb25maWcpXG4gICAgdGhpcy5vZmZlck9wdGlvbnMgPSBvcHRzLm9mZmVyT3B0aW9ucyB8fCB7fVxuICAgIHRoaXMuYW5zd2VyT3B0aW9ucyA9IG9wdHMuYW5zd2VyT3B0aW9ucyB8fCB7fVxuICAgIHRoaXMuc2RwVHJhbnNmb3JtID0gb3B0cy5zZHBUcmFuc2Zvcm0gfHwgKHNkcCA9PiBzZHApXG4gICAgdGhpcy5zdHJlYW1zID0gb3B0cy5zdHJlYW1zIHx8IChvcHRzLnN0cmVhbSA/IFtvcHRzLnN0cmVhbV0gOiBbXSkgLy8gc3VwcG9ydCBvbGQgXCJzdHJlYW1cIiBvcHRpb25cbiAgICB0aGlzLnRyaWNrbGUgPSBvcHRzLnRyaWNrbGUgIT09IHVuZGVmaW5lZCA/IG9wdHMudHJpY2tsZSA6IHRydWVcbiAgICB0aGlzLmFsbG93SGFsZlRyaWNrbGUgPSBvcHRzLmFsbG93SGFsZlRyaWNrbGUgIT09IHVuZGVmaW5lZCA/IG9wdHMuYWxsb3dIYWxmVHJpY2tsZSA6IGZhbHNlXG4gICAgdGhpcy5pY2VDb21wbGV0ZVRpbWVvdXQgPSBvcHRzLmljZUNvbXBsZXRlVGltZW91dCB8fCBJQ0VDT01QTEVURV9USU1FT1VUXG5cbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlXG4gICAgdGhpcy5kZXN0cm95aW5nID0gZmFsc2VcbiAgICB0aGlzLl9jb25uZWN0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5yZW1vdGVBZGRyZXNzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5yZW1vdGVGYW1pbHkgPSB1bmRlZmluZWRcbiAgICB0aGlzLnJlbW90ZVBvcnQgPSB1bmRlZmluZWRcbiAgICB0aGlzLmxvY2FsQWRkcmVzcyA9IHVuZGVmaW5lZFxuICAgIHRoaXMubG9jYWxGYW1pbHkgPSB1bmRlZmluZWRcbiAgICB0aGlzLmxvY2FsUG9ydCA9IHVuZGVmaW5lZFxuXG4gICAgdGhpcy5fd3J0YyA9IChvcHRzLndydGMgJiYgdHlwZW9mIG9wdHMud3J0YyA9PT0gJ29iamVjdCcpXG4gICAgICA/IG9wdHMud3J0Y1xuICAgICAgOiBnZXRCcm93c2VyUlRDKClcblxuICAgIGlmICghdGhpcy5fd3J0Yykge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IGVyckNvZGUobmV3IEVycm9yKCdObyBXZWJSVEMgc3VwcG9ydDogU3BlY2lmeSBgb3B0cy53cnRjYCBvcHRpb24gaW4gdGhpcyBlbnZpcm9ubWVudCcpLCAnRVJSX1dFQlJUQ19TVVBQT1JUJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVyckNvZGUobmV3IEVycm9yKCdObyBXZWJSVEMgc3VwcG9ydDogTm90IGEgc3VwcG9ydGVkIGJyb3dzZXInKSwgJ0VSUl9XRUJSVENfU1VQUE9SVCcpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcGNSZWFkeSA9IGZhbHNlXG4gICAgdGhpcy5fY2hhbm5lbFJlYWR5ID0gZmFsc2VcbiAgICB0aGlzLl9pY2VDb21wbGV0ZSA9IGZhbHNlIC8vIGljZSBjYW5kaWRhdGUgdHJpY2tsZSBkb25lIChnb3QgbnVsbCBjYW5kaWRhdGUpXG4gICAgdGhpcy5faWNlQ29tcGxldGVUaW1lciA9IG51bGwgLy8gc2VuZCBhbiBvZmZlci9hbnN3ZXIgYW55d2F5IGFmdGVyIHNvbWUgdGltZW91dFxuICAgIHRoaXMuX2NoYW5uZWwgPSBudWxsXG4gICAgdGhpcy5fcGVuZGluZ0NhbmRpZGF0ZXMgPSBbXVxuXG4gICAgdGhpcy5faXNOZWdvdGlhdGluZyA9IGZhbHNlIC8vIGlzIHRoaXMgcGVlciB3YWl0aW5nIGZvciBuZWdvdGlhdGlvbiB0byBjb21wbGV0ZT9cbiAgICB0aGlzLl9maXJzdE5lZ290aWF0aW9uID0gdHJ1ZVxuICAgIHRoaXMuX2JhdGNoZWROZWdvdGlhdGlvbiA9IGZhbHNlIC8vIGJhdGNoIHN5bmNocm9ub3VzIG5lZ290aWF0aW9uc1xuICAgIHRoaXMuX3F1ZXVlZE5lZ290aWF0aW9uID0gZmFsc2UgLy8gaXMgdGhlcmUgYSBxdWV1ZWQgbmVnb3RpYXRpb24gcmVxdWVzdD9cbiAgICB0aGlzLl9zZW5kZXJzQXdhaXRpbmdTdGFibGUgPSBbXVxuICAgIHRoaXMuX3NlbmRlck1hcCA9IG5ldyBNYXAoKVxuICAgIHRoaXMuX2Nsb3NpbmdJbnRlcnZhbCA9IG51bGxcblxuICAgIHRoaXMuX3JlbW90ZVRyYWNrcyA9IFtdXG4gICAgdGhpcy5fcmVtb3RlU3RyZWFtcyA9IFtdXG5cbiAgICB0aGlzLl9jaHVuayA9IG51bGxcbiAgICB0aGlzLl9jYiA9IG51bGxcbiAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9wYyA9IG5ldyAodGhpcy5fd3J0Yy5SVENQZWVyQ29ubmVjdGlvbikodGhpcy5jb25maWcpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShlcnIsICdFUlJfUENfQ09OU1RSVUNUT1InKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFdlIHByZWZlciBmZWF0dXJlIGRldGVjdGlvbiB3aGVuZXZlciBwb3NzaWJsZSwgYnV0IHNvbWV0aW1lcyB0aGF0J3Mgbm90XG4gICAgLy8gcG9zc2libGUgZm9yIGNlcnRhaW4gaW1wbGVtZW50YXRpb25zLlxuICAgIHRoaXMuX2lzUmVhY3ROYXRpdmVXZWJydGMgPSB0eXBlb2YgdGhpcy5fcGMuX3BlZXJDb25uZWN0aW9uSWQgPT09ICdudW1iZXInXG5cbiAgICB0aGlzLl9wYy5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX29uSWNlU3RhdGVDaGFuZ2UoKVxuICAgIH1cbiAgICB0aGlzLl9wYy5vbmljZWdhdGhlcmluZ3N0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fb25JY2VTdGF0ZUNoYW5nZSgpXG4gICAgfVxuICAgIHRoaXMuX3BjLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fb25Db25uZWN0aW9uU3RhdGVDaGFuZ2UoKVxuICAgIH1cbiAgICB0aGlzLl9wYy5vbnNpZ25hbGluZ3N0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fb25TaWduYWxpbmdTdGF0ZUNoYW5nZSgpXG4gICAgfVxuICAgIHRoaXMuX3BjLm9uaWNlY2FuZGlkYXRlID0gZXZlbnQgPT4ge1xuICAgICAgdGhpcy5fb25JY2VDYW5kaWRhdGUoZXZlbnQpXG4gICAgfVxuXG4gICAgLy8gSEFDSzogRml4IGZvciBvZGQgRmlyZWZveCBiZWhhdmlvciwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL3NpbXBsZS1wZWVyL3B1bGwvNzgzXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9wYy5wZWVySWRlbnRpdHkgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLl9wYy5wZWVySWRlbnRpdHkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdGhpcy5kZXN0cm95KGVyckNvZGUoZXJyLCAnRVJSX1BDX1BFRVJfSURFTlRJVFknKSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gT3RoZXIgc3BlYyBldmVudHMsIHVudXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uOlxuICAgIC8vIC0gb25jb25uZWN0aW9uc3RhdGVjaGFuZ2VcbiAgICAvLyAtIG9uaWNlY2FuZGlkYXRlZXJyb3JcbiAgICAvLyAtIG9uZmluZ2VycHJpbnRmYWlsdXJlXG4gICAgLy8gLSBvbm5lZ290aWF0aW9ubmVlZGVkXG5cbiAgICBpZiAodGhpcy5pbml0aWF0b3IgfHwgdGhpcy5jaGFubmVsTmVnb3RpYXRlZCkge1xuICAgICAgdGhpcy5fc2V0dXBEYXRhKHtcbiAgICAgICAgY2hhbm5lbDogdGhpcy5fcGMuY3JlYXRlRGF0YUNoYW5uZWwodGhpcy5jaGFubmVsTmFtZSwgdGhpcy5jaGFubmVsQ29uZmlnKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcGMub25kYXRhY2hhbm5lbCA9IGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5fc2V0dXBEYXRhKGV2ZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnN0cmVhbXMpIHtcbiAgICAgIHRoaXMuc3RyZWFtcy5mb3JFYWNoKHN0cmVhbSA9PiB7XG4gICAgICAgIHRoaXMuYWRkU3RyZWFtKHN0cmVhbSlcbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMuX3BjLm9udHJhY2sgPSBldmVudCA9PiB7XG4gICAgICB0aGlzLl9vblRyYWNrKGV2ZW50KVxuICAgIH1cblxuICAgIHRoaXMuX2RlYnVnKCdpbml0aWFsIG5lZ290aWF0aW9uJylcbiAgICB0aGlzLl9uZWVkc05lZ290aWF0aW9uKClcblxuICAgIHRoaXMuX29uRmluaXNoQm91bmQgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9vbkZpbmlzaCgpXG4gICAgfVxuICAgIHRoaXMub25jZSgnZmluaXNoJywgdGhpcy5fb25GaW5pc2hCb3VuZClcbiAgfVxuXG4gIGdldCBidWZmZXJTaXplICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2NoYW5uZWwgJiYgdGhpcy5fY2hhbm5lbC5idWZmZXJlZEFtb3VudCkgfHwgMFxuICB9XG5cbiAgLy8gSEFDSzogaXQncyBwb3NzaWJsZSBjaGFubmVsLnJlYWR5U3RhdGUgaXMgXCJjbG9zaW5nXCIgYmVmb3JlIHBlZXIuZGVzdHJveSgpIGZpcmVzXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTg4Mjc0M1xuICBnZXQgY29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2Nvbm5lY3RlZCAmJiB0aGlzLl9jaGFubmVsLnJlYWR5U3RhdGUgPT09ICdvcGVuJylcbiAgfVxuXG4gIGFkZHJlc3MgKCkge1xuICAgIHJldHVybiB7IHBvcnQ6IHRoaXMubG9jYWxQb3J0LCBmYW1pbHk6IHRoaXMubG9jYWxGYW1pbHksIGFkZHJlc3M6IHRoaXMubG9jYWxBZGRyZXNzIH1cbiAgfVxuXG4gIHNpZ25hbCAoZGF0YSkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3lpbmcpIHJldHVyblxuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ2Nhbm5vdCBzaWduYWwgYWZ0ZXIgcGVlciBpcyBkZXN0cm95ZWQnKSwgJ0VSUl9ERVNUUk9ZRUQnKVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2RlYnVnKCdzaWduYWwoKScpXG5cbiAgICBpZiAoZGF0YS5yZW5lZ290aWF0ZSAmJiB0aGlzLmluaXRpYXRvcikge1xuICAgICAgdGhpcy5fZGVidWcoJ2dvdCByZXF1ZXN0IHRvIHJlbmVnb3RpYXRlJylcbiAgICAgIHRoaXMuX25lZWRzTmVnb3RpYXRpb24oKVxuICAgIH1cbiAgICBpZiAoZGF0YS50cmFuc2NlaXZlclJlcXVlc3QgJiYgdGhpcy5pbml0aWF0b3IpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCdnb3QgcmVxdWVzdCBmb3IgdHJhbnNjZWl2ZXInKVxuICAgICAgdGhpcy5hZGRUcmFuc2NlaXZlcihkYXRhLnRyYW5zY2VpdmVyUmVxdWVzdC5raW5kLCBkYXRhLnRyYW5zY2VpdmVyUmVxdWVzdC5pbml0KVxuICAgIH1cbiAgICBpZiAoZGF0YS5jYW5kaWRhdGUpIHtcbiAgICAgIGlmICh0aGlzLl9wYy5yZW1vdGVEZXNjcmlwdGlvbiAmJiB0aGlzLl9wYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlKSB7XG4gICAgICAgIHRoaXMuX2FkZEljZUNhbmRpZGF0ZShkYXRhLmNhbmRpZGF0ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdDYW5kaWRhdGVzLnB1c2goZGF0YS5jYW5kaWRhdGUpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLnNkcCkge1xuICAgICAgdGhpcy5fcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24obmV3ICh0aGlzLl93cnRjLlJUQ1Nlc3Npb25EZXNjcmlwdGlvbikoZGF0YSkpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuXG4gICAgICAgICAgdGhpcy5fcGVuZGluZ0NhbmRpZGF0ZXMuZm9yRWFjaChjYW5kaWRhdGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSlcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMuX3BlbmRpbmdDYW5kaWRhdGVzID0gW11cblxuICAgICAgICAgIGlmICh0aGlzLl9wYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlID09PSAnb2ZmZXInKSB0aGlzLl9jcmVhdGVBbnN3ZXIoKVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShlcnIsICdFUlJfU0VUX1JFTU9URV9ERVNDUklQVElPTicpKVxuICAgICAgICB9KVxuICAgIH1cbiAgICBpZiAoIWRhdGEuc2RwICYmICFkYXRhLmNhbmRpZGF0ZSAmJiAhZGF0YS5yZW5lZ290aWF0ZSAmJiAhZGF0YS50cmFuc2NlaXZlclJlcXVlc3QpIHtcbiAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKG5ldyBFcnJvcignc2lnbmFsKCkgY2FsbGVkIHdpdGggaW52YWxpZCBzaWduYWwgZGF0YScpLCAnRVJSX1NJR05BTElORycpKVxuICAgIH1cbiAgfVxuXG4gIF9hZGRJY2VDYW5kaWRhdGUgKGNhbmRpZGF0ZSkge1xuICAgIGNvbnN0IGljZUNhbmRpZGF0ZU9iaiA9IG5ldyB0aGlzLl93cnRjLlJUQ0ljZUNhbmRpZGF0ZShjYW5kaWRhdGUpXG4gICAgdGhpcy5fcGMuYWRkSWNlQ2FuZGlkYXRlKGljZUNhbmRpZGF0ZU9iailcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBpZiAoIWljZUNhbmRpZGF0ZU9iai5hZGRyZXNzIHx8IGljZUNhbmRpZGF0ZU9iai5hZGRyZXNzLmVuZHNXaXRoKCcubG9jYWwnKSkge1xuICAgICAgICAgIHdhcm4oJ0lnbm9yaW5nIHVuc3VwcG9ydGVkIElDRSBjYW5kaWRhdGUuJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShlcnIsICdFUlJfQUREX0lDRV9DQU5ESURBVEUnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHRleHQvYmluYXJ5IGRhdGEgdG8gdGhlIHJlbW90ZSBwZWVyLlxuICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyVmlld3xBcnJheUJ1ZmZlcnxCdWZmZXJ8c3RyaW5nfEJsb2J9IGNodW5rXG4gICAqL1xuICBzZW5kIChjaHVuaykge1xuICAgIGlmICh0aGlzLmRlc3Ryb3lpbmcpIHJldHVyblxuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ2Nhbm5vdCBzZW5kIGFmdGVyIHBlZXIgaXMgZGVzdHJveWVkJyksICdFUlJfREVTVFJPWUVEJylcbiAgICB0aGlzLl9jaGFubmVsLnNlbmQoY2h1bmspXG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgVHJhbnNjZWl2ZXIgdG8gdGhlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBraW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbml0XG4gICAqL1xuICBhZGRUcmFuc2NlaXZlciAoa2luZCwgaW5pdCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3lpbmcpIHJldHVyblxuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ2Nhbm5vdCBhZGRUcmFuc2NlaXZlciBhZnRlciBwZWVyIGlzIGRlc3Ryb3llZCcpLCAnRVJSX0RFU1RST1lFRCcpXG4gICAgdGhpcy5fZGVidWcoJ2FkZFRyYW5zY2VpdmVyKCknKVxuXG4gICAgaWYgKHRoaXMuaW5pdGlhdG9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9wYy5hZGRUcmFuc2NlaXZlcihraW5kLCBpbml0KVxuICAgICAgICB0aGlzLl9uZWVkc05lZ290aWF0aW9uKClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShlcnIsICdFUlJfQUREX1RSQU5TQ0VJVkVSJykpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1pdCgnc2lnbmFsJywgeyAvLyByZXF1ZXN0IGluaXRpYXRvciB0byByZW5lZ290aWF0ZVxuICAgICAgICB0eXBlOiAndHJhbnNjZWl2ZXJSZXF1ZXN0JyxcbiAgICAgICAgdHJhbnNjZWl2ZXJSZXF1ZXN0OiB7IGtpbmQsIGluaXQgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgTWVkaWFTdHJlYW0gdG8gdGhlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IHN0cmVhbVxuICAgKi9cbiAgYWRkU3RyZWFtIChzdHJlYW0pIHtcbiAgICBpZiAodGhpcy5kZXN0cm95aW5nKSByZXR1cm5cbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHRocm93IGVyckNvZGUobmV3IEVycm9yKCdjYW5ub3QgYWRkU3RyZWFtIGFmdGVyIHBlZXIgaXMgZGVzdHJveWVkJyksICdFUlJfREVTVFJPWUVEJylcbiAgICB0aGlzLl9kZWJ1ZygnYWRkU3RyZWFtKCknKVxuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgdGhpcy5hZGRUcmFjayh0cmFjaywgc3RyZWFtKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgTWVkaWFTdHJlYW1UcmFjayB0byB0aGUgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtNZWRpYVN0cmVhbVRyYWNrfSB0cmFja1xuICAgKiBAcGFyYW0ge01lZGlhU3RyZWFtfSBzdHJlYW1cbiAgICovXG4gIGFkZFRyYWNrICh0cmFjaywgc3RyZWFtKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWluZykgcmV0dXJuXG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignY2Fubm90IGFkZFRyYWNrIGFmdGVyIHBlZXIgaXMgZGVzdHJveWVkJyksICdFUlJfREVTVFJPWUVEJylcbiAgICB0aGlzLl9kZWJ1ZygnYWRkVHJhY2soKScpXG5cbiAgICBjb25zdCBzdWJtYXAgPSB0aGlzLl9zZW5kZXJNYXAuZ2V0KHRyYWNrKSB8fCBuZXcgTWFwKCkgLy8gbmVzdGVkIE1hcHMgbWFwIFt0cmFjaywgc3RyZWFtXSB0byBzZW5kZXJcbiAgICBsZXQgc2VuZGVyID0gc3VibWFwLmdldChzdHJlYW0pXG4gICAgaWYgKCFzZW5kZXIpIHtcbiAgICAgIHNlbmRlciA9IHRoaXMuX3BjLmFkZFRyYWNrKHRyYWNrLCBzdHJlYW0pXG4gICAgICBzdWJtYXAuc2V0KHN0cmVhbSwgc2VuZGVyKVxuICAgICAgdGhpcy5fc2VuZGVyTWFwLnNldCh0cmFjaywgc3VibWFwKVxuICAgICAgdGhpcy5fbmVlZHNOZWdvdGlhdGlvbigpXG4gICAgfSBlbHNlIGlmIChzZW5kZXIucmVtb3ZlZCkge1xuICAgICAgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ1RyYWNrIGhhcyBiZWVuIHJlbW92ZWQuIFlvdSBzaG91bGQgZW5hYmxlL2Rpc2FibGUgdHJhY2tzIHRoYXQgeW91IHdhbnQgdG8gcmUtYWRkLicpLCAnRVJSX1NFTkRFUl9SRU1PVkVEJylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ1RyYWNrIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhhdCBzdHJlYW0uJyksICdFUlJfU0VOREVSX0FMUkVBRFlfQURERUQnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgTWVkaWFTdHJlYW1UcmFjayBieSBhbm90aGVyIGluIHRoZSBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge01lZGlhU3RyZWFtVHJhY2t9IG9sZFRyYWNrXG4gICAqIEBwYXJhbSB7TWVkaWFTdHJlYW1UcmFja30gbmV3VHJhY2tcbiAgICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gc3RyZWFtXG4gICAqL1xuICByZXBsYWNlVHJhY2sgKG9sZFRyYWNrLCBuZXdUcmFjaywgc3RyZWFtKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWluZykgcmV0dXJuXG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignY2Fubm90IHJlcGxhY2VUcmFjayBhZnRlciBwZWVyIGlzIGRlc3Ryb3llZCcpLCAnRVJSX0RFU1RST1lFRCcpXG4gICAgdGhpcy5fZGVidWcoJ3JlcGxhY2VUcmFjaygpJylcblxuICAgIGNvbnN0IHN1Ym1hcCA9IHRoaXMuX3NlbmRlck1hcC5nZXQob2xkVHJhY2spXG4gICAgY29uc3Qgc2VuZGVyID0gc3VibWFwID8gc3VibWFwLmdldChzdHJlYW0pIDogbnVsbFxuICAgIGlmICghc2VuZGVyKSB7XG4gICAgICB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignQ2Fubm90IHJlcGxhY2UgdHJhY2sgdGhhdCB3YXMgbmV2ZXIgYWRkZWQuJyksICdFUlJfVFJBQ0tfTk9UX0FEREVEJylcbiAgICB9XG4gICAgaWYgKG5ld1RyYWNrKSB0aGlzLl9zZW5kZXJNYXAuc2V0KG5ld1RyYWNrLCBzdWJtYXApXG5cbiAgICBpZiAoc2VuZGVyLnJlcGxhY2VUcmFjayAhPSBudWxsKSB7XG4gICAgICBzZW5kZXIucmVwbGFjZVRyYWNrKG5ld1RyYWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShuZXcgRXJyb3IoJ3JlcGxhY2VUcmFjayBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlcicpLCAnRVJSX1VOU1VQUE9SVEVEX1JFUExBQ0VUUkFDSycpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBNZWRpYVN0cmVhbVRyYWNrIGZyb20gdGhlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7TWVkaWFTdHJlYW1UcmFja30gdHJhY2tcbiAgICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gc3RyZWFtXG4gICAqL1xuICByZW1vdmVUcmFjayAodHJhY2ssIHN0cmVhbSkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3lpbmcpIHJldHVyblxuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ2Nhbm5vdCByZW1vdmVUcmFjayBhZnRlciBwZWVyIGlzIGRlc3Ryb3llZCcpLCAnRVJSX0RFU1RST1lFRCcpXG4gICAgdGhpcy5fZGVidWcoJ3JlbW92ZVNlbmRlcigpJylcblxuICAgIGNvbnN0IHN1Ym1hcCA9IHRoaXMuX3NlbmRlck1hcC5nZXQodHJhY2spXG4gICAgY29uc3Qgc2VuZGVyID0gc3VibWFwID8gc3VibWFwLmdldChzdHJlYW0pIDogbnVsbFxuICAgIGlmICghc2VuZGVyKSB7XG4gICAgICB0aHJvdyBlcnJDb2RlKG5ldyBFcnJvcignQ2Fubm90IHJlbW92ZSB0cmFjayB0aGF0IHdhcyBuZXZlciBhZGRlZC4nKSwgJ0VSUl9UUkFDS19OT1RfQURERUQnKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgc2VuZGVyLnJlbW92ZWQgPSB0cnVlXG4gICAgICB0aGlzLl9wYy5yZW1vdmVUcmFjayhzZW5kZXIpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLm5hbWUgPT09ICdOU19FUlJPUl9VTkVYUEVDVEVEJykge1xuICAgICAgICB0aGlzLl9zZW5kZXJzQXdhaXRpbmdTdGFibGUucHVzaChzZW5kZXIpIC8vIEhBQ0s6IEZpcmVmb3ggbXVzdCB3YWl0IHVudGlsIChzaWduYWxpbmdTdGF0ZSA9PT0gc3RhYmxlKSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTMzODc0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShlcnIsICdFUlJfUkVNT1ZFX1RSQUNLJykpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX25lZWRzTmVnb3RpYXRpb24oKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIE1lZGlhU3RyZWFtIGZyb20gdGhlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IHN0cmVhbVxuICAgKi9cbiAgcmVtb3ZlU3RyZWFtIChzdHJlYW0pIHtcbiAgICBpZiAodGhpcy5kZXN0cm95aW5nKSByZXR1cm5cbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHRocm93IGVyckNvZGUobmV3IEVycm9yKCdjYW5ub3QgcmVtb3ZlU3RyZWFtIGFmdGVyIHBlZXIgaXMgZGVzdHJveWVkJyksICdFUlJfREVTVFJPWUVEJylcbiAgICB0aGlzLl9kZWJ1ZygncmVtb3ZlU2VuZGVycygpJylcblxuICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlVHJhY2sodHJhY2ssIHN0cmVhbSlcbiAgICB9KVxuICB9XG5cbiAgX25lZWRzTmVnb3RpYXRpb24gKCkge1xuICAgIHRoaXMuX2RlYnVnKCdfbmVlZHNOZWdvdGlhdGlvbicpXG4gICAgaWYgKHRoaXMuX2JhdGNoZWROZWdvdGlhdGlvbikgcmV0dXJuIC8vIGJhdGNoIHN5bmNocm9ub3VzIHJlbmVnb3RpYXRpb25zXG4gICAgdGhpcy5fYmF0Y2hlZE5lZ290aWF0aW9uID0gdHJ1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHRoaXMuX2JhdGNoZWROZWdvdGlhdGlvbiA9IGZhbHNlXG4gICAgICBpZiAodGhpcy5pbml0aWF0b3IgfHwgIXRoaXMuX2ZpcnN0TmVnb3RpYXRpb24pIHtcbiAgICAgICAgdGhpcy5fZGVidWcoJ3N0YXJ0aW5nIGJhdGNoZWQgbmVnb3RpYXRpb24nKVxuICAgICAgICB0aGlzLm5lZ290aWF0ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kZWJ1Zygnbm9uLWluaXRpYXRvciBpbml0aWFsIG5lZ290aWF0aW9uIHJlcXVlc3QgZGlzY2FyZGVkJylcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZpcnN0TmVnb3RpYXRpb24gPSBmYWxzZVxuICAgIH0pXG4gIH1cblxuICBuZWdvdGlhdGUgKCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3lpbmcpIHJldHVyblxuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgdGhyb3cgZXJyQ29kZShuZXcgRXJyb3IoJ2Nhbm5vdCBuZWdvdGlhdGUgYWZ0ZXIgcGVlciBpcyBkZXN0cm95ZWQnKSwgJ0VSUl9ERVNUUk9ZRUQnKVxuXG4gICAgaWYgKHRoaXMuaW5pdGlhdG9yKSB7XG4gICAgICBpZiAodGhpcy5faXNOZWdvdGlhdGluZykge1xuICAgICAgICB0aGlzLl9xdWV1ZWROZWdvdGlhdGlvbiA9IHRydWVcbiAgICAgICAgdGhpcy5fZGVidWcoJ2FscmVhZHkgbmVnb3RpYXRpbmcsIHF1ZXVlaW5nJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCdzdGFydCBuZWdvdGlhdGlvbicpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBIQUNLOiBDaHJvbWUgY3Jhc2hlcyBpZiB3ZSBpbW1lZGlhdGVseSBjYWxsIGNyZWF0ZU9mZmVyXG4gICAgICAgICAgdGhpcy5fY3JlYXRlT2ZmZXIoKVxuICAgICAgICB9LCAwKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5faXNOZWdvdGlhdGluZykge1xuICAgICAgICB0aGlzLl9xdWV1ZWROZWdvdGlhdGlvbiA9IHRydWVcbiAgICAgICAgdGhpcy5fZGVidWcoJ2FscmVhZHkgbmVnb3RpYXRpbmcsIHF1ZXVlaW5nJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCdyZXF1ZXN0aW5nIG5lZ290aWF0aW9uIGZyb20gaW5pdGlhdG9yJylcbiAgICAgICAgdGhpcy5lbWl0KCdzaWduYWwnLCB7IC8vIHJlcXVlc3QgaW5pdGlhdG9yIHRvIHJlbmVnb3RpYXRlXG4gICAgICAgICAgdHlwZTogJ3JlbmVnb3RpYXRlJyxcbiAgICAgICAgICByZW5lZ290aWF0ZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pc05lZ290aWF0aW5nID0gdHJ1ZVxuICB9XG5cbiAgLy8gVE9ETzogRGVsZXRlIHRoaXMgbWV0aG9kIG9uY2UgcmVhZGFibGUtc3RyZWFtIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBhIGRlZmF1bHRcbiAgLy8gaW1wbGVtZW50YXRpb24gb2YgZGVzdHJveSgpIHRoYXQgYXV0b21hdGljYWxseSBjYWxscyBfZGVzdHJveSgpXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9yZWFkYWJsZS1zdHJlYW0vaXNzdWVzLzI4M1xuICBkZXN0cm95IChlcnIpIHtcbiAgICB0aGlzLl9kZXN0cm95KGVyciwgKCkgPT4ge30pXG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYikge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCB8fCB0aGlzLmRlc3Ryb3lpbmcpIHJldHVyblxuICAgIHRoaXMuZGVzdHJveWluZyA9IHRydWVcblxuICAgIHRoaXMuX2RlYnVnKCdkZXN0cm95aW5nIChlcnJvcjogJXMpJywgZXJyICYmIChlcnIubWVzc2FnZSB8fCBlcnIpKVxuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4geyAvLyBhbGxvdyBldmVudHMgY29uY3VycmVudCB3aXRoIHRoZSBjYWxsIHRvIF9kZXN0cm95KCkgdG8gZmlyZSAoc2VlICM2OTIpXG4gICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgIHRoaXMuZGVzdHJveWluZyA9IGZhbHNlXG5cbiAgICAgIHRoaXMuX2RlYnVnKCdkZXN0cm95IChlcnJvcjogJXMpJywgZXJyICYmIChlcnIubWVzc2FnZSB8fCBlcnIpKVxuXG4gICAgICB0aGlzLnJlYWRhYmxlID0gdGhpcy53cml0YWJsZSA9IGZhbHNlXG5cbiAgICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCkgdGhpcy5wdXNoKG51bGwpXG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQpIHRoaXMuZW5kKClcblxuICAgICAgdGhpcy5fY29ubmVjdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuX3BjUmVhZHkgPSBmYWxzZVxuICAgICAgdGhpcy5fY2hhbm5lbFJlYWR5ID0gZmFsc2VcbiAgICAgIHRoaXMuX3JlbW90ZVRyYWNrcyA9IG51bGxcbiAgICAgIHRoaXMuX3JlbW90ZVN0cmVhbXMgPSBudWxsXG4gICAgICB0aGlzLl9zZW5kZXJNYXAgPSBudWxsXG5cbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fY2xvc2luZ0ludGVydmFsKVxuICAgICAgdGhpcy5fY2xvc2luZ0ludGVydmFsID0gbnVsbFxuXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKVxuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsXG4gICAgICB0aGlzLl9jaHVuayA9IG51bGxcbiAgICAgIHRoaXMuX2NiID0gbnVsbFxuXG4gICAgICBpZiAodGhpcy5fb25GaW5pc2hCb3VuZCkgdGhpcy5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgdGhpcy5fb25GaW5pc2hCb3VuZClcbiAgICAgIHRoaXMuX29uRmluaXNoQm91bmQgPSBudWxsXG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbC5jbG9zZSgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge31cblxuICAgICAgICAvLyBhbGxvdyBldmVudHMgY29uY3VycmVudCB3aXRoIGRlc3RydWN0aW9uIHRvIGJlIGhhbmRsZWRcbiAgICAgICAgdGhpcy5fY2hhbm5lbC5vbm1lc3NhZ2UgPSBudWxsXG4gICAgICAgIHRoaXMuX2NoYW5uZWwub25vcGVuID0gbnVsbFxuICAgICAgICB0aGlzLl9jaGFubmVsLm9uY2xvc2UgPSBudWxsXG4gICAgICAgIHRoaXMuX2NoYW5uZWwub25lcnJvciA9IG51bGxcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9wYykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuX3BjLmNsb3NlKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXG4gICAgICAgIC8vIGFsbG93IGV2ZW50cyBjb25jdXJyZW50IHdpdGggZGVzdHJ1Y3Rpb24gdG8gYmUgaGFuZGxlZFxuICAgICAgICB0aGlzLl9wYy5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IG51bGxcbiAgICAgICAgdGhpcy5fcGMub25pY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSA9IG51bGxcbiAgICAgICAgdGhpcy5fcGMub25zaWduYWxpbmdzdGF0ZWNoYW5nZSA9IG51bGxcbiAgICAgICAgdGhpcy5fcGMub25pY2VjYW5kaWRhdGUgPSBudWxsXG4gICAgICAgIHRoaXMuX3BjLm9udHJhY2sgPSBudWxsXG4gICAgICAgIHRoaXMuX3BjLm9uZGF0YWNoYW5uZWwgPSBudWxsXG4gICAgICB9XG4gICAgICB0aGlzLl9wYyA9IG51bGxcbiAgICAgIHRoaXMuX2NoYW5uZWwgPSBudWxsXG5cbiAgICAgIGlmIChlcnIpIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB0aGlzLmVtaXQoJ2Nsb3NlJylcbiAgICAgIGNiKClcbiAgICB9KVxuICB9XG5cbiAgX3NldHVwRGF0YSAoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LmNoYW5uZWwpIHtcbiAgICAgIC8vIEluIHNvbWUgc2l0dWF0aW9ucyBgcGMuY3JlYXRlRGF0YUNoYW5uZWwoKWAgcmV0dXJucyBgdW5kZWZpbmVkYCAoaW4gd3J0YyksXG4gICAgICAvLyB3aGljaCBpcyBpbnZhbGlkIGJlaGF2aW9yLiBIYW5kbGUgaXQgZ3JhY2VmdWxseS5cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9zaW1wbGUtcGVlci9pc3N1ZXMvMTYzXG4gICAgICByZXR1cm4gdGhpcy5kZXN0cm95KGVyckNvZGUobmV3IEVycm9yKCdEYXRhIGNoYW5uZWwgZXZlbnQgaXMgbWlzc2luZyBgY2hhbm5lbGAgcHJvcGVydHknKSwgJ0VSUl9EQVRBX0NIQU5ORUwnKSlcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsID0gZXZlbnQuY2hhbm5lbFxuICAgIHRoaXMuX2NoYW5uZWwuYmluYXJ5VHlwZSA9ICdhcnJheWJ1ZmZlcidcblxuICAgIGlmICh0eXBlb2YgdGhpcy5fY2hhbm5lbC5idWZmZXJlZEFtb3VudExvd1RocmVzaG9sZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWwuYnVmZmVyZWRBbW91bnRMb3dUaHJlc2hvbGQgPSBNQVhfQlVGRkVSRURfQU1PVU5UXG4gICAgfVxuXG4gICAgdGhpcy5jaGFubmVsTmFtZSA9IHRoaXMuX2NoYW5uZWwubGFiZWxcblxuICAgIHRoaXMuX2NoYW5uZWwub25tZXNzYWdlID0gZXZlbnQgPT4ge1xuICAgICAgdGhpcy5fb25DaGFubmVsTWVzc2FnZShldmVudClcbiAgICB9XG4gICAgdGhpcy5fY2hhbm5lbC5vbmJ1ZmZlcmVkYW1vdW50bG93ID0gKCkgPT4ge1xuICAgICAgdGhpcy5fb25DaGFubmVsQnVmZmVyZWRBbW91bnRMb3coKVxuICAgIH1cbiAgICB0aGlzLl9jaGFubmVsLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgIHRoaXMuX29uQ2hhbm5lbE9wZW4oKVxuICAgIH1cbiAgICB0aGlzLl9jaGFubmVsLm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9vbkNoYW5uZWxDbG9zZSgpXG4gICAgfVxuICAgIHRoaXMuX2NoYW5uZWwub25lcnJvciA9IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IGVyciA9IGV2ZW50LmVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyBldmVudC5lcnJvclxuICAgICAgICA6IG5ldyBFcnJvcihgRGF0YWNoYW5uZWwgZXJyb3I6ICR7ZXZlbnQubWVzc2FnZX0gJHtldmVudC5maWxlbmFtZX06JHtldmVudC5saW5lbm99OiR7ZXZlbnQuY29sbm99YClcbiAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKGVyciwgJ0VSUl9EQVRBX0NIQU5ORUwnKSlcbiAgICB9XG5cbiAgICAvLyBIQUNLOiBDaHJvbWUgd2lsbCBzb21ldGltZXMgZ2V0IHN0dWNrIGluIHJlYWR5U3RhdGUgXCJjbG9zaW5nXCIsIGxldCdzIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvblxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTg4Mjc0M1xuICAgIGxldCBpc0Nsb3NpbmcgPSBmYWxzZVxuICAgIHRoaXMuX2Nsb3NpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsgLy8gTm8gXCJvbmNsb3NpbmdcIiBldmVudFxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWwgJiYgdGhpcy5fY2hhbm5lbC5yZWFkeVN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgICAgaWYgKGlzQ2xvc2luZykgdGhpcy5fb25DaGFubmVsQ2xvc2UoKSAvLyBjbG9zaW5nIHRpbWVkIG91dDogZXF1aXZhbGVudCB0byBvbmNsb3NlIGZpcmluZ1xuICAgICAgICBpc0Nsb3NpbmcgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0Nsb3NpbmcgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sIENIQU5ORUxfQ0xPU0lOR19USU1FT1VUKVxuICB9XG5cbiAgX3JlYWQgKCkge31cblxuICBfd3JpdGUgKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybiBjYihlcnJDb2RlKG5ldyBFcnJvcignY2Fubm90IHdyaXRlIGFmdGVyIHBlZXIgaXMgZGVzdHJveWVkJyksICdFUlJfREFUQV9DSEFOTkVMJykpXG5cbiAgICBpZiAodGhpcy5fY29ubmVjdGVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnNlbmQoY2h1bmspXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzdHJveShlcnJDb2RlKGVyciwgJ0VSUl9EQVRBX0NIQU5ORUwnKSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsLmJ1ZmZlcmVkQW1vdW50ID4gTUFYX0JVRkZFUkVEX0FNT1VOVCkge1xuICAgICAgICB0aGlzLl9kZWJ1Zygnc3RhcnQgYmFja3ByZXNzdXJlOiBidWZmZXJlZEFtb3VudCAlZCcsIHRoaXMuX2NoYW5uZWwuYnVmZmVyZWRBbW91bnQpXG4gICAgICAgIHRoaXMuX2NiID0gY2JcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNiKG51bGwpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RlYnVnKCd3cml0ZSBiZWZvcmUgY29ubmVjdCcpXG4gICAgICB0aGlzLl9jaHVuayA9IGNodW5rXG4gICAgICB0aGlzLl9jYiA9IGNiXG4gICAgfVxuICB9XG5cbiAgLy8gV2hlbiBzdHJlYW0gZmluaXNoZXMgd3JpdGluZywgY2xvc2Ugc29ja2V0LiBIYWxmIG9wZW4gY29ubmVjdGlvbnMgYXJlIG5vdFxuICAvLyBzdXBwb3J0ZWQuXG4gIF9vbkZpbmlzaCAoKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cblxuICAgIC8vIFdhaXQgYSBiaXQgYmVmb3JlIGRlc3Ryb3lpbmcgc28gdGhlIHNvY2tldCBmbHVzaGVzLlxuICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgbW9yZSByZWxpYWJsZSB3YXkgdG8gYWNjb21wbGlzaCB0aGlzP1xuICAgIGNvbnN0IGRlc3Ryb3lTb29uID0gKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRlc3Ryb3koKSwgMTAwMClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29ubmVjdGVkKSB7XG4gICAgICBkZXN0cm95U29vbigpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGRlc3Ryb3lTb29uKVxuICAgIH1cbiAgfVxuXG4gIF9zdGFydEljZUNvbXBsZXRlVGltZW91dCAoKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICBpZiAodGhpcy5faWNlQ29tcGxldGVUaW1lcikgcmV0dXJuXG4gICAgdGhpcy5fZGVidWcoJ3N0YXJ0ZWQgaWNlQ29tcGxldGUgdGltZW91dCcpXG4gICAgdGhpcy5faWNlQ29tcGxldGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9pY2VDb21wbGV0ZSkge1xuICAgICAgICB0aGlzLl9pY2VDb21wbGV0ZSA9IHRydWVcbiAgICAgICAgdGhpcy5fZGVidWcoJ2ljZUNvbXBsZXRlIHRpbWVvdXQgY29tcGxldGVkJylcbiAgICAgICAgdGhpcy5lbWl0KCdpY2VUaW1lb3V0JylcbiAgICAgICAgdGhpcy5lbWl0KCdfaWNlQ29tcGxldGUnKVxuICAgICAgfVxuICAgIH0sIHRoaXMuaWNlQ29tcGxldGVUaW1lb3V0KVxuICB9XG5cbiAgX2NyZWF0ZU9mZmVyICgpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuXG4gICAgdGhpcy5fcGMuY3JlYXRlT2ZmZXIodGhpcy5vZmZlck9wdGlvbnMpXG4gICAgICAudGhlbihvZmZlciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG4gICAgICAgIGlmICghdGhpcy50cmlja2xlICYmICF0aGlzLmFsbG93SGFsZlRyaWNrbGUpIG9mZmVyLnNkcCA9IGZpbHRlclRyaWNrbGUob2ZmZXIuc2RwKVxuICAgICAgICBvZmZlci5zZHAgPSB0aGlzLnNkcFRyYW5zZm9ybShvZmZlci5zZHApXG5cbiAgICAgICAgY29uc3Qgc2VuZE9mZmVyID0gKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG4gICAgICAgICAgY29uc3Qgc2lnbmFsID0gdGhpcy5fcGMubG9jYWxEZXNjcmlwdGlvbiB8fCBvZmZlclxuICAgICAgICAgIHRoaXMuX2RlYnVnKCdzaWduYWwnKVxuICAgICAgICAgIHRoaXMuZW1pdCgnc2lnbmFsJywge1xuICAgICAgICAgICAgdHlwZTogc2lnbmFsLnR5cGUsXG4gICAgICAgICAgICBzZHA6IHNpZ25hbC5zZHBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb25TdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RlYnVnKCdjcmVhdGVPZmZlciBzdWNjZXNzJylcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuICAgICAgICAgIGlmICh0aGlzLnRyaWNrbGUgfHwgdGhpcy5faWNlQ29tcGxldGUpIHNlbmRPZmZlcigpXG4gICAgICAgICAgZWxzZSB0aGlzLm9uY2UoJ19pY2VDb21wbGV0ZScsIHNlbmRPZmZlcikgLy8gd2FpdCBmb3IgY2FuZGlkYXRlc1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb25FcnJvciA9IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KGVyckNvZGUoZXJyLCAnRVJSX1NFVF9MT0NBTF9ERVNDUklQVElPTicpKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcilcbiAgICAgICAgICAudGhlbihvblN1Y2Nlc3MpXG4gICAgICAgICAgLmNhdGNoKG9uRXJyb3IpXG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKGVyciwgJ0VSUl9DUkVBVEVfT0ZGRVInKSlcbiAgICAgIH0pXG4gIH1cblxuICBfcmVxdWVzdE1pc3NpbmdUcmFuc2NlaXZlcnMgKCkge1xuICAgIGlmICh0aGlzLl9wYy5nZXRUcmFuc2NlaXZlcnMpIHtcbiAgICAgIHRoaXMuX3BjLmdldFRyYW5zY2VpdmVycygpLmZvckVhY2godHJhbnNjZWl2ZXIgPT4ge1xuICAgICAgICBpZiAoIXRyYW5zY2VpdmVyLm1pZCAmJiB0cmFuc2NlaXZlci5zZW5kZXIudHJhY2sgJiYgIXRyYW5zY2VpdmVyLnJlcXVlc3RlZCkge1xuICAgICAgICAgIHRyYW5zY2VpdmVyLnJlcXVlc3RlZCA9IHRydWUgLy8gSEFDSzogU2FmYXJpIHJldHVybnMgbmVnb3RpYXRlZCB0cmFuc2NlaXZlcnMgd2l0aCBhIG51bGwgbWlkXG4gICAgICAgICAgdGhpcy5hZGRUcmFuc2NlaXZlcih0cmFuc2NlaXZlci5zZW5kZXIudHJhY2sua2luZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBfY3JlYXRlQW5zd2VyICgpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuXG4gICAgdGhpcy5fcGMuY3JlYXRlQW5zd2VyKHRoaXMuYW5zd2VyT3B0aW9ucylcbiAgICAgIC50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG4gICAgICAgIGlmICghdGhpcy50cmlja2xlICYmICF0aGlzLmFsbG93SGFsZlRyaWNrbGUpIGFuc3dlci5zZHAgPSBmaWx0ZXJUcmlja2xlKGFuc3dlci5zZHApXG4gICAgICAgIGFuc3dlci5zZHAgPSB0aGlzLnNkcFRyYW5zZm9ybShhbnN3ZXIuc2RwKVxuXG4gICAgICAgIGNvbnN0IHNlbmRBbnN3ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICAgICAgICBjb25zdCBzaWduYWwgPSB0aGlzLl9wYy5sb2NhbERlc2NyaXB0aW9uIHx8IGFuc3dlclxuICAgICAgICAgIHRoaXMuX2RlYnVnKCdzaWduYWwnKVxuICAgICAgICAgIHRoaXMuZW1pdCgnc2lnbmFsJywge1xuICAgICAgICAgICAgdHlwZTogc2lnbmFsLnR5cGUsXG4gICAgICAgICAgICBzZHA6IHNpZ25hbC5zZHBcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghdGhpcy5pbml0aWF0b3IpIHRoaXMuX3JlcXVlc3RNaXNzaW5nVHJhbnNjZWl2ZXJzKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9uU3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuICAgICAgICAgIGlmICh0aGlzLnRyaWNrbGUgfHwgdGhpcy5faWNlQ29tcGxldGUpIHNlbmRBbnN3ZXIoKVxuICAgICAgICAgIGVsc2UgdGhpcy5vbmNlKCdfaWNlQ29tcGxldGUnLCBzZW5kQW5zd2VyKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb25FcnJvciA9IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KGVyckNvZGUoZXJyLCAnRVJSX1NFVF9MT0NBTF9ERVNDUklQVElPTicpKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihhbnN3ZXIpXG4gICAgICAgICAgLnRoZW4ob25TdWNjZXNzKVxuICAgICAgICAgIC5jYXRjaChvbkVycm9yKVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyQ29kZShlcnIsICdFUlJfQ1JFQVRFX0FOU1dFUicpKVxuICAgICAgfSlcbiAgfVxuXG4gIF9vbkNvbm5lY3Rpb25TdGF0ZUNoYW5nZSAoKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICBpZiAodGhpcy5fcGMuY29ubmVjdGlvblN0YXRlID09PSAnZmFpbGVkJykge1xuICAgICAgdGhpcy5kZXN0cm95KGVyckNvZGUobmV3IEVycm9yKCdDb25uZWN0aW9uIGZhaWxlZC4nKSwgJ0VSUl9DT05ORUNUSU9OX0ZBSUxVUkUnKSlcbiAgICB9XG4gIH1cblxuICBfb25JY2VTdGF0ZUNoYW5nZSAoKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICBjb25zdCBpY2VDb25uZWN0aW9uU3RhdGUgPSB0aGlzLl9wYy5pY2VDb25uZWN0aW9uU3RhdGVcbiAgICBjb25zdCBpY2VHYXRoZXJpbmdTdGF0ZSA9IHRoaXMuX3BjLmljZUdhdGhlcmluZ1N0YXRlXG5cbiAgICB0aGlzLl9kZWJ1ZyhcbiAgICAgICdpY2VTdGF0ZUNoYW5nZSAoY29ubmVjdGlvbjogJXMpIChnYXRoZXJpbmc6ICVzKScsXG4gICAgICBpY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICBpY2VHYXRoZXJpbmdTdGF0ZVxuICAgIClcbiAgICB0aGlzLmVtaXQoJ2ljZVN0YXRlQ2hhbmdlJywgaWNlQ29ubmVjdGlvblN0YXRlLCBpY2VHYXRoZXJpbmdTdGF0ZSlcblxuICAgIGlmIChpY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjb25uZWN0ZWQnIHx8IGljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgIHRoaXMuX3BjUmVhZHkgPSB0cnVlXG4gICAgICB0aGlzLl9tYXliZVJlYWR5KClcbiAgICB9XG4gICAgaWYgKGljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKG5ldyBFcnJvcignSWNlIGNvbm5lY3Rpb24gZmFpbGVkLicpLCAnRVJSX0lDRV9DT05ORUNUSU9OX0ZBSUxVUkUnKSlcbiAgICB9XG4gICAgaWYgKGljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHRoaXMuZGVzdHJveShlcnJDb2RlKG5ldyBFcnJvcignSWNlIGNvbm5lY3Rpb24gY2xvc2VkLicpLCAnRVJSX0lDRV9DT05ORUNUSU9OX0NMT1NFRCcpKVxuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRzIChjYikge1xuICAgIC8vIHN0YXRyZXBvcnRzIGNhbiBjb21lIHdpdGggYSB2YWx1ZSBhcnJheSBpbnN0ZWFkIG9mIHByb3BlcnRpZXNcbiAgICBjb25zdCBmbGF0dGVuVmFsdWVzID0gcmVwb3J0ID0+IHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVwb3J0LnZhbHVlcykgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgcmVwb3J0LnZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHJlcG9ydCwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVwb3J0XG4gICAgfVxuXG4gICAgLy8gUHJvbWlzZS1iYXNlZCBnZXRTdGF0cygpIChzdGFuZGFyZClcbiAgICBpZiAodGhpcy5fcGMuZ2V0U3RhdHMubGVuZ3RoID09PSAwIHx8IHRoaXMuX2lzUmVhY3ROYXRpdmVXZWJydGMpIHtcbiAgICAgIHRoaXMuX3BjLmdldFN0YXRzKClcbiAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICBjb25zdCByZXBvcnRzID0gW11cbiAgICAgICAgICByZXMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgcmVwb3J0cy5wdXNoKGZsYXR0ZW5WYWx1ZXMocmVwb3J0KSlcbiAgICAgICAgICB9KVxuICAgICAgICAgIGNiKG51bGwsIHJlcG9ydHMpXG4gICAgICAgIH0sIGVyciA9PiBjYihlcnIpKVxuXG4gICAgLy8gU2luZ2xlLXBhcmFtZXRlciBjYWxsYmFjay1iYXNlZCBnZXRTdGF0cygpIChub24tc3RhbmRhcmQpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9wYy5nZXRTdGF0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9wYy5nZXRTdGF0cyhyZXMgPT4ge1xuICAgICAgICAvLyBJZiB3ZSBkZXN0cm95IGNvbm5lY3Rpb24gaW4gYGNvbm5lY3RgIGNhbGxiYWNrIHRoaXMgY29kZSBtaWdodCBoYXBwZW4gdG8gcnVuIHdoZW4gYWN0dWFsIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBjbG9zZWRcbiAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cblxuICAgICAgICBjb25zdCByZXBvcnRzID0gW11cbiAgICAgICAgcmVzLnJlc3VsdCgpLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgICAgICBjb25zdCByZXBvcnQgPSB7fVxuICAgICAgICAgIHJlc3VsdC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgICByZXBvcnRbbmFtZV0gPSByZXN1bHQuc3RhdChuYW1lKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmVwb3J0LmlkID0gcmVzdWx0LmlkXG4gICAgICAgICAgcmVwb3J0LnR5cGUgPSByZXN1bHQudHlwZVxuICAgICAgICAgIHJlcG9ydC50aW1lc3RhbXAgPSByZXN1bHQudGltZXN0YW1wXG4gICAgICAgICAgcmVwb3J0cy5wdXNoKGZsYXR0ZW5WYWx1ZXMocmVwb3J0KSlcbiAgICAgICAgfSlcbiAgICAgICAgY2IobnVsbCwgcmVwb3J0cylcbiAgICAgIH0sIGVyciA9PiBjYihlcnIpKVxuXG4gICAgLy8gVW5rbm93biBicm93c2VyLCBza2lwIGdldFN0YXRzKCkgc2luY2UgaXQncyBhbnlvbmUncyBndWVzcyB3aGljaCBzdHlsZSBvZlxuICAgIC8vIGdldFN0YXRzKCkgdGhleSBpbXBsZW1lbnQuXG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKG51bGwsIFtdKVxuICAgIH1cbiAgfVxuXG4gIF9tYXliZVJlYWR5ICgpIHtcbiAgICB0aGlzLl9kZWJ1ZygnbWF5YmVSZWFkeSBwYyAlcyBjaGFubmVsICVzJywgdGhpcy5fcGNSZWFkeSwgdGhpcy5fY2hhbm5lbFJlYWR5KVxuICAgIGlmICh0aGlzLl9jb25uZWN0ZWQgfHwgdGhpcy5fY29ubmVjdGluZyB8fCAhdGhpcy5fcGNSZWFkeSB8fCAhdGhpcy5fY2hhbm5lbFJlYWR5KSByZXR1cm5cblxuICAgIHRoaXMuX2Nvbm5lY3RpbmcgPSB0cnVlXG5cbiAgICAvLyBIQUNLOiBXZSBjYW4ndCByZWx5IG9uIG9yZGVyIGhlcmUsIGZvciBkZXRhaWxzIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanMtcGxhdGZvcm0vbm9kZS13ZWJydGMvaXNzdWVzLzMzOVxuICAgIGNvbnN0IGZpbmRDYW5kaWRhdGVQYWlyID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cblxuICAgICAgdGhpcy5nZXRTdGF0cygoZXJyLCBpdGVtcykgPT4ge1xuICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuXG4gICAgICAgIC8vIFRyZWF0IGdldFN0YXRzIGVycm9yIGFzIG5vbi1mYXRhbC4gSXQncyBub3QgZXNzZW50aWFsLlxuICAgICAgICBpZiAoZXJyKSBpdGVtcyA9IFtdXG5cbiAgICAgICAgY29uc3QgcmVtb3RlQ2FuZGlkYXRlcyA9IHt9XG4gICAgICAgIGNvbnN0IGxvY2FsQ2FuZGlkYXRlcyA9IHt9XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVBhaXJzID0ge31cbiAgICAgICAgbGV0IGZvdW5kU2VsZWN0ZWRDYW5kaWRhdGVQYWlyID0gZmFsc2VcblxuICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIC8vIFRPRE86IE9uY2UgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdGhlIGh5cGhlbmF0ZWQgc3RhdHMgcmVwb3J0IHR5cGVzLCByZW1vdmVcbiAgICAgICAgICAvLyB0aGUgbm9uLWh5cGVuYXRlZCBvbmVzXG4gICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3JlbW90ZWNhbmRpZGF0ZScgfHwgaXRlbS50eXBlID09PSAncmVtb3RlLWNhbmRpZGF0ZScpIHtcbiAgICAgICAgICAgIHJlbW90ZUNhbmRpZGF0ZXNbaXRlbS5pZF0gPSBpdGVtXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdsb2NhbGNhbmRpZGF0ZScgfHwgaXRlbS50eXBlID09PSAnbG9jYWwtY2FuZGlkYXRlJykge1xuICAgICAgICAgICAgbG9jYWxDYW5kaWRhdGVzW2l0ZW0uaWRdID0gaXRlbVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnY2FuZGlkYXRlcGFpcicgfHwgaXRlbS50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInKSB7XG4gICAgICAgICAgICBjYW5kaWRhdGVQYWlyc1tpdGVtLmlkXSA9IGl0ZW1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3Qgc2V0U2VsZWN0ZWRDYW5kaWRhdGVQYWlyID0gc2VsZWN0ZWRDYW5kaWRhdGVQYWlyID0+IHtcbiAgICAgICAgICBmb3VuZFNlbGVjdGVkQ2FuZGlkYXRlUGFpciA9IHRydWVcblxuICAgICAgICAgIGxldCBsb2NhbCA9IGxvY2FsQ2FuZGlkYXRlc1tzZWxlY3RlZENhbmRpZGF0ZVBhaXIubG9jYWxDYW5kaWRhdGVJZF1cblxuICAgICAgICAgIGlmIChsb2NhbCAmJiAobG9jYWwuaXAgfHwgbG9jYWwuYWRkcmVzcykpIHtcbiAgICAgICAgICAgIC8vIFNwZWNcbiAgICAgICAgICAgIHRoaXMubG9jYWxBZGRyZXNzID0gbG9jYWwuaXAgfHwgbG9jYWwuYWRkcmVzc1xuICAgICAgICAgICAgdGhpcy5sb2NhbFBvcnQgPSBOdW1iZXIobG9jYWwucG9ydClcbiAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsICYmIGxvY2FsLmlwQWRkcmVzcykge1xuICAgICAgICAgICAgLy8gRmlyZWZveFxuICAgICAgICAgICAgdGhpcy5sb2NhbEFkZHJlc3MgPSBsb2NhbC5pcEFkZHJlc3NcbiAgICAgICAgICAgIHRoaXMubG9jYWxQb3J0ID0gTnVtYmVyKGxvY2FsLnBvcnROdW1iZXIpXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZWN0ZWRDYW5kaWRhdGVQYWlyLmdvb2dMb2NhbEFkZHJlc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBvbmNlIENocm9tZSA1OCBpcyByZWxlYXNlZFxuICAgICAgICAgICAgbG9jYWwgPSBzZWxlY3RlZENhbmRpZGF0ZVBhaXIuZ29vZ0xvY2FsQWRkcmVzcy5zcGxpdCgnOicpXG4gICAgICAgICAgICB0aGlzLmxvY2FsQWRkcmVzcyA9IGxvY2FsWzBdXG4gICAgICAgICAgICB0aGlzLmxvY2FsUG9ydCA9IE51bWJlcihsb2NhbFsxXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMubG9jYWxBZGRyZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsRmFtaWx5ID0gdGhpcy5sb2NhbEFkZHJlc3MuaW5jbHVkZXMoJzonKSA/ICdJUHY2JyA6ICdJUHY0J1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCByZW1vdGUgPSByZW1vdGVDYW5kaWRhdGVzW3NlbGVjdGVkQ2FuZGlkYXRlUGFpci5yZW1vdGVDYW5kaWRhdGVJZF1cblxuICAgICAgICAgIGlmIChyZW1vdGUgJiYgKHJlbW90ZS5pcCB8fCByZW1vdGUuYWRkcmVzcykpIHtcbiAgICAgICAgICAgIC8vIFNwZWNcbiAgICAgICAgICAgIHRoaXMucmVtb3RlQWRkcmVzcyA9IHJlbW90ZS5pcCB8fCByZW1vdGUuYWRkcmVzc1xuICAgICAgICAgICAgdGhpcy5yZW1vdGVQb3J0ID0gTnVtYmVyKHJlbW90ZS5wb3J0KVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVtb3RlICYmIHJlbW90ZS5pcEFkZHJlc3MpIHtcbiAgICAgICAgICAgIC8vIEZpcmVmb3hcbiAgICAgICAgICAgIHRoaXMucmVtb3RlQWRkcmVzcyA9IHJlbW90ZS5pcEFkZHJlc3NcbiAgICAgICAgICAgIHRoaXMucmVtb3RlUG9ydCA9IE51bWJlcihyZW1vdGUucG9ydE51bWJlcilcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RlZENhbmRpZGF0ZVBhaXIuZ29vZ1JlbW90ZUFkZHJlc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBvbmNlIENocm9tZSA1OCBpcyByZWxlYXNlZFxuICAgICAgICAgICAgcmVtb3RlID0gc2VsZWN0ZWRDYW5kaWRhdGVQYWlyLmdvb2dSZW1vdGVBZGRyZXNzLnNwbGl0KCc6JylcbiAgICAgICAgICAgIHRoaXMucmVtb3RlQWRkcmVzcyA9IHJlbW90ZVswXVxuICAgICAgICAgICAgdGhpcy5yZW1vdGVQb3J0ID0gTnVtYmVyKHJlbW90ZVsxXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucmVtb3RlQWRkcmVzcykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdGVGYW1pbHkgPSB0aGlzLnJlbW90ZUFkZHJlc3MuaW5jbHVkZXMoJzonKSA/ICdJUHY2JyA6ICdJUHY0J1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2RlYnVnKFxuICAgICAgICAgICAgJ2Nvbm5lY3QgbG9jYWw6ICVzOiVzIHJlbW90ZTogJXM6JXMnLFxuICAgICAgICAgICAgdGhpcy5sb2NhbEFkZHJlc3MsXG4gICAgICAgICAgICB0aGlzLmxvY2FsUG9ydCxcbiAgICAgICAgICAgIHRoaXMucmVtb3RlQWRkcmVzcyxcbiAgICAgICAgICAgIHRoaXMucmVtb3RlUG9ydFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgLy8gU3BlYy1jb21wbGlhbnRcbiAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSAndHJhbnNwb3J0JyAmJiBpdGVtLnNlbGVjdGVkQ2FuZGlkYXRlUGFpcklkKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZENhbmRpZGF0ZVBhaXIoY2FuZGlkYXRlUGFpcnNbaXRlbS5zZWxlY3RlZENhbmRpZGF0ZVBhaXJJZF0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gT2xkIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChpdGVtLnR5cGUgPT09ICdnb29nQ2FuZGlkYXRlUGFpcicgJiYgaXRlbS5nb29nQWN0aXZlQ29ubmVjdGlvbiA9PT0gJ3RydWUnKSB8fFxuICAgICAgICAgICAgKChpdGVtLnR5cGUgPT09ICdjYW5kaWRhdGVwYWlyJyB8fCBpdGVtLnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicpICYmIGl0ZW0uc2VsZWN0ZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZENhbmRpZGF0ZVBhaXIoaXRlbSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gSWdub3JlIGNhbmRpZGF0ZSBwYWlyIHNlbGVjdGlvbiBpbiBicm93c2VycyBsaWtlIFNhZmFyaSAxMSB0aGF0IGRvIG5vdCBoYXZlIGFueSBsb2NhbCBvciByZW1vdGUgY2FuZGlkYXRlc1xuICAgICAgICAvLyBCdXQgd2FpdCB1bnRpbCBhdCBsZWFzdCAxIGNhbmRpZGF0ZSBwYWlyIGlzIGF2YWlsYWJsZVxuICAgICAgICBpZiAoIWZvdW5kU2VsZWN0ZWRDYW5kaWRhdGVQYWlyICYmICghT2JqZWN0LmtleXMoY2FuZGlkYXRlUGFpcnMpLmxlbmd0aCB8fCBPYmplY3Qua2V5cyhsb2NhbENhbmRpZGF0ZXMpLmxlbmd0aCkpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KGZpbmRDYW5kaWRhdGVQYWlyLCAxMDApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY29ubmVjdGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fY29ubmVjdGVkID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NodW5rKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc2VuZCh0aGlzLl9jaHVuaylcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3koZXJyQ29kZShlcnIsICdFUlJfREFUQV9DSEFOTkVMJykpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2NodW5rID0gbnVsbFxuICAgICAgICAgIHRoaXMuX2RlYnVnKCdzZW50IGNodW5rIGZyb20gXCJ3cml0ZSBiZWZvcmUgY29ubmVjdFwiJylcblxuICAgICAgICAgIGNvbnN0IGNiID0gdGhpcy5fY2JcbiAgICAgICAgICB0aGlzLl9jYiA9IG51bGxcbiAgICAgICAgICBjYihudWxsKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgYGJ1ZmZlcmVkQW1vdW50TG93VGhyZXNob2xkYCBhbmQgJ29uYnVmZmVyZWRhbW91bnRsb3cnIGFyZSB1bnN1cHBvcnRlZCxcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gdXNpbmcgc2V0SW50ZXJ2YWwgdG8gaW1wbGVtZW50IGJhY2twcmVzc3VyZS5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jaGFubmVsLmJ1ZmZlcmVkQW1vdW50TG93VGhyZXNob2xkICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5fb25JbnRlcnZhbCgpLCAxNTApXG4gICAgICAgICAgaWYgKHRoaXMuX2ludGVydmFsLnVucmVmKSB0aGlzLl9pbnRlcnZhbC51bnJlZigpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kZWJ1ZygnY29ubmVjdCcpXG4gICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpXG4gICAgICB9KVxuICAgIH1cbiAgICBmaW5kQ2FuZGlkYXRlUGFpcigpXG4gIH1cblxuICBfb25JbnRlcnZhbCAoKSB7XG4gICAgaWYgKCF0aGlzLl9jYiB8fCAhdGhpcy5fY2hhbm5lbCB8fCB0aGlzLl9jaGFubmVsLmJ1ZmZlcmVkQW1vdW50ID4gTUFYX0JVRkZFUkVEX0FNT1VOVCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX29uQ2hhbm5lbEJ1ZmZlcmVkQW1vdW50TG93KClcbiAgfVxuXG4gIF9vblNpZ25hbGluZ1N0YXRlQ2hhbmdlICgpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuX3BjLnNpZ25hbGluZ1N0YXRlID09PSAnc3RhYmxlJykge1xuICAgICAgdGhpcy5faXNOZWdvdGlhdGluZyA9IGZhbHNlXG5cbiAgICAgIC8vIEhBQ0s6IEZpcmVmb3ggZG9lc24ndCB5ZXQgc3VwcG9ydCByZW1vdmluZyB0cmFja3Mgd2hlbiBzaWduYWxpbmdTdGF0ZSAhPT0gJ3N0YWJsZSdcbiAgICAgIHRoaXMuX2RlYnVnKCdmbHVzaGluZyBzZW5kZXIgcXVldWUnLCB0aGlzLl9zZW5kZXJzQXdhaXRpbmdTdGFibGUpXG4gICAgICB0aGlzLl9zZW5kZXJzQXdhaXRpbmdTdGFibGUuZm9yRWFjaChzZW5kZXIgPT4ge1xuICAgICAgICB0aGlzLl9wYy5yZW1vdmVUcmFjayhzZW5kZXIpXG4gICAgICAgIHRoaXMuX3F1ZXVlZE5lZ290aWF0aW9uID0gdHJ1ZVxuICAgICAgfSlcbiAgICAgIHRoaXMuX3NlbmRlcnNBd2FpdGluZ1N0YWJsZSA9IFtdXG5cbiAgICAgIGlmICh0aGlzLl9xdWV1ZWROZWdvdGlhdGlvbikge1xuICAgICAgICB0aGlzLl9kZWJ1ZygnZmx1c2hpbmcgbmVnb3RpYXRpb24gcXVldWUnKVxuICAgICAgICB0aGlzLl9xdWV1ZWROZWdvdGlhdGlvbiA9IGZhbHNlXG4gICAgICAgIHRoaXMuX25lZWRzTmVnb3RpYXRpb24oKSAvLyBuZWdvdGlhdGUgYWdhaW5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCduZWdvdGlhdGVkJylcbiAgICAgICAgdGhpcy5lbWl0KCduZWdvdGlhdGVkJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9kZWJ1Zygnc2lnbmFsaW5nU3RhdGVDaGFuZ2UgJXMnLCB0aGlzLl9wYy5zaWduYWxpbmdTdGF0ZSlcbiAgICB0aGlzLmVtaXQoJ3NpZ25hbGluZ1N0YXRlQ2hhbmdlJywgdGhpcy5fcGMuc2lnbmFsaW5nU3RhdGUpXG4gIH1cblxuICBfb25JY2VDYW5kaWRhdGUgKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY2FuZGlkYXRlICYmIHRoaXMudHJpY2tsZSkge1xuICAgICAgdGhpcy5lbWl0KCdzaWduYWwnLCB7XG4gICAgICAgIHR5cGU6ICdjYW5kaWRhdGUnLFxuICAgICAgICBjYW5kaWRhdGU6IHtcbiAgICAgICAgICBjYW5kaWRhdGU6IGV2ZW50LmNhbmRpZGF0ZS5jYW5kaWRhdGUsXG4gICAgICAgICAgc2RwTUxpbmVJbmRleDogZXZlbnQuY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgsXG4gICAgICAgICAgc2RwTWlkOiBldmVudC5jYW5kaWRhdGUuc2RwTWlkXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICghZXZlbnQuY2FuZGlkYXRlICYmICF0aGlzLl9pY2VDb21wbGV0ZSkge1xuICAgICAgdGhpcy5faWNlQ29tcGxldGUgPSB0cnVlXG4gICAgICB0aGlzLmVtaXQoJ19pY2VDb21wbGV0ZScpXG4gICAgfVxuICAgIC8vIGFzIHNvb24gYXMgd2UndmUgcmVjZWl2ZWQgb25lIHZhbGlkIGNhbmRpZGF0ZSBzdGFydCB0aW1lb3V0XG4gICAgaWYgKGV2ZW50LmNhbmRpZGF0ZSkge1xuICAgICAgdGhpcy5fc3RhcnRJY2VDb21wbGV0ZVRpbWVvdXQoKVxuICAgIH1cbiAgfVxuXG4gIF9vbkNoYW5uZWxNZXNzYWdlIChldmVudCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG4gICAgbGV0IGRhdGEgPSBldmVudC5kYXRhXG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEpXG4gICAgdGhpcy5wdXNoKGRhdGEpXG4gIH1cblxuICBfb25DaGFubmVsQnVmZmVyZWRBbW91bnRMb3cgKCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCB8fCAhdGhpcy5fY2IpIHJldHVyblxuICAgIHRoaXMuX2RlYnVnKCdlbmRpbmcgYmFja3ByZXNzdXJlOiBidWZmZXJlZEFtb3VudCAlZCcsIHRoaXMuX2NoYW5uZWwuYnVmZmVyZWRBbW91bnQpXG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gbnVsbFxuICAgIGNiKG51bGwpXG4gIH1cblxuICBfb25DaGFubmVsT3BlbiAoKSB7XG4gICAgaWYgKHRoaXMuX2Nvbm5lY3RlZCB8fCB0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG4gICAgdGhpcy5fZGVidWcoJ29uIGNoYW5uZWwgb3BlbicpXG4gICAgdGhpcy5fY2hhbm5lbFJlYWR5ID0gdHJ1ZVxuICAgIHRoaXMuX21heWJlUmVhZHkoKVxuICB9XG5cbiAgX29uQ2hhbm5lbENsb3NlICgpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVyblxuICAgIHRoaXMuX2RlYnVnKCdvbiBjaGFubmVsIGNsb3NlJylcbiAgICB0aGlzLmRlc3Ryb3koKVxuICB9XG5cbiAgX29uVHJhY2sgKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm5cblxuICAgIGV2ZW50LnN0cmVhbXMuZm9yRWFjaChldmVudFN0cmVhbSA9PiB7XG4gICAgICB0aGlzLl9kZWJ1Zygnb24gdHJhY2snKVxuICAgICAgdGhpcy5lbWl0KCd0cmFjaycsIGV2ZW50LnRyYWNrLCBldmVudFN0cmVhbSlcblxuICAgICAgdGhpcy5fcmVtb3RlVHJhY2tzLnB1c2goe1xuICAgICAgICB0cmFjazogZXZlbnQudHJhY2ssXG4gICAgICAgIHN0cmVhbTogZXZlbnRTdHJlYW1cbiAgICAgIH0pXG5cbiAgICAgIGlmICh0aGlzLl9yZW1vdGVTdHJlYW1zLnNvbWUocmVtb3RlU3RyZWFtID0+IHtcbiAgICAgICAgcmV0dXJuIHJlbW90ZVN0cmVhbS5pZCA9PT0gZXZlbnRTdHJlYW0uaWRcbiAgICAgIH0pKSByZXR1cm4gLy8gT25seSBmaXJlIG9uZSAnc3RyZWFtJyBldmVudCwgZXZlbiB0aG91Z2ggdGhlcmUgbWF5IGJlIG11bHRpcGxlIHRyYWNrcyBwZXIgc3RyZWFtXG5cbiAgICAgIHRoaXMuX3JlbW90ZVN0cmVhbXMucHVzaChldmVudFN0cmVhbSlcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZGVidWcoJ29uIHN0cmVhbScpXG4gICAgICAgIHRoaXMuZW1pdCgnc3RyZWFtJywgZXZlbnRTdHJlYW0pIC8vIGVuc3VyZSBhbGwgdHJhY2tzIGhhdmUgYmVlbiBhZGRlZFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgX2RlYnVnICgpIHtcbiAgICBjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gICAgYXJnc1swXSA9ICdbJyArIHRoaXMuX2lkICsgJ10gJyArIGFyZ3NbMF1cbiAgICBkZWJ1Zy5hcHBseShudWxsLCBhcmdzKVxuICB9XG59XG5cblBlZXIuV0VCUlRDX1NVUFBPUlQgPSAhIWdldEJyb3dzZXJSVEMoKVxuXG4vKipcbiAqIEV4cG9zZSBwZWVyIGFuZCBkYXRhIGNoYW5uZWwgY29uZmlnIGZvciBvdmVycmlkaW5nIGFsbCBQZWVyXG4gKiBpbnN0YW5jZXMuIE90aGVyd2lzZSwganVzdCBzZXQgb3B0cy5jb25maWcgb3Igb3B0cy5jaGFubmVsQ29uZmlnXG4gKiB3aGVuIGNvbnN0cnVjdGluZyBhIFBlZXIuXG4gKi9cblBlZXIuY29uZmlnID0ge1xuICBpY2VTZXJ2ZXJzOiBbXG4gICAge1xuICAgICAgdXJsczogW1xuICAgICAgICAnc3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMicsXG4gICAgICAgICdzdHVuOmdsb2JhbC5zdHVuLnR3aWxpby5jb206MzQ3OCdcbiAgICAgIF1cbiAgICB9XG4gIF0sXG4gIHNkcFNlbWFudGljczogJ3VuaWZpZWQtcGxhbidcbn1cblxuUGVlci5jaGFubmVsQ29uZmlnID0ge31cblxubW9kdWxlLmV4cG9ydHMgPSBQZWVyXG4iLCIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpIHx8XG5cdFx0Ly8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGFyZ3NbMF0gPSAodGhpcy51c2VDb2xvcnMgPyAnJWMnIDogJycpICtcblx0XHR0aGlzLm5hbWVzcGFjZSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyAlYycgOiAnICcpICtcblx0XHRhcmdzWzBdICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJykgK1xuXHRcdCcrJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cblx0aWYgKCF0aGlzLnVzZUNvbG9ycykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuXHRhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKTtcblxuXHQvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuXHQvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG5cdC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuXHRsZXQgaW5kZXggPSAwO1xuXHRsZXQgbGFzdEMgPSAwO1xuXHRhcmdzWzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywgbWF0Y2ggPT4ge1xuXHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpbmRleCsrO1xuXHRcdGlmIChtYXRjaCA9PT0gJyVjJykge1xuXHRcdFx0Ly8gV2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG5cdFx0XHQvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuXHRcdFx0bGFzdEMgPSBpbmRleDtcblx0XHR9XG5cdH0pO1xuXG5cdGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmRlYnVnKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICogSWYgYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhdmFpbGFibGUsIGZhbGxzIGJhY2tcbiAqIHRvIGBjb25zb2xlLmxvZ2AuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZXhwb3J0cy5sb2cgPSBjb25zb2xlLmRlYnVnIHx8IGNvbnNvbGUubG9nIHx8ICgoKSA9PiB7fSk7XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0dHJ5IHtcblx0XHRpZiAobmFtZXNwYWNlcykge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnNldEl0ZW0oJ2RlYnVnJywgbmFtZXNwYWNlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZCgpIHtcblx0bGV0IHI7XG5cdHRyeSB7XG5cdFx0ciA9IGV4cG9ydHMuc3RvcmFnZS5nZXRJdGVtKCdkZWJ1ZycpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxuXG5cdC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcblx0aWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG5cdFx0ciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuXHR9XG5cblx0cmV0dXJuIHI7XG59XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuXHR0cnkge1xuXHRcdC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcblx0XHQvLyBUaGUgQnJvd3NlciBhbHNvIGhhcyBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0LlxuXHRcdHJldHVybiBsb2NhbFN0b3JhZ2U7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uICh2KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnJvci5tZXNzYWdlO1xuXHR9XG59O1xuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBkZWJ1ZyBpbnN0YW5jZSB0byBiZSBjb2xvcmVkXG5cdCogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuXHRcdGxldCBoYXNoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcblx0XHRcdGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuXHR9XG5cdGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG5cblx0LyoqXG5cdCogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQHJldHVybiB7RnVuY3Rpb259XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cdFx0bGV0IHByZXZUaW1lO1xuXHRcdGxldCBlbmFibGVPdmVycmlkZSA9IG51bGw7XG5cdFx0bGV0IG5hbWVzcGFjZXNDYWNoZTtcblx0XHRsZXQgZW5hYmxlZENhY2hlO1xuXG5cdFx0ZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuXHRcdFx0Ly8gRGlzYWJsZWQ/XG5cdFx0XHRpZiAoIWRlYnVnLmVuYWJsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZWxmID0gZGVidWc7XG5cblx0XHRcdC8vIFNldCBgZGlmZmAgdGltZXN0YW1wXG5cdFx0XHRjb25zdCBjdXJyID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXHRcdFx0Y29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuXHRcdFx0c2VsZi5kaWZmID0gbXM7XG5cdFx0XHRzZWxmLnByZXYgPSBwcmV2VGltZTtcblx0XHRcdHNlbGYuY3VyciA9IGN1cnI7XG5cdFx0XHRwcmV2VGltZSA9IGN1cnI7XG5cblx0XHRcdGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cblx0XHRcdFx0YXJncy51bnNoaWZ0KCclTycpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuXHRcdFx0bGV0IGluZGV4ID0gMDtcblx0XHRcdGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCAobWF0Y2gsIGZvcm1hdCkgPT4ge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG5cdFx0XHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0XHRcdHJldHVybiAnJSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGNvbnN0IHZhbCA9IGFyZ3NbaW5kZXhdO1xuXHRcdFx0XHRcdG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuXHRcdFx0XHRcdC8vIE5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcblx0XHRcdGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcblxuXHRcdFx0Y29uc3QgbG9nRm4gPSBzZWxmLmxvZyB8fCBjcmVhdGVEZWJ1Zy5sb2c7XG5cdFx0XHRsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcblx0XHR9XG5cblx0XHRkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG5cdFx0ZGVidWcudXNlQ29sb3JzID0gY3JlYXRlRGVidWcudXNlQ29sb3JzKCk7XG5cdFx0ZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuXHRcdGRlYnVnLmV4dGVuZCA9IGV4dGVuZDtcblx0XHRkZWJ1Zy5kZXN0cm95ID0gY3JlYXRlRGVidWcuZGVzdHJveTsgLy8gWFhYIFRlbXBvcmFyeS4gV2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVidWcsICdlbmFibGVkJywge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGVuYWJsZU92ZXJyaWRlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcblx0XHRcdFx0XHRuYW1lc3BhY2VzQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzO1xuXHRcdFx0XHRcdGVuYWJsZWRDYWNoZSA9IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbmFibGVkQ2FjaGU7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXHRcdGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0bGV0IGk7XG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuXHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCFzcGxpdFtpXSkge1xuXHRcdFx0XHQvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cblx0XHRcdGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc2xpY2UoMSkgKyAnJCcpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG5cdCpcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBkaXNhYmxlKCkge1xuXHRcdGNvbnN0IG5hbWVzcGFjZXMgPSBbXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5uYW1lcy5tYXAodG9OYW1lc3BhY2UpLFxuXHRcdFx0Li4uY3JlYXRlRGVidWcuc2tpcHMubWFwKHRvTmFtZXNwYWNlKS5tYXAobmFtZXNwYWNlID0+ICctJyArIG5hbWVzcGFjZSlcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuXHRcdHJldHVybiBuYW1lc3BhY2VzO1xuXHR9XG5cblx0LyoqXG5cdCogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0KiBAcmV0dXJuIHtCb29sZWFufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuXHRcdGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGk7XG5cdFx0bGV0IGxlbjtcblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQqIENvbnZlcnQgcmVnZXhwIHRvIG5hbWVzcGFjZVxuXHQqXG5cdCogQHBhcmFtIHtSZWdFeHB9IHJlZ3hlcFxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHRvTmFtZXNwYWNlKHJlZ2V4cCkge1xuXHRcdHJldHVybiByZWdleHAudG9TdHJpbmcoKVxuXHRcdFx0LnN1YnN0cmluZygyLCByZWdleHAudG9TdHJpbmcoKS5sZW5ndGggLSAyKVxuXHRcdFx0LnJlcGxhY2UoL1xcLlxcKlxcPyQvLCAnKicpO1xuXHR9XG5cblx0LyoqXG5cdCogQ29lcmNlIGB2YWxgLlxuXHQqXG5cdCogQHBhcmFtIHtNaXhlZH0gdmFsXG5cdCogQHJldHVybiB7TWl4ZWR9XG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcblx0XHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvKipcblx0KiBYWFggRE8gTk9UIFVTRS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdHViIGZ1bmN0aW9uLlxuXHQqIFhYWCBJdCBXSUxMIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblx0Ki9cblx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0fVxuXG5cdGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuXG5cdHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTsgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIGNvZGVzID0ge307XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yVHlwZShjb2RlLCBtZXNzYWdlLCBCYXNlKSB7XG4gIGlmICghQmFzZSkge1xuICAgIEJhc2UgPSBFcnJvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE1lc3NhZ2UoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWVzc2FnZShhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB9XG4gIH1cblxuICB2YXIgTm9kZUVycm9yID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX0Jhc2UpIHtcbiAgICBfaW5oZXJpdHNMb29zZShOb2RlRXJyb3IsIF9CYXNlKTtcblxuICAgIGZ1bmN0aW9uIE5vZGVFcnJvcihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICByZXR1cm4gX0Jhc2UuY2FsbCh0aGlzLCBnZXRNZXNzYWdlKGFyZzEsIGFyZzIsIGFyZzMpKSB8fCB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiBOb2RlRXJyb3I7XG4gIH0oQmFzZSk7XG5cbiAgTm9kZUVycm9yLnByb3RvdHlwZS5uYW1lID0gQmFzZS5uYW1lO1xuICBOb2RlRXJyb3IucHJvdG90eXBlLmNvZGUgPSBjb2RlO1xuICBjb2Rlc1tjb2RlXSA9IE5vZGVFcnJvcjtcbn0gLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvdjEwLjguMC9saWIvaW50ZXJuYWwvZXJyb3JzLmpzXG5cblxuZnVuY3Rpb24gb25lT2YoZXhwZWN0ZWQsIHRoaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdGVkKSkge1xuICAgIHZhciBsZW4gPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaSk7XG4gICAgfSk7XG5cbiAgICBpZiAobGVuID4gMikge1xuICAgICAgcmV0dXJuIFwib25lIG9mIFwiLmNvbmNhdCh0aGluZywgXCIgXCIpLmNvbmNhdChleHBlY3RlZC5zbGljZSgwLCBsZW4gLSAxKS5qb2luKCcsICcpLCBcIiwgb3IgXCIpICsgZXhwZWN0ZWRbbGVuIC0gMV07XG4gICAgfSBlbHNlIGlmIChsZW4gPT09IDIpIHtcbiAgICAgIHJldHVybiBcIm9uZSBvZiBcIi5jb25jYXQodGhpbmcsIFwiIFwiKS5jb25jYXQoZXhwZWN0ZWRbMF0sIFwiIG9yIFwiKS5jb25jYXQoZXhwZWN0ZWRbMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJvZiBcIi5jb25jYXQodGhpbmcsIFwiIFwiKS5jb25jYXQoZXhwZWN0ZWRbMF0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJvZiBcIi5jb25jYXQodGhpbmcsIFwiIFwiKS5jb25jYXQoU3RyaW5nKGV4cGVjdGVkKSk7XG4gIH1cbn0gLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL3N0YXJ0c1dpdGhcblxuXG5mdW5jdGlvbiBzdGFydHNXaXRoKHN0ciwgc2VhcmNoLCBwb3MpIHtcbiAgcmV0dXJuIHN0ci5zdWJzdHIoIXBvcyB8fCBwb3MgPCAwID8gMCA6ICtwb3MsIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG59IC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9lbmRzV2l0aFxuXG5cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc2VhcmNoLCB0aGlzX2xlbikge1xuICBpZiAodGhpc19sZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzX2xlbiA+IHN0ci5sZW5ndGgpIHtcbiAgICB0aGlzX2xlbiA9IHN0ci5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gc3RyLnN1YnN0cmluZyh0aGlzX2xlbiAtIHNlYXJjaC5sZW5ndGgsIHRoaXNfbGVuKSA9PT0gc2VhcmNoO1xufSAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvaW5jbHVkZXNcblxuXG5mdW5jdGlvbiBpbmNsdWRlcyhzdHIsIHNlYXJjaCwgc3RhcnQpIHtcbiAgaWYgKHR5cGVvZiBzdGFydCAhPT0gJ251bWJlcicpIHtcbiAgICBzdGFydCA9IDA7XG4gIH1cblxuICBpZiAoc3RhcnQgKyBzZWFyY2gubGVuZ3RoID4gc3RyLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyLmluZGV4T2Yoc2VhcmNoLCBzdGFydCkgIT09IC0xO1xuICB9XG59XG5cbmNyZWF0ZUVycm9yVHlwZSgnRVJSX0lOVkFMSURfT1BUX1ZBTFVFJywgZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiAnVGhlIHZhbHVlIFwiJyArIHZhbHVlICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiJztcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9JTlZBTElEX0FSR19UWVBFJywgZnVuY3Rpb24gKG5hbWUsIGV4cGVjdGVkLCBhY3R1YWwpIHtcbiAgLy8gZGV0ZXJtaW5lcjogJ211c3QgYmUnIG9yICdtdXN0IG5vdCBiZSdcbiAgdmFyIGRldGVybWluZXI7XG5cbiAgaWYgKHR5cGVvZiBleHBlY3RlZCA9PT0gJ3N0cmluZycgJiYgc3RhcnRzV2l0aChleHBlY3RlZCwgJ25vdCAnKSkge1xuICAgIGRldGVybWluZXIgPSAnbXVzdCBub3QgYmUnO1xuICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQucmVwbGFjZSgvXm5vdCAvLCAnJyk7XG4gIH0gZWxzZSB7XG4gICAgZGV0ZXJtaW5lciA9ICdtdXN0IGJlJztcbiAgfVxuXG4gIHZhciBtc2c7XG5cbiAgaWYgKGVuZHNXaXRoKG5hbWUsICcgYXJndW1lbnQnKSkge1xuICAgIC8vIEZvciBjYXNlcyBsaWtlICdmaXJzdCBhcmd1bWVudCdcbiAgICBtc2cgPSBcIlRoZSBcIi5jb25jYXQobmFtZSwgXCIgXCIpLmNvbmNhdChkZXRlcm1pbmVyLCBcIiBcIikuY29uY2F0KG9uZU9mKGV4cGVjdGVkLCAndHlwZScpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdHlwZSA9IGluY2x1ZGVzKG5hbWUsICcuJykgPyAncHJvcGVydHknIDogJ2FyZ3VtZW50JztcbiAgICBtc2cgPSBcIlRoZSBcXFwiXCIuY29uY2F0KG5hbWUsIFwiXFxcIiBcIikuY29uY2F0KHR5cGUsIFwiIFwiKS5jb25jYXQoZGV0ZXJtaW5lciwgXCIgXCIpLmNvbmNhdChvbmVPZihleHBlY3RlZCwgJ3R5cGUnKSk7XG4gIH1cblxuICBtc2cgKz0gXCIuIFJlY2VpdmVkIHR5cGUgXCIuY29uY2F0KHR5cGVvZiBhY3R1YWwpO1xuICByZXR1cm4gbXNnO1xufSwgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRicsICdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCcsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiAnVGhlICcgKyBuYW1lICsgJyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkJztcbn0pO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRScsICdQcmVtYXR1cmUgY2xvc2UnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnLCBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gJ0Nhbm5vdCBjYWxsICcgKyBuYW1lICsgJyBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkJztcbn0pO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfTVVMVElQTEVfQ0FMTEJBQ0snLCAnQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fQ0FOTk9UX1BJUEUnLCAnQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCcsICd3cml0ZSBhZnRlciBlbmQnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUycsICdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScsIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9VTktOT1dOX0VOQ09ESU5HJywgZnVuY3Rpb24gKGFyZykge1xuICByZXR1cm4gJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBhcmc7XG59LCBUeXBlRXJyb3IpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UJywgJ3N0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50Jyk7XG5tb2R1bGUuZXhwb3J0cy5jb2RlcyA9IGNvZGVzO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgZHVwbGV4IHN0cmVhbSBpcyBqdXN0IGEgc3RyZWFtIHRoYXQgaXMgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUuXG4vLyBTaW5jZSBKUyBkb2Vzbid0IGhhdmUgbXVsdGlwbGUgcHJvdG90eXBhbCBpbmhlcml0YW5jZSwgdGhpcyBjbGFzc1xuLy8gcHJvdG90eXBhbGx5IGluaGVyaXRzIGZyb20gUmVhZGFibGUsIGFuZCB0aGVuIHBhcmFzaXRpY2FsbHkgZnJvbVxuLy8gV3JpdGFibGUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgcmV0dXJuIGtleXM7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4O1xudmFyIFJlYWRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3JlYWRhYmxlJyk7XG52YXIgV3JpdGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fd3JpdGFibGUnKTtcbnJlcXVpcmUoJ2luaGVyaXRzJykoRHVwbGV4LCBSZWFkYWJsZSk7XG57XG4gIC8vIEFsbG93IHRoZSBrZXlzIGFycmF5IHRvIGJlIEdDJ2VkLlxuICB2YXIga2V5cyA9IG9iamVjdEtleXMoV3JpdGFibGUucHJvdG90eXBlKTtcbiAgZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gICAgdmFyIG1ldGhvZCA9IGtleXNbdl07XG4gICAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIER1cGxleC5wcm90b3R5cGVbbWV0aG9kXSA9IFdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdO1xuICB9XG59XG5mdW5jdGlvbiBEdXBsZXgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIFdyaXRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWU7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMucmVhZGFibGUgPT09IGZhbHNlKSB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgaWYgKG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gICAgaWYgKG9wdGlvbnMuYWxsb3dIYWxmT3BlbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYWxsb3dIYWxmT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG4gICAgfVxuICB9XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVMZW5ndGgnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aDtcbiAgfVxufSk7XG5cbi8vIHRoZSBuby1oYWxmLW9wZW4gZW5mb3JjZXJcbmZ1bmN0aW9uIG9uZW5kKCkge1xuICAvLyBJZiB0aGUgd3JpdGFibGUgc2lkZSBlbmRlZCwgdGhlbiB3ZSdyZSBvay5cbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQpIHJldHVybjtcblxuICAvLyBubyBtb3JlIGRhdGEgY2FuIGJlIHdyaXR0ZW4uXG4gIC8vIEJ1dCBhbGxvdyBtb3JlIHdyaXRlcyB0byBoYXBwZW4gaW4gdGhpcyB0aWNrLlxuICBwcm9jZXNzLm5leHRUaWNrKG9uRW5kTlQsIHRoaXMpO1xufVxuZnVuY3Rpb24gb25FbmROVChzZWxmKSB7XG4gIHNlbGYuZW5kKCk7XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gIH1cbn0pOyIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhc3NUaHJvdWdoO1xudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vX3N0cmVhbV90cmFuc2Zvcm0nKTtcbnJlcXVpcmUoJ2luaGVyaXRzJykoUGFzc1Rocm91Z2gsIFRyYW5zZm9ybSk7XG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuayk7XG59OyIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xudmFyIEVFbGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIEVFbGlzdGVuZXJDb3VudChlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVycyh0eXBlKS5sZW5ndGg7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiBkZWJ1ZygpIHt9O1xufVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXJMaXN0ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0Jyk7XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJyksXG4gIGdldEhpZ2hXYXRlck1hcmsgPSBfcmVxdWlyZS5nZXRIaWdoV2F0ZXJNYXJrO1xudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuY29kZXMsXG4gIEVSUl9JTlZBTElEX0FSR19UWVBFID0gX3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtcblxuLy8gTGF6eSBsb2FkZWQgdG8gaW1wcm92ZSB0aGUgc3RhcnR1cCBwZXJmb3JtYW5jZS5cbnZhciBTdHJpbmdEZWNvZGVyO1xudmFyIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcjtcbnZhciBmcm9tO1xucmVxdWlyZSgnaW5oZXJpdHMnKShSZWFkYWJsZSwgU3RyZWFtKTtcbnZhciBlcnJvck9yRGVzdHJveSA9IGRlc3Ryb3lJbXBsLmVycm9yT3JEZXN0cm95O1xudmFyIGtQcm94eUV2ZW50cyA9IFsnZXJyb3InLCAnY2xvc2UnLCAnZGVzdHJveScsICdwYXVzZScsICdyZXN1bWUnXTtcbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pO1xuXG4gIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnlcbiAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gIC8vIHRvIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBOb2RlLmpzIHRoYXQgZG8gbm90IGluY2x1ZGVcbiAgLy8gdGhlIHByZXBlbmRMaXN0ZW5lcigpIG1ldGhvZC4gVGhlIGdvYWwgaXMgdG8gZXZlbnR1YWxseSByZW1vdmUgdGhpcyBoYWNrLlxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKEFycmF5LmlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbn1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIGl0IHN0b3BzIGNhbGxpbmcgX3JlYWQoKSB0byBmaWxsIHRoZSBidWZmZXJcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyBcImRvbid0IGNhbGwgX3JlYWQgcHJlZW1wdGl2ZWx5IGV2ZXJcIlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBnZXRIaWdoV2F0ZXJNYXJrKHRoaXMsIG9wdGlvbnMsICdyZWFkYWJsZUhpZ2hXYXRlck1hcmsnLCBpc0R1cGxleCk7XG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGV2ZW50ICdyZWFkYWJsZScvJ2RhdGEnIGlzIGVtaXR0ZWRcbiAgLy8gaW1tZWRpYXRlbHksIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2VcbiAgLy8gYW55IGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHJlYWQgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuICB0aGlzLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICB0aGlzLnBhdXNlZCA9IHRydWU7XG5cbiAgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgdGhpcy5lbWl0Q2xvc2UgPSBvcHRpb25zLmVtaXRDbG9zZSAhPT0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdlbmQnIChhbmQgcG90ZW50aWFsbHkgJ2ZpbmlzaCcpXG4gIHRoaXMuYXV0b0Rlc3Ryb3kgPSAhIW9wdGlvbnMuYXV0b0Rlc3Ryb3k7XG5cbiAgLy8gaGFzIGl0IGJlZW4gZGVzdHJveWVkXG4gIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gdGhlIG51bWJlciBvZiB3cml0ZXJzIHRoYXQgYXJlIGF3YWl0aW5nIGEgZHJhaW4gZXZlbnQgaW4gLnBpcGUoKXNcbiAgdGhpcy5hd2FpdERyYWluID0gMDtcblxuICAvLyBpZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkXG4gIHRoaXMucmVhZGluZ01vcmUgPSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKSByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFJlYWRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41XG4gIHZhciBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiBEdXBsZXg7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleCk7XG5cbiAgLy8gbGVnYWN5XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKSB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95O1xuICB9XG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblJlYWRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgc2tpcENodW5rQ2hlY2s7XG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBlbmNvZGluZyA9ICcnO1xuICAgICAgfVxuICAgICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIGVuY29kaW5nLCBmYWxzZSwgc2tpcENodW5rQ2hlY2spO1xufTtcblxuLy8gVW5zaGlmdCBzaG91bGQgKmFsd2F5cyogYmUgc29tZXRoaW5nIGRpcmVjdGx5IG91dCBvZiByZWFkKClcblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBudWxsLCB0cnVlLCBmYWxzZSk7XG59O1xuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCwgc2tpcENodW5rQ2hlY2spIHtcbiAgZGVidWcoJ3JlYWRhYmxlQWRkQ2h1bmsnLCBjaHVuayk7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVyO1xuICAgIGlmICghc2tpcENodW5rQ2hlY2spIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gICAgaWYgKGVyKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgIXN0YXRlLm9iamVjdE1vZGUgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGNodW5rKSAhPT0gQnVmZmVyLnByb3RvdHlwZSkge1xuICAgICAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICAgICAgfVxuICAgICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQoKSk7ZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YoKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO2Vsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICAvLyBXZSBjYW4gcHVzaCBtb3JlIGRhdGEgaWYgd2UgYXJlIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLlxuICAvLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZSBtb3JlIGJ5dGVzLlxuICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLCBzdWNoIGFzIHRoZSByZXBsLlxuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkge1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgIGlmIChzdGF0ZS5uZWVkUmVhZGFibGUpIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICB9XG4gIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG59XG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlcjtcbiAgaWYgKCFfaXNVaW50OEFycmF5KGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnY2h1bmsnLCBbJ3N0cmluZycsICdCdWZmZXInLCAnVWludDhBcnJheSddLCBjaHVuayk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB2YXIgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IGRlY29kZXI7XG4gIC8vIElmIHNldEVuY29kaW5nKG51bGwpLCBkZWNvZGVyLmVuY29kaW5nIGVxdWFscyB1dGY4XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIGN1cnJlbnQgYnVmZmVyIHRvIGNvbnZlcnQgYWxyZWFkeSBzdG9yZWQgQnVmZmVyczpcbiAgdmFyIHAgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkO1xuICB2YXIgY29udGVudCA9ICcnO1xuICB3aGlsZSAocCAhPT0gbnVsbCkge1xuICAgIGNvbnRlbnQgKz0gZGVjb2Rlci53cml0ZShwLmRhdGEpO1xuICAgIHAgPSBwLm5leHQ7XG4gIH1cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgaWYgKGNvbnRlbnQgIT09ICcnKSB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKGNvbnRlbnQpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiAxR0JcbnZhciBNQVhfSFdNID0gMHg0MDAwMDAwMDtcbmZ1bmN0aW9uIGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pIHtcbiAgaWYgKG4gPj0gTUFYX0hXTSkge1xuICAgIC8vIFRPRE8ocm9uYWcpOiBUaHJvdyBFUlJfVkFMVUVfT1VUX09GX1JBTkdFLlxuICAgIG4gPSBNQVhfSFdNO1xuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50c1xuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgcmV0dXJuIDA7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXR1cm4gMTtcbiAgaWYgKG4gIT09IG4pIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDtlbHNlIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pO1xuICBpZiAobiA8PSBzdGF0ZS5sZW5ndGgpIHJldHVybiBuO1xuICAvLyBEb24ndCBoYXZlIGVub3VnaFxuICBpZiAoIXN0YXRlLmVuZGVkKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gc3RhdGUubGVuZ3RoO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICBuID0gcGFyc2VJbnQobiwgMTApO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKChzdGF0ZS5oaWdoV2F0ZXJNYXJrICE9PSAwID8gc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgOiBzdGF0ZS5sZW5ndGggPiAwKSB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7ZWxzZSBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpO1xuXG4gIC8vIGlmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9IGVsc2UgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIG4gPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7XG4gIH1cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuICBpZiAocmV0ID09PSBudWxsKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gICAgbiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG47XG4gICAgc3RhdGUuYXdhaXREcmFpbiA9IDA7XG4gIH1cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cbiAgaWYgKHJldCAhPT0gbnVsbCkgdGhpcy5lbWl0KCdkYXRhJywgcmV0KTtcbiAgcmV0dXJuIHJldDtcbn07XG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ29uRW9mQ2h1bmsnKTtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLnN5bmMpIHtcbiAgICAvLyBpZiB3ZSBhcmUgc3luYywgd2FpdCB1bnRpbCBuZXh0IHRpY2sgdG8gZW1pdCB0aGUgZGF0YS5cbiAgICAvLyBPdGhlcndpc2Ugd2UgcmlzayBlbWl0dGluZyBkYXRhIGluIHRoZSBmbG93KClcbiAgICAvLyB0aGUgcmVhZGFibGUgY29kZSB0cmlnZ2VycyBkdXJpbmcgYSByZWFkKCkgY2FsbFxuICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICAgIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBEb24ndCBlbWl0IHJlYWRhYmxlIHJpZ2h0IGF3YXkgaW4gc3luYyBtb2RlLCBiZWNhdXNlIHRoaXMgY2FuIHRyaWdnZXJcbi8vIGFub3RoZXIgcmVhZCgpIGNhbGwgPT4gc3RhY2sgb3ZlcmZsb3cuICBUaGlzIHdheSwgaXQgbWlnaHQgdHJpZ2dlclxuLy8gYSBuZXh0VGljayByZWN1cnNpb24gd2FybmluZywgYnV0IHRoYXQncyBub3Qgc28gYmFkLlxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5uZWVkUmVhZGFibGUsIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSk7XG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5mbG93aW5nKTtcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdFJlYWRhYmxlXywgc3RyZWFtKTtcbiAgfVxufVxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW1pdFJlYWRhYmxlXycsIHN0YXRlLmRlc3Ryb3llZCwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gIGlmICghc3RhdGUuZGVzdHJveWVkICYmIChzdGF0ZS5sZW5ndGggfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIH1cblxuICAvLyBUaGUgc3RyZWFtIG5lZWRzIGFub3RoZXIgcmVhZGFibGUgZXZlbnQgaWZcbiAgLy8gMS4gSXQgaXMgbm90IGZsb3dpbmcsIGFzIHRoZSBmbG93IG1lY2hhbmlzbSB3aWxsIHRha2VcbiAgLy8gICAgY2FyZSBvZiBpdC5cbiAgLy8gMi4gSXQgaXMgbm90IGVuZGVkLlxuICAvLyAzLiBJdCBpcyBiZWxvdyB0aGUgaGlnaFdhdGVyTWFyaywgc28gd2UgY2FuIHNjaGVkdWxlXG4gIC8vICAgIGFub3RoZXIgcmVhZGFibGUgbGF0ZXIuXG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9ICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgZmxvdyhzdHJlYW0pO1xufVxuXG4vLyBhdCB0aGlzIHBvaW50LCB0aGUgdXNlciBoYXMgcHJlc3VtYWJseSBzZWVuIHRoZSAncmVhZGFibGUnIGV2ZW50LFxuLy8gYW5kIGNhbGxlZCByZWFkKCkgdG8gY29uc3VtZSBzb21lIGRhdGEuICB0aGF0IG1heSBoYXZlIHRyaWdnZXJlZFxuLy8gaW4gdHVybiBhbm90aGVyIF9yZWFkKG4pIGNhbGwsIGluIHdoaWNoIGNhc2UgcmVhZGluZyA9IHRydWUgaWZcbi8vIGl0J3MgaW4gcHJvZ3Jlc3MuXG4vLyBIb3dldmVyLCBpZiB3ZSdyZSBub3QgZW5kZWQsIG9yIHJlYWRpbmcsIGFuZCB0aGUgbGVuZ3RoIDwgaHdtLFxuLy8gdGhlbiBnbyBhaGVhZCBhbmQgdHJ5IHRvIHJlYWQgc29tZSBtb3JlIHByZWVtcHRpdmVseS5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmdNb3JlKSB7XG4gICAgc3RhdGUucmVhZGluZ01vcmUgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIC8vIEF0dGVtcHQgdG8gcmVhZCBtb3JlIGRhdGEgaWYgd2Ugc2hvdWxkLlxuICAvL1xuICAvLyBUaGUgY29uZGl0aW9ucyBmb3IgcmVhZGluZyBtb3JlIGRhdGEgYXJlIChvbmUgb2YpOlxuICAvLyAtIE5vdCBlbm91Z2ggZGF0YSBidWZmZXJlZCAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykuIFRoZSBsb29wXG4gIC8vICAgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlIGJ1ZmZlciB3aXRoIGVub3VnaCBkYXRhIGlmIHN1Y2ggZGF0YVxuICAvLyAgIGlzIGF2YWlsYWJsZS4gSWYgaGlnaFdhdGVyTWFyayBpcyAwIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBmbG93aW5nIG1vZGVcbiAgLy8gICB3ZSBzaG91bGQgX25vdF8gYXR0ZW1wdCB0byBidWZmZXIgYW55IGV4dHJhIGRhdGEuIFdlJ2xsIGdldCBtb3JlIGRhdGFcbiAgLy8gICB3aGVuIHRoZSBzdHJlYW0gY29uc3VtZXIgY2FsbHMgcmVhZCgpIGluc3RlYWQuXG4gIC8vIC0gTm8gZGF0YSBpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIHN0cmVhbSBpcyBpbiBmbG93aW5nIG1vZGUuIEluIHRoaXMgbW9kZVxuICAvLyAgIHRoZSBsb29wIGJlbG93IGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyByZWFkKCkgaXMgY2FsbGVkLiBGYWlsaW5nIHRvXG4gIC8vICAgY2FsbCByZWFkIGhlcmUgd291bGQgYWJvcnQgdGhlIGZsb3cgYW5kIHRoZXJlJ3Mgbm8gb3RoZXIgbWVjaGFuaXNtIGZvclxuICAvLyAgIGNvbnRpbnVpbmcgdGhlIGZsb3cgaWYgdGhlIHN0cmVhbSBjb25zdW1lciBoYXMganVzdCBzdWJzY3JpYmVkIHRvIHRoZVxuICAvLyAgICdkYXRhJyBldmVudC5cbiAgLy9cbiAgLy8gSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIGNvbmRpdGlvbnMgdG8ga2VlcCByZWFkaW5nIGRhdGEsIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBwcmV2ZW50IHRoZSBkYXRhIGZyb20gYmVpbmcgcmVhZDpcbiAgLy8gLSBUaGUgc3RyZWFtIGhhcyBlbmRlZCAoc3RhdGUuZW5kZWQpLlxuICAvLyAtIFRoZXJlIGlzIGFscmVhZHkgYSBwZW5kaW5nICdyZWFkJyBvcGVyYXRpb24gKHN0YXRlLnJlYWRpbmcpLiBUaGlzIGlzIGFcbiAgLy8gICBjYXNlIHdoZXJlIHRoZSB0aGUgc3RyZWFtIGhhcyBjYWxsZWQgdGhlIGltcGxlbWVudGF0aW9uIGRlZmluZWQgX3JlYWQoKVxuICAvLyAgIG1ldGhvZCwgYnV0IHRoZXkgYXJlIHByb2Nlc3NpbmcgdGhlIGNhbGwgYXN5bmNocm9ub3VzbHkgYW5kIGhhdmUgX25vdF9cbiAgLy8gICBjYWxsZWQgcHVzaCgpIHdpdGggbmV3IGRhdGEuIEluIHRoaXMgY2FzZSB3ZSBza2lwIHBlcmZvcm1pbmcgbW9yZVxuICAvLyAgIHJlYWQoKXMuIFRoZSBleGVjdXRpb24gZW5kcyBpbiB0aGlzIG1ldGhvZCBhZ2FpbiBhZnRlciB0aGUgX3JlYWQoKSBlbmRzXG4gIC8vICAgdXAgY2FsbGluZyBwdXNoKCkgd2l0aCBtb3JlIGRhdGEuXG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDApKSB7XG4gICAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgICBkZWJ1ZygnbWF5YmVSZWFkTW9yZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpXG4gICAgICAvLyBkaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWs7XG4gIH1cbiAgc3RhdGUucmVhZGluZ01vcmUgPSBmYWxzZTtcbn1cblxuLy8gYWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICBlcnJvck9yRGVzdHJveSh0aGlzLCBuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ19yZWFkKCknKSk7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHN3aXRjaCAoc3RhdGUucGlwZXNDb3VudCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHN0YXRlLnBpcGVzID0gZGVzdDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YXRlLnBpcGVzID0gW3N0YXRlLnBpcGVzLCBkZXN0XTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzdGF0ZS5waXBlcy5wdXNoKGRlc3QpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgc3RhdGUucGlwZXNDb3VudCArPSAxO1xuICBkZWJ1ZygncGlwZSBjb3VudD0lZCBvcHRzPSVqJywgc3RhdGUucGlwZXNDb3VudCwgcGlwZU9wdHMpO1xuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcHJvY2Vzcy5uZXh0VGljayhlbmRGbik7ZWxzZSBzcmMub25jZSgnZW5kJywgZW5kRm4pO1xuICBkZXN0Lm9uKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgLy8gdG9vIHNsb3cuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGRlYnVnKCdjbGVhbnVwJyk7XG4gICAgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCB1bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSk7XG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG4gIHNyYy5vbignZGF0YScsIG9uZGF0YSk7XG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGRlYnVnKCdvbmRhdGEnKTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgZGVidWcoJ2Rlc3Qud3JpdGUnLCByZXQpO1xuICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciB1bnBpcGVkIGR1cmluZyBgZGVzdC53cml0ZSgpYCwgaXQgaXMgcG9zc2libGVcbiAgICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgICAgLy8gPT4gQ2hlY2sgd2hldGhlciBgZGVzdGAgaXMgc3RpbGwgYSBwaXBpbmcgZGVzdGluYXRpb24uXG4gICAgICBpZiAoKHN0YXRlLnBpcGVzQ291bnQgPT09IDEgJiYgc3RhdGUucGlwZXMgPT09IGRlc3QgfHwgc3RhdGUucGlwZXNDb3VudCA+IDEgJiYgaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCkgIT09IC0xKSAmJiAhY2xlYW5lZFVwKSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbisrO1xuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIGhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpO1xuICAgIHVucGlwZSgpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgaWYgKEVFbGlzdGVuZXJDb3VudChkZXN0LCAnZXJyb3InKSA9PT0gMCkgZXJyb3JPckRlc3Ryb3koZGVzdCwgZXIpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSB1c2VybGFuZCBvbmVzLlxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BpcGUgcmVzdW1lJyk7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG4gIHJldHVybiBkZXN0O1xufTtcbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24gcGlwZU9uRHJhaW5GdW5jdGlvblJlc3VsdCgpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pIHN0YXRlLmF3YWl0RHJhaW4tLTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiA9PT0gMCAmJiBFRWxpc3RlbmVyQ291bnQoc3JjLCAnZGF0YScpKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHVucGlwZUluZm8gPSB7XG4gICAgaGFzVW5waXBlZDogZmFsc2VcbiAgfTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuICAgIGlmICghZGVzdCkgZGVzdCA9IHN0YXRlLnBpcGVzO1xuXG4gICAgLy8gZ290IGEgbWF0Y2guXG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBpZiAoZGVzdCkgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNsb3cgY2FzZS4gbXVsdGlwbGUgcGlwZSBkZXN0aW5hdGlvbnMuXG5cbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICB2YXIgZGVzdHMgPSBzdGF0ZS5waXBlcztcbiAgICB2YXIgbGVuID0gc3RhdGUucGlwZXNDb3VudDtcbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHtcbiAgICAgIGhhc1VucGlwZWQ6IGZhbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB0cnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICB2YXIgaW5kZXggPSBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KTtcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXM7XG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgZm4pIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm4pO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIHVwZGF0ZSByZWFkYWJsZUxpc3RlbmluZyBzbyB0aGF0IHJlc3VtZSgpIG1heSBiZSBhIG5vLW9wXG4gICAgLy8gYSBmZXcgbGluZXMgZG93bi4gVGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScpLlxuICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gdGhpcy5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMDtcblxuICAgIC8vIFRyeSBzdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWRcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHRoaXMucmVzdW1lKCk7XG4gIH0gZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGRlYnVnKCdvbiByZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUucmVhZGluZyk7XG4gICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcywgZXYsIGZuKTtcbiAgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lb25lIHN0aWxsIGxpc3RlbmluZyB0b1xuICAgIC8vIHJlYWRhYmxlIGFuZCByZXNldCB0aGUgc3RhdGUuIEhvd2V2ZXIgdGhpcyBuZWVkcyB0byBoYXBwZW5cbiAgICAvLyBhZnRlciByZWFkYWJsZSBoYXMgYmVlbiBlbWl0dGVkIGJ1dCBiZWZvcmUgSS9PIChuZXh0VGljaykgdG9cbiAgICAvLyBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJywgZm4pIGN5Y2xlcy4gVGhpcyBtZWFucyB0aGF0IGNhbGxpbmdcbiAgICAvLyByZXN1bWUgd2l0aGluIHRoZSBzYW1lIHRpY2sgd2lsbCBoYXZlIG5vXG4gICAgLy8gZWZmZWN0LlxuICAgIHByb2Nlc3MubmV4dFRpY2sodXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcsIHRoaXMpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIChldikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgaWYgKGV2ID09PSAncmVhZGFibGUnIHx8IGV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcyk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5mdW5jdGlvbiB1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyhzZWxmKSB7XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3JlYWRhYmxlU3RhdGU7XG4gIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc2VsZi5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMDtcbiAgaWYgKHN0YXRlLnJlc3VtZVNjaGVkdWxlZCAmJiAhc3RhdGUucGF1c2VkKSB7XG4gICAgLy8gZmxvd2luZyBuZWVkcyB0byBiZSBzZXQgdG8gdHJ1ZSBub3csIG90aGVyd2lzZVxuICAgIC8vIHRoZSB1cGNvbWluZyByZXN1bWUgd2lsbCBub3QgZmxvdy5cbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcblxuICAgIC8vIGNydWRlIHdheSB0byBjaGVjayBpZiB3ZSBzaG91bGQgcmVzdW1lXG4gIH0gZWxzZSBpZiAoc2VsZi5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwKSB7XG4gICAgc2VsZi5yZXN1bWUoKTtcbiAgfVxufVxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKTtcbiAgc2VsZi5yZWFkKDApO1xufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lJyk7XG4gICAgLy8gd2UgZmxvdyBvbmx5IGlmIHRoZXJlIGlzIG5vIG9uZSBsaXN0ZW5pbmdcbiAgICAvLyBmb3IgcmVhZGFibGUsIGJ1dCB3ZSBzdGlsbCBoYXZlIHRvIGNhbGxcbiAgICAvLyByZXN1bWUoKVxuICAgIHN0YXRlLmZsb3dpbmcgPSAhc3RhdGUucmVhZGFibGVMaXN0ZW5pbmc7XG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKTtcbiAgfVxuICBzdGF0ZS5wYXVzZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2socmVzdW1lXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1ZygncmVzdW1lJywgc3RhdGUucmVhZGluZyk7XG4gIGlmICghc3RhdGUucmVhZGluZykge1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApO1xufVxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQgPSB0cnVlO1xuICByZXR1cm4gdGhpcztcbn07XG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpO1xufVxuXG4vLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgX3RoaXMucHVzaChudWxsKTtcbiAgfSk7XG4gIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgIC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlICYmIChjaHVuayA9PT0gbnVsbCB8fCBjaHVuayA9PT0gdW5kZWZpbmVkKSkgcmV0dXJuO2Vsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpIHJldHVybjtcbiAgICB2YXIgcmV0ID0gX3RoaXMucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gbWV0aG9kV3JhcChtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1ldGhvZFdyYXBSZXR1cm5GdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfShpKTtcbiAgICB9XG4gIH1cblxuICAvLyBwcm94eSBjZXJ0YWluIGltcG9ydGFudCBldmVudHMuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwga1Byb3h5RXZlbnRzLmxlbmd0aDsgbisrKSB7XG4gICAgc3RyZWFtLm9uKGtQcm94eUV2ZW50c1tuXSwgdGhpcy5lbWl0LmJpbmQodGhpcywga1Byb3h5RXZlbnRzW25dKSk7XG4gIH1cblxuICAvLyB3aGVuIHdlIHRyeSB0byBjb25zdW1lIHNvbWUgbW9yZSBieXRlcywgc2ltcGx5IHVucGF1c2UgdGhlXG4gIC8vIHVuZGVybHlpbmcgc3RyZWFtLlxuICB0aGlzLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBfcmVhZCcsIG4pO1xuICAgIGlmIChwYXVzZWQpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvcicpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yKHRoaXMpO1xuICB9O1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVCdWZmZXInLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlICYmIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUZsb3dpbmcnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHN0YXRlKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IHN0YXRlO1xuICAgIH1cbiAgfVxufSk7XG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlTGVuZ3RoJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg7XG4gIH1cbn0pO1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICB2YXIgcmV0O1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KCk7ZWxzZSBpZiAoIW4gfHwgbiA+PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAvLyByZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGxpc3RcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oJycpO2Vsc2UgaWYgKHN0YXRlLmJ1ZmZlci5sZW5ndGggPT09IDEpIHJldCA9IHN0YXRlLmJ1ZmZlci5maXJzdCgpO2Vsc2UgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpO1xuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0XG4gICAgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbnN1bWUobiwgc3RhdGUuZGVjb2Rlcik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZScsIHN0YXRlLmVuZEVtaXR0ZWQpO1xuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZU5UJywgc3RhdGUuZW5kRW1pdHRlZCwgc3RhdGUubGVuZ3RoKTtcblxuICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBnZXQgb25lIGxhc3QgdW5zaGlmdC5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdlbmQnKTtcbiAgICBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAgIC8vIGlmIHRoZSB3cml0YWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsXG4gICAgICB2YXIgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICAgICAgaWYgKCF3U3RhdGUgfHwgd1N0YXRlLmF1dG9EZXN0cm95ICYmIHdTdGF0ZS5maW5pc2hlZCkge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVhZGFibGUuZnJvbSA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgb3B0cykge1xuICAgIGlmIChmcm9tID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZyb20gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZnJvbScpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpO1xuICB9O1xufVxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufSIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHRyYW5zZm9ybSBzdHJlYW0gaXMgYSByZWFkYWJsZS93cml0YWJsZSBzdHJlYW0gd2hlcmUgeW91IGRvXG4vLyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gIFNvbWV0aW1lcyBpdCdzIGNhbGxlZCBhIFwiZmlsdGVyXCIsXG4vLyBidXQgdGhhdCdzIG5vdCBhIGdyZWF0IG5hbWUgZm9yIGl0LCBzaW5jZSB0aGF0IGltcGxpZXMgYSB0aGluZyB3aGVyZVxuLy8gc29tZSBiaXRzIHBhc3MgdGhyb3VnaCwgYW5kIG90aGVycyBhcmUgc2ltcGx5IGlnbm9yZWQuICAoVGhhdCB3b3VsZFxuLy8gYmUgYSB2YWxpZCBleGFtcGxlIG9mIGEgdHJhbnNmb3JtLCBvZiBjb3Vyc2UuKVxuLy9cbi8vIFdoaWxlIHRoZSBvdXRwdXQgaXMgY2F1c2FsbHkgcmVsYXRlZCB0byB0aGUgaW5wdXQsIGl0J3Mgbm90IGFcbi8vIG5lY2Vzc2FyaWx5IHN5bW1ldHJpYyBvciBzeW5jaHJvbm91cyB0cmFuc2Zvcm1hdGlvbi4gIEZvciBleGFtcGxlLFxuLy8gYSB6bGliIHN0cmVhbSBtaWdodCB0YWtlIG11bHRpcGxlIHBsYWluLXRleHQgd3JpdGVzKCksIGFuZCB0aGVuXG4vLyBlbWl0IGEgc2luZ2xlIGNvbXByZXNzZWQgY2h1bmsgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuXG4vL1xuLy8gSGVyZSdzIGhvdyB0aGlzIHdvcmtzOlxuLy9cbi8vIFRoZSBUcmFuc2Zvcm0gc3RyZWFtIGhhcyBhbGwgdGhlIGFzcGVjdHMgb2YgdGhlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuLy8gc3RyZWFtIGNsYXNzZXMuICBXaGVuIHlvdSB3cml0ZShjaHVuayksIHRoYXQgY2FsbHMgX3dyaXRlKGNodW5rLGNiKVxuLy8gaW50ZXJuYWxseSwgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBhIGxvdCBvZiBwZW5kaW5nIHdyaXRlc1xuLy8gYnVmZmVyZWQgdXAuICBXaGVuIHlvdSBjYWxsIHJlYWQoKSwgdGhhdCBjYWxscyBfcmVhZChuKSB1bnRpbFxuLy8gdGhlcmUncyBlbm91Z2ggcGVuZGluZyByZWFkYWJsZSBkYXRhIGJ1ZmZlcmVkIHVwLlxuLy9cbi8vIEluIGEgdHJhbnNmb3JtIHN0cmVhbSwgdGhlIHdyaXR0ZW4gZGF0YSBpcyBwbGFjZWQgaW4gYSBidWZmZXIuICBXaGVuXG4vLyBfcmVhZChuKSBpcyBjYWxsZWQsIGl0IHRyYW5zZm9ybXMgdGhlIHF1ZXVlZCB1cCBkYXRhLCBjYWxsaW5nIHRoZVxuLy8gYnVmZmVyZWQgX3dyaXRlIGNiJ3MgYXMgaXQgY29uc3VtZXMgY2h1bmtzLiAgSWYgY29uc3VtaW5nIGEgc2luZ2xlXG4vLyB3cml0dGVuIGNodW5rIHdvdWxkIHJlc3VsdCBpbiBtdWx0aXBsZSBvdXRwdXQgY2h1bmtzLCB0aGVuIHRoZSBmaXJzdFxuLy8gb3V0cHV0dGVkIGJpdCBjYWxscyB0aGUgcmVhZGNiLCBhbmQgc3Vic2VxdWVudCBjaHVua3MganVzdCBnbyBpbnRvXG4vLyB0aGUgcmVhZCBidWZmZXIsIGFuZCB3aWxsIGNhdXNlIGl0IHRvIGVtaXQgJ3JlYWRhYmxlJyBpZiBuZWNlc3NhcnkuXG4vL1xuLy8gVGhpcyB3YXksIGJhY2stcHJlc3N1cmUgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcmVhZGluZyBzaWRlLFxuLy8gc2luY2UgX3JlYWQgaGFzIHRvIGJlIGNhbGxlZCB0byBzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGNodW5rLiAgSG93ZXZlcixcbi8vIGEgcGF0aG9sb2dpY2FsIGluZmxhdGUgdHlwZSBvZiB0cmFuc2Zvcm0gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBidWZmZXJpbmdcbi8vIGhlcmUuICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhIHN0cmVhbSB3aGVyZSBldmVyeSBieXRlIG9mIGlucHV0IGlzXG4vLyBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIGZyb20gMC0yNTUsIGFuZCB0aGVuIHJlc3VsdHMgaW4gdGhhdCBtYW55XG4vLyBieXRlcyBvZiBvdXRwdXQuICBXcml0aW5nIHRoZSA0IGJ5dGVzIHtmZixmZixmZixmZn0gd291bGQgcmVzdWx0IGluXG4vLyAxa2Igb2YgZGF0YSBiZWluZyBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIHlvdSBjb3VsZCB3cml0ZSBhIHZlcnkgc21hbGxcbi8vIGFtb3VudCBvZiBpbnB1dCwgYW5kIGVuZCB1cCB3aXRoIGEgdmVyeSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0LiAgSW5cbi8vIHN1Y2ggYSBwYXRob2xvZ2ljYWwgaW5mbGF0aW5nIG1lY2hhbmlzbSwgdGhlcmUnZCBiZSBubyB3YXkgdG8gdGVsbFxuLy8gdGhlIHN5c3RlbSB0byBzdG9wIGRvaW5nIHRoZSB0cmFuc2Zvcm0uICBBIHNpbmdsZSA0TUIgd3JpdGUgY291bGRcbi8vIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuXG4vL1xuLy8gSG93ZXZlciwgZXZlbiBpbiBzdWNoIGEgcGF0aG9sb2dpY2FsIGNhc2UsIG9ubHkgYSBzaW5nbGUgd3JpdHRlbiBjaHVua1xuLy8gd291bGQgYmUgY29uc3VtZWQsIGFuZCB0aGVuIHRoZSByZXN0IHdvdWxkIHdhaXQgKHVuLXRyYW5zZm9ybWVkKSB1bnRpbFxuLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHRyYW5zZm9ybWVkIGNodW5rIHdlcmUgY29uc3VtZWQuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG52YXIgX3JlcXVpcmUkY29kZXMgPSByZXF1aXJlKCcuLi9lcnJvcnMnKS5jb2RlcyxcbiAgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgRVJSX01VTFRJUExFX0NBTExCQUNLID0gX3JlcXVpcmUkY29kZXMuRVJSX01VTFRJUExFX0NBTExCQUNLLFxuICBFUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HID0gX3JlcXVpcmUkY29kZXMuRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyxcbiAgRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wID0gX3JlcXVpcmUkY29kZXMuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wO1xudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbnJlcXVpcmUoJ2luaGVyaXRzJykoVHJhbnNmb3JtLCBEdXBsZXgpO1xuZnVuY3Rpb24gYWZ0ZXJUcmFuc2Zvcm0oZXIsIGRhdGEpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuICB2YXIgY2IgPSB0cy53cml0ZWNiO1xuICBpZiAoY2IgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSk7XG4gIH1cbiAgdHMud3JpdGVjaHVuayA9IG51bGw7XG4gIHRzLndyaXRlY2IgPSBudWxsO1xuICBpZiAoZGF0YSAhPSBudWxsKVxuICAgIC8vIHNpbmdsZSBlcXVhbHMgY2hlY2sgZm9yIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICAgIHRoaXMucHVzaChkYXRhKTtcbiAgY2IoZXIpO1xuICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn1cbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKSByZXR1cm4gbmV3IFRyYW5zZm9ybShvcHRpb25zKTtcbiAgRHVwbGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0ge1xuICAgIGFmdGVyVHJhbnNmb3JtOiBhZnRlclRyYW5zZm9ybS5iaW5kKHRoaXMpLFxuICAgIG5lZWRUcmFuc2Zvcm06IGZhbHNlLFxuICAgIHRyYW5zZm9ybWluZzogZmFsc2UsXG4gICAgd3JpdGVjYjogbnVsbCxcbiAgICB3cml0ZWNodW5rOiBudWxsLFxuICAgIHdyaXRlZW5jb2Rpbmc6IG51bGxcbiAgfTtcblxuICAvLyBzdGFydCBvdXQgYXNraW5nIGZvciBhIHJlYWRhYmxlIGV2ZW50IG9uY2UgZGF0YSBpcyB0cmFuc2Zvcm1lZC5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gIC8vIHdlIGhhdmUgaW1wbGVtZW50ZWQgdGhlIF9yZWFkIG1ldGhvZCwgYW5kIGRvbmUgdGhlIG90aGVyIHRoaW5nc1xuICAvLyB0aGF0IFJlYWRhYmxlIHdhbnRzIGJlZm9yZSB0aGUgZmlyc3QgX3JlYWQgY2FsbCwgc28gdW5zZXQgdGhlXG4gIC8vIHN5bmMgZ3VhcmQgZmxhZy5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2U7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fdHJhbnNmb3JtID0gb3B0aW9ucy50cmFuc2Zvcm07XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaCA9IG9wdGlvbnMuZmx1c2g7XG4gIH1cblxuICAvLyBXaGVuIHRoZSB3cml0YWJsZSBzaWRlIGZpbmlzaGVzLCB0aGVuIGZsdXNoIG91dCBhbnl0aGluZyByZW1haW5pbmcuXG4gIHRoaXMub24oJ3ByZWZpbmlzaCcsIHByZWZpbmlzaCk7XG59XG5mdW5jdGlvbiBwcmVmaW5pc2goKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIGlmICh0eXBlb2YgdGhpcy5fZmx1c2ggPT09ICdmdW5jdGlvbicgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkKSB7XG4gICAgdGhpcy5fZmx1c2goZnVuY3Rpb24gKGVyLCBkYXRhKSB7XG4gICAgICBkb25lKF90aGlzLCBlciwgZGF0YSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZG9uZSh0aGlzLCBudWxsLCBudWxsKTtcbiAgfVxufVxuVHJhbnNmb3JtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHJldHVybiBEdXBsZXgucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcpO1xufTtcblxuLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB5b3UgZG8gc3R1ZmYhXG4vLyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyAnY2h1bmsnIGlzIGFuIGlucHV0IGNodW5rLlxuLy9cbi8vIENhbGwgYHB1c2gobmV3Q2h1bmspYCB0byBwYXNzIGFsb25nIHRyYW5zZm9ybWVkIG91dHB1dFxuLy8gdG8gdGhlIHJlYWRhYmxlIHNpZGUuICBZb3UgbWF5IGNhbGwgJ3B1c2gnIHplcm8gb3IgbW9yZSB0aW1lcy5cbi8vXG4vLyBDYWxsIGBjYihlcnIpYCB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgY2h1bmsuICBJZiB5b3UgcGFzc1xuLy8gYW4gZXJyb3IsIHRoZW4gdGhhdCdsbCBwdXQgdGhlIGh1cnQgb24gdGhlIHdob2xlIG9wZXJhdGlvbi4gIElmIHlvdVxuLy8gbmV2ZXIgY2FsbCBjYigpLCB0aGVuIHlvdSdsbCBuZXZlciBnZXQgYW5vdGhlciBjaHVuay5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3RyYW5zZm9ybSgpJykpO1xufTtcblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLndyaXRlY2IgPSBjYjtcbiAgdHMud3JpdGVjaHVuayA9IGNodW5rO1xuICB0cy53cml0ZWVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIGlmICghdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAodHMubmVlZFRyYW5zZm9ybSB8fCBycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufTtcblxuLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgYXJncyBhcmUgaGVyZS5cbi8vIF90cmFuc2Zvcm0gZG9lcyBhbGwgdGhlIHdvcmsuXG4vLyBUaGF0IHdlIGdvdCBoZXJlIG1lYW5zIHRoYXQgdGhlIHJlYWRhYmxlIHNpZGUgd2FudHMgbW9yZSBkYXRhLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICBpZiAodHMud3JpdGVjaHVuayAhPT0gbnVsbCAmJiAhdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdHMudHJhbnNmb3JtaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl90cmFuc2Zvcm0odHMud3JpdGVjaHVuaywgdHMud3JpdGVlbmNvZGluZywgdHMuYWZ0ZXJUcmFuc2Zvcm0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG1hcmsgdGhhdCB3ZSBuZWVkIGEgdHJhbnNmb3JtLCBzbyB0aGF0IGFueSBkYXRhIHRoYXQgY29tZXMgaW5cbiAgICAvLyB3aWxsIGdldCBwcm9jZXNzZWQsIG5vdyB0aGF0IHdlJ3ZlIGFza2VkIGZvciBpdC5cbiAgICB0cy5uZWVkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgfVxufTtcblRyYW5zZm9ybS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICBEdXBsZXgucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcywgZXJyLCBmdW5jdGlvbiAoZXJyMikge1xuICAgIGNiKGVycjIpO1xuICB9KTtcbn07XG5mdW5jdGlvbiBkb25lKHN0cmVhbSwgZXIsIGRhdGEpIHtcbiAgaWYgKGVyKSByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICBpZiAoZGF0YSAhPSBudWxsKVxuICAgIC8vIHNpbmdsZSBlcXVhbHMgY2hlY2sgZm9yIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICAgIHN0cmVhbS5wdXNoKGRhdGEpO1xuXG4gIC8vIFRPRE8oQnJpZGdlQVIpOiBXcml0ZSBhIHRlc3QgZm9yIHRoZXNlIHR3byBlcnJvciBjYXNlc1xuICAvLyBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gdGhlIHdyaXRlIGJ1ZmZlciwgdGhlbiB0aGF0IG1lYW5zXG4gIC8vIHRoYXQgbm90aGluZyBtb3JlIHdpbGwgZXZlciBiZSBwcm92aWRlZFxuICBpZiAoc3RyZWFtLl93cml0YWJsZVN0YXRlLmxlbmd0aCkgdGhyb3cgbmV3IEVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCgpO1xuICBpZiAoc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpIHRocm93IG5ldyBFUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HKCk7XG4gIHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcbn0iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG5cbi8qIDxyZXBsYWNlbWVudD4gKi9cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxuLy8gSXQgc2VlbXMgYSBsaW5rZWQgbGlzdCBidXQgaXQgaXMgbm90XG4vLyB0aGVyZSB3aWxsIGJlIG9ubHkgMiBvZiB0aGVzZSBmb3IgZWFjaCBzdHJlYW1cbmZ1bmN0aW9uIENvcmtlZFJlcXVlc3Qoc3RhdGUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5lbnRyeSA9IG51bGw7XG4gIHRoaXMuZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICAgIG9uQ29ya2VkRmluaXNoKF90aGlzLCBzdGF0ZSk7XG4gIH07XG59XG4vKiA8L3JlcGxhY2VtZW50PiAqL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5Xcml0YWJsZS5Xcml0YWJsZVN0YXRlID0gV3JpdGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpbnRlcm5hbFV0aWwgPSB7XG4gIGRlcHJlY2F0ZTogcmVxdWlyZSgndXRpbC1kZXByZWNhdGUnKVxufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZScpLFxuICBnZXRIaWdoV2F0ZXJNYXJrID0gX3JlcXVpcmUuZ2V0SGlnaFdhdGVyTWFyaztcbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0sgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLFxuICBFUlJfU1RSRUFNX0RFU1RST1lFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fREVTVFJPWUVELFxuICBFUlJfU1RSRUFNX05VTExfVkFMVUVTID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxcbiAgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxcbiAgRVJSX1VOS05PV05fRU5DT0RJTkcgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVU5LTk9XTl9FTkNPRElORztcbnZhciBlcnJvck9yRGVzdHJveSA9IGRlc3Ryb3lJbXBsLmVycm9yT3JEZXN0cm95O1xucmVxdWlyZSgnaW5oZXJpdHMnKShXcml0YWJsZSwgU3RyZWFtKTtcbmZ1bmN0aW9uIG5vcCgpIHt9XG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0sXG4gIC8vIGUuZy4gb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUgdnMuIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlLCBldGMuXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KTtcblxuICAvLyBpZiBfZmluYWwgaGFzIGJlZW4gY2FsbGVkXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZTtcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlO1xuICAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuICB0aGlzLmVuZGluZyA9IGZhbHNlO1xuICAvLyB3aGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gd2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBzaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyBub3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gd2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbFxuICB0aGlzLmNvcmtlZCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gYSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQncyBwYXNzZWQgdG8gX3dyaXRlKGNodW5rLGNiKVxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9O1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLGVuY29kaW5nLGNiKVxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcblxuICAvLyBudW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWRcbiAgdGhpcy5wZW5kaW5nY2IgPSAwO1xuXG4gIC8vIGVtaXQgcHJlZmluaXNoIGlmIHRoZSBvbmx5IHRoaW5nIHdlJ3JlIHdhaXRpbmcgZm9yIGlzIF93cml0ZSBjYnNcbiAgLy8gVGhpcyBpcyByZWxldmFudCBmb3Igc3luY2hyb25vdXMgVHJhbnNmb3JtIHN0cmVhbXNcbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgdGhpcy5lbWl0Q2xvc2UgPSBvcHRpb25zLmVtaXRDbG9zZSAhPT0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdmaW5pc2gnIChhbmQgcG90ZW50aWFsbHkgJ2VuZCcpXG4gIHRoaXMuYXV0b0Rlc3Ryb3kgPSAhIW9wdGlvbnMuYXV0b0Rlc3Ryb3k7XG5cbiAgLy8gY291bnQgYnVmZmVyZWQgcmVxdWVzdHNcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG5cbiAgLy8gYWxsb2NhdGUgdGhlIGZpcnN0IENvcmtlZFJlcXVlc3QsIHRoZXJlIGlzIGFsd2F5c1xuICAvLyBvbmUgYWxsb2NhdGVkIGFuZCBmcmVlIHRvIHVzZSwgYW5kIHdlIG1haW50YWluIGF0IG1vc3QgdHdvXG4gIHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3QodGhpcyk7XG59XG5Xcml0YWJsZVN0YXRlLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbiBnZXRCdWZmZXIoKSB7XG4gIHZhciBjdXJyZW50ID0gdGhpcy5idWZmZXJlZFJlcXVlc3Q7XG4gIHZhciBvdXQgPSBbXTtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gICAgICBnZXQ6IGludGVybmFsVXRpbC5kZXByZWNhdGUoZnVuY3Rpb24gd3JpdGFibGVTdGF0ZUJ1ZmZlckdldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCk7XG4gICAgICB9LCAnX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgJyArICdpbnN0ZWFkLicsICdERVAwMDAzJylcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykge31cbn0pKCk7XG5cbi8vIFRlc3QgX3dyaXRhYmxlU3RhdGUgZm9yIGluaGVyaXRhbmNlIHRvIGFjY291bnQgZm9yIER1cGxleCBzdHJlYW1zLFxuLy8gd2hvc2UgcHJvdG90eXBlIGNoYWluIG9ubHkgcG9pbnRzIHRvIFJlYWRhYmxlLlxudmFyIHJlYWxIYXNJbnN0YW5jZTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5oYXNJbnN0YW5jZSAmJiB0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG9iamVjdCkge1xuICAgICAgaWYgKHJlYWxIYXNJbnN0YW5jZS5jYWxsKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHRoaXMgIT09IFdyaXRhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGU7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IGZ1bmN0aW9uIHJlYWxIYXNJbnN0YW5jZShvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgdGhpcztcbiAgfTtcbn1cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICAvLyBXcml0YWJsZSBjdG9yIGlzIGFwcGxpZWQgdG8gRHVwbGV4ZXMsIHRvby5cbiAgLy8gYHJlYWxIYXNJbnN0YW5jZWAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdXNpbmcgcGxhaW4gYGluc3RhbmNlb2ZgXG4gIC8vIHdvdWxkIHJldHVybiBmYWxzZSwgYXMgbm8gYF93cml0YWJsZVN0YXRlYCBwcm9wZXJ0eSBpcyBhdHRhY2hlZC5cblxuICAvLyBUcnlpbmcgdG8gdXNlIHRoZSBjdXN0b20gYGluc3RhbmNlb2ZgIGZvciBXcml0YWJsZSBoZXJlIHdpbGwgYWxzbyBicmVhayB0aGVcbiAgLy8gTm9kZS5qcyBMYXp5VHJhbnNmb3JtIGltcGxlbWVudGF0aW9uLCB3aGljaCBoYXMgYSBub24tdHJpdmlhbCBnZXR0ZXIgZm9yXG4gIC8vIGBfd3JpdGFibGVTdGF0ZWAgdGhhdCB3b3VsZCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cblxuICAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBXcml0YWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNVxuICB2YXIgaXNEdXBsZXggPSB0aGlzIGluc3RhbmNlb2YgRHVwbGV4O1xuICBpZiAoIWlzRHVwbGV4ICYmICFyZWFsSGFzSW5zdGFuY2UuY2FsbChXcml0YWJsZSwgdGhpcykpIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleCk7XG5cbiAgLy8gbGVnYWN5LlxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKSB0aGlzLl93cml0ZXYgPSBvcHRpb25zLndyaXRldjtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbDtcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIGVycm9yT3JEZXN0cm95KHRoaXMsIG5ldyBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFKCkpO1xufTtcbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBjYikge1xuICB2YXIgZXIgPSBuZXcgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQoKTtcbiAgLy8gVE9ETzogZGVmZXIgZXJyb3IgZXZlbnRzIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlLCBub3QganVzdCB0aGUgY2JcbiAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gIHByb2Nlc3MubmV4dFRpY2soY2IsIGVyKTtcbn1cblxuLy8gQ2hlY2tzIHRoYXQgYSB1c2VyLXN1cHBsaWVkIGNodW5rIGlzIHZhbGlkLCBlc3BlY2lhbGx5IGZvciB0aGUgcGFydGljdWxhclxuLy8gbW9kZSB0aGUgc3RyZWFtIGlzIGluLiBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IGBudWxsYCBpcyBuZXZlciBhY2NlcHRlZFxuLy8gYW5kIHVuZGVmaW5lZC9ub24tc3RyaW5nIHZhbHVlcyBhcmUgb25seSBhbGxvd2VkIGluIG9iamVjdCBtb2RlLlxuZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgY2IpIHtcbiAgdmFyIGVyO1xuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBlciA9IG5ldyBFUlJfU1RSRUFNX05VTExfVkFMVUVTKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdjaHVuaycsIFsnc3RyaW5nJywgJ0J1ZmZlciddLCBjaHVuayk7XG4gIH1cbiAgaWYgKGVyKSB7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcbiAgdmFyIGlzQnVmID0gIXN0YXRlLm9iamVjdE1vZGUgJiYgX2lzVWludDhBcnJheShjaHVuayk7XG4gIGlmIChpc0J1ZiAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGlmIChpc0J1ZikgZW5jb2RpbmcgPSAnYnVmZmVyJztlbHNlIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG5vcDtcbiAgaWYgKHN0YXRlLmVuZGluZykgd3JpdGVBZnRlckVuZCh0aGlzLCBjYik7ZWxzZSBpZiAoaXNCdWYgfHwgdmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSkge1xuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHJldCA9IHdyaXRlT3JCdWZmZXIodGhpcywgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufTtcbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrO1xufTtcbldyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcbiAgICBpZiAoIXN0YXRlLndyaXRpbmcgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIGNsZWFyQnVmZmVyKHRoaXMsIHN0YXRlKTtcbiAgfVxufTtcbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghKFsnaGV4JywgJ3V0ZjgnLCAndXRmLTgnLCAnYXNjaWknLCAnYmluYXJ5JywgJ2Jhc2U2NCcsICd1Y3MyJywgJ3Vjcy0yJywgJ3V0ZjE2bGUnLCAndXRmLTE2bGUnLCAncmF3J10uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHRocm93IG5ldyBFUlJfVU5LTk9XTl9FTkNPRElORyhlbmNvZGluZyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHJldHVybiB0aGlzO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUJ1ZmZlcicsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKTtcbiAgfVxufSk7XG5mdW5jdGlvbiBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKSB7XG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiBzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAoIWlzQnVmKSB7XG4gICAgdmFyIG5ld0NodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKGNodW5rICE9PSBuZXdDaHVuaykge1xuICAgICAgaXNCdWYgPSB0cnVlO1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJztcbiAgICAgIGNodW5rID0gbmV3Q2h1bms7XG4gICAgfVxuICB9XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgc3RhdGUubGVuZ3RoICs9IGxlbjtcbiAgdmFyIHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIC8vIHdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkgc3RhdGUubmVlZERyYWluID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSB7XG4gICAgICBjaHVuazogY2h1bmssXG4gICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICBpc0J1ZjogaXNCdWYsXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHdyaXRldiwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHN0YXRlLndyaXRlbGVuID0gbGVuO1xuICBzdGF0ZS53cml0ZWNiID0gY2I7XG4gIHN0YXRlLndyaXRpbmcgPSB0cnVlO1xuICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLmRlc3Ryb3llZCkgc3RhdGUub253cml0ZShuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3dyaXRlJykpO2Vsc2UgaWYgKHdyaXRldikgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpO2Vsc2Ugc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpO1xuICBzdGF0ZS5zeW5jID0gZmFsc2U7XG59XG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuICBpZiAoc3luYykge1xuICAgIC8vIGRlZmVyIHRoZSBjYWxsYmFjayBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIHN5bmNocm9ub3VzbHlcbiAgICAvLyB0byBhdm9pZCBwaWxpbmcgdXAgdGhpbmdzIG9uIHRoZSBzdGFja1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYW5kIGl0IHdpbGwgYWx3YXlzIGhhcHBlblxuICAgIC8vIGFmdGVyIGVycm9yXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmaW5pc2hNYXliZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gIH0gZWxzZSB7XG4gICAgLy8gdGhlIGNhbGxlciBleHBlY3QgdGhpcyB0byBoYXBwZW4gYmVmb3JlIGlmXG4gICAgLy8gaXQgaXMgYXN5bmNcbiAgICBjYihlcik7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGJ1dCBmaW5pc2ggbXVzdFxuICAgIC8vIGFsd2F5cyBmb2xsb3cgZXJyb3JcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuZnVuY3Rpb24gb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKSB7XG4gIHN0YXRlLndyaXRpbmcgPSBmYWxzZTtcbiAgc3RhdGUud3JpdGVjYiA9IG51bGw7XG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlbjtcbiAgc3RhdGUud3JpdGVsZW4gPSAwO1xufVxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHN5bmMgPSBzdGF0ZS5zeW5jO1xuICB2YXIgY2IgPSBzdGF0ZS53cml0ZWNiO1xuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCk7XG4gIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSk7XG4gIGlmIChlcikgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYik7ZWxzZSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gZmluaXNoLCBidXQgZG9uJ3QgZW1pdCB5ZXRcbiAgICB2YXIgZmluaXNoZWQgPSBuZWVkRmluaXNoKHN0YXRlKSB8fCBzdHJlYW0uZGVzdHJveWVkO1xuICAgIGlmICghZmluaXNoZWQgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoc3luYykge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhhZnRlcldyaXRlLCBzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKSBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cbi8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG4gIGlmIChzdHJlYW0uX3dyaXRldiAmJiBlbnRyeSAmJiBlbnRyeS5uZXh0KSB7XG4gICAgLy8gRmFzdCBjYXNlLCB3cml0ZSBldmVyeXRoaW5nIHVzaW5nIF93cml0ZXYoKVxuICAgIHZhciBsID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsKTtcbiAgICB2YXIgaG9sZGVyID0gc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlO1xuICAgIGhvbGRlci5lbnRyeSA9IGVudHJ5O1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIGFsbEJ1ZmZlcnMgPSB0cnVlO1xuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgYnVmZmVyW2NvdW50XSA9IGVudHJ5O1xuICAgICAgaWYgKCFlbnRyeS5pc0J1ZikgYWxsQnVmZmVycyA9IGZhbHNlO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgY291bnQgKz0gMTtcbiAgICB9XG4gICAgYnVmZmVyLmFsbEJ1ZmZlcnMgPSBhbGxCdWZmZXJzO1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS07XG4gICAgICAvLyBpZiB3ZSBkaWRuJ3QgY2FsbCB0aGUgb253cml0ZSBpbW1lZGlhdGVseSwgdGhlblxuICAgICAgLy8gaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXQgZG9lcy5cbiAgICAgIC8vIGFsc28sIHRoYXQgbWVhbnMgdGhhdCB0aGUgY2h1bmsgYW5kIGNiIGFyZSBjdXJyZW50bHlcbiAgICAgIC8vIGJlaW5nIHByb2Nlc3NlZCwgc28gbW92ZSB0aGUgYnVmZmVyIGNvdW50ZXIgcGFzdCB0aGVtLlxuICAgICAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbnRyeSA9PT0gbnVsbCkgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIH1cbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ193cml0ZSgpJykpO1xufTtcbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbDtcbldyaXRhYmxlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG5cbiAgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3NcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDE7XG4gICAgdGhpcy51bmNvcmsoKTtcbiAgfVxuXG4gIC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cbiAgaWYgKCFzdGF0ZS5lbmRpbmcpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG4gIHJldHVybiB0aGlzO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTtcbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmVuZGluZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID09PSBudWxsICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUud3JpdGluZztcbn1cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIHN0cmVhbS5fZmluYWwoZnVuY3Rpb24gKGVycikge1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKTtcbiAgICB9XG4gICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnByZWZpbmlzaGVkICYmICFzdGF0ZS5maW5hbENhbGxlZCkge1xuICAgIGlmICh0eXBlb2Ygc3RyZWFtLl9maW5hbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbEZpbmFsLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbmVlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuICBpZiAobmVlZCkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgICBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgICAgICAvLyBpZiB0aGUgcmVhZGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbFxuICAgICAgICB2YXIgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICAgICAgICBpZiAoIXJTdGF0ZSB8fCByU3RhdGUuYXV0b0Rlc3Ryb3kgJiYgclN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWVkO1xufVxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZCkgcHJvY2Vzcy5uZXh0VGljayhjYik7ZWxzZSBzdHJlYW0ub25jZSgnZmluaXNoJywgY2IpO1xuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgc3RyZWFtLndyaXRhYmxlID0gZmFsc2U7XG59XG5mdW5jdGlvbiBvbkNvcmtlZEZpbmlzaChjb3JrUmVxLCBzdGF0ZSwgZXJyKSB7XG4gIHZhciBlbnRyeSA9IGNvcmtSZXEuZW50cnk7XG4gIGNvcmtSZXEuZW50cnkgPSBudWxsO1xuICB3aGlsZSAoZW50cnkpIHtcbiAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBjYihlcnIpO1xuICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgfVxuXG4gIC8vIHJldXNlIHRoZSBmcmVlIGNvcmtSZXEuXG4gIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0ID0gY29ya1JlcTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5Xcml0YWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5Xcml0YWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycik7XG59OyIsIid1c2Ugc3RyaWN0JztcblxudmFyIF9PYmplY3Qkc2V0UHJvdG90eXBlTztcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHsgdmFyIGtleSA9IF90b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpOyByZXR1cm4gdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHsgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OyB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmIChwcmltICE9PSB1bmRlZmluZWQpIHsgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7IGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cbnZhciBmaW5pc2hlZCA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpO1xudmFyIGtMYXN0UmVzb2x2ZSA9IFN5bWJvbCgnbGFzdFJlc29sdmUnKTtcbnZhciBrTGFzdFJlamVjdCA9IFN5bWJvbCgnbGFzdFJlamVjdCcpO1xudmFyIGtFcnJvciA9IFN5bWJvbCgnZXJyb3InKTtcbnZhciBrRW5kZWQgPSBTeW1ib2woJ2VuZGVkJyk7XG52YXIga0xhc3RQcm9taXNlID0gU3ltYm9sKCdsYXN0UHJvbWlzZScpO1xudmFyIGtIYW5kbGVQcm9taXNlID0gU3ltYm9sKCdoYW5kbGVQcm9taXNlJyk7XG52YXIga1N0cmVhbSA9IFN5bWJvbCgnc3RyZWFtJyk7XG5mdW5jdGlvbiBjcmVhdGVJdGVyUmVzdWx0KHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGRvbmU6IGRvbmVcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlYWRBbmRSZXNvbHZlKGl0ZXIpIHtcbiAgdmFyIHJlc29sdmUgPSBpdGVyW2tMYXN0UmVzb2x2ZV07XG4gIGlmIChyZXNvbHZlICE9PSBudWxsKSB7XG4gICAgdmFyIGRhdGEgPSBpdGVyW2tTdHJlYW1dLnJlYWQoKTtcbiAgICAvLyB3ZSBkZWZlciBpZiBkYXRhIGlzIG51bGxcbiAgICAvLyB3ZSBjYW4gYmUgZXhwZWN0aW5nIGVpdGhlciAnZW5kJyBvclxuICAgIC8vICdlcnJvcidcbiAgICBpZiAoZGF0YSAhPT0gbnVsbCkge1xuICAgICAgaXRlcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgIGl0ZXJba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICBpdGVyW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQoZGF0YSwgZmFsc2UpKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uUmVhZGFibGUoaXRlcikge1xuICAvLyB3ZSB3YWl0IGZvciB0aGUgbmV4dCB0aWNrLCBiZWNhdXNlIGl0IG1pZ2h0XG4gIC8vIGVtaXQgYW4gZXJyb3Igd2l0aCBwcm9jZXNzLm5leHRUaWNrXG4gIHByb2Nlc3MubmV4dFRpY2socmVhZEFuZFJlc29sdmUsIGl0ZXIpO1xufVxuZnVuY3Rpb24gd3JhcEZvck5leHQobGFzdFByb21pc2UsIGl0ZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsYXN0UHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpdGVyW2tFbmRlZF0pIHtcbiAgICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpdGVyW2tIYW5kbGVQcm9taXNlXShyZXNvbHZlLCByZWplY3QpO1xuICAgIH0sIHJlamVjdCk7XG4gIH07XG59XG52YXIgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbiAoKSB7fSk7XG52YXIgUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mKChfT2JqZWN0JHNldFByb3RvdHlwZU8gPSB7XG4gIGdldCBzdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXNba1N0cmVhbV07XG4gIH0sXG4gIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAvLyBpZiB3ZSBoYXZlIGRldGVjdGVkIGFuIGVycm9yIGluIHRoZSBtZWFud2hpbGVcbiAgICAvLyByZWplY3Qgc3RyYWlnaHQgYXdheVxuICAgIHZhciBlcnJvciA9IHRoaXNba0Vycm9yXTtcbiAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICAgIGlmICh0aGlzW2tFbmRlZF0pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXNba1N0cmVhbV0uZGVzdHJveWVkKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGRlZmVyIHZpYSBuZXh0VGljayBiZWNhdXNlIGlmIC5kZXN0cm95KGVycikgaXNcbiAgICAgIC8vIGNhbGxlZCwgdGhlIGVycm9yIHdpbGwgYmUgZW1pdHRlZCB2aWEgbmV4dFRpY2ssIGFuZFxuICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZXJlIGlzIG5vIGVycm9yIGxpbmdlcmluZyBhcm91bmRcbiAgICAgIC8vIHdhaXRpbmcgdG8gYmUgZW1pdHRlZC5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChfdGhpc1trRXJyb3JdKSB7XG4gICAgICAgICAgICByZWplY3QoX3RoaXNba0Vycm9yXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZSBtdWx0aXBsZSBuZXh0KCkgY2FsbHNcbiAgICAvLyB3ZSB3aWxsIHdhaXQgZm9yIHRoZSBwcmV2aW91cyBQcm9taXNlIHRvIGZpbmlzaFxuICAgIC8vIHRoaXMgbG9naWMgaXMgb3B0aW1pemVkIHRvIHN1cHBvcnQgZm9yIGF3YWl0IGxvb3BzLFxuICAgIC8vIHdoZXJlIG5leHQoKSBpcyBvbmx5IGNhbGxlZCBvbmNlIGF0IGEgdGltZVxuICAgIHZhciBsYXN0UHJvbWlzZSA9IHRoaXNba0xhc3RQcm9taXNlXTtcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAobGFzdFByb21pc2UpIHtcbiAgICAgIHByb21pc2UgPSBuZXcgUHJvbWlzZSh3cmFwRm9yTmV4dChsYXN0UHJvbWlzZSwgdGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmYXN0IHBhdGggbmVlZGVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgdGhpcy5wdXNoKClcbiAgICAgIC8vIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgbmV4dCgpIHF1ZXVlXG4gICAgICB2YXIgZGF0YSA9IHRoaXNba1N0cmVhbV0ucmVhZCgpO1xuICAgICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGRhdGEsIGZhbHNlKSk7XG4gICAgICB9XG4gICAgICBwcm9taXNlID0gbmV3IFByb21pc2UodGhpc1trSGFuZGxlUHJvbWlzZV0pO1xuICAgIH1cbiAgICB0aGlzW2tMYXN0UHJvbWlzZV0gPSBwcm9taXNlO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG59LCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRzZXRQcm90b3R5cGVPLCBTeW1ib2wuYXN5bmNJdGVyYXRvciwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcztcbn0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRzZXRQcm90b3R5cGVPLCBcInJldHVyblwiLCBmdW5jdGlvbiBfcmV0dXJuKCkge1xuICB2YXIgX3RoaXMyID0gdGhpcztcbiAgLy8gZGVzdHJveShlcnIsIGNiKSBpcyBhIHByaXZhdGUgQVBJXG4gIC8vIHdlIGNhbiBndWFyYW50ZWUgd2UgaGF2ZSB0aGF0IGhlcmUsIGJlY2F1c2Ugd2UgY29udHJvbCB0aGVcbiAgLy8gUmVhZGFibGUgY2xhc3MgdGhpcyBpcyBhdHRhY2hlZCB0b1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIF90aGlzMltrU3RyZWFtXS5kZXN0cm95KG51bGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICB9KTtcbiAgfSk7XG59KSwgX09iamVjdCRzZXRQcm90b3R5cGVPKSwgQXN5bmNJdGVyYXRvclByb3RvdHlwZSk7XG52YXIgY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yID0gZnVuY3Rpb24gY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yKHN0cmVhbSkge1xuICB2YXIgX09iamVjdCRjcmVhdGU7XG4gIHZhciBpdGVyYXRvciA9IE9iamVjdC5jcmVhdGUoUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLCAoX09iamVjdCRjcmVhdGUgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrU3RyZWFtLCB7XG4gICAgdmFsdWU6IHN0cmVhbSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrTGFzdFJlc29sdmUsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrTGFzdFJlamVjdCwge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtFcnJvciwge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtFbmRlZCwge1xuICAgIHZhbHVlOiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrSGFuZGxlUHJvbWlzZSwge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBkYXRhID0gaXRlcmF0b3Jba1N0cmVhbV0ucmVhZCgpO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlamVjdF0gPSBudWxsO1xuICAgICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQoZGF0YSwgZmFsc2UpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSByZXNvbHZlO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlamVjdF0gPSByZWplY3Q7XG4gICAgICB9XG4gICAgfSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX09iamVjdCRjcmVhdGUpKTtcbiAgaXRlcmF0b3Jba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gIGZpbmlzaGVkKHN0cmVhbSwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgIT09ICdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRScpIHtcbiAgICAgIHZhciByZWplY3QgPSBpdGVyYXRvcltrTGFzdFJlamVjdF07XG4gICAgICAvLyByZWplY3QgaWYgd2UgYXJlIHdhaXRpbmcgZm9yIGRhdGEgaW4gdGhlIFByb21pc2VcbiAgICAgIC8vIHJldHVybmVkIGJ5IG5leHQoKSBhbmQgc3RvcmUgdGhlIGVycm9yXG4gICAgICBpZiAocmVqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICBpdGVyYXRvcltrRXJyb3JdID0gZXJyO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmVzb2x2ZSA9IGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV07XG4gICAgaWYgKHJlc29sdmUgIT09IG51bGwpIHtcbiAgICAgIGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICBpdGVyYXRvcltrTGFzdFJlamVjdF0gPSBudWxsO1xuICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgIH1cbiAgICBpdGVyYXRvcltrRW5kZWRdID0gdHJ1ZTtcbiAgfSk7XG4gIHN0cmVhbS5vbigncmVhZGFibGUnLCBvblJlYWRhYmxlLmJpbmQobnVsbCwgaXRlcmF0b3IpKTtcbiAgcmV0dXJuIGl0ZXJhdG9yO1xufTtcbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yOyIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgX3RvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogZmFsc2UgfSk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7IHZhciBrZXkgPSBfdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTsgcmV0dXJuIHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7IGlmICh0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBpbnB1dDsgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7IHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpOyBpZiAodHlwZW9mIHJlcyAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlczsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpOyB9XG52YXIgX3JlcXVpcmUgPSByZXF1aXJlKCdidWZmZXInKSxcbiAgQnVmZmVyID0gX3JlcXVpcmUuQnVmZmVyO1xudmFyIF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3V0aWwnKSxcbiAgaW5zcGVjdCA9IF9yZXF1aXJlMi5pbnNwZWN0O1xudmFyIGN1c3RvbSA9IGluc3BlY3QgJiYgaW5zcGVjdC5jdXN0b20gfHwgJ2luc3BlY3QnO1xuZnVuY3Rpb24gY29weUJ1ZmZlcihzcmMsIHRhcmdldCwgb2Zmc2V0KSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuY29weS5jYWxsKHNyYywgdGFyZ2V0LCBvZmZzZXQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBCdWZmZXJMaXN0KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBCdWZmZXJMaXN0KTtcbiAgICB0aGlzLmhlYWQgPSBudWxsO1xuICAgIHRoaXMudGFpbCA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICB9XG4gIF9jcmVhdGVDbGFzcyhCdWZmZXJMaXN0LCBbe1xuICAgIGtleTogXCJwdXNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1c2godikge1xuICAgICAgdmFyIGVudHJ5ID0ge1xuICAgICAgICBkYXRhOiB2LFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMCkgdGhpcy50YWlsLm5leHQgPSBlbnRyeTtlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgICAgdGhpcy50YWlsID0gZW50cnk7XG4gICAgICArK3RoaXMubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1bnNoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVuc2hpZnQodikge1xuICAgICAgdmFyIGVudHJ5ID0ge1xuICAgICAgICBkYXRhOiB2LFxuICAgICAgICBuZXh0OiB0aGlzLmhlYWRcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgICArK3RoaXMubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaGlmdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaGlmdCgpIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgdmFyIHJldCA9IHRoaXMuaGVhZC5kYXRhO1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO2Vsc2UgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQ7XG4gICAgICAtLXRoaXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xlYXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJqb2luXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGpvaW4ocykge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gICAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICAgIHZhciByZXQgPSAnJyArIHAuZGF0YTtcbiAgICAgIHdoaWxlIChwID0gcC5uZXh0KSByZXQgKz0gcyArIHAuZGF0YTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbmNhdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb25jYXQobikge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICAgICAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuID4+PiAwKTtcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgY29weUJ1ZmZlcihwLmRhdGEsIHJldCwgaSk7XG4gICAgICAgIGkgKz0gcC5kYXRhLmxlbmd0aDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIG9yIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgfSwge1xuICAgIGtleTogXCJjb25zdW1lXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnN1bWUobiwgaGFzU3RyaW5ncykge1xuICAgICAgdmFyIHJldDtcbiAgICAgIGlmIChuIDwgdGhpcy5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIC8vIGBzbGljZWAgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3MuXG4gICAgICAgIHJldCA9IHRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsIG4pO1xuICAgICAgICB0aGlzLmhlYWQuZGF0YSA9IHRoaXMuaGVhZC5kYXRhLnNsaWNlKG4pO1xuICAgICAgfSBlbHNlIGlmIChuID09PSB0aGlzLmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8gRmlyc3QgY2h1bmsgaXMgYSBwZXJmZWN0IG1hdGNoLlxuICAgICAgICByZXQgPSB0aGlzLnNoaWZ0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXN1bHQgc3BhbnMgbW9yZSB0aGFuIG9uZSBidWZmZXIuXG4gICAgICAgIHJldCA9IGhhc1N0cmluZ3MgPyB0aGlzLl9nZXRTdHJpbmcobikgOiB0aGlzLl9nZXRCdWZmZXIobik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaXJzdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaXJzdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhlYWQuZGF0YTtcbiAgICB9XG5cbiAgICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICB9LCB7XG4gICAga2V5OiBcIl9nZXRTdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2dldFN0cmluZyhuKSB7XG4gICAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICAgIHZhciBjID0gMTtcbiAgICAgIHZhciByZXQgPSBwLmRhdGE7XG4gICAgICBuIC09IHJldC5sZW5ndGg7XG4gICAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgICB2YXIgc3RyID0gcC5kYXRhO1xuICAgICAgICB2YXIgbmIgPSBuID4gc3RyLmxlbmd0aCA/IHN0ci5sZW5ndGggOiBuO1xuICAgICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHJldCArPSBzdHI7ZWxzZSByZXQgKz0gc3RyLnNsaWNlKDAsIG4pO1xuICAgICAgICBuIC09IG5iO1xuICAgICAgICBpZiAobiA9PT0gMCkge1xuICAgICAgICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgKytjO1xuICAgICAgICAgICAgaWYgKHAubmV4dCkgdGhpcy5oZWFkID0gcC5uZXh0O2Vsc2UgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWFkID0gcDtcbiAgICAgICAgICAgIHAuZGF0YSA9IHN0ci5zbGljZShuYik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgICsrYztcbiAgICAgIH1cbiAgICAgIHRoaXMubGVuZ3RoIC09IGM7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICB9LCB7XG4gICAga2V5OiBcIl9nZXRCdWZmZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2dldEJ1ZmZlcihuKSB7XG4gICAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pO1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgYyA9IDE7XG4gICAgICBwLmRhdGEuY29weShyZXQpO1xuICAgICAgbiAtPSBwLmRhdGEubGVuZ3RoO1xuICAgICAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICAgICAgdmFyIGJ1ZiA9IHAuZGF0YTtcbiAgICAgICAgdmFyIG5iID0gbiA+IGJ1Zi5sZW5ndGggPyBidWYubGVuZ3RoIDogbjtcbiAgICAgICAgYnVmLmNvcHkocmV0LCByZXQubGVuZ3RoIC0gbiwgMCwgbmIpO1xuICAgICAgICBuIC09IG5iO1xuICAgICAgICBpZiAobiA9PT0gMCkge1xuICAgICAgICAgIGlmIChuYiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgKytjO1xuICAgICAgICAgICAgaWYgKHAubmV4dCkgdGhpcy5oZWFkID0gcC5uZXh0O2Vsc2UgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWFkID0gcDtcbiAgICAgICAgICAgIHAuZGF0YSA9IGJ1Zi5zbGljZShuYik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgICsrYztcbiAgICAgIH1cbiAgICAgIHRoaXMubGVuZ3RoIC09IGM7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGlua2VkIGxpc3Qgb25seSBzaG93cyB0aGUgbWluaW1hbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24uXG4gIH0sIHtcbiAgICBrZXk6IGN1c3RvbSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoXywgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGluc3BlY3QodGhpcywgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgLy8gT25seSBpbnNwZWN0IG9uZSBsZXZlbC5cbiAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgIC8vIEl0IHNob3VsZCBub3QgcmVjdXJzZS5cbiAgICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2VcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEJ1ZmZlckxpc3Q7XG59KCk7IiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyB1bmRvY3VtZW50ZWQgY2IoKSBBUEksIG5lZWRlZCBmb3IgY29yZSwgbm90IGZvciBwdWJsaWMgQVBJXG5mdW5jdGlvbiBkZXN0cm95KGVyciwgY2IpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdmFyIHJlYWRhYmxlRGVzdHJveWVkID0gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgdmFyIHdyaXRhYmxlRGVzdHJveWVkID0gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgaWYgKHJlYWRhYmxlRGVzdHJveWVkIHx8IHdyaXRhYmxlRGVzdHJveWVkKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3ZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG4gIHRoaXMuX2Rlc3Ryb3koZXJyIHx8IG51bGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoIWNiICYmIGVycikge1xuICAgICAgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckFuZENsb3NlTlQsIF90aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIF90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQW5kQ2xvc2VOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYikge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgX3RoaXMpO1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgX3RoaXMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gZW1pdEVycm9yQW5kQ2xvc2VOVChzZWxmLCBlcnIpIHtcbiAgZW1pdEVycm9yTlQoc2VsZiwgZXJyKTtcbiAgZW1pdENsb3NlTlQoc2VsZik7XG59XG5mdW5jdGlvbiBlbWl0Q2xvc2VOVChzZWxmKSB7XG4gIGlmIChzZWxmLl93cml0YWJsZVN0YXRlICYmICFzZWxmLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZSkgcmV0dXJuO1xuICBpZiAoc2VsZi5fcmVhZGFibGVTdGF0ZSAmJiAhc2VsZi5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2UpIHJldHVybjtcbiAgc2VsZi5lbWl0KCdjbG9zZScpO1xufVxuZnVuY3Rpb24gdW5kZXN0cm95KCkge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB9XG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLCBlcnIpIHtcbiAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG59XG5mdW5jdGlvbiBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVycikge1xuICAvLyBXZSBoYXZlIHRlc3RzIHRoYXQgcmVseSBvbiBlcnJvcnMgYmVpbmcgZW1pdHRlZFxuICAvLyBpbiB0aGUgc2FtZSB0aWNrLCBzbyBjaGFuZ2luZyB0aGlzIGlzIHNlbXZlciBtYWpvci5cbiAgLy8gRm9yIG5vdyB3aGVuIHlvdSBvcHQtaW4gdG8gYXV0b0Rlc3Ryb3kgd2UgYWxsb3dcbiAgLy8gdGhlIGVycm9yIHRvIGJlIGVtaXR0ZWQgbmV4dFRpY2suIEluIGEgZnV0dXJlXG4gIC8vIHNlbXZlciBtYWpvciB1cGRhdGUgd2Ugc2hvdWxkIGNoYW5nZSB0aGUgZGVmYXVsdCB0byB0aGlzLlxuXG4gIHZhciByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIGlmIChyU3RhdGUgJiYgclN0YXRlLmF1dG9EZXN0cm95IHx8IHdTdGF0ZSAmJiB3U3RhdGUuYXV0b0Rlc3Ryb3kpIHN0cmVhbS5kZXN0cm95KGVycik7ZWxzZSBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gIHVuZGVzdHJveTogdW5kZXN0cm95LFxuICBlcnJvck9yRGVzdHJveTogZXJyb3JPckRlc3Ryb3lcbn07IiwiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9lbmQtb2Ytc3RyZWFtIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO1xuZnVuY3Rpb24gb25jZShjYWxsYmFjaykge1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNhbGxlZCkgcmV0dXJuO1xuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuZnVuY3Rpb24gaXNSZXF1ZXN0KHN0cmVhbSkge1xuICByZXR1cm4gc3RyZWFtLnNldEhlYWRlciAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gZW9zKHN0cmVhbSwgb3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW9zKHN0cmVhbSwgbnVsbCwgb3B0cyk7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gIHZhciByZWFkYWJsZSA9IG9wdHMucmVhZGFibGUgfHwgb3B0cy5yZWFkYWJsZSAhPT0gZmFsc2UgJiYgc3RyZWFtLnJlYWRhYmxlO1xuICB2YXIgd3JpdGFibGUgPSBvcHRzLndyaXRhYmxlIHx8IG9wdHMud3JpdGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS53cml0YWJsZTtcbiAgdmFyIG9ubGVnYWN5ZmluaXNoID0gZnVuY3Rpb24gb25sZWdhY3lmaW5pc2goKSB7XG4gICAgaWYgKCFzdHJlYW0ud3JpdGFibGUpIG9uZmluaXNoKCk7XG4gIH07XG4gIHZhciB3cml0YWJsZUVuZGVkID0gc3RyZWFtLl93cml0YWJsZVN0YXRlICYmIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZDtcbiAgdmFyIG9uZmluaXNoID0gZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgd3JpdGFibGUgPSBmYWxzZTtcbiAgICB3cml0YWJsZUVuZGVkID0gdHJ1ZTtcbiAgICBpZiAoIXJlYWRhYmxlKSBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG4gIHZhciByZWFkYWJsZUVuZGVkID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlICYmIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkO1xuICB2YXIgb25lbmQgPSBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICByZWFkYWJsZSA9IGZhbHNlO1xuICAgIHJlYWRhYmxlRW5kZWQgPSB0cnVlO1xuICAgIGlmICghd3JpdGFibGUpIGNhbGxiYWNrLmNhbGwoc3RyZWFtKTtcbiAgfTtcbiAgdmFyIG9uZXJyb3IgPSBmdW5jdGlvbiBvbmVycm9yKGVycikge1xuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICB9O1xuICB2YXIgb25jbG9zZSA9IGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgdmFyIGVycjtcbiAgICBpZiAocmVhZGFibGUgJiYgIXJlYWRhYmxlRW5kZWQpIHtcbiAgICAgIGlmICghc3RyZWFtLl9yZWFkYWJsZVN0YXRlIHx8ICFzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kZWQpIGVyciA9IG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgICBpZiAod3JpdGFibGUgJiYgIXdyaXRhYmxlRW5kZWQpIHtcbiAgICAgIGlmICghc3RyZWFtLl93cml0YWJsZVN0YXRlIHx8ICFzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZW5kZWQpIGVyciA9IG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9ucmVxdWVzdCA9IGZ1bmN0aW9uIG9ucmVxdWVzdCgpIHtcbiAgICBzdHJlYW0ucmVxLm9uKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gIH07XG4gIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkge1xuICAgIHN0cmVhbS5vbignY29tcGxldGUnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLm9uKCdhYm9ydCcsIG9uY2xvc2UpO1xuICAgIGlmIChzdHJlYW0ucmVxKSBvbnJlcXVlc3QoKTtlbHNlIHN0cmVhbS5vbigncmVxdWVzdCcsIG9ucmVxdWVzdCk7XG4gIH0gZWxzZSBpZiAod3JpdGFibGUgJiYgIXN0cmVhbS5fd3JpdGFibGVTdGF0ZSkge1xuICAgIC8vIGxlZ2FjeSBzdHJlYW1zXG4gICAgc3RyZWFtLm9uKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gICAgc3RyZWFtLm9uKCdjbG9zZScsIG9ubGVnYWN5ZmluaXNoKTtcbiAgfVxuICBzdHJlYW0ub24oJ2VuZCcsIG9uZW5kKTtcbiAgc3RyZWFtLm9uKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gIGlmIChvcHRzLmVycm9yICE9PSBmYWxzZSkgc3RyZWFtLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBzdHJlYW0ub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjb21wbGV0ZScsIG9uZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgb25jbG9zZSk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KTtcbiAgICBpZiAoc3RyZWFtLnJlcSkgc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZW9zOyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1JlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlcicpXG59O1xuIiwiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9wdW1wIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlb3M7XG5mdW5jdGlvbiBvbmNlKGNhbGxiYWNrKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSByZXR1cm47XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIH07XG59XG52YXIgX3JlcXVpcmUkY29kZXMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcnJvcnMnKS5jb2RlcyxcbiAgRVJSX01JU1NJTkdfQVJHUyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NSVNTSU5HX0FSR1MsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVEID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7XG5mdW5jdGlvbiBub29wKGVycikge1xuICAvLyBSZXRocm93IHRoZSBlcnJvciBpZiBpdCBleGlzdHMgdG8gYXZvaWQgc3dhbGxvd2luZyBpdFxuICBpZiAoZXJyKSB0aHJvdyBlcnI7XG59XG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0uc2V0SGVhZGVyICYmIHR5cGVvZiBzdHJlYW0uYWJvcnQgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICB2YXIgY2xvc2VkID0gZmFsc2U7XG4gIHN0cmVhbS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChlb3MgPT09IHVuZGVmaW5lZCkgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJyk7XG4gIGVvcyhzdHJlYW0sIHtcbiAgICByZWFkYWJsZTogcmVhZGluZyxcbiAgICB3cml0YWJsZTogd3JpdGluZ1xuICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjYWxsYmFjaygpO1xuICB9KTtcbiAgdmFyIGRlc3Ryb3llZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICBpZiAoZGVzdHJveWVkKSByZXR1cm47XG4gICAgZGVzdHJveWVkID0gdHJ1ZTtcblxuICAgIC8vIHJlcXVlc3QuZGVzdHJveSBqdXN0IGRvIC5lbmQgLSAuYWJvcnQgaXMgd2hhdCB3ZSB3YW50XG4gICAgaWYgKGlzUmVxdWVzdChzdHJlYW0pKSByZXR1cm4gc3RyZWFtLmFib3J0KCk7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgY2FsbGJhY2soZXJyIHx8IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgncGlwZScpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNhbGwoZm4pIHtcbiAgZm4oKTtcbn1cbmZ1bmN0aW9uIHBpcGUoZnJvbSwgdG8pIHtcbiAgcmV0dXJuIGZyb20ucGlwZSh0byk7XG59XG5mdW5jdGlvbiBwb3BDYWxsYmFjayhzdHJlYW1zKSB7XG4gIGlmICghc3RyZWFtcy5sZW5ndGgpIHJldHVybiBub29wO1xuICBpZiAodHlwZW9mIHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIG5vb3A7XG4gIHJldHVybiBzdHJlYW1zLnBvcCgpO1xufVxuZnVuY3Rpb24gcGlwZWxpbmUoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzdHJlYW1zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHN0cmVhbXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgdmFyIGNhbGxiYWNrID0gcG9wQ2FsbGJhY2soc3RyZWFtcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHN0cmVhbXNbMF0pKSBzdHJlYW1zID0gc3RyZWFtc1swXTtcbiAgaWYgKHN0cmVhbXMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdzdHJlYW1zJyk7XG4gIH1cbiAgdmFyIGVycm9yO1xuICB2YXIgZGVzdHJveXMgPSBzdHJlYW1zLm1hcChmdW5jdGlvbiAoc3RyZWFtLCBpKSB7XG4gICAgdmFyIHJlYWRpbmcgPSBpIDwgc3RyZWFtcy5sZW5ndGggLSAxO1xuICAgIHZhciB3cml0aW5nID0gaSA+IDA7XG4gICAgcmV0dXJuIGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuICAgICAgaWYgKGVycikgZGVzdHJveXMuZm9yRWFjaChjYWxsKTtcbiAgICAgIGlmIChyZWFkaW5nKSByZXR1cm47XG4gICAgICBkZXN0cm95cy5mb3JFYWNoKGNhbGwpO1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHN0cmVhbXMucmVkdWNlKHBpcGUpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBwaXBlbGluZTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBFUlJfSU5WQUxJRF9PUFRfVkFMVUUgPSByZXF1aXJlKCcuLi8uLi8uLi9lcnJvcnMnKS5jb2Rlcy5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7XG5mdW5jdGlvbiBoaWdoV2F0ZXJNYXJrRnJvbShvcHRpb25zLCBpc0R1cGxleCwgZHVwbGV4S2V5KSB7XG4gIHJldHVybiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgIT0gbnVsbCA/IG9wdGlvbnMuaGlnaFdhdGVyTWFyayA6IGlzRHVwbGV4ID8gb3B0aW9uc1tkdXBsZXhLZXldIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEhpZ2hXYXRlck1hcmsoc3RhdGUsIG9wdGlvbnMsIGR1cGxleEtleSwgaXNEdXBsZXgpIHtcbiAgdmFyIGh3bSA9IGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpO1xuICBpZiAoaHdtICE9IG51bGwpIHtcbiAgICBpZiAoIShpc0Zpbml0ZShod20pICYmIE1hdGguZmxvb3IoaHdtKSA9PT0gaHdtKSB8fCBod20gPCAwKSB7XG4gICAgICB2YXIgbmFtZSA9IGlzRHVwbGV4ID8gZHVwbGV4S2V5IDogJ2hpZ2hXYXRlck1hcmsnO1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX09QVF9WQUxVRShuYW1lLCBod20pO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihod20pO1xuICB9XG5cbiAgLy8gRGVmYXVsdCB2YWx1ZVxuICByZXR1cm4gc3RhdGUub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEhpZ2hXYXRlck1hcms6IGdldEhpZ2hXYXRlck1hcmtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzJyk7XG5leHBvcnRzLlN0cmVhbSA9IGV4cG9ydHM7XG5leHBvcnRzLlJlYWRhYmxlID0gZXhwb3J0cztcbmV4cG9ydHMuV3JpdGFibGUgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzJyk7XG5leHBvcnRzLkR1cGxleCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG5leHBvcnRzLlRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzJyk7XG5leHBvcnRzLlBhc3NUaHJvdWdoID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcycpO1xuZXhwb3J0cy5maW5pc2hlZCA9IHJlcXVpcmUoJy4vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcycpO1xuZXhwb3J0cy5waXBlbGluZSA9IHJlcXVpcmUoJy4vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMnKTtcbiIsIlxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciB1cmwgPSByZXF1aXJlKCcuL3VybCcpO1xudmFyIHBhcnNlciA9IHJlcXVpcmUoJ3NvY2tldC5pby1wYXJzZXInKTtcbnZhciBNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2VyJyk7XG52YXIgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NrZXQuaW8tY2xpZW50Jyk7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gbG9va3VwO1xuXG4vKipcbiAqIE1hbmFnZXJzIGNhY2hlLlxuICovXG5cbnZhciBjYWNoZSA9IGV4cG9ydHMubWFuYWdlcnMgPSB7fTtcblxuLyoqXG4gKiBMb29rcyB1cCBhbiBleGlzdGluZyBgTWFuYWdlcmAgZm9yIG11bHRpcGxleGluZy5cbiAqIElmIHRoZSB1c2VyIHN1bW1vbnM6XG4gKlxuICogICBgaW8oJ2h0dHA6Ly9sb2NhbGhvc3QvYScpO2BcbiAqICAgYGlvKCdodHRwOi8vbG9jYWxob3N0L2InKTtgXG4gKlxuICogV2UgcmV1c2UgdGhlIGV4aXN0aW5nIGluc3RhbmNlIGJhc2VkIG9uIHNhbWUgc2NoZW1lL3BvcnQvaG9zdCxcbiAqIGFuZCB3ZSBpbml0aWFsaXplIHNvY2tldHMgZm9yIGVhY2ggbmFtZXNwYWNlLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gbG9va3VwICh1cmksIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiB1cmkgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0cyA9IHVyaTtcbiAgICB1cmkgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICB2YXIgcGFyc2VkID0gdXJsKHVyaSk7XG4gIHZhciBzb3VyY2UgPSBwYXJzZWQuc291cmNlO1xuICB2YXIgaWQgPSBwYXJzZWQuaWQ7XG4gIHZhciBwYXRoID0gcGFyc2VkLnBhdGg7XG4gIHZhciBzYW1lTmFtZXNwYWNlID0gY2FjaGVbaWRdICYmIHBhdGggaW4gY2FjaGVbaWRdLm5zcHM7XG4gIHZhciBuZXdDb25uZWN0aW9uID0gb3B0cy5mb3JjZU5ldyB8fCBvcHRzWydmb3JjZSBuZXcgY29ubmVjdGlvbiddIHx8XG4gICAgICAgICAgICAgICAgICAgICAgZmFsc2UgPT09IG9wdHMubXVsdGlwbGV4IHx8IHNhbWVOYW1lc3BhY2U7XG5cbiAgdmFyIGlvO1xuXG4gIGlmIChuZXdDb25uZWN0aW9uKSB7XG4gICAgZGVidWcoJ2lnbm9yaW5nIHNvY2tldCBjYWNoZSBmb3IgJXMnLCBzb3VyY2UpO1xuICAgIGlvID0gTWFuYWdlcihzb3VyY2UsIG9wdHMpO1xuICB9IGVsc2Uge1xuICAgIGlmICghY2FjaGVbaWRdKSB7XG4gICAgICBkZWJ1ZygnbmV3IGlvIGluc3RhbmNlIGZvciAlcycsIHNvdXJjZSk7XG4gICAgICBjYWNoZVtpZF0gPSBNYW5hZ2VyKHNvdXJjZSwgb3B0cyk7XG4gICAgfVxuICAgIGlvID0gY2FjaGVbaWRdO1xuICB9XG4gIGlmIChwYXJzZWQucXVlcnkgJiYgIW9wdHMucXVlcnkpIHtcbiAgICBvcHRzLnF1ZXJ5ID0gcGFyc2VkLnF1ZXJ5O1xuICB9XG4gIHJldHVybiBpby5zb2NrZXQocGFyc2VkLnBhdGgsIG9wdHMpO1xufVxuXG4vKipcbiAqIFByb3RvY29sIHZlcnNpb24uXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnByb3RvY29sID0gcGFyc2VyLnByb3RvY29sO1xuXG4vKipcbiAqIGBjb25uZWN0YC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJpXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY29ubmVjdCA9IGxvb2t1cDtcblxuLyoqXG4gKiBFeHBvc2UgY29uc3RydWN0b3JzIGZvciBzdGFuZGFsb25lIGJ1aWxkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5NYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2VyJyk7XG5leHBvcnRzLlNvY2tldCA9IHJlcXVpcmUoJy4vc29ja2V0Jyk7XG4iLCJcbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgZWlvID0gcmVxdWlyZSgnZW5naW5lLmlvLWNsaWVudCcpO1xudmFyIFNvY2tldCA9IHJlcXVpcmUoJy4vc29ja2V0Jyk7XG52YXIgRW1pdHRlciA9IHJlcXVpcmUoJ2NvbXBvbmVudC1lbWl0dGVyJyk7XG52YXIgcGFyc2VyID0gcmVxdWlyZSgnc29ja2V0LmlvLXBhcnNlcicpO1xudmFyIG9uID0gcmVxdWlyZSgnLi9vbicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCdjb21wb25lbnQtYmluZCcpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2V0LmlvLWNsaWVudDptYW5hZ2VyJyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJ2luZGV4b2YnKTtcbnZhciBCYWNrb2ZmID0gcmVxdWlyZSgnYmFja28yJyk7XG5cbi8qKlxuICogSUU2KyBoYXNPd25Qcm9wZXJ0eVxuICovXG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBNYW5hZ2VyO1xuXG4vKipcbiAqIGBNYW5hZ2VyYCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZW5naW5lIGluc3RhbmNlIG9yIGVuZ2luZSB1cmkvb3B0c1xuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gTWFuYWdlciAodXJpLCBvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBNYW5hZ2VyKSkgcmV0dXJuIG5ldyBNYW5hZ2VyKHVyaSwgb3B0cyk7XG4gIGlmICh1cmkgJiYgKCdvYmplY3QnID09PSB0eXBlb2YgdXJpKSkge1xuICAgIG9wdHMgPSB1cmk7XG4gICAgdXJpID0gdW5kZWZpbmVkO1xuICB9XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gIG9wdHMucGF0aCA9IG9wdHMucGF0aCB8fCAnL3NvY2tldC5pbyc7XG4gIHRoaXMubnNwcyA9IHt9O1xuICB0aGlzLnN1YnMgPSBbXTtcbiAgdGhpcy5vcHRzID0gb3B0cztcbiAgdGhpcy5yZWNvbm5lY3Rpb24ob3B0cy5yZWNvbm5lY3Rpb24gIT09IGZhbHNlKTtcbiAgdGhpcy5yZWNvbm5lY3Rpb25BdHRlbXB0cyhvcHRzLnJlY29ubmVjdGlvbkF0dGVtcHRzIHx8IEluZmluaXR5KTtcbiAgdGhpcy5yZWNvbm5lY3Rpb25EZWxheShvcHRzLnJlY29ubmVjdGlvbkRlbGF5IHx8IDEwMDApO1xuICB0aGlzLnJlY29ubmVjdGlvbkRlbGF5TWF4KG9wdHMucmVjb25uZWN0aW9uRGVsYXlNYXggfHwgNTAwMCk7XG4gIHRoaXMucmFuZG9taXphdGlvbkZhY3RvcihvcHRzLnJhbmRvbWl6YXRpb25GYWN0b3IgfHwgMC41KTtcbiAgdGhpcy5iYWNrb2ZmID0gbmV3IEJhY2tvZmYoe1xuICAgIG1pbjogdGhpcy5yZWNvbm5lY3Rpb25EZWxheSgpLFxuICAgIG1heDogdGhpcy5yZWNvbm5lY3Rpb25EZWxheU1heCgpLFxuICAgIGppdHRlcjogdGhpcy5yYW5kb21pemF0aW9uRmFjdG9yKClcbiAgfSk7XG4gIHRoaXMudGltZW91dChudWxsID09IG9wdHMudGltZW91dCA/IDIwMDAwIDogb3B0cy50aW1lb3V0KTtcbiAgdGhpcy5yZWFkeVN0YXRlID0gJ2Nsb3NlZCc7XG4gIHRoaXMudXJpID0gdXJpO1xuICB0aGlzLmNvbm5lY3RpbmcgPSBbXTtcbiAgdGhpcy5sYXN0UGluZyA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBmYWxzZTtcbiAgdGhpcy5wYWNrZXRCdWZmZXIgPSBbXTtcbiAgdmFyIF9wYXJzZXIgPSBvcHRzLnBhcnNlciB8fCBwYXJzZXI7XG4gIHRoaXMuZW5jb2RlciA9IG5ldyBfcGFyc2VyLkVuY29kZXIoKTtcbiAgdGhpcy5kZWNvZGVyID0gbmV3IF9wYXJzZXIuRGVjb2RlcigpO1xuICB0aGlzLmF1dG9Db25uZWN0ID0gb3B0cy5hdXRvQ29ubmVjdCAhPT0gZmFsc2U7XG4gIGlmICh0aGlzLmF1dG9Db25uZWN0KSB0aGlzLm9wZW4oKTtcbn1cblxuLyoqXG4gKiBQcm9wYWdhdGUgZ2l2ZW4gZXZlbnQgdG8gc29ja2V0cyBhbmQgZW1pdCBvbiBgdGhpc2BcbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5lbWl0QWxsID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgZm9yICh2YXIgbnNwIGluIHRoaXMubnNwcykge1xuICAgIGlmIChoYXMuY2FsbCh0aGlzLm5zcHMsIG5zcCkpIHtcbiAgICAgIHRoaXMubnNwc1tuc3BdLmVtaXQuYXBwbHkodGhpcy5uc3BzW25zcF0sIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBgc29ja2V0LmlkYCBvZiBhbGwgc29ja2V0c1xuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVNvY2tldElkcyA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgbnNwIGluIHRoaXMubnNwcykge1xuICAgIGlmIChoYXMuY2FsbCh0aGlzLm5zcHMsIG5zcCkpIHtcbiAgICAgIHRoaXMubnNwc1tuc3BdLmlkID0gdGhpcy5nZW5lcmF0ZUlkKG5zcCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIGdlbmVyYXRlIGBzb2NrZXQuaWRgIGZvciB0aGUgZ2l2ZW4gYG5zcGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbnNwXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5nZW5lcmF0ZUlkID0gZnVuY3Rpb24gKG5zcCkge1xuICByZXR1cm4gKG5zcCA9PT0gJy8nID8gJycgOiAobnNwICsgJyMnKSkgKyB0aGlzLmVuZ2luZS5pZDtcbn07XG5cbi8qKlxuICogTWl4IGluIGBFbWl0dGVyYC5cbiAqL1xuXG5FbWl0dGVyKE1hbmFnZXIucHJvdG90eXBlKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgcmVjb25uZWN0aW9uYCBjb25maWcuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSB0cnVlL2ZhbHNlIGlmIGl0IHNob3VsZCBhdXRvbWF0aWNhbGx5IHJlY29ubmVjdFxuICogQHJldHVybiB7TWFuYWdlcn0gc2VsZiBvciB2YWx1ZVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5yZWNvbm5lY3Rpb24gPSBmdW5jdGlvbiAodikge1xuICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzLl9yZWNvbm5lY3Rpb247XG4gIHRoaXMuX3JlY29ubmVjdGlvbiA9ICEhdjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHJlY29ubmVjdGlvbiBhdHRlbXB0cyBjb25maWcuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1heCByZWNvbm5lY3Rpb24gYXR0ZW1wdHMgYmVmb3JlIGdpdmluZyB1cFxuICogQHJldHVybiB7TWFuYWdlcn0gc2VsZiBvciB2YWx1ZVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5yZWNvbm5lY3Rpb25BdHRlbXB0cyA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMuX3JlY29ubmVjdGlvbkF0dGVtcHRzO1xuICB0aGlzLl9yZWNvbm5lY3Rpb25BdHRlbXB0cyA9IHY7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBkZWxheSBiZXR3ZWVuIHJlY29ubmVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGRlbGF5XG4gKiBAcmV0dXJuIHtNYW5hZ2VyfSBzZWxmIG9yIHZhbHVlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLnJlY29ubmVjdGlvbkRlbGF5ID0gZnVuY3Rpb24gKHYpIHtcbiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGhpcy5fcmVjb25uZWN0aW9uRGVsYXk7XG4gIHRoaXMuX3JlY29ubmVjdGlvbkRlbGF5ID0gdjtcbiAgdGhpcy5iYWNrb2ZmICYmIHRoaXMuYmFja29mZi5zZXRNaW4odik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuTWFuYWdlci5wcm90b3R5cGUucmFuZG9taXphdGlvbkZhY3RvciA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMuX3JhbmRvbWl6YXRpb25GYWN0b3I7XG4gIHRoaXMuX3JhbmRvbWl6YXRpb25GYWN0b3IgPSB2O1xuICB0aGlzLmJhY2tvZmYgJiYgdGhpcy5iYWNrb2ZmLnNldEppdHRlcih2KTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1heGltdW0gZGVsYXkgYmV0d2VlbiByZWNvbm5lY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWxheVxuICogQHJldHVybiB7TWFuYWdlcn0gc2VsZiBvciB2YWx1ZVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5yZWNvbm5lY3Rpb25EZWxheU1heCA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMuX3JlY29ubmVjdGlvbkRlbGF5TWF4O1xuICB0aGlzLl9yZWNvbm5lY3Rpb25EZWxheU1heCA9IHY7XG4gIHRoaXMuYmFja29mZiAmJiB0aGlzLmJhY2tvZmYuc2V0TWF4KHYpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY29ubmVjdGlvbiB0aW1lb3V0LiBgZmFsc2VgIHRvIGRpc2FibGVcbiAqXG4gKiBAcmV0dXJuIHtNYW5hZ2VyfSBzZWxmIG9yIHZhbHVlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbiAodikge1xuICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzLl90aW1lb3V0O1xuICB0aGlzLl90aW1lb3V0ID0gdjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0cnlpbmcgdG8gcmVjb25uZWN0IGlmIHJlY29ubmVjdGlvbiBpcyBlbmFibGVkIGFuZCB3ZSBoYXZlIG5vdFxuICogc3RhcnRlZCByZWNvbm5lY3RpbmcgeWV0XG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUubWF5YmVSZWNvbm5lY3RPbk9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gIC8vIE9ubHkgdHJ5IHRvIHJlY29ubmVjdCBpZiBpdCdzIHRoZSBmaXJzdCB0aW1lIHdlJ3JlIGNvbm5lY3RpbmdcbiAgaWYgKCF0aGlzLnJlY29ubmVjdGluZyAmJiB0aGlzLl9yZWNvbm5lY3Rpb24gJiYgdGhpcy5iYWNrb2ZmLmF0dGVtcHRzID09PSAwKSB7XG4gICAgLy8ga2VlcHMgcmVjb25uZWN0aW9uIGZyb20gZmlyaW5nIHR3aWNlIGZvciB0aGUgc2FtZSByZWNvbm5lY3Rpb24gbG9vcFxuICAgIHRoaXMucmVjb25uZWN0KCk7XG4gIH1cbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY3VycmVudCB0cmFuc3BvcnQgYHNvY2tldGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9uYWwsIGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtNYW5hZ2VyfSBzZWxmXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLm9wZW4gPVxuTWFuYWdlci5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIChmbiwgb3B0cykge1xuICBkZWJ1ZygncmVhZHlTdGF0ZSAlcycsIHRoaXMucmVhZHlTdGF0ZSk7XG4gIGlmICh+dGhpcy5yZWFkeVN0YXRlLmluZGV4T2YoJ29wZW4nKSkgcmV0dXJuIHRoaXM7XG5cbiAgZGVidWcoJ29wZW5pbmcgJXMnLCB0aGlzLnVyaSk7XG4gIHRoaXMuZW5naW5lID0gZWlvKHRoaXMudXJpLCB0aGlzLm9wdHMpO1xuICB2YXIgc29ja2V0ID0gdGhpcy5lbmdpbmU7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5yZWFkeVN0YXRlID0gJ29wZW5pbmcnO1xuICB0aGlzLnNraXBSZWNvbm5lY3QgPSBmYWxzZTtcblxuICAvLyBlbWl0IGBvcGVuYFxuICB2YXIgb3BlblN1YiA9IG9uKHNvY2tldCwgJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5vbm9wZW4oKTtcbiAgICBmbiAmJiBmbigpO1xuICB9KTtcblxuICAvLyBlbWl0IGBjb25uZWN0X2Vycm9yYFxuICB2YXIgZXJyb3JTdWIgPSBvbihzb2NrZXQsICdlcnJvcicsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGVidWcoJ2Nvbm5lY3RfZXJyb3InKTtcbiAgICBzZWxmLmNsZWFudXAoKTtcbiAgICBzZWxmLnJlYWR5U3RhdGUgPSAnY2xvc2VkJztcbiAgICBzZWxmLmVtaXRBbGwoJ2Nvbm5lY3RfZXJyb3InLCBkYXRhKTtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Nvbm5lY3Rpb24gZXJyb3InKTtcbiAgICAgIGVyci5kYXRhID0gZGF0YTtcbiAgICAgIGZuKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9ubHkgZG8gdGhpcyBpZiB0aGVyZSBpcyBubyBmbiB0byBoYW5kbGUgdGhlIGVycm9yXG4gICAgICBzZWxmLm1heWJlUmVjb25uZWN0T25PcGVuKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBlbWl0IGBjb25uZWN0X3RpbWVvdXRgXG4gIGlmIChmYWxzZSAhPT0gdGhpcy5fdGltZW91dCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5fdGltZW91dDtcbiAgICBkZWJ1ZygnY29ubmVjdCBhdHRlbXB0IHdpbGwgdGltZW91dCBhZnRlciAlZCcsIHRpbWVvdXQpO1xuXG4gICAgaWYgKHRpbWVvdXQgPT09IDApIHtcbiAgICAgIG9wZW5TdWIuZGVzdHJveSgpOyAvLyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIHdpdGggdGhlICdvcGVuJyBldmVudFxuICAgIH1cblxuICAgIC8vIHNldCB0aW1lclxuICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgZGVidWcoJ2Nvbm5lY3QgYXR0ZW1wdCB0aW1lZCBvdXQgYWZ0ZXIgJWQnLCB0aW1lb3V0KTtcbiAgICAgIG9wZW5TdWIuZGVzdHJveSgpO1xuICAgICAgc29ja2V0LmNsb3NlKCk7XG4gICAgICBzb2NrZXQuZW1pdCgnZXJyb3InLCAndGltZW91dCcpO1xuICAgICAgc2VsZi5lbWl0QWxsKCdjb25uZWN0X3RpbWVvdXQnLCB0aW1lb3V0KTtcbiAgICB9LCB0aW1lb3V0KTtcblxuICAgIHRoaXMuc3Vicy5wdXNoKHtcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuc3Vicy5wdXNoKG9wZW5TdWIpO1xuICB0aGlzLnN1YnMucHVzaChlcnJvclN1Yik7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIHRyYW5zcG9ydCBvcGVuLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgZGVidWcoJ29wZW4nKTtcblxuICAvLyBjbGVhciBvbGQgc3Vic1xuICB0aGlzLmNsZWFudXAoKTtcblxuICAvLyBtYXJrIGFzIG9wZW5cbiAgdGhpcy5yZWFkeVN0YXRlID0gJ29wZW4nO1xuICB0aGlzLmVtaXQoJ29wZW4nKTtcblxuICAvLyBhZGQgbmV3IHN1YnNcbiAgdmFyIHNvY2tldCA9IHRoaXMuZW5naW5lO1xuICB0aGlzLnN1YnMucHVzaChvbihzb2NrZXQsICdkYXRhJywgYmluZCh0aGlzLCAnb25kYXRhJykpKTtcbiAgdGhpcy5zdWJzLnB1c2gob24oc29ja2V0LCAncGluZycsIGJpbmQodGhpcywgJ29ucGluZycpKSk7XG4gIHRoaXMuc3Vicy5wdXNoKG9uKHNvY2tldCwgJ3BvbmcnLCBiaW5kKHRoaXMsICdvbnBvbmcnKSkpO1xuICB0aGlzLnN1YnMucHVzaChvbihzb2NrZXQsICdlcnJvcicsIGJpbmQodGhpcywgJ29uZXJyb3InKSkpO1xuICB0aGlzLnN1YnMucHVzaChvbihzb2NrZXQsICdjbG9zZScsIGJpbmQodGhpcywgJ29uY2xvc2UnKSkpO1xuICB0aGlzLnN1YnMucHVzaChvbih0aGlzLmRlY29kZXIsICdkZWNvZGVkJywgYmluZCh0aGlzLCAnb25kZWNvZGVkJykpKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gYSBwaW5nLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLm9ucGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sYXN0UGluZyA9IG5ldyBEYXRlKCk7XG4gIHRoaXMuZW1pdEFsbCgncGluZycpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBhIHBhY2tldC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5vbnBvbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZW1pdEFsbCgncG9uZycsIG5ldyBEYXRlKCkgLSB0aGlzLmxhc3RQaW5nKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdpdGggZGF0YS5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5vbmRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLmRlY29kZXIuYWRkKGRhdGEpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBwYXJzZXIgZnVsbHkgZGVjb2RlcyBhIHBhY2tldC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5vbmRlY29kZWQgPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gIHRoaXMuZW1pdCgncGFja2V0JywgcGFja2V0KTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gc29ja2V0IGVycm9yLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gIGRlYnVnKCdlcnJvcicsIGVycik7XG4gIHRoaXMuZW1pdEFsbCgnZXJyb3InLCBlcnIpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHNvY2tldCBmb3IgdGhlIGdpdmVuIGBuc3BgLlxuICpcbiAqIEByZXR1cm4ge1NvY2tldH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUuc29ja2V0ID0gZnVuY3Rpb24gKG5zcCwgb3B0cykge1xuICB2YXIgc29ja2V0ID0gdGhpcy5uc3BzW25zcF07XG4gIGlmICghc29ja2V0KSB7XG4gICAgc29ja2V0ID0gbmV3IFNvY2tldCh0aGlzLCBuc3AsIG9wdHMpO1xuICAgIHRoaXMubnNwc1tuc3BdID0gc29ja2V0O1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBzb2NrZXQub24oJ2Nvbm5lY3RpbmcnLCBvbkNvbm5lY3RpbmcpO1xuICAgIHNvY2tldC5vbignY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNvY2tldC5pZCA9IHNlbGYuZ2VuZXJhdGVJZChuc3ApO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuYXV0b0Nvbm5lY3QpIHtcbiAgICAgIC8vIG1hbnVhbGx5IGNhbGwgaGVyZSBzaW5jZSBjb25uZWN0aW5nIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSBsaXN0ZW5pbmdcbiAgICAgIG9uQ29ubmVjdGluZygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ29ubmVjdGluZyAoKSB7XG4gICAgaWYgKCF+aW5kZXhPZihzZWxmLmNvbm5lY3RpbmcsIHNvY2tldCkpIHtcbiAgICAgIHNlbGYuY29ubmVjdGluZy5wdXNoKHNvY2tldCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvY2tldDtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gYSBzb2NrZXQgY2xvc2UuXG4gKlxuICogQHBhcmFtIHtTb2NrZXR9IHNvY2tldFxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoc29ja2V0KSB7XG4gIHZhciBpbmRleCA9IGluZGV4T2YodGhpcy5jb25uZWN0aW5nLCBzb2NrZXQpO1xuICBpZiAofmluZGV4KSB0aGlzLmNvbm5lY3Rpbmcuc3BsaWNlKGluZGV4LCAxKTtcbiAgaWYgKHRoaXMuY29ubmVjdGluZy5sZW5ndGgpIHJldHVybjtcblxuICB0aGlzLmNsb3NlKCk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHBhY2tldC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFja2V0XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5wYWNrZXQgPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gIGRlYnVnKCd3cml0aW5nIHBhY2tldCAlaicsIHBhY2tldCk7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgaWYgKHBhY2tldC5xdWVyeSAmJiBwYWNrZXQudHlwZSA9PT0gMCkgcGFja2V0Lm5zcCArPSAnPycgKyBwYWNrZXQucXVlcnk7XG5cbiAgaWYgKCFzZWxmLmVuY29kaW5nKSB7XG4gICAgLy8gZW5jb2RlLCB0aGVuIHdyaXRlIHRvIGVuZ2luZSB3aXRoIHJlc3VsdFxuICAgIHNlbGYuZW5jb2RpbmcgPSB0cnVlO1xuICAgIHRoaXMuZW5jb2Rlci5lbmNvZGUocGFja2V0LCBmdW5jdGlvbiAoZW5jb2RlZFBhY2tldHMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5jb2RlZFBhY2tldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc2VsZi5lbmdpbmUud3JpdGUoZW5jb2RlZFBhY2tldHNbaV0sIHBhY2tldC5vcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHNlbGYuZW5jb2RpbmcgPSBmYWxzZTtcbiAgICAgIHNlbGYucHJvY2Vzc1BhY2tldFF1ZXVlKCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7IC8vIGFkZCBwYWNrZXQgdG8gdGhlIHF1ZXVlXG4gICAgc2VsZi5wYWNrZXRCdWZmZXIucHVzaChwYWNrZXQpO1xuICB9XG59O1xuXG4vKipcbiAqIElmIHBhY2tldCBidWZmZXIgaXMgbm9uLWVtcHR5LCBiZWdpbnMgZW5jb2RpbmcgdGhlXG4gKiBuZXh0IHBhY2tldCBpbiBsaW5lLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NQYWNrZXRRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMucGFja2V0QnVmZmVyLmxlbmd0aCA+IDAgJiYgIXRoaXMuZW5jb2RpbmcpIHtcbiAgICB2YXIgcGFjayA9IHRoaXMucGFja2V0QnVmZmVyLnNoaWZ0KCk7XG4gICAgdGhpcy5wYWNrZXQocGFjayk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgdHJhbnNwb3J0IHN1YnNjcmlwdGlvbnMgYW5kIHBhY2tldCBidWZmZXIuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUuY2xlYW51cCA9IGZ1bmN0aW9uICgpIHtcbiAgZGVidWcoJ2NsZWFudXAnKTtcblxuICB2YXIgc3Vic0xlbmd0aCA9IHRoaXMuc3Vicy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3Vic0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHN1YiA9IHRoaXMuc3Vicy5zaGlmdCgpO1xuICAgIHN1Yi5kZXN0cm95KCk7XG4gIH1cblxuICB0aGlzLnBhY2tldEJ1ZmZlciA9IFtdO1xuICB0aGlzLmVuY29kaW5nID0gZmFsc2U7XG4gIHRoaXMubGFzdFBpbmcgPSBudWxsO1xuXG4gIHRoaXMuZGVjb2Rlci5kZXN0cm95KCk7XG59O1xuXG4vKipcbiAqIENsb3NlIHRoZSBjdXJyZW50IHNvY2tldC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5jbG9zZSA9XG5NYW5hZ2VyLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnZGlzY29ubmVjdCcpO1xuICB0aGlzLnNraXBSZWNvbm5lY3QgPSB0cnVlO1xuICB0aGlzLnJlY29ubmVjdGluZyA9IGZhbHNlO1xuICBpZiAoJ29wZW5pbmcnID09PSB0aGlzLnJlYWR5U3RhdGUpIHtcbiAgICAvLyBgb25jbG9zZWAgd2lsbCBub3QgZmlyZSBiZWNhdXNlXG4gICAgLy8gYW4gb3BlbiBldmVudCBuZXZlciBoYXBwZW5lZFxuICAgIHRoaXMuY2xlYW51cCgpO1xuICB9XG4gIHRoaXMuYmFja29mZi5yZXNldCgpO1xuICB0aGlzLnJlYWR5U3RhdGUgPSAnY2xvc2VkJztcbiAgaWYgKHRoaXMuZW5naW5lKSB0aGlzLmVuZ2luZS5jbG9zZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBlbmdpbmUgY2xvc2UuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUub25jbG9zZSA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgZGVidWcoJ29uY2xvc2UnKTtcblxuICB0aGlzLmNsZWFudXAoKTtcbiAgdGhpcy5iYWNrb2ZmLnJlc2V0KCk7XG4gIHRoaXMucmVhZHlTdGF0ZSA9ICdjbG9zZWQnO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJywgcmVhc29uKTtcblxuICBpZiAodGhpcy5fcmVjb25uZWN0aW9uICYmICF0aGlzLnNraXBSZWNvbm5lY3QpIHtcbiAgICB0aGlzLnJlY29ubmVjdCgpO1xuICB9XG59O1xuXG4vKipcbiAqIEF0dGVtcHQgYSByZWNvbm5lY3Rpb24uXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTWFuYWdlci5wcm90b3R5cGUucmVjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5yZWNvbm5lY3RpbmcgfHwgdGhpcy5za2lwUmVjb25uZWN0KSByZXR1cm4gdGhpcztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKHRoaXMuYmFja29mZi5hdHRlbXB0cyA+PSB0aGlzLl9yZWNvbm5lY3Rpb25BdHRlbXB0cykge1xuICAgIGRlYnVnKCdyZWNvbm5lY3QgZmFpbGVkJyk7XG4gICAgdGhpcy5iYWNrb2ZmLnJlc2V0KCk7XG4gICAgdGhpcy5lbWl0QWxsKCdyZWNvbm5lY3RfZmFpbGVkJyk7XG4gICAgdGhpcy5yZWNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZGVsYXkgPSB0aGlzLmJhY2tvZmYuZHVyYXRpb24oKTtcbiAgICBkZWJ1Zygnd2lsbCB3YWl0ICVkbXMgYmVmb3JlIHJlY29ubmVjdCBhdHRlbXB0JywgZGVsYXkpO1xuXG4gICAgdGhpcy5yZWNvbm5lY3RpbmcgPSB0cnVlO1xuICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbGYuc2tpcFJlY29ubmVjdCkgcmV0dXJuO1xuXG4gICAgICBkZWJ1ZygnYXR0ZW1wdGluZyByZWNvbm5lY3QnKTtcbiAgICAgIHNlbGYuZW1pdEFsbCgncmVjb25uZWN0X2F0dGVtcHQnLCBzZWxmLmJhY2tvZmYuYXR0ZW1wdHMpO1xuICAgICAgc2VsZi5lbWl0QWxsKCdyZWNvbm5lY3RpbmcnLCBzZWxmLmJhY2tvZmYuYXR0ZW1wdHMpO1xuXG4gICAgICAvLyBjaGVjayBhZ2FpbiBmb3IgdGhlIGNhc2Ugc29ja2V0IGNsb3NlZCBpbiBhYm92ZSBldmVudHNcbiAgICAgIGlmIChzZWxmLnNraXBSZWNvbm5lY3QpIHJldHVybjtcblxuICAgICAgc2VsZi5vcGVuKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGRlYnVnKCdyZWNvbm5lY3QgYXR0ZW1wdCBlcnJvcicpO1xuICAgICAgICAgIHNlbGYucmVjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgICAgc2VsZi5yZWNvbm5lY3QoKTtcbiAgICAgICAgICBzZWxmLmVtaXRBbGwoJ3JlY29ubmVjdF9lcnJvcicsIGVyci5kYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWJ1ZygncmVjb25uZWN0IHN1Y2Nlc3MnKTtcbiAgICAgICAgICBzZWxmLm9ucmVjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIGRlbGF5KTtcblxuICAgIHRoaXMuc3Vicy5wdXNoKHtcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBzdWNjZXNzZnVsIHJlY29ubmVjdC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5NYW5hZ2VyLnByb3RvdHlwZS5vbnJlY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGF0dGVtcHQgPSB0aGlzLmJhY2tvZmYuYXR0ZW1wdHM7XG4gIHRoaXMucmVjb25uZWN0aW5nID0gZmFsc2U7XG4gIHRoaXMuYmFja29mZi5yZXNldCgpO1xuICB0aGlzLnVwZGF0ZVNvY2tldElkcygpO1xuICB0aGlzLmVtaXRBbGwoJ3JlY29ubmVjdCcsIGF0dGVtcHQpO1xufTtcbiIsIlxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9uO1xuXG4vKipcbiAqIEhlbHBlciBmb3Igc3Vic2NyaXB0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxFdmVudEVtaXR0ZXJ9IG9iaiB3aXRoIGBFbWl0dGVyYCBtaXhpbiBvciBgRXZlbnRFbWl0dGVyYFxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIG9uIChvYmosIGV2LCBmbikge1xuICBvYmoub24oZXYsIGZuKTtcbiAgcmV0dXJuIHtcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICBvYmoucmVtb3ZlTGlzdGVuZXIoZXYsIGZuKTtcbiAgICB9XG4gIH07XG59XG4iLCJcbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgcGFyc2VyID0gcmVxdWlyZSgnc29ja2V0LmlvLXBhcnNlcicpO1xudmFyIEVtaXR0ZXIgPSByZXF1aXJlKCdjb21wb25lbnQtZW1pdHRlcicpO1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCd0by1hcnJheScpO1xudmFyIG9uID0gcmVxdWlyZSgnLi9vbicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCdjb21wb25lbnQtYmluZCcpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2V0LmlvLWNsaWVudDpzb2NrZXQnKTtcbnZhciBwYXJzZXFzID0gcmVxdWlyZSgncGFyc2VxcycpO1xudmFyIGhhc0JpbiA9IHJlcXVpcmUoJ2hhcy1iaW5hcnkyJyk7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gU29ja2V0O1xuXG4vKipcbiAqIEludGVybmFsIGV2ZW50cyAoYmxhY2tsaXN0ZWQpLlxuICogVGhlc2UgZXZlbnRzIGNhbid0IGJlIGVtaXR0ZWQgYnkgdGhlIHVzZXIuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxudmFyIGV2ZW50cyA9IHtcbiAgY29ubmVjdDogMSxcbiAgY29ubmVjdF9lcnJvcjogMSxcbiAgY29ubmVjdF90aW1lb3V0OiAxLFxuICBjb25uZWN0aW5nOiAxLFxuICBkaXNjb25uZWN0OiAxLFxuICBlcnJvcjogMSxcbiAgcmVjb25uZWN0OiAxLFxuICByZWNvbm5lY3RfYXR0ZW1wdDogMSxcbiAgcmVjb25uZWN0X2ZhaWxlZDogMSxcbiAgcmVjb25uZWN0X2Vycm9yOiAxLFxuICByZWNvbm5lY3Rpbmc6IDEsXG4gIHBpbmc6IDEsXG4gIHBvbmc6IDFcbn07XG5cbi8qKlxuICogU2hvcnRjdXQgdG8gYEVtaXR0ZXIjZW1pdGAuXG4gKi9cblxudmFyIGVtaXQgPSBFbWl0dGVyLnByb3RvdHlwZS5lbWl0O1xuXG4vKipcbiAqIGBTb2NrZXRgIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gU29ja2V0IChpbywgbnNwLCBvcHRzKSB7XG4gIHRoaXMuaW8gPSBpbztcbiAgdGhpcy5uc3AgPSBuc3A7XG4gIHRoaXMuanNvbiA9IHRoaXM7IC8vIGNvbXBhdFxuICB0aGlzLmlkcyA9IDA7XG4gIHRoaXMuYWNrcyA9IHt9O1xuICB0aGlzLnJlY2VpdmVCdWZmZXIgPSBbXTtcbiAgdGhpcy5zZW5kQnVmZmVyID0gW107XG4gIHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG4gIHRoaXMuZGlzY29ubmVjdGVkID0gdHJ1ZTtcbiAgdGhpcy5mbGFncyA9IHt9O1xuICBpZiAob3B0cyAmJiBvcHRzLnF1ZXJ5KSB7XG4gICAgdGhpcy5xdWVyeSA9IG9wdHMucXVlcnk7XG4gIH1cbiAgaWYgKHRoaXMuaW8uYXV0b0Nvbm5lY3QpIHRoaXMub3BlbigpO1xufVxuXG4vKipcbiAqIE1peCBpbiBgRW1pdHRlcmAuXG4gKi9cblxuRW1pdHRlcihTb2NrZXQucHJvdG90eXBlKTtcblxuLyoqXG4gKiBTdWJzY3JpYmUgdG8gb3BlbiwgY2xvc2UgYW5kIHBhY2tldCBldmVudHNcbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLnN1YkV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuc3VicykgcmV0dXJuO1xuXG4gIHZhciBpbyA9IHRoaXMuaW87XG4gIHRoaXMuc3VicyA9IFtcbiAgICBvbihpbywgJ29wZW4nLCBiaW5kKHRoaXMsICdvbm9wZW4nKSksXG4gICAgb24oaW8sICdwYWNrZXQnLCBiaW5kKHRoaXMsICdvbnBhY2tldCcpKSxcbiAgICBvbihpbywgJ2Nsb3NlJywgYmluZCh0aGlzLCAnb25jbG9zZScpKVxuICBdO1xufTtcblxuLyoqXG4gKiBcIk9wZW5zXCIgdGhlIHNvY2tldC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblNvY2tldC5wcm90b3R5cGUub3BlbiA9XG5Tb2NrZXQucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNvbm5lY3RlZCkgcmV0dXJuIHRoaXM7XG5cbiAgdGhpcy5zdWJFdmVudHMoKTtcbiAgaWYgKCF0aGlzLmlvLnJlY29ubmVjdGluZykgdGhpcy5pby5vcGVuKCk7IC8vIGVuc3VyZSBvcGVuXG4gIGlmICgnb3BlbicgPT09IHRoaXMuaW8ucmVhZHlTdGF0ZSkgdGhpcy5vbm9wZW4oKTtcbiAgdGhpcy5lbWl0KCdjb25uZWN0aW5nJyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZW5kcyBhIGBtZXNzYWdlYCBldmVudC5cbiAqXG4gKiBAcmV0dXJuIHtTb2NrZXR9IHNlbGZcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzKTtcbiAgYXJncy51bnNoaWZ0KCdtZXNzYWdlJyk7XG4gIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE92ZXJyaWRlIGBlbWl0YC5cbiAqIElmIHRoZSBldmVudCBpcyBpbiBgZXZlbnRzYCwgaXQncyBlbWl0dGVkIG5vcm1hbGx5LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBuYW1lXG4gKiBAcmV0dXJuIHtTb2NrZXR9IHNlbGZcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2KSB7XG4gIGlmIChldmVudHMuaGFzT3duUHJvcGVydHkoZXYpKSB7XG4gICAgZW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cyk7XG4gIHZhciBwYWNrZXQgPSB7XG4gICAgdHlwZTogKHRoaXMuZmxhZ3MuYmluYXJ5ICE9PSB1bmRlZmluZWQgPyB0aGlzLmZsYWdzLmJpbmFyeSA6IGhhc0JpbihhcmdzKSkgPyBwYXJzZXIuQklOQVJZX0VWRU5UIDogcGFyc2VyLkVWRU5ULFxuICAgIGRhdGE6IGFyZ3NcbiAgfTtcblxuICBwYWNrZXQub3B0aW9ucyA9IHt9O1xuICBwYWNrZXQub3B0aW9ucy5jb21wcmVzcyA9ICF0aGlzLmZsYWdzIHx8IGZhbHNlICE9PSB0aGlzLmZsYWdzLmNvbXByZXNzO1xuXG4gIC8vIGV2ZW50IGFjayBjYWxsYmFja1xuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSkge1xuICAgIGRlYnVnKCdlbWl0dGluZyBwYWNrZXQgd2l0aCBhY2sgaWQgJWQnLCB0aGlzLmlkcyk7XG4gICAgdGhpcy5hY2tzW3RoaXMuaWRzXSA9IGFyZ3MucG9wKCk7XG4gICAgcGFja2V0LmlkID0gdGhpcy5pZHMrKztcbiAgfVxuXG4gIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgIHRoaXMucGFja2V0KHBhY2tldCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zZW5kQnVmZmVyLnB1c2gocGFja2V0KTtcbiAgfVxuXG4gIHRoaXMuZmxhZ3MgPSB7fTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2VuZHMgYSBwYWNrZXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhY2tldFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5wYWNrZXQgPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gIHBhY2tldC5uc3AgPSB0aGlzLm5zcDtcbiAgdGhpcy5pby5wYWNrZXQocGFja2V0KTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gZW5naW5lIGBvcGVuYC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgZGVidWcoJ3RyYW5zcG9ydCBpcyBvcGVuIC0gY29ubmVjdGluZycpO1xuXG4gIC8vIHdyaXRlIGNvbm5lY3QgcGFja2V0IGlmIG5lY2Vzc2FyeVxuICBpZiAoJy8nICE9PSB0aGlzLm5zcCkge1xuICAgIGlmICh0aGlzLnF1ZXJ5KSB7XG4gICAgICB2YXIgcXVlcnkgPSB0eXBlb2YgdGhpcy5xdWVyeSA9PT0gJ29iamVjdCcgPyBwYXJzZXFzLmVuY29kZSh0aGlzLnF1ZXJ5KSA6IHRoaXMucXVlcnk7XG4gICAgICBkZWJ1Zygnc2VuZGluZyBjb25uZWN0IHBhY2tldCB3aXRoIHF1ZXJ5ICVzJywgcXVlcnkpO1xuICAgICAgdGhpcy5wYWNrZXQoe3R5cGU6IHBhcnNlci5DT05ORUNULCBxdWVyeTogcXVlcnl9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWNrZXQoe3R5cGU6IHBhcnNlci5DT05ORUNUfSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIGVuZ2luZSBgY2xvc2VgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWFzb25cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUub25jbG9zZSA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgZGVidWcoJ2Nsb3NlICglcyknLCByZWFzb24pO1xuICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICB0aGlzLmRpc2Nvbm5lY3RlZCA9IHRydWU7XG4gIGRlbGV0ZSB0aGlzLmlkO1xuICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3QnLCByZWFzb24pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2l0aCBzb2NrZXQgcGFja2V0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWNrZXRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUub25wYWNrZXQgPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gIHZhciBzYW1lTmFtZXNwYWNlID0gcGFja2V0Lm5zcCA9PT0gdGhpcy5uc3A7XG4gIHZhciByb290TmFtZXNwYWNlRXJyb3IgPSBwYWNrZXQudHlwZSA9PT0gcGFyc2VyLkVSUk9SICYmIHBhY2tldC5uc3AgPT09ICcvJztcblxuICBpZiAoIXNhbWVOYW1lc3BhY2UgJiYgIXJvb3ROYW1lc3BhY2VFcnJvcikgcmV0dXJuO1xuXG4gIHN3aXRjaCAocGFja2V0LnR5cGUpIHtcbiAgICBjYXNlIHBhcnNlci5DT05ORUNUOlxuICAgICAgdGhpcy5vbmNvbm5lY3QoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBwYXJzZXIuRVZFTlQ6XG4gICAgICB0aGlzLm9uZXZlbnQocGFja2V0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBwYXJzZXIuQklOQVJZX0VWRU5UOlxuICAgICAgdGhpcy5vbmV2ZW50KHBhY2tldCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcGFyc2VyLkFDSzpcbiAgICAgIHRoaXMub25hY2socGFja2V0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBwYXJzZXIuQklOQVJZX0FDSzpcbiAgICAgIHRoaXMub25hY2socGFja2V0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBwYXJzZXIuRElTQ09OTkVDVDpcbiAgICAgIHRoaXMub25kaXNjb25uZWN0KCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcGFyc2VyLkVSUk9SOlxuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHBhY2tldC5kYXRhKTtcbiAgICAgIGJyZWFrO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIGEgc2VydmVyIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWNrZXRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUub25ldmVudCA9IGZ1bmN0aW9uIChwYWNrZXQpIHtcbiAgdmFyIGFyZ3MgPSBwYWNrZXQuZGF0YSB8fCBbXTtcbiAgZGVidWcoJ2VtaXR0aW5nIGV2ZW50ICVqJywgYXJncyk7XG5cbiAgaWYgKG51bGwgIT0gcGFja2V0LmlkKSB7XG4gICAgZGVidWcoJ2F0dGFjaGluZyBhY2sgY2FsbGJhY2sgdG8gZXZlbnQnKTtcbiAgICBhcmdzLnB1c2godGhpcy5hY2socGFja2V0LmlkKSk7XG4gIH1cblxuICBpZiAodGhpcy5jb25uZWN0ZWQpIHtcbiAgICBlbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVjZWl2ZUJ1ZmZlci5wdXNoKGFyZ3MpO1xuICB9XG59O1xuXG4vKipcbiAqIFByb2R1Y2VzIGFuIGFjayBjYWxsYmFjayB0byBlbWl0IHdpdGggYW4gZXZlbnQuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5hY2sgPSBmdW5jdGlvbiAoaWQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgc2VudCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIC8vIHByZXZlbnQgZG91YmxlIGNhbGxiYWNrc1xuICAgIGlmIChzZW50KSByZXR1cm47XG4gICAgc2VudCA9IHRydWU7XG4gICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cyk7XG4gICAgZGVidWcoJ3NlbmRpbmcgYWNrICVqJywgYXJncyk7XG5cbiAgICBzZWxmLnBhY2tldCh7XG4gICAgICB0eXBlOiBoYXNCaW4oYXJncykgPyBwYXJzZXIuQklOQVJZX0FDSyA6IHBhcnNlci5BQ0ssXG4gICAgICBpZDogaWQsXG4gICAgICBkYXRhOiBhcmdzXG4gICAgfSk7XG4gIH07XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIGEgc2VydmVyIGFja25vd2xlZ2VtZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWNrZXRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUub25hY2sgPSBmdW5jdGlvbiAocGFja2V0KSB7XG4gIHZhciBhY2sgPSB0aGlzLmFja3NbcGFja2V0LmlkXTtcbiAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBhY2spIHtcbiAgICBkZWJ1ZygnY2FsbGluZyBhY2sgJXMgd2l0aCAlaicsIHBhY2tldC5pZCwgcGFja2V0LmRhdGEpO1xuICAgIGFjay5hcHBseSh0aGlzLCBwYWNrZXQuZGF0YSk7XG4gICAgZGVsZXRlIHRoaXMuYWNrc1twYWNrZXQuaWRdO1xuICB9IGVsc2Uge1xuICAgIGRlYnVnKCdiYWQgYWNrICVzJywgcGFja2V0LmlkKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgdXBvbiBzZXJ2ZXIgY29ubmVjdC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLm9uY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuICB0aGlzLmRpc2Nvbm5lY3RlZCA9IGZhbHNlO1xuICB0aGlzLmVtaXRCdWZmZXJlZCgpO1xuICB0aGlzLmVtaXQoJ2Nvbm5lY3QnKTtcbn07XG5cbi8qKlxuICogRW1pdCBidWZmZXJlZCBldmVudHMgKHJlY2VpdmVkIGFuZCBlbWl0dGVkKS5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLmVtaXRCdWZmZXJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCB0aGlzLnJlY2VpdmVCdWZmZXIubGVuZ3RoOyBpKyspIHtcbiAgICBlbWl0LmFwcGx5KHRoaXMsIHRoaXMucmVjZWl2ZUJ1ZmZlcltpXSk7XG4gIH1cbiAgdGhpcy5yZWNlaXZlQnVmZmVyID0gW107XG5cbiAgZm9yIChpID0gMDsgaSA8IHRoaXMuc2VuZEJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgIHRoaXMucGFja2V0KHRoaXMuc2VuZEJ1ZmZlcltpXSk7XG4gIH1cbiAgdGhpcy5zZW5kQnVmZmVyID0gW107XG59O1xuXG4vKipcbiAqIENhbGxlZCB1cG9uIHNlcnZlciBkaXNjb25uZWN0LlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNvY2tldC5wcm90b3R5cGUub25kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1Zygnc2VydmVyIGRpc2Nvbm5lY3QgKCVzKScsIHRoaXMubnNwKTtcbiAgdGhpcy5kZXN0cm95KCk7XG4gIHRoaXMub25jbG9zZSgnaW8gc2VydmVyIGRpc2Nvbm5lY3QnKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHVwb24gZm9yY2VkIGNsaWVudC9zZXJ2ZXIgc2lkZSBkaXNjb25uZWN0aW9ucyxcbiAqIHRoaXMgbWV0aG9kIGVuc3VyZXMgdGhlIG1hbmFnZXIgc3RvcHMgdHJhY2tpbmcgdXMgYW5kXG4gKiB0aGF0IHJlY29ubmVjdGlvbnMgZG9uJ3QgZ2V0IHRyaWdnZXJlZCBmb3IgdGhpcy5cbiAqXG4gKiBAYXBpIHByaXZhdGUuXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5zdWJzKSB7XG4gICAgLy8gY2xlYW4gc3Vic2NyaXB0aW9ucyB0byBhdm9pZCByZWNvbm5lY3Rpb25zXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1YnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuc3Vic1tpXS5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuc3VicyA9IG51bGw7XG4gIH1cblxuICB0aGlzLmlvLmRlc3Ryb3kodGhpcyk7XG59O1xuXG4vKipcbiAqIERpc2Nvbm5lY3RzIHRoZSBzb2NrZXQgbWFudWFsbHkuXG4gKlxuICogQHJldHVybiB7U29ja2V0fSBzZWxmXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblNvY2tldC5wcm90b3R5cGUuY2xvc2UgPVxuU29ja2V0LnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jb25uZWN0ZWQpIHtcbiAgICBkZWJ1ZygncGVyZm9ybWluZyBkaXNjb25uZWN0ICglcyknLCB0aGlzLm5zcCk7XG4gICAgdGhpcy5wYWNrZXQoeyB0eXBlOiBwYXJzZXIuRElTQ09OTkVDVCB9KTtcbiAgfVxuXG4gIC8vIHJlbW92ZSBzb2NrZXQgZnJvbSBwb29sXG4gIHRoaXMuZGVzdHJveSgpO1xuXG4gIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgIC8vIGZpcmUgZXZlbnRzXG4gICAgdGhpcy5vbmNsb3NlKCdpbyBjbGllbnQgZGlzY29ubmVjdCcpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjb21wcmVzcyBmbGFnLlxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaWYgYHRydWVgLCBjb21wcmVzc2VzIHRoZSBzZW5kaW5nIGRhdGFcbiAqIEByZXR1cm4ge1NvY2tldH0gc2VsZlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Tb2NrZXQucHJvdG90eXBlLmNvbXByZXNzID0gZnVuY3Rpb24gKGNvbXByZXNzKSB7XG4gIHRoaXMuZmxhZ3MuY29tcHJlc3MgPSBjb21wcmVzcztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGJpbmFyeSBmbGFnXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSB3aGV0aGVyIHRoZSBlbWl0dGVkIGRhdGEgY29udGFpbnMgYmluYXJ5XG4gKiBAcmV0dXJuIHtTb2NrZXR9IHNlbGZcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU29ja2V0LnByb3RvdHlwZS5iaW5hcnkgPSBmdW5jdGlvbiAoYmluYXJ5KSB7XG4gIHRoaXMuZmxhZ3MuYmluYXJ5ID0gYmluYXJ5O1xuICByZXR1cm4gdGhpcztcbn07XG4iLCJcbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgcGFyc2V1cmkgPSByZXF1aXJlKCdwYXJzZXVyaScpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2V0LmlvLWNsaWVudDp1cmwnKTtcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVybDtcblxuLyoqXG4gKiBVUkwgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7T2JqZWN0fSBBbiBvYmplY3QgbWVhbnQgdG8gbWltaWMgd2luZG93LmxvY2F0aW9uLlxuICogICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHdpbmRvdy5sb2NhdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gdXJsICh1cmksIGxvYykge1xuICB2YXIgb2JqID0gdXJpO1xuXG4gIC8vIGRlZmF1bHQgdG8gd2luZG93LmxvY2F0aW9uXG4gIGxvYyA9IGxvYyB8fCAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBsb2NhdGlvbik7XG4gIGlmIChudWxsID09IHVyaSkgdXJpID0gbG9jLnByb3RvY29sICsgJy8vJyArIGxvYy5ob3N0O1xuXG4gIC8vIHJlbGF0aXZlIHBhdGggc3VwcG9ydFxuICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB1cmkpIHtcbiAgICBpZiAoJy8nID09PSB1cmkuY2hhckF0KDApKSB7XG4gICAgICBpZiAoJy8nID09PSB1cmkuY2hhckF0KDEpKSB7XG4gICAgICAgIHVyaSA9IGxvYy5wcm90b2NvbCArIHVyaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVyaSA9IGxvYy5ob3N0ICsgdXJpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghL14oaHR0cHM/fHdzcz8pOlxcL1xcLy8udGVzdCh1cmkpKSB7XG4gICAgICBkZWJ1ZygncHJvdG9jb2wtbGVzcyB1cmwgJXMnLCB1cmkpO1xuICAgICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbG9jKSB7XG4gICAgICAgIHVyaSA9IGxvYy5wcm90b2NvbCArICcvLycgKyB1cmk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmkgPSAnaHR0cHM6Ly8nICsgdXJpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBhcnNlXG4gICAgZGVidWcoJ3BhcnNlICVzJywgdXJpKTtcbiAgICBvYmogPSBwYXJzZXVyaSh1cmkpO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHdlIHRyZWF0IGBsb2NhbGhvc3Q6ODBgIGFuZCBgbG9jYWxob3N0YCBlcXVhbGx5XG4gIGlmICghb2JqLnBvcnQpIHtcbiAgICBpZiAoL14oaHR0cHx3cykkLy50ZXN0KG9iai5wcm90b2NvbCkpIHtcbiAgICAgIG9iai5wb3J0ID0gJzgwJztcbiAgICB9IGVsc2UgaWYgKC9eKGh0dHB8d3MpcyQvLnRlc3Qob2JqLnByb3RvY29sKSkge1xuICAgICAgb2JqLnBvcnQgPSAnNDQzJztcbiAgICB9XG4gIH1cblxuICBvYmoucGF0aCA9IG9iai5wYXRoIHx8ICcvJztcblxuICB2YXIgaXB2NiA9IG9iai5ob3N0LmluZGV4T2YoJzonKSAhPT0gLTE7XG4gIHZhciBob3N0ID0gaXB2NiA/ICdbJyArIG9iai5ob3N0ICsgJ10nIDogb2JqLmhvc3Q7XG5cbiAgLy8gZGVmaW5lIHVuaXF1ZSBpZFxuICBvYmouaWQgPSBvYmoucHJvdG9jb2wgKyAnOi8vJyArIGhvc3QgKyAnOicgKyBvYmoucG9ydDtcbiAgLy8gZGVmaW5lIGhyZWZcbiAgb2JqLmhyZWYgPSBvYmoucHJvdG9jb2wgKyAnOi8vJyArIGhvc3QgKyAobG9jICYmIGxvYy5wb3J0ID09PSBvYmoucG9ydCA/ICcnIDogKCc6JyArIG9iai5wb3J0KSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cbiIsIi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICpcbiAqIEV4cG9zZSBgZGVidWcoKWAgYXMgdGhlIG1vZHVsZS5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RlYnVnJyk7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZVxuICAgICAgICAgICAgICAgJiYgJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZS5zdG9yYWdlXG4gICAgICAgICAgICAgICAgICA/IGNocm9tZS5zdG9yYWdlLmxvY2FsXG4gICAgICAgICAgICAgICAgICA6IGxvY2Fsc3RvcmFnZSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcbiAgJyMwMDAwQ0MnLCAnIzAwMDBGRicsICcjMDAzM0NDJywgJyMwMDMzRkYnLCAnIzAwNjZDQycsICcjMDA2NkZGJywgJyMwMDk5Q0MnLFxuICAnIzAwOTlGRicsICcjMDBDQzAwJywgJyMwMENDMzMnLCAnIzAwQ0M2NicsICcjMDBDQzk5JywgJyMwMENDQ0MnLCAnIzAwQ0NGRicsXG4gICcjMzMwMENDJywgJyMzMzAwRkYnLCAnIzMzMzNDQycsICcjMzMzM0ZGJywgJyMzMzY2Q0MnLCAnIzMzNjZGRicsICcjMzM5OUNDJyxcbiAgJyMzMzk5RkYnLCAnIzMzQ0MwMCcsICcjMzNDQzMzJywgJyMzM0NDNjYnLCAnIzMzQ0M5OScsICcjMzNDQ0NDJywgJyMzM0NDRkYnLFxuICAnIzY2MDBDQycsICcjNjYwMEZGJywgJyM2NjMzQ0MnLCAnIzY2MzNGRicsICcjNjZDQzAwJywgJyM2NkNDMzMnLCAnIzk5MDBDQycsXG4gICcjOTkwMEZGJywgJyM5OTMzQ0MnLCAnIzk5MzNGRicsICcjOTlDQzAwJywgJyM5OUNDMzMnLCAnI0NDMDAwMCcsICcjQ0MwMDMzJyxcbiAgJyNDQzAwNjYnLCAnI0NDMDA5OScsICcjQ0MwMENDJywgJyNDQzAwRkYnLCAnI0NDMzMwMCcsICcjQ0MzMzMzJywgJyNDQzMzNjYnLFxuICAnI0NDMzM5OScsICcjQ0MzM0NDJywgJyNDQzMzRkYnLCAnI0NDNjYwMCcsICcjQ0M2NjMzJywgJyNDQzk5MDAnLCAnI0NDOTkzMycsXG4gICcjQ0NDQzAwJywgJyNDQ0NDMzMnLCAnI0ZGMDAwMCcsICcjRkYwMDMzJywgJyNGRjAwNjYnLCAnI0ZGMDA5OScsICcjRkYwMENDJyxcbiAgJyNGRjAwRkYnLCAnI0ZGMzMwMCcsICcjRkYzMzMzJywgJyNGRjMzNjYnLCAnI0ZGMzM5OScsICcjRkYzM0NDJywgJyNGRjMzRkYnLFxuICAnI0ZGNjYwMCcsICcjRkY2NjMzJywgJyNGRjk5MDAnLCAnI0ZGOTkzMycsICcjRkZDQzAwJywgJyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgLy8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuICAvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuICAvLyBleHBsaWNpdGx5XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiB3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGlzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG4gIC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG4gIHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuICAgIC8vIGlzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcbiAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuICAgIC8vIGlzIGZpcmVmb3ggPj0gdjMxP1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuICAgIC8vIGRvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcbiAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uKHYpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnIubWVzc2FnZTtcbiAgfVxufTtcblxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuICB2YXIgdXNlQ29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cbiAgYXJnc1swXSA9ICh1c2VDb2xvcnMgPyAnJWMnIDogJycpXG4gICAgKyB0aGlzLm5hbWVzcGFjZVxuICAgICsgKHVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKVxuICAgICsgYXJnc1swXVxuICAgICsgKHVzZUNvbG9ycyA/ICclYyAnIDogJyAnKVxuICAgICsgJysnICsgZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG4gIGlmICghdXNlQ29sb3JzKSByZXR1cm47XG5cbiAgdmFyIGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuICBhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKVxuXG4gIC8vIHRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG4gIC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cbiAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0QyA9IDA7XG4gIGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIGlmICgnJSUnID09PSBtYXRjaCkgcmV0dXJuO1xuICAgIGluZGV4Kys7XG4gICAgaWYgKCclYycgPT09IG1hdGNoKSB7XG4gICAgICAvLyB3ZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcbiAgICAgIC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG4gICAgICBsYXN0QyA9IGluZGV4O1xuICAgIH1cbiAgfSk7XG5cbiAgYXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUubG9nKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5sb2dgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgLy8gdGhpcyBoYWNrZXJ5IGlzIHJlcXVpcmVkIGZvciBJRTgvOSwgd2hlcmVcbiAgLy8gdGhlIGBjb25zb2xlLmxvZ2AgZnVuY3Rpb24gZG9lc24ndCBoYXZlICdhcHBseSdcbiAgcmV0dXJuICdvYmplY3QnID09PSB0eXBlb2YgY29uc29sZVxuICAgICYmIGNvbnNvbGUubG9nXG4gICAgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICB0cnkge1xuICAgIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UuZGVidWcgPSBuYW1lc3BhY2VzO1xuICAgIH1cbiAgfSBjYXRjaChlKSB7fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHZhciByO1xuICB0cnkge1xuICAgIHIgPSBleHBvcnRzLnN0b3JhZ2UuZGVidWc7XG4gIH0gY2F0Y2goZSkge31cblxuICAvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG4gIGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuICAgIHIgPSBwcm9jZXNzLmVudi5ERUJVRztcbiAgfVxuXG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIEVuYWJsZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiBgbG9jYWxTdG9yYWdlLmRlYnVnYCBpbml0aWFsbHkuXG4gKi9cblxuZXhwb3J0cy5lbmFibGUobG9hZCgpKTtcblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG4iLCIvKmdsb2JhbCBCbG9iLEZpbGUqL1xuXG4vKipcbiAqIE1vZHVsZSByZXF1aXJlbWVudHNcbiAqL1xuXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKTtcbnZhciBpc0J1ZiA9IHJlcXVpcmUoJy4vaXMtYnVmZmVyJyk7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIHdpdGhOYXRpdmVCbG9iID0gdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiB0b1N0cmluZy5jYWxsKEJsb2IpID09PSAnW29iamVjdCBCbG9iQ29uc3RydWN0b3JdJyk7XG52YXIgd2l0aE5hdGl2ZUZpbGUgPSB0eXBlb2YgRmlsZSA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIEZpbGUgIT09ICd1bmRlZmluZWQnICYmIHRvU3RyaW5nLmNhbGwoRmlsZSkgPT09ICdbb2JqZWN0IEZpbGVDb25zdHJ1Y3Rvcl0nKTtcblxuLyoqXG4gKiBSZXBsYWNlcyBldmVyeSBCdWZmZXIgfCBBcnJheUJ1ZmZlciBpbiBwYWNrZXQgd2l0aCBhIG51bWJlcmVkIHBsYWNlaG9sZGVyLlxuICogQW55dGhpbmcgd2l0aCBibG9icyBvciBmaWxlcyBzaG91bGQgYmUgZmVkIHRocm91Z2ggcmVtb3ZlQmxvYnMgYmVmb3JlIGNvbWluZ1xuICogaGVyZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFja2V0IC0gc29ja2V0LmlvIGV2ZW50IHBhY2tldFxuICogQHJldHVybiB7T2JqZWN0fSB3aXRoIGRlY29uc3RydWN0ZWQgcGFja2V0IGFuZCBsaXN0IG9mIGJ1ZmZlcnNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5kZWNvbnN0cnVjdFBhY2tldCA9IGZ1bmN0aW9uKHBhY2tldCkge1xuICB2YXIgYnVmZmVycyA9IFtdO1xuICB2YXIgcGFja2V0RGF0YSA9IHBhY2tldC5kYXRhO1xuICB2YXIgcGFjayA9IHBhY2tldDtcbiAgcGFjay5kYXRhID0gX2RlY29uc3RydWN0UGFja2V0KHBhY2tldERhdGEsIGJ1ZmZlcnMpO1xuICBwYWNrLmF0dGFjaG1lbnRzID0gYnVmZmVycy5sZW5ndGg7IC8vIG51bWJlciBvZiBiaW5hcnkgJ2F0dGFjaG1lbnRzJ1xuICByZXR1cm4ge3BhY2tldDogcGFjaywgYnVmZmVyczogYnVmZmVyc307XG59O1xuXG5mdW5jdGlvbiBfZGVjb25zdHJ1Y3RQYWNrZXQoZGF0YSwgYnVmZmVycykge1xuICBpZiAoIWRhdGEpIHJldHVybiBkYXRhO1xuXG4gIGlmIChpc0J1ZihkYXRhKSkge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IHsgX3BsYWNlaG9sZGVyOiB0cnVlLCBudW06IGJ1ZmZlcnMubGVuZ3RoIH07XG4gICAgYnVmZmVycy5wdXNoKGRhdGEpO1xuICAgIHJldHVybiBwbGFjZWhvbGRlcjtcbiAgfSBlbHNlIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgdmFyIG5ld0RhdGEgPSBuZXcgQXJyYXkoZGF0YS5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgbmV3RGF0YVtpXSA9IF9kZWNvbnN0cnVjdFBhY2tldChkYXRhW2ldLCBidWZmZXJzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0RhdGE7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICEoZGF0YSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgdmFyIG5ld0RhdGEgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgbmV3RGF0YVtrZXldID0gX2RlY29uc3RydWN0UGFja2V0KGRhdGFba2V5XSwgYnVmZmVycyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdEYXRhO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFJlY29uc3RydWN0cyBhIGJpbmFyeSBwYWNrZXQgZnJvbSBpdHMgcGxhY2Vob2xkZXIgcGFja2V0IGFuZCBidWZmZXJzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhY2tldCAtIGV2ZW50IHBhY2tldCB3aXRoIHBsYWNlaG9sZGVyc1xuICogQHBhcmFtIHtBcnJheX0gYnVmZmVycyAtIGJpbmFyeSBidWZmZXJzIHRvIHB1dCBpbiBwbGFjZWhvbGRlciBwb3NpdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVjb25zdHJ1Y3RlZCBwYWNrZXRcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5yZWNvbnN0cnVjdFBhY2tldCA9IGZ1bmN0aW9uKHBhY2tldCwgYnVmZmVycykge1xuICBwYWNrZXQuZGF0YSA9IF9yZWNvbnN0cnVjdFBhY2tldChwYWNrZXQuZGF0YSwgYnVmZmVycyk7XG4gIHBhY2tldC5hdHRhY2htZW50cyA9IHVuZGVmaW5lZDsgLy8gbm8gbG9uZ2VyIHVzZWZ1bFxuICByZXR1cm4gcGFja2V0O1xufTtcblxuZnVuY3Rpb24gX3JlY29uc3RydWN0UGFja2V0KGRhdGEsIGJ1ZmZlcnMpIHtcbiAgaWYgKCFkYXRhKSByZXR1cm4gZGF0YTtcblxuICBpZiAoZGF0YSAmJiBkYXRhLl9wbGFjZWhvbGRlciA9PT0gdHJ1ZSkge1xuICAgIHZhciBpc0luZGV4VmFsaWQgPVxuICAgICAgdHlwZW9mIGRhdGEubnVtID09PSBcIm51bWJlclwiICYmXG4gICAgICBkYXRhLm51bSA+PSAwICYmXG4gICAgICBkYXRhLm51bSA8IGJ1ZmZlcnMubGVuZ3RoO1xuICAgIGlmIChpc0luZGV4VmFsaWQpIHtcbiAgICAgIHJldHVybiBidWZmZXJzW2RhdGEubnVtXTsgLy8gYXBwcm9wcmlhdGUgYnVmZmVyIChzaG91bGQgYmUgbmF0dXJhbCBvcmRlciBhbnl3YXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgYXR0YWNobWVudHNcIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRhdGFbaV0gPSBfcmVjb25zdHJ1Y3RQYWNrZXQoZGF0YVtpXSwgYnVmZmVycyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICBkYXRhW2tleV0gPSBfcmVjb25zdHJ1Y3RQYWNrZXQoZGF0YVtrZXldLCBidWZmZXJzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSByZW1vdmVzIEJsb2JzIG9yIEZpbGVzIGZyb20gZGF0YSB2aWFcbiAqIEZpbGVSZWFkZXIncyByZWFkQXNBcnJheUJ1ZmZlciBtZXRob2QuIFVzZWQgYmVmb3JlIGVuY29kaW5nXG4gKiBkYXRhIGFzIG1zZ3BhY2suIENhbGxzIGNhbGxiYWNrIHdpdGggdGhlIGJsb2JsZXNzIGRhdGEuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLnJlbW92ZUJsb2JzID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gX3JlbW92ZUJsb2JzKG9iaiwgY3VyS2V5LCBjb250YWluaW5nT2JqZWN0KSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBvYmo7XG5cbiAgICAvLyBjb252ZXJ0IGFueSBibG9iXG4gICAgaWYgKCh3aXRoTmF0aXZlQmxvYiAmJiBvYmogaW5zdGFuY2VvZiBCbG9iKSB8fFxuICAgICAgICAod2l0aE5hdGl2ZUZpbGUgJiYgb2JqIGluc3RhbmNlb2YgRmlsZSkpIHtcbiAgICAgIHBlbmRpbmdCbG9icysrO1xuXG4gICAgICAvLyBhc3luYyBmaWxlcmVhZGVyXG4gICAgICB2YXIgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeyAvLyB0aGlzLnJlc3VsdCA9PSBhcnJheWJ1ZmZlclxuICAgICAgICBpZiAoY29udGFpbmluZ09iamVjdCkge1xuICAgICAgICAgIGNvbnRhaW5pbmdPYmplY3RbY3VyS2V5XSA9IHRoaXMucmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGJsb2JsZXNzRGF0YSA9IHRoaXMucmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgbm90aGluZyBwZW5kaW5nIGl0cyBjYWxsYmFjayB0aW1lXG4gICAgICAgIGlmKCEgLS1wZW5kaW5nQmxvYnMpIHtcbiAgICAgICAgICBjYWxsYmFjayhibG9ibGVzc0RhdGEpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKG9iaik7IC8vIGJsb2IgLT4gYXJyYXlidWZmZXJcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqKSkgeyAvLyBoYW5kbGUgYXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIF9yZW1vdmVCbG9icyhvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAhaXNCdWYob2JqKSkgeyAvLyBhbmQgb2JqZWN0XG4gICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIF9yZW1vdmVCbG9icyhvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBwZW5kaW5nQmxvYnMgPSAwO1xuICB2YXIgYmxvYmxlc3NEYXRhID0gZGF0YTtcbiAgX3JlbW92ZUJsb2JzKGJsb2JsZXNzRGF0YSk7XG4gIGlmICghcGVuZGluZ0Jsb2JzKSB7XG4gICAgY2FsbGJhY2soYmxvYmxlc3NEYXRhKTtcbiAgfVxufTtcbiIsIlxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tldC5pby1wYXJzZXInKTtcbnZhciBFbWl0dGVyID0gcmVxdWlyZSgnY29tcG9uZW50LWVtaXR0ZXInKTtcbnZhciBiaW5hcnkgPSByZXF1aXJlKCcuL2JpbmFyeScpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG52YXIgaXNCdWYgPSByZXF1aXJlKCcuL2lzLWJ1ZmZlcicpO1xuXG4vKipcbiAqIFByb3RvY29sIHZlcnNpb24uXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnByb3RvY29sID0gNDtcblxuLyoqXG4gKiBQYWNrZXQgdHlwZXMuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnR5cGVzID0gW1xuICAnQ09OTkVDVCcsXG4gICdESVNDT05ORUNUJyxcbiAgJ0VWRU5UJyxcbiAgJ0FDSycsXG4gICdFUlJPUicsXG4gICdCSU5BUllfRVZFTlQnLFxuICAnQklOQVJZX0FDSydcbl07XG5cbi8qKlxuICogUGFja2V0IHR5cGUgYGNvbm5lY3RgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5DT05ORUNUID0gMDtcblxuLyoqXG4gKiBQYWNrZXQgdHlwZSBgZGlzY29ubmVjdGAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLkRJU0NPTk5FQ1QgPSAxO1xuXG4vKipcbiAqIFBhY2tldCB0eXBlIGBldmVudGAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLkVWRU5UID0gMjtcblxuLyoqXG4gKiBQYWNrZXQgdHlwZSBgYWNrYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuQUNLID0gMztcblxuLyoqXG4gKiBQYWNrZXQgdHlwZSBgZXJyb3JgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5FUlJPUiA9IDQ7XG5cbi8qKlxuICogUGFja2V0IHR5cGUgJ2JpbmFyeSBldmVudCdcbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuQklOQVJZX0VWRU5UID0gNTtcblxuLyoqXG4gKiBQYWNrZXQgdHlwZSBgYmluYXJ5IGFja2AuIEZvciBhY2tzIHdpdGggYmluYXJ5IGFyZ3VtZW50cy5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuQklOQVJZX0FDSyA9IDY7XG5cbi8qKlxuICogRW5jb2RlciBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuRW5jb2RlciA9IEVuY29kZXI7XG5cbi8qKlxuICogRGVjb2RlciBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuRGVjb2RlciA9IERlY29kZXI7XG5cbi8qKlxuICogQSBzb2NrZXQuaW8gRW5jb2RlciBpbnN0YW5jZVxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gRW5jb2RlcigpIHt9XG5cbnZhciBFUlJPUl9QQUNLRVQgPSBleHBvcnRzLkVSUk9SICsgJ1wiZW5jb2RlIGVycm9yXCInO1xuXG4vKipcbiAqIEVuY29kZSBhIHBhY2tldCBhcyBhIHNpbmdsZSBzdHJpbmcgaWYgbm9uLWJpbmFyeSwgb3IgYXMgYVxuICogYnVmZmVyIHNlcXVlbmNlLCBkZXBlbmRpbmcgb24gcGFja2V0IHR5cGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIHBhY2tldCBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gaGFuZGxlIGVuY29kaW5ncyAobGlrZWx5IGVuZ2luZS53cml0ZSlcbiAqIEByZXR1cm4gQ2FsbHMgY2FsbGJhY2sgd2l0aCBBcnJheSBvZiBlbmNvZGluZ3NcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24ob2JqLCBjYWxsYmFjayl7XG4gIGRlYnVnKCdlbmNvZGluZyBwYWNrZXQgJWonLCBvYmopO1xuXG4gIGlmIChleHBvcnRzLkJJTkFSWV9FVkVOVCA9PT0gb2JqLnR5cGUgfHwgZXhwb3J0cy5CSU5BUllfQUNLID09PSBvYmoudHlwZSkge1xuICAgIGVuY29kZUFzQmluYXJ5KG9iaiwgY2FsbGJhY2spO1xuICB9IGVsc2Uge1xuICAgIHZhciBlbmNvZGluZyA9IGVuY29kZUFzU3RyaW5nKG9iaik7XG4gICAgY2FsbGJhY2soW2VuY29kaW5nXSk7XG4gIH1cbn07XG5cbi8qKlxuICogRW5jb2RlIHBhY2tldCBhcyBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhY2tldFxuICogQHJldHVybiB7U3RyaW5nfSBlbmNvZGVkXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBlbmNvZGVBc1N0cmluZyhvYmopIHtcblxuICAvLyBmaXJzdCBpcyB0eXBlXG4gIHZhciBzdHIgPSAnJyArIG9iai50eXBlO1xuXG4gIC8vIGF0dGFjaG1lbnRzIGlmIHdlIGhhdmUgdGhlbVxuICBpZiAoZXhwb3J0cy5CSU5BUllfRVZFTlQgPT09IG9iai50eXBlIHx8IGV4cG9ydHMuQklOQVJZX0FDSyA9PT0gb2JqLnR5cGUpIHtcbiAgICBzdHIgKz0gb2JqLmF0dGFjaG1lbnRzICsgJy0nO1xuICB9XG5cbiAgLy8gaWYgd2UgaGF2ZSBhIG5hbWVzcGFjZSBvdGhlciB0aGFuIGAvYFxuICAvLyB3ZSBhcHBlbmQgaXQgZm9sbG93ZWQgYnkgYSBjb21tYSBgLGBcbiAgaWYgKG9iai5uc3AgJiYgJy8nICE9PSBvYmoubnNwKSB7XG4gICAgc3RyICs9IG9iai5uc3AgKyAnLCc7XG4gIH1cblxuICAvLyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSB0aGUgaWRcbiAgaWYgKG51bGwgIT0gb2JqLmlkKSB7XG4gICAgc3RyICs9IG9iai5pZDtcbiAgfVxuXG4gIC8vIGpzb24gZGF0YVxuICBpZiAobnVsbCAhPSBvYmouZGF0YSkge1xuICAgIHZhciBwYXlsb2FkID0gdHJ5U3RyaW5naWZ5KG9iai5kYXRhKTtcbiAgICBpZiAocGF5bG9hZCAhPT0gZmFsc2UpIHtcbiAgICAgIHN0ciArPSBwYXlsb2FkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRVJST1JfUEFDS0VUO1xuICAgIH1cbiAgfVxuXG4gIGRlYnVnKCdlbmNvZGVkICVqIGFzICVzJywgb2JqLCBzdHIpO1xuICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiB0cnlTdHJpbmdpZnkoc3RyKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN0cik7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRW5jb2RlIHBhY2tldCBhcyAnYnVmZmVyIHNlcXVlbmNlJyBieSByZW1vdmluZyBibG9icywgYW5kXG4gKiBkZWNvbnN0cnVjdGluZyBwYWNrZXQgaW50byBvYmplY3Qgd2l0aCBwbGFjZWhvbGRlcnMgYW5kXG4gKiBhIGxpc3Qgb2YgYnVmZmVycy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFja2V0XG4gKiBAcmV0dXJuIHtCdWZmZXJ9IGVuY29kZWRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGVuY29kZUFzQmluYXJ5KG9iaiwgY2FsbGJhY2spIHtcblxuICBmdW5jdGlvbiB3cml0ZUVuY29kaW5nKGJsb2JsZXNzRGF0YSkge1xuICAgIHZhciBkZWNvbnN0cnVjdGlvbiA9IGJpbmFyeS5kZWNvbnN0cnVjdFBhY2tldChibG9ibGVzc0RhdGEpO1xuICAgIHZhciBwYWNrID0gZW5jb2RlQXNTdHJpbmcoZGVjb25zdHJ1Y3Rpb24ucGFja2V0KTtcbiAgICB2YXIgYnVmZmVycyA9IGRlY29uc3RydWN0aW9uLmJ1ZmZlcnM7XG5cbiAgICBidWZmZXJzLnVuc2hpZnQocGFjayk7IC8vIGFkZCBwYWNrZXQgaW5mbyB0byBiZWdpbm5pbmcgb2YgZGF0YSBsaXN0XG4gICAgY2FsbGJhY2soYnVmZmVycyk7IC8vIHdyaXRlIGFsbCB0aGUgYnVmZmVyc1xuICB9XG5cbiAgYmluYXJ5LnJlbW92ZUJsb2JzKG9iaiwgd3JpdGVFbmNvZGluZyk7XG59XG5cbi8qKlxuICogQSBzb2NrZXQuaW8gRGVjb2RlciBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gZGVjb2RlclxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBEZWNvZGVyKCkge1xuICB0aGlzLnJlY29uc3RydWN0b3IgPSBudWxsO1xufVxuXG4vKipcbiAqIE1peCBpbiBgRW1pdHRlcmAgd2l0aCBEZWNvZGVyLlxuICovXG5cbkVtaXR0ZXIoRGVjb2Rlci5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERlY29kZXMgYW4gZW5jb2RlZCBwYWNrZXQgc3RyaW5nIGludG8gcGFja2V0IEpTT04uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG9iaiAtIGVuY29kZWQgcGFja2V0XG4gKiBAcmV0dXJuIHtPYmplY3R9IHBhY2tldFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5EZWNvZGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihvYmopIHtcbiAgdmFyIHBhY2tldDtcbiAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHRoaXMucmVjb25zdHJ1Y3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ290IHBsYWludGV4dCBkYXRhIHdoZW4gcmVjb25zdHJ1Y3RpbmcgYSBwYWNrZXRcIik7XG4gICAgfVxuICAgIHBhY2tldCA9IGRlY29kZVN0cmluZyhvYmopO1xuICAgIGlmIChleHBvcnRzLkJJTkFSWV9FVkVOVCA9PT0gcGFja2V0LnR5cGUgfHwgZXhwb3J0cy5CSU5BUllfQUNLID09PSBwYWNrZXQudHlwZSkgeyAvLyBiaW5hcnkgcGFja2V0J3MganNvblxuICAgICAgdGhpcy5yZWNvbnN0cnVjdG9yID0gbmV3IEJpbmFyeVJlY29uc3RydWN0b3IocGFja2V0KTtcblxuICAgICAgLy8gbm8gYXR0YWNobWVudHMsIGxhYmVsZWQgYmluYXJ5IGJ1dCBubyBiaW5hcnkgZGF0YSB0byBmb2xsb3dcbiAgICAgIGlmICh0aGlzLnJlY29uc3RydWN0b3IucmVjb25QYWNrLmF0dGFjaG1lbnRzID09PSAwKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnZGVjb2RlZCcsIHBhY2tldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gbm9uLWJpbmFyeSBmdWxsIHBhY2tldFxuICAgICAgdGhpcy5lbWl0KCdkZWNvZGVkJywgcGFja2V0KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNCdWYob2JqKSB8fCBvYmouYmFzZTY0KSB7IC8vIHJhdyBiaW5hcnkgZGF0YVxuICAgIGlmICghdGhpcy5yZWNvbnN0cnVjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dvdCBiaW5hcnkgZGF0YSB3aGVuIG5vdCByZWNvbnN0cnVjdGluZyBhIHBhY2tldCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYWNrZXQgPSB0aGlzLnJlY29uc3RydWN0b3IudGFrZUJpbmFyeURhdGEob2JqKTtcbiAgICAgIGlmIChwYWNrZXQpIHsgLy8gcmVjZWl2ZWQgZmluYWwgYnVmZmVyXG4gICAgICAgIHRoaXMucmVjb25zdHJ1Y3RvciA9IG51bGw7XG4gICAgICAgIHRoaXMuZW1pdCgnZGVjb2RlZCcsIHBhY2tldCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biB0eXBlOiAnICsgb2JqKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBwYWNrZXQgU3RyaW5nIChKU09OIGRhdGEpXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7T2JqZWN0fSBwYWNrZXRcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGRlY29kZVN0cmluZyhzdHIpIHtcbiAgdmFyIGkgPSAwO1xuICAvLyBsb29rIHVwIHR5cGVcbiAgdmFyIHAgPSB7XG4gICAgdHlwZTogTnVtYmVyKHN0ci5jaGFyQXQoMCkpXG4gIH07XG5cbiAgaWYgKG51bGwgPT0gZXhwb3J0cy50eXBlc1twLnR5cGVdKSB7XG4gICAgcmV0dXJuIGVycm9yKCd1bmtub3duIHBhY2tldCB0eXBlICcgKyBwLnR5cGUpO1xuICB9XG5cbiAgLy8gbG9vayB1cCBhdHRhY2htZW50cyBpZiB0eXBlIGJpbmFyeVxuICBpZiAoZXhwb3J0cy5CSU5BUllfRVZFTlQgPT09IHAudHlwZSB8fCBleHBvcnRzLkJJTkFSWV9BQ0sgPT09IHAudHlwZSkge1xuICAgIHZhciBzdGFydCA9IGkgKyAxO1xuICAgIHdoaWxlIChzdHIuY2hhckF0KCsraSkgIT09ICctJyAmJiBpICE9IHN0ci5sZW5ndGgpIHt9XG4gICAgdmFyIGJ1ZiA9IHN0ci5zdWJzdHJpbmcoc3RhcnQsIGkpO1xuICAgIGlmIChidWYgIT0gTnVtYmVyKGJ1ZikgfHwgc3RyLmNoYXJBdChpKSAhPT0gJy0nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgYXR0YWNobWVudHMnKTtcbiAgICB9XG4gICAgcC5hdHRhY2htZW50cyA9IE51bWJlcihidWYpO1xuICB9XG5cbiAgLy8gbG9vayB1cCBuYW1lc3BhY2UgKGlmIGFueSlcbiAgaWYgKCcvJyA9PT0gc3RyLmNoYXJBdChpICsgMSkpIHtcbiAgICB2YXIgc3RhcnQgPSBpICsgMTtcbiAgICB3aGlsZSAoKytpKSB7XG4gICAgICB2YXIgYyA9IHN0ci5jaGFyQXQoaSk7XG4gICAgICBpZiAoJywnID09PSBjKSBicmVhaztcbiAgICAgIGlmIChpID09PSBzdHIubGVuZ3RoKSBicmVhaztcbiAgICB9XG4gICAgcC5uc3AgPSBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBpKTtcbiAgfSBlbHNlIHtcbiAgICBwLm5zcCA9ICcvJztcbiAgfVxuXG4gIC8vIGxvb2sgdXAgaWRcbiAgdmFyIG5leHQgPSBzdHIuY2hhckF0KGkgKyAxKTtcbiAgaWYgKCcnICE9PSBuZXh0ICYmIE51bWJlcihuZXh0KSA9PSBuZXh0KSB7XG4gICAgdmFyIHN0YXJ0ID0gaSArIDE7XG4gICAgd2hpbGUgKCsraSkge1xuICAgICAgdmFyIGMgPSBzdHIuY2hhckF0KGkpO1xuICAgICAgaWYgKG51bGwgPT0gYyB8fCBOdW1iZXIoYykgIT0gYykge1xuICAgICAgICAtLWk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09IHN0ci5sZW5ndGgpIGJyZWFrO1xuICAgIH1cbiAgICBwLmlkID0gTnVtYmVyKHN0ci5zdWJzdHJpbmcoc3RhcnQsIGkgKyAxKSk7XG4gIH1cblxuICAvLyBsb29rIHVwIGpzb24gZGF0YVxuICBpZiAoc3RyLmNoYXJBdCgrK2kpKSB7XG4gICAgdmFyIHBheWxvYWQgPSB0cnlQYXJzZShzdHIuc3Vic3RyKGkpKTtcbiAgICB2YXIgaXNQYXlsb2FkVmFsaWQgPSBwYXlsb2FkICE9PSBmYWxzZSAmJiAocC50eXBlID09PSBleHBvcnRzLkVSUk9SIHx8IGlzQXJyYXkocGF5bG9hZCkpO1xuICAgIGlmIChpc1BheWxvYWRWYWxpZCkge1xuICAgICAgcC5kYXRhID0gcGF5bG9hZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVycm9yKCdpbnZhbGlkIHBheWxvYWQnKTtcbiAgICB9XG4gIH1cblxuICBkZWJ1ZygnZGVjb2RlZCAlcyBhcyAlaicsIHN0ciwgcCk7XG4gIHJldHVybiBwO1xufVxuXG5mdW5jdGlvbiB0cnlQYXJzZShzdHIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIERlYWxsb2NhdGVzIGEgcGFyc2VyJ3MgcmVzb3VyY2VzXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5EZWNvZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLnJlY29uc3RydWN0b3IpIHtcbiAgICB0aGlzLnJlY29uc3RydWN0b3IuZmluaXNoZWRSZWNvbnN0cnVjdGlvbigpO1xuICB9XG59O1xuXG4vKipcbiAqIEEgbWFuYWdlciBvZiBhIGJpbmFyeSBldmVudCdzICdidWZmZXIgc2VxdWVuY2UnLiBTaG91bGRcbiAqIGJlIGNvbnN0cnVjdGVkIHdoZW5ldmVyIGEgcGFja2V0IG9mIHR5cGUgQklOQVJZX0VWRU5UIGlzXG4gKiBkZWNvZGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWNrZXRcbiAqIEByZXR1cm4ge0JpbmFyeVJlY29uc3RydWN0b3J9IGluaXRpYWxpemVkIHJlY29uc3RydWN0b3JcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIEJpbmFyeVJlY29uc3RydWN0b3IocGFja2V0KSB7XG4gIHRoaXMucmVjb25QYWNrID0gcGFja2V0O1xuICB0aGlzLmJ1ZmZlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gYmUgY2FsbGVkIHdoZW4gYmluYXJ5IGRhdGEgcmVjZWl2ZWQgZnJvbSBjb25uZWN0aW9uXG4gKiBhZnRlciBhIEJJTkFSWV9FVkVOVCBwYWNrZXQuXG4gKlxuICogQHBhcmFtIHtCdWZmZXIgfCBBcnJheUJ1ZmZlcn0gYmluRGF0YSAtIHRoZSByYXcgYmluYXJ5IGRhdGEgcmVjZWl2ZWRcbiAqIEByZXR1cm4ge251bGwgfCBPYmplY3R9IHJldHVybnMgbnVsbCBpZiBtb3JlIGJpbmFyeSBkYXRhIGlzIGV4cGVjdGVkIG9yXG4gKiAgIGEgcmVjb25zdHJ1Y3RlZCBwYWNrZXQgb2JqZWN0IGlmIGFsbCBidWZmZXJzIGhhdmUgYmVlbiByZWNlaXZlZC5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkJpbmFyeVJlY29uc3RydWN0b3IucHJvdG90eXBlLnRha2VCaW5hcnlEYXRhID0gZnVuY3Rpb24oYmluRGF0YSkge1xuICB0aGlzLmJ1ZmZlcnMucHVzaChiaW5EYXRhKTtcbiAgaWYgKHRoaXMuYnVmZmVycy5sZW5ndGggPT09IHRoaXMucmVjb25QYWNrLmF0dGFjaG1lbnRzKSB7IC8vIGRvbmUgd2l0aCBidWZmZXIgbGlzdFxuICAgIHZhciBwYWNrZXQgPSBiaW5hcnkucmVjb25zdHJ1Y3RQYWNrZXQodGhpcy5yZWNvblBhY2ssIHRoaXMuYnVmZmVycyk7XG4gICAgdGhpcy5maW5pc2hlZFJlY29uc3RydWN0aW9uKCk7XG4gICAgcmV0dXJuIHBhY2tldDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogQ2xlYW5zIHVwIGJpbmFyeSBwYWNrZXQgcmVjb25zdHJ1Y3Rpb24gdmFyaWFibGVzLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkJpbmFyeVJlY29uc3RydWN0b3IucHJvdG90eXBlLmZpbmlzaGVkUmVjb25zdHJ1Y3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5yZWNvblBhY2sgPSBudWxsO1xuICB0aGlzLmJ1ZmZlcnMgPSBbXTtcbn07XG5cbmZ1bmN0aW9uIGVycm9yKG1zZykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGV4cG9ydHMuRVJST1IsXG4gICAgZGF0YTogJ3BhcnNlciBlcnJvcjogJyArIG1zZ1xuICB9O1xufVxuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmO1xuXG52YXIgd2l0aE5hdGl2ZUJ1ZmZlciA9IHR5cGVvZiBCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIEJ1ZmZlci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJztcbnZhciB3aXRoTmF0aXZlQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbic7XG5cbnZhciBpc1ZpZXcgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nID8gQXJyYXlCdWZmZXIuaXNWaWV3KG9iaikgOiAob2JqLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIG9iaiBpcyBhIGJ1ZmZlciBvciBhbiBhcnJheWJ1ZmZlci5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0J1ZihvYmopIHtcbiAgcmV0dXJuICh3aXRoTmF0aXZlQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB8fFxuICAgICAgICAgICh3aXRoTmF0aXZlQXJyYXlCdWZmZXIgJiYgKG9iaiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IGlzVmlldyhvYmopKSk7XG59XG4iLCIvKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqXG4gKiBFeHBvc2UgYGRlYnVnKClgIGFzIHRoZSBtb2R1bGUuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kZWJ1ZycpO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9ICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWVcbiAgICAgICAgICAgICAgICYmICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWUuc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgPyBjaHJvbWUuc3RvcmFnZS5sb2NhbFxuICAgICAgICAgICAgICAgICAgOiBsb2NhbHN0b3JhZ2UoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG4gICcjMDAwMENDJywgJyMwMDAwRkYnLCAnIzAwMzNDQycsICcjMDAzM0ZGJywgJyMwMDY2Q0MnLCAnIzAwNjZGRicsICcjMDA5OUNDJyxcbiAgJyMwMDk5RkYnLCAnIzAwQ0MwMCcsICcjMDBDQzMzJywgJyMwMENDNjYnLCAnIzAwQ0M5OScsICcjMDBDQ0NDJywgJyMwMENDRkYnLFxuICAnIzMzMDBDQycsICcjMzMwMEZGJywgJyMzMzMzQ0MnLCAnIzMzMzNGRicsICcjMzM2NkNDJywgJyMzMzY2RkYnLCAnIzMzOTlDQycsXG4gICcjMzM5OUZGJywgJyMzM0NDMDAnLCAnIzMzQ0MzMycsICcjMzNDQzY2JywgJyMzM0NDOTknLCAnIzMzQ0NDQycsICcjMzNDQ0ZGJyxcbiAgJyM2NjAwQ0MnLCAnIzY2MDBGRicsICcjNjYzM0NDJywgJyM2NjMzRkYnLCAnIzY2Q0MwMCcsICcjNjZDQzMzJywgJyM5OTAwQ0MnLFxuICAnIzk5MDBGRicsICcjOTkzM0NDJywgJyM5OTMzRkYnLCAnIzk5Q0MwMCcsICcjOTlDQzMzJywgJyNDQzAwMDAnLCAnI0NDMDAzMycsXG4gICcjQ0MwMDY2JywgJyNDQzAwOTknLCAnI0NDMDBDQycsICcjQ0MwMEZGJywgJyNDQzMzMDAnLCAnI0NDMzMzMycsICcjQ0MzMzY2JyxcbiAgJyNDQzMzOTknLCAnI0NDMzNDQycsICcjQ0MzM0ZGJywgJyNDQzY2MDAnLCAnI0NDNjYzMycsICcjQ0M5OTAwJywgJyNDQzk5MzMnLFxuICAnI0NDQ0MwMCcsICcjQ0NDQzMzJywgJyNGRjAwMDAnLCAnI0ZGMDAzMycsICcjRkYwMDY2JywgJyNGRjAwOTknLCAnI0ZGMDBDQycsXG4gICcjRkYwMEZGJywgJyNGRjMzMDAnLCAnI0ZGMzMzMycsICcjRkYzMzY2JywgJyNGRjMzOTknLCAnI0ZGMzNDQycsICcjRkYzM0ZGJyxcbiAgJyNGRjY2MDAnLCAnI0ZGNjYzMycsICcjRkY5OTAwJywgJyNGRjk5MzMnLCAnI0ZGQ0MwMCcsICcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG4gIC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcbiAgLy8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2VcbiAgLy8gZXhwbGljaXRseVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBpcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuICAvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuICByZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcbiAgICAvLyBpcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG4gICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcbiAgICAvLyBpcyBmaXJlZm94ID49IHYzMT9cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcbiAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcbiAgICAvLyBkb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG4gICAgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbih2KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyLm1lc3NhZ2U7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcbiAgdmFyIHVzZUNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuXG4gIGFyZ3NbMF0gPSAodXNlQ29sb3JzID8gJyVjJyA6ICcnKVxuICAgICsgdGhpcy5uYW1lc3BhY2VcbiAgICArICh1c2VDb2xvcnMgPyAnICVjJyA6ICcgJylcbiAgICArIGFyZ3NbMF1cbiAgICArICh1c2VDb2xvcnMgPyAnJWMgJyA6ICcgJylcbiAgICArICcrJyArIGV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuICBpZiAoIXVzZUNvbG9ycykgcmV0dXJuO1xuXG4gIHZhciBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcbiAgYXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0JylcblxuICAvLyB0aGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuICAvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG4gIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGFzdEMgPSAwO1xuICBhcmdzWzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICBpZiAoJyUlJyA9PT0gbWF0Y2gpIHJldHVybjtcbiAgICBpbmRleCsrO1xuICAgIGlmICgnJWMnID09PSBtYXRjaCkge1xuICAgICAgLy8gd2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG4gICAgICAvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuICAgICAgbGFzdEMgPSBpbmRleDtcbiAgICB9XG4gIH0pO1xuXG4gIGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmxvZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUubG9nYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBsb2coKSB7XG4gIC8vIHRoaXMgaGFja2VyeSBpcyByZXF1aXJlZCBmb3IgSUU4LzksIHdoZXJlXG4gIC8vIHRoZSBgY29uc29sZS5sb2dgIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSAnYXBwbHknXG4gIHJldHVybiAnb2JqZWN0JyA9PT0gdHlwZW9mIGNvbnNvbGVcbiAgICAmJiBjb25zb2xlLmxvZ1xuICAgICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGUubG9nLCBjb25zb2xlLCBhcmd1bWVudHMpO1xufVxuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcbiAgdHJ5IHtcbiAgICBpZiAobnVsbCA9PSBuYW1lc3BhY2VzKSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwb3J0cy5zdG9yYWdlLmRlYnVnID0gbmFtZXNwYWNlcztcbiAgICB9XG4gIH0gY2F0Y2goZSkge31cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuICB2YXIgcjtcbiAgdHJ5IHtcbiAgICByID0gZXhwb3J0cy5zdG9yYWdlLmRlYnVnO1xuICB9IGNhdGNoKGUpIHt9XG5cbiAgLy8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuICBpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcbiAgICByID0gcHJvY2Vzcy5lbnYuREVCVUc7XG4gIH1cblxuICByZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBFbmFibGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gYGxvY2FsU3RvcmFnZS5kZWJ1Z2AgaW5pdGlhbGx5LlxuICovXG5cbmV4cG9ydHMuZW5hYmxlKGxvYWQoKSk7XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICB9IGNhdGNoIChlKSB7fVxufVxuIiwidmFyIGZhc3RTYWZlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1zYWZlLXN0cmluZ2lmeScpXG52YXIgY29weSA9IHJlcXVpcmUoJ2NsaXBib2FyZC1jb3B5JylcblxuZnVuY3Rpb24gdHJ5U3RyaW5naWZ5IChvYmopIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKVxuICB9IGNhdGNoIChlKSB7fVxufVxuXG5mdW5jdGlvbiBzdGF0ZUNvcHkgKG9iaikge1xuICB2YXIgc3RyID0gdHJ5U3RyaW5naWZ5KG9iaikgfHwgZmFzdFNhZmVTdHJpbmdpZnkob2JqKVxuICBjb3B5KHN0cilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGF0ZUNvcHlcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgaXNFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nIHx8IGZ1bmN0aW9uIChlbmNvZGluZykge1xuICBlbmNvZGluZyA9ICcnICsgZW5jb2Rpbmc7XG4gIHN3aXRjaCAoZW5jb2RpbmcgJiYgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6Y2FzZSAndXRmOCc6Y2FzZSAndXRmLTgnOmNhc2UgJ2FzY2lpJzpjYXNlICdiaW5hcnknOmNhc2UgJ2Jhc2U2NCc6Y2FzZSAndWNzMic6Y2FzZSAndWNzLTInOmNhc2UgJ3V0ZjE2bGUnOmNhc2UgJ3V0Zi0xNmxlJzpjYXNlICdyYXcnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX25vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICBpZiAoIWVuYykgcmV0dXJuICd1dGY4JztcbiAgdmFyIHJldHJpZWQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmMpIHtcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gJ3V0ZjgnO1xuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuICd1dGYxNmxlJztcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gJ2xhdGluMSc7XG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGVuYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyZXRyaWVkKSByZXR1cm47IC8vIHVuZGVmaW5lZFxuICAgICAgICBlbmMgPSAoJycgKyBlbmMpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHJpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLy8gRG8gbm90IGNhY2hlIGBCdWZmZXIuaXNFbmNvZGluZ2Agd2hlbiBjaGVja2luZyBlbmNvZGluZyBuYW1lcyBhcyBzb21lXG4vLyBtb2R1bGVzIG1vbmtleS1wYXRjaCBpdCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgZW5jb2RpbmdzXG5mdW5jdGlvbiBub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgdmFyIG5lbmMgPSBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKTtcbiAgaWYgKHR5cGVvZiBuZW5jICE9PSAnc3RyaW5nJyAmJiAoQnVmZmVyLmlzRW5jb2RpbmcgPT09IGlzRW5jb2RpbmcgfHwgIWlzRW5jb2RpbmcoZW5jKSkpIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuYyk7XG4gIHJldHVybiBuZW5jIHx8IGVuYztcbn1cblxuLy8gU3RyaW5nRGVjb2RlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGVmZmljaWVudGx5IHNwbGl0dGluZyBhIHNlcmllcyBvZlxuLy8gYnVmZmVycyBpbnRvIGEgc2VyaWVzIG9mIEpTIHN0cmluZ3Mgd2l0aG91dCBicmVha2luZyBhcGFydCBtdWx0aS1ieXRlXG4vLyBjaGFyYWN0ZXJzLlxuZXhwb3J0cy5TdHJpbmdEZWNvZGVyID0gU3RyaW5nRGVjb2RlcjtcbmZ1bmN0aW9uIFN0cmluZ0RlY29kZXIoZW5jb2RpbmcpIHtcbiAgdGhpcy5lbmNvZGluZyA9IG5vcm1hbGl6ZUVuY29kaW5nKGVuY29kaW5nKTtcbiAgdmFyIG5iO1xuICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIHRoaXMudGV4dCA9IHV0ZjE2VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gdXRmMTZFbmQ7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1dGY4JzpcbiAgICAgIHRoaXMuZmlsbExhc3QgPSB1dGY4RmlsbExhc3Q7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgdGhpcy50ZXh0ID0gYmFzZTY0VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gYmFzZTY0RW5kO1xuICAgICAgbmIgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud3JpdGUgPSBzaW1wbGVXcml0ZTtcbiAgICAgIHRoaXMuZW5kID0gc2ltcGxlRW5kO1xuICAgICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAwO1xuICB0aGlzLmxhc3RUb3RhbCA9IDA7XG4gIHRoaXMubGFzdENoYXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobmIpO1xufVxuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgdmFyIHI7XG4gIHZhciBpO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHIgPSB0aGlzLmZpbGxMYXN0KGJ1Zik7XG4gICAgaWYgKHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuICcnO1xuICAgIGkgPSB0aGlzLmxhc3ROZWVkO1xuICAgIHRoaXMubGFzdE5lZWQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGkgPSAwO1xuICB9XG4gIGlmIChpIDwgYnVmLmxlbmd0aCkgcmV0dXJuIHIgPyByICsgdGhpcy50ZXh0KGJ1ZiwgaSkgOiB0aGlzLnRleHQoYnVmLCBpKTtcbiAgcmV0dXJuIHIgfHwgJyc7XG59O1xuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSB1dGY4RW5kO1xuXG4vLyBSZXR1cm5zIG9ubHkgY29tcGxldGUgY2hhcmFjdGVycyBpbiBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUudGV4dCA9IHV0ZjhUZXh0O1xuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIHBhcnRpYWwgbm9uLVVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5maWxsTGFzdCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn07XG5cbi8vIENoZWNrcyB0aGUgdHlwZSBvZiBhIFVURi04IGJ5dGUsIHdoZXRoZXIgaXQncyBBU0NJSSwgYSBsZWFkaW5nIGJ5dGUsIG9yIGFcbi8vIGNvbnRpbnVhdGlvbiBieXRlLiBJZiBhbiBpbnZhbGlkIGJ5dGUgaXMgZGV0ZWN0ZWQsIC0yIGlzIHJldHVybmVkLlxuZnVuY3Rpb24gdXRmOENoZWNrQnl0ZShieXRlKSB7XG4gIGlmIChieXRlIDw9IDB4N0YpIHJldHVybiAwO2Vsc2UgaWYgKGJ5dGUgPj4gNSA9PT0gMHgwNikgcmV0dXJuIDI7ZWxzZSBpZiAoYnl0ZSA+PiA0ID09PSAweDBFKSByZXR1cm4gMztlbHNlIGlmIChieXRlID4+IDMgPT09IDB4MUUpIHJldHVybiA0O1xuICByZXR1cm4gYnl0ZSA+PiA2ID09PSAweDAyID8gLTEgOiAtMjtcbn1cblxuLy8gQ2hlY2tzIGF0IG1vc3QgMyBieXRlcyBhdCB0aGUgZW5kIG9mIGEgQnVmZmVyIGluIG9yZGVyIHRvIGRldGVjdCBhblxuLy8gaW5jb21wbGV0ZSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3Rlci4gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyAoMiwgMywgb3IgNClcbi8vIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgVVRGLTggY2hhcmFjdGVyIChpZiBhcHBsaWNhYmxlKSBhcmUgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tJbmNvbXBsZXRlKHNlbGYsIGJ1ZiwgaSkge1xuICB2YXIgaiA9IGJ1Zi5sZW5ndGggLSAxO1xuICBpZiAoaiA8IGkpIHJldHVybiAwO1xuICB2YXIgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMTtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkgfHwgbmIgPT09IC0yKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMjtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkgfHwgbmIgPT09IC0yKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkge1xuICAgICAgaWYgKG5iID09PSAyKSBuYiA9IDA7ZWxzZSBzZWxmLmxhc3ROZWVkID0gbmIgLSAzO1xuICAgIH1cbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vIFZhbGlkYXRlcyBhcyBtYW55IGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciBhc1xuLy8gbmVlZGVkIG9yIGFyZSBhdmFpbGFibGUuIElmIHdlIHNlZSBhIG5vbi1jb250aW51YXRpb24gYnl0ZSB3aGVyZSB3ZSBleHBlY3Rcbi8vIG9uZSwgd2UgXCJyZXBsYWNlXCIgdGhlIHZhbGlkYXRlZCBjb250aW51YXRpb24gYnl0ZXMgd2UndmUgc2VlbiBzbyBmYXIgd2l0aFxuLy8gYSBzaW5nbGUgVVRGLTggcmVwbGFjZW1lbnQgY2hhcmFjdGVyICgnXFx1ZmZmZCcpLCB0byBtYXRjaCB2OCdzIFVURi04IGRlY29kaW5nXG4vLyBiZWhhdmlvci4gVGhlIGNvbnRpbnVhdGlvbiBieXRlIGNoZWNrIGlzIGluY2x1ZGVkIHRocmVlIHRpbWVzIGluIHRoZSBjYXNlXG4vLyB3aGVyZSBhbGwgb2YgdGhlIGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBjaGFyYWN0ZXIgZXhpc3QgaW4gdGhlIHNhbWUgYnVmZmVyLlxuLy8gSXQgaXMgYWxzbyBkb25lIHRoaXMgd2F5IGFzIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGluY3JlYXNlIGluc3RlYWQgb2YgdXNpbmcgYVxuLy8gbG9vcC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0V4dHJhQnl0ZXMoc2VsZiwgYnVmLCBwKSB7XG4gIGlmICgoYnVmWzBdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICBzZWxmLmxhc3ROZWVkID0gMDtcbiAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICB9XG4gIGlmIChzZWxmLmxhc3ROZWVkID4gMSAmJiBidWYubGVuZ3RoID4gMSkge1xuICAgIGlmICgoYnVmWzFdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgIHNlbGYubGFzdE5lZWQgPSAxO1xuICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICB9XG4gICAgaWYgKHNlbGYubGFzdE5lZWQgPiAyICYmIGJ1Zi5sZW5ndGggPiAyKSB7XG4gICAgICBpZiAoKGJ1ZlsyXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgICAgIHNlbGYubGFzdE5lZWQgPSAyO1xuICAgICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXIuXG5mdW5jdGlvbiB1dGY4RmlsbExhc3QoYnVmKSB7XG4gIHZhciBwID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICB2YXIgciA9IHV0ZjhDaGVja0V4dHJhQnl0ZXModGhpcywgYnVmLCBwKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHI7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn1cblxuLy8gUmV0dXJucyBhbGwgY29tcGxldGUgVVRGLTggY2hhcmFjdGVycyBpbiBhIEJ1ZmZlci4gSWYgdGhlIEJ1ZmZlciBlbmRlZCBvbiBhXG4vLyBwYXJ0aWFsIGNoYXJhY3RlciwgdGhlIGNoYXJhY3RlcidzIGJ5dGVzIGFyZSBidWZmZXJlZCB1bnRpbCB0aGUgcmVxdWlyZWRcbi8vIG51bWJlciBvZiBieXRlcyBhcmUgYXZhaWxhYmxlLlxuZnVuY3Rpb24gdXRmOFRleHQoYnVmLCBpKSB7XG4gIHZhciB0b3RhbCA9IHV0ZjhDaGVja0luY29tcGxldGUodGhpcywgYnVmLCBpKTtcbiAgaWYgKCF0aGlzLmxhc3ROZWVkKSByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSk7XG4gIHRoaXMubGFzdFRvdGFsID0gdG90YWw7XG4gIHZhciBlbmQgPSBidWYubGVuZ3RoIC0gKHRvdGFsIC0gdGhpcy5sYXN0TmVlZCk7XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIDAsIGVuZCk7XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpLCBlbmQpO1xufVxuXG4vLyBGb3IgVVRGLTgsIGEgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlzIGFkZGVkIHdoZW4gZW5kaW5nIG9uIGEgcGFydGlhbFxuLy8gY2hhcmFjdGVyLlxuZnVuY3Rpb24gdXRmOEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyAnXFx1ZmZmZCc7XG4gIHJldHVybiByO1xufVxuXG4vLyBVVEYtMTZMRSB0eXBpY2FsbHkgbmVlZHMgdHdvIGJ5dGVzIHBlciBjaGFyYWN0ZXIsIGJ1dCBldmVuIGlmIHdlIGhhdmUgYW4gZXZlblxuLy8gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSwgd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBlbmQgb24gYSBsZWFkaW5nL2hpZ2hcbi8vIHN1cnJvZ2F0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IHR3byBieXRlcyBpbiBvcmRlciB0b1xuLy8gZGVjb2RlIHRoZSBsYXN0IGNoYXJhY3RlciBwcm9wZXJseS5cbmZ1bmN0aW9uIHV0ZjE2VGV4dChidWYsIGkpIHtcbiAgaWYgKChidWYubGVuZ3RoIC0gaSkgJSAyID09PSAwKSB7XG4gICAgdmFyIHIgPSBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpKTtcbiAgICBpZiAocikge1xuICAgICAgdmFyIGMgPSByLmNoYXJDb2RlQXQoci5sZW5ndGggLSAxKTtcbiAgICAgIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REJGRikge1xuICAgICAgICB0aGlzLmxhc3ROZWVkID0gMjtcbiAgICAgICAgdGhpcy5sYXN0VG90YWwgPSA0O1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiByLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDE7XG4gIHRoaXMubGFzdFRvdGFsID0gMjtcbiAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpLCBidWYubGVuZ3RoIC0gMSk7XG59XG5cbi8vIEZvciBVVEYtMTZMRSB3ZSBkbyBub3QgZXhwbGljaXRseSBhcHBlbmQgc3BlY2lhbCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIGlmIHdlXG4vLyBlbmQgb24gYSBwYXJ0aWFsIGNoYXJhY3Rlciwgd2Ugc2ltcGx5IGxldCB2OCBoYW5kbGUgdGhhdC5cbmZ1bmN0aW9uIHV0ZjE2RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgdmFyIGVuZCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgICByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ3V0ZjE2bGUnLCAwLCBlbmQpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRUZXh0KGJ1ZiwgaSkge1xuICB2YXIgbiA9IChidWYubGVuZ3RoIC0gaSkgJSAzO1xuICBpZiAobiA9PT0gMCkgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSk7XG4gIHRoaXMubGFzdE5lZWQgPSAzIC0gbjtcbiAgdGhpcy5sYXN0VG90YWwgPSAzO1xuICBpZiAobiA9PT0gMSkge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGksIGJ1Zi5sZW5ndGggLSBuKTtcbn1cblxuZnVuY3Rpb24gYmFzZTY0RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ2Jhc2U2NCcsIDAsIDMgLSB0aGlzLmxhc3ROZWVkKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFBhc3MgYnl0ZXMgb24gdGhyb3VnaCBmb3Igc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIChlLmcuIGFzY2lpLCBsYXRpbjEsIGhleClcbmZ1bmN0aW9uIHNpbXBsZVdyaXRlKGJ1Zikge1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVFbmQoYnVmKSB7XG4gIHJldHVybiBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xufSIsImZ1bmN0aW9uIEFnZW50KCkge1xuICB0aGlzLl9kZWZhdWx0cyA9IFtdO1xufVxuXG5mb3IgKGNvbnN0IGZuIG9mIFtcbiAgJ3VzZScsXG4gICdvbicsXG4gICdvbmNlJyxcbiAgJ3NldCcsXG4gICdxdWVyeScsXG4gICd0eXBlJyxcbiAgJ2FjY2VwdCcsXG4gICdhdXRoJyxcbiAgJ3dpdGhDcmVkZW50aWFscycsXG4gICdzb3J0UXVlcnknLFxuICAncmV0cnknLFxuICAnb2snLFxuICAncmVkaXJlY3RzJyxcbiAgJ3RpbWVvdXQnLFxuICAnYnVmZmVyJyxcbiAgJ3NlcmlhbGl6ZScsXG4gICdwYXJzZScsXG4gICdjYScsXG4gICdrZXknLFxuICAncGZ4JyxcbiAgJ2NlcnQnLFxuICAnZGlzYWJsZVRMU0NlcnRzJ1xuXSkge1xuICAvLyBEZWZhdWx0IHNldHRpbmcgZm9yIGFsbCByZXF1ZXN0cyBmcm9tIHRoaXMgYWdlbnRcbiAgQWdlbnQucHJvdG90eXBlW2ZuXSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgdGhpcy5fZGVmYXVsdHMucHVzaCh7IGZuLCBhcmdzIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xufVxuXG5BZ2VudC5wcm90b3R5cGUuX3NldERlZmF1bHRzID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgZm9yIChjb25zdCBkZWYgb2YgdGhpcy5fZGVmYXVsdHMpIHtcbiAgICByZXF1ZXN0W2RlZi5mbl0oLi4uZGVmLmFyZ3MpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50O1xuIiwiLyoqXG4gKiBSb290IHJlZmVyZW5jZSBmb3IgaWZyYW1lcy5cbiAqL1xuXG5sZXQgcm9vdDtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAvLyBCcm93c2VyIHdpbmRvd1xuICByb290ID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gT3RoZXIgZW52aXJvbm1lbnRzXG4gIGNvbnNvbGUud2FybihcbiAgICAnVXNpbmcgYnJvd3Nlci1vbmx5IHZlcnNpb24gb2Ygc3VwZXJhZ2VudCBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudCdcbiAgKTtcbiAgcm9vdCA9IHRoaXM7XG59IGVsc2Uge1xuICAvLyBXZWIgV29ya2VyXG4gIHJvb3QgPSBzZWxmO1xufVxuXG5jb25zdCBFbWl0dGVyID0gcmVxdWlyZSgnY29tcG9uZW50LWVtaXR0ZXInKTtcbmNvbnN0IHNhZmVTdHJpbmdpZnkgPSByZXF1aXJlKCdmYXN0LXNhZmUtc3RyaW5naWZ5Jyk7XG5jb25zdCBxcyA9IHJlcXVpcmUoJ3FzJyk7XG5jb25zdCBSZXF1ZXN0QmFzZSA9IHJlcXVpcmUoJy4vcmVxdWVzdC1iYXNlJyk7XG5jb25zdCB7IGlzT2JqZWN0LCBtaXhpbiwgaGFzT3duIH0gPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5jb25zdCBSZXNwb25zZUJhc2UgPSByZXF1aXJlKCcuL3Jlc3BvbnNlLWJhc2UnKTtcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudC1iYXNlJyk7XG5cbi8qKlxuICogTm9vcC5cbiAqL1xuXG5mdW5jdGlvbiBub29wKCkge31cblxuLyoqXG4gKiBFeHBvc2UgYHJlcXVlc3RgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgdXJsKSB7XG4gIC8vIGNhbGxiYWNrXG4gIGlmICh0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBleHBvcnRzLlJlcXVlc3QoJ0dFVCcsIG1ldGhvZCkuZW5kKHVybCk7XG4gIH1cblxuICAvLyB1cmwgZmlyc3RcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbmV3IGV4cG9ydHMuUmVxdWVzdCgnR0VUJywgbWV0aG9kKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgZXhwb3J0cy5SZXF1ZXN0KG1ldGhvZCwgdXJsKTtcbn07XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cztcblxuY29uc3QgcmVxdWVzdCA9IGV4cG9ydHM7XG5cbmV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG5cbi8qKlxuICogRGV0ZXJtaW5lIFhIUi5cbiAqL1xuXG5yZXF1ZXN0LmdldFhIUiA9ICgpID0+IHtcbiAgaWYgKFxuICAgIHJvb3QuWE1MSHR0cFJlcXVlc3QgJiZcbiAgICAoIXJvb3QubG9jYXRpb24gfHxcbiAgICAgIHJvb3QubG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOicgfHxcbiAgICAgICFyb290LkFjdGl2ZVhPYmplY3QpXG4gICkge1xuICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xuICB9IGNhdGNoIHtcbiAgICAvKiovXG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTXN4bWwyLlhNTEhUVFAuNi4wJyk7XG4gIH0gY2F0Y2gge1xuICAgIC8qKi9cbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNc3htbDIuWE1MSFRUUC4zLjAnKTtcbiAgfSBjYXRjaCB7XG4gICAgLyoqL1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQJyk7XG4gIH0gY2F0Y2gge1xuICAgIC8qKi9cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignQnJvd3Nlci1vbmx5IHZlcnNpb24gb2Ygc3VwZXJhZ2VudCBjb3VsZCBub3QgZmluZCBYSFInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBhZGRlZCB0byBzdXBwb3J0IElFLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5jb25zdCB0cmltID0gJycudHJpbSA/IChzKSA9PiBzLnRyaW0oKSA6IChzKSA9PiBzLnJlcGxhY2UoLyheXFxzKnxcXHMqJCkvZywgJycpO1xuXG4vKipcbiAqIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gYG9iamAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2VyaWFsaXplKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHJldHVybiBvYmplY3Q7XG4gIGNvbnN0IHBhaXJzID0gW107XG4gIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChoYXNPd24ob2JqZWN0LCBrZXkpKSBwdXNoRW5jb2RlZEtleVZhbHVlUGFpcihwYWlycywga2V5LCBvYmplY3Rba2V5XSk7XG4gIH1cblxuICByZXR1cm4gcGFpcnMuam9pbignJicpO1xufVxuXG4vKipcbiAqIEhlbHBzICdzZXJpYWxpemUnIHdpdGggc2VyaWFsaXppbmcgYXJyYXlzLlxuICogTXV0YXRlcyB0aGUgcGFpcnMgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcGFpcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICovXG5cbmZ1bmN0aW9uIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBrZXksIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHBhaXJzLnB1c2goZW5jb2RlVVJJKGtleSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkge1xuICAgICAgcHVzaEVuY29kZWRLZXlWYWx1ZVBhaXIocGFpcnMsIGtleSwgdik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3Qgc3Via2V5IGluIHZhbHVlKSB7XG4gICAgICBpZiAoaGFzT3duKHZhbHVlLCBzdWJrZXkpKVxuICAgICAgICBwdXNoRW5jb2RlZEtleVZhbHVlUGFpcihwYWlycywgYCR7a2V5fVske3N1YmtleX1dYCwgdmFsdWVbc3Via2V5XSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhaXJzLnB1c2goZW5jb2RlVVJJKGtleSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcbiAgfVxufVxuXG4vKipcbiAqIEV4cG9zZSBzZXJpYWxpemF0aW9uIG1ldGhvZC5cbiAqL1xuXG5yZXF1ZXN0LnNlcmlhbGl6ZU9iamVjdCA9IHNlcmlhbGl6ZTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4geC13d3ctZm9ybS11cmxlbmNvZGVkIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nKHN0cmluZ18pIHtcbiAgY29uc3Qgb2JqZWN0ID0ge307XG4gIGNvbnN0IHBhaXJzID0gc3RyaW5nXy5zcGxpdCgnJicpO1xuICBsZXQgcGFpcjtcbiAgbGV0IHBvcztcblxuICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoXyA9IHBhaXJzLmxlbmd0aDsgaSA8IGxlbmd0aF87ICsraSkge1xuICAgIHBhaXIgPSBwYWlyc1tpXTtcbiAgICBwb3MgPSBwYWlyLmluZGV4T2YoJz0nKTtcbiAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgb2JqZWN0W2RlY29kZVVSSUNvbXBvbmVudChwYWlyKV0gPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0W2RlY29kZVVSSUNvbXBvbmVudChwYWlyLnNsaWNlKDAsIHBvcykpXSA9IGRlY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgcGFpci5zbGljZShwb3MgKyAxKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufVxuXG4vKipcbiAqIEV4cG9zZSBwYXJzZXIuXG4gKi9cblxucmVxdWVzdC5wYXJzZVN0cmluZyA9IHBhcnNlU3RyaW5nO1xuXG4vKipcbiAqIERlZmF1bHQgTUlNRSB0eXBlIG1hcC5cbiAqXG4gKiAgICAgc3VwZXJhZ2VudC50eXBlcy54bWwgPSAnYXBwbGljYXRpb24veG1sJztcbiAqXG4gKi9cblxucmVxdWVzdC50eXBlcyA9IHtcbiAgaHRtbDogJ3RleHQvaHRtbCcsXG4gIGpzb246ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgeG1sOiAndGV4dC94bWwnLFxuICB1cmxlbmNvZGVkOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgZm9ybTogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICdmb3JtLWRhdGEnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuLyoqXG4gKiBEZWZhdWx0IHNlcmlhbGl6YXRpb24gbWFwLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnNlcmlhbGl6ZVsnYXBwbGljYXRpb24veG1sJ10gPSBmdW5jdGlvbihvYmope1xuICogICAgICAgcmV0dXJuICdnZW5lcmF0ZWQgeG1sIGhlcmUnO1xuICogICAgIH07XG4gKlxuICovXG5cbnJlcXVlc3Quc2VyaWFsaXplID0ge1xuICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogcXMuc3RyaW5naWZ5LFxuICAnYXBwbGljYXRpb24vanNvbic6IHNhZmVTdHJpbmdpZnlcbn07XG5cbi8qKlxuICogRGVmYXVsdCBwYXJzZXJzLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnBhcnNlWydhcHBsaWNhdGlvbi94bWwnXSA9IGZ1bmN0aW9uKHN0cil7XG4gKiAgICAgICByZXR1cm4geyBvYmplY3QgcGFyc2VkIGZyb20gc3RyIH07XG4gKiAgICAgfTtcbiAqXG4gKi9cblxucmVxdWVzdC5wYXJzZSA9IHtcbiAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IHBhcnNlU3RyaW5nLFxuICAnYXBwbGljYXRpb24vanNvbic6IEpTT04ucGFyc2Vcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGhlYWRlciBgc3RyYCBpbnRvXG4gKiBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgbWFwcGVkIGZpZWxkcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcihzdHJpbmdfKSB7XG4gIGNvbnN0IGxpbmVzID0gc3RyaW5nXy5zcGxpdCgvXFxyP1xcbi8pO1xuICBjb25zdCBmaWVsZHMgPSB7fTtcbiAgbGV0IGluZGV4O1xuICBsZXQgbGluZTtcbiAgbGV0IGZpZWxkO1xuICBsZXQgdmFsdWU7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aF8gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW5ndGhfOyArK2kpIHtcbiAgICBsaW5lID0gbGluZXNbaV07XG4gICAgaW5kZXggPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAvLyBjb3VsZCBiZSBlbXB0eSBsaW5lLCBqdXN0IHNraXAgaXRcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZpZWxkID0gbGluZS5zbGljZSgwLCBpbmRleCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWx1ZSA9IHRyaW0obGluZS5zbGljZShpbmRleCArIDEpKTtcbiAgICBmaWVsZHNbZmllbGRdID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gZmllbGRzO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBtaW1lYCBpcyBqc29uIG9yIGhhcyAranNvbiBzdHJ1Y3R1cmVkIHN5bnRheCBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1pbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0pTT04obWltZSkge1xuICAvLyBzaG91bGQgbWF0Y2ggL2pzb24gb3IgK2pzb25cbiAgLy8gYnV0IG5vdCAvanNvbi1zZXFcbiAgcmV0dXJuIC9bLytdanNvbigkfFteLVxcd10pL2kudGVzdChtaW1lKTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBSZXNwb25zZWAgd2l0aCB0aGUgZ2l2ZW4gYHhocmAuXG4gKlxuICogIC0gc2V0IGZsYWdzICgub2ssIC5lcnJvciwgZXRjKVxuICogIC0gcGFyc2UgaGVhZGVyXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogIEFsaWFzaW5nIGBzdXBlcmFnZW50YCBhcyBgcmVxdWVzdGAgaXMgbmljZTpcbiAqXG4gKiAgICAgIHJlcXVlc3QgPSBzdXBlcmFnZW50O1xuICpcbiAqICBXZSBjYW4gdXNlIHRoZSBwcm9taXNlLWxpa2UgQVBJLCBvciBwYXNzIGNhbGxiYWNrczpcbiAqXG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvJykuZW5kKGZ1bmN0aW9uKHJlcyl7fSk7XG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvJywgZnVuY3Rpb24ocmVzKXt9KTtcbiAqXG4gKiAgU2VuZGluZyBkYXRhIGNhbiBiZSBjaGFpbmVkOlxuICpcbiAqICAgICAgcmVxdWVzdFxuICogICAgICAgIC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgLnNlbmQoeyBuYW1lOiAndGonIH0pXG4gKiAgICAgICAgLmVuZChmdW5jdGlvbihyZXMpe30pO1xuICpcbiAqICBPciBwYXNzZWQgdG8gYC5zZW5kKClgOlxuICpcbiAqICAgICAgcmVxdWVzdFxuICogICAgICAgIC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgLnNlbmQoeyBuYW1lOiAndGonIH0sIGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogIE9yIHBhc3NlZCB0byBgLnBvc3QoKWA6XG4gKlxuICogICAgICByZXF1ZXN0XG4gKiAgICAgICAgLnBvc3QoJy91c2VyJywgeyBuYW1lOiAndGonIH0pXG4gKiAgICAgICAgLmVuZChmdW5jdGlvbihyZXMpe30pO1xuICpcbiAqIE9yIGZ1cnRoZXIgcmVkdWNlZCB0byBhIHNpbmdsZSBjYWxsIGZvciBzaW1wbGUgY2FzZXM6XG4gKlxuICogICAgICByZXF1ZXN0XG4gKiAgICAgICAgLnBvc3QoJy91c2VyJywgeyBuYW1lOiAndGonIH0sIGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogQHBhcmFtIHtYTUxIVFRQUmVxdWVzdH0geGhyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gUmVzcG9uc2UocmVxdWVzdF8pIHtcbiAgdGhpcy5yZXEgPSByZXF1ZXN0XztcbiAgdGhpcy54aHIgPSB0aGlzLnJlcS54aHI7XG4gIC8vIHJlc3BvbnNlVGV4dCBpcyBhY2Nlc3NpYmxlIG9ubHkgaWYgcmVzcG9uc2VUeXBlIGlzICcnIG9yICd0ZXh0JyBhbmQgb24gb2xkZXIgYnJvd3NlcnNcbiAgdGhpcy50ZXh0ID1cbiAgICAodGhpcy5yZXEubWV0aG9kICE9PSAnSEVBRCcgJiZcbiAgICAgICh0aGlzLnhoci5yZXNwb25zZVR5cGUgPT09ICcnIHx8IHRoaXMueGhyLnJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnKSkgfHxcbiAgICB0eXBlb2YgdGhpcy54aHIucmVzcG9uc2VUeXBlID09PSAndW5kZWZpbmVkJ1xuICAgICAgPyB0aGlzLnhoci5yZXNwb25zZVRleHRcbiAgICAgIDogbnVsbDtcbiAgdGhpcy5zdGF0dXNUZXh0ID0gdGhpcy5yZXEueGhyLnN0YXR1c1RleHQ7XG4gIGxldCB7IHN0YXR1cyB9ID0gdGhpcy54aHI7XG4gIC8vIGhhbmRsZSBJRTkgYnVnOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwMDQ2OTcyL21zaWUtcmV0dXJucy1zdGF0dXMtY29kZS1vZi0xMjIzLWZvci1hamF4LXJlcXVlc3RcbiAgaWYgKHN0YXR1cyA9PT0gMTIyMykge1xuICAgIHN0YXR1cyA9IDIwNDtcbiAgfVxuXG4gIHRoaXMuX3NldFN0YXR1c1Byb3BlcnRpZXMoc3RhdHVzKTtcbiAgdGhpcy5oZWFkZXJzID0gcGFyc2VIZWFkZXIodGhpcy54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO1xuICB0aGlzLmhlYWRlciA9IHRoaXMuaGVhZGVycztcbiAgLy8gZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIHNvbWV0aW1lcyBmYWxzZWx5IHJldHVybnMgXCJcIiBmb3IgQ09SUyByZXF1ZXN0cywgYnV0XG4gIC8vIGdldFJlc3BvbnNlSGVhZGVyIHN0aWxsIHdvcmtzLiBzbyB3ZSBnZXQgY29udGVudC10eXBlIGV2ZW4gaWYgZ2V0dGluZ1xuICAvLyBvdGhlciBoZWFkZXJzIGZhaWxzLlxuICB0aGlzLmhlYWRlclsnY29udGVudC10eXBlJ10gPSB0aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG4gIHRoaXMuX3NldEhlYWRlclByb3BlcnRpZXModGhpcy5oZWFkZXIpO1xuXG4gIGlmICh0aGlzLnRleHQgPT09IG51bGwgJiYgcmVxdWVzdF8uX3Jlc3BvbnNlVHlwZSkge1xuICAgIHRoaXMuYm9keSA9IHRoaXMueGhyLnJlc3BvbnNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYm9keSA9XG4gICAgICB0aGlzLnJlcS5tZXRob2QgPT09ICdIRUFEJ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLl9wYXJzZUJvZHkodGhpcy50ZXh0ID8gdGhpcy50ZXh0IDogdGhpcy54aHIucmVzcG9uc2UpO1xuICB9XG59XG5cbm1peGluKFJlc3BvbnNlLnByb3RvdHlwZSwgUmVzcG9uc2VCYXNlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGJvZHkgYHN0cmAuXG4gKlxuICogVXNlZCBmb3IgYXV0by1wYXJzaW5nIG9mIGJvZGllcy4gUGFyc2Vyc1xuICogYXJlIGRlZmluZWQgb24gdGhlIGBzdXBlcmFnZW50LnBhcnNlYCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TWl4ZWR9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUuX3BhcnNlQm9keSA9IGZ1bmN0aW9uIChzdHJpbmdfKSB7XG4gIGxldCBwYXJzZSA9IHJlcXVlc3QucGFyc2VbdGhpcy50eXBlXTtcbiAgaWYgKHRoaXMucmVxLl9wYXJzZXIpIHtcbiAgICByZXR1cm4gdGhpcy5yZXEuX3BhcnNlcih0aGlzLCBzdHJpbmdfKTtcbiAgfVxuXG4gIGlmICghcGFyc2UgJiYgaXNKU09OKHRoaXMudHlwZSkpIHtcbiAgICBwYXJzZSA9IHJlcXVlc3QucGFyc2VbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZSAmJiBzdHJpbmdfICYmIChzdHJpbmdfLmxlbmd0aCA+IDAgfHwgc3RyaW5nXyBpbnN0YW5jZW9mIE9iamVjdClcbiAgICA/IHBhcnNlKHN0cmluZ18pXG4gICAgOiBudWxsO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gYEVycm9yYCByZXByZXNlbnRhdGl2ZSBvZiB0aGlzIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm4ge0Vycm9yfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUudG9FcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgeyByZXEgfSA9IHRoaXM7XG4gIGNvbnN0IHsgbWV0aG9kIH0gPSByZXE7XG4gIGNvbnN0IHsgdXJsIH0gPSByZXE7XG5cbiAgY29uc3QgbWVzc2FnZSA9IGBjYW5ub3QgJHttZXRob2R9ICR7dXJsfSAoJHt0aGlzLnN0YXR1c30pYDtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIGVycm9yLnN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuICBlcnJvci5tZXRob2QgPSBtZXRob2Q7XG4gIGVycm9yLnVybCA9IHVybDtcblxuICByZXR1cm4gZXJyb3I7XG59O1xuXG4vKipcbiAqIEV4cG9zZSBgUmVzcG9uc2VgLlxuICovXG5cbnJlcXVlc3QuUmVzcG9uc2UgPSBSZXNwb25zZTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBSZXF1ZXN0YCB3aXRoIHRoZSBnaXZlbiBgbWV0aG9kYCBhbmQgYHVybGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBSZXF1ZXN0KG1ldGhvZCwgdXJsKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICB0aGlzLl9xdWVyeSA9IHRoaXMuX3F1ZXJ5IHx8IFtdO1xuICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgdGhpcy51cmwgPSB1cmw7XG4gIHRoaXMuaGVhZGVyID0ge307IC8vIHByZXNlcnZlcyBoZWFkZXIgbmFtZSBjYXNlXG4gIHRoaXMuX2hlYWRlciA9IHt9OyAvLyBjb2VyY2VzIGhlYWRlciBuYW1lcyB0byBsb3dlcmNhc2VcbiAgdGhpcy5vbignZW5kJywgKCkgPT4ge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgbGV0IHJlcyA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgcmVzID0gbmV3IFJlc3BvbnNlKHNlbGYpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ1BhcnNlciBpcyB1bmFibGUgdG8gcGFyc2UgdGhlIHJlc3BvbnNlJyk7XG4gICAgICBlcnJvci5wYXJzZSA9IHRydWU7XG4gICAgICBlcnJvci5vcmlnaW5hbCA9IGVycjtcbiAgICAgIC8vIGlzc3VlICM2NzU6IHJldHVybiB0aGUgcmF3IHJlc3BvbnNlIGlmIHRoZSByZXNwb25zZSBwYXJzaW5nIGZhaWxzXG4gICAgICBpZiAoc2VsZi54aHIpIHtcbiAgICAgICAgLy8gaWU5IGRvZXNuJ3QgaGF2ZSAncmVzcG9uc2UnIHByb3BlcnR5XG4gICAgICAgIGVycm9yLnJhd1Jlc3BvbnNlID1cbiAgICAgICAgICB0eXBlb2Ygc2VsZi54aHIucmVzcG9uc2VUeXBlID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBzZWxmLnhoci5yZXNwb25zZVRleHRcbiAgICAgICAgICAgIDogc2VsZi54aHIucmVzcG9uc2U7XG4gICAgICAgIC8vIGlzc3VlICM4NzY6IHJldHVybiB0aGUgaHR0cCBzdGF0dXMgY29kZSBpZiB0aGUgcmVzcG9uc2UgcGFyc2luZyBmYWlsc1xuICAgICAgICBlcnJvci5zdGF0dXMgPSBzZWxmLnhoci5zdGF0dXMgPyBzZWxmLnhoci5zdGF0dXMgOiBudWxsO1xuICAgICAgICBlcnJvci5zdGF0dXNDb2RlID0gZXJyb3Iuc3RhdHVzOyAvLyBiYWNrd2FyZHMtY29tcGF0IG9ubHlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yLnJhd1Jlc3BvbnNlID0gbnVsbDtcbiAgICAgICAgZXJyb3Iuc3RhdHVzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlbGYuY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cblxuICAgIHNlbGYuZW1pdCgncmVzcG9uc2UnLCByZXMpO1xuXG4gICAgbGV0IG5ld19lcnJvcjtcbiAgICB0cnkge1xuICAgICAgaWYgKCFzZWxmLl9pc1Jlc3BvbnNlT0socmVzKSkge1xuICAgICAgICBuZXdfZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgcmVzLnN0YXR1c1RleHQgfHwgcmVzLnRleHQgfHwgJ1Vuc3VjY2Vzc2Z1bCBIVFRQIHJlc3BvbnNlJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbmV3X2Vycm9yID0gZXJyOyAvLyBvaygpIGNhbGxiYWNrIGNhbiB0aHJvd1xuICAgIH1cblxuICAgIC8vICMxMDAwIGRvbid0IGNhdGNoIGVycm9ycyBmcm9tIHRoZSBjYWxsYmFjayB0byBhdm9pZCBkb3VibGUgY2FsbGluZyBpdFxuICAgIGlmIChuZXdfZXJyb3IpIHtcbiAgICAgIG5ld19lcnJvci5vcmlnaW5hbCA9IGVycm9yO1xuICAgICAgbmV3X2Vycm9yLnJlc3BvbnNlID0gcmVzO1xuICAgICAgbmV3X2Vycm9yLnN0YXR1cyA9IHJlcy5zdGF0dXM7XG4gICAgICBzZWxmLmNhbGxiYWNrKG5ld19lcnJvciwgcmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5jYWxsYmFjayhudWxsLCByZXMpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogTWl4aW4gYEVtaXR0ZXJgIGFuZCBgUmVxdWVzdEJhc2VgLlxuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG5FbWl0dGVyKFJlcXVlc3QucHJvdG90eXBlKTtcblxubWl4aW4oUmVxdWVzdC5wcm90b3R5cGUsIFJlcXVlc3RCYXNlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogU2V0IENvbnRlbnQtVHlwZSB0byBgdHlwZWAsIG1hcHBpbmcgdmFsdWVzIGZyb20gYHJlcXVlc3QudHlwZXNgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgc3VwZXJhZ2VudC50eXBlcy54bWwgPSAnYXBwbGljYXRpb24veG1sJztcbiAqXG4gKiAgICAgIHJlcXVlc3QucG9zdCgnLycpXG4gKiAgICAgICAgLnR5cGUoJ3htbCcpXG4gKiAgICAgICAgLnNlbmQoeG1sc3RyaW5nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgnYXBwbGljYXRpb24veG1sJylcbiAqICAgICAgICAuc2VuZCh4bWxzdHJpbmcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS50eXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgdGhpcy5zZXQoJ0NvbnRlbnQtVHlwZScsIHJlcXVlc3QudHlwZXNbdHlwZV0gfHwgdHlwZSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgQWNjZXB0IHRvIGB0eXBlYCwgbWFwcGluZyB2YWx1ZXMgZnJvbSBgcmVxdWVzdC50eXBlc2AuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICBzdXBlcmFnZW50LnR5cGVzLmpzb24gPSAnYXBwbGljYXRpb24vanNvbic7XG4gKlxuICogICAgICByZXF1ZXN0LmdldCgnL2FnZW50JylcbiAqICAgICAgICAuYWNjZXB0KCdqc29uJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvYWdlbnQnKVxuICogICAgICAgIC5hY2NlcHQoJ2FwcGxpY2F0aW9uL2pzb24nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY2NlcHRcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiAodHlwZSkge1xuICB0aGlzLnNldCgnQWNjZXB0JywgcmVxdWVzdC50eXBlc1t0eXBlXSB8fCB0eXBlKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBBdXRob3JpemF0aW9uIGZpZWxkIHZhbHVlIHdpdGggYHVzZXJgIGFuZCBgcGFzc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVzZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBbcGFzc10gb3B0aW9uYWwgaW4gY2FzZSBvZiB1c2luZyAnYmVhcmVyJyBhcyB0eXBlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyB3aXRoICd0eXBlJyBwcm9wZXJ0eSAnYXV0bycsICdiYXNpYycgb3IgJ2JlYXJlcicgKGRlZmF1bHQgJ2Jhc2ljJylcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hdXRoID0gZnVuY3Rpb24gKHVzZXIsIHBhc3MsIG9wdGlvbnMpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHBhc3MgPSAnJztcbiAgaWYgKHR5cGVvZiBwYXNzID09PSAnb2JqZWN0JyAmJiBwYXNzICE9PSBudWxsKSB7XG4gICAgLy8gcGFzcyBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIHJlcGxhY2VkIHdpdGggb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBwYXNzO1xuICAgIHBhc3MgPSAnJztcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICB0eXBlOiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJyA/ICdiYXNpYycgOiAnYXV0bydcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZW5jb2RlciA9IG9wdGlvbnMuZW5jb2RlclxuICAgID8gb3B0aW9ucy5lbmNvZGVyXG4gICAgOiAoc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBidG9hKHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgYmFzaWMgYXV0aCwgYnRvYSBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgfTtcblxuICByZXR1cm4gdGhpcy5fYXV0aCh1c2VyLCBwYXNzLCBvcHRpb25zLCBlbmNvZGVyKTtcbn07XG5cbi8qKlxuICogQWRkIHF1ZXJ5LXN0cmluZyBgdmFsYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgIHJlcXVlc3QuZ2V0KCcvc2hvZXMnKVxuICogICAgIC5xdWVyeSgnc2l6ZT0xMCcpXG4gKiAgICAgLnF1ZXJ5KHsgY29sb3I6ICdibHVlJyB9KVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHZhbHVlID0gc2VyaWFsaXplKHZhbHVlKTtcbiAgaWYgKHZhbHVlKSB0aGlzLl9xdWVyeS5wdXNoKHZhbHVlKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFF1ZXVlIHRoZSBnaXZlbiBgZmlsZWAgYXMgYW4gYXR0YWNobWVudCB0byB0aGUgc3BlY2lmaWVkIGBmaWVsZGAsXG4gKiB3aXRoIG9wdGlvbmFsIGBvcHRpb25zYCAob3IgZmlsZW5hbWUpLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmF0dGFjaCgnY29udGVudCcsIG5ldyBCbG9iKFsnPGEgaWQ9XCJhXCI+PGIgaWQ9XCJiXCI+aGV5ITwvYj48L2E+J10sIHsgdHlwZTogXCJ0ZXh0L2h0bWxcIn0pKVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZFxuICogQHBhcmFtIHtCbG9ifEZpbGV9IGZpbGVcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uIChmaWVsZCwgZmlsZSwgb3B0aW9ucykge1xuICBpZiAoZmlsZSkge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBlcmFnZW50IGNhbid0IG1peCAuc2VuZCgpIGFuZCAuYXR0YWNoKClcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fZ2V0Rm9ybURhdGEoKS5hcHBlbmQoZmllbGQsIGZpbGUsIG9wdGlvbnMgfHwgZmlsZS5uYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuX2dldEZvcm1EYXRhID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuX2Zvcm1EYXRhKSB7XG4gICAgdGhpcy5fZm9ybURhdGEgPSBuZXcgcm9vdC5Gb3JtRGF0YSgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2Zvcm1EYXRhO1xufTtcblxuLyoqXG4gKiBJbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggYGVycmAgYW5kIGByZXNgXG4gKiBhbmQgaGFuZGxlIGFyaXR5IGNoZWNrLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jYWxsYmFjayA9IGZ1bmN0aW9uIChlcnJvciwgcmVzKSB7XG4gIGlmICh0aGlzLl9zaG91bGRSZXRyeShlcnJvciwgcmVzKSkge1xuICAgIHJldHVybiB0aGlzLl9yZXRyeSgpO1xuICB9XG5cbiAgY29uc3QgZm4gPSB0aGlzLl9jYWxsYmFjaztcbiAgdGhpcy5jbGVhclRpbWVvdXQoKTtcblxuICBpZiAoZXJyb3IpIHtcbiAgICBpZiAodGhpcy5fbWF4UmV0cmllcykgZXJyb3IucmV0cmllcyA9IHRoaXMuX3JldHJpZXMgLSAxO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gIH1cblxuICBmbihlcnJvciwgcmVzKTtcbn07XG5cbi8qKlxuICogSW52b2tlIGNhbGxiYWNrIHdpdGggeC1kb21haW4gZXJyb3IuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY3Jvc3NEb21haW5FcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgJ1JlcXVlc3QgaGFzIGJlZW4gdGVybWluYXRlZFxcblBvc3NpYmxlIGNhdXNlczogdGhlIG5ldHdvcmsgaXMgb2ZmbGluZSwgT3JpZ2luIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiwgdGhlIHBhZ2UgaXMgYmVpbmcgdW5sb2FkZWQsIGV0Yy4nXG4gICk7XG4gIGVycm9yLmNyb3NzRG9tYWluID0gdHJ1ZTtcblxuICBlcnJvci5zdGF0dXMgPSB0aGlzLnN0YXR1cztcbiAgZXJyb3IubWV0aG9kID0gdGhpcy5tZXRob2Q7XG4gIGVycm9yLnVybCA9IHRoaXMudXJsO1xuXG4gIHRoaXMuY2FsbGJhY2soZXJyb3IpO1xufTtcblxuLy8gVGhpcyBvbmx5IHdhcm5zLCBiZWNhdXNlIHRoZSByZXF1ZXN0IGlzIHN0aWxsIGxpa2VseSB0byB3b3JrXG5SZXF1ZXN0LnByb3RvdHlwZS5hZ2VudCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc29sZS53YXJuKCdUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciB2ZXJzaW9uIG9mIHN1cGVyYWdlbnQnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jYSA9IFJlcXVlc3QucHJvdG90eXBlLmFnZW50O1xuUmVxdWVzdC5wcm90b3R5cGUuYnVmZmVyID0gUmVxdWVzdC5wcm90b3R5cGUuY2E7XG5cbi8vIFRoaXMgdGhyb3dzLCBiZWNhdXNlIGl0IGNhbid0IHNlbmQvcmVjZWl2ZSBkYXRhIGFzIGV4cGVjdGVkXG5SZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICdTdHJlYW1pbmcgaXMgbm90IHN1cHBvcnRlZCBpbiBicm93c2VyIHZlcnNpb24gb2Ygc3VwZXJhZ2VudCdcbiAgKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnBpcGUgPSBSZXF1ZXN0LnByb3RvdHlwZS53cml0ZTtcblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIGhvc3Qgb2JqZWN0LFxuICogd2UgZG9uJ3Qgd2FudCB0byBzZXJpYWxpemUgdGhlc2UgOilcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIGhvc3Qgb2JqZWN0XG4gKiBAcmV0dXJuIHtCb29sZWFufSBpcyBhIGhvc3Qgb2JqZWN0XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuUmVxdWVzdC5wcm90b3R5cGUuX2lzSG9zdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgLy8gTmF0aXZlIG9iamVjdHMgc3RyaW5naWZ5IHRvIFtvYmplY3QgRmlsZV0sIFtvYmplY3QgQmxvYl0sIFtvYmplY3QgRm9ybURhdGFdLCBldGMuXG4gIHJldHVybiAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICAhQXJyYXkuaXNBcnJheShvYmplY3QpICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgIT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICk7XG59O1xuXG4vKipcbiAqIEluaXRpYXRlIHJlcXVlc3QsIGludm9raW5nIGNhbGxiYWNrIGBmbihyZXMpYFxuICogd2l0aCBhbiBpbnN0YW5jZW9mIGBSZXNwb25zZWAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoZm4pIHtcbiAgaWYgKHRoaXMuX2VuZENhbGxlZCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdXYXJuaW5nOiAuZW5kKCkgd2FzIGNhbGxlZCB0d2ljZS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGluIHN1cGVyYWdlbnQnXG4gICAgKTtcbiAgfVxuXG4gIHRoaXMuX2VuZENhbGxlZCA9IHRydWU7XG5cbiAgLy8gc3RvcmUgY2FsbGJhY2tcbiAgdGhpcy5fY2FsbGJhY2sgPSBmbiB8fCBub29wO1xuXG4gIC8vIHF1ZXJ5c3RyaW5nXG4gIHRoaXMuX2ZpbmFsaXplUXVlcnlTdHJpbmcoKTtcblxuICB0aGlzLl9lbmQoKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLl9zZXRVcGxvYWRUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzZWxmID0gdGhpcztcblxuICAvLyB1cGxvYWQgdGltZW91dCBpdCdzIHdva3JzIG9ubHkgaWYgZGVhZGxpbmUgdGltZW91dCBpcyBvZmZcbiAgaWYgKHRoaXMuX3VwbG9hZFRpbWVvdXQgJiYgIXRoaXMuX3VwbG9hZFRpbWVvdXRUaW1lcikge1xuICAgIHRoaXMuX3VwbG9hZFRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2VsZi5fdGltZW91dEVycm9yKFxuICAgICAgICAnVXBsb2FkIHRpbWVvdXQgb2YgJyxcbiAgICAgICAgc2VsZi5fdXBsb2FkVGltZW91dCxcbiAgICAgICAgJ0VUSU1FRE9VVCdcbiAgICAgICk7XG4gICAgfSwgdGhpcy5fdXBsb2FkVGltZW91dCk7XG4gIH1cbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5SZXF1ZXN0LnByb3RvdHlwZS5fZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fYWJvcnRlZClcbiAgICByZXR1cm4gdGhpcy5jYWxsYmFjayhcbiAgICAgIG5ldyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZCBldmVuIGJlZm9yZSAuZW5kKCkgd2FzIGNhbGxlZCcpXG4gICAgKTtcblxuICBjb25zdCBzZWxmID0gdGhpcztcbiAgdGhpcy54aHIgPSByZXF1ZXN0LmdldFhIUigpO1xuICBjb25zdCB7IHhociB9ID0gdGhpcztcbiAgbGV0IGRhdGEgPSB0aGlzLl9mb3JtRGF0YSB8fCB0aGlzLl9kYXRhO1xuXG4gIHRoaXMuX3NldFRpbWVvdXRzKCk7XG5cbiAgLy8gc3RhdGUgY2hhbmdlXG4gIHhoci5hZGRFdmVudExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSB9ID0geGhyO1xuICAgIGlmIChyZWFkeVN0YXRlID49IDIgJiYgc2VsZi5fcmVzcG9uc2VUaW1lb3V0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLl9yZXNwb25zZVRpbWVvdXRUaW1lcik7XG4gICAgfVxuXG4gICAgaWYgKHJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbiBJRTksIHJlYWRzIHRvIGFueSBwcm9wZXJ0eSAoZS5nLiBzdGF0dXMpIG9mZiBvZiBhbiBhYm9ydGVkIFhIUiB3aWxsXG4gICAgLy8gcmVzdWx0IGluIHRoZSBlcnJvciBcIkNvdWxkIG5vdCBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uIGR1ZSB0byBlcnJvciBjMDBjMDIzZlwiXG4gICAgbGV0IHN0YXR1cztcbiAgICB0cnkge1xuICAgICAgc3RhdHVzID0geGhyLnN0YXR1cztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHN0YXR1cyA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgIGlmIChzZWxmLnRpbWVkb3V0IHx8IHNlbGYuX2Fib3J0ZWQpIHJldHVybjtcbiAgICAgIHJldHVybiBzZWxmLmNyb3NzRG9tYWluRXJyb3IoKTtcbiAgICB9XG5cbiAgICBzZWxmLmVtaXQoJ2VuZCcpO1xuICB9KTtcblxuICAvLyBwcm9ncmVzc1xuICBjb25zdCBoYW5kbGVQcm9ncmVzcyA9IChkaXJlY3Rpb24sIGUpID0+IHtcbiAgICBpZiAoZS50b3RhbCA+IDApIHtcbiAgICAgIGUucGVyY2VudCA9IChlLmxvYWRlZCAvIGUudG90YWwpICogMTAwO1xuXG4gICAgICBpZiAoZS5wZXJjZW50ID09PSAxMDApIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNlbGYuX3VwbG9hZFRpbWVvdXRUaW1lcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZS5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgc2VsZi5lbWl0KCdwcm9ncmVzcycsIGUpO1xuICB9O1xuXG4gIGlmICh0aGlzLmhhc0xpc3RlbmVycygncHJvZ3Jlc3MnKSkge1xuICAgIHRyeSB7XG4gICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBoYW5kbGVQcm9ncmVzcy5iaW5kKG51bGwsICdkb3dubG9hZCcpKTtcbiAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgIHhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAncHJvZ3Jlc3MnLFxuICAgICAgICAgIGhhbmRsZVByb2dyZXNzLmJpbmQobnVsbCwgJ3VwbG9hZCcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBBY2Nlc3NpbmcgeGhyLnVwbG9hZCBmYWlscyBpbiBJRSBmcm9tIGEgd2ViIHdvcmtlciwgc28ganVzdCBwcmV0ZW5kIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICAvLyBSZXBvcnRlZCBoZXJlOlxuICAgICAgLy8gaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy84MzcyNDUveG1saHR0cHJlcXVlc3QtdXBsb2FkLXRocm93cy1pbnZhbGlkLWFyZ3VtZW50LXdoZW4tdXNlZC1mcm9tLXdlYi13b3JrZXItY29udGV4dFxuICAgIH1cbiAgfVxuXG4gIGlmICh4aHIudXBsb2FkKSB7XG4gICAgdGhpcy5fc2V0VXBsb2FkVGltZW91dCgpO1xuICB9XG5cbiAgLy8gaW5pdGlhdGUgcmVxdWVzdFxuICB0cnkge1xuICAgIGlmICh0aGlzLnVzZXJuYW1lICYmIHRoaXMucGFzc3dvcmQpIHtcbiAgICAgIHhoci5vcGVuKHRoaXMubWV0aG9kLCB0aGlzLnVybCwgdHJ1ZSwgdGhpcy51c2VybmFtZSwgdGhpcy5wYXNzd29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHhoci5vcGVuKHRoaXMubWV0aG9kLCB0aGlzLnVybCwgdHJ1ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBzZWUgIzExNDlcbiAgICByZXR1cm4gdGhpcy5jYWxsYmFjayhlcnIpO1xuICB9XG5cbiAgLy8gQ09SU1xuICBpZiAodGhpcy5fd2l0aENyZWRlbnRpYWxzKSB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcblxuICAvLyBib2R5XG4gIGlmIChcbiAgICAhdGhpcy5fZm9ybURhdGEgJiZcbiAgICB0aGlzLm1ldGhvZCAhPT0gJ0dFVCcgJiZcbiAgICB0aGlzLm1ldGhvZCAhPT0gJ0hFQUQnICYmXG4gICAgdHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnICYmXG4gICAgIXRoaXMuX2lzSG9zdChkYXRhKVxuICApIHtcbiAgICAvLyBzZXJpYWxpemUgc3R1ZmZcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuX2hlYWRlclsnY29udGVudC10eXBlJ107XG4gICAgbGV0IHNlcmlhbGl6ZSA9XG4gICAgICB0aGlzLl9zZXJpYWxpemVyIHx8XG4gICAgICByZXF1ZXN0LnNlcmlhbGl6ZVtjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JylbMF0gOiAnJ107XG4gICAgaWYgKCFzZXJpYWxpemUgJiYgaXNKU09OKGNvbnRlbnRUeXBlKSkge1xuICAgICAgc2VyaWFsaXplID0gcmVxdWVzdC5zZXJpYWxpemVbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplKSBkYXRhID0gc2VyaWFsaXplKGRhdGEpO1xuICB9XG5cbiAgLy8gc2V0IGhlYWRlciBmaWVsZHNcbiAgZm9yIChjb25zdCBmaWVsZCBpbiB0aGlzLmhlYWRlcikge1xuICAgIGlmICh0aGlzLmhlYWRlcltmaWVsZF0gPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgaWYgKGhhc093bih0aGlzLmhlYWRlciwgZmllbGQpKVxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoZmllbGQsIHRoaXMuaGVhZGVyW2ZpZWxkXSk7XG4gIH1cblxuICBpZiAodGhpcy5fcmVzcG9uc2VUeXBlKSB7XG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMuX3Jlc3BvbnNlVHlwZTtcbiAgfVxuXG4gIC8vIHNlbmQgc3R1ZmZcbiAgdGhpcy5lbWl0KCdyZXF1ZXN0JywgdGhpcyk7XG5cbiAgLy8gSUUxMSB4aHIuc2VuZCh1bmRlZmluZWQpIHNlbmRzICd1bmRlZmluZWQnIHN0cmluZyBhcyBQT1NUIHBheWxvYWQgKGluc3RlYWQgb2Ygbm90aGluZylcbiAgLy8gV2UgbmVlZCBudWxsIGhlcmUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgeGhyLnNlbmQodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IGRhdGEpO1xufTtcblxucmVxdWVzdC5hZ2VudCA9ICgpID0+IG5ldyBBZ2VudCgpO1xuXG5mb3IgKGNvbnN0IG1ldGhvZCBvZiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnLCAnUEFUQ0gnLCAnUFVUJywgJ0RFTEVURSddKSB7XG4gIEFnZW50LnByb3RvdHlwZVttZXRob2QudG9Mb3dlckNhc2UoKV0gPSBmdW5jdGlvbiAodXJsLCBmbikge1xuICAgIGNvbnN0IHJlcXVlc3RfID0gbmV3IHJlcXVlc3QuUmVxdWVzdChtZXRob2QsIHVybCk7XG4gICAgdGhpcy5fc2V0RGVmYXVsdHMocmVxdWVzdF8pO1xuICAgIGlmIChmbikge1xuICAgICAgcmVxdWVzdF8uZW5kKGZuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdF87XG4gIH07XG59XG5cbkFnZW50LnByb3RvdHlwZS5kZWwgPSBBZ2VudC5wcm90b3R5cGUuZGVsZXRlO1xuXG4vKipcbiAqIEdFVCBgdXJsYCB3aXRoIG9wdGlvbmFsIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfEZ1bmN0aW9ufSBbZGF0YV0gb3IgZm5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QuZ2V0ID0gKHVybCwgZGF0YSwgZm4pID0+IHtcbiAgY29uc3QgcmVxdWVzdF8gPSByZXF1ZXN0KCdHRVQnLCB1cmwpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IG51bGw7XG4gIH1cblxuICBpZiAoZGF0YSkgcmVxdWVzdF8ucXVlcnkoZGF0YSk7XG4gIGlmIChmbikgcmVxdWVzdF8uZW5kKGZuKTtcbiAgcmV0dXJuIHJlcXVlc3RfO1xufTtcblxuLyoqXG4gKiBIRUFEIGB1cmxgIHdpdGggb3B0aW9uYWwgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR8RnVuY3Rpb259IFtkYXRhXSBvciBmblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucmVxdWVzdC5oZWFkID0gKHVybCwgZGF0YSwgZm4pID0+IHtcbiAgY29uc3QgcmVxdWVzdF8gPSByZXF1ZXN0KCdIRUFEJywgdXJsKTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm4gPSBkYXRhO1xuICAgIGRhdGEgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRhdGEpIHJlcXVlc3RfLnF1ZXJ5KGRhdGEpO1xuICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gIHJldHVybiByZXF1ZXN0Xztcbn07XG5cbi8qKlxuICogT1BUSU9OUyBxdWVyeSB0byBgdXJsYCB3aXRoIG9wdGlvbmFsIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfEZ1bmN0aW9ufSBbZGF0YV0gb3IgZm5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3Qub3B0aW9ucyA9ICh1cmwsIGRhdGEsIGZuKSA9PiB7XG4gIGNvbnN0IHJlcXVlc3RfID0gcmVxdWVzdCgnT1BUSU9OUycsIHVybCk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZuID0gZGF0YTtcbiAgICBkYXRhID0gbnVsbDtcbiAgfVxuXG4gIGlmIChkYXRhKSByZXF1ZXN0Xy5zZW5kKGRhdGEpO1xuICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gIHJldHVybiByZXF1ZXN0Xztcbn07XG5cbi8qKlxuICogREVMRVRFIGB1cmxgIHdpdGggb3B0aW9uYWwgYGRhdGFgIGFuZCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZH0gW2RhdGFdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZWwodXJsLCBkYXRhLCBmbikge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ0RFTEVURScsIHVybCk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZuID0gZGF0YTtcbiAgICBkYXRhID0gbnVsbDtcbiAgfVxuXG4gIGlmIChkYXRhKSByZXF1ZXN0Xy5zZW5kKGRhdGEpO1xuICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gIHJldHVybiByZXF1ZXN0Xztcbn1cblxucmVxdWVzdC5kZWwgPSBkZWw7XG5yZXF1ZXN0LmRlbGV0ZSA9IGRlbDtcblxuLyoqXG4gKiBQQVRDSCBgdXJsYCB3aXRoIG9wdGlvbmFsIGBkYXRhYCBhbmQgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR9IFtkYXRhXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucmVxdWVzdC5wYXRjaCA9ICh1cmwsIGRhdGEsIGZuKSA9PiB7XG4gIGNvbnN0IHJlcXVlc3RfID0gcmVxdWVzdCgnUEFUQ0gnLCB1cmwpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IG51bGw7XG4gIH1cblxuICBpZiAoZGF0YSkgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59O1xuXG4vKipcbiAqIFBPU1QgYHVybGAgd2l0aCBvcHRpb25hbCBgZGF0YWAgYW5kIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfSBbZGF0YV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QucG9zdCA9ICh1cmwsIGRhdGEsIGZuKSA9PiB7XG4gIGNvbnN0IHJlcXVlc3RfID0gcmVxdWVzdCgnUE9TVCcsIHVybCk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZuID0gZGF0YTtcbiAgICBkYXRhID0gbnVsbDtcbiAgfVxuXG4gIGlmIChkYXRhKSByZXF1ZXN0Xy5zZW5kKGRhdGEpO1xuICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gIHJldHVybiByZXF1ZXN0Xztcbn07XG5cbi8qKlxuICogUFVUIGB1cmxgIHdpdGggb3B0aW9uYWwgYGRhdGFgIGFuZCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZHxGdW5jdGlvbn0gW2RhdGFdIG9yIGZuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LnB1dCA9ICh1cmwsIGRhdGEsIGZuKSA9PiB7XG4gIGNvbnN0IHJlcXVlc3RfID0gcmVxdWVzdCgnUFVUJywgdXJsKTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm4gPSBkYXRhO1xuICAgIGRhdGEgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRhdGEpIHJlcXVlc3RfLnNlbmQoZGF0YSk7XG4gIGlmIChmbikgcmVxdWVzdF8uZW5kKGZuKTtcbiAgcmV0dXJuIHJlcXVlc3RfO1xufTtcbiIsImNvbnN0IHNlbXZlciA9IHJlcXVpcmUoJ3NlbXZlcicpO1xuXG4vKipcbiAqIE1vZHVsZSBvZiBtaXhlZC1pbiBmdW5jdGlvbnMgc2hhcmVkIGJldHdlZW4gbm9kZSBhbmQgY2xpZW50IGNvZGVcbiAqL1xuY29uc3QgeyBpc09iamVjdCwgaGFzT3duIH0gPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogRXhwb3NlIGBSZXF1ZXN0QmFzZWAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0QmFzZTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBSZXF1ZXN0QmFzZWAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBSZXF1ZXN0QmFzZSgpIHsgfVxuXG4vKipcbiAqIENsZWFyIHByZXZpb3VzIHRpbWVvdXQuXG4gKlxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gIGNsZWFyVGltZW91dCh0aGlzLl9yZXNwb25zZVRpbWVvdXRUaW1lcik7XG4gIGNsZWFyVGltZW91dCh0aGlzLl91cGxvYWRUaW1lb3V0VGltZXIpO1xuICBkZWxldGUgdGhpcy5fdGltZXI7XG4gIGRlbGV0ZSB0aGlzLl9yZXNwb25zZVRpbWVvdXRUaW1lcjtcbiAgZGVsZXRlIHRoaXMuX3VwbG9hZFRpbWVvdXRUaW1lcjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE92ZXJyaWRlIGRlZmF1bHQgcmVzcG9uc2UgYm9keSBwYXJzZXJcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGNvbnZlcnQgaW5jb21pbmcgZGF0YSBpbnRvIHJlcXVlc3QuYm9keVxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChmbikge1xuICB0aGlzLl9wYXJzZXIgPSBmbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBmb3JtYXQgb2YgYmluYXJ5IHJlc3BvbnNlIGJvZHkuXG4gKiBJbiBicm93c2VyIHZhbGlkIGZvcm1hdHMgYXJlICdibG9iJyBhbmQgJ2FycmF5YnVmZmVyJyxcbiAqIHdoaWNoIHJldHVybiBCbG9iIGFuZCBBcnJheUJ1ZmZlciwgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIEluIE5vZGUgYWxsIHZhbHVlcyByZXN1bHQgaW4gQnVmZmVyLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgcmVxLmdldCgnLycpXG4gKiAgICAgICAgLnJlc3BvbnNlVHlwZSgnYmxvYicpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHZhbFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5yZXNwb25zZVR5cGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdGhpcy5fcmVzcG9uc2VUeXBlID0gdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBPdmVycmlkZSBkZWZhdWx0IHJlcXVlc3QgYm9keSBzZXJpYWxpemVyXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IGRhdGEgc2V0IHZpYSAuc2VuZCBvciAuYXR0YWNoIGludG8gcGF5bG9hZCB0byBzZW5kXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChmbikge1xuICB0aGlzLl9zZXJpYWxpemVyID0gZm47XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgdGltZW91dHMuXG4gKlxuICogLSByZXNwb25zZSB0aW1lb3V0IGlzIHRpbWUgYmV0d2VlbiBzZW5kaW5nIHJlcXVlc3QgYW5kIHJlY2VpdmluZyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmVzcG9uc2UuIEluY2x1ZGVzIEROUyBhbmQgY29ubmVjdGlvbiB0aW1lLlxuICogLSBkZWFkbGluZSBpcyB0aGUgdGltZSBmcm9tIHN0YXJ0IG9mIHRoZSByZXF1ZXN0IHRvIHJlY2VpdmluZyByZXNwb25zZSBib2R5IGluIGZ1bGwuIElmIHRoZSBkZWFkbGluZSBpcyB0b28gc2hvcnQgbGFyZ2UgZmlsZXMgbWF5IG5vdCBsb2FkIGF0IGFsbCBvbiBzbG93IGNvbm5lY3Rpb25zLlxuICogLSB1cGxvYWQgaXMgdGhlIHRpbWUgIHNpbmNlIGxhc3QgYml0IG9mIGRhdGEgd2FzIHNlbnQgb3IgcmVjZWl2ZWQuIFRoaXMgdGltZW91dCB3b3JrcyBvbmx5IGlmIGRlYWRsaW5lIHRpbWVvdXQgaXMgb2ZmXG4gKlxuICogVmFsdWUgb2YgMCBvciBmYWxzZSBtZWFucyBubyB0aW1lb3V0LlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfE9iamVjdH0gbXMgb3Ige3Jlc3BvbnNlLCBkZWFkbGluZX1cbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUudGltZW91dCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aGlzLl90aW1lb3V0ID0gb3B0aW9ucztcbiAgICB0aGlzLl9yZXNwb25zZVRpbWVvdXQgPSAwO1xuICAgIHRoaXMuX3VwbG9hZFRpbWVvdXQgPSAwO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGlmIChoYXNPd24ob3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgc3dpdGNoIChvcHRpb24pIHtcbiAgICAgICAgY2FzZSAnZGVhZGxpbmUnOlxuICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBvcHRpb25zLmRlYWRsaW5lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZXNwb25zZSc6XG4gICAgICAgICAgdGhpcy5fcmVzcG9uc2VUaW1lb3V0ID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndXBsb2FkJzpcbiAgICAgICAgICB0aGlzLl91cGxvYWRUaW1lb3V0ID0gb3B0aW9ucy51cGxvYWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIHRpbWVvdXQgb3B0aW9uJywgb3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IG51bWJlciBvZiByZXRyeSBhdHRlbXB0cyBvbiBlcnJvci5cbiAqXG4gKiBGYWlsZWQgcmVxdWVzdHMgd2lsbCBiZSByZXRyaWVkICdjb3VudCcgdGltZXMgaWYgdGltZW91dCBvciBlcnIuY29kZSA+PSA1MDAuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnJldHJ5ID0gZnVuY3Rpb24gKGNvdW50LCBmbikge1xuICAvLyBEZWZhdWx0IHRvIDEgaWYgbm8gY291bnQgcGFzc2VkIG9yIHRydWVcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDAgfHwgY291bnQgPT09IHRydWUpIGNvdW50ID0gMTtcbiAgaWYgKGNvdW50IDw9IDApIGNvdW50ID0gMDtcbiAgdGhpcy5fbWF4UmV0cmllcyA9IGNvdW50O1xuICB0aGlzLl9yZXRyaWVzID0gMDtcbiAgdGhpcy5fcmV0cnlDYWxsYmFjayA9IGZuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBOT1RFOiB3ZSBkbyBub3QgaW5jbHVkZSBFU09DS0VUVElNRURPVVQgYmVjYXVzZSB0aGF0IGlzIGZyb20gYHJlcXVlc3RgIHBhY2thZ2Vcbi8vICAgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2dvdC9wdWxsLzUzNz5cbi8vXG4vLyBOT1RFOiB3ZSBkbyBub3QgaW5jbHVkZSBFQUREUklORk8gYmVjYXVzZSBpdCB3YXMgcmVtb3ZlZCBmcm9tIGxpYnV2IGluIDIwMTRcbi8vICAgICAgIDxodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvY29tbWl0LzAyZTFlYmQ0MGI4MDdiZTVhZjQ2MzQzZWE4NzMzMzFiMmVlNGU5YzE+XG4vLyAgICAgICA8aHR0cHM6Ly9naXRodWIuY29tL3JlcXVlc3QvcmVxdWVzdC9zZWFyY2g/cT1FU09DS0VUVElNRURPVVQmdW5zY29wZWRfcT1FU09DS0VUVElNRURPVVQ+XG4vL1xuLy9cbi8vIFRPRE86IGV4cG9zZSB0aGVzZSBhcyBjb25maWd1cmFibGUgZGVmYXVsdHNcbi8vXG5jb25zdCBFUlJPUl9DT0RFUyA9IG5ldyBTZXQoW1xuICAnRVRJTUVET1VUJyxcbiAgJ0VDT05OUkVTRVQnLFxuICAnRUFERFJJTlVTRScsXG4gICdFQ09OTlJFRlVTRUQnLFxuICAnRVBJUEUnLFxuICAnRU5PVEZPVU5EJyxcbiAgJ0VORVRVTlJFQUNIJyxcbiAgJ0VBSV9BR0FJTidcbl0pO1xuXG5jb25zdCBTVEFUVVNfQ09ERVMgPSBuZXcgU2V0KFtcbiAgNDA4LCA0MTMsIDQyOSwgNTAwLCA1MDIsIDUwMywgNTA0LCA1MjEsIDUyMiwgNTI0XG5dKTtcblxuLy8gVE9ETzogd2Ugd291bGQgbmVlZCB0byBtYWtlIHRoaXMgZWFzaWx5IGNvbmZpZ3VyYWJsZSBiZWZvcmUgYWRkaW5nIGl0IGluIChlLmcuIHNvbWUgbWlnaHQgd2FudCB0byBhZGQgUE9TVClcbi8vIGNvbnN0IE1FVEhPRFMgPSBuZXcgU2V0KFsnR0VUJywgJ1BVVCcsICdIRUFEJywgJ0RFTEVURScsICdPUFRJT05TJywgJ1RSQUNFJ10pO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHJlcXVlc3Qgc2hvdWxkIGJlIHJldHJpZWQuXG4gKiAoSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9nb3QjcmV0cnkpXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyIGFuIGVycm9yXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfSBbcmVzXSByZXNwb25zZVxuICogQHJldHVybnMge0Jvb2xlYW59IGlmIHNlZ21lbnQgc2hvdWxkIGJlIHJldHJpZWRcbiAqL1xuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9zaG91bGRSZXRyeSA9IGZ1bmN0aW9uIChlcnJvciwgcmVzKSB7XG4gIGlmICghdGhpcy5fbWF4UmV0cmllcyB8fCB0aGlzLl9yZXRyaWVzKysgPj0gdGhpcy5fbWF4UmV0cmllcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0aGlzLl9yZXRyeUNhbGxiYWNrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5fcmV0cnlDYWxsYmFjayhlcnJvciwgcmVzKTtcbiAgICAgIGlmIChvdmVycmlkZSA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAob3ZlcnJpZGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyB1bmRlZmluZWQgZmFsbHMgYmFjayB0byBkZWZhdWx0c1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IHdlIHdvdWxkIG5lZWQgdG8gbWFrZSB0aGlzIGVhc2lseSBjb25maWd1cmFibGUgYmVmb3JlIGFkZGluZyBpdCBpbiAoZS5nLiBzb21lIG1pZ2h0IHdhbnQgdG8gYWRkIFBPU1QpXG4gIC8qXG4gIGlmIChcbiAgICB0aGlzLnJlcSAmJlxuICAgIHRoaXMucmVxLm1ldGhvZCAmJlxuICAgICFNRVRIT0RTLmhhcyh0aGlzLnJlcS5tZXRob2QudG9VcHBlckNhc2UoKSlcbiAgKVxuICAgIHJldHVybiBmYWxzZTtcbiAgKi9cbiAgaWYgKHJlcyAmJiByZXMuc3RhdHVzICYmIFNUQVRVU19DT0RFUy5oYXMocmVzLnN0YXR1cykpIHJldHVybiB0cnVlO1xuICBpZiAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IuY29kZSAmJiBFUlJPUl9DT0RFUy5oYXMoZXJyb3IuY29kZSkpIHJldHVybiB0cnVlO1xuICAgIC8vIFN1cGVyYWdlbnQgdGltZW91dFxuICAgIGlmIChlcnJvci50aW1lb3V0ICYmIGVycm9yLmNvZGUgPT09ICdFQ09OTkFCT1JURUQnKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZXJyb3IuY3Jvc3NEb21haW4pIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXRyeSByZXF1ZXN0XG4gKlxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX3JldHJ5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNsZWFyVGltZW91dCgpO1xuXG4gIC8vIG5vZGVcbiAgaWYgKHRoaXMucmVxKSB7XG4gICAgdGhpcy5yZXEgPSBudWxsO1xuICAgIHRoaXMucmVxID0gdGhpcy5yZXF1ZXN0KCk7XG4gIH1cblxuICB0aGlzLl9hYm9ydGVkID0gZmFsc2U7XG4gIHRoaXMudGltZWRvdXQgPSBmYWxzZTtcbiAgdGhpcy50aW1lZG91dEVycm9yID0gbnVsbDtcblxuICByZXR1cm4gdGhpcy5fZW5kKCk7XG59O1xuXG4vKipcbiAqIFByb21pc2Ugc3VwcG9ydFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZWplY3RdXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICBpZiAoIXRoaXMuX2Z1bGxmaWxsZWRQcm9taXNlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuX2VuZENhbGxlZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2FybmluZzogc3VwZXJhZ2VudCByZXF1ZXN0IHdhcyBzZW50IHR3aWNlLCBiZWNhdXNlIGJvdGggLmVuZCgpIGFuZCAudGhlbigpIHdlcmUgY2FsbGVkLiBOZXZlciBjYWxsIC5lbmQoKSBpZiB5b3UgdXNlIHByb21pc2VzJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mdWxsZmlsbGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNlbGYub24oJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fbWF4UmV0cmllcyAmJiB0aGlzLl9tYXhSZXRyaWVzID4gdGhpcy5fcmV0cmllcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRpbWVkb3V0ICYmIHRoaXMudGltZWRvdXRFcnJvcikge1xuICAgICAgICAgIHJlamVjdCh0aGlzLnRpbWVkb3V0RXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdBYm9ydGVkJyk7XG4gICAgICAgIGVycm9yLmNvZGUgPSAnQUJPUlRFRCc7XG4gICAgICAgIGVycm9yLnN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuICAgICAgICBlcnJvci5tZXRob2QgPSB0aGlzLm1ldGhvZDtcbiAgICAgICAgZXJyb3IudXJsID0gdGhpcy51cmw7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICAgIHNlbGYuZW5kKChlcnJvciwgcmVzKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgZWxzZSByZXNvbHZlKHJlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9mdWxsZmlsbGVkUHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG59O1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuY2F0Y2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogQWxsb3cgZm9yIGV4dGVuc2lvblxuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgZm4odGhpcyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLm9rID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignQ2FsbGJhY2sgcmVxdWlyZWQnKTtcbiAgdGhpcy5fb2tDYWxsYmFjayA9IGNhbGxiYWNrO1xuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5faXNSZXNwb25zZU9LID0gZnVuY3Rpb24gKHJlcykge1xuICBpZiAoIXJlcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0aGlzLl9va0NhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuX29rQ2FsbGJhY2socmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXMuc3RhdHVzID49IDIwMCAmJiByZXMuc3RhdHVzIDwgMzAwO1xufTtcblxuLyoqXG4gKiBHZXQgcmVxdWVzdCBoZWFkZXIgYGZpZWxkYC5cbiAqIENhc2UtaW5zZW5zaXRpdmUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcbiAgcmV0dXJuIHRoaXMuX2hlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbn07XG5cbi8qKlxuICogR2V0IGNhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGBmaWVsZGAgdmFsdWUuXG4gKiBUaGlzIGlzIGEgZGVwcmVjYXRlZCBpbnRlcm5hbCBBUEkuIFVzZSBgLmdldChmaWVsZClgIGluc3RlYWQuXG4gKlxuICogKGdldEhlYWRlciBpcyBubyBsb25nZXIgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBzdXBlcmFnZW50IGNvZGUgYmFzZSlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICogQGRlcHJlY2F0ZWRcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuZ2V0SGVhZGVyID0gUmVxdWVzdEJhc2UucHJvdG90eXBlLmdldDtcblxuLyoqXG4gKiBTZXQgaGVhZGVyIGBmaWVsZGAgdG8gYHZhbGAsIG9yIG11bHRpcGxlIGZpZWxkcyB3aXRoIG9uZSBvYmplY3QuXG4gKiBDYXNlLWluc2Vuc2l0aXZlLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgcmVxLmdldCgnLycpXG4gKiAgICAgICAgLnNldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKVxuICogICAgICAgIC5zZXQoJ1gtQVBJLUtleScsICdmb29iYXInKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqICAgICAgcmVxLmdldCgnLycpXG4gKiAgICAgICAgLnNldCh7IEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLCAnWC1BUEktS2V5JzogJ2Zvb2JhcicgfSlcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGZpZWxkXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChmaWVsZCwgdmFsdWUpIHtcbiAgaWYgKGlzT2JqZWN0KGZpZWxkKSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGZpZWxkKSB7XG4gICAgICBpZiAoaGFzT3duKGZpZWxkLCBrZXkpKSB0aGlzLnNldChrZXksIGZpZWxkW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5faGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gIHRoaXMuaGVhZGVyW2ZpZWxkXSA9IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGhlYWRlciBgZmllbGRgLlxuICogQ2FzZS1pbnNlbnNpdGl2ZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgICAgcmVxLmdldCgnLycpXG4gKiAgICAgICAgLnVuc2V0KCdVc2VyLUFnZW50JylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGQgZmllbGQgbmFtZVxuICovXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUudW5zZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcbiAgZGVsZXRlIHRoaXMuX2hlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgZGVsZXRlIHRoaXMuaGVhZGVyW2ZpZWxkXTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFdyaXRlIHRoZSBmaWVsZCBgbmFtZWAgYW5kIGB2YWxgLCBvciBtdWx0aXBsZSBmaWVsZHMgd2l0aCBvbmUgb2JqZWN0XG4gKiBmb3IgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgcmVxdWVzdCBib2RpZXMuXG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0LnBvc3QoJy91cGxvYWQnKVxuICogICAuZmllbGQoJ2ZvbycsICdiYXInKVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiByZXF1ZXN0LnBvc3QoJy91cGxvYWQnKVxuICogICAuZmllbGQoeyBmb286ICdiYXInLCBiYXo6ICdxdXgnIH0pXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBuYW1lIG5hbWUgb2YgZmllbGRcbiAqIEBwYXJhbSB7U3RyaW5nfEJsb2J8RmlsZXxCdWZmZXJ8ZnMuUmVhZFN0cmVhbX0gdmFsIHZhbHVlIG9mIGZpZWxkXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucyBleHRyYSBvcHRpb25zLCBlLmcuICdibG9iJ1xuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuZmllbGQgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gbmFtZSBzaG91bGQgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIG9iamVjdC5cbiAgaWYgKG5hbWUgPT09IG51bGwgfHwgdW5kZWZpbmVkID09PSBuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCcuZmllbGQobmFtZSwgdmFsKSBuYW1lIGNhbiBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCIuZmllbGQoKSBjYW4ndCBiZSB1c2VkIGlmIC5zZW5kKCkgaXMgdXNlZC4gUGxlYXNlIHVzZSBvbmx5IC5zZW5kKCkgb3Igb25seSAuZmllbGQoKSAmIC5hdHRhY2goKVwiXG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc09iamVjdChuYW1lKSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG5hbWUpIHtcbiAgICAgIGlmIChoYXNPd24obmFtZSwga2V5KSkgdGhpcy5maWVsZChrZXksIG5hbWVba2V5XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IGkgaW4gdmFsdWUpIHtcbiAgICAgIGlmIChoYXNPd24odmFsdWUsIGkpKSB0aGlzLmZpZWxkKG5hbWUsIHZhbHVlW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHZhbCBzaG91bGQgYmUgZGVmaW5lZCBub3dcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHVuZGVmaW5lZCA9PT0gdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy5maWVsZChuYW1lLCB2YWwpIHZhbCBjYW4gbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICAvL2ZpeCBodHRwczovL2dpdGh1Yi5jb20vdmlzaW9ubWVkaWEvc3VwZXJhZ2VudC9pc3N1ZXMvMTY4MFxuICBpZiAob3B0aW9ucykgdGhpcy5fZ2V0Rm9ybURhdGEoKS5hcHBlbmQobmFtZSwgdmFsdWUsIG9wdGlvbnMpO1xuICBlbHNlIHRoaXMuX2dldEZvcm1EYXRhKCkuYXBwZW5kKG5hbWUsIHZhbHVlKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWJvcnQgdGhlIHJlcXVlc3QsIGFuZCBjbGVhciBwb3RlbnRpYWwgdGltZW91dC5cbiAqXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSByZXF1ZXN0XG4gKiBAYXBpIHB1YmxpY1xuICovXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLl9hYm9ydGVkKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aGlzLl9hYm9ydGVkID0gdHJ1ZTtcbiAgaWYgKHRoaXMueGhyKSB0aGlzLnhoci5hYm9ydCgpOyAvLyBicm93c2VyXG4gIGlmICh0aGlzLnJlcSkge1xuICAgIC8vIE5vZGUgdjEzIGhhcyBtYWpvciBkaWZmZXJlbmNlcyBpbiBgYWJvcnQoKWBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92MTIueC9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvdjEzLngvbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxNC54L2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanNcbiAgICAvLyAoaWYgeW91IHJ1biBhIGRpZmYgYWNyb3NzIHRoZXNlIHlvdSB3aWxsIHNlZSB0aGUgZGlmZmVyZW5jZXMpXG4gICAgLy9cbiAgICAvLyBSZWZlcmVuY2VzOlxuICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzMxNjMwPlxuICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vdmlzaW9ubWVkaWEvc3VwZXJhZ2VudC9wdWxsLzEwODQvY29tbWl0cy9kYzE4Njc5YTdjNWNjZmM2MDQ2ZDg4MjAxNWU1MTI2ODg4OTczYmM4PlxuICAgIC8vXG4gICAgLy8gVGhhbmtzIHRvIEBzaGFkb3dnYXRlMTUgYW5kIEBuaWZ0eWxldHR1Y2VcbiAgICBpZiAoXG4gICAgICBzZW12ZXIuZ3RlKHByb2Nlc3MudmVyc2lvbiwgJ3YxMy4wLjAnKSAmJlxuICAgICAgc2VtdmVyLmx0KHByb2Nlc3MudmVyc2lvbiwgJ3YxNC4wLjAnKVxuICAgICkge1xuICAgICAgLy8gTm90ZSB0aGF0IHRoZSByZWFzb24gdGhpcyBkb2Vzbid0IHdvcmsgaXMgYmVjYXVzZSBpbiB2MTMgYXMgY29tcGFyZWQgdG8gdjE0XG4gICAgICAvLyB0aGVyZSBpcyBubyBgY2FsbGJhY2sgPSBub3BgIHNldCBpbiBlbmQtb2Ytc3RyZWFtLmpzIGFib3ZlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdTdXBlcmFnZW50IGRvZXMgbm90IHdvcmsgaW4gdjEzIHByb3Blcmx5IHdpdGggYWJvcnQoKSBkdWUgdG8gTm9kZS5qcyBjb3JlIGNoYW5nZXMnXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoc2VtdmVyLmd0ZShwcm9jZXNzLnZlcnNpb24sICd2MTQuMC4wJykpIHtcbiAgICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkgc2V0IGBkZXN0cm95ZWRgIHRvIGB0cnVlYCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrXG4gICAgICAvLyAoc2VlIGNvcmUgaW50ZXJuYWxzIG9mIGVuZC1vZi1zdHJlYW0uanMgYWJvdmUgaW4gdjE0IGJyYW5jaCBhcyBjb21wYXJlZCB0byB2MTIpXG4gICAgICB0aGlzLnJlcS5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMucmVxLmFib3J0KCk7IC8vIG5vZGVcbiAgfVxuXG4gIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIHRoaXMuZW1pdCgnYWJvcnQnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX2F1dGggPSBmdW5jdGlvbiAodXNlciwgcGFzcywgb3B0aW9ucywgYmFzZTY0RW5jb2Rlcikge1xuICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgIGNhc2UgJ2Jhc2ljJzpcbiAgICAgIHRoaXMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJhc2ljICR7YmFzZTY0RW5jb2RlcihgJHt1c2VyfToke3Bhc3N9YCl9YCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXI7XG4gICAgICB0aGlzLnBhc3N3b3JkID0gcGFzcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYmVhcmVyJzogLy8gdXNhZ2Ugd291bGQgYmUgLmF1dGgoYWNjZXNzVG9rZW4sIHsgdHlwZTogJ2JlYXJlcicgfSlcbiAgICAgIHRoaXMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3VzZXJ9YCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRW5hYmxlIHRyYW5zbWlzc2lvbiBvZiBjb29raWVzIHdpdGggeC1kb21haW4gcmVxdWVzdHMuXG4gKlxuICogTm90ZSB0aGF0IGZvciB0aGlzIHRvIHdvcmsgdGhlIG9yaWdpbiBtdXN0IG5vdCBiZVxuICogdXNpbmcgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIiB3aXRoIGEgd2lsZGNhcmQsXG4gKiBhbmQgYWxzbyBtdXN0IHNldCBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzXCJcbiAqIHRvIFwidHJ1ZVwiLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLndpdGhDcmVkZW50aWFscyA9IGZ1bmN0aW9uIChvbikge1xuICAvLyBUaGlzIGlzIGJyb3dzZXItb25seSBmdW5jdGlvbmFsaXR5LiBOb2RlIHNpZGUgaXMgbm8tb3AuXG4gIGlmIChvbiA9PT0gdW5kZWZpbmVkKSBvbiA9IHRydWU7XG4gIHRoaXMuX3dpdGhDcmVkZW50aWFscyA9IG9uO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXggcmVkaXJlY3RzIHRvIGBuYC4gRG9lcyBub3RoaW5nIGluIGJyb3dzZXIgWEhSIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnJlZGlyZWN0cyA9IGZ1bmN0aW9uIChuKSB7XG4gIHRoaXMuX21heFJlZGlyZWN0cyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNYXhpbXVtIHNpemUgb2YgYnVmZmVyZWQgcmVzcG9uc2UgYm9keSwgaW4gYnl0ZXMuIENvdW50cyB1bmNvbXByZXNzZWQgc2l6ZS5cbiAqIERlZmF1bHQgMjAwTUIuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG4gbnVtYmVyIG9mIGJ5dGVzXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqL1xuUmVxdWVzdEJhc2UucHJvdG90eXBlLm1heFJlc3BvbnNlU2l6ZSA9IGZ1bmN0aW9uIChuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50Jyk7XG4gIH1cblxuICB0aGlzLl9tYXhSZXNwb25zZVNpemUgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ29udmVydCB0byBhIHBsYWluIGphdmFzY3JpcHQgb2JqZWN0IChub3QgSlNPTiBzdHJpbmcpIG9mIHNjYWxhciBwcm9wZXJ0aWVzLlxuICogTm90ZSBhcyB0aGlzIG1ldGhvZCBpcyBkZXNpZ25lZCB0byByZXR1cm4gYSB1c2VmdWwgbm9uLXRoaXMgdmFsdWUsXG4gKiBpdCBjYW5ub3QgYmUgY2hhaW5lZC5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGRlc2NyaWJpbmcgbWV0aG9kLCB1cmwsIGFuZCBkYXRhIG9mIHRoaXMgcmVxdWVzdFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgdXJsOiB0aGlzLnVybCxcbiAgICBkYXRhOiB0aGlzLl9kYXRhLFxuICAgIGhlYWRlcnM6IHRoaXMuX2hlYWRlclxuICB9O1xufTtcblxuLyoqXG4gKiBTZW5kIGBkYXRhYCBhcyB0aGUgcmVxdWVzdCBib2R5LCBkZWZhdWx0aW5nIHRoZSBgLnR5cGUoKWAgdG8gXCJqc29uXCIgd2hlblxuICogYW4gb2JqZWN0IGlzIGdpdmVuLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgIC8vIG1hbnVhbCBqc29uXG4gKiAgICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAgLnR5cGUoJ2pzb24nKVxuICogICAgICAgICAuc2VuZCgne1wibmFtZVwiOlwidGpcIn0nKVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIGF1dG8ganNvblxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC5zZW5kKHsgbmFtZTogJ3RqJyB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIG1hbnVhbCB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAudHlwZSgnZm9ybScpXG4gKiAgICAgICAgIC5zZW5kKCduYW1lPXRqJylcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBhdXRvIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC50eXBlKCdmb3JtJylcbiAqICAgICAgICAgLnNlbmQoeyBuYW1lOiAndGonIH0pXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogICAgICAgLy8gZGVmYXVsdHMgdG8geC13d3ctZm9ybS11cmxlbmNvZGVkXG4gKiAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgIC5zZW5kKCduYW1lPXRvYmknKVxuICogICAgICAgIC5zZW5kKCdzcGVjaWVzPWZlcnJldCcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGRhdGFcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBpc09iamVjdF8gPSBpc09iamVjdChkYXRhKTtcbiAgbGV0IHR5cGUgPSB0aGlzLl9oZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuXG4gIGlmICh0aGlzLl9mb3JtRGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiLnNlbmQoKSBjYW4ndCBiZSB1c2VkIGlmIC5hdHRhY2goKSBvciAuZmllbGQoKSBpcyB1c2VkLiBQbGVhc2UgdXNlIG9ubHkgLnNlbmQoKSBvciBvbmx5IC5maWVsZCgpICYgLmF0dGFjaCgpXCJcbiAgICApO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0XyAmJiAhdGhpcy5fZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aGlzLl9kYXRhID0gW107XG4gICAgfSBlbHNlIGlmICghdGhpcy5faXNIb3N0KGRhdGEpKSB7XG4gICAgICB0aGlzLl9kYXRhID0ge307XG4gICAgfVxuICB9IGVsc2UgaWYgKGRhdGEgJiYgdGhpcy5fZGF0YSAmJiB0aGlzLl9pc0hvc3QodGhpcy5fZGF0YSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBtZXJnZSB0aGVzZSBzZW5kIGNhbGxzXCIpO1xuICB9XG5cbiAgLy8gbWVyZ2VcbiAgaWYgKGlzT2JqZWN0XyAmJiBpc09iamVjdCh0aGlzLl9kYXRhKSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmIChoYXNPd24oZGF0YSwga2V5KSkgdGhpcy5fZGF0YVtrZXldID0gZGF0YVtrZXldO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBkZWZhdWx0IHRvIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICAgIGlmICghdHlwZSkgdGhpcy50eXBlKCdmb3JtJyk7XG4gICAgdHlwZSA9IHRoaXMuX2hlYWRlclsnY29udGVudC10eXBlJ107XG4gICAgaWYgKHR5cGUpIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgPyBgJHt0aGlzLl9kYXRhfSYke2RhdGF9YCA6IGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEgPSAodGhpcy5fZGF0YSB8fCAnJykgKyBkYXRhO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGlmICghaXNPYmplY3RfIHx8IHRoaXMuX2lzSG9zdChkYXRhKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZGVmYXVsdCB0byBqc29uXG4gIGlmICghdHlwZSkgdGhpcy50eXBlKCdqc29uJyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTb3J0IGBxdWVyeXN0cmluZ2AgYnkgdGhlIHNvcnQgZnVuY3Rpb25cbiAqXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICAgLy8gZGVmYXVsdCBvcmRlclxuICogICAgICAgcmVxdWVzdC5nZXQoJy91c2VyJylcbiAqICAgICAgICAgLnF1ZXJ5KCduYW1lPU5pY2snKVxuICogICAgICAgICAucXVlcnkoJ3NlYXJjaD1NYW5ueScpXG4gKiAgICAgICAgIC5zb3J0UXVlcnkoKVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIGN1c3RvbWl6ZWQgc29ydCBmdW5jdGlvblxuICogICAgICAgcmVxdWVzdC5nZXQoJy91c2VyJylcbiAqICAgICAgICAgLnF1ZXJ5KCduYW1lPU5pY2snKVxuICogICAgICAgICAucXVlcnkoJ3NlYXJjaD1NYW5ueScpXG4gKiAgICAgICAgIC5zb3J0UXVlcnkoZnVuY3Rpb24oYSwgYil7XG4gKiAgICAgICAgICAgcmV0dXJuIGEubGVuZ3RoIC0gYi5sZW5ndGg7XG4gKiAgICAgICAgIH0pXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNvcnRcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuc29ydFF1ZXJ5ID0gZnVuY3Rpb24gKHNvcnQpIHtcbiAgLy8gX3NvcnQgZGVmYXVsdCB0byB0cnVlIGJ1dCBvdGhlcndpc2UgY2FuIGJlIGEgZnVuY3Rpb24gb3IgYm9vbGVhblxuICB0aGlzLl9zb3J0ID0gdHlwZW9mIHNvcnQgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IHNvcnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDb21wb3NlIHF1ZXJ5c3RyaW5nIHRvIGFwcGVuZCB0byByZXEudXJsXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fZmluYWxpemVRdWVyeVN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcXVlcnkgPSB0aGlzLl9xdWVyeS5qb2luKCcmJyk7XG4gIGlmIChxdWVyeSkge1xuICAgIHRoaXMudXJsICs9ICh0aGlzLnVybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nKSArIHF1ZXJ5O1xuICB9XG5cbiAgdGhpcy5fcXVlcnkubGVuZ3RoID0gMDsgLy8gTWFrZXMgdGhlIGNhbGwgaWRlbXBvdGVudFxuXG4gIGlmICh0aGlzLl9zb3J0KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IHF1ZXJ5QXJyYXkgPSB0aGlzLnVybC5zbGljZShpbmRleCArIDEpLnNwbGl0KCcmJyk7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuX3NvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcXVlcnlBcnJheS5zb3J0KHRoaXMuX3NvcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlBcnJheS5zb3J0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXJsID0gdGhpcy51cmwuc2xpY2UoMCwgaW5kZXgpICsgJz8nICsgcXVlcnlBcnJheS5qb2luKCcmJyk7XG4gICAgfVxuICB9XG59O1xuXG4vLyBGb3IgYmFja3dhcmRzIGNvbXBhdCBvbmx5XG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX2FwcGVuZFF1ZXJ5U3RyaW5nID0gKCkgPT4ge1xuICBjb25zb2xlLndhcm4oJ1Vuc3VwcG9ydGVkJyk7XG59O1xuXG4vKipcbiAqIEludm9rZSBjYWxsYmFjayB3aXRoIHRpbWVvdXQgZXJyb3IuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl90aW1lb3V0RXJyb3IgPSBmdW5jdGlvbiAocmVhc29uLCB0aW1lb3V0LCBlcnJubykge1xuICBpZiAodGhpcy5fYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGAke3JlYXNvbiArIHRpbWVvdXR9bXMgZXhjZWVkZWRgKTtcbiAgZXJyb3IudGltZW91dCA9IHRpbWVvdXQ7XG4gIGVycm9yLmNvZGUgPSAnRUNPTk5BQk9SVEVEJztcbiAgZXJyb3IuZXJybm8gPSBlcnJubztcbiAgdGhpcy50aW1lZG91dCA9IHRydWU7XG4gIHRoaXMudGltZWRvdXRFcnJvciA9IGVycm9yO1xuICB0aGlzLmFib3J0KCk7XG4gIHRoaXMuY2FsbGJhY2soZXJyb3IpO1xufTtcblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9zZXRUaW1lb3V0cyA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgLy8gZGVhZGxpbmVcbiAgaWYgKHRoaXMuX3RpbWVvdXQgJiYgIXRoaXMuX3RpbWVyKSB7XG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNlbGYuX3RpbWVvdXRFcnJvcignVGltZW91dCBvZiAnLCBzZWxmLl90aW1lb3V0LCAnRVRJTUUnKTtcbiAgICB9LCB0aGlzLl90aW1lb3V0KTtcbiAgfVxuXG4gIC8vIHJlc3BvbnNlIHRpbWVvdXRcbiAgaWYgKHRoaXMuX3Jlc3BvbnNlVGltZW91dCAmJiAhdGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIpIHtcbiAgICB0aGlzLl9yZXNwb25zZVRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2VsZi5fdGltZW91dEVycm9yKFxuICAgICAgICAnUmVzcG9uc2UgdGltZW91dCBvZiAnLFxuICAgICAgICBzZWxmLl9yZXNwb25zZVRpbWVvdXQsXG4gICAgICAgICdFVElNRURPVVQnXG4gICAgICApO1xuICAgIH0sIHRoaXMuX3Jlc3BvbnNlVGltZW91dCk7XG4gIH1cbn07XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogRXhwb3NlIGBSZXNwb25zZUJhc2VgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gUmVzcG9uc2VCYXNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlc3BvbnNlQmFzZWAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBSZXNwb25zZUJhc2UoKSB7fVxuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGBmaWVsZGAgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlc3BvbnNlQmFzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gIHJldHVybiB0aGlzLmhlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbn07XG5cbi8qKlxuICogU2V0IGhlYWRlciByZWxhdGVkIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGAudHlwZWAgdGhlIGNvbnRlbnQgdHlwZSB3aXRob3V0IHBhcmFtc1xuICpcbiAqIEEgcmVzcG9uc2Ugb2YgXCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIlxuICogd2lsbCBwcm92aWRlIHlvdSB3aXRoIGEgYC50eXBlYCBvZiBcInRleHQvcGxhaW5cIi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZUJhc2UucHJvdG90eXBlLl9zZXRIZWFkZXJQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGhlYWRlcikge1xuICAvLyBUT0RPOiBtb2FyIVxuICAvLyBUT0RPOiBtYWtlIHRoaXMgYSB1dGlsXG5cbiAgLy8gY29udGVudC10eXBlXG4gIGNvbnN0IGN0ID0gaGVhZGVyWydjb250ZW50LXR5cGUnXSB8fCAnJztcbiAgdGhpcy50eXBlID0gdXRpbHMudHlwZShjdCk7XG5cbiAgLy8gcGFyYW1zXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSB1dGlscy5wYXJhbXMoY3QpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbWV0ZXJzLCBrZXkpKVxuICAgICAgdGhpc1trZXldID0gcGFyYW1ldGVyc1trZXldO1xuICB9XG5cbiAgdGhpcy5saW5rcyA9IHt9O1xuXG4gIC8vIGxpbmtzXG4gIHRyeSB7XG4gICAgaWYgKGhlYWRlci5saW5rKSB7XG4gICAgICB0aGlzLmxpbmtzID0gdXRpbHMucGFyc2VMaW5rcyhoZWFkZXIubGluayk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxufTtcblxuLyoqXG4gKiBTZXQgZmxhZ3Mgc3VjaCBhcyBgLm9rYCBiYXNlZCBvbiBgc3RhdHVzYC5cbiAqXG4gKiBGb3IgZXhhbXBsZSBhIDJ4eCByZXNwb25zZSB3aWxsIGdpdmUgeW91IGEgYC5va2Agb2YgX190cnVlX19cbiAqIHdoZXJlYXMgNXh4IHdpbGwgYmUgX19mYWxzZV9fIGFuZCBgLmVycm9yYCB3aWxsIGJlIF9fdHJ1ZV9fLiBUaGVcbiAqIGAuY2xpZW50RXJyb3JgIGFuZCBgLnNlcnZlckVycm9yYCBhcmUgYWxzbyBhdmFpbGFibGUgdG8gYmUgbW9yZVxuICogc3BlY2lmaWMsIGFuZCBgLnN0YXR1c1R5cGVgIGlzIHRoZSBjbGFzcyBvZiBlcnJvciByYW5naW5nIGZyb20gMS4uNVxuICogc29tZXRpbWVzIHVzZWZ1bCBmb3IgbWFwcGluZyByZXNwb25kIGNvbG9ycyBldGMuXG4gKlxuICogXCJzdWdhclwiIHByb3BlcnRpZXMgYXJlIGFsc28gZGVmaW5lZCBmb3IgY29tbW9uIGNhc2VzLiBDdXJyZW50bHkgcHJvdmlkaW5nOlxuICpcbiAqICAgLSAubm9Db250ZW50XG4gKiAgIC0gLmJhZFJlcXVlc3RcbiAqICAgLSAudW5hdXRob3JpemVkXG4gKiAgIC0gLm5vdEFjY2VwdGFibGVcbiAqICAgLSAubm90Rm91bmRcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZUJhc2UucHJvdG90eXBlLl9zZXRTdGF0dXNQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICBjb25zdCB0eXBlID0gTWF0aC50cnVuYyhzdGF0dXMgLyAxMDApO1xuXG4gIC8vIHN0YXR1cyAvIGNsYXNzXG4gIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgdGhpcy5zdGF0dXMgPSB0aGlzLnN0YXR1c0NvZGU7XG4gIHRoaXMuc3RhdHVzVHlwZSA9IHR5cGU7XG5cbiAgLy8gYmFzaWNzXG4gIHRoaXMuaW5mbyA9IHR5cGUgPT09IDE7XG4gIHRoaXMub2sgPSB0eXBlID09PSAyO1xuICB0aGlzLnJlZGlyZWN0ID0gdHlwZSA9PT0gMztcbiAgdGhpcy5jbGllbnRFcnJvciA9IHR5cGUgPT09IDQ7XG4gIHRoaXMuc2VydmVyRXJyb3IgPSB0eXBlID09PSA1O1xuICB0aGlzLmVycm9yID0gdHlwZSA9PT0gNCB8fCB0eXBlID09PSA1ID8gdGhpcy50b0Vycm9yKCkgOiBmYWxzZTtcblxuICAvLyBzdWdhclxuICB0aGlzLmNyZWF0ZWQgPSBzdGF0dXMgPT09IDIwMTtcbiAgdGhpcy5hY2NlcHRlZCA9IHN0YXR1cyA9PT0gMjAyO1xuICB0aGlzLm5vQ29udGVudCA9IHN0YXR1cyA9PT0gMjA0O1xuICB0aGlzLmJhZFJlcXVlc3QgPSBzdGF0dXMgPT09IDQwMDtcbiAgdGhpcy51bmF1dGhvcml6ZWQgPSBzdGF0dXMgPT09IDQwMTtcbiAgdGhpcy5ub3RBY2NlcHRhYmxlID0gc3RhdHVzID09PSA0MDY7XG4gIHRoaXMuZm9yYmlkZGVuID0gc3RhdHVzID09PSA0MDM7XG4gIHRoaXMubm90Rm91bmQgPSBzdGF0dXMgPT09IDQwNDtcbiAgdGhpcy51bnByb2Nlc3NhYmxlRW50aXR5ID0gc3RhdHVzID09PSA0MjI7XG59O1xuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIG1pbWUgdHlwZSBmb3IgdGhlIGdpdmVuIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMudHlwZSA9IChzdHJpbmdfKSA9PiBzdHJpbmdfLnNwbGl0KC8gKjsgKi8pLnNoaWZ0KCk7XG5cbi8qKlxuICogUmV0dXJuIGhlYWRlciBmaWVsZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMucGFyYW1zID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IG9iamVjdCA9IHt9O1xuICBmb3IgKGNvbnN0IHN0cmluZ18gb2YgdmFsdWUuc3BsaXQoLyAqOyAqLykpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHN0cmluZ18uc3BsaXQoLyAqPSAqLyk7XG4gICAgY29uc3Qga2V5ID0gcGFydHMuc2hpZnQoKTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnRzLnNoaWZ0KCk7XG5cbiAgICBpZiAoa2V5ICYmIHZhbHVlKSBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cbi8qKlxuICogUGFyc2UgTGluayBoZWFkZXIgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMucGFyc2VMaW5rcyA9ICh2YWx1ZSkgPT4ge1xuICBjb25zdCBvYmplY3QgPSB7fTtcbiAgZm9yIChjb25zdCBzdHJpbmdfIG9mIHZhbHVlLnNwbGl0KC8gKiwgKi8pKSB7XG4gICAgY29uc3QgcGFydHMgPSBzdHJpbmdfLnNwbGl0KC8gKjsgKi8pO1xuICAgIGNvbnN0IHVybCA9IHBhcnRzWzBdLnNsaWNlKDEsIC0xKTtcbiAgICBjb25zdCByZWwgPSBwYXJ0c1sxXS5zcGxpdCgvICo9ICovKVsxXS5zbGljZSgxLCAtMSk7XG4gICAgb2JqZWN0W3JlbF0gPSB1cmw7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufTtcblxuLyoqXG4gKiBTdHJpcCBjb250ZW50IHJlbGF0ZWQgZmllbGRzIGZyb20gYGhlYWRlcmAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fSBoZWFkZXJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY2xlYW5IZWFkZXIgPSAoaGVhZGVyLCBjaGFuZ2VzT3JpZ2luKSA9PiB7XG4gIGRlbGV0ZSBoZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICBkZWxldGUgaGVhZGVyWydjb250ZW50LWxlbmd0aCddO1xuICBkZWxldGUgaGVhZGVyWyd0cmFuc2Zlci1lbmNvZGluZyddO1xuICBkZWxldGUgaGVhZGVyLmhvc3Q7XG4gIC8vIHNlY3VpcnR5XG4gIGlmIChjaGFuZ2VzT3JpZ2luKSB7XG4gICAgZGVsZXRlIGhlYWRlci5hdXRob3JpemF0aW9uO1xuICAgIGRlbGV0ZSBoZWFkZXIuY29va2llO1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlcjtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZXhwb3J0cy5pc09iamVjdCA9IChvYmplY3QpID0+IHtcbiAgcmV0dXJuIG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jztcbn07XG5cbi8qKlxuICogT2JqZWN0Lmhhc093biBmYWxsYmFjay9wb2x5ZmlsbC5cbiAqXG4gKiBAdHlwZSB7KG9iamVjdDogb2JqZWN0LCBwcm9wZXJ0eTogc3RyaW5nKSA9PiBib29sZWFufSBvYmplY3RcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5leHBvcnRzLmhhc093biA9XG4gIE9iamVjdC5oYXNPd24gfHxcbiAgZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3IE9iamVjdChvYmplY3QpLCBwcm9wZXJ0eSk7XG4gIH07XG5cbmV4cG9ydHMubWl4aW4gPSAodGFyZ2V0LCBzb3VyY2UpID0+IHtcbiAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGV4cG9ydHMuaGFzT3duKHNvdXJjZSwga2V5KSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRvQXJyYXlcblxuZnVuY3Rpb24gdG9BcnJheShsaXN0LCBpbmRleCkge1xuICAgIHZhciBhcnJheSA9IFtdXG5cbiAgICBpbmRleCA9IGluZGV4IHx8IDBcblxuICAgIGZvciAodmFyIGkgPSBpbmRleCB8fCAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJheVtpIC0gaW5kZXhdID0gbGlzdFtpXVxuICAgIH1cblxuICAgIHJldHVybiBhcnJheVxufVxuIiwiXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZGVwcmVjYXRlO1xuXG4vKipcbiAqIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4gKiBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2Uubm9EZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudGhyb3dEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCB0aHJvdyBhbiBFcnJvciB3aGVuIGludm9rZWQuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS50cmFjZURlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGRlcHJlY2F0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIGludm9rZSBgY29uc29sZS50cmFjZSgpYCBpbnN0ZWFkIG9mIGBjb25zb2xlLmVycm9yKClgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gdGhlIGZ1bmN0aW9uIHRvIGRlcHJlY2F0ZVxuICogQHBhcmFtIHtTdHJpbmd9IG1zZyAtIHRoZSBzdHJpbmcgdG8gcHJpbnQgdG8gdGhlIGNvbnNvbGUgd2hlbiBgZm5gIGlzIGludm9rZWRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gYSBuZXcgXCJkZXByZWNhdGVkXCIgdmVyc2lvbiBvZiBgZm5gXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZSAoZm4sIG1zZykge1xuICBpZiAoY29uZmlnKCdub0RlcHJlY2F0aW9uJykpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChjb25maWcoJ3Rocm93RGVwcmVjYXRpb24nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnKCd0cmFjZURlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBgbG9jYWxTdG9yYWdlYCBmb3IgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBgbmFtZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29uZmlnIChuYW1lKSB7XG4gIC8vIGFjY2Vzc2luZyBnbG9iYWwubG9jYWxTdG9yYWdlIGNhbiB0cmlnZ2VyIGEgRE9NRXhjZXB0aW9uIGluIHNhbmRib3hlZCBpZnJhbWVzXG4gIHRyeSB7XG4gICAgaWYgKCFnbG9iYWwubG9jYWxTdG9yYWdlKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHZhbCA9IGdsb2JhbC5sb2NhbFN0b3JhZ2VbbmFtZV07XG4gIGlmIChudWxsID09IHZhbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm9kZS9uby1kZXByZWNhdGVkLWFwaSAqL1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsUm91dGVzXG5cbnZhciB0cmFuc2Zvcm0gPSBmdW5jdGlvbiAodHJpZSwgcHJldmlvdXMpIHtcbiAgdmFyIHByZXYgPSBwcmV2aW91cyB8fCAnLydcbiAgdmFyIHJvdXRlcyA9IHt9XG4gIHZhciBub2RlcyA9IHRyaWUubm9kZXNcbiAgT2JqZWN0LmtleXMobm9kZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwYXRoID0gKHByZXYgPT09ICcvJyA/IHByZXYgOiBwcmV2ICsgJy8nKSArIChrZXkgPT09ICckJCcgPyAnOicgKyB0cmllLm5hbWUgOiBrZXkpXG4gICAgdmFyIGNiID0gbm9kZXNba2V5XS5jYlxuICAgIGlmIChjYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByb3V0ZXNbcGF0aF0gPSBjYlxuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMobm9kZXNba2V5XS5ub2RlcykubGVuZ3RoICE9PSAwKSB7XG4gICAgICB2YXIgb2JqID0gdHJhbnNmb3JtKG5vZGVzW2tleV0sIHBhdGgpXG4gICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgcm91dGVzW3JdID0gb2JqW3JdXG4gICAgICB9KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHJvdXRlc1xufVxuXG4vLyB3YWxrIGEgd2F5ZmFyZXIgdHJpZVxuLy8gKG9iaiwgZm4pIC0+IG51bGxcbmZ1bmN0aW9uIGdldEFsbFJvdXRlcyAocm91dGVyKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygcm91dGVyLCAnZnVuY3Rpb24nLCAnd2F5ZmFyZXIuZ2V0QWxsUm91dGVzOiByb3V0ZXIgc2hvdWxkIGJlIGFuIGZ1bmN0aW9uJylcblxuICB2YXIgdHJpZSA9IHJvdXRlci5fdHJpZVxuICBhc3NlcnQuZXF1YWwodHlwZW9mIHRyaWUsICdvYmplY3QnLCAnd2F5ZmFyZXIuZ2V0QWxsUm91dGVzOiB0cmllIHNob3VsZCBiZSBhbiBvYmplY3QnKVxuXG4gIHZhciB0cmVlID0gdHJpZS50cmllXG4gIHJldHVybiB0cmFuc2Zvcm0odHJlZSlcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxudmFyIHRyaWUgPSByZXF1aXJlKCcuL3RyaWUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IFdheWZhcmVyXG5cbi8vIGNyZWF0ZSBhIHJvdXRlclxuLy8gc3RyIC0+IG9ialxuZnVuY3Rpb24gV2F5ZmFyZXIgKGRmdCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV2F5ZmFyZXIpKSByZXR1cm4gbmV3IFdheWZhcmVyKGRmdClcblxuICB2YXIgX2RlZmF1bHQgPSAoZGZ0IHx8ICcnKS5yZXBsYWNlKC9eXFwvLywgJycpXG4gIHZhciBfdHJpZSA9IHRyaWUoKVxuXG4gIGVtaXQuX3RyaWUgPSBfdHJpZVxuICBlbWl0Lm9uID0gb25cbiAgZW1pdC5lbWl0ID0gZW1pdFxuICBlbWl0Lm1hdGNoID0gbWF0Y2hcbiAgZW1pdC5fd2F5ZmFyZXIgPSB0cnVlXG5cbiAgcmV0dXJuIGVtaXRcblxuICAvLyBkZWZpbmUgYSByb3V0ZVxuICAvLyAoc3RyLCBmbikgLT4gb2JqXG4gIGZ1bmN0aW9uIG9uIChyb3V0ZSwgY2IpIHtcbiAgICBhc3NlcnQuZXF1YWwodHlwZW9mIHJvdXRlLCAnc3RyaW5nJylcbiAgICBhc3NlcnQuZXF1YWwodHlwZW9mIGNiLCAnZnVuY3Rpb24nKVxuXG4gICAgcm91dGUgPSByb3V0ZSB8fCAnLydcblxuICAgIGlmIChjYi5fd2F5ZmFyZXIgJiYgY2IuX3RyaWUpIHtcbiAgICAgIF90cmllLm1vdW50KHJvdXRlLCBjYi5fdHJpZS50cmllKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm9kZSA9IF90cmllLmNyZWF0ZShyb3V0ZSlcbiAgICAgIG5vZGUuY2IgPSBjYlxuICAgICAgbm9kZS5yb3V0ZSA9IHJvdXRlXG4gICAgfVxuXG4gICAgcmV0dXJuIGVtaXRcbiAgfVxuXG4gIC8vIG1hdGNoIGFuZCBjYWxsIGEgcm91dGVcbiAgLy8gKHN0ciwgb2JqPykgLT4gbnVsbFxuICBmdW5jdGlvbiBlbWl0IChyb3V0ZSkge1xuICAgIHZhciBtYXRjaGVkID0gbWF0Y2gocm91dGUpXG5cbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKVxuICAgIGFyZ3NbMF0gPSBtYXRjaGVkLnBhcmFtc1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVkLmNiLmFwcGx5KG1hdGNoZWQuY2IsIGFyZ3MpXG4gIH1cblxuICBmdW5jdGlvbiBtYXRjaCAocm91dGUpIHtcbiAgICBhc3NlcnQubm90RXF1YWwocm91dGUsIHVuZGVmaW5lZCwgXCIncm91dGUnIG11c3QgYmUgZGVmaW5lZFwiKVxuXG4gICAgdmFyIG1hdGNoZWQgPSBfdHJpZS5tYXRjaChyb3V0ZSlcbiAgICBpZiAobWF0Y2hlZCAmJiBtYXRjaGVkLmNiKSByZXR1cm4gbmV3IFJvdXRlKG1hdGNoZWQpXG5cbiAgICB2YXIgZGZ0ID0gX3RyaWUubWF0Y2goX2RlZmF1bHQpXG4gICAgaWYgKGRmdCAmJiBkZnQuY2IpIHJldHVybiBuZXcgUm91dGUoZGZ0KVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwicm91dGUgJ1wiICsgcm91dGUgKyBcIicgZGlkIG5vdCBtYXRjaFwiKVxuICB9XG5cbiAgZnVuY3Rpb24gUm91dGUgKG1hdGNoZWQpIHtcbiAgICB0aGlzLmNiID0gbWF0Y2hlZC5jYlxuICAgIHRoaXMucm91dGUgPSBtYXRjaGVkLnJvdXRlXG4gICAgdGhpcy5wYXJhbXMgPSBtYXRjaGVkLnBhcmFtc1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxubW9kdWxlLmV4cG9ydHMgPSBUcmllXG5cbi8vIGNyZWF0ZSBhIG5ldyB0cmllXG4vLyBudWxsIC0+IG9ialxuZnVuY3Rpb24gVHJpZSAoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmllKSkgcmV0dXJuIG5ldyBUcmllKClcbiAgdGhpcy50cmllID0geyBub2Rlczoge30gfVxufVxuXG4vLyBjcmVhdGUgYSBub2RlIG9uIHRoZSB0cmllIGF0IHJvdXRlXG4vLyBhbmQgcmV0dXJuIGEgbm9kZVxuLy8gc3RyIC0+IG9ialxuVHJpZS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKHJvdXRlKSB7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygcm91dGUsICdzdHJpbmcnLCAncm91dGUgc2hvdWxkIGJlIGEgc3RyaW5nJylcbiAgLy8gc3RyaXAgbGVhZGluZyAnLycgYW5kIHNwbGl0IHJvdXRlc1xuICB2YXIgcm91dGVzID0gcm91dGUucmVwbGFjZSgvXlxcLy8sICcnKS5zcGxpdCgnLycpXG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZSAoaW5kZXgsIHRyaWUpIHtcbiAgICB2YXIgdGhpc1JvdXRlID0gKGhhcyhyb3V0ZXMsIGluZGV4KSAmJiByb3V0ZXNbaW5kZXhdKVxuICAgIGlmICh0aGlzUm91dGUgPT09IGZhbHNlKSByZXR1cm4gdHJpZVxuXG4gICAgdmFyIG5vZGUgPSBudWxsXG4gICAgaWYgKC9eOnxeXFwqLy50ZXN0KHRoaXNSb3V0ZSkpIHtcbiAgICAgIC8vIGlmIG5vZGUgaXMgYSBuYW1lIG1hdGNoLCBzZXQgbmFtZSBhbmQgYXBwZW5kIHRvICc6JyBub2RlXG4gICAgICBpZiAoIWhhcyh0cmllLm5vZGVzLCAnJCQnKSkge1xuICAgICAgICBub2RlID0geyBub2Rlczoge30gfVxuICAgICAgICB0cmllLm5vZGVzLiQkID0gbm9kZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IHRyaWUubm9kZXMuJCRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNSb3V0ZVswXSA9PT0gJyonKSB7XG4gICAgICAgIHRyaWUud2lsZGNhcmQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIHRyaWUubmFtZSA9IHRoaXNSb3V0ZS5yZXBsYWNlKC9eOnxeXFwqLywgJycpXG4gICAgfSBlbHNlIGlmICghaGFzKHRyaWUubm9kZXMsIHRoaXNSb3V0ZSkpIHtcbiAgICAgIG5vZGUgPSB7IG5vZGVzOiB7fSB9XG4gICAgICB0cmllLm5vZGVzW3RoaXNSb3V0ZV0gPSBub2RlXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSB0cmllLm5vZGVzW3RoaXNSb3V0ZV1cbiAgICB9XG5cbiAgICAvLyB3ZSBtdXN0IHJlY3Vyc2UgZGVlcGVyXG4gICAgcmV0dXJuIGNyZWF0ZU5vZGUoaW5kZXggKyAxLCBub2RlKVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZU5vZGUoMCwgdGhpcy50cmllKVxufVxuXG4vLyBtYXRjaCBhIHJvdXRlIG9uIHRoZSB0cmllXG4vLyBhbmQgcmV0dXJuIHRoZSBub2RlXG4vLyBzdHIgLT4gb2JqXG5UcmllLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIChyb3V0ZSkge1xuICBhc3NlcnQuZXF1YWwodHlwZW9mIHJvdXRlLCAnc3RyaW5nJywgJ3JvdXRlIHNob3VsZCBiZSBhIHN0cmluZycpXG5cbiAgdmFyIHJvdXRlcyA9IHJvdXRlLnJlcGxhY2UoL15cXC8vLCAnJykuc3BsaXQoJy8nKVxuICB2YXIgcGFyYW1zID0ge31cblxuICBmdW5jdGlvbiBzZWFyY2ggKGluZGV4LCB0cmllKSB7XG4gICAgLy8gZWl0aGVyIHRoZXJlJ3Mgbm8gbWF0Y2gsIG9yIHdlJ3JlIGRvbmUgc2VhcmNoaW5nXG4gICAgaWYgKHRyaWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHZhciB0aGlzUm91dGUgPSByb3V0ZXNbaW5kZXhdXG4gICAgaWYgKHRoaXNSb3V0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJpZVxuXG4gICAgaWYgKGhhcyh0cmllLm5vZGVzLCB0aGlzUm91dGUpKSB7XG4gICAgICAvLyBtYXRjaCByZWd1bGFyIHJvdXRlcyBmaXJzdFxuICAgICAgcmV0dXJuIHNlYXJjaChpbmRleCArIDEsIHRyaWUubm9kZXNbdGhpc1JvdXRlXSlcbiAgICB9IGVsc2UgaWYgKHRyaWUubmFtZSkge1xuICAgICAgLy8gbWF0Y2ggbmFtZWQgcm91dGVzXG4gICAgICB0cnkge1xuICAgICAgICBwYXJhbXNbdHJpZS5uYW1lXSA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzUm91dGUpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBzZWFyY2goaW5kZXgsIHVuZGVmaW5lZClcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWFyY2goaW5kZXggKyAxLCB0cmllLm5vZGVzLiQkKVxuICAgIH0gZWxzZSBpZiAodHJpZS53aWxkY2FyZCkge1xuICAgICAgLy8gbWF0Y2ggd2lsZGNhcmRzXG4gICAgICB0cnkge1xuICAgICAgICBwYXJhbXMud2lsZGNhcmQgPSBkZWNvZGVVUklDb21wb25lbnQocm91dGVzLnNsaWNlKGluZGV4KS5qb2luKCcvJykpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBzZWFyY2goaW5kZXgsIHVuZGVmaW5lZClcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBlYXJseSwgb3IgZWxzZSBzZWFyY2ggbWF5IGtlZXAgcmVjdXJzaW5nIHRocm91Z2ggdGhlIHdpbGRjYXJkXG4gICAgICByZXR1cm4gdHJpZS5ub2Rlcy4kJFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBubyBtYXRjaGVzIGZvdW5kXG4gICAgICByZXR1cm4gc2VhcmNoKGluZGV4ICsgMSlcbiAgICB9XG4gIH1cblxuICB2YXIgbm9kZSA9IHNlYXJjaCgwLCB0aGlzLnRyaWUpXG5cbiAgaWYgKCFub2RlKSByZXR1cm4gdW5kZWZpbmVkXG4gIG5vZGUgPSBPYmplY3QuYXNzaWduKHt9LCBub2RlKVxuICBub2RlLnBhcmFtcyA9IHBhcmFtc1xuICByZXR1cm4gbm9kZVxufVxuXG4vLyBtb3VudCBhIHRyaWUgb250byBhIG5vZGUgYXQgcm91dGVcbi8vIChzdHIsIG9iaikgLT4gbnVsbFxuVHJpZS5wcm90b3R5cGUubW91bnQgPSBmdW5jdGlvbiAocm91dGUsIHRyaWUpIHtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiByb3V0ZSwgJ3N0cmluZycsICdyb3V0ZSBzaG91bGQgYmUgYSBzdHJpbmcnKVxuICBhc3NlcnQuZXF1YWwodHlwZW9mIHRyaWUsICdvYmplY3QnLCAndHJpZSBzaG91bGQgYmUgYSBvYmplY3QnKVxuXG4gIHZhciBzcGxpdCA9IHJvdXRlLnJlcGxhY2UoL15cXC8vLCAnJykuc3BsaXQoJy8nKVxuICB2YXIgbm9kZSA9IG51bGxcbiAgdmFyIGtleSA9IG51bGxcblxuICBpZiAoc3BsaXQubGVuZ3RoID09PSAxKSB7XG4gICAga2V5ID0gc3BsaXRbMF1cbiAgICBub2RlID0gdGhpcy5jcmVhdGUoa2V5KVxuICB9IGVsc2Uge1xuICAgIHZhciBoZWFkID0gc3BsaXQuam9pbignLycpXG4gICAga2V5ID0gc3BsaXRbMF1cbiAgICBub2RlID0gdGhpcy5jcmVhdGUoaGVhZClcbiAgfVxuXG4gIE9iamVjdC5hc3NpZ24obm9kZS5ub2RlcywgdHJpZS5ub2RlcylcbiAgaWYgKHRyaWUubmFtZSkgbm9kZS5uYW1lID0gdHJpZS5uYW1lXG5cbiAgLy8gZGVsZWdhdGUgcHJvcGVydGllcyBmcm9tICcvJyB0byB0aGUgbmV3IG5vZGVcbiAgLy8gJy8nIGNhbm5vdCBiZSByZWFjaGVkIG9uY2UgbW91bnRlZFxuICBpZiAobm9kZS5ub2Rlc1snJ10pIHtcbiAgICBPYmplY3Qua2V5cyhub2RlLm5vZGVzWycnXSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoa2V5ID09PSAnbm9kZXMnKSByZXR1cm5cbiAgICAgIG5vZGVba2V5XSA9IG5vZGUubm9kZXNbJyddW2tleV1cbiAgICB9KVxuICAgIE9iamVjdC5hc3NpZ24obm9kZS5ub2Rlcywgbm9kZS5ub2Rlc1snJ10ubm9kZXMpXG4gICAgZGVsZXRlIG5vZGUubm9kZXNbJyddLm5vZGVzXG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzIChvYmplY3QsIHByb3BlcnR5KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSlcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFscGhhYmV0ID0gJzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LV8nLnNwbGl0KCcnKVxuICAsIGxlbmd0aCA9IDY0XG4gICwgbWFwID0ge31cbiAgLCBzZWVkID0gMFxuICAsIGkgPSAwXG4gICwgcHJldjtcblxuLyoqXG4gKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzcGVjaWZpZWQgbnVtYmVyLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBudW0gVGhlIG51bWJlciB0byBjb252ZXJ0LlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gZW5jb2RlKG51bSkge1xuICB2YXIgZW5jb2RlZCA9ICcnO1xuXG4gIGRvIHtcbiAgICBlbmNvZGVkID0gYWxwaGFiZXRbbnVtICUgbGVuZ3RoXSArIGVuY29kZWQ7XG4gICAgbnVtID0gTWF0aC5mbG9vcihudW0gLyBsZW5ndGgpO1xuICB9IHdoaWxlIChudW0gPiAwKTtcblxuICByZXR1cm4gZW5jb2RlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGludGVnZXIgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgaW50ZWdlciB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgc3RyaW5nLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gZGVjb2RlKHN0cikge1xuICB2YXIgZGVjb2RlZCA9IDA7XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGRlY29kZWQgPSBkZWNvZGVkICogbGVuZ3RoICsgbWFwW3N0ci5jaGFyQXQoaSldO1xuICB9XG5cbiAgcmV0dXJuIGRlY29kZWQ7XG59XG5cbi8qKlxuICogWWVhc3Q6IEEgdGlueSBncm93aW5nIGlkIGdlbmVyYXRvci5cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBBIHVuaXF1ZSBpZC5cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHllYXN0KCkge1xuICB2YXIgbm93ID0gZW5jb2RlKCtuZXcgRGF0ZSgpKTtcblxuICBpZiAobm93ICE9PSBwcmV2KSByZXR1cm4gc2VlZCA9IDAsIHByZXYgPSBub3c7XG4gIHJldHVybiBub3cgKycuJysgZW5jb2RlKHNlZWQrKyk7XG59XG5cbi8vXG4vLyBNYXAgZWFjaCBjaGFyYWN0ZXIgdG8gaXRzIGluZGV4LlxuLy9cbmZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIG1hcFthbHBoYWJldFtpXV0gPSBpO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBgeWVhc3RgLCBgZW5jb2RlYCBhbmQgYGRlY29kZWAgZnVuY3Rpb25zLlxuLy9cbnllYXN0LmVuY29kZSA9IGVuY29kZTtcbnllYXN0LmRlY29kZSA9IGRlY29kZTtcbm1vZHVsZS5leHBvcnRzID0geWVhc3Q7XG4iLCIvLyd1c2UgYmFiZWwnXG5cbi8vIGNvbnN0IHA1bGliID0gcmVxdWlyZSgncDUnKVxuXG5jbGFzcyBQNSBleHRlbmRzIHA1e1xuICBjb25zdHJ1Y3RvciAoe1xuICAgIHdpZHRoID0gd2luZG93LmlubmVyV2lkdGgsXG4gICAgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0LFxuICAgIG1vZGUgPSAnUDJEJ1xuICB9ID0ge30pIHtcbiAgICAvL2NvbnNvbGUubG9nKCdjcmVhdGVpbmcgY2FudmFzJywgd2lkdGgsIGhlaWdodCwgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodClcbiAgICBzdXBlcigoIHAgKSA9PiB7XG4gICAgICBwLnNldHVwID0gKCkgPT4geyBwLmNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0LCBwW21vZGVdKSB9XG4gIC8vICAgIHAuc2V0dXAgPSAoKSA9PiB7IHAuY3JlYXRlQ2FudmFzKCkgfVxuICAgICAgcC5kcmF3ID0gKCkgPT4geyB9XG4gICAgfSwgJ2h5ZHJhLXVpJylcbiAgICB0aGlzLndpZHRoID0gd2lkdGhcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodFxuICAgIHRoaXMubW9kZSA9IG1vZGVcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIlxuICAgIHRoaXMuY2FudmFzLnN0eWxlLnRvcCA9IFwiMHB4XCJcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS5sZWZ0ID0gXCIwcHhcIlxuICAgIHRoaXMuY2FudmFzLnN0eWxlLnpJbmRleCA9IC0xXG4gICAgLy8gY29uc29sZS5sb2coJ3A1JywgdGhpcylcbiAgLy8gIHJldHVybiB0aGlzLnA1XG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIlxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICB9XG5cbiAgLy8gcDUgY2xlYXIgZnVuY3Rpb24gbm90IGNvdmVyaW5nIGNhbnZhc1xuICBjbGVhcigpIHtcbiAgICB0aGlzLmRyYXdpbmdDb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUDVcbiIsIi8qIGdsb2JhbHMgc2Vzc2lvblN0b3JhZ2UgKi9cbi8vIEV4dGVuZHMgcnRjLXBhdGNoLWJheSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIG5pY2tuYW1lcyBhbmQgcGVyc2lzdGVudCBzZXNzaW9uIHN0b3JhZ2VcblxudmFyIFBhdGNoQmF5ID0gcmVxdWlyZSgnLi9ydGMtcGF0Y2gtYmF5LmpzJylcbi8vdmFyIFBhdGNoQmF5ID0gcmVxdWlyZSgnLi8uLi8uLi8uLi8uLi9ydGMtcGF0Y2gtYmF5JylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxudmFyIFBCTGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXNzaW9uID0ge31cblxuICAvLyBsb29rdXAgdGFibGVzIGZvciBjb252ZXJ0aW5nIGlkIHRvIG5pY2tuYW1lXG4gIHRoaXMubmlja0Zyb21JZCA9IHt9XG4gIHRoaXMuaWRGcm9tTmljayA9IHt9XG5cbiAgdGhpcy5sb2FkRnJvbVN0b3JhZ2UoKVxufVxuLy8gaW5oZXJpdHMgZnJvbSBQYXRjaEJheSBtb2R1bGVcbmluaGVyaXRzKFBCTGl2ZSwgUGF0Y2hCYXkpXG5cblBCTGl2ZS5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIChzdHJlYW0sIG9wdHMpIHtcbiAgdGhpcy5zZXR0aW5ncyA9IHtcbiAgICBzZXJ2ZXI6IG9wdHMuc2VydmVyIHx8ICdodHRwczovL3BhdGNoLWJheS5nbGl0Y2gubWUvJyxcbiAgICByb29tOiBvcHRzLnJvb20gfHwgJ3BhdGNoLWJheScsXG4gICAgc3RyZWFtOiBzdHJlYW1cbiAgfVxuXG4gIC8vIGNvbnNvbGUubG9nKCdpbml0aWFsaXppbmcgcGF0Y2gtYmF5Jywgc3RyZWFtLCBvcHRzKVxuICB0aGlzLm1ha2VHbG9iYWwgPSBvcHRzLm1ha2VHbG9iYWwgfHwgdHJ1ZVxuICB0aGlzLnNldFBhZ2VUaXRsZSA9IG9wdHMuc2V0VGl0bGUgfHwgdHJ1ZVxuXG4gIGlmICh0aGlzLnNlc3Npb24uaWQpIHRoaXMuc2V0dGluZ3MuaWQgPSB0aGlzLnNlc3Npb24uaWRcblxuICBQYXRjaEJheS5jYWxsKHRoaXMsIHRoaXMuc2V0dGluZ3MpXG5cbiAgaWYgKHRoaXMubWFrZUdsb2JhbCkgd2luZG93LnBiID0gdGhpc1xuXG4gIHRoaXMub24oJ3JlYWR5JywgKCkgPT4ge1xuICAgIGlmICghdGhpcy5uaWNrKSB7XG4gICAgICBpZiAodGhpcy5zZXNzaW9uLm5pY2spIHtcbiAgICAgICAgdGhpcy5zZXROYW1lKHRoaXMuc2Vzc2lvbi5uaWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmlkID0gdGhpcy5pZFxuICAgICAgICB0aGlzLnNldE5hbWUodGhpcy5zZXNzaW9uLmlkKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnY29ubmVjdGVkIHRvIHNlcnZlciAnICsgdGhpcy5zZXR0aW5ncy5zZXJ2ZXIgKyAnIHdpdGggbmFtZSAnICsgdGhpcy5zZXR0aW5ncy5pZClcbiAgfSlcbiAgLy8gcmVjZWl2ZWQgYSBicm9hZGNhc3RcbiAgdGhpcy5vbignYnJvYWRjYXN0JywgdGhpcy5fcHJvY2Vzc0Jyb2FkY2FzdC5iaW5kKHRoaXMpKVxuICB0aGlzLm9uKCduZXcgcGVlcicsIHRoaXMuaGFuZGxlTmV3UGVlci5iaW5kKHRoaXMpKVxuXG4gIHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9ICgpID0+IHtcbiAgICB0aGlzLnNlc3Npb24uaWQgPSB3aW5kb3cucGIuaWRcbiAgICB0aGlzLnNlc3Npb24ubmljayA9IHRoaXMubmlja1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3BiJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZXNzaW9uKSlcbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpc1xuICB0aGlzLm9uKCdzdHJlYW0nLCBmdW5jdGlvbiAoaWQsIHN0cmVhbSkge1xuICAgIGNvbnNvbGUubG9nKCdnb3Qgc3RyZWFtIScsIGlkLCBzdHJlYW0pXG4gICAgY29uc3QgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpXG4gICAgaWYgKCdzcmNPYmplY3QnIGluIHZpZGVvKSB7XG4gICAgICB2aWRlby5zcmNPYmplY3QgPSBzdHJlYW1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXZvaWQgdXNpbmcgdGhpcyBpbiBuZXcgYnJvd3NlcnMsIGFzIGl0IGlzIGdvaW5nIGF3YXkuXG4gICAgICB2aWRlby5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChzdHJlYW0pXG4gICAgfVxuICAvLyAgdmlkZW8uc3JjID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoc3RyZWFtKVxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgKCkgPT4ge1xuICAgICAgLy8gIGNvbnNvbGUubG9nKFwibG9hZGVkIG1ldGEyMlwiKVxuICAgICAgdmlkZW8ucGxheSgpXG4gICAgICBzZWxmLnZpZGVvID0gdmlkZW9cbiAgICAgIHNlbGYuZW1pdCgnZ290IHZpZGVvJywgc2VsZi5uaWNrRnJvbUlkW2lkXSwgdmlkZW8pXG4gICAgfSlcbiAgfSlcbn1cblxuUEJMaXZlLnByb3RvdHlwZS5sb2FkRnJvbVN0b3JhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdwYicpICE9PSBudWxsKSB7XG4gICAgdGhpcy5zZXNzaW9uID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdwYicpKVxuICB9XG59XG5cblBCTGl2ZS5wcm90b3R5cGUuaW5pdFNvdXJjZSA9IGZ1bmN0aW9uIChuaWNrLCBjYWxsYmFjaykge1xuICB0aGlzLmluaXRDb25uZWN0aW9uRnJvbUlkKHRoaXMuaWRGcm9tTmlja1tuaWNrXSwgY2FsbGJhY2spXG4vLyAgdGhpcy5wZWVyc1t0aGlzLmlkRnJvbU5pY2tbbmlja11dLnN0cmVhbUNhbGxiYWNrID0gY2FsbGJhY2tcbn1cblxuLy8gZGVmYXVsdCBuaWNrbmFtZSBpcyBqdXN0IHBlZXIgaWQuXG4vLyB0byBkbzogc2F2ZSBuaWNrbmFtZSBpbmZvcm1hdGlvbiBiZXR3ZWVuIHNlc3Npb25zXG5QQkxpdmUucHJvdG90eXBlLmhhbmRsZU5ld1BlZXIgPSBmdW5jdGlvbiAocGVlcikge1xuICAvLyBjb25zb2xlLmxvZyhcIm5ldyBwZWVyXCIsIHBlZXIpXG4gIHRoaXMubmlja0Zyb21JZFtwZWVyXSA9IHBlZXJcbiAgdGhpcy5pZEZyb21OaWNrW3BlZXJdID0gcGVlclxuICAvLyBjb25zb2xlLmxvZyhcIlRISVMgSVMgVEhFIFBFRVJcIiwgcGVlcilcbiAgLy8gdG8gZG86IG9ubHkgc2VuZCB0byBuZXcgcGVlciwgbm90IHRvIGFsbFxuICBpZiAodGhpcy5uaWNrKSB7XG4gICAgdGhpcy5icm9hZGNhc3Qoe1xuICAgICAgdHlwZTogJ3VwZGF0ZS1uaWNrJyxcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgbmljazogdGhpcy5uaWNrXG4gICAgfSlcbiAgfVxufVxuXG5QQkxpdmUucHJvdG90eXBlLmxpc3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsID0gT2JqZWN0LmtleXModGhpcy5pZEZyb21OaWNrKVxuICBjb25zb2xlLmxvZyhsKVxuICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5pZEZyb21OaWNrKVxufVxuXG4vLyBjaG9vc2UgYW4gaWRlbnRpZnlpbmcgbmFtZVxuUEJMaXZlLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24gKG5pY2spIHtcbiAgdGhpcy5icm9hZGNhc3Qoe1xuICAgIHR5cGU6ICd1cGRhdGUtbmljaycsXG4gICAgaWQ6IHRoaXMuaWQsXG4gICAgbmljazogbmljayxcbiAgICBwcmV2aW91czogdGhpcy5uaWNrXG4gIH0pXG4gIHRoaXMubmljayA9IG5pY2tcbiAgaWYgKHRoaXMuc2V0UGFnZVRpdGxlKSBkb2N1bWVudC50aXRsZSA9IG5pY2tcbn1cblxuUEJMaXZlLnByb3RvdHlwZS5fcHJvY2Vzc0Jyb2FkY2FzdCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGlmIChkYXRhLnR5cGUgPT09ICd1cGRhdGUtbmljaycpIHtcbiAgICBpZiAoZGF0YS5wcmV2aW91cyAhPT0gZGF0YS5uaWNrKSB7XG4gICAgICBkZWxldGUgdGhpcy5pZEZyb21OaWNrW3RoaXMubmlja0Zyb21JZFtkYXRhLmlkXV1cbiAgICAgIHRoaXMubmlja0Zyb21JZFtkYXRhLmlkXSA9IGRhdGEubmlja1xuICAgICAgdGhpcy5pZEZyb21OaWNrW2RhdGEubmlja10gPSBkYXRhLmlkXG4gICAgICBpZiAoZGF0YS5wcmV2aW91cykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGEucHJldmlvdXMgKyAnIGNoYW5nZWQgdG8gJyArIGRhdGEubmljaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ2Nvbm5lY3RlZCB0byAnICsgZGF0YS5uaWNrKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLy8gUEJFeHRlbmRlZC5wcm90b3R5cGUuXG5tb2R1bGUuZXhwb3J0cyA9IFBCTGl2ZVxuIiwiLy8gTW9kdWxlIGZvciBoYW5kbGluZyBjb25uZWN0aW9ucyB0byBtdWx0aXBsZSBwZWVycy5cblxuXG52YXIgaW8gPSByZXF1aXJlKCdzb2NrZXQuaW8tY2xpZW50JylcbnZhciBTaW1wbGVQZWVyID0gcmVxdWlyZSgnc2ltcGxlLXBlZXInKVxudmFyIGV4dGVuZCA9IE9iamVjdC5hc3NpZ25cbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbmNvbnN0IHNob3J0aWQgPSByZXF1aXJlKCdzaG9ydGlkJylcblxudmFyIFBhdGNoQmF5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbi8vIGNvbm5lY3QgdG8gd2Vic29ja2V0IHNpZ25hbGxpbmcgc2VydmVyLiBUbyBETzogZXJyb3IgdmFsaWRhdGlvblxuICB0aGlzLnNpZ25hbGxlciA9IGlvKG9wdGlvbnMuc2VydmVyKVxuXG4gIC8vYXNzaWduIHVuaXF1ZSBpZCB0byB0aGlzIHBlZXIsIG9yIHVzZSBpZCBwYXNzZWQgaW5cblxuICB0aGlzLmlkID0gb3B0aW9ucy5pZCB8fCBzaG9ydGlkLmdlbmVyYXRlKClcblxuICB0aGlzLnN0cmVhbSA9IG9wdGlvbnMuc3RyZWFtIHx8IG51bGxcblxuICAvL29wdGlvbnMgdG8gYmUgc2VudCB0byBzaW1wbGUgcGVlclxuICB0aGlzLl9wZWVyT3B0aW9ucyA9IG9wdGlvbnMucGVlck9wdGlvbnMgfHwge31cbiAgdGhpcy5fcm9vbSA9IG9wdGlvbnMucm9vbVxuXG5cbiAgdGhpcy5zZXR0aW5nc1snc2hhcmVNZWRpYVdoZW5SZXF1ZXN0ZWQnXSA9IHRydWVcbiAgdGhpcy5zZXR0aW5nc1snc2hhcmVNZWRpYVdoZW5Jbml0aWF0aW5nJ10gPSBmYWxzZVxuICB0aGlzLnNldHRpbmdzWydyZXF1ZXN0TWVkaWFXaGVuSW5pdGlhdGluZyddID0gdHJ1ZVxuICB0aGlzLnNldHRpbmdzWydhdXRvY29ubmVjdCddID0gZmFsc2VcblxuICAvL29iamVjdCBjb250YWluaW5nIEFMTCBwZWVycyBpbiByb29tXG4gIHRoaXMucGVlcnMgPSB7fVxuXG4gIC8vb2JqZWN0IGNvbnRhaW5pbmcgcGVlcnMgY29ubmVjdGVkIHZpYSB3ZWJydGNcbiAgdGhpcy5ydGNQZWVycyA9IHt9XG5cbiAgLy8gSGFuZGxlIGV2ZW50cyBmcm9tIHNpZ25hbGxpbmcgc2VydmVyXG4gIHRoaXMuc2lnbmFsbGVyLm9uKCdyZWFkeScsIHRoaXMuX3JlYWR5Rm9yU2lnbmFsbGluZy5iaW5kKHRoaXMpKVxuLy8gIHRoaXMuc2lnbmFsbGVyLm9uKCdwZWVycycsIClcbi8vICB0aGlzLnNpZ25hbGxlci5vbignc2lnbmFsJywgdGhpcy5faGFuZGxlU2lnbmFsLmJpbmQodGhpcykpXG4gIHRoaXMuc2lnbmFsbGVyLm9uKCdtZXNzYWdlJywgdGhpcy5faGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMpKVxuICAvLyBSZWNlaXZlZCBtZXNzYWdlIHZpYSB3ZWJzb2NrZXRzIHRvIGFsbCBwZWVycyBpbiByb29tXG4gIHRoaXMuc2lnbmFsbGVyLm9uKCdicm9hZGNhc3QnLCB0aGlzLl9yZWNlaXZlZEJyb2FkY2FzdC5iaW5kKHRoaXMpKVxuXG4gIC8vIGVtaXQgJ2pvaW4nIGV2ZW50IHRvIHNpZ25hbGxpbmcgc2VydmVyXG4gIHRoaXMuc2lnbmFsbGVyLmVtaXQoJ2pvaW4nLCB0aGlzLl9yb29tLCB7dXVpZDogdGhpcy5pZH0pXG4gIC8vIGNvbnNvbGUubG9nKCdlbWl0dGluZyBqb2luJylcblxuICB0aGlzLnNpZ25hbGxlci5vbignbmV3IHBlZXInLCB0aGlzLl9uZXdQZWVyLmJpbmQodGhpcykpXG59XG4vLyBpbmhlcml0cyBmcm9tIGV2ZW50cyBtb2R1bGUgaW4gb3JkZXIgdG8gdHJpZ2dlciBldmVudHNcbmluaGVyaXRzKFBhdGNoQmF5LCBldmVudHMpXG5cbi8vIHNlbmQgZGF0YSB0byBhbGwgY29ubmVjdGVkIHBlZXJzIHZpYSBkYXRhIGNoYW5uZWxzXG5QYXRjaEJheS5wcm90b3R5cGUuc2VuZFRvQWxsID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgT2JqZWN0LmtleXModGhpcy5ydGNQZWVycykuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICB0aGlzLnJ0Y1BlZXJzW2lkXS5zZW5kKGRhdGEpXG4gIH0sIHRoaXMpXG59XG5cbi8vIHNlbmRzIHRvIHBlZXIgc3BlY2lmaWVkIGJcblBhdGNoQmF5LnByb3RvdHlwZS5zZW5kVG9QZWVyID0gZnVuY3Rpb24gKHBlZXJJZCwgZGF0YSkge1xuICBpZiAocGVlcklkIGluIHRoaXMucnRjUGVlcnMpIHtcbiAgICB0aGlzLnJ0Y1BlZXJzW3BlZXJJZF0uc2VuZChkYXRhKVxuICB9XG59XG5cblBhdGNoQmF5LnByb3RvdHlwZS5yZWluaXRBbGwgPSBmdW5jdGlvbigpe1xuICBPYmplY3Qua2V5cyh0aGlzLnJ0Y1BlZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgIHRoaXMucmVpbml0UGVlcihpZClcbiAgfS5iaW5kKHRoaXMpKVxuLy8gIHRoaXMuX2Nvbm5lY3RUb1BlZXJzLmJpbmQodGhpcylcbn1cblxuUGF0Y2hCYXkucHJvdG90eXBlLmluaXRSdGNQZWVyID0gZnVuY3Rpb24oaWQsIG9wdHMpIHtcbiAgdGhpcy5lbWl0KCduZXcgcGVlcicsIHtpZDogaWR9KVxuICB2YXIgbmV3T3B0aW9ucyA9IG9wdHNcbiAvLyBjb25zb2xlLmxvZygpXG4gIGlmKHRoaXMuaWNlU2VydmVycykge1xuICAgIG9wdHNbJ2NvbmZpZyddID0ge1xuICAgICAgaWNlU2VydmVyczogdGhpcy5pY2VTZXJ2ZXJzXG4gICAgfVxuICB9XG5cbiAgaWYob3B0cy5pbml0aWF0b3IgPT09IHRydWUpIHtcbiAgICBpZiAodGhpcy5zdHJlYW0gIT0gbnVsbCkge1xuICAgICAgaWYodGhpcy5zZXR0aW5ncy5zaGFyZU1lZGlhV2hlbkluaXRpYXRpbmcgPT09IHRydWUpe1xuICAgICAgICBuZXdPcHRpb25zLnN0cmVhbSA9IHRoaXMuc3RyZWFtXG4gICAgICB9XG4gICAgfVxuICAgIGlmKHRoaXMuc2V0dGluZ3MucmVxdWVzdE1lZGlhV2hlbkluaXRpYXRpbmcgPT09IHRydWUpe1xuICAgICAgbmV3T3B0aW9ucy5vZmZlckNvbnN0cmFpbnRzID0ge1xuICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlLFxuICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmKHRoaXMuc2V0dGluZ3Muc2hhcmVNZWRpYVdoZW5SZXF1ZXN0ZWQgPT09IHRydWUpe1xuICAgICAgaWYgKHRoaXMuc3RyZWFtICE9IG51bGwpIHtcbiAgICAgICAgbmV3T3B0aW9ucy5zdHJlYW0gPSB0aGlzLnN0cmVhbVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB2YXIgb3B0aW9ucyA9IGV4dGVuZCh0aGlzLl9wZWVyT3B0aW9ucywgbmV3T3B0aW9ucylcbi8vY29uc29sZS5sb2coXCJPUFRJT05TXCIsIG9wdGlvbnMpXG4gIHRoaXMucnRjUGVlcnNbaWRdID0gbmV3IFNpbXBsZVBlZXIob3B0aW9ucylcbiAgdGhpcy5fYXR0YWNoUGVlckV2ZW50cyh0aGlzLnJ0Y1BlZXJzW2lkXSwgaWQpXG59XG5cblBhdGNoQmF5LnByb3RvdHlwZS5yZWluaXRSdGNDb25uZWN0aW9uID0gZnVuY3Rpb24oaWQsIG9wdHMpe1xuICAvLyBCZWNhdXNlIHJlbmVnb3RpYXRpb24gaXMgbm90IGltcGxlbWVuZXRlZCBpbiBTaW1wbGVQZWVyLCByZWluaXRpYXRlIGNvbm5lY3Rpb24gd2hlbiBjb25maWd1cmF0aW9uIGhhcyBjaGFuZ2VkXG4gIHRoaXMucnRjUGVlcnNbaWRdLl9kZXN0cm95KG51bGwsIGZ1bmN0aW9uKGUpe1xuICAgICAgdGhpcy5pbml0UnRjUGVlcihpZCwge1xuICAgICAgICBzdHJlYW06IHRoaXMuc3RyZWFtLFxuICAgICAgICBpbml0aWF0b3I6IHRydWVcbiAgICAgIH0pXG4gIH0uYmluZCh0aGlzKSlcbn1cbi8vIC8vbmV3IHBlZXIgY29ubmVjdGVkIHRvIHNpZ25hbGxpbmcgc2VydmVyXG5QYXRjaEJheS5wcm90b3R5cGUuX25ld1BlZXIgPSBmdW5jdGlvbiAocGVlcil7XG4gICAgLy8gdGhpcy5jb25uZWN0ZWRJZHMucHVzaChwZWVyKVxuXG5cbiAgICAvLyBDb25maWd1cmF0aW9uIGZvciBzcGVjaWZpZWQgcGVlci5cbiAgICAvLyBJbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gY29udHJvbHMgd2hldGhlciB3aWxsIHJlY2VpdmUgbWVkaWEgZnJvbVxuICAgIC8vIGFuZC9vciBzZW5kIG1lZGlhIHRvIGEgc3BlY2lmaWMgcGVlci5cblxuICAgIHRoaXMucGVlcnNbcGVlcl0gPSB7XG4gICAgICBydGNQZWVyOiBudWxsXG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCduZXcgcGVlcicsIHBlZXIpXG4gICAgLy8gdGhpcy5lbWl0KCd1cGRhdGVkIHBlZXIgbGlzdCcsIHRoaXMuY29ubmVjdGVkSWRzKVxufVxuLy8gLy8gT25jZSB0aGUgbmV3IHBlZXIgcmVjZWl2ZXMgYSBsaXN0IG9mIGNvbm5lY3RlZCBwZWVycyBmcm9tIHRoZSBzZXJ2ZXIsXG4vLyAvLyBjcmVhdGVzIG5ldyBzaW1wbGUgcGVlciBvYmplY3QgZm9yIGVhY2ggY29ubmVjdGVkIHBlZXIuXG5QYXRjaEJheS5wcm90b3R5cGUuX3JlYWR5Rm9yU2lnbmFsbGluZyA9IGZ1bmN0aW9uICh7IHBlZXJzLCBzZXJ2ZXJzIH0pIHtcbi8vY29uc29sZS5sb2coXCJyZWNlaXZlZCBwZWVyIGxpc3RcIiwgX3QsIHRoaXMucGVlcnMpXG5cbiAgcGVlcnMuZm9yRWFjaCgocGVlcikgPT4ge1xuICAgIHRoaXMuX25ld1BlZXIocGVlcilcbiAgfSlcblxuICAvLyBpZiByZWNlaXZlZCBpY2UgYW5kIHR1cm4gc2VydmVyIGluZm9ybWF0aW9uIGZyb20gc2lnbmFsbGluZyBzZXJ2ZXIsIHVzZSBpbiBlc3RhYmxpc2hpbmdcbiAgaWYoc2VydmVycykge1xuICAgIHRoaXMuaWNlU2VydmVycyA9IHNlcnZlcnNcbiAgfVxuLy8gIHRoaXMucGVlcnMgPSBwZWVyc1xuICB0aGlzLmVtaXQoJ3JlYWR5Jylcbn1cblxuLy8gSW5pdCBjb25uZWN0aW9uIHRvIFJFQ0VJVkUgdmlkZW9cblBhdGNoQmF5LnByb3RvdHlwZS5pbml0Q29ubmVjdGlvbkZyb21JZCA9IGZ1bmN0aW9uKGlkLCBjYWxsYmFjayl7XG4vLyAgY29uc29sZS5sb2coXCJpbml0aWFuaW5nIGNvbm5lY3Rpb25cIilcbiAgaWYoaWQgaW4gdGhpcy5ydGNQZWVycyl7XG4gICAgY29uc29sZS5sb2coXCJBbHJlYWR5IGNvbm5lY3RlZCB0by4uXCIsIGlkLCB0aGlzLnJ0Y1BlZXJzKVxuICAgIC8vaWYgdGhpcyBwZWVyIHdhcyBvcmlnaW5hbGx5IG9ubHkgc2VuZGluZyBhIHN0cmVhbSAobm90IHJlY2VpdmluZyksIHJlY3JlYXRlIGNvbm5lY3RpbmcgYnV0IHRoaXMgdGltZSB0d28td2F5XG4gICAgaWYodGhpcy5ydGNQZWVyc1tpZF0uaW5pdGlhdG9yPT09ZmFsc2Upe1xuICAgICAgdGhpcy5yZWluaXRSdGNDb25uZWN0aW9uKGlkKVxuICAgIH0gZWxzZSB7XG4gICAgICAvL2FscmVhZHkgY29ubmVjdGVkLCBkbyBub3RoaW5nXG5cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pbml0UnRjUGVlcihpZCwge1xuICAgICAgaW5pdGlhdG9yOiB0cnVlXG4gICAgfSlcbiAgfVxufVxuXG5cbi8vIHJlY2VpdmUgc2lnbmFsIGZyb20gc2lnbmFsbGluZyBzZXJ2ZXIsIGZvcndhcmQgdG8gc2ltcGxlLXBlZXJcblBhdGNoQmF5LnByb3RvdHlwZS5faGFuZGxlTWVzc2FnZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIC8vIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBubyBwZWVyIG9iamVjdCBmb3IgYSBwZWVyIGlkLCB0aGF0IHBlZXIgaXMgaW5pdGlhdGluZyBhIG5ldyBjb25uZWN0aW9uLlxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdzaWduYWwnKXtcbiAgICB0aGlzLl9oYW5kbGVTaWduYWwoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBkYXRhKVxuICB9XG59XG4vLyByZWNlaXZlIHNpZ25hbCBmcm9tIHNpZ25hbGxpbmcgc2VydmVyLCBmb3J3YXJkIHRvIHNpbXBsZS1wZWVyXG5QYXRjaEJheS5wcm90b3R5cGUuX2hhbmRsZVNpZ25hbCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIC8vIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBubyBwZWVyIG9iamVjdCBmb3IgYSBwZWVyIGlkLCB0aGF0IHBlZXIgaXMgaW5pdGlhdGluZyBhIG5ldyBjb25uZWN0aW9uLlxuICBpZiAoIXRoaXMucnRjUGVlcnNbZGF0YS5pZF0pIHtcbiAgICAvLyB0aGlzLmVtaXQoJ25ldyBwZWVyJywgZGF0YSlcbiAgICAvLyB2YXIgb3B0aW9ucyA9IGV4dGVuZCh7c3RyZWFtOiB0aGlzLnN0cmVhbX0sIHRoaXMuX3BlZXJPcHRpb25zKVxuICAgIC8vIHRoaXMucnRjUGVlcnNbZGF0YS5pZF0gPSBuZXcgU2ltcGxlUGVlcihvcHRpb25zKVxuICAgIC8vIHRoaXMuX2F0dGFjaFBlZXJFdmVudHModGhpcy5ydGNQZWVyc1tkYXRhLmlkXSwgZGF0YS5pZClcblxuICAgIHRoaXMuaW5pdFJ0Y1BlZXIoZGF0YS5pZCwge2luaXRpYXRvcjogZmFsc2V9KVxuICB9XG4gIHRoaXMucnRjUGVlcnNbZGF0YS5pZF0uc2lnbmFsKGRhdGEubWVzc2FnZSlcbn1cbi8vIHNlbmRUb0FsbCBzZW5kIHRocm91Z2ggcnRjIGNvbm5lY3Rpb25zLCB3aGVyZWFzIGJyb2FkY2FzdFxuLy8gc2VuZCB0aHJvdWdoIHRoZSBzaWduYWxsaW5nIHNlcnZlci4gVXNlZnVsIGluIGNhc2VzIHdoZXJlXG4vLyBub3QgYWxsIHBlZXJzIGFyZSBjb25uZWN0ZWQgdmlhIHdlYnJ0YyB3aXRoIG90aGVyIHBlZXJzXG5QYXRjaEJheS5wcm90b3R5cGUuX3JlY2VpdmVkQnJvYWRjYXN0ID0gZnVuY3Rpb24oZGF0YSkge1xuICAvL2NvbnNvbGUubG9nKFwiUkVDRUlWRUQgQlJPQURDQVNUXCIsIGRhdGEpXG4gIHRoaXMuZW1pdCgnYnJvYWRjYXN0JywgZGF0YSlcbn1cblxuLy9zZW5kcyB2aWEgc2lnbmFsbGluZyBzZXJ2ZXJcblBhdGNoQmF5LnByb3RvdHlwZS5icm9hZGNhc3QgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLnNpZ25hbGxlci5lbWl0KCdicm9hZGNhc3QnLCBkYXRhKVxufVxuLy8gaGFuZGxlIGV2ZW50cyBmb3IgZWFjaCBjb25uZWN0ZWQgcGVlclxuUGF0Y2hCYXkucHJvdG90eXBlLl9hdHRhY2hQZWVyRXZlbnRzID0gZnVuY3Rpb24gKHAsIF9pZCkge1xuICBwLm9uKCdzaWduYWwnLCBmdW5jdGlvbiAoaWQsIHNpZ25hbCkge1xuICAvLyAgY29uc29sZS5sb2coJ3NpZ25hbCcsIGlkLCBzaWduYWwpXG4gICAgLy8gIGNvbnNvbGUubG9nKFwicGVlciBzaWduYWwgc2VuZGluZyBvdmVyIHNvY2tldHNcIiwgaWQsIHNpZ25hbClcbiAgLy8gIHRoaXMuc2lnbmFsbGVyLmVtaXQoJ3NpZ25hbCcsIHtpZDogaWQsIHNpZ25hbDogc2lnbmFsfSlcbiAgICB0aGlzLnNpZ25hbGxlci5lbWl0KCdtZXNzYWdlJywge2lkOiBpZCwgbWVzc2FnZTogc2lnbmFsLCB0eXBlOiAnc2lnbmFsJ30pXG4gIH0uYmluZCh0aGlzLCBfaWQpKVxuXG4gIHAub24oJ3N0cmVhbScsIGZ1bmN0aW9uIChpZCwgc3RyZWFtKSB7XG4gICAgdGhpcy5ydGNQZWVyc1tpZF0uc3RyZWFtID0gc3RyZWFtXG4gIC8vICBjb25zb2xlLmxvZygnRTogc3RyZWFtJywgaWQsIHN0cmVhbSlcbiAgICAvLyAgY29uc29sZS5sb2coXCJyZWNlaXZlZCBhIHN0cmVhbVwiLCBzdHJlYW0pXG4gICAgdGhpcy5lbWl0KCdzdHJlYW0nLCBpZCwgc3RyZWFtKVxuICB9LmJpbmQodGhpcywgX2lkKSlcblxuICBwLm9uKCdjb25uZWN0JywgZnVuY3Rpb24gKGlkKSB7XG4gIC8vICBjb25zb2xlLmxvZyhcImNvbm5lY3RlZCB0byBcIiwgaWQpXG4gICAgdGhpcy5lbWl0KCdjb25uZWN0JywgaWQpXG4gIH0uYmluZCh0aGlzLCBfaWQpKVxuXG4gIHAub24oJ2RhdGEnLCBmdW5jdGlvbiAoaWQsIGRhdGEpIHtcbi8vICAgIGNvbnNvbGUubG9nKCdkYXRhJywgaWQpXG4gICAgdGhpcy5lbWl0KCdkYXRhJywge2lkOiBpZCwgZGF0YTogSlNPTi5wYXJzZShkYXRhKX0pXG4gIH0uYmluZCh0aGlzLCBfaWQpKVxuXG4gIHAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKGlkKSB7XG4gICAgLy9jb25zb2xlLmxvZygnQ0xPU0VEJylcbiAgICBkZWxldGUgKHRoaXMucnRjUGVlcnNbaWRdKVxuICAgIHRoaXMuZW1pdCgnY2xvc2UnLCBpZClcbiAgfS5iaW5kKHRoaXMsIF9pZCkpXG5cbiAgcC5vbignZXJyb3InLCBmdW5jdGlvbihlKXtcbiAgICBjb25zb2xlLndhcm4oXCJzaW1wbGUgcGVlciBlcnJvclwiLCBlKVxuICB9KVxufVxuXG5QYXRjaEJheS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIE9iamVjdC52YWx1ZXModGhpcy5ydGNQZWVycykuZm9yRWFjaCggZnVuY3Rpb24gKHBlZXIpIHtcbiAgICBwZWVyLmRlc3Ryb3koKVxuICB9KVxuICB0aGlzLnNpZ25hbGxlci5jbG9zZSgpXG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBQYXRjaEJheVxuIiwibW9kdWxlLmV4cG9ydHM9W1xuICB7XG4gICAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzBcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdSbXh2Y2lVeU1HUmxKVEl3Um5WbFoyOGxNRUVsTUVGemFHRndaU2d5TURBbE1rTXdMalVsTWtNeExqVXBKVEJCTG5OallXeGxLREF1TlNVeVF6QXVOU2tsTUVFdVkyOXNiM0lvSlRWQ01DNDFKVEpETWlVMVJDNXpiVzl2ZEdnb01Ta2xNa013TGpNbE1rTXdLU1V3UVM1eVpYQmxZWFFvTWlVeVF6SXBKVEJCTG0xdlpIVnNZWFJsVTJOaGJHVW9iM05qS0RNbE1rTXdMalVwSlRKRExUQXVOaWtsTUVFdVlXUmtLRzh3SlRKRE1DNDFLU1V3UVM1elkyRnNaU2d3TGprcEpUQkJMbTkxZENncFwiXG59LHtcbiAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzNcIixcbiAgXCJjb2RlXCI6XCJKVEpHSlRKR0pUSXdZbmtsTWpCUGJHbDJhV0VsTWpCS1lXTnJKVEJCSlRCQmIzTmpLREl3SlRKREpUSXdNQzR3TXlVeVF5VXlNREV1TnlrdWEyRnNaV2xrS0NrdWJYVnNkQ2h2YzJNb01qQWxNa01sTWpBd0xqQXdNU1V5UXlVeU1EQXBMbkp2ZEdGMFpTZ3hMalU0S1NrdVlteGxibVFvYnpBbE1rTWxNakF3TGprMEtTNXRiMlIxYkdGMFpWTmpZV3hsS0c5ell5Z3hNQ1V5UXlVeU1EQXBKVEpETFRBdU1ETXBMbk5qWVd4bEtEQXVPQ1V5UXlVeU1DZ3BKVEl3SlRORUpUTkZKVEl3S0RFdU1EVWxNakFsTWtJbE1qQXdMakVsTWpBcUpUSXdUV0YwYUM1emFXNG9NQzR3TlNwMGFXMWxLU2twTG05MWRDaHZNQ2s9XCJcbn0se1xuICBcInNrZXRjaF9pZFwiOiBcImV4YW1wbGVfNFwiLFxuICBcImNvZGVcIjpcIkpUSkdKVEpHSlRJd1lua2xNakJPWld4emIyNGxNakJXWlhKaEpUQkJKVEpHSlRKR0pUSXdkSGRwZEhSbGNpVXpRU1V5TUNVME1HNWxiRjl6YjI1dmJHOW5hV0VsTUVFbE1FRnZjMk1vT0NVeVF5MHdMalVsTWtNbE1qQXhLUzVqYjJ4dmNpZ3RNUzQxSlRKREpUSXdMVEV1TlNVeVF5VXlNQzB4TGpVcExtSnNaVzVrS0c4d0tTNXliM1JoZEdVb0xUQXVOU1V5UXlVeU1DMHdMalVwTG0xdlpIVnNZWFJsS0hOb1lYQmxLRFFwTG5KdmRHRjBaU2d3TGpVbE1rTWxNakF3TGpVcExuTmpZV3hsS0RJcExuSmxjR1ZoZEZnb01pVXlReVV5TURJcExtMXZaSFZzWVhSbEtHOHdKVEpESlRJd0tDa2xNakFsTTBRbE0wVWxNakJ0YjNWelpTNTRKVEl3S2lVeU1EQXVNREF3TlNrdWNtVndaV0YwV1NneUpUSkRKVEl3TWlrcExtOTFkQ2h2TUNrbE1FRWxNRUVsTUVFbE1FRWxNRUVsTUVFPVwiXG59LHtcbiAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzZcIixcbiAgXCJjb2RlXCI6XCJKVEpHSlRKR0pUSXdZbmtsTWpCRUpVTXpKVUU1WW05eVlTVXlNRVpoYkd4bGFYSnZjeVV5TUVkdmJucGhiR1Z6SlRCQkpUSkdKVEpHSlRJd2FIUjBjSE1sTTBFbE1rWWxNa1ozZDNjdVoyOXVlbUZzWlhOa1pXSnZjbUV1WTI5dEpUSkdKVEJCSlRCQmIzTmpLRFVwTG1Ga1pDaHViMmx6WlNnMUpUSkRKVEl3TWlrcExtTnZiRzl5S0RBbE1rTWxNakF3SlRKREpUSXdNeWt1WTI5c2IzSmhiV0VvTUM0MEtTNXZkWFFvS1NVd1FTVXdRU1V3UVNVd1FRPT1cIlxufSx7XG4gIFwic2tldGNoX2lkXCI6IFwiZXhhbXBsZV84XCIsXG4gIFwiY29kZVwiOlwiSlRKR0pUSkdKVEl3WW5rbE1qQlNiMlJ5YVdkdkpUSXdWbVZzWVhOamJ5VXdRU1V5UmlVeVJpVXlNR2gwZEhCekpUTkJKVEpHSlRKR2VXVmpkRzh1WjJsMGFIVmlMbWx2SlRKR0pUQkJKVEJCYjNOaktERXdOeVV5UXlVeU1EQWxNa01sTWpBd0xqY3BMbU52Ykc5eUtERWxNa01sTWpBd0pUSkRKVEl3TVNrdWNtOTBZWFJsS0RBbE1rTWxNakF0TUM0d09Da3ViVzlrZFd4aGRHVlNiM1JoZEdVb2J6RWxNa01sTWpBd0xqUXBMbTkxZENodk1Da2xNRUZ2YzJNb016TXBMbkp2ZEdGMFpTZ3lKVEpESlRJd01DNDRLUzV0YjJSMWJHRjBaVkp2ZEdGMFpTaHZNQ1V5UXlVeU1DZ3BKVEl3SlRORUpUTkZKVEl3S0dFdVptWjBKVFZDTUNVMVJDb3lLU2t1YjNWMEtHOHhLU1V3UVE9PVwiXG59LHtcbiAgXCJza2V0Y2hfaWRcIjogXCJleGFtcGxlXzlcIixcbiAgXCJjb2RlXCI6XCJKVEpHSlRKR0pUSXdZbmtsTWpCU2IyUnlhV2R2SlRJd1ZtVnNZWE5qYnlVd1FTVXlSaVV5UmlVeU1HaDBkSEJ6SlROQkpUSkdKVEpHZVdWamRHOHVaMmwwYUhWaUxtbHZKVEpHSlRCQkpUQkJiM05qS0RFNEpUSkRKVEl3TUM0eEpUSkRKVEl3TUNrdVkyOXNiM0lvTWlVeVF5VXlNREF1TVNVeVF5VXlNRElwSlRCQkxtMTFiSFFvYjNOaktESXdKVEpESlRJd01DNHdNU1V5UXlVeU1EQXBLUzV5WlhCbFlYUW9NaVV5UXlVeU1ESXdLUzV5YjNSaGRHVW9NQzQxS1M1dGIyUjFiR0YwWlNodk1Ta2xNRUV1YzJOaGJHVW9NU1V5UXlVeU1DZ3BKVEl3SlRORUpUTkZKVEl3SlRJd0tHRXVabVowSlRWQ01DVTFSQ293TGprbE1qQWxNa0lsTWpBeUtTa3VaR2xtWmlodk1Ta3ViM1YwS0c4d0tTVXdRVzl6WXlneU1DVXlReVV5TURBdU1pVXlReVV5TURBcExtTnZiRzl5S0RJbE1rTWxNakF3TGpjbE1rTWxNakF3TGpFcExtMTFiSFFvYjNOaktEUXdLU2t1Ylc5a2RXeGhkR1ZTYjNSaGRHVW9iekFsTWtNbE1qQXdMaklwSlRCQkxuSnZkR0YwWlNnd0xqSXBMbTkxZENodk1Taz1cIlxufSx7XG4gIFwic2tldGNoX2lkXCI6IFwiZXhhbXBsZV8xMFwiLFxuICBcImNvZGVcIjpcIkpUSkdKVEpHSlRJd1lua2xNakJhWVdOb0pUSXdTM0poYkd3bE1FRWxNa1lsTWtZbE1qQm9kSFJ3SlROQkpUSkdKVEpHZW1GamFHdHlZV3hzTG05dWJHbHVaU1V5UmlVd1FTVXdRVzl6WXlnbE1qQXlNVFVsTWtNbE1qQXdMakVsTWtNbE1qQXlKVEl3S1NVd1FTNXRiMlIxYkdGMFpTZ2xNRUVsTWpBbE1qQnZjMk1vSlRJd01pVXlReVV5TUMwd0xqTWxNa01sTWpBeE1EQWxNakFwSlRCQkpUSXdKVEl3TG5KdmRHRjBaU2d4TlNrbE1FRXBKVEJCTG0xMWJIUW9KVEJCSlRJd0pUSXdiM05qS0NVeU1ESXhOU1V5UXlVeU1DMHdMakVsTWtNbE1qQXlLU1V3UVNVeU1DVXlNQzV3YVhobGJHRjBaU2dsTWpBMU1DVXlReVV5TURVd0pUSXdLU1V3UVNrbE1FRXVZMjlzYjNJb0pUSXdNQzQ1SlRKREpUSXdNQzR3SlRKREpUSXdNQzQ1SlRJd0tTVXdRUzV0YjJSMWJHRjBaU2dsTUVFbE1qQWxNakJ2YzJNb0pUSXdOaVV5UXlVeU1DMHdMakVsTWpBcEpUQkJKVEl3SlRJd0xuSnZkR0YwWlNnbE1qQTVKVEl3S1NVd1FTa2xNRUV1WVdSa0tDVXdRU1V5TUNVeU1HOXpZeWdsTWpBeE1DVXlReVV5TUMwd0xqa2xNa01sTWpBNU1EQWxNakFwSlRCQkpUSXdKVEl3TG1OdmJHOXlLREVsTWtNd0pUSkRNU2tsTUVFcEpUQkJMbTExYkhRb0pUQkJKVEl3SlRJd2MyaGhjR1VvT1RBd0pUSkRKVEl3TUM0eUpUSkRKVEl3TVNrbE1FRWxNakFsTWpBdWJIVnRZU2dwSlRCQkpUSXdKVEl3TG5KbGNHVmhkRmdvTWlrbE1FRWxNakFsTWpBdWNtVndaV0YwV1NneUtTVXdRU1V5TUNVeU1DNWpiMnh2Y21GdFlTZ3hNQ2tsTUVFcEpUQkJMbTF2WkhWc1lYUmxLQ1V3UVNVeU1DVXlNRzl6WXlnbE1qQTVKVEpESlRJd0xUQXVNeVV5UXlVeU1Ea3dNQ1V5TUNrbE1FRWxNakFsTWpBdWNtOTBZWFJsS0NVeU1EWWxNakFwSlRCQktTVXdRUzVoWkdRb0pUQkJKVEl3SlRJd2IzTmpLRFFsTWtNbE1qQXhKVEpESlRJd09UQXBKVEJCSlRJd0pUSXdMbU52Ykc5eUtEQXVNaVV5UXpBbE1rTXhLU1V3UVNrbE1FRXViM1YwS0NrbE1FRT1cIlxufSx7XG4gIFwic2tldGNoX2lkXCI6IFwiZXhhbXBsZV8xMVwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdZbmtsTWpCYVlXTm9KVEl3UzNKaGJHd2xNRUVsTWtZbE1rWWxNakJvZEhSd0pUTkJKVEpHSlRKR2VtRmphR3R5WVd4c0xtOXViR2x1WlNVeVJpVXdRU1V3UVc5ell5Z3hNQ1V5UXlVeU1EQXVPU1V5UXlVeU1ETXdNQ2tsTUVFdVkyOXNiM0lvTUM0NUpUSkRKVEl3TUM0M0pUSkRKVEl3TUM0NEtTVXdRUzVrYVdabUtDVXdRU1V5TUNVeU1HOXpZeWcwTlNVeVF5VXlNREF1TXlVeVF5VXlNREV3TUNrbE1FRWxNakFsTWpBdVkyOXNiM0lvTUM0NUpUSkRKVEl3TUM0NUpUSkRKVEl3TUM0NUtTVXdRU1V5TUNVeU1DNXliM1JoZEdVb01DNHhPQ2tsTUVFbE1qQWxNakF1Y0dsNFpXeGhkR1VvTVRJcEpUQkJKVEl3SlRJd0xtdGhiR1ZwWkNncEpUQkJLU1V3UVM1elkzSnZiR3hZS0RFd0tTVXdRUzVqYjJ4dmNtRnRZU2dwSlRCQkxteDFiV0VvS1NVd1FTNXlaWEJsWVhSWUtEUXBKVEJCTG5KbGNHVmhkRmtvTkNrbE1FRXViVzlrZFd4aGRHVW9KVEJCSlRJd0pUSXdiM05qS0RFbE1rTWxNakF0TUM0NUpUSkRKVEl3TXpBd0tTVXdRU2tsTUVFdWMyTmhiR1VvTWlrbE1FRXViM1YwS0NrbE1FRT1cIlxufSx7XG4gIFwic2tldGNoX2lkXCI6IFwiZXhhbXBsZV8xM1wiLFxuICBcImNvZGVcIjpcIkpUSkdKVEpHSlRJd1lXTnBaQ1V5TUdKMWN5VXlNSE5sWVhRbE1FRWxNa1lsTWtZbE1qQmllU1V5TUZkcGJHd2xNakJJZFcxd2FISmxlWE1sTUVFbE1rWWxNa1lsTWpCb2RIUndjeVV6UVNVeVJpVXlSbWRwZEdoMVlpNWpiMjBsTWtaVWFHVlhhWE53ZVNVd1FTVXdRVzl6WXlneE1EVXBMbU52Ykc5eUtEQXVOU1V5UXpBdU1TVXlRekF1T0NrdWNtOTBZWFJsS0RBdU1URWxNa01sTWpBd0xqRXBMbTF2WkhWc1lYUmxLRzl6WXlneE1Da3VjbTkwWVhSbEtEQXVNeWt1WVdSa0tHOHdKVEpESlRJd01DNHhLU2t1WVdSa0tHOXpZeWd5TUNVeVF6QXVNREVsTWtNeEtTNWpiMnh2Y2lnd0pUSkRNQzQ0SlRKRE1Ta3BMbTkxZENodk1Da2xNRUZ2YzJNb05UQWxNa013TGpBMUpUSkRKVEl3TUM0M0tTNWpiMnh2Y2lneEpUSkRNQzQzSlRKRE1DNDFLUzVrYVdabUtHOHdLUzV0YjJSMWJHRjBaU2h2TVNVeVF6QXVNRFVwTG05MWRDaHZNU2tsTUVGeVpXNWtaWElvYnpFcFwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcImV4YW1wbGVfMTRcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3WW5rbE1qQlBiR2wyYVdFbE1qQktZV05ySlRCQkpUSkdKVEpHSlRJd0pUUXdYMjlxWVdOclh5VXdRU1V3UVc5ell5Z3lNQ1V5UXlVeU1EQXVNREVsTWtNbE1qQXhMakVwSlRCQkpUQTVMbXRoYkdWcFpDZzFLU1V3UVNVd09TNWpiMnh2Y2lneUxqZ3pKVEpETUM0NU1TVXlRekF1TXprcEpUQkJKVEE1TG5KdmRHRjBaU2d3SlRKREpUSXdNQzR4S1NVd1FTVXdPUzV0YjJSMWJHRjBaU2h2TUNVeVF5VXlNQ2dwSlRJd0pUTkVKVE5GSlRJd2JXOTFjMlV1ZUNVeU1Db2xNakF3TGpBd01ETXBKVEJCSlRBNUxuTmpZV3hsS0RFdU1ERXBKVEJCSlRJd0pUSXdKVEE1TG05MWRDaHZNQ2s9XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwiZXhhbXBsZV8xNVwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdZbmtsTWpCUGJHbDJhV0VsTWpCS1lXTnJKVEJCSlRKR0pUSkdKVEl3YUhSMGNITWxNMEVsTWtZbE1rWnZhbUZqYXk1bmFYUm9kV0l1YVc4bE1FRWxNRUZ2YzJNb01UQXdKVEpESlRJd01DNHdNU1V5UXlVeU1ERXVOQ2tsTUVFbE1Ea3VjbTkwWVhSbEtEQWxNa01sTWpBd0xqRXBKVEJCSlRBNUxtMTFiSFFvYjNOaktERXdKVEpESlRJd01DNHhLUzV0YjJSMWJHRjBaU2h2YzJNb01UQXBMbkp2ZEdGMFpTZ3dKVEpESlRJd0xUQXVNU2tsTWtNbE1qQXhLU2tsTUVFbE1Ea3VZMjlzYjNJb01pNDRNeVV5UXpBdU9URWxNa013TGpNNUtTVXdRU1V5TUNVeU1DNXZkWFFvYnpBcFwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcImV4YW1wbGVfMTZcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3WW5rbE1qQlBiR2wyYVdFbE1qQktZV05ySlRCQkpUSkdKVEpHSlRJd2FIUjBjSE1sTTBFbE1rWWxNa1p2YW1GamF5NW5hWFJvZFdJdWFXOGxNRUVsTUVGdmMyTW9OQ1V5UXlVeU1EQXVNU1V5UXlVeU1EQXVPQ2t1WTI5c2IzSW9NUzR3TkNVeVF6QWxNa01sTWpBdE1TNHhLUzV5YjNSaGRHVW9NQzR6TUNVeVF5VXlNREF1TVNrdWNHbDRaV3hoZEdVb01pVXlReVV5TURJd0tTNXRiMlIxYkdGMFpTaHViMmx6WlNneUxqVXBKVEpESlRJd0tDa2xNakFsTTBRbE0wVWxNakF4TGpVbE1qQXFKVEl3VFdGMGFDNXphVzRvTUM0d09DVXlNQ29sTWpCMGFXMWxLU2t1YjNWMEtHOHdLUT09XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwiZXhhbXBsZV8xN1wiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdiVzlwY21VbE1FRWxNa1lsTWtZbE1qQmllU1V5TUU5c2FYWnBZU1V5TUVwaFkyc2xNRUVsTWtZbE1rWWxNakIwZDJsMGRHVnlKVE5CSlRJd0pUUXdYMjlxWVdOclh5VXdRU1V3UVhCaGRIUmxjbTRsTWpBbE0wUWxNakFvS1NVeU1DVXpSQ1V6UlNVeU1HOXpZeWd5TURBbE1rTWxNakF3S1M1cllXeGxhV1FvTWpBd0tTNXpZMkZzWlNneEpUSkRKVEl3TUM0MEtTVXdRU1V5UmlVeVJpVXdRWEJoZEhSbGNtNG9LU1V3UVNVeU1DVXlNQzV6WTNKdmJHeFlLREF1TVNVeVF5VXlNREF1TURFcEpUQkJKVEl3SlRJd0xtMTFiSFFvY0dGMGRHVnliaWdwS1NVd1FTVXlNQ1V5TUM1dmRYUW9LUT09XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwiZXhhbXBsZV8xOFwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdZbmtsTWpCUGJHbDJhV0VsTWpCS1lXTnJKVEJCSlRKR0pUSkdKVEl3YUhSMGNITWxNMEVsTWtZbE1rWnZhbUZqYXk1bmFYUm9kV0l1YVc4bE1FRWxNRUZ2YzJNb05pVXlReVV5TURBbE1rTWxNakF3TGpncEpUQkJKVEl3SlRJd0xtTnZiRzl5S0RFdU1UUWxNa01sTWpBd0xqWWxNa011T0RBcEpUQkJKVEl3SlRJd0xuSnZkR0YwWlNnd0xqa3lKVEpESlRJd01DNHpLU1V3UVNVeU1DVXlNQzV3YVhobGJHRjBaU2d5TUNVeVF5VXlNREV3S1NVd1FTVXlNQ1V5TUM1dGRXeDBLRzl6WXlnME1DVXlReVV5TURBdU1ETXBMblJvY21WemFDZ3dMalFwTG5KdmRHRjBaU2d3SlRKREpUSXdMVEF1TURJcEtTVXdRU1V5TUNVeU1DNXRiMlIxYkdGMFpWSnZkR0YwWlNodmMyTW9NakFsTWtNbE1qQXdLUzUwYUhKbGMyZ29NQzR6SlRKREpUSXdNQzQyS1NVeVF5VXlNQ2dwSlRJd0pUTkVKVE5GSlRJd01DNHhKVEl3SlRKQ0pUSXdiVzkxYzJVdWVDVXlNQ29sTWpBd0xqQXdNaWtsTUVFbE1qQWxNakF1YjNWMEtHOHdLUT09XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwicmFuZ2dhXzBcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3UkhKbFlXMTVKVEl3UkdsaGJXOXVaQ1V3UVNVeVJpVXlSaVV5TUdKNUpUSXdVbUZ1WjJkaEpUSXdVSFZ5Ym1GdFlTVXlNRUZxYVNVd1FTVXlSaVV5UmlVeU1HaDBkSEJ6SlROQkpUSkdKVEpHY21GdVoyZGhjSFZ5Ym1GdFlXRnFhVEV1ZDJsNGMybDBaUzVqYjIwbE1rWndiM0owWm05c2FXOGxNRUVsTUVGdmMyTW9OeVV5UXkwd0xqRXlOU2t1Ylc5a2RXeGhkR1VvZG05eWIyNXZhU2d4S1NrdVpHbG1aaWgyYjNKdmJtOXBLREVwTG0xMWJIUW9aM0poWkdsbGJuUW9MVEVwTG14MWJXRW9NQzR4TWpVcEtTa2xNRUVsTWpBbE1qQXViSFZ0WVNnd0xqRXlOU2tsTUVFbE1qQWxNakF1WVdSa0tITm9ZWEJsS0RjbE1rTWxNakF3TGpVcEpUQkJKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3TG0xMWJIUW9kbTl5YjI1dmFTZ3hNQ1V5UXpJcExtSnNaVzVrS0c4d0tTNWthV1ptS0dkeVlXUnBaVzUwS0RFcEtTNXRiMlIxYkdGMFpTaDJiM0p2Ym05cEtDa3BLU2tsTUVFbE1qQWxNakF1YzJOeWIyeHNXU2d0TUM0eEtTVXdRU1V5TUNVeU1DNXpZM0p2Ykd4WUtEQXVNVEkxS1NVd1FTVXlNQ1V5TUM1aWJHVnVaQ2h2TUNrbE1FRWxNakFsTWpBdVlteGxibVFvYnpBcEpUQkJKVEl3SlRJd0xtOTFkQ2dwSlRCQlwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcInJhbmdnYV8xXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1ZHRm5KVEl3SlRJMkpUSXdVM2RsWlhBbE1FRWxNa1lsTWtZbE1qQmllU1V5TUZKaGJtZG5ZU1V5TUZCMWNtNWhiV0VsTWpCQmFta2xNRUVsTWtZbE1rWWxNakJvZEhSd2N5VXpRU1V5UmlVeVJuSmhibWRuWVhCMWNtNWhiV0ZoYW1reExuZHBlSE5wZEdVdVkyOXRKVEpHY0c5eWRHWnZiR2x2SlRCQkpUQkJiM05qS0RVbE1rTXdMakV5TlNrdVkyOXNiM0poYldFb01Ta2xNRUVsTWpBbE1qQXViSFZ0WVNnd0xqRXlOU2t1WVdSa0tITm9ZWEJsS0RFbE1rTXdMalVwTG14MWJXRW9NaWt1WkdsbVppaG5jbUZrYVdWdWRDZ3hLU2twSlRCQkpUSXdKVEl3TG1ScFptWW9iM05qS0MweEpUSkRMVEF1TWpVcEtTNWliR1Z1WkNodk1Da3VZMjlzYjNJb01DVXlRekl1TlNVeVF6RXVOelVwSlRCQkpUSXdKVEl3TG05MWRDZ3BcIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJyYW5nZ2FfMlwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdUVzl1YjJOb2NtOXRaU1V5TUUxbGJXOWhjaVV3UVNVeVJpVXlSaVV5TUdKNUpUSXdVbUZ1WjJkaEpUSXdVSFZ5Ym1GdFlTVXlNRUZxYVNVd1FTVXlSaVV5UmlVeU1HaDBkSEJ6SlROQkpUSkdKVEpHY21GdVoyZGhjSFZ5Ym1GdFlXRnFhVEV1ZDJsNGMybDBaUzVqYjIwbE1rWndiM0owWm05c2FXOGxNRUVsTUVGMmIzSnZibTlwS0RVd0pUSkRNU2tsTUVFbE1qQWxNakF1YkhWdFlTZ3dMalVwTG1Ga1pDaHphR0Z3WlNneEpUSkRNU2t1YkhWdFlTZ3hLU2tsTUVFbE1qQWxNakF1Ylc5a2RXeGhkR1VvYjNOaktDMHhNREF3SlRKRExURXBKVEJCSlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3TG0xdlpIVnNZWFJsS0c5ell5Z3BMbXgxYldFb0tTa3BKVEJCSlRJd0pUSXdMbUpzWlc1a0tHOHdLU1V3UVNVeU1DVXlNQzVpYkdWdVpDaHZNQ2tsTUVFbE1qQWxNakF1WW14bGJtUW9iekFwSlRCQkpUSXdKVEl3TG1Kc1pXNWtLRzh3S1NVd1FTVXlNQ1V5TUM1dmRYUW9LUT09XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwicmFuZ2dhXzNcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3UjJGc1lYaDVKVEl3VkhKcGNDVXdRU1V5UmlVeVJpVXlNR0o1SlRJd1VtRnVaMmRoSlRJd1VIVnlibUZ0WVNVeU1FRnFhU1V3UVNVeVJpVXlSaVV5TUdoMGRIQnpKVE5CSlRKR0pUSkdjbUZ1WjJkaGNIVnlibUZ0WVdGcWFURXVkMmw0YzJsMFpTNWpiMjBsTWtad2IzSjBabTlzYVc4bE1FRWxNRUZ6YUdGd1pTZ3hKVEpETVNrbE1FRWxNakFsTWpBdWJYVnNkQ2gyYjNKdmJtOXBLREV3TURBbE1rTXlLU1V3UVNVeU1DVXlNQzVpYkdWdVpDaHZNQ2t1YkhWdFlTZ3BLU1V3UVNVeU1DVXlNQzVoWkdRb2MyaGhjR1VvTXlVeVF6QXVNVEkxS1NVd1FTVXlNQ1V5TUNVeU1DVXlNQ1V5TUNVeU1DVXlNQzV5YjNSaGRHVW9NU1V5UXpFcExtMTFiSFFvZG05eWIyNXZhU2d4TURBd0pUSkRNU2t1YkhWdFlTZ3BLU1V3UVNVeU1DVXlNQ1V5TUNVeU1DVXlNQ1V5TUNVeU1DNXliM1JoZEdVb01TNDFLU2t1YzJOeWIyeHNXQ2dsTlVJd0xqRWxNa010TUM0d05qSTFKVEpETUM0d01EVWxNa013TGpBd01EQXhKVFZFSlRKRE1Da2xNRUVsTWpBbE1qQXVjMk55YjJ4c1dTZ2xOVUl3TGpFbE1rTXRNQzR3TmpJMUpUSkRNQzR3TURVbE1rTXdMakF3TURBeEpUVkVKVEpETUNrbE1FRWxNakFsTWpBdWIzVjBLQ2s9XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwicmFuZ2dhXzRcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3VTNWdFpYUWxNRUVsTWtZbE1rWWxNakJpZVNVeU1GSmhibWRuWVNVeU1GQjFjbTVoYldFbE1qQkJhbWtsTUVFbE1rWWxNa1lsTWpCb2RIUndjeVV6UVNVeVJpVXlSbkpoYm1kbllYQjFjbTVoYldGaGFta3hMbmRwZUhOcGRHVXVZMjl0SlRKR2NHOXlkR1p2YkdsdkpUQkJKVEJCYjNOaktEQXVOU1V5UXpFdU1qVXBMbTExYkhRb2MyaGhjR1VvTVNVeVF6QXVNRGtwTG5KdmRHRjBaU2d4TGpVcEtTVXdRU1V5TUNVeU1DNWthV1ptS0dkeVlXUnBaVzUwS0NrcEpUQkJKVEl3SlRJd0xtRmtaQ2h6YUdGd1pTZ3lKVEpETWlrdVlteGxibVFvWjNKaFpHbGxiblFvTVNrcEtTVXdRU1V5TUNVeU1DNXRiMlIxYkdGMFpTaHViMmx6WlNncEpUQkJKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdMbTF2WkhWc1lYUmxLRzV2YVhObEtDa3VjMk55YjJ4c1dTZ3hKVEpETUM0d05qSTFLU2twSlRCQkpUSXdKVEl3TG1Kc1pXNWtLRzh3S1NVd1FTVXlNQ1V5TUM1amIyeHZjaWd4SlRKRExUQXVOU1V5UXkwd0xqYzFLU1V3UVNVeU1DVXlNQzV2ZFhRb0tRPT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJtYXJpYW5uZV8wXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHY0c5eWRDVXdRU1V5UmlVeVJtSjVKVEl3VFdGeWFXRnVibVVsTWpCVVpXbDRhV1J2SlRCQkpUSkdKVEpHYUhSMGNITWxNMEVsTWtZbE1rWnRZWEpwWVc1dVpYUmxhWGhwWkc4dVoybDBhSFZpTG1sdkpUSkdKVEJCSlRCQmIzTmpLRFVsTWtNbE1qQXdMamtsTWtNbE1qQXdMakF3TVNrbE1FRWxNakFsTWpBbE1qQWxNakF1YTJGc1pXbGtLQ1UxUWpNbE1rTTBKVEpETlNVeVF6Y2xNa000SlRKRE9TVXlRekV3SlRWRUxtWmhjM1FvTUM0eEtTa2xNRUVsTWpBbE1qQWxNakFsTWpBdVkyOXNiM0lvTUM0MUpUSkRKVEl3TUM0ektTVXdRU1V5TUNVeU1DVXlNQ1V5TUM1amIyeHZjbUZ0WVNnd0xqUXBKVEJCSlRJd0pUSXdKVEl3SlRJd0xuSnZkR0YwWlNnd0xqQXdPU1V5UXlncEpUTkVKVE5GVFdGMGFDNXphVzRvZEdsdFpTa3FKVEl3TFRBdU1EQXhKVEl3S1NVd1FTVXlNQ1V5TUNVeU1DVXlNQzV0YjJSMWJHRjBaVkp2ZEdGMFpTaHZNQ1V5UXlncEpUTkVKVE5GVFdGMGFDNXphVzRvZEdsdFpTa2xNakFxSlRJd01DNHdNRE1wSlRCQkpUSXdKVEl3SlRJd0pUSXdMbTF2WkhWc1lYUmxLRzh3SlRKREpUSXdNQzQ1S1NVd1FTVXlNQ1V5TUNVeU1DVXlNQzV6WTJGc1pTZ3dMamtwSlRCQkpUSXdKVEl3SlRJd0pUSXdMbTkxZENodk1Da2xNRUVsTUVFPVwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcIm1hcmlhbm5lXzFcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdVR2w0Wld4elkyRndaU1V3UVNVeVJpVXlSazFoY21saGJtNWxKVEl3VkdWcGVHbGtieVV3UVNVeVJpVXlSbWgwZEhCekpUTkJKVEpHSlRKR1oybDBhSFZpTG1OdmJTVXlSazFoY21saGJtNWxWR1ZwZUdsa2J5VXdRU1V3UVhOeVl5aHZNQ2tsTUVFbE1qQXVjMkYwZFhKaGRHVW9NUzR3TVNrbE1FRWxNakF1YzJOaGJHVW9Mams1T1NrbE1FRWxNakF1WTI5c2IzSW9NUzR3TVNVeVF6RXVNREVsTWtNeExqQXhLU1V3UVNVeU1DNW9kV1VvTGpBeEtTVXdRU1V5TUM1dGIyUjFiR0YwWlVoMVpTaHpjbU1vYnpFcExtaDFaU2d1TXlrdWNHOXpkR1Z5YVhwbEtDMHhLUzVqYjI1MGNtRnpkQ2d1TnlrbE1rTXlLU1V3UVNVeU1DVXlNQzVzWVhsbGNpaHpjbU1vYnpFcEpUQkJKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdMbXgxYldFb0tTVXdRU1V5TUNVeU1DVXlNQ1V5TUNVeU1DVXlNQ1V5TUNVeU1DVXlNQzV0ZFd4MEtHZHlZV1JwWlc1MEtERXBKVEJCSlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3TG5OaGRIVnlZWFJsS0M0NUtTa3BKVEJCSlRJd0pUSXdMbTkxZENodk1Da2xNRUVsTUVGdWIybHpaU2d4SlRKREpUSXdMaklwSlRCQkpUSXdKVEl3TG5KdmRHRjBaU2d5SlRKRExqVXBKVEJCSlRJd0pUSXdMbXhoZVdWeUtITnlZeWh2TUNrbE1FRWxNakFsTWpBdWMyTnliMnhzV0NndU1pa3BKVEJCSlRJd0pUSXdMbTkxZENodk1Ta2xNRUVsTUVGeVpXNWtaWElvYnpBcFwiXG5cbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwibmFvdG9fMFwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdKVFF3Ym1GdmRHOWZhR2xsWkdFbE1FRnZjMk1vTWpBbE1rTWxNakF3TGpFbE1rTWxNakF3S1M1amIyeHZjaWd3SlRKREpUSXdNU1V5UXlVeU1ESXBMbkp2ZEdGMFpTZ3hMalUzSlRKR01pa3ViM1YwS0c4eEtTVXdRVzl6WXlnek1DVXlReVV5TURBdU1ERWxNa01sTWpBd0tTNWpiMnh2Y2lneUpUSkRKVEl3TUM0M0pUSkRKVEl3TVNrdWJXOWtkV3hoZEdVb2J6RWxNa01sTWpBd0tTNWhaR1FvYnpFbE1rTXhLUzV0YjJSMWJHRjBaVkJwZUdWc1lYUmxLRzh4SlRKRE1TVXlRekV3S1M1dmRYUW9iekFwXCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwibmFvdG9fMVwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdKVFF3Ym1GdmRHOWZhR2xsWkdFbE1FRnpiMnhwWkNnd0xqSWxNa013TGpZbE1rTXdMamtwTG14aGVXVnlLRzl6WXlnek1TNDBKVEpETUNrdWRHaHlaWE5vS0RBdU55a3ViSFZ0WVNncExtMXZaSFZzWVhSbEtHOXpZeWcwSlRKRE1Ta3VjbTkwWVhSbEtERXBKVEpETUM0d05Ta3VZMjlzYjNJb01DVXlRekFsTWtNd0tTa3ViR0Y1WlhJb2IzTmpLRE14TGpRbE1rTXdLUzUwYUhKbGMyZ29NQzQzS1M1c2RXMWhLQ2t1Ylc5a2RXeGhkR1VvYjNOaktEUWxNa014S1M1eWIzUmhkR1VvTVNrbE1rTXdMakVwS1M1dmRYUW9LUT09XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwicml0Y2hzZV8wXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHY21GdVpHOXRKVEl3ZEhKNWNHOXdhRzlpYVdFbE1qQXRKVEl3WTJoaGJtZGxjeVV5TUdWMlpYSjVkR2x0WlNVeU1IbHZkU1V5TUd4dllXUWxNakJwZENFbE1FRWxNa1lsTWtaaWVTVXlNRkpwZEdOb2MyVWxNRUVsTWtZbE1rWnBibk4wWVdkeVlXMHVZMjl0SlRKR2NtbDBZMmh6WlNVd1FTVXlNQ1V3UVdaMWJtTjBhVzl1SlRJd2NpaHRhVzRsTTBRd0pUSkRiV0Y0SlRORU1Ta2xNakFsTjBJbE1qQnlaWFIxY200bE1qQk5ZWFJvTG5KaGJtUnZiU2dwS2lodFlYZ3RiV2x1S1NVeVFtMXBiaVV6UWlVeU1DVTNSQ1V3UVNVeU1DVXdRWE52Ykdsa0tERWxNa014SlRKRE1Ta2xNRUVsTWpBbE1qQWxNRGt1WkdsbVppaHphR0Z3WlNnbE5VSTBKVEpETkNVeVF6UWxNa015TkNVMVJDNXpiVzl2ZEdnb0tTNW1ZWE4wS0M0MUtTVXlRM0lvTUM0MkpUSkRNQzQ1TXlrbE1rTXVNRGtwTG5KbGNHVmhkQ2d5TUNVeVF6RXdLU2tsTUVFbE1Ea3ViVzlrZFd4aGRHVlRZMkZzWlNodmMyTW9PQ2t1Y205MFlYUmxLSElvTFM0MUpUSkRMalVwS1NVeVF5NDFNaWtsTUVFbE1Ea3VZV1JrS0NVd1FTVXlNQ1V5TUNVd09TVXdPWE55WXlodk1Da3VjMk5oYkdVb01DNDVOalVwTG5KdmRHRjBaU2d1TURFeUtpaE5ZWFJvTG5KdmRXNWtLSElvTFRJbE1rTXhLU2twS1NVd1FTVXlNQ1V5TUNVd09TVXdPUzVqYjJ4dmNpaHlLQ2tsTWtOeUtDa2xNa055S0NrcEpUQkJKVEl3SlRJd0pUSXdKVEl3SlRBNUxtMXZaSFZzWVhSbFVtOTBZWFJsS0c4d0pUSkRjaWd3SlRKRE1DNDFLU2tsTUVFbE1qQWxNakFsTURrbE1Ea3VZbkpwWjJoMGJtVnpjeWd1TVRVcEpUQkJKVEl3SlRJd0pUQTVKVEE1SlRKRExqY3BKVEJCSlRBNUxtOTFkQ2dwXCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwicml0Y2hzZV8xXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHWTI5eWNuVndkR1ZrSlRJd2MyTnlaV1Z1YzJGMlpYSWxNRUVsTWtZbE1rWmllU1V5TUZKcGRHTm9jMlVsTUVFbE1rWWxNa1pwYm5OMFlXZHlZVzB1WTI5dEpUSkdjbWwwWTJoelpTVXdRU1V5TUNVd1FYWnZjbTl1YjJrb016VXdKVEpETUM0eE5Ta2xNRUVsTWpBbE1qQWxNRGt1Ylc5a2RXeGhkR1ZUWTJGc1pTaHZjMk1vT0NrdWNtOTBZWFJsS0UxaGRHZ3VjMmx1S0hScGJXVXBLU1V5UXk0MUtTVXdRU1V5TUNVeU1DVXdPUzUwYUhKbGMyZ29MamdwSlRCQkpUQTVMbTF2WkhWc1lYUmxVbTkwWVhSbEtHOXpZeWczS1NVeVF5NDBLU1V3UVNVd09TNTBhSEpsYzJnb0xqY3BKVEJCSlRJd0pUSXdKVEE1TG1ScFptWW9jM0pqS0c4d0tTNXpZMkZzWlNneExqZ3BLU1V3UVNVd09TNXRiMlIxYkdGMFpWTmpZV3hsS0c5ell5Z3lLUzV0YjJSMWJHRjBaVkp2ZEdGMFpTaHZNQ1V5UXk0M05Da3BKVEJCSlRBNUxtUnBabVlvYzNKaktHOHdLUzV5YjNSaGRHVW9KVFZDTFM0d01USWxNa011TURFbE1rTXRMakF3TWlVeVF6QWxOVVFwTG5OamNtOXNiRmtvTUNVeVF5VTFRaTB4SlRKR01UazVPREF3SlRKRE1DVTFSQzVtWVhOMEtEQXVOeWtwS1NVd1FTVXdPUzVpY21sbmFIUnVaWE56S0NVMVFpMHVNRElsTWtNdExqRTNKVFZFTG5OdGIyOTBhQ2dwTG1aaGMzUW9MalVwS1NVd1FTVXdPUzV2ZFhRb0tRPT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJyaXRjaHNlXzJcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdkSEp2Y0dsallXd2xNakJxZFdsalpTVXdRU1V5UmlVeVJtSjVKVEl3VW1sMFkyaHpaU1V3UVNVeVJpVXlSbWx1YzNSaFozSmhiUzVqYjIwbE1rWnlhWFJqYUhObEpUQkJKVEl3SlRCQmRtOXliMjV2YVNneUpUSkRNQzR6SlRKRE1DNHlLUzV6YUdsbWRDZ3dMalVwSlRCQkxtMXZaSFZzWVhSbFVHbDRaV3hoZEdVb2RtOXliMjV2YVNnMEpUSkRNQzR5S1NVeVF6TXlKVEpETWlrbE1FRXVjMk5oYkdVb0tDa2xNMFFsTTBVeEpUSkNLRTFoZEdndWMybHVLSFJwYldVcU1pNDFLU293TGpBMUtTa2xNRUV1WkdsbVppaDJiM0p2Ym05cEtETXBMbk5vYVdaMEtEQXVOaWtwSlRCQkxtUnBabVlvYjNOaktESWxNa013TGpFMUpUSkRNUzR4S1M1eWIzUmhkR1VvS1NrbE1FRXVZbkpwWjJoMGJtVnpjeWd3TGpFcExtTnZiblJ5WVhOMEtERXVNaWt1YzJGMGRYSmhkR1VvTVM0eUtTVXdRU1V3T1M1dmRYUW9LU1V3UVhOd1pXVmtKVEl3SlRORUpUSXdNQzQ0XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwicml0Y2hzZV8zXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHZEhKNWFXNW5KVEl3ZEc4bE1qQm5aWFFsTWpCamJHOXpaWElsTUVFbE1rWWxNa1ppZVNVeU1GSnBkR05vYzJVbE1FRWxNa1lsTWtacGJuTjBZV2R5WVcwdVkyOXRKVEpHY21sMFkyaHpaU1V3UVNVeU1DVXdRVzl6WXlnMk1DVXlReTB3TGpBeE5TVXlRekF1TXlrdVpHbG1aaWh2YzJNb05qQWxNa013TGpBNEtTNXliM1JoZEdVb1RXRjBhQzVRU1NVeVJqSXBLU1V3UVNVd09TNXRiMlIxYkdGMFpWTmpZV3hsS0c1dmFYTmxLRE11TlNVeVF6QXVNalVwTG0xdlpIVnNZWFJsVTJOaGJHVW9iM05qS0RFMUtTNXliM1JoZEdVb0tDa2xNMFFsTTBWTllYUm9Mbk5wYmloMGFXMWxKVEpHTWlrcEtTVXlRekF1TmlrbE1FRWxNRGt1WTI5c2IzSW9NU1V5UXpBdU5TVXlRekF1TkNrdVkyOXVkSEpoYzNRb01TNDBLU1V3UVNVd09TNWhaR1FvYzNKaktHOHdLUzV0YjJSMWJHRjBaU2h2TUNVeVF5NHdOQ2tsTWtNdU5pa2xNRUVsTURrdWFXNTJaWEowS0NrdVluSnBaMmgwYm1WemN5Z3dMakVwTG1OdmJuUnlZWE4wS0RFdU1pa2xNRUVsTURrdWJXOWtkV3hoZEdWVFkyRnNaU2h2YzJNb01pa2xNa010TUM0eUtTVXdRU1V5TUNVeU1DNXZkWFFvS1E9PVwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcInJpdGNoc2VfNFwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdaR2x6YVc1MFpXZHlZWFJwYjI0bE1FRWxNa1lsTWtZbE1qQmllU1V5TUZKcGRHTm9jMlVsTUVFbE1rWWxNa1lsTWpCcGJuTjBZV2R5WVcwdVkyOXRKVEpHY21sMFkyaHpaU1V3UVNVeU1DVXdRVzl6WXlnMUpUSkRMakVwTG0xdlpIVnNZWFJsS0c1dmFYTmxLRFlwSlRKRExqSXlLUzVrYVdabUtHOHdLU1V3UVNVeU1DVXlNQ1V3T1M1dGIyUjFiR0YwWlZOamNtOXNiRmtvYjNOaktESXBMbTF2WkhWc1lYUmxLRzl6WXlncExuSnZkR0YwWlNncEpUSkRMakV4S1NrbE1FRWxNRGt1YzJOaGJHVW9MamN5S1M1amIyeHZjaWd3TGprNUpUSkRNUzR3TVRRbE1rTXhLU1V3UVNVeU1DVXlNQ1V3T1M1dmRYUW9LUT09ICBcIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJmbG9yXzBcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdSbXh2Y2lVeU1HUmxKVEl3Um5WbFoyOGxNRUVsTWtZbE1rWm9kSFJ3Y3lVelFTVXlSaVV5Um1ac2IzSmtaV1oxWldkdkxtZHBkR2gxWWk1cGJ5VXlSaVV3UVc5ell5Z3pNQ1V5UXpBdU1ERWxNa014S1NVd1FTNXRkV3gwS0c5ell5Z3lNQ1V5UXkwd0xqRWxNa014S1M1dGIyUjFiR0YwWlNodWIybHpaU2d6SlRKRE1Ta3BMbkp2ZEdGMFpTZ3dMamNwS1NVd1FTNXdiM04wWlhKcGVtVW9KVFZDTXlVeVF6RXdKVEpETWlVMVJDNW1ZWE4wS0RBdU5Ta3VjMjF2YjNSb0tERXBLU1V3UVM1dGIyUjFiR0YwWlZKdmRHRjBaU2h2TUNVeVF5Z3BKVE5FSlRORmJXOTFjMlV1ZUNvd0xqQXdNeWtsTUVFdWIzVjBLQ2s9IFwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcIm1haGFsaWFfMFwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdUV0ZvWVd4cFlTVXlNRWd0VWlVd1FTVXlSaVV5UmlVeU1FbEhKVE5CSlRJd0pUUXdiVzFmYUhKZkpUQkJKVEJCYzJoaGNHVW9NakFsTWtNd0xqRWxNa013TGpBeEtTVXdRU1V5TUNVeU1DNXpZMkZzWlNnb0tTVXlNQ1V6UkNVelJTVXlNRTFoZEdndWMybHVLSFJwYldVcEtqTXBKVEJCSlRJd0pUSXdMbkpsY0dWaGRDZ29LU1V5TUNVelJDVXpSU1V5TUUxaGRHZ3VjMmx1S0hScGJXVXBLakV3S1NVd1FTVXlNQ1V5TUM1dGIyUjFiR0YwWlZKdmRHRjBaU2h2TUNrbE1FRWxNakFsTWpBdWMyTmhiR1VvS0NrbE1qQWxNMFFsTTBVbE1qQk5ZWFJvTG5OcGJpaDBhVzFsS1NveUtTVXdRU1V5TUNVeU1DNXRiMlIxYkdGMFpTaHViMmx6WlNneUpUSkRNQ2twSlRCQkpUSXdKVEl3TG5KdmRHRjBaU2d3TGpFbE1rTWxNakF3TGprcEpUQkJMbTkxZENodk1Da2xNRUVsTUVGemNtTW9iekFwSlRCQkxtMXZaSFZzWVhSbEtHOXpZeWcxTURBbE1rTXdKVEpETUNrcEpUQkJMbTkxZENodk1Ta2xNRUVsTUVGemNtTW9iekVwSlRCQkxtMXZaSFZzWVhSbFMyRnNaV2xrS0hadmNtOXViMmtvS0NrbE1qQWxNMFFsTTBVbE1qQk5ZWFJvTG5OcGJpaDBhVzFsS1NvekpUSkRNQzR4SlRKRE1DNHdNU2tsTWtNb0tTVXlNQ1V6UkNVelJTVXlNRTFoZEdndWMybHVLSFJwYldVcEtqTXBKVEJCTG5OallXeGxLQ2dwSlRJd0pUTkVKVE5GSlRJd1RXRjBhQzV6YVc0b2RHbHRaU2txTXlrbE1FRXViM1YwS0c4eUtTVXdRU1V3UVhKbGJtUmxjaWh2TWlrPVwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcIm1haGFsaWFfMVwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdUV0ZvWVd4cFlTVXlNRWd0VWlVd1FTVXlSaVV5UmlVeU1FbEhKVE5CSlRJd0pUUXdiVzFmYUhKZkpUQkJKVEJCYzJoaGNHVW9LQ2tsTWpBbE0wUWxNMFVsTWpCTllYUm9Mbk5wYmloMGFXMWxLU1V5UWpFcU1pa2xNRUV1Y205MFlYUmxLQ2dwSlRJd0pUTkVKVE5GSlRJd1RXRjBhQzVRU1NVeU1Db2xNakJ0YjNWelpTNTRKVEl3SlRKR01UZ3dLU1V3UVM1eVpYQmxZWFJZS0RNcEpUQkJMbkpsY0dWaGRGa29LQ2tsTTBRbE0wVk5ZWFJvTG5OcGJpaDBhVzFsS1NvMUtTVXdRUzV6WTJGc1pTZ29LU1V5TUNVelJDVXpSU1V5TUUxaGRHZ3VVRWtsTWtZMEtTVXdRUzVpYkdWdVpDaHpjbU1vYnpBcExtTnZiRzl5S0RFbE1rTXdKVEpETUNrcEpUQkJMbTF2WkhWc1lYUmxLRzl6WXlneU1DVXlReVV5TURBbE1rTXVOQ2twSlRCQkxtdGhiR1ZwWkNneUtTVXdRU1V5TUM1dmRYUW9iekFwSlRCQkpUQkJjbVZ1WkdWeUtHOHdLUT09XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwibWFoYWxpYV8yXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1ZtVnNkbVYwSlRJd1VHOXZiQ1V3UVNVeVJpVXlSaVV5TUdKNUpUSXdUV0ZvWVd4cFlTVXlNRWd0VWlVd1FTVXlSaVV5UmlVeU1FbEhKVE5CSlRJd2JXMWZhSEpmSlRCQkpUQkJKVEJCYm05cGMyVW9LU1V3UVM1amIyeHZjaWdvS1NVeU1DVXpSQ1V6UlNVeU1HRXVabVowSlRWQ01pVTFSQ295SlRKRE1DVXlReTQyS1NVd1FTNXRiMlIxYkdGMFpTaHViMmx6WlNnb0tTVXlNQ1V6UkNVelJTVXlNR0V1Wm1aMEpUVkNNQ1UxUkNveE1Da3BKVEJCTG5OallXeGxLQ2dwSlRORUpUTkZKVEl3WVM1bVpuUWxOVUl5SlRWRUtqVXBKVEJCTG14aGVXVnlLQ1V3UVNVeU1DVXlNSE55WXlodk1Da2xNRUVsTWpBbE1qQXViV0Z6YXlodmMyTW9NVEFwTG0xdlpIVnNZWFJsVW05MFlYUmxLRzl6WXlncEpUSkRPVEFsTWtNd0tTa2xNRUVsTWpBbE1qQXVjMk5oYkdVb0tDa2xNakFsTTBRbE0wVWxNakJoTG1abWRDVTFRakFsTlVRcU1pa2xNRUVsTWpBbE1qQXViSFZ0WVNnd0xqSWxNa013TGpNcEpUQkJLU1V3UVM1aWJHVnVaQ2h2TUNrbE1FRXViM1YwS0c4d0tTVXdRU1V3UVc5ell5Z3BKVEJCTG0xdlpIVnNZWFJsS0c1dmFYTmxLQ2dwSlRJd0pUTkVKVE5GSlRJd1lTNW1ablFsTlVJeEpUVkVKVEpDTlNrcEpUQkJMbU52Ykc5eUtERWxNa013SlRKRE1Da2xNRUV1YjNWMEtHOHhLU1V3UVNVd1FYTnlZeWh2TUNrbE1FRXViVzlrZFd4aGRHVW9iekVwSlRCQkxteGhlV1Z5S0NVd1FTVXlNQ1V5TUhOeVl5aHZNU2tsTUVFbE1qQWxNakF1YldGemF5aHZNU2tsTUVFbE1qQWxNakF1YzJGMGRYSmhkR1VvTnlrbE1FRXBKVEJCTG0xdlpIVnNZWFJsVW05MFlYUmxLRzh4S1NVd1FTNXliM1JoZEdVb0tDVTNRblJwYldVbE4wUXBKVEl3SlRORUpUTkZKVEl3ZEdsdFpTVXlOVE0yTUNvd0xqQTFLU1V3UVM1dmRYUW9ieklwSlRCQkpUQkJjbVZ1WkdWeUtHOHlLUT09XCJcbn0sXG57XG4gIFwic2tldGNoX2lkXCI6IFwibWFoYWxpYV8zXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1lua2xNakJOWVdoaGJHbGhKVEl3U0MxU0pUQkJKVEpHSlRKR0pUSXdTVWNsTTBFbE1qQnRiVjlvY2w4bE1FRWxNRUZ6YUdGd1pTZ29LU1V6UkNVelJVMWhkR2d1YzJsdUtIUnBiV1VwSlRKQ01Tb3pKVEpESlRJd0xqVWxNa011TURFcEpUQkJMbkpsY0dWaGRDZzFKVEpETXlVeVF5VXlNQ2dwSlRORUpUTkZZUzVtWm5RbE5VSXdKVFZFS2pJbE1rTWxNakFvS1NVelJDVXpSV0V1Wm1aMEpUVkNNU1UxUkNveUtTVXdRUzV6WTNKdmJHeFpLQzQxSlRKRE1DNHhLU1V3UVM1c1lYbGxjaWdsTUVFbE1qQWxNakJ6Y21Nb2J6RXBKVEJCSlRJd0pUSXdMbTFoYzJzb2J6QXBKVEJCSlRJd0pUSXdMbXgxYldFb0xqQXhKVEpESlRJd0xqRXBKVEJCSlRJd0pUSXdMbWx1ZG1WeWRDZ3VNaWtsTUVFcEpUQkJMbTF2WkhWc1lYUmxLRzh4SlRKRExqQXlLU1V3UVM1dmRYUW9iekFwSlRCQkpUQkJiM05qS0RRd0pUSkRKVEl3TUM0d09TVXlReVV5TURBdU9Ta2xNRUV1WTI5c2IzSW9MamtsTWtNd0pUSkROU2tsTUVFdWJXOWtkV3hoZEdVb2IzTmpLREV3S1M1eWIzUmhkR1VvTVNVeVF5VXlNREF1TlNrcEpUQkJMbkp2ZEdGMFpTZ3hKVEpESlRJd01DNHlLU1V3UVM1dmRYUW9iekVwSlRCQkpUQkJjbVZ1WkdWeUtHOHdLU1V3UVNVd1FRPT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJtYWhhbGlhXzRcIixcbiAgXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3UTJWc2JIVnNZWElsTWpBbE1qWWxNakJDYkc5aWRXeGhjaVV3UVNVeVJpVXlSaVV5TUdKNUpUSXdUV0ZvWVd4cFlTVXlNRWd0VWlVd1FTVXlSaVV5UmlVeU1FbEhKVE5CSlRJd2JXMWZhSEpmSlRCQkpUQkJjM0JsWldRbE1qQWxNMFFsTWpBd0xqTWxNRUVsTUVGemFHRndaU2d5TUNVeVF6QXVNaVV5UXpBdU15a2xNRUV1WTI5c2IzSW9NQzQxSlRKRE1DNDRKVEpETlRBcEpUQkJKVEl3SlRJd0xuTmpZV3hsS0NncEpUSXdKVE5FSlRORkpUSXdUV0YwYUM1emFXNG9kR2x0WlNrbE1rSXhLaklwSlRCQkpUSXdKVEl3TG5KbGNHVmhkQ2dvS1NVeU1DVXpSQ1V6UlNVeU1FMWhkR2d1YzJsdUtIUnBiV1VwS2pFd0tTVXdRU1V5TUNVeU1DNXRiMlIxYkdGMFpWSnZkR0YwWlNodk1Da2xNRUVsTWpBbE1qQXVjMk5oYkdVb0tDa2xNakFsTTBRbE0wVWxNakJOWVhSb0xuTnBiaWgwYVcxbEtTVXlRakVsTWpBcU1TNDFLU1V3UVNVeU1DVXlNQzV0YjJSMWJHRjBaU2h1YjJselpTZ3lKVEpETWlrcEpUQkJKVEl3SlRJd0xuSnZkR0YwWlNneEpUSkRKVEl3TGpJcEpUQkJKVEl3SlRJd0pUSkdKVEpHSlRJd0xtbHVkbVZ5ZENneUxqUXBKVEJCTG05MWRDaHZNQ2tsTUVFPVwiXG59LFxue1xuICBcInNrZXRjaF9pZFwiOiBcImFuZHJvbWVkYV8wXCIsXG4gIFwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd015NHdKVEJCSlRKR0pUSkdKVEl3WW5rbE1qQWxRMFVsT1RST1JGSXdUVE5FSlVORkpUazBKVEJCSlRKR0pUSkdKVEl3YUhSMGNITWxNMEVsTWtZbE1rWjNkM2N1YVc1emRHRm5jbUZ0TG1OdmJTVXlSbUZ1WkhKdmJUTmZaR0VsTWtZbE1FRWxNRUVsTUVGdWIybHpaU2d6SlRKRE1DNHpKVEpETXlrdWRHaHlaWE5vS0RBdU15VXlRekF1TURNcExtUnBabVlvYnpNbE1rTXdMak1wTG05MWRDaHZNU2tsTUVGbmNtRmthV1Z1ZENnbE5VSXdMak1sTWtNd0xqTWxNa016SlRWRUtTNWthV1ptS0c4d0tTNWliR1Z1WkNodk1Ta3ViM1YwS0c4ektTVXdRWFp2Y205dWIya29Nek1sTWtNekpUSkRNekFwTG5KdmRHRjBaU2d6SlRKRE1DNHpKVEpETUNrdWJXOWtkV3hoZEdWVFkyRnNaU2h2TWlVeVF6QXVNeWt1WTI5c2IzSW9MVE1sTWtNekpUSkRNQ2t1WW5KcFoyaDBibVZ6Y3lnektTNXZkWFFvYnpBcEpUQkJjMmhoY0dVb016QWxNa013TGpNbE1rTXhLUzVwYm5abGNuUW9LQ1UzUW5ScGJXVWxOMFFwSlRORUpUTkZUV0YwYUM1emFXNG9kR2x0WlNrcU15a3ViM1YwS0c4eUtTVXdRU1V3UVhKbGJtUmxjaWh2TXlrbE1FRT1cIlxufSxcbntcbiAgXCJza2V0Y2hfaWRcIjogXCJhbmRyb21lZGFfMVwiLFxuICBcImNvZGVcIjogXCJKVEpHSlRKR0pUSXdNeTR6SlRCQkpUSkdKVEpHSlRJd1lua2xNakFsUTBVbE9UUk9SRkl3VFRORUpVTkZKVGswSlRCQkpUSkdKVEpHSlRJd2FIUjBjSE1sTTBFbE1rWWxNa1ozZDNjdWFXNXpkR0ZuY21GdExtTnZiU1V5Um1GdVpISnZiVE5mWkdFbE1rWWxNRUVsTUVGdmMyTW9LUzV0YjJSMWJHRjBaVkp2ZEdGMFpTaHZNQ1V5UXpBdU15a3ViM1YwS0NrbE1FRnZjMk1vTXpNbE1rTXdMak1sTWtNd0xqTXBMbVJwWm1Zb2J6TWxNa016S1M1dmRYUW9iekVwSlRCQmIzTmpLRE1sTWtNd0xqTWxNa016TXlrdWJXOWtkV3hoZEdWTFlXeGxhV1FvYnpNbE1rTXpLUzVrYVdabUtHOHdLUzV2ZFhRb2J6SXBKVEJCYzNKaktHOHdKVEpETXlrdWJYVnNkQ2h2TVNVeVF6TXBMbXRoYkdWcFpDZ3pLUzV2ZFhRb2J6TXBKVEJCY21WdVpHVnlLRzh5S1E9PVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJhc2RydWJhbF8wXCIsXG4gXCJjb2RlXCI6IFwiSlRKR0pUSkdRWE5rY2lWRE15VkNRV0poYkNVeU1FZHZiV1Y2SlRCQkpUQkJibTlwYzJVb015VXlRekF1TVNVeVF6Y3BKVEJCTG5KdmRHRjBaU2d4SlRKRExURWxNa010TWlrdWJXRnpheWh6YUdGd1pTZ3lNQ2twSlRCQkxtTnZiRzl5WVcxaEtEQXVOU2tsTUVFdWJXOWtkV3hoZEdWVFkyRnNaU2h2TUNrbE1FRXViVzlrZFd4aGRHVlRZMkZzWlNodk1DVXlRekVsTWtNcEpUQkJMbUpzWlc1a0tHOHdLU1V3UVM1aWJHVnVaQ2h2TUNrbE1FRXVZbXhsYm1Rb2J6QXBKVEJCTG1Kc1pXNWtLRzh3S1NVd1FTNXZkWFFvYnpBcEpUQkJcIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwiZmxvcl8xXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR1NIbGtjbUVsTWpCSGJHbDBZMmg1SlRJd1UyeHBkQ1V5TUZOallXNGxNRUVsTWtZbE1rWkdiRzl5SlRJd1pHVWxNakJHZFdWbmJ5VXdRU1V5UmlVeVJtaDBkSEJ6SlROQkpUSkdKVEpHWm14dmNtUmxablZsWjI4dVoybDBhSFZpTG1sdkpUSkdKVEl3SlRCQmN6QXVhVzVwZEVOaGJTZ3BKVEJCYzNKaktITXdLUzV6WVhSMWNtRjBaU2d5S1M1amIyNTBjbUZ6ZENneExqTXBMbXhoZVdWeUtITnlZeWh2TUNrdWJXRnpheWh6YUdGd1pTZzBKVEpETWlrdWMyTmhiR1VvTUM0MUpUSkRNQzQzS1M1elkzSnZiR3hZS0RBdU1qVXBLUzV6WTNKdmJHeFlLREF1TURBeEtTa3ViVzlrZFd4aGRHVW9iekFsTWtNd0xqQXdNU2t1YjNWMEtHOHdLU1V3UVNVd1FRPT1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwiZmxvcl8yXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR1IyeHBkR05vSlRJd1VtbDJaWElsTUVFbE1rWWxNa1pHYkc5eUpUSXdaR1VsTWpCR2RXVm5ieVV3UVNVeVJpVXlSbWgwZEhCekpUTkJKVEpHSlRKR1pteHZjbVJsWm5WbFoyOHVaMmwwYUhWaUxtbHZKVEpHSlRCQmRtOXliMjV2YVNnNEpUSkRNU2tsTUVFdWJYVnNkQ2h2YzJNb01UQWxNa013TGpFbE1rTW9LU1V6UkNVelJVMWhkR2d1YzJsdUtIUnBiV1VwS2pNcExuTmhkSFZ5WVhSbEtETXBMbXRoYkdWcFpDZ3lNREFwS1NVd1FTNXRiMlIxYkdGMFpTaHZNQ1V5UXpBdU5Ta2xNRUV1WVdSa0tHOHdKVEpETUM0NEtTVXdRUzV6WTNKdmJHeFpLQzB3TGpBeEtTVXdRUzV6WTJGc1pTZ3dMams1S1NVd1FTNXRiMlIxYkdGMFpTaDJiM0p2Ym05cEtEZ2xNa014S1NVeVF6QXVNREE0S1NVd1FTNXNkVzFoS0RBdU15a2xNRUV1YjNWMEtDa2xNRUVsTUVFbE1FRnpjR1ZsWkNVeU1DVXpSQ1V5TURBdU1TVXdRU1V3UVNVd1FTVXdRUT09XCJcbn0sXG5cbntcblwic2tldGNoX2lkXCI6IFwibmVzc29fMFwiLFxuXCJjb2RlXCI6IFwiSlRCQkpUSkdKVEpHWTJ4dmRXUnpKVEl3YjJZbE1qQndZWE56WVdkbEpUQkJKVEpHSlRKR1lua2xNakJPWlhOemJ5VXdRU1V5UmlVeVJuZDNkeTV1WlhOemJ5NTRlWG9sTUVFbE1FRnphR0Z3WlNnbE5VSTBKVEpETlNVeVF6WWxOVVF1Wm1GemRDZ3dMakVwTG5OdGIyOTBhQ2d4S1NVeVF6QXVNREF3TURBeEpUSkRKVFZDTUM0eUpUSkRNQzQzSlRWRUxuTnRiMjkwYUNneEtTa2xNRUV1WTI5c2IzSW9NQzR5SlRKRE1DNDBKVEpETUM0ektTVXdRUzV6WTNKdmJHeFlLQ2dwSlRORUpUTkZUV0YwYUM1emFXNG9kR2x0WlNvd0xqSTNLU2tsTUVFdVlXUmtLQ1V3UVNVeU1DVXlNSE5vWVhCbEtDVTFRalFsTWtNMUpUSkROaVUxUkM1bVlYTjBLREF1TVNrdWMyMXZiM1JvS0RFcEpUSkRNQzR3TURBd01ERWxNa01sTlVJd0xqSWxNa013TGpjbE1rTXdMalVsTWtNd0xqTWxOVVF1YzIxdmIzUm9LREVwS1NVd1FTVXlNQ1V5TUM1amIyeHZjaWd3TGpZbE1rTXdMaklsTWtNd0xqVXBKVEJCSlRJd0pUSXdMbk5qY205c2JGa29NQzR6TlNrbE1FRWxNakFsTWpBdWMyTnliMnhzV0Nnb0tTVXpSQ1V6UlUxaGRHZ3VjMmx1S0hScGJXVXFNQzR6TXlrcEtTVXdRUzVoWkdRb0pUQkJKVEl3SlRJd2MyaGhjR1VvSlRWQ05DVXlRelVsTWtNMkpUVkVMbVpoYzNRb01DNHhLUzV6Ylc5dmRHZ29NU2tsTWtNd0xqQXdNREF3TVNVeVF5VTFRakF1TWlVeVF6QXVOeVV5UXpBdU15VTFSQzV6Ylc5dmRHZ29NU2twSlRCQkpUSXdKVEl3TG1OdmJHOXlLREF1TWlVeVF6QXVOQ1V5UXpBdU5pa2xNRUVsTWpBbE1qQXVjMk55YjJ4c1dTZ3RNQzR6TlNrbE1FRWxNakFsTWpBdWMyTnliMnhzV0Nnb0tTVXpSQ1V6UlUxaGRHZ3VjMmx1S0hScGJXVXFNQzQwTVNrcUxURXBLU1V3UVM1aFpHUW9KVEJCSlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3YzNKaktHOHdLUzV6YUdsbWRDZ3dMakF3TVNVeVF6QXVNREVsTWtNd0xqQXdNU2tsTUVFbE1qQWxNakFsTWpBbE1qQWxNakFsTWpBdWMyTnliMnhzV0NnbE5VSXdMakExSlRKRExUQXVNRFVsTlVRdVptRnpkQ2d3TGpFcExuTnRiMjkwYUNneEtTa2xNRUVsTWpBbE1qQWxNakFsTWpBbE1qQWxNakF1YzJOaGJHVW9KVFZDTVM0d05TVXlRekF1T1NVMVJDNW1ZWE4wS0RBdU15a3VjMjF2YjNSb0tERXBKVEpESlRWQ01TNHdOU1V5UXpBdU9TVXlRekVsTlVRdVptRnpkQ2d3TGpJNUtTNXpiVzl2ZEdnb01Ta3BKVEJCSlRJd0pUSXdKVEl3SlRJd0pUSXdKVEl3SlRKRE1DNDROU2tsTUVFdWJXOWtkV3hoZEdVb2RtOXliMjV2YVNneE1DVXlReklsTWtNeUtTa2xNRUV1YjNWMEtDaz1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwibWFsaXR6aW5fMFwiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdRMDVFVTBRbE1FRWxNa1lsTWtab2RIUndKVE5CSlRKR0pUSkdiV0ZzYVhSNmFXNWpiM0owWlhNdWJtVjBKVEpHSlRCQkpUSkdKVEpHSlRJd2MyRnVaQ1V5TUhOd2FYSmhiSE1sTUVFbE1FRnZjMk1vTXlVeVF5VXlNREF1TURFbE1rTWxNakF3TGpRcEpUQkJMbU52Ykc5eUtERXVNaVV5UXpFdU1pVXlRekV1TXlrbE1FRXVjMkYwZFhKaGRHVW9NQzQwS1NVd1FTNXRiMlIxYkdGMFpWSmxjR1ZoZENodmMyTW9NaWtsTWtNeEpUSkRKVEl3TWlVeVF5VXlNRFFsTWtNbE1qQXpLU1V3UVM1dGIyUjFiR0YwWlV0aGJHVnBaQ2h2YzJNb01USWxNa013TGpBMUpUSkRNQ2tsTWtNeEtTVXdRUzVzZFcxaEpUSXdLREF1TkNrbE1FRXVjbTkwWVhSbEtEUWxNa01sTWpBd0xqRWxNa013S1NVd1FTNXRiMlIxYkdGMFpTaHZNQ1V5UXlVeU1DZ3BKVEl3SlRORUpUTkZKVEl3Ylc5MWMyVXVlU1V5TUNvd0xqQXdNRElsTWpBcEpUQkJMbk5qWVd4bEtERXBMbVJwWm1Zb2J6RXBKVEJCTG05MWRDaHZNQ2s9XCJcbn0sXG57XG5cInNrZXRjaF9pZFwiOiBcIm1hbGl0emluXzFcIixcblwiY29kZVwiOiBcIkpUSkdKVEpHUTA1RVUwUWxNRUVsTWtZbE1rWm9kSFJ3SlROQkpUSkdKVEpHYldGc2FYUjZhVzVqYjNKMFpYTXVibVYwSlRKR0pUQkJKVEpHSlRKR1lXMWxZbUVsTUVFbE1FRnZjMk1vTVRVbE1rTWxNakF3TGpBeEpUSkRKVEl3TUM0eEtTNXRkV3gwS0c5ell5Z3hKVEpESlRJd0xUQXVNU2t1Ylc5a2RXeGhkR1VvYjNOaktESXBMbkp2ZEdGMFpTZzBKVEpETVNrbE1rTWxNakF5TUNrcEpUQkJMbU52Ykc5eUtEQWxNa015TGpRbE1rTTFLU1V3UVM1ellYUjFjbUYwWlNnd0xqUXBKVEJCTG14MWJXRW9NU1V5UXpBdU1TVXlReVV5TUNnMkpUSkRKVEl3S0NrbE0wUWxNMFVsTWpBeEpUSXdKVEpDSlRJd1lTNW1ablFsTlVJekpUVkVLU2tsTUVFdWMyTmhiR1VvTUM0M0pUSkRKVEl3S0NrbE0wUWxNMFVsTWpBd0xqY2xNakFsTWtJbE1qQmhMbVptZENVMVFqTWxOVVFwSlRCQkxtUnBabVlvYnpBcEpUSkdKVEpHSlRJd2J6QWxNRUV1YjNWMEtHOHdLU1V5UmlVeVJpVXlNRzh4XCJcbn0sXG57XG5cInNrZXRjaF9pZFwiOiBcIm1hbGl0emluXzJcIixcblwiY29kZVwiOiBcIkpUSkdKVEpHUTA1RVUwUWxNRUVsTWtZbE1rWm9kSFJ3SlROQkpUSkdKVEpHYldGc2FYUjZhVzVqYjNKMFpYTXVibVYwSlRKR0pUQkJKVEpHSlRKR1kzSmhlbmtsTWpCemNYVmhjbVZ6SlRCQkpUQkJjMmhoY0dVb05DVXlReVV5TUNnd0xqQXhKVEpESlRJd0tDa2xNMFFsTTBVbE1qQXdMaklsTWpBbE1rSWxNakJoTG1abWRDVTFRaklsTlVRcEpUSkRNU2tsTUVFdWJYVnNkQ2h2YzJNb01TVXlReVV5TURFcExtMXZaSFZzWVhSbEtHOXpZeWcxS1M1eWIzUmhkR1VvTVM0MEpUSkRNU2tsTWtNektTa2xNRUV1WTI5c2IzSW9NU1V5UXpJbE1rTTBLU1V3UVM1ellYUjFjbUYwWlNnd0xqSXBKVEJCTG14MWJXRW9NUzR5SlRKRE1DNHdOU1V5UXlVeU1DZzFKVEpESlRJd0tDa2xNMFFsTTBVbE1qQXlKVEl3SlRKQ0pUSXdZUzVtWm5RbE5VSXpKVFZFS1NrbE1FRXVjMk5oYkdVb01DNDJKVEpESlRJd0tDa2xNMFFsTTBVbE1qQXdMamtsTWpBbE1rSWxNakJoTG1abWRDVTFRak1sTlVRcEpUQkJMbVJwWm1Zb2J6QXBKVEpHSlRKR0pUSXdiekFsTUVFdWIzVjBLRzh3S1NVeVJpVXlSaVV5TUc4eFwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJraG9wYXJ6aV8wXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR0pUSXdTR0Z3Y0hrbE1qQk5ZVzVrWVd4aEpUQkJKVEpHSlRKR0pUSXdRbmtsTWpCQlltaHBibUY1SlRJd1MyaHZjR0Z5ZW1rbE1FRWxNa1lsTWtZbE1qQjBkMmwwZEdWeUpUSkdaMmwwYUhWaUpUSkdhVzV6ZEdGbmNtRnRKVE5CSlRJd0pUUXdhMmh2Y0dGeWVta2xNRUYyYjNKdmJtOXBLRFVsTWtNdE1DNHhKVEpETlNrbE1FRXVZV1JrS0c5ell5Z3hKVEpETUNVeVF6RXBLUzVyWVd4bGFXUW9NakVwSlRCQkxuTmpZV3hsS0RFbE1rTXhKVEpETWlrdVkyOXNiM0poYldFb0tTNXZkWFFvYnpFcEpUQkJjM0pqS0c4eEtTNXRkV3gwS0hOeVl5aHpNQ2t1Ylc5a2RXeGhkR1ZTYjNSaGRHVW9iekVsTWtNeE1EQXBKVEpESlRJd0xUQXVOU2tsTUVFbE1qQWxNakF1YjNWMEtHOHdLU1V3UVNVd1FRPT1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwia2hvcGFyemlfMVwiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3VUdWeWNHVjBkV0ZzSlRJd1pXeGxkbUYwYjNJbE1qQmlkWFIwYjI1ekpUQkJKVEpHSlRKR0pUSXdRbmtsTWpCTGFHOXdZWEo2YVNVd1FTVXlSaVV5UmlVeU1HaDBkSEFsTTBFbE1rWWxNa1pyYUc5d1lYSjZhUzVqYjIwbE1FRWxNRUZ6YUdGd1pTZ3pLUzVoWkdRb2IzTmpLREVsTWtNd0xqVWxNa014S1NVeVF5VXlNREVwSlRCQkpUQTVMbUZrWkNodk1TVXlReVV5TUNncEpUSXdKVE5FSlRORkpUSXdLRTFoZEdndWMybHVLSFJwYldVbE1rWTBLU1V5TUNvbE1qQXdMamNsTWpBbE1rSWxNakF3TGpFcEtTVXdRU1V3T1NVeVJpVXlSaTV5WlhCbFlYUW9OU2tsTUVFbE1qQWxNakFsTURrdWMyTmhiR1VvS0NrbE0wUWxNMFZOWVhSb0xuTnBiaWgwYVcxbEpUSXdKVEpHSlRJd01UWXBLUzV5YjNSaGRHVW9NQ1V5UXlVeU1DMHdMakVwSlRCQkpUQTVMbTkxZENodk1Ta2xNRUVsTUVGemNtTW9iekVwSlRCQkpUSXdKVEl3TG5KdmRHRjBaU2d3SlRKRE1DNHhLU1V3UVNVeU1DVXlNQzV2ZFhRb0tRPT1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwia2hvcGFyemlfMlwiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3VW1WaGJHeDVKVEl3VEc5MlpTVXdRU1V5UmlVeVJpVXlNR0o1SlRJd1FXSm9hVzVoZVNVeU1FdG9iM0JoY25wcEpUQkJKVEpHSlRKR0pUSXdhSFIwY0NVelFTVXlSaVV5Um10b2IzQmhjbnBwTG1OdmJTVXdRVzl6WXlneE1EQWxNa010TUM0d01USTBOU1V5UXpFcExuQnBlR1ZzWVhSbEtEVXdLUzVyWVd4bGFXUW9LQ2tsTTBRbE0wVW9UV0YwYUM1emFXNG9kR2x0WlNVeVJqZ3BLamtsTWtJektTa3VjbTkwWVhSbEtEQWxNa013TGpFeU5Ta2xNRUV1Ylc5a2RXeGhkR1ZTYjNSaGRHVW9jMmhoY0dVb015a3VjMk5oYkdVb0tDa2xNMFFsTTBVb1RXRjBhQzVqYjNNb2RHbHRaU2txTWlrcExuSnZkR0YwWlNnd0pUSkRMVEF1TWpVcEtTNWthV1ptS0hOeVl5aHZNQ2t1WW5KcFoyaDBibVZ6Y3lnd0xqTXBLU1V3UVNVeU1DVXlNQzV2ZFhRb0tRPT1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwia2hvcGFyemlfM1wiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3UVhGaGRYUnBZeVV5TUdKc2RXSnpKVEJCSlRKR0pUSkdKVEl3UW5rbE1qQkxhRzl3WVhKNmFTVXdRU1V5UmlVeVJpVXlNR2gwZEhCekpUTkJKVEpHSlRKR2EyaHZjR0Z5ZW1rdVkyOXRKVEJCSlRCQlozSmhaR2xsYm5Rb01DNHlOU2tsTUVFdVlXUmtLRzV2YVhObEtDa2xNa01sTWpBb0tTVXpSQ1V6UlUxaGRHZ3VZMjl6S0hScGJXVXBLU1V3UVM1dGIyUjFiR0YwWlZKdmRHRjBaU2h6Y21Nb2J6QXBMbkp2ZEdGMFpTZ3dKVEpESlRJd0xUQXVOVElwSlRKREpUSXdNQzR5S1M1dGRXeDBLSE5vWVhCbEtETTJNQ2tsTWtNbE1qQXdMamdwSlRCQkxuSmxjR1ZoZENneE1DVXlRelVwTG0xMWJIUW9jMmhoY0dVb016WXdLUzV6WTJGc1pTZ29LU1V6UkNVelJVMWhkR2d1YzJsdUtIUnBiV1VwS1NVeVF5VXlNREF1T0NrdWNtOTBZWFJsS0RBbE1rTWxNakF3TGpJcEpUQkJMbVJwWm1Zb2MzSmpLRzh3S1M1eWIzUmhkR1VvTUNVeVF5VXlNQzB3TGpJcEpUSkRKVEl3TUM0eUtTVXdRUzV2ZFhRb0tRPT1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwiY2VsZXN0ZV8wXCIsXG5cImNvZGVcIjogXCJKVEJCSlRJd0pUSkdKVEpHSlRJd1VIVmxjblJoY3lVeU1FbEpKVEJCSlRKR0pUSkdKVEl3Y0c5eUpUSXdRMlZzWlhOMFpTVXlNRUpsZEdGdVkzVnlKVEJCSlRKR0pUSkdKVEl3YUhSMGNITWxNMEVsTWtZbE1rWm5hWFJvZFdJdVkyOXRKVEpHWlhOemRHVmlZVzRsTUVFbE1FRnZjMk1vTVRNbE1rTXdKVEpETVNrbE1FRWxNakFsTWpBdWEyRnNaV2xrS0NrbE1FRWxNakFsTWpBdWJXRnpheWh6YUdGd1pTZzBKVEpETUM0ekpUSkRNU2twSlRCQkpUSXdKVEl3TG0xdlpIVnNZWFJsVW05MFlYUmxLSE5vWVhCbEtEUWxNa013TGpFbE1rTXhLU2tsTUVFbE1qQWxNakF1Ylc5a2RXeGhkR1ZTYjNSaGRHVW9jMmhoY0dVb05DVXlRekF1TVNVeVF6QXVPU2twSlRCQkpUSXdKVEl3TG0xdlpIVnNZWFJsVW05MFlYUmxLSE5vWVhCbEtEUWxNa013TGpFbE1rTXdMamdwS1NVd1FTVXlNQ1V5TUM1elkyRnNaU2d3TGpNcEpUQkJKVEl3SlRJd0xtRmtaQ2h6YUdGd1pTZzBKVEpETUM0eUpUSkRNU2t1WTI5c2IzSW9NQzR6SlRKRE1TVXlRekVsTWtNd0xqVXBLU1V3UVNVeU1DVXlNQzV5YjNSaGRHVW9LQ2tsTTBRbE0wVjBhVzFsS1NVd1FTVXlNQ1V5TUM1dmRYUW9LUT09XCJcbn0sXG57XG5cInNrZXRjaF9pZFwiOiBcImNlbGVzdGVfMVwiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3VUhWbGNuUmhjeVV5TUVsSlNTVXdRU1V5UmlVeVJpVXlNSEJ2Y2lVeU1FTmxiR1Z6ZEdVbE1qQkNaWFJoYm1OMWNpVXdRU1V5UmlVeVJpVXlNR2gwZEhCekpUTkJKVEpHSlRKR1oybDBhSFZpTG1OdmJTVXlSbVZ6YzNSbFltRnVKVEJCSlRJd0pUQkJiM05qS0RRd0pUSkRNQzR5SlRKRE1Ta2xNRUVsTWpBbE1qQXViVzlrZFd4aGRHVlRZMkZzWlNodmMyTW9OREFsTWtNd0pUSkRNU2t1YTJGc1pXbGtLRGdwS1NVd1FTVXlNQ1V5TUM1eVpYQmxZWFFvTWlVeVF6UXBKVEJCSlRJd0pUSXdMbTF2WkhWc1lYUmxLRzh3SlRKRE1DNHdOU2tsTUVFbE1qQWxNakF1Ylc5a2RXeGhkR1ZMWVd4bGFXUW9jMmhoY0dVb05DVXlRekF1TVNVeVF6RXBLU1V3UVNVeU1DVXlNQzV2ZFhRb2J6QXBcIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwiY2VsZXN0ZV8yXCIsXG5cImNvZGVcIjogXCJKVEJCSlRJd0pUSkdKVEpHSlRJd1VIVmxjblJoY3lVd1FTVXlSaVV5UmlVeU1IQnZjaVV5TUVObGJHVnpkR1VsTWpCQ1pYUmhibU4xY2lVd1FTVXlSaVV5UmlVeU1HaDBkSEJ6SlROQkpUSkdKVEpHWjJsMGFIVmlMbU52YlNVeVJtVnpjM1JsWW1GdUpUQkJKVEJCYjNOaktERXpKVEpETUNVeVF6RXBKVEJCSlRJd0pUSXdMbTF2WkhWc1lYUmxLRzl6WXlneU1TVXlRekF1TWpVbE1rTXdLU2tsTUVFbE1qQWxNakF1Ylc5a2RXeGhkR1ZUWTJGc1pTaHZjMk1vTXpRcEtTVXdRU1V5TUNVeU1DNXRiMlIxYkdGMFpVdGhiR1ZwWkNodmMyTW9OVFVwSlRKRE1DNHhKVEpETVNrbE1FRWxNakFsTWpBdWIzVjBLQ2s9XCJcbn0sXG57XG5cInNrZXRjaF9pZFwiOiBcImFsZXhhbmRyZV8wXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR0pUSXdKVEl5ZEdobExYZGhiR3dsTWpJbE1FRWxNa1lsTWtZbE1qQkJiR1Y0WVc1a2NtVWxNakJTWVc1blpXd2xNRUVsTWtZbE1rWWxNakIzZDNjdVlXeGxlR0Z1WkhKbGNtRnVaMlZzTG1GeWRDNWljaVV5Um1oNVpISmhMbWgwYld3bE1FRWxNRUZ6Y0dWbFpDVXpSQzR3TWpJeUpUQkJiM05qS0RRNEpUSkRMUzR4SlRKRE1Da3VkR2h5WlhOb0tDVTFRaTR6SlRKRExqY2xOVVF1Wm1GemRDZ3VOelVwSlRKRE1Da3VZMjlzYjNJb01DVXlRekFsTWtNeEtTVXdRU1V3UVM1aFpHUW9KVEJCSlRJd0pUSXdKVEl3SlRJd2IzTmpLREk0SlRKRExqRWxNa013S1M1MGFISmxjMmdvSlRWQ0xqTWxNa011TnlVMVJDNW1ZWE4wS0M0M05Ta2xNa013S1M1eWIzUmhkR1VvTXk0eE5DVXlSalFwSlRCQkpUSXdKVEl3SlRJd0pUSXdMbU52Ykc5eUtERWxNa013SlRKRE1Da2xNRUVsTWpBbE1qQWxNakFsTWpBdWJXOWtkV3hoZEdWVFkyRnNaU2dsTWpCdmMyTW9OalFsTWtNdExqQXhKVEpETUNrdWRHaHlaWE5vS0NVMVFpNHpKVEpETGpjbE5VUXVabUZ6ZENndU56VXBKVEpETUNrbE1qQXBKVEJCS1NVd1FTNWthV1ptS0NVd1FTVXlNQ1V5TUNVeU1DVXlNRzl6WXlneU9DVXlReTR4SlRKRE1Da3VkR2h5WlhOb0tDVTFRaTR6SlRKRExqY2xOVVF1Wm1GemRDZ3VOU2tsTWtNd0tTNXliM1JoZEdVb015NHhOQ1V5UmpJcEpUQkJKVEl3SlRJd0pUSXdKVEl3TG1OdmJHOXlLREVsTWtNd0pUSkRNU2tsTUVFbE1qQWxNakFsTWpBbE1qQXViVzlrZFd4aGRHVlRZMkZzWlNnbE1qQnZjMk1vTmpRbE1rTXRMakF4TlNVeVF6QXBMblJvY21WemFDZ2xOVUl1TXlVeVF5NDNKVFZFTG1aaGMzUW9MalVwSlRKRE1Da2xNakFwSlRCQktTVXdRUzV0YjJSMWJHRjBaVkp2ZEdGMFpTZ2xNakJ2YzJNb05UUWxNa010TGpBd05TVXlRekFwTG5Sb2NtVnphQ2dsTlVJdU15VXlReTQzSlRWRUxtWmhjM1FvTGpJMUtTVXlRekFwSlRJd0tTVXdRUzV0YjJSMWJHRjBaVk5qWVd4bEtDVXlNRzl6WXlnME5DVXlReTB1TURJd0pUSkRNQ2t1ZEdoeVpYTm9LQ1UxUWk0ekpUSkRMamNsTlVRdVptRnpkQ2d1TWpVcEpUSkRNQ2tsTWpBcEpUQkJMbU52Ykc5eVlXMWhLQ1V5TUNncEpUTkVKVE5GVFdGMGFDNXphVzRvZEdsdFpTVXlSakkzS1NvdU1ERXlNaklsTWtJNUxqZzVLU1V3UVM1elkyRnNaU2d5TGpFeU1pa2xNRUVsTUVFdWIzVjBLQ2s9XCJcbn0sXG57XG5cInNrZXRjaF9pZFwiOiBcImFsZXhhbmRyZV8xXCIsXG5cImNvZGVcIjogXCJKVEJCSlRJd0pUSkdKVEpHSlRJd0pUSXlaWGxsSlRJd2IyWWxNakIwYUdVbE1qQmlaV2h2YkdSbGNpVXlNaVV3UVNVeVJpVXlSaVV5TUVGc1pYaGhibVJ5WlNVeU1GSmhibWRsYkNVd1FTVXlSaVV5UmlVeU1IZDNkeTVoYkdWNFlXNWtjbVZ5WVc1blpXd3VZWEowTG1KeUpUSkdhSGxrY21FdWFIUnRiQ1V3UVNVd1FXNXZhWE5sS0RZbE1rTXVNRFVwSlRCQkxtMTFiSFFvSlRJd2IzTmpLRGtsTWtNd0pUSkRKVEl3S0NrbE0wUWxNMFZOWVhSb0xuTnBiaWgwYVcxbEpUSkdNUzQxS1NVeVFqSWxNakFwSlRJd0tTVXdRUzV0ZFd4MEtDVXdRU1V5TUNVeU1DVXlNQ1V5TUc1dmFYTmxLRGtsTWtNdU1ETXBMbUp5YVdkb2RHNWxjM01vTVM0eUtTNWpiMjUwY21GemRDZ3lLU1V3UVNVeU1DVXlNQ1V5TUNVeU1DNXRkV3gwS0NVeU1HOXpZeWc1SlRKRE1DVXlReVV5TUNncEpUTkVKVE5GVFdGMGFDNXphVzRvZEdsdFpTVXlSak1wSlRKQ01UTWxNakFwSlRJd0tTVXdRU2tsTUVFdVpHbG1aaWdsTUVFbE1qQWxNakFsTWpBbE1qQnViMmx6WlNneE5TVXlReTR3TkNrdVluSnBaMmgwYm1WemN5Z3VNaWt1WTI5dWRISmhjM1FvTVM0ektTVXdRU1V5TUNVeU1DVXlNQ1V5TUM1dGRXeDBLQ1V5TUc5ell5ZzVKVEpETUNVeVF5VXlNQ2dwSlRORUpUTkZUV0YwYUM1emFXNG9kR2x0WlNVeVJqVXBKVEpDTVRNbE1qQXBKVEl3S1NVd1FTVXlNQ1V5TUNVeU1DVXlNQzV5YjNSaGRHVW9KVEl3S0NrbE0wUWxNMFYwYVcxbEpUSkdNek1sTWpBcEpUQkJLU1V3UVM1elkyRnNaU2dsTWpBb0tTVXpSQ1V6UlUxaGRHZ3VjMmx1S0hScGJXVWxNa1kyTGpJcEtpNHhNaVV5UWk0eE5TVXlNQ2tsTUVFdWJXOWtkV3hoZEdWVFkyRnNaU2dsTUVFbE1qQWxNakFsTWpBbE1qQnZjMk1vTXlVeVF6QWxNa013S1M1dGRXeDBLQ1V5TUc5ell5Z3pKVEpETUNVeVF6QXBMbkp2ZEdGMFpTZ3pMakUwSlRKR01pa2xNakFwSlRCQkpUSXdKVEl3SlRJd0pUSXdMbkp2ZEdGMFpTZ2xNakFvS1NVelJDVXpSWFJwYldVbE1rWXlOU1V5TUNrdWMyTmhiR1VvTGpNNUtTNXpZMkZzWlNneEpUSkRMallsTWtNeEtTNXBiblpsY25Rb0tTVXdRU1V5TUNVeU1DVXlNQ1V5TUNVeVF5VXlNQ2dwSlRORUpUTkZUV0YwYUM1emFXNG9kR2x0WlNVeVJqVXVNeWtxTVM0MUpUSkNNeVV5TUNVeU1Da2xNRUV1Y205MFlYUmxLQ1V5TUNncEpUTkVKVE5GZEdsdFpTVXlSakl5SlRJd0tTVXdRUzV0ZFd4MEtDVXlNSE5vWVhCbEtERXdNQ1V5UXk0NUpUSkRMakF4S1M1elkyRnNaU2d4SlRKRExqWWxNa014S1NVeU1Da2xNRUV1YjNWMEtDaz1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwiYWxleGFuZHJlXzJcIixcblwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd0pUSXlaV2RuSlRJd2IyWWxNakIwYUdVbE1qQndhRzlsYm1sNEpUSXlKVEJCSlRKR0pUSkdKVEl3UVd4bGVHRnVaSEpsSlRJd1VtRnVaMlZzSlRCQkpUSkdKVEpHSlRJd2QzZDNMbUZzWlhoaGJtUnlaWEpoYm1kbGJDNWhjblF1WW5JbE1rWm9lV1J5WVM1b2RHMXNKVEJCSlRCQmMzQmxaV1FsTTBReExqSWxNRUZ6YUdGd1pTZzVPU1V5UXk0eE5TVXlReTQxS1M1amIyeHZjaWd3SlRKRE1TVXlReklwSlRCQkpUQkJMbVJwWm1Zb0pUSXdjMmhoY0dVb01qUXdKVEpETGpVbE1rTXdLUzV6WTNKdmJHeFlLQzR3TlNrdWNtOTBZWFJsS0NVeU1DZ3BKVE5FSlRORmRHbHRaU1V5UmpFd0pUSXdLUzVqYjJ4dmNpZ3hKVEpETUNVeVF5NDNOU2tsTWpBcEpUQkJMbVJwWm1Zb0pUSXdjMmhoY0dVb09Ua2xNa011TkNVeVF5NHdNRElwTG5OamNtOXNiRmdvTGpFd0tTNXliM1JoZEdVb0pUSXdLQ2tsTTBRbE0wVjBhVzFsSlRKR01qQWxNakFwTG1OdmJHOXlLREVsTWtNd0pUSkRMamMxS1NVeU1Da2xNRUV1WkdsbVppZ2xNakJ6YUdGd1pTZzVPU1V5UXk0ekpUSkRMakF3TWlrdWMyTnliMnhzV0NndU1UVXBMbkp2ZEdGMFpTZ2xNakFvS1NVelJDVXpSWFJwYldVbE1rWXpNQ1V5TUNrdVkyOXNiM0lvTVNVeVF6QWxNa011TnpVcEpUSXdLU1V3UVM1a2FXWm1LQ1V5TUhOb1lYQmxLRGs1SlRKRExqSWxNa011TURBeUtTNXpZM0p2Ykd4WUtDNHlNQ2t1Y205MFlYUmxLQ1V5TUNncEpUTkVKVE5GZEdsdFpTVXlSalF3SlRJd0tTNWpiMnh2Y2lneEpUSkRNQ1V5UXk0M05Ta2xNakFwSlRCQkxtUnBabVlvSlRJd2MyaGhjR1VvT1RrbE1rTXVNU1V5UXk0d01ESXBMbk5qY205c2JGZ29MakkxS1M1eWIzUmhkR1VvSlRJd0tDa2xNMFFsTTBWMGFXMWxKVEpHTlRBbE1qQXBMbU52Ykc5eUtERWxNa013SlRKRExqYzFLU1V5TUNrbE1FRWxNRUV1Ylc5a2RXeGhkR1ZUWTJGc1pTZ2xNRUVsTWpBbE1qQnphR0Z3WlNneU5EQWxNa011TlNVeVF6QXBMbk5qY205c2JGZ29MakExS1M1eWIzUmhkR1VvSlRJd0tDa2xNMFFsTTBWMGFXMWxKVEpHTVRBbE1qQXBKVEJCSlRJd0pUSXdKVEpESlRJd0tDa2xNMFFsTTBVb1RXRjBhQzV6YVc0b2RHbHRaU1V5UmpNcEtpNHlLU1V5UWk0eUpUSXdLU1V3UVNVd1FTNXpZMkZzWlNneExqWWxNa011TmlVeVF6RXBKVEJCTG05MWRDZ3BcIlxufSx7XG5cInNrZXRjaF9pZFwiOiBcImFmYWxmbF8wXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR1ptbHNaWFFsTWpCdGFXZHViMjRsTUVFbE1rWWxNa1lsTWpCQlJrRk1Sa3dsTUVFbE1rWWxNa1lsTWpCcGJuTjBZV2R5WVcwbE1rWmhYMlpmWVd4bWJDVXlNQ1V3UVNVd1FXOXpZeWd4TURBbE1rTXRNQzR3TURFNEpUSkRNQzR4TnlrdVpHbG1aaWh2YzJNb01qQWxNa013TGpBd01EQTRLUzV5YjNSaGRHVW9UV0YwYUM1UVNTVXlSakF1TURBd01ETXBLU1V3UVM1dGIyUjFiR0YwWlZOallXeGxLRzV2YVhObEtERXVOU1V5UXpBdU1UZ3BMbTF2WkhWc1lYUmxVMk5oYkdVb2IzTmpLREV6S1M1eWIzUmhkR1VvS0NrbE0wUWxNMFZOWVhSb0xuTnBiaWgwYVcxbEpUSkdNaklwS1NrbE1rTXpLU1V3UVM1amIyeHZjaWd4TVNVeVF6QXVOU1V5UXpBdU5DVXlReVV5TURBdU9TVXlReVV5TURBdU1pVXlReVV5TURBdU1ERXhKVEpESlRJd05TVXlReVV5TURJeUpUSkRKVEl3SlRJd01DNDFKVEpESlRJd0xURXBMbU52Ym5SeVlYTjBLREV1TkNrbE1FRXVZV1JrS0hOeVl5aHZNQ2t1Ylc5a2RXeGhkR1VvYnpBbE1rTXVNRFFwSlRKRExqWWxNa01sTWpBdU9Ta2xNRUVsTWpBbE1qQWxNa1lsTWtZdWNHbDRaV3hoZEdVb01DNDBKVEpESlRJd01DNHlKVEpESlRJd01DNHhLU1V3UVM1cGJuWmxjblFvS1M1aWNtbG5hSFJ1WlhOektEQXVNREF3TXlVeVF5VXlNRElwTG1OdmJuUnlZWE4wS0NVeU1EQXVOU1V5UXlVeU1ESWxNa01sTWpBd0xqRWxNa01sTWpBeUtTNWpiMnh2Y2lnMEpUSkRKVEl3TFRJbE1rTWxNakF3TGpFcEpUQkJMbTF2WkhWc1lYUmxVMk5oYkdVb2IzTmpLRElwSlRKRExUQXVNaVV5UXlVeU1ESWxNa01sTWpBeEpUSkRKVEl3TUM0ektTVXdRU1V5TUM1d2IzTjBaWEpwZW1Vb01qQXdLU1V5TUM1eWIzUmhkR1VvTVNVeVF5VXlNREF1TWlVeVF5VXlNREF1TURFbE1rTWxNakF3TGpBd01Ta2xNRUVsTWpBdVkyOXNiM0lvTWpJbE1rTWxNakF0TWlVeVF5VXlNREF1TlNVeVF5VXlNREF1TlNVeVF5VXlNREF1TURBd01TVXlReVV5TUNVeU1EQXVNU1V5UXlVeU1EQXVNaVV5UXlVeU1EZ3BMbU52Ym5SeVlYTjBLREF1TVRnbE1rTWxNakF3TGpNbE1rTWxNakF3TGpFbE1rTWxNakF3TGpJbE1rTWxNakF3TGpBekpUSkRKVEl3TVNrbE1qQXVKVEl3WW5KcFoyaDBibVZ6Y3lnd0xqQXdNREVsTWtNbE1qQXRNU1V5UXlVeU1ERXdLU1V3UVNVd09TNXZkWFFvS1E9PVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJlZXJpZV9lYXJfMFwiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdKVEl3WldWZk1pVXlNQzRsTWpCTlZVeFVTVlpGVWxORkpUSXdMaVV5TUhScGJXVWxNakJoYm1RbE1qQm1aV1ZrWW1GamF5VXdRU1V5UmlVeVJpVXlNR1ZmWlNVeU1DVXlSaVV5UmlVeU1DVTBNR1ZsY21sbFgyVmhjaVV3UVhCaGRDVXlNQ1V6UkNVeU1DZ3BKVE5FSlRORkpUQkJjMjlzYVdRb0tTVXdRUzVzWVhsbGNpaHpiMnhwWkNncExtUnBabVlvSlRCQkpUSXdKVEl3YjNOaktDaDBhVzFsSlRKR01UWXBKVEl3S2lVeU1ERWxNa01sTWpBb2RHbHRaU1V5UmpFd01EQXBKVEl3S2lVeU1EQXVNaVV5TUNVeU1Da2xNRUVsTWpBbE1qQWxNakFsTWpBdWJYVnNkQ2h2YzJNb0tIUnBiV1VsTWtZNEtTVXlNQ29sTWpBeEpUSkRKVEl3S0hScGJXVWxNa1l4TURBMktTVXlNQ29sTWpBd0xqSWxNakFsTWpBcExuSnZkR0YwWlNneExqVTNLU2tsTUVFbE1qQWxNakFsTWpBbE1qQXViVzlrZFd4aGRHVW9LSE5vWVhCbEtERXdOaVV5UXpFbE1rTXdMakExS1NrcEpUQkJKVEl3SlRJd0pUSXdKVEl3TG0xMWJIUW9jMmhoY0dVb01UQTJKVEpETVNVeVF6QXVNRFVwS1NVd1FTVXlNQ1V5TUNrcEpUQkJKVEl3SlRJd0xtMXZaSFZzWVhSbFUyTmhiR1VvYjNOaktESWxNa013TGpFeU5Ta2xNa013TGpFeU5Ta2xNRUVsTWtZbE1rWWxNRUZ6YjJ4cFpDZ3BKVEJCTG14aGVXVnlLSE52Ykdsa0tERWxNa014SlRKRE1Ta2xNRUVsTWpBbE1qQXViWFZzZENod1lYUW9LU1V3UVNVeU1DVXlNQzVrYVdabUtITnlZeWh2TUNrdWMyTmhiR1VvTUM0eUtTNXRkV3gwS0hOdmJHbGtLQ2tsTWtNbE5VSXdMamNsTWtNd0xqWWxNa013TGpRbE1rTXdMallsTlVRcExtdGhiR1ZwWkNneExqQXhLUzV6WVhSMWNtRjBaU2d3TGpNcEtTVXdRU2tsTUVFdWJHRjVaWElvYzI5c2FXUW9NU1V5UXpFbE1rTXhLU1V3UVNVeU1DVXlNQ1V5TUNVeU1DNXRZWE5yS0NVd1FTVXlNQ1V5TUNVeU1DVXlNQ1V5TUNVeU1HNXZhWE5sS0RJbE1rTXdMakExS1NVd1FTVXlNQ1V5TUNVeU1DVXlNQ1V5TUNVeU1DNXBiblpsY25Rb0tTNWpiMnh2Y21GdFlTZ3lLUzV3YjNOMFpYSnBlbVVvT0NVeVF6UXBMbXgxYldFb01DNHlOU2t1ZEdoeVpYTm9LREF1TlNrbE1FRWxNakFsTWpBbE1qQWxNakFsTWpBbE1qQXViVzlrZFd4aGRHVlNiM1JoZEdVb2IzTmpLREVsTWtNd0xqVXBLU1V3UVNVeU1DVXlNQ1V5TUNVeU1Da2xNRUVsTWpBbE1qQWxNakFsTWpBdWJYVnNkQ2huY21Ga2FXVnVkQ2d3TGpVcExtdGhiR1ZwWkNneEtTNWpiMnh2Y21GdFlTZ3lLUzV6WVhSMWNtRjBaU2d4TGpFcExtTnZiblJ5WVhOMEtERXVOaWt1YlhWc2RDaHpiMnhwWkNncEpUSkRNQzQwTlNrcEpUQkJKVEl3SlRJd0tTa2xNRUVsTWpBbE1qQXViM1YwS0NrbE1FRWxNa1lsTWtZbE1FRnpjR1ZsWkNVelJDVXlNREF1TlNVd1FRPT1cIlxufSxcbntcblwic2tldGNoX2lkXCI6IFwiZWVyaWVfZWFyXzFcIixcblwiY29kZVwiOiBcIkpUSkdKVEpHSlRJd1pXVmZNeVV5TUNVeVJpVXlSa3hKVGtWVEpUQkJKVEpHSlRKR0pUSXdaVjlsSlRJd0pUSkdKVEpHSlRJd0pUUXdaV1Z5YVdWZlpXRnlKVEJCSlRKR0pUSkdKVEJCSlRKR0pUSkdZbUZ6WldRbE1qQnZiaVV3UVNVeVJpVXlSaVUwTUc1aGIzUnZYMmhwWldSaEpUQkJKVEpHSlRKR2FIUjBjSE1sTTBFbE1rWWxNa1p1WVc5MGIyaHBaV1JoTG1OdmJTVXlSbUpzYjJjbE1rWm9lV1J5WVMxaWIyOXJKVEpHSlRCQkpUSkdKVEpHSlRCQmJpVXlNQ1V6UkNVeU1EZ2xNRUZoSlRJd0pUTkVKVEl3S0NrbE1qQWxNMFFsTTBVbE1qQnphR0Z3WlNnMEpUSkRNQzR5TlNVeVF6QXVNREE1S1M1eWIzUmhkR1VvS0NrbE0wUWxNMFYwYVcxbEpUSkdMVFF3S1M1eVpYQmxZWFFvYmlVeVEyNHBKVEJCWVNncExtRmtaQ2hoS0NrdWMyTnliMnhzV0Nnd0xqVWxNa1p1S1M1elkzSnZiR3haS0RBdU5TVXlSbTRwSlRKRE1Ta3ViVzlrZFd4aGRHVW9iekVsTWtNd0xqRXBMbTF2WkhWc1lYUmxLSE55WXlodk1Ta3VZMjlzYjNJb01UQWxNa014TUNrdVlXUmtLSE52Ykdsa0tDMHhOQ1V5UXkweE5Da3BMbkp2ZEdGMFpTZ29LU1V6UkNVelJYUnBiV1VsTWtZME1Da2xNa013TGpBd05Ta3VZV1JrS0hOeVl5aHZNU2t1YzJOeWIyeHNXU2d3TGpBeE1pVXlRekF1TURJcEpUSkRNQzQxS1M1dmRYUW9iekVwSlRCQmMzSmpLRzh4S1M1amIyeHZjbUZ0WVNneExqSXBMbkJ2YzNSbGNtbDZaU2cwS1M1ellYUjFjbUYwWlNnd0xqY3BMbU52Ym5SeVlYTjBLRFlwTG0xMWJIUW9jMjlzYVdRb0tTVXlRekF1TVRVcExtOTFkQ2h2TUNrbE1FRWxNRUVsTUVFPVwiXG59LFxue1xuXCJza2V0Y2hfaWRcIjogXCJlZXJpZV9lYXJfMlwiLFxuXCJjb2RlXCI6IFwiSlRKR0pUSkdaV1ZmTlNVeU1DNGxNakJHVlVkSlZFbFdSU1V5TUVkRlQwMUZWRkpaSlRJd1ZraFRKVEl3TGlVeU1HRjFaR2x2Y21WaFkzUnBkbVVsTWpCemFHRndaWE1sTWpCaGJtUWxNakJuY21Ga2FXVnVkSE1sTUVFbE1rWWxNa1lsTWpCbFgyVWxNakFsTWtZbE1rWWxNakFsTkRCbFpYSnBaVjlsWVhJbE1FRWxNa1lsTWtZbE1FRnpKVE5FSlRJd0tDa2xNMFFsTTBVbE1FRWxNakFsTWpCemFHRndaU2cwS1NVd1FTNXpZM0p2Ykd4WUtDVTFRaTB3TGpVbE1rTXRNQzR5SlRKRE1DNHpKVEpETFRBdU1TVXlReTB3TGpFbE5VUXVjMjF2YjNSb0tEQXVNU2t1Wm1GemRDZ3dMak1wS1NVd1FTNXpZM0p2Ykd4WktDVTFRakF1TWpVbE1rTXRNQzR5SlRKRE1DNHpKVEpETFRBdU1TVXlRekF1TWlVMVJDNXpiVzl2ZEdnb01DNDVLUzVtWVhOMEtEQXVNVFVwS1NVd1FTVXlSaVV5UmlVd1FYTnZiR2xrS0NrbE1FRXVZV1JrS0dkeVlXUnBaVzUwS0RNbE1rTXdMakExS1M1eWIzUmhkR1VvTUM0d05TVXlReTB3TGpJcExuQnZjM1JsY21sNlpTZ3lLUzVqYjI1MGNtRnpkQ2d3TGpZcEpUSkRKVFZDTVNVeVF6QWxNa014SlRKRE1DNDFKVEpETUNVeVF6QXVOaVUxUkM1emJXOXZkR2dvTUM0NUtTa2xNRUV1WVdSa0tITW9LU2tsTUVFdWJYVnNkQ2h6S0NrdWMyTmhiR1VvTUM0NEtTNXpZM0p2Ykd4WUtEQXVNREVwTG5OamNtOXNiRmtvTFRBdU1ERXBMbkp2ZEdGMFpTZ3dMaklsTWtNd0xqQTJLUzVoWkdRb1ozSmhaR2xsYm5Rb015a3VZMjl1ZEhKaGMzUW9NQzQyS1NVeVF5VTFRakVsTWtNd0pUSkRNU1V5UXpBdU5TVTFSQzV6Ylc5dmRHZ29NQzQ1S1NVeVF6QXVOU2t1YlhWc2RDaHpjbU1vYnpBcExuTmpZV3hsS0RBdU9UZ3BKVEpES0NrbE0wUWxNMFZoTG1abWRDVTFRakFsTlVRcU9Ta2xNRUVsTWpBbE1qQWxNakFsTWpBbE1qQXBKVEJCTG1ScFptWW9jeWdwTG0xdlpIVnNZWFJsS0hOb1lYQmxLRFV3TUNrcExuTmpZV3hsS0NVMVFqRXVOeVV5UXpFdU1pVTFSQzV6Ylc5dmRHZ29NQzQ1S1M1bVlYTjBLREF1TURVcEtTa2xNRUV1WVdSa0tHZHlZV1JwWlc1MEtESXBMbWx1ZG1WeWRDZ3BKVEpES0NrbE0wUWxNMFZoTG1abWRDVTFRaklsTlVRcEpUQkJMbTExYkhRb1ozSmhaR2xsYm5Rb0tDa2xNMFFsTTBWaExtWm1kQ1UxUWpNbE5VUXFPQ2twSlRCQkxtSnNaVzVrS0hOeVl5Z29iekFwSlRKREtDa2xNMFFsTTBWaExtWm1kQ1UxUWpFbE5VUXFOREFwS1NVd1FTNWhaR1FvZG05eWIyNXZhU2dvS1NVelJDVXpSV0V1Wm1aMEpUVkNNU1UxUkNVeVF5Z3BKVE5FSlRORllTNW1ablFsTlVJekpUVkVKVEpES0NrbE0wUWxNMFZoTG1abWRDVTFRakFsTlVRcExuUm9jbVZ6YUNnd0xqY3BMbkJ2YzNSbGNtbDZaU2d5SlRKRE5Da3ViSFZ0WVNnd0xqa3BMbk5qY205c2JGa29NU1V5UXlncEpUTkVKVE5GWVM1bVpuUWxOVUl3SlRWRUpUSkdNekFwTG1OdmJHOXlZVzFoS0RNcExuUm9jbVZ6YUNnb0tTVXpSQ1V6UldFdVptWjBKVFZDTVNVMVJDa3VjMk5oYkdVb0tDa2xNMFFsTTBWaExtWm1kQ1UxUWpNbE5VUXFNaWtsTWtNb0tTVXpSQ1V6UldFdVptWjBKVFZDTUNVMVJDVXlSaklwSlRCQkpUSXdKVEl3TG05MWRDZ3BKVEJCSlRKR0pUSkdKVEJCYzNCbFpXUWxNMFFsTWpBeEpUQkJKVEJCWVM1elpYUlRiVzl2ZEdnb01DNDVOaWs9XCJcbn0sXG57XG5cInNrZXRjaF9pZFwiOiBcImVlcmllX2Vhcl8zXCIsXG5cImNvZGVcIjogXCJKVEpHSlRKR0pUSXdaV1ZmTVNVeU1DNGxNakJGV1VVbE1qQkpUaVV5TUZSSVJTVXlNRk5MV1NVd1FTVXlSaVV5Um1WNFlXMXdiR1VsTWpCdlppVXlNRzFoYzJzbE1qQmhibVFsTWpCbWRXNWpkR2x2YmlVeU1HMXZaSFZzWVhScGIyNGxNRUVsTWtZbE1rWWxNakJsWDJVbE1qQWxNa1lsTWtZbE1qQWxOREJsWlhKcFpWOWxZWElsTUVGdWIybHpaU2d4T0NrbE1FRWxNakFsTWpBdVkyOXNiM0poYldFb01Ta2xNRUVsTWpBbE1qQXVjRzl6ZEdWeWFYcGxLRElwSlRCQkpUSXdKVEl3TG10aGJHVnBaQ2cxTUNrbE1FRWxNakFsTWpBdWJXRnpheWdsTUVFbE1qQWxNakFsTWpBbE1qQnphR0Z3WlNneU5TVXlReVV5TURBdU1qVXBMbTF2WkhWc1lYUmxVMk5oYkdVb0pUQkJKVEl3SlRJd0pUSXdKVEl3SlRJd0pUSXdibTlwYzJVb05EQXdMalVsTWtNbE1qQXdMalVwSlRCQkpUSXdKVEl3SlRJd0pUSXdLU1V3UVNVeU1DVXlNQ2tsTUVFbE1qQWxNakF1YldGemF5aHphR0Z3WlNnME1EQWxNa01sTWpBeEpUSkRKVEl3TWk0eE1qVXBLU1V3UVNVeU1DVXlNQzV0YjJSMWJHRjBaVk5qWVd4bEtHOXpZeWcySlRKREpUSXdNQzR4TWpVbE1rTWxNakF3TGpBMUtTNXJZV3hsYVdRb05UQXBLU1V3UVNVeU1DVXlNQzV0ZFd4MEtHOXpZeWd5TUNVeVF5VXlNREF1TURVbE1rTWxNakF5TGpRcExtdGhiR1ZwWkNnMU1Da2xNa01sTWpBd0xqSTFLU1V3UVNVeU1DVXlNQzV6WTJGc1pTZ3hMamMxSlRKREpUSXdNQzQyTlNVeVF5VXlNREF1TlNrbE1FRWxNakFsTWpBdWJXOWtkV3hoZEdVb2JtOXBjMlVvTUM0MUtTa2xNRUVsTWpBbE1qQXVjMkYwZFhKaGRHVW9OaWtsTUVFbE1qQWxNakF1Y0c5emRHVnlhWHBsS0RRbE1rTWxNakF3TGpJcEpUQkJKVEl3SlRJd0xuTmpZV3hsS0RFdU5Ta2xNRUVsTWpBbE1qQXViM1YwS0NrbE0wSWxNRUU9XCJcbn1cbl1cbiIsImNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCdzdXBlcmFnZW50JylcbmNvbnN0IGV4YW1wbGVzID0gcmVxdWlyZSgnLi9leGFtcGxlcy5qc29uJylcbmNvbnN0IHNrZXRjaGVzID0gW11cblxuY29uc3QgbGljZW5zZSA9IGAvLyBsaWNlbnNlZCB3aXRoIENDIEJZLU5DLVNBIDQuMCBodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtc2EvNC4wL2BcblxuY2xhc3MgR2FsbGVyeSB7XG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBzdGF0ZSwgZW1pdHRlcikge1xuICAgIHRoaXMuc2tldGNoZXMgPSBbXVxuICAgIHRoaXMuZXhhbXBsZXMgPSBbXVxuICAgIHRoaXMuY3VycmVudCA9IG51bGxcbiAgICB0aGlzLmNvZGUgPSBudWxsXG4gICAgdGhpcy5leGFtcGxlSW5kZXggPSBudWxsXG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlXG4gICAgdGhpcy5lbWl0dGVyID0gZW1pdHRlclxuICAgIHRoaXMuc2VydmVyVVJMID0gdGhpcy5zdGF0ZS5zZXJ2ZXJVUkwgPT09IG51bGwgPyAnJyA6IHRoaXMuc3RhdGUuc2VydmVyVVJMXG4gICAgLy8gcmVxdWVzdC5nZXQoJy9za2V0Y2hlcycpLmVuZCgoZXJyLCByZXMpID0+IHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdnb3Qgc2tldGNoZXMnLCByZXMudGV4dCwgZXJyKVxuICAgIC8vICAgaWYoZXJyKSB7XG4gICAgLy8gICAgIGNvbnNvbGUubG9nKCdlcnIgZ2V0dGluZyBza2V0Y2hlcycsIGVycilcbiAgICAvLyAgIH0gZWxzZSB7XG4gICAgLy8gICAgIHRoaXMuc2tldGNoZXMgPSBKU09OLnBhcnNlKHJlcy50ZXh0KVxuICAgIC8vICAgfVxuXG4gICAgdGhpcy5leGFtcGxlcyA9IGV4YW1wbGVzXG4gICAgdGhpcy5zZXRTa2V0Y2hGcm9tVVJMKGNhbGxiYWNrKVxuICAgIC8vICBjYWxsYmFjayh0aGlzLmNvZGUsIHRoaXMuZm91bmRTa2V0Y2gpXG4gICAgLy8gfSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuc2V0U2tldGNoRnJvbVVSTChjYWxsYmFjaylcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwibG9jYXRpb246IFwiICsgZG9jdW1lbnQubG9jYXRpb24gKyBcIiwgc3RhdGU6IFwiICsgSlNPTi5zdHJpbmdpZnkoZXZlbnQuc3RhdGUpKTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFJhbmRvbVNrZXRjaCA9IHRoaXMuc2V0UmFuZG9tU2tldGNoLmJpbmQodGhpcylcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuY3VycmVudCA9IG51bGxcbiAgICB0aGlzLmNvZGUgPSBudWxsXG4gICAgLy90aGlzLmV4YW1wbGVJbmRleCA9IG51bGxcbiAgICBsZXQgbmV3dXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lXG4gICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHsgcGF0aDogbmV3dXJsIH0sICcnLCBuZXd1cmwpXG4gICAgdGhpcy51cmwgPSBuZXd1cmxcbiAgfVxuXG4gIHNldFNrZXRjaEZyb21VUkwoY2FsbGJhY2spIHtcbiAgICBodXNoKClcbiAgICByZW5kZXIobzApXG5cbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKVxuICAgIHRoaXMuc2VhcmNoUGFyYW1zID0gc2VhcmNoUGFyYW1zXG4gICAgbGV0IGJhc2U2NENvZGUgPSBzZWFyY2hQYXJhbXMuZ2V0KCdjb2RlJylcbiAgICAvLyAgaWYoIWJhc2U2NENvZGUpIGJhc2U2NENvZGUgPSBzZWFyY2hQYXJhbXMuZ2V0KCdpZCcpIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciBmb3JtIG9mIG5hbWluZy4gaWQgaXMgbm93IGNhbGxlZCBjb2RlXG4gICAgbGV0IHNrZXRjaF9pZCA9IHNlYXJjaFBhcmFtcy5nZXQoJ3NrZXRjaF9pZCcpXG4gICAgbGV0IHNob3dDb2RlID0gc2VhcmNoUGFyYW1zLmdldCgnc2hvd0NvZGUnKVxuXG4gICAgbGV0IGNvZGUgPSAnJ1xuICAgIC8vY29uc29sZS5sb2coXCJpZFwiLCBza2V0Y2hfaWQsIFwiY29kZVwiLCBiYXNlNjRDb2RlKVxuXG4gICAgLy8gYm9vbGVhbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNrZXRjaCB3YXMgZm91bmQgYmFzZWQgb24gdGhlIFVSTCwgZWl0aGVyIHRocm91Z2ggbG9va2luZyB0aHJvdWdoIHRoZSBkYXRhYmFzZSBvciByZW5kZXJpbmcgdGhlIGNvZGVcbiAgICB0aGlzLmZvdW5kU2tldGNoID0gZmFsc2VcbiAgICAvLyBpZiBjb250YWlucyBhIHNrZXRjaCBpZCwgc2V0IHNrZXRjaCBmcm9tIGlkXG4gICAgaWYgKHNrZXRjaF9pZCkge1xuICAgICAgdmFyIHNrZXRjaCA9IHRoaXMuZ2V0RXhhbXBsZUJ5SWQoc2tldGNoX2lkKVxuICAgICAgaWYgKHNrZXRjaCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZm91bmQnLCBza2V0Y2gpXG4gICAgICAgIHRoaXMuc2V0U2tldGNoKHNrZXRjaClcbiAgICAgICAgY2FsbGJhY2sodGhpcy5jb2RlLCBmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RcbiAgICAgICAgICAvLyAuZ2V0KCcvc2tldGNoQnlJZCcpXG4gICAgICAgICAgLmdldChgJHt0aGlzLnN0YXRlLnNlcnZlclVSTH0vc2tldGNoQnlJZGApXG4gICAgICAgICAgLnF1ZXJ5KHsgc2tldGNoX2lkOiBza2V0Y2hfaWQgfSlcbiAgICAgICAgICAuZW5kKChlcnIsIHJlcykgPT4ge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2dvdCBza2V0Y2hlcycsIHJlcy50ZXh0LCBlcnIpXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnIgZ2V0dGluZyBza2V0Y2hlcycsIGVycilcbiAgICAgICAgICAgICAgdGhpcy5zZXRTa2V0Y2hGcm9tQ29kZShiYXNlNjRDb2RlLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc2tldGNoZXMgPSBKU09OLnBhcnNlKHJlcy50ZXh0KVxuICAgICAgICAgICAgICBpZiAodGhpcy5za2V0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTa2V0Y2godGhpcy5za2V0Y2hlc1swXSlcbiAgICAgICAgICAgICAgICAvL3RoaXMuY29kZSA9IHRoaXMuZGVjb2RlQmFzZTY0KHRoaXMuc2tldGNoZXNbMF0uY29kZSlcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kU2tldGNoID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuY29kZSwgdGhpcy5mb3VuZFNrZXRjaClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNrZXRjaEZyb21Db2RlKGJhc2U2NENvZGUsIGNhbGxiYWNrKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFNrZXRjaEZyb21Db2RlKGJhc2U2NENvZGUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICBpZiAoc2hvd0NvZGUgPT09ICdmYWxzZScpIHtcbiAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdoaWRlQWxsJylcbiAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdoaWRlIGluZm8nKVxuICAgIH1cbiAgICAvL1xuICAgIC8vICAgLy8gY29uc29sZS5sb2coJ2ZvdW5kICcsIHNrZXRjaClcbiAgICAvLyAgIC8vIGlmKHNrZXRjaCkge1xuICAgIC8vICAgLy8gICB0aGlzLnNldFNrZXRjaChza2V0Y2gpXG4gICAgLy8gICAvLyAgIHRoaXMuID0gdHJ1ZTBcbiAgICAvLyAgIC8vIH0gZWxzZSBpZiAoYmFzZTY0Q29kZSl7XG4gICAgLy8gICAvLyAgIHRoaXMuY29kZSA9IHRoaXMuZGVjb2RlQmFzZTY0KGJhc2U2NENvZGUpXG4gICAgLy8gICAvLyAgIHRoaXMuZm91bmRTa2V0Y2ggPSB0cnVlXG4gICAgLy8gICAvLyB9IGVsc2Uge1xuICAgIC8vICAgLy8gICBjb25zb2xlLmxvZygnaWQgbm90IGZvdW5kJywgc2tldGNoX2lkKVxuICAgIC8vICAgLy8gICB0aGlzLnNldFJhbmRvbVNrZXRjaCgpXG4gICAgLy8gICAvLyB9XG4gICAgLy9cbiAgICAvLyAvLyAvLyBiYWNrd2FyZHMgY29tYmFpdGJpbGl0eSB3aXRoIGVhcmxpZXIgc2hhcmVhYmxlIFVSTFNcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vXG4gICAgLy8gICBpZiAoYmFzZTY0Q29kZSkge1xuICAgIC8vICAgICB0aGlzLmNvZGUgPSB0aGlzLmRlY29kZUJhc2U2NChiYXNlNjRDb2RlKVxuICAgIC8vICAgICB0aGlzLmZvdW5kU2tldGNoID0gdHJ1ZVxuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgdGhpcy5zZXRSYW5kb21Ta2V0Y2goKVxuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgfVxuXG4gIHNldFNrZXRjaEZyb21Db2RlKGJhc2U2NENvZGUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGJhc2U2NENvZGUpIHtcbiAgICAgIHRoaXMuY29kZSA9IHRoaXMuZGVjb2RlQmFzZTY0KGJhc2U2NENvZGUpXG4gICAgICB0aGlzLmZvdW5kU2tldGNoID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFJhbmRvbVNrZXRjaCgpXG4gICAgfVxuICAgIGNhbGxiYWNrKHRoaXMuY29kZSwgdGhpcy5mb3VuZFNrZXRjaClcbiAgfVxuXG4gIHNhdmVJbWFnZSgpIHtcblxuICB9XG5cbiAgc2V0VG9VUkwocGFyYW1zKSB7XG4gICAgLy8gICAgICAgY29uc29sZS5sb2coYmFzZTY0KVxuICAgIC8vIGNvbnNvbGUubG9nKCdwYXJhbXMnLCBwYXJhbXMpXG4gICAgLy8ga2VlcCBjb2RlIGluIHVybCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgLyBjb21wYXRpYmlsaXR5IGJldHdlZW4gbG9jYWwgYW5kIHB1YmxpYyB2ZXJzaW9uc1xuICAgIHRoaXMuc2VhcmNoUGFyYW1zLmRlbGV0ZSgnc2tldGNoX2lkJylcbiAgICB0aGlzLnNlYXJjaFBhcmFtcy5kZWxldGUoJ2NvZGUnKVxuICAgIGxldCB1cmxfcGFyYW1zXG4gICAgaWYgKHBhcmFtcy5za2V0Y2hfaWQpIHtcbiAgICAgIHVybF9wYXJhbXMgPSBgc2tldGNoX2lkPSR7cGFyYW1zLnNrZXRjaF9pZH1gXG4gICAgICB0aGlzLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ3NrZXRjaF9pZCcsIHBhcmFtcy5za2V0Y2hfaWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHVybF9wYXJhbXMgPSBgc2tldGNoX2lkPSR7cGFyYW1zLnNrZXRjaF9pZH0mY29kZT0ke3BhcmFtcy5jb2RlfWBcbiAgICAgIHRoaXMuc2VhcmNoUGFyYW1zLmFwcGVuZCgnc2tldGNoX2lkJywgcGFyYW1zLnNrZXRjaF9pZClcbiAgICAgIHRoaXMuc2VhcmNoUGFyYW1zLmFwcGVuZCgnY29kZScsIHBhcmFtcy5jb2RlKVxuICAgIH1cblxuICAgIGxldCBuZXd1cmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgJz8nICsgdGhpcy5zZWFyY2hQYXJhbXMudG9TdHJpbmcoKVxuICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7IHBhdGg6IG5ld3VybCB9LCAnJywgbmV3dXJsKVxuICAgIHRoaXMudXJsID0gbmV3dXJsXG4gIH1cblxuICBlbmNvZGVCYXNlNjQodGV4dCkge1xuICAgIHJldHVybiBidG9hKGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KSlcbiAgfVxuICBkZWNvZGVCYXNlNjQoYmFzZTY0Q29kZSkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoYXRvYihiYXNlNjRDb2RlKSlcbiAgfVxuXG4gIHNldFNrZXRjaChza2V0Y2gpIHtcbiAgICBsZXQgY29kZSA9IHRoaXMuZGVjb2RlQmFzZTY0KHNrZXRjaC5jb2RlKVxuICAgIGlmIChjb2RlLmluZGV4T2YobGljZW5zZSkgPCAwKVxuICAgICAgY29kZSA9XG4gICAgICAgIGAke2xpY2Vuc2V9XG4ke2NvZGV9XG5gXG4gICAgdGhpcy5jb2RlID0gY29kZVxuICAgIHRoaXMuY3VycmVudCA9IHNrZXRjaFxuICAgIC8vICB0aGlzLnNldFRvVVJMKCdza2V0Y2hfaWQnLCBza2V0Y2guX2lkKVxuICAgIC8vIGxldCBwYXJhbXMgPSBPYmplY3Qua2V5cyhza2V0Y2gpLm1hcCggKGtleSkgPT4ge1xuICAgIC8vICAgcmV0dXJuIHtsYWJlbDoga2V5LCB2YWx1ZTogc2tldGNoW2tleV19XG4gICAgLy8gfSlcbiAgICB0aGlzLnNldFRvVVJMKHNrZXRjaClcbiAgfVxuXG4gIHNldFJhbmRvbVNrZXRjaCgpIHtcbiAgICAvLyBpZiB0aGVyZSBhcmUgc2tldGNoZXMsIHNldCBjb2RlIGZyb20gc2tldGNoLCBvdGhlcndpc2UgZ2VuZXJhdGUgcmFuZG9tXG4gICAgLy9jb25zb2xlLmxvZyhcImV4YW1wbGVzIGxlbmd0aFwiLCB0aGlzLmV4YW1wbGVzLCB0aGlzLmV4YW1wbGVJbmRleClcbiAgICBpZiAodGhpcy5leGFtcGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaW5kZXhcbiAgICAgIC8vIGlmKHRoaXMuZXhhbXBsZUluZGV4ID09PSBudWxsKSB7XG4gICAgICBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMuZXhhbXBsZXMubGVuZ3RoKVxuICAgICAgd2hpbGUgKGluZGV4ID09PSB0aGlzLmV4YW1wbGVJbmRleCkge1xuICAgICAgICBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMuZXhhbXBsZXMubGVuZ3RoKVxuICAgICAgfVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgaW5kZXggPSB0aGlzLmV4YW1wbGVJbmRleCArMVxuICAgICAgLy8gICBpZihpbmRleCA+PSB0aGlzLmV4YW1wbGVzLmxlbmd0aCkgaW5kZXggPSAwXG4gICAgICAvLyB9XG4gICAgICB0aGlzLmV4YW1wbGVJbmRleCA9IGluZGV4XG4gICAgICAvLyAgY29uc29sZS5sb2coJ2V4YW1wbGUgaXMnLCB0aGlzLmV4YW1wbGVzW3JhbmRdKVxuICAgICAgdGhpcy5zZXRTa2V0Y2godGhpcy5leGFtcGxlc1tpbmRleF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydFN0cmluZyA9ICdvc2MoJyArIDIgKyBNYXRoLmZsb29yKE1hdGgucG93KDEwLCBNYXRoLnJhbmRvbSgpICogMikpICsgJyknXG4gICAgICBzdGFydFN0cmluZyArPSAnLmNvbG9yKCcgKyBNYXRoLnJhbmRvbSgpLnRvRml4ZWQoMikgKyAnLCcgKyBNYXRoLnJhbmRvbSgpLnRvRml4ZWQoMikgKyAnLCcgKyBNYXRoLnJhbmRvbSgpLnRvRml4ZWQoMikgKyAnKSdcbiAgICAgIHN0YXJ0U3RyaW5nICs9ICcucm90YXRlKCcgKyBNYXRoLnJhbmRvbSgpLnRvRml4ZWQoMikgKyAnKSdcbiAgICAgIHN0YXJ0U3RyaW5nICs9ICcub3V0KG8wKSdcbiAgICAgIHRoaXMuY29kZSA9IHN0YXJ0U3RyaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gc2hhcmVzIHZpYSB0d2l0dGVyXG4gIHNoYXJlU2tldGNoKGNvZGUsIGh5ZHJhLCBuYW1lKSB7XG4gICAgdGhpcy5zYXZlU2tldGNoKGNvZGUsICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiVVJMIGlzXCIsIHRoaXMudXJsLCAnc2tldGNoIGlzJywgdGhpcy5jdXJyZW50KVxuICAgICAgaHlkcmEuZ2V0U2NyZWVuSW1hZ2UoKGltZykgPT4ge1xuICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgLy8gLnBvc3QoJy9pbWFnZScpXG4gICAgICAgICAgLnBvc3QoYCR7dGhpcy5zdGF0ZS5zZXJ2ZXJVUkx9L2ltYWdlYClcbiAgICAgICAgICAuYXR0YWNoKCdwcmV2aWV3SW1hZ2UnLCBpbWcpXG4gICAgICAgICAgLnF1ZXJ5KHtcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICAgICAgICBza2V0Y2hfaWQ6IHRoaXMuY3VycmVudC5za2V0Y2hfaWQsXG4gICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyAuc2VuZCh7XG4gICAgICAgICAgLy8gICBjb2RlOiBiYXNlNjRcbiAgICAgICAgICAvLyB9KVxuICAgICAgICAgIC8vICAucXVlcnkocXVlcnkpXG4gICAgICAgICAgLmVuZCgoZXJyLCByZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIHBvc3RpbmdpbWFnZScsIGVycilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpbWFnZSByZXNwb25zZScsIHJlcy50ZXh0KVxuICAgICAgICAgICAgICAvLyAgc2VsZi5zZXRUb1VSTChbIHsgbGFiZWw6ICdza2V0Y2hfaWQnLCB2YWx1ZTogcmVzLnRleHR9LCB7bGFiZWw6ICdjb2RlJywgdmFsdWU6IGJhc2U2NH0gXSlcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIC8vIHZhciBvUmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIC8vIG9SZXEub3BlbihcIlBPU1RcIiwgXCJodHRwczovL2xvY2FsaG9zdDo4MDAwL2ltYWdlXCIsIHRydWUpO1xuICAgICAgICAvLyBvUmVxLm9ubG9hZCA9IGZ1bmN0aW9uIChvRXZlbnQpIHtcbiAgICAgICAgLy8gICAvLyBVcGxvYWRlZC5cbiAgICAgICAgLy8gICBjb25zb2xlLmxvZyhcInVwbG9hZGVkXCIsIG9FdmVudClcbiAgICAgICAgLy8gfTtcbiAgICAgICAgLy8gb1JlcS5zZW5kKGltZyk7XG4gICAgICAgIC8vICBjb25zb2xlLmxvZygnZ290IGltYWdlJywgaW1nKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgc2F2ZVNrZXRjaChjb2RlLCBjYWxsYmFjaykge1xuICAgIGxldCBzZWxmID0gdGhpc1xuICAgIC8vY29uc29sZS5sb2coJ3NhdmluZyBpbiBnYWxsZXJ5JywgY29kZSlcbiAgICBsZXQgYmFzZTY0ID0gdGhpcy5lbmNvZGVCYXNlNjQoY29kZSlcbiAgICAvLyAgY29uc29sZS5sb2coJ2NvZGUgaXMnLCBiYXNlNjQpXG5cbiAgICBsZXQgcXVlcnkgPSB7XG4gICAgICBjb2RlOiBiYXNlNjQsXG4gICAgICBwYXJlbnQ6IHRoaXMuY3VycmVudCA/IHRoaXMuY3VycmVudC5za2V0Y2hfaWQgOiBudWxsXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ3NhdmluZyBpbiBnYWxsZXJ5JywgcXVlcnkpXG4gICAgcmVxdWVzdFxuICAgICAgLy8gLnBvc3QoJy9za2V0Y2gnKVxuICAgICAgLnBvc3QoYCR7dGhpcy5zdGF0ZS5zZXJ2ZXJVUkx9L3NrZXRjaGApXG4gICAgICAvLyAuc2VuZCh7XG4gICAgICAvLyAgIGNvZGU6IGJhc2U2NFxuICAgICAgLy8gfSlcbiAgICAgIC5xdWVyeShxdWVyeSlcbiAgICAgIC5lbmQoKGVyciwgcmVzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgcG9zdGluZyBza2V0Y2gnLCBlcnIpXG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3Jlc3BvbnNlJywgcmVzLnRleHQpXG4gICAgICAgICAgLy8gIHNlbGYuc2V0VG9VUkwoWyB7IGxhYmVsOiAnc2tldGNoX2lkJywgdmFsdWU6IHJlcy50ZXh0fSwge2xhYmVsOiAnY29kZScsIHZhbHVlOiBiYXNlNjR9IF0pXG4gICAgICAgICAgc2VsZi5zZXRTa2V0Y2goe1xuICAgICAgICAgICAgc2tldGNoX2lkOiByZXMudGV4dCxcbiAgICAgICAgICAgIGNvZGU6IGJhc2U2NFxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhudWxsKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgc2F2ZUxvY2FsbHkoY29kZSkge1xuICAgIGxldCBiYXNlNjQgPSB0aGlzLmVuY29kZUJhc2U2NChjb2RlKVxuXG4gICAgdGhpcy5zZWFyY2hQYXJhbXMuZGVsZXRlKCdza2V0Y2hfaWQnKVxuICAgIHRoaXMuc2VhcmNoUGFyYW1zLmRlbGV0ZSgnY29kZScpXG5cbiAgICB0aGlzLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2NvZGUnLCBiYXNlNjQpXG4gICAgLy8ga2VlcCBjb2RlIGluIHVybCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgLyBjb21wYXRpYmlsaXR5IGJldHdlZW4gbG9jYWwgYW5kIHB1YmxpYyB2ZXJzaW9uc1xuICAgIHZhciB1cmxfcGFyYW1zID0gdGhpcy5zZWFyY2hQYXJhbXMudG9TdHJpbmcoKVxuXG4gICAgbGV0IG5ld3VybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgK1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyAnPycgKyB1cmxfcGFyYW1zXG4gICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHsgcGF0aDogbmV3dXJsIH0sICcnLCBuZXd1cmwpXG4gICAgdGhpcy51cmwgPSBuZXd1cmxcbiAgfVxuXG4gIGdldEV4YW1wbGVCeUlkKGlkKSB7XG4gICAgLy9jb25zb2xlLmxvZygnbG9va2luZyBmb3InLCBpZCwgdGhpcy5leGFtcGxlcywgdGhpcy5za2V0Y2hlcylcbiAgICB2YXIgc2tldGNoZXMgPSB0aGlzLmV4YW1wbGVzLmZpbHRlcigoc2tldGNoKSA9PiBza2V0Y2guc2tldGNoX2lkID09PSBpZClcbiAgICBpZiAoc2tldGNoZXMubGVuZ3RoIDw9IDApIHNrZXRjaGVzID0gdGhpcy5za2V0Y2hlcy5maWx0ZXIoKHNrZXRjaCkgPT4gc2tldGNoLnNrZXRjaF9pZCA9PT0gaWQpXG4gICAgcmV0dXJuIHNrZXRjaGVzWzBdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBHYWxsZXJ5XG4iLCJjb25zdCBpMThuZXh0ID0gcmVxdWlyZSgnaTE4bmV4dCcpXG5jb25zdCBpMThuZXh0QnJvd3Nlckxhbmd1YWdlRGV0ZWN0b3IgPSByZXF1aXJlKCdpMThuZXh0LWJyb3dzZXItbGFuZ3VhZ2VkZXRlY3RvcicpXG4vLyBjb25zdCBpMThuZXh0SHR0cEJhY2tlbmQgPSByZXF1aXJlKCdpMThuZXh0LWh0dHAtYmFja2VuZCcpXG5cbmNvbnN0IGxhbmd1YWdlUmVzb3VyY2VzID0gcmVxdWlyZSgnLi90ZXh0LWVsZW1lbnRzLmpzJylcblxuY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gWydqYScsICdlcycsICdhcicsICdpZCcsICdwdC1icicsICdjaCcsICdrbycsICdmciddIC8vIGxvY2FsaXphdGlvbnMgYXZhaWxhYmxlIGluIHJlcG9zaXRvcnkgYXQgL2h5ZHJhLXN5bnRoL2wxMG5cbmNvbnN0IGxhbmd1YWdlUGF0aCA9IChsYW5nKSA9PiBgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2h5ZHJhLXN5bnRoL2wxMG4vbWFpbi8ke2xhbmd9L2VkaXRvci5qc29uYFxuXG5pMThuZXh0XG4gIC8vIC51c2UoaTE4bmV4dEh0dHBCYWNrZW5kKVxuICAgLnVzZShpMThuZXh0QnJvd3Nlckxhbmd1YWdlRGV0ZWN0b3IpXG4gIC5pbml0KHtcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICBmYWxsYmFja0xuZzogJ2VuJyxcbiAgICBwYXJ0aWFsQnVuZGxlZExhbmd1YWdlczogdHJ1ZSxcbiAgICAvLyBiYWNrZW5kOiB7XG4gICAgLy8gICBsb2FkUGF0aDogYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vbG9jYWxlcy97e2xuZ319Lmpzb25gLFxuICAgIC8vICAgY3Jvc3NEb21haW46IHRydWVcbiAgICAvLyB9LFxuICAgIHJlc291cmNlczogbGFuZ3VhZ2VSZXNvdXJjZXNcbiAgfSlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdG9yZShzdGF0ZSwgZW1pdHRlcikge1xuICBjb25zdCBsYW5ndWFnZXMgPSB7fVxuXG5cbiAgbGV0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaClcbiAgbGV0IGxhbmcgPSBzZWFyY2hQYXJhbXMuZ2V0KCdsMTBuLWxhbmcnKVxuXG4gIC8vICBpZighYmFzZTY0Q29kZSkgYmFzZTY0Q29kZSA9IHNlYXJjaFBhcmFtcy5nZXQoJ2lkJykgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIGZvcm0gb2YgbmFtaW5nLiBpZCBpcyBub3cgY2FsbGVkIGNvZGVcbiAgbGV0IHBhdGggPSBzZWFyY2hQYXJhbXMuZ2V0KCdsMTBuLXVybCcpXG5cbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzLmZvckVhY2goKGxhbmcpID0+IHtcbiAgICBsb2FkTGFuZ3VhZ2VGcm9tVVJMKGxhbmcsIGxhbmd1YWdlUGF0aChsYW5nKSlcbiAgfSlcblxuICAvLyBjb25zb2xlLmxvZygnJWMnLCBcImNvbG9yOnB1cnBsZVwiLCAndHR0dCcsIGxhbmcsIHBhdGgpXG5cbiAgaWYgKGxhbmcgIT09IG51bGwgJiYgcGF0aCAhPT0gbnVsbCkge1xuICAgIGxvYWRMYW5ndWFnZUZyb21VUkwobGFuZywgcGF0aClcbiAgfVxuXG4gIHVwZGF0ZUF2YWlsYWJsZUxhbmd1YWdlcygpXG5cbiAgZW1pdHRlci5vbignc2V0IGxhbmd1YWdlJywgKGxhbmcpID0+IHtcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0dGluZyBsYW5ndWFnZSB0bycsIGxhbmcpXG4gICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZShsYW5nLCAoZXJyLCB0KSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhlcnIsIHQpXG4gICAgICBzdGF0ZS50cmFuc2xhdGlvbi5zZWxlY3RlZExhbmd1YWdlID0gbGFuZ1xuICAgICAgZW1pdHRlci5lbWl0KCdyZW5kZXInKVxuICAgIH0pXG4gIH0pXG5cbiAgZnVuY3Rpb24gdXBkYXRlQXZhaWxhYmxlTGFuZ3VhZ2VzKCkge1xuICAgIE9iamVjdC5rZXlzKGxhbmd1YWdlUmVzb3VyY2VzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIC8vIGZvciBzb21lIHJlYXNvbiwgJ3B0LWJyJyB3YXMgbm90IHdvcmtpbmcsIHVzZSBqdXN0IHB0IGluc3RlYWRcbiAgICAgIGNvbnN0IGsgPSBrZXkuc3BsaXQoJy0nKVswXVxuICAgICAgbGFuZ3VhZ2VzW2tdID0gaTE4bmV4dC5nZXRGaXhlZFQoaykoJ2xhbmd1YWdlLW5hbWUnKVxuICAgIH0pXG5cbiAgICBzdGF0ZS50cmFuc2xhdGlvbiA9IHtcbiAgICAgIHQ6IGkxOG5leHQudCxcbiAgICAgIGxhbmd1YWdlczogbGFuZ3VhZ2VzLFxuICAgICAgLy8gbGFuZ3VhZ2VzOiBbJ2VuJywgJ2phJ10sXG4gICAgICBzZWxlY3RlZExhbmd1YWdlOiBpMThuZXh0Lmxhbmd1YWdlXG4gICAgfVxuICB9XG4gIC8vIGxvYWRMYW5ndWFnZUZyb21VUkwoJ2VzJywgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9oeWRyYS1zeW50aC9sMTBuL21haW4vZXMvZWRpdG9yLmpzb24nKVxuICAvL2xvYWRMYW5ndWFnZUZyb21VUkwoJ2VzJywnaHR0cHM6Ly9oYWNrbWQuaW8vYmFFbkdoN2dSdDJpSFR2dC1UVDhGdy9kb3dubG9hZCcpXG4gIGZ1bmN0aW9uIGxvYWRMYW5ndWFnZUZyb21VUkwobGFuZyA9ICdlcycsIHBhdGgpIHtcbiAgICBjb25zdCBjc3MgPSBcImNvbG9yOiBwdXJwbGU7IGJhY2tncm91bmQ6IG9yYW5nZTsgZm9udC1zaXplOiAxNHB4O3BhZGRpbmc6MTBweFwiXG4gICAgY29uc29sZS5sb2coYCVjbG9hZGluZyB0cmFuc2xhdGlvbiBmb3IgJHtsYW5nfSBmcm9tICR7cGF0aH1gLCBjc3MpO1xuICAgIGZldGNoKHBhdGgpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHJldHVybiByZXMudGV4dCgpLnRoZW4odGV4dCA9PiB7IHRocm93IG5ldyBFcnJvcih0ZXh0KSB9KVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXR1cm5pbmcganNvbicpXG4gICAgICAgICAgcmV0dXJuIHJlcy5qc29uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLnRoZW4oanNvbiA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGpzb24pXG4gICAgICAgIHdpbmRvdy5pMThuID0gaTE4bmV4dFxuICAgICAgICBjb25zb2xlLmxvZygnYWRkaW5nIGxhbmd1YWdlJywgbGFuZywganNvbilcblxuICAgICAgICAvLyBmb3Igc29tZSByZWFzb24sICdwdC1icicgd2FzIG5vdCB3b3JraW5nLCB1c2UganVzdCBwdCBpbnN0ZWFkXG4gICAgICAgIGNvbnN0IGsgPSBsYW5nLnNwbGl0KCctJylbMF1cbiAgICAgICAgaTE4bmV4dC5hZGRSZXNvdXJjZUJ1bmRsZShrLCAndHJhbnNsYXRpb24nLCBqc29uKVxuXG4gICAgICAgIGNvbnN0IGxhbmd1YWdlcyA9IHt9XG4gICAgICAgIHVwZGF0ZUF2YWlsYWJsZUxhbmd1YWdlcygpXG4gICAgICAgIGVtaXR0ZXIuZW1pdCgncmVuZGVyJylcbiAgICAgIH0pXG4gIH1cbiAgLy8gY29uc3QgcGF0aCA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2xvY2FsZXMvZXMuanNvbmBcblxuXG59XG4iLCJjb25zdCBHYWxsZXJ5ID0gcmVxdWlyZSgnLi9nYWxsZXJ5LmpzJylcbmNvbnN0IHJlcGwgPSByZXF1aXJlKCcuLi92aWV3cy9lZGl0b3IvcmVwbC5qcycpXG4vLyBjb25zb2xlLmxvZygnRU5WSVJPTk1FTlQgSVMnLCBwcm9jZXNzLmVudi5OT0RFX0VOVilcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdG9yZShzdGF0ZSwgZW1pdHRlcikge1xuICBzdGF0ZS5zaG93SW5mbyA9IHRydWVcbiAgc3RhdGUuc2hvd1VJID0gdHJ1ZVxuXG4gIGNvbnN0IFNFUlZFUl9VUkwgPSBcImh0dHBzOi8vYXBpLmh5ZHJhc3ludGgueHl6XCJcbiAgc3RhdGUuc2VydmVyVVJMID0gU0VSVkVSX1VSTCAhPT0gdW5kZWZpbmVkID8gU0VSVkVSX1VSTCA6IG51bGxcbiBsZXQgc2tldGNoZXNcblxuICBlbWl0dGVyLm9uKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHN0YXRlLmVkaXRvci5lZGl0b3JcbiAgICBza2V0Y2hlcyA9IG5ldyBHYWxsZXJ5KChjb2RlLCBza2V0Y2hGcm9tVVJMKSA9PiB7XG4gICAgICBlZGl0b3Iuc2V0VmFsdWUoY29kZSlcbiAgICAgIHJlcGwuZXZhbChjb2RlKVxuICAgICAgaWYoc2tldGNoRnJvbVVSTCkge1xuICAgICAgICBzdGF0ZS5zaG93SW5mbyA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5zaG93SW5mbyA9IHRydWVcbiAgICAgIH1cbiAgICAgIGVtaXR0ZXIuZW1pdCgncmVuZGVyJylcbiAgICAgIC8vIEB0b2RvIGNyZWF0ZSBnYWxsZXJ5IHN0b3JlXG4gICAgLy8gIGNvbnNvbGUud2FybignZ2FsbGVyeSBjYWxsYmFjayBub3QgbGV0IGltcGxlbWVudGVkJylcbiAgICB9LCBzdGF0ZSwgZW1pdHRlcilcbiAgfSlcblxuICBlbWl0dGVyLm9uKCdzY3JlZW5jYXAnLCAoKSA9PiB7XG4gICAgc2NyZWVuY2FwKClcbiAgICBjb25zdCBlZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZWRpdG9yXG4gICAgY29uc3QgdGV4dCA9IGVkaXRvci5nZXRWYWx1ZSgpXG4gICAgY29uc3QgZGF0YSA9IG5ldyBCbG9iKFt0ZXh0XSwge3R5cGU6ICd0ZXh0L3BsYWluJ30pO1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICBhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICBsZXQgZCA9IG5ldyBEYXRlKClcbiAgICBhLmRvd25sb2FkID0gYGh5ZHJhLSR7ZC5nZXRGdWxsWWVhcigpfS0ke2QuZ2V0TW9udGgoKSArIDF9LSR7ZC5nZXREYXRlKCl9LSR7ZC5nZXRIb3VycygpfS4ke2QuZ2V0TWludXRlcygpfS4ke2QuZ2V0U2Vjb25kcygpfS5qc2BcbiAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpXG4gICAgYS5jbGljaygpXG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGEuaHJlZik7XG4gICAgfSwgMzAwKTtcbiAgfSlcblxuICBlbWl0dGVyLm9uKCdlZGl0b3I6cmFuZG9taXplJywgZnVuY3Rpb24gKGV2dCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHN0YXRlLmVkaXRvci5lZGl0b3JcbiAgICBpZiAoZXZ0LnNoaWZ0S2V5KSB7XG4gICAgICBlZGl0b3IubXV0YXRvci5kb1VuZG8oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWRpdG9yLm11dGF0b3IubXV0YXRlKHsgcmVyb2xsOiBmYWxzZSwgY2hhbmdlVHJhbnNmb3JtOiBldnQubWV0YUtleSB9KTtcbiAgICAgIGVkaXRvci5mb3JtYXRDb2RlKClcbiAgICAgIHNrZXRjaGVzLnNhdmVMb2NhbGx5KGVkaXRvci5nZXRWYWx1ZSgpKVxuICAgIH1cbiAgfSlcblxuICBmdW5jdGlvbiBjbGVhckFsbCgpIHtcbiAgICBjb25zdCBlZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZWRpdG9yXG4gICAgaHVzaCgpXG4gICAgc3BlZWQgPSAxXG4gICAgc2tldGNoZXMuY2xlYXIoKVxuICAgIGVkaXRvci5jbGVhcigpXG4gIH1cblxuICBlbWl0dGVyLm9uKCdlZGl0b3I6Y2xlYXJBbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgY2xlYXJBbGwoKVxuICB9KVxuXG4gIGVtaXR0ZXIub24oJ2VkaXRvcjpldmFsQWxsJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHN0YXRlLmVkaXRvci5lZGl0b3JcbiAgICBjb25zdCBjb2RlID0gZWRpdG9yLmdldFZhbHVlKClcbiAgICByZXBsLmV2YWwoY29kZSwgKHN0cmluZywgZXJyKSA9PiB7XG4gICAgICBlZGl0b3IuZmxhc2hDb2RlKClcbiAgICAgIGlmICghZXJyKSBza2V0Y2hlcy5zYXZlTG9jYWxseShjb2RlKVxuICAgIH0pXG4gIH0pXG5cbiAgZW1pdHRlci5vbignZWRpdG9yOmV2YWxMaW5lJywgKGxpbmUpID0+IHtcbiAgICByZXBsLmV2YWwobGluZSlcbiAgfSlcblxuICBlbWl0dGVyLm9uKCdlZGl0b3I6ZXZhbEJsb2NrJywgKGJsb2NrKSA9PiB7XG4gICAgcmVwbC5ldmFsKGJsb2NrKVxuICB9KVxuXG4gIGVtaXR0ZXIub24oJ2dhbGxlcnk6c2F2ZVRvVVJMJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBlZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZWRpdG9yXG4gICAgY29uc3QgZWRpdG9yVGV4dCA9IGVkaXRvci5nZXRWYWx1ZSgpXG4gICAgc2tldGNoZXMuc2F2ZUxvY2FsbHkoZWRpdG9yVGV4dClcbiAgfSlcblxuICBlbWl0dGVyLm9uKCdnYWxsZXJ5OnNoYXJlU2tldGNoJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBlZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZWRpdG9yXG4gICAgY29uc3QgZWRpdG9yVGV4dCA9IGVkaXRvci5nZXRWYWx1ZSgpXG4gICAgcmVwbC5ldmFsKGVkaXRvci5nZXRWYWx1ZSgpLCAoY29kZSwgZXJyb3IpID0+IHtcbiAgICAgIC8vICBjb25zb2xlLmxvZygnZXZhbHVhdGVkJywgY29kZSwgZXJyb3IpXG4gICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgIHNob3dDb25maXJtYXRpb24oKG5hbWUpID0+IHtcbiAgICAgICAgICBza2V0Y2hlcy5zaGFyZVNrZXRjaChlZGl0b3JUZXh0LCBzdGF0ZS5oeWRyYS5oeWRyYSwgbmFtZSlcbiAgICAgICAgfSwgKCkgPT4geyB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGVycm9yKVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG5cbiAgZW1pdHRlci5vbignZ2FsbGVyeTpzaG93RXhhbXBsZScsICgpID0+IHtcbiAgICBjb25zdCBlZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZWRpdG9yXG4gICAgY2xlYXJBbGwoKVxuICAgIHNrZXRjaGVzLnNldFJhbmRvbVNrZXRjaCgpXG4gICAgZWRpdG9yLnNldFZhbHVlKHNrZXRjaGVzLmNvZGUpXG4gICAgcmVwbC5ldmFsKGVkaXRvci5nZXRWYWx1ZSgpKVxuICB9KVxuXG4gIGVtaXR0ZXIub24oJ3Nob3cgY29uZmlybWF0aW9uJywgZnVuY3Rpb24gKGNvdW50KSB7XG5cbiAgfSlcblxuICBlbWl0dGVyLm9uKCdjbGVhciBhbGwnLCBmdW5jdGlvbiAoY291bnQpIHtcblxuICB9KVxuXG4gIGVtaXR0ZXIub24oJ2hpZGVBbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgc3RhdGUuc2hvd1VJID0gIXN0YXRlLnNob3dVSVxuICAgIGVtaXR0ZXIuZW1pdCgncmVuZGVyJylcbiAgfSlcblxuICBlbWl0dGVyLm9uKCd0b2dnbGUgaW5mbycsIGZ1bmN0aW9uIChjb3VudCkge1xuICAgIHN0YXRlLnNob3dJbmZvID0gIXN0YXRlLnNob3dJbmZvXG4gICAgZW1pdHRlci5lbWl0KCdyZW5kZXInKVxuICB9KVxuXG4gIGVtaXR0ZXIub24oJ2h1ZGUgaW5mbycsIGZ1bmN0aW9uIChjb3VudCkge1xuICAgIHN0YXRlLnNob3dJbmZvID0gZmFsc2VcbiAgICBlbWl0dGVyLmVtaXQoJ3JlbmRlcicpXG4gIH0pXG5cblxuXG4gIGVtaXR0ZXIub24oJ211dGF0ZSBza2V0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgfSlcbn1cblxuZnVuY3Rpb24gc2hvd0NvbmZpcm1hdGlvbihzdWNjZXNzQ2FsbGJhY2ssIHRlcm1pbmF0ZUNhbGxiYWNrKSB7XG4gIHZhciBjID0gcHJvbXB0KGBcblxuIEhZRFJBIFNLRVRDSCBHQUxMRVJZXG5cbvCfjqggQ2xpY2sgJ09LJyB0byBhZGQgeW91ciBza2V0Y2ggYW5kIHNjcmVlbnNob3QgdG8gdGhlIGdhbGxlcnkgb2YgaHlkcmEgc2tldGNoZXMgYXQgaHR0cHM6Ly9ib3RzaW4uc3BhY2UvQGh5ZHJhLiBcblxu4oC877iPIE1ha2Ugc3VyZSB5b3UgYXJlIHJlYWR5IHRvIHNoYXJlIC0gdGhlcmUgaXMgbm8gdW5kbyBidXR0b24hXG5cbvCfkpYgVGhhbmsgeW91IGZvciBzaGFyaW5nISBZb3UgYXJlIGFsc28gd2FybWx5IGludml0ZWQgdG8gam9pbiB0aGUgdGhlIGxpdmUgY29kaW5nIHNlcnZlciBvbiB0aGUgZmVkaXZlcnNlIGF0IGh0dHBzOi8vc29jaWFsLnRvcGxhcC5vcmcvLlxuYCBcbiwgJ3lvdXIgbmFtZSwgbWFzdG9kb24gaGFuZGxlLCBhbmQvb3IgYSBzaG9ydCBkZXNjcmlwdGlvbicpXG5cbiAgLy8gIGNvbnNvbGUubG9nKCdjb25maXJtIHZhbHVlJywgYylcbiAgaWYgKGMgIT09IG51bGwpIHtcbiAgICBzdWNjZXNzQ2FsbGJhY2soYylcbiAgfSBlbHNlIHtcbiAgICB0ZXJtaW5hdGVDYWxsYmFjaygpXG4gIH1cbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBlbjoge1xuICAgICAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgICAgICAgJ2xhbmd1YWdlLW5hbWUnOiAnZW5nbGlzaCcsXG4gICAgICAgICAgICB0b29sYmFyOiB7XG4gICAgICAgICAgICAgICAgcnVuOiBcIlJ1biBhbGwgY29kZSAoY3RybCtzaGlmdCtlbnRlcilcIixcbiAgICAgICAgICAgICAgICB1cGxvYWQ6IFwidXBsb2FkIHRvIGdhbGxlcnlcIixcbiAgICAgICAgICAgICAgICBjbGVhcjogXCJjbGVhciBhbGxcIixcbiAgICAgICAgICAgICAgICBzaHVmZmxlOiBcInNob3cgcmFuZG9tIHNrZXRjaFwiLFxuICAgICAgICAgICAgICAgIHJhbmRvbTogXCJtYWtlIHJhbmRvbSBjaGFuZ2VcIixcbiAgICAgICAgICAgICAgICBcInNob3ctaW5mb1wiOiBcInNob3cgaW5mbyB3aW5kb3dcIixcbiAgICAgICAgICAgICAgICBcImhpZGUtaW5mb1wiOiBcImhpZGUgaW5mbyB3aW5kb3dcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluZm86IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ2h5ZHJhJyxcbiAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ2xpdmUgY29kaW5nIHZpZGVvIHN5bnRoJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0h5ZHJhIGlzIGxpdmUgY29kZS1hYmxlIHZpZGVvIHN5bnRoIGFuZCBjb2RpbmcgZW52aXJvbm1lbnQgdGhhdCBydW5zIGRpcmVjdGx5IGluIHRoZSBicm93c2VyLiBJdCBpcyBmcmVlIGFuZCBvcGVuLXNvdXJjZSBhbmQgbWFkZSBmb3IgYmVnaW5uZXJzIGFuZCBleHBlcnRzIGFsaWtlLicsXG4gICAgICAgICAgICAgICAgJ2dldC1zdGFydGVkLXRpdGxlJzogJ1RvIGdldCBzdGFydGVkOicsXG4gICAgICAgICAgICAgICAgJ2dldC1zdGFydGVkLWxpc3QnOiBbXG4gICAgICAgICAgICAgICAgICAgICdDbG9zZSB0aGlzIHdpbmRvdycsXG4gICAgICAgICAgICAgICAgICAgICdDaGFuZ2Ugc29tZSBudW1iZXJzJyxcbiAgICAgICAgICAgICAgICAgICAgJ1R5cGUgQ3RybCArIFNoaWZ0ICsgRW50ZXInXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24tZGV0YWlsZWQnOiAnSHlkcmEgaXMgd3JpdHRlbiBpbiBKYXZhU2NyaXB0IGFuZCBjb21waWxlcyB0byBXZWJHTCB1bmRlciB0aGUgaG9vZC4gVGhlIHN5bnRheCBpcyBpbnNwaXJlZCBieSBhbmFsb2cgbW9kdWxhciBzeW50aGVzaXMsIGluIHdoaWNoIGNoYWluaW5nIG9yIHBhdGNoaW5nIGEgc2V0IG9mIHRyYW5zZm9ybWF0aW9ucyB0b2dldGhlciBnZW5lcmF0ZXMgYSB2aXN1YWwgcmVzdWx0LicsXG4gICAgICAgICAgICAgICAgJ3VzZXMnOiAnSHlkcmEgY2FuIGJlIHVzZWQ6JyxcbiAgICAgICAgICAgICAgICAndXNlcy1saXN0JzogW1xuICAgICAgICAgICAgICAgICAgICAndG8gbWl4IGFuZCBhZGQgZWZmZWN0cyB0byBjYW1lcmEgZmVlZHMsIHNjcmVlbnNoYXJlcywgbGl2ZSBzdHJlYW1zLCBhbmQgdmlkZW9zJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RvIGNyZWF0ZSBnZW5lcmF0aXZlIGFuZCBhdWRpby1yZWFjdGl2ZSB2aXN1YWxzLCBhbmQgc2hhcmUgdGhlbSBvbmxpbmUgd2l0aCBvdGhlcnMnLFxuICAgICAgICAgICAgICAgICAgICAnaW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBqYXZhc2NyaXB0IGxpYnJhcmllcyBzdWNoIGFzIFA1LmpzLCBUb25lLmpzLCBUSFJFRS5qcywgb3IgZ2liYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RvIGFkZCBpbnRlcmFjdGl2ZSB2aWRlbyBlZmZlY3RzIHRvIGEgd2Vic2l0ZScsXG4gICAgICAgICAgICAgICAgICAgICd0byBleHBlcmltZW50IHdpdGggYW5kIGxlYXJuIGFib3V0IHZpZGVvIGZlZWRiYWNrLCBmcmFjdGFscywgYW5kIHBpeGVsIG9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAndG8gc3RyZWFtIHZpZGVvIGJldHdlZW4gYnJvd3NlcnMgYW5kIGxpdmUtamFtIHdpdGggb3RoZXJzIG9ubGluZSdcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICdhdXRob3InOiAnQ3JlYXRlZCBieSA8YSB7e2F1dGhvcn19Pm9saXZpYS48L2E+JyxcbiAgICAgICAgICAgICAgICAnbW9yZS1pbmZvJzogJ0ZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBpbnN0cnVjdGlvbnMsIHNlZTogPGEge3tkb2NzfX0+dGhlIGludGVyYWN0aXZlIGRvY3VtZW50YXRpb248L2E+LCA8YSB7e2Z1bmN0aW9uc319PmEgbGlzdCBvZiBoeWRyYSBmdW5jdGlvbnM8L2E+LCA8YSB7e2dhcmRlbn19PnRoZSBjb21tdW5pdHkgZGF0YWJhc2Ugb2YgcHJvamVjdHMgYW5kIHR1dG9yaWFsczwvYT4sIDxhIHt7Z2FsbGVyeX19PmEgZ2FsbGVyeSBvZiB1c2VyLWdlbmVyYXRlZCBza2V0Y2hlczwvYT4sIGFuZCA8YSB7e3JlcG99fT50aGUgc291cmNlIGNvZGUgb24gZ2l0aHViPC9hPiwnLFxuXG4gICAgICAgICAgICAgICAgJ21vcmUtaW5mby1mb3J1bXMnOiAnVGhlcmUgaXMgYWxzbyBhbiBhY3RpdmUgPGEge3tkaXNjb3JkfX0+RGlzY29yZCBzZXJ2ZXI8L2E+IGFuZCA8YSB7e2ZhY2Vib29rfX0+ZmFjZWJvb2sgZ3JvdXA8L2E+IGZvciBoeWRyYSB1c2Vycytjb250cmlidXRvcnMuJyxcbiAgICAgICAgICAgICAgICAnc3VwcG9ydCc6ICdJZiB5b3UgZW5qb3kgdXNpbmcgSHlkcmEsIHBsZWFzZSBjb25zaWRlciAgPGEge3tvcGVuLWNvbGxlY3RpdmV9fSA+c3VwcG9ydGluZyBjb250aW51ZWQgZGV2ZWxvcG1lbnQgPDMgPC9hPi4nXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59IiwiY29uc3QgaHRtbCA9IHJlcXVpcmUoJ2Nob28vaHRtbCcpXG5jb25zdCBDb21wb25lbnQgPSByZXF1aXJlKCdjaG9vL2NvbXBvbmVudCcpXG5jb25zdCBIeWRyYUVkaXRvciA9IHJlcXVpcmUoJy4vZWRpdG9yL2VkaXRvci5qcycpXG5jb25zdCBsb2cgPSByZXF1aXJlKCcuL2VkaXRvci9sb2cuanMnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEVkaXRvciBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChpZCwgc3RhdGUsIGVtaXQpIHtcbiAgICBzdXBlcihpZClcbiAgICB0aGlzLmxvY2FsID0gc3RhdGUuY29tcG9uZW50c1tpZF0gPSB7fVxuICAgIHN0YXRlLmVkaXRvciA9IHRoaXMgLy8gaGFja3kgd2F5IGZvIHNoYXJpbmcgZWRpdG9yIHRvIHJlc3Qgb2YgYXBwXG4gICAgdGhpcy5lbWl0ID0gZW1pdFxuICB9XG5cbiAgbG9hZCAoZWxlbWVudCkge1xuICAgbG9nLmluaXQodGhpcy5sb2dFbGVtZW50KVxuICAgdGhpcy5lZGl0b3IgPSBuZXcgSHlkcmFFZGl0b3IodGhpcy50ZXh0RWwpXG4gICB0aGlzLmVkaXRvci5vbihcIipcIiwgKGUsIGFyZ3MpID0+IHtcbiAgICAgICB0aGlzLmVtaXQoZSwgYXJncylcbiAgIH0pXG4gICAvLyBoYWNreSwgbWF5YmUgbm90IG5lY2Vzc2FyeVxuICAgdGhpcy5pbm5lclRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdDb2RlTWlycm9yJylbMF1cbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5pbm5lclRleHQuc3R5bGUub3BhY2l0eSA9IDBcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgdGhpcy5pbm5lclRleHQuc3R5bGUub3BhY2l0eSA9IDFcbiAgICB0aGlzLmlubmVyVGV4dC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2FsbCdcbiAgfVxuXG4gIHVwZGF0ZSAoc3RhdGUpIHtcbiAgICBpZihzdGF0ZS5zaG93SW5mbyA9PT0gdHJ1ZSB8fCBzdGF0ZS5zaG93VUkgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KClcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjcmVhdGVFbGVtZW50ICh7IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGgsIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodH0gPSB7fSkge1xuICAgIHRoaXMudGV4dEVsID0gaHRtbGAgPHRleHRhcmVhPjwvdGV4dGFyZWE+YFxuICAgIHRoaXMubG9nRWxlbWVudCA9IGh0bWxgPGRpdiBjbGFzcz1cImNvbnNvbGUgY20tcy10b21vcnJvdy1uaWdodC1laWdodGllc1wiPjwvZGl2PmBcbiAgICByZXR1cm4gaHRtbGA8ZGl2IGlkPVwiZWRpdG9yLWNvbnRhaW5lclwiIHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtcIj5cbiAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO3BhZGRpbmc6MTVweFwiPiR7dGhpcy50ZXh0RWx9PC9kaXY+XG4gICAgICAgJHt0aGlzLmxvZ0VsZW1lbnR9XG4gICAgICAgPC9kaXY+YFxuICB9XG59XG4iLCJjb25zdCBodG1sID0gcmVxdWlyZSgnY2hvby9odG1sJylcbmNvbnN0IENvbXBvbmVudCA9IHJlcXVpcmUoJ2Nob28vY29tcG9uZW50Jylcbi8vIGNvbnN0IEh5ZHJhU3ludGggPSByZXF1aXJlKCdoeWRyYS1zeW50aCcpXG4vLyBjb25zdCBIeWRyYVN5bnRoID0gcmVxdWlyZSgnLi8uLi8uLi8uLi8uLi8uLi9oeWRyYS1zeW50aCcpXG5jb25zdCBQNSA9IHJlcXVpcmUoJy4vLi4vbGliL3A1LXdyYXBwZXIuanMnKVxuY29uc3QgUGF0Y2hCYXkgPSByZXF1aXJlKCcuLy4uL2xpYi9wYXRjaC1iYXkvcGItbGl2ZS5qcycpXG5sZXQgcGJcblxuLy8gY29uc3QgU0VSVkVSX1VSTCA9IHByb2Nlc3MuZW52WydTRVJWRVJfVVJMJ11cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBIeWRyYUNhbnZhcyBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGlkLCBzdGF0ZSwgZW1pdCkge1xuICAgIHN1cGVyKGlkKVxuICAgIHRoaXMubG9jYWwgPSBzdGF0ZS5jb21wb25lbnRzW2lkXSA9IHt9XG4gICAgc3RhdGUuaHlkcmEgPSB0aGlzIC8vIGhhY2t5XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlXG4gICAgdGhpcy5lbWl0ID0gZW1pdFxuICB9XG5cbiAgbG9hZChlbGVtZW50KSB7XG4gICAgbGV0IGlzSU9TID1cbiAgICAgICgvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pIHx8XG4gICAgICAgIChuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdNYWNJbnRlbCcgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMSkpICYmXG4gICAgICAhd2luZG93Lk1TU3RyZWFtO1xuICAgIGxldCBwcmVjaXNpb25WYWx1ZSA9IGlzSU9TID8gJ2hpZ2hwJyA6ICdtZWRpdW1wJ1xuXG5cbiAgICBjb25zdCBoeWRyYU9wdGlvbnMgPSB7IGRldGVjdEF1ZGlvOiB0cnVlLCBjYW52YXM6IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcImNhbnZhc1wiKSwgcHJlY2lzaW9uOiBwcmVjaXNpb25WYWx1ZSB9XG4gICAgXG4gICAgaWYgKHRoaXMuc3RhdGUuc2VydmVyVVJMID09PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZygnTE9DQUwgT05MWSwgV0lMTCBOT1QgSU5JVCB3ZWJSVEMgYW5kIGdhbGxlcnknKVxuICAgICAgdGhpcy5oeWRyYSA9IG5ldyBIeWRyYShoeWRyYU9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGIgPSBuZXcgUGF0Y2hCYXkoKVxuICAgICAgaHlkcmFPcHRpb25zLnBiID0gdGhpcy5wYlxuICAgICAgdGhpcy5oeWRyYSA9IG5ldyBIeWRyYShoeWRyYU9wdGlvbnMpXG4gICAgICB0aGlzLnBiLmluaXQodGhpcy5oeWRyYS5jYXB0dXJlU3RyZWFtLCB7XG4gICAgICAgIC8vIHNlcnZlcjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgICAgc2VydmVyOiB0aGlzLnN0YXRlLnNlcnZlclVSTCxcbiAgICAgICAgcm9vbTogJ2ljbGMnXG4gICAgICB9KVxuICAgICAgd2luZG93LnBiID0gdGhpcy5wYlxuICAgIH1cblxuICAgIHdpbmRvdy5oeWRyYVN5bnRoID0gdGhpcy5oeWRyYVxuICAgIC8vICBpZihlbnZpcm9ubWVudCAhPT0gJ2xvY2FsJykge1xuICAgIC8vIG9zYygpLm91dCgpXG5cbiAgICAvLyB9XG5cbiAgICB3aW5kb3cuUDUgPSBQNVxuICAgIC8vIHdpbmRvdy5wYiA9IHBiXG4gICAgdGhpcy5lbWl0KCdoeWRyYSBsb2FkZWQnKVxuICB9XG5cbiAgdXBkYXRlKGNlbnRlcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY3JlYXRlRWxlbWVudCh7IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGgsIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB9ID0ge30pIHtcblxuICAgIHJldHVybiBodG1sYDxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlO1wiPlxuICAgICAgICA8Y2FudmFzIGlkPVwiaHlkcmEtY2FudmFzXCIgY2xhc3M9XCJiZy1ibGFja1wiIHN0eWxlPVwiaW1hZ2UtcmVuZGVyaW5nOnBpeGVsYXRlZDsgd2lkdGg6MTAwJTtoZWlnaHQ6MTAwJVwiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIke2hlaWdodH1cIj48L2NhbnZhcz48L2Rpdj5gXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLWV2YWwgKi9cbnZhciBDb2RlTWlycm9yID0gcmVxdWlyZSgnY29kZW1pcnJvci1taW5pZmllZC9saWIvY29kZW1pcnJvcicpXG5yZXF1aXJlKCdjb2RlbWlycm9yLW1pbmlmaWVkL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0JylcbnJlcXVpcmUoJ2NvZGVtaXJyb3ItbWluaWZpZWQvYWRkb24vaGludC9qYXZhc2NyaXB0LWhpbnQnKVxucmVxdWlyZSgnY29kZW1pcnJvci1taW5pZmllZC9hZGRvbi9oaW50L3Nob3ctaGludCcpXG5yZXF1aXJlKCdjb2RlbWlycm9yLW1pbmlmaWVkL2FkZG9uL3NlbGVjdGlvbi9tYXJrLXNlbGVjdGlvbicpXG5yZXF1aXJlKCdjb2RlbWlycm9yLW1pbmlmaWVkL2FkZG9uL2NvbW1lbnQvY29tbWVudCcpXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25hbm9idXMnKVxuY29uc3Qga2V5bWFwcyA9IHJlcXVpcmUoJy4va2V5bWFwcy5qcycpXG5jb25zdCBNdXRhdG9yID0gcmVxdWlyZSgnLi9yYW5kb21pemVyL011dGF0b3IuanMnKTtcbmNvbnN0IGJlYXV0aWZ5X2pzID0gcmVxdWlyZSgnanMtYmVhdXRpZnknKS5qc19iZWF1dGlmeVxuXG52YXIgaXNTaG93aW5nID0gdHJ1ZVxuXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRWRpdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgc3VwZXIoKVxuICAgIGNvbnNvbGUubG9nKFwiKioqIEVkaXRvciBjbGFzcyBjcmVhdGVkXCIpO1xuICAgIHZhciBzZWxmID0gdGhpc1xuXG4gICAgLy8gdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgLy8gY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAnZWRpdG9yLWNvbnRhaW5lcicpXG4gICAgLy8gdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEVYVEFSRUEnKVxuICAgIC8vIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKVxuICAgIC8vIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbClcblxuICAgIHRoaXMubXV0YXRvciA9IG5ldyBNdXRhdG9yKHRoaXMpO1xuXG4gICAgY29uc3QgZXh0cmFLZXlzID0ge31cbiAgICBPYmplY3QuZW50cmllcyhrZXltYXBzKS5mb3JFYWNoKChba2V5LCBlXSkgPT4gZXh0cmFLZXlzW2tleV0gPSAoKSA9PiB7XG4gICAgICBpZihlID09ICdlZGl0b3I6ZXZhbEJsb2NrJykge1xuICAgICAgICB0aGlzLmVtaXQoZSwgdGhpcy5nZXRDdXJyZW50QmxvY2soKS50ZXh0KVxuICAgICAgfSBlbHNlIGlmIChlID09ICdlZGl0b3I6ZXZhbExpbmUnKSB7XG4gICAgICAgIHRoaXMuZW1pdChlLCB0aGlzLmdldExpbmUoKSlcbiAgICAgIH0gZWxzZSBpZiAoZSA9PSAnZWRpdG9yOnRvZ2dsZUNvbW1lbnQnKSB7XG4gICAgICAgIHRoaXMuY20udG9nZ2xlQ29tbWVudCgpXG4gICAgICAvLyB9IGVsc2UgaWYgKGUgPT0gJ2dhbGxlcnk6c2F2ZVRvVVJMJykge1xuICAgICAgICB0aGlzLmVtaXQoZSwgdGhpcylcbiAgICAgIH0gZWxzZSBpZiAoZSA9PT0gJ2VkaXRvcjpmb3JtYXRDb2RlJykge1xuICAgICAgICB0aGlzLmZvcm1hdENvZGUoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbWl0KGUsIHRoaXMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICB0aGVtZTogJ3RvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzJyxcbiAgICAgIHZhbHVlOiAnaGVsbG8nLFxuICAgICAgbW9kZTogeyBuYW1lOiAnamF2YXNjcmlwdCcsIGdsb2JhbFZhcnM6IHRydWUgfSxcbiAgICAgIGxpbmVXcmFwcGluZzogdHJ1ZSxcbiAgICAgIHN0eWxlU2VsZWN0ZWRUZXh0OiB0cnVlLFxuICAgICAgZXh0cmFLZXlzOiBleHRyYUtleXNcbiAgICB9XG5cbiAgICB0aGlzLmNtID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEocGFyZW50LCBvcHRzKVxuICAgIHdpbmRvdy5jbSA9IHRoaXMuY21cbiAgICB0aGlzLmNtLnJlZnJlc2goKVxuXG4gICAgLy8gdGhpcy5zaG93KClcbiAgICAvLyAvLyAvLyBUTyBETzogYWRkIHNob3cgY29kZSBwYXJhbVxuICAgIC8vIGxldCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpXG4gICAgLy8gbGV0IHNob3dDb2RlID0gc2VhcmNoUGFyYW1zLmdldCgnc2hvdy1jb2RlJylcblxuICAgIC8vIGlmIChzaG93Q29kZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgLy8gICB0aGlzLmhpZGUoKVxuICAgIC8vIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuY20uc2V0VmFsdWUoJ1xcbiBcXG4gLy8gVHlwZSBzb21lIGNvZGUgb24gYSBuZXcgbGluZSAoc3VjaCBhcyBcIm9zYygpLm91dCgpXCIpLCBhbmQgcHJlc3MgQ1RSTCtzaGlmdCtlbnRlcicpXG4gIH1cblxuICBzZXRWYWx1ZSh2YWwpIHtcbiAgICB0aGlzLmNtLnNldFZhbHVlKHZhbClcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmNtLmdldFZhbHVlKClcbiAgfVxuXG4gIGZvcm1hdENvZGUoKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gYmVhdXRpZnlfanModGhpcy5jbS5nZXRWYWx1ZSgpLCB7IGluZGVudF9zaXplOiAyLCBcImJyZWFrX2NoYWluZWRfbWV0aG9kc1wiOiB0cnVlLCBcImluZGVudF93aXRoX3RhYnNcIjogdHJ1ZX0pXG4gICAgdGhpcy5jbS5zZXRWYWx1ZShmb3JtYXR0ZWQpXG4gIH1cblxuICAvLyBoaWRlKCkge1xuICAvLyAgIGNvbnNvbGUubG9nKCdoaWRpbmcnKVxuICAvLyAgIHZhciBsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnQ29kZU1pcnJvcicpWzBdXG4gIC8vICAgdmFyIG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtaGVhZGVyJylcbiAgLy8gICBsLnN0eWxlLm9wYWNpdHkgPSAwXG4gIC8vICAgbS5zdHlsZS5vcGFjaXR5ID0gMFxuICAvLyAgIHRoaXMuaXNTaG93aW5nID0gZmFsc2VcbiAgLy8gfVxuXG4gIC8vIHNob3coKSB7XG4gIC8vICAgdmFyIGwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdDb2RlTWlycm9yJylbMF1cbiAgLy8gICB2YXIgbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1oZWFkZXInKVxuICAvLyAgIGwuc3R5bGUub3BhY2l0eT0gMVxuICAvLyAgIG0uc3R5bGUub3BhY2l0eSA9IDFcbiAgLy8gICBsLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYWxsJ1xuICAvLyAgIHRoaXMuaXNTaG93aW5nID0gdHJ1ZVxuICAvLyB9XG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLmlzU2hvd2luZykge1xuICAgICAgdGhpcy5oaWRlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KClcbiAgICB9XG4gIH1cblxuICBnZXRMaW5lKCkge1xuICAgIHZhciBjID0gdGhpcy5jbS5nZXRDdXJzb3IoKVxuICAgIHZhciBzID0gdGhpcy5jbS5nZXRMaW5lKGMubGluZSlcbiAgICAvLyAgdGhpcy5jbS5tYXJrVGV4dCh7bGluZTogYy5saW5lLCBjaDowfSwge2xpbmU6IGMubGluZSsxLCBjaDowfSwge2NsYXNzTmFtZTogJ3N0eWxlZC1iYWNrZ3JvdW5kJ30pXG4gICAgdGhpcy5mbGFzaENvZGUoeyBsaW5lOiBjLmxpbmUsIGNoOiAwIH0sIHsgbGluZTogYy5saW5lICsgMSwgY2g6IDAgfSlcbiAgICByZXR1cm4gc1xuICB9XG5cbiAgZmxhc2hDb2RlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoIXN0YXJ0KSBzdGFydCA9IHsgbGluZTogdGhpcy5jbS5maXJzdExpbmUoKSwgY2g6IDAgfVxuICAgIGlmICghZW5kKSBlbmQgPSB7IGxpbmU6IHRoaXMuY20ubGFzdExpbmUoKSArIDEsIGNoOiAwIH1cbiAgICB2YXIgbWFya2VyID0gdGhpcy5jbS5tYXJrVGV4dChzdGFydCwgZW5kLCB7IGNsYXNzTmFtZTogJ3N0eWxlZC1iYWNrZ3JvdW5kJyB9KVxuICAgIHNldFRpbWVvdXQoKCkgPT4gbWFya2VyLmNsZWFyKCksIDMwMClcbiAgfVxuXG5cbiAgZ2V0Q3VycmVudEJsb2NrKCkgeyAvLyB0aGFua3MgdG8gZ3JhaGFtIHdha2VmaWVsZCArIGdpYmJlclxuICAgIHZhciBlZGl0b3IgPSB0aGlzLmNtXG4gICAgdmFyIHBvcyA9IGVkaXRvci5nZXRDdXJzb3IoKVxuICAgIHZhciBzdGFydGxpbmUgPSBwb3MubGluZVxuICAgIHZhciBlbmRsaW5lID0gcG9zLmxpbmVcbiAgICB3aGlsZSAoc3RhcnRsaW5lID4gMCAmJiBlZGl0b3IuZ2V0TGluZShzdGFydGxpbmUpICE9PSAnJykge1xuICAgICAgc3RhcnRsaW5lLS1cbiAgICB9XG4gICAgd2hpbGUgKGVuZGxpbmUgPCBlZGl0b3IubGluZUNvdW50KCkgJiYgZWRpdG9yLmdldExpbmUoZW5kbGluZSkgIT09ICcnKSB7XG4gICAgICBlbmRsaW5lKytcbiAgICB9XG4gICAgdmFyIHBvczEgPSB7XG4gICAgICBsaW5lOiBzdGFydGxpbmUsXG4gICAgICBjaDogMFxuICAgIH1cbiAgICB2YXIgcG9zMiA9IHtcbiAgICAgIGxpbmU6IGVuZGxpbmUsXG4gICAgICBjaDogMFxuICAgIH1cbiAgICB2YXIgc3RyID0gZWRpdG9yLmdldFJhbmdlKHBvczEsIHBvczIpXG5cbiAgICB0aGlzLmZsYXNoQ29kZShwb3MxLCBwb3MyKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBwb3MxLFxuICAgICAgZW5kOiBwb3MyLFxuICAgICAgdGV4dDogc3RyXG4gICAgfVxuICB9XG5cbn1cblxuIiwibW9kdWxlLmV4cG9ydHMgPSB7IFxuICAgICdDdHJsLUVudGVyJzogJ2VkaXRvcjpldmFsTGluZScsXG4gICAgJ0N0cmwtLyc6ICdlZGl0b3I6dG9nZ2xlQ29tbWVudCcsXG4gICAgJ0FsdC1FbnRlcic6ICdlZGl0b3I6ZXZhbEJsb2NrJyxcbiAgICAnU2hpZnQtQ3RybC1FbnRlcic6ICdlZGl0b3I6ZXZhbEFsbCcsXG4gICAgJ1NoaWZ0LUN0cmwtRyc6ICdnYWxsZXJ5OnNoYXJlU2tldGNoJyxcbiAgICAnU2hpZnQtQ3RybC1GJzogJ2VkaXRvcjpmb3JtYXRDb2RlJyxcbiAgICAnU2hpZnQtQ3RybC1MJzogJ2dhbGxlcnk6c2F2ZVRvVVJMJyxcbiAgICAnU2hpZnQtQ3RybC1IJzogJ2hpZGVBbGwnLFxuICAgICdTaGlmdC1DdHJsLVMnOiAnc2NyZWVuY2FwJ1xufSIsInZhciBsb2dFbGVtZW50XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbml0OiAoZWwpID0+IHtcbiAgICAvLyBsb2dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAvLyBsb2dFbGVtZW50LmNsYXNzTmFtZSA9IFwiY29uc29sZSBjbS1zLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzXCJcbiAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvZ0VsZW1lbnQpXG4gICAgbG9nRWxlbWVudCA9IGVsXG4gIH0sXG4gIGxvZzogKG1zZywgY2xhc3NOYW1lID0gXCJcIikgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdsb2dnaW5nJywgbXNnLCBjbGFzc05hbWUpXG4gICAgaWYobG9nRWxlbWVudCkgbG9nRWxlbWVudC5pbm5lckhUTUwgPWAgPj4gPHNwYW4gY2xhc3M9JHtjbGFzc05hbWV9PiAke21zZ30gPC9zcGFuPiBgXG4gIH0sXG4gIGhpZGU6ICgpID0+IHtcbiAgICBpZihsb2dFbGVtZW50KSBsb2dFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgfSxcbiAgc2hvdzogKCkgPT4ge1xuICAgIGlmKGxvZ0VsZW1lbnQpIGxvZ0VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgfSxcbiAgdG9nZ2xlOiAoKSA9PiB7XG4gICAgaWYobG9nRWxlbWVudC5zdHlsZS5kaXNwbGF5ID09ICdub25lJykge1xuICAgICAgbG9nRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHtQYXJzZXJ9ID0gcmVxdWlyZShcImFjb3JuXCIpO1xuY29uc3Qge2dlbmVyYXRlfSA9IHJlcXVpcmUoJ2FzdHJpbmcnKTtcbmNvbnN0IHsgZGVmYXVsdFRyYXZlbGVyLCBhdHRhY2hDb21tZW50cywgbWFrZVRyYXZlbGVyIH0gPSByZXF1aXJlKCdhc3RyYXZlbCcpO1xuY29uc3Qge1VuZG9TdGFja30gPSByZXF1aXJlKCcuL1VuZG9TdGFjay5qcycpO1xuY29uc3QgcmVwbCA9IHJlcXVpcmUoJy4vLi4vcmVwbC5qcycpXG4vLyBjb25zdCBnbHNsVHJhbnNmb3JtcyA9IHJlcXVpcmUoJ2h5ZHJhLXN5bnRoL3NyYy9nbHNsL2dsc2wtZnVuY3Rpb25zLmpzJykoKVxuY29uc3QgZ2xzbFRyYW5zZm9ybXMgPSByZXF1aXJlKCcuL2dsc2xUcmFuc2Zvcm1zLmpzJylcblxuY2xhc3MgTXV0YXRvciB7XG5cbiAgY29uc3RydWN0b3IoZWRpdG9yKSB7XG4gICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgdGhpcy51bmRvU3RhY2sgPSBuZXcgVW5kb1N0YWNrKCk7XG5cbiAgICB0aGlzLmluaXRpYWxWZWN0b3IgPSBbXTtcblxuICAgIHRoaXMuZnVuY1RhYiA9IHt9O1xuICAgIHRoaXMudHJhbnNNYXAgPSB7fTtcblx0XHR0aGlzLnNjYW5GdW5jcygpO1xuXHRcdHRoaXMuZHVtcERpY3QoKTtcbiAgfVxuXG4gIGR1bXBMaXN0KCkge1xuICBcdGxldCBnc2xUYWIgPSBnbHNsVHJhbnNmb3JtcztcbiAgXHRnc2xUYWIuZm9yRWFjaCAodiA9PiB7XG4gIFx0XHR2YXIgYXJnTGlzdCA9IFwiXCI7XG4gIFx0XHR2LmlucHV0cy5mb3JFYWNoKChhKSA9PiB7XG4gIFx0XHRcdGlmIChhcmdMaXN0ICE9IFwiXCIpIGFyZ0xpc3QgKz0gXCIsIFwiO1xuICBcdFx0XHRsZXQgYXJnTCA9IGEubmFtZSArIFwiOiBcIiArIGEudHlwZSArIFwiIHtcIiArIGEuZGVmYXVsdCArIFwifVwiO1xuICBcdFx0XHRhcmdMaXN0ID0gYXJnTGlzdCArIGFyZ0w7XG4gIFx0XHR9KTtcbiAgXHQvL1x0Y29uc29sZS5sb2codi5uYW1lICsgXCIgW1wiICsgdi50eXBlICsgXCJdIChcIisgYXJnTGlzdCArIFwiKVwiKTtcbiAgXHR9KTtcbiAgfVxuXG4gIHNjYW5GdW5jcygpIHtcbiAgXHRsZXQgZ3NsVGFiID0gZ2xzbFRyYW5zZm9ybXM7XG4gIFx0Z3NsVGFiLmZvckVhY2ggKGYgPT4ge1xuICBcdFx0dGhpcy50cmFuc01hcFtmLm5hbWVdID0gZjtcbiAgXHRcdGlmICh0aGlzLmZ1bmNUYWJbZi50eXBlXSA9PT0gdW5kZWZpbmVkKSB7dGhpcy5mdW5jVGFiW2YudHlwZV0gPSBbXX1cblx0XHRcdHRoaXMuZnVuY1RhYltmLnR5cGVdLnB1c2goZik7XG4gIFx0fSk7XG4gIH1cblxuXHRkdW1wRGljdCgpIHtcblx0XHRmb3IobGV0IHRuIGluIHRoaXMuZnVuY1RhYilcblx0XHR7XG5cdFx0XHR0aGlzLmZ1bmNUYWJbdG5dLmZvckVhY2goZiA9PiB7XG4gIFx0XHR2YXIgYXJnTGlzdCA9IFwiXCI7XG4gIFx0XHRmLmlucHV0cy5mb3JFYWNoKChhKSA9PiB7XG4gIFx0XHRcdGlmIChhcmdMaXN0ICE9IFwiXCIpIGFyZ0xpc3QgKz0gXCIsIFwiO1xuICBcdFx0XHRsZXQgYXJnTCA9IGEubmFtZSArIFwiOiBcIiArIGEudHlwZSArIFwiIHtcIiArIGEuZGVmYXVsdCArIFwifVwiO1xuICBcdFx0XHRhcmdMaXN0ID0gYXJnTGlzdCArIGFyZ0w7XG4gIFx0XHR9KTtcbiAgXHRcdC8vY29uc29sZS5sb2coZi5uYW1lICsgXCIgW1wiICsgZi50eXBlICsgXCJdIChcIisgYXJnTGlzdCArIFwiKVwiKTtcblx0XHRcdH0pO1xuICAgIH1cblx0fVxuXG4gIG11dGF0ZShvcHRpb25zKSB7XG4gICAgLy8gR2V0IHRleHQgZnJvbSBDb2RlTWlycm9yLlxuICAgIGxldCB0ZXh0ID0gdGhpcy5lZGl0b3IuY20uZ2V0VmFsdWUoKTtcbiAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHt0ZXh0LCBsYXN0TGl0WDogdGhpcy5sYXN0TGl0WH0pO1xuICAgIGxldCBuZWVkVG9SdW4gPSB0cnVlO1xuICAgIGxldCB0cnlDb3VudGVyID0gNTtcbiAgICB3aGlsZSAobmVlZFRvUnVuICYmIHRyeUNvdW50ZXItLSA+PSAwKSB7XG4gICAgICAgIC8vIFBhcnNlIHRvIEFTVFxuICAgICAgICB2YXIgY29tbWVudHMgPSBbXTtcbiAgICAgICAgbGV0IGFzdCA9IFBhcnNlci5wYXJzZSh0ZXh0LCB7XG4gICAgICAgICAgICBsb2NhdGlvbnM6IHRydWUsXG4gICAgICAgICAgICBvbkNvbW1lbnQ6IGNvbW1lbnRzfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1vZGlmeSB0aGUgQVNULlxuICAgICAgICB0aGlzLnRyYW5zZm9ybShhc3QsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIFB1dCB0aGUgY29tbWVudHMgYmFjay5cbiAgICAgICAgYXR0YWNoQ29tbWVudHMoYXN0LCBjb21tZW50cyk7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgSlMgZnJvbSBBU1QgYW5kIHNldCBiYWNrIGludG8gQ29kZU1pcnJvciBlZGl0b3IuXG4gICAgICAgIGxldCByZWdlbiA9IGdlbmVyYXRlKGFzdCwge2NvbW1lbnRzOiB0cnVlfSk7XG5cbiAgICAgICAgdGhpcy5lZGl0b3IuY20uc2V0VmFsdWUocmVnZW4pO1xuXHRcdFx0XHR0cnkge1xuICAgICAgICAvLyBFdmFsdWF0ZSB0aGUgdXBkYXRlZCBleHByZXNzaW9uLlxuICAgICAgICByZXBsLmV2YWwocmVnZW4sIChjb2RlLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UgZ290IGFuIGVycm9yLCBrZWVwIHRyeWluZyBzb21ldGhpbmcgZWxzZS5cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXZhbCBlcnJvcjogXCIgKyByZWdlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZWVkVG9SdW4gPSBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIFx0Y29uc29sZS5sb2coXCJFeGNlcHRpb24gY2F1Z2h0OiBcIiArIGVycik7XG4gICAgICBcdG5lZWRUb1J1biA9IGVycjtcbiAgICAgIH1cbiAgICAgfVxuICB9XG5cbiAgZG9VbmRvKCkge1xuICAgIC8vIElmIHRoZSBjdXJyZW50IHRleHQgaXMgdW5zYXZlZCwgc2F2ZSBpdCBzbyB3ZSBjYW4gcmVkbyBpZiBuZWVkIGJlLlxuICAgIGlmICh0aGlzLnVuZG9TdGFjay5hdFRvcCgpKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gdGhpcy5lZGl0b3IuY20uZ2V0VmFsdWUoKTtcbiAgICAgICAgdGhpcy51bmRvU3RhY2sucHVzaCh7dGV4dCwgbGFzdExpdFg6IHRoaXMubGFzdExpdFh9KTtcbiAgICB9XG4gICAgLy8gVGhlbiBwb3Atb2ZmIHRoZSBpbmZvIHRvIHJlc3RvcmUuXG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmNhblVuZG8oKSkge1xuICAgICAgICBsZXQge3RleHQsIGxhc3RMaXRYfSA9IHRoaXMudW5kb1N0YWNrLnVuZG8oKTtcbiAgICAgICAgdGhpcy5zZXRUZXh0KHRleHQpO1xuICAgICAgICB0aGlzLmxhc3RMaXRYID0gbGFzdExpdFg7XG4gICAgfVxuICB9XG5cbiAgZG9SZWRvKCkge1xuICAgIGlmKHRoaXMudW5kb1N0YWNrLmNhblJlZG8oKSkge1xuICAgICAgICBsZXQge3RleHQsIGxhc3RMaXRYfSA9IHRoaXMudW5kb1N0YWNrLnJlZG8oKTtcbiAgICAgICAgdGhpcy5zZXRUZXh0KHRleHQpO1xuICAgICAgICB0aGlzLmxhc3RMaXRYID0gbGFzdExpdFg7XG4gICAgfVxuICB9XG5cbiAgc2V0VGV4dCh0ZXh0KSB7XG4gICAgdGhpcy5lZGl0b3IuY20uc2V0VmFsdWUodGV4dCk7XG4gICAgcmVwbC5ldmFsKHRleHQsIChjb2RlLCBlcnJvcikgPT4ge1xuICAgIH0pO1xuXG4gICAgfVxuXG4gIC8vIFRoZSBvcHRpb25zIG9iamVjdCBjb250YWlucyBhIGZsYWcgdGhhdCBjb250cm9scyBob3cgdGhlXG4gIC8vIExpdGVyYWwgdG8gbXV0YXRlIGlzIGRldGVybWluZWQuIElmIHJlcm9sbCBpcyBmYWxzZSwgd2VcbiAgLy8gcGljayBvbmUgYXQgcmFuZG9tLiBJZiByZXJvbGwgaXMgdHJ1ZSwgd2UgdXNlIHRoZSBzYW1lIGZpZWxkXG4gIC8vIHdlIGRpZCBsYXN0IHRpbWUuXG4gIHRyYW5zZm9ybShhc3QsIG9wdGlvbnMpIHtcbiAgICAvLyBBbiBBU1QgdHJhdmVsZXIgdGhhdCBhY2N1bXVsYXRlcyBhIGxpc3Qgb2YgTGl0ZXJhbCBub2Rlcy5cbiAgICBsZXQgdHJhdmVsZXIgPSBtYWtlVHJhdmVsZXIoe1xuICBnbzogZnVuY3Rpb24obm9kZSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICBzdGF0ZS5saXRlcmFsVGFiLnB1c2gobm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnByb3BlcnR5ICYmIG5vZGUucHJvcGVydHkudHlwZSA9PT0gJ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICAgICAgLy8gbnVtZXJpYyBhcnJheSBzdWJzY3JpcHRzIGFyZSBpbmVsaWdhYmxlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5ICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUgJiYgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSAhPT0gJ291dCcpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5mdW5jdGlvblRhYi5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGwgdGhlIHBhcmVudCdzIGBnb2AgbWV0aG9kXG4gICAgICAgIHRoaXMuc3VwZXIuZ28uY2FsbCh0aGlzLCBub2RlLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgc3RhdGUgPSB7fTtcbiAgICBzdGF0ZS5saXRlcmFsVGFiID0gW107XG4gICAgc3RhdGUuZnVuY3Rpb25UYWIgPSBbXTtcblxuICAgIHRyYXZlbGVyLmdvKGFzdCwgc3RhdGUpO1xuXG4gICAgdGhpcy5saXRDb3VudCA9IHN0YXRlLmxpdGVyYWxUYWIubGVuZ3RoO1xuICAgIHRoaXMuZnVuQ291bnQgPSBzdGF0ZS5mdW5jdGlvblRhYi5sZW5ndGg7XG4gICAgaWYgKHRoaXMubGl0Q291bnQgIT09IHRoaXMuaW5pdGlhbFZlY3Rvci5sZW5ndGgpIHtcbiAgICAgICAgbGV0IG5leHRWZWN0ID0gW107XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLmxpdENvdW50OyArK2kpIHtcbiAgICAgICAgICAgIG5leHRWZWN0LnB1c2goc3RhdGUubGl0ZXJhbFRhYltpXS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0aWFsVmVjdG9yID0gbmV4dFZlY3Q7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNoYW5nZVRyYW5zZm9ybSkge1xuICAgIFx0dGhpcy5nbGl0Y2hUcmFucyhzdGF0ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2UgdGhpcy5nbGl0Y2hMaXRlcmFsKHN0YXRlLCBvcHRpb25zKTtcblxufVxuXG5cdGdsaXRjaExpdGVyYWwoc3RhdGUsIG9wdGlvbnMpXG5cdHtcblx0XHRsZXQgbGl0eCA9IDA7XG4gICAgaWYgKG9wdGlvbnMucmVyb2xsKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RMaXRYICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxpdHggPSB0aGlzLmxhc3RMaXRYO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGl0eCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMubGl0Q291bnQpO1xuICAgICAgICB0aGlzLmxhc3RMaXRYID0gbGl0eDtcbiAgICB9XG5cbiAgICBsZXQgbW9kTGl0ID0gc3RhdGUubGl0ZXJhbFRhYltsaXR4XTtcbiAgICBpZiAobW9kTGl0KSB7XG4gICAgICAgIC8vIGxldCBnbGl0Y2hlZCA9IHRoaXMuZ2xpdGNoTnVtYmVyKG1vZExpdC52YWx1ZSk7XG4gICAgICAgIGxldCBnbGl0Y2hlZCA9IHRoaXMuZ2xpdGNoUmVsVG9Jbml0KG1vZExpdC52YWx1ZSwgdGhpcy5pbml0aWFsVmVjdG9yW2xpdHhdKTtcbiAgICAgICAgbGV0IHdhcyA9IG1vZExpdC5yYXc7XG4gICAgICAgIG1vZExpdC52YWx1ZSA9IGdsaXRjaGVkO1xuICAgICAgICBtb2RMaXQucmF3ID0gXCJcIiArIGdsaXRjaGVkO1xuICAgICAgICBjb25zb2xlLmxvZyhcIkxpdGVyYWw6IFwiICsgbGl0eCArIFwiIGNoYW5nZWQgZnJvbTogXCIgKyB3YXMgKyBcIiB0bzogXCIgKyBnbGl0Y2hlZCk7XG4gICAgfVxuXHR9XG5cbiAgZ2xpdGNoTnVtYmVyKG51bSkge1xuICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgbnVtID0gMTtcbiAgICB9XG4gICAgbGV0IHJhbmdlID0gbnVtICogMjtcbiAgICBsZXQgcm5kVmFsID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogcmFuZ2UgKiAxMDAwKSAvIDEwMDA7XG4gICAgcmV0dXJuIHJuZFZhbDtcbiAgfVxuXG4gIGdsaXRjaFJlbFRvSW5pdChudW0sIGluaXRWYWwpIHtcbiAgICBpZiAoaW5pdFZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBnbGl0Y2hOdW1iZXIobnVtKTtcbiAgICB9IGlmIChpbml0VmFsID09PSAwKSB7XG4gICAgICAgIGluaXRWYWwgPSAwLjU7XG4gICAgfVxuXG4gICAgbGV0IHJuZFZhbCA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIGluaXRWYWwgKiAyICogMTAwMCkgLyAxMDAwO1xuICAgIHJldHVybiBybmRWYWw7XG59XG5cdGdsaXRjaFRyYW5zKHN0YXRlLCBvcHRpb25zKVxuXHR7XG4vKlxuXHRcdHN0YXRlLmZ1bmN0aW9uVGFiLmZvckVhY2goKGYpPT57XG5cdFx0XHRjb25zb2xlLmxvZyhmLmNhbGxlZS5wcm9wZXJ0eS5uYW1lKTtcblx0XHR9KTtcbiovXG5cdFx0bGV0IGZ1bnggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLmZ1bkNvdW50KTtcblx0XHRpZiAoc3RhdGUuZnVuY3Rpb25UYWJbZnVueF0gPT09IHVuZGVmaW5lZCB8fCBzdGF0ZS5mdW5jdGlvblRhYltmdW54XS5jYWxsZWUgPT09IHVuZGVmaW5lZCB8fCBzdGF0ZS5mdW5jdGlvblRhYltmdW54XS5jYWxsZWUucHJvcGVydHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQgIFx0Y29uc29sZS5sb2coXCJObyB2YWxpZCBmdW5jdGlvblRhYiBmb3IgaW5kZXg6IFwiICsgZnVueCk7XG5cdCAgXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxldCBvbGROYW1lID0gc3RhdGUuZnVuY3Rpb25UYWJbZnVueF0uY2FsbGVlLnByb3BlcnR5Lm5hbWU7XG5cblx0ICBpZiAob2xkTmFtZSA9PSB1bmRlZmluZWQpIHtcblx0ICBcdGNvbnNvbGUubG9nKFwiTm8gbmFtZSBmb3IgY2FsbGVlXCIpO1xuXHQgIFx0cmV0dXJuO1xuXHQgIH1cblx0XHRsZXQgZnR5cGUgPSB0aGlzLnRyYW5zTWFwW29sZE5hbWVdLnR5cGU7XG5cdFx0aWYgKGZ0eXBlID09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS5sb2coXCJmdHlwZSB1bmRlZmluZWQgZm9yOiBcIiArIG9sZE5hbWUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgb3RoZXJzID0gdGhpcy5mdW5jVGFiW2Z0eXBlXTtcblx0XHRpZiAob3RoZXJzID09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS5sb2coXCJubyBmdW5jVGFiIGVudHJ5IGZvcjogXCIgKyBmdHlwZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxldCBjaGFuZ2VYID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogb3RoZXJzLmxlbmd0aCk7XG5cdFx0bGV0IGJlY29tZSA9IG90aGVyc1tjaGFuZ2VYXS5uYW1lO1xuXG5cdFx0Ly8gY2hlY2sgYmxhY2tsaXN0ZWQgY29tYmluYXRpb25zLlxuXHRcdGlmIChvbGROYW1lID09PSBcIm1vZHVsYXRlXCIgJiYgYmVjb21lID09PSBcIm1vZHVsYXRlU2Nyb2xsWFwiKVxuXHRcdHtcblx0XHRcdGNvbnNvbGUubG9nKFwiRnVuY3Rpb246IFwiICsgZnVueCArIFwiIGNoYW5naW5nIGZyb206IFwiICsgb2xkTmFtZSArIFwiIGNhbid0IGNoYW5nZSB0bzogXCIgKyBiZWNvbWUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN0YXRlLmZ1bmN0aW9uVGFiW2Z1bnhdLmNhbGxlZS5wcm9wZXJ0eS5uYW1lID0gYmVjb21lO1xuICAgIGNvbnNvbGUubG9nKFwiRnVuY3Rpb246IFwiICsgZnVueCArIFwiIGNoYW5nZWQgZnJvbTogXCIgKyBvbGROYW1lICsgXCIgdG86IFwiICsgYmVjb21lKTtcblx0fVxuXG59IC8vICBFbmQgb2YgY2xhc3MgTXV0YXRvci5cblxubW9kdWxlLmV4cG9ydHMgPSBNdXRhdG9yXG4iLCIvLyBBIGdlbmVyYWxpemVkICdVbmRvIHN0YWNrJyB3aGljaCBjYW4ga2VlcCBOIGxldmVscyBvZiByZXZlcnRhYmxlIHN0YXRlLlxuY2xhc3MgVW5kb1N0YWNrIHtcbiAgICBjb25zdHJ1Y3RvcihsaW1pdCkge1xuICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgIHRoaXMuaW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5saW1pdCA9IGxpbWl0O1xuICAgIH1cbiAgICBcbiAgICBhdFRvcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IC0xO1xuICAgIH1cblxuICAgIGNhblVuZG8oKSB7XG4gICAgICAgIGlmKHRoaXMuc3RhY2subGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID09PSAtMSB8fCB0aGlzLmluZGV4ID4gMDtcbiAgICB9XG5cbiAgICBjYW5SZWRvKCkge1xuICAgICAgICBpZih0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmluZGV4ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA8IHRoaXMuc3RhY2subGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICBwdXNoKGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMuaW5kZXggPCB0aGlzLnN0YWNrLmxlbmd0aCkgdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saW1pdCAmJiB0aGlzLnN0YWNrLmxlbmd0aCA+IHRoaXMubGltaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhY2suc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YWNrLnB1c2goaXRlbSk7XG4gICAgfVxuXG4gICAgdW5kbygpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5pbmRleCA9PT0gLTEpIHsgLy8gc3RhcnQgb25lIGJlaGluZCB0aGUgcmVkbyBidWZmZXJcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPiAwKSB0aGlzLmluZGV4LS07XG4gICAgICAgIGxldCB2ID0gdGhpcy5zdGFja1t0aGlzLmluZGV4XTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuXG4gICAgcmVkbygpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID09PSAwIHx8IHRoaXMuaW5kZXggPT09IC0xKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgbmV4dFggPSB0aGlzLmluZGV4ICsgMTtcbiAgICAgICAgaWYgKG5leHRYID49IHRoaXMuc3RhY2subGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmluZGV4ID0gbmV4dFg7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXMuaW5kZXhdO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7VW5kb1N0YWNrfSIsIi8qXG5Gb3JtYXQgZm9yIGFkZGluZyBmdW5jdGlvbnMgdG8gaHlkcmEuIEZvciBlYWNoIGVudHJ5IGluIHRoaXMgZmlsZSwgaHlkcmEgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgYSBnbHNsIGZ1bmN0aW9uIGFuZCBqYXZhc2NyaXB0IGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbmFtZS4gWW91IGNhbiBhbHNvIGFzcyBmdW5jdGlvbnMgZHluYW1pY2FsbHkgdXNpbmcgc2V0RnVuY3Rpb24ob2JqZWN0KS5cblxue1xuICBuYW1lOiAnb3NjJywgLy8gbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBhY2Nlc3MgZnVuY3Rpb24gaW4ganMgYXMgd2VsbCBhcyBpbiBnbHNsXG4gIHR5cGU6ICdzcmMnLCAvLyBjYW4gYmUgJ3NyYycsICdjb2xvcicsICdjb21iaW5lJywgJ2NvbWJpbmVDb29yZHMnLiBzZWUgYmVsb3cgZm9yIG1vcmUgaW5mb1xuICBpbnB1dHM6IFtcbiAgICB7XG4gICAgICBuYW1lOiAnZnJlcScsXG4gICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgZGVmYXVsdDogMC4yXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc3luYycsXG4gICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgZGVmYXVsdDogMC4xXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICBkZWZhdWx0OiAwLjBcbiAgICB9XG4gIF0sXG4gICAgZ2xzbDogYFxuICAgICAgdmVjMiBzdCA9IF9zdDtcbiAgICAgIGZsb2F0IHIgPSBzaW4oKHN0Lngtb2Zmc2V0KjIvZnJlcSt0aW1lKnN5bmMpKmZyZXEpKjAuNSAgKyAwLjU7XG4gICAgICBmbG9hdCBnID0gc2luKChzdC54K3RpbWUqc3luYykqZnJlcSkqMC41ICsgMC41O1xuICAgICAgZmxvYXQgYiA9IHNpbigoc3QueCtvZmZzZXQvZnJlcSt0aW1lKnN5bmMpKmZyZXEpKjAuNSAgKyAwLjU7XG4gICAgICByZXR1cm4gdmVjNChyLCBnLCBiLCAxLjApO1xuICAgYFxufVxuXG4vLyBUaGUgYWJvdmUgY29kZSBnZW5lcmF0ZXMgdGhlIGdsc2wgZnVuY3Rpb246XG5gdmVjNCBvc2ModmVjMiBfc3QsIGZsb2F0IGZyZXEsIGZsb2F0IHN5bmMsIGZsb2F0IG9mZnNldCl7XG4gdmVjMiBzdCA9IF9zdDtcbiBmbG9hdCByID0gc2luKChzdC54LW9mZnNldCoyL2ZyZXErdGltZSpzeW5jKSpmcmVxKSowLjUgICsgMC41O1xuIGZsb2F0IGcgPSBzaW4oKHN0LngrdGltZSpzeW5jKSpmcmVxKSowLjUgKyAwLjU7XG4gZmxvYXQgYiA9IHNpbigoc3QueCtvZmZzZXQvZnJlcSt0aW1lKnN5bmMpKmZyZXEpKjAuNSAgKyAwLjU7XG4gcmV0dXJuIHZlYzQociwgZywgYiwgMS4wKTtcbn1gXG5cblxuVHlwZXMgYW5kIGRlZmF1bHQgYXJndW1lbnRzIGZvciBoeWRyYSBmdW5jdGlvbnMuXG5UaGUgdmFsdWUgaW4gdGhlICd0eXBlJyBmaWVsZCBsZXRzIHRoZSBwYXJzZXIga25vdyB3aGljaCB0eXBlIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHJldHVybmVkIGFzIHdlbGwgYXMgZGVmYXVsdCBhcmd1bWVudHMuXG5cbmNvbnN0IHR5cGVzID0ge1xuICAnc3JjJzoge1xuICAgIHJldHVyblR5cGU6ICd2ZWM0JyxcbiAgICBhcmdzOiBbJ3ZlYzIgX3N0J11cbiAgfSxcbiAgJ2Nvb3JkJzoge1xuICAgIHJldHVyblR5cGU6ICd2ZWMyJyxcbiAgICBhcmdzOiBbJ3ZlYzIgX3N0J11cbiAgfSxcbiAgJ2NvbG9yJzoge1xuICAgIHJldHVyblR5cGU6ICd2ZWM0JyxcbiAgICBhcmdzOiBbJ3ZlYzQgX2MwJ11cbiAgfSxcbiAgJ2NvbWJpbmUnOiB7XG4gICAgcmV0dXJuVHlwZTogJ3ZlYzQnLFxuICAgIGFyZ3M6IFsndmVjNCBfYzAnLCAndmVjNCBfYzEnXVxuICB9LFxuICAnY29tYmluZUNvb3JkJzoge1xuICAgIHJldHVyblR5cGU6ICd2ZWMyJyxcbiAgICBhcmdzOiBbJ3ZlYzIgX3N0JywgJ3ZlYzQgX2MwJ11cbiAgfVxufVxuXG4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgICB7XG4gICAgbmFtZTogJ25vaXNlJyxcbiAgICB0eXBlOiAnc3JjJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NjYWxlJyxcbiAgICAgICAgZGVmYXVsdDogMTAsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBkZWZhdWx0OiAwLjEsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgcmV0dXJuIHZlYzQodmVjMyhfbm9pc2UodmVjMyhfc3Qqc2NhbGUsIG9mZnNldCp0aW1lKSkpLCAxLjApO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICd2b3Jvbm9pJyxcbiAgICB0eXBlOiAnc3JjJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NjYWxlJyxcbiAgICAgICAgZGVmYXVsdDogNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NwZWVkJyxcbiAgICAgICAgZGVmYXVsdDogMC4zLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYmxlbmRpbmcnLFxuICAgICAgICBkZWZhdWx0OiAwLjMsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMyBjb2xvciA9IHZlYzMoLjApO1xuICAgICAvLyBTY2FsZVxuICAgICBfc3QgKj0gc2NhbGU7XG4gICAgIC8vIFRpbGUgdGhlIHNwYWNlXG4gICAgIHZlYzIgaV9zdCA9IGZsb29yKF9zdCk7XG4gICAgIHZlYzIgZl9zdCA9IGZyYWN0KF9zdCk7XG4gICAgIGZsb2F0IG1fZGlzdCA9IDEwLjsgIC8vIG1pbmltdW4gZGlzdGFuY2VcbiAgICAgdmVjMiBtX3BvaW50OyAgICAgICAgLy8gbWluaW11bSBwb2ludFxuICAgICBmb3IgKGludCBqPS0xOyBqPD0xOyBqKysgKSB7XG4gICAgIGZvciAoaW50IGk9LTE7IGk8PTE7IGkrKyApIHtcbiAgICAgdmVjMiBuZWlnaGJvciA9IHZlYzIoZmxvYXQoaSksZmxvYXQoaikpO1xuICAgICB2ZWMyIHAgPSBpX3N0ICsgbmVpZ2hib3I7XG4gICAgIHZlYzIgcG9pbnQgPSBmcmFjdChzaW4odmVjMihkb3QocCx2ZWMyKDEyNy4xLDMxMS43KSksZG90KHAsdmVjMigyNjkuNSwxODMuMykpKSkqNDM3NTguNTQ1Myk7XG4gICAgIHBvaW50ID0gMC41ICsgMC41KnNpbih0aW1lKnNwZWVkICsgNi4yODMxKnBvaW50KTtcbiAgICAgdmVjMiBkaWZmID0gbmVpZ2hib3IgKyBwb2ludCAtIGZfc3Q7XG4gICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoZGlmZik7XG4gICAgIGlmKCBkaXN0IDwgbV9kaXN0ICkge1xuICAgICBtX2Rpc3QgPSBkaXN0O1xuICAgICBtX3BvaW50ID0gcG9pbnQ7XG4gICAgIH1cbiAgICAgfVxuICAgICB9XG4gICAgIC8vIEFzc2lnbiBhIGNvbG9yIHVzaW5nIHRoZSBjbG9zZXN0IHBvaW50IHBvc2l0aW9uXG4gICAgIGNvbG9yICs9IGRvdChtX3BvaW50LHZlYzIoLjMsLjYpKTtcbiAgICAgY29sb3IgKj0gMS4wIC0gYmxlbmRpbmcqbV9kaXN0O1xuICAgICByZXR1cm4gdmVjNChjb2xvciwgMS4wKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnb3NjJyxcbiAgICB0eXBlOiAnc3JjJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2ZyZXF1ZW5jeScsXG4gICAgICAgIGRlZmF1bHQ6IDYwLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc3luYycsXG4gICAgICAgIGRlZmF1bHQ6IDAuMSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiBzdCA9IF9zdDtcbiAgICAgZmxvYXQgciA9IHNpbigoc3QueC1vZmZzZXQvZnJlcXVlbmN5K3RpbWUqc3luYykqZnJlcXVlbmN5KSowLjUgICsgMC41O1xuICAgICBmbG9hdCBnID0gc2luKChzdC54K3RpbWUqc3luYykqZnJlcXVlbmN5KSowLjUgKyAwLjU7XG4gICAgIGZsb2F0IGIgPSBzaW4oKHN0Lngrb2Zmc2V0L2ZyZXF1ZW5jeSt0aW1lKnN5bmMpKmZyZXF1ZW5jeSkqMC41ICArIDAuNTtcbiAgICAgcmV0dXJuIHZlYzQociwgZywgYiwgMS4wKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2hhcGUnLFxuICAgIHR5cGU6ICdzcmMnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc2lkZXMnLFxuICAgICAgICBkZWZhdWx0OiAzLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAncmFkaXVzJyxcbiAgICAgICAgZGVmYXVsdDogMC4zLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc21vb3RoaW5nJyxcbiAgICAgICAgZGVmYXVsdDogMC4wMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICB2ZWMyIHN0ID0gX3N0ICogMi4gLSAxLjtcbiAgICAgLy8gQW5nbGUgYW5kIHJhZGl1cyBmcm9tIHRoZSBjdXJyZW50IHBpeGVsXG4gICAgIGZsb2F0IGEgPSBhdGFuKHN0Lngsc3QueSkrMy4xNDE2O1xuICAgICBmbG9hdCByID0gKDIuKjMuMTQxNikvc2lkZXM7XG4gICAgIGZsb2F0IGQgPSBjb3MoZmxvb3IoLjUrYS9yKSpyLWEpKmxlbmd0aChzdCk7XG4gICAgIHJldHVybiB2ZWM0KHZlYzMoMS4wLXNtb290aHN0ZXAocmFkaXVzLHJhZGl1cyArIHNtb290aGluZyArIDAuMDAwMDAwMSxkKSksIDEuMCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2dyYWRpZW50JyxcbiAgICB0eXBlOiAnc3JjJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NwZWVkJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gdmVjNChfc3QsIHNpbih0aW1lKnNwZWVkKSwgMS4wKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc3JjJyxcbiAgICB0eXBlOiAnc3JjJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3NhbXBsZXIyRCcsXG4gICAgICAgIG5hbWU6ICd0ZXgnLFxuICAgICAgICBkZWZhdWx0OiBOYU4sXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgLy8gIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkvdmVjMigxMjgwLiwgNzIwLik7XG4gICAgIHJldHVybiB0ZXh0dXJlMkQodGV4LCBmcmFjdChfc3QpKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc29saWQnLFxuICAgIHR5cGU6ICdzcmMnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAncicsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdnJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2InLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgcmV0dXJuIHZlYzQociwgZywgYiwgYSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3JvdGF0ZScsXG4gICAgdHlwZTogJ2Nvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2FuZ2xlJyxcbiAgICAgICAgZGVmYXVsdDogMTAsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzcGVlZCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiB4eSA9IF9zdCAtIHZlYzIoMC41KTtcbiAgICAgZmxvYXQgYW5nID0gYW5nbGUgKyBzcGVlZCAqdGltZTtcbiAgICAgeHkgPSBtYXQyKGNvcyhhbmcpLC1zaW4oYW5nKSwgc2luKGFuZyksY29zKGFuZykpKnh5O1xuICAgICB4eSArPSAwLjU7XG4gICAgIHJldHVybiB4eTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2NhbGUnLFxuICAgIHR5cGU6ICdjb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdhbW91bnQnLFxuICAgICAgICBkZWZhdWx0OiAxLjUsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICd4TXVsdCcsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICd5TXVsdCcsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXRYJyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0WScsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICB2ZWMyIHh5ID0gX3N0IC0gdmVjMihvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgeHkqPSgxLjAvdmVjMihhbW91bnQqeE11bHQsIGFtb3VudCp5TXVsdCkpO1xuICAgICB4eSs9dmVjMihvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgcmV0dXJuIHh5O1xuICAgICBgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAncGl4ZWxhdGUnLFxuICAgIHR5cGU6ICdjb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdwaXhlbFgnLFxuICAgICAgICBkZWZhdWx0OiAyMCxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3BpeGVsWScsXG4gICAgICAgIGRlZmF1bHQ6IDIwLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzIgeHkgPSB2ZWMyKHBpeGVsWCwgcGl4ZWxZKTtcbiAgICAgcmV0dXJuIChmbG9vcihfc3QgKiB4eSkgKyAwLjUpL3h5O2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdwb3N0ZXJpemUnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdiaW5zJyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2dhbW1hJyxcbiAgICAgICAgZGVmYXVsdDogMC42LFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzQgYzIgPSBwb3coX2MwLCB2ZWM0KGdhbW1hKSk7XG4gICAgIGMyICo9IHZlYzQoYmlucyk7XG4gICAgIGMyID0gZmxvb3IoYzIpO1xuICAgICBjMi89IHZlYzQoYmlucyk7XG4gICAgIGMyID0gcG93KGMyLCB2ZWM0KDEuMC9nYW1tYSkpO1xuICAgICByZXR1cm4gdmVjNChjMi54eXosIF9jMC5hKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdyJyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnZycsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdiJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2EnLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzQgYzIgPSB2ZWM0KF9jMCk7XG4gICAgIGMyLnIgPSBmcmFjdChjMi5yICsgcik7XG4gICAgIGMyLmcgPSBmcmFjdChjMi5nICsgZyk7XG4gICAgIGMyLmIgPSBmcmFjdChjMi5iICsgYik7XG4gICAgIGMyLmEgPSBmcmFjdChjMi5hICsgYSk7XG4gICAgIHJldHVybiB2ZWM0KGMyLnJnYmEpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdyZXBlYXQnLFxuICAgIHR5cGU6ICdjb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdyZXBlYXRYJyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3JlcGVhdFknLFxuICAgICAgICBkZWZhdWx0OiAzLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0WCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXRZJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICB2ZWMyIHN0ID0gX3N0ICogdmVjMihyZXBlYXRYLCByZXBlYXRZKTtcbiAgICAgc3QueCArPSBzdGVwKDEuLCBtb2Qoc3QueSwyLjApKSAqIG9mZnNldFg7XG4gICAgIHN0LnkgKz0gc3RlcCgxLiwgbW9kKHN0LngsMi4wKSkgKiBvZmZzZXRZO1xuICAgICByZXR1cm4gZnJhY3Qoc3QpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdtb2R1bGF0ZVJlcGVhdCcsXG4gICAgdHlwZTogJ2NvbWJpbmVDb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdyZXBlYXRYJyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3JlcGVhdFknLFxuICAgICAgICBkZWZhdWx0OiAzLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0WCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldFknLFxuICAgICAgICBkZWZhdWx0OiAwLjUsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiBzdCA9IF9zdCAqIHZlYzIocmVwZWF0WCwgcmVwZWF0WSk7XG4gICAgIHN0LnggKz0gc3RlcCgxLiwgbW9kKHN0LnksMi4wKSkgKyBfYzAuciAqIG9mZnNldFg7XG4gICAgIHN0LnkgKz0gc3RlcCgxLiwgbW9kKHN0LngsMi4wKSkgKyBfYzAuZyAqIG9mZnNldFk7XG4gICAgIHJldHVybiBmcmFjdChzdCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3JlcGVhdFgnLFxuICAgIHR5cGU6ICdjb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdyZXBzJyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiBzdCA9IF9zdCAqIHZlYzIocmVwcywgMS4wKTtcbiAgICAgLy8gIGZsb2F0IGYgPSAgbW9kKF9zdC55LDIuMCk7XG4gICAgIHN0LnkgKz0gc3RlcCgxLiwgbW9kKHN0LngsMi4wKSkqIG9mZnNldDtcbiAgICAgcmV0dXJuIGZyYWN0KHN0KTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbW9kdWxhdGVSZXBlYXRYJyxcbiAgICB0eXBlOiAnY29tYmluZUNvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3JlcHMnLFxuICAgICAgICBkZWZhdWx0OiAzLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzIgc3QgPSBfc3QgKiB2ZWMyKHJlcHMsIDEuMCk7XG4gICAgIC8vICBmbG9hdCBmID0gIG1vZChfc3QueSwyLjApO1xuICAgICBzdC55ICs9IHN0ZXAoMS4sIG1vZChzdC54LDIuMCkpICsgX2MwLnIgKiBvZmZzZXQ7XG4gICAgIHJldHVybiBmcmFjdChzdCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3JlcGVhdFknLFxuICAgIHR5cGU6ICdjb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdyZXBzJyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiBzdCA9IF9zdCAqIHZlYzIoMS4wLCByZXBzKTtcbiAgICAgLy8gIGZsb2F0IGYgPSAgbW9kKF9zdC55LDIuMCk7XG4gICAgIHN0LnggKz0gc3RlcCgxLiwgbW9kKHN0LnksMi4wKSkqIG9mZnNldDtcbiAgICAgcmV0dXJuIGZyYWN0KHN0KTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbW9kdWxhdGVSZXBlYXRZJyxcbiAgICB0eXBlOiAnY29tYmluZUNvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3JlcHMnLFxuICAgICAgICBkZWZhdWx0OiAzLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzIgc3QgPSBfc3QgKiB2ZWMyKHJlcHMsIDEuMCk7XG4gICAgIC8vICBmbG9hdCBmID0gIG1vZChfc3QueSwyLjApO1xuICAgICBzdC54ICs9IHN0ZXAoMS4sIG1vZChzdC55LDIuMCkpICsgX2MwLnIgKiBvZmZzZXQ7XG4gICAgIHJldHVybiBmcmFjdChzdCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2thbGVpZCcsXG4gICAgdHlwZTogJ2Nvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ25TaWRlcycsXG4gICAgICAgIGRlZmF1bHQ6IDQsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiBzdCA9IF9zdDtcbiAgICAgc3QgLT0gMC41O1xuICAgICBmbG9hdCByID0gbGVuZ3RoKHN0KTtcbiAgICAgZmxvYXQgYSA9IGF0YW4oc3QueSwgc3QueCk7XG4gICAgIGZsb2F0IHBpID0gMi4qMy4xNDE2O1xuICAgICBhID0gbW9kKGEscGkvblNpZGVzKTtcbiAgICAgYSA9IGFicyhhLXBpL25TaWRlcy8yLik7XG4gICAgIHJldHVybiByKnZlYzIoY29zKGEpLCBzaW4oYSkpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdtb2R1bGF0ZUthbGVpZCcsXG4gICAgdHlwZTogJ2NvbWJpbmVDb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICduU2lkZXMnLFxuICAgICAgICBkZWZhdWx0OiA0LFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzIgc3QgPSBfc3QgLSAwLjU7XG4gICAgIGZsb2F0IHIgPSBsZW5ndGgoc3QpO1xuICAgICBmbG9hdCBhID0gYXRhbihzdC55LCBzdC54KTtcbiAgICAgZmxvYXQgcGkgPSAyLiozLjE0MTY7XG4gICAgIGEgPSBtb2QoYSxwaS9uU2lkZXMpO1xuICAgICBhID0gYWJzKGEtcGkvblNpZGVzLzIuKTtcbiAgICAgcmV0dXJuIChfYzAucityKSp2ZWMyKGNvcyhhKSwgc2luKGEpKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2Nyb2xsJyxcbiAgICB0eXBlOiAnY29vcmQnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc2Nyb2xsWCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3Njcm9sbFknLFxuICAgICAgICBkZWZhdWx0OiAwLjUsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzcGVlZFgnLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc3BlZWRZJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGBcbiAgICAgX3N0LnggKz0gc2Nyb2xsWCArIHRpbWUqc3BlZWRYO1xuICAgICBfc3QueSArPSBzY3JvbGxZICsgdGltZSpzcGVlZFk7XG4gICAgIHJldHVybiBmcmFjdChfc3QpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdzY3JvbGxYJyxcbiAgICB0eXBlOiAnY29vcmQnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc2Nyb2xsWCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NwZWVkJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICBfc3QueCArPSBzY3JvbGxYICsgdGltZSpzcGVlZDtcbiAgICAgcmV0dXJuIGZyYWN0KF9zdCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ21vZHVsYXRlU2Nyb2xsWCcsXG4gICAgdHlwZTogJ2NvbWJpbmVDb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzY3JvbGxYJyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc3BlZWQnLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIF9zdC54ICs9IF9jMC5yKnNjcm9sbFggKyB0aW1lKnNwZWVkO1xuICAgICByZXR1cm4gZnJhY3QoX3N0KTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2Nyb2xsWScsXG4gICAgdHlwZTogJ2Nvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3Njcm9sbFknLFxuICAgICAgICBkZWZhdWx0OiAwLjUsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzcGVlZCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgX3N0LnkgKz0gc2Nyb2xsWSArIHRpbWUqc3BlZWQ7XG4gICAgIHJldHVybiBmcmFjdChfc3QpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdtb2R1bGF0ZVNjcm9sbFknLFxuICAgIHR5cGU6ICdjb21iaW5lQ29vcmQnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc2Nyb2xsWScsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NwZWVkJyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICBfc3QueSArPSBfYzAucipzY3JvbGxZICsgdGltZSpzcGVlZDtcbiAgICAgcmV0dXJuIGZyYWN0KF9zdCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2FkZCcsXG4gICAgdHlwZTogJ2NvbWJpbmUnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gKF9jMCtfYzEpKmFtb3VudCArIF9jMCooMS4wLWFtb3VudCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3N1YicsXG4gICAgdHlwZTogJ2NvbWJpbmUnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gKF9jMC1fYzEpKmFtb3VudCArIF9jMCooMS4wLWFtb3VudCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2xheWVyJyxcbiAgICB0eXBlOiAnY29tYmluZScsXG4gICAgaW5wdXRzOiBbXG4gIFxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHJldHVybiB2ZWM0KG1peChfYzAucmdiLCBfYzEucmdiLCBfYzEuYSksIGNsYW1wKF9jMC5hICsgX2MxLmEsIDAuMCwgMS4wKSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2JsZW5kJyxcbiAgICB0eXBlOiAnY29tYmluZScsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdhbW91bnQnLFxuICAgICAgICBkZWZhdWx0OiAwLjUsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgcmV0dXJuIF9jMCooMS4wLWFtb3VudCkrX2MxKmFtb3VudDtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbXVsdCcsXG4gICAgdHlwZTogJ2NvbWJpbmUnLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gX2MwKigxLjAtYW1vdW50KSsoX2MwKl9jMSkqYW1vdW50O2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdkaWZmJyxcbiAgICB0eXBlOiAnY29tYmluZScsXG4gICAgaW5wdXRzOiBbXG4gIFxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHJldHVybiB2ZWM0KGFicyhfYzAucmdiLV9jMS5yZ2IpLCBtYXgoX2MwLmEsIF9jMS5hKSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ21vZHVsYXRlJyxcbiAgICB0eXBlOiAnY29tYmluZUNvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2Ftb3VudCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICAvLyAgcmV0dXJuIGZyYWN0KHN0KyhfYzAueHktMC41KSphbW91bnQpO1xuICAgICByZXR1cm4gX3N0ICsgX2MwLnh5KmFtb3VudDtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbW9kdWxhdGVTY2FsZScsXG4gICAgdHlwZTogJ2NvbWJpbmVDb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdtdWx0aXBsZScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHZlYzIgeHkgPSBfc3QgLSB2ZWMyKDAuNSk7XG4gICAgIHh5Kj0oMS4wL3ZlYzIob2Zmc2V0ICsgbXVsdGlwbGUqX2MwLnIsIG9mZnNldCArIG11bHRpcGxlKl9jMC5nKSk7XG4gICAgIHh5Kz12ZWMyKDAuNSk7XG4gICAgIHJldHVybiB4eTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnbW9kdWxhdGVQaXhlbGF0ZScsXG4gICAgdHlwZTogJ2NvbWJpbmVDb29yZCcsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdtdWx0aXBsZScsXG4gICAgICAgIGRlZmF1bHQ6IDEwLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICB2ZWMyIHh5ID0gdmVjMihvZmZzZXQgKyBfYzAueCptdWx0aXBsZSwgb2Zmc2V0ICsgX2MwLnkqbXVsdGlwbGUpO1xuICAgICByZXR1cm4gKGZsb29yKF9zdCAqIHh5KSArIDAuNSkveHk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ21vZHVsYXRlUm90YXRlJyxcbiAgICB0eXBlOiAnY29tYmluZUNvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ211bHRpcGxlJyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMiB4eSA9IF9zdCAtIHZlYzIoMC41KTtcbiAgICAgZmxvYXQgYW5nbGUgPSBvZmZzZXQgKyBfYzAueCAqIG11bHRpcGxlO1xuICAgICB4eSA9IG1hdDIoY29zKGFuZ2xlKSwtc2luKGFuZ2xlKSwgc2luKGFuZ2xlKSxjb3MoYW5nbGUpKSp4eTtcbiAgICAgeHkgKz0gMC41O1xuICAgICByZXR1cm4geHk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ21vZHVsYXRlSHVlJyxcbiAgICB0eXBlOiAnY29tYmluZUNvb3JkJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2Ftb3VudCcsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgcmV0dXJuIF9zdCArICh2ZWMyKF9jMC5nIC0gX2MwLnIsIF9jMC5iIC0gX2MwLmcpICogYW1vdW50ICogMS4wL3Jlc29sdXRpb24pO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdpbnZlcnQnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdhbW91bnQnLFxuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHJldHVybiB2ZWM0KCgxLjAtX2MwLnJnYikqYW1vdW50ICsgX2MwLnJnYiooMS4wLWFtb3VudCksIF9jMC5hKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnY29udHJhc3QnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdhbW91bnQnLFxuICAgICAgICBkZWZhdWx0OiAxLjYsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjNCBjID0gKF9jMC12ZWM0KDAuNSkpKnZlYzQoYW1vdW50KSArIHZlYzQoMC41KTtcbiAgICAgcmV0dXJuIHZlYzQoYy5yZ2IsIF9jMC5hKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnYnJpZ2h0bmVzcycsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2Ftb3VudCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuNCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gdmVjNChfYzAucmdiICsgdmVjMyhhbW91bnQpLCBfYzAuYSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ21hc2snLFxuICAgIHR5cGU6ICdjb21iaW5lJyxcbiAgICBpbnB1dHM6IFtcbiAgXG4gICAgXSxcbiAgICBnbHNsOlxuICAgIGAgICBmbG9hdCBhID0gX2x1bWluYW5jZShfYzEucmdiKTtcbiAgICByZXR1cm4gdmVjNChfYzAucmdiKmEsIGEqX2MwLmEpO2BcbiAgfSxcbiAgXG4gIHtcbiAgICBuYW1lOiAnbHVtYScsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3RocmVzaG9sZCcsXG4gICAgICAgIGRlZmF1bHQ6IDAuNSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3RvbGVyYW5jZScsXG4gICAgICAgIGRlZmF1bHQ6IDAuMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICBmbG9hdCBhID0gc21vb3Roc3RlcCh0aHJlc2hvbGQtKHRvbGVyYW5jZSswLjAwMDAwMDEpLCB0aHJlc2hvbGQrKHRvbGVyYW5jZSswLjAwMDAwMDEpLCBfbHVtaW5hbmNlKF9jMC5yZ2IpKTtcbiAgICAgcmV0dXJuIHZlYzQoX2MwLnJnYiphLCBhKTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAndGhyZXNoJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAndGhyZXNob2xkJyxcbiAgICAgICAgZGVmYXVsdDogMC41LFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAndG9sZXJhbmNlJyxcbiAgICAgICAgZGVmYXVsdDogMC4wNCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gdmVjNCh2ZWMzKHNtb290aHN0ZXAodGhyZXNob2xkLSh0b2xlcmFuY2UrMC4wMDAwMDAxKSwgdGhyZXNob2xkKyh0b2xlcmFuY2UrMC4wMDAwMDAxKSwgX2x1bWluYW5jZShfYzAucmdiKSkpLCBfYzAuYSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2NvbG9yJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAncicsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdnJyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ2InLFxuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjNCBjID0gdmVjNChyLCBnLCBiLCBhKTtcbiAgICAgdmVjNCBwb3MgPSBzdGVwKDAuMCwgYyk7IC8vIGRldGVjdCB3aGV0aGVyIG5lZ2F0aXZlXG4gICAgIC8vIGlmID4gMCwgcmV0dXJuIHIgKiBfYzBcbiAgICAgLy8gaWYgPCAwIHJldHVybiAoMS4wLXIpICogX2MwXG4gICAgIHJldHVybiB2ZWM0KG1peCgoMS4wLV9jMCkqYWJzKGMpLCBjKl9jMCwgcG9zKSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3NhdHVyYXRlJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgZGVmYXVsdDogMixcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICBjb25zdCB2ZWMzIFcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xuICAgICB2ZWMzIGludGVuc2l0eSA9IHZlYzMoZG90KF9jMC5yZ2IsIFcpKTtcbiAgICAgcmV0dXJuIHZlYzQobWl4KGludGVuc2l0eSwgX2MwLnJnYiwgYW1vdW50KSwgX2MwLmEpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdodWUnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdodWUnLFxuICAgICAgICBkZWZhdWx0OiAwLjQsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMyBjID0gX3JnYlRvSHN2KF9jMC5yZ2IpO1xuICAgICBjLnIgKz0gaHVlO1xuICAgICAvLyAgYy5yID0gZnJhY3QoYy5yKTtcbiAgICAgcmV0dXJuIHZlYzQoX2hzdlRvUmdiKGMpLCBfYzAuYSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2NvbG9yYW1hJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgZGVmYXVsdDogMC4wMDUsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgdmVjMyBjID0gX3JnYlRvSHN2KF9jMC5yZ2IpO1xuICAgICBjICs9IHZlYzMoYW1vdW50KTtcbiAgICAgYyA9IF9oc3ZUb1JnYihjKTtcbiAgICAgYyA9IGZyYWN0KGMpO1xuICAgICByZXR1cm4gdmVjNChjLCBfYzAuYSk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3ByZXYnLFxuICAgIHR5cGU6ICdzcmMnLFxuICAgIGlucHV0czogW1xuICBcbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gdGV4dHVyZTJEKHByZXZCdWZmZXIsIGZyYWN0KF9zdCkpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdzdW0nLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICd2ZWM0JyxcbiAgICAgICAgbmFtZTogJ3NjYWxlJyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICB2ZWM0IHYgPSBfYzAgKiBzO1xuICAgICByZXR1cm4gdi5yICsgdi5nICsgdi5iICsgdi5hO1xuICAgICB9XG4gICAgIGZsb2F0IHN1bSh2ZWMyIF9zdCwgdmVjNCBzKSB7IC8vIHZlYzQgaXMgbm90IGEgdHlwbywgYmVjYXVzZSBhcmd1bWVudCB0eXBlIGlzIG5vdCBvdmVybG9hZGVkXG4gICAgIHZlYzIgdiA9IF9zdC54eSAqIHMueHk7XG4gICAgIHJldHVybiB2LnggKyB2Lnk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3InLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzY2FsZScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHJldHVybiB2ZWM0KF9jMC5yICogc2NhbGUgKyBvZmZzZXQpO2BcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdnJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICAgIGlucHV0czogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnc2NhbGUnLFxuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgfSxcbiAge1xuICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH1cbiAgICBdLFxuICAgIGdsc2w6XG4gIGAgICByZXR1cm4gdmVjNChfYzAuZyAqIHNjYWxlICsgb2Zmc2V0KTtgXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnYicsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ3NjYWxlJyxcbiAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgIH0sXG4gIHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0JyxcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB9XG4gICAgXSxcbiAgICBnbHNsOlxuICBgICAgcmV0dXJuIHZlYzQoX2MwLmIgKiBzY2FsZSArIG9mZnNldCk7YFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2EnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gICAgaW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdzY2FsZScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB9LFxuICB7XG4gICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfVxuICAgIF0sXG4gICAgZ2xzbDpcbiAgYCAgIHJldHVybiB2ZWM0KF9jMC5hICogc2NhbGUgKyBvZmZzZXQpO2BcbiAgfVxuICBdIiwiY29uc3QgbG9nID0gcmVxdWlyZSgnLi9sb2cuanMnKS5sb2dcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGV2YWw6IChhcmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgICAvLyB3cmFwIGV2ZXJ5dGhpbmcgaW4gYW4gYXN5bmMgZnVuY3Rpb25cbiAgdmFyIGpzU3RyaW5nID0gYChhc3luYygpID0+IHtcbiAgICAke2FyZ31cbn0pKCkuY2F0Y2goJHsoZXJyKSA9PiBsb2coZXJyLm1lc3NhZ2UsIFwibG9nLWVycm9yXCIpfSlgXG4gICAgdmFyIGlzRXJyb3IgPSBmYWxzZVxuICAgIHRyeSB7XG4gICAgICBldmFsKGpzU3RyaW5nKVxuICAgICAgLy8gbG9nKGpzU3RyaW5nKVxuICAgICAgbG9nKCcnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlzRXJyb3IgPSB0cnVlXG4gICAgICBjb25zb2xlLmxvZyhcImxvZ2dpbmdcIiwgZSlcbiAgICAgIC8vIHZhciBlcnIgPSBlLmNvbnN0cnVjdG9yKCdFcnJvciBpbiBFdmFsZWQgU2NyaXB0OiAnICsgZS5tZXNzYWdlKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGVyci5saW5lTnVtYmVyKVxuICAgICAgbG9nKGUubWVzc2FnZSwgXCJsb2ctZXJyb3JcIilcbiAgICAgIC8vY29uc29sZS5sb2coJ0VSUk9SJywgSlNPTi5zdHJpbmdpZnkoZSkpXG4gICAgfVxuICAvLyAgY29uc29sZS5sb2coJ2NhbGxiYWNrIGlzJywgY2FsbGJhY2spXG4gICAgaWYoY2FsbGJhY2spIGNhbGxiYWNrKGpzU3RyaW5nLCBpc0Vycm9yKVxuICB9XG59XG4iLCJjb25zdCBodG1sID0gcmVxdWlyZSgnY2hvby9odG1sJylcbmNvbnN0IHJhdyA9IHJlcXVpcmUoJ2Nob28vaHRtbC9yYXcnKVxuY29uc3QgdG9vbGJhciA9IHJlcXVpcmUoJy4vdG9vbGJhci5qcycpXG5cbmNvbnN0IGxpbmsgPSAodXJsKSA9PiBgaHJlZj0ke3VybH0gdGFyZ2V0PV9ibGFua2Bcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWFpblZpZXcoc3RhdGUsIGVtaXQpIHtcbiAgY29uc3QgeyB0LCBsYW5ndWFnZXMgfSA9IHN0YXRlLnRyYW5zbGF0aW9uXG4gIGNvbnN0IHRleHREaXJlY3Rpb24gPSBzdGF0ZS50cmFuc2xhdGlvbi5zZWxlY3RlZExhbmd1YWdlICA9PT0gJ2FyJyAmJiBzdGF0ZS5zaG93SW5mbyA9PT0gdHJ1ZSA/ICdydGwnOiAnbHRyJ1xuXG4gIGNvbnN0IGxhbmdBcnJheSA9IE9iamVjdC5lbnRyaWVzKGxhbmd1YWdlcylcbiAgcmV0dXJuIGh0bWxgXG48ZGl2IGlkPVwiaW5mby1jb250YWluZXJcIiBjbGFzcz1cIiR7c3RhdGUuc2hvd0luZm8gPyBcIlwiIDogXCJoaWRkZW5cIn1cIiBzdHlsZT1cImRpcmVjdGlvbjoke3RleHREaXJlY3Rpb259XCI+XG4gIDxkaXYgaWQ9XCJtb2RhbFwiPlxuICAgIDxkaXYgaWQ9XCJtb2RhbC1oZWFkZXJcIiBzdHlsZT1cIm9wYWNpdHk6JHtzdGF0ZS5zaG93VUkgPT09IHRydWU/IDE6IDB9XCI+XG4gICAgICAke3N0YXRlLnNob3dJbmZvICYmIGxhbmdBcnJheS5sZW5ndGggPiAxID8gaHRtbGA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwXCI+JHtsYW5nQXJyYXkubWFwKChba2V5LCB2YWxdKSA9PiBodG1sYFxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFuZ3VhZ2Utc2VsZWN0XCIgb25jbGljaz0keygpID0+IGVtaXQoJ3NldCBsYW5ndWFnZScsIGtleSl9PiR7dmFsfTwvZGl2PlxuICAgICAgYCl9PC9kaXY+YCA6IGh0bWxgPGRpdj48L2Rpdj5gIH1cbiAgICAgICR7dG9vbGJhcihzdGF0ZSwgZW1pdCl9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cIm1vZGFsLWJvZHlcIj5cbiAgICAgIDxkaXYgaWQ9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgIDxoMT4ke3QoJ2luZm8udGl0bGUnKX08L2gxPlxuICAgICAgICA8aDM+JHt0KCdpbmZvLnN1YnRpdGxlJyl9PC9oMz5cbiAgICAgICAgICA8YnI+IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vPGJyPlxuICAgICAgICAgIDxoND4ke3QoJ2luZm8uZGVzY3JpcHRpb24nKX08L2g0PlxuICAgICAgICA8aDQ+JHt0KCdpbmZvLmdldC1zdGFydGVkLXRpdGxlJyl9PG9sPlxuICAgICAgICAgICAgPGxpPiR7dCgnaW5mby5nZXQtc3RhcnRlZC1saXN0LjAnKX08L2xpPlxuICAgICAgICAgICAgPGxpPiR7dCgnaW5mby5nZXQtc3RhcnRlZC1saXN0LjEnKX08L2xpPlxuICAgICAgICAgICAgPGxpPiR7dCgnaW5mby5nZXQtc3RhcnRlZC1saXN0LjInKX08L2xpPlxuICAgICAgICAgIDwvb2w+XG4gICAgICAgIDwvaDQ+XG5cbiAgICAgICAgPHA+IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vPGJyPjxicj48YnI+XG4gICAgICAgICAgJHt0KCdpbmZvLmRlc2NyaXB0aW9uLWRldGFpbGVkJyl9XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHA+JHt0KCdpbmZvLnVzZXMnKX08dWw+XG4gICAgICAgICR7dCgnaW5mby51c2VzLWxpc3QnLCB7IHJldHVybk9iamVjdHM6IHRydWUgfSkubWFwKCh0ZXh0KSA9PiBodG1sYDxsaT4ke3RleHR9PC9saT5gKX1cbiAgICAgICAgPC91bD48L3A+XG4gICAgICAgXG4gICAgICAgICAgIDxwIGNsYXNzPVwiYWxpZ24tcmlnaHRcIj4ke3Jhdyh0KCdpbmZvLmF1dGhvcicsIHsgYXV0aG9yOiBgaHJlZj1odHRwczovL29qYWNrLnh5eiBjbGFzcz1vbGl2aWEgdGFyZ2V0PV9ibGFua2B9KSl9PC9wPlxuICAgICAgICAgICA8cD4ke3Jhdyh0KCdpbmZvLm1vcmUtaW5mbycsIHtcbiAgICAgICAgICAgICBkb2NzOiBsaW5rKFwiaHR0cHM6Ly9oeWRyYS5vamFjay54eXovZG9jc1wiKSxcbiAgICAgICAgICAgICBmdW5jdGlvbnM6IGxpbmsoXCJodHRwczovL2h5ZHJhLm9qYWNrLnh5ei9hcGlcIiksXG4gICAgICAgICAgICAgZ2FsbGVyeTogbGluayhcImh0dHBzOi8vdHdpdHRlci5jb20vaHlkcmFfcGF0dGVybnNcIiksXG4gICAgICAgICAgICAgcmVwbzogbGluayhcImh0dHBzOi8vZ2l0aHViLmNvbS9oeWRyYS1zeW50aC9oeWRyYVwiKSxcbiAgICAgICAgICAgICBwaXhlbGphbTogbGluayhcImh0dHA6Ly9waXhlbGphbS5nbGl0Y2gubWUvXCIpLFxuICAgICAgICAgICAgIGdhcmRlbjogbGluayhcImh0dHBzOi8vaHlkcmEub2phY2sueHl6L2dhcmRlblwiKSxcbiAgICAgICAgICAgICAnaHlkcmEtYm9vayc6IGxpbmsoXCJodHRwczovL2h5ZHJhLWJvb2suZ2xpdGNoLm1lL1wiKSxcbiAgICAgICAgICAgICBcInR1dG9yaWFsc1wiOiBsaW5rKFwiaHR0cHM6Ly9naXRodWIuY29tL29qYWNrL2h5ZHJhL2Jsb2IvbWFzdGVyL2V4YW1wbGVzL1JFQURNRS5tZFwiKVxuICAgICAgICAgICB9KSl9PC9wPlxuICAgICAgICAgIDxwPiR7cmF3KHQoJ2luZm8ubW9yZS1pbmZvLWZvcnVtcycsIHtcbiAgICAgICAgICAgIGRpc2NvcmQ6IGxpbmsoXCJodHRwczovL2Rpc2NvcmQuZ2cvWlFqZkhrTkhYQ1wiKSxcbiAgICAgICAgICAgIGZhY2Vib29rOiBsaW5rKFwiaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2dyb3Vwcy8xMDg0Mjg4MzUxNzcxMTE3L1wiKVxuICAgICAgICAgIH0pKX08L3A+XG5cbiAgICAgICAgPHA+JHtyYXcodCgnaW5mby5zdXBwb3J0Jywge1xuICAgICAgICAgIFwib3Blbi1jb2xsZWN0aXZlXCI6IGxpbmsoXCJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9oeWRyYS1zeW50aFwiKVxuICAgICAgICB9KSl9PC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5gXG59XG5cblxuLy8gPCEtLS08cD4ke3QoJ2luZm8uZmVhdHVyZXMnKX08dWw+XG4vLyAke3QoJ2luZm8uZmVhdHVyZXMtbGlzdCcsIHsgcmV0dXJuT2JqZWN0czogdHJ1ZSB9KS5tYXAoKHRleHQpID0+IGh0bWxgPGxpPiR7dGV4dH08L2xpPmApfVxuLy8gPC91bD48L3A+LS0tPlxuLy8gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYWluVmlldyhzdGF0ZSwgZW1pdCkge1xuLy8gICAgIHJldHVybiBodG1sYFxuLy8gICA8ZGl2IGlkPVwiaW5mby1jb250YWluZXJcIiBjbGFzcz1cIiR7c3RhdGUuc2hvd0luZm8gPyBcIlwiIDogXCJoaWRkZW5cIn1cIj5cbi8vICAgICA8ZGl2IGlkPVwibW9kYWxcIj5cbi8vICAgICAgIDxkaXYgaWQ9XCJtb2RhbC1oZWFkZXJcIiBzdHlsZT1cIm9wYWNpdHk6JHtzdGF0ZS5zaG93VUkgPT09IHRydWU/IDE6IDB9XCI+XG4vLyAgICAgICAgIDxkaXY+PCEtLTxpIGNsYXNzPVwiZmFzIGZhLWJhcnMgaWNvblwiPjwvaT4tLT48L2Rpdj5cbi8vICAgICAgICAgJHt0b29sYmFyKHN0YXRlLCBlbWl0KX1cbi8vICAgICAgIDwvZGl2PlxuLy8gICAgICAgPGRpdiBpZD1cIm1vZGFsLWJvZHlcIj5cbi8vICAgICAgICAgPGRpdiBpZD1cIm1vZGFsLWNvbnRlbnRcIj5cbi8vICAgICAgICAgICA8aDE+IGh5ZHJhPC9oMT5cbi8vICAgICAgICAgICA8aDM+IGxpdmUgY29kaW5nIG5ldHdvcmtlZCB2aXN1YWxzIDwvaDM+XG4vLyAgICAgICAgICAgICA8YnI+IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vPGJyPlxuLy8gICAgICAgICAgICAgPGg0PiBIeWRyYSBpcyBhIHBsYXRmb3JtIGZvciBsaXZlIGNvZGluZyB2aXN1YWxzLCBpbiB3aGljaCBlYWNoIGNvbm5lY3RlZCBicm93c2VyIHdpbmRvdyBjYW4gYmUgdXNlZCBhcyBhIG5vZGUgb2YgYSBtb2R1bGFyIGFuZCBkaXN0cmlidXRlZCB2aWRlbyBzeW50aGVzaXplci48L2g0PlxuLy8gICAgICAgICAgIDxoND4gVG8gZ2V0IHN0YXJ0ZWQ6IDxvbD5cbi8vICAgICAgICAgICAgICAgPGxpPkNsb3NlIHRoaXMgd2luZG93IDwvbGk+XG4vLyAgICAgICAgICAgICAgICAgPGxpPkNoYW5nZSBzb21lIG51bWJlcnMgPC9saT5cbi8vICAgICAgICAgICAgICAgICA8bGk+VHlwZSBDdHJsICsgU2hpZnQgKyBFbnRlciA8L2xpPlxuLy8gICAgICAgICAgICAgICA8L29sPlxuLy8gICAgICAgICAgIDwvaDQ+XG4gIFxuLy8gICAgICAgICAgIDxwPiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzxicj48YnI+PGJyPkJ1aWx0IHVzaW5nIFdlYlJUQyAocGVlci10by1wZWVyIHdlYiBzdHJlYW1pbmcpIGFuZCBXZWJHTCwgaHlkcmEgYWxsb3dzIGVhY2ggY29ubmVjdGVkIGJyb3dzZXIvZGV2aWNlL3BlcnNvbiB0byBvdXRwdXQgYSB2aWRlbyBzaWduYWwgb3Igc3RyZWFtLCBhbmQgcmVjZWl2ZSBhbmQgbW9kaWZ5IHN0cmVhbXMgZnJvbSBvdGhlciBicm93c2Vycy9kZXZpY2VzL3Blb3BsZS4gVGhlIEFQSSBpcyBpbnNwaXJlZCBieSBhbmFsb2cgbW9kdWxhciBzeW50aGVzaXMsIGluIHdoaWNoIG11bHRpcGxlIHZpc3VhbCBzb3VyY2VzIChvc2NpbGxhdG9ycywgY2FtZXJhcywgYXBwbGljYXRpb24gd2luZG93cywgb3RoZXIgY29ubmVjdGVkIHdpbmRvd3MpIGNhbiBiZSB0cmFuc2Zvcm1lZCwgbW9kdWxhdGVkLCBhbmQgY29tcG9zaXRlZCB2aWEgY29tYmluaW5nIHNlcXVlbmNlcyBvZiBmdW5jdGlvbnMuIDwvcD5cbi8vICAgICAgICAgICA8cD5GZWF0dXJlczogPHVsPlxuLy8gICAgICAgICAgIDxsaT5Xcml0dGVuIGluIGphdmFzY3JpcHQgYW5kIGNvbXBhdGlibGUgd2l0aCBvdGhlciBqYXZhc2NyaXB0IGxpYnJhcmllczwvbGk+XG4vLyAgICAgICAgICAgPGxpPkF2YWlsYWJsZSBhcyBhIHBsYXRmb3JtIGFzIHdlbGwgYXMgYSBzZXQgb2Ygc3RhbmRhbG9uZSBtb2R1bGVzIDwvbGk+XG4vLyAgICAgICAgICAgPGxpPkNyb3NzLXBsYXRmb3JtIGFuZCByZXF1aXJlcyBubyBpbnN0YWxsYXRpb24gKHJ1bnMgaW4gdGhlIGJyb3dzZXIpPC9saT5cbi8vICAgICAgICAgICA8bGk+QWxzbyBhdmFpbGFibGUgYXMgYSBwYWNrYWdlIGZvciBsaXZlIGNvZGluZyBmcm9tIHdpdGhpbiBhdG9tIHRleHQgZWRpdG9yPC9saT5cbi8vICAgICAgICAgICA8bGk+RXhwZXJpbWVudGFsIGFuZCBmb3JldmVyIGV2b2x2aW5nICEhIDwvbGk+XG4vLyAgICAgICAgICAgPC91bD5cbi8vICAgICAgICAgICAgIDxwIGNsYXNzPVwiYWxpZ24tcmlnaHRcIj4gQ3JlYXRlZCBieSA8YSBjbGFzcz1cIm9saXZpYVwiIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tL19vamFja19cIiB0YXJnZXQ9XCJfYmxhbmtcIj5vbGl2aWEuPC9hPiA8L3A+XG4vLyAgICAgICAgICAgICA8cD4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGluc3RydWN0aW9ucywgc2VlOlxuLy8gICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9vamFjay9oeWRyYSNHZXR0aW5nLVN0YXJ0ZWRcIiB0YXJnZXQ9XCJfYmxhbmtcIj50aGUgZG9jdW1lbnRhdGlvbiBvbiBnaXRodWI8L2E+LFxuLy8gICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vb2phY2sueHl6L2h5ZHJhLWZ1bmN0aW9ucy9cIiB0YXJnZXQ9XCJfYmxhbmtcIj5hIGxpc3Qgb2YgaHlkcmEgZnVuY3Rpb25zPC9hPixcbi8vICAgICAgICAgICAgIDwhLS0gPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9vamFjay9oeWRyYS9ibG9iL21hc3Rlci9kb2NzL2Z1bmNzLm1kXCIgdGFyZ2V0PVwiX2JsYW5rXCI+ZG9jdW1lbnRhdGlvbjwvYT4sIC0tPlxuLy8gICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vdHdpdHRlci5jb20vaHlkcmFfcGF0dGVybnNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5hIGdhbGxlcnkgb2YgdXNlci1nZW5lcmF0ZWQgc2tldGNoZXM8L2E+LFxuLy8gICAgICAgICAgICAgPGEgaHJlZj1cImh0dHA6Ly9waXhlbGphbS5nbGl0Y2gubWUvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+UElYRUxKQU0gY29sbGFib3JhdGl2ZSBlZGl0b3I8L2E+LFxuLy8gICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vaHlkcmEtYm9vay5uYW90b2hpZWRhLmNvbS8jL1wiIHRhcmdldD1cIl9ibGFua1wiPkh5ZHJhIEJvb2s8L2E+LCBhbmQgbW9yZSA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL29qYWNrL2h5ZHJhL2Jsb2IvbWFzdGVyL2V4YW1wbGVzL1JFQURNRS5tZFwiPnR1dG9yaWFscyBhbmQgZXhhbXBsZXMuPC9hPjwvcD5cbi8vICAgICAgICAgICAgIDxwPlRoZXJlIGlzIGFsc28gYW4gYWN0aXZlIDxhIGhyZWY9XCJodHRwczovL2Rpc2NvcmQuZ2cvWlFqZkhrTkhYQ1wiIHRhcmdldD1cIl9ibGFua1wiPkRpc2NvcmQgc2VydmVyPC9hPiBhbmQgPGEgaHJlZj1cImh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9ncm91cHMvMTA4NDI4ODM1MTc3MTExNy9cIiB0YXJnZXQ9XCJfYmxhbmtcIj5mYWNlYm9vayBncm91cDwvYT4gZm9yIGh5ZHJhIHVzZXJzK2NvbnRyaWJ1dG9ycy48L3A+XG4gIFxuLy8gICAgICAgICAgIDxwPiBJZiB5b3UgZW5qb3kgdXNpbmcgSHlkcmEsIHBsZWFzZSBjb25zaWRlciAgPGEgaHJlZj1cImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2h5ZHJhLXN5bnRoXCIgdGFyZ2V0PVwiX2JsYW5rXCI+c3VwcG9ydGluZyBjb250aW51ZWQgZGV2ZWxvcG1lbnQgJHsnPDMgPDMnfSA8L2E+PC9wPlxuLy8gICAgICAgICA8L2Rpdj5cbi8vICAgICAgIDwvZGl2PlxuLy8gICAgIDwvZGl2PlxuLy8gICA8L2Rpdj5cbi8vICBgXG4vLyB9IiwiY29uc3QgaHRtbCA9IHJlcXVpcmUoJ2Nob28vaHRtbCcpXG5jb25zdCBpbmZvID0gcmVxdWlyZSgnLi9pbmZvLmpzJylcbmNvbnN0IEh5ZHJhID0gcmVxdWlyZSgnLi9IeWRyYS5qcycpXG5jb25zdCBFZGl0b3IgPSByZXF1aXJlKCcuL0VkaXRvckNvbXBvbmVudC5qcycpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWFpblZpZXcoc3RhdGUsIGVtaXQpIHtcbiAgcmV0dXJuIGh0bWxgXG4gIDxib2R5PlxuICAgIDxkaXYgaWQ9XCJoeWRyYS11aVwiPlxuICAgICAgJHtzdGF0ZS5jYWNoZShIeWRyYSwgJ2h5ZHJhLWNhbnZhcycpLnJlbmRlcihzdGF0ZSwgZW1pdCl9XG4gICAgICA8IS0tLTxjYW52YXMgaWQ9XCJhdWRpby1jYW52YXNcIj5cbiAgICAgIDwvY2FudmFzPi0tLT5cbiAgICA8L2Rpdj5cbiAgJHtpbmZvKHN0YXRlLCBlbWl0KX1cbiAgJHtzdGF0ZS5jYWNoZShFZGl0b3IsICdlZGl0b3InKS5yZW5kZXIoc3RhdGUsIGVtaXQpfVxuICA8L2JvZHk+XG4gYFxufSIsImNvbnN0IGh0bWwgPSByZXF1aXJlKCdjaG9vL2h0bWwnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRvb2xiYXIoc3RhdGUsIGVtaXQpIHtcbiAgICBjb25zdCBoaWRkZW4gPSBzdGF0ZS5zaG93SW5mbyA/ICdoaWRkZW4nIDogJydcblxuICAgIGNvbnN0IHsgdCB9ID0gc3RhdGUudHJhbnNsYXRpb25cblxuICAgIGNvbnN0IGRpc3BhdGNoID0gKGV2ZW50TmFtZSkgPT4gKGUpID0+IGVtaXQoZXZlbnROYW1lLCBlKVxuXG4gICAgY29uc3QgaWNvbiA9IChpZCwgY2xhc3NOYW1lLCB0aXRsZSwgZXZlbnQpID0+IGh0bWxgXG4gICAgICAgIDxpIGlkPVwiJHtpZH0taWNvblwiIGNsYXNzPVwiZmFzIGljb24gJHtjbGFzc05hbWV9XCIgdGl0bGU9XCIke3RpdGxlfVwiIG9uY2xpY2s9JHtkaXNwYXRjaChldmVudCl9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5gXG5cbiAgICBjb25zdCB0b2dnbGVJbmZvID0gc3RhdGUuc2hvd0luZm8gPyBpY29uKFwiY2xvc2VcIiwgXCJmYS10aW1lc1wiLCB0KCd0b29sYmFyLmhpZGUtaW5mbycpLCAndG9nZ2xlIGluZm8nKSA6IGljb24oXCJjbG9zZVwiLCBcImZhLXF1ZXN0aW9uLWNpcmNsZVwiLCB0KCd0b29sYmFyLnNob3ctaW5mbycpLCAndG9nZ2xlIGluZm8nKSAgXG4gICAgcmV0dXJuIGh0bWxgPGRpdiBpZD1cInRvb2xiYXItY29udGFpbmVyXCI+XG4gICAgICAgICR7aWNvbihcInJ1blwiLCBgZmEtcGxheS1jaXJjbGUgJHtoaWRkZW59YCwgdCgndG9vbGJhci5ydW4nKSwgJ2VkaXRvcjpldmFsQWxsJyl9XG4gICAgICAgICR7aWNvbihcImNsZWFyXCIsIGBmYSBmYS10cmFzaCAke2hpZGRlbn1gLCB0KCd0b29sYmFyLmNsZWFyJyksICdlZGl0b3I6Y2xlYXJBbGwnKX1cbiAgICAgICAgJHtpY29uKFwic2h1ZmZsZVwiLCBgZmEtcmFuZG9tYCwgdCgndG9vbGJhci5zaHVmZmxlJyksICdnYWxsZXJ5OnNob3dFeGFtcGxlJyl9XG4gICAgICAgICR7aWNvbihcIm11dGF0b3JcIiwgYGZhLWRpY2UgJHtoaWRkZW59YCwgdCgndG9vbGJhci5yYW5kb20nKSwgJ2VkaXRvcjpyYW5kb21pemUnKX1cbiAgICAgICAgJHtzdGF0ZS5zZXJ2ZXJVUkwgPT09IG51bGwgPyAnJyA6IGljb24oXCJzaGFyZVwiLCBgZmEtdXBsb2FkICR7aGlkZGVufWAsIHQoJ3Rvb2xiYXIudXBsb2FkJyksICdnYWxsZXJ5OnNoYXJlU2tldGNoJyl9XG4gICAgICAgICR7dG9nZ2xlSW5mb31cbiAgICA8L2Rpdj5gXG5cbiAgICAvLyAgICAgICAgJHtpY29uKFwic2hhcmVcIiwgYGZhLXVwbG9hZCAke2hpZGRlbn1gLCB0KCd0b29sYmFyLnVwbG9hZCcpLCAnZ2FsbGVyeTpzaGFyZVNrZXRjaCcpfVxuXG59Il19 diff --git a/public/bundle.min.js b/public/bundle.min.js index ac7a194..be04cd0 100644 --- a/public/bundle.min.js +++ b/public/bundle.min.js @@ -29,7 +29,7 @@ let promise;module.exports=typeof queueMicrotask==="function"?queueMicrotask.bin /*! safe-buffer. MIT License. Feross Aboukhadijeh */ var buffer=require("buffer");var Buffer=buffer.Buffer;function copyProps(src,dst){for(var key in src){dst[key]=src[key]}}if(Buffer.from&&Buffer.alloc&&Buffer.allocUnsafe&&Buffer.allocUnsafeSlow){module.exports=buffer}else{copyProps(buffer,exports);exports.Buffer=SafeBuffer}function SafeBuffer(arg,encodingOrOffset,length){return Buffer(arg,encodingOrOffset,length)}SafeBuffer.prototype=Object.create(Buffer.prototype);copyProps(Buffer,SafeBuffer);SafeBuffer.from=function(arg,encodingOrOffset,length){if(typeof arg==="number"){throw new TypeError("Argument must not be a number")}return Buffer(arg,encodingOrOffset,length)};SafeBuffer.alloc=function(size,fill,encoding){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}var buf=Buffer(size);if(fill!==undefined){if(typeof encoding==="string"){buf.fill(fill,encoding)}else{buf.fill(fill)}}else{buf.fill(0)}return buf};SafeBuffer.allocUnsafe=function(size){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}return Buffer(size)};SafeBuffer.allocUnsafeSlow=function(size){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}return buffer.SlowBuffer(size)}},{buffer:35}],170:[function(require,module,exports){module.exports=scrollToAnchor;function scrollToAnchor(anchor,options){if(anchor){try{var el=document.querySelector(anchor);if(el)el.scrollIntoView(options)}catch(e){}}}},{}],171:[function(require,module,exports){"use strict";module.exports=require("./lib/index")},{"./lib/index":175}],172:[function(require,module,exports){"use strict";var randomFromSeed=require("./random/random-from-seed");var ORIGINAL="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-";var alphabet;var previousSeed;var shuffled;function reset(){shuffled=false}function setCharacters(_alphabet_){if(!_alphabet_){if(alphabet!==ORIGINAL){alphabet=ORIGINAL;reset()}return}if(_alphabet_===alphabet){return}if(_alphabet_.length!==ORIGINAL.length){throw new Error("Custom alphabet for shortid must be "+ORIGINAL.length+" unique characters. You submitted "+_alphabet_.length+" characters: "+_alphabet_)}var unique=_alphabet_.split("").filter((function(item,ind,arr){return ind!==arr.lastIndexOf(item)}));if(unique.length){throw new Error("Custom alphabet for shortid must be "+ORIGINAL.length+" unique characters. These characters were not unique: "+unique.join(", "))}alphabet=_alphabet_;reset()}function characters(_alphabet_){setCharacters(_alphabet_);return alphabet}function setSeed(seed){randomFromSeed.seed(seed);if(previousSeed!==seed){reset();previousSeed=seed}}function shuffle(){if(!alphabet){setCharacters(ORIGINAL)}var sourceArray=alphabet.split("");var targetArray=[];var r=randomFromSeed.nextValue();var characterIndex;while(sourceArray.length>0){r=randomFromSeed.nextValue();characterIndex=Math.floor(r*sourceArray.length);targetArray.push(sourceArray.splice(characterIndex,1)[0])}return targetArray.join("")}function getShuffled(){if(shuffled){return shuffled}shuffled=shuffle();return shuffled}function lookup(index){var alphabetShuffled=getShuffled();return alphabetShuffled[index]}function get(){return alphabet||ORIGINAL}module.exports={get:get,characters:characters,seed:setSeed,lookup:lookup,shuffled:getShuffled}},{"./random/random-from-seed":178}],173:[function(require,module,exports){"use strict";var generate=require("./generate");var alphabet=require("./alphabet");var REDUCE_TIME=1567752802062;var version=7;var counter;var previousSeconds;function build(clusterWorkerId){var str="";var seconds=Math.floor((Date.now()-REDUCE_TIME)*.001);if(seconds===previousSeconds){counter++}else{counter=0;previousSeconds=seconds}str=str+generate(version);str=str+generate(clusterWorkerId);if(counter>0){str=str+generate(counter)}str=str+generate(seconds);return str}module.exports=build},{"./alphabet":172,"./generate":174}],174:[function(require,module,exports){"use strict";var alphabet=require("./alphabet");var random=require("./random/random-byte");var format=require("nanoid/format");function generate(number){var loopCounter=0;var done;var str="";while(!done){str=str+format(random,alphabet.get(),1);done=number */ -const debug=require("debug")("simple-peer");const getBrowserRTC=require("get-browser-rtc");const randombytes=require("randombytes");const stream=require("readable-stream");const queueMicrotask=require("queue-microtask");const errCode=require("err-code");const{Buffer:Buffer}=require("buffer");const MAX_BUFFERED_AMOUNT=64*1024;const ICECOMPLETE_TIMEOUT=5*1e3;const CHANNEL_CLOSING_TIMEOUT=5*1e3;function filterTrickle(sdp){return sdp.replace(/a=ice-options:trickle\s\n/g,"")}function warn(message){console.warn(message)}class Peer extends stream.Duplex{constructor(opts){opts=Object.assign({allowHalfOpen:false},opts);super(opts);this._id=randombytes(4).toString("hex").slice(0,7);this._debug("new peer %o",opts);this.channelName=opts.initiator?opts.channelName||randombytes(20).toString("hex"):null;this.initiator=opts.initiator||false;this.channelConfig=opts.channelConfig||Peer.channelConfig;this.channelNegotiated=this.channelConfig.negotiated;this.config=Object.assign({},Peer.config,opts.config);this.offerOptions=opts.offerOptions||{};this.answerOptions=opts.answerOptions||{};this.sdpTransform=opts.sdpTransform||(sdp=>sdp);this.streams=opts.streams||(opts.stream?[opts.stream]:[]);this.trickle=opts.trickle!==undefined?opts.trickle:true;this.allowHalfTrickle=opts.allowHalfTrickle!==undefined?opts.allowHalfTrickle:false;this.iceCompleteTimeout=opts.iceCompleteTimeout||ICECOMPLETE_TIMEOUT;this.destroyed=false;this.destroying=false;this._connected=false;this.remoteAddress=undefined;this.remoteFamily=undefined;this.remotePort=undefined;this.localAddress=undefined;this.localFamily=undefined;this.localPort=undefined;this._wrtc=opts.wrtc&&typeof opts.wrtc==="object"?opts.wrtc:getBrowserRTC();if(!this._wrtc){if(typeof window==="undefined"){throw errCode(new Error("No WebRTC support: Specify `opts.wrtc` option in this environment"),"ERR_WEBRTC_SUPPORT")}else{throw errCode(new Error("No WebRTC support: Not a supported browser"),"ERR_WEBRTC_SUPPORT")}}this._pcReady=false;this._channelReady=false;this._iceComplete=false;this._iceCompleteTimer=null;this._channel=null;this._pendingCandidates=[];this._isNegotiating=false;this._firstNegotiation=true;this._batchedNegotiation=false;this._queuedNegotiation=false;this._sendersAwaitingStable=[];this._senderMap=new Map;this._closingInterval=null;this._remoteTracks=[];this._remoteStreams=[];this._chunk=null;this._cb=null;this._interval=null;try{this._pc=new this._wrtc.RTCPeerConnection(this.config)}catch(err){this.destroy(errCode(err,"ERR_PC_CONSTRUCTOR"));return}this._isReactNativeWebrtc=typeof this._pc._peerConnectionId==="number";this._pc.oniceconnectionstatechange=()=>{this._onIceStateChange()};this._pc.onicegatheringstatechange=()=>{this._onIceStateChange()};this._pc.onconnectionstatechange=()=>{this._onConnectionStateChange()};this._pc.onsignalingstatechange=()=>{this._onSignalingStateChange()};this._pc.onicecandidate=event=>{this._onIceCandidate(event)};if(typeof this._pc.peerIdentity==="object"){this._pc.peerIdentity.catch((err=>{this.destroy(errCode(err,"ERR_PC_PEER_IDENTITY"))}))}if(this.initiator||this.channelNegotiated){this._setupData({channel:this._pc.createDataChannel(this.channelName,this.channelConfig)})}else{this._pc.ondatachannel=event=>{this._setupData(event)}}if(this.streams){this.streams.forEach((stream=>{this.addStream(stream)}))}this._pc.ontrack=event=>{this._onTrack(event)};this._debug("initial negotiation");this._needsNegotiation();this._onFinishBound=()=>{this._onFinish()};this.once("finish",this._onFinishBound)}get bufferSize(){return this._channel&&this._channel.bufferedAmount||0}get connected(){return this._connected&&this._channel.readyState==="open"}address(){return{port:this.localPort,family:this.localFamily,address:this.localAddress}}signal(data){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot signal after peer is destroyed"),"ERR_DESTROYED");if(typeof data==="string"){try{data=JSON.parse(data)}catch(err){data={}}}this._debug("signal()");if(data.renegotiate&&this.initiator){this._debug("got request to renegotiate");this._needsNegotiation()}if(data.transceiverRequest&&this.initiator){this._debug("got request for transceiver");this.addTransceiver(data.transceiverRequest.kind,data.transceiverRequest.init)}if(data.candidate){if(this._pc.remoteDescription&&this._pc.remoteDescription.type){this._addIceCandidate(data.candidate)}else{this._pendingCandidates.push(data.candidate)}}if(data.sdp){this._pc.setRemoteDescription(new this._wrtc.RTCSessionDescription(data)).then((()=>{if(this.destroyed)return;this._pendingCandidates.forEach((candidate=>{this._addIceCandidate(candidate)}));this._pendingCandidates=[];if(this._pc.remoteDescription.type==="offer")this._createAnswer()})).catch((err=>{this.destroy(errCode(err,"ERR_SET_REMOTE_DESCRIPTION"))}))}if(!data.sdp&&!data.candidate&&!data.renegotiate&&!data.transceiverRequest){this.destroy(errCode(new Error("signal() called with invalid signal data"),"ERR_SIGNALING"))}}_addIceCandidate(candidate){const iceCandidateObj=new this._wrtc.RTCIceCandidate(candidate);this._pc.addIceCandidate(iceCandidateObj).catch((err=>{if(!iceCandidateObj.address||iceCandidateObj.address.endsWith(".local")){warn("Ignoring unsupported ICE candidate.")}else{this.destroy(errCode(err,"ERR_ADD_ICE_CANDIDATE"))}}))}send(chunk){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot send after peer is destroyed"),"ERR_DESTROYED");this._channel.send(chunk)}addTransceiver(kind,init){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot addTransceiver after peer is destroyed"),"ERR_DESTROYED");this._debug("addTransceiver()");if(this.initiator){try{this._pc.addTransceiver(kind,init);this._needsNegotiation()}catch(err){this.destroy(errCode(err,"ERR_ADD_TRANSCEIVER"))}}else{this.emit("signal",{type:"transceiverRequest",transceiverRequest:{kind:kind,init:init}})}}addStream(stream){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot addStream after peer is destroyed"),"ERR_DESTROYED");this._debug("addStream()");stream.getTracks().forEach((track=>{this.addTrack(track,stream)}))}addTrack(track,stream){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot addTrack after peer is destroyed"),"ERR_DESTROYED");this._debug("addTrack()");const submap=this._senderMap.get(track)||new Map;let sender=submap.get(stream);if(!sender){sender=this._pc.addTrack(track,stream);submap.set(stream,sender);this._senderMap.set(track,submap);this._needsNegotiation()}else if(sender.removed){throw errCode(new Error("Track has been removed. You should enable/disable tracks that you want to re-add."),"ERR_SENDER_REMOVED")}else{throw errCode(new Error("Track has already been added to that stream."),"ERR_SENDER_ALREADY_ADDED")}}replaceTrack(oldTrack,newTrack,stream){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot replaceTrack after peer is destroyed"),"ERR_DESTROYED");this._debug("replaceTrack()");const submap=this._senderMap.get(oldTrack);const sender=submap?submap.get(stream):null;if(!sender){throw errCode(new Error("Cannot replace track that was never added."),"ERR_TRACK_NOT_ADDED")}if(newTrack)this._senderMap.set(newTrack,submap);if(sender.replaceTrack!=null){sender.replaceTrack(newTrack)}else{this.destroy(errCode(new Error("replaceTrack is not supported in this browser"),"ERR_UNSUPPORTED_REPLACETRACK"))}}removeTrack(track,stream){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot removeTrack after peer is destroyed"),"ERR_DESTROYED");this._debug("removeSender()");const submap=this._senderMap.get(track);const sender=submap?submap.get(stream):null;if(!sender){throw errCode(new Error("Cannot remove track that was never added."),"ERR_TRACK_NOT_ADDED")}try{sender.removed=true;this._pc.removeTrack(sender)}catch(err){if(err.name==="NS_ERROR_UNEXPECTED"){this._sendersAwaitingStable.push(sender)}else{this.destroy(errCode(err,"ERR_REMOVE_TRACK"))}}this._needsNegotiation()}removeStream(stream){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot removeStream after peer is destroyed"),"ERR_DESTROYED");this._debug("removeSenders()");stream.getTracks().forEach((track=>{this.removeTrack(track,stream)}))}_needsNegotiation(){this._debug("_needsNegotiation");if(this._batchedNegotiation)return;this._batchedNegotiation=true;queueMicrotask((()=>{this._batchedNegotiation=false;if(this.initiator||!this._firstNegotiation){this._debug("starting batched negotiation");this.negotiate()}else{this._debug("non-initiator initial negotiation request discarded")}this._firstNegotiation=false}))}negotiate(){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot negotiate after peer is destroyed"),"ERR_DESTROYED");if(this.initiator){if(this._isNegotiating){this._queuedNegotiation=true;this._debug("already negotiating, queueing")}else{this._debug("start negotiation");setTimeout((()=>{this._createOffer()}),0)}}else{if(this._isNegotiating){this._queuedNegotiation=true;this._debug("already negotiating, queueing")}else{this._debug("requesting negotiation from initiator");this.emit("signal",{type:"renegotiate",renegotiate:true})}}this._isNegotiating=true}destroy(err){this._destroy(err,(()=>{}))}_destroy(err,cb){if(this.destroyed||this.destroying)return;this.destroying=true;this._debug("destroying (error: %s)",err&&(err.message||err));queueMicrotask((()=>{this.destroyed=true;this.destroying=false;this._debug("destroy (error: %s)",err&&(err.message||err));this.readable=this.writable=false;if(!this._readableState.ended)this.push(null);if(!this._writableState.finished)this.end();this._connected=false;this._pcReady=false;this._channelReady=false;this._remoteTracks=null;this._remoteStreams=null;this._senderMap=null;clearInterval(this._closingInterval);this._closingInterval=null;clearInterval(this._interval);this._interval=null;this._chunk=null;this._cb=null;if(this._onFinishBound)this.removeListener("finish",this._onFinishBound);this._onFinishBound=null;if(this._channel){try{this._channel.close()}catch(err){}this._channel.onmessage=null;this._channel.onopen=null;this._channel.onclose=null;this._channel.onerror=null}if(this._pc){try{this._pc.close()}catch(err){}this._pc.oniceconnectionstatechange=null;this._pc.onicegatheringstatechange=null;this._pc.onsignalingstatechange=null;this._pc.onicecandidate=null;this._pc.ontrack=null;this._pc.ondatachannel=null}this._pc=null;this._channel=null;if(err)this.emit("error",err);this.emit("close");cb()}))}_setupData(event){if(!event.channel){return this.destroy(errCode(new Error("Data channel event is missing `channel` property"),"ERR_DATA_CHANNEL"))}this._channel=event.channel;this._channel.binaryType="arraybuffer";if(typeof this._channel.bufferedAmountLowThreshold==="number"){this._channel.bufferedAmountLowThreshold=MAX_BUFFERED_AMOUNT}this.channelName=this._channel.label;this._channel.onmessage=event=>{this._onChannelMessage(event)};this._channel.onbufferedamountlow=()=>{this._onChannelBufferedAmountLow()};this._channel.onopen=()=>{this._onChannelOpen()};this._channel.onclose=()=>{this._onChannelClose()};this._channel.onerror=event=>{const err=event.error instanceof Error?event.error:new Error(`Datachannel error: ${event.message} ${event.filename}:${event.lineno}:${event.colno}`);this.destroy(errCode(err,"ERR_DATA_CHANNEL"))};let isClosing=false;this._closingInterval=setInterval((()=>{if(this._channel&&this._channel.readyState==="closing"){if(isClosing)this._onChannelClose();isClosing=true}else{isClosing=false}}),CHANNEL_CLOSING_TIMEOUT)}_read(){}_write(chunk,encoding,cb){if(this.destroyed)return cb(errCode(new Error("cannot write after peer is destroyed"),"ERR_DATA_CHANNEL"));if(this._connected){try{this.send(chunk)}catch(err){return this.destroy(errCode(err,"ERR_DATA_CHANNEL"))}if(this._channel.bufferedAmount>MAX_BUFFERED_AMOUNT){this._debug("start backpressure: bufferedAmount %d",this._channel.bufferedAmount);this._cb=cb}else{cb(null)}}else{this._debug("write before connect");this._chunk=chunk;this._cb=cb}}_onFinish(){if(this.destroyed)return;const destroySoon=()=>{setTimeout((()=>this.destroy()),1e3)};if(this._connected){destroySoon()}else{this.once("connect",destroySoon)}}_startIceCompleteTimeout(){if(this.destroyed)return;if(this._iceCompleteTimer)return;this._debug("started iceComplete timeout");this._iceCompleteTimer=setTimeout((()=>{if(!this._iceComplete){this._iceComplete=true;this._debug("iceComplete timeout completed");this.emit("iceTimeout");this.emit("_iceComplete")}}),this.iceCompleteTimeout)}_createOffer(){if(this.destroyed)return;this._pc.createOffer(this.offerOptions).then((offer=>{if(this.destroyed)return;if(!this.trickle&&!this.allowHalfTrickle)offer.sdp=filterTrickle(offer.sdp);offer.sdp=this.sdpTransform(offer.sdp);const sendOffer=()=>{if(this.destroyed)return;const signal=this._pc.localDescription||offer;this._debug("signal");this.emit("signal",{type:signal.type,sdp:signal.sdp})};const onSuccess=()=>{this._debug("createOffer success");if(this.destroyed)return;if(this.trickle||this._iceComplete)sendOffer();else this.once("_iceComplete",sendOffer)};const onError=err=>{this.destroy(errCode(err,"ERR_SET_LOCAL_DESCRIPTION"))};this._pc.setLocalDescription(offer).then(onSuccess).catch(onError)})).catch((err=>{this.destroy(errCode(err,"ERR_CREATE_OFFER"))}))}_requestMissingTransceivers(){if(this._pc.getTransceivers){this._pc.getTransceivers().forEach((transceiver=>{if(!transceiver.mid&&transceiver.sender.track&&!transceiver.requested){transceiver.requested=true;this.addTransceiver(transceiver.sender.track.kind)}}))}}_createAnswer(){if(this.destroyed)return;this._pc.createAnswer(this.answerOptions).then((answer=>{if(this.destroyed)return;if(!this.trickle&&!this.allowHalfTrickle)answer.sdp=filterTrickle(answer.sdp);answer.sdp=this.sdpTransform(answer.sdp);const sendAnswer=()=>{if(this.destroyed)return;const signal=this._pc.localDescription||answer;this._debug("signal");this.emit("signal",{type:signal.type,sdp:signal.sdp});if(!this.initiator)this._requestMissingTransceivers()};const onSuccess=()=>{if(this.destroyed)return;if(this.trickle||this._iceComplete)sendAnswer();else this.once("_iceComplete",sendAnswer)};const onError=err=>{this.destroy(errCode(err,"ERR_SET_LOCAL_DESCRIPTION"))};this._pc.setLocalDescription(answer).then(onSuccess).catch(onError)})).catch((err=>{this.destroy(errCode(err,"ERR_CREATE_ANSWER"))}))}_onConnectionStateChange(){if(this.destroyed)return;if(this._pc.connectionState==="failed"){this.destroy(errCode(new Error("Connection failed."),"ERR_CONNECTION_FAILURE"))}}_onIceStateChange(){if(this.destroyed)return;const iceConnectionState=this._pc.iceConnectionState;const iceGatheringState=this._pc.iceGatheringState;this._debug("iceStateChange (connection: %s) (gathering: %s)",iceConnectionState,iceGatheringState);this.emit("iceStateChange",iceConnectionState,iceGatheringState);if(iceConnectionState==="connected"||iceConnectionState==="completed"){this._pcReady=true;this._maybeReady()}if(iceConnectionState==="failed"){this.destroy(errCode(new Error("Ice connection failed."),"ERR_ICE_CONNECTION_FAILURE"))}if(iceConnectionState==="closed"){this.destroy(errCode(new Error("Ice connection closed."),"ERR_ICE_CONNECTION_CLOSED"))}}getStats(cb){const flattenValues=report=>{if(Object.prototype.toString.call(report.values)==="[object Array]"){report.values.forEach((value=>{Object.assign(report,value)}))}return report};if(this._pc.getStats.length===0||this._isReactNativeWebrtc){this._pc.getStats().then((res=>{const reports=[];res.forEach((report=>{reports.push(flattenValues(report))}));cb(null,reports)}),(err=>cb(err)))}else if(this._pc.getStats.length>0){this._pc.getStats((res=>{if(this.destroyed)return;const reports=[];res.result().forEach((result=>{const report={};result.names().forEach((name=>{report[name]=result.stat(name)}));report.id=result.id;report.type=result.type;report.timestamp=result.timestamp;reports.push(flattenValues(report))}));cb(null,reports)}),(err=>cb(err)))}else{cb(null,[])}}_maybeReady(){this._debug("maybeReady pc %s channel %s",this._pcReady,this._channelReady);if(this._connected||this._connecting||!this._pcReady||!this._channelReady)return;this._connecting=true;const findCandidatePair=()=>{if(this.destroyed)return;this.getStats(((err,items)=>{if(this.destroyed)return;if(err)items=[];const remoteCandidates={};const localCandidates={};const candidatePairs={};let foundSelectedCandidatePair=false;items.forEach((item=>{if(item.type==="remotecandidate"||item.type==="remote-candidate"){remoteCandidates[item.id]=item}if(item.type==="localcandidate"||item.type==="local-candidate"){localCandidates[item.id]=item}if(item.type==="candidatepair"||item.type==="candidate-pair"){candidatePairs[item.id]=item}}));const setSelectedCandidatePair=selectedCandidatePair=>{foundSelectedCandidatePair=true;let local=localCandidates[selectedCandidatePair.localCandidateId];if(local&&(local.ip||local.address)){this.localAddress=local.ip||local.address;this.localPort=Number(local.port)}else if(local&&local.ipAddress){this.localAddress=local.ipAddress;this.localPort=Number(local.portNumber)}else if(typeof selectedCandidatePair.googLocalAddress==="string"){local=selectedCandidatePair.googLocalAddress.split(":");this.localAddress=local[0];this.localPort=Number(local[1])}if(this.localAddress){this.localFamily=this.localAddress.includes(":")?"IPv6":"IPv4"}let remote=remoteCandidates[selectedCandidatePair.remoteCandidateId];if(remote&&(remote.ip||remote.address)){this.remoteAddress=remote.ip||remote.address;this.remotePort=Number(remote.port)}else if(remote&&remote.ipAddress){this.remoteAddress=remote.ipAddress;this.remotePort=Number(remote.portNumber)}else if(typeof selectedCandidatePair.googRemoteAddress==="string"){remote=selectedCandidatePair.googRemoteAddress.split(":");this.remoteAddress=remote[0];this.remotePort=Number(remote[1])}if(this.remoteAddress){this.remoteFamily=this.remoteAddress.includes(":")?"IPv6":"IPv4"}this._debug("connect local: %s:%s remote: %s:%s",this.localAddress,this.localPort,this.remoteAddress,this.remotePort)};items.forEach((item=>{if(item.type==="transport"&&item.selectedCandidatePairId){setSelectedCandidatePair(candidatePairs[item.selectedCandidatePairId])}if(item.type==="googCandidatePair"&&item.googActiveConnection==="true"||(item.type==="candidatepair"||item.type==="candidate-pair")&&item.selected){setSelectedCandidatePair(item)}}));if(!foundSelectedCandidatePair&&(!Object.keys(candidatePairs).length||Object.keys(localCandidates).length)){setTimeout(findCandidatePair,100);return}else{this._connecting=false;this._connected=true}if(this._chunk){try{this.send(this._chunk)}catch(err){return this.destroy(errCode(err,"ERR_DATA_CHANNEL"))}this._chunk=null;this._debug('sent chunk from "write before connect"');const cb=this._cb;this._cb=null;cb(null)}if(typeof this._channel.bufferedAmountLowThreshold!=="number"){this._interval=setInterval((()=>this._onInterval()),150);if(this._interval.unref)this._interval.unref()}this._debug("connect");this.emit("connect")}))};findCandidatePair()}_onInterval(){if(!this._cb||!this._channel||this._channel.bufferedAmount>MAX_BUFFERED_AMOUNT){return}this._onChannelBufferedAmountLow()}_onSignalingStateChange(){if(this.destroyed)return;if(this._pc.signalingState==="stable"){this._isNegotiating=false;this._debug("flushing sender queue",this._sendersAwaitingStable);this._sendersAwaitingStable.forEach((sender=>{this._pc.removeTrack(sender);this._queuedNegotiation=true}));this._sendersAwaitingStable=[];if(this._queuedNegotiation){this._debug("flushing negotiation queue");this._queuedNegotiation=false;this._needsNegotiation()}else{this._debug("negotiated");this.emit("negotiated")}}this._debug("signalingStateChange %s",this._pc.signalingState);this.emit("signalingStateChange",this._pc.signalingState)}_onIceCandidate(event){if(this.destroyed)return;if(event.candidate&&this.trickle){this.emit("signal",{type:"candidate",candidate:{candidate:event.candidate.candidate,sdpMLineIndex:event.candidate.sdpMLineIndex,sdpMid:event.candidate.sdpMid}})}else if(!event.candidate&&!this._iceComplete){this._iceComplete=true;this.emit("_iceComplete")}if(event.candidate){this._startIceCompleteTimeout()}}_onChannelMessage(event){if(this.destroyed)return;let data=event.data;if(data instanceof ArrayBuffer)data=Buffer.from(data);this.push(data)}_onChannelBufferedAmountLow(){if(this.destroyed||!this._cb)return;this._debug("ending backpressure: bufferedAmount %d",this._channel.bufferedAmount);const cb=this._cb;this._cb=null;cb(null)}_onChannelOpen(){if(this._connected||this.destroyed)return;this._debug("on channel open");this._channelReady=true;this._maybeReady()}_onChannelClose(){if(this.destroyed)return;this._debug("on channel close");this.destroy()}_onTrack(event){if(this.destroyed)return;event.streams.forEach((eventStream=>{this._debug("on track");this.emit("track",event.track,eventStream);this._remoteTracks.push({track:event.track,stream:eventStream});if(this._remoteStreams.some((remoteStream=>remoteStream.id===eventStream.id)))return;this._remoteStreams.push(eventStream);queueMicrotask((()=>{this._debug("on stream");this.emit("stream",eventStream)}))}))}_debug(){const args=[].slice.call(arguments);args[0]="["+this._id+"] "+args[0];debug.apply(null,args)}}Peer.WEBRTC_SUPPORT=!!getBrowserRTC();Peer.config={iceServers:[{urls:["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478"]}],sdpSemantics:"unified-plan"};Peer.channelConfig={};module.exports=Peer},{buffer:35,debug:182,"err-code":80,"get-browser-rtc":85,"queue-microtask":166,randombytes:167,"readable-stream":199}],182:[function(require,module,exports){(function(process){(function(){exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.storage=localstorage();exports.destroy=(()=>{let warned=false;return()=>{if(!warned){warned=true;console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}}})();exports.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function useColors(){if(typeof window!=="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)){return true}if(typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)){return false}return typeof document!=="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function formatArgs(args){args[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+args[0]+(this.useColors?"%c ":" ")+"+"+module.exports.humanize(this.diff);if(!this.useColors){return}const c="color: "+this.color;args.splice(1,0,c,"color: inherit");let index=0;let lastC=0;args[0].replace(/%[a-zA-Z%]/g,(match=>{if(match==="%%"){return}index++;if(match==="%c"){lastC=index}}));args.splice(lastC,0,c)}exports.log=console.debug||console.log||(()=>{});function save(namespaces){try{if(namespaces){exports.storage.setItem("debug",namespaces)}else{exports.storage.removeItem("debug")}}catch(error){}}function load(){let r;try{r=exports.storage.getItem("debug")}catch(error){}if(!r&&typeof process!=="undefined"&&"env"in process){r=process.env.DEBUG}return r}function localstorage(){try{return localStorage}catch(error){}}module.exports=require("./common")(exports);const{formatters:formatters}=module.exports;formatters.j=function(v){try{return JSON.stringify(v)}catch(error){return"[UnexpectedJSONParseError]: "+error.message}}}).call(this)}).call(this,require("_process"))},{"./common":183,_process:160}],183:[function(require,module,exports){function setup(env){createDebug.debug=createDebug;createDebug.default=createDebug;createDebug.coerce=coerce;createDebug.disable=disable;createDebug.enable=enable;createDebug.enabled=enabled;createDebug.humanize=require("ms");createDebug.destroy=destroy;Object.keys(env).forEach((key=>{createDebug[key]=env[key]}));createDebug.names=[];createDebug.skips=[];createDebug.formatters={};function selectColor(namespace){let hash=0;for(let i=0;i{if(match==="%%"){return"%"}index++;const formatter=createDebug.formatters[format];if(typeof formatter==="function"){const val=args[index];match=formatter.call(self,val);args.splice(index,1);index--}return match}));createDebug.formatArgs.call(self,args);const logFn=self.log||createDebug.log;logFn.apply(self,args)}debug.namespace=namespace;debug.useColors=createDebug.useColors();debug.color=createDebug.selectColor(namespace);debug.extend=extend;debug.destroy=createDebug.destroy;Object.defineProperty(debug,"enabled",{enumerable:true,configurable:false,get:()=>{if(enableOverride!==null){return enableOverride}if(namespacesCache!==createDebug.namespaces){namespacesCache=createDebug.namespaces;enabledCache=createDebug.enabled(namespace)}return enabledCache},set:v=>{enableOverride=v}});if(typeof createDebug.init==="function"){createDebug.init(debug)}return debug}function extend(namespace,delimiter){const newDebug=createDebug(this.namespace+(typeof delimiter==="undefined"?":":delimiter)+namespace);newDebug.log=this.log;return newDebug}function enable(namespaces){createDebug.save(namespaces);createDebug.namespaces=namespaces;createDebug.names=[];createDebug.skips=[];let i;const split=(typeof namespaces==="string"?namespaces:"").split(/[\s,]+/);const len=split.length;for(i=0;i"-"+namespace))].join(",");createDebug.enable("");return namespaces}function enabled(name){if(name[name.length-1]==="*"){return true}let i;let len;for(i=0,len=createDebug.skips.length;i0){return parse(val)}else if(type==="number"&&isFinite(val)){return options.long?fmtLong(val):fmtShort(val)}throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(val))};function parse(str){str=String(str);if(str.length>100){return}var match=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);if(!match){return}var n=parseFloat(match[1]);var type=(match[2]||"ms").toLowerCase();switch(type){case"years":case"year":case"yrs":case"yr":case"y":return n*y;case"weeks":case"week":case"w":return n*w;case"days":case"day":case"d":return n*d;case"hours":case"hour":case"hrs":case"hr":case"h":return n*h;case"minutes":case"minute":case"mins":case"min":case"m":return n*m;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return undefined}}function fmtShort(ms){var msAbs=Math.abs(ms);if(msAbs>=d){return Math.round(ms/d)+"d"}if(msAbs>=h){return Math.round(ms/h)+"h"}if(msAbs>=m){return Math.round(ms/m)+"m"}if(msAbs>=s){return Math.round(ms/s)+"s"}return ms+"ms"}function fmtLong(ms){var msAbs=Math.abs(ms);if(msAbs>=d){return plural(ms,msAbs,d,"day")}if(msAbs>=h){return plural(ms,msAbs,h,"hour")}if(msAbs>=m){return plural(ms,msAbs,m,"minute")}if(msAbs>=s){return plural(ms,msAbs,s,"second")}return ms+" ms"}function plural(ms,msAbs,n,name){var isPlural=msAbs>=n*1.5;return Math.round(ms/n)+" "+name+(isPlural?"s":"")}},{}],185:[function(require,module,exports){"use strict";function _inheritsLoose(subClass,superClass){subClass.prototype=Object.create(superClass.prototype);subClass.prototype.constructor=subClass;subClass.__proto__=superClass}var codes={};function createErrorType(code,message,Base){if(!Base){Base=Error}function getMessage(arg1,arg2,arg3){if(typeof message==="string"){return message}else{return message(arg1,arg2,arg3)}}var NodeError=function(_Base){_inheritsLoose(NodeError,_Base);function NodeError(arg1,arg2,arg3){return _Base.call(this,getMessage(arg1,arg2,arg3))||this}return NodeError}(Base);NodeError.prototype.name=Base.name;NodeError.prototype.code=code;codes[code]=NodeError}function oneOf(expected,thing){if(Array.isArray(expected)){var len=expected.length;expected=expected.map((function(i){return String(i)}));if(len>2){return"one of ".concat(thing," ").concat(expected.slice(0,len-1).join(", "),", or ")+expected[len-1]}else if(len===2){return"one of ".concat(thing," ").concat(expected[0]," or ").concat(expected[1])}else{return"of ".concat(thing," ").concat(expected[0])}}else{return"of ".concat(thing," ").concat(String(expected))}}function startsWith(str,search,pos){return str.substr(!pos||pos<0?0:+pos,search.length)===search}function endsWith(str,search,this_len){if(this_len===undefined||this_len>str.length){this_len=str.length}return str.substring(this_len-search.length,this_len)===search}function includes(str,search,start){if(typeof start!=="number"){start=0}if(start+search.length>str.length){return false}else{return str.indexOf(search,start)!==-1}}createErrorType("ERR_INVALID_OPT_VALUE",(function(name,value){return'The value "'+value+'" is invalid for option "'+name+'"'}),TypeError);createErrorType("ERR_INVALID_ARG_TYPE",(function(name,expected,actual){var determiner;if(typeof expected==="string"&&startsWith(expected,"not ")){determiner="must not be";expected=expected.replace(/^not /,"")}else{determiner="must be"}var msg;if(endsWith(name," argument")){msg="The ".concat(name," ").concat(determiner," ").concat(oneOf(expected,"type"))}else{var type=includes(name,".")?"property":"argument";msg='The "'.concat(name,'" ').concat(type," ").concat(determiner," ").concat(oneOf(expected,"type"))}msg+=". Received type ".concat(typeof actual);return msg}),TypeError);createErrorType("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");createErrorType("ERR_METHOD_NOT_IMPLEMENTED",(function(name){return"The "+name+" method is not implemented"}));createErrorType("ERR_STREAM_PREMATURE_CLOSE","Premature close");createErrorType("ERR_STREAM_DESTROYED",(function(name){return"Cannot call "+name+" after a stream was destroyed"}));createErrorType("ERR_MULTIPLE_CALLBACK","Callback called multiple times");createErrorType("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");createErrorType("ERR_STREAM_WRITE_AFTER_END","write after end");createErrorType("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);createErrorType("ERR_UNKNOWN_ENCODING",(function(arg){return"Unknown encoding: "+arg}),TypeError);createErrorType("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");module.exports.codes=codes},{}],186:[function(require,module,exports){(function(process){(function(){"use strict";var objectKeys=Object.keys||function(obj){var keys=[];for(var key in obj)keys.push(key);return keys};module.exports=Duplex;var Readable=require("./_stream_readable");var Writable=require("./_stream_writable");require("inherits")(Duplex,Readable);{var keys=objectKeys(Writable.prototype);for(var v=0;v0){if(typeof chunk!=="string"&&!state.objectMode&&Object.getPrototypeOf(chunk)!==Buffer.prototype){chunk=_uint8ArrayToBuffer(chunk)}if(addToFront){if(state.endEmitted)errorOrDestroy(stream,new ERR_STREAM_UNSHIFT_AFTER_END_EVENT);else addChunk(stream,state,chunk,true)}else if(state.ended){errorOrDestroy(stream,new ERR_STREAM_PUSH_AFTER_EOF)}else if(state.destroyed){return false}else{state.reading=false;if(state.decoder&&!encoding){chunk=state.decoder.write(chunk);if(state.objectMode||chunk.length!==0)addChunk(stream,state,chunk,false);else maybeReadMore(stream,state)}else{addChunk(stream,state,chunk,false)}}}else if(!addToFront){state.reading=false;maybeReadMore(stream,state)}}return!state.ended&&(state.length=MAX_HWM){n=MAX_HWM}else{n--;n|=n>>>1;n|=n>>>2;n|=n>>>4;n|=n>>>8;n|=n>>>16;n++}return n}function howMuchToRead(n,state){if(n<=0||state.length===0&&state.ended)return 0;if(state.objectMode)return 1;if(n!==n){if(state.flowing&&state.length)return state.buffer.head.data.length;else return state.length}if(n>state.highWaterMark)state.highWaterMark=computeNewHighWaterMark(n);if(n<=state.length)return n;if(!state.ended){state.needReadable=true;return 0}return state.length}Readable.prototype.read=function(n){debug("read",n);n=parseInt(n,10);var state=this._readableState;var nOrig=n;if(n!==0)state.emittedReadable=false;if(n===0&&state.needReadable&&((state.highWaterMark!==0?state.length>=state.highWaterMark:state.length>0)||state.ended)){debug("read: emitReadable",state.length,state.ended);if(state.length===0&&state.ended)endReadable(this);else emitReadable(this);return null}n=howMuchToRead(n,state);if(n===0&&state.ended){if(state.length===0)endReadable(this);return null}var doRead=state.needReadable;debug("need readable",doRead);if(state.length===0||state.length-n0)ret=fromList(n,state);else ret=null;if(ret===null){state.needReadable=state.length<=state.highWaterMark;n=0}else{state.length-=n;state.awaitDrain=0}if(state.length===0){if(!state.ended)state.needReadable=true;if(nOrig!==n&&state.ended)endReadable(this)}if(ret!==null)this.emit("data",ret);return ret};function onEofChunk(stream,state){debug("onEofChunk");if(state.ended)return;if(state.decoder){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length}}state.ended=true;if(state.sync){emitReadable(stream)}else{state.needReadable=false;if(!state.emittedReadable){state.emittedReadable=true;emitReadable_(stream)}}}function emitReadable(stream){var state=stream._readableState;debug("emitReadable",state.needReadable,state.emittedReadable);state.needReadable=false;if(!state.emittedReadable){debug("emitReadable",state.flowing);state.emittedReadable=true;process.nextTick(emitReadable_,stream)}}function emitReadable_(stream){var state=stream._readableState;debug("emitReadable_",state.destroyed,state.length,state.ended);if(!state.destroyed&&(state.length||state.ended)){stream.emit("readable");state.emittedReadable=false}state.needReadable=!state.flowing&&!state.ended&&state.length<=state.highWaterMark;flow(stream)}function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;process.nextTick(maybeReadMore_,stream,state)}}function maybeReadMore_(stream,state){while(!state.reading&&!state.ended&&(state.length1&&indexOf(state.pipes,dest)!==-1)&&!cleanedUp){debug("false write response, pause",state.awaitDrain);state.awaitDrain++}src.pause()}}function onerror(er){debug("onerror",er);unpipe();dest.removeListener("error",onerror);if(EElistenerCount(dest,"error")===0)errorOrDestroy(dest,er)}prependListener(dest,"error",onerror);function onclose(){dest.removeListener("finish",onfinish);unpipe()}dest.once("close",onclose);function onfinish(){debug("onfinish");dest.removeListener("close",onclose);unpipe()}dest.once("finish",onfinish);function unpipe(){debug("unpipe");src.unpipe(dest)}dest.emit("pipe",src);if(!state.flowing){debug("pipe resume");src.resume()}return dest};function pipeOnDrain(src){return function pipeOnDrainFunctionResult(){var state=src._readableState;debug("pipeOnDrain",state.awaitDrain);if(state.awaitDrain)state.awaitDrain--;if(state.awaitDrain===0&&EElistenerCount(src,"data")){state.flowing=true;flow(src)}}}Readable.prototype.unpipe=function(dest){var state=this._readableState;var unpipeInfo={hasUnpiped:false};if(state.pipesCount===0)return this;if(state.pipesCount===1){if(dest&&dest!==state.pipes)return this;if(!dest)dest=state.pipes;state.pipes=null;state.pipesCount=0;state.flowing=false;if(dest)dest.emit("unpipe",this,unpipeInfo);return this}if(!dest){var dests=state.pipes;var len=state.pipesCount;state.pipes=null;state.pipesCount=0;state.flowing=false;for(var i=0;i0;if(state.flowing!==false)this.resume()}else if(ev==="readable"){if(!state.endEmitted&&!state.readableListening){state.readableListening=state.needReadable=true;state.flowing=false;state.emittedReadable=false;debug("on readable",state.length,state.reading);if(state.length){emitReadable(this)}else if(!state.reading){process.nextTick(nReadingNextTick,this)}}}return res};Readable.prototype.addListener=Readable.prototype.on;Readable.prototype.removeListener=function(ev,fn){var res=Stream.prototype.removeListener.call(this,ev,fn);if(ev==="readable"){process.nextTick(updateReadableListening,this)}return res};Readable.prototype.removeAllListeners=function(ev){var res=Stream.prototype.removeAllListeners.apply(this,arguments);if(ev==="readable"||ev===undefined){process.nextTick(updateReadableListening,this)}return res};function updateReadableListening(self){var state=self._readableState;state.readableListening=self.listenerCount("readable")>0;if(state.resumeScheduled&&!state.paused){state.flowing=true}else if(self.listenerCount("data")>0){self.resume()}}function nReadingNextTick(self){debug("readable nexttick read 0");self.read(0)}Readable.prototype.resume=function(){var state=this._readableState;if(!state.flowing){debug("resume");state.flowing=!state.readableListening;resume(this,state)}state.paused=false;return this};function resume(stream,state){if(!state.resumeScheduled){state.resumeScheduled=true;process.nextTick(resume_,stream,state)}}function resume_(stream,state){debug("resume",state.reading);if(!state.reading){stream.read(0)}state.resumeScheduled=false;stream.emit("resume");flow(stream);if(state.flowing&&!state.reading)stream.read(0)}Readable.prototype.pause=function(){debug("call pause flowing=%j",this._readableState.flowing);if(this._readableState.flowing!==false){debug("pause");this._readableState.flowing=false;this.emit("pause")}this._readableState.paused=true;return this};function flow(stream){var state=stream._readableState;debug("flow",state.flowing);while(state.flowing&&stream.read()!==null);}Readable.prototype.wrap=function(stream){var _this=this;var state=this._readableState;var paused=false;stream.on("end",(function(){debug("wrapped end");if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length)_this.push(chunk)}_this.push(null)}));stream.on("data",(function(chunk){debug("wrapped data");if(state.decoder)chunk=state.decoder.write(chunk);if(state.objectMode&&(chunk===null||chunk===undefined))return;else if(!state.objectMode&&(!chunk||!chunk.length))return;var ret=_this.push(chunk);if(!ret){paused=true;stream.pause()}}));for(var i in stream){if(this[i]===undefined&&typeof stream[i]==="function"){this[i]=function methodWrap(method){return function methodWrapReturnFunction(){return stream[method].apply(stream,arguments)}}(i)}}for(var n=0;n=state.length){if(state.decoder)ret=state.buffer.join("");else if(state.buffer.length===1)ret=state.buffer.first();else ret=state.buffer.concat(state.length);state.buffer.clear()}else{ret=state.buffer.consume(n,state.decoder)}return ret}function endReadable(stream){var state=stream._readableState;debug("endReadable",state.endEmitted);if(!state.endEmitted){state.ended=true;process.nextTick(endReadableNT,state,stream)}}function endReadableNT(state,stream){debug("endReadableNT",state.endEmitted,state.length);if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit("end");if(state.autoDestroy){var wState=stream._writableState;if(!wState||wState.autoDestroy&&wState.finished){stream.destroy()}}}}if(typeof Symbol==="function"){Readable.from=function(iterable,opts){if(from===undefined){from=require("./internal/streams/from")}return from(Readable,iterable,opts)}}function indexOf(xs,x){for(var i=0,l=xs.length;i-1))throw new ERR_UNKNOWN_ENCODING(encoding);this._writableState.defaultEncoding=encoding;return this};Object.defineProperty(Writable.prototype,"writableBuffer",{enumerable:false,get:function get(){return this._writableState&&this._writableState.getBuffer()}});function decodeChunk(state,chunk,encoding){if(!state.objectMode&&state.decodeStrings!==false&&typeof chunk==="string"){chunk=Buffer.from(chunk,encoding)}return chunk}Object.defineProperty(Writable.prototype,"writableHighWaterMark",{enumerable:false,get:function get(){return this._writableState.highWaterMark}});function writeOrBuffer(stream,state,isBuf,chunk,encoding,cb){if(!isBuf){var newChunk=decodeChunk(state,chunk,encoding);if(chunk!==newChunk){isBuf=true;encoding="buffer";chunk=newChunk}}var len=state.objectMode?1:chunk.length;state.length+=len;var ret=state.length0)this.tail.next=entry;else this.head=entry;this.tail=entry;++this.length}},{key:"unshift",value:function unshift(v){var entry={data:v,next:this.head};if(this.length===0)this.tail=entry;this.head=entry;++this.length}},{key:"shift",value:function shift(){if(this.length===0)return;var ret=this.head.data;if(this.length===1)this.head=this.tail=null;else this.head=this.head.next;--this.length;return ret}},{key:"clear",value:function clear(){this.head=this.tail=null;this.length=0}},{key:"join",value:function join(s){if(this.length===0)return"";var p=this.head;var ret=""+p.data;while(p=p.next)ret+=s+p.data;return ret}},{key:"concat",value:function concat(n){if(this.length===0)return Buffer.alloc(0);var ret=Buffer.allocUnsafe(n>>>0);var p=this.head;var i=0;while(p){copyBuffer(p.data,ret,i);i+=p.data.length;p=p.next}return ret}},{key:"consume",value:function consume(n,hasStrings){var ret;if(nstr.length?str.length:n;if(nb===str.length)ret+=str;else ret+=str.slice(0,n);n-=nb;if(n===0){if(nb===str.length){++c;if(p.next)this.head=p.next;else this.head=this.tail=null}else{this.head=p;p.data=str.slice(nb)}break}++c}this.length-=c;return ret}},{key:"_getBuffer",value:function _getBuffer(n){var ret=Buffer.allocUnsafe(n);var p=this.head;var c=1;p.data.copy(ret);n-=p.data.length;while(p=p.next){var buf=p.data;var nb=n>buf.length?buf.length:n;buf.copy(ret,ret.length-n,0,nb);n-=nb;if(n===0){if(nb===buf.length){++c;if(p.next)this.head=p.next;else this.head=this.tail=null}else{this.head=p;p.data=buf.slice(nb)}break}++c}this.length-=c;return ret}},{key:custom,value:function value(_,options){return inspect(this,_objectSpread(_objectSpread({},options),{},{depth:0,customInspect:false}))}}]);return BufferList}()},{buffer:35,util:34}],193:[function(require,module,exports){(function(process){(function(){"use strict";function destroy(err,cb){var _this=this;var readableDestroyed=this._readableState&&this._readableState.destroyed;var writableDestroyed=this._writableState&&this._writableState.destroyed;if(readableDestroyed||writableDestroyed){if(cb){cb(err)}else if(err){if(!this._writableState){process.nextTick(emitErrorNT,this,err)}else if(!this._writableState.errorEmitted){this._writableState.errorEmitted=true;process.nextTick(emitErrorNT,this,err)}}return this}if(this._readableState){this._readableState.destroyed=true}if(this._writableState){this._writableState.destroyed=true}this._destroy(err||null,(function(err){if(!cb&&err){if(!_this._writableState){process.nextTick(emitErrorAndCloseNT,_this,err)}else if(!_this._writableState.errorEmitted){_this._writableState.errorEmitted=true;process.nextTick(emitErrorAndCloseNT,_this,err)}else{process.nextTick(emitCloseNT,_this)}}else if(cb){process.nextTick(emitCloseNT,_this);cb(err)}else{process.nextTick(emitCloseNT,_this)}}));return this}function emitErrorAndCloseNT(self,err){emitErrorNT(self,err);emitCloseNT(self)}function emitCloseNT(self){if(self._writableState&&!self._writableState.emitClose)return;if(self._readableState&&!self._readableState.emitClose)return;self.emit("close")}function undestroy(){if(this._readableState){this._readableState.destroyed=false;this._readableState.reading=false;this._readableState.ended=false;this._readableState.endEmitted=false}if(this._writableState){this._writableState.destroyed=false;this._writableState.ended=false;this._writableState.ending=false;this._writableState.finalCalled=false;this._writableState.prefinished=false;this._writableState.finished=false;this._writableState.errorEmitted=false}}function emitErrorNT(self,err){self.emit("error",err)}function errorOrDestroy(stream,err){var rState=stream._readableState;var wState=stream._writableState;if(rState&&rState.autoDestroy||wState&&wState.autoDestroy)stream.destroy(err);else stream.emit("error",err)}module.exports={destroy:destroy,undestroy:undestroy,errorOrDestroy:errorOrDestroy}}).call(this)}).call(this,require("_process"))},{_process:160}],194:[function(require,module,exports){"use strict";var ERR_STREAM_PREMATURE_CLOSE=require("../../../errors").codes.ERR_STREAM_PREMATURE_CLOSE;function once(callback){var called=false;return function(){if(called)return;called=true;for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}callback.apply(this,args)}}function noop(){}function isRequest(stream){return stream.setHeader&&typeof stream.abort==="function"}function eos(stream,opts,callback){if(typeof opts==="function")return eos(stream,null,opts);if(!opts)opts={};callback=once(callback||noop);var readable=opts.readable||opts.readable!==false&&stream.readable;var writable=opts.writable||opts.writable!==false&&stream.writable;var onlegacyfinish=function onlegacyfinish(){if(!stream.writable)onfinish()};var writableEnded=stream._writableState&&stream._writableState.finished;var onfinish=function onfinish(){writable=false;writableEnded=true;if(!readable)callback.call(stream)};var readableEnded=stream._readableState&&stream._readableState.endEmitted;var onend=function onend(){readable=false;readableEnded=true;if(!writable)callback.call(stream)};var onerror=function onerror(err){callback.call(stream,err)};var onclose=function onclose(){var err;if(readable&&!readableEnded){if(!stream._readableState||!stream._readableState.ended)err=new ERR_STREAM_PREMATURE_CLOSE;return callback.call(stream,err)}if(writable&&!writableEnded){if(!stream._writableState||!stream._writableState.ended)err=new ERR_STREAM_PREMATURE_CLOSE;return callback.call(stream,err)}};var onrequest=function onrequest(){stream.req.on("finish",onfinish)};if(isRequest(stream)){stream.on("complete",onfinish);stream.on("abort",onclose);if(stream.req)onrequest();else stream.on("request",onrequest)}else if(writable&&!stream._writableState){stream.on("end",onlegacyfinish);stream.on("close",onlegacyfinish)}stream.on("end",onend);stream.on("finish",onfinish);if(opts.error!==false)stream.on("error",onerror);stream.on("close",onclose);return function(){stream.removeListener("complete",onfinish);stream.removeListener("abort",onclose);stream.removeListener("request",onrequest);if(stream.req)stream.req.removeListener("finish",onfinish);stream.removeListener("end",onlegacyfinish);stream.removeListener("close",onlegacyfinish);stream.removeListener("finish",onfinish);stream.removeListener("end",onend);stream.removeListener("error",onerror);stream.removeListener("close",onclose)}}module.exports=eos},{"../../../errors":185}],195:[function(require,module,exports){module.exports=function(){throw new Error("Readable.from is not available in the browser")}},{}],196:[function(require,module,exports){"use strict";var eos;function once(callback){var called=false;return function(){if(called)return;called=true;callback.apply(void 0,arguments)}}var _require$codes=require("../../../errors").codes,ERR_MISSING_ARGS=_require$codes.ERR_MISSING_ARGS,ERR_STREAM_DESTROYED=_require$codes.ERR_STREAM_DESTROYED;function noop(err){if(err)throw err}function isRequest(stream){return stream.setHeader&&typeof stream.abort==="function"}function destroyer(stream,reading,writing,callback){callback=once(callback);var closed=false;stream.on("close",(function(){closed=true}));if(eos===undefined)eos=require("./end-of-stream");eos(stream,{readable:reading,writable:writing},(function(err){if(err)return callback(err);closed=true;callback()}));var destroyed=false;return function(err){if(closed)return;if(destroyed)return;destroyed=true;if(isRequest(stream))return stream.abort();if(typeof stream.destroy==="function")return stream.destroy();callback(err||new ERR_STREAM_DESTROYED("pipe"))}}function call(fn){fn()}function pipe(from,to){return from.pipe(to)}function popCallback(streams){if(!streams.length)return noop;if(typeof streams[streams.length-1]!=="function")return noop;return streams.pop()}function pipeline(){for(var _len=arguments.length,streams=new Array(_len),_key=0;_key<_len;_key++){streams[_key]=arguments[_key]}var callback=popCallback(streams);if(Array.isArray(streams[0]))streams=streams[0];if(streams.length<2){throw new ERR_MISSING_ARGS("streams")}var error;var destroys=streams.map((function(stream,i){var reading=i0;return destroyer(stream,reading,writing,(function(err){if(!error)error=err;if(err)destroys.forEach(call);if(reading)return;destroys.forEach(call);callback(error)}))}));return streams.reduce(pipe)}module.exports=pipeline},{"../../../errors":185,"./end-of-stream":194}],197:[function(require,module,exports){"use strict";var ERR_INVALID_OPT_VALUE=require("../../../errors").codes.ERR_INVALID_OPT_VALUE;function highWaterMarkFrom(options,isDuplex,duplexKey){return options.highWaterMark!=null?options.highWaterMark:isDuplex?options[duplexKey]:null}function getHighWaterMark(state,options,duplexKey,isDuplex){var hwm=highWaterMarkFrom(options,isDuplex,duplexKey);if(hwm!=null){if(!(isFinite(hwm)&&Math.floor(hwm)===hwm)||hwm<0){var name=isDuplex?duplexKey:"highWaterMark";throw new ERR_INVALID_OPT_VALUE(name,hwm)}return Math.floor(hwm)}return state.objectMode?16:16*1024}module.exports={getHighWaterMark:getHighWaterMark}},{"../../../errors":185}],198:[function(require,module,exports){module.exports=require("events").EventEmitter},{events:81}],199:[function(require,module,exports){exports=module.exports=require("./lib/_stream_readable.js");exports.Stream=exports;exports.Readable=exports;exports.Writable=require("./lib/_stream_writable.js");exports.Duplex=require("./lib/_stream_duplex.js");exports.Transform=require("./lib/_stream_transform.js");exports.PassThrough=require("./lib/_stream_passthrough.js");exports.finished=require("./lib/internal/streams/end-of-stream.js");exports.pipeline=require("./lib/internal/streams/pipeline.js")},{"./lib/_stream_duplex.js":186,"./lib/_stream_passthrough.js":187,"./lib/_stream_readable.js":188,"./lib/_stream_transform.js":189,"./lib/_stream_writable.js":190,"./lib/internal/streams/end-of-stream.js":194,"./lib/internal/streams/pipeline.js":196}],200:[function(require,module,exports){var url=require("./url");var parser=require("socket.io-parser");var Manager=require("./manager");var debug=require("debug")("socket.io-client");module.exports=exports=lookup;var cache=exports.managers={};function lookup(uri,opts){if(typeof uri==="object"){opts=uri;uri=undefined}opts=opts||{};var parsed=url(uri);var source=parsed.source;var id=parsed.id;var path=parsed.path;var sameNamespace=cache[id]&&path in cache[id].nsps;var newConnection=opts.forceNew||opts["force new connection"]||false===opts.multiplex||sameNamespace;var io;if(newConnection){debug("ignoring socket cache for %s",source);io=Manager(source,opts)}else{if(!cache[id]){debug("new io instance for %s",source);cache[id]=Manager(source,opts)}io=cache[id]}if(parsed.query&&!opts.query){opts.query=parsed.query}return io.socket(parsed.path,opts)}exports.protocol=parser.protocol;exports.connect=lookup;exports.Manager=require("./manager");exports.Socket=require("./socket")},{"./manager":201,"./socket":203,"./url":204,debug:205,"socket.io-parser":209}],201:[function(require,module,exports){var eio=require("engine.io-client");var Socket=require("./socket");var Emitter=require("component-emitter");var parser=require("socket.io-parser");var on=require("./on");var bind=require("component-bind");var debug=require("debug")("socket.io-client:manager");var indexOf=require("indexof");var Backoff=require("backo2");var has=Object.prototype.hasOwnProperty;module.exports=Manager;function Manager(uri,opts){if(!(this instanceof Manager))return new Manager(uri,opts);if(uri&&"object"===typeof uri){opts=uri;uri=undefined}opts=opts||{};opts.path=opts.path||"/socket.io";this.nsps={};this.subs=[];this.opts=opts;this.reconnection(opts.reconnection!==false);this.reconnectionAttempts(opts.reconnectionAttempts||Infinity);this.reconnectionDelay(opts.reconnectionDelay||1e3);this.reconnectionDelayMax(opts.reconnectionDelayMax||5e3);this.randomizationFactor(opts.randomizationFactor||.5);this.backoff=new Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()});this.timeout(null==opts.timeout?2e4:opts.timeout);this.readyState="closed";this.uri=uri;this.connecting=[];this.lastPing=null;this.encoding=false;this.packetBuffer=[];var _parser=opts.parser||parser;this.encoder=new _parser.Encoder;this.decoder=new _parser.Decoder;this.autoConnect=opts.autoConnect!==false;if(this.autoConnect)this.open()}Manager.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var nsp in this.nsps){if(has.call(this.nsps,nsp)){this.nsps[nsp].emit.apply(this.nsps[nsp],arguments)}}};Manager.prototype.updateSocketIds=function(){for(var nsp in this.nsps){if(has.call(this.nsps,nsp)){this.nsps[nsp].id=this.generateId(nsp)}}};Manager.prototype.generateId=function(nsp){return(nsp==="/"?"":nsp+"#")+this.engine.id};Emitter(Manager.prototype);Manager.prototype.reconnection=function(v){if(!arguments.length)return this._reconnection;this._reconnection=!!v;return this};Manager.prototype.reconnectionAttempts=function(v){if(!arguments.length)return this._reconnectionAttempts;this._reconnectionAttempts=v;return this};Manager.prototype.reconnectionDelay=function(v){if(!arguments.length)return this._reconnectionDelay;this._reconnectionDelay=v;this.backoff&&this.backoff.setMin(v);return this};Manager.prototype.randomizationFactor=function(v){if(!arguments.length)return this._randomizationFactor;this._randomizationFactor=v;this.backoff&&this.backoff.setJitter(v);return this};Manager.prototype.reconnectionDelayMax=function(v){if(!arguments.length)return this._reconnectionDelayMax;this._reconnectionDelayMax=v;this.backoff&&this.backoff.setMax(v);return this};Manager.prototype.timeout=function(v){if(!arguments.length)return this._timeout;this._timeout=v;return this};Manager.prototype.maybeReconnectOnOpen=function(){if(!this.reconnecting&&this._reconnection&&this.backoff.attempts===0){this.reconnect()}};Manager.prototype.open=Manager.prototype.connect=function(fn,opts){debug("readyState %s",this.readyState);if(~this.readyState.indexOf("open"))return this;debug("opening %s",this.uri);this.engine=eio(this.uri,this.opts);var socket=this.engine;var self=this;this.readyState="opening";this.skipReconnect=false;var openSub=on(socket,"open",(function(){self.onopen();fn&&fn()}));var errorSub=on(socket,"error",(function(data){debug("connect_error");self.cleanup();self.readyState="closed";self.emitAll("connect_error",data);if(fn){var err=new Error("Connection error");err.data=data;fn(err)}else{self.maybeReconnectOnOpen()}}));if(false!==this._timeout){var timeout=this._timeout;debug("connect attempt will timeout after %d",timeout);if(timeout===0){openSub.destroy()}var timer=setTimeout((function(){debug("connect attempt timed out after %d",timeout);openSub.destroy();socket.close();socket.emit("error","timeout");self.emitAll("connect_timeout",timeout)}),timeout);this.subs.push({destroy:function(){clearTimeout(timer)}})}this.subs.push(openSub);this.subs.push(errorSub);return this};Manager.prototype.onopen=function(){debug("open");this.cleanup();this.readyState="open";this.emit("open");var socket=this.engine;this.subs.push(on(socket,"data",bind(this,"ondata")));this.subs.push(on(socket,"ping",bind(this,"onping")));this.subs.push(on(socket,"pong",bind(this,"onpong")));this.subs.push(on(socket,"error",bind(this,"onerror")));this.subs.push(on(socket,"close",bind(this,"onclose")));this.subs.push(on(this.decoder,"decoded",bind(this,"ondecoded")))};Manager.prototype.onping=function(){this.lastPing=new Date;this.emitAll("ping")};Manager.prototype.onpong=function(){this.emitAll("pong",new Date-this.lastPing)};Manager.prototype.ondata=function(data){this.decoder.add(data)};Manager.prototype.ondecoded=function(packet){this.emit("packet",packet)};Manager.prototype.onerror=function(err){debug("error",err);this.emitAll("error",err)};Manager.prototype.socket=function(nsp,opts){var socket=this.nsps[nsp];if(!socket){socket=new Socket(this,nsp,opts);this.nsps[nsp]=socket;var self=this;socket.on("connecting",onConnecting);socket.on("connect",(function(){socket.id=self.generateId(nsp)}));if(this.autoConnect){onConnecting()}}function onConnecting(){if(!~indexOf(self.connecting,socket)){self.connecting.push(socket)}}return socket};Manager.prototype.destroy=function(socket){var index=indexOf(this.connecting,socket);if(~index)this.connecting.splice(index,1);if(this.connecting.length)return;this.close()};Manager.prototype.packet=function(packet){debug("writing packet %j",packet);var self=this;if(packet.query&&packet.type===0)packet.nsp+="?"+packet.query;if(!self.encoding){self.encoding=true;this.encoder.encode(packet,(function(encodedPackets){for(var i=0;i0&&!this.encoding){var pack=this.packetBuffer.shift();this.packet(pack)}};Manager.prototype.cleanup=function(){debug("cleanup");var subsLength=this.subs.length;for(var i=0;i=this._reconnectionAttempts){debug("reconnect failed");this.backoff.reset();this.emitAll("reconnect_failed");this.reconnecting=false}else{var delay=this.backoff.duration();debug("will wait %dms before reconnect attempt",delay);this.reconnecting=true;var timer=setTimeout((function(){if(self.skipReconnect)return;debug("attempting reconnect");self.emitAll("reconnect_attempt",self.backoff.attempts);self.emitAll("reconnecting",self.backoff.attempts);if(self.skipReconnect)return;self.open((function(err){if(err){debug("reconnect attempt error");self.reconnecting=false;self.reconnect();self.emitAll("reconnect_error",err.data)}else{debug("reconnect success");self.onreconnect()}}))}),delay);this.subs.push({destroy:function(){clearTimeout(timer)}})}};Manager.prototype.onreconnect=function(){var attempt=this.backoff.attempts;this.reconnecting=false;this.backoff.reset();this.updateSocketIds();this.emitAll("reconnect",attempt)}},{"./on":202,"./socket":203,backo2:30,"component-bind":60,"component-emitter":61,debug:205,"engine.io-client":65,indexof:101,"socket.io-parser":209}],202:[function(require,module,exports){module.exports=on;function on(obj,ev,fn){obj.on(ev,fn);return{destroy:function(){obj.removeListener(ev,fn)}}}},{}],203:[function(require,module,exports){var parser=require("socket.io-parser");var Emitter=require("component-emitter");var toArray=require("to-array");var on=require("./on");var bind=require("component-bind");var debug=require("debug")("socket.io-client:socket");var parseqs=require("parseqs");var hasBin=require("has-binary2");module.exports=exports=Socket;var events={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1};var emit=Emitter.prototype.emit;function Socket(io,nsp,opts){this.io=io;this.nsp=nsp;this.json=this;this.ids=0;this.acks={};this.receiveBuffer=[];this.sendBuffer=[];this.connected=false;this.disconnected=true;this.flags={};if(opts&&opts.query){this.query=opts.query}if(this.io.autoConnect)this.open()}Emitter(Socket.prototype);Socket.prototype.subEvents=function(){if(this.subs)return;var io=this.io;this.subs=[on(io,"open",bind(this,"onopen")),on(io,"packet",bind(this,"onpacket")),on(io,"close",bind(this,"onclose"))]};Socket.prototype.open=Socket.prototype.connect=function(){if(this.connected)return this;this.subEvents();if(!this.io.reconnecting)this.io.open();if("open"===this.io.readyState)this.onopen();this.emit("connecting");return this};Socket.prototype.send=function(){var args=toArray(arguments);args.unshift("message");this.emit.apply(this,args);return this};Socket.prototype.emit=function(ev){if(events.hasOwnProperty(ev)){emit.apply(this,arguments);return this}var args=toArray(arguments);var packet={type:(this.flags.binary!==undefined?this.flags.binary:hasBin(args))?parser.BINARY_EVENT:parser.EVENT,data:args};packet.options={};packet.options.compress=!this.flags||false!==this.flags.compress;if("function"===typeof args[args.length-1]){debug("emitting packet with ack id %d",this.ids);this.acks[this.ids]=args.pop();packet.id=this.ids++}if(this.connected){this.packet(packet)}else{this.sendBuffer.push(packet)}this.flags={};return this};Socket.prototype.packet=function(packet){packet.nsp=this.nsp;this.io.packet(packet)};Socket.prototype.onopen=function(){debug("transport is open - connecting");if("/"!==this.nsp){if(this.query){var query=typeof this.query==="object"?parseqs.encode(this.query):this.query;debug("sending connect packet with query %s",query);this.packet({type:parser.CONNECT,query:query})}else{this.packet({type:parser.CONNECT})}}};Socket.prototype.onclose=function(reason){debug("close (%s)",reason);this.connected=false;this.disconnected=true;delete this.id;this.emit("disconnect",reason)};Socket.prototype.onpacket=function(packet){var sameNamespace=packet.nsp===this.nsp;var rootNamespaceError=packet.type===parser.ERROR&&packet.nsp==="/";if(!sameNamespace&&!rootNamespaceError)return;switch(packet.type){case parser.CONNECT:this.onconnect();break;case parser.EVENT:this.onevent(packet);break;case parser.BINARY_EVENT:this.onevent(packet);break;case parser.ACK:this.onack(packet);break;case parser.BINARY_ACK:this.onack(packet);break;case parser.DISCONNECT:this.ondisconnect();break;case parser.ERROR:this.emit("error",packet.data);break}};Socket.prototype.onevent=function(packet){var args=packet.data||[];debug("emitting event %j",args);if(null!=packet.id){debug("attaching ack callback to event");args.push(this.ack(packet.id))}if(this.connected){emit.apply(this,args)}else{this.receiveBuffer.push(args)}};Socket.prototype.ack=function(id){var self=this;var sent=false;return function(){if(sent)return;sent=true;var args=toArray(arguments);debug("sending ack %j",args);self.packet({type:hasBin(args)?parser.BINARY_ACK:parser.ACK,id:id,data:args})}};Socket.prototype.onack=function(packet){var ack=this.acks[packet.id];if("function"===typeof ack){debug("calling ack %s with %j",packet.id,packet.data);ack.apply(this,packet.data);delete this.acks[packet.id]}else{debug("bad ack %s",packet.id)}};Socket.prototype.onconnect=function(){this.connected=true;this.disconnected=false;this.emitBuffered();this.emit("connect")};Socket.prototype.emitBuffered=function(){var i;for(i=0;i=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}exports.formatters.j=function(v){try{return JSON.stringify(v)}catch(err){return"[UnexpectedJSONParseError]: "+err.message}};function formatArgs(args){var useColors=this.useColors;args[0]=(useColors?"%c":"")+this.namespace+(useColors?" %c":" ")+args[0]+(useColors?"%c ":" ")+"+"+exports.humanize(this.diff);if(!useColors)return;var c="color: "+this.color;args.splice(1,0,c,"color: inherit");var index=0;var lastC=0;args[0].replace(/%[a-zA-Z%]/g,(function(match){if("%%"===match)return;index++;if("%c"===match){lastC=index}}));args.splice(lastC,0,c)}function log(){return"object"===typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(namespaces){try{if(null==namespaces){exports.storage.removeItem("debug")}else{exports.storage.debug=namespaces}}catch(e){}}function load(){var r;try{r=exports.storage.debug}catch(e){}if(!r&&typeof process!=="undefined"&&"env"in process){r=process.env.DEBUG}return r}exports.enable(load());function localstorage(){try{return window.localStorage}catch(e){}}}).call(this)}).call(this,require("_process"))},{"./debug":206,_process:160}],206:[function(require,module,exports){arguments[4][75][0].apply(exports,arguments)},{dup:75,ms:207}],207:[function(require,module,exports){arguments[4][76][0].apply(exports,arguments)},{dup:76}],208:[function(require,module,exports){var isArray=require("isarray");var isBuf=require("./is-buffer");var toString=Object.prototype.toString;var withNativeBlob=typeof Blob==="function"||typeof Blob!=="undefined"&&toString.call(Blob)==="[object BlobConstructor]";var withNativeFile=typeof File==="function"||typeof File!=="undefined"&&toString.call(File)==="[object FileConstructor]";exports.deconstructPacket=function(packet){var buffers=[];var packetData=packet.data;var pack=packet;pack.data=_deconstructPacket(packetData,buffers);pack.attachments=buffers.length;return{packet:pack,buffers:buffers}};function _deconstructPacket(data,buffers){if(!data)return data;if(isBuf(data)){var placeholder={_placeholder:true,num:buffers.length};buffers.push(data);return placeholder}else if(isArray(data)){var newData=new Array(data.length);for(var i=0;i=0&&data.num=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}exports.formatters.j=function(v){try{return JSON.stringify(v)}catch(err){return"[UnexpectedJSONParseError]: "+err.message}};function formatArgs(args){var useColors=this.useColors;args[0]=(useColors?"%c":"")+this.namespace+(useColors?" %c":" ")+args[0]+(useColors?"%c ":" ")+"+"+exports.humanize(this.diff);if(!useColors)return;var c="color: "+this.color;args.splice(1,0,c,"color: inherit");var index=0;var lastC=0;args[0].replace(/%[a-zA-Z%]/g,(function(match){if("%%"===match)return;index++;if("%c"===match){lastC=index}}));args.splice(lastC,0,c)}function log(){return"object"===typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(namespaces){try{if(null==namespaces){exports.storage.removeItem("debug")}else{exports.storage.debug=namespaces}}catch(e){}}function load(){var r;try{r=exports.storage.debug}catch(e){}if(!r&&typeof process!=="undefined"&&"env"in process){r=process.env.DEBUG}return r}exports.enable(load());function localstorage(){try{return window.localStorage}catch(e){}}}).call(this)}).call(this,require("_process"))},{"./debug":212,_process:160}],212:[function(require,module,exports){arguments[4][75][0].apply(exports,arguments)},{dup:75,ms:214}],213:[function(require,module,exports){arguments[4][90][0].apply(exports,arguments)},{dup:90}],214:[function(require,module,exports){arguments[4][76][0].apply(exports,arguments)},{dup:76}],215:[function(require,module,exports){var fastSafeStringify=require("fast-safe-stringify");var copy=require("clipboard-copy");function tryStringify(obj){try{return JSON.stringify(obj)}catch(e){}}function stateCopy(obj){var str=tryStringify(obj)||fastSafeStringify(obj);copy(str)}module.exports=stateCopy},{"clipboard-copy":52,"fast-safe-stringify":82}],216:[function(require,module,exports){"use strict";var Buffer=require("safe-buffer").Buffer;var isEncoding=Buffer.isEncoding||function(encoding){encoding=""+encoding;switch(encoding&&encoding.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return true;default:return false}};function _normalizeEncoding(enc){if(!enc)return"utf8";var retried;while(true){switch(enc){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return enc;default:if(retried)return;enc=(""+enc).toLowerCase();retried=true}}}function normalizeEncoding(enc){var nenc=_normalizeEncoding(enc);if(typeof nenc!=="string"&&(Buffer.isEncoding===isEncoding||!isEncoding(enc)))throw new Error("Unknown encoding: "+enc);return nenc||enc}exports.StringDecoder=StringDecoder;function StringDecoder(encoding){this.encoding=normalizeEncoding(encoding);var nb;switch(this.encoding){case"utf16le":this.text=utf16Text;this.end=utf16End;nb=4;break;case"utf8":this.fillLast=utf8FillLast;nb=4;break;case"base64":this.text=base64Text;this.end=base64End;nb=3;break;default:this.write=simpleWrite;this.end=simpleEnd;return}this.lastNeed=0;this.lastTotal=0;this.lastChar=Buffer.allocUnsafe(nb)}StringDecoder.prototype.write=function(buf){if(buf.length===0)return"";var r;var i;if(this.lastNeed){r=this.fillLast(buf);if(r===undefined)return"";i=this.lastNeed;this.lastNeed=0}else{i=0}if(i>5===6)return 2;else if(byte>>4===14)return 3;else if(byte>>3===30)return 4;return byte>>6===2?-1:-2}function utf8CheckIncomplete(self,buf,i){var j=buf.length-1;if(j=0){if(nb>0)self.lastNeed=nb-1;return nb}if(--j=0){if(nb>0)self.lastNeed=nb-2;return nb}if(--j=0){if(nb>0){if(nb===2)nb=0;else self.lastNeed=nb-3}return nb}return 0}function utf8CheckExtraBytes(self,buf,p){if((buf[0]&192)!==128){self.lastNeed=0;return"�"}if(self.lastNeed>1&&buf.length>1){if((buf[1]&192)!==128){self.lastNeed=1;return"�"}if(self.lastNeed>2&&buf.length>2){if((buf[2]&192)!==128){self.lastNeed=2;return"�"}}}}function utf8FillLast(buf){var p=this.lastTotal-this.lastNeed;var r=utf8CheckExtraBytes(this,buf,p);if(r!==undefined)return r;if(this.lastNeed<=buf.length){buf.copy(this.lastChar,p,0,this.lastNeed);return this.lastChar.toString(this.encoding,0,this.lastTotal)}buf.copy(this.lastChar,p,0,buf.length);this.lastNeed-=buf.length}function utf8Text(buf,i){var total=utf8CheckIncomplete(this,buf,i);if(!this.lastNeed)return buf.toString("utf8",i);this.lastTotal=total;var end=buf.length-(total-this.lastNeed);buf.copy(this.lastChar,0,end);return buf.toString("utf8",i,end)}function utf8End(buf){var r=buf&&buf.length?this.write(buf):"";if(this.lastNeed)return r+"�";return r}function utf16Text(buf,i){if((buf.length-i)%2===0){var r=buf.toString("utf16le",i);if(r){var c=r.charCodeAt(r.length-1);if(c>=55296&&c<=56319){this.lastNeed=2;this.lastTotal=4;this.lastChar[0]=buf[buf.length-2];this.lastChar[1]=buf[buf.length-1];return r.slice(0,-1)}}return r}this.lastNeed=1;this.lastTotal=2;this.lastChar[0]=buf[buf.length-1];return buf.toString("utf16le",i,buf.length-1)}function utf16End(buf){var r=buf&&buf.length?this.write(buf):"";if(this.lastNeed){var end=this.lastTotal-this.lastNeed;return r+this.lastChar.toString("utf16le",0,end)}return r}function base64Text(buf,i){var n=(buf.length-i)%3;if(n===0)return buf.toString("base64",i);this.lastNeed=3-n;this.lastTotal=3;if(n===1){this.lastChar[0]=buf[buf.length-1]}else{this.lastChar[0]=buf[buf.length-2];this.lastChar[1]=buf[buf.length-1]}return buf.toString("base64",i,buf.length-n)}function base64End(buf){var r=buf&&buf.length?this.write(buf):"";if(this.lastNeed)return r+this.lastChar.toString("base64",0,3-this.lastNeed);return r}function simpleWrite(buf){return buf.toString(this.encoding)}function simpleEnd(buf){return buf&&buf.length?this.write(buf):""}},{"safe-buffer":169}],217:[function(require,module,exports){"use strict";function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i0||string_ instanceof Object)?parse(string_):null};Response.prototype.toError=function(){var req=this.req;var method=req.method;var url=req.url;var message="cannot ".concat(method," ").concat(url," (").concat(this.status,")");var error=new Error(message);error.status=this.status;error.method=method;error.url=url;return error};request.Response=Response;function Request(method,url){var self=this;this._query=this._query||[];this.method=method;this.url=url;this.header={};this._header={};this.on("end",(function(){var error=null;var res=null;try{res=new Response(self)}catch(err){error=new Error("Parser is unable to parse the response");error.parse=true;error.original=err;if(self.xhr){error.rawResponse=typeof self.xhr.responseType==="undefined"?self.xhr.responseText:self.xhr.response;error.status=self.xhr.status?self.xhr.status:null;error.statusCode=error.status}else{error.rawResponse=null;error.status=null}return self.callback(error)}self.emit("response",res);var new_error;try{if(!self._isResponseOK(res)){new_error=new Error(res.statusText||res.text||"Unsuccessful HTTP response")}}catch(err){new_error=err}if(new_error){new_error.original=error;new_error.response=res;new_error.status=res.status;self.callback(new_error,res)}else{self.callback(null,res)}}))}Emitter(Request.prototype);mixin(Request.prototype,RequestBase.prototype);Request.prototype.type=function(type){this.set("Content-Type",request.types[type]||type);return this};Request.prototype.accept=function(type){this.set("Accept",request.types[type]||type);return this};Request.prototype.auth=function(user,pass,options){if(arguments.length===1)pass="";if(_typeof(pass)==="object"&&pass!==null){options=pass;pass=""}if(!options){options={type:typeof btoa==="function"?"basic":"auto"}}var encoder=options.encoder?options.encoder:function(string){if(typeof btoa==="function"){return btoa(string)}throw new Error("Cannot use basic auth, btoa is not a function")};return this._auth(user,pass,options,encoder)};Request.prototype.query=function(value){if(typeof value!=="string")value=serialize(value);if(value)this._query.push(value);return this};Request.prototype.attach=function(field,file,options){if(file){if(this._data){throw new Error("superagent can't mix .send() and .attach()")}this._getFormData().append(field,file,options||file.name)}return this};Request.prototype._getFormData=function(){if(!this._formData){this._formData=new root.FormData}return this._formData};Request.prototype.callback=function(error,res){if(this._shouldRetry(error,res)){return this._retry()}var fn=this._callback;this.clearTimeout();if(error){if(this._maxRetries)error.retries=this._retries-1;this.emit("error",error)}fn(error,res)};Request.prototype.crossDomainError=function(){var error=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");error.crossDomain=true;error.status=this.status;error.method=this.method;error.url=this.url;this.callback(error)};Request.prototype.agent=function(){console.warn("This is not supported in browser version of superagent");return this};Request.prototype.ca=Request.prototype.agent;Request.prototype.buffer=Request.prototype.ca;Request.prototype.write=function(){throw new Error("Streaming is not supported in browser version of superagent")};Request.prototype.pipe=Request.prototype.write;Request.prototype._isHost=function(object){return object&&_typeof(object)==="object"&&!Array.isArray(object)&&Object.prototype.toString.call(object)!=="[object Object]"};Request.prototype.end=function(fn){if(this._endCalled){console.warn("Warning: .end() was called twice. This is not supported in superagent")}this._endCalled=true;this._callback=fn||noop;this._finalizeQueryString();this._end()};Request.prototype._setUploadTimeout=function(){var self=this;if(this._uploadTimeout&&!this._uploadTimeoutTimer){this._uploadTimeoutTimer=setTimeout((function(){self._timeoutError("Upload timeout of ",self._uploadTimeout,"ETIMEDOUT")}),this._uploadTimeout)}};Request.prototype._end=function(){if(this._aborted)return this.callback(new Error("The request has been aborted even before .end() was called"));var self=this;this.xhr=request.getXHR();var xhr=this.xhr;var data=this._formData||this._data;this._setTimeouts();xhr.addEventListener("readystatechange",(function(){var readyState=xhr.readyState;if(readyState>=2&&self._responseTimeoutTimer){clearTimeout(self._responseTimeoutTimer)}if(readyState!==4){return}var status;try{status=xhr.status}catch(_unused5){status=0}if(!status){if(self.timedout||self._aborted)return;return self.crossDomainError()}self.emit("end")}));var handleProgress=function handleProgress(direction,e){if(e.total>0){e.percent=e.loaded/e.total*100;if(e.percent===100){clearTimeout(self._uploadTimeoutTimer)}}e.direction=direction;self.emit("progress",e)};if(this.hasListeners("progress")){try{xhr.addEventListener("progress",handleProgress.bind(null,"download"));if(xhr.upload){xhr.upload.addEventListener("progress",handleProgress.bind(null,"upload"))}}catch(_unused6){}}if(xhr.upload){this._setUploadTimeout()}try{if(this.username&&this.password){xhr.open(this.method,this.url,true,this.username,this.password)}else{xhr.open(this.method,this.url,true)}}catch(err){return this.callback(err)}if(this._withCredentials)xhr.withCredentials=true;if(!this._formData&&this.method!=="GET"&&this.method!=="HEAD"&&typeof data!=="string"&&!this._isHost(data)){var contentType=this._header["content-type"];var _serialize=this._serializer||request.serialize[contentType?contentType.split(";")[0]:""];if(!_serialize&&isJSON(contentType)){_serialize=request.serialize["application/json"]}if(_serialize)data=_serialize(data)}for(var field in this.header){if(this.header[field]===null)continue;if(hasOwn(this.header,field))xhr.setRequestHeader(field,this.header[field])}if(this._responseType){xhr.responseType=this._responseType}this.emit("request",this);xhr.send(typeof data==="undefined"?null:data)};request.agent=function(){return new Agent};var _loop=function _loop(){var method=_arr[_i];Agent.prototype[method.toLowerCase()]=function(url,fn){var request_=new request.Request(method,url);this._setDefaults(request_);if(fn){request_.end(fn)}return request_}};for(var _i=0,_arr=["GET","POST","OPTIONS","PATCH","PUT","DELETE"];_i<_arr.length;_i++){_loop()}Agent.prototype.del=Agent.prototype.delete;request.get=function(url,data,fn){var request_=request("GET",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.query(data);if(fn)request_.end(fn);return request_};request.head=function(url,data,fn){var request_=request("HEAD",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.query(data);if(fn)request_.end(fn);return request_};request.options=function(url,data,fn){var request_=request("OPTIONS",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.send(data);if(fn)request_.end(fn);return request_};function del(url,data,fn){var request_=request("DELETE",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.send(data);if(fn)request_.end(fn);return request_}request.del=del;request.delete=del;request.patch=function(url,data,fn){var request_=request("PATCH",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.send(data);if(fn)request_.end(fn);return request_};request.post=function(url,data,fn){var request_=request("POST",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.send(data);if(fn)request_.end(fn);return request_};request.put=function(url,data,fn){var request_=request("PUT",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.send(data);if(fn)request_.end(fn);return request_}},{"./agent-base":217,"./request-base":219,"./response-base":220,"./utils":221,"component-emitter":61,"fast-safe-stringify":82,qs:162}],219:[function(require,module,exports){(function(process){(function(){"use strict";function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}var semver=require("semver");var _require=require("./utils"),isObject=_require.isObject,hasOwn=_require.hasOwn;module.exports=RequestBase;function RequestBase(){}RequestBase.prototype.clearTimeout=function(){clearTimeout(this._timer);clearTimeout(this._responseTimeoutTimer);clearTimeout(this._uploadTimeoutTimer);delete this._timer;delete this._responseTimeoutTimer;delete this._uploadTimeoutTimer;return this};RequestBase.prototype.parse=function(fn){this._parser=fn;return this};RequestBase.prototype.responseType=function(value){this._responseType=value;return this};RequestBase.prototype.serialize=function(fn){this._serializer=fn;return this};RequestBase.prototype.timeout=function(options){if(!options||_typeof(options)!=="object"){this._timeout=options;this._responseTimeout=0;this._uploadTimeout=0;return this}for(var option in options){if(hasOwn(options,option)){switch(option){case"deadline":this._timeout=options.deadline;break;case"response":this._responseTimeout=options.response;break;case"upload":this._uploadTimeout=options.upload;break;default:console.warn("Unknown timeout option",option)}}}return this};RequestBase.prototype.retry=function(count,fn){if(arguments.length===0||count===true)count=1;if(count<=0)count=0;this._maxRetries=count;this._retries=0;this._retryCallback=fn;return this};var ERROR_CODES=new Set(["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"]);var STATUS_CODES=new Set([408,413,429,500,502,503,504,521,522,524]);RequestBase.prototype._shouldRetry=function(error,res){if(!this._maxRetries||this._retries++>=this._maxRetries){return false}if(this._retryCallback){try{var override=this._retryCallback(error,res);if(override===true)return true;if(override===false)return false}catch(err){console.error(err)}}if(res&&res.status&&STATUS_CODES.has(res.status))return true;if(error){if(error.code&&ERROR_CODES.has(error.code))return true;if(error.timeout&&error.code==="ECONNABORTED")return true;if(error.crossDomain)return true}return false};RequestBase.prototype._retry=function(){this.clearTimeout();if(this.req){this.req=null;this.req=this.request()}this._aborted=false;this.timedout=false;this.timedoutError=null;return this._end()};RequestBase.prototype.then=function(resolve,reject){var _this=this;if(!this._fullfilledPromise){var self=this;if(this._endCalled){console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises")}this._fullfilledPromise=new Promise((function(resolve,reject){self.on("abort",(function(){if(_this._maxRetries&&_this._maxRetries>_this._retries){return}if(_this.timedout&&_this.timedoutError){reject(_this.timedoutError);return}var error=new Error("Aborted");error.code="ABORTED";error.status=_this.status;error.method=_this.method;error.url=_this.url;reject(error)}));self.end((function(error,res){if(error)reject(error);else resolve(res)}))}))}return this._fullfilledPromise.then(resolve,reject)};RequestBase.prototype.catch=function(callback){return this.then(undefined,callback)};RequestBase.prototype.use=function(fn){fn(this);return this};RequestBase.prototype.ok=function(callback){if(typeof callback!=="function")throw new Error("Callback required");this._okCallback=callback;return this};RequestBase.prototype._isResponseOK=function(res){if(!res){return false}if(this._okCallback){return this._okCallback(res)}return res.status>=200&&res.status<300};RequestBase.prototype.get=function(field){return this._header[field.toLowerCase()]};RequestBase.prototype.getHeader=RequestBase.prototype.get;RequestBase.prototype.set=function(field,value){if(isObject(field)){for(var key in field){if(hasOwn(field,key))this.set(key,field[key])}return this}this._header[field.toLowerCase()]=value;this.header[field]=value;return this};RequestBase.prototype.unset=function(field){delete this._header[field.toLowerCase()];delete this.header[field];return this};RequestBase.prototype.field=function(name,value,options){if(name===null||undefined===name){throw new Error(".field(name, val) name can not be empty")}if(this._data){throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()")}if(isObject(name)){for(var key in name){if(hasOwn(name,key))this.field(key,name[key])}return this}if(Array.isArray(value)){for(var i in value){if(hasOwn(value,i))this.field(name,value[i])}return this}if(value===null||undefined===value){throw new Error(".field(name, val) val can not be empty")}if(typeof value==="boolean"){value=String(value)}if(options)this._getFormData().append(name,value,options);else this._getFormData().append(name,value);return this};RequestBase.prototype.abort=function(){if(this._aborted){return this}this._aborted=true;if(this.xhr)this.xhr.abort();if(this.req){if(semver.gte(process.version,"v13.0.0")&&semver.lt(process.version,"v14.0.0")){throw new Error("Superagent does not work in v13 properly with abort() due to Node.js core changes")}else if(semver.gte(process.version,"v14.0.0")){this.req.destroyed=true}this.req.abort()}this.clearTimeout();this.emit("abort");return this};RequestBase.prototype._auth=function(user,pass,options,base64Encoder){switch(options.type){case"basic":this.set("Authorization","Basic ".concat(base64Encoder("".concat(user,":").concat(pass))));break;case"auto":this.username=user;this.password=pass;break;case"bearer":this.set("Authorization","Bearer ".concat(user));break;default:break}return this};RequestBase.prototype.withCredentials=function(on){if(on===undefined)on=true;this._withCredentials=on;return this};RequestBase.prototype.redirects=function(n){this._maxRedirects=n;return this};RequestBase.prototype.maxResponseSize=function(n){if(typeof n!=="number"){throw new TypeError("Invalid argument")}this._maxResponseSize=n;return this};RequestBase.prototype.toJSON=function(){return{method:this.method,url:this.url,data:this._data,headers:this._header}};RequestBase.prototype.send=function(data){var isObject_=isObject(data);var type=this._header["content-type"];if(this._formData){throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()")}if(isObject_&&!this._data){if(Array.isArray(data)){this._data=[]}else if(!this._isHost(data)){this._data={}}}else if(data&&this._data&&this._isHost(this._data)){throw new Error("Can't merge these send calls")}if(isObject_&&isObject(this._data)){for(var key in data){if(hasOwn(data,key))this._data[key]=data[key]}}else if(typeof data==="string"){if(!type)this.type("form");type=this._header["content-type"];if(type)type=type.toLowerCase().trim();if(type==="application/x-www-form-urlencoded"){this._data=this._data?"".concat(this._data,"&").concat(data):data}else{this._data=(this._data||"")+data}}else{this._data=data}if(!isObject_||this._isHost(data)){return this}if(!type)this.type("json");return this};RequestBase.prototype.sortQuery=function(sort){this._sort=typeof sort==="undefined"?true:sort;return this};RequestBase.prototype._finalizeQueryString=function(){var query=this._query.join("&");if(query){this.url+=(this.url.includes("?")?"&":"?")+query}this._query.length=0;if(this._sort){var index=this.url.indexOf("?");if(index>=0){var queryArray=this.url.slice(index+1).split("&");if(typeof this._sort==="function"){queryArray.sort(this._sort)}else{queryArray.sort()}this.url=this.url.slice(0,index)+"?"+queryArray.join("&")}}};RequestBase.prototype._appendQueryString=function(){console.warn("Unsupported")};RequestBase.prototype._timeoutError=function(reason,timeout,errno){if(this._aborted){return}var error=new Error("".concat(reason+timeout,"ms exceeded"));error.timeout=timeout;error.code="ECONNABORTED";error.errno=errno;this.timedout=true;this.timedoutError=error;this.abort();this.callback(error)};RequestBase.prototype._setTimeouts=function(){var self=this;if(this._timeout&&!this._timer){this._timer=setTimeout((function(){self._timeoutError("Timeout of ",self._timeout,"ETIME")}),this._timeout)}if(this._responseTimeout&&!this._responseTimeoutTimer){this._responseTimeoutTimer=setTimeout((function(){self._timeoutError("Response timeout of ",self._responseTimeout,"ETIMEDOUT")}),this._responseTimeout)}}}).call(this)}).call(this,require("_process"))},{"./utils":221,_process:160,semver:34}],220:[function(require,module,exports){"use strict";var utils=require("./utils");module.exports=ResponseBase;function ResponseBase(){}ResponseBase.prototype.get=function(field){return this.header[field.toLowerCase()]};ResponseBase.prototype._setHeaderProperties=function(header){var ct=header["content-type"]||"";this.type=utils.type(ct);var parameters=utils.params(ct);for(var key in parameters){if(Object.prototype.hasOwnProperty.call(parameters,key))this[key]=parameters[key]}this.links={};try{if(header.link){this.links=utils.parseLinks(header.link)}}catch(_unused){}};ResponseBase.prototype._setStatusProperties=function(status){var type=Math.trunc(status/100);this.statusCode=status;this.status=this.statusCode;this.statusType=type;this.info=type===1;this.ok=type===2;this.redirect=type===3;this.clientError=type===4;this.serverError=type===5;this.error=type===4||type===5?this.toError():false;this.created=status===201;this.accepted=status===202;this.noContent=status===204;this.badRequest=status===400;this.unauthorized=status===401;this.notAcceptable=status===406;this.forbidden=status===403;this.notFound=status===404;this.unprocessableEntity=status===422}},{"./utils":221}],221:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i0);return encoded}function decode(str){var decoded=0;for(i=0;i{p.setup=()=>{p.createCanvas(width,height,p[mode])};p.draw=()=>{}}),"hydra-ui");this.width=width;this.height=height;this.mode=mode;this.canvas.style.position="absolute";this.canvas.style.top="0px";this.canvas.style.left="0px";this.canvas.style.zIndex=-1}show(){this.canvas.style.visibility="visible"}hide(){this.canvas.style.visibility="hidden"}clear(){this.drawingContext.clearRect(0,0,this.canvas.width,this.canvas.height)}}module.exports=P5},{}],229:[function(require,module,exports){var PatchBay=require("./rtc-patch-bay.js");var inherits=require("inherits");var PBLive=function(){this.session={};this.nickFromId={};this.idFromNick={};this.loadFromStorage()};inherits(PBLive,PatchBay);PBLive.prototype.init=function(stream,opts){this.settings={server:opts.server||"https://patch-bay.glitch.me/",room:opts.room||"patch-bay",stream:stream};this.makeGlobal=opts.makeGlobal||true;this.setPageTitle=opts.setTitle||true;if(this.session.id)this.settings.id=this.session.id;PatchBay.call(this,this.settings);if(this.makeGlobal)window.pb=this;this.on("ready",(()=>{if(!this.nick){if(this.session.nick){this.setName(this.session.nick)}else{this.session.id=this.id;this.setName(this.session.id)}}}));this.on("broadcast",this._processBroadcast.bind(this));this.on("new peer",this.handleNewPeer.bind(this));window.onbeforeunload=()=>{this.session.id=window.pb.id;this.session.nick=this.nick;sessionStorage.setItem("pb",JSON.stringify(this.session))};var self=this;this.on("stream",(function(id,stream){console.log("got stream!",id,stream);const video=document.createElement("video");if("srcObject"in video){video.srcObject=stream}else{video.src=window.URL.createObjectURL(stream)}video.addEventListener("loadedmetadata",(()=>{video.play();self.video=video;self.emit("got video",self.nickFromId[id],video)}))}))};PBLive.prototype.loadFromStorage=function(){if(sessionStorage.getItem("pb")!==null){this.session=JSON.parse(sessionStorage.getItem("pb"))}};PBLive.prototype.initSource=function(nick,callback){this.initConnectionFromId(this.idFromNick[nick],callback)};PBLive.prototype.handleNewPeer=function(peer){this.nickFromId[peer]=peer;this.idFromNick[peer]=peer;if(this.nick){this.broadcast({type:"update-nick",id:this.id,nick:this.nick})}};PBLive.prototype.list=function(){var l=Object.keys(this.idFromNick);console.log(l);return Object.keys(this.idFromNick)};PBLive.prototype.setName=function(nick){this.broadcast({type:"update-nick",id:this.id,nick:nick,previous:this.nick});this.nick=nick;if(this.setPageTitle)document.title=nick};PBLive.prototype._processBroadcast=function(data){if(data.type==="update-nick"){if(data.previous!==data.nick){delete this.idFromNick[this.nickFromId[data.id]];this.nickFromId[data.id]=data.nick;this.idFromNick[data.nick]=data.id;if(data.previous){}else{}}}};module.exports=PBLive},{"./rtc-patch-bay.js":230,inherits:102}],230:[function(require,module,exports){var io=require("socket.io-client");var SimplePeer=require("simple-peer");var extend=Object.assign;var events=require("events").EventEmitter;var inherits=require("inherits");const shortid=require("shortid");var PatchBay=function(options){this.signaller=io(options.server);this.id=options.id||shortid.generate();this.stream=options.stream||null;this._peerOptions=options.peerOptions||{};this._room=options.room;this.settings["shareMediaWhenRequested"]=true;this.settings["shareMediaWhenInitiating"]=false;this.settings["requestMediaWhenInitiating"]=true;this.settings["autoconnect"]=false;this.peers={};this.rtcPeers={};this.signaller.on("ready",this._readyForSignalling.bind(this));this.signaller.on("message",this._handleMessage.bind(this));this.signaller.on("broadcast",this._receivedBroadcast.bind(this));this.signaller.emit("join",this._room,{uuid:this.id});this.signaller.on("new peer",this._newPeer.bind(this))};inherits(PatchBay,events);PatchBay.prototype.sendToAll=function(data){Object.keys(this.rtcPeers).forEach((function(id){this.rtcPeers[id].send(data)}),this)};PatchBay.prototype.sendToPeer=function(peerId,data){if(peerId in this.rtcPeers){this.rtcPeers[peerId].send(data)}};PatchBay.prototype.reinitAll=function(){Object.keys(this.rtcPeers).forEach(function(id){this.reinitPeer(id)}.bind(this))};PatchBay.prototype.initRtcPeer=function(id,opts){this.emit("new peer",{id:id});var newOptions=opts;if(this.iceServers){opts["config"]={iceServers:this.iceServers}}if(opts.initiator===true){if(this.stream!=null){if(this.settings.shareMediaWhenInitiating===true){newOptions.stream=this.stream}}if(this.settings.requestMediaWhenInitiating===true){newOptions.offerConstraints={offerToReceiveVideo:true,offerToReceiveAudio:true}}}else{if(this.settings.shareMediaWhenRequested===true){if(this.stream!=null){newOptions.stream=this.stream}}}var options=extend(this._peerOptions,newOptions);this.rtcPeers[id]=new SimplePeer(options);this._attachPeerEvents(this.rtcPeers[id],id)};PatchBay.prototype.reinitRtcConnection=function(id,opts){this.rtcPeers[id]._destroy(null,function(e){this.initRtcPeer(id,{stream:this.stream,initiator:true})}.bind(this))};PatchBay.prototype._newPeer=function(peer){this.peers[peer]={rtcPeer:null};this.emit("new peer",peer)};PatchBay.prototype._readyForSignalling=function({peers:peers,servers:servers}){peers.forEach((peer=>{this._newPeer(peer)}));if(servers){this.iceServers=servers}this.emit("ready")};PatchBay.prototype.initConnectionFromId=function(id,callback){if(id in this.rtcPeers){console.log("Already connected to..",id,this.rtcPeers);if(this.rtcPeers[id].initiator===false){this.reinitRtcConnection(id)}else{}}else{this.initRtcPeer(id,{initiator:true})}};PatchBay.prototype._handleMessage=function(data){if(data.type==="signal"){this._handleSignal(data)}else{this.emit("message",data)}};PatchBay.prototype._handleSignal=function(data){if(!this.rtcPeers[data.id]){this.initRtcPeer(data.id,{initiator:false})}this.rtcPeers[data.id].signal(data.message)};PatchBay.prototype._receivedBroadcast=function(data){this.emit("broadcast",data)};PatchBay.prototype.broadcast=function(data){this.signaller.emit("broadcast",data)};PatchBay.prototype._attachPeerEvents=function(p,_id){p.on("signal",function(id,signal){this.signaller.emit("message",{id:id,message:signal,type:"signal"})}.bind(this,_id));p.on("stream",function(id,stream){this.rtcPeers[id].stream=stream;this.emit("stream",id,stream)}.bind(this,_id));p.on("connect",function(id){this.emit("connect",id)}.bind(this,_id));p.on("data",function(id,data){this.emit("data",{id:id,data:JSON.parse(data)})}.bind(this,_id));p.on("close",function(id){delete this.rtcPeers[id];this.emit("close",id)}.bind(this,_id));p.on("error",(function(e){console.warn("simple peer error",e)}))};PatchBay.prototype._destroy=function(){Object.values(this.rtcPeers).forEach((function(peer){peer.destroy()}));this.signaller.close()};module.exports=PatchBay},{events:81,inherits:102,shortid:171,"simple-peer":181,"socket.io-client":200}],231:[function(require,module,exports){module.exports=[{sketch_id:"example_0",code:"JTJGJTJGRmxvciUyMGRlJTIwRnVlZ28lMEElMEFzaGFwZSgyMDAlMkMwLjUlMkMxLjUpJTBBLnNjYWxlKDAuNSUyQzAuNSklMEEuY29sb3IoJTVCMC41JTJDMiU1RC5zbW9vdGgoMSklMkMwLjMlMkMwKSUwQS5yZXBlYXQoMiUyQzIpJTBBLm1vZHVsYXRlU2NhbGUob3NjKDMlMkMwLjUpJTJDLTAuNiklMEEuYWRkKG8wJTJDMC41KSUwQS5zY2FsZSgwLjkpJTBBLm91dCgp"},{sketch_id:"example_3",code:"JTJGJTJGJTIwYnklMjBPbGl2aWElMjBKYWNrJTBBJTBBb3NjKDIwJTJDJTIwMC4wMyUyQyUyMDEuNykua2FsZWlkKCkubXVsdChvc2MoMjAlMkMlMjAwLjAwMSUyQyUyMDApLnJvdGF0ZSgxLjU4KSkuYmxlbmQobzAlMkMlMjAwLjk0KS5tb2R1bGF0ZVNjYWxlKG9zYygxMCUyQyUyMDApJTJDLTAuMDMpLnNjYWxlKDAuOCUyQyUyMCgpJTIwJTNEJTNFJTIwKDEuMDUlMjAlMkIlMjAwLjElMjAqJTIwTWF0aC5zaW4oMC4wNSp0aW1lKSkpLm91dChvMCk="},{sketch_id:"example_4",code:"JTJGJTJGJTIwYnklMjBOZWxzb24lMjBWZXJhJTBBJTJGJTJGJTIwdHdpdHRlciUzQSUyMCU0MG5lbF9zb25vbG9naWElMEElMEFvc2MoOCUyQy0wLjUlMkMlMjAxKS5jb2xvcigtMS41JTJDJTIwLTEuNSUyQyUyMC0xLjUpLmJsZW5kKG8wKS5yb3RhdGUoLTAuNSUyQyUyMC0wLjUpLm1vZHVsYXRlKHNoYXBlKDQpLnJvdGF0ZSgwLjUlMkMlMjAwLjUpLnNjYWxlKDIpLnJlcGVhdFgoMiUyQyUyMDIpLm1vZHVsYXRlKG8wJTJDJTIwKCklMjAlM0QlM0UlMjBtb3VzZS54JTIwKiUyMDAuMDAwNSkucmVwZWF0WSgyJTJDJTIwMikpLm91dChvMCklMEElMEElMEElMEElMEElMEE="},{sketch_id:"example_6",code:"JTJGJTJGJTIwYnklMjBEJUMzJUE5Ym9yYSUyMEZhbGxlaXJvcyUyMEdvbnphbGVzJTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZ3d3cuZ29uemFsZXNkZWJvcmEuY29tJTJGJTBBJTBBb3NjKDUpLmFkZChub2lzZSg1JTJDJTIwMikpLmNvbG9yKDAlMkMlMjAwJTJDJTIwMykuY29sb3JhbWEoMC40KS5vdXQoKSUwQSUwQSUwQSUwQQ=="},{sketch_id:"example_8",code:"JTJGJTJGJTIwYnklMjBSb2RyaWdvJTIwVmVsYXNjbyUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGeWVjdG8uZ2l0aHViLmlvJTJGJTBBJTBBb3NjKDEwNyUyQyUyMDAlMkMlMjAwLjcpLmNvbG9yKDElMkMlMjAwJTJDJTIwMSkucm90YXRlKDAlMkMlMjAtMC4wOCkubW9kdWxhdGVSb3RhdGUobzElMkMlMjAwLjQpLm91dChvMCklMEFvc2MoMzMpLnJvdGF0ZSgyJTJDJTIwMC44KS5tb2R1bGF0ZVJvdGF0ZShvMCUyQyUyMCgpJTIwJTNEJTNFJTIwKGEuZmZ0JTVCMCU1RCoyKSkub3V0KG8xKSUwQQ=="},{sketch_id:"example_9",code:"JTJGJTJGJTIwYnklMjBSb2RyaWdvJTIwVmVsYXNjbyUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGeWVjdG8uZ2l0aHViLmlvJTJGJTBBJTBBb3NjKDE4JTJDJTIwMC4xJTJDJTIwMCkuY29sb3IoMiUyQyUyMDAuMSUyQyUyMDIpJTBBLm11bHQob3NjKDIwJTJDJTIwMC4wMSUyQyUyMDApKS5yZXBlYXQoMiUyQyUyMDIwKS5yb3RhdGUoMC41KS5tb2R1bGF0ZShvMSklMEEuc2NhbGUoMSUyQyUyMCgpJTIwJTNEJTNFJTIwJTIwKGEuZmZ0JTVCMCU1RCowLjklMjAlMkIlMjAyKSkuZGlmZihvMSkub3V0KG8wKSUwQW9zYygyMCUyQyUyMDAuMiUyQyUyMDApLmNvbG9yKDIlMkMlMjAwLjclMkMlMjAwLjEpLm11bHQob3NjKDQwKSkubW9kdWxhdGVSb3RhdGUobzAlMkMlMjAwLjIpJTBBLnJvdGF0ZSgwLjIpLm91dChvMSk="},{sketch_id:"example_10",code:"JTJGJTJGJTIwYnklMjBaYWNoJTIwS3JhbGwlMEElMkYlMkYlMjBodHRwJTNBJTJGJTJGemFjaGtyYWxsLm9ubGluZSUyRiUwQSUwQW9zYyglMjAyMTUlMkMlMjAwLjElMkMlMjAyJTIwKSUwQS5tb2R1bGF0ZSglMEElMjAlMjBvc2MoJTIwMiUyQyUyMC0wLjMlMkMlMjAxMDAlMjApJTBBJTIwJTIwLnJvdGF0ZSgxNSklMEEpJTBBLm11bHQoJTBBJTIwJTIwb3NjKCUyMDIxNSUyQyUyMC0wLjElMkMlMjAyKSUwQSUyMCUyMC5waXhlbGF0ZSglMjA1MCUyQyUyMDUwJTIwKSUwQSklMEEuY29sb3IoJTIwMC45JTJDJTIwMC4wJTJDJTIwMC45JTIwKSUwQS5tb2R1bGF0ZSglMEElMjAlMjBvc2MoJTIwNiUyQyUyMC0wLjElMjApJTBBJTIwJTIwLnJvdGF0ZSglMjA5JTIwKSUwQSklMEEuYWRkKCUwQSUyMCUyMG9zYyglMjAxMCUyQyUyMC0wLjklMkMlMjA5MDAlMjApJTBBJTIwJTIwLmNvbG9yKDElMkMwJTJDMSklMEEpJTBBLm11bHQoJTBBJTIwJTIwc2hhcGUoOTAwJTJDJTIwMC4yJTJDJTIwMSklMEElMjAlMjAubHVtYSgpJTBBJTIwJTIwLnJlcGVhdFgoMiklMEElMjAlMjAucmVwZWF0WSgyKSUwQSUyMCUyMC5jb2xvcmFtYSgxMCklMEEpJTBBLm1vZHVsYXRlKCUwQSUyMCUyMG9zYyglMjA5JTJDJTIwLTAuMyUyQyUyMDkwMCUyMCklMEElMjAlMjAucm90YXRlKCUyMDYlMjApJTBBKSUwQS5hZGQoJTBBJTIwJTIwb3NjKDQlMkMlMjAxJTJDJTIwOTApJTBBJTIwJTIwLmNvbG9yKDAuMiUyQzAlMkMxKSUwQSklMEEub3V0KCklMEE="},{sketch_id:"example_11",code:"JTJGJTJGJTIwYnklMjBaYWNoJTIwS3JhbGwlMEElMkYlMkYlMjBodHRwJTNBJTJGJTJGemFjaGtyYWxsLm9ubGluZSUyRiUwQSUwQW9zYygxMCUyQyUyMDAuOSUyQyUyMDMwMCklMEEuY29sb3IoMC45JTJDJTIwMC43JTJDJTIwMC44KSUwQS5kaWZmKCUwQSUyMCUyMG9zYyg0NSUyQyUyMDAuMyUyQyUyMDEwMCklMEElMjAlMjAuY29sb3IoMC45JTJDJTIwMC45JTJDJTIwMC45KSUwQSUyMCUyMC5yb3RhdGUoMC4xOCklMEElMjAlMjAucGl4ZWxhdGUoMTIpJTBBJTIwJTIwLmthbGVpZCgpJTBBKSUwQS5zY3JvbGxYKDEwKSUwQS5jb2xvcmFtYSgpJTBBLmx1bWEoKSUwQS5yZXBlYXRYKDQpJTBBLnJlcGVhdFkoNCklMEEubW9kdWxhdGUoJTBBJTIwJTIwb3NjKDElMkMlMjAtMC45JTJDJTIwMzAwKSUwQSklMEEuc2NhbGUoMiklMEEub3V0KCklMEE="},{sketch_id:"example_13",code:"JTJGJTJGJTIwYWNpZCUyMGJ1cyUyMHNlYXQlMEElMkYlMkYlMjBieSUyMFdpbGwlMjBIdW1waHJleXMlMEElMkYlMkYlMjBodHRwcyUzQSUyRiUyRmdpdGh1Yi5jb20lMkZUaGVXaXNweSUwQSUwQW9zYygxMDUpLmNvbG9yKDAuNSUyQzAuMSUyQzAuOCkucm90YXRlKDAuMTElMkMlMjAwLjEpLm1vZHVsYXRlKG9zYygxMCkucm90YXRlKDAuMykuYWRkKG8wJTJDJTIwMC4xKSkuYWRkKG9zYygyMCUyQzAuMDElMkMxKS5jb2xvcigwJTJDMC44JTJDMSkpLm91dChvMCklMEFvc2MoNTAlMkMwLjA1JTJDJTIwMC43KS5jb2xvcigxJTJDMC43JTJDMC41KS5kaWZmKG8wKS5tb2R1bGF0ZShvMSUyQzAuMDUpLm91dChvMSklMEFyZW5kZXIobzEp"},{sketch_id:"example_14",code:"JTJGJTJGJTIwYnklMjBPbGl2aWElMjBKYWNrJTBBJTJGJTJGJTIwJTQwX29qYWNrXyUwQSUwQW9zYygyMCUyQyUyMDAuMDElMkMlMjAxLjEpJTBBJTA5LmthbGVpZCg1KSUwQSUwOS5jb2xvcigyLjgzJTJDMC45MSUyQzAuMzkpJTBBJTA5LnJvdGF0ZSgwJTJDJTIwMC4xKSUwQSUwOS5tb2R1bGF0ZShvMCUyQyUyMCgpJTIwJTNEJTNFJTIwbW91c2UueCUyMColMjAwLjAwMDMpJTBBJTA5LnNjYWxlKDEuMDEpJTBBJTIwJTIwJTA5Lm91dChvMCk="},{sketch_id:"example_15",code:"JTJGJTJGJTIwYnklMjBPbGl2aWElMjBKYWNrJTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZvamFjay5naXRodWIuaW8lMEElMEFvc2MoMTAwJTJDJTIwMC4wMSUyQyUyMDEuNCklMEElMDkucm90YXRlKDAlMkMlMjAwLjEpJTBBJTA5Lm11bHQob3NjKDEwJTJDJTIwMC4xKS5tb2R1bGF0ZShvc2MoMTApLnJvdGF0ZSgwJTJDJTIwLTAuMSklMkMlMjAxKSklMEElMDkuY29sb3IoMi44MyUyQzAuOTElMkMwLjM5KSUwQSUyMCUyMC5vdXQobzAp"},{sketch_id:"example_16",code:"JTJGJTJGJTIwYnklMjBPbGl2aWElMjBKYWNrJTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZvamFjay5naXRodWIuaW8lMEElMEFvc2MoNCUyQyUyMDAuMSUyQyUyMDAuOCkuY29sb3IoMS4wNCUyQzAlMkMlMjAtMS4xKS5yb3RhdGUoMC4zMCUyQyUyMDAuMSkucGl4ZWxhdGUoMiUyQyUyMDIwKS5tb2R1bGF0ZShub2lzZSgyLjUpJTJDJTIwKCklMjAlM0QlM0UlMjAxLjUlMjAqJTIwTWF0aC5zaW4oMC4wOCUyMColMjB0aW1lKSkub3V0KG8wKQ=="},{sketch_id:"example_17",code:"JTJGJTJGJTIwbW9pcmUlMEElMkYlMkYlMjBieSUyME9saXZpYSUyMEphY2slMEElMkYlMkYlMjB0d2l0dGVyJTNBJTIwJTQwX29qYWNrXyUwQSUwQXBhdHRlcm4lMjAlM0QlMjAoKSUyMCUzRCUzRSUyMG9zYygyMDAlMkMlMjAwKS5rYWxlaWQoMjAwKS5zY2FsZSgxJTJDJTIwMC40KSUwQSUyRiUyRiUwQXBhdHRlcm4oKSUwQSUyMCUyMC5zY3JvbGxYKDAuMSUyQyUyMDAuMDEpJTBBJTIwJTIwLm11bHQocGF0dGVybigpKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"example_18",code:"JTJGJTJGJTIwYnklMjBPbGl2aWElMjBKYWNrJTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZvamFjay5naXRodWIuaW8lMEElMEFvc2MoNiUyQyUyMDAlMkMlMjAwLjgpJTBBJTIwJTIwLmNvbG9yKDEuMTQlMkMlMjAwLjYlMkMuODApJTBBJTIwJTIwLnJvdGF0ZSgwLjkyJTJDJTIwMC4zKSUwQSUyMCUyMC5waXhlbGF0ZSgyMCUyQyUyMDEwKSUwQSUyMCUyMC5tdWx0KG9zYyg0MCUyQyUyMDAuMDMpLnRocmVzaCgwLjQpLnJvdGF0ZSgwJTJDJTIwLTAuMDIpKSUwQSUyMCUyMC5tb2R1bGF0ZVJvdGF0ZShvc2MoMjAlMkMlMjAwKS50aHJlc2goMC4zJTJDJTIwMC42KSUyQyUyMCgpJTIwJTNEJTNFJTIwMC4xJTIwJTJCJTIwbW91c2UueCUyMColMjAwLjAwMiklMEElMjAlMjAub3V0KG8wKQ=="},{sketch_id:"rangga_0",code:"JTJGJTJGJTIwRHJlYW15JTIwRGlhbW9uZCUwQSUyRiUyRiUyMGJ5JTIwUmFuZ2dhJTIwUHVybmFtYSUyMEFqaSUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGcmFuZ2dhcHVybmFtYWFqaTEud2l4c2l0ZS5jb20lMkZwb3J0Zm9saW8lMEElMEFvc2MoNyUyQy0wLjEyNSkubW9kdWxhdGUodm9yb25vaSgxKSkuZGlmZih2b3Jvbm9pKDEpLm11bHQoZ3JhZGllbnQoLTEpLmx1bWEoMC4xMjUpKSklMEElMjAlMjAubHVtYSgwLjEyNSklMEElMjAlMjAuYWRkKHNoYXBlKDclMkMlMjAwLjUpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwLm11bHQodm9yb25vaSgxMCUyQzIpLmJsZW5kKG8wKS5kaWZmKGdyYWRpZW50KDEpKS5tb2R1bGF0ZSh2b3Jvbm9pKCkpKSklMEElMjAlMjAuc2Nyb2xsWSgtMC4xKSUwQSUyMCUyMC5zY3JvbGxYKDAuMTI1KSUwQSUyMCUyMC5ibGVuZChvMCklMEElMjAlMjAuYmxlbmQobzApJTBBJTIwJTIwLm91dCgpJTBB"},{sketch_id:"rangga_1",code:"JTJGJTJGJTIwVGFnJTIwJTI2JTIwU3dlZXAlMEElMkYlMkYlMjBieSUyMFJhbmdnYSUyMFB1cm5hbWElMjBBamklMEElMkYlMkYlMjBodHRwcyUzQSUyRiUyRnJhbmdnYXB1cm5hbWFhamkxLndpeHNpdGUuY29tJTJGcG9ydGZvbGlvJTBBJTBBb3NjKDUlMkMwLjEyNSkuY29sb3JhbWEoMSklMEElMjAlMjAubHVtYSgwLjEyNSkuYWRkKHNoYXBlKDElMkMwLjUpLmx1bWEoMikuZGlmZihncmFkaWVudCgxKSkpJTBBJTIwJTIwLmRpZmYob3NjKC0xJTJDLTAuMjUpKS5ibGVuZChvMCkuY29sb3IoMCUyQzIuNSUyQzEuNzUpJTBBJTIwJTIwLm91dCgp"},{sketch_id:"rangga_2",code:"JTJGJTJGJTIwTW9ub2Nocm9tZSUyME1lbW9hciUwQSUyRiUyRiUyMGJ5JTIwUmFuZ2dhJTIwUHVybmFtYSUyMEFqaSUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGcmFuZ2dhcHVybmFtYWFqaTEud2l4c2l0ZS5jb20lMkZwb3J0Zm9saW8lMEElMEF2b3Jvbm9pKDUwJTJDMSklMEElMjAlMjAubHVtYSgwLjUpLmFkZChzaGFwZSgxJTJDMSkubHVtYSgxKSklMEElMjAlMjAubW9kdWxhdGUob3NjKC0xMDAwJTJDLTEpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLm1vZHVsYXRlKG9zYygpLmx1bWEoKSkpJTBBJTIwJTIwLmJsZW5kKG8wKSUwQSUyMCUyMC5ibGVuZChvMCklMEElMjAlMjAuYmxlbmQobzApJTBBJTIwJTIwLmJsZW5kKG8wKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"rangga_3",code:"JTJGJTJGJTIwR2FsYXh5JTIwVHJpcCUwQSUyRiUyRiUyMGJ5JTIwUmFuZ2dhJTIwUHVybmFtYSUyMEFqaSUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGcmFuZ2dhcHVybmFtYWFqaTEud2l4c2l0ZS5jb20lMkZwb3J0Zm9saW8lMEElMEFzaGFwZSgxJTJDMSklMEElMjAlMjAubXVsdCh2b3Jvbm9pKDEwMDAlMkMyKSUwQSUyMCUyMC5ibGVuZChvMCkubHVtYSgpKSUwQSUyMCUyMC5hZGQoc2hhcGUoMyUyQzAuMTI1KSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMC5yb3RhdGUoMSUyQzEpLm11bHQodm9yb25vaSgxMDAwJTJDMSkubHVtYSgpKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMC5yb3RhdGUoMS41KSkuc2Nyb2xsWCglNUIwLjElMkMtMC4wNjI1JTJDMC4wMDUlMkMwLjAwMDAxJTVEJTJDMCklMEElMjAlMjAuc2Nyb2xsWSglNUIwLjElMkMtMC4wNjI1JTJDMC4wMDUlMkMwLjAwMDAxJTVEJTJDMCklMEElMjAlMjAub3V0KCk="},{sketch_id:"rangga_4",code:"JTJGJTJGJTIwU3VtZXQlMEElMkYlMkYlMjBieSUyMFJhbmdnYSUyMFB1cm5hbWElMjBBamklMEElMkYlMkYlMjBodHRwcyUzQSUyRiUyRnJhbmdnYXB1cm5hbWFhamkxLndpeHNpdGUuY29tJTJGcG9ydGZvbGlvJTBBJTBBb3NjKDAuNSUyQzEuMjUpLm11bHQoc2hhcGUoMSUyQzAuMDkpLnJvdGF0ZSgxLjUpKSUwQSUyMCUyMC5kaWZmKGdyYWRpZW50KCkpJTBBJTIwJTIwLmFkZChzaGFwZSgyJTJDMikuYmxlbmQoZ3JhZGllbnQoMSkpKSUwQSUyMCUyMC5tb2R1bGF0ZShub2lzZSgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLm1vZHVsYXRlKG5vaXNlKCkuc2Nyb2xsWSgxJTJDMC4wNjI1KSkpJTBBJTIwJTIwLmJsZW5kKG8wKSUwQSUyMCUyMC5jb2xvcigxJTJDLTAuNSUyQy0wLjc1KSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"marianne_0",code:"JTJGJTJGcG9ydCUwQSUyRiUyRmJ5JTIwTWFyaWFubmUlMjBUZWl4aWRvJTBBJTJGJTJGaHR0cHMlM0ElMkYlMkZtYXJpYW5uZXRlaXhpZG8uZ2l0aHViLmlvJTJGJTBBJTBBb3NjKDUlMkMlMjAwLjklMkMlMjAwLjAwMSklMEElMjAlMjAlMjAlMjAua2FsZWlkKCU1QjMlMkM0JTJDNSUyQzclMkM4JTJDOSUyQzEwJTVELmZhc3QoMC4xKSklMEElMjAlMjAlMjAlMjAuY29sb3IoMC41JTJDJTIwMC4zKSUwQSUyMCUyMCUyMCUyMC5jb2xvcmFtYSgwLjQpJTBBJTIwJTIwJTIwJTIwLnJvdGF0ZSgwLjAwOSUyQygpJTNEJTNFTWF0aC5zaW4odGltZSkqJTIwLTAuMDAxJTIwKSUwQSUyMCUyMCUyMCUyMC5tb2R1bGF0ZVJvdGF0ZShvMCUyQygpJTNEJTNFTWF0aC5zaW4odGltZSklMjAqJTIwMC4wMDMpJTBBJTIwJTIwJTIwJTIwLm1vZHVsYXRlKG8wJTJDJTIwMC45KSUwQSUyMCUyMCUyMCUyMC5zY2FsZSgwLjkpJTBBJTIwJTIwJTIwJTIwLm91dChvMCklMEElMEE="},{sketch_id:"marianne_1",code:"JTJGJTJGUGl4ZWxzY2FwZSUwQSUyRiUyRk1hcmlhbm5lJTIwVGVpeGlkbyUwQSUyRiUyRmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRk1hcmlhbm5lVGVpeGlkbyUwQSUwQXNyYyhvMCklMEElMjAuc2F0dXJhdGUoMS4wMSklMEElMjAuc2NhbGUoLjk5OSklMEElMjAuY29sb3IoMS4wMSUyQzEuMDElMkMxLjAxKSUwQSUyMC5odWUoLjAxKSUwQSUyMC5tb2R1bGF0ZUh1ZShzcmMobzEpLmh1ZSguMykucG9zdGVyaXplKC0xKS5jb250cmFzdCguNyklMkMyKSUwQSUyMCUyMC5sYXllcihzcmMobzEpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLmx1bWEoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5tdWx0KGdyYWRpZW50KDEpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLnNhdHVyYXRlKC45KSkpJTBBJTIwJTIwLm91dChvMCklMEElMEFub2lzZSgxJTJDJTIwLjIpJTBBJTIwJTIwLnJvdGF0ZSgyJTJDLjUpJTBBJTIwJTIwLmxheWVyKHNyYyhvMCklMEElMjAlMjAuc2Nyb2xsWCguMikpJTBBJTIwJTIwLm91dChvMSklMEElMEFyZW5kZXIobzAp"},{sketch_id:"naoto_0",code:"JTJGJTJGJTIwJTQwbmFvdG9faGllZGElMEFvc2MoMjAlMkMlMjAwLjElMkMlMjAwKS5jb2xvcigwJTJDJTIwMSUyQyUyMDIpLnJvdGF0ZSgxLjU3JTJGMikub3V0KG8xKSUwQW9zYygzMCUyQyUyMDAuMDElMkMlMjAwKS5jb2xvcigyJTJDJTIwMC43JTJDJTIwMSkubW9kdWxhdGUobzElMkMlMjAwKS5hZGQobzElMkMxKS5tb2R1bGF0ZVBpeGVsYXRlKG8xJTJDMSUyQzEwKS5vdXQobzAp"},{sketch_id:"naoto_1",code:"JTJGJTJGJTIwJTQwbmFvdG9faGllZGElMEFzb2xpZCgwLjIlMkMwLjYlMkMwLjkpLmxheWVyKG9zYygzMS40JTJDMCkudGhyZXNoKDAuNykubHVtYSgpLm1vZHVsYXRlKG9zYyg0JTJDMSkucm90YXRlKDEpJTJDMC4wNSkuY29sb3IoMCUyQzAlMkMwKSkubGF5ZXIob3NjKDMxLjQlMkMwKS50aHJlc2goMC43KS5sdW1hKCkubW9kdWxhdGUob3NjKDQlMkMxKS5yb3RhdGUoMSklMkMwLjEpKS5vdXQoKQ=="},{sketch_id:"ritchse_0",code:"JTJGJTJGcmFuZG9tJTIwdHJ5cG9waG9iaWElMjAtJTIwY2hhbmdlcyUyMGV2ZXJ5dGltZSUyMHlvdSUyMGxvYWQlMjBpdCElMEElMkYlMkZieSUyMFJpdGNoc2UlMEElMkYlMkZpbnN0YWdyYW0uY29tJTJGcml0Y2hzZSUwQSUyMCUwQWZ1bmN0aW9uJTIwcihtaW4lM0QwJTJDbWF4JTNEMSklMjAlN0IlMjByZXR1cm4lMjBNYXRoLnJhbmRvbSgpKihtYXgtbWluKSUyQm1pbiUzQiUyMCU3RCUwQSUyMCUwQXNvbGlkKDElMkMxJTJDMSklMEElMjAlMjAlMDkuZGlmZihzaGFwZSglNUI0JTJDNCUyQzQlMkMyNCU1RC5zbW9vdGgoKS5mYXN0KC41KSUyQ3IoMC42JTJDMC45MyklMkMuMDkpLnJlcGVhdCgyMCUyQzEwKSklMEElMDkubW9kdWxhdGVTY2FsZShvc2MoOCkucm90YXRlKHIoLS41JTJDLjUpKSUyQy41MiklMEElMDkuYWRkKCUwQSUyMCUyMCUwOSUwOXNyYyhvMCkuc2NhbGUoMC45NjUpLnJvdGF0ZSguMDEyKihNYXRoLnJvdW5kKHIoLTIlMkMxKSkpKSUwQSUyMCUyMCUwOSUwOS5jb2xvcihyKCklMkNyKCklMkNyKCkpJTBBJTIwJTIwJTIwJTIwJTA5Lm1vZHVsYXRlUm90YXRlKG8wJTJDcigwJTJDMC41KSklMEElMjAlMjAlMDklMDkuYnJpZ2h0bmVzcyguMTUpJTBBJTIwJTIwJTA5JTA5JTJDLjcpJTBBJTA5Lm91dCgp"},{sketch_id:"ritchse_1",code:"JTJGJTJGY29ycnVwdGVkJTIwc2NyZWVuc2F2ZXIlMEElMkYlMkZieSUyMFJpdGNoc2UlMEElMkYlMkZpbnN0YWdyYW0uY29tJTJGcml0Y2hzZSUwQSUyMCUwQXZvcm9ub2koMzUwJTJDMC4xNSklMEElMjAlMjAlMDkubW9kdWxhdGVTY2FsZShvc2MoOCkucm90YXRlKE1hdGguc2luKHRpbWUpKSUyQy41KSUwQSUyMCUyMCUwOS50aHJlc2goLjgpJTBBJTA5Lm1vZHVsYXRlUm90YXRlKG9zYyg3KSUyQy40KSUwQSUwOS50aHJlc2goLjcpJTBBJTIwJTIwJTA5LmRpZmYoc3JjKG8wKS5zY2FsZSgxLjgpKSUwQSUwOS5tb2R1bGF0ZVNjYWxlKG9zYygyKS5tb2R1bGF0ZVJvdGF0ZShvMCUyQy43NCkpJTBBJTA5LmRpZmYoc3JjKG8wKS5yb3RhdGUoJTVCLS4wMTIlMkMuMDElMkMtLjAwMiUyQzAlNUQpLnNjcm9sbFkoMCUyQyU1Qi0xJTJGMTk5ODAwJTJDMCU1RC5mYXN0KDAuNykpKSUwQSUwOS5icmlnaHRuZXNzKCU1Qi0uMDIlMkMtLjE3JTVELnNtb290aCgpLmZhc3QoLjUpKSUwQSUwOS5vdXQoKQ=="},{sketch_id:"ritchse_2",code:"JTJGJTJGdHJvcGljYWwlMjBqdWljZSUwQSUyRiUyRmJ5JTIwUml0Y2hzZSUwQSUyRiUyRmluc3RhZ3JhbS5jb20lMkZyaXRjaHNlJTBBJTIwJTBBdm9yb25vaSgyJTJDMC4zJTJDMC4yKS5zaGlmdCgwLjUpJTBBLm1vZHVsYXRlUGl4ZWxhdGUodm9yb25vaSg0JTJDMC4yKSUyQzMyJTJDMiklMEEuc2NhbGUoKCklM0QlM0UxJTJCKE1hdGguc2luKHRpbWUqMi41KSowLjA1KSklMEEuZGlmZih2b3Jvbm9pKDMpLnNoaWZ0KDAuNikpJTBBLmRpZmYob3NjKDIlMkMwLjE1JTJDMS4xKS5yb3RhdGUoKSklMEEuYnJpZ2h0bmVzcygwLjEpLmNvbnRyYXN0KDEuMikuc2F0dXJhdGUoMS4yKSUwQSUwOS5vdXQoKSUwQXNwZWVkJTIwJTNEJTIwMC44"},{sketch_id:"ritchse_3",code:"JTJGJTJGdHJ5aW5nJTIwdG8lMjBnZXQlMjBjbG9zZXIlMEElMkYlMkZieSUyMFJpdGNoc2UlMEElMkYlMkZpbnN0YWdyYW0uY29tJTJGcml0Y2hzZSUwQSUyMCUwQW9zYyg2MCUyQy0wLjAxNSUyQzAuMykuZGlmZihvc2MoNjAlMkMwLjA4KS5yb3RhdGUoTWF0aC5QSSUyRjIpKSUwQSUwOS5tb2R1bGF0ZVNjYWxlKG5vaXNlKDMuNSUyQzAuMjUpLm1vZHVsYXRlU2NhbGUob3NjKDE1KS5yb3RhdGUoKCklM0QlM0VNYXRoLnNpbih0aW1lJTJGMikpKSUyQzAuNiklMEElMDkuY29sb3IoMSUyQzAuNSUyQzAuNCkuY29udHJhc3QoMS40KSUwQSUwOS5hZGQoc3JjKG8wKS5tb2R1bGF0ZShvMCUyQy4wNCklMkMuNiklMEElMDkuaW52ZXJ0KCkuYnJpZ2h0bmVzcygwLjEpLmNvbnRyYXN0KDEuMiklMEElMDkubW9kdWxhdGVTY2FsZShvc2MoMiklMkMtMC4yKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"ritchse_4",code:"JTJGJTJGJTIwZGlzaW50ZWdyYXRpb24lMEElMkYlMkYlMjBieSUyMFJpdGNoc2UlMEElMkYlMkYlMjBpbnN0YWdyYW0uY29tJTJGcml0Y2hzZSUwQSUyMCUwQW9zYyg1JTJDLjEpLm1vZHVsYXRlKG5vaXNlKDYpJTJDLjIyKS5kaWZmKG8wKSUwQSUyMCUyMCUwOS5tb2R1bGF0ZVNjcm9sbFkob3NjKDIpLm1vZHVsYXRlKG9zYygpLnJvdGF0ZSgpJTJDLjExKSklMEElMDkuc2NhbGUoLjcyKS5jb2xvcigwLjk5JTJDMS4wMTQlMkMxKSUwQSUyMCUyMCUwOS5vdXQoKQ== "},{sketch_id:"flor_0",code:"JTJGJTJGRmxvciUyMGRlJTIwRnVlZ28lMEElMkYlMkZodHRwcyUzQSUyRiUyRmZsb3JkZWZ1ZWdvLmdpdGh1Yi5pbyUyRiUwQW9zYygzMCUyQzAuMDElMkMxKSUwQS5tdWx0KG9zYygyMCUyQy0wLjElMkMxKS5tb2R1bGF0ZShub2lzZSgzJTJDMSkpLnJvdGF0ZSgwLjcpKSUwQS5wb3N0ZXJpemUoJTVCMyUyQzEwJTJDMiU1RC5mYXN0KDAuNSkuc21vb3RoKDEpKSUwQS5tb2R1bGF0ZVJvdGF0ZShvMCUyQygpJTNEJTNFbW91c2UueCowLjAwMyklMEEub3V0KCk= "},{sketch_id:"mahalia_0",code:"JTJGJTJGJTIwTWFoYWxpYSUyMEgtUiUwQSUyRiUyRiUyMElHJTNBJTIwJTQwbW1faHJfJTBBJTBBc2hhcGUoMjAlMkMwLjElMkMwLjAxKSUwQSUyMCUyMC5zY2FsZSgoKSUyMCUzRCUzRSUyME1hdGguc2luKHRpbWUpKjMpJTBBJTIwJTIwLnJlcGVhdCgoKSUyMCUzRCUzRSUyME1hdGguc2luKHRpbWUpKjEwKSUwQSUyMCUyMC5tb2R1bGF0ZVJvdGF0ZShvMCklMEElMjAlMjAuc2NhbGUoKCklMjAlM0QlM0UlMjBNYXRoLnNpbih0aW1lKSoyKSUwQSUyMCUyMC5tb2R1bGF0ZShub2lzZSgyJTJDMCkpJTBBJTIwJTIwLnJvdGF0ZSgwLjElMkMlMjAwLjkpJTBBLm91dChvMCklMEElMEFzcmMobzApJTBBLm1vZHVsYXRlKG9zYyg1MDAlMkMwJTJDMCkpJTBBLm91dChvMSklMEElMEFzcmMobzEpJTBBLm1vZHVsYXRlS2FsZWlkKHZvcm9ub2koKCklMjAlM0QlM0UlMjBNYXRoLnNpbih0aW1lKSozJTJDMC4xJTJDMC4wMSklMkMoKSUyMCUzRCUzRSUyME1hdGguc2luKHRpbWUpKjMpJTBBLnNjYWxlKCgpJTIwJTNEJTNFJTIwTWF0aC5zaW4odGltZSkqMyklMEEub3V0KG8yKSUwQSUwQXJlbmRlcihvMik="},{sketch_id:"mahalia_1",code:"JTJGJTJGJTIwTWFoYWxpYSUyMEgtUiUwQSUyRiUyRiUyMElHJTNBJTIwJTQwbW1faHJfJTBBJTBBc2hhcGUoKCklMjAlM0QlM0UlMjBNYXRoLnNpbih0aW1lKSUyQjEqMiklMEEucm90YXRlKCgpJTIwJTNEJTNFJTIwTWF0aC5QSSUyMColMjBtb3VzZS54JTIwJTJGMTgwKSUwQS5yZXBlYXRYKDMpJTBBLnJlcGVhdFkoKCklM0QlM0VNYXRoLnNpbih0aW1lKSo1KSUwQS5zY2FsZSgoKSUyMCUzRCUzRSUyME1hdGguUEklMkY0KSUwQS5ibGVuZChzcmMobzApLmNvbG9yKDElMkMwJTJDMCkpJTBBLm1vZHVsYXRlKG9zYygyMCUyQyUyMDAlMkMuNCkpJTBBLmthbGVpZCgyKSUwQSUyMC5vdXQobzApJTBBJTBBcmVuZGVyKG8wKQ=="},{sketch_id:"mahalia_2",code:"JTJGJTJGJTIwVmVsdmV0JTIwUG9vbCUwQSUyRiUyRiUyMGJ5JTIwTWFoYWxpYSUyMEgtUiUwQSUyRiUyRiUyMElHJTNBJTIwbW1faHJfJTBBJTBBJTBBbm9pc2UoKSUwQS5jb2xvcigoKSUyMCUzRCUzRSUyMGEuZmZ0JTVCMiU1RCoyJTJDMCUyQy42KSUwQS5tb2R1bGF0ZShub2lzZSgoKSUyMCUzRCUzRSUyMGEuZmZ0JTVCMCU1RCoxMCkpJTBBLnNjYWxlKCgpJTNEJTNFJTIwYS5mZnQlNUIyJTVEKjUpJTBBLmxheWVyKCUwQSUyMCUyMHNyYyhvMCklMEElMjAlMjAubWFzayhvc2MoMTApLm1vZHVsYXRlUm90YXRlKG9zYygpJTJDOTAlMkMwKSklMEElMjAlMjAuc2NhbGUoKCklMjAlM0QlM0UlMjBhLmZmdCU1QjAlNUQqMiklMEElMjAlMjAubHVtYSgwLjIlMkMwLjMpJTBBKSUwQS5ibGVuZChvMCklMEEub3V0KG8wKSUwQSUwQW9zYygpJTBBLm1vZHVsYXRlKG5vaXNlKCgpJTIwJTNEJTNFJTIwYS5mZnQlNUIxJTVEJTJCNSkpJTBBLmNvbG9yKDElMkMwJTJDMCklMEEub3V0KG8xKSUwQSUwQXNyYyhvMCklMEEubW9kdWxhdGUobzEpJTBBLmxheWVyKCUwQSUyMCUyMHNyYyhvMSklMEElMjAlMjAubWFzayhvMSklMEElMjAlMjAuc2F0dXJhdGUoNyklMEEpJTBBLm1vZHVsYXRlUm90YXRlKG8xKSUwQS5yb3RhdGUoKCU3QnRpbWUlN0QpJTIwJTNEJTNFJTIwdGltZSUyNTM2MCowLjA1KSUwQS5vdXQobzIpJTBBJTBBcmVuZGVyKG8yKQ=="},{sketch_id:"mahalia_3",code:"JTJGJTJGJTIwYnklMjBNYWhhbGlhJTIwSC1SJTBBJTJGJTJGJTIwSUclM0ElMjBtbV9ocl8lMEElMEFzaGFwZSgoKSUzRCUzRU1hdGguc2luKHRpbWUpJTJCMSozJTJDJTIwLjUlMkMuMDEpJTBBLnJlcGVhdCg1JTJDMyUyQyUyMCgpJTNEJTNFYS5mZnQlNUIwJTVEKjIlMkMlMjAoKSUzRCUzRWEuZmZ0JTVCMSU1RCoyKSUwQS5zY3JvbGxZKC41JTJDMC4xKSUwQS5sYXllciglMEElMjAlMjBzcmMobzEpJTBBJTIwJTIwLm1hc2sobzApJTBBJTIwJTIwLmx1bWEoLjAxJTJDJTIwLjEpJTBBJTIwJTIwLmludmVydCguMiklMEEpJTBBLm1vZHVsYXRlKG8xJTJDLjAyKSUwQS5vdXQobzApJTBBJTBBb3NjKDQwJTJDJTIwMC4wOSUyQyUyMDAuOSklMEEuY29sb3IoLjklMkMwJTJDNSklMEEubW9kdWxhdGUob3NjKDEwKS5yb3RhdGUoMSUyQyUyMDAuNSkpJTBBLnJvdGF0ZSgxJTJDJTIwMC4yKSUwQS5vdXQobzEpJTBBJTBBcmVuZGVyKG8wKSUwQSUwQQ=="},{sketch_id:"mahalia_4",code:"JTJGJTJGJTIwQ2VsbHVsYXIlMjAlMjYlMjBCbG9idWxhciUwQSUyRiUyRiUyMGJ5JTIwTWFoYWxpYSUyMEgtUiUwQSUyRiUyRiUyMElHJTNBJTIwbW1faHJfJTBBJTBBc3BlZWQlMjAlM0QlMjAwLjMlMEElMEFzaGFwZSgyMCUyQzAuMiUyQzAuMyklMEEuY29sb3IoMC41JTJDMC44JTJDNTApJTBBJTIwJTIwLnNjYWxlKCgpJTIwJTNEJTNFJTIwTWF0aC5zaW4odGltZSklMkIxKjIpJTBBJTIwJTIwLnJlcGVhdCgoKSUyMCUzRCUzRSUyME1hdGguc2luKHRpbWUpKjEwKSUwQSUyMCUyMC5tb2R1bGF0ZVJvdGF0ZShvMCklMEElMjAlMjAuc2NhbGUoKCklMjAlM0QlM0UlMjBNYXRoLnNpbih0aW1lKSUyQjElMjAqMS41KSUwQSUyMCUyMC5tb2R1bGF0ZShub2lzZSgyJTJDMikpJTBBJTIwJTIwLnJvdGF0ZSgxJTJDJTIwLjIpJTBBJTIwJTIwJTJGJTJGJTIwLmludmVydCgyLjQpJTBBLm91dChvMCklMEE="},{sketch_id:"andromeda_0",code:"JTJGJTJGJTIwMy4wJTBBJTJGJTJGJTIwYnklMjAlQ0UlOTRORFIwTTNEJUNFJTk0JTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZ3d3cuaW5zdGFncmFtLmNvbSUyRmFuZHJvbTNfZGElMkYlMEElMEElMEFub2lzZSgzJTJDMC4zJTJDMykudGhyZXNoKDAuMyUyQzAuMDMpLmRpZmYobzMlMkMwLjMpLm91dChvMSklMEFncmFkaWVudCglNUIwLjMlMkMwLjMlMkMzJTVEKS5kaWZmKG8wKS5ibGVuZChvMSkub3V0KG8zKSUwQXZvcm9ub2koMzMlMkMzJTJDMzApLnJvdGF0ZSgzJTJDMC4zJTJDMCkubW9kdWxhdGVTY2FsZShvMiUyQzAuMykuY29sb3IoLTMlMkMzJTJDMCkuYnJpZ2h0bmVzcygzKS5vdXQobzApJTBBc2hhcGUoMzAlMkMwLjMlMkMxKS5pbnZlcnQoKCU3QnRpbWUlN0QpJTNEJTNFTWF0aC5zaW4odGltZSkqMykub3V0KG8yKSUwQSUwQXJlbmRlcihvMyklMEE="},{sketch_id:"andromeda_1",code:"JTJGJTJGJTIwMy4zJTBBJTJGJTJGJTIwYnklMjAlQ0UlOTRORFIwTTNEJUNFJTk0JTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZ3d3cuaW5zdGFncmFtLmNvbSUyRmFuZHJvbTNfZGElMkYlMEElMEFvc2MoKS5tb2R1bGF0ZVJvdGF0ZShvMCUyQzAuMykub3V0KCklMEFvc2MoMzMlMkMwLjMlMkMwLjMpLmRpZmYobzMlMkMzKS5vdXQobzEpJTBBb3NjKDMlMkMwLjMlMkMzMykubW9kdWxhdGVLYWxlaWQobzMlMkMzKS5kaWZmKG8wKS5vdXQobzIpJTBBc3JjKG8wJTJDMykubXVsdChvMSUyQzMpLmthbGVpZCgzKS5vdXQobzMpJTBBcmVuZGVyKG8yKQ=="},{sketch_id:"asdrubal_0",code:"JTJGJTJGQXNkciVDMyVCQWJhbCUyMEdvbWV6JTBBJTBBbm9pc2UoMyUyQzAuMSUyQzcpJTBBLnJvdGF0ZSgxJTJDLTElMkMtMikubWFzayhzaGFwZSgyMCkpJTBBLmNvbG9yYW1hKDAuNSklMEEubW9kdWxhdGVTY2FsZShvMCklMEEubW9kdWxhdGVTY2FsZShvMCUyQzElMkMpJTBBLmJsZW5kKG8wKSUwQS5ibGVuZChvMCklMEEuYmxlbmQobzApJTBBLmJsZW5kKG8wKSUwQS5vdXQobzApJTBB"},{sketch_id:"flor_1",code:"JTJGJTJGSHlkcmElMjBHbGl0Y2h5JTIwU2xpdCUyMFNjYW4lMEElMkYlMkZGbG9yJTIwZGUlMjBGdWVnbyUwQSUyRiUyRmh0dHBzJTNBJTJGJTJGZmxvcmRlZnVlZ28uZ2l0aHViLmlvJTJGJTIwJTBBczAuaW5pdENhbSgpJTBBc3JjKHMwKS5zYXR1cmF0ZSgyKS5jb250cmFzdCgxLjMpLmxheWVyKHNyYyhvMCkubWFzayhzaGFwZSg0JTJDMikuc2NhbGUoMC41JTJDMC43KS5zY3JvbGxYKDAuMjUpKS5zY3JvbGxYKDAuMDAxKSkubW9kdWxhdGUobzAlMkMwLjAwMSkub3V0KG8wKSUwQSUwQQ=="},{sketch_id:"flor_2",code:"JTJGJTJGR2xpdGNoJTIwUml2ZXIlMEElMkYlMkZGbG9yJTIwZGUlMjBGdWVnbyUwQSUyRiUyRmh0dHBzJTNBJTJGJTJGZmxvcmRlZnVlZ28uZ2l0aHViLmlvJTJGJTBBdm9yb25vaSg4JTJDMSklMEEubXVsdChvc2MoMTAlMkMwLjElMkMoKSUzRCUzRU1hdGguc2luKHRpbWUpKjMpLnNhdHVyYXRlKDMpLmthbGVpZCgyMDApKSUwQS5tb2R1bGF0ZShvMCUyQzAuNSklMEEuYWRkKG8wJTJDMC44KSUwQS5zY3JvbGxZKC0wLjAxKSUwQS5zY2FsZSgwLjk5KSUwQS5tb2R1bGF0ZSh2b3Jvbm9pKDglMkMxKSUyQzAuMDA4KSUwQS5sdW1hKDAuMyklMEEub3V0KCklMEElMEElMEFzcGVlZCUyMCUzRCUyMDAuMSUwQSUwQSUwQSUwQQ=="},{sketch_id:"nesso_0",code:"JTBBJTJGJTJGY2xvdWRzJTIwb2YlMjBwYXNzYWdlJTBBJTJGJTJGYnklMjBOZXNzbyUwQSUyRiUyRnd3dy5uZXNzby54eXolMEElMEFzaGFwZSglNUI0JTJDNSUyQzYlNUQuZmFzdCgwLjEpLnNtb290aCgxKSUyQzAuMDAwMDAxJTJDJTVCMC4yJTJDMC43JTVELnNtb290aCgxKSklMEEuY29sb3IoMC4yJTJDMC40JTJDMC4zKSUwQS5zY3JvbGxYKCgpJTNEJTNFTWF0aC5zaW4odGltZSowLjI3KSklMEEuYWRkKCUwQSUyMCUyMHNoYXBlKCU1QjQlMkM1JTJDNiU1RC5mYXN0KDAuMSkuc21vb3RoKDEpJTJDMC4wMDAwMDElMkMlNUIwLjIlMkMwLjclMkMwLjUlMkMwLjMlNUQuc21vb3RoKDEpKSUwQSUyMCUyMC5jb2xvcigwLjYlMkMwLjIlMkMwLjUpJTBBJTIwJTIwLnNjcm9sbFkoMC4zNSklMEElMjAlMjAuc2Nyb2xsWCgoKSUzRCUzRU1hdGguc2luKHRpbWUqMC4zMykpKSUwQS5hZGQoJTBBJTIwJTIwc2hhcGUoJTVCNCUyQzUlMkM2JTVELmZhc3QoMC4xKS5zbW9vdGgoMSklMkMwLjAwMDAwMSUyQyU1QjAuMiUyQzAuNyUyQzAuMyU1RC5zbW9vdGgoMSkpJTBBJTIwJTIwLmNvbG9yKDAuMiUyQzAuNCUyQzAuNiklMEElMjAlMjAuc2Nyb2xsWSgtMC4zNSklMEElMjAlMjAuc2Nyb2xsWCgoKSUzRCUzRU1hdGguc2luKHRpbWUqMC40MSkqLTEpKSUwQS5hZGQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwc3JjKG8wKS5zaGlmdCgwLjAwMSUyQzAuMDElMkMwLjAwMSklMEElMjAlMjAlMjAlMjAlMjAlMjAuc2Nyb2xsWCglNUIwLjA1JTJDLTAuMDUlNUQuZmFzdCgwLjEpLnNtb290aCgxKSklMEElMjAlMjAlMjAlMjAlMjAlMjAuc2NhbGUoJTVCMS4wNSUyQzAuOSU1RC5mYXN0KDAuMykuc21vb3RoKDEpJTJDJTVCMS4wNSUyQzAuOSUyQzElNUQuZmFzdCgwLjI5KS5zbW9vdGgoMSkpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTJDMC44NSklMEEubW9kdWxhdGUodm9yb25vaSgxMCUyQzIlMkMyKSklMEEub3V0KCk="},{sketch_id:"malitzin_0",code:"JTJGJTJGQ05EU0QlMEElMkYlMkZodHRwJTNBJTJGJTJGbWFsaXR6aW5jb3J0ZXMubmV0JTJGJTBBJTJGJTJGJTIwc2FuZCUyMHNwaXJhbHMlMEElMEFvc2MoMyUyQyUyMDAuMDElMkMlMjAwLjQpJTBBLmNvbG9yKDEuMiUyQzEuMiUyQzEuMyklMEEuc2F0dXJhdGUoMC40KSUwQS5tb2R1bGF0ZVJlcGVhdChvc2MoMiklMkMxJTJDJTIwMiUyQyUyMDQlMkMlMjAzKSUwQS5tb2R1bGF0ZUthbGVpZChvc2MoMTIlMkMwLjA1JTJDMCklMkMxKSUwQS5sdW1hJTIwKDAuNCklMEEucm90YXRlKDQlMkMlMjAwLjElMkMwKSUwQS5tb2R1bGF0ZShvMCUyQyUyMCgpJTIwJTNEJTNFJTIwbW91c2UueSUyMCowLjAwMDIlMjApJTBBLnNjYWxlKDEpLmRpZmYobzEpJTBBLm91dChvMCk="},{sketch_id:"malitzin_1",code:"JTJGJTJGQ05EU0QlMEElMkYlMkZodHRwJTNBJTJGJTJGbWFsaXR6aW5jb3J0ZXMubmV0JTJGJTBBJTJGJTJGYW1lYmElMEElMEFvc2MoMTUlMkMlMjAwLjAxJTJDJTIwMC4xKS5tdWx0KG9zYygxJTJDJTIwLTAuMSkubW9kdWxhdGUob3NjKDIpLnJvdGF0ZSg0JTJDMSklMkMlMjAyMCkpJTBBLmNvbG9yKDAlMkMyLjQlMkM1KSUwQS5zYXR1cmF0ZSgwLjQpJTBBLmx1bWEoMSUyQzAuMSUyQyUyMCg2JTJDJTIwKCklM0QlM0UlMjAxJTIwJTJCJTIwYS5mZnQlNUIzJTVEKSklMEEuc2NhbGUoMC43JTJDJTIwKCklM0QlM0UlMjAwLjclMjAlMkIlMjBhLmZmdCU1QjMlNUQpJTBBLmRpZmYobzApJTJGJTJGJTIwbzAlMEEub3V0KG8wKSUyRiUyRiUyMG8x"},{sketch_id:"malitzin_2",code:"JTJGJTJGQ05EU0QlMEElMkYlMkZodHRwJTNBJTJGJTJGbWFsaXR6aW5jb3J0ZXMubmV0JTJGJTBBJTJGJTJGY3JhenklMjBzcXVhcmVzJTBBJTBBc2hhcGUoNCUyQyUyMCgwLjAxJTJDJTIwKCklM0QlM0UlMjAwLjIlMjAlMkIlMjBhLmZmdCU1QjIlNUQpJTJDMSklMEEubXVsdChvc2MoMSUyQyUyMDEpLm1vZHVsYXRlKG9zYyg1KS5yb3RhdGUoMS40JTJDMSklMkMzKSklMEEuY29sb3IoMSUyQzIlMkM0KSUwQS5zYXR1cmF0ZSgwLjIpJTBBLmx1bWEoMS4yJTJDMC4wNSUyQyUyMCg1JTJDJTIwKCklM0QlM0UlMjAyJTIwJTJCJTIwYS5mZnQlNUIzJTVEKSklMEEuc2NhbGUoMC42JTJDJTIwKCklM0QlM0UlMjAwLjklMjAlMkIlMjBhLmZmdCU1QjMlNUQpJTBBLmRpZmYobzApJTJGJTJGJTIwbzAlMEEub3V0KG8wKSUyRiUyRiUyMG8x"},{sketch_id:"khoparzi_0",code:"JTJGJTJGJTIwSGFwcHklMjBNYW5kYWxhJTBBJTJGJTJGJTIwQnklMjBBYmhpbmF5JTIwS2hvcGFyemklMEElMkYlMkYlMjB0d2l0dGVyJTJGZ2l0aHViJTJGaW5zdGFncmFtJTNBJTIwJTQwa2hvcGFyemklMEF2b3Jvbm9pKDUlMkMtMC4xJTJDNSklMEEuYWRkKG9zYygxJTJDMCUyQzEpKS5rYWxlaWQoMjEpJTBBLnNjYWxlKDElMkMxJTJDMikuY29sb3JhbWEoKS5vdXQobzEpJTBBc3JjKG8xKS5tdWx0KHNyYyhzMCkubW9kdWxhdGVSb3RhdGUobzElMkMxMDApJTJDJTIwLTAuNSklMEElMjAlMjAub3V0KG8wKSUwQSUwQQ=="},{sketch_id:"khoparzi_1",code:"JTJGJTJGJTIwUGVycGV0dWFsJTIwZWxldmF0b3IlMjBidXR0b25zJTBBJTJGJTJGJTIwQnklMjBLaG9wYXJ6aSUwQSUyRiUyRiUyMGh0dHAlM0ElMkYlMkZraG9wYXJ6aS5jb20lMEElMEFzaGFwZSgzKS5hZGQob3NjKDElMkMwLjUlMkMxKSUyQyUyMDEpJTBBJTA5LmFkZChvMSUyQyUyMCgpJTIwJTNEJTNFJTIwKE1hdGguc2luKHRpbWUlMkY0KSUyMColMjAwLjclMjAlMkIlMjAwLjEpKSUwQSUwOSUyRiUyRi5yZXBlYXQoNSklMEElMjAlMjAlMDkuc2NhbGUoKCklM0QlM0VNYXRoLnNpbih0aW1lJTIwJTJGJTIwMTYpKS5yb3RhdGUoMCUyQyUyMC0wLjEpJTBBJTA5Lm91dChvMSklMEElMEFzcmMobzEpJTBBJTIwJTIwLnJvdGF0ZSgwJTJDMC4xKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"khoparzi_2",code:"JTJGJTJGJTIwUmVhbGx5JTIwTG92ZSUwQSUyRiUyRiUyMGJ5JTIwQWJoaW5heSUyMEtob3BhcnppJTBBJTJGJTJGJTIwaHR0cCUzQSUyRiUyRmtob3BhcnppLmNvbSUwQW9zYygxMDAlMkMtMC4wMTI0NSUyQzEpLnBpeGVsYXRlKDUwKS5rYWxlaWQoKCklM0QlM0UoTWF0aC5zaW4odGltZSUyRjgpKjklMkIzKSkucm90YXRlKDAlMkMwLjEyNSklMEEubW9kdWxhdGVSb3RhdGUoc2hhcGUoMykuc2NhbGUoKCklM0QlM0UoTWF0aC5jb3ModGltZSkqMikpLnJvdGF0ZSgwJTJDLTAuMjUpKS5kaWZmKHNyYyhvMCkuYnJpZ2h0bmVzcygwLjMpKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"khoparzi_3",code:"JTJGJTJGJTIwQXFhdXRpYyUyMGJsdWJzJTBBJTJGJTJGJTIwQnklMjBLaG9wYXJ6aSUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGa2hvcGFyemkuY29tJTBBJTBBZ3JhZGllbnQoMC4yNSklMEEuYWRkKG5vaXNlKCklMkMlMjAoKSUzRCUzRU1hdGguY29zKHRpbWUpKSUwQS5tb2R1bGF0ZVJvdGF0ZShzcmMobzApLnJvdGF0ZSgwJTJDJTIwLTAuNTIpJTJDJTIwMC4yKS5tdWx0KHNoYXBlKDM2MCklMkMlMjAwLjgpJTBBLnJlcGVhdCgxMCUyQzUpLm11bHQoc2hhcGUoMzYwKS5zY2FsZSgoKSUzRCUzRU1hdGguc2luKHRpbWUpKSUyQyUyMDAuOCkucm90YXRlKDAlMkMlMjAwLjIpJTBBLmRpZmYoc3JjKG8wKS5yb3RhdGUoMCUyQyUyMC0wLjIpJTJDJTIwMC4yKSUwQS5vdXQoKQ=="},{sketch_id:"celeste_0",code:"JTBBJTIwJTJGJTJGJTIwUHVlcnRhcyUyMElJJTBBJTJGJTJGJTIwcG9yJTIwQ2VsZXN0ZSUyMEJldGFuY3VyJTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZnaXRodWIuY29tJTJGZXNzdGViYW4lMEElMEFvc2MoMTMlMkMwJTJDMSklMEElMjAlMjAua2FsZWlkKCklMEElMjAlMjAubWFzayhzaGFwZSg0JTJDMC4zJTJDMSkpJTBBJTIwJTIwLm1vZHVsYXRlUm90YXRlKHNoYXBlKDQlMkMwLjElMkMxKSklMEElMjAlMjAubW9kdWxhdGVSb3RhdGUoc2hhcGUoNCUyQzAuMSUyQzAuOSkpJTBBJTIwJTIwLm1vZHVsYXRlUm90YXRlKHNoYXBlKDQlMkMwLjElMkMwLjgpKSUwQSUyMCUyMC5zY2FsZSgwLjMpJTBBJTIwJTIwLmFkZChzaGFwZSg0JTJDMC4yJTJDMSkuY29sb3IoMC4zJTJDMSUyQzElMkMwLjUpKSUwQSUyMCUyMC5yb3RhdGUoKCklM0QlM0V0aW1lKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"celeste_1",code:"JTJGJTJGJTIwUHVlcnRhcyUyMElJSSUwQSUyRiUyRiUyMHBvciUyMENlbGVzdGUlMjBCZXRhbmN1ciUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmVzc3RlYmFuJTBBJTIwJTBBb3NjKDQwJTJDMC4yJTJDMSklMEElMjAlMjAubW9kdWxhdGVTY2FsZShvc2MoNDAlMkMwJTJDMSkua2FsZWlkKDgpKSUwQSUyMCUyMC5yZXBlYXQoMiUyQzQpJTBBJTIwJTIwLm1vZHVsYXRlKG8wJTJDMC4wNSklMEElMjAlMjAubW9kdWxhdGVLYWxlaWQoc2hhcGUoNCUyQzAuMSUyQzEpKSUwQSUyMCUyMC5vdXQobzAp"},{sketch_id:"celeste_2",code:"JTBBJTIwJTJGJTJGJTIwUHVlcnRhcyUwQSUyRiUyRiUyMHBvciUyMENlbGVzdGUlMjBCZXRhbmN1ciUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmVzc3RlYmFuJTBBJTBBb3NjKDEzJTJDMCUyQzEpJTBBJTIwJTIwLm1vZHVsYXRlKG9zYygyMSUyQzAuMjUlMkMwKSklMEElMjAlMjAubW9kdWxhdGVTY2FsZShvc2MoMzQpKSUwQSUyMCUyMC5tb2R1bGF0ZUthbGVpZChvc2MoNTUpJTJDMC4xJTJDMSklMEElMjAlMjAub3V0KCk="},{sketch_id:"alexandre_0",code:"JTJGJTJGJTIwJTIydGhlLXdhbGwlMjIlMEElMkYlMkYlMjBBbGV4YW5kcmUlMjBSYW5nZWwlMEElMkYlMkYlMjB3d3cuYWxleGFuZHJlcmFuZ2VsLmFydC5iciUyRmh5ZHJhLmh0bWwlMEElMEFzcGVlZCUzRC4wMjIyJTBBb3NjKDQ4JTJDLS4xJTJDMCkudGhyZXNoKCU1Qi4zJTJDLjclNUQuZmFzdCguNzUpJTJDMCkuY29sb3IoMCUyQzAlMkMxKSUwQSUwQS5hZGQoJTBBJTIwJTIwJTIwJTIwb3NjKDI4JTJDLjElMkMwKS50aHJlc2goJTVCLjMlMkMuNyU1RC5mYXN0KC43NSklMkMwKS5yb3RhdGUoMy4xNCUyRjQpJTBBJTIwJTIwJTIwJTIwLmNvbG9yKDElMkMwJTJDMCklMEElMjAlMjAlMjAlMjAubW9kdWxhdGVTY2FsZSglMjBvc2MoNjQlMkMtLjAxJTJDMCkudGhyZXNoKCU1Qi4zJTJDLjclNUQuZmFzdCguNzUpJTJDMCklMjApJTBBKSUwQS5kaWZmKCUwQSUyMCUyMCUyMCUyMG9zYygyOCUyQy4xJTJDMCkudGhyZXNoKCU1Qi4zJTJDLjclNUQuZmFzdCguNSklMkMwKS5yb3RhdGUoMy4xNCUyRjIpJTBBJTIwJTIwJTIwJTIwLmNvbG9yKDElMkMwJTJDMSklMEElMjAlMjAlMjAlMjAubW9kdWxhdGVTY2FsZSglMjBvc2MoNjQlMkMtLjAxNSUyQzApLnRocmVzaCglNUIuMyUyQy43JTVELmZhc3QoLjUpJTJDMCklMjApJTBBKSUwQS5tb2R1bGF0ZVJvdGF0ZSglMjBvc2MoNTQlMkMtLjAwNSUyQzApLnRocmVzaCglNUIuMyUyQy43JTVELmZhc3QoLjI1KSUyQzApJTIwKSUwQS5tb2R1bGF0ZVNjYWxlKCUyMG9zYyg0NCUyQy0uMDIwJTJDMCkudGhyZXNoKCU1Qi4zJTJDLjclNUQuZmFzdCguMjUpJTJDMCklMjApJTBBLmNvbG9yYW1hKCUyMCgpJTNEJTNFTWF0aC5zaW4odGltZSUyRjI3KSouMDEyMjIlMkI5Ljg5KSUwQS5zY2FsZSgyLjEyMiklMEElMEEub3V0KCk="},{sketch_id:"alexandre_1",code:"JTBBJTIwJTJGJTJGJTIwJTIyZXllJTIwb2YlMjB0aGUlMjBiZWhvbGRlciUyMiUwQSUyRiUyRiUyMEFsZXhhbmRyZSUyMFJhbmdlbCUwQSUyRiUyRiUyMHd3dy5hbGV4YW5kcmVyYW5nZWwuYXJ0LmJyJTJGaHlkcmEuaHRtbCUwQSUwQW5vaXNlKDYlMkMuMDUpJTBBLm11bHQoJTIwb3NjKDklMkMwJTJDJTIwKCklM0QlM0VNYXRoLnNpbih0aW1lJTJGMS41KSUyQjIlMjApJTIwKSUwQS5tdWx0KCUwQSUyMCUyMCUyMCUyMG5vaXNlKDklMkMuMDMpLmJyaWdodG5lc3MoMS4yKS5jb250cmFzdCgyKSUwQSUyMCUyMCUyMCUyMC5tdWx0KCUyMG9zYyg5JTJDMCUyQyUyMCgpJTNEJTNFTWF0aC5zaW4odGltZSUyRjMpJTJCMTMlMjApJTIwKSUwQSklMEEuZGlmZiglMEElMjAlMjAlMjAlMjBub2lzZSgxNSUyQy4wNCkuYnJpZ2h0bmVzcyguMikuY29udHJhc3QoMS4zKSUwQSUyMCUyMCUyMCUyMC5tdWx0KCUyMG9zYyg5JTJDMCUyQyUyMCgpJTNEJTNFTWF0aC5zaW4odGltZSUyRjUpJTJCMTMlMjApJTIwKSUwQSUyMCUyMCUyMCUyMC5yb3RhdGUoJTIwKCklM0QlM0V0aW1lJTJGMzMlMjApJTBBKSUwQS5zY2FsZSglMjAoKSUzRCUzRU1hdGguc2luKHRpbWUlMkY2LjIpKi4xMiUyQi4xNSUyMCklMEEubW9kdWxhdGVTY2FsZSglMEElMjAlMjAlMjAlMjBvc2MoMyUyQzAlMkMwKS5tdWx0KCUyMG9zYygzJTJDMCUyQzApLnJvdGF0ZSgzLjE0JTJGMiklMjApJTBBJTIwJTIwJTIwJTIwLnJvdGF0ZSglMjAoKSUzRCUzRXRpbWUlMkYyNSUyMCkuc2NhbGUoLjM5KS5zY2FsZSgxJTJDLjYlMkMxKS5pbnZlcnQoKSUwQSUyMCUyMCUyMCUyMCUyQyUyMCgpJTNEJTNFTWF0aC5zaW4odGltZSUyRjUuMykqMS41JTJCMyUyMCUyMCklMEEucm90YXRlKCUyMCgpJTNEJTNFdGltZSUyRjIyJTIwKSUwQS5tdWx0KCUyMHNoYXBlKDEwMCUyQy45JTJDLjAxKS5zY2FsZSgxJTJDLjYlMkMxKSUyMCklMEEub3V0KCk="},{sketch_id:"alexandre_2",code:"JTJGJTJGJTIwJTIyZWdnJTIwb2YlMjB0aGUlMjBwaG9lbml4JTIyJTBBJTJGJTJGJTIwQWxleGFuZHJlJTIwUmFuZ2VsJTBBJTJGJTJGJTIwd3d3LmFsZXhhbmRyZXJhbmdlbC5hcnQuYnIlMkZoeWRyYS5odG1sJTBBJTBBc3BlZWQlM0QxLjIlMEFzaGFwZSg5OSUyQy4xNSUyQy41KS5jb2xvcigwJTJDMSUyQzIpJTBBJTBBLmRpZmYoJTIwc2hhcGUoMjQwJTJDLjUlMkMwKS5zY3JvbGxYKC4wNSkucm90YXRlKCUyMCgpJTNEJTNFdGltZSUyRjEwJTIwKS5jb2xvcigxJTJDMCUyQy43NSklMjApJTBBLmRpZmYoJTIwc2hhcGUoOTklMkMuNCUyQy4wMDIpLnNjcm9sbFgoLjEwKS5yb3RhdGUoJTIwKCklM0QlM0V0aW1lJTJGMjAlMjApLmNvbG9yKDElMkMwJTJDLjc1KSUyMCklMEEuZGlmZiglMjBzaGFwZSg5OSUyQy4zJTJDLjAwMikuc2Nyb2xsWCguMTUpLnJvdGF0ZSglMjAoKSUzRCUzRXRpbWUlMkYzMCUyMCkuY29sb3IoMSUyQzAlMkMuNzUpJTIwKSUwQS5kaWZmKCUyMHNoYXBlKDk5JTJDLjIlMkMuMDAyKS5zY3JvbGxYKC4yMCkucm90YXRlKCUyMCgpJTNEJTNFdGltZSUyRjQwJTIwKS5jb2xvcigxJTJDMCUyQy43NSklMjApJTBBLmRpZmYoJTIwc2hhcGUoOTklMkMuMSUyQy4wMDIpLnNjcm9sbFgoLjI1KS5yb3RhdGUoJTIwKCklM0QlM0V0aW1lJTJGNTAlMjApLmNvbG9yKDElMkMwJTJDLjc1KSUyMCklMEElMEEubW9kdWxhdGVTY2FsZSglMEElMjAlMjBzaGFwZSgyNDAlMkMuNSUyQzApLnNjcm9sbFgoLjA1KS5yb3RhdGUoJTIwKCklM0QlM0V0aW1lJTJGMTAlMjApJTBBJTIwJTIwJTJDJTIwKCklM0QlM0UoTWF0aC5zaW4odGltZSUyRjMpKi4yKSUyQi4yJTIwKSUwQSUwQS5zY2FsZSgxLjYlMkMuNiUyQzEpJTBBLm91dCgp"},{sketch_id:"afalfl_0",code:"JTJGJTJGZmlsZXQlMjBtaWdub24lMEElMkYlMkYlMjBBRkFMRkwlMEElMkYlMkYlMjBpbnN0YWdyYW0lMkZhX2ZfYWxmbCUyMCUwQSUwQW9zYygxMDAlMkMtMC4wMDE4JTJDMC4xNykuZGlmZihvc2MoMjAlMkMwLjAwMDA4KS5yb3RhdGUoTWF0aC5QSSUyRjAuMDAwMDMpKSUwQS5tb2R1bGF0ZVNjYWxlKG5vaXNlKDEuNSUyQzAuMTgpLm1vZHVsYXRlU2NhbGUob3NjKDEzKS5yb3RhdGUoKCklM0QlM0VNYXRoLnNpbih0aW1lJTJGMjIpKSklMkMzKSUwQS5jb2xvcigxMSUyQzAuNSUyQzAuNCUyQyUyMDAuOSUyQyUyMDAuMiUyQyUyMDAuMDExJTJDJTIwNSUyQyUyMDIyJTJDJTIwJTIwMC41JTJDJTIwLTEpLmNvbnRyYXN0KDEuNCklMEEuYWRkKHNyYyhvMCkubW9kdWxhdGUobzAlMkMuMDQpJTJDLjYlMkMlMjAuOSklMEElMjAlMjAlMkYlMkYucGl4ZWxhdGUoMC40JTJDJTIwMC4yJTJDJTIwMC4xKSUwQS5pbnZlcnQoKS5icmlnaHRuZXNzKDAuMDAwMyUyQyUyMDIpLmNvbnRyYXN0KCUyMDAuNSUyQyUyMDIlMkMlMjAwLjElMkMlMjAyKS5jb2xvcig0JTJDJTIwLTIlMkMlMjAwLjEpJTBBLm1vZHVsYXRlU2NhbGUob3NjKDIpJTJDLTAuMiUyQyUyMDIlMkMlMjAxJTJDJTIwMC4zKSUwQSUyMC5wb3N0ZXJpemUoMjAwKSUyMC5yb3RhdGUoMSUyQyUyMDAuMiUyQyUyMDAuMDElMkMlMjAwLjAwMSklMEElMjAuY29sb3IoMjIlMkMlMjAtMiUyQyUyMDAuNSUyQyUyMDAuNSUyQyUyMDAuMDAwMSUyQyUyMCUyMDAuMSUyQyUyMDAuMiUyQyUyMDgpLmNvbnRyYXN0KDAuMTglMkMlMjAwLjMlMkMlMjAwLjElMkMlMjAwLjIlMkMlMjAwLjAzJTJDJTIwMSklMjAuJTIwYnJpZ2h0bmVzcygwLjAwMDElMkMlMjAtMSUyQyUyMDEwKSUwQSUwOS5vdXQoKQ=="},{sketch_id:"eerie_ear_0",code:"JTJGJTJGJTIwZWVfMiUyMC4lMjBNVUxUSVZFUlNFJTIwLiUyMHRpbWUlMjBhbmQlMjBmZWVkYmFjayUwQSUyRiUyRiUyMGVfZSUyMCUyRiUyRiUyMCU0MGVlcmllX2VhciUwQXBhdCUyMCUzRCUyMCgpJTNEJTNFJTBBc29saWQoKSUwQS5sYXllcihzb2xpZCgpLmRpZmYoJTBBJTIwJTIwb3NjKCh0aW1lJTJGMTYpJTIwKiUyMDElMkMlMjAodGltZSUyRjEwMDApJTIwKiUyMDAuMiUyMCUyMCklMEElMjAlMjAlMjAlMjAubXVsdChvc2MoKHRpbWUlMkY4KSUyMColMjAxJTJDJTIwKHRpbWUlMkYxMDA2KSUyMColMjAwLjIlMjAlMjApLnJvdGF0ZSgxLjU3KSklMEElMjAlMjAlMjAlMjAubW9kdWxhdGUoKHNoYXBlKDEwNiUyQzElMkMwLjA1KSkpJTBBJTIwJTIwJTIwJTIwLm11bHQoc2hhcGUoMTA2JTJDMSUyQzAuMDUpKSUwQSUyMCUyMCkpJTBBJTIwJTIwLm1vZHVsYXRlU2NhbGUob3NjKDIlMkMwLjEyNSklMkMwLjEyNSklMEElMkYlMkYlMEFzb2xpZCgpJTBBLmxheWVyKHNvbGlkKDElMkMxJTJDMSklMEElMjAlMjAubXVsdChwYXQoKSUwQSUyMCUyMC5kaWZmKHNyYyhvMCkuc2NhbGUoMC4yKS5tdWx0KHNvbGlkKCklMkMlNUIwLjclMkMwLjYlMkMwLjQlMkMwLjYlNUQpLmthbGVpZCgxLjAxKS5zYXR1cmF0ZSgwLjMpKSUwQSklMEEubGF5ZXIoc29saWQoMSUyQzElMkMxKSUwQSUyMCUyMCUyMCUyMC5tYXNrKCUwQSUyMCUyMCUyMCUyMCUyMCUyMG5vaXNlKDIlMkMwLjA1KSUwQSUyMCUyMCUyMCUyMCUyMCUyMC5pbnZlcnQoKS5jb2xvcmFtYSgyKS5wb3N0ZXJpemUoOCUyQzQpLmx1bWEoMC4yNSkudGhyZXNoKDAuNSklMEElMjAlMjAlMjAlMjAlMjAlMjAubW9kdWxhdGVSb3RhdGUob3NjKDElMkMwLjUpKSUwQSUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAubXVsdChncmFkaWVudCgwLjUpLmthbGVpZCgxKS5jb2xvcmFtYSgyKS5zYXR1cmF0ZSgxLjEpLmNvbnRyYXN0KDEuNikubXVsdChzb2xpZCgpJTJDMC40NSkpJTBBJTIwJTIwKSklMEElMjAlMjAub3V0KCklMEElMkYlMkYlMEFzcGVlZCUzRCUyMDAuNSUwQQ=="},{sketch_id:"eerie_ear_1",code:"JTJGJTJGJTIwZWVfMyUyMCUyRiUyRkxJTkVTJTBBJTJGJTJGJTIwZV9lJTIwJTJGJTJGJTIwJTQwZWVyaWVfZWFyJTBBJTJGJTJGJTBBJTJGJTJGYmFzZWQlMjBvbiUwQSUyRiUyRiU0MG5hb3RvX2hpZWRhJTBBJTJGJTJGaHR0cHMlM0ElMkYlMkZuYW90b2hpZWRhLmNvbSUyRmJsb2clMkZoeWRyYS1ib29rJTJGJTBBJTJGJTJGJTBBbiUyMCUzRCUyMDglMEFhJTIwJTNEJTIwKCklMjAlM0QlM0UlMjBzaGFwZSg0JTJDMC4yNSUyQzAuMDA5KS5yb3RhdGUoKCklM0QlM0V0aW1lJTJGLTQwKS5yZXBlYXQobiUyQ24pJTBBYSgpLmFkZChhKCkuc2Nyb2xsWCgwLjUlMkZuKS5zY3JvbGxZKDAuNSUyRm4pJTJDMSkubW9kdWxhdGUobzElMkMwLjEpLm1vZHVsYXRlKHNyYyhvMSkuY29sb3IoMTAlMkMxMCkuYWRkKHNvbGlkKC0xNCUyQy0xNCkpLnJvdGF0ZSgoKSUzRCUzRXRpbWUlMkY0MCklMkMwLjAwNSkuYWRkKHNyYyhvMSkuc2Nyb2xsWSgwLjAxMiUyQzAuMDIpJTJDMC41KS5vdXQobzEpJTBBc3JjKG8xKS5jb2xvcmFtYSgxLjIpLnBvc3Rlcml6ZSg0KS5zYXR1cmF0ZSgwLjcpLmNvbnRyYXN0KDYpLm11bHQoc29saWQoKSUyQzAuMTUpLm91dChvMCklMEElMEElMEE="},{sketch_id:"eerie_ear_2",code:"JTJGJTJGZWVfNSUyMC4lMjBGVUdJVElWRSUyMEdFT01FVFJZJTIwVkhTJTIwLiUyMGF1ZGlvcmVhY3RpdmUlMjBzaGFwZXMlMjBhbmQlMjBncmFkaWVudHMlMEElMkYlMkYlMjBlX2UlMjAlMkYlMkYlMjAlNDBlZXJpZV9lYXIlMEElMkYlMkYlMEFzJTNEJTIwKCklM0QlM0UlMEElMjAlMjBzaGFwZSg0KSUwQS5zY3JvbGxYKCU1Qi0wLjUlMkMtMC4yJTJDMC4zJTJDLTAuMSUyQy0wLjElNUQuc21vb3RoKDAuMSkuZmFzdCgwLjMpKSUwQS5zY3JvbGxZKCU1QjAuMjUlMkMtMC4yJTJDMC4zJTJDLTAuMSUyQzAuMiU1RC5zbW9vdGgoMC45KS5mYXN0KDAuMTUpKSUwQSUyRiUyRiUwQXNvbGlkKCklMEEuYWRkKGdyYWRpZW50KDMlMkMwLjA1KS5yb3RhdGUoMC4wNSUyQy0wLjIpLnBvc3Rlcml6ZSgyKS5jb250cmFzdCgwLjYpJTJDJTVCMSUyQzAlMkMxJTJDMC41JTJDMCUyQzAuNiU1RC5zbW9vdGgoMC45KSklMEEuYWRkKHMoKSklMEEubXVsdChzKCkuc2NhbGUoMC44KS5zY3JvbGxYKDAuMDEpLnNjcm9sbFkoLTAuMDEpLnJvdGF0ZSgwLjIlMkMwLjA2KS5hZGQoZ3JhZGllbnQoMykuY29udHJhc3QoMC42KSUyQyU1QjElMkMwJTJDMSUyQzAuNSU1RC5zbW9vdGgoMC45KSUyQzAuNSkubXVsdChzcmMobzApLnNjYWxlKDAuOTgpJTJDKCklM0QlM0VhLmZmdCU1QjAlNUQqOSklMEElMjAlMjAlMjAlMjAlMjApJTBBLmRpZmYocygpLm1vZHVsYXRlKHNoYXBlKDUwMCkpLnNjYWxlKCU1QjEuNyUyQzEuMiU1RC5zbW9vdGgoMC45KS5mYXN0KDAuMDUpKSklMEEuYWRkKGdyYWRpZW50KDIpLmludmVydCgpJTJDKCklM0QlM0VhLmZmdCU1QjIlNUQpJTBBLm11bHQoZ3JhZGllbnQoKCklM0QlM0VhLmZmdCU1QjMlNUQqOCkpJTBBLmJsZW5kKHNyYygobzApJTJDKCklM0QlM0VhLmZmdCU1QjElNUQqNDApKSUwQS5hZGQodm9yb25vaSgoKSUzRCUzRWEuZmZ0JTVCMSU1RCUyQygpJTNEJTNFYS5mZnQlNUIzJTVEJTJDKCklM0QlM0VhLmZmdCU1QjAlNUQpLnRocmVzaCgwLjcpLnBvc3Rlcml6ZSgyJTJDNCkubHVtYSgwLjkpLnNjcm9sbFkoMSUyQygpJTNEJTNFYS5mZnQlNUIwJTVEJTJGMzApLmNvbG9yYW1hKDMpLnRocmVzaCgoKSUzRCUzRWEuZmZ0JTVCMSU1RCkuc2NhbGUoKCklM0QlM0VhLmZmdCU1QjMlNUQqMiklMkMoKSUzRCUzRWEuZmZ0JTVCMCU1RCUyRjIpJTBBJTIwJTIwLm91dCgpJTBBJTJGJTJGJTBBc3BlZWQlM0QlMjAxJTBBJTBBYS5zZXRTbW9vdGgoMC45Nik="},{sketch_id:"eerie_ear_3",code:"JTJGJTJGJTIwZWVfMSUyMC4lMjBFWUUlMjBJTiUyMFRIRSUyMFNLWSUwQSUyRiUyRmV4YW1wbGUlMjBvZiUyMG1hc2slMjBhbmQlMjBmdW5jdGlvbiUyMG1vZHVsYXRpb24lMEElMkYlMkYlMjBlX2UlMjAlMkYlMkYlMjAlNDBlZXJpZV9lYXIlMEFub2lzZSgxOCklMEElMjAlMjAuY29sb3JhbWEoMSklMEElMjAlMjAucG9zdGVyaXplKDIpJTBBJTIwJTIwLmthbGVpZCg1MCklMEElMjAlMjAubWFzayglMEElMjAlMjAlMjAlMjBzaGFwZSgyNSUyQyUyMDAuMjUpLm1vZHVsYXRlU2NhbGUoJTBBJTIwJTIwJTIwJTIwJTIwJTIwbm9pc2UoNDAwLjUlMkMlMjAwLjUpJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCklMEElMjAlMjAubWFzayhzaGFwZSg0MDAlMkMlMjAxJTJDJTIwMi4xMjUpKSUwQSUyMCUyMC5tb2R1bGF0ZVNjYWxlKG9zYyg2JTJDJTIwMC4xMjUlMkMlMjAwLjA1KS5rYWxlaWQoNTApKSUwQSUyMCUyMC5tdWx0KG9zYygyMCUyQyUyMDAuMDUlMkMlMjAyLjQpLmthbGVpZCg1MCklMkMlMjAwLjI1KSUwQSUyMCUyMC5zY2FsZSgxLjc1JTJDJTIwMC42NSUyQyUyMDAuNSklMEElMjAlMjAubW9kdWxhdGUobm9pc2UoMC41KSklMEElMjAlMjAuc2F0dXJhdGUoNiklMEElMjAlMjAucG9zdGVyaXplKDQlMkMlMjAwLjIpJTBBJTIwJTIwLnNjYWxlKDEuNSklMEElMjAlMjAub3V0KCklM0IlMEE="}]},{}],232:[function(require,module,exports){const request=require("superagent");const examples=require("./examples.json");const sketches=[];const license=`// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/`;class Gallery{constructor(callback,state,emitter){this.sketches=[];this.examples=[];this.current=null;this.code=null;this.exampleIndex=null;this.state=state;this.emitter=emitter;this.serverURL=this.state.serverURL===null?"":this.state.serverURL;this.examples=examples;this.setSketchFromURL(callback);window.addEventListener("popstate",(event=>{this.setSketchFromURL(callback)}));this.setRandomSketch=this.setRandomSketch.bind(this)}clear(){this.current=null;this.code=null;let newurl=window.location.protocol+"//"+window.location.host+window.location.pathname;window.history.pushState({path:newurl},"",newurl);this.url=newurl}setSketchFromURL(callback){hush();render(o0);let searchParams=new URLSearchParams(window.location.search);this.searchParams=searchParams;let base64Code=searchParams.get("code");let sketch_id=searchParams.get("sketch_id");let showCode=searchParams.get("showCode");let code="";this.foundSketch=false;if(sketch_id){var sketch=this.getExampleById(sketch_id);if(sketch){this.setSketch(sketch);callback(this.code,false)}else{request.get(`${this.state.serverURL}/sketchById`).query({sketch_id:sketch_id}).end(((err,res)=>{if(err){console.log("err getting sketches",err);this.setSketchFromCode(base64Code,callback)}else{this.sketches=JSON.parse(res.text);if(this.sketches.length>0){this.setSketch(this.sketches[0]);this.foundSketch=true;callback(this.code,this.foundSketch)}else{this.setSketchFromCode(base64Code,callback)}}}))}}else{this.setSketchFromCode(base64Code,callback)}if(showCode==="false"){this.emitter.emit("hideAll");this.emitter.emit("hide info")}}setSketchFromCode(base64Code,callback){if(base64Code){this.code=this.decodeBase64(base64Code);this.foundSketch=true}else{this.setRandomSketch()}callback(this.code,this.foundSketch)}saveImage(){}setToURL(params){this.searchParams.delete("sketch_id");this.searchParams.delete("code");let url_params;if(params.sketch_id){url_params=`sketch_id=${params.sketch_id}`;this.searchParams.append("sketch_id",params.sketch_id)}else{url_params=`sketch_id=${params.sketch_id}&code=${params.code}`;this.searchParams.append("sketch_id",params.sketch_id);this.searchParams.append("code",params.code)}let newurl=window.location.protocol+"//"+window.location.host+window.location.pathname+"?"+this.searchParams.toString();window.history.replaceState({path:newurl},"",newurl);this.url=newurl}encodeBase64(text){return btoa(encodeURIComponent(text))}decodeBase64(base64Code){return decodeURIComponent(atob(base64Code))}setSketch(sketch){let code=this.decodeBase64(sketch.code);if(code.indexOf(license)<0)code=`${license}\n${code}\n`;this.code=code;this.current=sketch;this.setToURL(sketch)}setRandomSketch(){if(this.examples.length>0){let index;index=Math.floor(Math.random()*this.examples.length);while(index===this.exampleIndex){index=Math.floor(Math.random()*this.examples.length)}this.exampleIndex=index;this.setSketch(this.examples[index])}else{var startString="osc("+2+Math.floor(Math.pow(10,Math.random()*2))+")";startString+=".color("+Math.random().toFixed(2)+","+Math.random().toFixed(2)+","+Math.random().toFixed(2)+")";startString+=".rotate("+Math.random().toFixed(2)+")";startString+=".out(o0)";this.code=startString}}shareSketch(code,hydra,name){this.saveSketch(code,(()=>{console.log("URL is",this.url,"sketch is",this.current);hydra.getScreenImage((img=>{request.post(`${this.state.serverURL}/image`).attach("previewImage",img).query({url:this.url,sketch_id:this.current.sketch_id,name:name}).end(((err,res)=>{if(err){console.log("error postingimage",err)}else{console.log("image response",res.text)}}))}))}))}saveSketch(code,callback){let self=this;let base64=this.encodeBase64(code);let query={code:base64,parent:this.current?this.current.sketch_id:null};console.log("saving in gallery",query);request.post(`${this.state.serverURL}/sketch`).query(query).end(((err,res)=>{if(err){console.log("error posting sketch",err);if(callback)callback(err)}else{console.log("response",res.text);self.setSketch({sketch_id:res.text,code:base64});if(callback)callback(null)}}))}saveLocally(code){let base64=this.encodeBase64(code);this.searchParams.delete("sketch_id");this.searchParams.delete("code");this.searchParams.append("code",base64);var url_params=this.searchParams.toString();let newurl=window.location.protocol+"//"+window.location.host+window.location.pathname+"?"+url_params;window.history.pushState({path:newurl},"",newurl);this.url=newurl}getExampleById(id){var sketches=this.examples.filter((sketch=>sketch.sketch_id===id));if(sketches.length<=0)sketches=this.sketches.filter((sketch=>sketch.sketch_id===id));return sketches[0]}}module.exports=Gallery},{"./examples.json":231,superagent:218}],233:[function(require,module,exports){const i18next=require("i18next");const i18nextBrowserLanguageDetector=require("i18next-browser-languagedetector");const languageResources=require("./text-elements.js");const availableLanguages=["ja","es","ar","id","pt-br","ch","ko","fr"];const languagePath=lang=>`https://raw.githubusercontent.com/hydra-synth/l10n/main/${lang}/editor.json`;i18next.use(i18nextBrowserLanguageDetector).init({debug:true,fallbackLng:"en",partialBundledLanguages:true,resources:languageResources});module.exports=function store(state,emitter){const languages={};let searchParams=new URLSearchParams(window.location.search);let lang=searchParams.get("l10n-lang");let path=searchParams.get("l10n-url");availableLanguages.forEach((lang=>{loadLanguageFromURL(lang,languagePath(lang))}));if(lang!==null&&path!==null){loadLanguageFromURL(lang,path)}updateAvailableLanguages();emitter.on("set language",(lang=>{i18next.changeLanguage(lang,((err,t)=>{state.translation.selectedLanguage=lang;emitter.emit("render")}))}));function updateAvailableLanguages(){Object.keys(languageResources).forEach((key=>{const k=key.split("-")[0];languages[k]=i18next.getFixedT(k)("language-name")}));state.translation={t:i18next.t,languages:languages,selectedLanguage:i18next.language}}function loadLanguageFromURL(lang="es",path){const css="color: purple; background: orange; font-size: 14px;padding:10px";console.log(`%cloading translation for ${lang} from ${path}`,css);fetch(path).then((res=>{if(!res.ok){return res.text().then((text=>{throw new Error(text)}))}else{return res.json()}})).then((json=>{window.i18n=i18next;console.log("adding language",lang,json);const k=lang.split("-")[0];i18next.addResourceBundle(k,"translation",json);const languages={};updateAvailableLanguages();emitter.emit("render")}))}}},{"./text-elements.js":235,i18next:99,"i18next-browser-languagedetector":98}],234:[function(require,module,exports){const Gallery=require("./gallery.js");const repl=require("../views/editor/repl.js");module.exports=function store(state,emitter){state.showInfo=true;state.showUI=true;const SERVER_URL="https://api.hydrasynth.xyz";state.serverURL=SERVER_URL!==undefined?SERVER_URL:null;let sketches;emitter.on("DOMContentLoaded",(function(){const editor=state.editor.editor;sketches=new Gallery(((code,sketchFromURL)=>{editor.setValue(code);repl.eval(code);if(sketchFromURL){state.showInfo=false}else{state.showInfo=true}emitter.emit("render")}),state,emitter)}));emitter.on("screencap",(()=>{screencap();const editor=state.editor.editor;const text=editor.getValue();const data=new Blob([text],{type:"text/plain"});const a=document.createElement("a");a.style.display="none";let d=new Date;a.download=`hydra-${d.getFullYear()}-${d.getMonth()+1}-${d.getDate()}-${d.getHours()}.${d.getMinutes()}.${d.getSeconds()}.js`;a.href=URL.createObjectURL(data);a.click();setTimeout((()=>{window.URL.revokeObjectURL(a.href)}),300)}));emitter.on("editor:randomize",(function(evt){const editor=state.editor.editor;if(evt.shiftKey){editor.mutator.doUndo()}else{editor.mutator.mutate({reroll:false,changeTransform:evt.metaKey});editor.formatCode();sketches.saveLocally(editor.getValue())}}));function clearAll(){const editor=state.editor.editor;hush();speed=1;sketches.clear();editor.clear()}emitter.on("editor:clearAll",(function(){clearAll()}));emitter.on("editor:evalAll",(function(){const editor=state.editor.editor;const code=editor.getValue();repl.eval(code,((string,err)=>{editor.flashCode();if(!err)sketches.saveLocally(code)}))}));emitter.on("editor:evalLine",(line=>{repl.eval(line)}));emitter.on("editor:evalBlock",(block=>{repl.eval(block)}));emitter.on("gallery:saveToURL",(function(){let editor=state.editor.editor;const editorText=editor.getValue();sketches.saveLocally(editorText)}));emitter.on("gallery:shareSketch",(function(){let editor=state.editor.editor;const editorText=editor.getValue();repl.eval(editor.getValue(),((code,error)=>{if(!error){showConfirmation((name=>{sketches.shareSketch(editorText,state.hydra.hydra,name)}),(()=>{}))}else{console.warn(error)}}))}));emitter.on("gallery:showExample",(()=>{const editor=state.editor.editor;clearAll();sketches.setRandomSketch();editor.setValue(sketches.code);repl.eval(editor.getValue())}));emitter.on("show confirmation",(function(count){}));emitter.on("clear all",(function(count){}));emitter.on("hideAll",(function(){state.showUI=!state.showUI;emitter.emit("render")}));emitter.on("toggle info",(function(count){state.showInfo=!state.showInfo;emitter.emit("render")}));emitter.on("hude info",(function(count){state.showInfo=false;emitter.emit("render")}));emitter.on("mutate sketch",(function(){}))};function showConfirmation(successCallback,terminateCallback){var c=prompt(`\n\n ////:: ḣ̖̻͛̓y҉̃̀̋̑ḑ̴̞͛̒r̴̨̦͕̝ā̤̓̍͘ s̠҉͍͊ͅḳ̯͍̑ͦẹ̿͋̒̕t̲̂̓ͩ̑c͕͗ͤ̕̕ḣ̖̻͛̓ ĝ̽̓̀͑ā̤̓̍͘l̙͖̑̾ͣl̙͖̑̾ͣẹ̿͋̒̕r̴̨̦͕̝y҉̃̀̋̑ ::////\n\n\n🎨 Click 'OK' to add your sketch and screenshot to the gallery of hydra sketches at https://botsin.space/@hydra. \n\n‼️ Make sure you are ready to share - there is no undo button!\n\n💖 Thank you for sharing! You are also warmly invited to join the the live coding server on the fediverse at https://social.toplap.org/.\n`,"your name, mastodon handle, and/or a short description");if(c!==null){successCallback(c)}else{terminateCallback()}}},{"../views/editor/repl.js":244,"./gallery.js":232}],235:[function(require,module,exports){module.exports={en:{translation:{"language-name":"english",toolbar:{run:"Run all code (ctrl+shift+enter)",upload:"upload to gallery",clear:"clear all",shuffle:"show random sketch",random:"make random change","show-info":"show info window","hide-info":"hide info window"},info:{title:"hydra",subtitle:"live coding video synth",description:"Hydra is live code-able video synth and coding environment that runs directly in the browser. It is free and open-source and made for beginners and experts alike.","get-started-title":"To get started:","get-started-list":["Close this window","Change some numbers","Type Ctrl + Shift + Enter"],"description-detailed":"Hydra is written in JavaScript and compiles to WebGL under the hood. The syntax is inspired by analog modular synthesis, in which chaining or patching a set of transformations together generates a visual result.",uses:"Hydra can be used:","uses-list":["to mix and add effects to camera feeds, screenshares, live streams, and videos","to create generative and audio-reactive visuals, and share them online with others","in combination with other javascript libraries such as P5.js, Tone.js, THREE.js, or gibber","to add interactive video effects to a website","to experiment with and learn about video feedback, fractals, and pixel operations","to stream video between browsers and live-jam with others online"],author:"Created by olivia.","more-info":"For more information and instructions, see: the interactive documentation, a list of hydra functions, the community database of projects and tutorials, a gallery of user-generated sketches, and the source code on github,","more-info-forums":"There is also an active Discord server and facebook group for hydra users+contributors.",support:"If you enjoy using Hydra, please consider supporting continued development <3 ."}}}}},{}],236:[function(require,module,exports){const html=require("choo/html");const Component=require("choo/component");const HydraEditor=require("./editor/editor.js");const log=require("./editor/log.js");module.exports=class Editor extends Component{constructor(id,state,emit){super(id);this.local=state.components[id]={};state.editor=this;this.emit=emit}load(element){log.init(this.logElement);this.editor=new HydraEditor(this.textEl);this.editor.on("*",((e,args)=>{this.emit(e,args)}));this.innerText=document.getElementsByClassName("CodeMirror")[0]}hide(){this.innerText.style.opacity=0}show(){this.innerText.style.opacity=1;this.innerText.style.pointerEvents="all"}update(state){if(state.showInfo===true||state.showUI===false){this.hide()}else{this.show()}return false}createElement({width:width=window.innerWidth,height:height=window.innerHeight}={}){this.textEl=html` `;this.logElement=html`
`;return html`
+const debug=require("debug")("simple-peer");const getBrowserRTC=require("get-browser-rtc");const randombytes=require("randombytes");const stream=require("readable-stream");const queueMicrotask=require("queue-microtask");const errCode=require("err-code");const{Buffer:Buffer}=require("buffer");const MAX_BUFFERED_AMOUNT=64*1024;const ICECOMPLETE_TIMEOUT=5*1e3;const CHANNEL_CLOSING_TIMEOUT=5*1e3;function filterTrickle(sdp){return sdp.replace(/a=ice-options:trickle\s\n/g,"")}function warn(message){console.warn(message)}class Peer extends stream.Duplex{constructor(opts){opts=Object.assign({allowHalfOpen:false},opts);super(opts);this._id=randombytes(4).toString("hex").slice(0,7);this._debug("new peer %o",opts);this.channelName=opts.initiator?opts.channelName||randombytes(20).toString("hex"):null;this.initiator=opts.initiator||false;this.channelConfig=opts.channelConfig||Peer.channelConfig;this.channelNegotiated=this.channelConfig.negotiated;this.config=Object.assign({},Peer.config,opts.config);this.offerOptions=opts.offerOptions||{};this.answerOptions=opts.answerOptions||{};this.sdpTransform=opts.sdpTransform||(sdp=>sdp);this.streams=opts.streams||(opts.stream?[opts.stream]:[]);this.trickle=opts.trickle!==undefined?opts.trickle:true;this.allowHalfTrickle=opts.allowHalfTrickle!==undefined?opts.allowHalfTrickle:false;this.iceCompleteTimeout=opts.iceCompleteTimeout||ICECOMPLETE_TIMEOUT;this.destroyed=false;this.destroying=false;this._connected=false;this.remoteAddress=undefined;this.remoteFamily=undefined;this.remotePort=undefined;this.localAddress=undefined;this.localFamily=undefined;this.localPort=undefined;this._wrtc=opts.wrtc&&typeof opts.wrtc==="object"?opts.wrtc:getBrowserRTC();if(!this._wrtc){if(typeof window==="undefined"){throw errCode(new Error("No WebRTC support: Specify `opts.wrtc` option in this environment"),"ERR_WEBRTC_SUPPORT")}else{throw errCode(new Error("No WebRTC support: Not a supported browser"),"ERR_WEBRTC_SUPPORT")}}this._pcReady=false;this._channelReady=false;this._iceComplete=false;this._iceCompleteTimer=null;this._channel=null;this._pendingCandidates=[];this._isNegotiating=false;this._firstNegotiation=true;this._batchedNegotiation=false;this._queuedNegotiation=false;this._sendersAwaitingStable=[];this._senderMap=new Map;this._closingInterval=null;this._remoteTracks=[];this._remoteStreams=[];this._chunk=null;this._cb=null;this._interval=null;try{this._pc=new this._wrtc.RTCPeerConnection(this.config)}catch(err){this.destroy(errCode(err,"ERR_PC_CONSTRUCTOR"));return}this._isReactNativeWebrtc=typeof this._pc._peerConnectionId==="number";this._pc.oniceconnectionstatechange=()=>{this._onIceStateChange()};this._pc.onicegatheringstatechange=()=>{this._onIceStateChange()};this._pc.onconnectionstatechange=()=>{this._onConnectionStateChange()};this._pc.onsignalingstatechange=()=>{this._onSignalingStateChange()};this._pc.onicecandidate=event=>{this._onIceCandidate(event)};if(typeof this._pc.peerIdentity==="object"){this._pc.peerIdentity.catch((err=>{this.destroy(errCode(err,"ERR_PC_PEER_IDENTITY"))}))}if(this.initiator||this.channelNegotiated){this._setupData({channel:this._pc.createDataChannel(this.channelName,this.channelConfig)})}else{this._pc.ondatachannel=event=>{this._setupData(event)}}if(this.streams){this.streams.forEach((stream=>{this.addStream(stream)}))}this._pc.ontrack=event=>{this._onTrack(event)};this._debug("initial negotiation");this._needsNegotiation();this._onFinishBound=()=>{this._onFinish()};this.once("finish",this._onFinishBound)}get bufferSize(){return this._channel&&this._channel.bufferedAmount||0}get connected(){return this._connected&&this._channel.readyState==="open"}address(){return{port:this.localPort,family:this.localFamily,address:this.localAddress}}signal(data){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot signal after peer is destroyed"),"ERR_DESTROYED");if(typeof data==="string"){try{data=JSON.parse(data)}catch(err){data={}}}this._debug("signal()");if(data.renegotiate&&this.initiator){this._debug("got request to renegotiate");this._needsNegotiation()}if(data.transceiverRequest&&this.initiator){this._debug("got request for transceiver");this.addTransceiver(data.transceiverRequest.kind,data.transceiverRequest.init)}if(data.candidate){if(this._pc.remoteDescription&&this._pc.remoteDescription.type){this._addIceCandidate(data.candidate)}else{this._pendingCandidates.push(data.candidate)}}if(data.sdp){this._pc.setRemoteDescription(new this._wrtc.RTCSessionDescription(data)).then((()=>{if(this.destroyed)return;this._pendingCandidates.forEach((candidate=>{this._addIceCandidate(candidate)}));this._pendingCandidates=[];if(this._pc.remoteDescription.type==="offer")this._createAnswer()})).catch((err=>{this.destroy(errCode(err,"ERR_SET_REMOTE_DESCRIPTION"))}))}if(!data.sdp&&!data.candidate&&!data.renegotiate&&!data.transceiverRequest){this.destroy(errCode(new Error("signal() called with invalid signal data"),"ERR_SIGNALING"))}}_addIceCandidate(candidate){const iceCandidateObj=new this._wrtc.RTCIceCandidate(candidate);this._pc.addIceCandidate(iceCandidateObj).catch((err=>{if(!iceCandidateObj.address||iceCandidateObj.address.endsWith(".local")){warn("Ignoring unsupported ICE candidate.")}else{this.destroy(errCode(err,"ERR_ADD_ICE_CANDIDATE"))}}))}send(chunk){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot send after peer is destroyed"),"ERR_DESTROYED");this._channel.send(chunk)}addTransceiver(kind,init){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot addTransceiver after peer is destroyed"),"ERR_DESTROYED");this._debug("addTransceiver()");if(this.initiator){try{this._pc.addTransceiver(kind,init);this._needsNegotiation()}catch(err){this.destroy(errCode(err,"ERR_ADD_TRANSCEIVER"))}}else{this.emit("signal",{type:"transceiverRequest",transceiverRequest:{kind:kind,init:init}})}}addStream(stream){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot addStream after peer is destroyed"),"ERR_DESTROYED");this._debug("addStream()");stream.getTracks().forEach((track=>{this.addTrack(track,stream)}))}addTrack(track,stream){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot addTrack after peer is destroyed"),"ERR_DESTROYED");this._debug("addTrack()");const submap=this._senderMap.get(track)||new Map;let sender=submap.get(stream);if(!sender){sender=this._pc.addTrack(track,stream);submap.set(stream,sender);this._senderMap.set(track,submap);this._needsNegotiation()}else if(sender.removed){throw errCode(new Error("Track has been removed. You should enable/disable tracks that you want to re-add."),"ERR_SENDER_REMOVED")}else{throw errCode(new Error("Track has already been added to that stream."),"ERR_SENDER_ALREADY_ADDED")}}replaceTrack(oldTrack,newTrack,stream){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot replaceTrack after peer is destroyed"),"ERR_DESTROYED");this._debug("replaceTrack()");const submap=this._senderMap.get(oldTrack);const sender=submap?submap.get(stream):null;if(!sender){throw errCode(new Error("Cannot replace track that was never added."),"ERR_TRACK_NOT_ADDED")}if(newTrack)this._senderMap.set(newTrack,submap);if(sender.replaceTrack!=null){sender.replaceTrack(newTrack)}else{this.destroy(errCode(new Error("replaceTrack is not supported in this browser"),"ERR_UNSUPPORTED_REPLACETRACK"))}}removeTrack(track,stream){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot removeTrack after peer is destroyed"),"ERR_DESTROYED");this._debug("removeSender()");const submap=this._senderMap.get(track);const sender=submap?submap.get(stream):null;if(!sender){throw errCode(new Error("Cannot remove track that was never added."),"ERR_TRACK_NOT_ADDED")}try{sender.removed=true;this._pc.removeTrack(sender)}catch(err){if(err.name==="NS_ERROR_UNEXPECTED"){this._sendersAwaitingStable.push(sender)}else{this.destroy(errCode(err,"ERR_REMOVE_TRACK"))}}this._needsNegotiation()}removeStream(stream){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot removeStream after peer is destroyed"),"ERR_DESTROYED");this._debug("removeSenders()");stream.getTracks().forEach((track=>{this.removeTrack(track,stream)}))}_needsNegotiation(){this._debug("_needsNegotiation");if(this._batchedNegotiation)return;this._batchedNegotiation=true;queueMicrotask((()=>{this._batchedNegotiation=false;if(this.initiator||!this._firstNegotiation){this._debug("starting batched negotiation");this.negotiate()}else{this._debug("non-initiator initial negotiation request discarded")}this._firstNegotiation=false}))}negotiate(){if(this.destroying)return;if(this.destroyed)throw errCode(new Error("cannot negotiate after peer is destroyed"),"ERR_DESTROYED");if(this.initiator){if(this._isNegotiating){this._queuedNegotiation=true;this._debug("already negotiating, queueing")}else{this._debug("start negotiation");setTimeout((()=>{this._createOffer()}),0)}}else{if(this._isNegotiating){this._queuedNegotiation=true;this._debug("already negotiating, queueing")}else{this._debug("requesting negotiation from initiator");this.emit("signal",{type:"renegotiate",renegotiate:true})}}this._isNegotiating=true}destroy(err){this._destroy(err,(()=>{}))}_destroy(err,cb){if(this.destroyed||this.destroying)return;this.destroying=true;this._debug("destroying (error: %s)",err&&(err.message||err));queueMicrotask((()=>{this.destroyed=true;this.destroying=false;this._debug("destroy (error: %s)",err&&(err.message||err));this.readable=this.writable=false;if(!this._readableState.ended)this.push(null);if(!this._writableState.finished)this.end();this._connected=false;this._pcReady=false;this._channelReady=false;this._remoteTracks=null;this._remoteStreams=null;this._senderMap=null;clearInterval(this._closingInterval);this._closingInterval=null;clearInterval(this._interval);this._interval=null;this._chunk=null;this._cb=null;if(this._onFinishBound)this.removeListener("finish",this._onFinishBound);this._onFinishBound=null;if(this._channel){try{this._channel.close()}catch(err){}this._channel.onmessage=null;this._channel.onopen=null;this._channel.onclose=null;this._channel.onerror=null}if(this._pc){try{this._pc.close()}catch(err){}this._pc.oniceconnectionstatechange=null;this._pc.onicegatheringstatechange=null;this._pc.onsignalingstatechange=null;this._pc.onicecandidate=null;this._pc.ontrack=null;this._pc.ondatachannel=null}this._pc=null;this._channel=null;if(err)this.emit("error",err);this.emit("close");cb()}))}_setupData(event){if(!event.channel){return this.destroy(errCode(new Error("Data channel event is missing `channel` property"),"ERR_DATA_CHANNEL"))}this._channel=event.channel;this._channel.binaryType="arraybuffer";if(typeof this._channel.bufferedAmountLowThreshold==="number"){this._channel.bufferedAmountLowThreshold=MAX_BUFFERED_AMOUNT}this.channelName=this._channel.label;this._channel.onmessage=event=>{this._onChannelMessage(event)};this._channel.onbufferedamountlow=()=>{this._onChannelBufferedAmountLow()};this._channel.onopen=()=>{this._onChannelOpen()};this._channel.onclose=()=>{this._onChannelClose()};this._channel.onerror=event=>{const err=event.error instanceof Error?event.error:new Error(`Datachannel error: ${event.message} ${event.filename}:${event.lineno}:${event.colno}`);this.destroy(errCode(err,"ERR_DATA_CHANNEL"))};let isClosing=false;this._closingInterval=setInterval((()=>{if(this._channel&&this._channel.readyState==="closing"){if(isClosing)this._onChannelClose();isClosing=true}else{isClosing=false}}),CHANNEL_CLOSING_TIMEOUT)}_read(){}_write(chunk,encoding,cb){if(this.destroyed)return cb(errCode(new Error("cannot write after peer is destroyed"),"ERR_DATA_CHANNEL"));if(this._connected){try{this.send(chunk)}catch(err){return this.destroy(errCode(err,"ERR_DATA_CHANNEL"))}if(this._channel.bufferedAmount>MAX_BUFFERED_AMOUNT){this._debug("start backpressure: bufferedAmount %d",this._channel.bufferedAmount);this._cb=cb}else{cb(null)}}else{this._debug("write before connect");this._chunk=chunk;this._cb=cb}}_onFinish(){if(this.destroyed)return;const destroySoon=()=>{setTimeout((()=>this.destroy()),1e3)};if(this._connected){destroySoon()}else{this.once("connect",destroySoon)}}_startIceCompleteTimeout(){if(this.destroyed)return;if(this._iceCompleteTimer)return;this._debug("started iceComplete timeout");this._iceCompleteTimer=setTimeout((()=>{if(!this._iceComplete){this._iceComplete=true;this._debug("iceComplete timeout completed");this.emit("iceTimeout");this.emit("_iceComplete")}}),this.iceCompleteTimeout)}_createOffer(){if(this.destroyed)return;this._pc.createOffer(this.offerOptions).then((offer=>{if(this.destroyed)return;if(!this.trickle&&!this.allowHalfTrickle)offer.sdp=filterTrickle(offer.sdp);offer.sdp=this.sdpTransform(offer.sdp);const sendOffer=()=>{if(this.destroyed)return;const signal=this._pc.localDescription||offer;this._debug("signal");this.emit("signal",{type:signal.type,sdp:signal.sdp})};const onSuccess=()=>{this._debug("createOffer success");if(this.destroyed)return;if(this.trickle||this._iceComplete)sendOffer();else this.once("_iceComplete",sendOffer)};const onError=err=>{this.destroy(errCode(err,"ERR_SET_LOCAL_DESCRIPTION"))};this._pc.setLocalDescription(offer).then(onSuccess).catch(onError)})).catch((err=>{this.destroy(errCode(err,"ERR_CREATE_OFFER"))}))}_requestMissingTransceivers(){if(this._pc.getTransceivers){this._pc.getTransceivers().forEach((transceiver=>{if(!transceiver.mid&&transceiver.sender.track&&!transceiver.requested){transceiver.requested=true;this.addTransceiver(transceiver.sender.track.kind)}}))}}_createAnswer(){if(this.destroyed)return;this._pc.createAnswer(this.answerOptions).then((answer=>{if(this.destroyed)return;if(!this.trickle&&!this.allowHalfTrickle)answer.sdp=filterTrickle(answer.sdp);answer.sdp=this.sdpTransform(answer.sdp);const sendAnswer=()=>{if(this.destroyed)return;const signal=this._pc.localDescription||answer;this._debug("signal");this.emit("signal",{type:signal.type,sdp:signal.sdp});if(!this.initiator)this._requestMissingTransceivers()};const onSuccess=()=>{if(this.destroyed)return;if(this.trickle||this._iceComplete)sendAnswer();else this.once("_iceComplete",sendAnswer)};const onError=err=>{this.destroy(errCode(err,"ERR_SET_LOCAL_DESCRIPTION"))};this._pc.setLocalDescription(answer).then(onSuccess).catch(onError)})).catch((err=>{this.destroy(errCode(err,"ERR_CREATE_ANSWER"))}))}_onConnectionStateChange(){if(this.destroyed)return;if(this._pc.connectionState==="failed"){this.destroy(errCode(new Error("Connection failed."),"ERR_CONNECTION_FAILURE"))}}_onIceStateChange(){if(this.destroyed)return;const iceConnectionState=this._pc.iceConnectionState;const iceGatheringState=this._pc.iceGatheringState;this._debug("iceStateChange (connection: %s) (gathering: %s)",iceConnectionState,iceGatheringState);this.emit("iceStateChange",iceConnectionState,iceGatheringState);if(iceConnectionState==="connected"||iceConnectionState==="completed"){this._pcReady=true;this._maybeReady()}if(iceConnectionState==="failed"){this.destroy(errCode(new Error("Ice connection failed."),"ERR_ICE_CONNECTION_FAILURE"))}if(iceConnectionState==="closed"){this.destroy(errCode(new Error("Ice connection closed."),"ERR_ICE_CONNECTION_CLOSED"))}}getStats(cb){const flattenValues=report=>{if(Object.prototype.toString.call(report.values)==="[object Array]"){report.values.forEach((value=>{Object.assign(report,value)}))}return report};if(this._pc.getStats.length===0||this._isReactNativeWebrtc){this._pc.getStats().then((res=>{const reports=[];res.forEach((report=>{reports.push(flattenValues(report))}));cb(null,reports)}),(err=>cb(err)))}else if(this._pc.getStats.length>0){this._pc.getStats((res=>{if(this.destroyed)return;const reports=[];res.result().forEach((result=>{const report={};result.names().forEach((name=>{report[name]=result.stat(name)}));report.id=result.id;report.type=result.type;report.timestamp=result.timestamp;reports.push(flattenValues(report))}));cb(null,reports)}),(err=>cb(err)))}else{cb(null,[])}}_maybeReady(){this._debug("maybeReady pc %s channel %s",this._pcReady,this._channelReady);if(this._connected||this._connecting||!this._pcReady||!this._channelReady)return;this._connecting=true;const findCandidatePair=()=>{if(this.destroyed)return;this.getStats(((err,items)=>{if(this.destroyed)return;if(err)items=[];const remoteCandidates={};const localCandidates={};const candidatePairs={};let foundSelectedCandidatePair=false;items.forEach((item=>{if(item.type==="remotecandidate"||item.type==="remote-candidate"){remoteCandidates[item.id]=item}if(item.type==="localcandidate"||item.type==="local-candidate"){localCandidates[item.id]=item}if(item.type==="candidatepair"||item.type==="candidate-pair"){candidatePairs[item.id]=item}}));const setSelectedCandidatePair=selectedCandidatePair=>{foundSelectedCandidatePair=true;let local=localCandidates[selectedCandidatePair.localCandidateId];if(local&&(local.ip||local.address)){this.localAddress=local.ip||local.address;this.localPort=Number(local.port)}else if(local&&local.ipAddress){this.localAddress=local.ipAddress;this.localPort=Number(local.portNumber)}else if(typeof selectedCandidatePair.googLocalAddress==="string"){local=selectedCandidatePair.googLocalAddress.split(":");this.localAddress=local[0];this.localPort=Number(local[1])}if(this.localAddress){this.localFamily=this.localAddress.includes(":")?"IPv6":"IPv4"}let remote=remoteCandidates[selectedCandidatePair.remoteCandidateId];if(remote&&(remote.ip||remote.address)){this.remoteAddress=remote.ip||remote.address;this.remotePort=Number(remote.port)}else if(remote&&remote.ipAddress){this.remoteAddress=remote.ipAddress;this.remotePort=Number(remote.portNumber)}else if(typeof selectedCandidatePair.googRemoteAddress==="string"){remote=selectedCandidatePair.googRemoteAddress.split(":");this.remoteAddress=remote[0];this.remotePort=Number(remote[1])}if(this.remoteAddress){this.remoteFamily=this.remoteAddress.includes(":")?"IPv6":"IPv4"}this._debug("connect local: %s:%s remote: %s:%s",this.localAddress,this.localPort,this.remoteAddress,this.remotePort)};items.forEach((item=>{if(item.type==="transport"&&item.selectedCandidatePairId){setSelectedCandidatePair(candidatePairs[item.selectedCandidatePairId])}if(item.type==="googCandidatePair"&&item.googActiveConnection==="true"||(item.type==="candidatepair"||item.type==="candidate-pair")&&item.selected){setSelectedCandidatePair(item)}}));if(!foundSelectedCandidatePair&&(!Object.keys(candidatePairs).length||Object.keys(localCandidates).length)){setTimeout(findCandidatePair,100);return}else{this._connecting=false;this._connected=true}if(this._chunk){try{this.send(this._chunk)}catch(err){return this.destroy(errCode(err,"ERR_DATA_CHANNEL"))}this._chunk=null;this._debug('sent chunk from "write before connect"');const cb=this._cb;this._cb=null;cb(null)}if(typeof this._channel.bufferedAmountLowThreshold!=="number"){this._interval=setInterval((()=>this._onInterval()),150);if(this._interval.unref)this._interval.unref()}this._debug("connect");this.emit("connect")}))};findCandidatePair()}_onInterval(){if(!this._cb||!this._channel||this._channel.bufferedAmount>MAX_BUFFERED_AMOUNT){return}this._onChannelBufferedAmountLow()}_onSignalingStateChange(){if(this.destroyed)return;if(this._pc.signalingState==="stable"){this._isNegotiating=false;this._debug("flushing sender queue",this._sendersAwaitingStable);this._sendersAwaitingStable.forEach((sender=>{this._pc.removeTrack(sender);this._queuedNegotiation=true}));this._sendersAwaitingStable=[];if(this._queuedNegotiation){this._debug("flushing negotiation queue");this._queuedNegotiation=false;this._needsNegotiation()}else{this._debug("negotiated");this.emit("negotiated")}}this._debug("signalingStateChange %s",this._pc.signalingState);this.emit("signalingStateChange",this._pc.signalingState)}_onIceCandidate(event){if(this.destroyed)return;if(event.candidate&&this.trickle){this.emit("signal",{type:"candidate",candidate:{candidate:event.candidate.candidate,sdpMLineIndex:event.candidate.sdpMLineIndex,sdpMid:event.candidate.sdpMid}})}else if(!event.candidate&&!this._iceComplete){this._iceComplete=true;this.emit("_iceComplete")}if(event.candidate){this._startIceCompleteTimeout()}}_onChannelMessage(event){if(this.destroyed)return;let data=event.data;if(data instanceof ArrayBuffer)data=Buffer.from(data);this.push(data)}_onChannelBufferedAmountLow(){if(this.destroyed||!this._cb)return;this._debug("ending backpressure: bufferedAmount %d",this._channel.bufferedAmount);const cb=this._cb;this._cb=null;cb(null)}_onChannelOpen(){if(this._connected||this.destroyed)return;this._debug("on channel open");this._channelReady=true;this._maybeReady()}_onChannelClose(){if(this.destroyed)return;this._debug("on channel close");this.destroy()}_onTrack(event){if(this.destroyed)return;event.streams.forEach((eventStream=>{this._debug("on track");this.emit("track",event.track,eventStream);this._remoteTracks.push({track:event.track,stream:eventStream});if(this._remoteStreams.some((remoteStream=>remoteStream.id===eventStream.id)))return;this._remoteStreams.push(eventStream);queueMicrotask((()=>{this._debug("on stream");this.emit("stream",eventStream)}))}))}_debug(){const args=[].slice.call(arguments);args[0]="["+this._id+"] "+args[0];debug.apply(null,args)}}Peer.WEBRTC_SUPPORT=!!getBrowserRTC();Peer.config={iceServers:[{urls:["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478"]}],sdpSemantics:"unified-plan"};Peer.channelConfig={};module.exports=Peer},{buffer:35,debug:182,"err-code":80,"get-browser-rtc":85,"queue-microtask":166,randombytes:167,"readable-stream":199}],182:[function(require,module,exports){(function(process){(function(){exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.storage=localstorage();exports.destroy=(()=>{let warned=false;return()=>{if(!warned){warned=true;console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}}})();exports.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function useColors(){if(typeof window!=="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)){return true}if(typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)){return false}return typeof document!=="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function formatArgs(args){args[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+args[0]+(this.useColors?"%c ":" ")+"+"+module.exports.humanize(this.diff);if(!this.useColors){return}const c="color: "+this.color;args.splice(1,0,c,"color: inherit");let index=0;let lastC=0;args[0].replace(/%[a-zA-Z%]/g,(match=>{if(match==="%%"){return}index++;if(match==="%c"){lastC=index}}));args.splice(lastC,0,c)}exports.log=console.debug||console.log||(()=>{});function save(namespaces){try{if(namespaces){exports.storage.setItem("debug",namespaces)}else{exports.storage.removeItem("debug")}}catch(error){}}function load(){let r;try{r=exports.storage.getItem("debug")}catch(error){}if(!r&&typeof process!=="undefined"&&"env"in process){r=process.env.DEBUG}return r}function localstorage(){try{return localStorage}catch(error){}}module.exports=require("./common")(exports);const{formatters:formatters}=module.exports;formatters.j=function(v){try{return JSON.stringify(v)}catch(error){return"[UnexpectedJSONParseError]: "+error.message}}}).call(this)}).call(this,require("_process"))},{"./common":183,_process:160}],183:[function(require,module,exports){function setup(env){createDebug.debug=createDebug;createDebug.default=createDebug;createDebug.coerce=coerce;createDebug.disable=disable;createDebug.enable=enable;createDebug.enabled=enabled;createDebug.humanize=require("ms");createDebug.destroy=destroy;Object.keys(env).forEach((key=>{createDebug[key]=env[key]}));createDebug.names=[];createDebug.skips=[];createDebug.formatters={};function selectColor(namespace){let hash=0;for(let i=0;i{if(match==="%%"){return"%"}index++;const formatter=createDebug.formatters[format];if(typeof formatter==="function"){const val=args[index];match=formatter.call(self,val);args.splice(index,1);index--}return match}));createDebug.formatArgs.call(self,args);const logFn=self.log||createDebug.log;logFn.apply(self,args)}debug.namespace=namespace;debug.useColors=createDebug.useColors();debug.color=createDebug.selectColor(namespace);debug.extend=extend;debug.destroy=createDebug.destroy;Object.defineProperty(debug,"enabled",{enumerable:true,configurable:false,get:()=>{if(enableOverride!==null){return enableOverride}if(namespacesCache!==createDebug.namespaces){namespacesCache=createDebug.namespaces;enabledCache=createDebug.enabled(namespace)}return enabledCache},set:v=>{enableOverride=v}});if(typeof createDebug.init==="function"){createDebug.init(debug)}return debug}function extend(namespace,delimiter){const newDebug=createDebug(this.namespace+(typeof delimiter==="undefined"?":":delimiter)+namespace);newDebug.log=this.log;return newDebug}function enable(namespaces){createDebug.save(namespaces);createDebug.namespaces=namespaces;createDebug.names=[];createDebug.skips=[];let i;const split=(typeof namespaces==="string"?namespaces:"").split(/[\s,]+/);const len=split.length;for(i=0;i"-"+namespace))].join(",");createDebug.enable("");return namespaces}function enabled(name){if(name[name.length-1]==="*"){return true}let i;let len;for(i=0,len=createDebug.skips.length;i0){return parse(val)}else if(type==="number"&&isFinite(val)){return options.long?fmtLong(val):fmtShort(val)}throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(val))};function parse(str){str=String(str);if(str.length>100){return}var match=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);if(!match){return}var n=parseFloat(match[1]);var type=(match[2]||"ms").toLowerCase();switch(type){case"years":case"year":case"yrs":case"yr":case"y":return n*y;case"weeks":case"week":case"w":return n*w;case"days":case"day":case"d":return n*d;case"hours":case"hour":case"hrs":case"hr":case"h":return n*h;case"minutes":case"minute":case"mins":case"min":case"m":return n*m;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return undefined}}function fmtShort(ms){var msAbs=Math.abs(ms);if(msAbs>=d){return Math.round(ms/d)+"d"}if(msAbs>=h){return Math.round(ms/h)+"h"}if(msAbs>=m){return Math.round(ms/m)+"m"}if(msAbs>=s){return Math.round(ms/s)+"s"}return ms+"ms"}function fmtLong(ms){var msAbs=Math.abs(ms);if(msAbs>=d){return plural(ms,msAbs,d,"day")}if(msAbs>=h){return plural(ms,msAbs,h,"hour")}if(msAbs>=m){return plural(ms,msAbs,m,"minute")}if(msAbs>=s){return plural(ms,msAbs,s,"second")}return ms+" ms"}function plural(ms,msAbs,n,name){var isPlural=msAbs>=n*1.5;return Math.round(ms/n)+" "+name+(isPlural?"s":"")}},{}],185:[function(require,module,exports){"use strict";function _inheritsLoose(subClass,superClass){subClass.prototype=Object.create(superClass.prototype);subClass.prototype.constructor=subClass;subClass.__proto__=superClass}var codes={};function createErrorType(code,message,Base){if(!Base){Base=Error}function getMessage(arg1,arg2,arg3){if(typeof message==="string"){return message}else{return message(arg1,arg2,arg3)}}var NodeError=function(_Base){_inheritsLoose(NodeError,_Base);function NodeError(arg1,arg2,arg3){return _Base.call(this,getMessage(arg1,arg2,arg3))||this}return NodeError}(Base);NodeError.prototype.name=Base.name;NodeError.prototype.code=code;codes[code]=NodeError}function oneOf(expected,thing){if(Array.isArray(expected)){var len=expected.length;expected=expected.map((function(i){return String(i)}));if(len>2){return"one of ".concat(thing," ").concat(expected.slice(0,len-1).join(", "),", or ")+expected[len-1]}else if(len===2){return"one of ".concat(thing," ").concat(expected[0]," or ").concat(expected[1])}else{return"of ".concat(thing," ").concat(expected[0])}}else{return"of ".concat(thing," ").concat(String(expected))}}function startsWith(str,search,pos){return str.substr(!pos||pos<0?0:+pos,search.length)===search}function endsWith(str,search,this_len){if(this_len===undefined||this_len>str.length){this_len=str.length}return str.substring(this_len-search.length,this_len)===search}function includes(str,search,start){if(typeof start!=="number"){start=0}if(start+search.length>str.length){return false}else{return str.indexOf(search,start)!==-1}}createErrorType("ERR_INVALID_OPT_VALUE",(function(name,value){return'The value "'+value+'" is invalid for option "'+name+'"'}),TypeError);createErrorType("ERR_INVALID_ARG_TYPE",(function(name,expected,actual){var determiner;if(typeof expected==="string"&&startsWith(expected,"not ")){determiner="must not be";expected=expected.replace(/^not /,"")}else{determiner="must be"}var msg;if(endsWith(name," argument")){msg="The ".concat(name," ").concat(determiner," ").concat(oneOf(expected,"type"))}else{var type=includes(name,".")?"property":"argument";msg='The "'.concat(name,'" ').concat(type," ").concat(determiner," ").concat(oneOf(expected,"type"))}msg+=". Received type ".concat(typeof actual);return msg}),TypeError);createErrorType("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");createErrorType("ERR_METHOD_NOT_IMPLEMENTED",(function(name){return"The "+name+" method is not implemented"}));createErrorType("ERR_STREAM_PREMATURE_CLOSE","Premature close");createErrorType("ERR_STREAM_DESTROYED",(function(name){return"Cannot call "+name+" after a stream was destroyed"}));createErrorType("ERR_MULTIPLE_CALLBACK","Callback called multiple times");createErrorType("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");createErrorType("ERR_STREAM_WRITE_AFTER_END","write after end");createErrorType("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);createErrorType("ERR_UNKNOWN_ENCODING",(function(arg){return"Unknown encoding: "+arg}),TypeError);createErrorType("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");module.exports.codes=codes},{}],186:[function(require,module,exports){(function(process){(function(){"use strict";var objectKeys=Object.keys||function(obj){var keys=[];for(var key in obj)keys.push(key);return keys};module.exports=Duplex;var Readable=require("./_stream_readable");var Writable=require("./_stream_writable");require("inherits")(Duplex,Readable);{var keys=objectKeys(Writable.prototype);for(var v=0;v0){if(typeof chunk!=="string"&&!state.objectMode&&Object.getPrototypeOf(chunk)!==Buffer.prototype){chunk=_uint8ArrayToBuffer(chunk)}if(addToFront){if(state.endEmitted)errorOrDestroy(stream,new ERR_STREAM_UNSHIFT_AFTER_END_EVENT);else addChunk(stream,state,chunk,true)}else if(state.ended){errorOrDestroy(stream,new ERR_STREAM_PUSH_AFTER_EOF)}else if(state.destroyed){return false}else{state.reading=false;if(state.decoder&&!encoding){chunk=state.decoder.write(chunk);if(state.objectMode||chunk.length!==0)addChunk(stream,state,chunk,false);else maybeReadMore(stream,state)}else{addChunk(stream,state,chunk,false)}}}else if(!addToFront){state.reading=false;maybeReadMore(stream,state)}}return!state.ended&&(state.length=MAX_HWM){n=MAX_HWM}else{n--;n|=n>>>1;n|=n>>>2;n|=n>>>4;n|=n>>>8;n|=n>>>16;n++}return n}function howMuchToRead(n,state){if(n<=0||state.length===0&&state.ended)return 0;if(state.objectMode)return 1;if(n!==n){if(state.flowing&&state.length)return state.buffer.head.data.length;else return state.length}if(n>state.highWaterMark)state.highWaterMark=computeNewHighWaterMark(n);if(n<=state.length)return n;if(!state.ended){state.needReadable=true;return 0}return state.length}Readable.prototype.read=function(n){debug("read",n);n=parseInt(n,10);var state=this._readableState;var nOrig=n;if(n!==0)state.emittedReadable=false;if(n===0&&state.needReadable&&((state.highWaterMark!==0?state.length>=state.highWaterMark:state.length>0)||state.ended)){debug("read: emitReadable",state.length,state.ended);if(state.length===0&&state.ended)endReadable(this);else emitReadable(this);return null}n=howMuchToRead(n,state);if(n===0&&state.ended){if(state.length===0)endReadable(this);return null}var doRead=state.needReadable;debug("need readable",doRead);if(state.length===0||state.length-n0)ret=fromList(n,state);else ret=null;if(ret===null){state.needReadable=state.length<=state.highWaterMark;n=0}else{state.length-=n;state.awaitDrain=0}if(state.length===0){if(!state.ended)state.needReadable=true;if(nOrig!==n&&state.ended)endReadable(this)}if(ret!==null)this.emit("data",ret);return ret};function onEofChunk(stream,state){debug("onEofChunk");if(state.ended)return;if(state.decoder){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length}}state.ended=true;if(state.sync){emitReadable(stream)}else{state.needReadable=false;if(!state.emittedReadable){state.emittedReadable=true;emitReadable_(stream)}}}function emitReadable(stream){var state=stream._readableState;debug("emitReadable",state.needReadable,state.emittedReadable);state.needReadable=false;if(!state.emittedReadable){debug("emitReadable",state.flowing);state.emittedReadable=true;process.nextTick(emitReadable_,stream)}}function emitReadable_(stream){var state=stream._readableState;debug("emitReadable_",state.destroyed,state.length,state.ended);if(!state.destroyed&&(state.length||state.ended)){stream.emit("readable");state.emittedReadable=false}state.needReadable=!state.flowing&&!state.ended&&state.length<=state.highWaterMark;flow(stream)}function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;process.nextTick(maybeReadMore_,stream,state)}}function maybeReadMore_(stream,state){while(!state.reading&&!state.ended&&(state.length1&&indexOf(state.pipes,dest)!==-1)&&!cleanedUp){debug("false write response, pause",state.awaitDrain);state.awaitDrain++}src.pause()}}function onerror(er){debug("onerror",er);unpipe();dest.removeListener("error",onerror);if(EElistenerCount(dest,"error")===0)errorOrDestroy(dest,er)}prependListener(dest,"error",onerror);function onclose(){dest.removeListener("finish",onfinish);unpipe()}dest.once("close",onclose);function onfinish(){debug("onfinish");dest.removeListener("close",onclose);unpipe()}dest.once("finish",onfinish);function unpipe(){debug("unpipe");src.unpipe(dest)}dest.emit("pipe",src);if(!state.flowing){debug("pipe resume");src.resume()}return dest};function pipeOnDrain(src){return function pipeOnDrainFunctionResult(){var state=src._readableState;debug("pipeOnDrain",state.awaitDrain);if(state.awaitDrain)state.awaitDrain--;if(state.awaitDrain===0&&EElistenerCount(src,"data")){state.flowing=true;flow(src)}}}Readable.prototype.unpipe=function(dest){var state=this._readableState;var unpipeInfo={hasUnpiped:false};if(state.pipesCount===0)return this;if(state.pipesCount===1){if(dest&&dest!==state.pipes)return this;if(!dest)dest=state.pipes;state.pipes=null;state.pipesCount=0;state.flowing=false;if(dest)dest.emit("unpipe",this,unpipeInfo);return this}if(!dest){var dests=state.pipes;var len=state.pipesCount;state.pipes=null;state.pipesCount=0;state.flowing=false;for(var i=0;i0;if(state.flowing!==false)this.resume()}else if(ev==="readable"){if(!state.endEmitted&&!state.readableListening){state.readableListening=state.needReadable=true;state.flowing=false;state.emittedReadable=false;debug("on readable",state.length,state.reading);if(state.length){emitReadable(this)}else if(!state.reading){process.nextTick(nReadingNextTick,this)}}}return res};Readable.prototype.addListener=Readable.prototype.on;Readable.prototype.removeListener=function(ev,fn){var res=Stream.prototype.removeListener.call(this,ev,fn);if(ev==="readable"){process.nextTick(updateReadableListening,this)}return res};Readable.prototype.removeAllListeners=function(ev){var res=Stream.prototype.removeAllListeners.apply(this,arguments);if(ev==="readable"||ev===undefined){process.nextTick(updateReadableListening,this)}return res};function updateReadableListening(self){var state=self._readableState;state.readableListening=self.listenerCount("readable")>0;if(state.resumeScheduled&&!state.paused){state.flowing=true}else if(self.listenerCount("data")>0){self.resume()}}function nReadingNextTick(self){debug("readable nexttick read 0");self.read(0)}Readable.prototype.resume=function(){var state=this._readableState;if(!state.flowing){debug("resume");state.flowing=!state.readableListening;resume(this,state)}state.paused=false;return this};function resume(stream,state){if(!state.resumeScheduled){state.resumeScheduled=true;process.nextTick(resume_,stream,state)}}function resume_(stream,state){debug("resume",state.reading);if(!state.reading){stream.read(0)}state.resumeScheduled=false;stream.emit("resume");flow(stream);if(state.flowing&&!state.reading)stream.read(0)}Readable.prototype.pause=function(){debug("call pause flowing=%j",this._readableState.flowing);if(this._readableState.flowing!==false){debug("pause");this._readableState.flowing=false;this.emit("pause")}this._readableState.paused=true;return this};function flow(stream){var state=stream._readableState;debug("flow",state.flowing);while(state.flowing&&stream.read()!==null);}Readable.prototype.wrap=function(stream){var _this=this;var state=this._readableState;var paused=false;stream.on("end",(function(){debug("wrapped end");if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length)_this.push(chunk)}_this.push(null)}));stream.on("data",(function(chunk){debug("wrapped data");if(state.decoder)chunk=state.decoder.write(chunk);if(state.objectMode&&(chunk===null||chunk===undefined))return;else if(!state.objectMode&&(!chunk||!chunk.length))return;var ret=_this.push(chunk);if(!ret){paused=true;stream.pause()}}));for(var i in stream){if(this[i]===undefined&&typeof stream[i]==="function"){this[i]=function methodWrap(method){return function methodWrapReturnFunction(){return stream[method].apply(stream,arguments)}}(i)}}for(var n=0;n=state.length){if(state.decoder)ret=state.buffer.join("");else if(state.buffer.length===1)ret=state.buffer.first();else ret=state.buffer.concat(state.length);state.buffer.clear()}else{ret=state.buffer.consume(n,state.decoder)}return ret}function endReadable(stream){var state=stream._readableState;debug("endReadable",state.endEmitted);if(!state.endEmitted){state.ended=true;process.nextTick(endReadableNT,state,stream)}}function endReadableNT(state,stream){debug("endReadableNT",state.endEmitted,state.length);if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit("end");if(state.autoDestroy){var wState=stream._writableState;if(!wState||wState.autoDestroy&&wState.finished){stream.destroy()}}}}if(typeof Symbol==="function"){Readable.from=function(iterable,opts){if(from===undefined){from=require("./internal/streams/from")}return from(Readable,iterable,opts)}}function indexOf(xs,x){for(var i=0,l=xs.length;i-1))throw new ERR_UNKNOWN_ENCODING(encoding);this._writableState.defaultEncoding=encoding;return this};Object.defineProperty(Writable.prototype,"writableBuffer",{enumerable:false,get:function get(){return this._writableState&&this._writableState.getBuffer()}});function decodeChunk(state,chunk,encoding){if(!state.objectMode&&state.decodeStrings!==false&&typeof chunk==="string"){chunk=Buffer.from(chunk,encoding)}return chunk}Object.defineProperty(Writable.prototype,"writableHighWaterMark",{enumerable:false,get:function get(){return this._writableState.highWaterMark}});function writeOrBuffer(stream,state,isBuf,chunk,encoding,cb){if(!isBuf){var newChunk=decodeChunk(state,chunk,encoding);if(chunk!==newChunk){isBuf=true;encoding="buffer";chunk=newChunk}}var len=state.objectMode?1:chunk.length;state.length+=len;var ret=state.length0)this.tail.next=entry;else this.head=entry;this.tail=entry;++this.length}},{key:"unshift",value:function unshift(v){var entry={data:v,next:this.head};if(this.length===0)this.tail=entry;this.head=entry;++this.length}},{key:"shift",value:function shift(){if(this.length===0)return;var ret=this.head.data;if(this.length===1)this.head=this.tail=null;else this.head=this.head.next;--this.length;return ret}},{key:"clear",value:function clear(){this.head=this.tail=null;this.length=0}},{key:"join",value:function join(s){if(this.length===0)return"";var p=this.head;var ret=""+p.data;while(p=p.next)ret+=s+p.data;return ret}},{key:"concat",value:function concat(n){if(this.length===0)return Buffer.alloc(0);var ret=Buffer.allocUnsafe(n>>>0);var p=this.head;var i=0;while(p){copyBuffer(p.data,ret,i);i+=p.data.length;p=p.next}return ret}},{key:"consume",value:function consume(n,hasStrings){var ret;if(nstr.length?str.length:n;if(nb===str.length)ret+=str;else ret+=str.slice(0,n);n-=nb;if(n===0){if(nb===str.length){++c;if(p.next)this.head=p.next;else this.head=this.tail=null}else{this.head=p;p.data=str.slice(nb)}break}++c}this.length-=c;return ret}},{key:"_getBuffer",value:function _getBuffer(n){var ret=Buffer.allocUnsafe(n);var p=this.head;var c=1;p.data.copy(ret);n-=p.data.length;while(p=p.next){var buf=p.data;var nb=n>buf.length?buf.length:n;buf.copy(ret,ret.length-n,0,nb);n-=nb;if(n===0){if(nb===buf.length){++c;if(p.next)this.head=p.next;else this.head=this.tail=null}else{this.head=p;p.data=buf.slice(nb)}break}++c}this.length-=c;return ret}},{key:custom,value:function value(_,options){return inspect(this,_objectSpread(_objectSpread({},options),{},{depth:0,customInspect:false}))}}]);return BufferList}()},{buffer:35,util:34}],193:[function(require,module,exports){(function(process){(function(){"use strict";function destroy(err,cb){var _this=this;var readableDestroyed=this._readableState&&this._readableState.destroyed;var writableDestroyed=this._writableState&&this._writableState.destroyed;if(readableDestroyed||writableDestroyed){if(cb){cb(err)}else if(err){if(!this._writableState){process.nextTick(emitErrorNT,this,err)}else if(!this._writableState.errorEmitted){this._writableState.errorEmitted=true;process.nextTick(emitErrorNT,this,err)}}return this}if(this._readableState){this._readableState.destroyed=true}if(this._writableState){this._writableState.destroyed=true}this._destroy(err||null,(function(err){if(!cb&&err){if(!_this._writableState){process.nextTick(emitErrorAndCloseNT,_this,err)}else if(!_this._writableState.errorEmitted){_this._writableState.errorEmitted=true;process.nextTick(emitErrorAndCloseNT,_this,err)}else{process.nextTick(emitCloseNT,_this)}}else if(cb){process.nextTick(emitCloseNT,_this);cb(err)}else{process.nextTick(emitCloseNT,_this)}}));return this}function emitErrorAndCloseNT(self,err){emitErrorNT(self,err);emitCloseNT(self)}function emitCloseNT(self){if(self._writableState&&!self._writableState.emitClose)return;if(self._readableState&&!self._readableState.emitClose)return;self.emit("close")}function undestroy(){if(this._readableState){this._readableState.destroyed=false;this._readableState.reading=false;this._readableState.ended=false;this._readableState.endEmitted=false}if(this._writableState){this._writableState.destroyed=false;this._writableState.ended=false;this._writableState.ending=false;this._writableState.finalCalled=false;this._writableState.prefinished=false;this._writableState.finished=false;this._writableState.errorEmitted=false}}function emitErrorNT(self,err){self.emit("error",err)}function errorOrDestroy(stream,err){var rState=stream._readableState;var wState=stream._writableState;if(rState&&rState.autoDestroy||wState&&wState.autoDestroy)stream.destroy(err);else stream.emit("error",err)}module.exports={destroy:destroy,undestroy:undestroy,errorOrDestroy:errorOrDestroy}}).call(this)}).call(this,require("_process"))},{_process:160}],194:[function(require,module,exports){"use strict";var ERR_STREAM_PREMATURE_CLOSE=require("../../../errors").codes.ERR_STREAM_PREMATURE_CLOSE;function once(callback){var called=false;return function(){if(called)return;called=true;for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}callback.apply(this,args)}}function noop(){}function isRequest(stream){return stream.setHeader&&typeof stream.abort==="function"}function eos(stream,opts,callback){if(typeof opts==="function")return eos(stream,null,opts);if(!opts)opts={};callback=once(callback||noop);var readable=opts.readable||opts.readable!==false&&stream.readable;var writable=opts.writable||opts.writable!==false&&stream.writable;var onlegacyfinish=function onlegacyfinish(){if(!stream.writable)onfinish()};var writableEnded=stream._writableState&&stream._writableState.finished;var onfinish=function onfinish(){writable=false;writableEnded=true;if(!readable)callback.call(stream)};var readableEnded=stream._readableState&&stream._readableState.endEmitted;var onend=function onend(){readable=false;readableEnded=true;if(!writable)callback.call(stream)};var onerror=function onerror(err){callback.call(stream,err)};var onclose=function onclose(){var err;if(readable&&!readableEnded){if(!stream._readableState||!stream._readableState.ended)err=new ERR_STREAM_PREMATURE_CLOSE;return callback.call(stream,err)}if(writable&&!writableEnded){if(!stream._writableState||!stream._writableState.ended)err=new ERR_STREAM_PREMATURE_CLOSE;return callback.call(stream,err)}};var onrequest=function onrequest(){stream.req.on("finish",onfinish)};if(isRequest(stream)){stream.on("complete",onfinish);stream.on("abort",onclose);if(stream.req)onrequest();else stream.on("request",onrequest)}else if(writable&&!stream._writableState){stream.on("end",onlegacyfinish);stream.on("close",onlegacyfinish)}stream.on("end",onend);stream.on("finish",onfinish);if(opts.error!==false)stream.on("error",onerror);stream.on("close",onclose);return function(){stream.removeListener("complete",onfinish);stream.removeListener("abort",onclose);stream.removeListener("request",onrequest);if(stream.req)stream.req.removeListener("finish",onfinish);stream.removeListener("end",onlegacyfinish);stream.removeListener("close",onlegacyfinish);stream.removeListener("finish",onfinish);stream.removeListener("end",onend);stream.removeListener("error",onerror);stream.removeListener("close",onclose)}}module.exports=eos},{"../../../errors":185}],195:[function(require,module,exports){module.exports=function(){throw new Error("Readable.from is not available in the browser")}},{}],196:[function(require,module,exports){"use strict";var eos;function once(callback){var called=false;return function(){if(called)return;called=true;callback.apply(void 0,arguments)}}var _require$codes=require("../../../errors").codes,ERR_MISSING_ARGS=_require$codes.ERR_MISSING_ARGS,ERR_STREAM_DESTROYED=_require$codes.ERR_STREAM_DESTROYED;function noop(err){if(err)throw err}function isRequest(stream){return stream.setHeader&&typeof stream.abort==="function"}function destroyer(stream,reading,writing,callback){callback=once(callback);var closed=false;stream.on("close",(function(){closed=true}));if(eos===undefined)eos=require("./end-of-stream");eos(stream,{readable:reading,writable:writing},(function(err){if(err)return callback(err);closed=true;callback()}));var destroyed=false;return function(err){if(closed)return;if(destroyed)return;destroyed=true;if(isRequest(stream))return stream.abort();if(typeof stream.destroy==="function")return stream.destroy();callback(err||new ERR_STREAM_DESTROYED("pipe"))}}function call(fn){fn()}function pipe(from,to){return from.pipe(to)}function popCallback(streams){if(!streams.length)return noop;if(typeof streams[streams.length-1]!=="function")return noop;return streams.pop()}function pipeline(){for(var _len=arguments.length,streams=new Array(_len),_key=0;_key<_len;_key++){streams[_key]=arguments[_key]}var callback=popCallback(streams);if(Array.isArray(streams[0]))streams=streams[0];if(streams.length<2){throw new ERR_MISSING_ARGS("streams")}var error;var destroys=streams.map((function(stream,i){var reading=i0;return destroyer(stream,reading,writing,(function(err){if(!error)error=err;if(err)destroys.forEach(call);if(reading)return;destroys.forEach(call);callback(error)}))}));return streams.reduce(pipe)}module.exports=pipeline},{"../../../errors":185,"./end-of-stream":194}],197:[function(require,module,exports){"use strict";var ERR_INVALID_OPT_VALUE=require("../../../errors").codes.ERR_INVALID_OPT_VALUE;function highWaterMarkFrom(options,isDuplex,duplexKey){return options.highWaterMark!=null?options.highWaterMark:isDuplex?options[duplexKey]:null}function getHighWaterMark(state,options,duplexKey,isDuplex){var hwm=highWaterMarkFrom(options,isDuplex,duplexKey);if(hwm!=null){if(!(isFinite(hwm)&&Math.floor(hwm)===hwm)||hwm<0){var name=isDuplex?duplexKey:"highWaterMark";throw new ERR_INVALID_OPT_VALUE(name,hwm)}return Math.floor(hwm)}return state.objectMode?16:16*1024}module.exports={getHighWaterMark:getHighWaterMark}},{"../../../errors":185}],198:[function(require,module,exports){module.exports=require("events").EventEmitter},{events:81}],199:[function(require,module,exports){exports=module.exports=require("./lib/_stream_readable.js");exports.Stream=exports;exports.Readable=exports;exports.Writable=require("./lib/_stream_writable.js");exports.Duplex=require("./lib/_stream_duplex.js");exports.Transform=require("./lib/_stream_transform.js");exports.PassThrough=require("./lib/_stream_passthrough.js");exports.finished=require("./lib/internal/streams/end-of-stream.js");exports.pipeline=require("./lib/internal/streams/pipeline.js")},{"./lib/_stream_duplex.js":186,"./lib/_stream_passthrough.js":187,"./lib/_stream_readable.js":188,"./lib/_stream_transform.js":189,"./lib/_stream_writable.js":190,"./lib/internal/streams/end-of-stream.js":194,"./lib/internal/streams/pipeline.js":196}],200:[function(require,module,exports){var url=require("./url");var parser=require("socket.io-parser");var Manager=require("./manager");var debug=require("debug")("socket.io-client");module.exports=exports=lookup;var cache=exports.managers={};function lookup(uri,opts){if(typeof uri==="object"){opts=uri;uri=undefined}opts=opts||{};var parsed=url(uri);var source=parsed.source;var id=parsed.id;var path=parsed.path;var sameNamespace=cache[id]&&path in cache[id].nsps;var newConnection=opts.forceNew||opts["force new connection"]||false===opts.multiplex||sameNamespace;var io;if(newConnection){debug("ignoring socket cache for %s",source);io=Manager(source,opts)}else{if(!cache[id]){debug("new io instance for %s",source);cache[id]=Manager(source,opts)}io=cache[id]}if(parsed.query&&!opts.query){opts.query=parsed.query}return io.socket(parsed.path,opts)}exports.protocol=parser.protocol;exports.connect=lookup;exports.Manager=require("./manager");exports.Socket=require("./socket")},{"./manager":201,"./socket":203,"./url":204,debug:205,"socket.io-parser":209}],201:[function(require,module,exports){var eio=require("engine.io-client");var Socket=require("./socket");var Emitter=require("component-emitter");var parser=require("socket.io-parser");var on=require("./on");var bind=require("component-bind");var debug=require("debug")("socket.io-client:manager");var indexOf=require("indexof");var Backoff=require("backo2");var has=Object.prototype.hasOwnProperty;module.exports=Manager;function Manager(uri,opts){if(!(this instanceof Manager))return new Manager(uri,opts);if(uri&&"object"===typeof uri){opts=uri;uri=undefined}opts=opts||{};opts.path=opts.path||"/socket.io";this.nsps={};this.subs=[];this.opts=opts;this.reconnection(opts.reconnection!==false);this.reconnectionAttempts(opts.reconnectionAttempts||Infinity);this.reconnectionDelay(opts.reconnectionDelay||1e3);this.reconnectionDelayMax(opts.reconnectionDelayMax||5e3);this.randomizationFactor(opts.randomizationFactor||.5);this.backoff=new Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()});this.timeout(null==opts.timeout?2e4:opts.timeout);this.readyState="closed";this.uri=uri;this.connecting=[];this.lastPing=null;this.encoding=false;this.packetBuffer=[];var _parser=opts.parser||parser;this.encoder=new _parser.Encoder;this.decoder=new _parser.Decoder;this.autoConnect=opts.autoConnect!==false;if(this.autoConnect)this.open()}Manager.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var nsp in this.nsps){if(has.call(this.nsps,nsp)){this.nsps[nsp].emit.apply(this.nsps[nsp],arguments)}}};Manager.prototype.updateSocketIds=function(){for(var nsp in this.nsps){if(has.call(this.nsps,nsp)){this.nsps[nsp].id=this.generateId(nsp)}}};Manager.prototype.generateId=function(nsp){return(nsp==="/"?"":nsp+"#")+this.engine.id};Emitter(Manager.prototype);Manager.prototype.reconnection=function(v){if(!arguments.length)return this._reconnection;this._reconnection=!!v;return this};Manager.prototype.reconnectionAttempts=function(v){if(!arguments.length)return this._reconnectionAttempts;this._reconnectionAttempts=v;return this};Manager.prototype.reconnectionDelay=function(v){if(!arguments.length)return this._reconnectionDelay;this._reconnectionDelay=v;this.backoff&&this.backoff.setMin(v);return this};Manager.prototype.randomizationFactor=function(v){if(!arguments.length)return this._randomizationFactor;this._randomizationFactor=v;this.backoff&&this.backoff.setJitter(v);return this};Manager.prototype.reconnectionDelayMax=function(v){if(!arguments.length)return this._reconnectionDelayMax;this._reconnectionDelayMax=v;this.backoff&&this.backoff.setMax(v);return this};Manager.prototype.timeout=function(v){if(!arguments.length)return this._timeout;this._timeout=v;return this};Manager.prototype.maybeReconnectOnOpen=function(){if(!this.reconnecting&&this._reconnection&&this.backoff.attempts===0){this.reconnect()}};Manager.prototype.open=Manager.prototype.connect=function(fn,opts){debug("readyState %s",this.readyState);if(~this.readyState.indexOf("open"))return this;debug("opening %s",this.uri);this.engine=eio(this.uri,this.opts);var socket=this.engine;var self=this;this.readyState="opening";this.skipReconnect=false;var openSub=on(socket,"open",(function(){self.onopen();fn&&fn()}));var errorSub=on(socket,"error",(function(data){debug("connect_error");self.cleanup();self.readyState="closed";self.emitAll("connect_error",data);if(fn){var err=new Error("Connection error");err.data=data;fn(err)}else{self.maybeReconnectOnOpen()}}));if(false!==this._timeout){var timeout=this._timeout;debug("connect attempt will timeout after %d",timeout);if(timeout===0){openSub.destroy()}var timer=setTimeout((function(){debug("connect attempt timed out after %d",timeout);openSub.destroy();socket.close();socket.emit("error","timeout");self.emitAll("connect_timeout",timeout)}),timeout);this.subs.push({destroy:function(){clearTimeout(timer)}})}this.subs.push(openSub);this.subs.push(errorSub);return this};Manager.prototype.onopen=function(){debug("open");this.cleanup();this.readyState="open";this.emit("open");var socket=this.engine;this.subs.push(on(socket,"data",bind(this,"ondata")));this.subs.push(on(socket,"ping",bind(this,"onping")));this.subs.push(on(socket,"pong",bind(this,"onpong")));this.subs.push(on(socket,"error",bind(this,"onerror")));this.subs.push(on(socket,"close",bind(this,"onclose")));this.subs.push(on(this.decoder,"decoded",bind(this,"ondecoded")))};Manager.prototype.onping=function(){this.lastPing=new Date;this.emitAll("ping")};Manager.prototype.onpong=function(){this.emitAll("pong",new Date-this.lastPing)};Manager.prototype.ondata=function(data){this.decoder.add(data)};Manager.prototype.ondecoded=function(packet){this.emit("packet",packet)};Manager.prototype.onerror=function(err){debug("error",err);this.emitAll("error",err)};Manager.prototype.socket=function(nsp,opts){var socket=this.nsps[nsp];if(!socket){socket=new Socket(this,nsp,opts);this.nsps[nsp]=socket;var self=this;socket.on("connecting",onConnecting);socket.on("connect",(function(){socket.id=self.generateId(nsp)}));if(this.autoConnect){onConnecting()}}function onConnecting(){if(!~indexOf(self.connecting,socket)){self.connecting.push(socket)}}return socket};Manager.prototype.destroy=function(socket){var index=indexOf(this.connecting,socket);if(~index)this.connecting.splice(index,1);if(this.connecting.length)return;this.close()};Manager.prototype.packet=function(packet){debug("writing packet %j",packet);var self=this;if(packet.query&&packet.type===0)packet.nsp+="?"+packet.query;if(!self.encoding){self.encoding=true;this.encoder.encode(packet,(function(encodedPackets){for(var i=0;i0&&!this.encoding){var pack=this.packetBuffer.shift();this.packet(pack)}};Manager.prototype.cleanup=function(){debug("cleanup");var subsLength=this.subs.length;for(var i=0;i=this._reconnectionAttempts){debug("reconnect failed");this.backoff.reset();this.emitAll("reconnect_failed");this.reconnecting=false}else{var delay=this.backoff.duration();debug("will wait %dms before reconnect attempt",delay);this.reconnecting=true;var timer=setTimeout((function(){if(self.skipReconnect)return;debug("attempting reconnect");self.emitAll("reconnect_attempt",self.backoff.attempts);self.emitAll("reconnecting",self.backoff.attempts);if(self.skipReconnect)return;self.open((function(err){if(err){debug("reconnect attempt error");self.reconnecting=false;self.reconnect();self.emitAll("reconnect_error",err.data)}else{debug("reconnect success");self.onreconnect()}}))}),delay);this.subs.push({destroy:function(){clearTimeout(timer)}})}};Manager.prototype.onreconnect=function(){var attempt=this.backoff.attempts;this.reconnecting=false;this.backoff.reset();this.updateSocketIds();this.emitAll("reconnect",attempt)}},{"./on":202,"./socket":203,backo2:30,"component-bind":60,"component-emitter":61,debug:205,"engine.io-client":65,indexof:101,"socket.io-parser":209}],202:[function(require,module,exports){module.exports=on;function on(obj,ev,fn){obj.on(ev,fn);return{destroy:function(){obj.removeListener(ev,fn)}}}},{}],203:[function(require,module,exports){var parser=require("socket.io-parser");var Emitter=require("component-emitter");var toArray=require("to-array");var on=require("./on");var bind=require("component-bind");var debug=require("debug")("socket.io-client:socket");var parseqs=require("parseqs");var hasBin=require("has-binary2");module.exports=exports=Socket;var events={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1};var emit=Emitter.prototype.emit;function Socket(io,nsp,opts){this.io=io;this.nsp=nsp;this.json=this;this.ids=0;this.acks={};this.receiveBuffer=[];this.sendBuffer=[];this.connected=false;this.disconnected=true;this.flags={};if(opts&&opts.query){this.query=opts.query}if(this.io.autoConnect)this.open()}Emitter(Socket.prototype);Socket.prototype.subEvents=function(){if(this.subs)return;var io=this.io;this.subs=[on(io,"open",bind(this,"onopen")),on(io,"packet",bind(this,"onpacket")),on(io,"close",bind(this,"onclose"))]};Socket.prototype.open=Socket.prototype.connect=function(){if(this.connected)return this;this.subEvents();if(!this.io.reconnecting)this.io.open();if("open"===this.io.readyState)this.onopen();this.emit("connecting");return this};Socket.prototype.send=function(){var args=toArray(arguments);args.unshift("message");this.emit.apply(this,args);return this};Socket.prototype.emit=function(ev){if(events.hasOwnProperty(ev)){emit.apply(this,arguments);return this}var args=toArray(arguments);var packet={type:(this.flags.binary!==undefined?this.flags.binary:hasBin(args))?parser.BINARY_EVENT:parser.EVENT,data:args};packet.options={};packet.options.compress=!this.flags||false!==this.flags.compress;if("function"===typeof args[args.length-1]){debug("emitting packet with ack id %d",this.ids);this.acks[this.ids]=args.pop();packet.id=this.ids++}if(this.connected){this.packet(packet)}else{this.sendBuffer.push(packet)}this.flags={};return this};Socket.prototype.packet=function(packet){packet.nsp=this.nsp;this.io.packet(packet)};Socket.prototype.onopen=function(){debug("transport is open - connecting");if("/"!==this.nsp){if(this.query){var query=typeof this.query==="object"?parseqs.encode(this.query):this.query;debug("sending connect packet with query %s",query);this.packet({type:parser.CONNECT,query:query})}else{this.packet({type:parser.CONNECT})}}};Socket.prototype.onclose=function(reason){debug("close (%s)",reason);this.connected=false;this.disconnected=true;delete this.id;this.emit("disconnect",reason)};Socket.prototype.onpacket=function(packet){var sameNamespace=packet.nsp===this.nsp;var rootNamespaceError=packet.type===parser.ERROR&&packet.nsp==="/";if(!sameNamespace&&!rootNamespaceError)return;switch(packet.type){case parser.CONNECT:this.onconnect();break;case parser.EVENT:this.onevent(packet);break;case parser.BINARY_EVENT:this.onevent(packet);break;case parser.ACK:this.onack(packet);break;case parser.BINARY_ACK:this.onack(packet);break;case parser.DISCONNECT:this.ondisconnect();break;case parser.ERROR:this.emit("error",packet.data);break}};Socket.prototype.onevent=function(packet){var args=packet.data||[];debug("emitting event %j",args);if(null!=packet.id){debug("attaching ack callback to event");args.push(this.ack(packet.id))}if(this.connected){emit.apply(this,args)}else{this.receiveBuffer.push(args)}};Socket.prototype.ack=function(id){var self=this;var sent=false;return function(){if(sent)return;sent=true;var args=toArray(arguments);debug("sending ack %j",args);self.packet({type:hasBin(args)?parser.BINARY_ACK:parser.ACK,id:id,data:args})}};Socket.prototype.onack=function(packet){var ack=this.acks[packet.id];if("function"===typeof ack){debug("calling ack %s with %j",packet.id,packet.data);ack.apply(this,packet.data);delete this.acks[packet.id]}else{debug("bad ack %s",packet.id)}};Socket.prototype.onconnect=function(){this.connected=true;this.disconnected=false;this.emitBuffered();this.emit("connect")};Socket.prototype.emitBuffered=function(){var i;for(i=0;i=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}exports.formatters.j=function(v){try{return JSON.stringify(v)}catch(err){return"[UnexpectedJSONParseError]: "+err.message}};function formatArgs(args){var useColors=this.useColors;args[0]=(useColors?"%c":"")+this.namespace+(useColors?" %c":" ")+args[0]+(useColors?"%c ":" ")+"+"+exports.humanize(this.diff);if(!useColors)return;var c="color: "+this.color;args.splice(1,0,c,"color: inherit");var index=0;var lastC=0;args[0].replace(/%[a-zA-Z%]/g,(function(match){if("%%"===match)return;index++;if("%c"===match){lastC=index}}));args.splice(lastC,0,c)}function log(){return"object"===typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(namespaces){try{if(null==namespaces){exports.storage.removeItem("debug")}else{exports.storage.debug=namespaces}}catch(e){}}function load(){var r;try{r=exports.storage.debug}catch(e){}if(!r&&typeof process!=="undefined"&&"env"in process){r=process.env.DEBUG}return r}exports.enable(load());function localstorage(){try{return window.localStorage}catch(e){}}}).call(this)}).call(this,require("_process"))},{"./debug":206,_process:160}],206:[function(require,module,exports){arguments[4][75][0].apply(exports,arguments)},{dup:75,ms:207}],207:[function(require,module,exports){arguments[4][76][0].apply(exports,arguments)},{dup:76}],208:[function(require,module,exports){var isArray=require("isarray");var isBuf=require("./is-buffer");var toString=Object.prototype.toString;var withNativeBlob=typeof Blob==="function"||typeof Blob!=="undefined"&&toString.call(Blob)==="[object BlobConstructor]";var withNativeFile=typeof File==="function"||typeof File!=="undefined"&&toString.call(File)==="[object FileConstructor]";exports.deconstructPacket=function(packet){var buffers=[];var packetData=packet.data;var pack=packet;pack.data=_deconstructPacket(packetData,buffers);pack.attachments=buffers.length;return{packet:pack,buffers:buffers}};function _deconstructPacket(data,buffers){if(!data)return data;if(isBuf(data)){var placeholder={_placeholder:true,num:buffers.length};buffers.push(data);return placeholder}else if(isArray(data)){var newData=new Array(data.length);for(var i=0;i=0&&data.num=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}exports.formatters.j=function(v){try{return JSON.stringify(v)}catch(err){return"[UnexpectedJSONParseError]: "+err.message}};function formatArgs(args){var useColors=this.useColors;args[0]=(useColors?"%c":"")+this.namespace+(useColors?" %c":" ")+args[0]+(useColors?"%c ":" ")+"+"+exports.humanize(this.diff);if(!useColors)return;var c="color: "+this.color;args.splice(1,0,c,"color: inherit");var index=0;var lastC=0;args[0].replace(/%[a-zA-Z%]/g,(function(match){if("%%"===match)return;index++;if("%c"===match){lastC=index}}));args.splice(lastC,0,c)}function log(){return"object"===typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(namespaces){try{if(null==namespaces){exports.storage.removeItem("debug")}else{exports.storage.debug=namespaces}}catch(e){}}function load(){var r;try{r=exports.storage.debug}catch(e){}if(!r&&typeof process!=="undefined"&&"env"in process){r=process.env.DEBUG}return r}exports.enable(load());function localstorage(){try{return window.localStorage}catch(e){}}}).call(this)}).call(this,require("_process"))},{"./debug":212,_process:160}],212:[function(require,module,exports){arguments[4][75][0].apply(exports,arguments)},{dup:75,ms:214}],213:[function(require,module,exports){arguments[4][90][0].apply(exports,arguments)},{dup:90}],214:[function(require,module,exports){arguments[4][76][0].apply(exports,arguments)},{dup:76}],215:[function(require,module,exports){var fastSafeStringify=require("fast-safe-stringify");var copy=require("clipboard-copy");function tryStringify(obj){try{return JSON.stringify(obj)}catch(e){}}function stateCopy(obj){var str=tryStringify(obj)||fastSafeStringify(obj);copy(str)}module.exports=stateCopy},{"clipboard-copy":52,"fast-safe-stringify":82}],216:[function(require,module,exports){"use strict";var Buffer=require("safe-buffer").Buffer;var isEncoding=Buffer.isEncoding||function(encoding){encoding=""+encoding;switch(encoding&&encoding.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return true;default:return false}};function _normalizeEncoding(enc){if(!enc)return"utf8";var retried;while(true){switch(enc){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return enc;default:if(retried)return;enc=(""+enc).toLowerCase();retried=true}}}function normalizeEncoding(enc){var nenc=_normalizeEncoding(enc);if(typeof nenc!=="string"&&(Buffer.isEncoding===isEncoding||!isEncoding(enc)))throw new Error("Unknown encoding: "+enc);return nenc||enc}exports.StringDecoder=StringDecoder;function StringDecoder(encoding){this.encoding=normalizeEncoding(encoding);var nb;switch(this.encoding){case"utf16le":this.text=utf16Text;this.end=utf16End;nb=4;break;case"utf8":this.fillLast=utf8FillLast;nb=4;break;case"base64":this.text=base64Text;this.end=base64End;nb=3;break;default:this.write=simpleWrite;this.end=simpleEnd;return}this.lastNeed=0;this.lastTotal=0;this.lastChar=Buffer.allocUnsafe(nb)}StringDecoder.prototype.write=function(buf){if(buf.length===0)return"";var r;var i;if(this.lastNeed){r=this.fillLast(buf);if(r===undefined)return"";i=this.lastNeed;this.lastNeed=0}else{i=0}if(i>5===6)return 2;else if(byte>>4===14)return 3;else if(byte>>3===30)return 4;return byte>>6===2?-1:-2}function utf8CheckIncomplete(self,buf,i){var j=buf.length-1;if(j=0){if(nb>0)self.lastNeed=nb-1;return nb}if(--j=0){if(nb>0)self.lastNeed=nb-2;return nb}if(--j=0){if(nb>0){if(nb===2)nb=0;else self.lastNeed=nb-3}return nb}return 0}function utf8CheckExtraBytes(self,buf,p){if((buf[0]&192)!==128){self.lastNeed=0;return"�"}if(self.lastNeed>1&&buf.length>1){if((buf[1]&192)!==128){self.lastNeed=1;return"�"}if(self.lastNeed>2&&buf.length>2){if((buf[2]&192)!==128){self.lastNeed=2;return"�"}}}}function utf8FillLast(buf){var p=this.lastTotal-this.lastNeed;var r=utf8CheckExtraBytes(this,buf,p);if(r!==undefined)return r;if(this.lastNeed<=buf.length){buf.copy(this.lastChar,p,0,this.lastNeed);return this.lastChar.toString(this.encoding,0,this.lastTotal)}buf.copy(this.lastChar,p,0,buf.length);this.lastNeed-=buf.length}function utf8Text(buf,i){var total=utf8CheckIncomplete(this,buf,i);if(!this.lastNeed)return buf.toString("utf8",i);this.lastTotal=total;var end=buf.length-(total-this.lastNeed);buf.copy(this.lastChar,0,end);return buf.toString("utf8",i,end)}function utf8End(buf){var r=buf&&buf.length?this.write(buf):"";if(this.lastNeed)return r+"�";return r}function utf16Text(buf,i){if((buf.length-i)%2===0){var r=buf.toString("utf16le",i);if(r){var c=r.charCodeAt(r.length-1);if(c>=55296&&c<=56319){this.lastNeed=2;this.lastTotal=4;this.lastChar[0]=buf[buf.length-2];this.lastChar[1]=buf[buf.length-1];return r.slice(0,-1)}}return r}this.lastNeed=1;this.lastTotal=2;this.lastChar[0]=buf[buf.length-1];return buf.toString("utf16le",i,buf.length-1)}function utf16End(buf){var r=buf&&buf.length?this.write(buf):"";if(this.lastNeed){var end=this.lastTotal-this.lastNeed;return r+this.lastChar.toString("utf16le",0,end)}return r}function base64Text(buf,i){var n=(buf.length-i)%3;if(n===0)return buf.toString("base64",i);this.lastNeed=3-n;this.lastTotal=3;if(n===1){this.lastChar[0]=buf[buf.length-1]}else{this.lastChar[0]=buf[buf.length-2];this.lastChar[1]=buf[buf.length-1]}return buf.toString("base64",i,buf.length-n)}function base64End(buf){var r=buf&&buf.length?this.write(buf):"";if(this.lastNeed)return r+this.lastChar.toString("base64",0,3-this.lastNeed);return r}function simpleWrite(buf){return buf.toString(this.encoding)}function simpleEnd(buf){return buf&&buf.length?this.write(buf):""}},{"safe-buffer":169}],217:[function(require,module,exports){"use strict";function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i0||string_ instanceof Object)?parse(string_):null};Response.prototype.toError=function(){var req=this.req;var method=req.method;var url=req.url;var message="cannot ".concat(method," ").concat(url," (").concat(this.status,")");var error=new Error(message);error.status=this.status;error.method=method;error.url=url;return error};request.Response=Response;function Request(method,url){var self=this;this._query=this._query||[];this.method=method;this.url=url;this.header={};this._header={};this.on("end",(function(){var error=null;var res=null;try{res=new Response(self)}catch(err){error=new Error("Parser is unable to parse the response");error.parse=true;error.original=err;if(self.xhr){error.rawResponse=typeof self.xhr.responseType==="undefined"?self.xhr.responseText:self.xhr.response;error.status=self.xhr.status?self.xhr.status:null;error.statusCode=error.status}else{error.rawResponse=null;error.status=null}return self.callback(error)}self.emit("response",res);var new_error;try{if(!self._isResponseOK(res)){new_error=new Error(res.statusText||res.text||"Unsuccessful HTTP response")}}catch(err){new_error=err}if(new_error){new_error.original=error;new_error.response=res;new_error.status=res.status;self.callback(new_error,res)}else{self.callback(null,res)}}))}Emitter(Request.prototype);mixin(Request.prototype,RequestBase.prototype);Request.prototype.type=function(type){this.set("Content-Type",request.types[type]||type);return this};Request.prototype.accept=function(type){this.set("Accept",request.types[type]||type);return this};Request.prototype.auth=function(user,pass,options){if(arguments.length===1)pass="";if(_typeof(pass)==="object"&&pass!==null){options=pass;pass=""}if(!options){options={type:typeof btoa==="function"?"basic":"auto"}}var encoder=options.encoder?options.encoder:function(string){if(typeof btoa==="function"){return btoa(string)}throw new Error("Cannot use basic auth, btoa is not a function")};return this._auth(user,pass,options,encoder)};Request.prototype.query=function(value){if(typeof value!=="string")value=serialize(value);if(value)this._query.push(value);return this};Request.prototype.attach=function(field,file,options){if(file){if(this._data){throw new Error("superagent can't mix .send() and .attach()")}this._getFormData().append(field,file,options||file.name)}return this};Request.prototype._getFormData=function(){if(!this._formData){this._formData=new root.FormData}return this._formData};Request.prototype.callback=function(error,res){if(this._shouldRetry(error,res)){return this._retry()}var fn=this._callback;this.clearTimeout();if(error){if(this._maxRetries)error.retries=this._retries-1;this.emit("error",error)}fn(error,res)};Request.prototype.crossDomainError=function(){var error=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");error.crossDomain=true;error.status=this.status;error.method=this.method;error.url=this.url;this.callback(error)};Request.prototype.agent=function(){console.warn("This is not supported in browser version of superagent");return this};Request.prototype.ca=Request.prototype.agent;Request.prototype.buffer=Request.prototype.ca;Request.prototype.write=function(){throw new Error("Streaming is not supported in browser version of superagent")};Request.prototype.pipe=Request.prototype.write;Request.prototype._isHost=function(object){return object&&_typeof(object)==="object"&&!Array.isArray(object)&&Object.prototype.toString.call(object)!=="[object Object]"};Request.prototype.end=function(fn){if(this._endCalled){console.warn("Warning: .end() was called twice. This is not supported in superagent")}this._endCalled=true;this._callback=fn||noop;this._finalizeQueryString();this._end()};Request.prototype._setUploadTimeout=function(){var self=this;if(this._uploadTimeout&&!this._uploadTimeoutTimer){this._uploadTimeoutTimer=setTimeout((function(){self._timeoutError("Upload timeout of ",self._uploadTimeout,"ETIMEDOUT")}),this._uploadTimeout)}};Request.prototype._end=function(){if(this._aborted)return this.callback(new Error("The request has been aborted even before .end() was called"));var self=this;this.xhr=request.getXHR();var xhr=this.xhr;var data=this._formData||this._data;this._setTimeouts();xhr.addEventListener("readystatechange",(function(){var readyState=xhr.readyState;if(readyState>=2&&self._responseTimeoutTimer){clearTimeout(self._responseTimeoutTimer)}if(readyState!==4){return}var status;try{status=xhr.status}catch(_unused5){status=0}if(!status){if(self.timedout||self._aborted)return;return self.crossDomainError()}self.emit("end")}));var handleProgress=function handleProgress(direction,e){if(e.total>0){e.percent=e.loaded/e.total*100;if(e.percent===100){clearTimeout(self._uploadTimeoutTimer)}}e.direction=direction;self.emit("progress",e)};if(this.hasListeners("progress")){try{xhr.addEventListener("progress",handleProgress.bind(null,"download"));if(xhr.upload){xhr.upload.addEventListener("progress",handleProgress.bind(null,"upload"))}}catch(_unused6){}}if(xhr.upload){this._setUploadTimeout()}try{if(this.username&&this.password){xhr.open(this.method,this.url,true,this.username,this.password)}else{xhr.open(this.method,this.url,true)}}catch(err){return this.callback(err)}if(this._withCredentials)xhr.withCredentials=true;if(!this._formData&&this.method!=="GET"&&this.method!=="HEAD"&&typeof data!=="string"&&!this._isHost(data)){var contentType=this._header["content-type"];var _serialize=this._serializer||request.serialize[contentType?contentType.split(";")[0]:""];if(!_serialize&&isJSON(contentType)){_serialize=request.serialize["application/json"]}if(_serialize)data=_serialize(data)}for(var field in this.header){if(this.header[field]===null)continue;if(hasOwn(this.header,field))xhr.setRequestHeader(field,this.header[field])}if(this._responseType){xhr.responseType=this._responseType}this.emit("request",this);xhr.send(typeof data==="undefined"?null:data)};request.agent=function(){return new Agent};var _loop=function _loop(){var method=_arr[_i];Agent.prototype[method.toLowerCase()]=function(url,fn){var request_=new request.Request(method,url);this._setDefaults(request_);if(fn){request_.end(fn)}return request_}};for(var _i=0,_arr=["GET","POST","OPTIONS","PATCH","PUT","DELETE"];_i<_arr.length;_i++){_loop()}Agent.prototype.del=Agent.prototype.delete;request.get=function(url,data,fn){var request_=request("GET",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.query(data);if(fn)request_.end(fn);return request_};request.head=function(url,data,fn){var request_=request("HEAD",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.query(data);if(fn)request_.end(fn);return request_};request.options=function(url,data,fn){var request_=request("OPTIONS",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.send(data);if(fn)request_.end(fn);return request_};function del(url,data,fn){var request_=request("DELETE",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.send(data);if(fn)request_.end(fn);return request_}request.del=del;request.delete=del;request.patch=function(url,data,fn){var request_=request("PATCH",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.send(data);if(fn)request_.end(fn);return request_};request.post=function(url,data,fn){var request_=request("POST",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.send(data);if(fn)request_.end(fn);return request_};request.put=function(url,data,fn){var request_=request("PUT",url);if(typeof data==="function"){fn=data;data=null}if(data)request_.send(data);if(fn)request_.end(fn);return request_}},{"./agent-base":217,"./request-base":219,"./response-base":220,"./utils":221,"component-emitter":61,"fast-safe-stringify":82,qs:162}],219:[function(require,module,exports){(function(process){(function(){"use strict";function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}var semver=require("semver");var _require=require("./utils"),isObject=_require.isObject,hasOwn=_require.hasOwn;module.exports=RequestBase;function RequestBase(){}RequestBase.prototype.clearTimeout=function(){clearTimeout(this._timer);clearTimeout(this._responseTimeoutTimer);clearTimeout(this._uploadTimeoutTimer);delete this._timer;delete this._responseTimeoutTimer;delete this._uploadTimeoutTimer;return this};RequestBase.prototype.parse=function(fn){this._parser=fn;return this};RequestBase.prototype.responseType=function(value){this._responseType=value;return this};RequestBase.prototype.serialize=function(fn){this._serializer=fn;return this};RequestBase.prototype.timeout=function(options){if(!options||_typeof(options)!=="object"){this._timeout=options;this._responseTimeout=0;this._uploadTimeout=0;return this}for(var option in options){if(hasOwn(options,option)){switch(option){case"deadline":this._timeout=options.deadline;break;case"response":this._responseTimeout=options.response;break;case"upload":this._uploadTimeout=options.upload;break;default:console.warn("Unknown timeout option",option)}}}return this};RequestBase.prototype.retry=function(count,fn){if(arguments.length===0||count===true)count=1;if(count<=0)count=0;this._maxRetries=count;this._retries=0;this._retryCallback=fn;return this};var ERROR_CODES=new Set(["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"]);var STATUS_CODES=new Set([408,413,429,500,502,503,504,521,522,524]);RequestBase.prototype._shouldRetry=function(error,res){if(!this._maxRetries||this._retries++>=this._maxRetries){return false}if(this._retryCallback){try{var override=this._retryCallback(error,res);if(override===true)return true;if(override===false)return false}catch(err){console.error(err)}}if(res&&res.status&&STATUS_CODES.has(res.status))return true;if(error){if(error.code&&ERROR_CODES.has(error.code))return true;if(error.timeout&&error.code==="ECONNABORTED")return true;if(error.crossDomain)return true}return false};RequestBase.prototype._retry=function(){this.clearTimeout();if(this.req){this.req=null;this.req=this.request()}this._aborted=false;this.timedout=false;this.timedoutError=null;return this._end()};RequestBase.prototype.then=function(resolve,reject){var _this=this;if(!this._fullfilledPromise){var self=this;if(this._endCalled){console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises")}this._fullfilledPromise=new Promise((function(resolve,reject){self.on("abort",(function(){if(_this._maxRetries&&_this._maxRetries>_this._retries){return}if(_this.timedout&&_this.timedoutError){reject(_this.timedoutError);return}var error=new Error("Aborted");error.code="ABORTED";error.status=_this.status;error.method=_this.method;error.url=_this.url;reject(error)}));self.end((function(error,res){if(error)reject(error);else resolve(res)}))}))}return this._fullfilledPromise.then(resolve,reject)};RequestBase.prototype.catch=function(callback){return this.then(undefined,callback)};RequestBase.prototype.use=function(fn){fn(this);return this};RequestBase.prototype.ok=function(callback){if(typeof callback!=="function")throw new Error("Callback required");this._okCallback=callback;return this};RequestBase.prototype._isResponseOK=function(res){if(!res){return false}if(this._okCallback){return this._okCallback(res)}return res.status>=200&&res.status<300};RequestBase.prototype.get=function(field){return this._header[field.toLowerCase()]};RequestBase.prototype.getHeader=RequestBase.prototype.get;RequestBase.prototype.set=function(field,value){if(isObject(field)){for(var key in field){if(hasOwn(field,key))this.set(key,field[key])}return this}this._header[field.toLowerCase()]=value;this.header[field]=value;return this};RequestBase.prototype.unset=function(field){delete this._header[field.toLowerCase()];delete this.header[field];return this};RequestBase.prototype.field=function(name,value,options){if(name===null||undefined===name){throw new Error(".field(name, val) name can not be empty")}if(this._data){throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()")}if(isObject(name)){for(var key in name){if(hasOwn(name,key))this.field(key,name[key])}return this}if(Array.isArray(value)){for(var i in value){if(hasOwn(value,i))this.field(name,value[i])}return this}if(value===null||undefined===value){throw new Error(".field(name, val) val can not be empty")}if(typeof value==="boolean"){value=String(value)}if(options)this._getFormData().append(name,value,options);else this._getFormData().append(name,value);return this};RequestBase.prototype.abort=function(){if(this._aborted){return this}this._aborted=true;if(this.xhr)this.xhr.abort();if(this.req){if(semver.gte(process.version,"v13.0.0")&&semver.lt(process.version,"v14.0.0")){throw new Error("Superagent does not work in v13 properly with abort() due to Node.js core changes")}else if(semver.gte(process.version,"v14.0.0")){this.req.destroyed=true}this.req.abort()}this.clearTimeout();this.emit("abort");return this};RequestBase.prototype._auth=function(user,pass,options,base64Encoder){switch(options.type){case"basic":this.set("Authorization","Basic ".concat(base64Encoder("".concat(user,":").concat(pass))));break;case"auto":this.username=user;this.password=pass;break;case"bearer":this.set("Authorization","Bearer ".concat(user));break;default:break}return this};RequestBase.prototype.withCredentials=function(on){if(on===undefined)on=true;this._withCredentials=on;return this};RequestBase.prototype.redirects=function(n){this._maxRedirects=n;return this};RequestBase.prototype.maxResponseSize=function(n){if(typeof n!=="number"){throw new TypeError("Invalid argument")}this._maxResponseSize=n;return this};RequestBase.prototype.toJSON=function(){return{method:this.method,url:this.url,data:this._data,headers:this._header}};RequestBase.prototype.send=function(data){var isObject_=isObject(data);var type=this._header["content-type"];if(this._formData){throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()")}if(isObject_&&!this._data){if(Array.isArray(data)){this._data=[]}else if(!this._isHost(data)){this._data={}}}else if(data&&this._data&&this._isHost(this._data)){throw new Error("Can't merge these send calls")}if(isObject_&&isObject(this._data)){for(var key in data){if(hasOwn(data,key))this._data[key]=data[key]}}else if(typeof data==="string"){if(!type)this.type("form");type=this._header["content-type"];if(type)type=type.toLowerCase().trim();if(type==="application/x-www-form-urlencoded"){this._data=this._data?"".concat(this._data,"&").concat(data):data}else{this._data=(this._data||"")+data}}else{this._data=data}if(!isObject_||this._isHost(data)){return this}if(!type)this.type("json");return this};RequestBase.prototype.sortQuery=function(sort){this._sort=typeof sort==="undefined"?true:sort;return this};RequestBase.prototype._finalizeQueryString=function(){var query=this._query.join("&");if(query){this.url+=(this.url.includes("?")?"&":"?")+query}this._query.length=0;if(this._sort){var index=this.url.indexOf("?");if(index>=0){var queryArray=this.url.slice(index+1).split("&");if(typeof this._sort==="function"){queryArray.sort(this._sort)}else{queryArray.sort()}this.url=this.url.slice(0,index)+"?"+queryArray.join("&")}}};RequestBase.prototype._appendQueryString=function(){console.warn("Unsupported")};RequestBase.prototype._timeoutError=function(reason,timeout,errno){if(this._aborted){return}var error=new Error("".concat(reason+timeout,"ms exceeded"));error.timeout=timeout;error.code="ECONNABORTED";error.errno=errno;this.timedout=true;this.timedoutError=error;this.abort();this.callback(error)};RequestBase.prototype._setTimeouts=function(){var self=this;if(this._timeout&&!this._timer){this._timer=setTimeout((function(){self._timeoutError("Timeout of ",self._timeout,"ETIME")}),this._timeout)}if(this._responseTimeout&&!this._responseTimeoutTimer){this._responseTimeoutTimer=setTimeout((function(){self._timeoutError("Response timeout of ",self._responseTimeout,"ETIMEDOUT")}),this._responseTimeout)}}}).call(this)}).call(this,require("_process"))},{"./utils":221,_process:160,semver:34}],220:[function(require,module,exports){"use strict";var utils=require("./utils");module.exports=ResponseBase;function ResponseBase(){}ResponseBase.prototype.get=function(field){return this.header[field.toLowerCase()]};ResponseBase.prototype._setHeaderProperties=function(header){var ct=header["content-type"]||"";this.type=utils.type(ct);var parameters=utils.params(ct);for(var key in parameters){if(Object.prototype.hasOwnProperty.call(parameters,key))this[key]=parameters[key]}this.links={};try{if(header.link){this.links=utils.parseLinks(header.link)}}catch(_unused){}};ResponseBase.prototype._setStatusProperties=function(status){var type=Math.trunc(status/100);this.statusCode=status;this.status=this.statusCode;this.statusType=type;this.info=type===1;this.ok=type===2;this.redirect=type===3;this.clientError=type===4;this.serverError=type===5;this.error=type===4||type===5?this.toError():false;this.created=status===201;this.accepted=status===202;this.noContent=status===204;this.badRequest=status===400;this.unauthorized=status===401;this.notAcceptable=status===406;this.forbidden=status===403;this.notFound=status===404;this.unprocessableEntity=status===422}},{"./utils":221}],221:[function(require,module,exports){"use strict";function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i0);return encoded}function decode(str){var decoded=0;for(i=0;i{p.setup=()=>{p.createCanvas(width,height,p[mode])};p.draw=()=>{}}),"hydra-ui");this.width=width;this.height=height;this.mode=mode;this.canvas.style.position="absolute";this.canvas.style.top="0px";this.canvas.style.left="0px";this.canvas.style.zIndex=-1}show(){this.canvas.style.visibility="visible"}hide(){this.canvas.style.visibility="hidden"}clear(){this.drawingContext.clearRect(0,0,this.canvas.width,this.canvas.height)}}module.exports=P5},{}],229:[function(require,module,exports){var PatchBay=require("./rtc-patch-bay.js");var inherits=require("inherits");var PBLive=function(){this.session={};this.nickFromId={};this.idFromNick={};this.loadFromStorage()};inherits(PBLive,PatchBay);PBLive.prototype.init=function(stream,opts){this.settings={server:opts.server||"https://patch-bay.glitch.me/",room:opts.room||"patch-bay",stream:stream};this.makeGlobal=opts.makeGlobal||true;this.setPageTitle=opts.setTitle||true;if(this.session.id)this.settings.id=this.session.id;PatchBay.call(this,this.settings);if(this.makeGlobal)window.pb=this;this.on("ready",(()=>{if(!this.nick){if(this.session.nick){this.setName(this.session.nick)}else{this.session.id=this.id;this.setName(this.session.id)}}}));this.on("broadcast",this._processBroadcast.bind(this));this.on("new peer",this.handleNewPeer.bind(this));window.onbeforeunload=()=>{this.session.id=window.pb.id;this.session.nick=this.nick;sessionStorage.setItem("pb",JSON.stringify(this.session))};var self=this;this.on("stream",(function(id,stream){console.log("got stream!",id,stream);const video=document.createElement("video");if("srcObject"in video){video.srcObject=stream}else{video.src=window.URL.createObjectURL(stream)}video.addEventListener("loadedmetadata",(()=>{video.play();self.video=video;self.emit("got video",self.nickFromId[id],video)}))}))};PBLive.prototype.loadFromStorage=function(){if(sessionStorage.getItem("pb")!==null){this.session=JSON.parse(sessionStorage.getItem("pb"))}};PBLive.prototype.initSource=function(nick,callback){this.initConnectionFromId(this.idFromNick[nick],callback)};PBLive.prototype.handleNewPeer=function(peer){this.nickFromId[peer]=peer;this.idFromNick[peer]=peer;if(this.nick){this.broadcast({type:"update-nick",id:this.id,nick:this.nick})}};PBLive.prototype.list=function(){var l=Object.keys(this.idFromNick);console.log(l);return Object.keys(this.idFromNick)};PBLive.prototype.setName=function(nick){this.broadcast({type:"update-nick",id:this.id,nick:nick,previous:this.nick});this.nick=nick;if(this.setPageTitle)document.title=nick};PBLive.prototype._processBroadcast=function(data){if(data.type==="update-nick"){if(data.previous!==data.nick){delete this.idFromNick[this.nickFromId[data.id]];this.nickFromId[data.id]=data.nick;this.idFromNick[data.nick]=data.id;if(data.previous){}else{}}}};module.exports=PBLive},{"./rtc-patch-bay.js":230,inherits:102}],230:[function(require,module,exports){var io=require("socket.io-client");var SimplePeer=require("simple-peer");var extend=Object.assign;var events=require("events").EventEmitter;var inherits=require("inherits");const shortid=require("shortid");var PatchBay=function(options){this.signaller=io(options.server);this.id=options.id||shortid.generate();this.stream=options.stream||null;this._peerOptions=options.peerOptions||{};this._room=options.room;this.settings["shareMediaWhenRequested"]=true;this.settings["shareMediaWhenInitiating"]=false;this.settings["requestMediaWhenInitiating"]=true;this.settings["autoconnect"]=false;this.peers={};this.rtcPeers={};this.signaller.on("ready",this._readyForSignalling.bind(this));this.signaller.on("message",this._handleMessage.bind(this));this.signaller.on("broadcast",this._receivedBroadcast.bind(this));this.signaller.emit("join",this._room,{uuid:this.id});this.signaller.on("new peer",this._newPeer.bind(this))};inherits(PatchBay,events);PatchBay.prototype.sendToAll=function(data){Object.keys(this.rtcPeers).forEach((function(id){this.rtcPeers[id].send(data)}),this)};PatchBay.prototype.sendToPeer=function(peerId,data){if(peerId in this.rtcPeers){this.rtcPeers[peerId].send(data)}};PatchBay.prototype.reinitAll=function(){Object.keys(this.rtcPeers).forEach(function(id){this.reinitPeer(id)}.bind(this))};PatchBay.prototype.initRtcPeer=function(id,opts){this.emit("new peer",{id:id});var newOptions=opts;if(this.iceServers){opts["config"]={iceServers:this.iceServers}}if(opts.initiator===true){if(this.stream!=null){if(this.settings.shareMediaWhenInitiating===true){newOptions.stream=this.stream}}if(this.settings.requestMediaWhenInitiating===true){newOptions.offerConstraints={offerToReceiveVideo:true,offerToReceiveAudio:true}}}else{if(this.settings.shareMediaWhenRequested===true){if(this.stream!=null){newOptions.stream=this.stream}}}var options=extend(this._peerOptions,newOptions);this.rtcPeers[id]=new SimplePeer(options);this._attachPeerEvents(this.rtcPeers[id],id)};PatchBay.prototype.reinitRtcConnection=function(id,opts){this.rtcPeers[id]._destroy(null,function(e){this.initRtcPeer(id,{stream:this.stream,initiator:true})}.bind(this))};PatchBay.prototype._newPeer=function(peer){this.peers[peer]={rtcPeer:null};this.emit("new peer",peer)};PatchBay.prototype._readyForSignalling=function({peers:peers,servers:servers}){peers.forEach((peer=>{this._newPeer(peer)}));if(servers){this.iceServers=servers}this.emit("ready")};PatchBay.prototype.initConnectionFromId=function(id,callback){if(id in this.rtcPeers){console.log("Already connected to..",id,this.rtcPeers);if(this.rtcPeers[id].initiator===false){this.reinitRtcConnection(id)}else{}}else{this.initRtcPeer(id,{initiator:true})}};PatchBay.prototype._handleMessage=function(data){if(data.type==="signal"){this._handleSignal(data)}else{this.emit("message",data)}};PatchBay.prototype._handleSignal=function(data){if(!this.rtcPeers[data.id]){this.initRtcPeer(data.id,{initiator:false})}this.rtcPeers[data.id].signal(data.message)};PatchBay.prototype._receivedBroadcast=function(data){this.emit("broadcast",data)};PatchBay.prototype.broadcast=function(data){this.signaller.emit("broadcast",data)};PatchBay.prototype._attachPeerEvents=function(p,_id){p.on("signal",function(id,signal){this.signaller.emit("message",{id:id,message:signal,type:"signal"})}.bind(this,_id));p.on("stream",function(id,stream){this.rtcPeers[id].stream=stream;this.emit("stream",id,stream)}.bind(this,_id));p.on("connect",function(id){this.emit("connect",id)}.bind(this,_id));p.on("data",function(id,data){this.emit("data",{id:id,data:JSON.parse(data)})}.bind(this,_id));p.on("close",function(id){delete this.rtcPeers[id];this.emit("close",id)}.bind(this,_id));p.on("error",(function(e){console.warn("simple peer error",e)}))};PatchBay.prototype._destroy=function(){Object.values(this.rtcPeers).forEach((function(peer){peer.destroy()}));this.signaller.close()};module.exports=PatchBay},{events:81,inherits:102,shortid:171,"simple-peer":181,"socket.io-client":200}],231:[function(require,module,exports){module.exports=[{sketch_id:"example_0",code:"JTJGJTJGRmxvciUyMGRlJTIwRnVlZ28lMEElMEFzaGFwZSgyMDAlMkMwLjUlMkMxLjUpJTBBLnNjYWxlKDAuNSUyQzAuNSklMEEuY29sb3IoJTVCMC41JTJDMiU1RC5zbW9vdGgoMSklMkMwLjMlMkMwKSUwQS5yZXBlYXQoMiUyQzIpJTBBLm1vZHVsYXRlU2NhbGUob3NjKDMlMkMwLjUpJTJDLTAuNiklMEEuYWRkKG8wJTJDMC41KSUwQS5zY2FsZSgwLjkpJTBBLm91dCgp"},{sketch_id:"example_3",code:"JTJGJTJGJTIwYnklMjBPbGl2aWElMjBKYWNrJTBBJTBBb3NjKDIwJTJDJTIwMC4wMyUyQyUyMDEuNykua2FsZWlkKCkubXVsdChvc2MoMjAlMkMlMjAwLjAwMSUyQyUyMDApLnJvdGF0ZSgxLjU4KSkuYmxlbmQobzAlMkMlMjAwLjk0KS5tb2R1bGF0ZVNjYWxlKG9zYygxMCUyQyUyMDApJTJDLTAuMDMpLnNjYWxlKDAuOCUyQyUyMCgpJTIwJTNEJTNFJTIwKDEuMDUlMjAlMkIlMjAwLjElMjAqJTIwTWF0aC5zaW4oMC4wNSp0aW1lKSkpLm91dChvMCk="},{sketch_id:"example_4",code:"JTJGJTJGJTIwYnklMjBOZWxzb24lMjBWZXJhJTBBJTJGJTJGJTIwdHdpdHRlciUzQSUyMCU0MG5lbF9zb25vbG9naWElMEElMEFvc2MoOCUyQy0wLjUlMkMlMjAxKS5jb2xvcigtMS41JTJDJTIwLTEuNSUyQyUyMC0xLjUpLmJsZW5kKG8wKS5yb3RhdGUoLTAuNSUyQyUyMC0wLjUpLm1vZHVsYXRlKHNoYXBlKDQpLnJvdGF0ZSgwLjUlMkMlMjAwLjUpLnNjYWxlKDIpLnJlcGVhdFgoMiUyQyUyMDIpLm1vZHVsYXRlKG8wJTJDJTIwKCklMjAlM0QlM0UlMjBtb3VzZS54JTIwKiUyMDAuMDAwNSkucmVwZWF0WSgyJTJDJTIwMikpLm91dChvMCklMEElMEElMEElMEElMEElMEE="},{sketch_id:"example_6",code:"JTJGJTJGJTIwYnklMjBEJUMzJUE5Ym9yYSUyMEZhbGxlaXJvcyUyMEdvbnphbGVzJTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZ3d3cuZ29uemFsZXNkZWJvcmEuY29tJTJGJTBBJTBBb3NjKDUpLmFkZChub2lzZSg1JTJDJTIwMikpLmNvbG9yKDAlMkMlMjAwJTJDJTIwMykuY29sb3JhbWEoMC40KS5vdXQoKSUwQSUwQSUwQSUwQQ=="},{sketch_id:"example_8",code:"JTJGJTJGJTIwYnklMjBSb2RyaWdvJTIwVmVsYXNjbyUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGeWVjdG8uZ2l0aHViLmlvJTJGJTBBJTBBb3NjKDEwNyUyQyUyMDAlMkMlMjAwLjcpLmNvbG9yKDElMkMlMjAwJTJDJTIwMSkucm90YXRlKDAlMkMlMjAtMC4wOCkubW9kdWxhdGVSb3RhdGUobzElMkMlMjAwLjQpLm91dChvMCklMEFvc2MoMzMpLnJvdGF0ZSgyJTJDJTIwMC44KS5tb2R1bGF0ZVJvdGF0ZShvMCUyQyUyMCgpJTIwJTNEJTNFJTIwKGEuZmZ0JTVCMCU1RCoyKSkub3V0KG8xKSUwQQ=="},{sketch_id:"example_9",code:"JTJGJTJGJTIwYnklMjBSb2RyaWdvJTIwVmVsYXNjbyUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGeWVjdG8uZ2l0aHViLmlvJTJGJTBBJTBBb3NjKDE4JTJDJTIwMC4xJTJDJTIwMCkuY29sb3IoMiUyQyUyMDAuMSUyQyUyMDIpJTBBLm11bHQob3NjKDIwJTJDJTIwMC4wMSUyQyUyMDApKS5yZXBlYXQoMiUyQyUyMDIwKS5yb3RhdGUoMC41KS5tb2R1bGF0ZShvMSklMEEuc2NhbGUoMSUyQyUyMCgpJTIwJTNEJTNFJTIwJTIwKGEuZmZ0JTVCMCU1RCowLjklMjAlMkIlMjAyKSkuZGlmZihvMSkub3V0KG8wKSUwQW9zYygyMCUyQyUyMDAuMiUyQyUyMDApLmNvbG9yKDIlMkMlMjAwLjclMkMlMjAwLjEpLm11bHQob3NjKDQwKSkubW9kdWxhdGVSb3RhdGUobzAlMkMlMjAwLjIpJTBBLnJvdGF0ZSgwLjIpLm91dChvMSk="},{sketch_id:"example_10",code:"JTJGJTJGJTIwYnklMjBaYWNoJTIwS3JhbGwlMEElMkYlMkYlMjBodHRwJTNBJTJGJTJGemFjaGtyYWxsLm9ubGluZSUyRiUwQSUwQW9zYyglMjAyMTUlMkMlMjAwLjElMkMlMjAyJTIwKSUwQS5tb2R1bGF0ZSglMEElMjAlMjBvc2MoJTIwMiUyQyUyMC0wLjMlMkMlMjAxMDAlMjApJTBBJTIwJTIwLnJvdGF0ZSgxNSklMEEpJTBBLm11bHQoJTBBJTIwJTIwb3NjKCUyMDIxNSUyQyUyMC0wLjElMkMlMjAyKSUwQSUyMCUyMC5waXhlbGF0ZSglMjA1MCUyQyUyMDUwJTIwKSUwQSklMEEuY29sb3IoJTIwMC45JTJDJTIwMC4wJTJDJTIwMC45JTIwKSUwQS5tb2R1bGF0ZSglMEElMjAlMjBvc2MoJTIwNiUyQyUyMC0wLjElMjApJTBBJTIwJTIwLnJvdGF0ZSglMjA5JTIwKSUwQSklMEEuYWRkKCUwQSUyMCUyMG9zYyglMjAxMCUyQyUyMC0wLjklMkMlMjA5MDAlMjApJTBBJTIwJTIwLmNvbG9yKDElMkMwJTJDMSklMEEpJTBBLm11bHQoJTBBJTIwJTIwc2hhcGUoOTAwJTJDJTIwMC4yJTJDJTIwMSklMEElMjAlMjAubHVtYSgpJTBBJTIwJTIwLnJlcGVhdFgoMiklMEElMjAlMjAucmVwZWF0WSgyKSUwQSUyMCUyMC5jb2xvcmFtYSgxMCklMEEpJTBBLm1vZHVsYXRlKCUwQSUyMCUyMG9zYyglMjA5JTJDJTIwLTAuMyUyQyUyMDkwMCUyMCklMEElMjAlMjAucm90YXRlKCUyMDYlMjApJTBBKSUwQS5hZGQoJTBBJTIwJTIwb3NjKDQlMkMlMjAxJTJDJTIwOTApJTBBJTIwJTIwLmNvbG9yKDAuMiUyQzAlMkMxKSUwQSklMEEub3V0KCklMEE="},{sketch_id:"example_11",code:"JTJGJTJGJTIwYnklMjBaYWNoJTIwS3JhbGwlMEElMkYlMkYlMjBodHRwJTNBJTJGJTJGemFjaGtyYWxsLm9ubGluZSUyRiUwQSUwQW9zYygxMCUyQyUyMDAuOSUyQyUyMDMwMCklMEEuY29sb3IoMC45JTJDJTIwMC43JTJDJTIwMC44KSUwQS5kaWZmKCUwQSUyMCUyMG9zYyg0NSUyQyUyMDAuMyUyQyUyMDEwMCklMEElMjAlMjAuY29sb3IoMC45JTJDJTIwMC45JTJDJTIwMC45KSUwQSUyMCUyMC5yb3RhdGUoMC4xOCklMEElMjAlMjAucGl4ZWxhdGUoMTIpJTBBJTIwJTIwLmthbGVpZCgpJTBBKSUwQS5zY3JvbGxYKDEwKSUwQS5jb2xvcmFtYSgpJTBBLmx1bWEoKSUwQS5yZXBlYXRYKDQpJTBBLnJlcGVhdFkoNCklMEEubW9kdWxhdGUoJTBBJTIwJTIwb3NjKDElMkMlMjAtMC45JTJDJTIwMzAwKSUwQSklMEEuc2NhbGUoMiklMEEub3V0KCklMEE="},{sketch_id:"example_13",code:"JTJGJTJGJTIwYWNpZCUyMGJ1cyUyMHNlYXQlMEElMkYlMkYlMjBieSUyMFdpbGwlMjBIdW1waHJleXMlMEElMkYlMkYlMjBodHRwcyUzQSUyRiUyRmdpdGh1Yi5jb20lMkZUaGVXaXNweSUwQSUwQW9zYygxMDUpLmNvbG9yKDAuNSUyQzAuMSUyQzAuOCkucm90YXRlKDAuMTElMkMlMjAwLjEpLm1vZHVsYXRlKG9zYygxMCkucm90YXRlKDAuMykuYWRkKG8wJTJDJTIwMC4xKSkuYWRkKG9zYygyMCUyQzAuMDElMkMxKS5jb2xvcigwJTJDMC44JTJDMSkpLm91dChvMCklMEFvc2MoNTAlMkMwLjA1JTJDJTIwMC43KS5jb2xvcigxJTJDMC43JTJDMC41KS5kaWZmKG8wKS5tb2R1bGF0ZShvMSUyQzAuMDUpLm91dChvMSklMEFyZW5kZXIobzEp"},{sketch_id:"example_14",code:"JTJGJTJGJTIwYnklMjBPbGl2aWElMjBKYWNrJTBBJTJGJTJGJTIwJTQwX29qYWNrXyUwQSUwQW9zYygyMCUyQyUyMDAuMDElMkMlMjAxLjEpJTBBJTA5LmthbGVpZCg1KSUwQSUwOS5jb2xvcigyLjgzJTJDMC45MSUyQzAuMzkpJTBBJTA5LnJvdGF0ZSgwJTJDJTIwMC4xKSUwQSUwOS5tb2R1bGF0ZShvMCUyQyUyMCgpJTIwJTNEJTNFJTIwbW91c2UueCUyMColMjAwLjAwMDMpJTBBJTA5LnNjYWxlKDEuMDEpJTBBJTIwJTIwJTA5Lm91dChvMCk="},{sketch_id:"example_15",code:"JTJGJTJGJTIwYnklMjBPbGl2aWElMjBKYWNrJTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZvamFjay5naXRodWIuaW8lMEElMEFvc2MoMTAwJTJDJTIwMC4wMSUyQyUyMDEuNCklMEElMDkucm90YXRlKDAlMkMlMjAwLjEpJTBBJTA5Lm11bHQob3NjKDEwJTJDJTIwMC4xKS5tb2R1bGF0ZShvc2MoMTApLnJvdGF0ZSgwJTJDJTIwLTAuMSklMkMlMjAxKSklMEElMDkuY29sb3IoMi44MyUyQzAuOTElMkMwLjM5KSUwQSUyMCUyMC5vdXQobzAp"},{sketch_id:"example_16",code:"JTJGJTJGJTIwYnklMjBPbGl2aWElMjBKYWNrJTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZvamFjay5naXRodWIuaW8lMEElMEFvc2MoNCUyQyUyMDAuMSUyQyUyMDAuOCkuY29sb3IoMS4wNCUyQzAlMkMlMjAtMS4xKS5yb3RhdGUoMC4zMCUyQyUyMDAuMSkucGl4ZWxhdGUoMiUyQyUyMDIwKS5tb2R1bGF0ZShub2lzZSgyLjUpJTJDJTIwKCklMjAlM0QlM0UlMjAxLjUlMjAqJTIwTWF0aC5zaW4oMC4wOCUyMColMjB0aW1lKSkub3V0KG8wKQ=="},{sketch_id:"example_17",code:"JTJGJTJGJTIwbW9pcmUlMEElMkYlMkYlMjBieSUyME9saXZpYSUyMEphY2slMEElMkYlMkYlMjB0d2l0dGVyJTNBJTIwJTQwX29qYWNrXyUwQSUwQXBhdHRlcm4lMjAlM0QlMjAoKSUyMCUzRCUzRSUyMG9zYygyMDAlMkMlMjAwKS5rYWxlaWQoMjAwKS5zY2FsZSgxJTJDJTIwMC40KSUwQSUyRiUyRiUwQXBhdHRlcm4oKSUwQSUyMCUyMC5zY3JvbGxYKDAuMSUyQyUyMDAuMDEpJTBBJTIwJTIwLm11bHQocGF0dGVybigpKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"example_18",code:"JTJGJTJGJTIwYnklMjBPbGl2aWElMjBKYWNrJTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZvamFjay5naXRodWIuaW8lMEElMEFvc2MoNiUyQyUyMDAlMkMlMjAwLjgpJTBBJTIwJTIwLmNvbG9yKDEuMTQlMkMlMjAwLjYlMkMuODApJTBBJTIwJTIwLnJvdGF0ZSgwLjkyJTJDJTIwMC4zKSUwQSUyMCUyMC5waXhlbGF0ZSgyMCUyQyUyMDEwKSUwQSUyMCUyMC5tdWx0KG9zYyg0MCUyQyUyMDAuMDMpLnRocmVzaCgwLjQpLnJvdGF0ZSgwJTJDJTIwLTAuMDIpKSUwQSUyMCUyMC5tb2R1bGF0ZVJvdGF0ZShvc2MoMjAlMkMlMjAwKS50aHJlc2goMC4zJTJDJTIwMC42KSUyQyUyMCgpJTIwJTNEJTNFJTIwMC4xJTIwJTJCJTIwbW91c2UueCUyMColMjAwLjAwMiklMEElMjAlMjAub3V0KG8wKQ=="},{sketch_id:"rangga_0",code:"JTJGJTJGJTIwRHJlYW15JTIwRGlhbW9uZCUwQSUyRiUyRiUyMGJ5JTIwUmFuZ2dhJTIwUHVybmFtYSUyMEFqaSUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGcmFuZ2dhcHVybmFtYWFqaTEud2l4c2l0ZS5jb20lMkZwb3J0Zm9saW8lMEElMEFvc2MoNyUyQy0wLjEyNSkubW9kdWxhdGUodm9yb25vaSgxKSkuZGlmZih2b3Jvbm9pKDEpLm11bHQoZ3JhZGllbnQoLTEpLmx1bWEoMC4xMjUpKSklMEElMjAlMjAubHVtYSgwLjEyNSklMEElMjAlMjAuYWRkKHNoYXBlKDclMkMlMjAwLjUpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwLm11bHQodm9yb25vaSgxMCUyQzIpLmJsZW5kKG8wKS5kaWZmKGdyYWRpZW50KDEpKS5tb2R1bGF0ZSh2b3Jvbm9pKCkpKSklMEElMjAlMjAuc2Nyb2xsWSgtMC4xKSUwQSUyMCUyMC5zY3JvbGxYKDAuMTI1KSUwQSUyMCUyMC5ibGVuZChvMCklMEElMjAlMjAuYmxlbmQobzApJTBBJTIwJTIwLm91dCgpJTBB"},{sketch_id:"rangga_1",code:"JTJGJTJGJTIwVGFnJTIwJTI2JTIwU3dlZXAlMEElMkYlMkYlMjBieSUyMFJhbmdnYSUyMFB1cm5hbWElMjBBamklMEElMkYlMkYlMjBodHRwcyUzQSUyRiUyRnJhbmdnYXB1cm5hbWFhamkxLndpeHNpdGUuY29tJTJGcG9ydGZvbGlvJTBBJTBBb3NjKDUlMkMwLjEyNSkuY29sb3JhbWEoMSklMEElMjAlMjAubHVtYSgwLjEyNSkuYWRkKHNoYXBlKDElMkMwLjUpLmx1bWEoMikuZGlmZihncmFkaWVudCgxKSkpJTBBJTIwJTIwLmRpZmYob3NjKC0xJTJDLTAuMjUpKS5ibGVuZChvMCkuY29sb3IoMCUyQzIuNSUyQzEuNzUpJTBBJTIwJTIwLm91dCgp"},{sketch_id:"rangga_2",code:"JTJGJTJGJTIwTW9ub2Nocm9tZSUyME1lbW9hciUwQSUyRiUyRiUyMGJ5JTIwUmFuZ2dhJTIwUHVybmFtYSUyMEFqaSUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGcmFuZ2dhcHVybmFtYWFqaTEud2l4c2l0ZS5jb20lMkZwb3J0Zm9saW8lMEElMEF2b3Jvbm9pKDUwJTJDMSklMEElMjAlMjAubHVtYSgwLjUpLmFkZChzaGFwZSgxJTJDMSkubHVtYSgxKSklMEElMjAlMjAubW9kdWxhdGUob3NjKC0xMDAwJTJDLTEpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLm1vZHVsYXRlKG9zYygpLmx1bWEoKSkpJTBBJTIwJTIwLmJsZW5kKG8wKSUwQSUyMCUyMC5ibGVuZChvMCklMEElMjAlMjAuYmxlbmQobzApJTBBJTIwJTIwLmJsZW5kKG8wKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"rangga_3",code:"JTJGJTJGJTIwR2FsYXh5JTIwVHJpcCUwQSUyRiUyRiUyMGJ5JTIwUmFuZ2dhJTIwUHVybmFtYSUyMEFqaSUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGcmFuZ2dhcHVybmFtYWFqaTEud2l4c2l0ZS5jb20lMkZwb3J0Zm9saW8lMEElMEFzaGFwZSgxJTJDMSklMEElMjAlMjAubXVsdCh2b3Jvbm9pKDEwMDAlMkMyKSUwQSUyMCUyMC5ibGVuZChvMCkubHVtYSgpKSUwQSUyMCUyMC5hZGQoc2hhcGUoMyUyQzAuMTI1KSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMC5yb3RhdGUoMSUyQzEpLm11bHQodm9yb25vaSgxMDAwJTJDMSkubHVtYSgpKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMC5yb3RhdGUoMS41KSkuc2Nyb2xsWCglNUIwLjElMkMtMC4wNjI1JTJDMC4wMDUlMkMwLjAwMDAxJTVEJTJDMCklMEElMjAlMjAuc2Nyb2xsWSglNUIwLjElMkMtMC4wNjI1JTJDMC4wMDUlMkMwLjAwMDAxJTVEJTJDMCklMEElMjAlMjAub3V0KCk="},{sketch_id:"rangga_4",code:"JTJGJTJGJTIwU3VtZXQlMEElMkYlMkYlMjBieSUyMFJhbmdnYSUyMFB1cm5hbWElMjBBamklMEElMkYlMkYlMjBodHRwcyUzQSUyRiUyRnJhbmdnYXB1cm5hbWFhamkxLndpeHNpdGUuY29tJTJGcG9ydGZvbGlvJTBBJTBBb3NjKDAuNSUyQzEuMjUpLm11bHQoc2hhcGUoMSUyQzAuMDkpLnJvdGF0ZSgxLjUpKSUwQSUyMCUyMC5kaWZmKGdyYWRpZW50KCkpJTBBJTIwJTIwLmFkZChzaGFwZSgyJTJDMikuYmxlbmQoZ3JhZGllbnQoMSkpKSUwQSUyMCUyMC5tb2R1bGF0ZShub2lzZSgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLm1vZHVsYXRlKG5vaXNlKCkuc2Nyb2xsWSgxJTJDMC4wNjI1KSkpJTBBJTIwJTIwLmJsZW5kKG8wKSUwQSUyMCUyMC5jb2xvcigxJTJDLTAuNSUyQy0wLjc1KSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"marianne_0",code:"JTJGJTJGcG9ydCUwQSUyRiUyRmJ5JTIwTWFyaWFubmUlMjBUZWl4aWRvJTBBJTJGJTJGaHR0cHMlM0ElMkYlMkZtYXJpYW5uZXRlaXhpZG8uZ2l0aHViLmlvJTJGJTBBJTBBb3NjKDUlMkMlMjAwLjklMkMlMjAwLjAwMSklMEElMjAlMjAlMjAlMjAua2FsZWlkKCU1QjMlMkM0JTJDNSUyQzclMkM4JTJDOSUyQzEwJTVELmZhc3QoMC4xKSklMEElMjAlMjAlMjAlMjAuY29sb3IoMC41JTJDJTIwMC4zKSUwQSUyMCUyMCUyMCUyMC5jb2xvcmFtYSgwLjQpJTBBJTIwJTIwJTIwJTIwLnJvdGF0ZSgwLjAwOSUyQygpJTNEJTNFTWF0aC5zaW4odGltZSkqJTIwLTAuMDAxJTIwKSUwQSUyMCUyMCUyMCUyMC5tb2R1bGF0ZVJvdGF0ZShvMCUyQygpJTNEJTNFTWF0aC5zaW4odGltZSklMjAqJTIwMC4wMDMpJTBBJTIwJTIwJTIwJTIwLm1vZHVsYXRlKG8wJTJDJTIwMC45KSUwQSUyMCUyMCUyMCUyMC5zY2FsZSgwLjkpJTBBJTIwJTIwJTIwJTIwLm91dChvMCklMEElMEE="},{sketch_id:"marianne_1",code:"JTJGJTJGUGl4ZWxzY2FwZSUwQSUyRiUyRk1hcmlhbm5lJTIwVGVpeGlkbyUwQSUyRiUyRmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRk1hcmlhbm5lVGVpeGlkbyUwQSUwQXNyYyhvMCklMEElMjAuc2F0dXJhdGUoMS4wMSklMEElMjAuc2NhbGUoLjk5OSklMEElMjAuY29sb3IoMS4wMSUyQzEuMDElMkMxLjAxKSUwQSUyMC5odWUoLjAxKSUwQSUyMC5tb2R1bGF0ZUh1ZShzcmMobzEpLmh1ZSguMykucG9zdGVyaXplKC0xKS5jb250cmFzdCguNyklMkMyKSUwQSUyMCUyMC5sYXllcihzcmMobzEpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLmx1bWEoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5tdWx0KGdyYWRpZW50KDEpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLnNhdHVyYXRlKC45KSkpJTBBJTIwJTIwLm91dChvMCklMEElMEFub2lzZSgxJTJDJTIwLjIpJTBBJTIwJTIwLnJvdGF0ZSgyJTJDLjUpJTBBJTIwJTIwLmxheWVyKHNyYyhvMCklMEElMjAlMjAuc2Nyb2xsWCguMikpJTBBJTIwJTIwLm91dChvMSklMEElMEFyZW5kZXIobzAp"},{sketch_id:"naoto_0",code:"JTJGJTJGJTIwJTQwbmFvdG9faGllZGElMEFvc2MoMjAlMkMlMjAwLjElMkMlMjAwKS5jb2xvcigwJTJDJTIwMSUyQyUyMDIpLnJvdGF0ZSgxLjU3JTJGMikub3V0KG8xKSUwQW9zYygzMCUyQyUyMDAuMDElMkMlMjAwKS5jb2xvcigyJTJDJTIwMC43JTJDJTIwMSkubW9kdWxhdGUobzElMkMlMjAwKS5hZGQobzElMkMxKS5tb2R1bGF0ZVBpeGVsYXRlKG8xJTJDMSUyQzEwKS5vdXQobzAp"},{sketch_id:"naoto_1",code:"JTJGJTJGJTIwJTQwbmFvdG9faGllZGElMEFzb2xpZCgwLjIlMkMwLjYlMkMwLjkpLmxheWVyKG9zYygzMS40JTJDMCkudGhyZXNoKDAuNykubHVtYSgpLm1vZHVsYXRlKG9zYyg0JTJDMSkucm90YXRlKDEpJTJDMC4wNSkuY29sb3IoMCUyQzAlMkMwKSkubGF5ZXIob3NjKDMxLjQlMkMwKS50aHJlc2goMC43KS5sdW1hKCkubW9kdWxhdGUob3NjKDQlMkMxKS5yb3RhdGUoMSklMkMwLjEpKS5vdXQoKQ=="},{sketch_id:"ritchse_0",code:"JTJGJTJGcmFuZG9tJTIwdHJ5cG9waG9iaWElMjAtJTIwY2hhbmdlcyUyMGV2ZXJ5dGltZSUyMHlvdSUyMGxvYWQlMjBpdCElMEElMkYlMkZieSUyMFJpdGNoc2UlMEElMkYlMkZpbnN0YWdyYW0uY29tJTJGcml0Y2hzZSUwQSUyMCUwQWZ1bmN0aW9uJTIwcihtaW4lM0QwJTJDbWF4JTNEMSklMjAlN0IlMjByZXR1cm4lMjBNYXRoLnJhbmRvbSgpKihtYXgtbWluKSUyQm1pbiUzQiUyMCU3RCUwQSUyMCUwQXNvbGlkKDElMkMxJTJDMSklMEElMjAlMjAlMDkuZGlmZihzaGFwZSglNUI0JTJDNCUyQzQlMkMyNCU1RC5zbW9vdGgoKS5mYXN0KC41KSUyQ3IoMC42JTJDMC45MyklMkMuMDkpLnJlcGVhdCgyMCUyQzEwKSklMEElMDkubW9kdWxhdGVTY2FsZShvc2MoOCkucm90YXRlKHIoLS41JTJDLjUpKSUyQy41MiklMEElMDkuYWRkKCUwQSUyMCUyMCUwOSUwOXNyYyhvMCkuc2NhbGUoMC45NjUpLnJvdGF0ZSguMDEyKihNYXRoLnJvdW5kKHIoLTIlMkMxKSkpKSUwQSUyMCUyMCUwOSUwOS5jb2xvcihyKCklMkNyKCklMkNyKCkpJTBBJTIwJTIwJTIwJTIwJTA5Lm1vZHVsYXRlUm90YXRlKG8wJTJDcigwJTJDMC41KSklMEElMjAlMjAlMDklMDkuYnJpZ2h0bmVzcyguMTUpJTBBJTIwJTIwJTA5JTA5JTJDLjcpJTBBJTA5Lm91dCgp"},{sketch_id:"ritchse_1",code:"JTJGJTJGY29ycnVwdGVkJTIwc2NyZWVuc2F2ZXIlMEElMkYlMkZieSUyMFJpdGNoc2UlMEElMkYlMkZpbnN0YWdyYW0uY29tJTJGcml0Y2hzZSUwQSUyMCUwQXZvcm9ub2koMzUwJTJDMC4xNSklMEElMjAlMjAlMDkubW9kdWxhdGVTY2FsZShvc2MoOCkucm90YXRlKE1hdGguc2luKHRpbWUpKSUyQy41KSUwQSUyMCUyMCUwOS50aHJlc2goLjgpJTBBJTA5Lm1vZHVsYXRlUm90YXRlKG9zYyg3KSUyQy40KSUwQSUwOS50aHJlc2goLjcpJTBBJTIwJTIwJTA5LmRpZmYoc3JjKG8wKS5zY2FsZSgxLjgpKSUwQSUwOS5tb2R1bGF0ZVNjYWxlKG9zYygyKS5tb2R1bGF0ZVJvdGF0ZShvMCUyQy43NCkpJTBBJTA5LmRpZmYoc3JjKG8wKS5yb3RhdGUoJTVCLS4wMTIlMkMuMDElMkMtLjAwMiUyQzAlNUQpLnNjcm9sbFkoMCUyQyU1Qi0xJTJGMTk5ODAwJTJDMCU1RC5mYXN0KDAuNykpKSUwQSUwOS5icmlnaHRuZXNzKCU1Qi0uMDIlMkMtLjE3JTVELnNtb290aCgpLmZhc3QoLjUpKSUwQSUwOS5vdXQoKQ=="},{sketch_id:"ritchse_2",code:"JTJGJTJGdHJvcGljYWwlMjBqdWljZSUwQSUyRiUyRmJ5JTIwUml0Y2hzZSUwQSUyRiUyRmluc3RhZ3JhbS5jb20lMkZyaXRjaHNlJTBBJTIwJTBBdm9yb25vaSgyJTJDMC4zJTJDMC4yKS5zaGlmdCgwLjUpJTBBLm1vZHVsYXRlUGl4ZWxhdGUodm9yb25vaSg0JTJDMC4yKSUyQzMyJTJDMiklMEEuc2NhbGUoKCklM0QlM0UxJTJCKE1hdGguc2luKHRpbWUqMi41KSowLjA1KSklMEEuZGlmZih2b3Jvbm9pKDMpLnNoaWZ0KDAuNikpJTBBLmRpZmYob3NjKDIlMkMwLjE1JTJDMS4xKS5yb3RhdGUoKSklMEEuYnJpZ2h0bmVzcygwLjEpLmNvbnRyYXN0KDEuMikuc2F0dXJhdGUoMS4yKSUwQSUwOS5vdXQoKSUwQXNwZWVkJTIwJTNEJTIwMC44"},{sketch_id:"ritchse_3",code:"JTJGJTJGdHJ5aW5nJTIwdG8lMjBnZXQlMjBjbG9zZXIlMEElMkYlMkZieSUyMFJpdGNoc2UlMEElMkYlMkZpbnN0YWdyYW0uY29tJTJGcml0Y2hzZSUwQSUyMCUwQW9zYyg2MCUyQy0wLjAxNSUyQzAuMykuZGlmZihvc2MoNjAlMkMwLjA4KS5yb3RhdGUoTWF0aC5QSSUyRjIpKSUwQSUwOS5tb2R1bGF0ZVNjYWxlKG5vaXNlKDMuNSUyQzAuMjUpLm1vZHVsYXRlU2NhbGUob3NjKDE1KS5yb3RhdGUoKCklM0QlM0VNYXRoLnNpbih0aW1lJTJGMikpKSUyQzAuNiklMEElMDkuY29sb3IoMSUyQzAuNSUyQzAuNCkuY29udHJhc3QoMS40KSUwQSUwOS5hZGQoc3JjKG8wKS5tb2R1bGF0ZShvMCUyQy4wNCklMkMuNiklMEElMDkuaW52ZXJ0KCkuYnJpZ2h0bmVzcygwLjEpLmNvbnRyYXN0KDEuMiklMEElMDkubW9kdWxhdGVTY2FsZShvc2MoMiklMkMtMC4yKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"ritchse_4",code:"JTJGJTJGJTIwZGlzaW50ZWdyYXRpb24lMEElMkYlMkYlMjBieSUyMFJpdGNoc2UlMEElMkYlMkYlMjBpbnN0YWdyYW0uY29tJTJGcml0Y2hzZSUwQSUyMCUwQW9zYyg1JTJDLjEpLm1vZHVsYXRlKG5vaXNlKDYpJTJDLjIyKS5kaWZmKG8wKSUwQSUyMCUyMCUwOS5tb2R1bGF0ZVNjcm9sbFkob3NjKDIpLm1vZHVsYXRlKG9zYygpLnJvdGF0ZSgpJTJDLjExKSklMEElMDkuc2NhbGUoLjcyKS5jb2xvcigwLjk5JTJDMS4wMTQlMkMxKSUwQSUyMCUyMCUwOS5vdXQoKQ== "},{sketch_id:"flor_0",code:"JTJGJTJGRmxvciUyMGRlJTIwRnVlZ28lMEElMkYlMkZodHRwcyUzQSUyRiUyRmZsb3JkZWZ1ZWdvLmdpdGh1Yi5pbyUyRiUwQW9zYygzMCUyQzAuMDElMkMxKSUwQS5tdWx0KG9zYygyMCUyQy0wLjElMkMxKS5tb2R1bGF0ZShub2lzZSgzJTJDMSkpLnJvdGF0ZSgwLjcpKSUwQS5wb3N0ZXJpemUoJTVCMyUyQzEwJTJDMiU1RC5mYXN0KDAuNSkuc21vb3RoKDEpKSUwQS5tb2R1bGF0ZVJvdGF0ZShvMCUyQygpJTNEJTNFbW91c2UueCowLjAwMyklMEEub3V0KCk= "},{sketch_id:"mahalia_0",code:"JTJGJTJGJTIwTWFoYWxpYSUyMEgtUiUwQSUyRiUyRiUyMElHJTNBJTIwJTQwbW1faHJfJTBBJTBBc2hhcGUoMjAlMkMwLjElMkMwLjAxKSUwQSUyMCUyMC5zY2FsZSgoKSUyMCUzRCUzRSUyME1hdGguc2luKHRpbWUpKjMpJTBBJTIwJTIwLnJlcGVhdCgoKSUyMCUzRCUzRSUyME1hdGguc2luKHRpbWUpKjEwKSUwQSUyMCUyMC5tb2R1bGF0ZVJvdGF0ZShvMCklMEElMjAlMjAuc2NhbGUoKCklMjAlM0QlM0UlMjBNYXRoLnNpbih0aW1lKSoyKSUwQSUyMCUyMC5tb2R1bGF0ZShub2lzZSgyJTJDMCkpJTBBJTIwJTIwLnJvdGF0ZSgwLjElMkMlMjAwLjkpJTBBLm91dChvMCklMEElMEFzcmMobzApJTBBLm1vZHVsYXRlKG9zYyg1MDAlMkMwJTJDMCkpJTBBLm91dChvMSklMEElMEFzcmMobzEpJTBBLm1vZHVsYXRlS2FsZWlkKHZvcm9ub2koKCklMjAlM0QlM0UlMjBNYXRoLnNpbih0aW1lKSozJTJDMC4xJTJDMC4wMSklMkMoKSUyMCUzRCUzRSUyME1hdGguc2luKHRpbWUpKjMpJTBBLnNjYWxlKCgpJTIwJTNEJTNFJTIwTWF0aC5zaW4odGltZSkqMyklMEEub3V0KG8yKSUwQSUwQXJlbmRlcihvMik="},{sketch_id:"mahalia_1",code:"JTJGJTJGJTIwTWFoYWxpYSUyMEgtUiUwQSUyRiUyRiUyMElHJTNBJTIwJTQwbW1faHJfJTBBJTBBc2hhcGUoKCklMjAlM0QlM0UlMjBNYXRoLnNpbih0aW1lKSUyQjEqMiklMEEucm90YXRlKCgpJTIwJTNEJTNFJTIwTWF0aC5QSSUyMColMjBtb3VzZS54JTIwJTJGMTgwKSUwQS5yZXBlYXRYKDMpJTBBLnJlcGVhdFkoKCklM0QlM0VNYXRoLnNpbih0aW1lKSo1KSUwQS5zY2FsZSgoKSUyMCUzRCUzRSUyME1hdGguUEklMkY0KSUwQS5ibGVuZChzcmMobzApLmNvbG9yKDElMkMwJTJDMCkpJTBBLm1vZHVsYXRlKG9zYygyMCUyQyUyMDAlMkMuNCkpJTBBLmthbGVpZCgyKSUwQSUyMC5vdXQobzApJTBBJTBBcmVuZGVyKG8wKQ=="},{sketch_id:"mahalia_2",code:"JTJGJTJGJTIwVmVsdmV0JTIwUG9vbCUwQSUyRiUyRiUyMGJ5JTIwTWFoYWxpYSUyMEgtUiUwQSUyRiUyRiUyMElHJTNBJTIwbW1faHJfJTBBJTBBJTBBbm9pc2UoKSUwQS5jb2xvcigoKSUyMCUzRCUzRSUyMGEuZmZ0JTVCMiU1RCoyJTJDMCUyQy42KSUwQS5tb2R1bGF0ZShub2lzZSgoKSUyMCUzRCUzRSUyMGEuZmZ0JTVCMCU1RCoxMCkpJTBBLnNjYWxlKCgpJTNEJTNFJTIwYS5mZnQlNUIyJTVEKjUpJTBBLmxheWVyKCUwQSUyMCUyMHNyYyhvMCklMEElMjAlMjAubWFzayhvc2MoMTApLm1vZHVsYXRlUm90YXRlKG9zYygpJTJDOTAlMkMwKSklMEElMjAlMjAuc2NhbGUoKCklMjAlM0QlM0UlMjBhLmZmdCU1QjAlNUQqMiklMEElMjAlMjAubHVtYSgwLjIlMkMwLjMpJTBBKSUwQS5ibGVuZChvMCklMEEub3V0KG8wKSUwQSUwQW9zYygpJTBBLm1vZHVsYXRlKG5vaXNlKCgpJTIwJTNEJTNFJTIwYS5mZnQlNUIxJTVEJTJCNSkpJTBBLmNvbG9yKDElMkMwJTJDMCklMEEub3V0KG8xKSUwQSUwQXNyYyhvMCklMEEubW9kdWxhdGUobzEpJTBBLmxheWVyKCUwQSUyMCUyMHNyYyhvMSklMEElMjAlMjAubWFzayhvMSklMEElMjAlMjAuc2F0dXJhdGUoNyklMEEpJTBBLm1vZHVsYXRlUm90YXRlKG8xKSUwQS5yb3RhdGUoKCU3QnRpbWUlN0QpJTIwJTNEJTNFJTIwdGltZSUyNTM2MCowLjA1KSUwQS5vdXQobzIpJTBBJTBBcmVuZGVyKG8yKQ=="},{sketch_id:"mahalia_3",code:"JTJGJTJGJTIwYnklMjBNYWhhbGlhJTIwSC1SJTBBJTJGJTJGJTIwSUclM0ElMjBtbV9ocl8lMEElMEFzaGFwZSgoKSUzRCUzRU1hdGguc2luKHRpbWUpJTJCMSozJTJDJTIwLjUlMkMuMDEpJTBBLnJlcGVhdCg1JTJDMyUyQyUyMCgpJTNEJTNFYS5mZnQlNUIwJTVEKjIlMkMlMjAoKSUzRCUzRWEuZmZ0JTVCMSU1RCoyKSUwQS5zY3JvbGxZKC41JTJDMC4xKSUwQS5sYXllciglMEElMjAlMjBzcmMobzEpJTBBJTIwJTIwLm1hc2sobzApJTBBJTIwJTIwLmx1bWEoLjAxJTJDJTIwLjEpJTBBJTIwJTIwLmludmVydCguMiklMEEpJTBBLm1vZHVsYXRlKG8xJTJDLjAyKSUwQS5vdXQobzApJTBBJTBBb3NjKDQwJTJDJTIwMC4wOSUyQyUyMDAuOSklMEEuY29sb3IoLjklMkMwJTJDNSklMEEubW9kdWxhdGUob3NjKDEwKS5yb3RhdGUoMSUyQyUyMDAuNSkpJTBBLnJvdGF0ZSgxJTJDJTIwMC4yKSUwQS5vdXQobzEpJTBBJTBBcmVuZGVyKG8wKSUwQSUwQQ=="},{sketch_id:"mahalia_4",code:"JTJGJTJGJTIwQ2VsbHVsYXIlMjAlMjYlMjBCbG9idWxhciUwQSUyRiUyRiUyMGJ5JTIwTWFoYWxpYSUyMEgtUiUwQSUyRiUyRiUyMElHJTNBJTIwbW1faHJfJTBBJTBBc3BlZWQlMjAlM0QlMjAwLjMlMEElMEFzaGFwZSgyMCUyQzAuMiUyQzAuMyklMEEuY29sb3IoMC41JTJDMC44JTJDNTApJTBBJTIwJTIwLnNjYWxlKCgpJTIwJTNEJTNFJTIwTWF0aC5zaW4odGltZSklMkIxKjIpJTBBJTIwJTIwLnJlcGVhdCgoKSUyMCUzRCUzRSUyME1hdGguc2luKHRpbWUpKjEwKSUwQSUyMCUyMC5tb2R1bGF0ZVJvdGF0ZShvMCklMEElMjAlMjAuc2NhbGUoKCklMjAlM0QlM0UlMjBNYXRoLnNpbih0aW1lKSUyQjElMjAqMS41KSUwQSUyMCUyMC5tb2R1bGF0ZShub2lzZSgyJTJDMikpJTBBJTIwJTIwLnJvdGF0ZSgxJTJDJTIwLjIpJTBBJTIwJTIwJTJGJTJGJTIwLmludmVydCgyLjQpJTBBLm91dChvMCklMEE="},{sketch_id:"andromeda_0",code:"JTJGJTJGJTIwMy4wJTBBJTJGJTJGJTIwYnklMjAlQ0UlOTRORFIwTTNEJUNFJTk0JTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZ3d3cuaW5zdGFncmFtLmNvbSUyRmFuZHJvbTNfZGElMkYlMEElMEElMEFub2lzZSgzJTJDMC4zJTJDMykudGhyZXNoKDAuMyUyQzAuMDMpLmRpZmYobzMlMkMwLjMpLm91dChvMSklMEFncmFkaWVudCglNUIwLjMlMkMwLjMlMkMzJTVEKS5kaWZmKG8wKS5ibGVuZChvMSkub3V0KG8zKSUwQXZvcm9ub2koMzMlMkMzJTJDMzApLnJvdGF0ZSgzJTJDMC4zJTJDMCkubW9kdWxhdGVTY2FsZShvMiUyQzAuMykuY29sb3IoLTMlMkMzJTJDMCkuYnJpZ2h0bmVzcygzKS5vdXQobzApJTBBc2hhcGUoMzAlMkMwLjMlMkMxKS5pbnZlcnQoKCU3QnRpbWUlN0QpJTNEJTNFTWF0aC5zaW4odGltZSkqMykub3V0KG8yKSUwQSUwQXJlbmRlcihvMyklMEE="},{sketch_id:"andromeda_1",code:"JTJGJTJGJTIwMy4zJTBBJTJGJTJGJTIwYnklMjAlQ0UlOTRORFIwTTNEJUNFJTk0JTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZ3d3cuaW5zdGFncmFtLmNvbSUyRmFuZHJvbTNfZGElMkYlMEElMEFvc2MoKS5tb2R1bGF0ZVJvdGF0ZShvMCUyQzAuMykub3V0KCklMEFvc2MoMzMlMkMwLjMlMkMwLjMpLmRpZmYobzMlMkMzKS5vdXQobzEpJTBBb3NjKDMlMkMwLjMlMkMzMykubW9kdWxhdGVLYWxlaWQobzMlMkMzKS5kaWZmKG8wKS5vdXQobzIpJTBBc3JjKG8wJTJDMykubXVsdChvMSUyQzMpLmthbGVpZCgzKS5vdXQobzMpJTBBcmVuZGVyKG8yKQ=="},{sketch_id:"asdrubal_0",code:"JTJGJTJGQXNkciVDMyVCQWJhbCUyMEdvbWV6JTBBJTBBbm9pc2UoMyUyQzAuMSUyQzcpJTBBLnJvdGF0ZSgxJTJDLTElMkMtMikubWFzayhzaGFwZSgyMCkpJTBBLmNvbG9yYW1hKDAuNSklMEEubW9kdWxhdGVTY2FsZShvMCklMEEubW9kdWxhdGVTY2FsZShvMCUyQzElMkMpJTBBLmJsZW5kKG8wKSUwQS5ibGVuZChvMCklMEEuYmxlbmQobzApJTBBLmJsZW5kKG8wKSUwQS5vdXQobzApJTBB"},{sketch_id:"flor_1",code:"JTJGJTJGSHlkcmElMjBHbGl0Y2h5JTIwU2xpdCUyMFNjYW4lMEElMkYlMkZGbG9yJTIwZGUlMjBGdWVnbyUwQSUyRiUyRmh0dHBzJTNBJTJGJTJGZmxvcmRlZnVlZ28uZ2l0aHViLmlvJTJGJTIwJTBBczAuaW5pdENhbSgpJTBBc3JjKHMwKS5zYXR1cmF0ZSgyKS5jb250cmFzdCgxLjMpLmxheWVyKHNyYyhvMCkubWFzayhzaGFwZSg0JTJDMikuc2NhbGUoMC41JTJDMC43KS5zY3JvbGxYKDAuMjUpKS5zY3JvbGxYKDAuMDAxKSkubW9kdWxhdGUobzAlMkMwLjAwMSkub3V0KG8wKSUwQSUwQQ=="},{sketch_id:"flor_2",code:"JTJGJTJGR2xpdGNoJTIwUml2ZXIlMEElMkYlMkZGbG9yJTIwZGUlMjBGdWVnbyUwQSUyRiUyRmh0dHBzJTNBJTJGJTJGZmxvcmRlZnVlZ28uZ2l0aHViLmlvJTJGJTBBdm9yb25vaSg4JTJDMSklMEEubXVsdChvc2MoMTAlMkMwLjElMkMoKSUzRCUzRU1hdGguc2luKHRpbWUpKjMpLnNhdHVyYXRlKDMpLmthbGVpZCgyMDApKSUwQS5tb2R1bGF0ZShvMCUyQzAuNSklMEEuYWRkKG8wJTJDMC44KSUwQS5zY3JvbGxZKC0wLjAxKSUwQS5zY2FsZSgwLjk5KSUwQS5tb2R1bGF0ZSh2b3Jvbm9pKDglMkMxKSUyQzAuMDA4KSUwQS5sdW1hKDAuMyklMEEub3V0KCklMEElMEElMEFzcGVlZCUyMCUzRCUyMDAuMSUwQSUwQSUwQSUwQQ=="},{sketch_id:"nesso_0",code:"JTBBJTJGJTJGY2xvdWRzJTIwb2YlMjBwYXNzYWdlJTBBJTJGJTJGYnklMjBOZXNzbyUwQSUyRiUyRnd3dy5uZXNzby54eXolMEElMEFzaGFwZSglNUI0JTJDNSUyQzYlNUQuZmFzdCgwLjEpLnNtb290aCgxKSUyQzAuMDAwMDAxJTJDJTVCMC4yJTJDMC43JTVELnNtb290aCgxKSklMEEuY29sb3IoMC4yJTJDMC40JTJDMC4zKSUwQS5zY3JvbGxYKCgpJTNEJTNFTWF0aC5zaW4odGltZSowLjI3KSklMEEuYWRkKCUwQSUyMCUyMHNoYXBlKCU1QjQlMkM1JTJDNiU1RC5mYXN0KDAuMSkuc21vb3RoKDEpJTJDMC4wMDAwMDElMkMlNUIwLjIlMkMwLjclMkMwLjUlMkMwLjMlNUQuc21vb3RoKDEpKSUwQSUyMCUyMC5jb2xvcigwLjYlMkMwLjIlMkMwLjUpJTBBJTIwJTIwLnNjcm9sbFkoMC4zNSklMEElMjAlMjAuc2Nyb2xsWCgoKSUzRCUzRU1hdGguc2luKHRpbWUqMC4zMykpKSUwQS5hZGQoJTBBJTIwJTIwc2hhcGUoJTVCNCUyQzUlMkM2JTVELmZhc3QoMC4xKS5zbW9vdGgoMSklMkMwLjAwMDAwMSUyQyU1QjAuMiUyQzAuNyUyQzAuMyU1RC5zbW9vdGgoMSkpJTBBJTIwJTIwLmNvbG9yKDAuMiUyQzAuNCUyQzAuNiklMEElMjAlMjAuc2Nyb2xsWSgtMC4zNSklMEElMjAlMjAuc2Nyb2xsWCgoKSUzRCUzRU1hdGguc2luKHRpbWUqMC40MSkqLTEpKSUwQS5hZGQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwc3JjKG8wKS5zaGlmdCgwLjAwMSUyQzAuMDElMkMwLjAwMSklMEElMjAlMjAlMjAlMjAlMjAlMjAuc2Nyb2xsWCglNUIwLjA1JTJDLTAuMDUlNUQuZmFzdCgwLjEpLnNtb290aCgxKSklMEElMjAlMjAlMjAlMjAlMjAlMjAuc2NhbGUoJTVCMS4wNSUyQzAuOSU1RC5mYXN0KDAuMykuc21vb3RoKDEpJTJDJTVCMS4wNSUyQzAuOSUyQzElNUQuZmFzdCgwLjI5KS5zbW9vdGgoMSkpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTJDMC44NSklMEEubW9kdWxhdGUodm9yb25vaSgxMCUyQzIlMkMyKSklMEEub3V0KCk="},{sketch_id:"malitzin_0",code:"JTJGJTJGQ05EU0QlMEElMkYlMkZodHRwJTNBJTJGJTJGbWFsaXR6aW5jb3J0ZXMubmV0JTJGJTBBJTJGJTJGJTIwc2FuZCUyMHNwaXJhbHMlMEElMEFvc2MoMyUyQyUyMDAuMDElMkMlMjAwLjQpJTBBLmNvbG9yKDEuMiUyQzEuMiUyQzEuMyklMEEuc2F0dXJhdGUoMC40KSUwQS5tb2R1bGF0ZVJlcGVhdChvc2MoMiklMkMxJTJDJTIwMiUyQyUyMDQlMkMlMjAzKSUwQS5tb2R1bGF0ZUthbGVpZChvc2MoMTIlMkMwLjA1JTJDMCklMkMxKSUwQS5sdW1hJTIwKDAuNCklMEEucm90YXRlKDQlMkMlMjAwLjElMkMwKSUwQS5tb2R1bGF0ZShvMCUyQyUyMCgpJTIwJTNEJTNFJTIwbW91c2UueSUyMCowLjAwMDIlMjApJTBBLnNjYWxlKDEpLmRpZmYobzEpJTBBLm91dChvMCk="},{sketch_id:"malitzin_1",code:"JTJGJTJGQ05EU0QlMEElMkYlMkZodHRwJTNBJTJGJTJGbWFsaXR6aW5jb3J0ZXMubmV0JTJGJTBBJTJGJTJGYW1lYmElMEElMEFvc2MoMTUlMkMlMjAwLjAxJTJDJTIwMC4xKS5tdWx0KG9zYygxJTJDJTIwLTAuMSkubW9kdWxhdGUob3NjKDIpLnJvdGF0ZSg0JTJDMSklMkMlMjAyMCkpJTBBLmNvbG9yKDAlMkMyLjQlMkM1KSUwQS5zYXR1cmF0ZSgwLjQpJTBBLmx1bWEoMSUyQzAuMSUyQyUyMCg2JTJDJTIwKCklM0QlM0UlMjAxJTIwJTJCJTIwYS5mZnQlNUIzJTVEKSklMEEuc2NhbGUoMC43JTJDJTIwKCklM0QlM0UlMjAwLjclMjAlMkIlMjBhLmZmdCU1QjMlNUQpJTBBLmRpZmYobzApJTJGJTJGJTIwbzAlMEEub3V0KG8wKSUyRiUyRiUyMG8x"},{sketch_id:"malitzin_2",code:"JTJGJTJGQ05EU0QlMEElMkYlMkZodHRwJTNBJTJGJTJGbWFsaXR6aW5jb3J0ZXMubmV0JTJGJTBBJTJGJTJGY3JhenklMjBzcXVhcmVzJTBBJTBBc2hhcGUoNCUyQyUyMCgwLjAxJTJDJTIwKCklM0QlM0UlMjAwLjIlMjAlMkIlMjBhLmZmdCU1QjIlNUQpJTJDMSklMEEubXVsdChvc2MoMSUyQyUyMDEpLm1vZHVsYXRlKG9zYyg1KS5yb3RhdGUoMS40JTJDMSklMkMzKSklMEEuY29sb3IoMSUyQzIlMkM0KSUwQS5zYXR1cmF0ZSgwLjIpJTBBLmx1bWEoMS4yJTJDMC4wNSUyQyUyMCg1JTJDJTIwKCklM0QlM0UlMjAyJTIwJTJCJTIwYS5mZnQlNUIzJTVEKSklMEEuc2NhbGUoMC42JTJDJTIwKCklM0QlM0UlMjAwLjklMjAlMkIlMjBhLmZmdCU1QjMlNUQpJTBBLmRpZmYobzApJTJGJTJGJTIwbzAlMEEub3V0KG8wKSUyRiUyRiUyMG8x"},{sketch_id:"khoparzi_0",code:"JTJGJTJGJTIwSGFwcHklMjBNYW5kYWxhJTBBJTJGJTJGJTIwQnklMjBBYmhpbmF5JTIwS2hvcGFyemklMEElMkYlMkYlMjB0d2l0dGVyJTJGZ2l0aHViJTJGaW5zdGFncmFtJTNBJTIwJTQwa2hvcGFyemklMEF2b3Jvbm9pKDUlMkMtMC4xJTJDNSklMEEuYWRkKG9zYygxJTJDMCUyQzEpKS5rYWxlaWQoMjEpJTBBLnNjYWxlKDElMkMxJTJDMikuY29sb3JhbWEoKS5vdXQobzEpJTBBc3JjKG8xKS5tdWx0KHNyYyhzMCkubW9kdWxhdGVSb3RhdGUobzElMkMxMDApJTJDJTIwLTAuNSklMEElMjAlMjAub3V0KG8wKSUwQSUwQQ=="},{sketch_id:"khoparzi_1",code:"JTJGJTJGJTIwUGVycGV0dWFsJTIwZWxldmF0b3IlMjBidXR0b25zJTBBJTJGJTJGJTIwQnklMjBLaG9wYXJ6aSUwQSUyRiUyRiUyMGh0dHAlM0ElMkYlMkZraG9wYXJ6aS5jb20lMEElMEFzaGFwZSgzKS5hZGQob3NjKDElMkMwLjUlMkMxKSUyQyUyMDEpJTBBJTA5LmFkZChvMSUyQyUyMCgpJTIwJTNEJTNFJTIwKE1hdGguc2luKHRpbWUlMkY0KSUyMColMjAwLjclMjAlMkIlMjAwLjEpKSUwQSUwOSUyRiUyRi5yZXBlYXQoNSklMEElMjAlMjAlMDkuc2NhbGUoKCklM0QlM0VNYXRoLnNpbih0aW1lJTIwJTJGJTIwMTYpKS5yb3RhdGUoMCUyQyUyMC0wLjEpJTBBJTA5Lm91dChvMSklMEElMEFzcmMobzEpJTBBJTIwJTIwLnJvdGF0ZSgwJTJDMC4xKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"khoparzi_2",code:"JTJGJTJGJTIwUmVhbGx5JTIwTG92ZSUwQSUyRiUyRiUyMGJ5JTIwQWJoaW5heSUyMEtob3BhcnppJTBBJTJGJTJGJTIwaHR0cCUzQSUyRiUyRmtob3BhcnppLmNvbSUwQW9zYygxMDAlMkMtMC4wMTI0NSUyQzEpLnBpeGVsYXRlKDUwKS5rYWxlaWQoKCklM0QlM0UoTWF0aC5zaW4odGltZSUyRjgpKjklMkIzKSkucm90YXRlKDAlMkMwLjEyNSklMEEubW9kdWxhdGVSb3RhdGUoc2hhcGUoMykuc2NhbGUoKCklM0QlM0UoTWF0aC5jb3ModGltZSkqMikpLnJvdGF0ZSgwJTJDLTAuMjUpKS5kaWZmKHNyYyhvMCkuYnJpZ2h0bmVzcygwLjMpKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"khoparzi_3",code:"JTJGJTJGJTIwQXFhdXRpYyUyMGJsdWJzJTBBJTJGJTJGJTIwQnklMjBLaG9wYXJ6aSUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGa2hvcGFyemkuY29tJTBBJTBBZ3JhZGllbnQoMC4yNSklMEEuYWRkKG5vaXNlKCklMkMlMjAoKSUzRCUzRU1hdGguY29zKHRpbWUpKSUwQS5tb2R1bGF0ZVJvdGF0ZShzcmMobzApLnJvdGF0ZSgwJTJDJTIwLTAuNTIpJTJDJTIwMC4yKS5tdWx0KHNoYXBlKDM2MCklMkMlMjAwLjgpJTBBLnJlcGVhdCgxMCUyQzUpLm11bHQoc2hhcGUoMzYwKS5zY2FsZSgoKSUzRCUzRU1hdGguc2luKHRpbWUpKSUyQyUyMDAuOCkucm90YXRlKDAlMkMlMjAwLjIpJTBBLmRpZmYoc3JjKG8wKS5yb3RhdGUoMCUyQyUyMC0wLjIpJTJDJTIwMC4yKSUwQS5vdXQoKQ=="},{sketch_id:"celeste_0",code:"JTBBJTIwJTJGJTJGJTIwUHVlcnRhcyUyMElJJTBBJTJGJTJGJTIwcG9yJTIwQ2VsZXN0ZSUyMEJldGFuY3VyJTBBJTJGJTJGJTIwaHR0cHMlM0ElMkYlMkZnaXRodWIuY29tJTJGZXNzdGViYW4lMEElMEFvc2MoMTMlMkMwJTJDMSklMEElMjAlMjAua2FsZWlkKCklMEElMjAlMjAubWFzayhzaGFwZSg0JTJDMC4zJTJDMSkpJTBBJTIwJTIwLm1vZHVsYXRlUm90YXRlKHNoYXBlKDQlMkMwLjElMkMxKSklMEElMjAlMjAubW9kdWxhdGVSb3RhdGUoc2hhcGUoNCUyQzAuMSUyQzAuOSkpJTBBJTIwJTIwLm1vZHVsYXRlUm90YXRlKHNoYXBlKDQlMkMwLjElMkMwLjgpKSUwQSUyMCUyMC5zY2FsZSgwLjMpJTBBJTIwJTIwLmFkZChzaGFwZSg0JTJDMC4yJTJDMSkuY29sb3IoMC4zJTJDMSUyQzElMkMwLjUpKSUwQSUyMCUyMC5yb3RhdGUoKCklM0QlM0V0aW1lKSUwQSUyMCUyMC5vdXQoKQ=="},{sketch_id:"celeste_1",code:"JTJGJTJGJTIwUHVlcnRhcyUyMElJSSUwQSUyRiUyRiUyMHBvciUyMENlbGVzdGUlMjBCZXRhbmN1ciUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmVzc3RlYmFuJTBBJTIwJTBBb3NjKDQwJTJDMC4yJTJDMSklMEElMjAlMjAubW9kdWxhdGVTY2FsZShvc2MoNDAlMkMwJTJDMSkua2FsZWlkKDgpKSUwQSUyMCUyMC5yZXBlYXQoMiUyQzQpJTBBJTIwJTIwLm1vZHVsYXRlKG8wJTJDMC4wNSklMEElMjAlMjAubW9kdWxhdGVLYWxlaWQoc2hhcGUoNCUyQzAuMSUyQzEpKSUwQSUyMCUyMC5vdXQobzAp"},{sketch_id:"celeste_2",code:"JTBBJTIwJTJGJTJGJTIwUHVlcnRhcyUwQSUyRiUyRiUyMHBvciUyMENlbGVzdGUlMjBCZXRhbmN1ciUwQSUyRiUyRiUyMGh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmVzc3RlYmFuJTBBJTBBb3NjKDEzJTJDMCUyQzEpJTBBJTIwJTIwLm1vZHVsYXRlKG9zYygyMSUyQzAuMjUlMkMwKSklMEElMjAlMjAubW9kdWxhdGVTY2FsZShvc2MoMzQpKSUwQSUyMCUyMC5tb2R1bGF0ZUthbGVpZChvc2MoNTUpJTJDMC4xJTJDMSklMEElMjAlMjAub3V0KCk="},{sketch_id:"alexandre_0",code:"JTJGJTJGJTIwJTIydGhlLXdhbGwlMjIlMEElMkYlMkYlMjBBbGV4YW5kcmUlMjBSYW5nZWwlMEElMkYlMkYlMjB3d3cuYWxleGFuZHJlcmFuZ2VsLmFydC5iciUyRmh5ZHJhLmh0bWwlMEElMEFzcGVlZCUzRC4wMjIyJTBBb3NjKDQ4JTJDLS4xJTJDMCkudGhyZXNoKCU1Qi4zJTJDLjclNUQuZmFzdCguNzUpJTJDMCkuY29sb3IoMCUyQzAlMkMxKSUwQSUwQS5hZGQoJTBBJTIwJTIwJTIwJTIwb3NjKDI4JTJDLjElMkMwKS50aHJlc2goJTVCLjMlMkMuNyU1RC5mYXN0KC43NSklMkMwKS5yb3RhdGUoMy4xNCUyRjQpJTBBJTIwJTIwJTIwJTIwLmNvbG9yKDElMkMwJTJDMCklMEElMjAlMjAlMjAlMjAubW9kdWxhdGVTY2FsZSglMjBvc2MoNjQlMkMtLjAxJTJDMCkudGhyZXNoKCU1Qi4zJTJDLjclNUQuZmFzdCguNzUpJTJDMCklMjApJTBBKSUwQS5kaWZmKCUwQSUyMCUyMCUyMCUyMG9zYygyOCUyQy4xJTJDMCkudGhyZXNoKCU1Qi4zJTJDLjclNUQuZmFzdCguNSklMkMwKS5yb3RhdGUoMy4xNCUyRjIpJTBBJTIwJTIwJTIwJTIwLmNvbG9yKDElMkMwJTJDMSklMEElMjAlMjAlMjAlMjAubW9kdWxhdGVTY2FsZSglMjBvc2MoNjQlMkMtLjAxNSUyQzApLnRocmVzaCglNUIuMyUyQy43JTVELmZhc3QoLjUpJTJDMCklMjApJTBBKSUwQS5tb2R1bGF0ZVJvdGF0ZSglMjBvc2MoNTQlMkMtLjAwNSUyQzApLnRocmVzaCglNUIuMyUyQy43JTVELmZhc3QoLjI1KSUyQzApJTIwKSUwQS5tb2R1bGF0ZVNjYWxlKCUyMG9zYyg0NCUyQy0uMDIwJTJDMCkudGhyZXNoKCU1Qi4zJTJDLjclNUQuZmFzdCguMjUpJTJDMCklMjApJTBBLmNvbG9yYW1hKCUyMCgpJTNEJTNFTWF0aC5zaW4odGltZSUyRjI3KSouMDEyMjIlMkI5Ljg5KSUwQS5zY2FsZSgyLjEyMiklMEElMEEub3V0KCk="},{sketch_id:"alexandre_1",code:"JTBBJTIwJTJGJTJGJTIwJTIyZXllJTIwb2YlMjB0aGUlMjBiZWhvbGRlciUyMiUwQSUyRiUyRiUyMEFsZXhhbmRyZSUyMFJhbmdlbCUwQSUyRiUyRiUyMHd3dy5hbGV4YW5kcmVyYW5nZWwuYXJ0LmJyJTJGaHlkcmEuaHRtbCUwQSUwQW5vaXNlKDYlMkMuMDUpJTBBLm11bHQoJTIwb3NjKDklMkMwJTJDJTIwKCklM0QlM0VNYXRoLnNpbih0aW1lJTJGMS41KSUyQjIlMjApJTIwKSUwQS5tdWx0KCUwQSUyMCUyMCUyMCUyMG5vaXNlKDklMkMuMDMpLmJyaWdodG5lc3MoMS4yKS5jb250cmFzdCgyKSUwQSUyMCUyMCUyMCUyMC5tdWx0KCUyMG9zYyg5JTJDMCUyQyUyMCgpJTNEJTNFTWF0aC5zaW4odGltZSUyRjMpJTJCMTMlMjApJTIwKSUwQSklMEEuZGlmZiglMEElMjAlMjAlMjAlMjBub2lzZSgxNSUyQy4wNCkuYnJpZ2h0bmVzcyguMikuY29udHJhc3QoMS4zKSUwQSUyMCUyMCUyMCUyMC5tdWx0KCUyMG9zYyg5JTJDMCUyQyUyMCgpJTNEJTNFTWF0aC5zaW4odGltZSUyRjUpJTJCMTMlMjApJTIwKSUwQSUyMCUyMCUyMCUyMC5yb3RhdGUoJTIwKCklM0QlM0V0aW1lJTJGMzMlMjApJTBBKSUwQS5zY2FsZSglMjAoKSUzRCUzRU1hdGguc2luKHRpbWUlMkY2LjIpKi4xMiUyQi4xNSUyMCklMEEubW9kdWxhdGVTY2FsZSglMEElMjAlMjAlMjAlMjBvc2MoMyUyQzAlMkMwKS5tdWx0KCUyMG9zYygzJTJDMCUyQzApLnJvdGF0ZSgzLjE0JTJGMiklMjApJTBBJTIwJTIwJTIwJTIwLnJvdGF0ZSglMjAoKSUzRCUzRXRpbWUlMkYyNSUyMCkuc2NhbGUoLjM5KS5zY2FsZSgxJTJDLjYlMkMxKS5pbnZlcnQoKSUwQSUyMCUyMCUyMCUyMCUyQyUyMCgpJTNEJTNFTWF0aC5zaW4odGltZSUyRjUuMykqMS41JTJCMyUyMCUyMCklMEEucm90YXRlKCUyMCgpJTNEJTNFdGltZSUyRjIyJTIwKSUwQS5tdWx0KCUyMHNoYXBlKDEwMCUyQy45JTJDLjAxKS5zY2FsZSgxJTJDLjYlMkMxKSUyMCklMEEub3V0KCk="},{sketch_id:"alexandre_2",code:"JTJGJTJGJTIwJTIyZWdnJTIwb2YlMjB0aGUlMjBwaG9lbml4JTIyJTBBJTJGJTJGJTIwQWxleGFuZHJlJTIwUmFuZ2VsJTBBJTJGJTJGJTIwd3d3LmFsZXhhbmRyZXJhbmdlbC5hcnQuYnIlMkZoeWRyYS5odG1sJTBBJTBBc3BlZWQlM0QxLjIlMEFzaGFwZSg5OSUyQy4xNSUyQy41KS5jb2xvcigwJTJDMSUyQzIpJTBBJTBBLmRpZmYoJTIwc2hhcGUoMjQwJTJDLjUlMkMwKS5zY3JvbGxYKC4wNSkucm90YXRlKCUyMCgpJTNEJTNFdGltZSUyRjEwJTIwKS5jb2xvcigxJTJDMCUyQy43NSklMjApJTBBLmRpZmYoJTIwc2hhcGUoOTklMkMuNCUyQy4wMDIpLnNjcm9sbFgoLjEwKS5yb3RhdGUoJTIwKCklM0QlM0V0aW1lJTJGMjAlMjApLmNvbG9yKDElMkMwJTJDLjc1KSUyMCklMEEuZGlmZiglMjBzaGFwZSg5OSUyQy4zJTJDLjAwMikuc2Nyb2xsWCguMTUpLnJvdGF0ZSglMjAoKSUzRCUzRXRpbWUlMkYzMCUyMCkuY29sb3IoMSUyQzAlMkMuNzUpJTIwKSUwQS5kaWZmKCUyMHNoYXBlKDk5JTJDLjIlMkMuMDAyKS5zY3JvbGxYKC4yMCkucm90YXRlKCUyMCgpJTNEJTNFdGltZSUyRjQwJTIwKS5jb2xvcigxJTJDMCUyQy43NSklMjApJTBBLmRpZmYoJTIwc2hhcGUoOTklMkMuMSUyQy4wMDIpLnNjcm9sbFgoLjI1KS5yb3RhdGUoJTIwKCklM0QlM0V0aW1lJTJGNTAlMjApLmNvbG9yKDElMkMwJTJDLjc1KSUyMCklMEElMEEubW9kdWxhdGVTY2FsZSglMEElMjAlMjBzaGFwZSgyNDAlMkMuNSUyQzApLnNjcm9sbFgoLjA1KS5yb3RhdGUoJTIwKCklM0QlM0V0aW1lJTJGMTAlMjApJTBBJTIwJTIwJTJDJTIwKCklM0QlM0UoTWF0aC5zaW4odGltZSUyRjMpKi4yKSUyQi4yJTIwKSUwQSUwQS5zY2FsZSgxLjYlMkMuNiUyQzEpJTBBLm91dCgp"},{sketch_id:"afalfl_0",code:"JTJGJTJGZmlsZXQlMjBtaWdub24lMEElMkYlMkYlMjBBRkFMRkwlMEElMkYlMkYlMjBpbnN0YWdyYW0lMkZhX2ZfYWxmbCUyMCUwQSUwQW9zYygxMDAlMkMtMC4wMDE4JTJDMC4xNykuZGlmZihvc2MoMjAlMkMwLjAwMDA4KS5yb3RhdGUoTWF0aC5QSSUyRjAuMDAwMDMpKSUwQS5tb2R1bGF0ZVNjYWxlKG5vaXNlKDEuNSUyQzAuMTgpLm1vZHVsYXRlU2NhbGUob3NjKDEzKS5yb3RhdGUoKCklM0QlM0VNYXRoLnNpbih0aW1lJTJGMjIpKSklMkMzKSUwQS5jb2xvcigxMSUyQzAuNSUyQzAuNCUyQyUyMDAuOSUyQyUyMDAuMiUyQyUyMDAuMDExJTJDJTIwNSUyQyUyMDIyJTJDJTIwJTIwMC41JTJDJTIwLTEpLmNvbnRyYXN0KDEuNCklMEEuYWRkKHNyYyhvMCkubW9kdWxhdGUobzAlMkMuMDQpJTJDLjYlMkMlMjAuOSklMEElMjAlMjAlMkYlMkYucGl4ZWxhdGUoMC40JTJDJTIwMC4yJTJDJTIwMC4xKSUwQS5pbnZlcnQoKS5icmlnaHRuZXNzKDAuMDAwMyUyQyUyMDIpLmNvbnRyYXN0KCUyMDAuNSUyQyUyMDIlMkMlMjAwLjElMkMlMjAyKS5jb2xvcig0JTJDJTIwLTIlMkMlMjAwLjEpJTBBLm1vZHVsYXRlU2NhbGUob3NjKDIpJTJDLTAuMiUyQyUyMDIlMkMlMjAxJTJDJTIwMC4zKSUwQSUyMC5wb3N0ZXJpemUoMjAwKSUyMC5yb3RhdGUoMSUyQyUyMDAuMiUyQyUyMDAuMDElMkMlMjAwLjAwMSklMEElMjAuY29sb3IoMjIlMkMlMjAtMiUyQyUyMDAuNSUyQyUyMDAuNSUyQyUyMDAuMDAwMSUyQyUyMCUyMDAuMSUyQyUyMDAuMiUyQyUyMDgpLmNvbnRyYXN0KDAuMTglMkMlMjAwLjMlMkMlMjAwLjElMkMlMjAwLjIlMkMlMjAwLjAzJTJDJTIwMSklMjAuJTIwYnJpZ2h0bmVzcygwLjAwMDElMkMlMjAtMSUyQyUyMDEwKSUwQSUwOS5vdXQoKQ=="},{sketch_id:"eerie_ear_0",code:"JTJGJTJGJTIwZWVfMiUyMC4lMjBNVUxUSVZFUlNFJTIwLiUyMHRpbWUlMjBhbmQlMjBmZWVkYmFjayUwQSUyRiUyRiUyMGVfZSUyMCUyRiUyRiUyMCU0MGVlcmllX2VhciUwQXBhdCUyMCUzRCUyMCgpJTNEJTNFJTBBc29saWQoKSUwQS5sYXllcihzb2xpZCgpLmRpZmYoJTBBJTIwJTIwb3NjKCh0aW1lJTJGMTYpJTIwKiUyMDElMkMlMjAodGltZSUyRjEwMDApJTIwKiUyMDAuMiUyMCUyMCklMEElMjAlMjAlMjAlMjAubXVsdChvc2MoKHRpbWUlMkY4KSUyMColMjAxJTJDJTIwKHRpbWUlMkYxMDA2KSUyMColMjAwLjIlMjAlMjApLnJvdGF0ZSgxLjU3KSklMEElMjAlMjAlMjAlMjAubW9kdWxhdGUoKHNoYXBlKDEwNiUyQzElMkMwLjA1KSkpJTBBJTIwJTIwJTIwJTIwLm11bHQoc2hhcGUoMTA2JTJDMSUyQzAuMDUpKSUwQSUyMCUyMCkpJTBBJTIwJTIwLm1vZHVsYXRlU2NhbGUob3NjKDIlMkMwLjEyNSklMkMwLjEyNSklMEElMkYlMkYlMEFzb2xpZCgpJTBBLmxheWVyKHNvbGlkKDElMkMxJTJDMSklMEElMjAlMjAubXVsdChwYXQoKSUwQSUyMCUyMC5kaWZmKHNyYyhvMCkuc2NhbGUoMC4yKS5tdWx0KHNvbGlkKCklMkMlNUIwLjclMkMwLjYlMkMwLjQlMkMwLjYlNUQpLmthbGVpZCgxLjAxKS5zYXR1cmF0ZSgwLjMpKSUwQSklMEEubGF5ZXIoc29saWQoMSUyQzElMkMxKSUwQSUyMCUyMCUyMCUyMC5tYXNrKCUwQSUyMCUyMCUyMCUyMCUyMCUyMG5vaXNlKDIlMkMwLjA1KSUwQSUyMCUyMCUyMCUyMCUyMCUyMC5pbnZlcnQoKS5jb2xvcmFtYSgyKS5wb3N0ZXJpemUoOCUyQzQpLmx1bWEoMC4yNSkudGhyZXNoKDAuNSklMEElMjAlMjAlMjAlMjAlMjAlMjAubW9kdWxhdGVSb3RhdGUob3NjKDElMkMwLjUpKSUwQSUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAubXVsdChncmFkaWVudCgwLjUpLmthbGVpZCgxKS5jb2xvcmFtYSgyKS5zYXR1cmF0ZSgxLjEpLmNvbnRyYXN0KDEuNikubXVsdChzb2xpZCgpJTJDMC40NSkpJTBBJTIwJTIwKSklMEElMjAlMjAub3V0KCklMEElMkYlMkYlMEFzcGVlZCUzRCUyMDAuNSUwQQ=="},{sketch_id:"eerie_ear_1",code:"JTJGJTJGJTIwZWVfMyUyMCUyRiUyRkxJTkVTJTBBJTJGJTJGJTIwZV9lJTIwJTJGJTJGJTIwJTQwZWVyaWVfZWFyJTBBJTJGJTJGJTBBJTJGJTJGYmFzZWQlMjBvbiUwQSUyRiUyRiU0MG5hb3RvX2hpZWRhJTBBJTJGJTJGaHR0cHMlM0ElMkYlMkZuYW90b2hpZWRhLmNvbSUyRmJsb2clMkZoeWRyYS1ib29rJTJGJTBBJTJGJTJGJTBBbiUyMCUzRCUyMDglMEFhJTIwJTNEJTIwKCklMjAlM0QlM0UlMjBzaGFwZSg0JTJDMC4yNSUyQzAuMDA5KS5yb3RhdGUoKCklM0QlM0V0aW1lJTJGLTQwKS5yZXBlYXQobiUyQ24pJTBBYSgpLmFkZChhKCkuc2Nyb2xsWCgwLjUlMkZuKS5zY3JvbGxZKDAuNSUyRm4pJTJDMSkubW9kdWxhdGUobzElMkMwLjEpLm1vZHVsYXRlKHNyYyhvMSkuY29sb3IoMTAlMkMxMCkuYWRkKHNvbGlkKC0xNCUyQy0xNCkpLnJvdGF0ZSgoKSUzRCUzRXRpbWUlMkY0MCklMkMwLjAwNSkuYWRkKHNyYyhvMSkuc2Nyb2xsWSgwLjAxMiUyQzAuMDIpJTJDMC41KS5vdXQobzEpJTBBc3JjKG8xKS5jb2xvcmFtYSgxLjIpLnBvc3Rlcml6ZSg0KS5zYXR1cmF0ZSgwLjcpLmNvbnRyYXN0KDYpLm11bHQoc29saWQoKSUyQzAuMTUpLm91dChvMCklMEElMEElMEE="},{sketch_id:"eerie_ear_2",code:"JTJGJTJGZWVfNSUyMC4lMjBGVUdJVElWRSUyMEdFT01FVFJZJTIwVkhTJTIwLiUyMGF1ZGlvcmVhY3RpdmUlMjBzaGFwZXMlMjBhbmQlMjBncmFkaWVudHMlMEElMkYlMkYlMjBlX2UlMjAlMkYlMkYlMjAlNDBlZXJpZV9lYXIlMEElMkYlMkYlMEFzJTNEJTIwKCklM0QlM0UlMEElMjAlMjBzaGFwZSg0KSUwQS5zY3JvbGxYKCU1Qi0wLjUlMkMtMC4yJTJDMC4zJTJDLTAuMSUyQy0wLjElNUQuc21vb3RoKDAuMSkuZmFzdCgwLjMpKSUwQS5zY3JvbGxZKCU1QjAuMjUlMkMtMC4yJTJDMC4zJTJDLTAuMSUyQzAuMiU1RC5zbW9vdGgoMC45KS5mYXN0KDAuMTUpKSUwQSUyRiUyRiUwQXNvbGlkKCklMEEuYWRkKGdyYWRpZW50KDMlMkMwLjA1KS5yb3RhdGUoMC4wNSUyQy0wLjIpLnBvc3Rlcml6ZSgyKS5jb250cmFzdCgwLjYpJTJDJTVCMSUyQzAlMkMxJTJDMC41JTJDMCUyQzAuNiU1RC5zbW9vdGgoMC45KSklMEEuYWRkKHMoKSklMEEubXVsdChzKCkuc2NhbGUoMC44KS5zY3JvbGxYKDAuMDEpLnNjcm9sbFkoLTAuMDEpLnJvdGF0ZSgwLjIlMkMwLjA2KS5hZGQoZ3JhZGllbnQoMykuY29udHJhc3QoMC42KSUyQyU1QjElMkMwJTJDMSUyQzAuNSU1RC5zbW9vdGgoMC45KSUyQzAuNSkubXVsdChzcmMobzApLnNjYWxlKDAuOTgpJTJDKCklM0QlM0VhLmZmdCU1QjAlNUQqOSklMEElMjAlMjAlMjAlMjAlMjApJTBBLmRpZmYocygpLm1vZHVsYXRlKHNoYXBlKDUwMCkpLnNjYWxlKCU1QjEuNyUyQzEuMiU1RC5zbW9vdGgoMC45KS5mYXN0KDAuMDUpKSklMEEuYWRkKGdyYWRpZW50KDIpLmludmVydCgpJTJDKCklM0QlM0VhLmZmdCU1QjIlNUQpJTBBLm11bHQoZ3JhZGllbnQoKCklM0QlM0VhLmZmdCU1QjMlNUQqOCkpJTBBLmJsZW5kKHNyYygobzApJTJDKCklM0QlM0VhLmZmdCU1QjElNUQqNDApKSUwQS5hZGQodm9yb25vaSgoKSUzRCUzRWEuZmZ0JTVCMSU1RCUyQygpJTNEJTNFYS5mZnQlNUIzJTVEJTJDKCklM0QlM0VhLmZmdCU1QjAlNUQpLnRocmVzaCgwLjcpLnBvc3Rlcml6ZSgyJTJDNCkubHVtYSgwLjkpLnNjcm9sbFkoMSUyQygpJTNEJTNFYS5mZnQlNUIwJTVEJTJGMzApLmNvbG9yYW1hKDMpLnRocmVzaCgoKSUzRCUzRWEuZmZ0JTVCMSU1RCkuc2NhbGUoKCklM0QlM0VhLmZmdCU1QjMlNUQqMiklMkMoKSUzRCUzRWEuZmZ0JTVCMCU1RCUyRjIpJTBBJTIwJTIwLm91dCgpJTBBJTJGJTJGJTBBc3BlZWQlM0QlMjAxJTBBJTBBYS5zZXRTbW9vdGgoMC45Nik="},{sketch_id:"eerie_ear_3",code:"JTJGJTJGJTIwZWVfMSUyMC4lMjBFWUUlMjBJTiUyMFRIRSUyMFNLWSUwQSUyRiUyRmV4YW1wbGUlMjBvZiUyMG1hc2slMjBhbmQlMjBmdW5jdGlvbiUyMG1vZHVsYXRpb24lMEElMkYlMkYlMjBlX2UlMjAlMkYlMkYlMjAlNDBlZXJpZV9lYXIlMEFub2lzZSgxOCklMEElMjAlMjAuY29sb3JhbWEoMSklMEElMjAlMjAucG9zdGVyaXplKDIpJTBBJTIwJTIwLmthbGVpZCg1MCklMEElMjAlMjAubWFzayglMEElMjAlMjAlMjAlMjBzaGFwZSgyNSUyQyUyMDAuMjUpLm1vZHVsYXRlU2NhbGUoJTBBJTIwJTIwJTIwJTIwJTIwJTIwbm9pc2UoNDAwLjUlMkMlMjAwLjUpJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCklMEElMjAlMjAubWFzayhzaGFwZSg0MDAlMkMlMjAxJTJDJTIwMi4xMjUpKSUwQSUyMCUyMC5tb2R1bGF0ZVNjYWxlKG9zYyg2JTJDJTIwMC4xMjUlMkMlMjAwLjA1KS5rYWxlaWQoNTApKSUwQSUyMCUyMC5tdWx0KG9zYygyMCUyQyUyMDAuMDUlMkMlMjAyLjQpLmthbGVpZCg1MCklMkMlMjAwLjI1KSUwQSUyMCUyMC5zY2FsZSgxLjc1JTJDJTIwMC42NSUyQyUyMDAuNSklMEElMjAlMjAubW9kdWxhdGUobm9pc2UoMC41KSklMEElMjAlMjAuc2F0dXJhdGUoNiklMEElMjAlMjAucG9zdGVyaXplKDQlMkMlMjAwLjIpJTBBJTIwJTIwLnNjYWxlKDEuNSklMEElMjAlMjAub3V0KCklM0IlMEE="}]},{}],232:[function(require,module,exports){const request=require("superagent");const examples=require("./examples.json");const sketches=[];const license=`// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/`;class Gallery{constructor(callback,state,emitter){this.sketches=[];this.examples=[];this.current=null;this.code=null;this.exampleIndex=null;this.state=state;this.emitter=emitter;this.serverURL=this.state.serverURL===null?"":this.state.serverURL;this.examples=examples;this.setSketchFromURL(callback);window.addEventListener("popstate",(event=>{this.setSketchFromURL(callback)}));this.setRandomSketch=this.setRandomSketch.bind(this)}clear(){this.current=null;this.code=null;let newurl=window.location.protocol+"//"+window.location.host+window.location.pathname;window.history.pushState({path:newurl},"",newurl);this.url=newurl}setSketchFromURL(callback){hush();render(o0);let searchParams=new URLSearchParams(window.location.search);this.searchParams=searchParams;let base64Code=searchParams.get("code");let sketch_id=searchParams.get("sketch_id");let showCode=searchParams.get("showCode");let code="";this.foundSketch=false;if(sketch_id){var sketch=this.getExampleById(sketch_id);if(sketch){this.setSketch(sketch);callback(this.code,false)}else{request.get(`${this.state.serverURL}/sketchById`).query({sketch_id:sketch_id}).end(((err,res)=>{if(err){console.log("err getting sketches",err);this.setSketchFromCode(base64Code,callback)}else{this.sketches=JSON.parse(res.text);if(this.sketches.length>0){this.setSketch(this.sketches[0]);this.foundSketch=true;callback(this.code,this.foundSketch)}else{this.setSketchFromCode(base64Code,callback)}}}))}}else{this.setSketchFromCode(base64Code,callback)}if(showCode==="false"){this.emitter.emit("hideAll");this.emitter.emit("hide info")}}setSketchFromCode(base64Code,callback){if(base64Code){this.code=this.decodeBase64(base64Code);this.foundSketch=true}else{this.setRandomSketch()}callback(this.code,this.foundSketch)}saveImage(){}setToURL(params){this.searchParams.delete("sketch_id");this.searchParams.delete("code");let url_params;if(params.sketch_id){url_params=`sketch_id=${params.sketch_id}`;this.searchParams.append("sketch_id",params.sketch_id)}else{url_params=`sketch_id=${params.sketch_id}&code=${params.code}`;this.searchParams.append("sketch_id",params.sketch_id);this.searchParams.append("code",params.code)}let newurl=window.location.protocol+"//"+window.location.host+window.location.pathname+"?"+this.searchParams.toString();window.history.replaceState({path:newurl},"",newurl);this.url=newurl}encodeBase64(text){return btoa(encodeURIComponent(text))}decodeBase64(base64Code){return decodeURIComponent(atob(base64Code))}setSketch(sketch){let code=this.decodeBase64(sketch.code);if(code.indexOf(license)<0)code=`${license}\n${code}\n`;this.code=code;this.current=sketch;this.setToURL(sketch)}setRandomSketch(){if(this.examples.length>0){let index;index=Math.floor(Math.random()*this.examples.length);while(index===this.exampleIndex){index=Math.floor(Math.random()*this.examples.length)}this.exampleIndex=index;this.setSketch(this.examples[index])}else{var startString="osc("+2+Math.floor(Math.pow(10,Math.random()*2))+")";startString+=".color("+Math.random().toFixed(2)+","+Math.random().toFixed(2)+","+Math.random().toFixed(2)+")";startString+=".rotate("+Math.random().toFixed(2)+")";startString+=".out(o0)";this.code=startString}}shareSketch(code,hydra,name){this.saveSketch(code,(()=>{console.log("URL is",this.url,"sketch is",this.current);hydra.getScreenImage((img=>{request.post(`${this.state.serverURL}/image`).attach("previewImage",img).query({url:this.url,sketch_id:this.current.sketch_id,name:name}).end(((err,res)=>{if(err){console.log("error postingimage",err)}else{console.log("image response",res.text)}}))}))}))}saveSketch(code,callback){let self=this;let base64=this.encodeBase64(code);let query={code:base64,parent:this.current?this.current.sketch_id:null};console.log("saving in gallery",query);request.post(`${this.state.serverURL}/sketch`).query(query).end(((err,res)=>{if(err){console.log("error posting sketch",err);if(callback)callback(err)}else{console.log("response",res.text);self.setSketch({sketch_id:res.text,code:base64});if(callback)callback(null)}}))}saveLocally(code){let base64=this.encodeBase64(code);this.searchParams.delete("sketch_id");this.searchParams.delete("code");this.searchParams.append("code",base64);var url_params=this.searchParams.toString();let newurl=window.location.protocol+"//"+window.location.host+window.location.pathname+"?"+url_params;window.history.pushState({path:newurl},"",newurl);this.url=newurl}getExampleById(id){var sketches=this.examples.filter((sketch=>sketch.sketch_id===id));if(sketches.length<=0)sketches=this.sketches.filter((sketch=>sketch.sketch_id===id));return sketches[0]}}module.exports=Gallery},{"./examples.json":231,superagent:218}],233:[function(require,module,exports){const i18next=require("i18next");const i18nextBrowserLanguageDetector=require("i18next-browser-languagedetector");const languageResources=require("./text-elements.js");const availableLanguages=["ja","es","ar","id","pt-br","ch","ko","fr"];const languagePath=lang=>`https://raw.githubusercontent.com/hydra-synth/l10n/main/${lang}/editor.json`;i18next.use(i18nextBrowserLanguageDetector).init({debug:true,fallbackLng:"en",partialBundledLanguages:true,resources:languageResources});module.exports=function store(state,emitter){const languages={};let searchParams=new URLSearchParams(window.location.search);let lang=searchParams.get("l10n-lang");let path=searchParams.get("l10n-url");availableLanguages.forEach((lang=>{loadLanguageFromURL(lang,languagePath(lang))}));if(lang!==null&&path!==null){loadLanguageFromURL(lang,path)}updateAvailableLanguages();emitter.on("set language",(lang=>{i18next.changeLanguage(lang,((err,t)=>{state.translation.selectedLanguage=lang;emitter.emit("render")}))}));function updateAvailableLanguages(){Object.keys(languageResources).forEach((key=>{const k=key.split("-")[0];languages[k]=i18next.getFixedT(k)("language-name")}));state.translation={t:i18next.t,languages:languages,selectedLanguage:i18next.language}}function loadLanguageFromURL(lang="es",path){const css="color: purple; background: orange; font-size: 14px;padding:10px";console.log(`%cloading translation for ${lang} from ${path}`,css);fetch(path).then((res=>{if(!res.ok){return res.text().then((text=>{throw new Error(text)}))}else{return res.json()}})).then((json=>{window.i18n=i18next;console.log("adding language",lang,json);const k=lang.split("-")[0];i18next.addResourceBundle(k,"translation",json);const languages={};updateAvailableLanguages();emitter.emit("render")}))}}},{"./text-elements.js":235,i18next:99,"i18next-browser-languagedetector":98}],234:[function(require,module,exports){const Gallery=require("./gallery.js");const repl=require("../views/editor/repl.js");module.exports=function store(state,emitter){state.showInfo=true;state.showUI=true;const SERVER_URL="https://api.hydrasynth.xyz";state.serverURL=SERVER_URL!==undefined?SERVER_URL:null;let sketches;emitter.on("DOMContentLoaded",(function(){const editor=state.editor.editor;sketches=new Gallery(((code,sketchFromURL)=>{editor.setValue(code);repl.eval(code);if(sketchFromURL){state.showInfo=false}else{state.showInfo=true}emitter.emit("render")}),state,emitter)}));emitter.on("screencap",(()=>{screencap();const editor=state.editor.editor;const text=editor.getValue();const data=new Blob([text],{type:"text/plain"});const a=document.createElement("a");a.style.display="none";let d=new Date;a.download=`hydra-${d.getFullYear()}-${d.getMonth()+1}-${d.getDate()}-${d.getHours()}.${d.getMinutes()}.${d.getSeconds()}.js`;a.href=URL.createObjectURL(data);a.click();setTimeout((()=>{window.URL.revokeObjectURL(a.href)}),300)}));emitter.on("editor:randomize",(function(evt){const editor=state.editor.editor;if(evt.shiftKey){editor.mutator.doUndo()}else{editor.mutator.mutate({reroll:false,changeTransform:evt.metaKey});editor.formatCode();sketches.saveLocally(editor.getValue())}}));function clearAll(){const editor=state.editor.editor;hush();speed=1;sketches.clear();editor.clear()}emitter.on("editor:clearAll",(function(){clearAll()}));emitter.on("editor:evalAll",(function(){const editor=state.editor.editor;const code=editor.getValue();repl.eval(code,((string,err)=>{editor.flashCode();if(!err)sketches.saveLocally(code)}))}));emitter.on("editor:evalLine",(line=>{repl.eval(line)}));emitter.on("editor:evalBlock",(block=>{repl.eval(block)}));emitter.on("gallery:saveToURL",(function(){let editor=state.editor.editor;const editorText=editor.getValue();sketches.saveLocally(editorText)}));emitter.on("gallery:shareSketch",(function(){let editor=state.editor.editor;const editorText=editor.getValue();repl.eval(editor.getValue(),((code,error)=>{if(!error){showConfirmation((name=>{sketches.shareSketch(editorText,state.hydra.hydra,name)}),(()=>{}))}else{console.warn(error)}}))}));emitter.on("gallery:showExample",(()=>{const editor=state.editor.editor;clearAll();sketches.setRandomSketch();editor.setValue(sketches.code);repl.eval(editor.getValue())}));emitter.on("show confirmation",(function(count){}));emitter.on("clear all",(function(count){}));emitter.on("hideAll",(function(){state.showUI=!state.showUI;emitter.emit("render")}));emitter.on("toggle info",(function(count){state.showInfo=!state.showInfo;emitter.emit("render")}));emitter.on("hude info",(function(count){state.showInfo=false;emitter.emit("render")}));emitter.on("mutate sketch",(function(){}))};function showConfirmation(successCallback,terminateCallback){var c=prompt(`\n\n HYDRA SKETCH GALLERY\n\n🎨 Click 'OK' to add your sketch and screenshot to the gallery of hydra sketches at https://botsin.space/@hydra. \n\n‼️ Make sure you are ready to share - there is no undo button!\n\n💖 Thank you for sharing! You are also warmly invited to join the the live coding server on the fediverse at https://social.toplap.org/.\n`,"your name, mastodon handle, and/or a short description");if(c!==null){successCallback(c)}else{terminateCallback()}}},{"../views/editor/repl.js":244,"./gallery.js":232}],235:[function(require,module,exports){module.exports={en:{translation:{"language-name":"english",toolbar:{run:"Run all code (ctrl+shift+enter)",upload:"upload to gallery",clear:"clear all",shuffle:"show random sketch",random:"make random change","show-info":"show info window","hide-info":"hide info window"},info:{title:"hydra",subtitle:"live coding video synth",description:"Hydra is live code-able video synth and coding environment that runs directly in the browser. It is free and open-source and made for beginners and experts alike.","get-started-title":"To get started:","get-started-list":["Close this window","Change some numbers","Type Ctrl + Shift + Enter"],"description-detailed":"Hydra is written in JavaScript and compiles to WebGL under the hood. The syntax is inspired by analog modular synthesis, in which chaining or patching a set of transformations together generates a visual result.",uses:"Hydra can be used:","uses-list":["to mix and add effects to camera feeds, screenshares, live streams, and videos","to create generative and audio-reactive visuals, and share them online with others","in combination with other javascript libraries such as P5.js, Tone.js, THREE.js, or gibber","to add interactive video effects to a website","to experiment with and learn about video feedback, fractals, and pixel operations","to stream video between browsers and live-jam with others online"],author:"Created by olivia.","more-info":"For more information and instructions, see: the interactive documentation, a list of hydra functions, the community database of projects and tutorials, a gallery of user-generated sketches, and the source code on github,","more-info-forums":"There is also an active Discord server and facebook group for hydra users+contributors.",support:"If you enjoy using Hydra, please consider supporting continued development <3 ."}}}}},{}],236:[function(require,module,exports){const html=require("choo/html");const Component=require("choo/component");const HydraEditor=require("./editor/editor.js");const log=require("./editor/log.js");module.exports=class Editor extends Component{constructor(id,state,emit){super(id);this.local=state.components[id]={};state.editor=this;this.emit=emit}load(element){log.init(this.logElement);this.editor=new HydraEditor(this.textEl);this.editor.on("*",((e,args)=>{this.emit(e,args)}));this.innerText=document.getElementsByClassName("CodeMirror")[0]}hide(){this.innerText.style.opacity=0}show(){this.innerText.style.opacity=1;this.innerText.style.pointerEvents="all"}update(state){if(state.showInfo===true||state.showUI===false){this.hide()}else{this.show()}return false}createElement({width:width=window.innerWidth,height:height=window.innerHeight}={}){this.textEl=html` `;this.logElement=html`
`;return html`
${this.textEl}
${this.logElement}
`}}},{"./editor/editor.js":238,"./editor/log.js":240,"choo/component":48,"choo/html":49}],237:[function(require,module,exports){const html=require("choo/html");const Component=require("choo/component");const P5=require("./../lib/p5-wrapper.js");const PatchBay=require("./../lib/patch-bay/pb-live.js");let pb;module.exports=class HydraCanvas extends Component{constructor(id,state,emit){super(id);this.local=state.components[id]={};state.hydra=this;this.state=state;this.emit=emit}load(element){let isIOS=(/iPad|iPhone|iPod/.test(navigator.platform)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)&&!window.MSStream;let precisionValue=isIOS?"highp":"mediump";const hydraOptions={detectAudio:true,canvas:element.querySelector("canvas"),precision:precisionValue};if(this.state.serverURL===null){console.log("LOCAL ONLY, WILL NOT INIT webRTC and gallery");this.hydra=new Hydra(hydraOptions)}else{this.pb=new PatchBay;hydraOptions.pb=this.pb;this.hydra=new Hydra(hydraOptions);this.pb.init(this.hydra.captureStream,{server:this.state.serverURL,room:"iclc"});window.pb=this.pb}window.hydraSynth=this.hydra;window.P5=P5;this.emit("hydra loaded")}update(center){return false}createElement({width:width=window.innerWidth,height:height=window.innerHeight}={}){return html`
diff --git a/public/bundle.min.js.map b/public/bundle.min.js.map index 2e12671..ce53096 100644 --- a/public/bundle.min.js.map +++ b/public/bundle.min.js.map @@ -1 +1 @@ -{"version":3,"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","module","devtools","choo","store","languageStore","mainView","app","use","route","mount","_arrayLikeToArray","arr","len","arr2","Array","__esModule","_arrayWithHoles","isArray","_assertThisInitialized","self","ReferenceError","_classCallCheck","instance","Constructor","TypeError","toPropertyKey","_defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","prototype","_defineProperty","obj","value","_getPrototypeOf","setPrototypeOf","getPrototypeOf","bind","__proto__","_inherits","subClass","superClass","create","constructor","_iterableToArray","iter","Symbol","iterator","from","_nonIterableRest","_typeof","assertThisInitialized","_possibleConstructorReturn","_setPrototypeOf","arrayWithHoles","iterableToArray","unsupportedIterableToArray","nonIterableRest","_toArray","_toPrimitive","input","hint","prim","toPrimitive","undefined","res","String","Number","_toPropertyKey","arg","arrayLikeToArray","_unsupportedIterableToArray","minLen","toString","slice","name","test","global","factory","define","amd","globalThis","acorn","this","astralIdentifierCodes","astralIdentifierStartCodes","nonASCIIidentifierChars","nonASCIIidentifierStartChars","reservedWords","strict","strictBind","ecma5AndLessKeywords","keywords$1","keywordRelationalOperator","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","isInAstralSet","set","pos","isIdentifierStart","astral","fromCharCode","isIdentifierChar","TokenType","label","conf","keyword","beforeExpr","startsExpr","isLoop","isAssign","prefix","postfix","binop","updateContext","prec","keywords","kw","options","types$1","num","regexp","string","privateId","eof","bracketL","bracketR","braceL","braceR","parenL","parenR","comma","semi","colon","dot","question","questionDot","arrow","template","invalidTemplate","ellipsis","backQuote","dollarBraceL","eq","assign","incDec","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","plusMin","modulo","star","slash","starstar","coalesce","_break","_case","_catch","_continue","_debugger","_default","_do","_else","_finally","_for","_function","_if","_return","_switch","_throw","_try","_var","_const","_while","_with","_new","_this","_super","_class","_extends","_export","_import","_null","_true","_false","_in","_instanceof","_void","_delete","lineBreak","lineBreakG","source","isNewLine","nextLineBreak","end","next","charCodeAt","nonASCIIwhitespace","skipWhiteSpace","ref","hasOwnProperty","hasOwn","propName","wordsRegexp","words","replace","codePointToString","loneSurrogate","Position","line","col","column","offset","SourceLocation","start","sourceFile","getLineInfo","cur","nextBreak","defaultOptions","ecmaVersion","sourceType","onInsertedSemicolon","onTrailingComma","allowReserved","allowReturnOutsideFunction","allowImportExportEverywhere","allowAwaitOutsideFunction","allowSuperOutsideMethod","allowHashBang","locations","onToken","onComment","ranges","program","directSourceFile","preserveParens","warnedAboutEcmaVersion","getOptions","opts","opt","console","warn","tokens","token","push","pushComment","array","block","text","startLoc","endLoc","comment","type","loc","range","SCOPE_TOP","SCOPE_FUNCTION","SCOPE_ASYNC","SCOPE_GENERATOR","SCOPE_ARROW","SCOPE_SIMPLE_CATCH","SCOPE_SUPER","SCOPE_DIRECT_SUPER","SCOPE_CLASS_STATIC_BLOCK","SCOPE_VAR","functionFlags","async","generator","BIND_NONE","BIND_VAR","BIND_LEXICAL","BIND_FUNCTION","BIND_SIMPLE_CATCH","BIND_OUTSIDE","Parser","startPos","reserved","reservedStrict","reservedWordsStrict","reservedWordsStrictBind","containsEsc","lineStart","lastIndexOf","curLine","split","curPosition","lastTokEndLoc","lastTokStartLoc","lastTokStart","lastTokEnd","context","initialContext","exprAllowed","inModule","strictDirective","potentialArrowAt","potentialArrowInForAwait","yieldPos","awaitPos","awaitIdentPos","labels","undefinedExports","skipLineComment","scopeStack","enterScope","regexpState","privateNameStack","prototypeAccessors","inFunction","inGenerator","inAsync","canAwait","allowSuper","allowDirectSuper","treatFunctionsAsVar","allowNewDotTarget","inClassStaticBlock","parse","node","startNode","nextToken","parseTopLevel","get","currentVarScope","flags","inClassFieldInit","scope","currentThisScope","treatFunctionsAsVarInScope","currentScope","extend","plugins","arguments","cls","parseExpressionAt","parser","parseExpression","tokenizer","defineProperties","pp$9","literal","lastIndex","exec","match","spaceAfter","index","charAt","eat","isContextual","eatContextual","expectContextual","unexpected","canInsertSemicolon","insertSemicolon","semicolon","afterTrailingComma","tokType","notNext","expect","raise","DestructuringErrors","shorthandAssign","trailingComma","parenthesizedAssign","parenthesizedBind","doubleProto","checkPatternErrors","refDestructuringErrors","raiseRecoverable","parens","checkExpressionErrors","andThrow","checkYieldAwaitInDefaultParams","isSimpleAssignTarget","expr","expression","pp$8","body","stmt","parseStatement","list","keys","adaptDirectivePrologue","finishNode","loopLabel","kind","switchLabel","isLet","skip","nextCh","ident","isAsyncFunction","after","topLevel","starttype","parseBreakContinueStatement","parseDebuggerStatement","parseDoStatement","parseForStatement","parseFunctionStatement","parseClass","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVarStatement","parseWhileStatement","parseWithStatement","parseBlock","parseEmptyStatement","parseExpressionStatement","parseImport","parseExport","maybeName","parseLabeledStatement","isBreak","parseIdent","lab","pop","parseParenExpression","awaitAt","parseFor","init$1","parseVar","declarations","await","parseForIn","startsWithLet","isForOf","init","toAssignable","checkLValPattern","isAsync","declarationPosition","parseFunction","FUNC_STATEMENT","FUNC_HANGING_STATEMENT","consequent","alternate","argument","discriminant","cases","sawDefault","isCase","exitScope","empty$1","parseCatchClauseParam","param","parseBindingAtom","simple","handler","clause","finalizer","allowMissingInitializer","object","i$1","label$1","statementStart","indexOf","createNewLexicalScope","exitStrict","update","isForIn","id","left","right","parseMaybeAssign","isFor","decl","parseVarId","FUNC_NULLABLE_ID","statement","allowExpressionBody","forInit","initFunction","checkLValSimple","oldYieldPos","oldAwaitPos","oldAwaitIdentPos","parseFunctionParams","parseFunctionBody","params","parseBindingList","isStatement","oldStrict","parseClassId","parseClassSuper","privateNameMap","enterClassBody","classBody","hadConstructor","element","parseClassElement","isPrivateNameConflicted","exitClassBody","constructorAllowsSuper","keyName","isGenerator","isStatic","parseClassStaticBlock","isClassElementNameStart","static","lastValue","computed","startNodeAt","parseClassElementName","isConstructor","checkKeyName","allowsDirectSuper","parseClassMethod","parseClassField","parsePrivateIdent","parsePropertyName","method","parseMethod","field","oldLabels","parseExprSubscripts","declared","used","parent","curr","parseExportAllDeclaration","exported","parseModuleExportName","checkExport","parseExprAtom","declaration","parseExportDefaultDeclaration","shouldParseExportStatement","parseExportDeclaration","checkVariableExport","specifiers","parseExportSpecifiers","spec","checkUnreserved","local","checkLocalExport","fNode","cNode","checkPatternExport","pat","properties","prop","list$1","elements","elt","decls","parseExportSpecifier","nodes","first","parseImportSpecifiers","parseImportSpecifier","imported","parseImportDefaultSpecifier","parseImportNamespaceSpecifier","stringLiteral","parseLiteral","statements","isDirectiveCandidate","directive","raw","pp$7","isBinding","toAssignableList","operator","exprList","last","parseSpread","parseRestBinding","parseObj","close","allowEmpty","allowTrailingComma","allowModifiers","elts","rest","parseBindingListItem","parseAssignableListItem","elem","parseMaybeDefault","bindingType","checkClashes","isBind","declareName","checkLValInnerPattern","TokContext","isExpr","preserveSpace","override","types","b_stat","b_expr","b_tmpl","p_stat","p_expr","q_tmpl","tryReadTemplateToken","f_stat","f_expr","f_expr_gen","f_gen","pp$6","curContext","braceIsBlock","prevType","inGeneratorContext","overrideContext","tokenCtx","out","statementParens","allowed","pp$5","checkPropClash","propHash","shorthand","proto","other","redefinition","expressions","afterLeftParse","parseYield","ownDestructuringErrors","oldParenAssign","oldTrailingComma","oldDoubleProto","parseMaybeConditional","parseExprOps","parseMaybeUnary","parseExprOp","leftStartPos","leftStartLoc","minPrec","logical","op","buildBinary","sawUnary","parseAwait","isPrivateFieldAccess","node$1","property","result","parseSubscripts","base","noCalls","maybeAsyncArrow","optionalChained","parseSubscript","optional","chainNode","shouldParseAsyncArrow","parseSubscriptAsyncArrow","parseArrowExpression","optionalSupported","parseExprList","callee","node$2","tag","quasi","parseTemplate","isTagged","forNew","readRegexp","canBeArrow","regex","pattern","parseParenAndDistinguishExpression","parseNew","parseExprImport","parseExprAtomDefault","meta","parseDynamicImport","parseImportMeta","errorPos","bigint","val","shouldParseArrow","innerStartPos","innerStartLoc","lastIsComma","spreadStart","parseParenItem","innerEndPos","innerEndLoc","parseParenArrowList","finishNodeAt","par","item","empty","parseTemplateElement","cooked","tail","curElt","quasis","isAsyncProp","isPattern","parseProperty","parsePropertyValue","parseGetterSetter","paramCount","copyNode","isArrowFunction","isMethod","isExpression","useStrict","checkParams","nonSimple","isSimpleParamList","allowDuplicates","nameHash","re","liberal","parseIdentNode","delegate","pp$4","message","err","SyntaxError","raisedAt","pp$3","Scope","var","lexical","functions","redeclared","scope$1","scope$2","scope$3","Node","pp$2","newNode","ecma9BinaryProperties","ecma10BinaryProperties","ecma11BinaryProperties","ecma12BinaryProperties","ecma13BinaryProperties","ecma14BinaryProperties","unicodeBinaryProperties","ecma14BinaryPropertiesOfStrings","unicodeBinaryPropertiesOfStrings","unicodeGeneralCategoryValues","ecma9ScriptValues","ecma10ScriptValues","ecma11ScriptValues","ecma12ScriptValues","ecma13ScriptValues","ecma14ScriptValues","unicodeScriptValues","data","buildUnicodeData","d","binary","binaryOfStrings","nonBinary","General_Category","Script","Script_Extensions","gc","sc","scx","pp$1","RegExpValidationState","validFlags","unicodeProperties","switchU","switchV","switchN","lastIntValue","lastStringValue","lastAssertionIsQuantifiable","numCapturingParens","maxBackReference","groupNames","backReferenceNames","reset","unicodeSets","unicode","at","forceU","s","l","nextIndex","current","lookahead","advance","ch","eatChars","chs","validateRegExpFlags","state","v","flag","validateRegExpPattern","regexp_pattern","regexp_disjunction","regexp_alternative","regexp_eatQuantifier","regexp_eatTerm","regexp_eatAssertion","regexp_eatAtom","regexp_eatExtendedAtom","lookbehind","noError","regexp_eatQuantifierPrefix","regexp_eatBracedQuantifier","min","max","regexp_eatDecimalDigits","regexp_eatPatternCharacters","regexp_eatReverseSolidusAtomEscape","regexp_eatCharacterClass","regexp_eatUncapturingGroup","regexp_eatCapturingGroup","regexp_eatAtomEscape","regexp_groupSpecifier","regexp_eatInvalidBracedQuantifier","regexp_eatExtendedPatternCharacter","regexp_eatSyntaxCharacter","isSyntaxCharacter","regexp_eatGroupName","regexp_eatRegExpIdentifierName","regexp_eatRegExpIdentifierStart","regexp_eatRegExpIdentifierPart","regexp_eatRegExpUnicodeEscapeSequence","isRegExpIdentifierStart","isRegExpIdentifierPart","regexp_eatBackReference","regexp_eatCharacterClassEscape","regexp_eatCharacterEscape","regexp_eatKGroupName","regexp_eatDecimalEscape","regexp_eatControlEscape","regexp_eatCControlLetter","regexp_eatZero","regexp_eatHexEscapeSequence","regexp_eatLegacyOctalEscapeSequence","regexp_eatIdentityEscape","regexp_eatControlLetter","isDecimalDigit","isControlLetter","regexp_eatFixedHexDigits","lead","leadSurrogateEnd","trail","regexp_eatHexDigits","isValidUnicode","CharSetNone","CharSetOk","CharSetString","isCharacterClassEscape","negate","regexp_eatUnicodePropertyValueExpression","regexp_eatUnicodePropertyName","regexp_eatUnicodePropertyValue","regexp_validateUnicodePropertyNameAndValue","regexp_eatLoneUnicodePropertyNameOrValue","nameOrValue","regexp_validateUnicodePropertyNameOrValue","isUnicodePropertyNameCharacter","isUnicodePropertyValueCharacter","regexp_classContents","regexp_classSetExpression","regexp_nonEmptyClassRanges","regexp_eatClassAtom","regexp_eatClassEscape","ch$1","isOctalDigit","regexp_eatClassControlLetter","subResult","regexp_eatClassSetRange","regexp_eatClassSetOperand","regexp_eatClassSetCharacter","regexp_eatClassStringDisjunction","regexp_eatNestedClass","result$1","regexp_classStringDisjunctionContents","regexp_classString","count","regexp_eatClassSetReservedPunctuator","isClassSetReservedDoublePunctuatorCharacter","isClassSetSyntaxCharacter","isClassSetReservedPunctuator","isHexDigit","hexToInt","regexp_eatOctalDigit","n1","n2","Token","pp","ignoreEscapeSequenceInKeyword","getToken","this$1$1","done","skipSpace","finishToken","readToken","fullCharCodeAtPos","readWord","getTokenFromCode","skipBlockComment","startSkip","loop","readToken_dot","readNumber","next2","readToken_slash","finishOp","readToken_mult_modulo_exp","size","tokentype","readToken_pipe_amp","readToken_caret","readToken_plus_min","readToken_lt_gt","readToken_eq_excl","readToken_question","next2$1","readToken_numberSign","readWord1","readRadixNumber","readString","str","escaped","inClass","flagsStart","readInt","radix","maybeLegacyOctalNumericLiteral","allowSeparators","isLegacyOctalNumericLiteral","total","lastCode","Infinity","stringToNumber","parseInt","parseFloat","stringToBigInt","BigInt","startsWithDot","octal","val$1","readCodePoint","codePos","readHexChar","invalidStringToken","quote","chunkStart","readEscapedChar","INVALID_TEMPLATE_ESCAPE_ERROR","inTemplateElement","readTmplToken","readInvalidTemplateToken","position","inTemplate","octalStr","substr","word","escStart","esc","version","tokTypes","keywordTypes","tokContexts","callback","err_cb","bail","noop","proxy","arraybuffer","bytes","byteLength","ArrayBuffer","abv","Uint8Array","ii","buffer","objectAssign","compare","b","x","y","Math","isBuffer","Buffer","_isBuffer","util","pSlice","functionsHaveNames","foo","pToString","isView","arrbuf","DataView","assert","ok","getName","func","isFunction","AssertionError","actual","expected","generatedMessage","getMessage","stackStartFunction","fail","captureStackTrace","stack","fn_name","idx","next_line","substring","inherits","truncate","inspect","something","rawname","equal","notEqual","deepEqual","_deepEqual","deepStrictEqual","memos","isDate","getTime","isRegExp","multiline","ignoreCase","Float32Array","Float64Array","actualIndex","objEquiv","isArguments","actualVisitedObjects","isPrimitive","aIsArgs","bIsArgs","ka","objectKeys","kb","sort","notDeepEqual","notDeepStrictEqual","strictEqual","notStrictEqual","expectedException","isPrototypeOf","_tryBlock","error","_throws","shouldThrow","userProvidedMessage","isUnwantedException","isError","isUnexpectedException","throws","doesNotThrow","ifError","ctor","superCtor","super_","TempCtor","copy","fill","readUInt8","formatRegExp","format","isString","objects","join","args","JSON","stringify","_","isNull","isObject","deprecate","fn","msg","isUndefined","process","apply","noDeprecation","warned","deprecated","throwDeprecation","traceDeprecation","trace","debugs","debugEnviron","debuglog","env","NODE_DEBUG","toUpperCase","pid","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","customInspect","stylizeWithColor","formatValue","bold","italic","underline","inverse","white","grey","black","blue","cyan","green","magenta","red","yellow","styles","special","number","boolean","null","date","styleType","style","arrayToHash","hash","forEach","recurseTimes","ret","primitive","formatPrimitive","visibleKeys","getOwnPropertyNames","formatError","Date","braces","toUTCString","output","formatArray","map","formatProperty","reduceToSingleString","isNumber","desc","getOwnPropertyDescriptor","numLinesEst","reduce","prev","ar","isNullOrUndefined","isSymbol","objectToString","pad","months","timestamp","time","getHours","getMinutes","getSeconds","getDate","getMonth","log","origin","add","mod","defaultTraveler","attachComments","astravel","_defaultTraveler","_attachComments","makeTraveler","_defaultTraveler2","_interopRequireDefault","_attachComments2","default","makeChild","comments","customTraveler","children","findHeadingComments","traveler","boundComments","trailingComments","child","Program","BlockStatement","ObjectExpression","ArrayExpression","SwitchStatement","SwitchCase","ForInStatement","FunctionDeclaration","RestElement","BinaryExpression","ignore","Function","Found","go","find","predicate","finder","super","EmptyStatement","ExpressionStatement","IfStatement","LabeledStatement","BreakStatement","ContinueStatement","WithStatement","ReturnStatement","ThrowStatement","TryStatement","CatchClause","WhileStatement","DoWhileStatement","ForStatement","DebuggerStatement","VariableDeclaration","VariableDeclarator","ArrowFunctionExpression","ThisExpression","Property","FunctionExpression","SequenceExpression","UnaryExpression","UpdateExpression","AssignmentExpression","LogicalExpression","ConditionalExpression","NewExpression","CallExpression","MemberExpression","Identifier","Literal","ForOfStatement","ClassDeclaration","ClassBody","ImportDeclaration","ImportNamespaceSpecifier","ImportDefaultSpecifier","ImportSpecifier","ExportDefaultDeclaration","ExportNamedDeclaration","ExportSpecifier","ExportAllDeclaration","MethodDefinition","ClassExpression","Super","SpreadElement","YieldExpression","TaggedTemplateExpression","TemplateLiteral","_i","_length","TemplateElement","ObjectPattern","ArrayPattern","AssignmentPattern","MetaProperty","AwaitExpression","generate","baseGenerator","GENERATOR","EXPRESSIONS_PRECEDENCE","NEEDS_PARENTHESES","repeat","endsWith","OPERATOR_PRECEDENCE","in","instanceof","PrivateIdentifier","ChainExpression","formatSequence","write","expressionNeedsParenthesis","parentNode","isRightHand","nodePrecedence","expressionsPrecedence","parentNodePrecedence","formatExpression","reindent","indent","lineEnd","lines","trim","formatComments","hasCallExpression","currentNode","_currentNode","formatVariableDeclaration","indentLevel","writeComments","statementIndent","StaticBlock","precedence","caseIndent","occurences","occurencesCount","occurence","consequentCount","concat","specifier","_specifier","ImportExpression","_quasi","propertyIndent","PropertyDefinition","needsParentheses","isIn","RegExpLiteral","EMPTY_OBJECT","State","setup","writeToStream","startingIndentLevel","sourceMap","writeAndMap","writeToStreamAndMap","lineEndSize","mapping","original","generated","file","_file","addMapping","Backoff","ms","factor","jitter","attempts","duration","pow","rand","random","deviation","floor","setMin","setMax","setJitter","chars","encode","base64","decode","bufferLength","encoded1","encoded2","encoded3","encoded4","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","encodeChunk","uint8","extraBytes","parts","maxChunkLength","len2","BlobBuilder","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","Blob","blobSupportsArrayBufferView","blobBuilderSupported","append","getBlob","mapArrayBufferViews","ary","chunk","buf","byteOffset","BlobBuilderConstructor","bb","part","BlobConstructor","ieee754","SlowBuffer","INSPECT_MAX_BYTES","K_MAX_LENGTH","kMaxLength","TYPED_ARRAY_SUPPORT","typedArraySupport","createBuffer","RangeError","encodingOrOffset","allocUnsafe","species","poolSize","fromString","fromArrayLike","isInstance","fromArrayBuffer","valueOf","fromObject","assertSize","alloc","encoding","checked","allocUnsafeSlow","isEncoding","numberIsNaN","toLowerCase","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","m","swap16","swap32","swap64","toLocaleString","equals","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","j","includes","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","isFinite","toJSON","_arr","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","toHex","newBuf","subarray","checkOffset","ext","readUIntLE","noAssert","mul","readUIntBE","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","checkInt","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","checkIEEE754","writeFloat","littleEndian","writeFloatLE","writeFloatBE","writeDouble","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","hi","lo","src","dst","GetIntrinsic","callBind","$indexOf","callBoundIntrinsic","allowMissing","intrinsic","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","applyBind","EventEmitter","storage","logger","debug","help","perf","getAllRoutes","expose","storeName","emitter","localEmitter","window","on","emit","eventName","listener","router","routes","stateCopy","pluck","isStateString","isChooPath","onChange","nanologger","enabledMessage","disabledMessage","enabled","localStorage","logLevel","info","attr","callsite","bool","setTimeout","print","cmd","color","removeItems","scheduler","_log","clone","MAX_HISTORY_LENGTH","shouldDebug","history","shouldWarn","_history","showHistory","entry","Event","table","events","tryClone","_state","ex","Hooks","initialRender","hooks","timing","filter","toFixed","level","interactive","timings","render","fps","times","morph","onPerformance","BAR","stats","all","Perf","core","components","entryType","entries","stat","rename","filtered","maxTime","maxMedian","fmt","totalTime","median","getMedian","PerfEntry","barLength","createBar","round","Name","numbers","middle","isEven","pretty","navigator","estimate","then","usage","quota","clr","persisted","protocol","location","ChooHooks","hasWindow","hasIdleCallback","requestIdleCallback","hasPerformance","performance","getEntriesByName","listeners","onresourcetimingbufferfull","eventListener","timingName","traceId","rBuf","renderListener","_timing","uuid","_emitLoaded","logListener","unhandledListener","clear","domInteractive","navigationStart","loaded","domContentLoadedEventEnd","LRU","ChooComponentCache","lru","cache","Component","el","unshift","newCall","Cls","scrollToAnchor","documentReady","nanotiming","nanorouter","nanomorph","nanoquery","nanohref","nanoraf","nanobus","Cache","Choo","HISTORY_OBJECT","_events","DOMCONTENTLOADED","DOMTITLECHANGE","REPLACESTATE","PUSHSTATE","NAVIGATE","POPSTATE","RENDER","_historyEnabled","_hrefEnabled","href","_hashEnabled","_hasWindow","_cache","_loaded","_stores","ondomtitlechange","_tree","initialState","curry","title","document","prependListener","routeTiming","cb","endTiming","startTiming","_matchRoute","pushState","replaceState","onpopstate","_setCache","initStore","_prerender","renderTiming","newTree","nodeName","morphTiming","selector","mountTiming","querySelector","removeAllListeners","html","outerHTML","locationOverride","queryString","pathname","search","matched","_handler","query","renderComponent","clipboardCopy","clipboard","writeText","catch","DOMException","span","createElement","textContent","whiteSpace","webkitUserSelect","userSelect","appendChild","selection","getSelection","createRange","removeAllRanges","selectNode","addRange","success","execCommand","removeChild","Promise","resolve","reject","nativeMap","Map","nativeSet","Set","nativePromise","circular","includeNonEnumerable","allParents","allChildren","useBuffer","_clone","__isArray","__isRegExp","__getRegExpFlags","__isDate","keyChild","valueChild","entryChild","attrs","getOwnPropertySymbols","symbols","symbol","allPropertyNames","propertyName","clonePrototype","__objToStr","CodeMirror","I","J","getTokenTypeAt","G","getMode","useInnerComments","innerMode","getModeAt","E","Pos","K","cmpPos","commands","toggleComment","defineExtension","listSelections","g","to","uncomment","lineComment","getLine","lastLine","padding","k","commentBlankLines","operation","q","h","replaceRange","blockCommentStart","fullLines","blockComment","blockCommentEnd","blockCommentLead","getCursor","somethingSelected","setSelection","A","w","z","H","C","D","F","B","getRange","mode","helperType","getTokenAt","globalScope","additionalContext","useGlobalScope","jQuery","localVars","vars","globalVars","registerHelper","cm","widget","tick","debounce","startLen","updateOnCursorActivity","activityFunc","cursorActivity","Up","moveFocus","Down","PageUp","menuSize","PageDown","Home","setFocus","End","Enter","pick","Tab","Esc","platform","customKeys","extraKeys","completion","picked","getInputField","ownerDocument","defaultView","parentWindow","hints","setAttribute","className","theme","selectedHint","createTextNode","displayText","hintId","container","cursorCoords","alignWithWord","bottom","getComputedStyle","offsetParent","getBoundingClientRect","scrollLeft","top","scrollTop","innerWidth","offsetWidth","documentElement","innerHeight","offsetHeight","moveOnOverlap","DOMRect","paddingForScrollbar","scrollHeight","clientHeight","getScrollInfo","height","display","nativeBarWidth","width","firstChild","nextSibling","paddingRight","addKeyMap","keyMap","changeActive","screenAmount","closeOnUnfocus","onBlur","onFocus","clearTimeout","onScroll","getWrapperElement","pageYOffset","srcElement","completeOnSingleClick","focus","getSelectedHintRange","scrollToActive","signal","childNodes","L","supportsSelection","showHint","hintOptions","head","anchor","completionActive","M","requestAnimationFrame","N","cancelAnimationFrame","active","off","scrollIntoView","closeOnPick","closeCharacters","disable","finishUpdate","completeSingle","removeKeyMap","removeAttribute","offsetTop","scrollMargin","getHelpers","getHelper","fromList","anyword","autocomplete","auto","defineOption","$jscomp","findInternal","ASSUME_ES5","ASSUME_NO_NATIVE_MAP","ASSUME_NO_NATIVE_SET","SIMPLE_FROUND_POLYFILL","ISOLATE_POLYFILLS","FORCE_POLYFILL_PROMISE","FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION","getGlobal","IS_SYMBOL_NATIVE","TRUST_ES6_POLYFILLS","polyfills","propertyToPolyfillSymbol","POLYFILL_PREFIX","$jscomp$lookupPolyfilledValue","polyfill","polyfillIsolated","polyfillUnisolated","markedSelection","markedSelectionStyle","markText","splice","shift","Init","ja","cssText","nodeType","contains","host","activeElement","shadowRoot","Ya","fd","qa","wrapper","gd","Za","wa","ea","hd","vc","wc","yg","pe","qe","jd","zg","xc","kd","Ag","se","Jb","ceil","Bg","Kb","Lb","Ja","order","Cg","ta","removeEventListener","detachEvent","_handlers","W","yc","Z","preventDefault","defaultPrevented","ld","codemirrorIgnore","te","curOp","cursorActivityHandlers","xa","pb","la","returnValue","ue","stopPropagation","cancelBubble","Mb","ve","which","button","ya","ctrlKey","Dg","dependencies","md","zc","qb","nd","rb","modeProps","Eg","$a","copyState","od","we","startState","chunkSize","ab","pd","Ea","Nb","qd","lineNumberFormatter","firstLineNumber","sticky","rd","sd","Ac","Bc","xe","ye","modeGen","ze","doc","baseTokens","overlays","opaque","baseTokenPos","classes","bgClass","textClass","Ae","Ob","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","Fa","Fg","fromSaved","td","viewFrom","viewTo","nextLine","X","tabSize","Be","eol","ud","blankLine","Ce","De","Ee","flattenSpans","addModeClass","Cc","lookAhead","Gg","Dc","marker","Pb","vd","full","markedSpans","inclusiveLeft","insertLeft","inclusiveRight","Fe","clearWhenEmpty","Hg","readOnly","Ge","detachLine","He","attachLine","wd","sb","Ka","collapsed","Ie","za","xd","Je","Pa","widgetNode","yd","Ga","Ec","zd","maxLine","maxLineLength","maxLineChanged","Ke","Ig","Jg","Le","fa","pre","content","trailingSpace","splitSpaces","getOption","measure","addToken","Kg","Ad","Qb","direction","Lg","externalMeasured","Y","P","Q","S","R","css","startStyle","endStyle","attributes","ha","Me","Bd","T","maps","caches","lastChild","Mg","specialChars","createDocumentFragment","specialCharPlaceholder","needsContentAttribute","setUneditable","Ne","hidden","Fc","Ng","ownsGroup","delayedCallbacks","ops","cursorActivityCalled","tb","aa","Rb","Og","Oe","changes","Pe","replaceChild","Cd","Qe","alignable","Re","Sb","zIndex","built","background","insertBefore","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","gutterMarkers","lineNumbers","lineNumber","gutterLeft","lineNumInnerWidth","gutterSpecs","gutterWidth","Pg","Se","widgets","handleMouseEvents","noHScroll","wrapperWidth","coverGutter","paddingLeft","marginLeft","above","Tb","gutters","clientWidth","La","getAttribute","sizer","mover","Dd","lineSpace","Te","cachedPaddingH","currentStyle","isNaN","Ha","scroller","barWidth","Ed","barHeight","Ue","before","Fd","view","db","lineN","eb","Gd","forceUpdate","lineMeasure","rect","hasHeights","Aa","lineWrapping","heights","getClientRects","abs","Ve","collapse","coverStart","coverEnd","We","screen","logicalXDPI","deviceXDPI","Hd","logicalYDPI","deviceYDPI","ub","bogus","singleCursorHeightPerLine","rtop","rbottom","Xe","Ye","externalMeasure","Ub","cachedCharWidth","cachedTextHeight","lineNumChars","Ze","Qa","Gc","pageXOffset","$e","marginTop","Id","Hc","viewOffset","af","Ic","Ba","bf","Jd","xRel","outside","Kd","Qg","cf","begin","df","Ld","Rg","Sg","vb","fb","clientLeft","offsetLeft","Md","ef","Nd","gb","clientX","clientY","ma","updateLineNumbers","viewChanged","Ra","Jc","Sa","ff","Vb","showSelection","prepareSelection","gf","cursors","$customCursor","sel","primIndex","Od","showCursorWhenSelecting","Tg","cursorHeight","defaultCharWidth","Kc","na","ua","hb","ib","Pd","sizerWidth","Qd","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","hasFocus","wb","hf","Rd","Sd","delayingBlurEvent","draggingText","selForContextMenu","receivedFocus","jb","Lc","lineDiv","jf","Mc","ensure","Td","Nc","Oc","xb","scrollToPos","margin","cursorScrollMargin","Wb","kf","Xb","Ma","Ud","lf","Yb","scrollbars","setScrollTop","scrollWidth","mf","setScrollLeft","Zb","viewHeight","viewWidth","barLeft","docHeight","yb","nf","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","of","addClass","pf","scrollbarStyle","lb","startHeight","updateInput","typing","changeObjs","selectionChanged","updateMaxLine","Ug","markArrays","mb","scrollbarsClipped","marginBottom","borderRightWidth","mustUpdate","Pc","updatedDisplay","Vd","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","minWidth","Wd","qf","wheelStartX","wheelStartY","forceScroll","Vg","maybeHiddenMarkers","maybeUnhiddenMarkers","finish","ra","ba","ia","ca","highlight","Wg","workTime","workDelay","editorIsHidden","force","visible","renderedView","rf","dims","viewportMargin","lastWrapHeight","wrapperHeight","lastWrapWidth","activeElt","anchorNode","anchorOffset","focusNode","focusOffset","Xg","setEnd","selectionDiv","minHeight","viewport","oldDisplayWidth","reportedViewFrom","reportedViewTo","currentWheelTarget","Xd","alignWidgets","lineGutter","lineNumWidth","Yd","sf","$b","Yg","tf","clipPath","ac","draggable","wheelDX","wheelDY","activeTouch","uf","wheelDeltaX","wheelDeltaY","detail","axis","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","Zg","Na","vf","chromeScrollHack","pointerEvents","deltaMode","deltaX","deltaY","Ca","Qc","Da","selectionsMayTouch","va","Oa","Ta","wf","Zd","xf","$d","modeOption","bc","yf","wholeLineUpdateBefore","ae","zb","insert","remove","Ua","linked","sharedHist","zf","Af","$g","Rc","undone","undoDepth","lastModTime","lastSelTime","lastOrigin","lastSelOrigin","lastOp","lastSelOp","generation","maxGeneration","be","Bf","Cf","Df","historyEventDelay","Sc","Ef","explicitlyCleared","Ab","deepCopy","ce","Tc","da","primary","Ff","de","ah","Gf","Uc","NaN","clearRedo","bias","Hf","If","scroll","Jf","Vc","Bb","selectLeft","selectRight","atomic","Kf","cantEdit","Lf","firstLine","Ia","Mf","canceled","cancel","Cb","suppressEdits","Nf","Of","cc","Pf","Wc","Qf","removed","bh","Db","splitLines","Rf","Sf","copied","dc","ec","fc","insertAt","Eb","shared","dh","Va","replacedWith","addToHistory","WeakSet","has","clearOnEnter","clearHistory","Tf","cloneNode","isParent","hc","Uf","findMarks","clipPos","eh","markers","fh","Vf","Wf","dataTransfer","files","isReadOnly","FileReader","File","lineSeparator","allowDropFileTypes","onerror","onload","readAsText","getData","replaceSelection","dragCursor","Xf","getElementsByClassName","gh","hh","setSize","ih","jh","Fb","Xc","fallthrough","Yf","Wa","keyCode","Zf","altKey","$f","metaKey","shiftKey","ag","altGraphKey","ic","Gb","ee","fe","ge","kh","bg","cg","Yc","jc","ensurePolled","Zc","kc","keySeq","lh","dg","keyMaps","eg","motion","mh","fg","getField","he","nh","oh","gg","hg","charCode","onKeyPress","ph","lc","mc","ie","ig","supportsTouch","$c","selectingText","qh","rh","je","onContextMenu","unit","sh","addNew","moveOnDrag","dragDrop","th","uh","vh","ad","preventScroll","jg","findWordAt","wh","ke","buttons","touches","kg","lg","xh","Hb","dragFunctions","enter","over","leave","drop","yh","U","mg","oa","inputStyles","inputStyle","overwrite","pasteIncoming","cutIncoming","Xa","autofocus","zh","ng","bd","finishInit","le","textRendering","radiusX","radiusY","moved","pageX","pageY","coordsChar","setData","effectAllowed","setDragImage","_top","nc","indentUnit","indentWithTabs","me","ne","sa","pasteLinesPerSelection","lineWise","og","pg","clipboardData","disableInput","electricChars","smartIndent","electricInput","qg","rg","sg","oc","border","oe","hitSide","tg","ug","Ah","Ib","bad","Bh","nodeValue","cd","Ch","previousSibling","pa","userAgent","vg","wg","xg","dd","documentMode","Dh","vendor","Eh","maxTouchPoints","Fh","nb","setStart","createTextRange","moveToElementText","moveEnd","moveStart","pc","select","selectionStart","selectionEnd","onTimeout","qc","reverse","addEventListener","attachEvent","Gh","parentElement","compareEndPoints","oncopy","lastColumnPos","lastColumnValue","lineOracle","sol","peek","eatWhile","eatSpace","skipToEnd","skipTo","backUp","indentation","hideFirstChars","baseToken","maxLookAhead","lineNo","ob","vert","horiz","tabIndex","checkedZeroWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","elementFromPoint","rc","native","removeInner","insertInner","iterN","maybeSpill","changed","Hh","cleanGeneration","lineSep","getValue","setValue","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","setCursor","extendSelection","extendSelections","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelections","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","isClean","getHistory","setHistory","setGutterMarker","clearGutter","lineInfo","handle","addLineClass","removeLineClass","addLineWidget","removeLineWidget","setBookmark","findMarksAt","getAllMarks","posFromIndex","indexFromPos","linkedDoc","unlinkDoc","iterLinkedDocs","getEditor","setDirection","eachLine","ed","tc","basic","Left","Right","Delete","Backspace","Insert","pcDefault","emacsy","macDefault","selectAll","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","charCoords","delWrappedLineRight","goDocStart","goDocEnd","goLineStart","goLineStartSmart","goLineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","defaultTab","transposeChars","newlineAndIndent","indentLine","openLine","toggleOverwrite","defaults","optionHandlers","defineInitHook","O","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","lineWiseCopyCut","clearData","showPrimarySelection","div","contentEditable","spellcheck","autocorrect","autocapitalize","updateFromDOM","readFromDOMSoon","forceCompositionEnd","screenReaderLabelChanged","showMultipleSelections","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","blur","pollSelection","pollInterval","triggerOnKeyDown","pollContent","readOnlyChanged","resetPosition","V","prevInput","pollingFast","hasSelection","resetting","createField","textarea","poll","fastPoll","dispatchEvent","moveInputWithCursor","teTop","teLeft","contextMenuPending","slowPoll","detectingSelectAll","resetSelectionOnContextMenu","scrollY","scrollTo","disabled","refresh","detach","attach","helpers","setOption","getDoc","addOverlay","modeSpec","priority","removeOverlay","getLineTokens","_global","pred","getStateAfter","lineAtHeight","heightAtLine","defaultTextHeight","getViewport","addWidget","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","triggerElectric","findPosH","rtlMoveVisually","findPosV","goalColumn","startOperation","endOperation","swapDoc","phrase","phrases","getScrollerElement","getGutterElement","registerGlobalHelper","Ih","uc","contenteditable","defineMode","defineMIME","defineDocExtension","fromTextArea","tabindex","placeholder","form","leaveSubmitMethodAlone","submit","getTextArea","toTextArea","wheelEventPixels","Doc","countColumn","findColumn","isWordChar","Pass","Line","changeEnd","scrollbarModel","modes","mimeModes","resolveMode","modeExtensions","extendMode","isModifierKey","lookupKey","normalizeKeyMap","StringStream","SharedTextMarker","TextMarker","LineWidget","e_preventDefault","e_stopPropagation","e_stop","rmClass","keyNames","tokenize","lastType","propertyIsEnumerable","fatArrowAt","indented","align","lex","jsonld","json","trackScope","typescript","wordCharacters","if","while","with","else","do","try","finally","return","break","continue","new","delete","void","throw","debugger","const","let","function","for","switch","case","typeof","true","false","class","yield","export","import","extends","atom","variable","doubleIndentSwitch","blockCommentContinue","fold","closeBrackets","jsonldMode","jsonMode","expressionAllowed","skipExpression","Emitter","mixin","event","_callbacks","once","removeListener","callbacks","hasListeners","ready","readyState","onLoad","transports","parseuri","parseqs","Socket","uri","hostname","secure","port","agent","upgrade","path","forceJSONP","jsonp","forceBase64","enablesXDR","withCredentials","timestampParam","timestampRequests","transportOptions","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","threshold","pfx","passphrase","cert","ciphers","rejectUnauthorized","forceNode","isReactNative","product","extraHeaders","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","open","priorWebsocketSuccess","Transport","createTransport","EIO","transport","sid","socket","requestTimeout","protocols","setTransport","onDrain","packet","onPacket","onError","onClose","probe","failed","onTransportOpen","upgradeLosesBinary","supportsBinary","send","upgrading","pause","cleanup","flush","freezeTransport","onTransportClose","onclose","onupgrade","onOpen","onHandshake","setPing","filterUpgrades","onHeartbeat","timeout","ping","sendPacket","compress","waitForUpgrade","cleanupAndClose","reason","filteredUpgrades","description","doOpen","doClose","packets","onData","decodePacket","XMLHttpRequest","XHR","JSONP","websocket","xhr","xs","isSSL","xdomain","xscheme","Polling","inherit","JSONPPolling","rNewline","rEscapedNewline","___eio","script","iframe","doPoll","getElementsByTagName","isUAgecko","doWrite","area","iframeId","action","complete","initIframe","onreadystatechange","Request","request","isBinary","req","sendXhr","pollXhr","setDisableHeaderCheck","setRequestHeader","hasXDR","responseText","contentType","getResponseHeader","responseType","status","requestsCount","requests","onSuccess","fromError","abort","response","XDomainRequest","unloadHandler","terminationEvent","yeast","hasXHR2","onPause","decodePayload","callbackfn","encodePayload","schema","ipv6","BrowserWebSocket","NodeWebSocket","WebSocket","MozWebSocket","WebSocketImpl","WS","usingBrowserWebSocket","check","headers","ws","supports","addEventListeners","onopen","onmessage","ev","encodePacket","hasCORS","formatArgs","load","useColors","chrome","localstorage","WebkitAppearance","firebug","exception","$1","formatters","namespace","humanize","diff","lastC","namespaces","removeItem","DEBUG","enable","createDebug","coerce","instances","names","skips","selectColor","prevTime","formatter","logFn","destroy","long","fmtLong","fmtShort","plural","hasBinary","sliceBuffer","utf8","base64encoder","isAndroid","isPhantomJS","dontSendBlobs","pong","packetslist","utf8encode","encodeArrayBuffer","encodeBlob","encodeBase64Object","encoded","encodeBase64Packet","contentArray","resultBuffer","encodeBlobAsArrayBuffer","fr","readAsArrayBuffer","blob","readAsDataURL","b64data","typed","btoa","utf8decode","decodeBase64Packet","tryDecode","asArray","encodePayloadAsBlob","encodePayloadAsArrayBuffer","setLengthHeader","encodeOne","doneCallback","results","each","eachWithIndex","decodePayloadAsBinary","chr","encodedPackets","totalLength","acc","resultArray","bufferIndex","lenStr","binaryIdentifier","lengthAry","bufferTail","buffers","tailArray","msgLength","stringFromCharCode","ucs2decode","counter","extra","ucs2encode","checkScalarValue","createByte","encodeCodePoint","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","decodeSymbol","byte1","byte2","byte3","byte4","createError","ErrClass","Reflect","ReflectApply","receiver","ReflectOwnKeys","ownKeys","ProcessEmitWarning","warning","NumberIsNaN","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","setMaxListeners","_getMaxListeners","that","getMaxListeners","doError","er","arrayClone","_addListener","prepend","existing","newListener","addListener","onceWrapper","fired","wrapFn","_onceWrap","wrapped","prependOnceListener","originalListener","spliceOne","_listeners","unwrap","evlistener","unwrapListeners","rawListeners","listenerCount","eventNames","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","wrapListener","stable","deterministicStringify","stableStringify","LIMIT_REPLACE_NODE","CIRCULAR_REPLACE_NODE","replacerStack","depthLimit","MAX_SAFE_INTEGER","edgesLimit","replacer","spacer","decirc","replaceGetterValues","setReplace","propertyDescriptor","edgeIndex","compareFunction","deterministicDecirc","ERROR_MESSAGE","toStr","funcType","bound","binder","boundLength","boundArgs","Empty","implementation","getBrowserRTC","wrtc","RTCPeerConnection","mozRTCPeerConnection","webkitRTCPeerConnection","RTCSessionDescription","mozRTCSessionDescription","webkitRTCSessionDescription","RTCIceCandidate","mozRTCIceCandidate","webkitRTCIceCandidate","$SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","hasProto","getProto","needsEval","TypedArray","INTRINSICS","AggregateError","Atomics","BigInt64Array","BigUint64Array","Boolean","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","eval","EvalError","FinalizationRegistry","Int8Array","Int16Array","Int32Array","Proxy","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakMap","WeakRef","errorProto","doEval","gen","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","stringToPath","subString","getBaseIntrinsic","intrinsicName","alias","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","minDoc","doccy","win","withNativeBlob","withNativeFile","$Object","origSymbol","hasSymbolSham","hasNativeSymbols","sym","symObj","symVal","syms","attributeToProperty","transform","tagName","attrToProp","VAR","TEXT","OPEN","CLOSE","ATTR","ATTR_KEY","ATTR_KEY_W","ATTR_VALUE_W","ATTR_VALUE","ATTR_VALUE_SQ","ATTR_VALUE_DQ","ATTR_EQ","ATTR_BREAK","COMMENT","strings","reg","arglen","xstate","tree","ix","copyKey","strfn","selfClosing","createFragment","quot","closeRE","_interopDefaultLegacy","_classCallCheck__default","_createClass__default","fieldContentRegExp","serializeCookie","maxAge","domain","expires","httpOnly","sameSite","cookie","minutes","cookieOptions","setTime","nameEQ","cookie$1","lookupCookie","cacheUserLanguage","lng","cookieMinutes","cookieDomain","querystring","lookupQuerystring","hasLocalStorageSupport","localStorageAvailable","testKey","setItem","lookupLocalStorage","getItem","hasSessionStorageSupport","sessionStorageAvailable","sessionStorage","lookupSessionStorage","navigator$1","languages","userLanguage","language","htmlTag","lookupFromPathIndex","subdomain","lookupFromSubdomainIndex","getDefaults","excludeCacheFor","Browser","services","detectors","i18nOptions","lookupFromUrlIndex","addDetector","detector","detect","detectionOrder","detected","detectorName","languageUtils","getBestMatchFromCodes","_this2","cacheName","_typeof__default","_assertThisInitialized__default","_inherits__default","_possibleConstructorReturn__default","_getPrototypeOf__default","_defineProperty__default","_toArray__default","enumerableOnly","_objectSpread","getOwnPropertyDescriptors","consoleLogger","Logger","concreteLogger","setDebug","_len","_key","forward","_len2","_key2","_len3","_key3","_len4","_key4","lvl","debugOnly","moduleName","baseLogger","observers","cloned","observer","_cloned","defer","rej","promise","makeString","getLastOfPath","cleanKey","canNotTraverseDeeper","setPath","newValue","_getLastOfPath","pushPath","_getLastOfPath2","getPath","_getLastOfPath3","getPathWithDefaults","defaultData","deepExtend","regexEscape","_entityMap","escape","isIE10","userAgentData","looksLikeObjectPath","nsSeparator","keySeparator","possibleChars","ki","ownKeys$1","_objectSpread$1","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","NewTarget","construct","sham","deepFind","paths","mix","joinedPath","ResourceStore","_EventEmitter","ns","defaultNS","ignoreJSONStructure","addNamespaces","removeNamespaces","getResource","addResource","silent","addResources","resources","addResourceBundle","deep","pack","removeResourceBundle","hasResourceBundle","getResourceBundle","compatibilityAPI","getDataByLanguage","hasLanguageSomeTranslations","postProcessor","processors","addPostProcessor","translator","processor","ownKeys$2","_objectSpread$2","_createSuper$1","_isNativeReflectConstruct$1","checkedLoadedFor","Translator","changeLanguage","exists","interpolation","resolved","extractFromKey","wouldCheckForNsInKey","seemsNaturalLanguage","userDefinedKeySeparator","userDefinedNsSeparator","interpolator","nestingRegexp","translate","lastKey","overloadTranslationOptionHandler","returnDetails","_this$extractFromKey","appendNamespaceToCIMode","resUsedKey","usedKey","resExactUsedKey","exactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","resTypeIsArray","newKeyToUse","deepKey","extendTranslation","usedDefault","needsPluralHandling","hasDefaultValue","defaultValueSuffix","pluralResolver","getSuffix","defaultValue","isValidLookup","missingKeyNoValueFallbackToKey","resForMissing","updateMissing","fk","lngs","fallbackLngs","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","specificDefaultValue","defaultForMissing","missingKeyHandler","backendConnector","saveMissing","saveMissingPlurals","getSuffixes","suffix","appendNamespaceToMissingKey","parseMissingKeyHandler","_this3","defaultVariables","usedLng","usedNS","skipInterpolation","skipOnVariables","nestBef","interpolate","nestAft","nest","postProcess","postProcessorNames","applyPostProcessor","postProcessPassResolved","i18nResolved","_this4","extracted","fallbackNS","needsZeroSuffixLookup","ordinal","shouldUseIntlApi","needsContextHandling","codes","utils","hasLoadedNamespace","finalKeys","addLookupKeys","pluralSuffix","zeroSuffix","pluralSeparator","contextKey","contextSeparator","possibleKey","returnNull","returnEmptyString","resourceStore","option","capitalize","LanguageUtil","supportedLngs","getScriptPartFromCode","formatLanguageCode","getLanguagePartFromCode","specialCases","lowerCaseLng","cleanCode","isSupportedCode","nonExplicitSupportedLngs","cleanedLng","lngOnly","supportedLng","fallbacks","fallbackCode","fallbackCodes","addCode","sets","nr","_rulesPluralsTypes","deprecatedJsonVersions","suffixesOrder","zero","one","two","few","many","createRules","rules","plurals","PluralResolver","compatibilityJSON","Intl","PluralRules","addRule","getRule","_unused","needsPlural","rule","resolvedOptions","pluralCategories","getPluralFormsOfKey","pluralCategory1","pluralCategory2","pluralCategory","getSuffixRetroCompatible","noAbs","simplifyPluralSuffix","returnSuffix","ownKeys$3","_objectSpread$3","Interpolator","escapeValue","iOpts","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","resetRegExp","regexpStr","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","replaces","regexSafe","handleFormat","interpolationkey","missingInterpolationHandler","todos","safeValue","todo","matchedVar","temp","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","doReduce","ownKeys$4","_objectSpread$4","parseFormatStr","formatStr","formatName","formatOptions","optStr","currency","_opt$split","_opt$split2","createCachedFormatter","invokeFormatter","Formatter","formats","NumberFormat","datetime","DateTimeFormat","relativetime","RelativeTimeFormat","ListFormat","addCached","_format","mem","_parseFormatStr","formatted","valOptions","formatParams","locale","ownKeys$5","_objectSpread$5","_createSuper$2","_isNativeReflectConstruct$2","removePending","pending","pendingCount","Connector","backend","waitingReads","maxParallelReads","readingCalls","maxRetries","retryTimeout","queue","queueLoad","toLoad","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","reload","errors","loadedKeys","fcName","tried","wait","prepareLoading","loadOne","_this5","fallbackValue","isUpdate","initImmediate","preload","partialBundledLanguages","tDescription","transformOptions","ownKeys$6","_objectSpread$6","_createSuper$3","_isNativeReflectConstruct$3","bindMemberFunctions","inst","mems","I18n","modules","external","isInitialized","isClone","defOpts","createClassOnDemand","ClassOrObject","lu","languageDetector","detection","storeApi","_this2$store","storeApiChained","_this2$store2","deferred","initializedStoreOnce","loadResources","usedCallback","resolvedLanguage","setResolvedLanguage","reloadResources","li","lngInLngs","isLanguageChangingTo","setLngProps","setLng","getFixedT","keyPrefix","fixedT","resultKey","_this$translator","_this$translator2","setDefaultNamespace","_this6","lastLng","loadNotPending","loadState","precheck","preResult","loadNamespaces","_this7","loadLanguages","preloaded","newLngs","rtlLngs","cloneInstance","_this8","mergedOptions","membersToCopy","createInstance","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","LN2","get_beautify","js_beautify","css_beautify","html_beautify","beautify","config","js","beautifier","Directives","start_block_pattern","end_block_pattern","__directives_block_pattern","__directive_pattern","__directives_end_ignore_pattern","get_directives","directives","directive_match","readIgnored","readUntilAfter","regexp_has_sticky","InputScanner","input_string","__input","__input_length","__position","restart","back","hasNext","__match","pattern_match","testChar","starting_pattern","until_pattern","until_after","readUntil","match_index","get_regexp","match_from","get_literal_regexp","literal_string","peekUntilAfter","lookBack","testVal","Options","merge_child_field","raw_options","_mergeOpts","_get_boolean","_get_characters","end_with_newline","indent_size","_get_number","indent_char","indent_level","preserve_newlines","max_preserve_newlines","indent_with_tabs","wrap_line_length","indent_empty_lines","templating","_get_selection_list","_get_array","default_value","option_value","_get_selection","selection_list","_is_valid_selection","some","allOptions","childFieldName","finalOpts","_normalizeOpts","convertedOpts","newKey","normalizeOpts","mergeOpts","OutputLine","__parent","__character_count","__indent_count","__alignment_count","__wrap_point_index","__wrap_point_character_count","__wrap_point_indent_count","__wrap_point_alignment_count","__items","clone_empty","set_indent","has_match","lastCheckedOutput","alignment","is_empty","get_indent_size","_set_wrap_point","_should_wrap","_allow_wrap","add_new_line","current_line","last_newline_index","_remove_indent","_remove_wrap_indent","get_indent_string","IndentStringCache","baseIndentString","__cache","__indent_size","__indent_string","__base_string","__base_string_length","__ensure_cache","__add_column","Output","__indent_cache","_end_with_newline","__lines","previous_line","space_before_token","non_breaking_space","previous_token_wrapped","__add_outputline","get_line_number","force_newline","just_added_newline","get_code","last_item","sweet_code","set_wrap_point","add_raw_token","newlines","whitespace_before","add_token","printable_token","__add_space_before_token","remove_indent","output_length","eat_newlines","just_added_blankline","ensure_empty_line_above","starts_with","ends_with","potentialEmptyLine","Pattern","input_scanner","_input","_starting_pattern","_match_pattern","_until_pattern","_until_after","read_match","_create","_update","until","starting_with","matching","template_names","django","erb","handlebars","php","smarty","TemplatablePattern","__template_pattern","_disabled","_excluded","__patterns","handlebars_comment","handlebars_unescaped","django_value","django_comment","smarty_comment","smarty_literal","__set_templated_pattern","read_options","exclude","_read_template","items","resulting_string","peek1","comments_before","previous","opened","closed","TokenStream","WhitespacePattern","TOKEN","START","RAW","EOF","Tokenizer","_options","__tokens","_patterns","whitespace","_reset","open_token","open_stack","_get_next_token","_is_comment","isEmpty","_is_opening","_is_closing","_is_first_token","previous_token","_readWhitespace","_create_token","current_token","newline_count","whitespace_before_token","parent_token","__tokens_length","__parent_token","_line_regexp","__set_whitespace_patterns","whitespace_chars","newline_chars","_newline_regexp","matches","__split","start_index","next_match","directives_core","allLineBreaks","whitespaceChar","whitespacePattern","block_comment_pattern","comment_pattern","Beautifier","source_text","_source_text","_ch","NESTED_AT_RULE","page","keyframes","media","CONDITIONAL_GROUP_RULE","NON_SEMICOLON_NEWLINE_PROPERTY","eatString","endChars","eatWhitespace","allowAtLeastOneNewLine","_output","foundNestedPseudoClass","openParen","print_string","output_string","_indentLevel","preserveSingleSpace","isAfterSpace","outdent","_nestedLevel","parenLevel","insideRule","insidePropertyValue","enteringConditionalGroup","insideNonNestedAtRule","insideScssMap","topCharacter","insideNonSemiColonValues","previous_ch","variableOrRule","newline_between_rules","brace_style","preserveQuoteSpace","space_needed","selector_separator_newline","space_around_combinator","preserveAfterSpace","sweetCode","BaseOptions","space_around_selector_separator","brace_style_split","bs","Printer","base_indent_string","alignment_size","current_line_has_match","set_space_before_token","non_breaking","print_preserved_newlines","raw_token","print_newline","traverse_whitespace","print_token","get_full_indent","get_type_attribute","start_token","ATTRIBUTE","EQUALS","VALUE","get_custom_beautifier_name","tag_check","typeAttribute","in_array","what","TagFrame","parser_token","tag_name","TagStack","printer","_printer","_current_frame","get_parser_token","record_tag","new_frame","_try_pop_frame","frame","_get_frame","tag_list","stop_list","try_pop","indent_to_tag","_js_beautify","_css_beautify","_tag_stack","optionHtml","_is_wrap_attributes_force","wrap_attributes","_is_wrap_attributes_force_expand_multiline","_is_wrap_attributes_force_aligned","_is_wrap_attributes_aligned_multiple","_is_wrap_attributes_preserve","_is_wrap_attributes_preserve_aligned","last_token","last_tag_token","TagOpenParserToken","TAG_OPEN","_handle_tag_open","tag_complete","_handle_inside_tag","TAG_CLOSE","_handle_tag_close","_handle_text","is_unformatted","tag_start_char","has_wrapped_attrs","indent_content","is_content_unformatted","is_inline_element","attr_count","wrap_attributes_min_attrs","custom_beautifier_name","_print_custom_beatifier_text","_beautifier","script_indent_level","post","html_source","indent_scripts","Child_options","child_options","_get_tag_open_token","is_empty_element","is_start_tag","start_tag_token","_set_tag_position","peek_index","peek_token","is_end_tag","multiline_content","tag_check_match","startsWith","handlebar_starts","wrap_attributes_indent_size","void_elements","unformatted","content_unformatted","inline","_do_optional_end_element","extra_liners","foundIfOnCurrentLine","_calcluate_parent_multiline","do_end_expand","indent_inner_html","indent_head_inner_html","indent_body_inner_html","p_closers","p_parent_excludes","p_parent","style_html","indent_handlebars","unformatted_content_delimiter","BaseTokenizer","BASETOKEN","UNKNOWN","_current_tag_name","templatable_reader","pattern_reader","single_quote","double_quote","attribute","element_name","handlebars_open","handlebars_raw_close","cdata","conditional_comment","processing","_unformatted_content_delimiter","literal_regexp","_read_open_handlebars","_read_attribute","_read_close","_read_raw_content","_read_content_word","_read_comment_or_cdata","_read_processing","_read_open","_is_content_unformatted","baseASCIIidentifierStartChars","baseASCIIidentifierChars","identifierStart","identifierChars","identifier","identifierMatch","newline","line_starters","positionable_operators","ltrim","generateMapFromStrings","reserved_word","RESERVED","reserved_array","special_words","validPositionValues","OPERATOR_POSITION","OPERATOR_POSITION_BEFORE_OR_PRESERVE","before_newline","preserve_newline","MODE","Statement","ObjectLiteral","ArrayLiteral","ForInitializer","Conditional","Expression","remove_redundant_indentation","multiline_frame","start_line_index","split_linebreaks","is_array","is_expression","all_lines_start_with","each_line_matches_indent","_tokens","_last_last_text","_flags","_previous_flags","_flag_store","create_flags","flags_base","next_indent_level","indentation_level","line_indent_level","next_flags","START_BLOCK","last_word","declaration_statement","declaration_assignment","inline_frame","if_block","else_block","class_start_block","do_block","do_while","import_block","in_case_statement","in_case","case_body","case_block","ternary_depth","test_output_raw","set_mode","handle_token","preserve_statement_flags","START_EXPR","handle_start_expr","END_EXPR","handle_end_expr","handle_start_block","END_BLOCK","handle_end_block","WORD","handle_word","SEMICOLON","handle_semicolon","STRING","handle_string","handle_equals","OPERATOR","handle_operator","COMMA","handle_comma","BLOCK_COMMENT","handle_block_comment","handle_comment","DOT","handle_dot","handle_eof","handle_unknown","handle_whitespace_and_comments","keep_whitespace","keep_array_indentation","comment_token","newline_restricted_tokens","allow_wrap_or_preserved_newline","force_linewrap","shouldPreserveOrForce","operatorLogicApplies","shouldPrintOperatorNewline","operator_position","next_token","restore_mode","print_token_line_indentation","comma_first","popped","deindent","start_of_object_property","start_of_statement","next_mode","space_in_paren","space_before_conditional","peek_back_two","space_after_named_function","peek_back_three","space_after_anon_function","space_in_empty_paren","second_token","empty_braces","empty_anonymous_function","brace_preserve_inline","check_token","jslint_happy","isGeneratorAsterisk","isUnary","space_before","space_after","in_ternary","isColon","isTernaryColon","isOtherColon","after_newline","new_line_needed","preserve","print_block_commment","javadoc","starless","lastIndent","lastIndentLength","break_chained_methods","unindent_chained_methods","js_source_text","raw_brace_style","braces_on_own_line","unescape_strings","e4x","number_pattern","digit","dot_pattern","punct","punct_pattern","reserved_words","reserved_word_pattern","in_html_comment","templatable","block_comment","html_comment_start","html_comment_end","include","shebang","xml","template_text","template_expression","_read_non_javascript","_read_string","_read_pair","_read_word","_read_singles","_read_comment","_read_regexp","_read_xml","_read_punctuation","sharp","has_char_escapes","_read_string_recursive","unescape_string","_allow_regexp_or_xml","in_char_class","xmlStr","rootTag","isCurlyRoot","isEndTag","isSingletonTag","input_scan","delimiter","allow_unescaped_newlines","start_sub","current_char","notOk","Nanobus","_name","_starListeners","emitTiming","_emit","ilength","startIdx","removeCount","OL_KEY_ID","KEY_ID","OL_ATTR_ID","KEY_ATTR","Nanocomponent","makeID","_id","_ncID","_olID","_proxy","_rootNodeName","_rerender","_handleLoad","_handleUnload","_arguments","getElementById","dataset","nanocomponent","createTiming","updateTiming","shouldUpdate","desiredHtml","_handleRender","afterupdate","_createProxy","beforerender","unload","afterreorder","rerender","createElementTiming","Element","_brandNode","_ensureID","isSameNode","safeExternalLink","protocolLink","root","traverse","localName","hasAttribute","trailingNewlineRegex","leadingNewlineRegex","trailingSpaceRegex","leadingSpaceRegex","multiSpaceRegex","TEXT_TAGS","VERBATIM_TAGS","childs","hadText","leader","_nodeName","hyperx","SVG_TAGS","BOOL_PROPS","DIRECT_PROPS","SVGNS","XLINKNS","COMMENT_TAG","nanoHtmlCreateElement","isCustomElement","is","createElementNS","createComment","setAttributeNS","fragment","nanohtmlRawBrowser","innerHTML","toArray","alphabet","mask","step","emojis","fatal","levels","defaultColors","foreground","brightBlack","Nanologger","_colors","_logLevel","_print","getTimeStamp","emoji","msgColor","objs","hours","seconds","_unlink","_checkAge","modified","now","evict","TEXT_NODE","oldTree","childrenOnly","updateChildren","walk","oldNode","getComponentId","nanomorphComponentId","oldChild","newChild","morphed","oldMatch","same","eventsLength","ELEMENT_NODE","COMMENT_NODE","copyAttrs","updateOption","updateTextarea","copyEvents","oldAttrs","newAttrs","attrNamespaceURI","attrValue","fromValue","attrName","namespaceURI","getAttributeNS","specified","hasAttributeNS","removeAttributeNS","updateAttribute","oldValue","indeterminate","qs","url","a0","a1","a2","a3","raf","redrawScheduled","redraw","_args","wayfarer","isLocalFile","electron","stripElectron","normalize","Nanorouter","routename","isElectron","createScheduler","_nanoScheduler","NanoScheduler","hasIdle","scheduled","schedule","idleDeadline","timeRemaining","DISABLE_NANOTIMING","mark","startName","endName","measureName","clearMarks","propIsEnumerable","toObject","shouldUseNative","test1","test2","order2","test3","letter","objectChangeCallsite","strip","deleteProperty","hasMap","mapSizeDescriptor","mapSize","mapForEach","hasSet","setSizeDescriptor","setForEach","hasWeakMap","weakMapHas","hasWeakSet","weakSetHas","hasWeakRef","weakRefDeref","deref","booleanValueOf","functionToString","$match","$slice","$toUpperCase","$toLowerCase","$test","$join","$arrSlice","$floor","bigIntValueOf","gOPS","symToString","hasShammedSymbols","toStringTag","isEnumerable","gPO","addNumericSeparator","sepRegex","int","intStr","dec","utilInspect","inspectCustom","custom","inspectSymbol","inspect_","quoteStyle","maxStringLength","numericSeparator","inspectString","bigIntStr","maxDepth","getIndent","noIndent","newOpts","nameOf","arrObjKeys","symString","markBoxed","isElement","wrapQuotes","singleLineValues","indentedJoin","cause","isMap","mapParts","collectionOf","isSet","setParts","isWeakMap","weakCollectionOf","isWeakSet","isWeakRef","isBigInt","ys","isPlainObject","protoTag","stringTag","constructorTag","defaultStyle","quoteChar","HTMLElement","trailer","lowbyte","joinedEntries","baseIndent","lineJoiner","isArr","symMap","watch","INDEX","MutationObserver","mutations","attributeName","eachAttr","turnon","turnoff","eachMutation","removedNodes","addedNodes","observe","childList","subtree","attributeOldValue","attributeFilter","caller","mutation","sameOrigin","onloadid","entryTypes","PerformanceObserver","_onperformance","stop","parseEntries","getEntries","clearMeasures","clearResourceTimings","qry","pairs","pair","authority","ipv6uri","pathNames","queryKey","regx","$0","$2","plucker","pluckSingle","pluckPath","prettierBytes","neg","exponent","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","draining","currentQueue","queueIndex","cleanUpNextTick","drainQueue","run","nextTick","Item","browser","argv","versions","binding","cwd","chdir","umask","percentTwenties","Format","RFC1738","RFC3986","allowDots","allowPrototypes","allowSparse","arrayLimit","charset","charsetSentinel","decoder","ignoreQueryPrefix","interpretNumericEntities","parameterLimit","parseArrays","plainObjects","strictNullHandling","numberStr","parseArrayValue","isoSentinel","parseValues","parseQueryStringValues","cleanStr","skipIndex","bracketEqualsPos","maybeMap","encodedVal","combine","parseObject","chain","valuesParsed","leaf","cleanRoot","parseKeys","parseQueryStringKeys","givenKey","brackets","segment","normalizeParseOptions","tempObj","newObj","merge","compact","getSideChannel","arrayPrefixGenerators","indices","pushToArray","valueOrArray","toISO","toISOString","defaultFormat","addQueryPrefix","encoder","encodeValuesOnly","serializeDate","skipNulls","isNonNullishPrimitive","sentinel","generateArrayPrefix","commaRoundTrip","sideChannel","tmpSc","findFlag","keyValue","values","objKeys","adjustedPrefix","valueSideChannel","normalizeStringifyOptions","arrayFormat","joined","hexTable","compactQueue","compacted","arrayToObject","mergeTarget","targetItem","assignSingleSource","strWithoutPlus","unescape","defaultEncoder","refs","mapped","queueMicrotask","MAX_BYTES","MAX_UINT32","oldBrowser","crypto","msCrypto","getRandomValues","randomBytes","copyProps","SafeBuffer","randomFromSeed","ORIGINAL","previousSeed","shuffled","setCharacters","_alphabet_","unique","ind","characters","setSeed","seed","shuffle","sourceArray","targetArray","nextValue","characterIndex","getShuffled","alphabetShuffled","REDUCE_TIME","previousSeconds","build","clusterWorkerId","loopCounter","isValid","seedValue","worker","workerId","newCharacters","isShortId","nonAlphabetic","randomByte","getNextValue","_seed_","callBound","$WeakMap","$Map","$weakMapGet","$weakMapSet","$weakMapHas","$mapGet","$mapSet","$mapHas","listGetNode","listGet","listSet","listHas","$wm","$m","$o","channel","randombytes","stream","errCode","MAX_BUFFERED_AMOUNT","ICECOMPLETE_TIMEOUT","CHANNEL_CLOSING_TIMEOUT","filterTrickle","sdp","Peer","Duplex","allowHalfOpen","_debug","channelName","initiator","channelConfig","channelNegotiated","negotiated","offerOptions","answerOptions","sdpTransform","streams","trickle","allowHalfTrickle","iceCompleteTimeout","destroyed","destroying","_connected","remoteAddress","remoteFamily","remotePort","localFamily","localPort","_wrtc","_pcReady","_channelReady","_iceComplete","_iceCompleteTimer","_channel","_pendingCandidates","_isNegotiating","_firstNegotiation","_batchedNegotiation","_queuedNegotiation","_sendersAwaitingStable","_senderMap","_closingInterval","_remoteTracks","_remoteStreams","_chunk","_cb","_interval","_pc","_isReactNativeWebrtc","_peerConnectionId","oniceconnectionstatechange","_onIceStateChange","onicegatheringstatechange","onconnectionstatechange","_onConnectionStateChange","onsignalingstatechange","_onSignalingStateChange","onicecandidate","_onIceCandidate","peerIdentity","_setupData","createDataChannel","ondatachannel","addStream","ontrack","_onTrack","_needsNegotiation","_onFinishBound","_onFinish","bufferSize","bufferedAmount","connected","address","family","renegotiate","transceiverRequest","addTransceiver","candidate","remoteDescription","_addIceCandidate","setRemoteDescription","_createAnswer","iceCandidateObj","addIceCandidate","getTracks","track","addTrack","submap","sender","replaceTrack","oldTrack","newTrack","removeTrack","removeStream","negotiate","_createOffer","_destroy","readable","_readableState","ended","_writableState","finished","bufferedAmountLowThreshold","_onChannelMessage","onbufferedamountlow","_onChannelBufferedAmountLow","_onChannelOpen","_onChannelClose","filename","lineno","colno","isClosing","_read","_write","destroySoon","_startIceCompleteTimeout","createOffer","offer","sendOffer","localDescription","setLocalDescription","_requestMissingTransceivers","getTransceivers","transceiver","mid","requested","createAnswer","answer","sendAnswer","connectionState","iceConnectionState","iceGatheringState","_maybeReady","getStats","flattenValues","report","reports","_connecting","findCandidatePair","remoteCandidates","localCandidates","candidatePairs","foundSelectedCandidatePair","setSelectedCandidatePair","selectedCandidatePair","localCandidateId","ip","ipAddress","portNumber","googLocalAddress","remote","remoteCandidateId","googRemoteAddress","selectedCandidatePairId","googActiveConnection","selected","_onInterval","unref","signalingState","sdpMLineIndex","sdpMid","eventStream","remoteStream","WEBRTC_SUPPORT","iceServers","urls","sdpSemantics","__nwjs","enableOverride","namespacesCache","enabledCache","newDebug","toNamespace","msAbs","isPlural","_inheritsLoose","createErrorType","Base","arg1","arg2","arg3","NodeError","_Base","oneOf","thing","this_len","determiner","Readable","Writable","onend","highWaterMark","getBuffer","onEndNT","PassThrough","Transform","_transform","ReadableState","EE","EElistenerCount","Stream","OurUint8Array","_uint8ArrayToBuffer","_isUint8Array","debugUtil","BufferList","destroyImpl","_require","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","StringDecoder","createReadableStreamAsyncIterator","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","_undestroy","undestroy","skipChunkCheck","readableAddChunk","addToFront","onEofChunk","chunkInvalid","addChunk","maybeReadMore","emitReadable","isPaused","setEncoding","enc","MAX_HWM","computeNewHighWaterMark","howMuchToRead","nOrig","endReadable","doRead","emitReadable_","flow","maybeReadMore_","pipe","dest","pipeOpts","doEnd","stdout","stderr","endFn","unpipe","onunpipe","unpipeInfo","hasUnpiped","ondrain","pipeOnDrain","cleanedUp","onfinish","ondata","needDrain","resume","pipeOnDrainFunctionResult","dests","nReadingNextTick","updateReadableListening","resume_","wrap","methodWrap","methodWrapReturnFunction","asyncIterator","_fromList","consume","endReadableNT","wState","iterable","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","_flush","prefinish","err2","WriteReq","CorkedRequest","onCorkedFinish","WritableState","internalUtil","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","bufferedRequest","lastBufferedRequest","pendingcb","prefinished","errorEmitted","bufferedRequestCount","corkedRequestsFree","writableStateBufferGetter","realHasInstance","hasInstance","writev","_writev","final","_final","writeAfterEnd","validChunk","isBuf","writeOrBuffer","cork","uncork","clearBuffer","setDefaultEncoding","decodeChunk","newChunk","onwriteError","finishMaybe","onwriteStateUpdate","needFinish","afterWrite","onwriteDrain","holder","allBuffers","endWritable","callFinal","need","rState","corkReq","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","wrapForNext","lastPromise","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","_Object$create","_require2","copyBuffer","hasStrings","_getString","_getBuffer","readableDestroyed","writableDestroyed","emitErrorNT","emitErrorAndCloseNT","emitCloseNT","ERR_STREAM_PREMATURE_CLOSE","called","isRequest","setHeader","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","ERR_MISSING_ARGS","destroyer","popCallback","pipeline","destroys","ERR_INVALID_OPT_VALUE","highWaterMarkFrom","duplexKey","hwm","Manager","managers","sameNamespace","nsps","newConnection","forceNew","multiplex","io","connect","eio","subs","reconnection","reconnectionAttempts","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","connecting","lastPing","packetBuffer","_parser","Encoder","Decoder","autoConnect","emitAll","nsp","updateSocketIds","generateId","engine","_reconnection","_reconnectionAttempts","_reconnectionDelay","_randomizationFactor","_reconnectionDelayMax","_timeout","maybeReconnectOnOpen","reconnecting","reconnect","skipReconnect","openSub","errorSub","timer","onping","onpong","ondecoded","onConnecting","processPacketQueue","subsLength","disconnect","delay","onreconnect","attempt","hasBin","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","ids","acks","receiveBuffer","sendBuffer","disconnected","subEvents","BINARY_EVENT","EVENT","CONNECT","onpacket","rootNamespaceError","ERROR","onconnect","onevent","ACK","onack","BINARY_ACK","DISCONNECT","ondisconnect","ack","sent","emitBuffered","deconstructPacket","packetData","_deconstructPacket","attachments","_placeholder","newData","reconstructPacket","_reconstructPacket","isIndexValid","removeBlobs","_removeBlobs","curKey","containingObject","pendingBlobs","fileReader","bloblessData","ERROR_PACKET","encodeAsBinary","encodeAsString","payload","tryStringify","writeEncoding","deconstruction","reconstructor","decodeString","BinaryReconstructor","reconPack","takeBinaryData","tryParse","isPayloadValid","finishedReconstruction","binData","withNativeBuffer","withNativeArrayBuffer","fastSafeStringify","_normalizeEncoding","retried","normalizeEncoding","nenc","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8End","utf8Text","utf8CheckByte","byte","utf8CheckIncomplete","utf8CheckExtraBytes","Agent","_defaults","_loop","_setDefaults","_iterator","_createForOfIteratorHelper","_step","def","_toConsumableArray","safeStringify","RequestBase","ResponseBase","getXHR","ActiveXObject","_unused2","_unused3","_unused4","serialize","pushEncodedKeyValuePair","subkey","serializeObject","parseString","string_","length_","urlencoded","parseHeader","fields","isJSON","mime","Response","request_","statusText","_setStatusProperties","getAllResponseHeaders","header","_setHeaderProperties","_responseType","_parseBody","toError","_query","_header","rawResponse","statusCode","new_error","_isResponseOK","accept","auth","user","pass","_auth","_data","_getFormData","_formData","FormData","_shouldRetry","_retry","_callback","_maxRetries","retries","_retries","crossDomainError","crossDomain","_isHost","_endCalled","_finalizeQueryString","_end","_setUploadTimeout","_uploadTimeout","_uploadTimeoutTimer","_timeoutError","_aborted","_setTimeouts","_responseTimeoutTimer","_unused5","timedout","handleProgress","percent","upload","_unused6","username","password","_withCredentials","_serialize","_serializer","del","patch","put","semver","_timer","_responseTimeout","deadline","retry","_retryCallback","ERROR_CODES","STATUS_CODES","timedoutError","_fullfilledPromise","_okCallback","getHeader","unset","gte","lt","base64Encoder","redirects","_maxRedirects","maxResponseSize","_maxResponseSize","isObject_","sortQuery","_sort","queryArray","_appendQueryString","errno","ct","parameters","links","link","parseLinks","trunc","statusType","redirect","clientError","serverError","created","accepted","noContent","badRequest","unauthorized","notAcceptable","forbidden","notFound","unprocessableEntity","_value","_iterator2","_step2","rel","cleanHeader","changesOrigin","authorization","trie","_trie","Wayfarer","dft","_wayfarer","Route","Trie","createNode","thisRoute","$$","wildcard","decoded","P5","p5","createCanvas","draw","canvas","show","hide","drawingContext","clearRect","PatchBay","PBLive","session","nickFromId","idFromNick","loadFromStorage","settings","server","room","makeGlobal","setPageTitle","setTitle","nick","setName","_processBroadcast","handleNewPeer","onbeforeunload","video","srcObject","URL","createObjectURL","play","initSource","initConnectionFromId","peer","broadcast","SimplePeer","shortid","signaller","_peerOptions","peerOptions","_room","peers","rtcPeers","_readyForSignalling","_handleMessage","_receivedBroadcast","_newPeer","sendToAll","sendToPeer","peerId","reinitAll","reinitPeer","initRtcPeer","newOptions","shareMediaWhenInitiating","requestMediaWhenInitiating","offerConstraints","offerToReceiveVideo","offerToReceiveAudio","shareMediaWhenRequested","_attachPeerEvents","reinitRtcConnection","rtcPeer","servers","_handleSignal","sketch_id","examples","sketches","license","Gallery","exampleIndex","serverURL","setSketchFromURL","setRandomSketch","newurl","hush","o0","searchParams","URLSearchParams","base64Code","showCode","foundSketch","sketch","getExampleById","setSketch","setSketchFromCode","decodeBase64","saveImage","setToURL","url_params","encodeBase64","atob","startString","shareSketch","hydra","saveSketch","getScreenImage","img","saveLocally","i18next","i18nextBrowserLanguageDetector","languageResources","availableLanguages","languagePath","lang","loadLanguageFromURL","updateAvailableLanguages","translation","selectedLanguage","fetch","i18n","repl","showInfo","showUI","SERVER_URL","editor","sketchFromURL","screencap","download","getFullYear","click","revokeObjectURL","evt","mutator","doUndo","mutate","reroll","changeTransform","formatCode","clearAll","speed","flashCode","editorText","showConfirmation","successCallback","terminateCallback","prompt","en","toolbar","subtitle","uses","author","support","HydraEditor","Editor","logElement","textEl","innerText","opacity","HydraCanvas","isIOS","MSStream","precisionValue","hydraOptions","detectAudio","precision","Hydra","captureStream","hydraSynth","center","keymaps","Mutator","beautify_js","isShowing","getCurrentBlock","styleSelectedText","toggle","startline","endline","pos1","pos2","UndoStack","glslTransforms","undoStack","initialVector","funcTab","transMap","scanFuncs","dumpDict","dumpList","gslTab","argList","inputs","argL","tn","lastLitX","needToRun","tryCounter","ast","regen","atTop","canUndo","setText","doRedo","canRedo","literalTab","functionTab","litCount","funCount","nextVect","glitchTrans","glitchLiteral","litx","modLit","glitched","glitchRelToInit","was","glitchNumber","rndVal","initVal","funx","oldName","ftype","others","changeX","become","nextX","glsl","jsString","textDirection","langArray","docs","gallery","repo","pixeljam","garden","tutorials","discord","facebook","dispatch","icon","toggleInfo"],"sources":["node_modules/browser-pack/_prelude.js","index.js","node_modules/@babel/runtime/helpers/arrayLikeToArray.js","node_modules/@babel/runtime/helpers/arrayWithHoles.js","node_modules/@babel/runtime/helpers/assertThisInitialized.js","node_modules/@babel/runtime/helpers/classCallCheck.js","node_modules/@babel/runtime/helpers/createClass.js","node_modules/@babel/runtime/helpers/defineProperty.js","node_modules/@babel/runtime/helpers/getPrototypeOf.js","node_modules/@babel/runtime/helpers/inherits.js","node_modules/@babel/runtime/helpers/iterableToArray.js","node_modules/@babel/runtime/helpers/nonIterableRest.js","node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","node_modules/@babel/runtime/helpers/setPrototypeOf.js","node_modules/@babel/runtime/helpers/toArray.js","node_modules/@babel/runtime/helpers/toPrimitive.js","node_modules/@babel/runtime/helpers/toPropertyKey.js","node_modules/@babel/runtime/helpers/typeof.js","node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","node_modules/acorn/dist/acorn.js","node_modules/after/index.js","node_modules/arraybuffer.slice/index.js","node_modules/assert/assert.js","node_modules/assert/node_modules/inherits/inherits_browser.js","node_modules/assert/node_modules/util/support/isBufferBrowser.js","node_modules/assert/node_modules/util/util.js","node_modules/astravel/dist/astravel.js","node_modules/astravel/dist/attachComments.js","node_modules/astravel/dist/defaultTraveler.js","node_modules/astring/dist/astring.js","node_modules/backo2/index.js","node_modules/base64-arraybuffer/lib/base64-arraybuffer.js","node_modules/base64-js/index.js","node_modules/blob/index.js","node_modules/buffer/index.js","node_modules/call-bind/callBound.js","node_modules/call-bind/index.js","node_modules/choo-devtools/index.js","node_modules/choo-devtools/lib/copy.js","node_modules/choo-devtools/lib/debug.js","node_modules/choo-devtools/lib/help.js","node_modules/choo-devtools/lib/log.js","node_modules/choo-devtools/lib/logger.js","node_modules/choo-devtools/lib/perf.js","node_modules/choo-devtools/lib/storage.js","node_modules/choo-hooks/index.js","node_modules/choo/component/cache.js","node_modules/choo/component/index.js","node_modules/choo/html/index.js","node_modules/choo/html/raw.js","node_modules/choo/index.js","node_modules/clipboard-copy/index.js","node_modules/clone/clone.js","node_modules/codemirror-minified/addon/comment/comment.js","node_modules/codemirror-minified/addon/hint/javascript-hint.js","node_modules/codemirror-minified/addon/hint/show-hint.js","node_modules/codemirror-minified/addon/selection/mark-selection.js","node_modules/codemirror-minified/lib/codemirror.js","node_modules/codemirror-minified/mode/javascript/javascript.js","node_modules/component-bind/index.js","node_modules/component-emitter/index.js","node_modules/component-inherit/index.js","node_modules/document-ready/index.js","node_modules/engine.io-client/lib/globalThis.browser.js","node_modules/engine.io-client/lib/index.js","node_modules/engine.io-client/lib/socket.js","node_modules/engine.io-client/lib/transport.js","node_modules/engine.io-client/lib/transports/index.js","node_modules/engine.io-client/lib/transports/polling-jsonp.js","node_modules/engine.io-client/lib/transports/polling-xhr.js","node_modules/engine.io-client/lib/transports/polling.js","node_modules/engine.io-client/lib/transports/websocket.js","node_modules/engine.io-client/lib/transports/xmlhttprequest.browser.js","node_modules/engine.io-client/node_modules/debug/src/browser.js","node_modules/engine.io-client/node_modules/debug/src/debug.js","node_modules/engine.io-client/node_modules/ms/index.js","node_modules/engine.io-parser/lib/browser.js","node_modules/engine.io-parser/lib/keys.js","node_modules/engine.io-parser/lib/utf8.js","node_modules/err-code/index.js","node_modules/events/events.js","node_modules/fast-safe-stringify/index.js","node_modules/function-bind/implementation.js","node_modules/function-bind/index.js","node_modules/get-browser-rtc/index.js","node_modules/get-intrinsic/index.js","node_modules/global/document.js","node_modules/global/window.js","node_modules/has-binary2/index.js","node_modules/has-binary2/node_modules/isarray/index.js","node_modules/has-cors/index.js","node_modules/has-proto/index.js","node_modules/has-symbols/index.js","node_modules/has-symbols/shams.js","node_modules/has/src/index.js","node_modules/hyperscript-attribute-to-property/index.js","node_modules/hyperx/index.js","node_modules/i18next-browser-languagedetector/dist/cjs/i18nextBrowserLanguageDetector.js","node_modules/i18next/dist/cjs/i18next.js","node_modules/ieee754/index.js","node_modules/indexof/index.js","node_modules/inherits/inherits_browser.js","node_modules/js-beautify/js/index.js","node_modules/js-beautify/js/src/core/directives.js","node_modules/js-beautify/js/src/core/inputscanner.js","node_modules/js-beautify/js/src/core/options.js","node_modules/js-beautify/js/src/core/output.js","node_modules/js-beautify/js/src/core/pattern.js","node_modules/js-beautify/js/src/core/templatablepattern.js","node_modules/js-beautify/js/src/core/token.js","node_modules/js-beautify/js/src/core/tokenizer.js","node_modules/js-beautify/js/src/core/tokenstream.js","node_modules/js-beautify/js/src/core/whitespacepattern.js","node_modules/js-beautify/js/src/css/beautifier.js","node_modules/js-beautify/js/src/css/index.js","node_modules/js-beautify/js/src/css/options.js","node_modules/js-beautify/js/src/html/beautifier.js","node_modules/js-beautify/js/src/html/index.js","node_modules/js-beautify/js/src/html/options.js","node_modules/js-beautify/js/src/html/tokenizer.js","node_modules/js-beautify/js/src/index.js","node_modules/js-beautify/js/src/javascript/acorn.js","node_modules/js-beautify/js/src/javascript/beautifier.js","node_modules/js-beautify/js/src/javascript/index.js","node_modules/js-beautify/js/src/javascript/options.js","node_modules/js-beautify/js/src/javascript/tokenizer.js","node_modules/nanoassert/index.js","node_modules/nanobus/index.js","node_modules/nanobus/node_modules/remove-array-items/index.js","node_modules/nanocomponent/index.js","node_modules/nanocomponent/node_modules/nanoassert/index.js","node_modules/nanohref/index.js","node_modules/nanohtml/lib/append-child.js","node_modules/nanohtml/lib/bool-props.js","node_modules/nanohtml/lib/browser.js","node_modules/nanohtml/lib/direct-props.js","node_modules/nanohtml/lib/dom.js","node_modules/nanohtml/lib/raw-browser.js","node_modules/nanohtml/lib/svg-tags.js","node_modules/nanoid/format.browser.js","node_modules/nanologger/index.js","node_modules/nanolru/index.js","node_modules/nanomorph/index.js","node_modules/nanomorph/lib/events.js","node_modules/nanomorph/lib/morph.js","node_modules/nanoquery/browser.js","node_modules/nanoraf/index.js","node_modules/nanorouter/index.js","node_modules/nanoscheduler/index.js","node_modules/nanotiming/browser.js","node_modules/object-assign/index.js","node_modules/object-change-callsite/index.js","node_modules/object-inspect/index.js","node_modules/on-load/index.js","node_modules/on-performance/browser.js","node_modules/parseqs/index.js","node_modules/parseuri/index.js","node_modules/plucker/index.js","node_modules/prettier-bytes/index.js","node_modules/process/browser.js","node_modules/qs/lib/formats.js","node_modules/qs/lib/index.js","node_modules/qs/lib/parse.js","node_modules/qs/lib/stringify.js","node_modules/qs/lib/utils.js","node_modules/queue-microtask/index.js","node_modules/randombytes/browser.js","node_modules/remove-array-items/dist/remove-array-items.cjs.js","node_modules/safe-buffer/index.js","node_modules/scroll-to-anchor/index.js","node_modules/shortid/index.js","node_modules/shortid/lib/alphabet.js","node_modules/shortid/lib/build.js","node_modules/shortid/lib/generate.js","node_modules/shortid/lib/index.js","node_modules/shortid/lib/is-valid.js","node_modules/shortid/lib/random/random-byte-browser.js","node_modules/shortid/lib/random/random-from-seed.js","node_modules/shortid/lib/util/cluster-worker-id-browser.js","node_modules/side-channel/index.js","node_modules/simple-peer/index.js","node_modules/simple-peer/node_modules/debug/src/browser.js","node_modules/simple-peer/node_modules/debug/src/common.js","node_modules/simple-peer/node_modules/ms/index.js","node_modules/simple-peer/node_modules/readable-stream/errors-browser.js","node_modules/simple-peer/node_modules/readable-stream/lib/_stream_duplex.js","node_modules/simple-peer/node_modules/readable-stream/lib/_stream_passthrough.js","node_modules/simple-peer/node_modules/readable-stream/lib/_stream_readable.js","node_modules/simple-peer/node_modules/readable-stream/lib/_stream_transform.js","node_modules/simple-peer/node_modules/readable-stream/lib/_stream_writable.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/async_iterator.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/buffer_list.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/destroy.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/from-browser.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/pipeline.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/state.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/stream-browser.js","node_modules/simple-peer/node_modules/readable-stream/readable-browser.js","node_modules/socket.io-client/lib/index.js","node_modules/socket.io-client/lib/manager.js","node_modules/socket.io-client/lib/on.js","node_modules/socket.io-client/lib/socket.js","node_modules/socket.io-client/lib/url.js","node_modules/socket.io-client/node_modules/debug/src/browser.js","node_modules/socket.io-parser/binary.js","node_modules/socket.io-parser/index.js","node_modules/socket.io-parser/is-buffer.js","node_modules/socket.io-parser/node_modules/debug/src/browser.js","node_modules/state-copy/index.js","node_modules/string_decoder/lib/string_decoder.js","node_modules/superagent/src/agent-base.js","node_modules/superagent/src/client.js","node_modules/superagent/lib/node_modules/superagent/src/request-base.js","node_modules/superagent/src/response-base.js","node_modules/superagent/src/utils.js","node_modules/to-array/index.js","node_modules/util-deprecate/browser.js","node_modules/wayfarer/get-all-routes.js","node_modules/wayfarer/index.js","node_modules/wayfarer/trie.js","node_modules/yeast/index.js","src/lib/p5-wrapper.js","src/lib/patch-bay/pb-live.js","src/lib/patch-bay/rtc-patch-bay.js","src/stores/examples.json","src/stores/gallery.js","src/stores/language-store.js","src/stores/store.js","src/stores/text-elements.js","src/views/EditorComponent.js","src/views/Hydra.js","src/views/editor/editor.js","src/views/editor/keymaps.js","src/views/editor/log.js","src/views/editor/randomizer/Mutator.js","src/views/editor/randomizer/UndoStack.js","src/views/editor/randomizer/glslTransforms.js","src/views/editor/repl.js","src/views/info.js","src/views/main.js","src/views/toolbar.js"],"sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _getPrototypeOf(o);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}\nmodule.exports = _toArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nmodule.exports = _toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\nmodule.exports = _toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.acorn = {}));\n})(this, (function (exports) { 'use strict';\n\n // This file was generated. Do not modify manually!\n var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n // This file was generated. Do not modify manually!\n var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\n\n // This file was generated. Do not modify manually!\n var nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n // This file was generated. Do not modify manually!\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n // These are a run-length and offset encoded representation of the\n // >0xffff code points that are a valid part of identifiers. The\n // offset starts at 0x10000, and each pair of numbers represents an\n // offset to the next range, and then a size of the range.\n\n // Reserved word lists for various dialects of the language\n\n var reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n };\n\n // And the keywords\n\n var ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\n var keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n };\n\n var keywordRelationalOperator = /^in(stanceof)?$/;\n\n // ## Character categories\n\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n // This has a complexity linear to the value of the code. The\n // assumption is that looking up astral identifier characters is\n // rare.\n function isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n }\n\n // Test whether a given character code starts an identifier.\n\n function isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n }\n\n // Test whether a given character is part of an identifier.\n\n function isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n }\n\n // ## Token types\n\n // The assignment of fine-grained, information-carrying type objects\n // allows the tokenizer to store the information it has about a\n // token in a way that is very cheap for the parser to look up.\n\n // All token type variables start with an underscore, to make them\n // easy to recognize.\n\n // The `beforeExpr` property is used to disambiguate between regular\n // expressions and divisions. It is set on all token types that can\n // be followed by an expression (thus, a slash after them would be a\n // regular expression).\n //\n // The `startsExpr` property is used to check if the token ends a\n // `yield` expression. It is set on all token types that either can\n // directly start an expression (like a quotation mark) or can\n // continue an expression (like the body of a string).\n //\n // `isLoop` marks a keyword as starting a loop, which is important\n // to know when parsing a label, in order to allow or disallow\n // continue jumps to that label.\n\n var TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n };\n\n function binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n }\n var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n // Map keyword names to token types.\n\n var keywords = {};\n\n // Succinct definitions of keyword token types\n function kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n }\n\n var types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"/<=/>=\", 7),\n bitShift: binop(\"<>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n };\n\n // Matches a whole line break (where CRLF is considered a single\n // line break). Used to count lines.\n\n var lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\n var lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n function isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n }\n\n function nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n }\n\n var nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\n var skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\n var ref = Object.prototype;\n var hasOwnProperty = ref.hasOwnProperty;\n var toString = ref.toString;\n\n var hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n ); });\n\n var isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n ); });\n\n function wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n }\n\n function codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n }\n\n var loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n // These are used when `options.locations` is on, for the\n // `startLoc` and `endLoc` properties.\n\n var Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n };\n\n Position.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n };\n\n var SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n };\n\n // The `getLineInfo` function is mostly useful when the\n // `locations` option is off (for performance reasons) and you\n // want to find the line/column position for a given character\n // offset. `input` should be the code string that the offset refers\n // into.\n\n function getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n }\n\n // A second argument must be given to configure the parser process.\n // These options are recognized (only `ecmaVersion` is required):\n\n var defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n };\n\n // Interpret and default an options object\n\n var warnedAboutEcmaVersion = false;\n\n function getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n }\n\n function pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n }\n\n // Each scope gets a bitset that may contain these flags\n var\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\n function functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n }\n\n // Used in checkLVal* and declareName to determine the type of a binding\n var\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\n var Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n };\n\n var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\n Parser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n };\n\n prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\n prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\n prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\n prototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n };\n\n prototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n };\n\n prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\n prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\n prototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n };\n\n prototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n };\n\n Parser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n };\n\n Parser.parse = function parse (input, options) {\n return new this(options, input).parse()\n };\n\n Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n };\n\n Parser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n };\n\n Object.defineProperties( Parser.prototype, prototypeAccessors );\n\n var pp$9 = Parser.prototype;\n\n // ## Parser utilities\n\n var literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\n pp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n };\n\n // Predicate that tests whether the next token is of the given\n // type, and if yes, consumes it as a side effect.\n\n pp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n };\n\n // Tests whether parsed token is a contextual keyword.\n\n pp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n };\n\n // Consumes contextual keyword if possible.\n\n pp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n };\n\n // Asserts that following token is given contextual keyword.\n\n pp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n };\n\n // Test whether a semicolon can be inserted at the current position.\n\n pp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n };\n\n pp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n };\n\n // Consume a semicolon, or, failing that, see if we are allowed to\n // pretend that there is a semicolon at this position.\n\n pp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n };\n\n pp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n };\n\n // Expect a token of a given type. If found, consume it, otherwise,\n // raise an unexpected token error.\n\n pp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n };\n\n // Raise an unexpected token error.\n\n pp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n };\n\n var DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n };\n\n pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n };\n\n pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n };\n\n pp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n };\n\n pp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n };\n\n var pp$8 = Parser.prototype;\n\n // ### Statement parsing\n\n // Parse a program. Initializes the parser, reads any number of\n // statements, and wraps them in a Program node. Optionally takes a\n // `program` argument. If present, the statements will be appended\n // to its body instead of creating a new node.\n\n pp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n };\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n pp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'\n if (context) { return false }\n\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n };\n\n // check 'async [no LineTerminator here] function'\n // - 'async /*foo*/ function' is OK.\n // - 'async /*\\n*/ function' is invalid.\n pp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n };\n\n // Parse a single statement.\n //\n // If expecting a statement and finding a slash operator, parse a\n // regular expression literal. This is to handle cases like\n // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n // does not help.\n\n pp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n };\n\n pp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n };\n\n pp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n };\n\n pp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n };\n\n // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n // loop is non-trivial. Basically, we have to parse the init `var`\n // statement or expression, disallowing the `in` operator (see\n // the second parameter to `parseExpression`), and then check\n // whether the next token is `in` or `of`. When there is no init\n // part (semicolon immediately after the opening parenthesis), it\n // is a regular `for` loop.\n\n pp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n };\n\n pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n };\n\n pp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n };\n\n pp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n };\n\n pp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n };\n\n pp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n };\n\n // Reused empty array added for node fields that are always empty.\n\n var empty$1 = [];\n\n pp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n };\n\n pp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n };\n\n pp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n };\n\n pp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n };\n\n pp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n };\n\n pp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n };\n\n pp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n };\n\n pp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n };\n\n // Parse a semicolon-enclosed block of statements, handling `\"use\n // strict\"` declarations when `allowStrict` is true (used for\n // function bodies).\n\n pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n };\n\n // Parse a regular `for` loop. The disambiguation code in\n // `parseStatement` will already have parsed the init statement or\n // expression.\n\n pp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n };\n\n // Parse a `for`/`in` and `for`/`of` loop, which are almost\n // same from parser's perspective.\n\n pp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n };\n\n // Parse a list of variable declarations.\n\n pp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n };\n\n pp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n };\n\n var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n // Parse a function declaration or literal (depending on the\n // `statement & FUNC_STATEMENT`).\n\n // Remove `allowExpressionBody` for 7.0.0, as it is only called with false\n pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n };\n\n pp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n };\n\n // Parse a class declaration or literal (depending on the\n // `isStatement` parameter).\n\n pp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n };\n\n pp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n };\n\n pp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n };\n\n pp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n };\n\n pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n };\n\n pp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n };\n\n pp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n };\n\n pp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n };\n\n pp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n };\n\n pp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n };\n\n pp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n };\n\n function isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n }\n\n function checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n }\n\n // Parses module export declaration.\n\n pp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n };\n\n pp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n };\n\n pp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n };\n\n pp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n };\n\n pp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n };\n\n pp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === \"ParenthesizedExpression\")\n { this.checkPatternExport(exports, pat.expression); }\n };\n\n pp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n };\n\n pp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n };\n\n // Parses a comma-separated list of module exports.\n\n pp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n };\n\n pp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n };\n\n // Parses import declaration.\n\n pp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n };\n\n // Parses a comma-separated list of module imports.\n\n pp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n };\n\n pp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n };\n\n pp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n };\n\n pp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n };\n\n pp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n };\n\n // Set `ExpressionStatement#directive` property for directive prologues.\n pp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n };\n pp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n };\n\n var pp$7 = Parser.prototype;\n\n // Convert existing expression atom to assignable pattern\n // if possible.\n\n pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n };\n\n // Convert list of expression atoms to binding list.\n\n pp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n };\n\n // Parses spread element.\n\n pp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n };\n\n pp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n };\n\n // Parses lvalue (assignable) atom.\n\n pp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n };\n\n pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n };\n\n pp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n };\n\n pp$7.parseBindingListItem = function(param) {\n return param\n };\n\n // Parses assignment pattern around given atom if possible.\n\n pp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n };\n\n // The following three functions all verify that a node is an lvalue —\n // something that can be bound, or assigned to. In order to do so, they perform\n // a variety of checks:\n //\n // - Check that none of the bound/assigned-to identifiers are reserved words.\n // - Record name declarations for bindings in the appropriate scope.\n // - Check duplicate argument names, if checkClashes is set.\n //\n // If a complex binding pattern is encountered (e.g., object and array\n // destructuring), the entire pattern is recursively checked.\n //\n // There are three versions of checkLVal*() appropriate for different\n // circumstances:\n //\n // - checkLValSimple() shall be used if the syntactic construct supports\n // nothing other than identifiers and member expressions. Parenthesized\n // expressions are also correctly handled. This is generally appropriate for\n // constructs for which the spec says\n //\n // > It is a Syntax Error if AssignmentTargetType of [the production] is not\n // > simple.\n //\n // It is also appropriate for checking if an identifier is valid and not\n // defined elsewhere, like import declarations or function/class identifiers.\n //\n // Examples where this is used include:\n // a += …;\n // import a from '…';\n // where a is the node to be checked.\n //\n // - checkLValPattern() shall be used if the syntactic construct supports\n // anything checkLValSimple() supports, as well as object and array\n // destructuring patterns. This is generally appropriate for constructs for\n // which the spec says\n //\n // > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n // > an ArrayLiteral and AssignmentTargetType of [the production] is not\n // > simple.\n //\n // Examples where this is used include:\n // (a = …);\n // const a = …;\n // try { … } catch (a) { … }\n // where a is the node to be checked.\n //\n // - checkLValInnerPattern() shall be used if the syntactic construct supports\n // anything checkLValPattern() supports, as well as default assignment\n // patterns, rest elements, and other constructs that may appear within an\n // object or array destructuring pattern.\n //\n // As a special case, function parameters also use checkLValInnerPattern(),\n // as they also support defaults and rest constructs.\n //\n // These functions deliberately support both assignment and binding constructs,\n // as the logic for both is exceedingly similar. If the node is the target of\n // an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n // should be set to the appropriate BIND_* constant, like BIND_VAR or\n // BIND_LEXICAL.\n //\n // If the function is called with a non-BIND_NONE bindingType, then\n // additionally a checkClashes object may be specified to allow checking for\n // duplicate argument names. checkClashes is ignored if the provided construct\n // is an assignment (i.e., bindingType is BIND_NONE).\n\n pp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n };\n\n pp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n };\n\n pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n };\n\n // The algorithm used to determine whether a regexp can appear at a\n // given point in the program is loosely based on sweet.js' approach.\n // See https://github.com/mozilla/sweet.js/wiki/design\n\n\n var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n };\n\n var types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n };\n\n var pp$6 = Parser.prototype;\n\n pp$6.initialContext = function() {\n return [types.b_stat]\n };\n\n pp$6.curContext = function() {\n return this.context[this.context.length - 1]\n };\n\n pp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n };\n\n pp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n };\n\n pp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n };\n\n // Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n\n pp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n };\n\n // Token-specific context update code\n\n types$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n };\n\n types$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n };\n\n types$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n };\n\n types$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n };\n\n types$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n };\n\n types$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n };\n\n types$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n };\n\n types$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n };\n\n types$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n };\n\n // A recursive descent parser operates by defining functions for all\n // syntactic elements, and recursively calling those, each function\n // advancing the input stream and returning an AST node. Precedence\n // of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n // instead of `(!x)[1]` is handled by the fact that the parser\n // function that parses unary prefix operators is called first, and\n // in turn calls the function that parses `[]` subscripts — that\n // way, it'll receive the node for `x[1]` already parsed, and wraps\n // *that* in the unary operator node.\n //\n // Acorn uses an [operator precedence parser][opp] to handle binary\n // operator precedence, because it is much more compact than using\n // the technique outlined above, which uses different, nesting\n // functions to specify precedence, for all of the ten binary\n // precedence levels that JavaScript defines.\n //\n // [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\n var pp$5 = Parser.prototype;\n\n // Check if property name clashes with already added.\n // Object/class getters and setters are not allowed to clash —\n // either with each other or with an init property — and in\n // strict mode, init properties are also not allowed to be repeated.\n\n pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n };\n\n // ### Expression parsing\n\n // These nest, from the most general expression type at the top to\n // 'atomic', nondivisible expression types at the bottom. Most of\n // the functions will simply let the function(s) below them parse,\n // and, *if* the syntactic construct they handle is present, wrap\n // the AST node that the inner parser gave them in another node.\n\n // Parse a full expression. The optional arguments are used to\n // forbid the `in` operator (in for loops initalization expressions)\n // and provide reference for storing '=' operator inside shorthand\n // property assignment in contexts where both object expression\n // and object pattern might appear (so it's possible to raise\n // delayed syntax error at correct position).\n\n pp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n };\n\n // Parse an assignment expression. This includes applications of\n // operators like `+=`.\n\n pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n };\n\n // Parse a ternary conditional (`?:`) operator.\n\n pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n };\n\n // Start the precedence parser.\n\n pp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n };\n\n // Parse binary operators with the operator precedence parsing\n // algorithm. `left` is the left-hand side of the operator.\n // `minPrec` provides context that allows the function to stop and\n // defer further parser to one of its callers when it encounters an\n // operator that has a lower precedence than the set it is parsing.\n\n pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n };\n\n pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n };\n\n // Parse unary operators, both prefix and postfix.\n\n pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" &&\n node.argument.type === \"Identifier\")\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if (forInit || this.privateNameStack.length === 0) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n };\n\n function isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n )\n }\n\n // Parse call, dot, and `[]`-subscript expressions.\n\n pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n };\n\n pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n };\n\n pp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n };\n\n pp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n };\n\n pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n };\n\n // Parse an atomic expression — either a single token that is an\n // expression, an expression started by a keyword like `function` or\n // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n // or `{}`.\n\n pp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n };\n\n pp$5.parseExprAtomDefault = function() {\n this.unexpected();\n };\n\n pp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n var meta = this.parseIdent(true);\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n node.meta = meta;\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n };\n\n pp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n };\n\n pp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n };\n\n pp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n };\n\n pp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n };\n\n pp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n };\n\n pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n };\n\n pp$5.parseParenItem = function(item) {\n return item\n };\n\n pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n };\n\n // New's precedence is slightly tricky. It must allow its argument to\n // be a `[]` or dot subscript expression, but not a call — at least,\n // not without wrapping it in parentheses. Thus, it uses the noCalls\n // argument to parseSubscripts to prevent it from consuming the\n // argument list.\n\n var empty = [];\n\n pp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n };\n\n // Parse template expression.\n\n pp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n };\n\n pp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n };\n\n pp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n };\n\n // Parse an object literal or binding pattern.\n\n pp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n };\n\n pp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n };\n\n pp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n };\n\n pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n };\n\n pp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n };\n\n // Initialize empty function node.\n\n pp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n };\n\n // Parse object or class method.\n\n pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n };\n\n // Parse arrow function expression with given parameters.\n\n pp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n };\n\n // Parse function body and check parameters.\n\n pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n };\n\n pp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n };\n\n // Checks function params for various disallowed patterns such as using \"eval\"\n // or \"arguments\" and duplicate parameters.\n\n pp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n };\n\n // Parses a comma-separated list of expressions, and returns them as\n // an array. `close` is the token type that ends the list, and\n // `allowEmpty` can be turned on to allow subsequent commas with\n // nothing in between them to be parsed as `null` (which is needed\n // for array literals).\n\n pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n };\n\n pp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n };\n\n // Parse the next token as an identifier. If `liberal` is true (used\n // when parsing properties), it will also convert keywords into\n // identifiers.\n\n pp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n };\n\n pp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n return node\n };\n\n pp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n\n return node\n };\n\n // Parses yield expression inside generator.\n\n pp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n };\n\n pp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n };\n\n var pp$4 = Parser.prototype;\n\n // This function is used to raise exceptions on parse errors. It\n // takes an offset integer (into the current `input`) to indicate\n // the location of the error, attaches the position to the end\n // of the error message, and then raises a `SyntaxError` with that\n // message.\n\n pp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n };\n\n pp$4.raiseRecoverable = pp$4.raise;\n\n pp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n };\n\n var pp$3 = Parser.prototype;\n\n var Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n };\n\n // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\n pp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n };\n\n pp$3.exitScope = function() {\n this.scopeStack.pop();\n };\n\n // The spec says:\n // > At the top level of a function, or script, function declarations are\n // > treated like var declarations rather than like lexical declarations.\n pp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n };\n\n pp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n };\n\n pp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n };\n\n pp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n };\n\n pp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n };\n\n // Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n pp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n };\n\n var Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n };\n\n // Start an AST node, attaching a start offset.\n\n var pp$2 = Parser.prototype;\n\n pp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n };\n\n pp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n };\n\n // Finish an AST node, adding `type` and `end` properties.\n\n function finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n }\n\n pp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n };\n\n // Finish node at given position\n\n pp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n };\n\n pp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n };\n\n // This file contains Unicode properties extracted from the ECMAScript specification.\n // The lists are extracted like so:\n // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n // #table-binary-unicode-properties\n var ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\n var ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\n var ecma11BinaryProperties = ecma10BinaryProperties;\n var ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\n var ecma13BinaryProperties = ecma12BinaryProperties;\n var ecma14BinaryProperties = ecma13BinaryProperties;\n\n var unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n };\n\n // #table-binary-unicode-properties-of-strings\n var ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\n var unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n };\n\n // #table-unicode-general-category-values\n var unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n // #table-unicode-script-values\n var ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\n var ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\n var ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\n var ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\n var ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\n var ecma14ScriptValues = ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\n\n var unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n };\n\n var data = {};\n function buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n }\n\n for (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n }\n\n var pp$1 = Parser.prototype;\n\n var RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n };\n\n RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n };\n\n RegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n };\n\n // If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n RegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n };\n\n RegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n };\n\n RegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n };\n\n RegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n };\n\n RegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n };\n\n RegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n };\n\n RegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n };\n\n /**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n pp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n };\n\n /**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n pp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n pp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n pp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n pp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\n pp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\n pp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n pp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n pp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n };\n pp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n pp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n };\n pp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\n pp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\n pp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n pp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n };\n function isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n // But eat eager.\n pp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\n pp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n };\n\n // GroupSpecifier ::\n // [empty]\n // `?` GroupName\n pp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise(\"Duplicate capture group name\");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise(\"Invalid group\");\n }\n };\n\n // GroupName ::\n // `<` RegExpIdentifierName `>`\n // Note: this updates `state.lastStringValue` property with the eaten name.\n pp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n };\n\n // RegExpIdentifierName ::\n // RegExpIdentifierStart\n // RegExpIdentifierName RegExpIdentifierPart\n // Note: this updates `state.lastStringValue` property with the eaten name.\n pp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n };\n\n // RegExpIdentifierStart ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[+U]\n pp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n };\n function isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n }\n\n // RegExpIdentifierPart ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[+U]\n // \n // \n pp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n };\n function isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\n pp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n };\n pp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\n pp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n };\n pp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n pp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n pp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n };\n function isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n };\n function isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\n pp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n pp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n };\n\n // Return values used by character set parsing methods, needed to\n // forbid negation of sets that can match strings.\n var CharSetNone = 0; // Nothing parsed\n var CharSetOk = 1; // Construct parsed, cannot contain strings\n var CharSetString = 2; // Construct parsed, can contain strings\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n pp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n };\n\n function isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n pp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n };\n\n pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n };\n\n pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n };\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n pp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n };\n\n function isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n pp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n };\n function isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n pp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassContents\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n pp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n pp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n pp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\n pp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetExpression\n // https://tc39.es/ecma262/#prod-ClassUnion\n // https://tc39.es/ecma262/#prod-ClassIntersection\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n pp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetRange\n pp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetOperand\n pp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n };\n\n // https://tc39.es/ecma262/#prod-NestedClass\n pp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n };\n\n // https://tc39.es/ecma262/#prod-ClassStringDisjunction\n pp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n };\n\n // https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\n pp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n };\n\n // https://tc39.es/ecma262/#prod-ClassString\n // https://tc39.es/ecma262/#prod-NonEmptyClassString\n pp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetCharacter\n pp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\n function isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n }\n\n // https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\n function isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n }\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n pp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n function isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\n pp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n pp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n pp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n };\n function isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n pp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n };\n function isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n }\n function hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n pp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n };\n function isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n pp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n };\n\n // Object type used to represent tokens. Note that normally, tokens\n // simply exist as properties on the parser object. This is only\n // used for the onToken callback and the external tokenizer.\n\n var Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n };\n\n // ## Tokenizer\n\n var pp = Parser.prototype;\n\n // Move to the next token\n\n pp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n };\n\n pp.getToken = function() {\n this.next();\n return new Token(this)\n };\n\n // If we're in an ES6 environment, make parsers iterable\n if (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n // Toggle strict mode. Re-reads the next number or string to please\n // pedantic tests (`\"use strict\"; 010;` should fail).\n\n // Read a single token, updating the parser object's token-related\n // properties.\n\n pp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n };\n\n pp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n };\n\n pp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n };\n\n pp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n };\n\n pp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n };\n\n // Called at the start of the parse and after every token. Skips\n // whitespace and comments, and.\n\n pp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n };\n\n // Called at the end of every token. Sets `end`, `val`, and\n // maintains `context` and `exprAllowed`, and skips the space after\n // the token, so that the next one's `start` will point at the\n // right position.\n\n pp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n };\n\n // ### Token reading\n\n // This is the function that is called to fetch the next token. It\n // is somewhat obscure, because it works in character codes rather\n // than characters, and because operator parsing has been inlined\n // into it.\n //\n // All in the name of speed.\n //\n pp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n };\n\n pp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n };\n\n pp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n };\n\n pp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n };\n\n pp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n };\n\n pp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n };\n\n pp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `|]]>)$/.exec(text);\n\n // if we start to wrap but don't finish, print raw\n if (!matched) {\n printer.add_raw_token(raw_token);\n return;\n }\n\n pre = indentation + matched[1] + '\\n';\n text = matched[4];\n if (matched[5]) {\n post = indentation + matched[5];\n }\n\n // if there is at least one empty line at the end of this text, strip it\n // we'll be adding one back after the text but before the containing tag.\n text = text.replace(/\\n[ \\t]*$/, '');\n\n if (matched[2] || matched[3].indexOf('\\n') !== -1) {\n // if the first line of the non-comment text has spaces\n // use that as the basis for indenting in null case.\n matched = matched[3].match(/[ \\t]+$/);\n if (matched) {\n raw_token.whitespace_before = matched[0];\n }\n }\n }\n\n if (text) {\n if (_beautifier) {\n\n // call the Beautifier if avaliable\n var Child_options = function() {\n this.eol = '\\n';\n };\n Child_options.prototype = this._options.raw_options;\n var child_options = new Child_options();\n text = _beautifier(indentation + text, child_options);\n } else {\n // simply indent the string otherwise\n var white = raw_token.whitespace_before;\n if (white) {\n text = text.replace(new RegExp('\\n(' + white + ')?', 'g'), '\\n');\n }\n\n text = indentation + text.replace(/\\n/g, '\\n' + indentation);\n }\n }\n\n if (pre) {\n if (!text) {\n text = pre + post;\n } else {\n text = pre + text + '\\n' + post;\n }\n }\n\n printer.print_newline(false);\n if (text) {\n raw_token.text = text;\n raw_token.whitespace_before = '';\n raw_token.newlines = 0;\n printer.add_raw_token(raw_token);\n printer.print_newline(true);\n }\n }\n};\n\nBeautifier.prototype._handle_tag_open = function(printer, raw_token, last_tag_token, last_token, tokens) {\n var parser_token = this._get_tag_open_token(raw_token);\n\n if ((last_tag_token.is_unformatted || last_tag_token.is_content_unformatted) &&\n !last_tag_token.is_empty_element &&\n raw_token.type === TOKEN.TAG_OPEN && !parser_token.is_start_tag) {\n // End element tags for unformatted or content_unformatted elements\n // are printed raw to keep any newlines inside them exactly the same.\n printer.add_raw_token(raw_token);\n parser_token.start_tag_token = this._tag_stack.try_pop(parser_token.tag_name);\n } else {\n printer.traverse_whitespace(raw_token);\n this._set_tag_position(printer, raw_token, parser_token, last_tag_token, last_token);\n if (!parser_token.is_inline_element) {\n printer.set_wrap_point();\n }\n printer.print_token(raw_token);\n }\n\n // count the number of attributes\n if (parser_token.is_start_tag && this._is_wrap_attributes_force) {\n var peek_index = 0;\n var peek_token;\n do {\n peek_token = tokens.peek(peek_index);\n if (peek_token.type === TOKEN.ATTRIBUTE) {\n parser_token.attr_count += 1;\n }\n peek_index += 1;\n } while (peek_token.type !== TOKEN.EOF && peek_token.type !== TOKEN.TAG_CLOSE);\n }\n\n //indent attributes an auto, forced, aligned or forced-align line-wrap\n if (this._is_wrap_attributes_force_aligned || this._is_wrap_attributes_aligned_multiple || this._is_wrap_attributes_preserve_aligned) {\n parser_token.alignment_size = raw_token.text.length + 1;\n }\n\n if (!parser_token.tag_complete && !parser_token.is_unformatted) {\n printer.alignment_size = parser_token.alignment_size;\n }\n\n return parser_token;\n};\n\nvar TagOpenParserToken = function(parent, raw_token) {\n this.parent = parent || null;\n this.text = '';\n this.type = 'TK_TAG_OPEN';\n this.tag_name = '';\n this.is_inline_element = false;\n this.is_unformatted = false;\n this.is_content_unformatted = false;\n this.is_empty_element = false;\n this.is_start_tag = false;\n this.is_end_tag = false;\n this.indent_content = false;\n this.multiline_content = false;\n this.custom_beautifier_name = null;\n this.start_tag_token = null;\n this.attr_count = 0;\n this.has_wrapped_attrs = false;\n this.alignment_size = 0;\n this.tag_complete = false;\n this.tag_start_char = '';\n this.tag_check = '';\n\n if (!raw_token) {\n this.tag_complete = true;\n } else {\n var tag_check_match;\n\n this.tag_start_char = raw_token.text[0];\n this.text = raw_token.text;\n\n if (this.tag_start_char === '<') {\n tag_check_match = raw_token.text.match(/^<([^\\s>]*)/);\n this.tag_check = tag_check_match ? tag_check_match[1] : '';\n } else {\n tag_check_match = raw_token.text.match(/^{{~?(?:[\\^]|#\\*?)?([^\\s}]+)/);\n this.tag_check = tag_check_match ? tag_check_match[1] : '';\n\n // handle \"{{#> myPartial}}\" or \"{{~#> myPartial}}\"\n if ((raw_token.text.startsWith('{{#>') || raw_token.text.startsWith('{{~#>')) && this.tag_check[0] === '>') {\n if (this.tag_check === '>' && raw_token.next !== null) {\n this.tag_check = raw_token.next.text.split(' ')[0];\n } else {\n this.tag_check = raw_token.text.split('>')[1];\n }\n }\n }\n\n this.tag_check = this.tag_check.toLowerCase();\n\n if (raw_token.type === TOKEN.COMMENT) {\n this.tag_complete = true;\n }\n\n this.is_start_tag = this.tag_check.charAt(0) !== '/';\n this.tag_name = !this.is_start_tag ? this.tag_check.substr(1) : this.tag_check;\n this.is_end_tag = !this.is_start_tag ||\n (raw_token.closed && raw_token.closed.text === '/>');\n\n // if whitespace handler ~ included (i.e. {{~#if true}}), handlebars tags start at pos 3 not pos 2\n var handlebar_starts = 2;\n if (this.tag_start_char === '{' && this.text.length >= 3) {\n if (this.text.charAt(2) === '~') {\n handlebar_starts = 3;\n }\n }\n\n // handlebars tags that don't start with # or ^ are single_tags, and so also start and end.\n this.is_end_tag = this.is_end_tag ||\n (this.tag_start_char === '{' && (this.text.length < 3 || (/[^#\\^]/.test(this.text.charAt(handlebar_starts)))));\n }\n};\n\nBeautifier.prototype._get_tag_open_token = function(raw_token) { //function to get a full tag and parse its type\n var parser_token = new TagOpenParserToken(this._tag_stack.get_parser_token(), raw_token);\n\n parser_token.alignment_size = this._options.wrap_attributes_indent_size;\n\n parser_token.is_end_tag = parser_token.is_end_tag ||\n in_array(parser_token.tag_check, this._options.void_elements);\n\n parser_token.is_empty_element = parser_token.tag_complete ||\n (parser_token.is_start_tag && parser_token.is_end_tag);\n\n parser_token.is_unformatted = !parser_token.tag_complete && in_array(parser_token.tag_check, this._options.unformatted);\n parser_token.is_content_unformatted = !parser_token.is_empty_element && in_array(parser_token.tag_check, this._options.content_unformatted);\n parser_token.is_inline_element = in_array(parser_token.tag_name, this._options.inline) || parser_token.tag_name.includes(\"-\") || parser_token.tag_start_char === '{';\n\n return parser_token;\n};\n\nBeautifier.prototype._set_tag_position = function(printer, raw_token, parser_token, last_tag_token, last_token) {\n\n if (!parser_token.is_empty_element) {\n if (parser_token.is_end_tag) { //this tag is a double tag so check for tag-ending\n parser_token.start_tag_token = this._tag_stack.try_pop(parser_token.tag_name); //remove it and all ancestors\n } else { // it's a start-tag\n // check if this tag is starting an element that has optional end element\n // and do an ending needed\n if (this._do_optional_end_element(parser_token)) {\n if (!parser_token.is_inline_element) {\n printer.print_newline(false);\n }\n }\n\n this._tag_stack.record_tag(parser_token); //push it on the tag stack\n\n if ((parser_token.tag_name === 'script' || parser_token.tag_name === 'style') &&\n !(parser_token.is_unformatted || parser_token.is_content_unformatted)) {\n parser_token.custom_beautifier_name = get_custom_beautifier_name(parser_token.tag_check, raw_token);\n }\n }\n }\n\n if (in_array(parser_token.tag_check, this._options.extra_liners)) { //check if this double needs an extra line\n printer.print_newline(false);\n if (!printer._output.just_added_blankline()) {\n printer.print_newline(true);\n }\n }\n\n if (parser_token.is_empty_element) { //if this tag name is a single tag type (either in the list or has a closing /)\n\n // if you hit an else case, reset the indent level if you are inside an:\n // 'if', 'unless', or 'each' block.\n if (parser_token.tag_start_char === '{' && parser_token.tag_check === 'else') {\n this._tag_stack.indent_to_tag(['if', 'unless', 'each']);\n parser_token.indent_content = true;\n // Don't add a newline if opening {{#if}} tag is on the current line\n var foundIfOnCurrentLine = printer.current_line_has_match(/{{#if/);\n if (!foundIfOnCurrentLine) {\n printer.print_newline(false);\n }\n }\n\n // Don't add a newline before elements that should remain where they are.\n if (parser_token.tag_name === '!--' && last_token.type === TOKEN.TAG_CLOSE &&\n last_tag_token.is_end_tag && parser_token.text.indexOf('\\n') === -1) {\n //Do nothing. Leave comments on same line.\n } else {\n if (!(parser_token.is_inline_element || parser_token.is_unformatted)) {\n printer.print_newline(false);\n }\n this._calcluate_parent_multiline(printer, parser_token);\n }\n } else if (parser_token.is_end_tag) { //this tag is a double tag so check for tag-ending\n var do_end_expand = false;\n\n // deciding whether a block is multiline should not be this hard\n do_end_expand = parser_token.start_tag_token && parser_token.start_tag_token.multiline_content;\n do_end_expand = do_end_expand || (!parser_token.is_inline_element &&\n !(last_tag_token.is_inline_element || last_tag_token.is_unformatted) &&\n !(last_token.type === TOKEN.TAG_CLOSE && parser_token.start_tag_token === last_tag_token) &&\n last_token.type !== 'TK_CONTENT'\n );\n\n if (parser_token.is_content_unformatted || parser_token.is_unformatted) {\n do_end_expand = false;\n }\n\n if (do_end_expand) {\n printer.print_newline(false);\n }\n } else { // it's a start-tag\n parser_token.indent_content = !parser_token.custom_beautifier_name;\n\n if (parser_token.tag_start_char === '<') {\n if (parser_token.tag_name === 'html') {\n parser_token.indent_content = this._options.indent_inner_html;\n } else if (parser_token.tag_name === 'head') {\n parser_token.indent_content = this._options.indent_head_inner_html;\n } else if (parser_token.tag_name === 'body') {\n parser_token.indent_content = this._options.indent_body_inner_html;\n }\n }\n\n if (!(parser_token.is_inline_element || parser_token.is_unformatted) &&\n (last_token.type !== 'TK_CONTENT' || parser_token.is_content_unformatted)) {\n printer.print_newline(false);\n }\n\n this._calcluate_parent_multiline(printer, parser_token);\n }\n};\n\nBeautifier.prototype._calcluate_parent_multiline = function(printer, parser_token) {\n if (parser_token.parent && printer._output.just_added_newline() &&\n !((parser_token.is_inline_element || parser_token.is_unformatted) && parser_token.parent.is_inline_element)) {\n parser_token.parent.multiline_content = true;\n }\n};\n\n//To be used for

tag special case:\nvar p_closers = ['address', 'article', 'aside', 'blockquote', 'details', 'div', 'dl', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'main', 'menu', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul'];\nvar p_parent_excludes = ['a', 'audio', 'del', 'ins', 'map', 'noscript', 'video'];\n\nBeautifier.prototype._do_optional_end_element = function(parser_token) {\n var result = null;\n // NOTE: cases of \"if there is no more content in the parent element\"\n // are handled automatically by the beautifier.\n // It assumes parent or ancestor close tag closes all children.\n // https://www.w3.org/TR/html5/syntax.html#optional-tags\n if (parser_token.is_empty_element || !parser_token.is_start_tag || !parser_token.parent) {\n return;\n\n }\n\n if (parser_token.tag_name === 'body') {\n // A head element’s end tag may be omitted if the head element is not immediately followed by a space character or a comment.\n result = result || this._tag_stack.try_pop('head');\n\n //} else if (parser_token.tag_name === 'body') {\n // DONE: A body element’s end tag may be omitted if the body element is not immediately followed by a comment.\n\n } else if (parser_token.tag_name === 'li') {\n // An li element’s end tag may be omitted if the li element is immediately followed by another li element or if there is no more content in the parent element.\n result = result || this._tag_stack.try_pop('li', ['ol', 'ul', 'menu']);\n\n } else if (parser_token.tag_name === 'dd' || parser_token.tag_name === 'dt') {\n // A dd element’s end tag may be omitted if the dd element is immediately followed by another dd element or a dt element, or if there is no more content in the parent element.\n // A dt element’s end tag may be omitted if the dt element is immediately followed by another dt element or a dd element.\n result = result || this._tag_stack.try_pop('dt', ['dl']);\n result = result || this._tag_stack.try_pop('dd', ['dl']);\n\n\n } else if (parser_token.parent.tag_name === 'p' && p_closers.indexOf(parser_token.tag_name) !== -1) {\n // IMPORTANT: this else-if works because p_closers has no overlap with any other element we look for in this method\n // check for the parent element is an HTML element that is not an ,

`\n return html`
\n
${this.textEl}
\n ${this.logElement}\n
`\n }\n}\n","const html = require('choo/html')\nconst Component = require('choo/component')\n// const HydraSynth = require('hydra-synth')\n// const HydraSynth = require('./../../../../../hydra-synth')\nconst P5 = require('./../lib/p5-wrapper.js')\nconst PatchBay = require('./../lib/patch-bay/pb-live.js')\nlet pb\n\n// const SERVER_URL = process.env['SERVER_URL']\n\nmodule.exports = class HydraCanvas extends Component {\n constructor(id, state, emit) {\n super(id)\n this.local = state.components[id] = {}\n state.hydra = this // hacky\n this.state = state\n this.emit = emit\n }\n\n load(element) {\n let isIOS =\n (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !window.MSStream;\n let precisionValue = isIOS ? 'highp' : 'mediump'\n\n\n const hydraOptions = { detectAudio: true, canvas: element.querySelector(\"canvas\"), precision: precisionValue }\n \n if (this.state.serverURL === null) {\n console.log('LOCAL ONLY, WILL NOT INIT webRTC and gallery')\n this.hydra = new Hydra(hydraOptions)\n } else {\n this.pb = new PatchBay()\n hydraOptions.pb = this.pb\n this.hydra = new Hydra(hydraOptions)\n this.pb.init(this.hydra.captureStream, {\n // server: window.location.origin,\n server: this.state.serverURL,\n room: 'iclc'\n })\n window.pb = this.pb\n }\n\n window.hydraSynth = this.hydra\n // if(environment !== 'local') {\n // osc().out()\n\n // }\n\n window.P5 = P5\n // window.pb = pb\n this.emit('hydra loaded')\n }\n\n update(center) {\n return false\n }\n\n createElement({ width = window.innerWidth, height = window.innerHeight } = {}) {\n\n return html`
\n
`\n }\n}\n","/* eslint-disable no-eval */\nvar CodeMirror = require('codemirror-minified/lib/codemirror')\nrequire('codemirror-minified/mode/javascript/javascript')\nrequire('codemirror-minified/addon/hint/javascript-hint')\nrequire('codemirror-minified/addon/hint/show-hint')\nrequire('codemirror-minified/addon/selection/mark-selection')\nrequire('codemirror-minified/addon/comment/comment')\n\nconst EventEmitter = require('nanobus')\nconst keymaps = require('./keymaps.js')\nconst Mutator = require('./randomizer/Mutator.js');\nconst beautify_js = require('js-beautify').js_beautify\n\nvar isShowing = true\n\n\nmodule.exports = class Editor extends EventEmitter {\n constructor(parent) {\n super()\n console.log(\"*** Editor class created\");\n var self = this\n\n // var container = document.createElement('div')\n // container.setAttribute('id', 'editor-container')\n // var el = document.createElement('TEXTAREA')\n // document.body.appendChild(container)\n // container.appendChild(el)\n\n this.mutator = new Mutator(this);\n\n const extraKeys = {}\n Object.entries(keymaps).forEach(([key, e]) => extraKeys[key] = () => {\n if(e == 'editor:evalBlock') {\n this.emit(e, this.getCurrentBlock().text)\n } else if (e == 'editor:evalLine') {\n this.emit(e, this.getLine())\n } else if (e == 'editor:toggleComment') {\n this.cm.toggleComment()\n // } else if (e == 'gallery:saveToURL') {\n this.emit(e, this)\n } else if (e === 'editor:formatCode') {\n this.formatCode()\n } else {\n this.emit(e, this)\n }\n })\n\n const opts = {\n theme: 'tomorrow-night-eighties',\n value: 'hello',\n mode: { name: 'javascript', globalVars: true },\n lineWrapping: true,\n styleSelectedText: true,\n extraKeys: extraKeys\n }\n\n this.cm = CodeMirror.fromTextArea(parent, opts)\n window.cm = this.cm\n this.cm.refresh()\n\n // this.show()\n // // // TO DO: add show code param\n // let searchParams = new URLSearchParams(window.location.search)\n // let showCode = searchParams.get('show-code')\n\n // if (showCode === \"false\") {\n // this.hide()\n // }\n }\n\n clear() {\n this.cm.setValue('\\n \\n // Type some code on a new line (such as \"osc().out()\"), and press CTRL+shift+enter')\n }\n\n setValue(val) {\n this.cm.setValue(val)\n }\n\n getValue() {\n return this.cm.getValue()\n }\n\n formatCode() {\n const formatted = beautify_js(this.cm.getValue(), { indent_size: 2, \"break_chained_methods\": true, \"indent_with_tabs\": true})\n this.cm.setValue(formatted)\n }\n\n // hide() {\n // console.log('hiding')\n // var l = document.getElementsByClassName('CodeMirror')[0]\n // var m = document.getElementById('modal-header')\n // l.style.opacity = 0\n // m.style.opacity = 0\n // this.isShowing = false\n // }\n\n // show() {\n // var l = document.getElementsByClassName('CodeMirror')[0]\n // var m = document.getElementById('modal-header')\n // l.style.opacity= 1\n // m.style.opacity = 1\n // l.style.pointerEvents = 'all'\n // this.isShowing = true\n // }\n\n toggle() {\n if (this.isShowing) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n getLine() {\n var c = this.cm.getCursor()\n var s = this.cm.getLine(c.line)\n // this.cm.markText({line: c.line, ch:0}, {line: c.line+1, ch:0}, {className: 'styled-background'})\n this.flashCode({ line: c.line, ch: 0 }, { line: c.line + 1, ch: 0 })\n return s\n }\n\n flashCode(start, end) {\n if (!start) start = { line: this.cm.firstLine(), ch: 0 }\n if (!end) end = { line: this.cm.lastLine() + 1, ch: 0 }\n var marker = this.cm.markText(start, end, { className: 'styled-background' })\n setTimeout(() => marker.clear(), 300)\n }\n\n\n getCurrentBlock() { // thanks to graham wakefield + gibber\n var editor = this.cm\n var pos = editor.getCursor()\n var startline = pos.line\n var endline = pos.line\n while (startline > 0 && editor.getLine(startline) !== '') {\n startline--\n }\n while (endline < editor.lineCount() && editor.getLine(endline) !== '') {\n endline++\n }\n var pos1 = {\n line: startline,\n ch: 0\n }\n var pos2 = {\n line: endline,\n ch: 0\n }\n var str = editor.getRange(pos1, pos2)\n\n this.flashCode(pos1, pos2)\n\n return {\n start: pos1,\n end: pos2,\n text: str\n }\n }\n\n}\n\n","module.exports = { \n 'Ctrl-Enter': 'editor:evalLine',\n 'Ctrl-/': 'editor:toggleComment',\n 'Alt-Enter': 'editor:evalBlock',\n 'Shift-Ctrl-Enter': 'editor:evalAll',\n 'Shift-Ctrl-G': 'gallery:shareSketch',\n 'Shift-Ctrl-F': 'editor:formatCode',\n 'Shift-Ctrl-L': 'gallery:saveToURL',\n 'Shift-Ctrl-H': 'hideAll',\n 'Shift-Ctrl-S': 'screencap'\n}","var logElement\n\nmodule.exports = {\n init: (el) => {\n // logElement = document.createElement('div')\n // logElement.className = \"console cm-s-tomorrow-night-eighties\"\n // document.body.appendChild(logElement)\n logElement = el\n },\n log: (msg, className = \"\") => {\n console.log('logging', msg, className)\n if(logElement) logElement.innerHTML =` >> ${msg} `\n },\n hide: () => {\n if(logElement) logElement.style.display = 'none'\n },\n show: () => {\n if(logElement) logElement.style.display = 'block'\n },\n toggle: () => {\n if(logElement.style.display == 'none') {\n logElement.style.display = 'block'\n } else {\n logElement.style.display = 'none'\n }\n }\n}\n","const {Parser} = require(\"acorn\");\nconst {generate} = require('astring');\nconst { defaultTraveler, attachComments, makeTraveler } = require('astravel');\nconst {UndoStack} = require('./UndoStack.js');\nconst repl = require('./../repl.js')\n// const glslTransforms = require('hydra-synth/src/glsl/glsl-functions.js')()\nconst glslTransforms = require('./glslTransforms.js')\n\nclass Mutator {\n\n constructor(editor) {\n this.editor = editor;\n this.undoStack = new UndoStack();\n\n this.initialVector = [];\n\n this.funcTab = {};\n this.transMap = {};\n\t\tthis.scanFuncs();\n\t\tthis.dumpDict();\n }\n\n dumpList() {\n \tlet gslTab = glslTransforms;\n \tgslTab.forEach (v => {\n \t\tvar argList = \"\";\n \t\tv.inputs.forEach((a) => {\n \t\t\tif (argList != \"\") argList += \", \";\n \t\t\tlet argL = a.name + \": \" + a.type + \" {\" + a.default + \"}\";\n \t\t\targList = argList + argL;\n \t\t});\n \t//\tconsole.log(v.name + \" [\" + v.type + \"] (\"+ argList + \")\");\n \t});\n }\n\n scanFuncs() {\n \tlet gslTab = glslTransforms;\n \tgslTab.forEach (f => {\n \t\tthis.transMap[f.name] = f;\n \t\tif (this.funcTab[f.type] === undefined) {this.funcTab[f.type] = []}\n\t\t\tthis.funcTab[f.type].push(f);\n \t});\n }\n\n\tdumpDict() {\n\t\tfor(let tn in this.funcTab)\n\t\t{\n\t\t\tthis.funcTab[tn].forEach(f => {\n \t\tvar argList = \"\";\n \t\tf.inputs.forEach((a) => {\n \t\t\tif (argList != \"\") argList += \", \";\n \t\t\tlet argL = a.name + \": \" + a.type + \" {\" + a.default + \"}\";\n \t\t\targList = argList + argL;\n \t\t});\n \t\t//console.log(f.name + \" [\" + f.type + \"] (\"+ argList + \")\");\n\t\t\t});\n }\n\t}\n\n mutate(options) {\n // Get text from CodeMirror.\n let text = this.editor.cm.getValue();\n this.undoStack.push({text, lastLitX: this.lastLitX});\n let needToRun = true;\n let tryCounter = 5;\n while (needToRun && tryCounter-- >= 0) {\n // Parse to AST\n var comments = [];\n let ast = Parser.parse(text, {\n locations: true,\n onComment: comments}\n );\n\n // Modify the AST.\n this.transform(ast, options);\n\n // Put the comments back.\n attachComments(ast, comments);\n\n // Generate JS from AST and set back into CodeMirror editor.\n let regen = generate(ast, {comments: true});\n\n this.editor.cm.setValue(regen);\n\t\t\t\ttry {\n // Evaluate the updated expression.\n repl.eval(regen, (code, error) => {\n // If we got an error, keep trying something else.\n if (error) {\n console.log(\"Eval error: \" + regen);\n }\n needToRun = error;\n });\n } catch (err) {\n \tconsole.log(\"Exception caught: \" + err);\n \tneedToRun = err;\n }\n }\n }\n\n doUndo() {\n // If the current text is unsaved, save it so we can redo if need be.\n if (this.undoStack.atTop()) {\n let text = this.editor.cm.getValue();\n this.undoStack.push({text, lastLitX: this.lastLitX});\n }\n // Then pop-off the info to restore.\n if (this.undoStack.canUndo()) {\n let {text, lastLitX} = this.undoStack.undo();\n this.setText(text);\n this.lastLitX = lastLitX;\n }\n }\n\n doRedo() {\n if(this.undoStack.canRedo()) {\n let {text, lastLitX} = this.undoStack.redo();\n this.setText(text);\n this.lastLitX = lastLitX;\n }\n }\n\n setText(text) {\n this.editor.cm.setValue(text);\n repl.eval(text, (code, error) => {\n });\n\n }\n\n // The options object contains a flag that controls how the\n // Literal to mutate is determined. If reroll is false, we\n // pick one at random. If reroll is true, we use the same field\n // we did last time.\n transform(ast, options) {\n // An AST traveler that accumulates a list of Literal nodes.\n let traveler = makeTraveler({\n go: function(node, state) {\n if (node.type === 'Literal') {\n state.literalTab.push(node);\n } else if (node.type === 'MemberExpression') {\n if (node.property && node.property.type === 'Literal') {\n // numeric array subscripts are ineligable\n return;\n }\n } else if (node.type === 'CallExpression') {\n if (node.callee && node.callee.property && node.callee.property.name && node.callee.property.name !== 'out') {\n state.functionTab.push(node);\n }\n }\n // Call the parent's `go` method\n this.super.go.call(this, node, state);\n }\n });\n\n let state = {};\n state.literalTab = [];\n state.functionTab = [];\n\n traveler.go(ast, state);\n\n this.litCount = state.literalTab.length;\n this.funCount = state.functionTab.length;\n if (this.litCount !== this.initialVector.length) {\n let nextVect = [];\n for(let i = 0; i < this.litCount; ++i) {\n nextVect.push(state.literalTab[i].value);\n }\n this.initialVector = nextVect;\n }\n if (options.changeTransform) {\n \tthis.glitchTrans(state, options);\n }\n else this.glitchLiteral(state, options);\n\n}\n\n\tglitchLiteral(state, options)\n\t{\n\t\tlet litx = 0;\n if (options.reroll) {\n if (this.lastLitX !== undefined) {\n litx = this.lastLitX;\n }\n } else {\n litx = Math.floor(Math.random() * this.litCount);\n this.lastLitX = litx;\n }\n\n let modLit = state.literalTab[litx];\n if (modLit) {\n // let glitched = this.glitchNumber(modLit.value);\n let glitched = this.glitchRelToInit(modLit.value, this.initialVector[litx]);\n let was = modLit.raw;\n modLit.value = glitched;\n modLit.raw = \"\" + glitched;\n console.log(\"Literal: \" + litx + \" changed from: \" + was + \" to: \" + glitched);\n }\n\t}\n\n glitchNumber(num) {\n if (num === 0) {\n num = 1;\n }\n let range = num * 2;\n let rndVal = Math.round(Math.random() * range * 1000) / 1000;\n return rndVal;\n }\n\n glitchRelToInit(num, initVal) {\n if (initVal === undefined) {\n return glitchNumber(num);\n } if (initVal === 0) {\n initVal = 0.5;\n }\n\n let rndVal = Math.round(Math.random() * initVal * 2 * 1000) / 1000;\n return rndVal;\n}\n\tglitchTrans(state, options)\n\t{\n/*\n\t\tstate.functionTab.forEach((f)=>{\n\t\t\tconsole.log(f.callee.property.name);\n\t\t});\n*/\n\t\tlet funx = Math.floor(Math.random() * this.funCount);\n\t\tif (state.functionTab[funx] === undefined || state.functionTab[funx].callee === undefined || state.functionTab[funx].callee.property === undefined) {\n\t\t\t\t \tconsole.log(\"No valid functionTab for index: \" + funx);\n\t \t\t\t\treturn;\n\t\t}\n\t\tlet oldName = state.functionTab[funx].callee.property.name;\n\n\t if (oldName == undefined) {\n\t \tconsole.log(\"No name for callee\");\n\t \treturn;\n\t }\n\t\tlet ftype = this.transMap[oldName].type;\n\t\tif (ftype == undefined) {\n\t\t\tconsole.log(\"ftype undefined for: \" + oldName);\n\t\t\treturn;\n\t\t}\n\t\tlet others = this.funcTab[ftype];\n\t\tif (others == undefined) {\n\t\t\tconsole.log(\"no funcTab entry for: \" + ftype);\n\t\t\treturn;\n\t\t}\n\t\tlet changeX = Math.floor(Math.random() * others.length);\n\t\tlet become = others[changeX].name;\n\n\t\t// check blacklisted combinations.\n\t\tif (oldName === \"modulate\" && become === \"modulateScrollX\")\n\t\t{\n\t\t\tconsole.log(\"Function: \" + funx + \" changing from: \" + oldName + \" can't change to: \" + become);\n\t\t\treturn;\n\t\t}\n\n\t\tstate.functionTab[funx].callee.property.name = become;\n console.log(\"Function: \" + funx + \" changed from: \" + oldName + \" to: \" + become);\n\t}\n\n} // End of class Mutator.\n\nmodule.exports = Mutator\n","// A generalized 'Undo stack' which can keep N levels of revertable state.\nclass UndoStack {\n constructor(limit) {\n this.stack = [];\n this.index = -1;\n this.limit = limit;\n }\n \n atTop() {\n return this.index === -1;\n }\n\n canUndo() {\n if(this.stack.length === 0) return false;\n return this.index === -1 || this.index > 0;\n }\n\n canRedo() {\n if(this.stack.length === 0 || this.index === -1) return false;\n return this.index < this.stack.length - 1;\n }\n\n push(item) {\n if (this.index >= 0) {\n while (this.index < this.stack.length) this.stack.pop();\n this.index = -1;\n }\n if (this.limit && this.stack.length > this.limit) {\n this.stack.shift();\n }\n this.stack.push(item);\n }\n\n undo() {\n if (this.stack.length === 0) return undefined;\n if (this.index === -1) { // start one behind the redo buffer\n this.index = this.stack.length - 1;\n }\n if (this.index > 0) this.index--;\n let v = this.stack[this.index];\n return v;\n }\n\n redo() {\n if (this.stack.length === 0 || this.index === -1) return undefined;\n let nextX = this.index + 1;\n if (nextX >= this.stack.length) return undefined;\n this.index = nextX;\n return this.stack[this.index];\n }\n};\n\n\nmodule.exports = {UndoStack}","/*\nFormat for adding functions to hydra. For each entry in this file, hydra automatically generates a glsl function and javascript function with the same name. You can also ass functions dynamically using setFunction(object).\n\n{\n name: 'osc', // name that will be used to access function in js as well as in glsl\n type: 'src', // can be 'src', 'color', 'combine', 'combineCoords'. see below for more info\n inputs: [\n {\n name: 'freq',\n type: 'float',\n default: 0.2\n },\n {\n name: 'sync',\n type: 'float',\n default: 0.1\n },\n {\n name: 'offset',\n type: 'float',\n default: 0.0\n }\n ],\n glsl: `\n vec2 st = _st;\n float r = sin((st.x-offset*2/freq+time*sync)*freq)*0.5 + 0.5;\n float g = sin((st.x+time*sync)*freq)*0.5 + 0.5;\n float b = sin((st.x+offset/freq+time*sync)*freq)*0.5 + 0.5;\n return vec4(r, g, b, 1.0);\n `\n}\n\n// The above code generates the glsl function:\n`vec4 osc(vec2 _st, float freq, float sync, float offset){\n vec2 st = _st;\n float r = sin((st.x-offset*2/freq+time*sync)*freq)*0.5 + 0.5;\n float g = sin((st.x+time*sync)*freq)*0.5 + 0.5;\n float b = sin((st.x+offset/freq+time*sync)*freq)*0.5 + 0.5;\n return vec4(r, g, b, 1.0);\n}`\n\n\nTypes and default arguments for hydra functions.\nThe value in the 'type' field lets the parser know which type the function will be returned as well as default arguments.\n\nconst types = {\n 'src': {\n returnType: 'vec4',\n args: ['vec2 _st']\n },\n 'coord': {\n returnType: 'vec2',\n args: ['vec2 _st']\n },\n 'color': {\n returnType: 'vec4',\n args: ['vec4 _c0']\n },\n 'combine': {\n returnType: 'vec4',\n args: ['vec4 _c0', 'vec4 _c1']\n },\n 'combineCoord': {\n returnType: 'vec2',\n args: ['vec2 _st', 'vec4 _c0']\n }\n}\n\n*/\n\nmodule.exports = [\n {\n name: 'noise',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 10,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0.1,\n }\n ],\n glsl:\n ` return vec4(vec3(_noise(vec3(_st*scale, offset*time))), 1.0);`\n },\n {\n name: 'voronoi',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 5,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0.3,\n },\n {\n type: 'float',\n name: 'blending',\n default: 0.3,\n }\n ],\n glsl:\n ` vec3 color = vec3(.0);\n // Scale\n _st *= scale;\n // Tile the space\n vec2 i_st = floor(_st);\n vec2 f_st = fract(_st);\n float m_dist = 10.; // minimun distance\n vec2 m_point; // minimum point\n for (int j=-1; j<=1; j++ ) {\n for (int i=-1; i<=1; i++ ) {\n vec2 neighbor = vec2(float(i),float(j));\n vec2 p = i_st + neighbor;\n vec2 point = fract(sin(vec2(dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3))))*43758.5453);\n point = 0.5 + 0.5*sin(time*speed + 6.2831*point);\n vec2 diff = neighbor + point - f_st;\n float dist = length(diff);\n if( dist < m_dist ) {\n m_dist = dist;\n m_point = point;\n }\n }\n }\n // Assign a color using the closest point position\n color += dot(m_point,vec2(.3,.6));\n color *= 1.0 - blending*m_dist;\n return vec4(color, 1.0);`\n },\n {\n name: 'osc',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'frequency',\n default: 60,\n },\n {\n type: 'float',\n name: 'sync',\n default: 0.1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` vec2 st = _st;\n float r = sin((st.x-offset/frequency+time*sync)*frequency)*0.5 + 0.5;\n float g = sin((st.x+time*sync)*frequency)*0.5 + 0.5;\n float b = sin((st.x+offset/frequency+time*sync)*frequency)*0.5 + 0.5;\n return vec4(r, g, b, 1.0);`\n },\n {\n name: 'shape',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'sides',\n default: 3,\n },\n {\n type: 'float',\n name: 'radius',\n default: 0.3,\n },\n {\n type: 'float',\n name: 'smoothing',\n default: 0.01,\n }\n ],\n glsl:\n ` vec2 st = _st * 2. - 1.;\n // Angle and radius from the current pixel\n float a = atan(st.x,st.y)+3.1416;\n float r = (2.*3.1416)/sides;\n float d = cos(floor(.5+a/r)*r-a)*length(st);\n return vec4(vec3(1.0-smoothstep(radius,radius + smoothing + 0.0000001,d)), 1.0);`\n },\n {\n name: 'gradient',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` return vec4(_st, sin(time*speed), 1.0);`\n },\n {\n name: 'src',\n type: 'src',\n inputs: [\n {\n type: 'sampler2D',\n name: 'tex',\n default: NaN,\n }\n ],\n glsl:\n ` // vec2 uv = gl_FragCoord.xy/vec2(1280., 720.);\n return texture2D(tex, fract(_st));`\n },\n {\n name: 'solid',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'r',\n default: 0,\n },\n {\n type: 'float',\n name: 'g',\n default: 0,\n },\n {\n type: 'float',\n name: 'b',\n default: 0,\n },\n {\n type: 'float',\n name: 'a',\n default: 1,\n }\n ],\n glsl:\n ` return vec4(r, g, b, a);`\n },\n {\n name: 'rotate',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'angle',\n default: 10,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` vec2 xy = _st - vec2(0.5);\n float ang = angle + speed *time;\n xy = mat2(cos(ang),-sin(ang), sin(ang),cos(ang))*xy;\n xy += 0.5;\n return xy;`\n },\n {\n name: 'scale',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1.5,\n },\n {\n type: 'float',\n name: 'xMult',\n default: 1,\n },\n {\n type: 'float',\n name: 'yMult',\n default: 1,\n },\n {\n type: 'float',\n name: 'offsetX',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'offsetY',\n default: 0.5,\n }\n ],\n glsl:\n ` vec2 xy = _st - vec2(offsetX, offsetY);\n xy*=(1.0/vec2(amount*xMult, amount*yMult));\n xy+=vec2(offsetX, offsetY);\n return xy;\n `\n },\n {\n name: 'pixelate',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'pixelX',\n default: 20,\n },\n {\n type: 'float',\n name: 'pixelY',\n default: 20,\n }\n ],\n glsl:\n ` vec2 xy = vec2(pixelX, pixelY);\n return (floor(_st * xy) + 0.5)/xy;`\n },\n {\n name: 'posterize',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'bins',\n default: 3,\n },\n {\n type: 'float',\n name: 'gamma',\n default: 0.6,\n }\n ],\n glsl:\n ` vec4 c2 = pow(_c0, vec4(gamma));\n c2 *= vec4(bins);\n c2 = floor(c2);\n c2/= vec4(bins);\n c2 = pow(c2, vec4(1.0/gamma));\n return vec4(c2.xyz, _c0.a);`\n },\n {\n name: 'shift',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'r',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'g',\n default: 0,\n },\n {\n type: 'float',\n name: 'b',\n default: 0,\n },\n {\n type: 'float',\n name: 'a',\n default: 0,\n }\n ],\n glsl:\n ` vec4 c2 = vec4(_c0);\n c2.r = fract(c2.r + r);\n c2.g = fract(c2.g + g);\n c2.b = fract(c2.b + b);\n c2.a = fract(c2.a + a);\n return vec4(c2.rgba);`\n },\n {\n name: 'repeat',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'repeatX',\n default: 3,\n },\n {\n type: 'float',\n name: 'repeatY',\n default: 3,\n },\n {\n type: 'float',\n name: 'offsetX',\n default: 0,\n },\n {\n type: 'float',\n name: 'offsetY',\n default: 0,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(repeatX, repeatY);\n st.x += step(1., mod(st.y,2.0)) * offsetX;\n st.y += step(1., mod(st.x,2.0)) * offsetY;\n return fract(st);`\n },\n {\n name: 'modulateRepeat',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'repeatX',\n default: 3,\n },\n {\n type: 'float',\n name: 'repeatY',\n default: 3,\n },\n {\n type: 'float',\n name: 'offsetX',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'offsetY',\n default: 0.5,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(repeatX, repeatY);\n st.x += step(1., mod(st.y,2.0)) + _c0.r * offsetX;\n st.y += step(1., mod(st.x,2.0)) + _c0.g * offsetY;\n return fract(st);`\n },\n {\n name: 'repeatX',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'reps',\n default: 3,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(reps, 1.0);\n // float f = mod(_st.y,2.0);\n st.y += step(1., mod(st.x,2.0))* offset;\n return fract(st);`\n },\n {\n name: 'modulateRepeatX',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'reps',\n default: 3,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0.5,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(reps, 1.0);\n // float f = mod(_st.y,2.0);\n st.y += step(1., mod(st.x,2.0)) + _c0.r * offset;\n return fract(st);`\n },\n {\n name: 'repeatY',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'reps',\n default: 3,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(1.0, reps);\n // float f = mod(_st.y,2.0);\n st.x += step(1., mod(st.y,2.0))* offset;\n return fract(st);`\n },\n {\n name: 'modulateRepeatY',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'reps',\n default: 3,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0.5,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(reps, 1.0);\n // float f = mod(_st.y,2.0);\n st.x += step(1., mod(st.y,2.0)) + _c0.r * offset;\n return fract(st);`\n },\n {\n name: 'kaleid',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'nSides',\n default: 4,\n }\n ],\n glsl:\n ` vec2 st = _st;\n st -= 0.5;\n float r = length(st);\n float a = atan(st.y, st.x);\n float pi = 2.*3.1416;\n a = mod(a,pi/nSides);\n a = abs(a-pi/nSides/2.);\n return r*vec2(cos(a), sin(a));`\n },\n {\n name: 'modulateKaleid',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'nSides',\n default: 4,\n }\n ],\n glsl:\n ` vec2 st = _st - 0.5;\n float r = length(st);\n float a = atan(st.y, st.x);\n float pi = 2.*3.1416;\n a = mod(a,pi/nSides);\n a = abs(a-pi/nSides/2.);\n return (_c0.r+r)*vec2(cos(a), sin(a));`\n },\n {\n name: 'scroll',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'scrollX',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'scrollY',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'speedX',\n default: 0,\n },\n {\n type: 'float',\n name: 'speedY',\n default: 0,\n }\n ],\n glsl:\n `\n _st.x += scrollX + time*speedX;\n _st.y += scrollY + time*speedY;\n return fract(_st);`\n },\n {\n name: 'scrollX',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'scrollX',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` _st.x += scrollX + time*speed;\n return fract(_st);`\n },\n {\n name: 'modulateScrollX',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'scrollX',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` _st.x += _c0.r*scrollX + time*speed;\n return fract(_st);`\n },\n {\n name: 'scrollY',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'scrollY',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` _st.y += scrollY + time*speed;\n return fract(_st);`\n },\n {\n name: 'modulateScrollY',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'scrollY',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` _st.y += _c0.r*scrollY + time*speed;\n return fract(_st);`\n },\n {\n name: 'add',\n type: 'combine',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1,\n }\n ],\n glsl:\n ` return (_c0+_c1)*amount + _c0*(1.0-amount);`\n },\n {\n name: 'sub',\n type: 'combine',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1,\n }\n ],\n glsl:\n ` return (_c0-_c1)*amount + _c0*(1.0-amount);`\n },\n {\n name: 'layer',\n type: 'combine',\n inputs: [\n \n ],\n glsl:\n ` return vec4(mix(_c0.rgb, _c1.rgb, _c1.a), clamp(_c0.a + _c1.a, 0.0, 1.0));`\n },\n {\n name: 'blend',\n type: 'combine',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 0.5,\n }\n ],\n glsl:\n ` return _c0*(1.0-amount)+_c1*amount;`\n },\n {\n name: 'mult',\n type: 'combine',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1,\n }\n ],\n glsl:\n ` return _c0*(1.0-amount)+(_c0*_c1)*amount;`\n },\n {\n name: 'diff',\n type: 'combine',\n inputs: [\n \n ],\n glsl:\n ` return vec4(abs(_c0.rgb-_c1.rgb), max(_c0.a, _c1.a));`\n },\n {\n name: 'modulate',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 0.1,\n }\n ],\n glsl:\n ` // return fract(st+(_c0.xy-0.5)*amount);\n return _st + _c0.xy*amount;`\n },\n {\n name: 'modulateScale',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'multiple',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 1,\n }\n ],\n glsl:\n ` vec2 xy = _st - vec2(0.5);\n xy*=(1.0/vec2(offset + multiple*_c0.r, offset + multiple*_c0.g));\n xy+=vec2(0.5);\n return xy;`\n },\n {\n name: 'modulatePixelate',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'multiple',\n default: 10,\n },\n {\n type: 'float',\n name: 'offset',\n default: 3,\n }\n ],\n glsl:\n ` vec2 xy = vec2(offset + _c0.x*multiple, offset + _c0.y*multiple);\n return (floor(_st * xy) + 0.5)/xy;`\n },\n {\n name: 'modulateRotate',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'multiple',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` vec2 xy = _st - vec2(0.5);\n float angle = offset + _c0.x * multiple;\n xy = mat2(cos(angle),-sin(angle), sin(angle),cos(angle))*xy;\n xy += 0.5;\n return xy;`\n },\n {\n name: 'modulateHue',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1,\n }\n ],\n glsl:\n ` return _st + (vec2(_c0.g - _c0.r, _c0.b - _c0.g) * amount * 1.0/resolution);`\n },\n {\n name: 'invert',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1,\n }\n ],\n glsl:\n ` return vec4((1.0-_c0.rgb)*amount + _c0.rgb*(1.0-amount), _c0.a);`\n },\n {\n name: 'contrast',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1.6,\n }\n ],\n glsl:\n ` vec4 c = (_c0-vec4(0.5))*vec4(amount) + vec4(0.5);\n return vec4(c.rgb, _c0.a);`\n },\n {\n name: 'brightness',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 0.4,\n }\n ],\n glsl:\n ` return vec4(_c0.rgb + vec3(amount), _c0.a);`\n },\n {\n name: 'mask',\n type: 'combine',\n inputs: [\n \n ],\n glsl:\n ` float a = _luminance(_c1.rgb);\n return vec4(_c0.rgb*a, a*_c0.a);`\n },\n \n {\n name: 'luma',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'threshold',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'tolerance',\n default: 0.1,\n }\n ],\n glsl:\n ` float a = smoothstep(threshold-(tolerance+0.0000001), threshold+(tolerance+0.0000001), _luminance(_c0.rgb));\n return vec4(_c0.rgb*a, a);`\n },\n {\n name: 'thresh',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'threshold',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'tolerance',\n default: 0.04,\n }\n ],\n glsl:\n ` return vec4(vec3(smoothstep(threshold-(tolerance+0.0000001), threshold+(tolerance+0.0000001), _luminance(_c0.rgb))), _c0.a);`\n },\n {\n name: 'color',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'r',\n default: 1,\n },\n {\n type: 'float',\n name: 'g',\n default: 1,\n },\n {\n type: 'float',\n name: 'b',\n default: 1,\n },\n {\n type: 'float',\n name: 'a',\n default: 1,\n }\n ],\n glsl:\n ` vec4 c = vec4(r, g, b, a);\n vec4 pos = step(0.0, c); // detect whether negative\n // if > 0, return r * _c0\n // if < 0 return (1.0-r) * _c0\n return vec4(mix((1.0-_c0)*abs(c), c*_c0, pos));`\n },\n {\n name: 'saturate',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 2,\n }\n ],\n glsl:\n ` const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(_c0.rgb, W));\n return vec4(mix(intensity, _c0.rgb, amount), _c0.a);`\n },\n {\n name: 'hue',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'hue',\n default: 0.4,\n }\n ],\n glsl:\n ` vec3 c = _rgbToHsv(_c0.rgb);\n c.r += hue;\n // c.r = fract(c.r);\n return vec4(_hsvToRgb(c), _c0.a);`\n },\n {\n name: 'colorama',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 0.005,\n }\n ],\n glsl:\n ` vec3 c = _rgbToHsv(_c0.rgb);\n c += vec3(amount);\n c = _hsvToRgb(c);\n c = fract(c);\n return vec4(c, _c0.a);`\n },\n {\n name: 'prev',\n type: 'src',\n inputs: [\n \n ],\n glsl:\n ` return texture2D(prevBuffer, fract(_st));`\n },\n {\n name: 'sum',\n type: 'color',\n inputs: [\n {\n type: 'vec4',\n name: 'scale',\n default: 1,\n }\n ],\n glsl:\n ` vec4 v = _c0 * s;\n return v.r + v.g + v.b + v.a;\n }\n float sum(vec2 _st, vec4 s) { // vec4 is not a typo, because argument type is not overloaded\n vec2 v = _st.xy * s.xy;\n return v.x + v.y;`\n },\n {\n name: 'r',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` return vec4(_c0.r * scale + offset);`\n },\n {\n name: 'g',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` return vec4(_c0.g * scale + offset);`\n },\n {\n name: 'b',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` return vec4(_c0.b * scale + offset);`\n },\n {\n name: 'a',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` return vec4(_c0.a * scale + offset);`\n }\n ]","const log = require('./log.js').log\n\nmodule.exports = {\n eval: (arg, callback) => {\n var self = this\n\n // wrap everything in an async function\n var jsString = `(async() => {\n ${arg}\n})().catch(${(err) => log(err.message, \"log-error\")})`\n var isError = false\n try {\n eval(jsString)\n // log(jsString)\n log('')\n } catch (e) {\n isError = true\n console.log(\"logging\", e)\n // var err = e.constructor('Error in Evaled Script: ' + e.message);\n // console.log(err.lineNumber)\n log(e.message, \"log-error\")\n //console.log('ERROR', JSON.stringify(e))\n }\n // console.log('callback is', callback)\n if(callback) callback(jsString, isError)\n }\n}\n","const html = require('choo/html')\nconst raw = require('choo/html/raw')\nconst toolbar = require('./toolbar.js')\n\nconst link = (url) => `href=${url} target=_blank`\nmodule.exports = function mainView(state, emit) {\n const { t, languages } = state.translation\n const textDirection = state.translation.selectedLanguage === 'ar' && state.showInfo === true ? 'rtl': 'ltr'\n\n const langArray = Object.entries(languages)\n return html`\n
\n
\n
\n ${state.showInfo && langArray.length > 1 ? html`
${langArray.map(([key, val]) => html`\n
emit('set language', key)}>${val}
\n `)}
` : html`
` }\n ${toolbar(state, emit)}\n
\n
\n
\n

${t('info.title')}

\n

${t('info.subtitle')}

\n
///////////////////////////////////////////////////////////
\n

${t('info.description')}

\n

${t('info.get-started-title')}
    \n
  1. ${t('info.get-started-list.0')}
  2. \n
  3. ${t('info.get-started-list.1')}
  4. \n
  5. ${t('info.get-started-list.2')}
  6. \n
\n

\n\n

///////////////////////////////////////////////////////////


\n ${t('info.description-detailed')}\n

\n

${t('info.uses')}

    \n ${t('info.uses-list', { returnObjects: true }).map((text) => html`
  • ${text}
  • `)}\n

\n \n

${raw(t('info.author', { author: `href=https://ojack.xyz class=olivia target=_blank`}))}

\n

${raw(t('info.more-info', {\n docs: link(\"https://hydra.ojack.xyz/docs\"),\n functions: link(\"https://hydra.ojack.xyz/api\"),\n gallery: link(\"https://twitter.com/hydra_patterns\"),\n repo: link(\"https://github.com/hydra-synth/hydra\"),\n pixeljam: link(\"http://pixeljam.glitch.me/\"),\n garden: link(\"https://hydra.ojack.xyz/garden\"),\n 'hydra-book': link(\"https://hydra-book.glitch.me/\"),\n \"tutorials\": link(\"https://github.com/ojack/hydra/blob/master/examples/README.md\")\n }))}

\n

${raw(t('info.more-info-forums', {\n discord: link(\"https://discord.gg/ZQjfHkNHXC\"),\n facebook: link(\"https://www.facebook.com/groups/1084288351771117/\")\n }))}

\n\n

${raw(t('info.support', {\n \"open-collective\": link(\"https://opencollective.com/hydra-synth\")\n }))}

\n
\n
\n
\n
\n`\n}\n\n\n// \n// module.exports = function mainView(state, emit) {\n// return html`\n//
\n//
\n//
\n//
\n// ${toolbar(state, emit)}\n//
\n//
\n//
\n//

hydra

\n//

live coding networked visuals

\n//
///////////////////////////////////////////////////////////
\n//

Hydra is a platform for live coding visuals, in which each connected browser window can be used as a node of a modular and distributed video synthesizer.

\n//

To get started:
    \n//
  1. Close this window
  2. \n//
  3. Change some numbers
  4. \n//
  5. Type Ctrl + Shift + Enter
  6. \n//
\n//

\n \n//

///////////////////////////////////////////////////////////


Built using WebRTC (peer-to-peer web streaming) and WebGL, hydra allows each connected browser/device/person to output a video signal or stream, and receive and modify streams from other browsers/devices/people. The API is inspired by analog modular synthesis, in which multiple visual sources (oscillators, cameras, application windows, other connected windows) can be transformed, modulated, and composited via combining sequences of functions.

\n//

Features:

    \n//
  • Written in javascript and compatible with other javascript libraries
  • \n//
  • Available as a platform as well as a set of standalone modules
  • \n//
  • Cross-platform and requires no installation (runs in the browser)
  • \n//
  • Also available as a package for live coding from within atom text editor
  • \n//
  • Experimental and forever evolving !!
  • \n//
\n//

Created by olivia.

\n//

For more information and instructions, see:\n// the documentation on github,\n// a list of hydra functions,\n// \n// a gallery of user-generated sketches,\n// PIXELJAM collaborative editor,\n// Hydra Book, and more tutorials and examples.

\n//

There is also an active Discord server and facebook group for hydra users+contributors.

\n \n//

If you enjoy using Hydra, please consider supporting continued development ${'<3 <3'}

\n//
\n//
\n//
\n//
\n// `\n// }","const html = require('choo/html')\nconst info = require('./info.js')\nconst Hydra = require('./Hydra.js')\nconst Editor = require('./EditorComponent.js')\n\nmodule.exports = function mainView(state, emit) {\n return html`\n \n
\n ${state.cache(Hydra, 'hydra-canvas').render(state, emit)}\n \n
\n ${info(state, emit)}\n ${state.cache(Editor, 'editor').render(state, emit)}\n \n `\n}","const html = require('choo/html')\n\nmodule.exports = function toolbar(state, emit) {\n const hidden = state.showInfo ? 'hidden' : ''\n\n const { t } = state.translation\n\n const dispatch = (eventName) => (e) => emit(eventName, e)\n\n const icon = (id, className, title, event) => html`\n `\n\n const toggleInfo = state.showInfo ? icon(\"close\", \"fa-times\", t('toolbar.hide-info'), 'toggle info') : icon(\"close\", \"fa-question-circle\", t('toolbar.show-info'), 'toggle info') \n return html`
\n ${icon(\"run\", `fa-play-circle ${hidden}`, t('toolbar.run'), 'editor:evalAll')}\n ${icon(\"clear\", `fa fa-trash ${hidden}`, t('toolbar.clear'), 'editor:clearAll')}\n ${icon(\"shuffle\", `fa-random`, t('toolbar.shuffle'), 'gallery:showExample')}\n ${icon(\"mutator\", `fa-dice ${hidden}`, t('toolbar.random'), 'editor:randomize')}\n ${state.serverURL === null ? '' : icon(\"share\", `fa-upload ${hidden}`, t('toolbar.upload'), 'gallery:shareSketch')}\n ${toggleInfo}\n
`\n\n // ${icon(\"share\", `fa-upload ${hidden}`, t('toolbar.upload'), 'gallery:shareSketch')}\n\n}"],"mappings":"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A,gBAAAA,OAAA,UACA00H,QAAAzuH,KAAA4tH,mBAAA7zH,MACA,CAEAy0H,cAAA1sF,SAAA,SAAA88C,IACA,GAAA6tC,MAAA10G,QAAA6mE,IAAA,EAAA6vC,QAAA7N,OAAAgN,mBAAAhvC,IACA,IACA,OAAA6tC,KACA,KAGA,OAAAgB,YACA,CA/IA,GAiJA,IAAAiB,KAAA,EACAvE,KAAA,8GACAwE,GAAA,MACA/vC,GAAA,GACA,CACAurC,KAAA,2UACAwE,GAAA,MACA/vC,GAAA,GACA,CACAurC,KAAA,mHACAwE,GAAA,IACA/vC,GAAA,GACA,CACAurC,KAAA,2CACAwE,GAAA,QACA/vC,GAAA,GACA,CACAurC,KAAA,OACAwE,GAAA,iBACA/vC,GAAA,GACA,CACAurC,KAAA,YACAwE,GAAA,QACA/vC,GAAA,GACA,CACAurC,KAAA,aACAwE,GAAA,QACA/vC,GAAA,GACA,CACAurC,KAAA,OACAwE,GAAA,UACA/vC,GAAA,GACA,CACAurC,KAAA,OACAwE,GAAA,MACA/vC,GAAA,GACA,CACAurC,KAAA,OACAwE,GAAA,aACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,WACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,MACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,MACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,UACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,SACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,QACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,MACA/vC,GAAA,IACA,CACAurC,KAAA,QACAwE,GAAA,QACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,YACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,MACA/vC,GAAA,GACA,CACAurC,KAAA,OACAwE,GAAA,SACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,UACA/vC,GAAA,IACA,CACAurC,KAAA,YACAwE,GAAA,YACA/vC,GAAA,KA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CA3+J,KAAAi9C,KAAA,SAAAorH,YAAA,GACA,GAEA,CAEA1J,SACA,MAAAzgI,KAAA,GAAA3+B,MAAArF,KAAA8V,WACAkuB,KAAA,OAAAl+B,KAAAwhJ,IAAA,KAAAtjH,KAAA,GACAqe,MAAA1d,MAAA,KAAAX,KACA,EAGAsgI,KAAA+J,iBAAAnyD,gBAOAooD,KAAA7iC,OAAA,CACA6sC,WAAA,CACA,CACAC,KAAA,CACA,+BACA,sCAIAC,aAAA,gBAGAlK,KAAAM,cAAA,GAEA1kK,OAAAH,QAAAukK,I,6LCrhCAvkK,QAAAqxG,sBACArxG,QAAA2kE,UACA3kE,QAAAsxG,UACAtxG,QAAAuxG,oBACAvxG,QAAAoiD,QAAAqvD,eACAzxG,QAAAgzG,QAAA,MACA,IAAAluE,OAAA,MAEA,WACA,IAAAA,OAAA,CACAA,OAAA,KACA30B,QAAAC,KAAA,wIACA,EAEA,EATA,GAeApQ,QAAA+lC,OAAA,CACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAYA,SAAAwrE,YAIA,UAAAzuD,SAAA,aAAAA,OAAAne,UAAAme,OAAAne,QAAA5zB,OAAA,YAAA+xC,OAAAne,QAAA+pI,QAAA,CACA,WACA,CAGA,UAAAzmH,YAAA,aAAAA,UAAAioC,WAAAjoC,UAAAioC,UAAAr2C,cAAAnjC,MAAA,0BACA,YACA,CAIA,cAAAk2C,WAAA,aAAAA,SAAA6L,iBAAA7L,SAAA6L,gBAAA/wB,OAAAklB,SAAA6L,gBAAA/wB,MAAAgqE,yBAEA5uD,SAAA,aAAA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KAAA,SACAslC,QAAA,KAGAqyJ,KACA,oEAEA,CACA33L,KAAA,UACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,QACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,WACAslC,QAAA,KAGAqyJ,KACA,k3BA2BA,CACA33L,KAAA,MACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,YACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,OACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,2QAMA,CACA33L,KAAA,QACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,QACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,YACAslC,QAAA,MAGAqyJ,KACA,qSAOA,CACA33L,KAAA,WACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,8CAEA,CACA33L,KAAA,MACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,YACAxL,KAAA,MACAslC,QAAAy3C,MAGA46G,KACA,gGAGA,CACA33L,KAAA,QACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,IAGAqyJ,KACA,+BAEA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,qKAMA,CACA33L,KAAA,QACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,KAGAqyJ,KACA,0JAMA,CACA33L,KAAA,WACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,+EAGA,CACA33L,KAAA,YACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,OACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,KAGAqyJ,KACA,mLAOA,CACA33L,KAAA,QACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,IACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,IAGAqyJ,KACA,+KAOA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAGAqyJ,KACA,wKAKA,CACA33L,KAAA,iBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,KAGAqyJ,KACA,wLAKA,CACA33L,KAAA,UACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,OACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,mJAKA,CACA33L,KAAA,kBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,OACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,4JAKA,CACA33L,KAAA,UACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,OACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,mJAKA,CACA33L,KAAA,kBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,OACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,4JAKA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,gOASA,CACA33L,KAAA,iBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,6NAQA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,yGAKA,CACA33L,KAAA,UACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,8DAGA,CACA33L,KAAA,kBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,oEAGA,CACA33L,KAAA,UACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,8DAGA,CACA33L,KAAA,kBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,oEAGA,CACA33L,KAAA,MACAwL,KAAA,UACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,kDAEA,CACA33L,KAAA,MACAwL,KAAA,UACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,kDAEA,CACA33L,KAAA,QACAwL,KAAA,UACAgqL,OAAA,GAGAmC,KACA,iFAEA,CACA33L,KAAA,QACAwL,KAAA,UACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,0CAEA,CACA33L,KAAA,OACAwL,KAAA,UACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,gDAEA,CACA33L,KAAA,OACAwL,KAAA,UACAgqL,OAAA,GAGAmC,KACA,4DAEA,CACA33L,KAAA,WACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,kFAGA,CACA33L,KAAA,gBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,WACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,+IAKA,CACA33L,KAAA,mBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,WACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,iHAGA,CACA33L,KAAA,iBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,WACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,qLAMA,CACA33L,KAAA,cACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,mFAEA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,uEAEA,CACA33L,KAAA,WACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,MAGAqyJ,KACA,0FAGA,CACA33L,KAAA,aACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,kDAEA,CACA33L,KAAA,OACAwL,KAAA,UACAgqL,OAAA,GAGAmC,KACA,2EAIA,CACA33L,KAAA,OACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,YACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,YACAslC,QAAA,KAGAqyJ,KACA,oJAGA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,YACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,YACAslC,QAAA,MAGAqyJ,KACA,mIAEA,CACA33L,KAAA,QACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,IAGAqyJ,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"} \ No newline at end of file +{"version":3,"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","module","devtools","choo","store","languageStore","mainView","app","use","route","mount","_arrayLikeToArray","arr","len","arr2","Array","__esModule","_arrayWithHoles","isArray","_assertThisInitialized","self","ReferenceError","_classCallCheck","instance","Constructor","TypeError","toPropertyKey","_defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","prototype","_defineProperty","obj","value","_getPrototypeOf","setPrototypeOf","getPrototypeOf","bind","__proto__","_inherits","subClass","superClass","create","constructor","_iterableToArray","iter","Symbol","iterator","from","_nonIterableRest","_typeof","assertThisInitialized","_possibleConstructorReturn","_setPrototypeOf","arrayWithHoles","iterableToArray","unsupportedIterableToArray","nonIterableRest","_toArray","_toPrimitive","input","hint","prim","toPrimitive","undefined","res","String","Number","_toPropertyKey","arg","arrayLikeToArray","_unsupportedIterableToArray","minLen","toString","slice","name","test","global","factory","define","amd","globalThis","acorn","this","astralIdentifierCodes","astralIdentifierStartCodes","nonASCIIidentifierChars","nonASCIIidentifierStartChars","reservedWords","strict","strictBind","ecma5AndLessKeywords","keywords$1","keywordRelationalOperator","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","isInAstralSet","set","pos","isIdentifierStart","astral","fromCharCode","isIdentifierChar","TokenType","label","conf","keyword","beforeExpr","startsExpr","isLoop","isAssign","prefix","postfix","binop","updateContext","prec","keywords","kw","options","types$1","num","regexp","string","privateId","eof","bracketL","bracketR","braceL","braceR","parenL","parenR","comma","semi","colon","dot","question","questionDot","arrow","template","invalidTemplate","ellipsis","backQuote","dollarBraceL","eq","assign","incDec","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","plusMin","modulo","star","slash","starstar","coalesce","_break","_case","_catch","_continue","_debugger","_default","_do","_else","_finally","_for","_function","_if","_return","_switch","_throw","_try","_var","_const","_while","_with","_new","_this","_super","_class","_extends","_export","_import","_null","_true","_false","_in","_instanceof","_void","_delete","lineBreak","lineBreakG","source","isNewLine","nextLineBreak","end","next","charCodeAt","nonASCIIwhitespace","skipWhiteSpace","ref","hasOwnProperty","hasOwn","propName","wordsRegexp","words","replace","codePointToString","loneSurrogate","Position","line","col","column","offset","SourceLocation","start","sourceFile","getLineInfo","cur","nextBreak","defaultOptions","ecmaVersion","sourceType","onInsertedSemicolon","onTrailingComma","allowReserved","allowReturnOutsideFunction","allowImportExportEverywhere","allowAwaitOutsideFunction","allowSuperOutsideMethod","allowHashBang","locations","onToken","onComment","ranges","program","directSourceFile","preserveParens","warnedAboutEcmaVersion","getOptions","opts","opt","console","warn","tokens","token","push","pushComment","array","block","text","startLoc","endLoc","comment","type","loc","range","SCOPE_TOP","SCOPE_FUNCTION","SCOPE_ASYNC","SCOPE_GENERATOR","SCOPE_ARROW","SCOPE_SIMPLE_CATCH","SCOPE_SUPER","SCOPE_DIRECT_SUPER","SCOPE_CLASS_STATIC_BLOCK","SCOPE_VAR","functionFlags","async","generator","BIND_NONE","BIND_VAR","BIND_LEXICAL","BIND_FUNCTION","BIND_SIMPLE_CATCH","BIND_OUTSIDE","Parser","startPos","reserved","reservedStrict","reservedWordsStrict","reservedWordsStrictBind","containsEsc","lineStart","lastIndexOf","curLine","split","curPosition","lastTokEndLoc","lastTokStartLoc","lastTokStart","lastTokEnd","context","initialContext","exprAllowed","inModule","strictDirective","potentialArrowAt","potentialArrowInForAwait","yieldPos","awaitPos","awaitIdentPos","labels","undefinedExports","skipLineComment","scopeStack","enterScope","regexpState","privateNameStack","prototypeAccessors","inFunction","inGenerator","inAsync","canAwait","allowSuper","allowDirectSuper","treatFunctionsAsVar","allowNewDotTarget","inClassStaticBlock","parse","node","startNode","nextToken","parseTopLevel","get","currentVarScope","flags","inClassFieldInit","scope","currentThisScope","treatFunctionsAsVarInScope","currentScope","extend","plugins","arguments","cls","parseExpressionAt","parser","parseExpression","tokenizer","defineProperties","pp$9","literal","lastIndex","exec","match","spaceAfter","index","charAt","eat","isContextual","eatContextual","expectContextual","unexpected","canInsertSemicolon","insertSemicolon","semicolon","afterTrailingComma","tokType","notNext","expect","raise","DestructuringErrors","shorthandAssign","trailingComma","parenthesizedAssign","parenthesizedBind","doubleProto","checkPatternErrors","refDestructuringErrors","raiseRecoverable","parens","checkExpressionErrors","andThrow","checkYieldAwaitInDefaultParams","isSimpleAssignTarget","expr","expression","pp$8","body","stmt","parseStatement","list","keys","adaptDirectivePrologue","finishNode","loopLabel","kind","switchLabel","isLet","skip","nextCh","ident","isAsyncFunction","after","topLevel","starttype","parseBreakContinueStatement","parseDebuggerStatement","parseDoStatement","parseForStatement","parseFunctionStatement","parseClass","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVarStatement","parseWhileStatement","parseWithStatement","parseBlock","parseEmptyStatement","parseExpressionStatement","parseImport","parseExport","maybeName","parseLabeledStatement","isBreak","parseIdent","lab","pop","parseParenExpression","awaitAt","parseFor","init$1","parseVar","declarations","await","parseForIn","startsWithLet","isForOf","init","toAssignable","checkLValPattern","isAsync","declarationPosition","parseFunction","FUNC_STATEMENT","FUNC_HANGING_STATEMENT","consequent","alternate","argument","discriminant","cases","sawDefault","isCase","exitScope","empty$1","parseCatchClauseParam","param","parseBindingAtom","simple","handler","clause","finalizer","allowMissingInitializer","object","i$1","label$1","statementStart","indexOf","createNewLexicalScope","exitStrict","update","isForIn","id","left","right","parseMaybeAssign","isFor","decl","parseVarId","FUNC_NULLABLE_ID","statement","allowExpressionBody","forInit","initFunction","checkLValSimple","oldYieldPos","oldAwaitPos","oldAwaitIdentPos","parseFunctionParams","parseFunctionBody","params","parseBindingList","isStatement","oldStrict","parseClassId","parseClassSuper","privateNameMap","enterClassBody","classBody","hadConstructor","element","parseClassElement","isPrivateNameConflicted","exitClassBody","constructorAllowsSuper","keyName","isGenerator","isStatic","parseClassStaticBlock","isClassElementNameStart","static","lastValue","computed","startNodeAt","parseClassElementName","isConstructor","checkKeyName","allowsDirectSuper","parseClassMethod","parseClassField","parsePrivateIdent","parsePropertyName","method","parseMethod","field","oldLabels","parseExprSubscripts","declared","used","parent","curr","parseExportAllDeclaration","exported","parseModuleExportName","checkExport","parseExprAtom","declaration","parseExportDefaultDeclaration","shouldParseExportStatement","parseExportDeclaration","checkVariableExport","specifiers","parseExportSpecifiers","spec","checkUnreserved","local","checkLocalExport","fNode","cNode","checkPatternExport","pat","properties","prop","list$1","elements","elt","decls","parseExportSpecifier","nodes","first","parseImportSpecifiers","parseImportSpecifier","imported","parseImportDefaultSpecifier","parseImportNamespaceSpecifier","stringLiteral","parseLiteral","statements","isDirectiveCandidate","directive","raw","pp$7","isBinding","toAssignableList","operator","exprList","last","parseSpread","parseRestBinding","parseObj","close","allowEmpty","allowTrailingComma","allowModifiers","elts","rest","parseBindingListItem","parseAssignableListItem","elem","parseMaybeDefault","bindingType","checkClashes","isBind","declareName","checkLValInnerPattern","TokContext","isExpr","preserveSpace","override","types","b_stat","b_expr","b_tmpl","p_stat","p_expr","q_tmpl","tryReadTemplateToken","f_stat","f_expr","f_expr_gen","f_gen","pp$6","curContext","braceIsBlock","prevType","inGeneratorContext","overrideContext","tokenCtx","out","statementParens","allowed","pp$5","checkPropClash","propHash","shorthand","proto","other","redefinition","expressions","afterLeftParse","parseYield","ownDestructuringErrors","oldParenAssign","oldTrailingComma","oldDoubleProto","parseMaybeConditional","parseExprOps","parseMaybeUnary","parseExprOp","leftStartPos","leftStartLoc","minPrec","logical","op","buildBinary","sawUnary","parseAwait","isPrivateFieldAccess","node$1","property","result","parseSubscripts","base","noCalls","maybeAsyncArrow","optionalChained","parseSubscript","optional","chainNode","shouldParseAsyncArrow","parseSubscriptAsyncArrow","parseArrowExpression","optionalSupported","parseExprList","callee","node$2","tag","quasi","parseTemplate","isTagged","forNew","readRegexp","canBeArrow","regex","pattern","parseParenAndDistinguishExpression","parseNew","parseExprImport","parseExprAtomDefault","meta","parseDynamicImport","parseImportMeta","errorPos","bigint","val","shouldParseArrow","innerStartPos","innerStartLoc","lastIsComma","spreadStart","parseParenItem","innerEndPos","innerEndLoc","parseParenArrowList","finishNodeAt","par","item","empty","parseTemplateElement","cooked","tail","curElt","quasis","isAsyncProp","isPattern","parseProperty","parsePropertyValue","parseGetterSetter","paramCount","copyNode","isArrowFunction","isMethod","isExpression","useStrict","checkParams","nonSimple","isSimpleParamList","allowDuplicates","nameHash","re","liberal","parseIdentNode","delegate","pp$4","message","err","SyntaxError","raisedAt","pp$3","Scope","var","lexical","functions","redeclared","scope$1","scope$2","scope$3","Node","pp$2","newNode","ecma9BinaryProperties","ecma10BinaryProperties","ecma11BinaryProperties","ecma12BinaryProperties","ecma13BinaryProperties","ecma14BinaryProperties","unicodeBinaryProperties","ecma14BinaryPropertiesOfStrings","unicodeBinaryPropertiesOfStrings","unicodeGeneralCategoryValues","ecma9ScriptValues","ecma10ScriptValues","ecma11ScriptValues","ecma12ScriptValues","ecma13ScriptValues","ecma14ScriptValues","unicodeScriptValues","data","buildUnicodeData","d","binary","binaryOfStrings","nonBinary","General_Category","Script","Script_Extensions","gc","sc","scx","pp$1","RegExpValidationState","validFlags","unicodeProperties","switchU","switchV","switchN","lastIntValue","lastStringValue","lastAssertionIsQuantifiable","numCapturingParens","maxBackReference","groupNames","backReferenceNames","reset","unicodeSets","unicode","at","forceU","s","l","nextIndex","current","lookahead","advance","ch","eatChars","chs","validateRegExpFlags","state","v","flag","validateRegExpPattern","regexp_pattern","regexp_disjunction","regexp_alternative","regexp_eatQuantifier","regexp_eatTerm","regexp_eatAssertion","regexp_eatAtom","regexp_eatExtendedAtom","lookbehind","noError","regexp_eatQuantifierPrefix","regexp_eatBracedQuantifier","min","max","regexp_eatDecimalDigits","regexp_eatPatternCharacters","regexp_eatReverseSolidusAtomEscape","regexp_eatCharacterClass","regexp_eatUncapturingGroup","regexp_eatCapturingGroup","regexp_eatAtomEscape","regexp_groupSpecifier","regexp_eatInvalidBracedQuantifier","regexp_eatExtendedPatternCharacter","regexp_eatSyntaxCharacter","isSyntaxCharacter","regexp_eatGroupName","regexp_eatRegExpIdentifierName","regexp_eatRegExpIdentifierStart","regexp_eatRegExpIdentifierPart","regexp_eatRegExpUnicodeEscapeSequence","isRegExpIdentifierStart","isRegExpIdentifierPart","regexp_eatBackReference","regexp_eatCharacterClassEscape","regexp_eatCharacterEscape","regexp_eatKGroupName","regexp_eatDecimalEscape","regexp_eatControlEscape","regexp_eatCControlLetter","regexp_eatZero","regexp_eatHexEscapeSequence","regexp_eatLegacyOctalEscapeSequence","regexp_eatIdentityEscape","regexp_eatControlLetter","isDecimalDigit","isControlLetter","regexp_eatFixedHexDigits","lead","leadSurrogateEnd","trail","regexp_eatHexDigits","isValidUnicode","CharSetNone","CharSetOk","CharSetString","isCharacterClassEscape","negate","regexp_eatUnicodePropertyValueExpression","regexp_eatUnicodePropertyName","regexp_eatUnicodePropertyValue","regexp_validateUnicodePropertyNameAndValue","regexp_eatLoneUnicodePropertyNameOrValue","nameOrValue","regexp_validateUnicodePropertyNameOrValue","isUnicodePropertyNameCharacter","isUnicodePropertyValueCharacter","regexp_classContents","regexp_classSetExpression","regexp_nonEmptyClassRanges","regexp_eatClassAtom","regexp_eatClassEscape","ch$1","isOctalDigit","regexp_eatClassControlLetter","subResult","regexp_eatClassSetRange","regexp_eatClassSetOperand","regexp_eatClassSetCharacter","regexp_eatClassStringDisjunction","regexp_eatNestedClass","result$1","regexp_classStringDisjunctionContents","regexp_classString","count","regexp_eatClassSetReservedPunctuator","isClassSetReservedDoublePunctuatorCharacter","isClassSetSyntaxCharacter","isClassSetReservedPunctuator","isHexDigit","hexToInt","regexp_eatOctalDigit","n1","n2","Token","pp","ignoreEscapeSequenceInKeyword","getToken","this$1$1","done","skipSpace","finishToken","readToken","fullCharCodeAtPos","readWord","getTokenFromCode","skipBlockComment","startSkip","loop","readToken_dot","readNumber","next2","readToken_slash","finishOp","readToken_mult_modulo_exp","size","tokentype","readToken_pipe_amp","readToken_caret","readToken_plus_min","readToken_lt_gt","readToken_eq_excl","readToken_question","next2$1","readToken_numberSign","readWord1","readRadixNumber","readString","str","escaped","inClass","flagsStart","readInt","radix","maybeLegacyOctalNumericLiteral","allowSeparators","isLegacyOctalNumericLiteral","total","lastCode","Infinity","stringToNumber","parseInt","parseFloat","stringToBigInt","BigInt","startsWithDot","octal","val$1","readCodePoint","codePos","readHexChar","invalidStringToken","quote","chunkStart","readEscapedChar","INVALID_TEMPLATE_ESCAPE_ERROR","inTemplateElement","readTmplToken","readInvalidTemplateToken","position","inTemplate","octalStr","substr","word","escStart","esc","version","tokTypes","keywordTypes","tokContexts","callback","err_cb","bail","noop","proxy","arraybuffer","bytes","byteLength","ArrayBuffer","abv","Uint8Array","ii","buffer","objectAssign","compare","b","x","y","Math","isBuffer","Buffer","_isBuffer","util","pSlice","functionsHaveNames","foo","pToString","isView","arrbuf","DataView","assert","ok","getName","func","isFunction","AssertionError","actual","expected","generatedMessage","getMessage","stackStartFunction","fail","captureStackTrace","stack","fn_name","idx","next_line","substring","inherits","truncate","inspect","something","rawname","equal","notEqual","deepEqual","_deepEqual","deepStrictEqual","memos","isDate","getTime","isRegExp","multiline","ignoreCase","Float32Array","Float64Array","actualIndex","objEquiv","isArguments","actualVisitedObjects","isPrimitive","aIsArgs","bIsArgs","ka","objectKeys","kb","sort","notDeepEqual","notDeepStrictEqual","strictEqual","notStrictEqual","expectedException","isPrototypeOf","_tryBlock","error","_throws","shouldThrow","userProvidedMessage","isUnwantedException","isError","isUnexpectedException","throws","doesNotThrow","ifError","ctor","superCtor","super_","TempCtor","copy","fill","readUInt8","formatRegExp","format","isString","objects","join","args","JSON","stringify","_","isNull","isObject","deprecate","fn","msg","isUndefined","process","apply","noDeprecation","warned","deprecated","throwDeprecation","traceDeprecation","trace","debugs","debugEnviron","debuglog","env","NODE_DEBUG","toUpperCase","pid","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","customInspect","stylizeWithColor","formatValue","bold","italic","underline","inverse","white","grey","black","blue","cyan","green","magenta","red","yellow","styles","special","number","boolean","null","date","styleType","style","arrayToHash","hash","forEach","recurseTimes","ret","primitive","formatPrimitive","visibleKeys","getOwnPropertyNames","formatError","Date","braces","toUTCString","output","formatArray","map","formatProperty","reduceToSingleString","isNumber","desc","getOwnPropertyDescriptor","numLinesEst","reduce","prev","ar","isNullOrUndefined","isSymbol","objectToString","pad","months","timestamp","time","getHours","getMinutes","getSeconds","getDate","getMonth","log","origin","add","mod","defaultTraveler","attachComments","astravel","_defaultTraveler","_attachComments","makeTraveler","_defaultTraveler2","_interopRequireDefault","_attachComments2","default","makeChild","comments","customTraveler","children","findHeadingComments","traveler","boundComments","trailingComments","child","Program","BlockStatement","ObjectExpression","ArrayExpression","SwitchStatement","SwitchCase","ForInStatement","FunctionDeclaration","RestElement","BinaryExpression","ignore","Function","Found","go","find","predicate","finder","super","EmptyStatement","ExpressionStatement","IfStatement","LabeledStatement","BreakStatement","ContinueStatement","WithStatement","ReturnStatement","ThrowStatement","TryStatement","CatchClause","WhileStatement","DoWhileStatement","ForStatement","DebuggerStatement","VariableDeclaration","VariableDeclarator","ArrowFunctionExpression","ThisExpression","Property","FunctionExpression","SequenceExpression","UnaryExpression","UpdateExpression","AssignmentExpression","LogicalExpression","ConditionalExpression","NewExpression","CallExpression","MemberExpression","Identifier","Literal","ForOfStatement","ClassDeclaration","ClassBody","ImportDeclaration","ImportNamespaceSpecifier","ImportDefaultSpecifier","ImportSpecifier","ExportDefaultDeclaration","ExportNamedDeclaration","ExportSpecifier","ExportAllDeclaration","MethodDefinition","ClassExpression","Super","SpreadElement","YieldExpression","TaggedTemplateExpression","TemplateLiteral","_i","_length","TemplateElement","ObjectPattern","ArrayPattern","AssignmentPattern","MetaProperty","AwaitExpression","generate","baseGenerator","GENERATOR","EXPRESSIONS_PRECEDENCE","NEEDS_PARENTHESES","repeat","endsWith","OPERATOR_PRECEDENCE","in","instanceof","PrivateIdentifier","ChainExpression","formatSequence","write","expressionNeedsParenthesis","parentNode","isRightHand","nodePrecedence","expressionsPrecedence","parentNodePrecedence","formatExpression","reindent","indent","lineEnd","lines","trim","formatComments","hasCallExpression","currentNode","_currentNode","formatVariableDeclaration","indentLevel","writeComments","statementIndent","StaticBlock","precedence","caseIndent","occurences","occurencesCount","occurence","consequentCount","concat","specifier","_specifier","ImportExpression","_quasi","propertyIndent","PropertyDefinition","needsParentheses","isIn","RegExpLiteral","EMPTY_OBJECT","State","setup","writeToStream","startingIndentLevel","sourceMap","writeAndMap","writeToStreamAndMap","lineEndSize","mapping","original","generated","file","_file","addMapping","Backoff","ms","factor","jitter","attempts","duration","pow","rand","random","deviation","floor","setMin","setMax","setJitter","chars","encode","base64","decode","bufferLength","encoded1","encoded2","encoded3","encoded4","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","encodeChunk","uint8","extraBytes","parts","maxChunkLength","len2","BlobBuilder","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","Blob","blobSupportsArrayBufferView","blobBuilderSupported","append","getBlob","mapArrayBufferViews","ary","chunk","buf","byteOffset","BlobBuilderConstructor","bb","part","BlobConstructor","ieee754","SlowBuffer","INSPECT_MAX_BYTES","K_MAX_LENGTH","kMaxLength","TYPED_ARRAY_SUPPORT","typedArraySupport","createBuffer","RangeError","encodingOrOffset","allocUnsafe","species","poolSize","fromString","fromArrayLike","isInstance","fromArrayBuffer","valueOf","fromObject","assertSize","alloc","encoding","checked","allocUnsafeSlow","isEncoding","numberIsNaN","toLowerCase","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","m","swap16","swap32","swap64","toLocaleString","equals","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","j","includes","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","isFinite","toJSON","_arr","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","toHex","newBuf","subarray","checkOffset","ext","readUIntLE","noAssert","mul","readUIntBE","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","checkInt","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","checkIEEE754","writeFloat","littleEndian","writeFloatLE","writeFloatBE","writeDouble","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","hi","lo","src","dst","GetIntrinsic","callBind","$indexOf","callBoundIntrinsic","allowMissing","intrinsic","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","applyBind","EventEmitter","storage","logger","debug","help","perf","getAllRoutes","expose","storeName","emitter","localEmitter","window","on","emit","eventName","listener","router","routes","stateCopy","pluck","isStateString","isChooPath","onChange","nanologger","enabledMessage","disabledMessage","enabled","localStorage","logLevel","info","attr","callsite","bool","setTimeout","print","cmd","color","removeItems","scheduler","_log","clone","MAX_HISTORY_LENGTH","shouldDebug","history","shouldWarn","_history","showHistory","entry","Event","table","events","tryClone","_state","ex","Hooks","initialRender","hooks","timing","filter","toFixed","level","interactive","timings","render","fps","times","morph","onPerformance","BAR","stats","all","Perf","core","components","entryType","entries","stat","rename","filtered","maxTime","maxMedian","fmt","totalTime","median","getMedian","PerfEntry","barLength","createBar","round","Name","numbers","middle","isEven","pretty","navigator","estimate","then","usage","quota","clr","persisted","protocol","location","ChooHooks","hasWindow","hasIdleCallback","requestIdleCallback","hasPerformance","performance","getEntriesByName","listeners","onresourcetimingbufferfull","eventListener","timingName","traceId","rBuf","renderListener","_timing","uuid","_emitLoaded","logListener","unhandledListener","clear","domInteractive","navigationStart","loaded","domContentLoadedEventEnd","LRU","ChooComponentCache","lru","cache","Component","el","unshift","newCall","Cls","scrollToAnchor","documentReady","nanotiming","nanorouter","nanomorph","nanoquery","nanohref","nanoraf","nanobus","Cache","Choo","HISTORY_OBJECT","_events","DOMCONTENTLOADED","DOMTITLECHANGE","REPLACESTATE","PUSHSTATE","NAVIGATE","POPSTATE","RENDER","_historyEnabled","_hrefEnabled","href","_hashEnabled","_hasWindow","_cache","_loaded","_stores","ondomtitlechange","_tree","initialState","curry","title","document","prependListener","routeTiming","cb","endTiming","startTiming","_matchRoute","pushState","replaceState","onpopstate","_setCache","initStore","_prerender","renderTiming","newTree","nodeName","morphTiming","selector","mountTiming","querySelector","removeAllListeners","html","outerHTML","locationOverride","queryString","pathname","search","matched","_handler","query","renderComponent","clipboardCopy","clipboard","writeText","catch","DOMException","span","createElement","textContent","whiteSpace","webkitUserSelect","userSelect","appendChild","selection","getSelection","createRange","removeAllRanges","selectNode","addRange","success","execCommand","removeChild","Promise","resolve","reject","nativeMap","Map","nativeSet","Set","nativePromise","circular","includeNonEnumerable","allParents","allChildren","useBuffer","_clone","__isArray","__isRegExp","__getRegExpFlags","__isDate","keyChild","valueChild","entryChild","attrs","getOwnPropertySymbols","symbols","symbol","allPropertyNames","propertyName","clonePrototype","__objToStr","CodeMirror","I","J","getTokenTypeAt","G","getMode","useInnerComments","innerMode","getModeAt","E","Pos","K","cmpPos","commands","toggleComment","defineExtension","listSelections","g","to","uncomment","lineComment","getLine","lastLine","padding","k","commentBlankLines","operation","q","h","replaceRange","blockCommentStart","fullLines","blockComment","blockCommentEnd","blockCommentLead","getCursor","somethingSelected","setSelection","A","w","z","H","C","D","F","B","getRange","mode","helperType","getTokenAt","globalScope","additionalContext","useGlobalScope","jQuery","localVars","vars","globalVars","registerHelper","cm","widget","tick","debounce","startLen","updateOnCursorActivity","activityFunc","cursorActivity","Up","moveFocus","Down","PageUp","menuSize","PageDown","Home","setFocus","End","Enter","pick","Tab","Esc","platform","customKeys","extraKeys","completion","picked","getInputField","ownerDocument","defaultView","parentWindow","hints","setAttribute","className","theme","selectedHint","createTextNode","displayText","hintId","container","cursorCoords","alignWithWord","bottom","getComputedStyle","offsetParent","getBoundingClientRect","scrollLeft","top","scrollTop","innerWidth","offsetWidth","documentElement","innerHeight","offsetHeight","moveOnOverlap","DOMRect","paddingForScrollbar","scrollHeight","clientHeight","getScrollInfo","height","display","nativeBarWidth","width","firstChild","nextSibling","paddingRight","addKeyMap","keyMap","changeActive","screenAmount","closeOnUnfocus","onBlur","onFocus","clearTimeout","onScroll","getWrapperElement","pageYOffset","srcElement","completeOnSingleClick","focus","getSelectedHintRange","scrollToActive","signal","childNodes","L","supportsSelection","showHint","hintOptions","head","anchor","completionActive","M","requestAnimationFrame","N","cancelAnimationFrame","active","off","scrollIntoView","closeOnPick","closeCharacters","disable","finishUpdate","completeSingle","removeKeyMap","removeAttribute","offsetTop","scrollMargin","getHelpers","getHelper","fromList","anyword","autocomplete","auto","defineOption","$jscomp","findInternal","ASSUME_ES5","ASSUME_NO_NATIVE_MAP","ASSUME_NO_NATIVE_SET","SIMPLE_FROUND_POLYFILL","ISOLATE_POLYFILLS","FORCE_POLYFILL_PROMISE","FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION","getGlobal","IS_SYMBOL_NATIVE","TRUST_ES6_POLYFILLS","polyfills","propertyToPolyfillSymbol","POLYFILL_PREFIX","$jscomp$lookupPolyfilledValue","polyfill","polyfillIsolated","polyfillUnisolated","markedSelection","markedSelectionStyle","markText","splice","shift","Init","ja","cssText","nodeType","contains","host","activeElement","shadowRoot","Ya","fd","qa","wrapper","gd","Za","wa","ea","hd","vc","wc","yg","pe","qe","jd","zg","xc","kd","Ag","se","Jb","ceil","Bg","Kb","Lb","Ja","order","Cg","ta","removeEventListener","detachEvent","_handlers","W","yc","Z","preventDefault","defaultPrevented","ld","codemirrorIgnore","te","curOp","cursorActivityHandlers","xa","pb","la","returnValue","ue","stopPropagation","cancelBubble","Mb","ve","which","button","ya","ctrlKey","Dg","dependencies","md","zc","qb","nd","rb","modeProps","Eg","$a","copyState","od","we","startState","chunkSize","ab","pd","Ea","Nb","qd","lineNumberFormatter","firstLineNumber","sticky","rd","sd","Ac","Bc","xe","ye","modeGen","ze","doc","baseTokens","overlays","opaque","baseTokenPos","classes","bgClass","textClass","Ae","Ob","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","Fa","Fg","fromSaved","td","viewFrom","viewTo","nextLine","X","tabSize","Be","eol","ud","blankLine","Ce","De","Ee","flattenSpans","addModeClass","Cc","lookAhead","Gg","Dc","marker","Pb","vd","full","markedSpans","inclusiveLeft","insertLeft","inclusiveRight","Fe","clearWhenEmpty","Hg","readOnly","Ge","detachLine","He","attachLine","wd","sb","Ka","collapsed","Ie","za","xd","Je","Pa","widgetNode","yd","Ga","Ec","zd","maxLine","maxLineLength","maxLineChanged","Ke","Ig","Jg","Le","fa","pre","content","trailingSpace","splitSpaces","getOption","measure","addToken","Kg","Ad","Qb","direction","Lg","externalMeasured","Y","P","Q","S","R","css","startStyle","endStyle","attributes","ha","Me","Bd","T","maps","caches","lastChild","Mg","specialChars","createDocumentFragment","specialCharPlaceholder","needsContentAttribute","setUneditable","Ne","hidden","Fc","Ng","ownsGroup","delayedCallbacks","ops","cursorActivityCalled","tb","aa","Rb","Og","Oe","changes","Pe","replaceChild","Cd","Qe","alignable","Re","Sb","zIndex","built","background","insertBefore","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","gutterMarkers","lineNumbers","lineNumber","gutterLeft","lineNumInnerWidth","gutterSpecs","gutterWidth","Pg","Se","widgets","handleMouseEvents","noHScroll","wrapperWidth","coverGutter","paddingLeft","marginLeft","above","Tb","gutters","clientWidth","La","getAttribute","sizer","mover","Dd","lineSpace","Te","cachedPaddingH","currentStyle","isNaN","Ha","scroller","barWidth","Ed","barHeight","Ue","before","Fd","view","db","lineN","eb","Gd","forceUpdate","lineMeasure","rect","hasHeights","Aa","lineWrapping","heights","getClientRects","abs","Ve","collapse","coverStart","coverEnd","We","screen","logicalXDPI","deviceXDPI","Hd","logicalYDPI","deviceYDPI","ub","bogus","singleCursorHeightPerLine","rtop","rbottom","Xe","Ye","externalMeasure","Ub","cachedCharWidth","cachedTextHeight","lineNumChars","Ze","Qa","Gc","pageXOffset","$e","marginTop","Id","Hc","viewOffset","af","Ic","Ba","bf","Jd","xRel","outside","Kd","Qg","cf","begin","df","Ld","Rg","Sg","vb","fb","clientLeft","offsetLeft","Md","ef","Nd","gb","clientX","clientY","ma","updateLineNumbers","viewChanged","Ra","Jc","Sa","ff","Vb","showSelection","prepareSelection","gf","cursors","$customCursor","sel","primIndex","Od","showCursorWhenSelecting","Tg","cursorHeight","defaultCharWidth","Kc","na","ua","hb","ib","Pd","sizerWidth","Qd","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","hasFocus","wb","hf","Rd","Sd","delayingBlurEvent","draggingText","selForContextMenu","receivedFocus","jb","Lc","lineDiv","jf","Mc","ensure","Td","Nc","Oc","xb","scrollToPos","margin","cursorScrollMargin","Wb","kf","Xb","Ma","Ud","lf","Yb","scrollbars","setScrollTop","scrollWidth","mf","setScrollLeft","Zb","viewHeight","viewWidth","barLeft","docHeight","yb","nf","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","of","addClass","pf","scrollbarStyle","lb","startHeight","updateInput","typing","changeObjs","selectionChanged","updateMaxLine","Ug","markArrays","mb","scrollbarsClipped","marginBottom","borderRightWidth","mustUpdate","Pc","updatedDisplay","Vd","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","minWidth","Wd","qf","wheelStartX","wheelStartY","forceScroll","Vg","maybeHiddenMarkers","maybeUnhiddenMarkers","finish","ra","ba","ia","ca","highlight","Wg","workTime","workDelay","editorIsHidden","force","visible","renderedView","rf","dims","viewportMargin","lastWrapHeight","wrapperHeight","lastWrapWidth","activeElt","anchorNode","anchorOffset","focusNode","focusOffset","Xg","setEnd","selectionDiv","minHeight","viewport","oldDisplayWidth","reportedViewFrom","reportedViewTo","currentWheelTarget","Xd","alignWidgets","lineGutter","lineNumWidth","Yd","sf","$b","Yg","tf","clipPath","ac","draggable","wheelDX","wheelDY","activeTouch","uf","wheelDeltaX","wheelDeltaY","detail","axis","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","Zg","Na","vf","chromeScrollHack","pointerEvents","deltaMode","deltaX","deltaY","Ca","Qc","Da","selectionsMayTouch","va","Oa","Ta","wf","Zd","xf","$d","modeOption","bc","yf","wholeLineUpdateBefore","ae","zb","insert","remove","Ua","linked","sharedHist","zf","Af","$g","Rc","undone","undoDepth","lastModTime","lastSelTime","lastOrigin","lastSelOrigin","lastOp","lastSelOp","generation","maxGeneration","be","Bf","Cf","Df","historyEventDelay","Sc","Ef","explicitlyCleared","Ab","deepCopy","ce","Tc","da","primary","Ff","de","ah","Gf","Uc","NaN","clearRedo","bias","Hf","If","scroll","Jf","Vc","Bb","selectLeft","selectRight","atomic","Kf","cantEdit","Lf","firstLine","Ia","Mf","canceled","cancel","Cb","suppressEdits","Nf","Of","cc","Pf","Wc","Qf","removed","bh","Db","splitLines","Rf","Sf","copied","dc","ec","fc","insertAt","Eb","shared","dh","Va","replacedWith","addToHistory","WeakSet","has","clearOnEnter","clearHistory","Tf","cloneNode","isParent","hc","Uf","findMarks","clipPos","eh","markers","fh","Vf","Wf","dataTransfer","files","isReadOnly","FileReader","File","lineSeparator","allowDropFileTypes","onerror","onload","readAsText","getData","replaceSelection","dragCursor","Xf","getElementsByClassName","gh","hh","setSize","ih","jh","Fb","Xc","fallthrough","Yf","Wa","keyCode","Zf","altKey","$f","metaKey","shiftKey","ag","altGraphKey","ic","Gb","ee","fe","ge","kh","bg","cg","Yc","jc","ensurePolled","Zc","kc","keySeq","lh","dg","keyMaps","eg","motion","mh","fg","getField","he","nh","oh","gg","hg","charCode","onKeyPress","ph","lc","mc","ie","ig","supportsTouch","$c","selectingText","qh","rh","je","onContextMenu","unit","sh","addNew","moveOnDrag","dragDrop","th","uh","vh","ad","preventScroll","jg","findWordAt","wh","ke","buttons","touches","kg","lg","xh","Hb","dragFunctions","enter","over","leave","drop","yh","U","mg","oa","inputStyles","inputStyle","overwrite","pasteIncoming","cutIncoming","Xa","autofocus","zh","ng","bd","finishInit","le","textRendering","radiusX","radiusY","moved","pageX","pageY","coordsChar","setData","effectAllowed","setDragImage","_top","nc","indentUnit","indentWithTabs","me","ne","sa","pasteLinesPerSelection","lineWise","og","pg","clipboardData","disableInput","electricChars","smartIndent","electricInput","qg","rg","sg","oc","border","oe","hitSide","tg","ug","Ah","Ib","bad","Bh","nodeValue","cd","Ch","previousSibling","pa","userAgent","vg","wg","xg","dd","documentMode","Dh","vendor","Eh","maxTouchPoints","Fh","nb","setStart","createTextRange","moveToElementText","moveEnd","moveStart","pc","select","selectionStart","selectionEnd","onTimeout","qc","reverse","addEventListener","attachEvent","Gh","parentElement","compareEndPoints","oncopy","lastColumnPos","lastColumnValue","lineOracle","sol","peek","eatWhile","eatSpace","skipToEnd","skipTo","backUp","indentation","hideFirstChars","baseToken","maxLookAhead","lineNo","ob","vert","horiz","tabIndex","checkedZeroWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","elementFromPoint","rc","native","removeInner","insertInner","iterN","maybeSpill","changed","Hh","cleanGeneration","lineSep","getValue","setValue","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","setCursor","extendSelection","extendSelections","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelections","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","isClean","getHistory","setHistory","setGutterMarker","clearGutter","lineInfo","handle","addLineClass","removeLineClass","addLineWidget","removeLineWidget","setBookmark","findMarksAt","getAllMarks","posFromIndex","indexFromPos","linkedDoc","unlinkDoc","iterLinkedDocs","getEditor","setDirection","eachLine","ed","tc","basic","Left","Right","Delete","Backspace","Insert","pcDefault","emacsy","macDefault","selectAll","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","charCoords","delWrappedLineRight","goDocStart","goDocEnd","goLineStart","goLineStartSmart","goLineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","defaultTab","transposeChars","newlineAndIndent","indentLine","openLine","toggleOverwrite","defaults","optionHandlers","defineInitHook","O","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","lineWiseCopyCut","clearData","showPrimarySelection","div","contentEditable","spellcheck","autocorrect","autocapitalize","updateFromDOM","readFromDOMSoon","forceCompositionEnd","screenReaderLabelChanged","showMultipleSelections","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","blur","pollSelection","pollInterval","triggerOnKeyDown","pollContent","readOnlyChanged","resetPosition","V","prevInput","pollingFast","hasSelection","resetting","createField","textarea","poll","fastPoll","dispatchEvent","moveInputWithCursor","teTop","teLeft","contextMenuPending","slowPoll","detectingSelectAll","resetSelectionOnContextMenu","scrollY","scrollTo","disabled","refresh","detach","attach","helpers","setOption","getDoc","addOverlay","modeSpec","priority","removeOverlay","getLineTokens","_global","pred","getStateAfter","lineAtHeight","heightAtLine","defaultTextHeight","getViewport","addWidget","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","triggerElectric","findPosH","rtlMoveVisually","findPosV","goalColumn","startOperation","endOperation","swapDoc","phrase","phrases","getScrollerElement","getGutterElement","registerGlobalHelper","Ih","uc","contenteditable","defineMode","defineMIME","defineDocExtension","fromTextArea","tabindex","placeholder","form","leaveSubmitMethodAlone","submit","getTextArea","toTextArea","wheelEventPixels","Doc","countColumn","findColumn","isWordChar","Pass","Line","changeEnd","scrollbarModel","modes","mimeModes","resolveMode","modeExtensions","extendMode","isModifierKey","lookupKey","normalizeKeyMap","StringStream","SharedTextMarker","TextMarker","LineWidget","e_preventDefault","e_stopPropagation","e_stop","rmClass","keyNames","tokenize","lastType","propertyIsEnumerable","fatArrowAt","indented","align","lex","jsonld","json","trackScope","typescript","wordCharacters","if","while","with","else","do","try","finally","return","break","continue","new","delete","void","throw","debugger","const","let","function","for","switch","case","typeof","true","false","class","yield","export","import","extends","atom","variable","doubleIndentSwitch","blockCommentContinue","fold","closeBrackets","jsonldMode","jsonMode","expressionAllowed","skipExpression","Emitter","mixin","event","_callbacks","once","removeListener","callbacks","hasListeners","ready","readyState","onLoad","transports","parseuri","parseqs","Socket","uri","hostname","secure","port","agent","upgrade","path","forceJSONP","jsonp","forceBase64","enablesXDR","withCredentials","timestampParam","timestampRequests","transportOptions","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","threshold","pfx","passphrase","cert","ciphers","rejectUnauthorized","forceNode","isReactNative","product","extraHeaders","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","open","priorWebsocketSuccess","Transport","createTransport","EIO","transport","sid","socket","requestTimeout","protocols","setTransport","onDrain","packet","onPacket","onError","onClose","probe","failed","onTransportOpen","upgradeLosesBinary","supportsBinary","send","upgrading","pause","cleanup","flush","freezeTransport","onTransportClose","onclose","onupgrade","onOpen","onHandshake","setPing","filterUpgrades","onHeartbeat","timeout","ping","sendPacket","compress","waitForUpgrade","cleanupAndClose","reason","filteredUpgrades","description","doOpen","doClose","packets","onData","decodePacket","XMLHttpRequest","XHR","JSONP","websocket","xhr","xs","isSSL","xdomain","xscheme","Polling","inherit","JSONPPolling","rNewline","rEscapedNewline","___eio","script","iframe","doPoll","getElementsByTagName","isUAgecko","doWrite","area","iframeId","action","complete","initIframe","onreadystatechange","Request","request","isBinary","req","sendXhr","pollXhr","setDisableHeaderCheck","setRequestHeader","hasXDR","responseText","contentType","getResponseHeader","responseType","status","requestsCount","requests","onSuccess","fromError","abort","response","XDomainRequest","unloadHandler","terminationEvent","yeast","hasXHR2","onPause","decodePayload","callbackfn","encodePayload","schema","ipv6","BrowserWebSocket","NodeWebSocket","WebSocket","MozWebSocket","WebSocketImpl","WS","usingBrowserWebSocket","check","headers","ws","supports","addEventListeners","onopen","onmessage","ev","encodePacket","hasCORS","formatArgs","load","useColors","chrome","localstorage","WebkitAppearance","firebug","exception","$1","formatters","namespace","humanize","diff","lastC","namespaces","removeItem","DEBUG","enable","createDebug","coerce","instances","names","skips","selectColor","prevTime","formatter","logFn","destroy","long","fmtLong","fmtShort","plural","hasBinary","sliceBuffer","utf8","base64encoder","isAndroid","isPhantomJS","dontSendBlobs","pong","packetslist","utf8encode","encodeArrayBuffer","encodeBlob","encodeBase64Object","encoded","encodeBase64Packet","contentArray","resultBuffer","encodeBlobAsArrayBuffer","fr","readAsArrayBuffer","blob","readAsDataURL","b64data","typed","btoa","utf8decode","decodeBase64Packet","tryDecode","asArray","encodePayloadAsBlob","encodePayloadAsArrayBuffer","setLengthHeader","encodeOne","doneCallback","results","each","eachWithIndex","decodePayloadAsBinary","chr","encodedPackets","totalLength","acc","resultArray","bufferIndex","lenStr","binaryIdentifier","lengthAry","bufferTail","buffers","tailArray","msgLength","stringFromCharCode","ucs2decode","counter","extra","ucs2encode","checkScalarValue","createByte","encodeCodePoint","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","decodeSymbol","byte1","byte2","byte3","byte4","createError","ErrClass","Reflect","ReflectApply","receiver","ReflectOwnKeys","ownKeys","ProcessEmitWarning","warning","NumberIsNaN","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","setMaxListeners","_getMaxListeners","that","getMaxListeners","doError","er","arrayClone","_addListener","prepend","existing","newListener","addListener","onceWrapper","fired","wrapFn","_onceWrap","wrapped","prependOnceListener","originalListener","spliceOne","_listeners","unwrap","evlistener","unwrapListeners","rawListeners","listenerCount","eventNames","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","wrapListener","stable","deterministicStringify","stableStringify","LIMIT_REPLACE_NODE","CIRCULAR_REPLACE_NODE","replacerStack","depthLimit","MAX_SAFE_INTEGER","edgesLimit","replacer","spacer","decirc","replaceGetterValues","setReplace","propertyDescriptor","edgeIndex","compareFunction","deterministicDecirc","ERROR_MESSAGE","toStr","funcType","bound","binder","boundLength","boundArgs","Empty","implementation","getBrowserRTC","wrtc","RTCPeerConnection","mozRTCPeerConnection","webkitRTCPeerConnection","RTCSessionDescription","mozRTCSessionDescription","webkitRTCSessionDescription","RTCIceCandidate","mozRTCIceCandidate","webkitRTCIceCandidate","$SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","hasProto","getProto","needsEval","TypedArray","INTRINSICS","AggregateError","Atomics","BigInt64Array","BigUint64Array","Boolean","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","eval","EvalError","FinalizationRegistry","Int8Array","Int16Array","Int32Array","Proxy","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakMap","WeakRef","errorProto","doEval","gen","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","stringToPath","subString","getBaseIntrinsic","intrinsicName","alias","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","minDoc","doccy","win","withNativeBlob","withNativeFile","$Object","origSymbol","hasSymbolSham","hasNativeSymbols","sym","symObj","symVal","syms","attributeToProperty","transform","tagName","attrToProp","VAR","TEXT","OPEN","CLOSE","ATTR","ATTR_KEY","ATTR_KEY_W","ATTR_VALUE_W","ATTR_VALUE","ATTR_VALUE_SQ","ATTR_VALUE_DQ","ATTR_EQ","ATTR_BREAK","COMMENT","strings","reg","arglen","xstate","tree","ix","copyKey","strfn","selfClosing","createFragment","quot","closeRE","_interopDefaultLegacy","_classCallCheck__default","_createClass__default","fieldContentRegExp","serializeCookie","maxAge","domain","expires","httpOnly","sameSite","cookie","minutes","cookieOptions","setTime","nameEQ","cookie$1","lookupCookie","cacheUserLanguage","lng","cookieMinutes","cookieDomain","querystring","lookupQuerystring","hasLocalStorageSupport","localStorageAvailable","testKey","setItem","lookupLocalStorage","getItem","hasSessionStorageSupport","sessionStorageAvailable","sessionStorage","lookupSessionStorage","navigator$1","languages","userLanguage","language","htmlTag","lookupFromPathIndex","subdomain","lookupFromSubdomainIndex","getDefaults","excludeCacheFor","Browser","services","detectors","i18nOptions","lookupFromUrlIndex","addDetector","detector","detect","detectionOrder","detected","detectorName","languageUtils","getBestMatchFromCodes","_this2","cacheName","_typeof__default","_assertThisInitialized__default","_inherits__default","_possibleConstructorReturn__default","_getPrototypeOf__default","_defineProperty__default","_toArray__default","enumerableOnly","_objectSpread","getOwnPropertyDescriptors","consoleLogger","Logger","concreteLogger","setDebug","_len","_key","forward","_len2","_key2","_len3","_key3","_len4","_key4","lvl","debugOnly","moduleName","baseLogger","observers","cloned","observer","_cloned","defer","rej","promise","makeString","getLastOfPath","cleanKey","canNotTraverseDeeper","setPath","newValue","_getLastOfPath","pushPath","_getLastOfPath2","getPath","_getLastOfPath3","getPathWithDefaults","defaultData","deepExtend","regexEscape","_entityMap","escape","isIE10","userAgentData","looksLikeObjectPath","nsSeparator","keySeparator","possibleChars","ki","ownKeys$1","_objectSpread$1","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","NewTarget","construct","sham","deepFind","paths","mix","joinedPath","ResourceStore","_EventEmitter","ns","defaultNS","ignoreJSONStructure","addNamespaces","removeNamespaces","getResource","addResource","silent","addResources","resources","addResourceBundle","deep","pack","removeResourceBundle","hasResourceBundle","getResourceBundle","compatibilityAPI","getDataByLanguage","hasLanguageSomeTranslations","postProcessor","processors","addPostProcessor","translator","processor","ownKeys$2","_objectSpread$2","_createSuper$1","_isNativeReflectConstruct$1","checkedLoadedFor","Translator","changeLanguage","exists","interpolation","resolved","extractFromKey","wouldCheckForNsInKey","seemsNaturalLanguage","userDefinedKeySeparator","userDefinedNsSeparator","interpolator","nestingRegexp","translate","lastKey","overloadTranslationOptionHandler","returnDetails","_this$extractFromKey","appendNamespaceToCIMode","resUsedKey","usedKey","resExactUsedKey","exactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","resTypeIsArray","newKeyToUse","deepKey","extendTranslation","usedDefault","needsPluralHandling","hasDefaultValue","defaultValueSuffix","pluralResolver","getSuffix","defaultValue","isValidLookup","missingKeyNoValueFallbackToKey","resForMissing","updateMissing","fk","lngs","fallbackLngs","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","specificDefaultValue","defaultForMissing","missingKeyHandler","backendConnector","saveMissing","saveMissingPlurals","getSuffixes","suffix","appendNamespaceToMissingKey","parseMissingKeyHandler","_this3","defaultVariables","usedLng","usedNS","skipInterpolation","skipOnVariables","nestBef","interpolate","nestAft","nest","postProcess","postProcessorNames","applyPostProcessor","postProcessPassResolved","i18nResolved","_this4","extracted","fallbackNS","needsZeroSuffixLookup","ordinal","shouldUseIntlApi","needsContextHandling","codes","utils","hasLoadedNamespace","finalKeys","addLookupKeys","pluralSuffix","zeroSuffix","pluralSeparator","contextKey","contextSeparator","possibleKey","returnNull","returnEmptyString","resourceStore","option","capitalize","LanguageUtil","supportedLngs","getScriptPartFromCode","formatLanguageCode","getLanguagePartFromCode","specialCases","lowerCaseLng","cleanCode","isSupportedCode","nonExplicitSupportedLngs","cleanedLng","lngOnly","supportedLng","fallbacks","fallbackCode","fallbackCodes","addCode","sets","nr","_rulesPluralsTypes","deprecatedJsonVersions","suffixesOrder","zero","one","two","few","many","createRules","rules","plurals","PluralResolver","compatibilityJSON","Intl","PluralRules","addRule","getRule","_unused","needsPlural","rule","resolvedOptions","pluralCategories","getPluralFormsOfKey","pluralCategory1","pluralCategory2","pluralCategory","getSuffixRetroCompatible","noAbs","simplifyPluralSuffix","returnSuffix","ownKeys$3","_objectSpread$3","Interpolator","escapeValue","iOpts","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","resetRegExp","regexpStr","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","replaces","regexSafe","handleFormat","interpolationkey","missingInterpolationHandler","todos","safeValue","todo","matchedVar","temp","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","doReduce","ownKeys$4","_objectSpread$4","parseFormatStr","formatStr","formatName","formatOptions","optStr","currency","_opt$split","_opt$split2","createCachedFormatter","invokeFormatter","Formatter","formats","NumberFormat","datetime","DateTimeFormat","relativetime","RelativeTimeFormat","ListFormat","addCached","_format","mem","_parseFormatStr","formatted","valOptions","formatParams","locale","ownKeys$5","_objectSpread$5","_createSuper$2","_isNativeReflectConstruct$2","removePending","pending","pendingCount","Connector","backend","waitingReads","maxParallelReads","readingCalls","maxRetries","retryTimeout","queue","queueLoad","toLoad","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","reload","errors","loadedKeys","fcName","tried","wait","prepareLoading","loadOne","_this5","fallbackValue","isUpdate","initImmediate","preload","partialBundledLanguages","tDescription","transformOptions","ownKeys$6","_objectSpread$6","_createSuper$3","_isNativeReflectConstruct$3","bindMemberFunctions","inst","mems","I18n","modules","external","isInitialized","isClone","defOpts","createClassOnDemand","ClassOrObject","lu","languageDetector","detection","storeApi","_this2$store","storeApiChained","_this2$store2","deferred","initializedStoreOnce","loadResources","usedCallback","resolvedLanguage","setResolvedLanguage","reloadResources","li","lngInLngs","isLanguageChangingTo","setLngProps","setLng","getFixedT","keyPrefix","fixedT","resultKey","_this$translator","_this$translator2","setDefaultNamespace","_this6","lastLng","loadNotPending","loadState","precheck","preResult","loadNamespaces","_this7","loadLanguages","preloaded","newLngs","rtlLngs","cloneInstance","_this8","mergedOptions","membersToCopy","createInstance","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","LN2","get_beautify","js_beautify","css_beautify","html_beautify","beautify","config","js","beautifier","Directives","start_block_pattern","end_block_pattern","__directives_block_pattern","__directive_pattern","__directives_end_ignore_pattern","get_directives","directives","directive_match","readIgnored","readUntilAfter","regexp_has_sticky","InputScanner","input_string","__input","__input_length","__position","restart","back","hasNext","__match","pattern_match","testChar","starting_pattern","until_pattern","until_after","readUntil","match_index","get_regexp","match_from","get_literal_regexp","literal_string","peekUntilAfter","lookBack","testVal","Options","merge_child_field","raw_options","_mergeOpts","_get_boolean","_get_characters","end_with_newline","indent_size","_get_number","indent_char","indent_level","preserve_newlines","max_preserve_newlines","indent_with_tabs","wrap_line_length","indent_empty_lines","templating","_get_selection_list","_get_array","default_value","option_value","_get_selection","selection_list","_is_valid_selection","some","allOptions","childFieldName","finalOpts","_normalizeOpts","convertedOpts","newKey","normalizeOpts","mergeOpts","OutputLine","__parent","__character_count","__indent_count","__alignment_count","__wrap_point_index","__wrap_point_character_count","__wrap_point_indent_count","__wrap_point_alignment_count","__items","clone_empty","set_indent","has_match","lastCheckedOutput","alignment","is_empty","get_indent_size","_set_wrap_point","_should_wrap","_allow_wrap","add_new_line","current_line","last_newline_index","_remove_indent","_remove_wrap_indent","get_indent_string","IndentStringCache","baseIndentString","__cache","__indent_size","__indent_string","__base_string","__base_string_length","__ensure_cache","__add_column","Output","__indent_cache","_end_with_newline","__lines","previous_line","space_before_token","non_breaking_space","previous_token_wrapped","__add_outputline","get_line_number","force_newline","just_added_newline","get_code","last_item","sweet_code","set_wrap_point","add_raw_token","newlines","whitespace_before","add_token","printable_token","__add_space_before_token","remove_indent","output_length","eat_newlines","just_added_blankline","ensure_empty_line_above","starts_with","ends_with","potentialEmptyLine","Pattern","input_scanner","_input","_starting_pattern","_match_pattern","_until_pattern","_until_after","read_match","_create","_update","until","starting_with","matching","template_names","django","erb","handlebars","php","smarty","TemplatablePattern","__template_pattern","_disabled","_excluded","__patterns","handlebars_comment","handlebars_unescaped","django_value","django_comment","smarty_comment","smarty_literal","__set_templated_pattern","read_options","exclude","_read_template","items","resulting_string","peek1","comments_before","previous","opened","closed","TokenStream","WhitespacePattern","TOKEN","START","RAW","EOF","Tokenizer","_options","__tokens","_patterns","whitespace","_reset","open_token","open_stack","_get_next_token","_is_comment","isEmpty","_is_opening","_is_closing","_is_first_token","previous_token","_readWhitespace","_create_token","current_token","newline_count","whitespace_before_token","parent_token","__tokens_length","__parent_token","_line_regexp","__set_whitespace_patterns","whitespace_chars","newline_chars","_newline_regexp","matches","__split","start_index","next_match","directives_core","allLineBreaks","whitespaceChar","whitespacePattern","block_comment_pattern","comment_pattern","Beautifier","source_text","_source_text","_ch","NESTED_AT_RULE","page","keyframes","media","CONDITIONAL_GROUP_RULE","NON_SEMICOLON_NEWLINE_PROPERTY","eatString","endChars","eatWhitespace","allowAtLeastOneNewLine","_output","foundNestedPseudoClass","openParen","print_string","output_string","_indentLevel","preserveSingleSpace","isAfterSpace","outdent","_nestedLevel","parenLevel","insideRule","insidePropertyValue","enteringConditionalGroup","insideNonNestedAtRule","insideScssMap","topCharacter","insideNonSemiColonValues","previous_ch","variableOrRule","newline_between_rules","brace_style","preserveQuoteSpace","space_needed","selector_separator_newline","space_around_combinator","preserveAfterSpace","sweetCode","BaseOptions","space_around_selector_separator","brace_style_split","bs","Printer","base_indent_string","alignment_size","current_line_has_match","set_space_before_token","non_breaking","print_preserved_newlines","raw_token","print_newline","traverse_whitespace","print_token","get_full_indent","get_type_attribute","start_token","ATTRIBUTE","EQUALS","VALUE","get_custom_beautifier_name","tag_check","typeAttribute","in_array","what","TagFrame","parser_token","tag_name","TagStack","printer","_printer","_current_frame","get_parser_token","record_tag","new_frame","_try_pop_frame","frame","_get_frame","tag_list","stop_list","try_pop","indent_to_tag","_js_beautify","_css_beautify","_tag_stack","optionHtml","_is_wrap_attributes_force","wrap_attributes","_is_wrap_attributes_force_expand_multiline","_is_wrap_attributes_force_aligned","_is_wrap_attributes_aligned_multiple","_is_wrap_attributes_preserve","_is_wrap_attributes_preserve_aligned","last_token","last_tag_token","TagOpenParserToken","TAG_OPEN","_handle_tag_open","tag_complete","_handle_inside_tag","TAG_CLOSE","_handle_tag_close","_handle_text","is_unformatted","tag_start_char","has_wrapped_attrs","indent_content","is_content_unformatted","is_inline_element","attr_count","wrap_attributes_min_attrs","custom_beautifier_name","_print_custom_beatifier_text","_beautifier","script_indent_level","post","html_source","indent_scripts","Child_options","child_options","_get_tag_open_token","is_empty_element","is_start_tag","start_tag_token","_set_tag_position","peek_index","peek_token","is_end_tag","multiline_content","tag_check_match","startsWith","handlebar_starts","wrap_attributes_indent_size","void_elements","unformatted","content_unformatted","inline","_do_optional_end_element","extra_liners","foundIfOnCurrentLine","_calcluate_parent_multiline","do_end_expand","indent_inner_html","indent_head_inner_html","indent_body_inner_html","p_closers","p_parent_excludes","p_parent","style_html","indent_handlebars","unformatted_content_delimiter","BaseTokenizer","BASETOKEN","UNKNOWN","_current_tag_name","templatable_reader","pattern_reader","single_quote","double_quote","attribute","element_name","handlebars_open","handlebars_raw_close","cdata","conditional_comment","processing","_unformatted_content_delimiter","literal_regexp","_read_open_handlebars","_read_attribute","_read_close","_read_raw_content","_read_content_word","_read_comment_or_cdata","_read_processing","_read_open","_is_content_unformatted","baseASCIIidentifierStartChars","baseASCIIidentifierChars","identifierStart","identifierChars","identifier","identifierMatch","newline","line_starters","positionable_operators","ltrim","generateMapFromStrings","reserved_word","RESERVED","reserved_array","special_words","validPositionValues","OPERATOR_POSITION","OPERATOR_POSITION_BEFORE_OR_PRESERVE","before_newline","preserve_newline","MODE","Statement","ObjectLiteral","ArrayLiteral","ForInitializer","Conditional","Expression","remove_redundant_indentation","multiline_frame","start_line_index","split_linebreaks","is_array","is_expression","all_lines_start_with","each_line_matches_indent","_tokens","_last_last_text","_flags","_previous_flags","_flag_store","create_flags","flags_base","next_indent_level","indentation_level","line_indent_level","next_flags","START_BLOCK","last_word","declaration_statement","declaration_assignment","inline_frame","if_block","else_block","class_start_block","do_block","do_while","import_block","in_case_statement","in_case","case_body","case_block","ternary_depth","test_output_raw","set_mode","handle_token","preserve_statement_flags","START_EXPR","handle_start_expr","END_EXPR","handle_end_expr","handle_start_block","END_BLOCK","handle_end_block","WORD","handle_word","SEMICOLON","handle_semicolon","STRING","handle_string","handle_equals","OPERATOR","handle_operator","COMMA","handle_comma","BLOCK_COMMENT","handle_block_comment","handle_comment","DOT","handle_dot","handle_eof","handle_unknown","handle_whitespace_and_comments","keep_whitespace","keep_array_indentation","comment_token","newline_restricted_tokens","allow_wrap_or_preserved_newline","force_linewrap","shouldPreserveOrForce","operatorLogicApplies","shouldPrintOperatorNewline","operator_position","next_token","restore_mode","print_token_line_indentation","comma_first","popped","deindent","start_of_object_property","start_of_statement","next_mode","space_in_paren","space_before_conditional","peek_back_two","space_after_named_function","peek_back_three","space_after_anon_function","space_in_empty_paren","second_token","empty_braces","empty_anonymous_function","brace_preserve_inline","check_token","jslint_happy","isGeneratorAsterisk","isUnary","space_before","space_after","in_ternary","isColon","isTernaryColon","isOtherColon","after_newline","new_line_needed","preserve","print_block_commment","javadoc","starless","lastIndent","lastIndentLength","break_chained_methods","unindent_chained_methods","js_source_text","raw_brace_style","braces_on_own_line","unescape_strings","e4x","number_pattern","digit","dot_pattern","punct","punct_pattern","reserved_words","reserved_word_pattern","in_html_comment","templatable","block_comment","html_comment_start","html_comment_end","include","shebang","xml","template_text","template_expression","_read_non_javascript","_read_string","_read_pair","_read_word","_read_singles","_read_comment","_read_regexp","_read_xml","_read_punctuation","sharp","has_char_escapes","_read_string_recursive","unescape_string","_allow_regexp_or_xml","in_char_class","xmlStr","rootTag","isCurlyRoot","isEndTag","isSingletonTag","input_scan","delimiter","allow_unescaped_newlines","start_sub","current_char","notOk","Nanobus","_name","_starListeners","emitTiming","_emit","ilength","startIdx","removeCount","OL_KEY_ID","KEY_ID","OL_ATTR_ID","KEY_ATTR","Nanocomponent","makeID","_id","_ncID","_olID","_proxy","_rootNodeName","_rerender","_handleLoad","_handleUnload","_arguments","getElementById","dataset","nanocomponent","createTiming","updateTiming","shouldUpdate","desiredHtml","_handleRender","afterupdate","_createProxy","beforerender","unload","afterreorder","rerender","createElementTiming","Element","_brandNode","_ensureID","isSameNode","safeExternalLink","protocolLink","root","traverse","localName","hasAttribute","trailingNewlineRegex","leadingNewlineRegex","trailingSpaceRegex","leadingSpaceRegex","multiSpaceRegex","TEXT_TAGS","VERBATIM_TAGS","childs","hadText","leader","_nodeName","hyperx","SVG_TAGS","BOOL_PROPS","DIRECT_PROPS","SVGNS","XLINKNS","COMMENT_TAG","nanoHtmlCreateElement","isCustomElement","is","createElementNS","createComment","setAttributeNS","fragment","nanohtmlRawBrowser","innerHTML","toArray","alphabet","mask","step","emojis","fatal","levels","defaultColors","foreground","brightBlack","Nanologger","_colors","_logLevel","_print","getTimeStamp","emoji","msgColor","objs","hours","seconds","_unlink","_checkAge","modified","now","evict","TEXT_NODE","oldTree","childrenOnly","updateChildren","walk","oldNode","getComponentId","nanomorphComponentId","oldChild","newChild","morphed","oldMatch","same","eventsLength","ELEMENT_NODE","COMMENT_NODE","copyAttrs","updateOption","updateTextarea","copyEvents","oldAttrs","newAttrs","attrNamespaceURI","attrValue","fromValue","attrName","namespaceURI","getAttributeNS","specified","hasAttributeNS","removeAttributeNS","updateAttribute","oldValue","indeterminate","qs","url","a0","a1","a2","a3","raf","redrawScheduled","redraw","_args","wayfarer","isLocalFile","electron","stripElectron","normalize","Nanorouter","routename","isElectron","createScheduler","_nanoScheduler","NanoScheduler","hasIdle","scheduled","schedule","idleDeadline","timeRemaining","DISABLE_NANOTIMING","mark","startName","endName","measureName","clearMarks","propIsEnumerable","toObject","shouldUseNative","test1","test2","order2","test3","letter","objectChangeCallsite","strip","deleteProperty","hasMap","mapSizeDescriptor","mapSize","mapForEach","hasSet","setSizeDescriptor","setForEach","hasWeakMap","weakMapHas","hasWeakSet","weakSetHas","hasWeakRef","weakRefDeref","deref","booleanValueOf","functionToString","$match","$slice","$toUpperCase","$toLowerCase","$test","$join","$arrSlice","$floor","bigIntValueOf","gOPS","symToString","hasShammedSymbols","toStringTag","isEnumerable","gPO","addNumericSeparator","sepRegex","int","intStr","dec","utilInspect","inspectCustom","custom","inspectSymbol","inspect_","quoteStyle","maxStringLength","numericSeparator","inspectString","bigIntStr","maxDepth","getIndent","noIndent","newOpts","nameOf","arrObjKeys","symString","markBoxed","isElement","wrapQuotes","singleLineValues","indentedJoin","cause","isMap","mapParts","collectionOf","isSet","setParts","isWeakMap","weakCollectionOf","isWeakSet","isWeakRef","isBigInt","ys","isPlainObject","protoTag","stringTag","constructorTag","defaultStyle","quoteChar","HTMLElement","trailer","lowbyte","joinedEntries","baseIndent","lineJoiner","isArr","symMap","watch","INDEX","MutationObserver","mutations","attributeName","eachAttr","turnon","turnoff","eachMutation","removedNodes","addedNodes","observe","childList","subtree","attributeOldValue","attributeFilter","caller","mutation","sameOrigin","onloadid","entryTypes","PerformanceObserver","_onperformance","stop","parseEntries","getEntries","clearMeasures","clearResourceTimings","qry","pairs","pair","authority","ipv6uri","pathNames","queryKey","regx","$0","$2","plucker","pluckSingle","pluckPath","prettierBytes","neg","exponent","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","draining","currentQueue","queueIndex","cleanUpNextTick","drainQueue","run","nextTick","Item","browser","argv","versions","binding","cwd","chdir","umask","percentTwenties","Format","RFC1738","RFC3986","allowDots","allowPrototypes","allowSparse","arrayLimit","charset","charsetSentinel","decoder","ignoreQueryPrefix","interpretNumericEntities","parameterLimit","parseArrays","plainObjects","strictNullHandling","numberStr","parseArrayValue","isoSentinel","parseValues","parseQueryStringValues","cleanStr","skipIndex","bracketEqualsPos","maybeMap","encodedVal","combine","parseObject","chain","valuesParsed","leaf","cleanRoot","parseKeys","parseQueryStringKeys","givenKey","brackets","segment","normalizeParseOptions","tempObj","newObj","merge","compact","getSideChannel","arrayPrefixGenerators","indices","pushToArray","valueOrArray","toISO","toISOString","defaultFormat","addQueryPrefix","encoder","encodeValuesOnly","serializeDate","skipNulls","isNonNullishPrimitive","sentinel","generateArrayPrefix","commaRoundTrip","sideChannel","tmpSc","findFlag","keyValue","values","objKeys","adjustedPrefix","valueSideChannel","normalizeStringifyOptions","arrayFormat","joined","hexTable","compactQueue","compacted","arrayToObject","mergeTarget","targetItem","assignSingleSource","strWithoutPlus","unescape","defaultEncoder","refs","mapped","queueMicrotask","MAX_BYTES","MAX_UINT32","oldBrowser","crypto","msCrypto","getRandomValues","randomBytes","copyProps","SafeBuffer","randomFromSeed","ORIGINAL","previousSeed","shuffled","setCharacters","_alphabet_","unique","ind","characters","setSeed","seed","shuffle","sourceArray","targetArray","nextValue","characterIndex","getShuffled","alphabetShuffled","REDUCE_TIME","previousSeconds","build","clusterWorkerId","loopCounter","isValid","seedValue","worker","workerId","newCharacters","isShortId","nonAlphabetic","randomByte","getNextValue","_seed_","callBound","$WeakMap","$Map","$weakMapGet","$weakMapSet","$weakMapHas","$mapGet","$mapSet","$mapHas","listGetNode","listGet","listSet","listHas","$wm","$m","$o","channel","randombytes","stream","errCode","MAX_BUFFERED_AMOUNT","ICECOMPLETE_TIMEOUT","CHANNEL_CLOSING_TIMEOUT","filterTrickle","sdp","Peer","Duplex","allowHalfOpen","_debug","channelName","initiator","channelConfig","channelNegotiated","negotiated","offerOptions","answerOptions","sdpTransform","streams","trickle","allowHalfTrickle","iceCompleteTimeout","destroyed","destroying","_connected","remoteAddress","remoteFamily","remotePort","localFamily","localPort","_wrtc","_pcReady","_channelReady","_iceComplete","_iceCompleteTimer","_channel","_pendingCandidates","_isNegotiating","_firstNegotiation","_batchedNegotiation","_queuedNegotiation","_sendersAwaitingStable","_senderMap","_closingInterval","_remoteTracks","_remoteStreams","_chunk","_cb","_interval","_pc","_isReactNativeWebrtc","_peerConnectionId","oniceconnectionstatechange","_onIceStateChange","onicegatheringstatechange","onconnectionstatechange","_onConnectionStateChange","onsignalingstatechange","_onSignalingStateChange","onicecandidate","_onIceCandidate","peerIdentity","_setupData","createDataChannel","ondatachannel","addStream","ontrack","_onTrack","_needsNegotiation","_onFinishBound","_onFinish","bufferSize","bufferedAmount","connected","address","family","renegotiate","transceiverRequest","addTransceiver","candidate","remoteDescription","_addIceCandidate","setRemoteDescription","_createAnswer","iceCandidateObj","addIceCandidate","getTracks","track","addTrack","submap","sender","replaceTrack","oldTrack","newTrack","removeTrack","removeStream","negotiate","_createOffer","_destroy","readable","_readableState","ended","_writableState","finished","bufferedAmountLowThreshold","_onChannelMessage","onbufferedamountlow","_onChannelBufferedAmountLow","_onChannelOpen","_onChannelClose","filename","lineno","colno","isClosing","_read","_write","destroySoon","_startIceCompleteTimeout","createOffer","offer","sendOffer","localDescription","setLocalDescription","_requestMissingTransceivers","getTransceivers","transceiver","mid","requested","createAnswer","answer","sendAnswer","connectionState","iceConnectionState","iceGatheringState","_maybeReady","getStats","flattenValues","report","reports","_connecting","findCandidatePair","remoteCandidates","localCandidates","candidatePairs","foundSelectedCandidatePair","setSelectedCandidatePair","selectedCandidatePair","localCandidateId","ip","ipAddress","portNumber","googLocalAddress","remote","remoteCandidateId","googRemoteAddress","selectedCandidatePairId","googActiveConnection","selected","_onInterval","unref","signalingState","sdpMLineIndex","sdpMid","eventStream","remoteStream","WEBRTC_SUPPORT","iceServers","urls","sdpSemantics","__nwjs","enableOverride","namespacesCache","enabledCache","newDebug","toNamespace","msAbs","isPlural","_inheritsLoose","createErrorType","Base","arg1","arg2","arg3","NodeError","_Base","oneOf","thing","this_len","determiner","Readable","Writable","onend","highWaterMark","getBuffer","onEndNT","PassThrough","Transform","_transform","ReadableState","EE","EElistenerCount","Stream","OurUint8Array","_uint8ArrayToBuffer","_isUint8Array","debugUtil","BufferList","destroyImpl","_require","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","StringDecoder","createReadableStreamAsyncIterator","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","_undestroy","undestroy","skipChunkCheck","readableAddChunk","addToFront","onEofChunk","chunkInvalid","addChunk","maybeReadMore","emitReadable","isPaused","setEncoding","enc","MAX_HWM","computeNewHighWaterMark","howMuchToRead","nOrig","endReadable","doRead","emitReadable_","flow","maybeReadMore_","pipe","dest","pipeOpts","doEnd","stdout","stderr","endFn","unpipe","onunpipe","unpipeInfo","hasUnpiped","ondrain","pipeOnDrain","cleanedUp","onfinish","ondata","needDrain","resume","pipeOnDrainFunctionResult","dests","nReadingNextTick","updateReadableListening","resume_","wrap","methodWrap","methodWrapReturnFunction","asyncIterator","_fromList","consume","endReadableNT","wState","iterable","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","_flush","prefinish","err2","WriteReq","CorkedRequest","onCorkedFinish","WritableState","internalUtil","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","bufferedRequest","lastBufferedRequest","pendingcb","prefinished","errorEmitted","bufferedRequestCount","corkedRequestsFree","writableStateBufferGetter","realHasInstance","hasInstance","writev","_writev","final","_final","writeAfterEnd","validChunk","isBuf","writeOrBuffer","cork","uncork","clearBuffer","setDefaultEncoding","decodeChunk","newChunk","onwriteError","finishMaybe","onwriteStateUpdate","needFinish","afterWrite","onwriteDrain","holder","allBuffers","endWritable","callFinal","need","rState","corkReq","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","wrapForNext","lastPromise","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","_Object$create","_require2","copyBuffer","hasStrings","_getString","_getBuffer","readableDestroyed","writableDestroyed","emitErrorNT","emitErrorAndCloseNT","emitCloseNT","ERR_STREAM_PREMATURE_CLOSE","called","isRequest","setHeader","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","ERR_MISSING_ARGS","destroyer","popCallback","pipeline","destroys","ERR_INVALID_OPT_VALUE","highWaterMarkFrom","duplexKey","hwm","Manager","managers","sameNamespace","nsps","newConnection","forceNew","multiplex","io","connect","eio","subs","reconnection","reconnectionAttempts","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","connecting","lastPing","packetBuffer","_parser","Encoder","Decoder","autoConnect","emitAll","nsp","updateSocketIds","generateId","engine","_reconnection","_reconnectionAttempts","_reconnectionDelay","_randomizationFactor","_reconnectionDelayMax","_timeout","maybeReconnectOnOpen","reconnecting","reconnect","skipReconnect","openSub","errorSub","timer","onping","onpong","ondecoded","onConnecting","processPacketQueue","subsLength","disconnect","delay","onreconnect","attempt","hasBin","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","ids","acks","receiveBuffer","sendBuffer","disconnected","subEvents","BINARY_EVENT","EVENT","CONNECT","onpacket","rootNamespaceError","ERROR","onconnect","onevent","ACK","onack","BINARY_ACK","DISCONNECT","ondisconnect","ack","sent","emitBuffered","deconstructPacket","packetData","_deconstructPacket","attachments","_placeholder","newData","reconstructPacket","_reconstructPacket","isIndexValid","removeBlobs","_removeBlobs","curKey","containingObject","pendingBlobs","fileReader","bloblessData","ERROR_PACKET","encodeAsBinary","encodeAsString","payload","tryStringify","writeEncoding","deconstruction","reconstructor","decodeString","BinaryReconstructor","reconPack","takeBinaryData","tryParse","isPayloadValid","finishedReconstruction","binData","withNativeBuffer","withNativeArrayBuffer","fastSafeStringify","_normalizeEncoding","retried","normalizeEncoding","nenc","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8End","utf8Text","utf8CheckByte","byte","utf8CheckIncomplete","utf8CheckExtraBytes","Agent","_defaults","_loop","_setDefaults","_iterator","_createForOfIteratorHelper","_step","def","_toConsumableArray","safeStringify","RequestBase","ResponseBase","getXHR","ActiveXObject","_unused2","_unused3","_unused4","serialize","pushEncodedKeyValuePair","subkey","serializeObject","parseString","string_","length_","urlencoded","parseHeader","fields","isJSON","mime","Response","request_","statusText","_setStatusProperties","getAllResponseHeaders","header","_setHeaderProperties","_responseType","_parseBody","toError","_query","_header","rawResponse","statusCode","new_error","_isResponseOK","accept","auth","user","pass","_auth","_data","_getFormData","_formData","FormData","_shouldRetry","_retry","_callback","_maxRetries","retries","_retries","crossDomainError","crossDomain","_isHost","_endCalled","_finalizeQueryString","_end","_setUploadTimeout","_uploadTimeout","_uploadTimeoutTimer","_timeoutError","_aborted","_setTimeouts","_responseTimeoutTimer","_unused5","timedout","handleProgress","percent","upload","_unused6","username","password","_withCredentials","_serialize","_serializer","del","patch","put","semver","_timer","_responseTimeout","deadline","retry","_retryCallback","ERROR_CODES","STATUS_CODES","timedoutError","_fullfilledPromise","_okCallback","getHeader","unset","gte","lt","base64Encoder","redirects","_maxRedirects","maxResponseSize","_maxResponseSize","isObject_","sortQuery","_sort","queryArray","_appendQueryString","errno","ct","parameters","links","link","parseLinks","trunc","statusType","redirect","clientError","serverError","created","accepted","noContent","badRequest","unauthorized","notAcceptable","forbidden","notFound","unprocessableEntity","_value","_iterator2","_step2","rel","cleanHeader","changesOrigin","authorization","trie","_trie","Wayfarer","dft","_wayfarer","Route","Trie","createNode","thisRoute","$$","wildcard","decoded","P5","p5","createCanvas","draw","canvas","show","hide","drawingContext","clearRect","PatchBay","PBLive","session","nickFromId","idFromNick","loadFromStorage","settings","server","room","makeGlobal","setPageTitle","setTitle","nick","setName","_processBroadcast","handleNewPeer","onbeforeunload","video","srcObject","URL","createObjectURL","play","initSource","initConnectionFromId","peer","broadcast","SimplePeer","shortid","signaller","_peerOptions","peerOptions","_room","peers","rtcPeers","_readyForSignalling","_handleMessage","_receivedBroadcast","_newPeer","sendToAll","sendToPeer","peerId","reinitAll","reinitPeer","initRtcPeer","newOptions","shareMediaWhenInitiating","requestMediaWhenInitiating","offerConstraints","offerToReceiveVideo","offerToReceiveAudio","shareMediaWhenRequested","_attachPeerEvents","reinitRtcConnection","rtcPeer","servers","_handleSignal","sketch_id","examples","sketches","license","Gallery","exampleIndex","serverURL","setSketchFromURL","setRandomSketch","newurl","hush","o0","searchParams","URLSearchParams","base64Code","showCode","foundSketch","sketch","getExampleById","setSketch","setSketchFromCode","decodeBase64","saveImage","setToURL","url_params","encodeBase64","atob","startString","shareSketch","hydra","saveSketch","getScreenImage","img","saveLocally","i18next","i18nextBrowserLanguageDetector","languageResources","availableLanguages","languagePath","lang","loadLanguageFromURL","updateAvailableLanguages","translation","selectedLanguage","fetch","i18n","repl","showInfo","showUI","SERVER_URL","editor","sketchFromURL","screencap","download","getFullYear","click","revokeObjectURL","evt","mutator","doUndo","mutate","reroll","changeTransform","formatCode","clearAll","speed","flashCode","editorText","showConfirmation","successCallback","terminateCallback","prompt","en","toolbar","subtitle","uses","author","support","HydraEditor","Editor","logElement","textEl","innerText","opacity","HydraCanvas","isIOS","MSStream","precisionValue","hydraOptions","detectAudio","precision","Hydra","captureStream","hydraSynth","center","keymaps","Mutator","beautify_js","isShowing","getCurrentBlock","styleSelectedText","toggle","startline","endline","pos1","pos2","UndoStack","glslTransforms","undoStack","initialVector","funcTab","transMap","scanFuncs","dumpDict","dumpList","gslTab","argList","inputs","argL","tn","lastLitX","needToRun","tryCounter","ast","regen","atTop","canUndo","setText","doRedo","canRedo","literalTab","functionTab","litCount","funCount","nextVect","glitchTrans","glitchLiteral","litx","modLit","glitched","glitchRelToInit","was","glitchNumber","rndVal","initVal","funx","oldName","ftype","others","changeX","become","nextX","glsl","jsString","textDirection","langArray","docs","gallery","repo","pixeljam","garden","tutorials","discord","facebook","dispatch","icon","toggleInfo"],"sources":["node_modules/browser-pack/_prelude.js","index.js","node_modules/@babel/runtime/helpers/arrayLikeToArray.js","node_modules/@babel/runtime/helpers/arrayWithHoles.js","node_modules/@babel/runtime/helpers/assertThisInitialized.js","node_modules/@babel/runtime/helpers/classCallCheck.js","node_modules/@babel/runtime/helpers/createClass.js","node_modules/@babel/runtime/helpers/defineProperty.js","node_modules/@babel/runtime/helpers/getPrototypeOf.js","node_modules/@babel/runtime/helpers/inherits.js","node_modules/@babel/runtime/helpers/iterableToArray.js","node_modules/@babel/runtime/helpers/nonIterableRest.js","node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","node_modules/@babel/runtime/helpers/setPrototypeOf.js","node_modules/@babel/runtime/helpers/toArray.js","node_modules/@babel/runtime/helpers/toPrimitive.js","node_modules/@babel/runtime/helpers/toPropertyKey.js","node_modules/@babel/runtime/helpers/typeof.js","node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","node_modules/acorn/dist/acorn.js","node_modules/after/index.js","node_modules/arraybuffer.slice/index.js","node_modules/assert/assert.js","node_modules/assert/node_modules/inherits/inherits_browser.js","node_modules/assert/node_modules/util/support/isBufferBrowser.js","node_modules/assert/node_modules/util/util.js","node_modules/astravel/dist/astravel.js","node_modules/astravel/dist/attachComments.js","node_modules/astravel/dist/defaultTraveler.js","node_modules/astring/dist/astring.js","node_modules/backo2/index.js","node_modules/base64-arraybuffer/lib/base64-arraybuffer.js","node_modules/base64-js/index.js","node_modules/blob/index.js","node_modules/buffer/index.js","node_modules/call-bind/callBound.js","node_modules/call-bind/index.js","node_modules/choo-devtools/index.js","node_modules/choo-devtools/lib/copy.js","node_modules/choo-devtools/lib/debug.js","node_modules/choo-devtools/lib/help.js","node_modules/choo-devtools/lib/log.js","node_modules/choo-devtools/lib/logger.js","node_modules/choo-devtools/lib/perf.js","node_modules/choo-devtools/lib/storage.js","node_modules/choo-hooks/index.js","node_modules/choo/component/cache.js","node_modules/choo/component/index.js","node_modules/choo/html/index.js","node_modules/choo/html/raw.js","node_modules/choo/index.js","node_modules/clipboard-copy/index.js","node_modules/clone/clone.js","node_modules/codemirror-minified/addon/comment/comment.js","node_modules/codemirror-minified/addon/hint/javascript-hint.js","node_modules/codemirror-minified/addon/hint/show-hint.js","node_modules/codemirror-minified/addon/selection/mark-selection.js","node_modules/codemirror-minified/lib/codemirror.js","node_modules/codemirror-minified/mode/javascript/javascript.js","node_modules/component-bind/index.js","node_modules/component-emitter/index.js","node_modules/component-inherit/index.js","node_modules/document-ready/index.js","node_modules/engine.io-client/lib/globalThis.browser.js","node_modules/engine.io-client/lib/index.js","node_modules/engine.io-client/lib/socket.js","node_modules/engine.io-client/lib/transport.js","node_modules/engine.io-client/lib/transports/index.js","node_modules/engine.io-client/lib/transports/polling-jsonp.js","node_modules/engine.io-client/lib/transports/polling-xhr.js","node_modules/engine.io-client/lib/transports/polling.js","node_modules/engine.io-client/lib/transports/websocket.js","node_modules/engine.io-client/lib/transports/xmlhttprequest.browser.js","node_modules/engine.io-client/node_modules/debug/src/browser.js","node_modules/engine.io-client/node_modules/debug/src/debug.js","node_modules/engine.io-client/node_modules/ms/index.js","node_modules/engine.io-parser/lib/browser.js","node_modules/engine.io-parser/lib/keys.js","node_modules/engine.io-parser/lib/utf8.js","node_modules/err-code/index.js","node_modules/events/events.js","node_modules/fast-safe-stringify/index.js","node_modules/function-bind/implementation.js","node_modules/function-bind/index.js","node_modules/get-browser-rtc/index.js","node_modules/get-intrinsic/index.js","node_modules/global/document.js","node_modules/global/window.js","node_modules/has-binary2/index.js","node_modules/has-binary2/node_modules/isarray/index.js","node_modules/has-cors/index.js","node_modules/has-proto/index.js","node_modules/has-symbols/index.js","node_modules/has-symbols/shams.js","node_modules/has/src/index.js","node_modules/hyperscript-attribute-to-property/index.js","node_modules/hyperx/index.js","node_modules/i18next-browser-languagedetector/dist/cjs/i18nextBrowserLanguageDetector.js","node_modules/i18next/dist/cjs/i18next.js","node_modules/ieee754/index.js","node_modules/indexof/index.js","node_modules/inherits/inherits_browser.js","node_modules/js-beautify/js/index.js","node_modules/js-beautify/js/src/core/directives.js","node_modules/js-beautify/js/src/core/inputscanner.js","node_modules/js-beautify/js/src/core/options.js","node_modules/js-beautify/js/src/core/output.js","node_modules/js-beautify/js/src/core/pattern.js","node_modules/js-beautify/js/src/core/templatablepattern.js","node_modules/js-beautify/js/src/core/token.js","node_modules/js-beautify/js/src/core/tokenizer.js","node_modules/js-beautify/js/src/core/tokenstream.js","node_modules/js-beautify/js/src/core/whitespacepattern.js","node_modules/js-beautify/js/src/css/beautifier.js","node_modules/js-beautify/js/src/css/index.js","node_modules/js-beautify/js/src/css/options.js","node_modules/js-beautify/js/src/html/beautifier.js","node_modules/js-beautify/js/src/html/index.js","node_modules/js-beautify/js/src/html/options.js","node_modules/js-beautify/js/src/html/tokenizer.js","node_modules/js-beautify/js/src/index.js","node_modules/js-beautify/js/src/javascript/acorn.js","node_modules/js-beautify/js/src/javascript/beautifier.js","node_modules/js-beautify/js/src/javascript/index.js","node_modules/js-beautify/js/src/javascript/options.js","node_modules/js-beautify/js/src/javascript/tokenizer.js","node_modules/nanoassert/index.js","node_modules/nanobus/index.js","node_modules/nanobus/node_modules/remove-array-items/index.js","node_modules/nanocomponent/index.js","node_modules/nanocomponent/node_modules/nanoassert/index.js","node_modules/nanohref/index.js","node_modules/nanohtml/lib/append-child.js","node_modules/nanohtml/lib/bool-props.js","node_modules/nanohtml/lib/browser.js","node_modules/nanohtml/lib/direct-props.js","node_modules/nanohtml/lib/dom.js","node_modules/nanohtml/lib/raw-browser.js","node_modules/nanohtml/lib/svg-tags.js","node_modules/nanoid/format.browser.js","node_modules/nanologger/index.js","node_modules/nanolru/index.js","node_modules/nanomorph/index.js","node_modules/nanomorph/lib/events.js","node_modules/nanomorph/lib/morph.js","node_modules/nanoquery/browser.js","node_modules/nanoraf/index.js","node_modules/nanorouter/index.js","node_modules/nanoscheduler/index.js","node_modules/nanotiming/browser.js","node_modules/object-assign/index.js","node_modules/object-change-callsite/index.js","node_modules/object-inspect/index.js","node_modules/on-load/index.js","node_modules/on-performance/browser.js","node_modules/parseqs/index.js","node_modules/parseuri/index.js","node_modules/plucker/index.js","node_modules/prettier-bytes/index.js","node_modules/process/browser.js","node_modules/qs/lib/formats.js","node_modules/qs/lib/index.js","node_modules/qs/lib/parse.js","node_modules/qs/lib/stringify.js","node_modules/qs/lib/utils.js","node_modules/queue-microtask/index.js","node_modules/randombytes/browser.js","node_modules/remove-array-items/dist/remove-array-items.cjs.js","node_modules/safe-buffer/index.js","node_modules/scroll-to-anchor/index.js","node_modules/shortid/index.js","node_modules/shortid/lib/alphabet.js","node_modules/shortid/lib/build.js","node_modules/shortid/lib/generate.js","node_modules/shortid/lib/index.js","node_modules/shortid/lib/is-valid.js","node_modules/shortid/lib/random/random-byte-browser.js","node_modules/shortid/lib/random/random-from-seed.js","node_modules/shortid/lib/util/cluster-worker-id-browser.js","node_modules/side-channel/index.js","node_modules/simple-peer/index.js","node_modules/simple-peer/node_modules/debug/src/browser.js","node_modules/simple-peer/node_modules/debug/src/common.js","node_modules/simple-peer/node_modules/ms/index.js","node_modules/simple-peer/node_modules/readable-stream/errors-browser.js","node_modules/simple-peer/node_modules/readable-stream/lib/_stream_duplex.js","node_modules/simple-peer/node_modules/readable-stream/lib/_stream_passthrough.js","node_modules/simple-peer/node_modules/readable-stream/lib/_stream_readable.js","node_modules/simple-peer/node_modules/readable-stream/lib/_stream_transform.js","node_modules/simple-peer/node_modules/readable-stream/lib/_stream_writable.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/async_iterator.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/buffer_list.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/destroy.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/from-browser.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/pipeline.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/state.js","node_modules/simple-peer/node_modules/readable-stream/lib/internal/streams/stream-browser.js","node_modules/simple-peer/node_modules/readable-stream/readable-browser.js","node_modules/socket.io-client/lib/index.js","node_modules/socket.io-client/lib/manager.js","node_modules/socket.io-client/lib/on.js","node_modules/socket.io-client/lib/socket.js","node_modules/socket.io-client/lib/url.js","node_modules/socket.io-client/node_modules/debug/src/browser.js","node_modules/socket.io-parser/binary.js","node_modules/socket.io-parser/index.js","node_modules/socket.io-parser/is-buffer.js","node_modules/socket.io-parser/node_modules/debug/src/browser.js","node_modules/state-copy/index.js","node_modules/string_decoder/lib/string_decoder.js","node_modules/superagent/src/agent-base.js","node_modules/superagent/src/client.js","node_modules/superagent/lib/node_modules/superagent/src/request-base.js","node_modules/superagent/src/response-base.js","node_modules/superagent/src/utils.js","node_modules/to-array/index.js","node_modules/util-deprecate/browser.js","node_modules/wayfarer/get-all-routes.js","node_modules/wayfarer/index.js","node_modules/wayfarer/trie.js","node_modules/yeast/index.js","src/lib/p5-wrapper.js","src/lib/patch-bay/pb-live.js","src/lib/patch-bay/rtc-patch-bay.js","src/stores/examples.json","src/stores/gallery.js","src/stores/language-store.js","src/stores/store.js","src/stores/text-elements.js","src/views/EditorComponent.js","src/views/Hydra.js","src/views/editor/editor.js","src/views/editor/keymaps.js","src/views/editor/log.js","src/views/editor/randomizer/Mutator.js","src/views/editor/randomizer/UndoStack.js","src/views/editor/randomizer/glslTransforms.js","src/views/editor/repl.js","src/views/info.js","src/views/main.js","src/views/toolbar.js"],"sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _getPrototypeOf(o);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}\nmodule.exports = _toArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nmodule.exports = _toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\nmodule.exports = _toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.acorn = {}));\n})(this, (function (exports) { 'use strict';\n\n // This file was generated. Do not modify manually!\n var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n // This file was generated. Do not modify manually!\n var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\n\n // This file was generated. Do not modify manually!\n var nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n // This file was generated. Do not modify manually!\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n // These are a run-length and offset encoded representation of the\n // >0xffff code points that are a valid part of identifiers. The\n // offset starts at 0x10000, and each pair of numbers represents an\n // offset to the next range, and then a size of the range.\n\n // Reserved word lists for various dialects of the language\n\n var reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n };\n\n // And the keywords\n\n var ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\n var keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n };\n\n var keywordRelationalOperator = /^in(stanceof)?$/;\n\n // ## Character categories\n\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n // This has a complexity linear to the value of the code. The\n // assumption is that looking up astral identifier characters is\n // rare.\n function isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n }\n\n // Test whether a given character code starts an identifier.\n\n function isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n }\n\n // Test whether a given character is part of an identifier.\n\n function isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n }\n\n // ## Token types\n\n // The assignment of fine-grained, information-carrying type objects\n // allows the tokenizer to store the information it has about a\n // token in a way that is very cheap for the parser to look up.\n\n // All token type variables start with an underscore, to make them\n // easy to recognize.\n\n // The `beforeExpr` property is used to disambiguate between regular\n // expressions and divisions. It is set on all token types that can\n // be followed by an expression (thus, a slash after them would be a\n // regular expression).\n //\n // The `startsExpr` property is used to check if the token ends a\n // `yield` expression. It is set on all token types that either can\n // directly start an expression (like a quotation mark) or can\n // continue an expression (like the body of a string).\n //\n // `isLoop` marks a keyword as starting a loop, which is important\n // to know when parsing a label, in order to allow or disallow\n // continue jumps to that label.\n\n var TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n };\n\n function binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n }\n var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n // Map keyword names to token types.\n\n var keywords = {};\n\n // Succinct definitions of keyword token types\n function kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n }\n\n var types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"/<=/>=\", 7),\n bitShift: binop(\"<>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n };\n\n // Matches a whole line break (where CRLF is considered a single\n // line break). Used to count lines.\n\n var lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\n var lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n function isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n }\n\n function nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n }\n\n var nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\n var skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\n var ref = Object.prototype;\n var hasOwnProperty = ref.hasOwnProperty;\n var toString = ref.toString;\n\n var hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n ); });\n\n var isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n ); });\n\n function wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n }\n\n function codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n }\n\n var loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n // These are used when `options.locations` is on, for the\n // `startLoc` and `endLoc` properties.\n\n var Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n };\n\n Position.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n };\n\n var SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n };\n\n // The `getLineInfo` function is mostly useful when the\n // `locations` option is off (for performance reasons) and you\n // want to find the line/column position for a given character\n // offset. `input` should be the code string that the offset refers\n // into.\n\n function getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n }\n\n // A second argument must be given to configure the parser process.\n // These options are recognized (only `ecmaVersion` is required):\n\n var defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n };\n\n // Interpret and default an options object\n\n var warnedAboutEcmaVersion = false;\n\n function getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n }\n\n function pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n }\n\n // Each scope gets a bitset that may contain these flags\n var\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\n function functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n }\n\n // Used in checkLVal* and declareName to determine the type of a binding\n var\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\n var Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n };\n\n var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\n Parser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n };\n\n prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\n prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\n prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\n prototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n };\n\n prototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n };\n\n prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\n prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\n prototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n };\n\n prototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n };\n\n Parser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n };\n\n Parser.parse = function parse (input, options) {\n return new this(options, input).parse()\n };\n\n Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n };\n\n Parser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n };\n\n Object.defineProperties( Parser.prototype, prototypeAccessors );\n\n var pp$9 = Parser.prototype;\n\n // ## Parser utilities\n\n var literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\n pp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n };\n\n // Predicate that tests whether the next token is of the given\n // type, and if yes, consumes it as a side effect.\n\n pp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n };\n\n // Tests whether parsed token is a contextual keyword.\n\n pp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n };\n\n // Consumes contextual keyword if possible.\n\n pp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n };\n\n // Asserts that following token is given contextual keyword.\n\n pp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n };\n\n // Test whether a semicolon can be inserted at the current position.\n\n pp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n };\n\n pp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n };\n\n // Consume a semicolon, or, failing that, see if we are allowed to\n // pretend that there is a semicolon at this position.\n\n pp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n };\n\n pp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n };\n\n // Expect a token of a given type. If found, consume it, otherwise,\n // raise an unexpected token error.\n\n pp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n };\n\n // Raise an unexpected token error.\n\n pp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n };\n\n var DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n };\n\n pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n };\n\n pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n };\n\n pp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n };\n\n pp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n };\n\n var pp$8 = Parser.prototype;\n\n // ### Statement parsing\n\n // Parse a program. Initializes the parser, reads any number of\n // statements, and wraps them in a Program node. Optionally takes a\n // `program` argument. If present, the statements will be appended\n // to its body instead of creating a new node.\n\n pp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n };\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n pp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'\n if (context) { return false }\n\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n };\n\n // check 'async [no LineTerminator here] function'\n // - 'async /*foo*/ function' is OK.\n // - 'async /*\\n*/ function' is invalid.\n pp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n };\n\n // Parse a single statement.\n //\n // If expecting a statement and finding a slash operator, parse a\n // regular expression literal. This is to handle cases like\n // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n // does not help.\n\n pp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n };\n\n pp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n };\n\n pp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n };\n\n pp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n };\n\n // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n // loop is non-trivial. Basically, we have to parse the init `var`\n // statement or expression, disallowing the `in` operator (see\n // the second parameter to `parseExpression`), and then check\n // whether the next token is `in` or `of`. When there is no init\n // part (semicolon immediately after the opening parenthesis), it\n // is a regular `for` loop.\n\n pp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n };\n\n pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n };\n\n pp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n };\n\n pp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n };\n\n pp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n };\n\n pp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n };\n\n // Reused empty array added for node fields that are always empty.\n\n var empty$1 = [];\n\n pp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n };\n\n pp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n };\n\n pp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n };\n\n pp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n };\n\n pp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n };\n\n pp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n };\n\n pp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n };\n\n pp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n };\n\n // Parse a semicolon-enclosed block of statements, handling `\"use\n // strict\"` declarations when `allowStrict` is true (used for\n // function bodies).\n\n pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n };\n\n // Parse a regular `for` loop. The disambiguation code in\n // `parseStatement` will already have parsed the init statement or\n // expression.\n\n pp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n };\n\n // Parse a `for`/`in` and `for`/`of` loop, which are almost\n // same from parser's perspective.\n\n pp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n };\n\n // Parse a list of variable declarations.\n\n pp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n };\n\n pp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n };\n\n var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n // Parse a function declaration or literal (depending on the\n // `statement & FUNC_STATEMENT`).\n\n // Remove `allowExpressionBody` for 7.0.0, as it is only called with false\n pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n };\n\n pp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n };\n\n // Parse a class declaration or literal (depending on the\n // `isStatement` parameter).\n\n pp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n };\n\n pp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n };\n\n pp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n };\n\n pp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n };\n\n pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n };\n\n pp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n };\n\n pp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n };\n\n pp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n };\n\n pp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n };\n\n pp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n };\n\n pp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n };\n\n function isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n }\n\n function checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n }\n\n // Parses module export declaration.\n\n pp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n };\n\n pp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n };\n\n pp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n };\n\n pp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n };\n\n pp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n };\n\n pp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === \"ParenthesizedExpression\")\n { this.checkPatternExport(exports, pat.expression); }\n };\n\n pp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n };\n\n pp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n };\n\n // Parses a comma-separated list of module exports.\n\n pp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n };\n\n pp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n };\n\n // Parses import declaration.\n\n pp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n };\n\n // Parses a comma-separated list of module imports.\n\n pp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n };\n\n pp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n };\n\n pp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n };\n\n pp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n };\n\n pp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n };\n\n // Set `ExpressionStatement#directive` property for directive prologues.\n pp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n };\n pp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n };\n\n var pp$7 = Parser.prototype;\n\n // Convert existing expression atom to assignable pattern\n // if possible.\n\n pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n };\n\n // Convert list of expression atoms to binding list.\n\n pp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n };\n\n // Parses spread element.\n\n pp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n };\n\n pp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n };\n\n // Parses lvalue (assignable) atom.\n\n pp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n };\n\n pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n };\n\n pp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n };\n\n pp$7.parseBindingListItem = function(param) {\n return param\n };\n\n // Parses assignment pattern around given atom if possible.\n\n pp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n };\n\n // The following three functions all verify that a node is an lvalue —\n // something that can be bound, or assigned to. In order to do so, they perform\n // a variety of checks:\n //\n // - Check that none of the bound/assigned-to identifiers are reserved words.\n // - Record name declarations for bindings in the appropriate scope.\n // - Check duplicate argument names, if checkClashes is set.\n //\n // If a complex binding pattern is encountered (e.g., object and array\n // destructuring), the entire pattern is recursively checked.\n //\n // There are three versions of checkLVal*() appropriate for different\n // circumstances:\n //\n // - checkLValSimple() shall be used if the syntactic construct supports\n // nothing other than identifiers and member expressions. Parenthesized\n // expressions are also correctly handled. This is generally appropriate for\n // constructs for which the spec says\n //\n // > It is a Syntax Error if AssignmentTargetType of [the production] is not\n // > simple.\n //\n // It is also appropriate for checking if an identifier is valid and not\n // defined elsewhere, like import declarations or function/class identifiers.\n //\n // Examples where this is used include:\n // a += …;\n // import a from '…';\n // where a is the node to be checked.\n //\n // - checkLValPattern() shall be used if the syntactic construct supports\n // anything checkLValSimple() supports, as well as object and array\n // destructuring patterns. This is generally appropriate for constructs for\n // which the spec says\n //\n // > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n // > an ArrayLiteral and AssignmentTargetType of [the production] is not\n // > simple.\n //\n // Examples where this is used include:\n // (a = …);\n // const a = …;\n // try { … } catch (a) { … }\n // where a is the node to be checked.\n //\n // - checkLValInnerPattern() shall be used if the syntactic construct supports\n // anything checkLValPattern() supports, as well as default assignment\n // patterns, rest elements, and other constructs that may appear within an\n // object or array destructuring pattern.\n //\n // As a special case, function parameters also use checkLValInnerPattern(),\n // as they also support defaults and rest constructs.\n //\n // These functions deliberately support both assignment and binding constructs,\n // as the logic for both is exceedingly similar. If the node is the target of\n // an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n // should be set to the appropriate BIND_* constant, like BIND_VAR or\n // BIND_LEXICAL.\n //\n // If the function is called with a non-BIND_NONE bindingType, then\n // additionally a checkClashes object may be specified to allow checking for\n // duplicate argument names. checkClashes is ignored if the provided construct\n // is an assignment (i.e., bindingType is BIND_NONE).\n\n pp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n };\n\n pp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n };\n\n pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n };\n\n // The algorithm used to determine whether a regexp can appear at a\n // given point in the program is loosely based on sweet.js' approach.\n // See https://github.com/mozilla/sweet.js/wiki/design\n\n\n var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n };\n\n var types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n };\n\n var pp$6 = Parser.prototype;\n\n pp$6.initialContext = function() {\n return [types.b_stat]\n };\n\n pp$6.curContext = function() {\n return this.context[this.context.length - 1]\n };\n\n pp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n };\n\n pp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n };\n\n pp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n };\n\n // Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n\n pp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n };\n\n // Token-specific context update code\n\n types$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n };\n\n types$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n };\n\n types$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n };\n\n types$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n };\n\n types$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n };\n\n types$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n };\n\n types$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n };\n\n types$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n };\n\n types$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n };\n\n // A recursive descent parser operates by defining functions for all\n // syntactic elements, and recursively calling those, each function\n // advancing the input stream and returning an AST node. Precedence\n // of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n // instead of `(!x)[1]` is handled by the fact that the parser\n // function that parses unary prefix operators is called first, and\n // in turn calls the function that parses `[]` subscripts — that\n // way, it'll receive the node for `x[1]` already parsed, and wraps\n // *that* in the unary operator node.\n //\n // Acorn uses an [operator precedence parser][opp] to handle binary\n // operator precedence, because it is much more compact than using\n // the technique outlined above, which uses different, nesting\n // functions to specify precedence, for all of the ten binary\n // precedence levels that JavaScript defines.\n //\n // [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\n var pp$5 = Parser.prototype;\n\n // Check if property name clashes with already added.\n // Object/class getters and setters are not allowed to clash —\n // either with each other or with an init property — and in\n // strict mode, init properties are also not allowed to be repeated.\n\n pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n };\n\n // ### Expression parsing\n\n // These nest, from the most general expression type at the top to\n // 'atomic', nondivisible expression types at the bottom. Most of\n // the functions will simply let the function(s) below them parse,\n // and, *if* the syntactic construct they handle is present, wrap\n // the AST node that the inner parser gave them in another node.\n\n // Parse a full expression. The optional arguments are used to\n // forbid the `in` operator (in for loops initalization expressions)\n // and provide reference for storing '=' operator inside shorthand\n // property assignment in contexts where both object expression\n // and object pattern might appear (so it's possible to raise\n // delayed syntax error at correct position).\n\n pp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n };\n\n // Parse an assignment expression. This includes applications of\n // operators like `+=`.\n\n pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n };\n\n // Parse a ternary conditional (`?:`) operator.\n\n pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n };\n\n // Start the precedence parser.\n\n pp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n };\n\n // Parse binary operators with the operator precedence parsing\n // algorithm. `left` is the left-hand side of the operator.\n // `minPrec` provides context that allows the function to stop and\n // defer further parser to one of its callers when it encounters an\n // operator that has a lower precedence than the set it is parsing.\n\n pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n };\n\n pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n };\n\n // Parse unary operators, both prefix and postfix.\n\n pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" &&\n node.argument.type === \"Identifier\")\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if (forInit || this.privateNameStack.length === 0) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n };\n\n function isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n )\n }\n\n // Parse call, dot, and `[]`-subscript expressions.\n\n pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n };\n\n pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n };\n\n pp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n };\n\n pp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n };\n\n pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n };\n\n // Parse an atomic expression — either a single token that is an\n // expression, an expression started by a keyword like `function` or\n // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n // or `{}`.\n\n pp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n };\n\n pp$5.parseExprAtomDefault = function() {\n this.unexpected();\n };\n\n pp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n var meta = this.parseIdent(true);\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n node.meta = meta;\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n };\n\n pp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n };\n\n pp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n };\n\n pp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n };\n\n pp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n };\n\n pp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n };\n\n pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n };\n\n pp$5.parseParenItem = function(item) {\n return item\n };\n\n pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n };\n\n // New's precedence is slightly tricky. It must allow its argument to\n // be a `[]` or dot subscript expression, but not a call — at least,\n // not without wrapping it in parentheses. Thus, it uses the noCalls\n // argument to parseSubscripts to prevent it from consuming the\n // argument list.\n\n var empty = [];\n\n pp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n };\n\n // Parse template expression.\n\n pp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n };\n\n pp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n };\n\n pp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n };\n\n // Parse an object literal or binding pattern.\n\n pp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n };\n\n pp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n };\n\n pp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n };\n\n pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n };\n\n pp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n };\n\n // Initialize empty function node.\n\n pp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n };\n\n // Parse object or class method.\n\n pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n };\n\n // Parse arrow function expression with given parameters.\n\n pp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n };\n\n // Parse function body and check parameters.\n\n pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n };\n\n pp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n };\n\n // Checks function params for various disallowed patterns such as using \"eval\"\n // or \"arguments\" and duplicate parameters.\n\n pp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n };\n\n // Parses a comma-separated list of expressions, and returns them as\n // an array. `close` is the token type that ends the list, and\n // `allowEmpty` can be turned on to allow subsequent commas with\n // nothing in between them to be parsed as `null` (which is needed\n // for array literals).\n\n pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n };\n\n pp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n };\n\n // Parse the next token as an identifier. If `liberal` is true (used\n // when parsing properties), it will also convert keywords into\n // identifiers.\n\n pp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n };\n\n pp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n return node\n };\n\n pp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n\n return node\n };\n\n // Parses yield expression inside generator.\n\n pp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n };\n\n pp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n };\n\n var pp$4 = Parser.prototype;\n\n // This function is used to raise exceptions on parse errors. It\n // takes an offset integer (into the current `input`) to indicate\n // the location of the error, attaches the position to the end\n // of the error message, and then raises a `SyntaxError` with that\n // message.\n\n pp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n };\n\n pp$4.raiseRecoverable = pp$4.raise;\n\n pp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n };\n\n var pp$3 = Parser.prototype;\n\n var Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n };\n\n // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\n pp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n };\n\n pp$3.exitScope = function() {\n this.scopeStack.pop();\n };\n\n // The spec says:\n // > At the top level of a function, or script, function declarations are\n // > treated like var declarations rather than like lexical declarations.\n pp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n };\n\n pp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n };\n\n pp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n };\n\n pp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n };\n\n pp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n };\n\n // Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n pp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n };\n\n var Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n };\n\n // Start an AST node, attaching a start offset.\n\n var pp$2 = Parser.prototype;\n\n pp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n };\n\n pp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n };\n\n // Finish an AST node, adding `type` and `end` properties.\n\n function finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n }\n\n pp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n };\n\n // Finish node at given position\n\n pp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n };\n\n pp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n };\n\n // This file contains Unicode properties extracted from the ECMAScript specification.\n // The lists are extracted like so:\n // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n // #table-binary-unicode-properties\n var ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\n var ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\n var ecma11BinaryProperties = ecma10BinaryProperties;\n var ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\n var ecma13BinaryProperties = ecma12BinaryProperties;\n var ecma14BinaryProperties = ecma13BinaryProperties;\n\n var unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n };\n\n // #table-binary-unicode-properties-of-strings\n var ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\n var unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n };\n\n // #table-unicode-general-category-values\n var unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n // #table-unicode-script-values\n var ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\n var ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\n var ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\n var ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\n var ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\n var ecma14ScriptValues = ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\n\n var unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n };\n\n var data = {};\n function buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n }\n\n for (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n }\n\n var pp$1 = Parser.prototype;\n\n var RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n };\n\n RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n };\n\n RegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n };\n\n // If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n RegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n };\n\n RegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n };\n\n RegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n };\n\n RegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n };\n\n RegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n };\n\n RegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n };\n\n RegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n };\n\n /**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n pp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n };\n\n /**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n pp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n pp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n pp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n pp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\n pp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\n pp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n pp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n pp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n };\n pp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n pp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n };\n pp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\n pp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\n pp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n pp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n };\n function isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n // But eat eager.\n pp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\n pp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n };\n\n // GroupSpecifier ::\n // [empty]\n // `?` GroupName\n pp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise(\"Duplicate capture group name\");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise(\"Invalid group\");\n }\n };\n\n // GroupName ::\n // `<` RegExpIdentifierName `>`\n // Note: this updates `state.lastStringValue` property with the eaten name.\n pp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n };\n\n // RegExpIdentifierName ::\n // RegExpIdentifierStart\n // RegExpIdentifierName RegExpIdentifierPart\n // Note: this updates `state.lastStringValue` property with the eaten name.\n pp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n };\n\n // RegExpIdentifierStart ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[+U]\n pp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n };\n function isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n }\n\n // RegExpIdentifierPart ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[+U]\n // \n // \n pp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n };\n function isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\n pp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n };\n pp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\n pp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n };\n pp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n pp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n pp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n };\n function isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n };\n function isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\n pp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n pp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n };\n\n // Return values used by character set parsing methods, needed to\n // forbid negation of sets that can match strings.\n var CharSetNone = 0; // Nothing parsed\n var CharSetOk = 1; // Construct parsed, cannot contain strings\n var CharSetString = 2; // Construct parsed, can contain strings\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n pp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n };\n\n function isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n pp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n };\n\n pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n };\n\n pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n };\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n pp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n };\n\n function isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n pp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n };\n function isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n pp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassContents\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n pp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n pp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n pp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\n pp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetExpression\n // https://tc39.es/ecma262/#prod-ClassUnion\n // https://tc39.es/ecma262/#prod-ClassIntersection\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n pp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetRange\n pp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetOperand\n pp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n };\n\n // https://tc39.es/ecma262/#prod-NestedClass\n pp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n };\n\n // https://tc39.es/ecma262/#prod-ClassStringDisjunction\n pp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n };\n\n // https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\n pp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n };\n\n // https://tc39.es/ecma262/#prod-ClassString\n // https://tc39.es/ecma262/#prod-NonEmptyClassString\n pp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetCharacter\n pp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\n function isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n }\n\n // https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\n function isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n }\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n pp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n function isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\n pp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n pp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n pp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n };\n function isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n pp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n };\n function isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n }\n function hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n pp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n };\n function isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n pp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n };\n\n // Object type used to represent tokens. Note that normally, tokens\n // simply exist as properties on the parser object. This is only\n // used for the onToken callback and the external tokenizer.\n\n var Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n };\n\n // ## Tokenizer\n\n var pp = Parser.prototype;\n\n // Move to the next token\n\n pp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n };\n\n pp.getToken = function() {\n this.next();\n return new Token(this)\n };\n\n // If we're in an ES6 environment, make parsers iterable\n if (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n // Toggle strict mode. Re-reads the next number or string to please\n // pedantic tests (`\"use strict\"; 010;` should fail).\n\n // Read a single token, updating the parser object's token-related\n // properties.\n\n pp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n };\n\n pp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n };\n\n pp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n };\n\n pp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n };\n\n pp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n };\n\n // Called at the start of the parse and after every token. Skips\n // whitespace and comments, and.\n\n pp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n };\n\n // Called at the end of every token. Sets `end`, `val`, and\n // maintains `context` and `exprAllowed`, and skips the space after\n // the token, so that the next one's `start` will point at the\n // right position.\n\n pp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n };\n\n // ### Token reading\n\n // This is the function that is called to fetch the next token. It\n // is somewhat obscure, because it works in character codes rather\n // than characters, and because operator parsing has been inlined\n // into it.\n //\n // All in the name of speed.\n //\n pp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n };\n\n pp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n };\n\n pp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n };\n\n pp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n };\n\n pp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n };\n\n pp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n };\n\n pp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `|]]>)$/.exec(text);\n\n // if we start to wrap but don't finish, print raw\n if (!matched) {\n printer.add_raw_token(raw_token);\n return;\n }\n\n pre = indentation + matched[1] + '\\n';\n text = matched[4];\n if (matched[5]) {\n post = indentation + matched[5];\n }\n\n // if there is at least one empty line at the end of this text, strip it\n // we'll be adding one back after the text but before the containing tag.\n text = text.replace(/\\n[ \\t]*$/, '');\n\n if (matched[2] || matched[3].indexOf('\\n') !== -1) {\n // if the first line of the non-comment text has spaces\n // use that as the basis for indenting in null case.\n matched = matched[3].match(/[ \\t]+$/);\n if (matched) {\n raw_token.whitespace_before = matched[0];\n }\n }\n }\n\n if (text) {\n if (_beautifier) {\n\n // call the Beautifier if avaliable\n var Child_options = function() {\n this.eol = '\\n';\n };\n Child_options.prototype = this._options.raw_options;\n var child_options = new Child_options();\n text = _beautifier(indentation + text, child_options);\n } else {\n // simply indent the string otherwise\n var white = raw_token.whitespace_before;\n if (white) {\n text = text.replace(new RegExp('\\n(' + white + ')?', 'g'), '\\n');\n }\n\n text = indentation + text.replace(/\\n/g, '\\n' + indentation);\n }\n }\n\n if (pre) {\n if (!text) {\n text = pre + post;\n } else {\n text = pre + text + '\\n' + post;\n }\n }\n\n printer.print_newline(false);\n if (text) {\n raw_token.text = text;\n raw_token.whitespace_before = '';\n raw_token.newlines = 0;\n printer.add_raw_token(raw_token);\n printer.print_newline(true);\n }\n }\n};\n\nBeautifier.prototype._handle_tag_open = function(printer, raw_token, last_tag_token, last_token, tokens) {\n var parser_token = this._get_tag_open_token(raw_token);\n\n if ((last_tag_token.is_unformatted || last_tag_token.is_content_unformatted) &&\n !last_tag_token.is_empty_element &&\n raw_token.type === TOKEN.TAG_OPEN && !parser_token.is_start_tag) {\n // End element tags for unformatted or content_unformatted elements\n // are printed raw to keep any newlines inside them exactly the same.\n printer.add_raw_token(raw_token);\n parser_token.start_tag_token = this._tag_stack.try_pop(parser_token.tag_name);\n } else {\n printer.traverse_whitespace(raw_token);\n this._set_tag_position(printer, raw_token, parser_token, last_tag_token, last_token);\n if (!parser_token.is_inline_element) {\n printer.set_wrap_point();\n }\n printer.print_token(raw_token);\n }\n\n // count the number of attributes\n if (parser_token.is_start_tag && this._is_wrap_attributes_force) {\n var peek_index = 0;\n var peek_token;\n do {\n peek_token = tokens.peek(peek_index);\n if (peek_token.type === TOKEN.ATTRIBUTE) {\n parser_token.attr_count += 1;\n }\n peek_index += 1;\n } while (peek_token.type !== TOKEN.EOF && peek_token.type !== TOKEN.TAG_CLOSE);\n }\n\n //indent attributes an auto, forced, aligned or forced-align line-wrap\n if (this._is_wrap_attributes_force_aligned || this._is_wrap_attributes_aligned_multiple || this._is_wrap_attributes_preserve_aligned) {\n parser_token.alignment_size = raw_token.text.length + 1;\n }\n\n if (!parser_token.tag_complete && !parser_token.is_unformatted) {\n printer.alignment_size = parser_token.alignment_size;\n }\n\n return parser_token;\n};\n\nvar TagOpenParserToken = function(parent, raw_token) {\n this.parent = parent || null;\n this.text = '';\n this.type = 'TK_TAG_OPEN';\n this.tag_name = '';\n this.is_inline_element = false;\n this.is_unformatted = false;\n this.is_content_unformatted = false;\n this.is_empty_element = false;\n this.is_start_tag = false;\n this.is_end_tag = false;\n this.indent_content = false;\n this.multiline_content = false;\n this.custom_beautifier_name = null;\n this.start_tag_token = null;\n this.attr_count = 0;\n this.has_wrapped_attrs = false;\n this.alignment_size = 0;\n this.tag_complete = false;\n this.tag_start_char = '';\n this.tag_check = '';\n\n if (!raw_token) {\n this.tag_complete = true;\n } else {\n var tag_check_match;\n\n this.tag_start_char = raw_token.text[0];\n this.text = raw_token.text;\n\n if (this.tag_start_char === '<') {\n tag_check_match = raw_token.text.match(/^<([^\\s>]*)/);\n this.tag_check = tag_check_match ? tag_check_match[1] : '';\n } else {\n tag_check_match = raw_token.text.match(/^{{~?(?:[\\^]|#\\*?)?([^\\s}]+)/);\n this.tag_check = tag_check_match ? tag_check_match[1] : '';\n\n // handle \"{{#> myPartial}}\" or \"{{~#> myPartial}}\"\n if ((raw_token.text.startsWith('{{#>') || raw_token.text.startsWith('{{~#>')) && this.tag_check[0] === '>') {\n if (this.tag_check === '>' && raw_token.next !== null) {\n this.tag_check = raw_token.next.text.split(' ')[0];\n } else {\n this.tag_check = raw_token.text.split('>')[1];\n }\n }\n }\n\n this.tag_check = this.tag_check.toLowerCase();\n\n if (raw_token.type === TOKEN.COMMENT) {\n this.tag_complete = true;\n }\n\n this.is_start_tag = this.tag_check.charAt(0) !== '/';\n this.tag_name = !this.is_start_tag ? this.tag_check.substr(1) : this.tag_check;\n this.is_end_tag = !this.is_start_tag ||\n (raw_token.closed && raw_token.closed.text === '/>');\n\n // if whitespace handler ~ included (i.e. {{~#if true}}), handlebars tags start at pos 3 not pos 2\n var handlebar_starts = 2;\n if (this.tag_start_char === '{' && this.text.length >= 3) {\n if (this.text.charAt(2) === '~') {\n handlebar_starts = 3;\n }\n }\n\n // handlebars tags that don't start with # or ^ are single_tags, and so also start and end.\n this.is_end_tag = this.is_end_tag ||\n (this.tag_start_char === '{' && (this.text.length < 3 || (/[^#\\^]/.test(this.text.charAt(handlebar_starts)))));\n }\n};\n\nBeautifier.prototype._get_tag_open_token = function(raw_token) { //function to get a full tag and parse its type\n var parser_token = new TagOpenParserToken(this._tag_stack.get_parser_token(), raw_token);\n\n parser_token.alignment_size = this._options.wrap_attributes_indent_size;\n\n parser_token.is_end_tag = parser_token.is_end_tag ||\n in_array(parser_token.tag_check, this._options.void_elements);\n\n parser_token.is_empty_element = parser_token.tag_complete ||\n (parser_token.is_start_tag && parser_token.is_end_tag);\n\n parser_token.is_unformatted = !parser_token.tag_complete && in_array(parser_token.tag_check, this._options.unformatted);\n parser_token.is_content_unformatted = !parser_token.is_empty_element && in_array(parser_token.tag_check, this._options.content_unformatted);\n parser_token.is_inline_element = in_array(parser_token.tag_name, this._options.inline) || parser_token.tag_name.includes(\"-\") || parser_token.tag_start_char === '{';\n\n return parser_token;\n};\n\nBeautifier.prototype._set_tag_position = function(printer, raw_token, parser_token, last_tag_token, last_token) {\n\n if (!parser_token.is_empty_element) {\n if (parser_token.is_end_tag) { //this tag is a double tag so check for tag-ending\n parser_token.start_tag_token = this._tag_stack.try_pop(parser_token.tag_name); //remove it and all ancestors\n } else { // it's a start-tag\n // check if this tag is starting an element that has optional end element\n // and do an ending needed\n if (this._do_optional_end_element(parser_token)) {\n if (!parser_token.is_inline_element) {\n printer.print_newline(false);\n }\n }\n\n this._tag_stack.record_tag(parser_token); //push it on the tag stack\n\n if ((parser_token.tag_name === 'script' || parser_token.tag_name === 'style') &&\n !(parser_token.is_unformatted || parser_token.is_content_unformatted)) {\n parser_token.custom_beautifier_name = get_custom_beautifier_name(parser_token.tag_check, raw_token);\n }\n }\n }\n\n if (in_array(parser_token.tag_check, this._options.extra_liners)) { //check if this double needs an extra line\n printer.print_newline(false);\n if (!printer._output.just_added_blankline()) {\n printer.print_newline(true);\n }\n }\n\n if (parser_token.is_empty_element) { //if this tag name is a single tag type (either in the list or has a closing /)\n\n // if you hit an else case, reset the indent level if you are inside an:\n // 'if', 'unless', or 'each' block.\n if (parser_token.tag_start_char === '{' && parser_token.tag_check === 'else') {\n this._tag_stack.indent_to_tag(['if', 'unless', 'each']);\n parser_token.indent_content = true;\n // Don't add a newline if opening {{#if}} tag is on the current line\n var foundIfOnCurrentLine = printer.current_line_has_match(/{{#if/);\n if (!foundIfOnCurrentLine) {\n printer.print_newline(false);\n }\n }\n\n // Don't add a newline before elements that should remain where they are.\n if (parser_token.tag_name === '!--' && last_token.type === TOKEN.TAG_CLOSE &&\n last_tag_token.is_end_tag && parser_token.text.indexOf('\\n') === -1) {\n //Do nothing. Leave comments on same line.\n } else {\n if (!(parser_token.is_inline_element || parser_token.is_unformatted)) {\n printer.print_newline(false);\n }\n this._calcluate_parent_multiline(printer, parser_token);\n }\n } else if (parser_token.is_end_tag) { //this tag is a double tag so check for tag-ending\n var do_end_expand = false;\n\n // deciding whether a block is multiline should not be this hard\n do_end_expand = parser_token.start_tag_token && parser_token.start_tag_token.multiline_content;\n do_end_expand = do_end_expand || (!parser_token.is_inline_element &&\n !(last_tag_token.is_inline_element || last_tag_token.is_unformatted) &&\n !(last_token.type === TOKEN.TAG_CLOSE && parser_token.start_tag_token === last_tag_token) &&\n last_token.type !== 'TK_CONTENT'\n );\n\n if (parser_token.is_content_unformatted || parser_token.is_unformatted) {\n do_end_expand = false;\n }\n\n if (do_end_expand) {\n printer.print_newline(false);\n }\n } else { // it's a start-tag\n parser_token.indent_content = !parser_token.custom_beautifier_name;\n\n if (parser_token.tag_start_char === '<') {\n if (parser_token.tag_name === 'html') {\n parser_token.indent_content = this._options.indent_inner_html;\n } else if (parser_token.tag_name === 'head') {\n parser_token.indent_content = this._options.indent_head_inner_html;\n } else if (parser_token.tag_name === 'body') {\n parser_token.indent_content = this._options.indent_body_inner_html;\n }\n }\n\n if (!(parser_token.is_inline_element || parser_token.is_unformatted) &&\n (last_token.type !== 'TK_CONTENT' || parser_token.is_content_unformatted)) {\n printer.print_newline(false);\n }\n\n this._calcluate_parent_multiline(printer, parser_token);\n }\n};\n\nBeautifier.prototype._calcluate_parent_multiline = function(printer, parser_token) {\n if (parser_token.parent && printer._output.just_added_newline() &&\n !((parser_token.is_inline_element || parser_token.is_unformatted) && parser_token.parent.is_inline_element)) {\n parser_token.parent.multiline_content = true;\n }\n};\n\n//To be used for

tag special case:\nvar p_closers = ['address', 'article', 'aside', 'blockquote', 'details', 'div', 'dl', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'main', 'menu', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul'];\nvar p_parent_excludes = ['a', 'audio', 'del', 'ins', 'map', 'noscript', 'video'];\n\nBeautifier.prototype._do_optional_end_element = function(parser_token) {\n var result = null;\n // NOTE: cases of \"if there is no more content in the parent element\"\n // are handled automatically by the beautifier.\n // It assumes parent or ancestor close tag closes all children.\n // https://www.w3.org/TR/html5/syntax.html#optional-tags\n if (parser_token.is_empty_element || !parser_token.is_start_tag || !parser_token.parent) {\n return;\n\n }\n\n if (parser_token.tag_name === 'body') {\n // A head element’s end tag may be omitted if the head element is not immediately followed by a space character or a comment.\n result = result || this._tag_stack.try_pop('head');\n\n //} else if (parser_token.tag_name === 'body') {\n // DONE: A body element’s end tag may be omitted if the body element is not immediately followed by a comment.\n\n } else if (parser_token.tag_name === 'li') {\n // An li element’s end tag may be omitted if the li element is immediately followed by another li element or if there is no more content in the parent element.\n result = result || this._tag_stack.try_pop('li', ['ol', 'ul', 'menu']);\n\n } else if (parser_token.tag_name === 'dd' || parser_token.tag_name === 'dt') {\n // A dd element’s end tag may be omitted if the dd element is immediately followed by another dd element or a dt element, or if there is no more content in the parent element.\n // A dt element’s end tag may be omitted if the dt element is immediately followed by another dt element or a dd element.\n result = result || this._tag_stack.try_pop('dt', ['dl']);\n result = result || this._tag_stack.try_pop('dd', ['dl']);\n\n\n } else if (parser_token.parent.tag_name === 'p' && p_closers.indexOf(parser_token.tag_name) !== -1) {\n // IMPORTANT: this else-if works because p_closers has no overlap with any other element we look for in this method\n // check for the parent element is an HTML element that is not an ,

`\n return html`
\n
${this.textEl}
\n ${this.logElement}\n
`\n }\n}\n","const html = require('choo/html')\nconst Component = require('choo/component')\n// const HydraSynth = require('hydra-synth')\n// const HydraSynth = require('./../../../../../hydra-synth')\nconst P5 = require('./../lib/p5-wrapper.js')\nconst PatchBay = require('./../lib/patch-bay/pb-live.js')\nlet pb\n\n// const SERVER_URL = process.env['SERVER_URL']\n\nmodule.exports = class HydraCanvas extends Component {\n constructor(id, state, emit) {\n super(id)\n this.local = state.components[id] = {}\n state.hydra = this // hacky\n this.state = state\n this.emit = emit\n }\n\n load(element) {\n let isIOS =\n (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !window.MSStream;\n let precisionValue = isIOS ? 'highp' : 'mediump'\n\n\n const hydraOptions = { detectAudio: true, canvas: element.querySelector(\"canvas\"), precision: precisionValue }\n \n if (this.state.serverURL === null) {\n console.log('LOCAL ONLY, WILL NOT INIT webRTC and gallery')\n this.hydra = new Hydra(hydraOptions)\n } else {\n this.pb = new PatchBay()\n hydraOptions.pb = this.pb\n this.hydra = new Hydra(hydraOptions)\n this.pb.init(this.hydra.captureStream, {\n // server: window.location.origin,\n server: this.state.serverURL,\n room: 'iclc'\n })\n window.pb = this.pb\n }\n\n window.hydraSynth = this.hydra\n // if(environment !== 'local') {\n // osc().out()\n\n // }\n\n window.P5 = P5\n // window.pb = pb\n this.emit('hydra loaded')\n }\n\n update(center) {\n return false\n }\n\n createElement({ width = window.innerWidth, height = window.innerHeight } = {}) {\n\n return html`
\n
`\n }\n}\n","/* eslint-disable no-eval */\nvar CodeMirror = require('codemirror-minified/lib/codemirror')\nrequire('codemirror-minified/mode/javascript/javascript')\nrequire('codemirror-minified/addon/hint/javascript-hint')\nrequire('codemirror-minified/addon/hint/show-hint')\nrequire('codemirror-minified/addon/selection/mark-selection')\nrequire('codemirror-minified/addon/comment/comment')\n\nconst EventEmitter = require('nanobus')\nconst keymaps = require('./keymaps.js')\nconst Mutator = require('./randomizer/Mutator.js');\nconst beautify_js = require('js-beautify').js_beautify\n\nvar isShowing = true\n\n\nmodule.exports = class Editor extends EventEmitter {\n constructor(parent) {\n super()\n console.log(\"*** Editor class created\");\n var self = this\n\n // var container = document.createElement('div')\n // container.setAttribute('id', 'editor-container')\n // var el = document.createElement('TEXTAREA')\n // document.body.appendChild(container)\n // container.appendChild(el)\n\n this.mutator = new Mutator(this);\n\n const extraKeys = {}\n Object.entries(keymaps).forEach(([key, e]) => extraKeys[key] = () => {\n if(e == 'editor:evalBlock') {\n this.emit(e, this.getCurrentBlock().text)\n } else if (e == 'editor:evalLine') {\n this.emit(e, this.getLine())\n } else if (e == 'editor:toggleComment') {\n this.cm.toggleComment()\n // } else if (e == 'gallery:saveToURL') {\n this.emit(e, this)\n } else if (e === 'editor:formatCode') {\n this.formatCode()\n } else {\n this.emit(e, this)\n }\n })\n\n const opts = {\n theme: 'tomorrow-night-eighties',\n value: 'hello',\n mode: { name: 'javascript', globalVars: true },\n lineWrapping: true,\n styleSelectedText: true,\n extraKeys: extraKeys\n }\n\n this.cm = CodeMirror.fromTextArea(parent, opts)\n window.cm = this.cm\n this.cm.refresh()\n\n // this.show()\n // // // TO DO: add show code param\n // let searchParams = new URLSearchParams(window.location.search)\n // let showCode = searchParams.get('show-code')\n\n // if (showCode === \"false\") {\n // this.hide()\n // }\n }\n\n clear() {\n this.cm.setValue('\\n \\n // Type some code on a new line (such as \"osc().out()\"), and press CTRL+shift+enter')\n }\n\n setValue(val) {\n this.cm.setValue(val)\n }\n\n getValue() {\n return this.cm.getValue()\n }\n\n formatCode() {\n const formatted = beautify_js(this.cm.getValue(), { indent_size: 2, \"break_chained_methods\": true, \"indent_with_tabs\": true})\n this.cm.setValue(formatted)\n }\n\n // hide() {\n // console.log('hiding')\n // var l = document.getElementsByClassName('CodeMirror')[0]\n // var m = document.getElementById('modal-header')\n // l.style.opacity = 0\n // m.style.opacity = 0\n // this.isShowing = false\n // }\n\n // show() {\n // var l = document.getElementsByClassName('CodeMirror')[0]\n // var m = document.getElementById('modal-header')\n // l.style.opacity= 1\n // m.style.opacity = 1\n // l.style.pointerEvents = 'all'\n // this.isShowing = true\n // }\n\n toggle() {\n if (this.isShowing) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n getLine() {\n var c = this.cm.getCursor()\n var s = this.cm.getLine(c.line)\n // this.cm.markText({line: c.line, ch:0}, {line: c.line+1, ch:0}, {className: 'styled-background'})\n this.flashCode({ line: c.line, ch: 0 }, { line: c.line + 1, ch: 0 })\n return s\n }\n\n flashCode(start, end) {\n if (!start) start = { line: this.cm.firstLine(), ch: 0 }\n if (!end) end = { line: this.cm.lastLine() + 1, ch: 0 }\n var marker = this.cm.markText(start, end, { className: 'styled-background' })\n setTimeout(() => marker.clear(), 300)\n }\n\n\n getCurrentBlock() { // thanks to graham wakefield + gibber\n var editor = this.cm\n var pos = editor.getCursor()\n var startline = pos.line\n var endline = pos.line\n while (startline > 0 && editor.getLine(startline) !== '') {\n startline--\n }\n while (endline < editor.lineCount() && editor.getLine(endline) !== '') {\n endline++\n }\n var pos1 = {\n line: startline,\n ch: 0\n }\n var pos2 = {\n line: endline,\n ch: 0\n }\n var str = editor.getRange(pos1, pos2)\n\n this.flashCode(pos1, pos2)\n\n return {\n start: pos1,\n end: pos2,\n text: str\n }\n }\n\n}\n\n","module.exports = { \n 'Ctrl-Enter': 'editor:evalLine',\n 'Ctrl-/': 'editor:toggleComment',\n 'Alt-Enter': 'editor:evalBlock',\n 'Shift-Ctrl-Enter': 'editor:evalAll',\n 'Shift-Ctrl-G': 'gallery:shareSketch',\n 'Shift-Ctrl-F': 'editor:formatCode',\n 'Shift-Ctrl-L': 'gallery:saveToURL',\n 'Shift-Ctrl-H': 'hideAll',\n 'Shift-Ctrl-S': 'screencap'\n}","var logElement\n\nmodule.exports = {\n init: (el) => {\n // logElement = document.createElement('div')\n // logElement.className = \"console cm-s-tomorrow-night-eighties\"\n // document.body.appendChild(logElement)\n logElement = el\n },\n log: (msg, className = \"\") => {\n console.log('logging', msg, className)\n if(logElement) logElement.innerHTML =` >> ${msg} `\n },\n hide: () => {\n if(logElement) logElement.style.display = 'none'\n },\n show: () => {\n if(logElement) logElement.style.display = 'block'\n },\n toggle: () => {\n if(logElement.style.display == 'none') {\n logElement.style.display = 'block'\n } else {\n logElement.style.display = 'none'\n }\n }\n}\n","const {Parser} = require(\"acorn\");\nconst {generate} = require('astring');\nconst { defaultTraveler, attachComments, makeTraveler } = require('astravel');\nconst {UndoStack} = require('./UndoStack.js');\nconst repl = require('./../repl.js')\n// const glslTransforms = require('hydra-synth/src/glsl/glsl-functions.js')()\nconst glslTransforms = require('./glslTransforms.js')\n\nclass Mutator {\n\n constructor(editor) {\n this.editor = editor;\n this.undoStack = new UndoStack();\n\n this.initialVector = [];\n\n this.funcTab = {};\n this.transMap = {};\n\t\tthis.scanFuncs();\n\t\tthis.dumpDict();\n }\n\n dumpList() {\n \tlet gslTab = glslTransforms;\n \tgslTab.forEach (v => {\n \t\tvar argList = \"\";\n \t\tv.inputs.forEach((a) => {\n \t\t\tif (argList != \"\") argList += \", \";\n \t\t\tlet argL = a.name + \": \" + a.type + \" {\" + a.default + \"}\";\n \t\t\targList = argList + argL;\n \t\t});\n \t//\tconsole.log(v.name + \" [\" + v.type + \"] (\"+ argList + \")\");\n \t});\n }\n\n scanFuncs() {\n \tlet gslTab = glslTransforms;\n \tgslTab.forEach (f => {\n \t\tthis.transMap[f.name] = f;\n \t\tif (this.funcTab[f.type] === undefined) {this.funcTab[f.type] = []}\n\t\t\tthis.funcTab[f.type].push(f);\n \t});\n }\n\n\tdumpDict() {\n\t\tfor(let tn in this.funcTab)\n\t\t{\n\t\t\tthis.funcTab[tn].forEach(f => {\n \t\tvar argList = \"\";\n \t\tf.inputs.forEach((a) => {\n \t\t\tif (argList != \"\") argList += \", \";\n \t\t\tlet argL = a.name + \": \" + a.type + \" {\" + a.default + \"}\";\n \t\t\targList = argList + argL;\n \t\t});\n \t\t//console.log(f.name + \" [\" + f.type + \"] (\"+ argList + \")\");\n\t\t\t});\n }\n\t}\n\n mutate(options) {\n // Get text from CodeMirror.\n let text = this.editor.cm.getValue();\n this.undoStack.push({text, lastLitX: this.lastLitX});\n let needToRun = true;\n let tryCounter = 5;\n while (needToRun && tryCounter-- >= 0) {\n // Parse to AST\n var comments = [];\n let ast = Parser.parse(text, {\n locations: true,\n onComment: comments}\n );\n\n // Modify the AST.\n this.transform(ast, options);\n\n // Put the comments back.\n attachComments(ast, comments);\n\n // Generate JS from AST and set back into CodeMirror editor.\n let regen = generate(ast, {comments: true});\n\n this.editor.cm.setValue(regen);\n\t\t\t\ttry {\n // Evaluate the updated expression.\n repl.eval(regen, (code, error) => {\n // If we got an error, keep trying something else.\n if (error) {\n console.log(\"Eval error: \" + regen);\n }\n needToRun = error;\n });\n } catch (err) {\n \tconsole.log(\"Exception caught: \" + err);\n \tneedToRun = err;\n }\n }\n }\n\n doUndo() {\n // If the current text is unsaved, save it so we can redo if need be.\n if (this.undoStack.atTop()) {\n let text = this.editor.cm.getValue();\n this.undoStack.push({text, lastLitX: this.lastLitX});\n }\n // Then pop-off the info to restore.\n if (this.undoStack.canUndo()) {\n let {text, lastLitX} = this.undoStack.undo();\n this.setText(text);\n this.lastLitX = lastLitX;\n }\n }\n\n doRedo() {\n if(this.undoStack.canRedo()) {\n let {text, lastLitX} = this.undoStack.redo();\n this.setText(text);\n this.lastLitX = lastLitX;\n }\n }\n\n setText(text) {\n this.editor.cm.setValue(text);\n repl.eval(text, (code, error) => {\n });\n\n }\n\n // The options object contains a flag that controls how the\n // Literal to mutate is determined. If reroll is false, we\n // pick one at random. If reroll is true, we use the same field\n // we did last time.\n transform(ast, options) {\n // An AST traveler that accumulates a list of Literal nodes.\n let traveler = makeTraveler({\n go: function(node, state) {\n if (node.type === 'Literal') {\n state.literalTab.push(node);\n } else if (node.type === 'MemberExpression') {\n if (node.property && node.property.type === 'Literal') {\n // numeric array subscripts are ineligable\n return;\n }\n } else if (node.type === 'CallExpression') {\n if (node.callee && node.callee.property && node.callee.property.name && node.callee.property.name !== 'out') {\n state.functionTab.push(node);\n }\n }\n // Call the parent's `go` method\n this.super.go.call(this, node, state);\n }\n });\n\n let state = {};\n state.literalTab = [];\n state.functionTab = [];\n\n traveler.go(ast, state);\n\n this.litCount = state.literalTab.length;\n this.funCount = state.functionTab.length;\n if (this.litCount !== this.initialVector.length) {\n let nextVect = [];\n for(let i = 0; i < this.litCount; ++i) {\n nextVect.push(state.literalTab[i].value);\n }\n this.initialVector = nextVect;\n }\n if (options.changeTransform) {\n \tthis.glitchTrans(state, options);\n }\n else this.glitchLiteral(state, options);\n\n}\n\n\tglitchLiteral(state, options)\n\t{\n\t\tlet litx = 0;\n if (options.reroll) {\n if (this.lastLitX !== undefined) {\n litx = this.lastLitX;\n }\n } else {\n litx = Math.floor(Math.random() * this.litCount);\n this.lastLitX = litx;\n }\n\n let modLit = state.literalTab[litx];\n if (modLit) {\n // let glitched = this.glitchNumber(modLit.value);\n let glitched = this.glitchRelToInit(modLit.value, this.initialVector[litx]);\n let was = modLit.raw;\n modLit.value = glitched;\n modLit.raw = \"\" + glitched;\n console.log(\"Literal: \" + litx + \" changed from: \" + was + \" to: \" + glitched);\n }\n\t}\n\n glitchNumber(num) {\n if (num === 0) {\n num = 1;\n }\n let range = num * 2;\n let rndVal = Math.round(Math.random() * range * 1000) / 1000;\n return rndVal;\n }\n\n glitchRelToInit(num, initVal) {\n if (initVal === undefined) {\n return glitchNumber(num);\n } if (initVal === 0) {\n initVal = 0.5;\n }\n\n let rndVal = Math.round(Math.random() * initVal * 2 * 1000) / 1000;\n return rndVal;\n}\n\tglitchTrans(state, options)\n\t{\n/*\n\t\tstate.functionTab.forEach((f)=>{\n\t\t\tconsole.log(f.callee.property.name);\n\t\t});\n*/\n\t\tlet funx = Math.floor(Math.random() * this.funCount);\n\t\tif (state.functionTab[funx] === undefined || state.functionTab[funx].callee === undefined || state.functionTab[funx].callee.property === undefined) {\n\t\t\t\t \tconsole.log(\"No valid functionTab for index: \" + funx);\n\t \t\t\t\treturn;\n\t\t}\n\t\tlet oldName = state.functionTab[funx].callee.property.name;\n\n\t if (oldName == undefined) {\n\t \tconsole.log(\"No name for callee\");\n\t \treturn;\n\t }\n\t\tlet ftype = this.transMap[oldName].type;\n\t\tif (ftype == undefined) {\n\t\t\tconsole.log(\"ftype undefined for: \" + oldName);\n\t\t\treturn;\n\t\t}\n\t\tlet others = this.funcTab[ftype];\n\t\tif (others == undefined) {\n\t\t\tconsole.log(\"no funcTab entry for: \" + ftype);\n\t\t\treturn;\n\t\t}\n\t\tlet changeX = Math.floor(Math.random() * others.length);\n\t\tlet become = others[changeX].name;\n\n\t\t// check blacklisted combinations.\n\t\tif (oldName === \"modulate\" && become === \"modulateScrollX\")\n\t\t{\n\t\t\tconsole.log(\"Function: \" + funx + \" changing from: \" + oldName + \" can't change to: \" + become);\n\t\t\treturn;\n\t\t}\n\n\t\tstate.functionTab[funx].callee.property.name = become;\n console.log(\"Function: \" + funx + \" changed from: \" + oldName + \" to: \" + become);\n\t}\n\n} // End of class Mutator.\n\nmodule.exports = Mutator\n","// A generalized 'Undo stack' which can keep N levels of revertable state.\nclass UndoStack {\n constructor(limit) {\n this.stack = [];\n this.index = -1;\n this.limit = limit;\n }\n \n atTop() {\n return this.index === -1;\n }\n\n canUndo() {\n if(this.stack.length === 0) return false;\n return this.index === -1 || this.index > 0;\n }\n\n canRedo() {\n if(this.stack.length === 0 || this.index === -1) return false;\n return this.index < this.stack.length - 1;\n }\n\n push(item) {\n if (this.index >= 0) {\n while (this.index < this.stack.length) this.stack.pop();\n this.index = -1;\n }\n if (this.limit && this.stack.length > this.limit) {\n this.stack.shift();\n }\n this.stack.push(item);\n }\n\n undo() {\n if (this.stack.length === 0) return undefined;\n if (this.index === -1) { // start one behind the redo buffer\n this.index = this.stack.length - 1;\n }\n if (this.index > 0) this.index--;\n let v = this.stack[this.index];\n return v;\n }\n\n redo() {\n if (this.stack.length === 0 || this.index === -1) return undefined;\n let nextX = this.index + 1;\n if (nextX >= this.stack.length) return undefined;\n this.index = nextX;\n return this.stack[this.index];\n }\n};\n\n\nmodule.exports = {UndoStack}","/*\nFormat for adding functions to hydra. For each entry in this file, hydra automatically generates a glsl function and javascript function with the same name. You can also ass functions dynamically using setFunction(object).\n\n{\n name: 'osc', // name that will be used to access function in js as well as in glsl\n type: 'src', // can be 'src', 'color', 'combine', 'combineCoords'. see below for more info\n inputs: [\n {\n name: 'freq',\n type: 'float',\n default: 0.2\n },\n {\n name: 'sync',\n type: 'float',\n default: 0.1\n },\n {\n name: 'offset',\n type: 'float',\n default: 0.0\n }\n ],\n glsl: `\n vec2 st = _st;\n float r = sin((st.x-offset*2/freq+time*sync)*freq)*0.5 + 0.5;\n float g = sin((st.x+time*sync)*freq)*0.5 + 0.5;\n float b = sin((st.x+offset/freq+time*sync)*freq)*0.5 + 0.5;\n return vec4(r, g, b, 1.0);\n `\n}\n\n// The above code generates the glsl function:\n`vec4 osc(vec2 _st, float freq, float sync, float offset){\n vec2 st = _st;\n float r = sin((st.x-offset*2/freq+time*sync)*freq)*0.5 + 0.5;\n float g = sin((st.x+time*sync)*freq)*0.5 + 0.5;\n float b = sin((st.x+offset/freq+time*sync)*freq)*0.5 + 0.5;\n return vec4(r, g, b, 1.0);\n}`\n\n\nTypes and default arguments for hydra functions.\nThe value in the 'type' field lets the parser know which type the function will be returned as well as default arguments.\n\nconst types = {\n 'src': {\n returnType: 'vec4',\n args: ['vec2 _st']\n },\n 'coord': {\n returnType: 'vec2',\n args: ['vec2 _st']\n },\n 'color': {\n returnType: 'vec4',\n args: ['vec4 _c0']\n },\n 'combine': {\n returnType: 'vec4',\n args: ['vec4 _c0', 'vec4 _c1']\n },\n 'combineCoord': {\n returnType: 'vec2',\n args: ['vec2 _st', 'vec4 _c0']\n }\n}\n\n*/\n\nmodule.exports = [\n {\n name: 'noise',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 10,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0.1,\n }\n ],\n glsl:\n ` return vec4(vec3(_noise(vec3(_st*scale, offset*time))), 1.0);`\n },\n {\n name: 'voronoi',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 5,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0.3,\n },\n {\n type: 'float',\n name: 'blending',\n default: 0.3,\n }\n ],\n glsl:\n ` vec3 color = vec3(.0);\n // Scale\n _st *= scale;\n // Tile the space\n vec2 i_st = floor(_st);\n vec2 f_st = fract(_st);\n float m_dist = 10.; // minimun distance\n vec2 m_point; // minimum point\n for (int j=-1; j<=1; j++ ) {\n for (int i=-1; i<=1; i++ ) {\n vec2 neighbor = vec2(float(i),float(j));\n vec2 p = i_st + neighbor;\n vec2 point = fract(sin(vec2(dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3))))*43758.5453);\n point = 0.5 + 0.5*sin(time*speed + 6.2831*point);\n vec2 diff = neighbor + point - f_st;\n float dist = length(diff);\n if( dist < m_dist ) {\n m_dist = dist;\n m_point = point;\n }\n }\n }\n // Assign a color using the closest point position\n color += dot(m_point,vec2(.3,.6));\n color *= 1.0 - blending*m_dist;\n return vec4(color, 1.0);`\n },\n {\n name: 'osc',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'frequency',\n default: 60,\n },\n {\n type: 'float',\n name: 'sync',\n default: 0.1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` vec2 st = _st;\n float r = sin((st.x-offset/frequency+time*sync)*frequency)*0.5 + 0.5;\n float g = sin((st.x+time*sync)*frequency)*0.5 + 0.5;\n float b = sin((st.x+offset/frequency+time*sync)*frequency)*0.5 + 0.5;\n return vec4(r, g, b, 1.0);`\n },\n {\n name: 'shape',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'sides',\n default: 3,\n },\n {\n type: 'float',\n name: 'radius',\n default: 0.3,\n },\n {\n type: 'float',\n name: 'smoothing',\n default: 0.01,\n }\n ],\n glsl:\n ` vec2 st = _st * 2. - 1.;\n // Angle and radius from the current pixel\n float a = atan(st.x,st.y)+3.1416;\n float r = (2.*3.1416)/sides;\n float d = cos(floor(.5+a/r)*r-a)*length(st);\n return vec4(vec3(1.0-smoothstep(radius,radius + smoothing + 0.0000001,d)), 1.0);`\n },\n {\n name: 'gradient',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` return vec4(_st, sin(time*speed), 1.0);`\n },\n {\n name: 'src',\n type: 'src',\n inputs: [\n {\n type: 'sampler2D',\n name: 'tex',\n default: NaN,\n }\n ],\n glsl:\n ` // vec2 uv = gl_FragCoord.xy/vec2(1280., 720.);\n return texture2D(tex, fract(_st));`\n },\n {\n name: 'solid',\n type: 'src',\n inputs: [\n {\n type: 'float',\n name: 'r',\n default: 0,\n },\n {\n type: 'float',\n name: 'g',\n default: 0,\n },\n {\n type: 'float',\n name: 'b',\n default: 0,\n },\n {\n type: 'float',\n name: 'a',\n default: 1,\n }\n ],\n glsl:\n ` return vec4(r, g, b, a);`\n },\n {\n name: 'rotate',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'angle',\n default: 10,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` vec2 xy = _st - vec2(0.5);\n float ang = angle + speed *time;\n xy = mat2(cos(ang),-sin(ang), sin(ang),cos(ang))*xy;\n xy += 0.5;\n return xy;`\n },\n {\n name: 'scale',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1.5,\n },\n {\n type: 'float',\n name: 'xMult',\n default: 1,\n },\n {\n type: 'float',\n name: 'yMult',\n default: 1,\n },\n {\n type: 'float',\n name: 'offsetX',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'offsetY',\n default: 0.5,\n }\n ],\n glsl:\n ` vec2 xy = _st - vec2(offsetX, offsetY);\n xy*=(1.0/vec2(amount*xMult, amount*yMult));\n xy+=vec2(offsetX, offsetY);\n return xy;\n `\n },\n {\n name: 'pixelate',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'pixelX',\n default: 20,\n },\n {\n type: 'float',\n name: 'pixelY',\n default: 20,\n }\n ],\n glsl:\n ` vec2 xy = vec2(pixelX, pixelY);\n return (floor(_st * xy) + 0.5)/xy;`\n },\n {\n name: 'posterize',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'bins',\n default: 3,\n },\n {\n type: 'float',\n name: 'gamma',\n default: 0.6,\n }\n ],\n glsl:\n ` vec4 c2 = pow(_c0, vec4(gamma));\n c2 *= vec4(bins);\n c2 = floor(c2);\n c2/= vec4(bins);\n c2 = pow(c2, vec4(1.0/gamma));\n return vec4(c2.xyz, _c0.a);`\n },\n {\n name: 'shift',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'r',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'g',\n default: 0,\n },\n {\n type: 'float',\n name: 'b',\n default: 0,\n },\n {\n type: 'float',\n name: 'a',\n default: 0,\n }\n ],\n glsl:\n ` vec4 c2 = vec4(_c0);\n c2.r = fract(c2.r + r);\n c2.g = fract(c2.g + g);\n c2.b = fract(c2.b + b);\n c2.a = fract(c2.a + a);\n return vec4(c2.rgba);`\n },\n {\n name: 'repeat',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'repeatX',\n default: 3,\n },\n {\n type: 'float',\n name: 'repeatY',\n default: 3,\n },\n {\n type: 'float',\n name: 'offsetX',\n default: 0,\n },\n {\n type: 'float',\n name: 'offsetY',\n default: 0,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(repeatX, repeatY);\n st.x += step(1., mod(st.y,2.0)) * offsetX;\n st.y += step(1., mod(st.x,2.0)) * offsetY;\n return fract(st);`\n },\n {\n name: 'modulateRepeat',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'repeatX',\n default: 3,\n },\n {\n type: 'float',\n name: 'repeatY',\n default: 3,\n },\n {\n type: 'float',\n name: 'offsetX',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'offsetY',\n default: 0.5,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(repeatX, repeatY);\n st.x += step(1., mod(st.y,2.0)) + _c0.r * offsetX;\n st.y += step(1., mod(st.x,2.0)) + _c0.g * offsetY;\n return fract(st);`\n },\n {\n name: 'repeatX',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'reps',\n default: 3,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(reps, 1.0);\n // float f = mod(_st.y,2.0);\n st.y += step(1., mod(st.x,2.0))* offset;\n return fract(st);`\n },\n {\n name: 'modulateRepeatX',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'reps',\n default: 3,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0.5,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(reps, 1.0);\n // float f = mod(_st.y,2.0);\n st.y += step(1., mod(st.x,2.0)) + _c0.r * offset;\n return fract(st);`\n },\n {\n name: 'repeatY',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'reps',\n default: 3,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(1.0, reps);\n // float f = mod(_st.y,2.0);\n st.x += step(1., mod(st.y,2.0))* offset;\n return fract(st);`\n },\n {\n name: 'modulateRepeatY',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'reps',\n default: 3,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0.5,\n }\n ],\n glsl:\n ` vec2 st = _st * vec2(reps, 1.0);\n // float f = mod(_st.y,2.0);\n st.x += step(1., mod(st.y,2.0)) + _c0.r * offset;\n return fract(st);`\n },\n {\n name: 'kaleid',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'nSides',\n default: 4,\n }\n ],\n glsl:\n ` vec2 st = _st;\n st -= 0.5;\n float r = length(st);\n float a = atan(st.y, st.x);\n float pi = 2.*3.1416;\n a = mod(a,pi/nSides);\n a = abs(a-pi/nSides/2.);\n return r*vec2(cos(a), sin(a));`\n },\n {\n name: 'modulateKaleid',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'nSides',\n default: 4,\n }\n ],\n glsl:\n ` vec2 st = _st - 0.5;\n float r = length(st);\n float a = atan(st.y, st.x);\n float pi = 2.*3.1416;\n a = mod(a,pi/nSides);\n a = abs(a-pi/nSides/2.);\n return (_c0.r+r)*vec2(cos(a), sin(a));`\n },\n {\n name: 'scroll',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'scrollX',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'scrollY',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'speedX',\n default: 0,\n },\n {\n type: 'float',\n name: 'speedY',\n default: 0,\n }\n ],\n glsl:\n `\n _st.x += scrollX + time*speedX;\n _st.y += scrollY + time*speedY;\n return fract(_st);`\n },\n {\n name: 'scrollX',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'scrollX',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` _st.x += scrollX + time*speed;\n return fract(_st);`\n },\n {\n name: 'modulateScrollX',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'scrollX',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` _st.x += _c0.r*scrollX + time*speed;\n return fract(_st);`\n },\n {\n name: 'scrollY',\n type: 'coord',\n inputs: [\n {\n type: 'float',\n name: 'scrollY',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` _st.y += scrollY + time*speed;\n return fract(_st);`\n },\n {\n name: 'modulateScrollY',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'scrollY',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'speed',\n default: 0,\n }\n ],\n glsl:\n ` _st.y += _c0.r*scrollY + time*speed;\n return fract(_st);`\n },\n {\n name: 'add',\n type: 'combine',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1,\n }\n ],\n glsl:\n ` return (_c0+_c1)*amount + _c0*(1.0-amount);`\n },\n {\n name: 'sub',\n type: 'combine',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1,\n }\n ],\n glsl:\n ` return (_c0-_c1)*amount + _c0*(1.0-amount);`\n },\n {\n name: 'layer',\n type: 'combine',\n inputs: [\n \n ],\n glsl:\n ` return vec4(mix(_c0.rgb, _c1.rgb, _c1.a), clamp(_c0.a + _c1.a, 0.0, 1.0));`\n },\n {\n name: 'blend',\n type: 'combine',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 0.5,\n }\n ],\n glsl:\n ` return _c0*(1.0-amount)+_c1*amount;`\n },\n {\n name: 'mult',\n type: 'combine',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1,\n }\n ],\n glsl:\n ` return _c0*(1.0-amount)+(_c0*_c1)*amount;`\n },\n {\n name: 'diff',\n type: 'combine',\n inputs: [\n \n ],\n glsl:\n ` return vec4(abs(_c0.rgb-_c1.rgb), max(_c0.a, _c1.a));`\n },\n {\n name: 'modulate',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 0.1,\n }\n ],\n glsl:\n ` // return fract(st+(_c0.xy-0.5)*amount);\n return _st + _c0.xy*amount;`\n },\n {\n name: 'modulateScale',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'multiple',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 1,\n }\n ],\n glsl:\n ` vec2 xy = _st - vec2(0.5);\n xy*=(1.0/vec2(offset + multiple*_c0.r, offset + multiple*_c0.g));\n xy+=vec2(0.5);\n return xy;`\n },\n {\n name: 'modulatePixelate',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'multiple',\n default: 10,\n },\n {\n type: 'float',\n name: 'offset',\n default: 3,\n }\n ],\n glsl:\n ` vec2 xy = vec2(offset + _c0.x*multiple, offset + _c0.y*multiple);\n return (floor(_st * xy) + 0.5)/xy;`\n },\n {\n name: 'modulateRotate',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'multiple',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` vec2 xy = _st - vec2(0.5);\n float angle = offset + _c0.x * multiple;\n xy = mat2(cos(angle),-sin(angle), sin(angle),cos(angle))*xy;\n xy += 0.5;\n return xy;`\n },\n {\n name: 'modulateHue',\n type: 'combineCoord',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1,\n }\n ],\n glsl:\n ` return _st + (vec2(_c0.g - _c0.r, _c0.b - _c0.g) * amount * 1.0/resolution);`\n },\n {\n name: 'invert',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1,\n }\n ],\n glsl:\n ` return vec4((1.0-_c0.rgb)*amount + _c0.rgb*(1.0-amount), _c0.a);`\n },\n {\n name: 'contrast',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 1.6,\n }\n ],\n glsl:\n ` vec4 c = (_c0-vec4(0.5))*vec4(amount) + vec4(0.5);\n return vec4(c.rgb, _c0.a);`\n },\n {\n name: 'brightness',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 0.4,\n }\n ],\n glsl:\n ` return vec4(_c0.rgb + vec3(amount), _c0.a);`\n },\n {\n name: 'mask',\n type: 'combine',\n inputs: [\n \n ],\n glsl:\n ` float a = _luminance(_c1.rgb);\n return vec4(_c0.rgb*a, a*_c0.a);`\n },\n \n {\n name: 'luma',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'threshold',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'tolerance',\n default: 0.1,\n }\n ],\n glsl:\n ` float a = smoothstep(threshold-(tolerance+0.0000001), threshold+(tolerance+0.0000001), _luminance(_c0.rgb));\n return vec4(_c0.rgb*a, a);`\n },\n {\n name: 'thresh',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'threshold',\n default: 0.5,\n },\n {\n type: 'float',\n name: 'tolerance',\n default: 0.04,\n }\n ],\n glsl:\n ` return vec4(vec3(smoothstep(threshold-(tolerance+0.0000001), threshold+(tolerance+0.0000001), _luminance(_c0.rgb))), _c0.a);`\n },\n {\n name: 'color',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'r',\n default: 1,\n },\n {\n type: 'float',\n name: 'g',\n default: 1,\n },\n {\n type: 'float',\n name: 'b',\n default: 1,\n },\n {\n type: 'float',\n name: 'a',\n default: 1,\n }\n ],\n glsl:\n ` vec4 c = vec4(r, g, b, a);\n vec4 pos = step(0.0, c); // detect whether negative\n // if > 0, return r * _c0\n // if < 0 return (1.0-r) * _c0\n return vec4(mix((1.0-_c0)*abs(c), c*_c0, pos));`\n },\n {\n name: 'saturate',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 2,\n }\n ],\n glsl:\n ` const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(_c0.rgb, W));\n return vec4(mix(intensity, _c0.rgb, amount), _c0.a);`\n },\n {\n name: 'hue',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'hue',\n default: 0.4,\n }\n ],\n glsl:\n ` vec3 c = _rgbToHsv(_c0.rgb);\n c.r += hue;\n // c.r = fract(c.r);\n return vec4(_hsvToRgb(c), _c0.a);`\n },\n {\n name: 'colorama',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'amount',\n default: 0.005,\n }\n ],\n glsl:\n ` vec3 c = _rgbToHsv(_c0.rgb);\n c += vec3(amount);\n c = _hsvToRgb(c);\n c = fract(c);\n return vec4(c, _c0.a);`\n },\n {\n name: 'prev',\n type: 'src',\n inputs: [\n \n ],\n glsl:\n ` return texture2D(prevBuffer, fract(_st));`\n },\n {\n name: 'sum',\n type: 'color',\n inputs: [\n {\n type: 'vec4',\n name: 'scale',\n default: 1,\n }\n ],\n glsl:\n ` vec4 v = _c0 * s;\n return v.r + v.g + v.b + v.a;\n }\n float sum(vec2 _st, vec4 s) { // vec4 is not a typo, because argument type is not overloaded\n vec2 v = _st.xy * s.xy;\n return v.x + v.y;`\n },\n {\n name: 'r',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` return vec4(_c0.r * scale + offset);`\n },\n {\n name: 'g',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` return vec4(_c0.g * scale + offset);`\n },\n {\n name: 'b',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` return vec4(_c0.b * scale + offset);`\n },\n {\n name: 'a',\n type: 'color',\n inputs: [\n {\n type: 'float',\n name: 'scale',\n default: 1,\n },\n {\n type: 'float',\n name: 'offset',\n default: 0,\n }\n ],\n glsl:\n ` return vec4(_c0.a * scale + offset);`\n }\n ]","const log = require('./log.js').log\n\nmodule.exports = {\n eval: (arg, callback) => {\n var self = this\n\n // wrap everything in an async function\n var jsString = `(async() => {\n ${arg}\n})().catch(${(err) => log(err.message, \"log-error\")})`\n var isError = false\n try {\n eval(jsString)\n // log(jsString)\n log('')\n } catch (e) {\n isError = true\n console.log(\"logging\", e)\n // var err = e.constructor('Error in Evaled Script: ' + e.message);\n // console.log(err.lineNumber)\n log(e.message, \"log-error\")\n //console.log('ERROR', JSON.stringify(e))\n }\n // console.log('callback is', callback)\n if(callback) callback(jsString, isError)\n }\n}\n","const html = require('choo/html')\nconst raw = require('choo/html/raw')\nconst toolbar = require('./toolbar.js')\n\nconst link = (url) => `href=${url} target=_blank`\nmodule.exports = function mainView(state, emit) {\n const { t, languages } = state.translation\n const textDirection = state.translation.selectedLanguage === 'ar' && state.showInfo === true ? 'rtl': 'ltr'\n\n const langArray = Object.entries(languages)\n return html`\n
\n
\n
\n ${state.showInfo && langArray.length > 1 ? html`
${langArray.map(([key, val]) => html`\n
emit('set language', key)}>${val}
\n `)}
` : html`
` }\n ${toolbar(state, emit)}\n
\n
\n
\n

${t('info.title')}

\n

${t('info.subtitle')}

\n
///////////////////////////////////////////////////////////
\n

${t('info.description')}

\n

${t('info.get-started-title')}
    \n
  1. ${t('info.get-started-list.0')}
  2. \n
  3. ${t('info.get-started-list.1')}
  4. \n
  5. ${t('info.get-started-list.2')}
  6. \n
\n

\n\n

///////////////////////////////////////////////////////////


\n ${t('info.description-detailed')}\n

\n

${t('info.uses')}

    \n ${t('info.uses-list', { returnObjects: true }).map((text) => html`
  • ${text}
  • `)}\n

\n \n

${raw(t('info.author', { author: `href=https://ojack.xyz class=olivia target=_blank`}))}

\n

${raw(t('info.more-info', {\n docs: link(\"https://hydra.ojack.xyz/docs\"),\n functions: link(\"https://hydra.ojack.xyz/api\"),\n gallery: link(\"https://twitter.com/hydra_patterns\"),\n repo: link(\"https://github.com/hydra-synth/hydra\"),\n pixeljam: link(\"http://pixeljam.glitch.me/\"),\n garden: link(\"https://hydra.ojack.xyz/garden\"),\n 'hydra-book': link(\"https://hydra-book.glitch.me/\"),\n \"tutorials\": link(\"https://github.com/ojack/hydra/blob/master/examples/README.md\")\n }))}

\n

${raw(t('info.more-info-forums', {\n discord: link(\"https://discord.gg/ZQjfHkNHXC\"),\n facebook: link(\"https://www.facebook.com/groups/1084288351771117/\")\n }))}

\n\n

${raw(t('info.support', {\n \"open-collective\": link(\"https://opencollective.com/hydra-synth\")\n }))}

\n
\n
\n
\n
\n`\n}\n\n\n// \n// module.exports = function mainView(state, emit) {\n// return html`\n//
\n//
\n//
\n//
\n// ${toolbar(state, emit)}\n//
\n//
\n//
\n//

hydra

\n//

live coding networked visuals

\n//
///////////////////////////////////////////////////////////
\n//

Hydra is a platform for live coding visuals, in which each connected browser window can be used as a node of a modular and distributed video synthesizer.

\n//

To get started:
    \n//
  1. Close this window
  2. \n//
  3. Change some numbers
  4. \n//
  5. Type Ctrl + Shift + Enter
  6. \n//
\n//

\n \n//

///////////////////////////////////////////////////////////


Built using WebRTC (peer-to-peer web streaming) and WebGL, hydra allows each connected browser/device/person to output a video signal or stream, and receive and modify streams from other browsers/devices/people. The API is inspired by analog modular synthesis, in which multiple visual sources (oscillators, cameras, application windows, other connected windows) can be transformed, modulated, and composited via combining sequences of functions.

\n//

Features:

    \n//
  • Written in javascript and compatible with other javascript libraries
  • \n//
  • Available as a platform as well as a set of standalone modules
  • \n//
  • Cross-platform and requires no installation (runs in the browser)
  • \n//
  • Also available as a package for live coding from within atom text editor
  • \n//
  • Experimental and forever evolving !!
  • \n//
\n//

Created by olivia.

\n//

For more information and instructions, see:\n// the documentation on github,\n// a list of hydra functions,\n// \n// a gallery of user-generated sketches,\n// PIXELJAM collaborative editor,\n// Hydra Book, and more tutorials and examples.

\n//

There is also an active Discord server and facebook group for hydra users+contributors.

\n \n//

If you enjoy using Hydra, please consider supporting continued development ${'<3 <3'}

\n//
\n//
\n//
\n//
\n// `\n// }","const html = require('choo/html')\nconst info = require('./info.js')\nconst Hydra = require('./Hydra.js')\nconst Editor = require('./EditorComponent.js')\n\nmodule.exports = function mainView(state, emit) {\n return html`\n \n
\n ${state.cache(Hydra, 'hydra-canvas').render(state, emit)}\n \n
\n ${info(state, emit)}\n ${state.cache(Editor, 'editor').render(state, emit)}\n \n `\n}","const html = require('choo/html')\n\nmodule.exports = function toolbar(state, emit) {\n const hidden = state.showInfo ? 'hidden' : ''\n\n const { t } = state.translation\n\n const dispatch = (eventName) => (e) => emit(eventName, e)\n\n const icon = (id, className, title, event) => html`\n `\n\n const toggleInfo = state.showInfo ? icon(\"close\", \"fa-times\", t('toolbar.hide-info'), 'toggle info') : icon(\"close\", \"fa-question-circle\", t('toolbar.show-info'), 'toggle info') \n return html`
\n ${icon(\"run\", `fa-play-circle ${hidden}`, t('toolbar.run'), 'editor:evalAll')}\n ${icon(\"clear\", `fa fa-trash ${hidden}`, t('toolbar.clear'), 'editor:clearAll')}\n ${icon(\"shuffle\", `fa-random`, t('toolbar.shuffle'), 'gallery:showExample')}\n ${icon(\"mutator\", `fa-dice ${hidden}`, t('toolbar.random'), 'editor:randomize')}\n ${state.serverURL === null ? '' : icon(\"share\", `fa-upload ${hidden}`, t('toolbar.upload'), 'gallery:shareSketch')}\n ${toggleInfo}\n
`\n\n // ${icon(\"share\", `fa-upload ${hidden}`, t('toolbar.upload'), 'gallery:shareSketch')}\n\n}"],"mappings":"CAAA,oBAAAA,EAAAC,EAAAC,EAAAC,GAAA,SAAAC,EAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,KAAAJ,EAAAI,GAAA,KAAAE,EAAA,mBAAAC,iBAAA,IAAAF,GAAAC,EAAA,OAAAA,EAAAF,GAAA,MAAAI,EAAA,OAAAA,EAAAJ,GAAA,OAAAK,EAAA,IAAAC,MAAA,uBAAAN,EAAA,WAAAK,EAAAE,KAAA,mBAAAF,CAAA,KAAAG,EAAAX,EAAAG,GAAA,CAAAS,QAAA,IAAAb,EAAAI,GAAA,GAAAU,KAAAF,EAAAC,SAAA,SAAAd,GAAA,IAAAE,EAAAD,EAAAI,GAAA,GAAAL,GAAA,OAAAI,EAAAF,GAAAF,EAAA,GAAAa,IAAAC,QAAAd,EAAAC,EAAAC,EAAAC,EAAA,QAAAD,EAAAG,GAAAS,OAAA,SAAAL,EAAA,mBAAAD,iBAAAH,EAAA,EAAAA,EAAAF,EAAAa,OAAAX,IAAAD,EAAAD,EAAAE,IAAA,OAAAD,CAAA,QAAAJ,CAAA,kBAAAQ,QAAAS,OAAAH,SCAA,MAAAI,SAAAV,QAAA,iBACA,MAAAW,KAAAX,QAAA,QACA,MAAAY,MAAAZ,QAAA,yBACA,MAAAa,cAAAb,QAAA,kCAEA,MAAAc,SAAAd,QAAA,uBAEA,MAAAe,IAAAJ,OACAI,IAAAC,IAAAN,YACAK,IAAAC,IAAAJ,OACAG,IAAAC,IAAAH,eACAE,IAAAE,MAAA,IAAAH,UACAC,IAAAE,MAAA,gBAAAH,UACAC,IAAAG,MAAA,O,+JCbA,SAAAC,kBAAAC,IAAAC,KACA,GAAAA,KAAA,MAAAA,IAAAD,IAAAZ,OAAAa,IAAAD,IAAAZ,OACA,QAAAX,EAAA,EAAAyB,KAAA,IAAAC,MAAAF,KAAAxB,EAAAwB,IAAAxB,IAAAyB,KAAAzB,GAAAuB,IAAAvB,GACA,OAAAyB,IACA,CACAb,OAAAH,QAAAa,kBAAAV,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,0CCLA,SAAAmB,gBAAAL,KACA,GAAAG,MAAAG,QAAAN,KAAA,OAAAA,GACA,CACAX,OAAAH,QAAAmB,gBAAAhB,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,0CCHA,SAAAqB,uBAAAC,MACA,GAAAA,YAAA,GACA,UAAAC,eAAA,4DACA,CACA,OAAAD,IACA,CACAnB,OAAAH,QAAAqB,uBAAAlB,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,0CCNA,SAAAwB,gBAAAC,SAAAC,aACA,KAAAD,oBAAAC,aAAA,CACA,UAAAC,UAAA,oCACA,CACA,CACAxB,OAAAH,QAAAwB,gBAAArB,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,0CCLA,IAAA4B,cAAAlC,QAAA,sBACA,SAAAmC,kBAAAC,OAAAC,OACA,QAAAxC,EAAA,EAAAA,EAAAwC,MAAA7B,OAAAX,IAAA,CACA,IAAAyC,WAAAD,MAAAxC,GACAyC,WAAAC,WAAAD,WAAAC,YAAA,MACAD,WAAAE,aAAA,KACA,aAAAF,sBAAAG,SAAA,KACAC,OAAAC,eAAAP,OAAAF,cAAAI,WAAAM,KAAAN,WACA,CACA,CACA,SAAAO,aAAAb,YAAAc,WAAAC,aACA,GAAAD,WAAAX,kBAAAH,YAAAgB,UAAAF,YACA,GAAAC,YAAAZ,kBAAAH,YAAAe,aACAL,OAAAC,eAAAX,YAAA,aACAS,SAAA,QAEA,OAAAT,WACA,CACAvB,OAAAH,QAAAuC,aAAApC,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,iEClBA,IAAA4B,cAAAlC,QAAA,sBACA,SAAAiD,gBAAAC,IAAAN,IAAAO,OACAP,IAAAV,cAAAU,KACA,GAAAA,OAAAM,IAAA,CACAR,OAAAC,eAAAO,IAAAN,IAAA,CACAO,YACAZ,WAAA,KACAC,aAAA,KACAC,SAAA,MAEA,MACAS,IAAAN,KAAAO,KACA,CACA,OAAAD,GACA,CACAzC,OAAAH,QAAA2C,gBAAAxC,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,iECfA,SAAA8C,gBAAAxD,GACAa,OAAAH,QAAA8C,gBAAAV,OAAAW,eAAAX,OAAAY,eAAAC,OAAA,SAAAH,gBAAAxD,GACA,OAAAA,EAAA4D,WAAAd,OAAAY,eAAA1D,EACA,EAAAa,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,QACA,OAAA8C,gBAAAxD,EACA,CACAa,OAAAH,QAAA8C,gBAAA3C,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,0CCNA,IAAA+C,eAAArD,QAAA,uBACA,SAAAyD,UAAAC,SAAAC,YACA,UAAAA,aAAA,YAAAA,aAAA,MACA,UAAA1B,UAAA,qDACA,CACAyB,SAAAV,UAAAN,OAAAkB,OAAAD,uBAAAX,UAAA,CACAa,YAAA,CACAV,MAAAO,SACAjB,SAAA,KACAD,aAAA,QAGAE,OAAAC,eAAAe,SAAA,aACAjB,SAAA,QAEA,GAAAkB,WAAAN,eAAAK,SAAAC,WACA,CACAlD,OAAAH,QAAAmD,UAAAhD,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,mECjBA,SAAAwD,iBAAAC,MACA,UAAAC,SAAA,aAAAD,KAAAC,OAAAC,WAAA,MAAAF,KAAA,2BAAAxC,MAAA2C,KAAAH,KACA,CACAtD,OAAAH,QAAAwD,iBAAArD,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,2CCHA,SAAA6D,mBACA,UAAAlC,UAAA,4IACA,CACAxB,OAAAH,QAAA6D,iBAAA1D,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,2CCHA,IAAA8D,QAAApE,QAAA,0BACA,IAAAqE,sBAAArE,QAAA,8BACA,SAAAsE,2BAAA1C,KAAArB,MACA,GAAAA,OAAA6D,QAAA7D,QAAA,iBAAAA,OAAA,aACA,OAAAA,IACA,SAAAA,YAAA,GACA,UAAA0B,UAAA,2DACA,CACA,OAAAoC,sBAAAzC,KACA,CACAnB,OAAAH,QAAAgE,2BAAA7D,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,0FCVA,SAAAiE,gBAAA3E,EAAAS,GACAI,OAAAH,QAAAiE,gBAAA7B,OAAAW,eAAAX,OAAAW,eAAAE,OAAA,SAAAgB,gBAAA3E,EAAAS,GACAT,EAAA4D,UAAAnD,EACA,OAAAT,CACA,EAAAa,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,QACA,OAAAiE,gBAAA3E,EAAAS,EACA,CACAI,OAAAH,QAAAiE,gBAAA9D,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,2CCPA,IAAAkE,eAAAxE,QAAA,uBACA,IAAAyE,gBAAAzE,QAAA,wBACA,IAAA0E,2BAAA1E,QAAA,mCACA,IAAA2E,gBAAA3E,QAAA,wBACA,SAAA4E,SAAAxD,KACA,OAAAoD,eAAApD,MAAAqD,gBAAArD,MAAAsD,2BAAAtD,MAAAuD,iBACA,CACAlE,OAAAH,QAAAsE,SAAAnE,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,2JCPA,IAAA8D,QAAApE,QAAA,0BACA,SAAA6E,aAAAC,MAAAC,MACA,GAAAX,QAAAU,SAAA,UAAAA,QAAA,YAAAA,MACA,IAAAE,KAAAF,MAAAd,OAAAiB,aACA,GAAAD,OAAAE,UAAA,CACA,IAAAC,IAAAH,KAAAzE,KAAAuE,MAAAC,MAAA,WACA,GAAAX,QAAAe,OAAA,gBAAAA,IACA,UAAAlD,UAAA,+CACA,CACA,OAAA8C,OAAA,SAAAK,OAAAC,QAAAP,MACA,CACArE,OAAAH,QAAAuE,aAAApE,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,2DCXA,IAAA8D,QAAApE,QAAA,0BACA,IAAAiF,YAAAjF,QAAA,oBACA,SAAAsF,eAAAC,KACA,IAAA3C,IAAAqC,YAAAM,IAAA,UACA,OAAAnB,QAAAxB,OAAA,SAAAA,IAAAwC,OAAAxC,IACA,CACAnC,OAAAH,QAAAgF,eAAA7E,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,iFCNA,SAAA8D,QAAAlB,KACA,0BAEA,OAAAzC,OAAAH,QAAA8D,QAAA,mBAAAJ,QAAA,iBAAAA,OAAAC,SAAA,SAAAf,KACA,cAAAA,GACA,WAAAA,KACA,OAAAA,KAAA,mBAAAc,QAAAd,IAAAW,cAAAG,QAAAd,MAAAc,OAAAhB,UAAA,gBAAAE,GACA,EAAAzC,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,QAAA8D,QAAAlB,IACA,CACAzC,OAAAH,QAAA8D,QAAA3D,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,2CCTA,IAAAkF,iBAAAxF,QAAA,yBACA,SAAAyF,4BAAA7F,EAAA8F,QACA,IAAA9F,EAAA,OACA,UAAAA,IAAA,gBAAA4F,iBAAA5F,EAAA8F,QACA,IAAAhG,EAAAgD,OAAAM,UAAA2C,SAAApF,KAAAX,GAAAgG,MAAA,MACA,GAAAlG,IAAA,UAAAE,EAAAiE,YAAAnE,EAAAE,EAAAiE,YAAAgC,KACA,GAAAnG,IAAA,OAAAA,IAAA,aAAA6B,MAAA2C,KAAAtE,GACA,GAAAF,IAAA,wDAAAoG,KAAApG,GAAA,OAAA8F,iBAAA5F,EAAA8F,OACA,CACAjF,OAAAH,QAAAmF,4BAAAhF,OAAAH,QAAAkB,WAAA,KAAAf,OAAAH,QAAA,WAAAG,OAAAH,O,qECTA,SAAAyF,OAAAC,gBACA1F,UAAA,iBAAAG,SAAA,YAAAuF,QAAA1F,gBACA2F,SAAA,YAAAA,OAAAC,IAAAD,OAAA,YAAAD,UACAD,cAAAI,aAAA,YAAAA,WAAAJ,QAAAnE,KAAAoE,QAAAD,OAAAK,MAAA,IACA,EAJA,CAIAC,MAAA,SAAA/F,SAAA,aAGA,IAAAgG,sBAAA,ouBAGA,IAAAC,2BAAA,+7CAGA,IAAAC,wBAAA,qjBAGA,IAAAC,6BAAA,o6BASA,IAAAC,cAAA,CACA,wNACA,iDACA,SACAC,OAAA,yEACAC,WAAA,kBAKA,IAAAC,qBAAA,8KAEA,IAAAC,WAAA,CACA,EAAAD,qBACA,UAAAA,qBAAA,iBACA,EAAAA,qBAAA,4CAGA,IAAAE,0BAAA,kBAIA,IAAAC,wBAAA,IAAAC,OAAA,IAAAR,6BAAA,KACA,IAAAS,mBAAA,IAAAD,OAAA,IAAAR,6BAAAD,wBAAA,KAKA,SAAAW,cAAA/G,KAAAgH,KACA,IAAAC,IAAA,MACA,QAAAxH,EAAA,EAAAA,EAAAuH,IAAA5G,OAAAX,GAAA,GACAwH,KAAAD,IAAAvH,GACA,GAAAwH,IAAAjH,KAAA,cACAiH,KAAAD,IAAAvH,EAAA,GACA,GAAAwH,KAAAjH,KAAA,aACA,CACA,YACA,CAIA,SAAAkH,kBAAAlH,KAAAmH,QACA,GAAAnH,KAAA,WAAAA,OAAA,GACA,GAAAA,KAAA,gBACA,GAAAA,KAAA,WAAAA,OAAA,GACA,GAAAA,KAAA,iBACA,GAAAA,MAAA,cAAAA,MAAA,KAAA4G,wBAAAlB,KAAAV,OAAAoC,aAAApH,MAAA,CACA,GAAAmH,SAAA,oBACA,OAAAJ,cAAA/G,KAAAmG,2BACA,CAIA,SAAAkB,iBAAArH,KAAAmH,QACA,GAAAnH,KAAA,WAAAA,OAAA,GACA,GAAAA,KAAA,gBACA,GAAAA,KAAA,iBACA,GAAAA,KAAA,gBACA,GAAAA,KAAA,WAAAA,OAAA,GACA,GAAAA,KAAA,iBACA,GAAAA,MAAA,cAAAA,MAAA,KAAA8G,mBAAApB,KAAAV,OAAAoC,aAAApH,MAAA,CACA,GAAAmH,SAAA,oBACA,OAAAJ,cAAA/G,KAAAmG,6BAAAY,cAAA/G,KAAAkG,sBACA,CAyBA,IAAAoB,UAAA,SAAAA,UAAAC,MAAAC,MACA,GAAAA,YAAA,EAAAA,KAAA,GAEAvB,KAAAsB,YACAtB,KAAAwB,QAAAD,KAAAC,QACAxB,KAAAyB,aAAAF,KAAAE,WACAzB,KAAA0B,aAAAH,KAAAG,WACA1B,KAAA2B,SAAAJ,KAAAI,OACA3B,KAAA4B,WAAAL,KAAAK,SACA5B,KAAA6B,SAAAN,KAAAM,OACA7B,KAAA8B,UAAAP,KAAAO,QACA9B,KAAA+B,MAAAR,KAAAQ,OAAA,KACA/B,KAAAgC,cAAA,IACA,EAEA,SAAAD,MAAAvC,KAAAyC,MACA,WAAAZ,UAAA7B,KAAA,CAAAiC,WAAA,KAAAM,MAAAE,MACA,CACA,IAAAR,WAAA,CAAAA,WAAA,MAAAC,WAAA,CAAAA,WAAA,MAIA,IAAAQ,SAAA,GAGA,SAAAC,GAAA3C,KAAA4C,SACA,GAAAA,eAAA,EAAAA,QAAA,GAEAA,QAAAZ,QAAAhC,KACA,OAAA0C,SAAA1C,MAAA,IAAA6B,UAAA7B,KAAA4C,QACA,CAEA,IAAAC,QAAA,CACAC,IAAA,IAAAjB,UAAA,MAAAK,YACAa,OAAA,IAAAlB,UAAA,SAAAK,YACAc,OAAA,IAAAnB,UAAA,SAAAK,YACAlC,KAAA,IAAA6B,UAAA,OAAAK,YACAe,UAAA,IAAApB,UAAA,YAAAK,YACAgB,IAAA,IAAArB,UAAA,OAGAsB,SAAA,IAAAtB,UAAA,KAAAI,WAAA,KAAAC,WAAA,OACAkB,SAAA,IAAAvB,UAAA,KACAwB,OAAA,IAAAxB,UAAA,KAAAI,WAAA,KAAAC,WAAA,OACAoB,OAAA,IAAAzB,UAAA,KACA0B,OAAA,IAAA1B,UAAA,KAAAI,WAAA,KAAAC,WAAA,OACAsB,OAAA,IAAA3B,UAAA,KACA4B,MAAA,IAAA5B,UAAA,IAAAI,YACAyB,KAAA,IAAA7B,UAAA,IAAAI,YACA0B,MAAA,IAAA9B,UAAA,IAAAI,YACA2B,IAAA,IAAA/B,UAAA,KACAgC,SAAA,IAAAhC,UAAA,IAAAI,YACA6B,YAAA,IAAAjC,UAAA,MACAkC,MAAA,IAAAlC,UAAA,KAAAI,YACA+B,SAAA,IAAAnC,UAAA,YACAoC,gBAAA,IAAApC,UAAA,mBACAqC,SAAA,IAAArC,UAAA,MAAAI,YACAkC,UAAA,IAAAtC,UAAA,IAAAK,YACAkC,aAAA,IAAAvC,UAAA,MAAAI,WAAA,KAAAC,WAAA,OAgBAmC,GAAA,IAAAxC,UAAA,KAAAI,WAAA,KAAAG,SAAA,OACAkC,OAAA,IAAAzC,UAAA,MAAAI,WAAA,KAAAG,SAAA,OACAmC,OAAA,IAAA1C,UAAA,SAAAQ,OAAA,KAAAC,QAAA,KAAAJ,WAAA,OACAG,OAAA,IAAAR,UAAA,OAAAI,WAAA,KAAAI,OAAA,KAAAH,WAAA,OACAsC,UAAAjC,MAAA,QACAkC,WAAAlC,MAAA,QACAmC,UAAAnC,MAAA,OACAoC,WAAApC,MAAA,OACAqC,WAAArC,MAAA,OACAsC,SAAAtC,MAAA,mBACAuC,WAAAvC,MAAA,eACAwC,SAAAxC,MAAA,eACAyC,QAAA,IAAAnD,UAAA,OAAAI,WAAA,KAAAM,MAAA,EAAAF,OAAA,KAAAH,WAAA,OACA+C,OAAA1C,MAAA,QACA2C,KAAA3C,MAAA,QACA4C,MAAA5C,MAAA,QACA6C,SAAA,IAAAvD,UAAA,MAAAI,WAAA,OACAoD,SAAA9C,MAAA,QAGA+C,OAAA3C,GAAA,SACA4C,MAAA5C,GAAA,OAAAV,YACAuD,OAAA7C,GAAA,SACA8C,UAAA9C,GAAA,YACA+C,UAAA/C,GAAA,YACAgD,SAAAhD,GAAA,UAAAV,YACA2D,IAAAjD,GAAA,MAAAR,OAAA,KAAAF,WAAA,OACA4D,MAAAlD,GAAA,OAAAV,YACA6D,SAAAnD,GAAA,WACAoD,KAAApD,GAAA,OAAAR,OAAA,OACA6D,UAAArD,GAAA,WAAAT,YACA+D,IAAAtD,GAAA,MACAuD,QAAAvD,GAAA,SAAAV,YACAkE,QAAAxD,GAAA,UACAyD,OAAAzD,GAAA,QAAAV,YACAoE,KAAA1D,GAAA,OACA2D,KAAA3D,GAAA,OACA4D,OAAA5D,GAAA,SACA6D,OAAA7D,GAAA,SAAAR,OAAA,OACAsE,MAAA9D,GAAA,QACA+D,KAAA/D,GAAA,OAAAV,WAAA,KAAAC,WAAA,OACAyE,MAAAhE,GAAA,OAAAT,YACA0E,OAAAjE,GAAA,QAAAT,YACA2E,OAAAlE,GAAA,QAAAT,YACA4E,SAAAnE,GAAA,UAAAV,YACA8E,QAAApE,GAAA,UACAqE,QAAArE,GAAA,SAAAT,YACA+E,MAAAtE,GAAA,OAAAT,YACAgF,MAAAvE,GAAA,OAAAT,YACAiF,OAAAxE,GAAA,QAAAT,YACAkF,IAAAzE,GAAA,MAAAV,WAAA,KAAAM,MAAA,IACA8E,YAAA1E,GAAA,cAAAV,WAAA,KAAAM,MAAA,IACAhE,QAAAoE,GAAA,UAAAV,WAAA,KAAAI,OAAA,KAAAH,WAAA,OACAoF,MAAA3E,GAAA,QAAAV,WAAA,KAAAI,OAAA,KAAAH,WAAA,OACAqF,QAAA5E,GAAA,UAAAV,WAAA,KAAAI,OAAA,KAAAH,WAAA,QAMA,IAAAsF,UAAA,yBACA,IAAAC,WAAA,IAAArG,OAAAoG,UAAAE,OAAA,KAEA,SAAAC,UAAApN,MACA,OAAAA,OAAA,IAAAA,OAAA,IAAAA,OAAA,MAAAA,OAAA,IACA,CAEA,SAAAqN,cAAArN,KAAA8D,KAAAwJ,KACA,GAAAA,WAAA,EAAAA,IAAAtN,KAAAI,OAEA,QAAAX,EAAAqE,KAAArE,EAAA6N,IAAA7N,IAAA,CACA,IAAA8N,KAAAvN,KAAAwN,WAAA/N,GACA,GAAA2N,UAAAG,MACA,QAAA9N,EAAA6N,IAAA,GAAAC,OAAA,IAAAvN,KAAAwN,WAAA/N,EAAA,QAAAA,EAAA,EAAAA,EAAA,EACA,CACA,QACA,CAEA,IAAAgO,mBAAA,gDAEA,IAAAC,eAAA,gCAEA,IAAAC,IAAArL,OAAAM,UACA,IAAAgL,eAAAD,IAAAC,eACA,IAAArI,SAAAoI,IAAApI,SAEA,IAAAsI,OAAAvL,OAAAuL,QAAA,SAAA/K,IAAAgL,UAAA,OACAF,eAAAzN,KAAA2C,IAAAgL,SACA,EAEA,IAAAxM,QAAAH,MAAAG,SAAA,SAAAwB,KAAA,OACAyC,SAAApF,KAAA2C,OAAA,gBACA,EAEA,SAAAiL,YAAAC,OACA,WAAAnH,OAAA,OAAAmH,MAAAC,QAAA,eACA,CAEA,SAAAC,kBAAAlO,MAEA,GAAAA,MAAA,cAAAgF,OAAAoC,aAAApH,KAAA,CACAA,MAAA,MACA,OAAAgF,OAAAoC,cAAApH,MAAA,WAAAA,KAAA,YACA,CAEA,IAAAmO,cAAA,+EAKA,IAAAC,SAAA,SAAAA,SAAAC,KAAAC,KACArI,KAAAoI,UACApI,KAAAsI,OAAAD,GACA,EAEAF,SAAAxL,UAAA4L,OAAA,SAAAA,OAAAlP,GACA,WAAA8O,SAAAnI,KAAAoI,KAAApI,KAAAsI,OAAAjP,EACA,EAEA,IAAAmP,eAAA,SAAAA,eAAAxO,EAAAyO,MAAApB,KACArH,KAAAyI,YACAzI,KAAAqH,QACA,GAAArN,EAAA0O,aAAA,MAAA1I,KAAAkH,OAAAlN,EAAA0O,UAAA,CACA,EAQA,SAAAC,YAAAlK,MAAA8J,QACA,QAAAH,KAAA,EAAAQ,IAAA,KACA,IAAAC,UAAAzB,cAAA3I,MAAAmK,IAAAL,QACA,GAAAM,UAAA,cAAAV,SAAAC,KAAAG,OAAAK,IAAA,GACAR,KACAQ,IAAAC,SACA,CACA,CAKA,IAAAC,eAAA,CAOAC,YAAA,KAIAC,WAAA,SAMAC,oBAAA,KAGAC,gBAAA,KAKAC,cAAA,KAGAC,2BAAA,MAIAC,4BAAA,MAIAC,0BAAA,KAGAC,wBAAA,KAIAC,cAAA,MAKAC,UAAA,MAMAC,QAAA,KAWAC,UAAA,KASAC,OAAA,MAMAC,QAAA,KAGAnB,WAAA,KAGAoB,iBAAA,KAGAC,eAAA,OAKA,IAAAC,uBAAA,MAEA,SAAAC,WAAAC,MACA,IAAA9H,QAAA,GAEA,QAAA+H,OAAArB,eACA,CAAA1G,QAAA+H,KAAAD,MAAAtC,OAAAsC,KAAAC,KAAAD,KAAAC,KAAArB,eAAAqB,IAAA,CAEA,GAAA/H,QAAA2G,cAAA,UACA3G,QAAA2G,YAAA,GACA,SAAA3G,QAAA2G,aAAA,MACA,IAAAiB,+BAAAI,UAAA,UAAAA,QAAAC,KAAA,CACAL,uBAAA,KACAI,QAAAC,KAAA,qHACA,CACAjI,QAAA2G,YAAA,EACA,SAAA3G,QAAA2G,aAAA,MACA3G,QAAA2G,aAAA,IACA,CAEA,GAAA3G,QAAA+G,eAAA,KACA,CAAA/G,QAAA+G,cAAA/G,QAAA2G,YAAA,EAEA,IAAAmB,WAAAV,eAAA,KACA,CAAApH,QAAAoH,cAAApH,QAAA2G,aAAA,GAEA,GAAA1N,QAAA+G,QAAAsH,SAAA,CACA,IAAAY,OAAAlI,QAAAsH,QACAtH,QAAAsH,QAAA,SAAAa,OAAA,OAAAD,OAAAE,KAAAD,MAAA,CACA,CACA,GAAAlP,QAAA+G,QAAAuH,WACA,CAAAvH,QAAAuH,UAAAc,YAAArI,gBAAAuH,UAAA,CAEA,OAAAvH,OACA,CAEA,SAAAqI,YAAArI,QAAAsI,OACA,gBAAAC,MAAAC,KAAAnC,MAAApB,IAAAwD,SAAAC,QACA,IAAAC,QAAA,CACAC,KAAAL,MAAA,eACA7N,MAAA8N,KACAnC,YACApB,SAEA,GAAAjF,QAAAqH,UACA,CAAAsB,QAAAE,IAAA,IAAAzC,eAAAxI,KAAA6K,SAAAC,OAAA,CACA,GAAA1I,QAAAwH,OACA,CAAAmB,QAAAG,MAAA,CAAAzC,MAAApB,IAAA,CACAqD,MAAAF,KAAAO,QACA,CACA,CAGA,IACAI,UAAA,EACAC,eAAA,EACAC,YAAA,EACAC,gBAAA,EACAC,YAAA,GACAC,mBAAA,GACAC,YAAA,GACAC,mBAAA,IACAC,yBAAA,IACAC,UAAAT,UAAAC,eAAAO,yBAEA,SAAAE,cAAAC,MAAAC,WACA,OAAAX,gBAAAU,MAAAT,YAAA,IAAAU,UAAAT,gBAAA,EACA,CAGA,IACAU,UAAA,EACAC,SAAA,EACAC,aAAA,EACAC,cAAA,EACAC,kBAAA,EACAC,aAAA,EAEA,IAAAC,OAAA,SAAAA,OAAAlK,QAAA3D,MAAA8N,UACAvM,KAAAoC,gBAAA6H,WAAA7H,SACApC,KAAA0I,WAAAtG,QAAAsG,WACA1I,KAAAkC,SAAA4F,YAAArH,WAAA2B,QAAA2G,aAAA,IAAA3G,QAAA4G,aAAA,uBACA,IAAAwD,SAAA,GACA,GAAApK,QAAA+G,gBAAA,MACAqD,SAAAnM,cAAA+B,QAAA2G,aAAA,IAAA3G,QAAA2G,cAAA,OACA,GAAA3G,QAAA4G,aAAA,UAAAwD,UAAA,SACA,CACAxM,KAAAK,cAAAyH,YAAA0E,UACA,IAAAC,gBAAAD,kBAAA,QAAAnM,cAAAC,OACAN,KAAA0M,oBAAA5E,YAAA2E,gBACAzM,KAAA2M,wBAAA7E,YAAA2E,eAAA,IAAApM,cAAAE,YACAP,KAAAvB,MAAAM,OAAAN,OAKAuB,KAAA4M,YAAA,MAKA,GAAAL,SAAA,CACAvM,KAAAgB,IAAAuL,SACAvM,KAAA6M,UAAA7M,KAAAvB,MAAAqO,YAAA,KAAAP,SAAA,KACAvM,KAAA+M,QAAA/M,KAAAvB,MAAAc,MAAA,EAAAS,KAAA6M,WAAAG,MAAAhG,WAAA7M,MACA,MACA6F,KAAAgB,IAAAhB,KAAA6M,UAAA,EACA7M,KAAA+M,QAAA,CACA,CAIA/M,KAAAgL,KAAA3I,QAAAK,IAEA1C,KAAAlD,MAAA,KAEAkD,KAAAyI,MAAAzI,KAAAqH,IAAArH,KAAAgB,IAGAhB,KAAA6K,SAAA7K,KAAA8K,OAAA9K,KAAAiN,cAGAjN,KAAAkN,cAAAlN,KAAAmN,gBAAA,KACAnN,KAAAoN,aAAApN,KAAAqN,WAAArN,KAAAgB,IAKAhB,KAAAsN,QAAAtN,KAAAuN,iBACAvN,KAAAwN,YAAA,KAGAxN,KAAAyN,SAAArL,QAAA4G,aAAA,SACAhJ,KAAAM,OAAAN,KAAAyN,UAAAzN,KAAA0N,gBAAA1N,KAAAgB,KAGAhB,KAAA2N,kBAAA,EACA3N,KAAA4N,yBAAA,MAGA5N,KAAA6N,SAAA7N,KAAA8N,SAAA9N,KAAA+N,cAAA,EAEA/N,KAAAgO,OAAA,GAEAhO,KAAAiO,iBAAA5R,OAAAkB,OAAA,MAGA,GAAAyC,KAAAgB,MAAA,GAAAoB,QAAAoH,eAAAxJ,KAAAvB,MAAAc,MAAA,YACA,CAAAS,KAAAkO,gBAAA,GAGAlO,KAAAmO,WAAA,GACAnO,KAAAoO,WAAAjD,WAGAnL,KAAAqO,YAAA,KAKArO,KAAAsO,iBAAA,EACA,EAEA,IAAAC,mBAAA,CAAAC,WAAA,CAAArS,aAAA,MAAAsS,YAAA,CAAAtS,aAAA,MAAAuS,QAAA,CAAAvS,aAAA,MAAAwS,SAAA,CAAAxS,aAAA,MAAAyS,WAAA,CAAAzS,aAAA,MAAA0S,iBAAA,CAAA1S,aAAA,MAAA2S,oBAAA,CAAA3S,aAAA,MAAA4S,kBAAA,CAAA5S,aAAA,MAAA6S,mBAAA,CAAA7S,aAAA,OAEAmQ,OAAA3P,UAAAsS,MAAA,SAAAA,QACA,IAAAC,KAAAlP,KAAAoC,QAAAyH,SAAA7J,KAAAmP,YACAnP,KAAAoP,YACA,OAAApP,KAAAqP,cAAAH,KACA,EAEAX,mBAAAC,WAAAc,IAAA,kBAAAtP,KAAAuP,kBAAAC,MAAApE,gBAAA,GAEAmD,mBAAAE,YAAAa,IAAA,kBAAAtP,KAAAuP,kBAAAC,MAAAlE,iBAAA,IAAAtL,KAAAuP,kBAAAE,gBAAA,EAEAlB,mBAAAG,QAAAY,IAAA,kBAAAtP,KAAAuP,kBAAAC,MAAAnE,aAAA,IAAArL,KAAAuP,kBAAAE,gBAAA,EAEAlB,mBAAAI,SAAAW,IAAA,WACA,QAAA9V,EAAAwG,KAAAmO,WAAAhU,OAAA,EAAAX,GAAA,EAAAA,IAAA,CACA,IAAAkW,MAAA1P,KAAAmO,WAAA3U,GACA,GAAAkW,MAAAD,kBAAAC,MAAAF,MAAA7D,yBAAA,cACA,GAAA+D,MAAAF,MAAApE,eAAA,QAAAsE,MAAAF,MAAAnE,aAAA,EACA,CACA,OAAArL,KAAAyN,UAAAzN,KAAAoC,QAAA2G,aAAA,IAAA/I,KAAAoC,QAAAkH,yBACA,EAEAiF,mBAAAK,WAAAU,IAAA,WACA,IAAA5H,IAAA1H,KAAA2P,mBACA,IAAAH,MAAA9H,IAAA8H,MACA,IAAAC,iBAAA/H,IAAA+H,iBACA,OAAAD,MAAA/D,aAAA,GAAAgE,kBAAAzP,KAAAoC,QAAAmH,uBACA,EAEAgF,mBAAAM,iBAAAS,IAAA,kBAAAtP,KAAA2P,mBAAAH,MAAA9D,oBAAA,GAEA6C,mBAAAO,oBAAAQ,IAAA,kBAAAtP,KAAA4P,2BAAA5P,KAAA6P,eAAA,EAEAtB,mBAAAQ,kBAAAO,IAAA,WACA,IAAA5H,IAAA1H,KAAA2P,mBACA,IAAAH,MAAA9H,IAAA8H,MACA,IAAAC,iBAAA/H,IAAA+H,iBACA,OAAAD,OAAApE,eAAAO,2BAAA,GAAA8D,gBACA,EAEAlB,mBAAAS,mBAAAM,IAAA,WACA,OAAAtP,KAAAuP,kBAAAC,MAAA7D,0BAAA,CACA,EAEAW,OAAAwD,OAAA,SAAAA,SACA,IAAAC,QAAA,GAAA/U,IAAAgV,UAAA7V,OACA,MAAAa,MAAA+U,QAAA/U,KAAAgV,UAAAhV,KAEA,IAAAiV,IAAAjQ,KACA,QAAAxG,EAAA,EAAAA,EAAAuW,QAAA5V,OAAAX,IAAA,CAAAyW,IAAAF,QAAAvW,GAAAyW,IAAA,CACA,OAAAA,GACA,EAEA3D,OAAA2C,MAAA,SAAAA,MAAAxQ,MAAA2D,SACA,WAAApC,KAAAoC,QAAA3D,OAAAwQ,OACA,EAEA3C,OAAA4D,kBAAA,SAAAA,kBAAAzR,MAAAuC,IAAAoB,SACA,IAAA+N,OAAA,IAAAnQ,KAAAoC,QAAA3D,MAAAuC,KACAmP,OAAAf,YACA,OAAAe,OAAAC,iBACA,EAEA9D,OAAA+D,UAAA,SAAAA,UAAA5R,MAAA2D,SACA,WAAApC,KAAAoC,QAAA3D,MACA,EAEApC,OAAAiU,iBAAAhE,OAAA3P,UAAA4R,oBAEA,IAAAgC,KAAAjE,OAAA3P,UAIA,IAAA6T,QAAA,iDACAD,KAAA7C,gBAAA,SAAAjF,OACA,GAAAzI,KAAAoC,QAAA2G,YAAA,gBACA,QAEAtB,eAAAgJ,UAAAhI,MACAA,OAAAhB,eAAAiJ,KAAA1Q,KAAAvB,OAAA,GAAAtE,OACA,IAAAwW,MAAAH,QAAAE,KAAA1Q,KAAAvB,MAAAc,MAAAkJ,QACA,IAAAkI,MAAA,cACA,IAAAA,MAAA,IAAAA,MAAA,oBACAlJ,eAAAgJ,UAAAhI,MAAAkI,MAAA,GAAAxW,OACA,IAAAyW,WAAAnJ,eAAAiJ,KAAA1Q,KAAAvB,OAAA4I,IAAAuJ,WAAAC,MAAAD,WAAA,GAAAzW,OACA,IAAAmN,KAAAtH,KAAAvB,MAAAqS,OAAAzJ,KACA,OAAAC,OAAA,KAAAA,OAAA,KACAN,UAAAvH,KAAAmR,WAAA,OACA,sBAAAnR,KAAA6H,cAAA,KAAAtH,KAAAvB,MAAAqS,OAAAzJ,IAAA,SACA,CACAoB,OAAAkI,MAAA,GAAAxW,OAGAsN,eAAAgJ,UAAAhI,MACAA,OAAAhB,eAAAiJ,KAAA1Q,KAAAvB,OAAA,GAAAtE,OACA,GAAA6F,KAAAvB,MAAAgK,SAAA,IACA,CAAAA,OAAA,CACA,CACA,EAKA8H,KAAAQ,IAAA,SAAA/F,MACA,GAAAhL,KAAAgL,YAAA,CACAhL,KAAAsH,OACA,WACA,MACA,YACA,CACA,EAIAiJ,KAAAS,aAAA,SAAAxR,MACA,OAAAQ,KAAAgL,OAAA3I,QAAA7C,MAAAQ,KAAAlD,QAAA0C,OAAAQ,KAAA4M,WACA,EAIA2D,KAAAU,cAAA,SAAAzR,MACA,IAAAQ,KAAAgR,aAAAxR,MAAA,cACAQ,KAAAsH,OACA,WACA,EAIAiJ,KAAAW,iBAAA,SAAA1R,MACA,IAAAQ,KAAAiR,cAAAzR,MAAA,CAAAQ,KAAAmR,YAAA,CACA,EAIAZ,KAAAa,mBAAA,WACA,OAAApR,KAAAgL,OAAA3I,QAAAK,KACA1C,KAAAgL,OAAA3I,QAAAS,QACAkE,UAAAvH,KAAAO,KAAAvB,MAAAc,MAAAS,KAAAqN,WAAArN,KAAAyI,OACA,EAEA8H,KAAAc,gBAAA,WACA,GAAArR,KAAAoR,qBAAA,CACA,GAAApR,KAAAoC,QAAA6G,oBACA,CAAAjJ,KAAAoC,QAAA6G,oBAAAjJ,KAAAqN,WAAArN,KAAAkN,cAAA,CACA,WACA,CACA,EAKAqD,KAAAe,UAAA,WACA,IAAAtR,KAAA+Q,IAAA1O,QAAAa,QAAAlD,KAAAqR,kBAAA,CAAArR,KAAAmR,YAAA,CACA,EAEAZ,KAAAgB,mBAAA,SAAAC,QAAAC,SACA,GAAAzR,KAAAgL,OAAAwG,QAAA,CACA,GAAAxR,KAAAoC,QAAA8G,gBACA,CAAAlJ,KAAAoC,QAAA8G,gBAAAlJ,KAAAoN,aAAApN,KAAAmN,gBAAA,CACA,IAAAsE,QACA,CAAAzR,KAAAsH,MAAA,CACA,WACA,CACA,EAKAiJ,KAAAmB,OAAA,SAAA1G,MACAhL,KAAA+Q,IAAA/F,OAAAhL,KAAAmR,YACA,EAIAZ,KAAAY,WAAA,SAAAnQ,KACAhB,KAAA2R,MAAA3Q,KAAA,KAAAA,IAAAhB,KAAAyI,MAAA,mBACA,EAEA,IAAAmJ,oBAAA,SAAAA,sBACA5R,KAAA6R,gBACA7R,KAAA8R,cACA9R,KAAA+R,oBACA/R,KAAAgS,kBACAhS,KAAAiS,aACA,CACA,EAEA1B,KAAA2B,mBAAA,SAAAC,uBAAAvQ,UACA,IAAAuQ,uBAAA,QACA,GAAAA,uBAAAL,eAAA,EACA,CAAA9R,KAAAoS,iBAAAD,uBAAAL,cAAA,iDACA,IAAAO,OAAAzQ,SAAAuQ,uBAAAJ,oBAAAI,uBAAAH,kBACA,GAAAK,QAAA,GAAArS,KAAAoS,iBAAAC,OAAAzQ,SAAA,+CACA,EAEA2O,KAAA+B,sBAAA,SAAAH,uBAAAI,UACA,IAAAJ,uBAAA,cACA,IAAAN,gBAAAM,uBAAAN,gBACA,IAAAI,YAAAE,uBAAAF,YACA,IAAAM,SAAA,QAAAV,iBAAA,GAAAI,aAAA,EACA,GAAAJ,iBAAA,EACA,CAAA7R,KAAA2R,MAAAE,gBAAA,2EACA,GAAAI,aAAA,EACA,CAAAjS,KAAAoS,iBAAAH,YAAA,sCACA,EAEA1B,KAAAiC,+BAAA,WACA,GAAAxS,KAAA6N,YAAA7N,KAAA8N,UAAA9N,KAAA6N,SAAA7N,KAAA8N,UACA,CAAA9N,KAAA2R,MAAA3R,KAAA6N,SAAA,8CACA,GAAA7N,KAAA8N,SACA,CAAA9N,KAAA2R,MAAA3R,KAAA8N,SAAA,8CACA,EAEAyC,KAAAkC,qBAAA,SAAAC,MACA,GAAAA,KAAA1H,OAAA,0BACA,QAAAhL,KAAAyS,qBAAAC,KAAAC,WAAA,CACA,OAAAD,KAAA1H,OAAA,cAAA0H,KAAA1H,OAAA,kBACA,EAEA,IAAA4H,KAAAtG,OAAA3P,UASAiW,KAAAvD,cAAA,SAAAH,MACA,IAAAjV,QAAAoC,OAAAkB,OAAA,MACA,IAAA2R,KAAA2D,KAAA,CAAA3D,KAAA2D,KAAA,GACA,MAAA7S,KAAAgL,OAAA3I,QAAAK,IAAA,CACA,IAAAoQ,KAAA9S,KAAA+S,eAAA,UAAA9Y,SACAiV,KAAA2D,KAAArI,KAAAsI,KACA,CACA,GAAA9S,KAAAyN,SACA,SAAAjU,EAAA,EAAAwZ,KAAA3W,OAAA4W,KAAAjT,KAAAiO,kBAAAzU,EAAAwZ,KAAA7Y,OAAAX,GAAA,EACA,CACA,IAAAgG,KAAAwT,KAAAxZ,GAEAwG,KAAAoS,iBAAApS,KAAAiO,iBAAAzO,MAAAiJ,MAAA,WAAAjJ,KAAA,mBACA,EACAQ,KAAAkT,uBAAAhE,KAAA2D,MACA7S,KAAAsH,OACA4H,KAAAlG,WAAAhJ,KAAAoC,QAAA4G,WACA,OAAAhJ,KAAAmT,WAAAjE,KAAA,UACA,EAEA,IAAAkE,UAAA,CAAAC,KAAA,QAAAC,YAAA,CAAAD,KAAA,UAEAT,KAAAW,MAAA,SAAAjG,SACA,GAAAtN,KAAAoC,QAAA2G,YAAA,IAAA/I,KAAAgR,aAAA,qBACAvJ,eAAAgJ,UAAAzQ,KAAAgB,IACA,IAAAwS,KAAA/L,eAAAiJ,KAAA1Q,KAAAvB,OACA,IAAA6I,KAAAtH,KAAAgB,IAAAwS,KAAA,GAAArZ,OAAAsZ,OAAAzT,KAAAvB,MAAA8I,WAAAD,MAKA,GAAAmM,SAAA,IAAAA,SAAA,gBACA,GAAAnG,QAAA,cAEA,GAAAmG,SAAA,KAAAA,OAAA,OAAAA,OAAA,mBACA,GAAAxS,kBAAAwS,OAAA,OACA,IAAAzS,IAAAsG,KAAA,EACA,MAAAlG,iBAAAqS,OAAAzT,KAAAvB,MAAA8I,WAAAvG,KAAA,SAAAA,GAAA,CACA,GAAAyS,SAAA,IAAAA,OAAA,OAAAA,OAAA,mBACA,IAAAC,MAAA1T,KAAAvB,MAAAc,MAAA+H,KAAAtG,KACA,IAAAN,0BAAAjB,KAAAiU,OAAA,aACA,CACA,YACA,EAKAd,KAAAe,gBAAA,WACA,GAAA3T,KAAAoC,QAAA2G,YAAA,IAAA/I,KAAAgR,aAAA,SACA,cAEAvJ,eAAAgJ,UAAAzQ,KAAAgB,IACA,IAAAwS,KAAA/L,eAAAiJ,KAAA1Q,KAAAvB,OACA,IAAA6I,KAAAtH,KAAAgB,IAAAwS,KAAA,GAAArZ,OAAAyZ,MACA,OAAA5M,UAAAvH,KAAAO,KAAAvB,MAAAc,MAAAS,KAAAgB,IAAAsG,QACAtH,KAAAvB,MAAAc,MAAA+H,UAAA,kBACAA,KAAA,IAAAtH,KAAAvB,MAAAtE,UACAiH,iBAAAwS,MAAA5T,KAAAvB,MAAA8I,WAAAD,KAAA,KAAAsM,MAAA,OAAAA,MAAA,OACA,EASAhB,KAAAG,eAAA,SAAAzF,QAAAuG,SAAA5Z,SACA,IAAA6Z,UAAA9T,KAAAgL,KAAAkE,KAAAlP,KAAAmP,YAAAkE,KAEA,GAAArT,KAAAuT,MAAAjG,SAAA,CACAwG,UAAAzR,QAAAyD,KACAuN,KAAA,KACA,CAMA,OAAAS,WACA,KAAAzR,QAAAyC,OAAA,KAAAzC,QAAA4C,UAAA,OAAAjF,KAAA+T,4BAAA7E,KAAA4E,UAAAtS,SACA,KAAAa,QAAA6C,UAAA,OAAAlF,KAAAgU,uBAAA9E,MACA,KAAA7M,QAAA+C,IAAA,OAAApF,KAAAiU,iBAAA/E,MACA,KAAA7M,QAAAkD,KAAA,OAAAvF,KAAAkU,kBAAAhF,MACA,KAAA7M,QAAAmD,UAIA,GAAA8H,UAAAtN,KAAAM,QAAAgN,UAAA,MAAAA,UAAA,UAAAtN,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAAmR,YAAA,CACA,OAAAnR,KAAAmU,uBAAAjF,KAAA,OAAA5B,SACA,KAAAjL,QAAAgE,OACA,GAAAiH,QAAA,CAAAtN,KAAAmR,YAAA,CACA,OAAAnR,KAAAoU,WAAAlF,KAAA,MACA,KAAA7M,QAAAoD,IAAA,OAAAzF,KAAAqU,iBAAAnF,MACA,KAAA7M,QAAAqD,QAAA,OAAA1F,KAAAsU,qBAAApF,MACA,KAAA7M,QAAAsD,QAAA,OAAA3F,KAAAuU,qBAAArF,MACA,KAAA7M,QAAAuD,OAAA,OAAA5F,KAAAwU,oBAAAtF,MACA,KAAA7M,QAAAwD,KAAA,OAAA7F,KAAAyU,kBAAAvF,MACA,KAAA7M,QAAA0D,OAAA,KAAA1D,QAAAyD,KACAuN,WAAArT,KAAAlD,MACA,GAAAwQ,SAAA+F,OAAA,OAAArT,KAAAmR,YAAA,CACA,OAAAnR,KAAA0U,kBAAAxF,KAAAmE,MACA,KAAAhR,QAAA2D,OAAA,OAAAhG,KAAA2U,oBAAAzF,MACA,KAAA7M,QAAA4D,MAAA,OAAAjG,KAAA4U,mBAAA1F,MACA,KAAA7M,QAAAQ,OAAA,OAAA7C,KAAA6U,WAAA,KAAA3F,MACA,KAAA7M,QAAAa,KAAA,OAAAlD,KAAA8U,oBAAA5F,MACA,KAAA7M,QAAAkE,QACA,KAAAlE,QAAAmE,QACA,GAAAxG,KAAAoC,QAAA2G,YAAA,IAAA+K,YAAAzR,QAAAmE,QAAA,CACAiB,eAAAgJ,UAAAzQ,KAAAgB,IACA,IAAAwS,KAAA/L,eAAAiJ,KAAA1Q,KAAAvB,OACA,IAAA6I,KAAAtH,KAAAgB,IAAAwS,KAAA,GAAArZ,OAAAsZ,OAAAzT,KAAAvB,MAAA8I,WAAAD,MACA,GAAAmM,SAAA,IAAAA,SAAA,GACA,QAAAzT,KAAA+U,yBAAA7F,KAAAlP,KAAAoQ,kBAAA,CACA,CAEA,IAAApQ,KAAAoC,QAAAiH,4BAAA,CACA,IAAAwK,SACA,CAAA7T,KAAA2R,MAAA3R,KAAAyI,MAAA,0DACA,IAAAzI,KAAAyN,SACA,CAAAzN,KAAA2R,MAAA3R,KAAAyI,MAAA,mEACA,CACA,OAAAqL,YAAAzR,QAAAmE,QAAAxG,KAAAgV,YAAA9F,MAAAlP,KAAAiV,YAAA/F,KAAAjV,SAOA,QACA,GAAA+F,KAAA2T,kBAAA,CACA,GAAArG,QAAA,CAAAtN,KAAAmR,YAAA,CACAnR,KAAAsH,OACA,OAAAtH,KAAAmU,uBAAAjF,KAAA,MAAA5B,QACA,CAEA,IAAA4H,UAAAlV,KAAAlD,MAAA4V,KAAA1S,KAAAoQ,kBACA,GAAA0D,YAAAzR,QAAA7C,MAAAkT,KAAA1H,OAAA,cAAAhL,KAAA+Q,IAAA1O,QAAAc,OACA,QAAAnD,KAAAmV,sBAAAjG,KAAAgG,UAAAxC,KAAApF,QAAA,KACA,QAAAtN,KAAA+U,yBAAA7F,KAAAwD,KAAA,EAEA,EAEAE,KAAAmB,4BAAA,SAAA7E,KAAA1N,SACA,IAAA4T,QAAA5T,UAAA,QACAxB,KAAAsH,OACA,GAAAtH,KAAA+Q,IAAA1O,QAAAa,OAAAlD,KAAAqR,kBAAA,CAAAnC,KAAA5N,MAAA,UACA,GAAAtB,KAAAgL,OAAA3I,QAAA7C,KAAA,CAAAQ,KAAAmR,YAAA,KACA,CACAjC,KAAA5N,MAAAtB,KAAAqV,aACArV,KAAAsR,WACA,CAIA,IAAA9X,EAAA,EACA,KAAAA,EAAAwG,KAAAgO,OAAA7T,SAAAX,EAAA,CACA,IAAA8b,IAAAtV,KAAAgO,OAAAxU,GACA,GAAA0V,KAAA5N,OAAA,MAAAgU,IAAA9V,OAAA0P,KAAA5N,MAAA9B,KAAA,CACA,GAAA8V,IAAAjC,MAAA,OAAA+B,SAAAE,IAAAjC,OAAA,eACA,GAAAnE,KAAA5N,OAAA8T,QAAA,OACA,CACA,CACA,GAAA5b,IAAAwG,KAAAgO,OAAA7T,OAAA,CAAA6F,KAAA2R,MAAAzC,KAAAzG,MAAA,eAAAjH,QAAA,CACA,OAAAxB,KAAAmT,WAAAjE,KAAAkG,QAAA,qCACA,EAEAxC,KAAAoB,uBAAA,SAAA9E,MACAlP,KAAAsH,OACAtH,KAAAsR,YACA,OAAAtR,KAAAmT,WAAAjE,KAAA,oBACA,EAEA0D,KAAAqB,iBAAA,SAAA/E,MACAlP,KAAAsH,OACAtH,KAAAgO,OAAAxD,KAAA4I,WACAlE,KAAA2D,KAAA7S,KAAA+S,eAAA,MACA/S,KAAAgO,OAAAuH,MACAvV,KAAA0R,OAAArP,QAAA2D,QACAkJ,KAAAzP,KAAAO,KAAAwV,uBACA,GAAAxV,KAAAoC,QAAA2G,aAAA,EACA,CAAA/I,KAAA+Q,IAAA1O,QAAAa,KAAA,KAEA,CAAAlD,KAAAsR,WAAA,CACA,OAAAtR,KAAAmT,WAAAjE,KAAA,mBACA,EAUA0D,KAAAsB,kBAAA,SAAAhF,MACAlP,KAAAsH,OACA,IAAAmO,QAAAzV,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAA2O,UAAA3O,KAAAiR,cAAA,SAAAjR,KAAAoN,cAAA,EACApN,KAAAgO,OAAAxD,KAAA4I,WACApT,KAAAoO,WAAA,GACApO,KAAA0R,OAAArP,QAAAU,QACA,GAAA/C,KAAAgL,OAAA3I,QAAAa,KAAA,CACA,GAAAuS,SAAA,GAAAzV,KAAAmR,WAAAsE,QAAA,CACA,OAAAzV,KAAA0V,SAAAxG,KAAA,KACA,CACA,IAAAqE,MAAAvT,KAAAuT,QACA,GAAAvT,KAAAgL,OAAA3I,QAAAyD,MAAA9F,KAAAgL,OAAA3I,QAAA0D,QAAAwN,MAAA,CACA,IAAAoC,OAAA3V,KAAAmP,YAAAkE,KAAAE,MAAA,MAAAvT,KAAAlD,MACAkD,KAAAsH,OACAtH,KAAA4V,SAAAD,OAAA,KAAAtC,MACArT,KAAAmT,WAAAwC,OAAA,uBACA,IAAA3V,KAAAgL,OAAA3I,QAAAuE,KAAA5G,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAAgR,aAAA,QAAA2E,OAAAE,aAAA1b,SAAA,GACA,GAAA6F,KAAAoC,QAAA2G,aAAA,GACA,GAAA/I,KAAAgL,OAAA3I,QAAAuE,IAAA,CACA,GAAA6O,SAAA,GAAAzV,KAAAmR,WAAAsE,QAAA,CACA,MAAAvG,KAAA4G,MAAAL,SAAA,EACA,CACA,OAAAzV,KAAA+V,WAAA7G,KAAAyG,OACA,CACA,GAAAF,SAAA,GAAAzV,KAAAmR,WAAAsE,QAAA,CACA,OAAAzV,KAAA0V,SAAAxG,KAAAyG,OACA,CACA,IAAAK,cAAAhW,KAAAgR,aAAA,OAAAiF,QAAA,MACA,IAAA9D,uBAAA,IAAAP,oBACA,IAAAsE,KAAAlW,KAAAoQ,gBAAAqF,SAAA,eAAAtD,wBACA,GAAAnS,KAAAgL,OAAA3I,QAAAuE,MAAAqP,QAAAjW,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAAgR,aAAA,QACA,GAAAhR,KAAAoC,QAAA2G,aAAA,GACA,GAAA/I,KAAAgL,OAAA3I,QAAAuE,IAAA,CACA,GAAA6O,SAAA,GAAAzV,KAAAmR,WAAAsE,QAAA,CACA,MAAAvG,KAAA4G,MAAAL,SAAA,EACA,CACA,GAAAO,eAAAC,QAAA,CAAAjW,KAAA2R,MAAAuE,KAAAzN,MAAA,iEACAzI,KAAAmW,aAAAD,KAAA,MAAA/D,wBACAnS,KAAAoW,iBAAAF,MACA,OAAAlW,KAAA+V,WAAA7G,KAAAgH,KACA,MACAlW,KAAAsS,sBAAAH,uBAAA,KACA,CACA,GAAAsD,SAAA,GAAAzV,KAAAmR,WAAAsE,QAAA,CACA,OAAAzV,KAAA0V,SAAAxG,KAAAgH,KACA,EAEAtD,KAAAuB,uBAAA,SAAAjF,KAAAmH,QAAAC,qBACAtW,KAAAsH,OACA,OAAAtH,KAAAuW,cAAArH,KAAAsH,gBAAAF,oBAAA,EAAAG,wBAAA,MAAAJ,QACA,EAEAzD,KAAAyB,iBAAA,SAAAnF,MACAlP,KAAAsH,OACA4H,KAAAzP,KAAAO,KAAAwV,uBAEAtG,KAAAwH,WAAA1W,KAAA+S,eAAA,MACA7D,KAAAyH,UAAA3W,KAAA+Q,IAAA1O,QAAAgD,OAAArF,KAAA+S,eAAA,WACA,OAAA/S,KAAAmT,WAAAjE,KAAA,cACA,EAEA0D,KAAA0B,qBAAA,SAAApF,MACA,IAAAlP,KAAAwO,aAAAxO,KAAAoC,QAAAgH,2BACA,CAAApJ,KAAA2R,MAAA3R,KAAAyI,MAAA,gCACAzI,KAAAsH,OAMA,GAAAtH,KAAA+Q,IAAA1O,QAAAa,OAAAlD,KAAAqR,kBAAA,CAAAnC,KAAA0H,SAAA,SACA,CAAA1H,KAAA0H,SAAA5W,KAAAoQ,kBAAApQ,KAAAsR,WAAA,CACA,OAAAtR,KAAAmT,WAAAjE,KAAA,kBACA,EAEA0D,KAAA2B,qBAAA,SAAArF,MACAlP,KAAAsH,OACA4H,KAAA2H,aAAA7W,KAAAwV,uBACAtG,KAAA4H,MAAA,GACA9W,KAAA0R,OAAArP,QAAAQ,QACA7C,KAAAgO,OAAAxD,KAAA8I,aACAtT,KAAAoO,WAAA,GAMA,IAAAxF,IACA,QAAAmO,WAAA,MAAA/W,KAAAgL,OAAA3I,QAAAS,QAAA,CACA,GAAA9C,KAAAgL,OAAA3I,QAAA0C,OAAA/E,KAAAgL,OAAA3I,QAAA8C,SAAA,CACA,IAAA6R,OAAAhX,KAAAgL,OAAA3I,QAAA0C,MACA,GAAA6D,IAAA,CAAA5I,KAAAmT,WAAAvK,IAAA,cACAsG,KAAA4H,MAAAtM,KAAA5B,IAAA5I,KAAAmP,aACAvG,IAAA8N,WAAA,GACA1W,KAAAsH,OACA,GAAA0P,OAAA,CACApO,IAAAnJ,KAAAO,KAAAoQ,iBACA,MACA,GAAA2G,WAAA,CAAA/W,KAAAoS,iBAAApS,KAAAoN,aAAA,4BACA2J,WAAA,KACAnO,IAAAnJ,KAAA,IACA,CACAO,KAAA0R,OAAArP,QAAAc,MACA,MACA,IAAAyF,IAAA,CAAA5I,KAAAmR,YAAA,CACAvI,IAAA8N,WAAAlM,KAAAxK,KAAA+S,eAAA,MACA,CACA,CACA/S,KAAAiX,YACA,GAAArO,IAAA,CAAA5I,KAAAmT,WAAAvK,IAAA,cACA5I,KAAAsH,OACAtH,KAAAgO,OAAAuH,MACA,OAAAvV,KAAAmT,WAAAjE,KAAA,kBACA,EAEA0D,KAAA4B,oBAAA,SAAAtF,MACAlP,KAAAsH,OACA,GAAAN,UAAAvH,KAAAO,KAAAvB,MAAAc,MAAAS,KAAAqN,WAAArN,KAAAyI,QACA,CAAAzI,KAAA2R,MAAA3R,KAAAqN,WAAA,+BACA6B,KAAA0H,SAAA5W,KAAAoQ,kBACApQ,KAAAsR,YACA,OAAAtR,KAAAmT,WAAAjE,KAAA,iBACA,EAIA,IAAAgI,QAAA,GAEAtE,KAAAuE,sBAAA,WACA,IAAAC,MAAApX,KAAAqX,mBACA,IAAAC,OAAAF,MAAApM,OAAA,aACAhL,KAAAoO,WAAAkJ,OAAA9L,mBAAA,GACAxL,KAAAoW,iBAAAgB,MAAAE,OAAAlL,kBAAAF,cACAlM,KAAA0R,OAAArP,QAAAW,QAEA,OAAAoU,KACA,EAEAxE,KAAA6B,kBAAA,SAAAvF,MACAlP,KAAAsH,OACA4H,KAAAvE,MAAA3K,KAAA6U,aACA3F,KAAAqI,QAAA,KACA,GAAAvX,KAAAgL,OAAA3I,QAAA2C,OAAA,CACA,IAAAwS,OAAAxX,KAAAmP,YACAnP,KAAAsH,OACA,GAAAtH,KAAA+Q,IAAA1O,QAAAU,QAAA,CACAyU,OAAAJ,MAAApX,KAAAmX,uBACA,MACA,GAAAnX,KAAAoC,QAAA2G,YAAA,IAAA/I,KAAAmR,YAAA,CACAqG,OAAAJ,MAAA,KACApX,KAAAoO,WAAA,EACA,CACAoJ,OAAA3E,KAAA7S,KAAA6U,WAAA,OACA7U,KAAAiX,YACA/H,KAAAqI,QAAAvX,KAAAmT,WAAAqE,OAAA,cACA,CACAtI,KAAAuI,UAAAzX,KAAA+Q,IAAA1O,QAAAiD,UAAAtF,KAAA6U,aAAA,KACA,IAAA3F,KAAAqI,UAAArI,KAAAuI,UACA,CAAAzX,KAAA2R,MAAAzC,KAAAzG,MAAA,mCACA,OAAAzI,KAAAmT,WAAAjE,KAAA,eACA,EAEA0D,KAAA8B,kBAAA,SAAAxF,KAAAmE,KAAAqE,yBACA1X,KAAAsH,OACAtH,KAAA4V,SAAA1G,KAAA,MAAAmE,KAAAqE,yBACA1X,KAAAsR,YACA,OAAAtR,KAAAmT,WAAAjE,KAAA,sBACA,EAEA0D,KAAA+B,oBAAA,SAAAzF,MACAlP,KAAAsH,OACA4H,KAAAzP,KAAAO,KAAAwV,uBACAxV,KAAAgO,OAAAxD,KAAA4I,WACAlE,KAAA2D,KAAA7S,KAAA+S,eAAA,SACA/S,KAAAgO,OAAAuH,MACA,OAAAvV,KAAAmT,WAAAjE,KAAA,iBACA,EAEA0D,KAAAgC,mBAAA,SAAA1F,MACA,GAAAlP,KAAAM,OAAA,CAAAN,KAAA2R,MAAA3R,KAAAyI,MAAA,yBACAzI,KAAAsH,OACA4H,KAAAyI,OAAA3X,KAAAwV,uBACAtG,KAAA2D,KAAA7S,KAAA+S,eAAA,QACA,OAAA/S,KAAAmT,WAAAjE,KAAA,gBACA,EAEA0D,KAAAkC,oBAAA,SAAA5F,MACAlP,KAAAsH,OACA,OAAAtH,KAAAmT,WAAAjE,KAAA,iBACA,EAEA0D,KAAAuC,sBAAA,SAAAjG,KAAAgG,UAAAxC,KAAApF,SACA,QAAAsK,IAAA,EAAA5E,KAAAhT,KAAAgO,OAAA4J,IAAA5E,KAAA7Y,OAAAyd,KAAA,EACA,CACA,IAAAtW,MAAA0R,KAAA4E,KAEA,GAAAtW,MAAA9B,OAAA0V,UACA,CAAAlV,KAAA2R,MAAAe,KAAAjK,MAAA,UAAAyM,UAAA,wBACA,EACA,IAAA7B,KAAArT,KAAAgL,KAAArJ,OAAA,OAAA3B,KAAAgL,OAAA3I,QAAAsD,QAAA,cACA,QAAAnM,EAAAwG,KAAAgO,OAAA7T,OAAA,EAAAX,GAAA,EAAAA,IAAA,CACA,IAAAqe,QAAA7X,KAAAgO,OAAAxU,GACA,GAAAqe,QAAAC,iBAAA5I,KAAAzG,MAAA,CAEAoP,QAAAC,eAAA9X,KAAAyI,MACAoP,QAAAxE,SACA,YACA,CACArT,KAAAgO,OAAAxD,KAAA,CAAAhL,KAAA0V,UAAA7B,UAAAyE,eAAA9X,KAAAyI,QACAyG,KAAA2D,KAAA7S,KAAA+S,eAAAzF,gBAAAyK,QAAA,cAAAzK,QAAA,QAAAA,QAAA,SACAtN,KAAAgO,OAAAuH,MACArG,KAAA5N,MAAAoR,KACA,OAAA1S,KAAAmT,WAAAjE,KAAA,mBACA,EAEA0D,KAAAmC,yBAAA,SAAA7F,KAAAwD,MACAxD,KAAAyD,WAAAD,KACA1S,KAAAsR,YACA,OAAAtR,KAAAmT,WAAAjE,KAAA,sBACA,EAMA0D,KAAAiC,WAAA,SAAAmD,sBAAA9I,KAAA+I,YACA,GAAAD,6BAAA,EAAAA,sBAAA,KACA,GAAA9I,YAAA,EAAAA,KAAAlP,KAAAmP,YAEAD,KAAA2D,KAAA,GACA7S,KAAA0R,OAAArP,QAAAQ,QACA,GAAAmV,sBAAA,CAAAhY,KAAAoO,WAAA,GACA,MAAApO,KAAAgL,OAAA3I,QAAAS,OAAA,CACA,IAAAgQ,KAAA9S,KAAA+S,eAAA,MACA7D,KAAA2D,KAAArI,KAAAsI,KACA,CACA,GAAAmF,WAAA,CAAAjY,KAAAM,OAAA,MACAN,KAAAsH,OACA,GAAA0Q,sBAAA,CAAAhY,KAAAiX,WAAA,CACA,OAAAjX,KAAAmT,WAAAjE,KAAA,iBACA,EAMA0D,KAAA8C,SAAA,SAAAxG,KAAAgH,MACAhH,KAAAgH,UACAlW,KAAA0R,OAAArP,QAAAa,MACAgM,KAAAzP,KAAAO,KAAAgL,OAAA3I,QAAAa,KAAA,KAAAlD,KAAAoQ,kBACApQ,KAAA0R,OAAArP,QAAAa,MACAgM,KAAAgJ,OAAAlY,KAAAgL,OAAA3I,QAAAW,OAAA,KAAAhD,KAAAoQ,kBACApQ,KAAA0R,OAAArP,QAAAW,QACAkM,KAAA2D,KAAA7S,KAAA+S,eAAA,OACA/S,KAAAiX,YACAjX,KAAAgO,OAAAuH,MACA,OAAAvV,KAAAmT,WAAAjE,KAAA,eACA,EAKA0D,KAAAmD,WAAA,SAAA7G,KAAAgH,MACA,IAAAiC,QAAAnY,KAAAgL,OAAA3I,QAAAuE,IACA5G,KAAAsH,OAEA,GACA4O,KAAAlL,OAAA,uBACAkL,KAAAL,aAAA,GAAAK,MAAA,QAEAiC,SACAnY,KAAAoC,QAAA2G,YAAA,GACA/I,KAAAM,QACA4V,KAAA7C,OAAA,OACA6C,KAAAL,aAAA,GAAAuC,GAAApN,OAAA,cAEA,CACAhL,KAAA2R,MACAuE,KAAAzN,OACA0P,QAAA,4EAEA,CACAjJ,KAAAmJ,KAAAnC,KACAhH,KAAAoJ,MAAAH,QAAAnY,KAAAoQ,kBAAApQ,KAAAuY,mBACAvY,KAAA0R,OAAArP,QAAAW,QACAkM,KAAA2D,KAAA7S,KAAA+S,eAAA,OACA/S,KAAAiX,YACAjX,KAAAgO,OAAAuH,MACA,OAAAvV,KAAAmT,WAAAjE,KAAAiJ,QAAA,kCACA,EAIAvF,KAAAgD,SAAA,SAAA1G,KAAAsJ,MAAAnF,KAAAqE,yBACAxI,KAAA2G,aAAA,GACA3G,KAAAmE,UACA,QACA,IAAAoF,KAAAzY,KAAAmP,YACAnP,KAAA0Y,WAAAD,KAAApF,MACA,GAAArT,KAAA+Q,IAAA1O,QAAAwB,IAAA,CACA4U,KAAAvC,KAAAlW,KAAAuY,iBAAAC,MACA,UAAAd,yBAAArE,OAAA,WAAArT,KAAAgL,OAAA3I,QAAAuE,KAAA5G,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAAgR,aAAA,QACAhR,KAAAmR,YACA,UAAAuG,yBAAAe,KAAAL,GAAApN,OAAA,gBAAAwN,QAAAxY,KAAAgL,OAAA3I,QAAAuE,KAAA5G,KAAAgR,aAAA,SACAhR,KAAA2R,MAAA3R,KAAAqN,WAAA,2DACA,MACAoL,KAAAvC,KAAA,IACA,CACAhH,KAAA2G,aAAArL,KAAAxK,KAAAmT,WAAAsF,KAAA,uBACA,IAAAzY,KAAA+Q,IAAA1O,QAAAY,OAAA,OACA,CACA,OAAAiM,IACA,EAEA0D,KAAA8F,WAAA,SAAAD,KAAApF,MACAoF,KAAAL,GAAApY,KAAAqX,mBACArX,KAAAoW,iBAAAqC,KAAAL,GAAA/E,OAAA,MAAApH,SAAAC,aAAA,MACA,EAEA,IAAAsK,eAAA,EAAAC,uBAAA,EAAAkC,iBAAA,EAMA/F,KAAA2D,cAAA,SAAArH,KAAA0J,UAAAC,oBAAAxC,QAAAyC,SACA9Y,KAAA+Y,aAAA7J,MACA,GAAAlP,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAAoC,QAAA2G,aAAA,IAAAsN,QAAA,CACA,GAAArW,KAAAgL,OAAA3I,QAAAqC,MAAAkU,UAAAnC,uBACA,CAAAzW,KAAAmR,YAAA,CACAjC,KAAAnD,UAAA/L,KAAA+Q,IAAA1O,QAAAqC,KACA,CACA,GAAA1E,KAAAoC,QAAA2G,aAAA,EACA,CAAAmG,KAAApD,QAAAuK,OAAA,CAEA,GAAAuC,UAAApC,eAAA,CACAtH,KAAAkJ,GAAAQ,UAAAD,kBAAA3Y,KAAAgL,OAAA3I,QAAA7C,KAAA,KAAAQ,KAAAqV,aACA,GAAAnG,KAAAkJ,MAAAQ,UAAAnC,wBAKA,CAAAzW,KAAAgZ,gBAAA9J,KAAAkJ,GAAApY,KAAAM,QAAA4O,KAAAnD,WAAAmD,KAAApD,MAAA9L,KAAA8O,oBAAA7C,SAAAC,aAAAC,cAAA,CACA,CAEA,IAAA8M,YAAAjZ,KAAA6N,SAAAqL,YAAAlZ,KAAA8N,SAAAqL,iBAAAnZ,KAAA+N,cACA/N,KAAA6N,SAAA,EACA7N,KAAA8N,SAAA,EACA9N,KAAA+N,cAAA,EACA/N,KAAAoO,WAAAvC,cAAAqD,KAAApD,MAAAoD,KAAAnD,YAEA,KAAA6M,UAAApC,gBACA,CAAAtH,KAAAkJ,GAAApY,KAAAgL,OAAA3I,QAAA7C,KAAAQ,KAAAqV,aAAA,KAEArV,KAAAoZ,oBAAAlK,MACAlP,KAAAqZ,kBAAAnK,KAAA2J,oBAAA,MAAAC,SAEA9Y,KAAA6N,SAAAoL,YACAjZ,KAAA8N,SAAAoL,YACAlZ,KAAA+N,cAAAoL,iBACA,OAAAnZ,KAAAmT,WAAAjE,KAAA0J,UAAApC,eAAA,2CACA,EAEA5D,KAAAwG,oBAAA,SAAAlK,MACAlP,KAAA0R,OAAArP,QAAAU,QACAmM,KAAAoK,OAAAtZ,KAAAuZ,iBAAAlX,QAAAW,OAAA,MAAAhD,KAAAoC,QAAA2G,aAAA,GACA/I,KAAAwS,gCACA,EAKAI,KAAAwB,WAAA,SAAAlF,KAAAsK,aACAxZ,KAAAsH,OAIA,IAAAmS,UAAAzZ,KAAAM,OACAN,KAAAM,OAAA,KAEAN,KAAA0Z,aAAAxK,KAAAsK,aACAxZ,KAAA2Z,gBAAAzK,MACA,IAAA0K,eAAA5Z,KAAA6Z,iBACA,IAAAC,UAAA9Z,KAAAmP,YACA,IAAA4K,eAAA,MACAD,UAAAjH,KAAA,GACA7S,KAAA0R,OAAArP,QAAAQ,QACA,MAAA7C,KAAAgL,OAAA3I,QAAAS,OAAA,CACA,IAAAkX,QAAAha,KAAAia,kBAAA/K,KAAA5R,aAAA,MACA,GAAA0c,QAAA,CACAF,UAAAjH,KAAArI,KAAAwP,SACA,GAAAA,QAAAhP,OAAA,oBAAAgP,QAAA3G,OAAA,eACA,GAAA0G,eAAA,CAAA/Z,KAAAoS,iBAAA4H,QAAAvR,MAAA,2CACAsR,eAAA,IACA,SAAAC,QAAAzd,KAAAyd,QAAAzd,IAAAyO,OAAA,qBAAAkP,wBAAAN,eAAAI,SAAA,CACAha,KAAAoS,iBAAA4H,QAAAzd,IAAAkM,MAAA,gBAAAuR,QAAAzd,IAAA,mCACA,CACA,CACA,CACAyD,KAAAM,OAAAmZ,UACAzZ,KAAAsH,OACA4H,KAAA2D,KAAA7S,KAAAmT,WAAA2G,UAAA,aACA9Z,KAAAma,gBACA,OAAAna,KAAAmT,WAAAjE,KAAAsK,YAAA,qCACA,EAEA5G,KAAAqH,kBAAA,SAAAG,wBACA,GAAApa,KAAA+Q,IAAA1O,QAAAa,MAAA,aAEA,IAAA6F,YAAA/I,KAAAoC,QAAA2G,YACA,IAAAmG,KAAAlP,KAAAmP,YACA,IAAAkL,QAAA,GACA,IAAAC,YAAA,MACA,IAAAjE,QAAA,MACA,IAAAhD,KAAA,SACA,IAAAkH,SAAA,MAEA,GAAAva,KAAAiR,cAAA,WAEA,GAAAlI,aAAA,IAAA/I,KAAA+Q,IAAA1O,QAAAQ,QAAA,CACA7C,KAAAwa,sBAAAtL,MACA,OAAAA,IACA,CACA,GAAAlP,KAAAya,2BAAAza,KAAAgL,OAAA3I,QAAAqC,KAAA,CACA6V,SAAA,IACA,MACAF,QAAA,QACA,CACA,CACAnL,KAAAwL,OAAAH,SACA,IAAAF,SAAAtR,aAAA,GAAA/I,KAAAiR,cAAA,UACA,IAAAjR,KAAAya,2BAAAza,KAAAgL,OAAA3I,QAAAqC,QAAA1E,KAAAoR,qBAAA,CACAiF,QAAA,IACA,MACAgE,QAAA,OACA,CACA,CACA,IAAAA,UAAAtR,aAAA,IAAAsN,UAAArW,KAAA+Q,IAAA1O,QAAAqC,MAAA,CACA4V,YAAA,IACA,CACA,IAAAD,UAAAhE,UAAAiE,YAAA,CACA,IAAAK,UAAA3a,KAAAlD,MACA,GAAAkD,KAAAiR,cAAA,QAAAjR,KAAAiR,cAAA,QACA,GAAAjR,KAAAya,0BAAA,CACApH,KAAAsH,SACA,MACAN,QAAAM,SACA,CACA,CACA,CAGA,GAAAN,QAAA,CAGAnL,KAAA0L,SAAA,MACA1L,KAAA3S,IAAAyD,KAAA6a,YAAA7a,KAAAoN,aAAApN,KAAAmN,iBACA+B,KAAA3S,IAAAiD,KAAA6a,QACAra,KAAAmT,WAAAjE,KAAA3S,IAAA,aACA,MACAyD,KAAA8a,sBAAA5L,KACA,CAGA,GAAAnG,YAAA,IAAA/I,KAAAgL,OAAA3I,QAAAU,QAAAsQ,OAAA,UAAAiH,aAAAjE,QAAA,CACA,IAAA0E,eAAA7L,KAAAwL,QAAAM,aAAA9L,KAAA,eACA,IAAA+L,kBAAAF,eAAAX,uBAEA,GAAAW,eAAA1H,OAAA,UAAArT,KAAA2R,MAAAzC,KAAA3S,IAAAkM,MAAA,2CACAyG,KAAAmE,KAAA0H,cAAA,cAAA1H,KACArT,KAAAkb,iBAAAhM,KAAAoL,YAAAjE,QAAA4E,kBACA,MACAjb,KAAAmb,gBAAAjM,KACA,CAEA,OAAAA,IACA,EAEA0D,KAAA6H,wBAAA,WACA,OACAza,KAAAgL,OAAA3I,QAAA7C,MACAQ,KAAAgL,OAAA3I,QAAAI,WACAzC,KAAAgL,OAAA3I,QAAAC,KACAtC,KAAAgL,OAAA3I,QAAAG,QACAxC,KAAAgL,OAAA3I,QAAAM,UACA3C,KAAAgL,KAAAxJ,OAEA,EAEAoR,KAAAkI,sBAAA,SAAAd,SACA,GAAAha,KAAAgL,OAAA3I,QAAAI,UAAA,CACA,GAAAzC,KAAAlD,QAAA,eACAkD,KAAA2R,MAAA3R,KAAAyI,MAAA,qDACA,CACAuR,QAAAY,SAAA,MACAZ,QAAAzd,IAAAyD,KAAAob,mBACA,MACApb,KAAAqb,kBAAArB,QACA,CACA,EAEApH,KAAAsI,iBAAA,SAAAI,OAAAhB,YAAAjE,QAAA4E,mBAEA,IAAA1e,IAAA+e,OAAA/e,IACA,GAAA+e,OAAAjI,OAAA,eACA,GAAAiH,YAAA,CAAAta,KAAA2R,MAAApV,IAAAkM,MAAA,oCACA,GAAA4N,QAAA,CAAArW,KAAA2R,MAAApV,IAAAkM,MAAA,wCACA,SAAA6S,OAAAZ,QAAAM,aAAAM,OAAA,cACAtb,KAAA2R,MAAApV,IAAAkM,MAAA,yDACA,CAGA,IAAA3L,MAAAwe,OAAAxe,MAAAkD,KAAAub,YAAAjB,YAAAjE,QAAA4E,mBAGA,GAAAK,OAAAjI,OAAA,OAAAvW,MAAAwc,OAAAnf,SAAA,EACA,CAAA6F,KAAAoS,iBAAAtV,MAAA2L,MAAA,gCACA,GAAA6S,OAAAjI,OAAA,OAAAvW,MAAAwc,OAAAnf,SAAA,EACA,CAAA6F,KAAAoS,iBAAAtV,MAAA2L,MAAA,wCACA,GAAA6S,OAAAjI,OAAA,OAAAvW,MAAAwc,OAAA,GAAAtO,OAAA,cACA,CAAAhL,KAAAoS,iBAAAtV,MAAAwc,OAAA,GAAA7Q,MAAA,iCAEA,OAAAzI,KAAAmT,WAAAmI,OAAA,mBACA,EAEA1I,KAAAuI,gBAAA,SAAAK,OACA,GAAAR,aAAAQ,MAAA,gBACAxb,KAAA2R,MAAA6J,MAAAjf,IAAAkM,MAAA,iDACA,SAAA+S,MAAAd,QAAAM,aAAAQ,MAAA,cACAxb,KAAA2R,MAAA6J,MAAAjf,IAAAkM,MAAA,sDACA,CAEA,GAAAzI,KAAA+Q,IAAA1O,QAAAwB,IAAA,CAEA,IAAA6L,MAAA1P,KAAA2P,mBACA,IAAAF,iBAAAC,MAAAD,iBACAC,MAAAD,iBAAA,KACA+L,MAAA1e,MAAAkD,KAAAuY,mBACA7I,MAAAD,iCACA,MACA+L,MAAA1e,MAAA,IACA,CACAkD,KAAAsR,YAEA,OAAAtR,KAAAmT,WAAAqI,MAAA,qBACA,EAEA5I,KAAA4H,sBAAA,SAAAtL,MACAA,KAAA2D,KAAA,GAEA,IAAA4I,UAAAzb,KAAAgO,OACAhO,KAAAgO,OAAA,GACAhO,KAAAoO,WAAAzC,yBAAAF,aACA,MAAAzL,KAAAgL,OAAA3I,QAAAS,OAAA,CACA,IAAAgQ,KAAA9S,KAAA+S,eAAA,MACA7D,KAAA2D,KAAArI,KAAAsI,KACA,CACA9S,KAAAsH,OACAtH,KAAAiX,YACAjX,KAAAgO,OAAAyN,UAEA,OAAAzb,KAAAmT,WAAAjE,KAAA,cACA,EAEA0D,KAAA8G,aAAA,SAAAxK,KAAAsK,aACA,GAAAxZ,KAAAgL,OAAA3I,QAAA7C,KAAA,CACA0P,KAAAkJ,GAAApY,KAAAqV,aACA,GAAAmE,YACA,CAAAxZ,KAAAgZ,gBAAA9J,KAAAkJ,GAAAlM,aAAA,OACA,MACA,GAAAsN,cAAA,KACA,CAAAxZ,KAAAmR,YAAA,CACAjC,KAAAkJ,GAAA,IACA,CACA,EAEAxF,KAAA+G,gBAAA,SAAAzK,MACAA,KAAA5R,WAAA0C,KAAA+Q,IAAA1O,QAAAiE,UAAAtG,KAAA0b,oBAAA,gBACA,EAEA9I,KAAAiH,eAAA,WACA,IAAAG,QAAA,CAAA2B,SAAAtf,OAAAkB,OAAA,MAAAqe,KAAA,IACA5b,KAAAsO,iBAAA9D,KAAAwP,SACA,OAAAA,QAAA2B,QACA,EAEA/I,KAAAuH,cAAA,WACA,IAAAzS,IAAA1H,KAAAsO,iBAAAiH,MACA,IAAAoG,SAAAjU,IAAAiU,SACA,IAAAC,KAAAlU,IAAAkU,KACA,IAAA5gB,IAAAgF,KAAAsO,iBAAAnU,OACA,IAAA0hB,OAAA7gB,MAAA,OAAAgF,KAAAsO,iBAAAtT,IAAA,GACA,QAAAxB,EAAA,EAAAA,EAAAoiB,KAAAzhB,SAAAX,EAAA,CACA,IAAA4e,GAAAwD,KAAApiB,GACA,IAAAoO,OAAA+T,SAAAvD,GAAA5Y,MAAA,CACA,GAAAqc,OAAA,CACAA,OAAAD,KAAApR,KAAA4N,GACA,MACApY,KAAAoS,iBAAAgG,GAAA3P,MAAA,mBAAA2P,GAAA,gDACA,CACA,CACA,CACA,EAEA,SAAA8B,wBAAAN,eAAAI,SACA,IAAAxa,KAAAwa,QAAAzd,IAAAiD,KACA,IAAAsc,KAAAlC,eAAApa,MAEA,IAAA8H,KAAA,OACA,GAAA0S,QAAAhP,OAAA,qBAAAgP,QAAA3G,OAAA,OAAA2G,QAAA3G,OAAA,QACA/L,MAAA0S,QAAAU,OAAA,SAAAV,QAAA3G,IACA,CAGA,GACAyI,OAAA,QAAAxU,OAAA,QACAwU,OAAA,QAAAxU,OAAA,QACAwU,OAAA,QAAAxU,OAAA,QACAwU,OAAA,QAAAxU,OAAA,OACA,CACAsS,eAAApa,MAAA,OACA,YACA,UAAAsc,KAAA,CACAlC,eAAApa,MAAA8H,KACA,YACA,MACA,WACA,CACA,CAEA,SAAA0T,aAAA9L,KAAA1P,MACA,IAAAob,SAAA1L,KAAA0L,SACA,IAAAre,IAAA2S,KAAA3S,IACA,OAAAqe,WACAre,IAAAyO,OAAA,cAAAzO,IAAAiD,aACAjD,IAAAyO,OAAA,WAAAzO,IAAAO,QAAA0C,KAEA,CAIAoT,KAAAmJ,0BAAA,SAAA7M,KAAAjV,SACA,GAAA+F,KAAAoC,QAAA2G,aAAA,IACA,GAAA/I,KAAAiR,cAAA,OACA/B,KAAA8M,SAAAhc,KAAAic,wBACAjc,KAAAkc,YAAAjiB,QAAAiV,KAAA8M,SAAAhc,KAAAoN,aACA,MACA8B,KAAA8M,SAAA,IACA,CACA,CACAhc,KAAAkR,iBAAA,QACA,GAAAlR,KAAAgL,OAAA3I,QAAAG,OAAA,CAAAxC,KAAAmR,YAAA,CACAjC,KAAAhI,OAAAlH,KAAAmc,gBACAnc,KAAAsR,YACA,OAAAtR,KAAAmT,WAAAjE,KAAA,uBACA,EAEA0D,KAAAqC,YAAA,SAAA/F,KAAAjV,SACA+F,KAAAsH,OAEA,GAAAtH,KAAA+Q,IAAA1O,QAAAqC,MAAA,CACA,OAAA1E,KAAA+b,0BAAA7M,KAAAjV,QACA,CACA,GAAA+F,KAAA+Q,IAAA1O,QAAA8C,UAAA,CACAnF,KAAAkc,YAAAjiB,QAAA,UAAA+F,KAAAoN,cACA8B,KAAAkN,YAAApc,KAAAqc,gCACA,OAAArc,KAAAmT,WAAAjE,KAAA,2BACA,CAEA,GAAAlP,KAAAsc,6BAAA,CACApN,KAAAkN,YAAApc,KAAAuc,uBAAArN,MACA,GAAAA,KAAAkN,YAAApR,OAAA,sBACA,CAAAhL,KAAAwc,oBAAAviB,QAAAiV,KAAAkN,YAAAvG,aAAA,KAEA,CAAA7V,KAAAkc,YAAAjiB,QAAAiV,KAAAkN,YAAAhE,GAAAlJ,KAAAkN,YAAAhE,GAAA3P,MAAA,CACAyG,KAAAuN,WAAA,GACAvN,KAAAhI,OAAA,IACA,MACAgI,KAAAkN,YAAA,KACAlN,KAAAuN,WAAAzc,KAAA0c,sBAAAziB,SACA,GAAA+F,KAAAiR,cAAA,SACA,GAAAjR,KAAAgL,OAAA3I,QAAAG,OAAA,CAAAxC,KAAAmR,YAAA,CACAjC,KAAAhI,OAAAlH,KAAAmc,eACA,MACA,QAAA3iB,EAAA,EAAAwZ,KAAA9D,KAAAuN,WAAAjjB,EAAAwZ,KAAA7Y,OAAAX,GAAA,GAEA,IAAAmjB,KAAA3J,KAAAxZ,GAEAwG,KAAA4c,gBAAAD,KAAAE,OAEA7c,KAAA8c,iBAAAH,KAAAE,OAEA,GAAAF,KAAAE,MAAA7R,OAAA,WACAhL,KAAA2R,MAAAgL,KAAAE,MAAApU,MAAA,yEACA,CACA,CAEAyG,KAAAhI,OAAA,IACA,CACAlH,KAAAsR,WACA,CACA,OAAAtR,KAAAmT,WAAAjE,KAAA,yBACA,EAEA0D,KAAA2J,uBAAA,SAAArN,MACA,OAAAlP,KAAA+S,eAAA,KACA,EAEAH,KAAAyJ,8BAAA,WACA,IAAAhG,QACA,GAAArW,KAAAgL,OAAA3I,QAAAmD,YAAA6Q,QAAArW,KAAA2T,mBAAA,CACA,IAAAoJ,MAAA/c,KAAAmP,YACAnP,KAAAsH,OACA,GAAA+O,QAAA,CAAArW,KAAAsH,MAAA,CACA,OAAAtH,KAAAuW,cAAAwG,MAAAvG,eAAAmC,iBAAA,MAAAtC,QACA,SAAArW,KAAAgL,OAAA3I,QAAAgE,OAAA,CACA,IAAA2W,MAAAhd,KAAAmP,YACA,OAAAnP,KAAAoU,WAAA4I,MAAA,aACA,MACA,IAAAZ,YAAApc,KAAAuY,mBACAvY,KAAAsR,YACA,OAAA8K,WACA,CACA,EAEAxJ,KAAAsJ,YAAA,SAAAjiB,QAAAuF,KAAAwB,KACA,IAAA/G,QAAA,QACA,UAAAuF,OAAA,SACA,CAAAA,UAAAwL,OAAA,aAAAxL,eAAA1C,KAAA,CACA,GAAA8K,OAAA3N,QAAAuF,MACA,CAAAQ,KAAAoS,iBAAApR,IAAA,qBAAAxB,KAAA,KACAvF,QAAAuF,MAAA,IACA,EAEAoT,KAAAqK,mBAAA,SAAAhjB,QAAAijB,KACA,IAAAlS,KAAAkS,IAAAlS,KACA,GAAAA,OAAA,aACA,CAAAhL,KAAAkc,YAAAjiB,QAAAijB,QAAAzU,MAAA,MACA,GAAAuC,OAAA,gBACA,SAAAxR,EAAA,EAAAwZ,KAAAkK,IAAAC,WAAA3jB,EAAAwZ,KAAA7Y,OAAAX,GAAA,EACA,CACA,IAAA4jB,KAAApK,KAAAxZ,GAEAwG,KAAAid,mBAAAhjB,QAAAmjB,KACA,OACA,GAAApS,OAAA,eACA,SAAA4M,IAAA,EAAAyF,OAAAH,IAAAI,SAAA1F,IAAAyF,OAAAljB,OAAAyd,KAAA,GACA,IAAA2F,IAAAF,OAAAzF,KAEA,GAAA2F,IAAA,CAAAvd,KAAAid,mBAAAhjB,QAAAsjB,IAAA,CACA,OACA,GAAAvS,OAAA,WACA,CAAAhL,KAAAid,mBAAAhjB,QAAAijB,IAAApgB,MAAA,MACA,GAAAkO,OAAA,oBACA,CAAAhL,KAAAid,mBAAAhjB,QAAAijB,IAAA7E,KAAA,MACA,GAAArN,OAAA,cACA,CAAAhL,KAAAid,mBAAAhjB,QAAAijB,IAAAtG,SAAA,MACA,GAAA5L,OAAA,0BACA,CAAAhL,KAAAid,mBAAAhjB,QAAAijB,IAAAvK,WAAA,CACA,EAEAC,KAAA4J,oBAAA,SAAAviB,QAAAujB,OACA,IAAAvjB,QAAA,QACA,QAAAT,EAAA,EAAAwZ,KAAAwK,MAAAhkB,EAAAwZ,KAAA7Y,OAAAX,GAAA,EACA,CACA,IAAAif,KAAAzF,KAAAxZ,GAEAwG,KAAAid,mBAAAhjB,QAAAwe,KAAAL,GACA,CACA,EAEAxF,KAAA0J,2BAAA,WACA,OAAAtc,KAAAgL,KAAAxJ,UAAA,OACAxB,KAAAgL,KAAAxJ,UAAA,SACAxB,KAAAgL,KAAAxJ,UAAA,SACAxB,KAAAgL,KAAAxJ,UAAA,YACAxB,KAAAuT,SACAvT,KAAA2T,iBACA,EAIAf,KAAA6K,qBAAA,SAAAxjB,SACA,IAAAiV,KAAAlP,KAAAmP,YACAD,KAAA2N,MAAA7c,KAAAic,wBAEA/M,KAAA8M,SAAAhc,KAAAiR,cAAA,MAAAjR,KAAAic,wBAAA/M,KAAA2N,MACA7c,KAAAkc,YACAjiB,QACAiV,KAAA8M,SACA9M,KAAA8M,SAAAvT,OAGA,OAAAzI,KAAAmT,WAAAjE,KAAA,kBACA,EAEA0D,KAAA8J,sBAAA,SAAAziB,SACA,IAAAyjB,MAAA,GAAAC,MAAA,KAEA3d,KAAA0R,OAAArP,QAAAQ,QACA,OAAA7C,KAAA+Q,IAAA1O,QAAAS,QAAA,CACA,IAAA6a,MAAA,CACA3d,KAAA0R,OAAArP,QAAAY,OACA,GAAAjD,KAAAuR,mBAAAlP,QAAAS,QAAA,OACA,MAAA6a,MAAA,MAEAD,MAAAlT,KAAAxK,KAAAyd,qBAAAxjB,SACA,CACA,OAAAyjB,KACA,EAIA9K,KAAAoC,YAAA,SAAA9F,MACAlP,KAAAsH,OAGA,GAAAtH,KAAAgL,OAAA3I,QAAAG,OAAA,CACA0M,KAAAuN,WAAAvF,QACAhI,KAAAhI,OAAAlH,KAAAmc,eACA,MACAjN,KAAAuN,WAAAzc,KAAA4d,wBACA5d,KAAAkR,iBAAA,QACAhC,KAAAhI,OAAAlH,KAAAgL,OAAA3I,QAAAG,OAAAxC,KAAAmc,gBAAAnc,KAAAmR,YACA,CACAnR,KAAAsR,YACA,OAAAtR,KAAAmT,WAAAjE,KAAA,oBACA,EAIA0D,KAAAiL,qBAAA,WACA,IAAA3O,KAAAlP,KAAAmP,YACAD,KAAA4O,SAAA9d,KAAAic,wBAEA,GAAAjc,KAAAiR,cAAA,OACA/B,KAAA2N,MAAA7c,KAAAqV,YACA,MACArV,KAAA4c,gBAAA1N,KAAA4O,UACA5O,KAAA2N,MAAA3N,KAAA4O,QACA,CACA9d,KAAAgZ,gBAAA9J,KAAA2N,MAAA3Q,cAEA,OAAAlM,KAAAmT,WAAAjE,KAAA,kBACA,EAEA0D,KAAAmL,4BAAA,WAEA,IAAA7O,KAAAlP,KAAAmP,YACAD,KAAA2N,MAAA7c,KAAAqV,aACArV,KAAAgZ,gBAAA9J,KAAA2N,MAAA3Q,cACA,OAAAlM,KAAAmT,WAAAjE,KAAA,yBACA,EAEA0D,KAAAoL,8BAAA,WACA,IAAA9O,KAAAlP,KAAAmP,YACAnP,KAAAsH,OACAtH,KAAAkR,iBAAA,MACAhC,KAAA2N,MAAA7c,KAAAqV,aACArV,KAAAgZ,gBAAA9J,KAAA2N,MAAA3Q,cACA,OAAAlM,KAAAmT,WAAAjE,KAAA,2BACA,EAEA0D,KAAAgL,sBAAA,WACA,IAAAF,MAAA,GAAAC,MAAA,KACA,GAAA3d,KAAAgL,OAAA3I,QAAA7C,KAAA,CACAke,MAAAlT,KAAAxK,KAAA+d,+BACA,IAAA/d,KAAA+Q,IAAA1O,QAAAY,OAAA,QAAAya,KAAA,CACA,CACA,GAAA1d,KAAAgL,OAAA3I,QAAAqC,KAAA,CACAgZ,MAAAlT,KAAAxK,KAAAge,iCACA,OAAAN,KACA,CACA1d,KAAA0R,OAAArP,QAAAQ,QACA,OAAA7C,KAAA+Q,IAAA1O,QAAAS,QAAA,CACA,IAAA6a,MAAA,CACA3d,KAAA0R,OAAArP,QAAAY,OACA,GAAAjD,KAAAuR,mBAAAlP,QAAAS,QAAA,OACA,MAAA6a,MAAA,MAEAD,MAAAlT,KAAAxK,KAAA6d,uBACA,CACA,OAAAH,KACA,EAEA9K,KAAAqJ,sBAAA,WACA,GAAAjc,KAAAoC,QAAA2G,aAAA,IAAA/I,KAAAgL,OAAA3I,QAAAG,OAAA,CACA,IAAAyb,cAAAje,KAAAke,aAAAle,KAAAlD,OACA,GAAAoL,cAAAzI,KAAAwe,cAAAnhB,OAAA,CACAkD,KAAA2R,MAAAsM,cAAAxV,MAAA,kDACA,CACA,OAAAwV,aACA,CACA,OAAAje,KAAAqV,WAAA,KACA,EAGAzC,KAAAM,uBAAA,SAAAiL,YACA,QAAA3kB,EAAA,EAAAA,EAAA2kB,WAAAhkB,QAAA6F,KAAAoe,qBAAAD,WAAA3kB,QAAA,CACA2kB,WAAA3kB,GAAA6kB,UAAAF,WAAA3kB,GAAAmZ,WAAA2L,IAAA/e,MAAA,KACA,CACA,EACAqT,KAAAwL,qBAAA,SAAAxF,WACA,OACA5Y,KAAAoC,QAAA2G,aAAA,GACA6P,UAAA5N,OAAA,uBACA4N,UAAAjG,WAAA3H,OAAA,kBACA4N,UAAAjG,WAAA7V,QAAA,WAEAkD,KAAAvB,MAAAma,UAAAnQ,SAAA,KAAAzI,KAAAvB,MAAAma,UAAAnQ,SAAA,IAEA,EAEA,IAAA8V,KAAAjS,OAAA3P,UAKA4hB,KAAApI,aAAA,SAAAjH,KAAAsP,UAAArM,wBACA,GAAAnS,KAAAoC,QAAA2G,aAAA,GAAAmG,KAAA,CACA,OAAAA,KAAAlE,MACA,iBACA,GAAAhL,KAAA0O,SAAAQ,KAAA1P,OAAA,QACA,CAAAQ,KAAA2R,MAAAzC,KAAAzG,MAAA,6DACA,MAEA,oBACA,mBACA,wBACA,kBACA,MAEA,uBACAyG,KAAAlE,KAAA,gBACA,GAAAmH,uBAAA,CAAAnS,KAAAkS,mBAAAC,uBAAA,MACA,QAAA3Y,EAAA,EAAAwZ,KAAA9D,KAAAiO,WAAA3jB,EAAAwZ,KAAA7Y,OAAAX,GAAA,GACA,IAAA4jB,KAAApK,KAAAxZ,GAEAwG,KAAAmW,aAAAiH,KAAAoB,WAMA,GACApB,KAAApS,OAAA,gBACAoS,KAAAxG,SAAA5L,OAAA,gBAAAoS,KAAAxG,SAAA5L,OAAA,iBACA,CACAhL,KAAA2R,MAAAyL,KAAAxG,SAAAnO,MAAA,mBACA,CACA,CACA,MAEA,eAEA,GAAAyG,KAAAmE,OAAA,QAAArT,KAAA2R,MAAAzC,KAAA3S,IAAAkM,MAAA,iDACAzI,KAAAmW,aAAAjH,KAAApS,MAAA0hB,WACA,MAEA,sBACAtP,KAAAlE,KAAA,eACA,GAAAmH,uBAAA,CAAAnS,KAAAkS,mBAAAC,uBAAA,MACAnS,KAAAye,iBAAAvP,KAAAoO,SAAAkB,WACA,MAEA,oBACAtP,KAAAlE,KAAA,cACAhL,KAAAmW,aAAAjH,KAAA0H,SAAA4H,WACA,GAAAtP,KAAA0H,SAAA5L,OAAA,oBACA,CAAAhL,KAAA2R,MAAAzC,KAAA0H,SAAAnO,MAAA,6CACA,MAEA,2BACA,GAAAyG,KAAAwP,WAAA,KAAA1e,KAAA2R,MAAAzC,KAAAmJ,KAAAhR,IAAA,+DACA6H,KAAAlE,KAAA,2BACAkE,KAAAwP,SACA1e,KAAAmW,aAAAjH,KAAAmJ,KAAAmG,WACA,MAEA,8BACAxe,KAAAmW,aAAAjH,KAAAyD,WAAA6L,UAAArM,wBACA,MAEA,sBACAnS,KAAAoS,iBAAAlD,KAAAzG,MAAA,qDACA,MAEA,uBACA,IAAA+V,UAAA,OAEA,QACAxe,KAAA2R,MAAAzC,KAAAzG,MAAA,uBAEA,SAAA0J,uBAAA,CAAAnS,KAAAkS,mBAAAC,uBAAA,MACA,OAAAjD,IACA,EAIAqP,KAAAE,iBAAA,SAAAE,SAAAH,WACA,IAAAnX,IAAAsX,SAAAxkB,OACA,QAAAX,EAAA,EAAAA,EAAA6N,IAAA7N,IAAA,CACA,IAAA+jB,IAAAoB,SAAAnlB,GACA,GAAA+jB,IAAA,CAAAvd,KAAAmW,aAAAoH,IAAAiB,UAAA,CACA,CACA,GAAAnX,IAAA,CACA,IAAAuX,KAAAD,SAAAtX,IAAA,GACA,GAAArH,KAAAoC,QAAA2G,cAAA,GAAAyV,WAAAI,WAAA5T,OAAA,eAAA4T,KAAAhI,SAAA5L,OAAA,aACA,CAAAhL,KAAAmR,WAAAyN,KAAAhI,SAAAnO,MAAA,CACA,CACA,OAAAkW,QACA,EAIAJ,KAAAM,YAAA,SAAA1M,wBACA,IAAAjD,KAAAlP,KAAAmP,YACAnP,KAAAsH,OACA4H,KAAA0H,SAAA5W,KAAAuY,iBAAA,MAAApG,wBACA,OAAAnS,KAAAmT,WAAAjE,KAAA,gBACA,EAEAqP,KAAAO,iBAAA,WACA,IAAA5P,KAAAlP,KAAAmP,YACAnP,KAAAsH,OAGA,GAAAtH,KAAAoC,QAAA2G,cAAA,GAAA/I,KAAAgL,OAAA3I,QAAA7C,KACA,CAAAQ,KAAAmR,YAAA,CAEAjC,KAAA0H,SAAA5W,KAAAqX,mBAEA,OAAArX,KAAAmT,WAAAjE,KAAA,cACA,EAIAqP,KAAAlH,iBAAA,WACA,GAAArX,KAAAoC,QAAA2G,aAAA,GACA,OAAA/I,KAAAgL,MACA,KAAA3I,QAAAM,SACA,IAAAuM,KAAAlP,KAAAmP,YACAnP,KAAAsH,OACA4H,KAAAoO,SAAAtd,KAAAuZ,iBAAAlX,QAAAO,SAAA,WACA,OAAA5C,KAAAmT,WAAAjE,KAAA,gBAEA,KAAA7M,QAAAQ,OACA,OAAA7C,KAAA+e,SAAA,MAEA,CACA,OAAA/e,KAAAqV,YACA,EAEAkJ,KAAAhF,iBAAA,SAAAyF,MAAAC,WAAAC,mBAAAC,gBACA,IAAAC,KAAA,GAAAzB,MAAA,KACA,OAAA3d,KAAA+Q,IAAAiO,OAAA,CACA,GAAArB,MAAA,CAAAA,MAAA,UACA,CAAA3d,KAAA0R,OAAArP,QAAAY,MAAA,CACA,GAAAgc,YAAAjf,KAAAgL,OAAA3I,QAAAY,MAAA,CACAmc,KAAA5U,KAAA,KACA,SAAA0U,oBAAAlf,KAAAuR,mBAAAyN,OAAA,CACA,KACA,SAAAhf,KAAAgL,OAAA3I,QAAAqB,SAAA,CACA,IAAA2b,KAAArf,KAAA8e,mBACA9e,KAAAsf,qBAAAD,MACAD,KAAA5U,KAAA6U,MACA,GAAArf,KAAAgL,OAAA3I,QAAAY,MAAA,CAAAjD,KAAAoS,iBAAApS,KAAAyI,MAAA,iDACAzI,KAAA0R,OAAAsN,OACA,KACA,MACAI,KAAA5U,KAAAxK,KAAAuf,wBAAAJ,gBACA,CACA,CACA,OAAAC,IACA,EAEAb,KAAAgB,wBAAA,SAAAJ,gBACA,IAAAK,KAAAxf,KAAAyf,kBAAAzf,KAAAyI,MAAAzI,KAAA6K,UACA7K,KAAAsf,qBAAAE,MACA,OAAAA,IACA,EAEAjB,KAAAe,qBAAA,SAAAlI,OACA,OAAAA,KACA,EAIAmH,KAAAkB,kBAAA,SAAAlT,SAAA1B,SAAAwN,MACAA,WAAArY,KAAAqX,mBACA,GAAArX,KAAAoC,QAAA2G,YAAA,IAAA/I,KAAA+Q,IAAA1O,QAAAwB,IAAA,QAAAwU,IAAA,CACA,IAAAnJ,KAAAlP,KAAA6a,YAAAtO,SAAA1B,UACAqE,KAAAmJ,UACAnJ,KAAAoJ,MAAAtY,KAAAuY,mBACA,OAAAvY,KAAAmT,WAAAjE,KAAA,oBACA,EAkEAqP,KAAAvF,gBAAA,SAAAtG,KAAAgN,YAAAC,cACA,GAAAD,mBAAA,EAAAA,YAAA1T,UAEA,IAAA4T,OAAAF,cAAA1T,UAEA,OAAA0G,KAAA1H,MACA,iBACA,GAAAhL,KAAAM,QAAAN,KAAA2M,wBAAAlN,KAAAiT,KAAAlT,MACA,CAAAQ,KAAAoS,iBAAAM,KAAAjK,OAAAmX,OAAA,4BAAAlN,KAAAlT,KAAA,mBACA,GAAAogB,OAAA,CACA,GAAAF,cAAAxT,cAAAwG,KAAAlT,OAAA,MACA,CAAAQ,KAAAoS,iBAAAM,KAAAjK,MAAA,+CACA,GAAAkX,aAAA,CACA,GAAA/X,OAAA+X,aAAAjN,KAAAlT,MACA,CAAAQ,KAAAoS,iBAAAM,KAAAjK,MAAA,uBACAkX,aAAAjN,KAAAlT,MAAA,IACA,CACA,GAAAkgB,cAAArT,aAAA,CAAArM,KAAA6f,YAAAnN,KAAAlT,KAAAkgB,YAAAhN,KAAAjK,MAAA,CACA,CACA,MAEA,sBACAzI,KAAAoS,iBAAAM,KAAAjK,MAAA,qDACA,MAEA,uBACA,GAAAmX,OAAA,CAAA5f,KAAAoS,iBAAAM,KAAAjK,MAAA,6BACA,MAEA,8BACA,GAAAmX,OAAA,CAAA5f,KAAAoS,iBAAAM,KAAAjK,MAAA,oCACA,OAAAzI,KAAAgZ,gBAAAtG,KAAAC,WAAA+M,YAAAC,cAEA,QACA3f,KAAA2R,MAAAe,KAAAjK,OAAAmX,OAAA,qCAEA,EAEArB,KAAAnI,iBAAA,SAAA1D,KAAAgN,YAAAC,cACA,GAAAD,mBAAA,EAAAA,YAAA1T,UAEA,OAAA0G,KAAA1H,MACA,oBACA,QAAAxR,EAAA,EAAAwZ,KAAAN,KAAAyK,WAAA3jB,EAAAwZ,KAAA7Y,OAAAX,GAAA,GACA,IAAA4jB,KAAApK,KAAAxZ,GAEAwG,KAAA8f,sBAAA1C,KAAAsC,YAAAC,aACA,CACA,MAEA,mBACA,QAAA/H,IAAA,EAAAyF,OAAA3K,KAAA4K,SAAA1F,IAAAyF,OAAAljB,OAAAyd,KAAA,GACA,IAAA4H,KAAAnC,OAAAzF,KAEA,GAAA4H,KAAA,CAAAxf,KAAA8f,sBAAAN,KAAAE,YAAAC,aAAA,CACA,CACA,MAEA,QACA3f,KAAAgZ,gBAAAtG,KAAAgN,YAAAC,cAEA,EAEApB,KAAAuB,sBAAA,SAAApN,KAAAgN,YAAAC,cACA,GAAAD,mBAAA,EAAAA,YAAA1T,UAEA,OAAA0G,KAAA1H,MACA,eAEAhL,KAAA8f,sBAAApN,KAAA5V,MAAA4iB,YAAAC,cACA,MAEA,wBACA3f,KAAAoW,iBAAA1D,KAAA2F,KAAAqH,YAAAC,cACA,MAEA,kBACA3f,KAAAoW,iBAAA1D,KAAAkE,SAAA8I,YAAAC,cACA,MAEA,QACA3f,KAAAoW,iBAAA1D,KAAAgN,YAAAC,cAEA,EAOA,IAAAI,WAAA,SAAAA,WAAAxV,MAAAyV,OAAAC,cAAAC,SAAAnU,WACA/L,KAAAuK,YACAvK,KAAAggB,gBACAhgB,KAAAigB,8BACAjgB,KAAAkgB,kBACAlgB,KAAA+L,qBACA,EAEA,IAAAoU,MAAA,CACAC,OAAA,IAAAL,WAAA,WACAM,OAAA,IAAAN,WAAA,UACAO,OAAA,IAAAP,WAAA,YACAQ,OAAA,IAAAR,WAAA,WACAS,OAAA,IAAAT,WAAA,UACAU,OAAA,IAAAV,WAAA,wBAAA/lB,GAAA,OAAAA,EAAA0mB,sBAAA,IACAC,OAAA,IAAAZ,WAAA,kBACAa,OAAA,IAAAb,WAAA,iBACAc,WAAA,IAAAd,WAAA,iCACAe,MAAA,IAAAf,WAAA,mCAGA,IAAAgB,KAAAzU,OAAA3P,UAEAokB,KAAAxT,eAAA,WACA,OAAA4S,MAAAC,OACA,EAEAW,KAAAC,WAAA,WACA,OAAAhhB,KAAAsN,QAAAtN,KAAAsN,QAAAnT,OAAA,EACA,EAEA4mB,KAAAE,aAAA,SAAAC,UACA,IAAArF,OAAA7b,KAAAghB,aACA,GAAAnF,SAAAsE,MAAAS,QAAA/E,SAAAsE,MAAAQ,OACA,aACA,GAAAO,WAAA7e,QAAAc,QAAA0Y,SAAAsE,MAAAC,QAAAvE,SAAAsE,MAAAE,QACA,QAAAxE,OAAAmE,MAAA,CAKA,GAAAkB,WAAA7e,QAAAqD,SAAAwb,WAAA7e,QAAA7C,MAAAQ,KAAAwN,YACA,QAAAxG,UAAAvH,KAAAO,KAAAvB,MAAAc,MAAAS,KAAAqN,WAAArN,KAAAyI,OAAA,CACA,GAAAyY,WAAA7e,QAAAgD,OAAA6b,WAAA7e,QAAAa,MAAAge,WAAA7e,QAAAK,KAAAwe,WAAA7e,QAAAW,QAAAke,WAAA7e,QAAAkB,MACA,aACA,GAAA2d,WAAA7e,QAAAQ,OACA,QAAAgZ,SAAAsE,MAAAC,MAAA,CACA,GAAAc,WAAA7e,QAAAyD,MAAAob,WAAA7e,QAAA0D,QAAAmb,WAAA7e,QAAA7C,KACA,cACA,OAAAQ,KAAAwN,WACA,EAEAuT,KAAAI,mBAAA,WACA,QAAA3nB,EAAAwG,KAAAsN,QAAAnT,OAAA,EAAAX,GAAA,EAAAA,IAAA,CACA,IAAA8T,QAAAtN,KAAAsN,QAAA9T,GACA,GAAA8T,QAAA/C,QAAA,WACA,QAAA+C,QAAAvB,SAAA,CACA,CACA,YACA,EAEAgV,KAAA/e,cAAA,SAAAkf,UACA,IAAAhJ,OAAAlN,KAAAhL,KAAAgL,KACA,GAAAA,KAAAxJ,SAAA0f,WAAA7e,QAAAe,IACA,CAAApD,KAAAwN,YAAA,WACA,GAAA0K,OAAAlN,KAAAhJ,cACA,CAAAkW,OAAAhe,KAAA8F,KAAAkhB,SAAA,KAEA,CAAAlhB,KAAAwN,YAAAxC,KAAAvJ,UAAA,CACA,EAIAsf,KAAAK,gBAAA,SAAAC,UACA,GAAArhB,KAAAghB,eAAAK,SAAA,CACArhB,KAAAsN,QAAAtN,KAAAsN,QAAAnT,OAAA,GAAAknB,QACA,CACA,EAIAhf,QAAAW,OAAAhB,cAAAK,QAAAS,OAAAd,cAAA,WACA,GAAAhC,KAAAsN,QAAAnT,SAAA,GACA6F,KAAAwN,YAAA,KACA,MACA,CACA,IAAA8T,IAAAthB,KAAAsN,QAAAiI,MACA,GAAA+L,MAAAnB,MAAAC,QAAApgB,KAAAghB,aAAAzW,QAAA,YACA+W,IAAAthB,KAAAsN,QAAAiI,KACA,CACAvV,KAAAwN,aAAA8T,IAAAtB,MACA,EAEA3d,QAAAQ,OAAAb,cAAA,SAAAkf,UACAlhB,KAAAsN,QAAA9C,KAAAxK,KAAAihB,aAAAC,UAAAf,MAAAC,OAAAD,MAAAE,QACArgB,KAAAwN,YAAA,IACA,EAEAnL,QAAAuB,aAAA5B,cAAA,WACAhC,KAAAsN,QAAA9C,KAAA2V,MAAAG,QACAtgB,KAAAwN,YAAA,IACA,EAEAnL,QAAAU,OAAAf,cAAA,SAAAkf,UACA,IAAAK,gBAAAL,WAAA7e,QAAAoD,KAAAyb,WAAA7e,QAAAkD,MAAA2b,WAAA7e,QAAA4D,OAAAib,WAAA7e,QAAA2D,OACAhG,KAAAsN,QAAA9C,KAAA+W,gBAAApB,MAAAI,OAAAJ,MAAAK,QACAxgB,KAAAwN,YAAA,IACA,EAEAnL,QAAA0B,OAAA/B,cAAA,WAEA,EAEAK,QAAAmD,UAAAxD,cAAAK,QAAAgE,OAAArE,cAAA,SAAAkf,UACA,GAAAA,SAAAzf,YAAAyf,WAAA7e,QAAAgD,SACA6b,WAAA7e,QAAAa,MAAAlD,KAAAghB,eAAAb,MAAAI,WACAW,WAAA7e,QAAAqD,SAAAsB,UAAAvH,KAAAO,KAAAvB,MAAAc,MAAAS,KAAAqN,WAAArN,KAAAyI,aACAyY,WAAA7e,QAAAc,OAAA+d,WAAA7e,QAAAQ,SAAA7C,KAAAghB,eAAAb,MAAAC,QACA,CAAApgB,KAAAsN,QAAA9C,KAAA2V,MAAAS,OAAA,KAEA,CAAA5gB,KAAAsN,QAAA9C,KAAA2V,MAAAQ,OAAA,CACA3gB,KAAAwN,YAAA,KACA,EAEAnL,QAAAsB,UAAA3B,cAAA,WACA,GAAAhC,KAAAghB,eAAAb,MAAAM,OACA,CAAAzgB,KAAAsN,QAAAiI,KAAA,KAEA,CAAAvV,KAAAsN,QAAA9C,KAAA2V,MAAAM,OAAA,CACAzgB,KAAAwN,YAAA,KACA,EAEAnL,QAAAqC,KAAA1C,cAAA,SAAAkf,UACA,GAAAA,WAAA7e,QAAAmD,UAAA,CACA,IAAAqL,MAAA7Q,KAAAsN,QAAAnT,OAAA,EACA,GAAA6F,KAAAsN,QAAAuD,SAAAsP,MAAAS,OACA,CAAA5gB,KAAAsN,QAAAuD,OAAAsP,MAAAU,UAAA,KAEA,CAAA7gB,KAAAsN,QAAAuD,OAAAsP,MAAAW,KAAA,CACA,CACA9gB,KAAAwN,YAAA,IACA,EAEAnL,QAAA7C,KAAAwC,cAAA,SAAAkf,UACA,IAAAM,QAAA,MACA,GAAAxhB,KAAAoC,QAAA2G,aAAA,GAAAmY,WAAA7e,QAAAe,IAAA,CACA,GAAApD,KAAAlD,QAAA,OAAAkD,KAAAwN,aACAxN,KAAAlD,QAAA,SAAAkD,KAAAmhB,qBACA,CAAAK,QAAA,KACA,CACAxhB,KAAAwN,YAAAgU,OACA,EAqBA,IAAAC,KAAAnV,OAAA3P,UAOA8kB,KAAAC,eAAA,SAAAtE,KAAAuE,SAAAxP,wBACA,GAAAnS,KAAAoC,QAAA2G,aAAA,GAAAqU,KAAApS,OAAA,gBACA,QACA,GAAAhL,KAAAoC,QAAA2G,aAAA,IAAAqU,KAAAxC,UAAAwC,KAAA9B,QAAA8B,KAAAwE,WACA,QACA,IAAArlB,IAAA6gB,KAAA7gB,IACA,IAAAiD,KACA,OAAAjD,IAAAyO,MACA,iBAAAxL,KAAAjD,IAAAiD,KAAA,MACA,cAAAA,KAAAT,OAAAxC,IAAAO,OAAA,MACA,eAEA,IAAAuW,KAAA+J,KAAA/J,KACA,GAAArT,KAAAoC,QAAA2G,aAAA,GACA,GAAAvJ,OAAA,aAAA6T,OAAA,QACA,GAAAsO,SAAAE,MAAA,CACA,GAAA1P,uBAAA,CACA,GAAAA,uBAAAF,YAAA,GACAE,uBAAAF,YAAA1V,IAAAkM,KACA,CACA,MACAzI,KAAAoS,iBAAA7V,IAAAkM,MAAA,qCACA,CACA,CACAkZ,SAAAE,MAAA,IACA,CACA,MACA,CACAriB,KAAA,IAAAA,KACA,IAAAsiB,MAAAH,SAAAniB,MACA,GAAAsiB,MAAA,CACA,IAAAC,aACA,GAAA1O,OAAA,QACA0O,aAAA/hB,KAAAM,QAAAwhB,MAAA5L,MAAA4L,MAAAxS,KAAAwS,MAAA/gB,GACA,MACAghB,aAAAD,MAAA5L,MAAA4L,MAAAzO,KACA,CACA,GAAA0O,aACA,CAAA/hB,KAAAoS,iBAAA7V,IAAAkM,MAAA,4BACA,MACAqZ,MAAAH,SAAAniB,MAAA,CACA0W,KAAA,MACA5G,IAAA,MACAvO,IAAA,MAEA,CACA+gB,MAAAzO,MAAA,IACA,EAiBAoO,KAAArR,gBAAA,SAAA0I,QAAA3G,wBACA,IAAA5F,SAAAvM,KAAAyI,MAAAoC,SAAA7K,KAAA6K,SACA,IAAA6H,KAAA1S,KAAAuY,iBAAAO,QAAA3G,wBACA,GAAAnS,KAAAgL,OAAA3I,QAAAY,MAAA,CACA,IAAAiM,KAAAlP,KAAA6a,YAAAtO,SAAA1B,UACAqE,KAAA8S,YAAA,CAAAtP,MACA,MAAA1S,KAAA+Q,IAAA1O,QAAAY,OAAA,CAAAiM,KAAA8S,YAAAxX,KAAAxK,KAAAuY,iBAAAO,QAAA3G,wBAAA,CACA,OAAAnS,KAAAmT,WAAAjE,KAAA,qBACA,CACA,OAAAwD,IACA,EAKA+O,KAAAlJ,iBAAA,SAAAO,QAAA3G,uBAAA8P,gBACA,GAAAjiB,KAAAgR,aAAA,UACA,GAAAhR,KAAAyO,YAAA,QAAAzO,KAAAkiB,WAAApJ,QAAA,KAGA,CAAA9Y,KAAAwN,YAAA,MACA,CAEA,IAAA2U,uBAAA,MAAAC,gBAAA,EAAAC,kBAAA,EAAAC,gBAAA,EACA,GAAAnQ,uBAAA,CACAiQ,eAAAjQ,uBAAAJ,oBACAsQ,iBAAAlQ,uBAAAL,cACAwQ,eAAAnQ,uBAAAF,YACAE,uBAAAJ,oBAAAI,uBAAAL,eAAA,CACA,MACAK,uBAAA,IAAAP,oBACAuQ,uBAAA,IACA,CAEA,IAAA5V,SAAAvM,KAAAyI,MAAAoC,SAAA7K,KAAA6K,SACA,GAAA7K,KAAAgL,OAAA3I,QAAAU,QAAA/C,KAAAgL,OAAA3I,QAAA7C,KAAA,CACAQ,KAAA2N,iBAAA3N,KAAAyI,MACAzI,KAAA4N,yBAAAkL,UAAA,OACA,CACA,IAAAT,KAAArY,KAAAuiB,sBAAAzJ,QAAA3G,wBACA,GAAA8P,eAAA,CAAA5J,KAAA4J,eAAA/nB,KAAA8F,KAAAqY,KAAA9L,SAAA1B,SAAA,CACA,GAAA7K,KAAAgL,KAAApJ,SAAA,CACA,IAAAsN,KAAAlP,KAAA6a,YAAAtO,SAAA1B,UACAqE,KAAAwP,SAAA1e,KAAAlD,MACA,GAAAkD,KAAAgL,OAAA3I,QAAAwB,GACA,CAAAwU,KAAArY,KAAAmW,aAAAkC,KAAA,MAAAlG,uBAAA,CACA,IAAAgQ,uBAAA,CACAhQ,uBAAAJ,oBAAAI,uBAAAL,cAAAK,uBAAAF,aAAA,CACA,CACA,GAAAE,uBAAAN,iBAAAwG,KAAA5P,MACA,CAAA0J,uBAAAN,iBAAA,EACA,GAAA7R,KAAAgL,OAAA3I,QAAAwB,GACA,CAAA7D,KAAAoW,iBAAAiC,KAAA,KAEA,CAAArY,KAAAgZ,gBAAAX,KAAA,CACAnJ,KAAAmJ,UACArY,KAAAsH,OACA4H,KAAAoJ,MAAAtY,KAAAuY,iBAAAO,SACA,GAAAwJ,gBAAA,GAAAnQ,uBAAAF,YAAAqQ,cAAA,CACA,OAAAtiB,KAAAmT,WAAAjE,KAAA,uBACA,MACA,GAAAiT,uBAAA,CAAAniB,KAAAsS,sBAAAH,uBAAA,MACA,CACA,GAAAiQ,gBAAA,GAAAjQ,uBAAAJ,oBAAAqQ,cAAA,CACA,GAAAC,kBAAA,GAAAlQ,uBAAAL,cAAAuQ,gBAAA,CACA,OAAAhK,IACA,EAIAoJ,KAAAc,sBAAA,SAAAzJ,QAAA3G,wBACA,IAAA5F,SAAAvM,KAAAyI,MAAAoC,SAAA7K,KAAA6K,SACA,IAAA6H,KAAA1S,KAAAwiB,aAAA1J,QAAA3G,wBACA,GAAAnS,KAAAsS,sBAAAH,wBAAA,QAAAO,IAAA,CACA,GAAA1S,KAAA+Q,IAAA1O,QAAAgB,UAAA,CACA,IAAA6L,KAAAlP,KAAA6a,YAAAtO,SAAA1B,UACAqE,KAAAzP,KAAAiT,KACAxD,KAAAwH,WAAA1W,KAAAuY,mBACAvY,KAAA0R,OAAArP,QAAAc,OACA+L,KAAAyH,UAAA3W,KAAAuY,iBAAAO,SACA,OAAA9Y,KAAAmT,WAAAjE,KAAA,wBACA,CACA,OAAAwD,IACA,EAIA+O,KAAAe,aAAA,SAAA1J,QAAA3G,wBACA,IAAA5F,SAAAvM,KAAAyI,MAAAoC,SAAA7K,KAAA6K,SACA,IAAA6H,KAAA1S,KAAAyiB,gBAAAtQ,uBAAA,YAAA2G,SACA,GAAA9Y,KAAAsS,sBAAAH,wBAAA,QAAAO,IAAA,CACA,OAAAA,KAAAjK,QAAA8D,UAAAmG,KAAA1H,OAAA,0BAAA0H,KAAA1S,KAAA0iB,YAAAhQ,KAAAnG,SAAA1B,UAAA,EAAAiO,QACA,EAQA2I,KAAAiB,YAAA,SAAArK,KAAAsK,aAAAC,aAAAC,QAAA/J,SACA,IAAA7W,KAAAjC,KAAAgL,KAAAjJ,MACA,GAAAE,MAAA,QAAA6W,SAAA9Y,KAAAgL,OAAA3I,QAAAuE,KAAA,CACA,GAAA3E,KAAA4gB,QAAA,CACA,IAAAC,QAAA9iB,KAAAgL,OAAA3I,QAAA2B,WAAAhE,KAAAgL,OAAA3I,QAAA4B,WACA,IAAAY,SAAA7E,KAAAgL,OAAA3I,QAAAwC,SACA,GAAAA,SAAA,CAGA5C,KAAAI,QAAA4B,WAAAlC,KACA,CACA,IAAAghB,GAAA/iB,KAAAlD,MACAkD,KAAAsH,OACA,IAAAiF,SAAAvM,KAAAyI,MAAAoC,SAAA7K,KAAA6K,SACA,IAAAyN,MAAAtY,KAAA0iB,YAAA1iB,KAAAyiB,gBAAA,iBAAA3J,SAAAvM,SAAA1B,SAAA5I,KAAA6W,SACA,IAAA5J,KAAAlP,KAAAgjB,YAAAL,aAAAC,aAAAvK,KAAAC,MAAAyK,GAAAD,SAAAje,UACA,GAAAie,SAAA9iB,KAAAgL,OAAA3I,QAAAwC,qBAAA7E,KAAAgL,OAAA3I,QAAA2B,WAAAhE,KAAAgL,OAAA3I,QAAA4B,YAAA,CACAjE,KAAAoS,iBAAApS,KAAAyI,MAAA,2FACA,CACA,OAAAzI,KAAA0iB,YAAAxT,KAAAyT,aAAAC,aAAAC,QAAA/J,QACA,CACA,CACA,OAAAT,IACA,EAEAoJ,KAAAuB,YAAA,SAAAzW,SAAA1B,SAAAwN,KAAAC,MAAAyK,GAAAD,SACA,GAAAxK,MAAAtN,OAAA,qBAAAhL,KAAA2R,MAAA2G,MAAA7P,MAAA,iEACA,IAAAyG,KAAAlP,KAAA6a,YAAAtO,SAAA1B,UACAqE,KAAAmJ,UACAnJ,KAAAwP,SAAAqE,GACA7T,KAAAoJ,YACA,OAAAtY,KAAAmT,WAAAjE,KAAA4T,QAAA,uCACA,EAIArB,KAAAgB,gBAAA,SAAAtQ,uBAAA8Q,SAAAlf,OAAA+U,SACA,IAAAvM,SAAAvM,KAAAyI,MAAAoC,SAAA7K,KAAA6K,SAAA6H,KACA,GAAA1S,KAAAgR,aAAA,UAAAhR,KAAA2O,SAAA,CACA+D,KAAA1S,KAAAkjB,WAAApK,SACAmK,SAAA,IACA,SAAAjjB,KAAAgL,KAAAnJ,OAAA,CACA,IAAAqN,KAAAlP,KAAAmP,YAAA+I,OAAAlY,KAAAgL,OAAA3I,QAAA0B,OACAmL,KAAAwP,SAAA1e,KAAAlD,MACAoS,KAAArN,OAAA,KACA7B,KAAAsH,OACA4H,KAAA0H,SAAA5W,KAAAyiB,gBAAA,UAAAvK,OAAAY,SACA9Y,KAAAsS,sBAAAH,uBAAA,MACA,GAAA+F,OAAA,CAAAlY,KAAAgZ,gBAAA9J,KAAA0H,SAAA,MACA,GAAA5W,KAAAM,QAAA4O,KAAAwP,WAAA,UACAxP,KAAA0H,SAAA5L,OAAA,aACA,CAAAhL,KAAAoS,iBAAAlD,KAAAzG,MAAA,+CACA,GAAAyG,KAAAwP,WAAA,UAAAyE,qBAAAjU,KAAA0H,UACA,CAAA5W,KAAAoS,iBAAAlD,KAAAzG,MAAA,yCACA,CAAAwa,SAAA,KACAvQ,KAAA1S,KAAAmT,WAAAjE,KAAAgJ,OAAA,qCACA,UAAA+K,UAAAjjB,KAAAgL,OAAA3I,QAAAI,UAAA,CACA,GAAAqW,SAAA9Y,KAAAsO,iBAAAnU,SAAA,GAAA6F,KAAAmR,YAAA,CACAuB,KAAA1S,KAAAob,oBAEA,GAAApb,KAAAgL,OAAA3I,QAAAuE,IAAA,CAAA5G,KAAAmR,YAAA,CACA,MACAuB,KAAA1S,KAAA0b,oBAAAvJ,uBAAA2G,SACA,GAAA9Y,KAAAsS,sBAAAH,wBAAA,QAAAO,IAAA,CACA,MAAA1S,KAAAgL,KAAAlJ,UAAA9B,KAAAoR,qBAAA,CACA,IAAAgS,OAAApjB,KAAA6a,YAAAtO,SAAA1B,UACAuY,OAAA1E,SAAA1e,KAAAlD,MACAsmB,OAAAvhB,OAAA,MACAuhB,OAAAxM,SAAAlE,KACA1S,KAAAgZ,gBAAAtG,MACA1S,KAAAsH,OACAoL,KAAA1S,KAAAmT,WAAAiQ,OAAA,mBACA,CACA,CAEA,IAAArf,QAAA/D,KAAA+Q,IAAA1O,QAAAuC,UAAA,CACA,GAAAqe,SACA,CAAAjjB,KAAAmR,WAAAnR,KAAAoN,aAAA,KAEA,QAAApN,KAAAgjB,YAAAzW,SAAA1B,SAAA6H,KAAA1S,KAAAyiB,gBAAA,iBAAA3J,SAAA,YACA,MACA,OAAApG,IACA,CACA,EAEA,SAAAyQ,qBAAAjU,MACA,OACAA,KAAAlE,OAAA,oBAAAkE,KAAAmU,SAAArY,OAAA,qBACAkE,KAAAlE,OAAA,mBAAAmY,qBAAAjU,KAAAyD,WAEA,CAIA8O,KAAA/F,oBAAA,SAAAvJ,uBAAA2G,SACA,IAAAvM,SAAAvM,KAAAyI,MAAAoC,SAAA7K,KAAA6K,SACA,IAAA6H,KAAA1S,KAAAmc,cAAAhK,uBAAA2G,SACA,GAAApG,KAAA1H,OAAA,2BAAAhL,KAAAvB,MAAAc,MAAAS,KAAAoN,aAAApN,KAAAqN,cAAA,IACA,QAAAqF,IAAA,CACA,IAAA4Q,OAAAtjB,KAAAujB,gBAAA7Q,KAAAnG,SAAA1B,SAAA,MAAAiO,SACA,GAAA3G,wBAAAmR,OAAAtY,OAAA,oBACA,GAAAmH,uBAAAJ,qBAAAuR,OAAA7a,MAAA,CAAA0J,uBAAAJ,qBAAA,EACA,GAAAI,uBAAAH,mBAAAsR,OAAA7a,MAAA,CAAA0J,uBAAAH,mBAAA,EACA,GAAAG,uBAAAL,eAAAwR,OAAA7a,MAAA,CAAA0J,uBAAAL,eAAA,EACA,CACA,OAAAwR,MACA,EAEA7B,KAAA8B,gBAAA,SAAAC,KAAAjX,SAAA1B,SAAA4Y,QAAA3K,SACA,IAAA4K,gBAAA1jB,KAAAoC,QAAA2G,aAAA,GAAAya,KAAAxY,OAAA,cAAAwY,KAAAhkB,OAAA,SACAQ,KAAAqN,aAAAmW,KAAAnc,MAAArH,KAAAoR,sBAAAoS,KAAAnc,IAAAmc,KAAA/a,QAAA,GACAzI,KAAA2N,mBAAA6V,KAAA/a,MACA,IAAAkb,gBAAA,MAEA,YACA,IAAA3J,QAAAha,KAAA4jB,eAAAJ,KAAAjX,SAAA1B,SAAA4Y,QAAAC,gBAAAC,gBAAA7K,SAEA,GAAAkB,QAAA6J,SAAA,CAAAF,gBAAA,KACA,GAAA3J,UAAAwJ,MAAAxJ,QAAAhP,OAAA,2BACA,GAAA2Y,gBAAA,CACA,IAAAG,UAAA9jB,KAAA6a,YAAAtO,SAAA1B,UACAiZ,UAAAnR,WAAAqH,QACAA,QAAAha,KAAAmT,WAAA2Q,UAAA,kBACA,CACA,OAAA9J,OACA,CAEAwJ,KAAAxJ,OACA,CACA,EAEAyH,KAAAsC,sBAAA,WACA,OAAA/jB,KAAAoR,sBAAApR,KAAA+Q,IAAA1O,QAAAkB,MACA,EAEAke,KAAAuC,yBAAA,SAAAzX,SAAA1B,SAAA8T,SAAA7F,SACA,OAAA9Y,KAAAikB,qBAAAjkB,KAAA6a,YAAAtO,SAAA1B,UAAA8T,SAAA,KAAA7F,QACA,EAEA2I,KAAAmC,eAAA,SAAAJ,KAAAjX,SAAA1B,SAAA4Y,QAAAC,gBAAAC,gBAAA7K,SACA,IAAAoL,kBAAAlkB,KAAAoC,QAAA2G,aAAA,GACA,IAAA8a,SAAAK,mBAAAlkB,KAAA+Q,IAAA1O,QAAAiB,aACA,GAAAmgB,SAAAI,SAAA,CAAA7jB,KAAA2R,MAAA3R,KAAAoN,aAAA,oEAEA,IAAAwN,SAAA5a,KAAA+Q,IAAA1O,QAAAM,UACA,GAAAiY,UAAAiJ,UAAA7jB,KAAAgL,OAAA3I,QAAAU,QAAA/C,KAAAgL,OAAA3I,QAAAsB,WAAA3D,KAAA+Q,IAAA1O,QAAAe,KAAA,CACA,IAAA8L,KAAAlP,KAAA6a,YAAAtO,SAAA1B,UACAqE,KAAAyI,OAAA6L,KACA,GAAA5I,SAAA,CACA1L,KAAAmU,SAAArjB,KAAAoQ,kBACApQ,KAAA0R,OAAArP,QAAAO,SACA,SAAA5C,KAAAgL,OAAA3I,QAAAI,WAAA+gB,KAAAxY,OAAA,SACAkE,KAAAmU,SAAArjB,KAAAob,mBACA,MACAlM,KAAAmU,SAAArjB,KAAAqV,WAAArV,KAAAoC,QAAA+G,gBAAA,QACA,CACA+F,KAAA0L,oBACA,GAAAsJ,kBAAA,CACAhV,KAAA2U,iBACA,CACAL,KAAAxjB,KAAAmT,WAAAjE,KAAA,mBACA,UAAAuU,SAAAzjB,KAAA+Q,IAAA1O,QAAAU,QAAA,CACA,IAAAoP,uBAAA,IAAAP,oBAAAqH,YAAAjZ,KAAA6N,SAAAqL,YAAAlZ,KAAA8N,SAAAqL,iBAAAnZ,KAAA+N,cACA/N,KAAA6N,SAAA,EACA7N,KAAA8N,SAAA,EACA9N,KAAA+N,cAAA,EACA,IAAA4Q,SAAA3e,KAAAmkB,cAAA9hB,QAAAW,OAAAhD,KAAAoC,QAAA2G,aAAA,QAAAoJ,wBACA,GAAAuR,kBAAAG,UAAA7jB,KAAA+jB,wBAAA,CACA/jB,KAAAkS,mBAAAC,uBAAA,OACAnS,KAAAwS,iCACA,GAAAxS,KAAA+N,cAAA,EACA,CAAA/N,KAAA2R,MAAA3R,KAAA+N,cAAA,6DACA/N,KAAA6N,SAAAoL,YACAjZ,KAAA8N,SAAAoL,YACAlZ,KAAA+N,cAAAoL,iBACA,OAAAnZ,KAAAgkB,yBAAAzX,SAAA1B,SAAA8T,SAAA7F,QACA,CACA9Y,KAAAsS,sBAAAH,uBAAA,MACAnS,KAAA6N,SAAAoL,aAAAjZ,KAAA6N,SACA7N,KAAA8N,SAAAoL,aAAAlZ,KAAA8N,SACA9N,KAAA+N,cAAAoL,kBAAAnZ,KAAA+N,cACA,IAAAqV,OAAApjB,KAAA6a,YAAAtO,SAAA1B,UACAuY,OAAAgB,OAAAZ,KACAJ,OAAApT,UAAA2O,SACA,GAAAuF,kBAAA,CACAd,OAAAS,iBACA,CACAL,KAAAxjB,KAAAmT,WAAAiQ,OAAA,iBACA,SAAApjB,KAAAgL,OAAA3I,QAAAsB,UAAA,CACA,GAAAkgB,UAAAF,gBAAA,CACA3jB,KAAA2R,MAAA3R,KAAAyI,MAAA,4EACA,CACA,IAAA4b,OAAArkB,KAAA6a,YAAAtO,SAAA1B,UACAwZ,OAAAC,IAAAd,KACAa,OAAAE,MAAAvkB,KAAAwkB,cAAA,CAAAC,SAAA,OACAjB,KAAAxjB,KAAAmT,WAAAkR,OAAA,2BACA,CACA,OAAAb,IACA,EAOA/B,KAAAtF,cAAA,SAAAhK,uBAAA2G,QAAA4L,QAGA,GAAA1kB,KAAAgL,OAAA3I,QAAAsC,MAAA,CAAA3E,KAAA2kB,YAAA,CAEA,IAAAzV,KAAA0V,WAAA5kB,KAAA2N,mBAAA3N,KAAAyI,MACA,OAAAzI,KAAAgL,MACA,KAAA3I,QAAA+D,OACA,IAAApG,KAAA4O,WACA,CAAA5O,KAAA2R,MAAA3R,KAAAyI,MAAA,oCACAyG,KAAAlP,KAAAmP,YACAnP,KAAAsH,OACA,GAAAtH,KAAAgL,OAAA3I,QAAAU,SAAA/C,KAAA6O,iBACA,CAAA7O,KAAA2R,MAAAzC,KAAAzG,MAAA,kDAOA,GAAAzI,KAAAgL,OAAA3I,QAAAe,KAAApD,KAAAgL,OAAA3I,QAAAM,UAAA3C,KAAAgL,OAAA3I,QAAAU,OACA,CAAA/C,KAAAmR,YAAA,CACA,OAAAnR,KAAAmT,WAAAjE,KAAA,SAEA,KAAA7M,QAAA8D,MACA+I,KAAAlP,KAAAmP,YACAnP,KAAAsH,OACA,OAAAtH,KAAAmT,WAAAjE,KAAA,kBAEA,KAAA7M,QAAA7C,KACA,IAAA+M,SAAAvM,KAAAyI,MAAAoC,SAAA7K,KAAA6K,SAAA+B,YAAA5M,KAAA4M,YACA,IAAAwL,GAAApY,KAAAqV,WAAA,OACA,GAAArV,KAAAoC,QAAA2G,aAAA,IAAA6D,aAAAwL,GAAA5Y,OAAA,UAAAQ,KAAAoR,sBAAApR,KAAA+Q,IAAA1O,QAAAmD,WAAA,CACAxF,KAAAohB,gBAAAjB,MAAAS,QACA,OAAA5gB,KAAAuW,cAAAvW,KAAA6a,YAAAtO,SAAA1B,UAAA,aAAAiO,QACA,CACA,GAAA8L,aAAA5kB,KAAAoR,qBAAA,CACA,GAAApR,KAAA+Q,IAAA1O,QAAAkB,OACA,QAAAvD,KAAAikB,qBAAAjkB,KAAA6a,YAAAtO,SAAA1B,UAAA,CAAAuN,IAAA,MAAAU,QAAA,CACA,GAAA9Y,KAAAoC,QAAA2G,aAAA,GAAAqP,GAAA5Y,OAAA,SAAAQ,KAAAgL,OAAA3I,QAAA7C,OAAAoN,eACA5M,KAAA4N,0BAAA5N,KAAAlD,QAAA,MAAAkD,KAAA4M,aAAA,CACAwL,GAAApY,KAAAqV,WAAA,OACA,GAAArV,KAAAoR,uBAAApR,KAAA+Q,IAAA1O,QAAAkB,OACA,CAAAvD,KAAAmR,YAAA,CACA,OAAAnR,KAAAikB,qBAAAjkB,KAAA6a,YAAAtO,SAAA1B,UAAA,CAAAuN,IAAA,KAAAU,QACA,CACA,CACA,OAAAV,GAEA,KAAA/V,QAAAE,OACA,IAAAzF,MAAAkD,KAAAlD,MACAoS,KAAAlP,KAAAke,aAAAphB,aACAoS,KAAA2V,MAAA,CAAAC,QAAAhoB,MAAAgoB,QAAAtV,MAAA1S,MAAA0S,OACA,OAAAN,KAEA,KAAA7M,QAAAC,IAAA,KAAAD,QAAAG,OACA,OAAAxC,KAAAke,aAAAle,KAAAlD,OAEA,KAAAuF,QAAAoE,MAAA,KAAApE,QAAAqE,MAAA,KAAArE,QAAAsE,OACAuI,KAAAlP,KAAAmP,YACAD,KAAApS,MAAAkD,KAAAgL,OAAA3I,QAAAoE,MAAA,KAAAzG,KAAAgL,OAAA3I,QAAAqE,MACAwI,KAAAoP,IAAAte,KAAAgL,KAAAxJ,QACAxB,KAAAsH,OACA,OAAAtH,KAAAmT,WAAAjE,KAAA,WAEA,KAAA7M,QAAAU,OACA,IAAA0F,MAAAzI,KAAAyI,MAAAiK,KAAA1S,KAAA+kB,mCAAAH,WAAA9L,SACA,GAAA3G,uBAAA,CACA,GAAAA,uBAAAJ,oBAAA,IAAA/R,KAAAyS,qBAAAC,MACA,CAAAP,uBAAAJ,oBAAAtJ,KAAA,CACA,GAAA0J,uBAAAH,kBAAA,EACA,CAAAG,uBAAAH,kBAAAvJ,KAAA,CACA,CACA,OAAAiK,KAEA,KAAArQ,QAAAM,SACAuM,KAAAlP,KAAAmP,YACAnP,KAAAsH,OACA4H,KAAAoO,SAAAtd,KAAAmkB,cAAA9hB,QAAAO,SAAA,UAAAuP,wBACA,OAAAnS,KAAAmT,WAAAjE,KAAA,mBAEA,KAAA7M,QAAAQ,OACA7C,KAAAohB,gBAAAjB,MAAAE,QACA,OAAArgB,KAAA+e,SAAA,MAAA5M,wBAEA,KAAA9P,QAAAmD,UACA0J,KAAAlP,KAAAmP,YACAnP,KAAAsH,OACA,OAAAtH,KAAAuW,cAAArH,KAAA,GAEA,KAAA7M,QAAAgE,OACA,OAAArG,KAAAoU,WAAApU,KAAAmP,YAAA,OAEA,KAAA9M,QAAA6D,KACA,OAAAlG,KAAAglB,WAEA,KAAA3iB,QAAAsB,UACA,OAAA3D,KAAAwkB,gBAEA,KAAAniB,QAAAmE,QACA,GAAAxG,KAAAoC,QAAA2G,aAAA,IACA,OAAA/I,KAAAilB,gBAAAP,OACA,MACA,OAAA1kB,KAAAmR,YACA,CAEA,QACA,OAAAnR,KAAAklB,uBAEA,EAEAzD,KAAAyD,qBAAA,WACAllB,KAAAmR,YACA,EAEAsQ,KAAAwD,gBAAA,SAAAP,QACA,IAAAxV,KAAAlP,KAAAmP,YAIA,GAAAnP,KAAA4M,YAAA,CAAA5M,KAAAoS,iBAAApS,KAAAyI,MAAA,qCACA,IAAA0c,KAAAnlB,KAAAqV,WAAA,MAEA,GAAArV,KAAAgL,OAAA3I,QAAAU,SAAA2hB,OAAA,CACA,OAAA1kB,KAAAolB,mBAAAlW,KACA,SAAAlP,KAAAgL,OAAA3I,QAAAe,IAAA,CACA8L,KAAAiW,UACA,OAAAnlB,KAAAqlB,gBAAAnW,KACA,MACAlP,KAAAmR,YACA,CACA,EAEAsQ,KAAA2D,mBAAA,SAAAlW,MACAlP,KAAAsH,OAGA4H,KAAAhI,OAAAlH,KAAAuY,mBAGA,IAAAvY,KAAA+Q,IAAA1O,QAAAW,QAAA,CACA,IAAAsiB,SAAAtlB,KAAAyI,MACA,GAAAzI,KAAA+Q,IAAA1O,QAAAY,QAAAjD,KAAA+Q,IAAA1O,QAAAW,QAAA,CACAhD,KAAAoS,iBAAAkT,SAAA,4CACA,MACAtlB,KAAAmR,WAAAmU,SACA,CACA,CAEA,OAAAtlB,KAAAmT,WAAAjE,KAAA,mBACA,EAEAuS,KAAA4D,gBAAA,SAAAnW,MACAlP,KAAAsH,OAEA,IAAAsF,YAAA5M,KAAA4M,YACAsC,KAAAmU,SAAArjB,KAAAqV,WAAA,MAEA,GAAAnG,KAAAmU,SAAA7jB,OAAA,OACA,CAAAQ,KAAAoS,iBAAAlD,KAAAmU,SAAA5a,MAAA,4DACA,GAAAmE,YACA,CAAA5M,KAAAoS,iBAAAlD,KAAAzG,MAAA,qDACA,GAAAzI,KAAAoC,QAAA4G,aAAA,WAAAhJ,KAAAoC,QAAAiH,4BACA,CAAArJ,KAAAoS,iBAAAlD,KAAAzG,MAAA,6CAEA,OAAAzI,KAAAmT,WAAAjE,KAAA,eACA,EAEAuS,KAAAvD,aAAA,SAAAphB,OACA,IAAAoS,KAAAlP,KAAAmP,YACAD,KAAApS,YACAoS,KAAAoP,IAAAte,KAAAvB,MAAAc,MAAAS,KAAAyI,MAAAzI,KAAAqH,KACA,GAAA6H,KAAAoP,IAAA/W,WAAA2H,KAAAoP,IAAAnkB,OAAA,UAAA+U,KAAAqW,OAAArW,KAAAoP,IAAA/e,MAAA,MAAAyI,QAAA,SACAhI,KAAAsH,OACA,OAAAtH,KAAAmT,WAAAjE,KAAA,UACA,EAEAuS,KAAAjM,qBAAA,WACAxV,KAAA0R,OAAArP,QAAAU,QACA,IAAAyiB,IAAAxlB,KAAAoQ,kBACApQ,KAAA0R,OAAArP,QAAAW,QACA,OAAAwiB,GACA,EAEA/D,KAAAgE,iBAAA,SAAA9G,UACA,OAAA3e,KAAAoR,oBACA,EAEAqQ,KAAAsD,mCAAA,SAAAH,WAAA9L,SACA,IAAAvM,SAAAvM,KAAAyI,MAAAoC,SAAA7K,KAAA6K,SAAA2a,IAAAtG,mBAAAlf,KAAAoC,QAAA2G,aAAA,EACA,GAAA/I,KAAAoC,QAAA2G,aAAA,GACA/I,KAAAsH,OAEA,IAAAoe,cAAA1lB,KAAAyI,MAAAkd,cAAA3lB,KAAA6K,SACA,IAAA8T,SAAA,GAAAhB,MAAA,KAAAiI,YAAA,MACA,IAAAzT,uBAAA,IAAAP,oBAAAqH,YAAAjZ,KAAA6N,SAAAqL,YAAAlZ,KAAA8N,SAAA+X,YACA7lB,KAAA6N,SAAA,EACA7N,KAAA8N,SAAA,EAEA,MAAA9N,KAAAgL,OAAA3I,QAAAW,OAAA,CACA2a,YAAA,MAAA3d,KAAA0R,OAAArP,QAAAY,OACA,GAAAic,oBAAAlf,KAAAuR,mBAAAlP,QAAAW,OAAA,OACA4iB,YAAA,KACA,KACA,SAAA5lB,KAAAgL,OAAA3I,QAAAqB,SAAA,CACAmiB,YAAA7lB,KAAAyI,MACAkW,SAAAnU,KAAAxK,KAAA8lB,eAAA9lB,KAAA8e,qBACA,GAAA9e,KAAAgL,OAAA3I,QAAAY,MAAA,CACAjD,KAAAoS,iBACApS,KAAAyI,MACA,gDAEA,CACA,KACA,MACAkW,SAAAnU,KAAAxK,KAAAuY,iBAAA,MAAApG,uBAAAnS,KAAA8lB,gBACA,CACA,CACA,IAAAC,YAAA/lB,KAAAqN,WAAA2Y,YAAAhmB,KAAAkN,cACAlN,KAAA0R,OAAArP,QAAAW,QAEA,GAAA4hB,YAAA5kB,KAAAylB,iBAAA9G,WAAA3e,KAAA+Q,IAAA1O,QAAAkB,OAAA,CACAvD,KAAAkS,mBAAAC,uBAAA,OACAnS,KAAAwS,iCACAxS,KAAA6N,SAAAoL,YACAjZ,KAAA8N,SAAAoL,YACA,OAAAlZ,KAAAimB,oBAAA1Z,SAAA1B,SAAA8T,SAAA7F,QACA,CAEA,IAAA6F,SAAAxkB,QAAAyrB,YAAA,CAAA5lB,KAAAmR,WAAAnR,KAAAoN,aAAA,CACA,GAAAyY,YAAA,CAAA7lB,KAAAmR,WAAA0U,YAAA,CACA7lB,KAAAsS,sBAAAH,uBAAA,MACAnS,KAAA6N,SAAAoL,aAAAjZ,KAAA6N,SACA7N,KAAA8N,SAAAoL,aAAAlZ,KAAA8N,SAEA,GAAA6Q,SAAAxkB,OAAA,GACAqrB,IAAAxlB,KAAA6a,YAAA6K,cAAAC,eACAH,IAAAxD,YAAArD,SACA3e,KAAAkmB,aAAAV,IAAA,qBAAAO,YAAAC,YACA,MACAR,IAAA7G,SAAA,EACA,CACA,MACA6G,IAAAxlB,KAAAwV,sBACA,CAEA,GAAAxV,KAAAoC,QAAA2H,eAAA,CACA,IAAAoc,IAAAnmB,KAAA6a,YAAAtO,SAAA1B,UACAsb,IAAAxT,WAAA6S,IACA,OAAAxlB,KAAAmT,WAAAgT,IAAA,0BACA,MACA,OAAAX,GACA,CACA,EAEA/D,KAAAqE,eAAA,SAAAM,MACA,OAAAA,IACA,EAEA3E,KAAAwE,oBAAA,SAAA1Z,SAAA1B,SAAA8T,SAAA7F,SACA,OAAA9Y,KAAAikB,qBAAAjkB,KAAA6a,YAAAtO,SAAA1B,UAAA8T,SAAA,MAAA7F,QACA,EAQA,IAAAuN,MAAA,GAEA5E,KAAAuD,SAAA,WACA,GAAAhlB,KAAA4M,YAAA,CAAA5M,KAAAoS,iBAAApS,KAAAyI,MAAA,kCACA,IAAAyG,KAAAlP,KAAAmP,YACA,IAAAgW,KAAAnlB,KAAAqV,WAAA,MACA,GAAArV,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAA+Q,IAAA1O,QAAAe,KAAA,CACA8L,KAAAiW,UACA,IAAAvY,YAAA5M,KAAA4M,YACAsC,KAAAmU,SAAArjB,KAAAqV,WAAA,MACA,GAAAnG,KAAAmU,SAAA7jB,OAAA,SACA,CAAAQ,KAAAoS,iBAAAlD,KAAAmU,SAAA5a,MAAA,wDACA,GAAAmE,YACA,CAAA5M,KAAAoS,iBAAAlD,KAAAzG,MAAA,oDACA,IAAAzI,KAAA+O,kBACA,CAAA/O,KAAAoS,iBAAAlD,KAAAzG,MAAA,qEACA,OAAAzI,KAAAmT,WAAAjE,KAAA,eACA,CACA,IAAA3C,SAAAvM,KAAAyI,MAAAoC,SAAA7K,KAAA6K,SACAqE,KAAAkV,OAAApkB,KAAAujB,gBAAAvjB,KAAAmc,cAAA,iBAAA5P,SAAA1B,SAAA,YACA,GAAA7K,KAAA+Q,IAAA1O,QAAAU,QAAA,CAAAmM,KAAAc,UAAAhQ,KAAAmkB,cAAA9hB,QAAAW,OAAAhD,KAAAoC,QAAA2G,aAAA,aACA,CAAAmG,KAAAc,UAAAqW,KAAA,CACA,OAAArmB,KAAAmT,WAAAjE,KAAA,gBACA,EAIAuS,KAAA6E,qBAAA,SAAA5e,KACA,IAAA+c,SAAA/c,IAAA+c,SAEA,IAAAjF,KAAAxf,KAAAmP,YACA,GAAAnP,KAAAgL,OAAA3I,QAAAoB,gBAAA,CACA,IAAAghB,SAAA,CACAzkB,KAAAoS,iBAAApS,KAAAyI,MAAA,mDACA,CACA+W,KAAA1iB,MAAA,CACAwhB,IAAAte,KAAAlD,MACAypB,OAAA,KAEA,MACA/G,KAAA1iB,MAAA,CACAwhB,IAAAte,KAAAvB,MAAAc,MAAAS,KAAAyI,MAAAzI,KAAAqH,KAAAW,QAAA,eACAue,OAAAvmB,KAAAlD,MAEA,CACAkD,KAAAsH,OACAkY,KAAAgH,KAAAxmB,KAAAgL,OAAA3I,QAAAsB,UACA,OAAA3D,KAAAmT,WAAAqM,KAAA,kBACA,EAEAiC,KAAA+C,cAAA,SAAA9c,KACA,GAAAA,WAAA,EAAAA,IAAA,GACA,IAAA+c,SAAA/c,IAAA+c,SAAA,GAAAA,gBAAA,EAAAA,SAAA,MAEA,IAAAvV,KAAAlP,KAAAmP,YACAnP,KAAAsH,OACA4H,KAAA8S,YAAA,GACA,IAAAyE,OAAAzmB,KAAAsmB,qBAAA,CAAA7B,oBACAvV,KAAAwX,OAAA,CAAAD,QACA,OAAAA,OAAAD,KAAA,CACA,GAAAxmB,KAAAgL,OAAA3I,QAAAK,IAAA,CAAA1C,KAAA2R,MAAA3R,KAAAgB,IAAA,iCACAhB,KAAA0R,OAAArP,QAAAuB,cACAsL,KAAA8S,YAAAxX,KAAAxK,KAAAoQ,mBACApQ,KAAA0R,OAAArP,QAAAS,QACAoM,KAAAwX,OAAAlc,KAAAic,OAAAzmB,KAAAsmB,qBAAA,CAAA7B,oBACA,CACAzkB,KAAAsH,OACA,OAAAtH,KAAAmT,WAAAjE,KAAA,kBACA,EAEAuS,KAAAkF,YAAA,SAAAvJ,MACA,OAAAA,KAAAxC,UAAAwC,KAAA7gB,IAAAyO,OAAA,cAAAoS,KAAA7gB,IAAAiD,OAAA,UACAQ,KAAAgL,OAAA3I,QAAA7C,MAAAQ,KAAAgL,OAAA3I,QAAAC,KAAAtC,KAAAgL,OAAA3I,QAAAG,QAAAxC,KAAAgL,OAAA3I,QAAAM,UAAA3C,KAAAgL,KAAAxJ,SAAAxB,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAAgL,OAAA3I,QAAAqC,QACAsC,UAAAvH,KAAAO,KAAAvB,MAAAc,MAAAS,KAAAqN,WAAArN,KAAAyI,OACA,EAIAgZ,KAAA1C,SAAA,SAAA6H,UAAAzU,wBACA,IAAAjD,KAAAlP,KAAAmP,YAAAwO,MAAA,KAAAgE,SAAA,GACAzS,KAAAiO,WAAA,GACAnd,KAAAsH,OACA,OAAAtH,KAAA+Q,IAAA1O,QAAAS,QAAA,CACA,IAAA6a,MAAA,CACA3d,KAAA0R,OAAArP,QAAAY,OACA,GAAAjD,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAAuR,mBAAAlP,QAAAS,QAAA,OACA,MAAA6a,MAAA,MAEA,IAAAP,KAAApd,KAAA6mB,cAAAD,UAAAzU,wBACA,IAAAyU,UAAA,CAAA5mB,KAAA0hB,eAAAtE,KAAAuE,SAAAxP,uBAAA,CACAjD,KAAAiO,WAAA3S,KAAA4S,KACA,CACA,OAAApd,KAAAmT,WAAAjE,KAAA0X,UAAA,mCACA,EAEAnF,KAAAoF,cAAA,SAAAD,UAAAzU,wBACA,IAAAiL,KAAApd,KAAAmP,YAAAmL,YAAAjE,QAAA9J,SAAA1B,SACA,GAAA7K,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAA+Q,IAAA1O,QAAAqB,UAAA,CACA,GAAAkjB,UAAA,CACAxJ,KAAAxG,SAAA5W,KAAAqV,WAAA,OACA,GAAArV,KAAAgL,OAAA3I,QAAAY,MAAA,CACAjD,KAAAoS,iBAAApS,KAAAyI,MAAA,gDACA,CACA,OAAAzI,KAAAmT,WAAAiK,KAAA,cACA,CAEAA,KAAAxG,SAAA5W,KAAAuY,iBAAA,MAAApG,wBAEA,GAAAnS,KAAAgL,OAAA3I,QAAAY,OAAAkP,+CAAAL,cAAA,GACAK,uBAAAL,cAAA9R,KAAAyI,KACA,CAEA,OAAAzI,KAAAmT,WAAAiK,KAAA,gBACA,CACA,GAAApd,KAAAoC,QAAA2G,aAAA,GACAqU,KAAA9B,OAAA,MACA8B,KAAAwE,UAAA,MACA,GAAAgF,WAAAzU,uBAAA,CACA5F,SAAAvM,KAAAyI,MACAoC,SAAA7K,KAAA6K,QACA,CACA,IAAA+b,UACA,CAAAtM,YAAAta,KAAA+Q,IAAA1O,QAAAqC,KAAA,CACA,CACA,IAAAkI,YAAA5M,KAAA4M,YACA5M,KAAAqb,kBAAA+B,MACA,IAAAwJ,YAAAha,aAAA5M,KAAAoC,QAAA2G,aAAA,IAAAuR,aAAAta,KAAA2mB,YAAAvJ,MAAA,CACA/G,QAAA,KACAiE,YAAAta,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAA+Q,IAAA1O,QAAAqC,MACA1E,KAAAqb,kBAAA+B,KACA,MACA/G,QAAA,KACA,CACArW,KAAA8mB,mBAAA1J,KAAAwJ,UAAAtM,YAAAjE,QAAA9J,SAAA1B,SAAAsH,uBAAAvF,aACA,OAAA5M,KAAAmT,WAAAiK,KAAA,WACA,EAEAqE,KAAAsF,kBAAA,SAAA3J,MACAA,KAAA/J,KAAA+J,KAAA7gB,IAAAiD,KACAQ,KAAAqb,kBAAA+B,MACAA,KAAAtgB,MAAAkD,KAAAub,YAAA,OACA,IAAAyL,WAAA5J,KAAA/J,OAAA,UACA,GAAA+J,KAAAtgB,MAAAwc,OAAAnf,SAAA6sB,WAAA,CACA,IAAAve,MAAA2U,KAAAtgB,MAAA2L,MACA,GAAA2U,KAAA/J,OAAA,MACA,CAAArT,KAAAoS,iBAAA3J,MAAA,oCAEA,CAAAzI,KAAAoS,iBAAA3J,MAAA,wCACA,MACA,GAAA2U,KAAA/J,OAAA,OAAA+J,KAAAtgB,MAAAwc,OAAA,GAAAtO,OAAA,cACA,CAAAhL,KAAAoS,iBAAAgL,KAAAtgB,MAAAwc,OAAA,GAAA7Q,MAAA,iCACA,CACA,EAEAgZ,KAAAqF,mBAAA,SAAA1J,KAAAwJ,UAAAtM,YAAAjE,QAAA9J,SAAA1B,SAAAsH,uBAAAvF,aACA,IAAA0N,aAAAjE,UAAArW,KAAAgL,OAAA3I,QAAAc,MACA,CAAAnD,KAAAmR,YAAA,CAEA,GAAAnR,KAAA+Q,IAAA1O,QAAAc,OAAA,CACAia,KAAAtgB,MAAA8pB,UAAA5mB,KAAAyf,kBAAAzf,KAAAyI,MAAAzI,KAAA6K,UAAA7K,KAAAuY,iBAAA,MAAApG,wBACAiL,KAAA/J,KAAA,MACA,SAAArT,KAAAoC,QAAA2G,aAAA,GAAA/I,KAAAgL,OAAA3I,QAAAU,OAAA,CACA,GAAA6jB,UAAA,CAAA5mB,KAAAmR,YAAA,CACAiM,KAAA/J,KAAA,OACA+J,KAAA9B,OAAA,KACA8B,KAAAtgB,MAAAkD,KAAAub,YAAAjB,YAAAjE,QACA,UAAAuQ,YAAAha,aACA5M,KAAAoC,QAAA2G,aAAA,IAAAqU,KAAAxC,UAAAwC,KAAA7gB,IAAAyO,OAAA,eACAoS,KAAA7gB,IAAAiD,OAAA,OAAA4d,KAAA7gB,IAAAiD,OAAA,SACAQ,KAAAgL,OAAA3I,QAAAY,OAAAjD,KAAAgL,OAAA3I,QAAAS,QAAA9C,KAAAgL,OAAA3I,QAAAwB,IAAA,CACA,GAAAyW,aAAAjE,QAAA,CAAArW,KAAAmR,YAAA,CACAnR,KAAA+mB,kBAAA3J,KACA,SAAApd,KAAAoC,QAAA2G,aAAA,IAAAqU,KAAAxC,UAAAwC,KAAA7gB,IAAAyO,OAAA,cACA,GAAAsP,aAAAjE,QAAA,CAAArW,KAAAmR,YAAA,CACAnR,KAAA4c,gBAAAQ,KAAA7gB,KACA,GAAA6gB,KAAA7gB,IAAAiD,OAAA,UAAAQ,KAAA+N,cACA,CAAA/N,KAAA+N,cAAAxB,QAAA,CACA6Q,KAAA/J,KAAA,OACA,GAAAuT,UAAA,CACAxJ,KAAAtgB,MAAAkD,KAAAyf,kBAAAlT,SAAA1B,SAAA7K,KAAAinB,SAAA7J,KAAA7gB,KACA,SAAAyD,KAAAgL,OAAA3I,QAAAwB,IAAAsO,uBAAA,CACA,GAAAA,uBAAAN,gBAAA,EACA,CAAAM,uBAAAN,gBAAA7R,KAAAyI,KAAA,CACA2U,KAAAtgB,MAAAkD,KAAAyf,kBAAAlT,SAAA1B,SAAA7K,KAAAinB,SAAA7J,KAAA7gB,KACA,MACA6gB,KAAAtgB,MAAAkD,KAAAinB,SAAA7J,KAAA7gB,IACA,CACA6gB,KAAAwE,UAAA,IACA,MAAA5hB,KAAAmR,YAAA,CACA,EAEAsQ,KAAApG,kBAAA,SAAA+B,MACA,GAAApd,KAAAoC,QAAA2G,aAAA,GACA,GAAA/I,KAAA+Q,IAAA1O,QAAAM,UAAA,CACAya,KAAAxC,SAAA,KACAwC,KAAA7gB,IAAAyD,KAAAuY,mBACAvY,KAAA0R,OAAArP,QAAAO,UACA,OAAAwa,KAAA7gB,GACA,MACA6gB,KAAAxC,SAAA,KACA,CACA,CACA,OAAAwC,KAAA7gB,IAAAyD,KAAAgL,OAAA3I,QAAAC,KAAAtC,KAAAgL,OAAA3I,QAAAG,OAAAxC,KAAAmc,gBAAAnc,KAAAqV,WAAArV,KAAAoC,QAAA+G,gBAAA,QACA,EAIAsY,KAAA1I,aAAA,SAAA7J,MACAA,KAAAkJ,GAAA,KACA,GAAApY,KAAAoC,QAAA2G,aAAA,GAAAmG,KAAAnD,UAAAmD,KAAAyD,WAAA,MACA,GAAA3S,KAAAoC,QAAA2G,aAAA,GAAAmG,KAAApD,MAAA,MACA,EAIA2V,KAAAlG,YAAA,SAAAjB,YAAAjE,QAAAxH,kBACA,IAAAK,KAAAlP,KAAAmP,YAAA8J,YAAAjZ,KAAA6N,SAAAqL,YAAAlZ,KAAA8N,SAAAqL,iBAAAnZ,KAAA+N,cAEA/N,KAAA+Y,aAAA7J,MACA,GAAAlP,KAAAoC,QAAA2G,aAAA,EACA,CAAAmG,KAAAnD,UAAAuO,WAAA,CACA,GAAAta,KAAAoC,QAAA2G,aAAA,EACA,CAAAmG,KAAApD,QAAAuK,OAAA,CAEArW,KAAA6N,SAAA,EACA7N,KAAA8N,SAAA,EACA9N,KAAA+N,cAAA,EACA/N,KAAAoO,WAAAvC,cAAAwK,QAAAnH,KAAAnD,WAAAN,aAAAoD,iBAAAnD,mBAAA,IAEA1L,KAAA0R,OAAArP,QAAAU,QACAmM,KAAAoK,OAAAtZ,KAAAuZ,iBAAAlX,QAAAW,OAAA,MAAAhD,KAAAoC,QAAA2G,aAAA,GACA/I,KAAAwS,iCACAxS,KAAAqZ,kBAAAnK,KAAA,kBAEAlP,KAAA6N,SAAAoL,YACAjZ,KAAA8N,SAAAoL,YACAlZ,KAAA+N,cAAAoL,iBACA,OAAAnZ,KAAAmT,WAAAjE,KAAA,qBACA,EAIAuS,KAAAwC,qBAAA,SAAA/U,KAAAoK,OAAAjD,QAAAyC,SACA,IAAAG,YAAAjZ,KAAA6N,SAAAqL,YAAAlZ,KAAA8N,SAAAqL,iBAAAnZ,KAAA+N,cAEA/N,KAAAoO,WAAAvC,cAAAwK,QAAA,OAAA9K,aACAvL,KAAA+Y,aAAA7J,MACA,GAAAlP,KAAAoC,QAAA2G,aAAA,GAAAmG,KAAApD,QAAAuK,OAAA,CAEArW,KAAA6N,SAAA,EACA7N,KAAA8N,SAAA,EACA9N,KAAA+N,cAAA,EAEAmB,KAAAoK,OAAAtZ,KAAAye,iBAAAnF,OAAA,MACAtZ,KAAAqZ,kBAAAnK,KAAA,WAAA4J,SAEA9Y,KAAA6N,SAAAoL,YACAjZ,KAAA8N,SAAAoL,YACAlZ,KAAA+N,cAAAoL,iBACA,OAAAnZ,KAAAmT,WAAAjE,KAAA,0BACA,EAIAuS,KAAApI,kBAAA,SAAAnK,KAAAgY,gBAAAC,SAAArO,SACA,IAAAsO,aAAAF,iBAAAlnB,KAAAgL,OAAA3I,QAAAQ,OACA,IAAA4W,UAAAzZ,KAAAM,OAAA+mB,UAAA,MAEA,GAAAD,aAAA,CACAlY,KAAA2D,KAAA7S,KAAAuY,iBAAAO,SACA5J,KAAAyD,WAAA,KACA3S,KAAAsnB,YAAApY,KAAA,MACA,MACA,IAAAqY,UAAAvnB,KAAAoC,QAAA2G,aAAA,IAAA/I,KAAAwnB,kBAAAtY,KAAAoK,QACA,IAAAG,WAAA8N,UAAA,CACAF,UAAArnB,KAAA0N,gBAAA1N,KAAAqH,KAIA,GAAAggB,WAAAE,UACA,CAAAvnB,KAAAoS,iBAAAlD,KAAAzG,MAAA,6EACA,CAGA,IAAAgT,UAAAzb,KAAAgO,OACAhO,KAAAgO,OAAA,GACA,GAAAqZ,UAAA,CAAArnB,KAAAM,OAAA,KAIAN,KAAAsnB,YAAApY,MAAAuK,YAAA4N,YAAAH,kBAAAC,UAAAnnB,KAAAwnB,kBAAAtY,KAAAoK,SAEA,GAAAtZ,KAAAM,QAAA4O,KAAAkJ,GAAA,CAAApY,KAAAgZ,gBAAA9J,KAAAkJ,GAAA/L,aAAA,CACA6C,KAAA2D,KAAA7S,KAAA6U,WAAA,MAAAhW,UAAAwoB,YAAA5N,WACAvK,KAAAyD,WAAA,MACA3S,KAAAkT,uBAAAhE,KAAA2D,WACA7S,KAAAgO,OAAAyN,SACA,CACAzb,KAAAiX,WACA,EAEAwK,KAAA+F,kBAAA,SAAAlO,QACA,QAAA9f,EAAA,EAAAwZ,KAAAsG,OAAA9f,EAAAwZ,KAAA7Y,OAAAX,GAAA,EACA,CACA,IAAA4d,MAAApE,KAAAxZ,GAEA,GAAA4d,MAAApM,OAAA,0BACA,EACA,WACA,EAKAyW,KAAA6F,YAAA,SAAApY,KAAAuY,iBACA,IAAAC,SAAArrB,OAAAkB,OAAA,MACA,QAAA/D,EAAA,EAAAwZ,KAAA9D,KAAAoK,OAAA9f,EAAAwZ,KAAA7Y,OAAAX,GAAA,EACA,CACA,IAAA4d,MAAApE,KAAAxZ,GAEAwG,KAAA8f,sBAAA1I,MAAAnL,SAAAwb,gBAAA,KAAAC,SACA,CACA,EAQAjG,KAAA0C,cAAA,SAAAnF,MAAAE,mBAAAD,WAAA9M,wBACA,IAAAiN,KAAA,GAAAzB,MAAA,KACA,OAAA3d,KAAA+Q,IAAAiO,OAAA,CACA,IAAArB,MAAA,CACA3d,KAAA0R,OAAArP,QAAAY,OACA,GAAAic,oBAAAlf,KAAAuR,mBAAAyN,OAAA,OACA,MAAArB,MAAA,MAEA,IAAAJ,SAAA,EACA,GAAA0B,YAAAjf,KAAAgL,OAAA3I,QAAAY,MACA,CAAAsa,IAAA,UACA,GAAAvd,KAAAgL,OAAA3I,QAAAqB,SAAA,CACA6Z,IAAAvd,KAAA6e,YAAA1M,wBACA,GAAAA,wBAAAnS,KAAAgL,OAAA3I,QAAAY,OAAAkP,uBAAAL,cAAA,EACA,CAAAK,uBAAAL,cAAA9R,KAAAyI,KAAA,CACA,MACA8U,IAAAvd,KAAAuY,iBAAA,MAAApG,uBACA,CACAiN,KAAA5U,KAAA+S,IACA,CACA,OAAA6B,IACA,EAEAqC,KAAA7E,gBAAA,SAAAlV,KACA,IAAAe,MAAAf,IAAAe,MACA,IAAApB,IAAAK,IAAAL,IACA,IAAA7H,KAAAkI,IAAAlI,KAEA,GAAAQ,KAAAyO,aAAAjP,OAAA,QACA,CAAAQ,KAAAoS,iBAAA3J,MAAA,uDACA,GAAAzI,KAAA0O,SAAAlP,OAAA,QACA,CAAAQ,KAAAoS,iBAAA3J,MAAA,6DACA,GAAAzI,KAAA2P,mBAAAF,kBAAAjQ,OAAA,YACA,CAAAQ,KAAAoS,iBAAA3J,MAAA,qDACA,GAAAzI,KAAAgP,qBAAAxP,OAAA,aAAAA,OAAA,SACA,CAAAQ,KAAA2R,MAAAlJ,MAAA,cAAAjJ,KAAA,yCACA,GAAAQ,KAAAkC,SAAAzC,KAAAD,MACA,CAAAQ,KAAA2R,MAAAlJ,MAAA,uBAAAjJ,KAAA,KACA,GAAAQ,KAAAoC,QAAA2G,YAAA,GACA/I,KAAAvB,MAAAc,MAAAkJ,MAAApB,KAAA0Q,QAAA,mBACA,IAAA4P,GAAA3nB,KAAAM,OAAAN,KAAA0M,oBAAA1M,KAAAK,cACA,GAAAsnB,GAAAloB,KAAAD,MAAA,CACA,IAAAQ,KAAA0O,SAAAlP,OAAA,QACA,CAAAQ,KAAAoS,iBAAA3J,MAAA,wDACAzI,KAAAoS,iBAAA3J,MAAA,gBAAAjJ,KAAA,gBACA,CACA,EAMAiiB,KAAApM,WAAA,SAAAuS,SACA,IAAA1Y,KAAAlP,KAAA6nB,iBACA7nB,KAAAsH,OAAAsgB,SACA5nB,KAAAmT,WAAAjE,KAAA,cACA,IAAA0Y,QAAA,CACA5nB,KAAA4c,gBAAA1N,MACA,GAAAA,KAAA1P,OAAA,UAAAQ,KAAA+N,cACA,CAAA/N,KAAA+N,cAAAmB,KAAAzG,KAAA,CACA,CACA,OAAAyG,IACA,EAEAuS,KAAAoG,eAAA,WACA,IAAA3Y,KAAAlP,KAAAmP,YACA,GAAAnP,KAAAgL,OAAA3I,QAAA7C,KAAA,CACA0P,KAAA1P,KAAAQ,KAAAlD,KACA,SAAAkD,KAAAgL,KAAAxJ,QAAA,CACA0N,KAAA1P,KAAAQ,KAAAgL,KAAAxJ,QAMA,IAAA0N,KAAA1P,OAAA,SAAA0P,KAAA1P,OAAA,cACAQ,KAAAqN,aAAArN,KAAAoN,aAAA,GAAApN,KAAAvB,MAAA8I,WAAAvH,KAAAoN,gBAAA,KACApN,KAAAsN,QAAAiI,KACA,CACA,MACAvV,KAAAmR,YACA,CACA,OAAAjC,IACA,EAEAuS,KAAArG,kBAAA,WACA,IAAAlM,KAAAlP,KAAAmP,YACA,GAAAnP,KAAAgL,OAAA3I,QAAAI,UAAA,CACAyM,KAAA1P,KAAAQ,KAAAlD,KACA,MACAkD,KAAAmR,YACA,CACAnR,KAAAsH,OACAtH,KAAAmT,WAAAjE,KAAA,qBAGA,GAAAlP,KAAAsO,iBAAAnU,SAAA,GACA6F,KAAA2R,MAAAzC,KAAAzG,MAAA,mBAAAyG,KAAA,gDACA,MACAlP,KAAAsO,iBAAAtO,KAAAsO,iBAAAnU,OAAA,GAAAyhB,KAAApR,KAAA0E,KACA,CAEA,OAAAA,IACA,EAIAuS,KAAAS,WAAA,SAAApJ,SACA,IAAA9Y,KAAA6N,SAAA,CAAA7N,KAAA6N,SAAA7N,KAAAyI,KAAA,CAEA,IAAAyG,KAAAlP,KAAAmP,YACAnP,KAAAsH,OACA,GAAAtH,KAAAgL,OAAA3I,QAAAa,MAAAlD,KAAAoR,sBAAApR,KAAAgL,OAAA3I,QAAAqC,OAAA1E,KAAAgL,KAAAtJ,WAAA,CACAwN,KAAA4Y,SAAA,MACA5Y,KAAA0H,SAAA,IACA,MACA1H,KAAA4Y,SAAA9nB,KAAA+Q,IAAA1O,QAAAqC,MACAwK,KAAA0H,SAAA5W,KAAAuY,iBAAAO,QACA,CACA,OAAA9Y,KAAAmT,WAAAjE,KAAA,kBACA,EAEAuS,KAAAyB,WAAA,SAAApK,SACA,IAAA9Y,KAAA8N,SAAA,CAAA9N,KAAA8N,SAAA9N,KAAAyI,KAAA,CAEA,IAAAyG,KAAAlP,KAAAmP,YACAnP,KAAAsH,OACA4H,KAAA0H,SAAA5W,KAAAyiB,gBAAA,gBAAA3J,SACA,OAAA9Y,KAAAmT,WAAAjE,KAAA,kBACA,EAEA,IAAA6Y,KAAAzb,OAAA3P,UAQAorB,KAAApW,MAAA,SAAA3Q,IAAAgnB,SACA,IAAA/c,IAAAtC,YAAA3I,KAAAvB,MAAAuC,KACAgnB,SAAA,KAAA/c,IAAA7C,KAAA,IAAA6C,IAAA3C,OAAA,IACA,IAAA2f,IAAA,IAAAC,YAAAF,SACAC,IAAAjnB,QAAAinB,IAAAhd,QAAAgd,IAAAE,SAAAnoB,KAAAgB,IACA,MAAAinB,GACA,EAEAF,KAAA3V,iBAAA2V,KAAApW,MAEAoW,KAAA9a,YAAA,WACA,GAAAjN,KAAAoC,QAAAqH,UAAA,CACA,WAAAtB,SAAAnI,KAAA+M,QAAA/M,KAAAgB,IAAAhB,KAAA6M,UACA,CACA,EAEA,IAAAub,KAAA9b,OAAA3P,UAEA,IAAA0rB,MAAA,SAAAA,MAAA7Y,OACAxP,KAAAwP,YAEAxP,KAAAsoB,IAAA,GAEAtoB,KAAAuoB,QAAA,GAEAvoB,KAAAwoB,UAAA,GAEAxoB,KAAAyP,iBAAA,KACA,EAIA2Y,KAAAha,WAAA,SAAAoB,OACAxP,KAAAmO,WAAA3D,KAAA,IAAA6d,MAAA7Y,OACA,EAEA4Y,KAAAnR,UAAA,WACAjX,KAAAmO,WAAAoH,KACA,EAKA6S,KAAAxY,2BAAA,SAAAF,OACA,OAAAA,MAAAF,MAAApE,iBAAApL,KAAAyN,UAAAiC,MAAAF,MAAArE,SACA,EAEAid,KAAAvI,YAAA,SAAArgB,KAAAkgB,YAAA1e,KACA,IAAAynB,WAAA,MACA,GAAA/I,cAAAxT,aAAA,CACA,IAAAwD,MAAA1P,KAAA6P,eACA4Y,WAAA/Y,MAAA6Y,QAAAxQ,QAAAvY,OAAA,GAAAkQ,MAAA8Y,UAAAzQ,QAAAvY,OAAA,GAAAkQ,MAAA4Y,IAAAvQ,QAAAvY,OAAA,EACAkQ,MAAA6Y,QAAA/d,KAAAhL,MACA,GAAAQ,KAAAyN,UAAAiC,MAAAF,MAAArE,UACA,QAAAnL,KAAAiO,iBAAAzO,KAAA,CACA,SAAAkgB,cAAAtT,kBAAA,CACA,IAAAsc,QAAA1oB,KAAA6P,eACA6Y,QAAAH,QAAA/d,KAAAhL,KACA,SAAAkgB,cAAAvT,cAAA,CACA,IAAAwc,QAAA3oB,KAAA6P,eACA,GAAA7P,KAAA8O,oBACA,CAAA2Z,WAAAE,QAAAJ,QAAAxQ,QAAAvY,OAAA,MAEA,CAAAipB,WAAAE,QAAAJ,QAAAxQ,QAAAvY,OAAA,GAAAmpB,QAAAL,IAAAvQ,QAAAvY,OAAA,EACAmpB,QAAAH,UAAAhe,KAAAhL,KACA,MACA,QAAAhG,EAAAwG,KAAAmO,WAAAhU,OAAA,EAAAX,GAAA,IAAAA,EAAA,CACA,IAAAovB,QAAA5oB,KAAAmO,WAAA3U,GACA,GAAAovB,QAAAL,QAAAxQ,QAAAvY,OAAA,KAAAopB,QAAApZ,MAAAhE,oBAAAod,QAAAL,QAAA,KAAA/oB,QACAQ,KAAA4P,2BAAAgZ,kBAAAJ,UAAAzQ,QAAAvY,OAAA,GACAipB,WAAA,KACA,KACA,CACAG,QAAAN,IAAA9d,KAAAhL,MACA,GAAAQ,KAAAyN,UAAAmb,QAAApZ,MAAArE,UACA,QAAAnL,KAAAiO,iBAAAzO,KAAA,CACA,GAAAopB,QAAApZ,MAAA5D,UAAA,OACA,CACA,CACA,GAAA6c,WAAA,CAAAzoB,KAAAoS,iBAAApR,IAAA,eAAAxB,KAAA,+BACA,EAEA4oB,KAAAtL,iBAAA,SAAA1E,IAEA,GAAApY,KAAAmO,WAAA,GAAAoa,QAAAxQ,QAAAK,GAAA5Y,SAAA,GACAQ,KAAAmO,WAAA,GAAAma,IAAAvQ,QAAAK,GAAA5Y,SAAA,GACAQ,KAAAiO,iBAAAmK,GAAA5Y,MAAA4Y,EACA,CACA,EAEAgQ,KAAAvY,aAAA,WACA,OAAA7P,KAAAmO,WAAAnO,KAAAmO,WAAAhU,OAAA,EACA,EAEAiuB,KAAA7Y,gBAAA,WACA,QAAA/V,EAAAwG,KAAAmO,WAAAhU,OAAA,GAAAX,IAAA,CACA,IAAAkW,MAAA1P,KAAAmO,WAAA3U,GACA,GAAAkW,MAAAF,MAAA5D,UAAA,QAAA8D,KAAA,CACA,CACA,EAGA0Y,KAAAzY,iBAAA,WACA,QAAAnW,EAAAwG,KAAAmO,WAAAhU,OAAA,GAAAX,IAAA,CACA,IAAAkW,MAAA1P,KAAAmO,WAAA3U,GACA,GAAAkW,MAAAF,MAAA5D,aAAA8D,MAAAF,MAAAjE,aAAA,QAAAmE,KAAA,CACA,CACA,EAEA,IAAAmZ,KAAA,SAAAA,KAAA1Y,OAAAnP,IAAAiK,KACAjL,KAAAgL,KAAA,GACAhL,KAAAyI,MAAAzH,IACAhB,KAAAqH,IAAA,EACA,GAAA8I,OAAA/N,QAAAqH,UACA,CAAAzJ,KAAAiL,IAAA,IAAAzC,eAAA2H,OAAAlF,IAAA,CACA,GAAAkF,OAAA/N,QAAA0H,iBACA,CAAA9J,KAAA0I,WAAAyH,OAAA/N,QAAA0H,gBAAA,CACA,GAAAqG,OAAA/N,QAAAwH,OACA,CAAA5J,KAAAkL,MAAA,CAAAlK,IAAA,GACA,EAIA,IAAA8nB,KAAAxc,OAAA3P,UAEAmsB,KAAA3Z,UAAA,WACA,WAAA0Z,KAAA7oB,UAAAyI,MAAAzI,KAAA6K,SACA,EAEAie,KAAAjO,YAAA,SAAA7Z,IAAAiK,KACA,WAAA4d,KAAA7oB,KAAAgB,IAAAiK,IACA,EAIA,SAAAib,aAAAhX,KAAAlE,KAAAhK,IAAAiK,KACAiE,KAAAlE,UACAkE,KAAA7H,IAAArG,IACA,GAAAhB,KAAAoC,QAAAqH,UACA,CAAAyF,KAAAjE,IAAA5D,IAAA4D,GAAA,CACA,GAAAjL,KAAAoC,QAAAwH,OACA,CAAAsF,KAAAhE,MAAA,GAAAlK,GAAA,CACA,OAAAkO,IACA,CAEA4Z,KAAA3V,WAAA,SAAAjE,KAAAlE,MACA,OAAAkb,aAAAhsB,KAAA8F,KAAAkP,KAAAlE,KAAAhL,KAAAqN,WAAArN,KAAAkN,cACA,EAIA4b,KAAA5C,aAAA,SAAAhX,KAAAlE,KAAAhK,IAAAiK,KACA,OAAAib,aAAAhsB,KAAA8F,KAAAkP,KAAAlE,KAAAhK,IAAAiK,IACA,EAEA6d,KAAA7B,SAAA,SAAA/X,MACA,IAAA6Z,QAAA,IAAAF,KAAA7oB,KAAAkP,KAAAzG,MAAAzI,KAAA6K,UACA,QAAAuS,QAAAlO,KAAA,CAAA6Z,QAAA3L,MAAAlO,KAAAkO,KAAA,CACA,OAAA2L,OACA,EAOA,IAAAC,sBAAA,89BACA,IAAAC,uBAAAD,sBAAA,yBACA,IAAAE,uBAAAD,uBACA,IAAAE,uBAAAD,uBAAA,kCACA,IAAAE,uBAAAD,uBACA,IAAAE,uBAAAD,uBAEA,IAAAE,wBAAA,CACA,EAAAN,sBACA,GAAAC,uBACA,GAAAC,uBACA,GAAAC,uBACA,GAAAC,uBACA,GAAAC,wBAIA,IAAAE,gCAAA,gJAEA,IAAAC,iCAAA,CACA,KACA,MACA,MACA,MACA,MACA,GAAAD,iCAIA,IAAAE,6BAAA,qpBAGA,IAAAC,kBAAA,i+DACA,IAAAC,mBAAAD,kBAAA,kHACA,IAAAE,mBAAAD,mBAAA,yEACA,IAAAE,mBAAAD,mBAAA,yEACA,IAAAE,mBAAAD,mBAAA,oEACA,IAAAE,mBAAAD,mBAAA,gEAEA,IAAAE,oBAAA,CACA,EAAAN,kBACA,GAAAC,mBACA,GAAAC,mBACA,GAAAC,mBACA,GAAAC,mBACA,GAAAC,oBAGA,IAAAE,KAAA,GACA,SAAAC,iBAAAnhB,aACA,IAAAohB,EAAAF,KAAAlhB,aAAA,CACAqhB,OAAAtiB,YAAAwhB,wBAAAvgB,aAAA,IAAA0gB,8BACAY,gBAAAviB,YAAA0hB,iCAAAzgB,cACAuhB,UAAA,CACAC,iBAAAziB,YAAA2hB,8BACAe,OAAA1iB,YAAAkiB,oBAAAjhB,gBAGAohB,EAAAG,UAAAG,kBAAAN,EAAAG,UAAAE,OAEAL,EAAAG,UAAAI,GAAAP,EAAAG,UAAAC,iBACAJ,EAAAG,UAAAK,GAAAR,EAAAG,UAAAE,OACAL,EAAAG,UAAAM,IAAAT,EAAAG,UAAAG,iBACA,CAEA,QAAAjxB,EAAA,EAAAwZ,KAAA,mBAAAxZ,EAAAwZ,KAAA7Y,OAAAX,GAAA,GACA,IAAAuP,YAAAiK,KAAAxZ,GAEA0wB,iBAAAnhB,YACA,CAEA,IAAA8hB,KAAAve,OAAA3P,UAEA,IAAAmuB,sBAAA,SAAAA,sBAAA3a,QACAnQ,KAAAmQ,cACAnQ,KAAA+qB,WAAA,OAAA5a,OAAA/N,QAAA2G,aAAA,YAAAoH,OAAA/N,QAAA2G,aAAA,WAAAoH,OAAA/N,QAAA2G,aAAA,YAAAoH,OAAA/N,QAAA2G,aAAA,WACA/I,KAAAgrB,kBAAAf,KAAA9Z,OAAA/N,QAAA2G,aAAA,MAAAoH,OAAA/N,QAAA2G,aACA/I,KAAAkH,OAAA,GACAlH,KAAAwP,MAAA,GACAxP,KAAAyI,MAAA,EACAzI,KAAAirB,QAAA,MACAjrB,KAAAkrB,QAAA,MACAlrB,KAAAmrB,QAAA,MACAnrB,KAAAgB,IAAA,EACAhB,KAAAorB,aAAA,EACAprB,KAAAqrB,gBAAA,GACArrB,KAAAsrB,4BAAA,MACAtrB,KAAAurB,mBAAA,EACAvrB,KAAAwrB,iBAAA,EACAxrB,KAAAyrB,WAAA,GACAzrB,KAAA0rB,mBAAA,EACA,EAEAZ,sBAAAnuB,UAAAgvB,MAAA,SAAAA,MAAAljB,MAAAqc,QAAAtV,OACA,IAAAoc,YAAApc,MAAAuI,QAAA,UACA,IAAA8T,QAAArc,MAAAuI,QAAA,UACA/X,KAAAyI,YAAA,EACAzI,KAAAkH,OAAA4d,QAAA,GACA9kB,KAAAwP,YACA,GAAAoc,aAAA5rB,KAAAmQ,OAAA/N,QAAA2G,aAAA,IACA/I,KAAAirB,QAAA,KACAjrB,KAAAkrB,QAAA,KACAlrB,KAAAmrB,QAAA,IACA,MACAnrB,KAAAirB,QAAAY,SAAA7rB,KAAAmQ,OAAA/N,QAAA2G,aAAA,EACA/I,KAAAkrB,QAAA,MACAlrB,KAAAmrB,QAAAU,SAAA7rB,KAAAmQ,OAAA/N,QAAA2G,aAAA,CACA,CACA,EAEA+hB,sBAAAnuB,UAAAgV,MAAA,SAAAA,MAAAqW,SACAhoB,KAAAmQ,OAAAiC,iBAAApS,KAAAyI,MAAA,gCAAAzI,KAAA,aAAAgoB,QACA,EAIA8C,sBAAAnuB,UAAAmvB,GAAA,SAAAA,GAAAtyB,EAAAuyB,QACA,GAAAA,cAAA,EAAAA,OAAA,MAEA,IAAAC,EAAAhsB,KAAAkH,OACA,IAAA+kB,EAAAD,EAAA7xB,OACA,GAAAX,GAAAyyB,EAAA,CACA,QACA,CACA,IAAAvyB,EAAAsyB,EAAAzkB,WAAA/N,GACA,KAAAuyB,QAAA/rB,KAAAirB,UAAAvxB,GAAA,OAAAA,GAAA,OAAAF,EAAA,GAAAyyB,EAAA,CACA,OAAAvyB,CACA,CACA,IAAA4N,KAAA0kB,EAAAzkB,WAAA/N,EAAA,GACA,OAAA8N,MAAA,OAAAA,MAAA,OAAA5N,GAAA,IAAA4N,KAAA,SAAA5N,CACA,EAEAoxB,sBAAAnuB,UAAAuvB,UAAA,SAAAA,UAAA1yB,EAAAuyB,QACA,GAAAA,cAAA,EAAAA,OAAA,MAEA,IAAAC,EAAAhsB,KAAAkH,OACA,IAAA+kB,EAAAD,EAAA7xB,OACA,GAAAX,GAAAyyB,EAAA,CACA,OAAAA,CACA,CACA,IAAAvyB,EAAAsyB,EAAAzkB,WAAA/N,GAAA8N,KACA,KAAAykB,QAAA/rB,KAAAirB,UAAAvxB,GAAA,OAAAA,GAAA,OAAAF,EAAA,GAAAyyB,IACA3kB,KAAA0kB,EAAAzkB,WAAA/N,EAAA,WAAA8N,KAAA,OACA,OAAA9N,EAAA,CACA,CACA,OAAAA,EAAA,CACA,EAEAsxB,sBAAAnuB,UAAAwvB,QAAA,SAAAA,QAAAJ,QACA,GAAAA,cAAA,EAAAA,OAAA,MAEA,OAAA/rB,KAAA8rB,GAAA9rB,KAAAgB,IAAA+qB,OACA,EAEAjB,sBAAAnuB,UAAAyvB,UAAA,SAAAA,UAAAL,QACA,GAAAA,cAAA,EAAAA,OAAA,MAEA,OAAA/rB,KAAA8rB,GAAA9rB,KAAAksB,UAAAlsB,KAAAgB,IAAA+qB,eACA,EAEAjB,sBAAAnuB,UAAA0vB,QAAA,SAAAA,QAAAN,QACA,GAAAA,cAAA,EAAAA,OAAA,MAEA/rB,KAAAgB,IAAAhB,KAAAksB,UAAAlsB,KAAAgB,IAAA+qB,OACA,EAEAjB,sBAAAnuB,UAAAoU,IAAA,SAAAA,IAAAub,GAAAP,QACA,GAAAA,cAAA,EAAAA,OAAA,MAEA,GAAA/rB,KAAAmsB,QAAAJ,UAAAO,GAAA,CACAtsB,KAAAqsB,QAAAN,QACA,WACA,CACA,YACA,EAEAjB,sBAAAnuB,UAAA4vB,SAAA,SAAAA,SAAAC,IAAAT,QACA,GAAAA,cAAA,EAAAA,OAAA,MAEA,IAAA/qB,IAAAhB,KAAAgB,IACA,QAAAxH,EAAA,EAAAwZ,KAAAwZ,IAAAhzB,EAAAwZ,KAAA7Y,OAAAX,GAAA,GACA,IAAA8yB,GAAAtZ,KAAAxZ,GAEA,IAAA2yB,QAAAnsB,KAAA8rB,GAAA9qB,IAAA+qB,QACA,GAAAI,WAAA,GAAAA,UAAAG,GAAA,CACA,YACA,CACAtrB,IAAAhB,KAAAksB,UAAAlrB,IAAA+qB,OACA,CACA/rB,KAAAgB,QACA,WACA,EAQA6pB,KAAA4B,oBAAA,SAAAC,OACA,IAAA3B,WAAA2B,MAAA3B,WACA,IAAAvb,MAAAkd,MAAAld,MAEA,IAAA5V,EAAA,MACA,IAAA+yB,EAAA,MAEA,QAAAnzB,EAAA,EAAAA,EAAAgW,MAAArV,OAAAX,IAAA,CACA,IAAAozB,KAAApd,MAAAsB,OAAAtX,GACA,GAAAuxB,WAAAhT,QAAA6U,SAAA,GACA5sB,KAAA2R,MAAA+a,MAAAjkB,MAAA,kCACA,CACA,GAAA+G,MAAAuI,QAAA6U,KAAApzB,EAAA,OACAwG,KAAA2R,MAAA+a,MAAAjkB,MAAA,oCACA,CACA,GAAAmkB,OAAA,KAAAhzB,EAAA,KACA,GAAAgzB,OAAA,KAAAD,EAAA,KACA,CACA,GAAA3sB,KAAAoC,QAAA2G,aAAA,IAAAnP,GAAA+yB,EAAA,CACA3sB,KAAA2R,MAAA+a,MAAAjkB,MAAA,kCACA,CACA,EAQAoiB,KAAAgC,sBAAA,SAAAH,OACA1sB,KAAA8sB,eAAAJ,OAOA,IAAAA,MAAAvB,SAAAnrB,KAAAoC,QAAA2G,aAAA,GAAA2jB,MAAAjB,WAAAtxB,OAAA,GACAuyB,MAAAvB,QAAA,KACAnrB,KAAA8sB,eAAAJ,MACA,CACA,EAGA7B,KAAAiC,eAAA,SAAAJ,OACAA,MAAA1rB,IAAA,EACA0rB,MAAAtB,aAAA,EACAsB,MAAArB,gBAAA,GACAqB,MAAApB,4BAAA,MACAoB,MAAAnB,mBAAA,EACAmB,MAAAlB,iBAAA,EACAkB,MAAAjB,WAAAtxB,OAAA,EACAuyB,MAAAhB,mBAAAvxB,OAAA,EAEA6F,KAAA+sB,mBAAAL,OAEA,GAAAA,MAAA1rB,MAAA0rB,MAAAxlB,OAAA/M,OAAA,CAEA,GAAAuyB,MAAA3b,IAAA,KACA2b,MAAA/a,MAAA,gBACA,CACA,GAAA+a,MAAA3b,IAAA,KAAA2b,MAAA3b,IAAA,MACA2b,MAAA/a,MAAA,2BACA,CACA,CACA,GAAA+a,MAAAlB,iBAAAkB,MAAAnB,mBAAA,CACAmB,MAAA/a,MAAA,iBACA,CACA,QAAAnY,EAAA,EAAAwZ,KAAA0Z,MAAAhB,mBAAAlyB,EAAAwZ,KAAA7Y,OAAAX,GAAA,GACA,IAAAgG,KAAAwT,KAAAxZ,GAEA,GAAAkzB,MAAAjB,WAAA1T,QAAAvY,SAAA,GACAktB,MAAA/a,MAAA,mCACA,CACA,CACA,EAGAkZ,KAAAkC,mBAAA,SAAAL,OACA1sB,KAAAgtB,mBAAAN,OACA,MAAAA,MAAA3b,IAAA,MACA/Q,KAAAgtB,mBAAAN,MACA,CAGA,GAAA1sB,KAAAitB,qBAAAP,MAAA,OACAA,MAAA/a,MAAA,oBACA,CACA,GAAA+a,MAAA3b,IAAA,MACA2b,MAAA/a,MAAA,2BACA,CACA,EAGAkZ,KAAAmC,mBAAA,SAAAN,OACA,MAAAA,MAAA1rB,IAAA0rB,MAAAxlB,OAAA/M,QAAA6F,KAAAktB,eAAAR,OACA,EACA,EAGA7B,KAAAqC,eAAA,SAAAR,OACA,GAAA1sB,KAAAmtB,oBAAAT,OAAA,CAIA,GAAAA,MAAApB,6BAAAtrB,KAAAitB,qBAAAP,OAAA,CAEA,GAAAA,MAAAzB,QAAA,CACAyB,MAAA/a,MAAA,qBACA,CACA,CACA,WACA,CAEA,GAAA+a,MAAAzB,QAAAjrB,KAAAotB,eAAAV,OAAA1sB,KAAAqtB,uBAAAX,OAAA,CACA1sB,KAAAitB,qBAAAP,OACA,WACA,CAEA,YACA,EAGA7B,KAAAsC,oBAAA,SAAAT,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA0rB,MAAApB,4BAAA,MAGA,GAAAoB,MAAA3b,IAAA,KAAA2b,MAAA3b,IAAA,KACA,WACA,CAGA,GAAA2b,MAAA3b,IAAA,KACA,GAAA2b,MAAA3b,IAAA,KAAA2b,MAAA3b,IAAA,KACA,WACA,CACA2b,MAAA1rB,IAAAyH,KACA,CAGA,GAAAikB,MAAA3b,IAAA,KAAA2b,MAAA3b,IAAA,KACA,IAAAuc,WAAA,MACA,GAAAttB,KAAAoC,QAAA2G,aAAA,GACAukB,WAAAZ,MAAA3b,IAAA,GACA,CACA,GAAA2b,MAAA3b,IAAA,KAAA2b,MAAA3b,IAAA,KACA/Q,KAAA+sB,mBAAAL,OACA,IAAAA,MAAA3b,IAAA,KACA2b,MAAA/a,MAAA,qBACA,CACA+a,MAAApB,6BAAAgC,WACA,WACA,CACA,CAEAZ,MAAA1rB,IAAAyH,MACA,YACA,EAGAoiB,KAAAoC,qBAAA,SAAAP,MAAAa,SACA,GAAAA,eAAA,EAAAA,QAAA,MAEA,GAAAvtB,KAAAwtB,2BAAAd,MAAAa,SAAA,CACAb,MAAA3b,IAAA,IACA,WACA,CACA,YACA,EAGA8Z,KAAA2C,2BAAA,SAAAd,MAAAa,SACA,OACAb,MAAA3b,IAAA,KACA2b,MAAA3b,IAAA,KACA2b,MAAA3b,IAAA,KACA/Q,KAAAytB,2BAAAf,MAAAa,QAEA,EACA1C,KAAA4C,2BAAA,SAAAf,MAAAa,SACA,IAAA9kB,MAAAikB,MAAA1rB,IACA,GAAA0rB,MAAA3b,IAAA,MACA,IAAA2c,IAAA,EAAAC,KAAA,EACA,GAAA3tB,KAAA4tB,wBAAAlB,OAAA,CACAgB,IAAAhB,MAAAtB,aACA,GAAAsB,MAAA3b,IAAA,KAAA/Q,KAAA4tB,wBAAAlB,OAAA,CACAiB,IAAAjB,MAAAtB,YACA,CACA,GAAAsB,MAAA3b,IAAA,MAEA,GAAA4c,OAAA,GAAAA,IAAAD,MAAAH,QAAA,CACAb,MAAA/a,MAAA,wCACA,CACA,WACA,CACA,CACA,GAAA+a,MAAAzB,UAAAsC,QAAA,CACAb,MAAA/a,MAAA,wBACA,CACA+a,MAAA1rB,IAAAyH,KACA,CACA,YACA,EAGAoiB,KAAAuC,eAAA,SAAAV,OACA,OACA1sB,KAAA6tB,4BAAAnB,QACAA,MAAA3b,IAAA,KACA/Q,KAAA8tB,mCAAApB,QACA1sB,KAAA+tB,yBAAArB,QACA1sB,KAAAguB,2BAAAtB,QACA1sB,KAAAiuB,yBAAAvB,MAEA,EACA7B,KAAAiD,mCAAA,SAAApB,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,GAAA0rB,MAAA3b,IAAA,KACA,GAAA/Q,KAAAkuB,qBAAAxB,OAAA,CACA,WACA,CACAA,MAAA1rB,IAAAyH,KACA,CACA,YACA,EACAoiB,KAAAmD,2BAAA,SAAAtB,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,GAAA0rB,MAAA3b,IAAA,KACA,GAAA2b,MAAA3b,IAAA,KAAA2b,MAAA3b,IAAA,KACA/Q,KAAA+sB,mBAAAL,OACA,GAAAA,MAAA3b,IAAA,KACA,WACA,CACA2b,MAAA/a,MAAA,qBACA,CACA+a,MAAA1rB,IAAAyH,KACA,CACA,YACA,EACAoiB,KAAAoD,yBAAA,SAAAvB,OACA,GAAAA,MAAA3b,IAAA,KACA,GAAA/Q,KAAAoC,QAAA2G,aAAA,GACA/I,KAAAmuB,sBAAAzB,MACA,SAAAA,MAAAP,YAAA,IACAO,MAAA/a,MAAA,gBACA,CACA3R,KAAA+sB,mBAAAL,OACA,GAAAA,MAAA3b,IAAA,KACA2b,MAAAnB,oBAAA,EACA,WACA,CACAmB,MAAA/a,MAAA,qBACA,CACA,YACA,EAGAkZ,KAAAwC,uBAAA,SAAAX,OACA,OACAA,MAAA3b,IAAA,KACA/Q,KAAA8tB,mCAAApB,QACA1sB,KAAA+tB,yBAAArB,QACA1sB,KAAAguB,2BAAAtB,QACA1sB,KAAAiuB,yBAAAvB,QACA1sB,KAAAouB,kCAAA1B,QACA1sB,KAAAquB,mCAAA3B,MAEA,EAGA7B,KAAAuD,kCAAA,SAAA1B,OACA,GAAA1sB,KAAAytB,2BAAAf,MAAA,OACAA,MAAA/a,MAAA,oBACA,CACA,YACA,EAGAkZ,KAAAyD,0BAAA,SAAA5B,OACA,IAAAJ,GAAAI,MAAAP,UACA,GAAAoC,kBAAAjC,IAAA,CACAI,MAAAtB,aAAAkB,GACAI,MAAAL,UACA,WACA,CACA,YACA,EACA,SAAAkC,kBAAAjC,IACA,OACAA,KAAA,IACAA,IAAA,IAAAA,IAAA,IACAA,KAAA,IACAA,KAAA,IACAA,IAAA,IAAAA,IAAA,IACAA,IAAA,KAAAA,IAAA,GAEA,CAIAzB,KAAAgD,4BAAA,SAAAnB,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,IAAAsrB,GAAA,EACA,OAAAA,GAAAI,MAAAP,cAAA,IAAAoC,kBAAAjC,IAAA,CACAI,MAAAL,SACA,CACA,OAAAK,MAAA1rB,MAAAyH,KACA,EAGAoiB,KAAAwD,mCAAA,SAAA3B,OACA,IAAAJ,GAAAI,MAAAP,UACA,GACAG,MAAA,GACAA,KAAA,MACAA,IAAA,IAAAA,IAAA,KACAA,KAAA,IACAA,KAAA,IACAA,KAAA,IACAA,KAAA,IACAA,KAAA,IACA,CACAI,MAAAL,UACA,WACA,CACA,YACA,EAKAxB,KAAAsD,sBAAA,SAAAzB,OACA,GAAAA,MAAA3b,IAAA,KACA,GAAA/Q,KAAAwuB,oBAAA9B,OAAA,CACA,GAAAA,MAAAjB,WAAA1T,QAAA2U,MAAArB,oBAAA,GACAqB,MAAA/a,MAAA,+BACA,CACA+a,MAAAjB,WAAAjhB,KAAAkiB,MAAArB,iBACA,MACA,CACAqB,MAAA/a,MAAA,gBACA,CACA,EAKAkZ,KAAA2D,oBAAA,SAAA9B,OACAA,MAAArB,gBAAA,GACA,GAAAqB,MAAA3b,IAAA,KACA,GAAA/Q,KAAAyuB,+BAAA/B,cAAA3b,IAAA,KACA,WACA,CACA2b,MAAA/a,MAAA,6BACA,CACA,YACA,EAMAkZ,KAAA4D,+BAAA,SAAA/B,OACAA,MAAArB,gBAAA,GACA,GAAArrB,KAAA0uB,gCAAAhC,OAAA,CACAA,MAAArB,iBAAApjB,kBAAAykB,MAAAtB,cACA,MAAAprB,KAAA2uB,+BAAAjC,OAAA,CACAA,MAAArB,iBAAApjB,kBAAAykB,MAAAtB,aACA,CACA,WACA,CACA,YACA,EAOAP,KAAA6D,gCAAA,SAAAhC,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,IAAA+qB,OAAA/rB,KAAAoC,QAAA2G,aAAA,GACA,IAAAujB,GAAAI,MAAAP,QAAAJ,QACAW,MAAAL,QAAAN,QAEA,GAAAO,KAAA,IAAAtsB,KAAA4uB,sCAAAlC,MAAAX,QAAA,CACAO,GAAAI,MAAAtB,YACA,CACA,GAAAyD,wBAAAvC,IAAA,CACAI,MAAAtB,aAAAkB,GACA,WACA,CAEAI,MAAA1rB,IAAAyH,MACA,YACA,EACA,SAAAomB,wBAAAvC,IACA,OAAArrB,kBAAAqrB,GAAA,OAAAA,KAAA,IAAAA,KAAA,EACA,CASAzB,KAAA8D,+BAAA,SAAAjC,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,IAAA+qB,OAAA/rB,KAAAoC,QAAA2G,aAAA,GACA,IAAAujB,GAAAI,MAAAP,QAAAJ,QACAW,MAAAL,QAAAN,QAEA,GAAAO,KAAA,IAAAtsB,KAAA4uB,sCAAAlC,MAAAX,QAAA,CACAO,GAAAI,MAAAtB,YACA,CACA,GAAA0D,uBAAAxC,IAAA,CACAI,MAAAtB,aAAAkB,GACA,WACA,CAEAI,MAAA1rB,IAAAyH,MACA,YACA,EACA,SAAAqmB,uBAAAxC,IACA,OAAAlrB,iBAAAkrB,GAAA,OAAAA,KAAA,IAAAA,KAAA,IAAAA,KAAA,MAAAA,KAAA,IACA,CAGAzB,KAAAqD,qBAAA,SAAAxB,OACA,GACA1sB,KAAA+uB,wBAAArC,QACA1sB,KAAAgvB,+BAAAtC,QACA1sB,KAAAivB,0BAAAvC,QACAA,MAAAvB,SAAAnrB,KAAAkvB,qBAAAxC,OACA,CACA,WACA,CACA,GAAAA,MAAAzB,QAAA,CAEA,GAAAyB,MAAAP,YAAA,IACAO,MAAA/a,MAAA,yBACA,CACA+a,MAAA/a,MAAA,iBACA,CACA,YACA,EACAkZ,KAAAkE,wBAAA,SAAArC,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,GAAAhB,KAAAmvB,wBAAAzC,OAAA,CACA,IAAArzB,EAAAqzB,MAAAtB,aACA,GAAAsB,MAAAzB,QAAA,CAEA,GAAA5xB,EAAAqzB,MAAAlB,iBAAA,CACAkB,MAAAlB,iBAAAnyB,CACA,CACA,WACA,CACA,GAAAA,GAAAqzB,MAAAnB,mBAAA,CACA,WACA,CACAmB,MAAA1rB,IAAAyH,KACA,CACA,YACA,EACAoiB,KAAAqE,qBAAA,SAAAxC,OACA,GAAAA,MAAA3b,IAAA,MACA,GAAA/Q,KAAAwuB,oBAAA9B,OAAA,CACAA,MAAAhB,mBAAAlhB,KAAAkiB,MAAArB,iBACA,WACA,CACAqB,MAAA/a,MAAA,0BACA,CACA,YACA,EAGAkZ,KAAAoE,0BAAA,SAAAvC,OACA,OACA1sB,KAAAovB,wBAAA1C,QACA1sB,KAAAqvB,yBAAA3C,QACA1sB,KAAAsvB,eAAA5C,QACA1sB,KAAAuvB,4BAAA7C,QACA1sB,KAAA4uB,sCAAAlC,MAAA,SACAA,MAAAzB,SAAAjrB,KAAAwvB,oCAAA9C,QACA1sB,KAAAyvB,yBAAA/C,MAEA,EACA7B,KAAAwE,yBAAA,SAAA3C,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,GAAA0rB,MAAA3b,IAAA,KACA,GAAA/Q,KAAA0vB,wBAAAhD,OAAA,CACA,WACA,CACAA,MAAA1rB,IAAAyH,KACA,CACA,YACA,EACAoiB,KAAAyE,eAAA,SAAA5C,OACA,GAAAA,MAAAP,YAAA,KAAAwD,eAAAjD,MAAAN,aAAA,CACAM,MAAAtB,aAAA,EACAsB,MAAAL,UACA,WACA,CACA,YACA,EAGAxB,KAAAuE,wBAAA,SAAA1C,OACA,IAAAJ,GAAAI,MAAAP,UACA,GAAAG,KAAA,KACAI,MAAAtB,aAAA,EACAsB,MAAAL,UACA,WACA,CACA,GAAAC,KAAA,KACAI,MAAAtB,aAAA,GACAsB,MAAAL,UACA,WACA,CACA,GAAAC,KAAA,KACAI,MAAAtB,aAAA,GACAsB,MAAAL,UACA,WACA,CACA,GAAAC,KAAA,KACAI,MAAAtB,aAAA,GACAsB,MAAAL,UACA,WACA,CACA,GAAAC,KAAA,KACAI,MAAAtB,aAAA,GACAsB,MAAAL,UACA,WACA,CACA,YACA,EAGAxB,KAAA6E,wBAAA,SAAAhD,OACA,IAAAJ,GAAAI,MAAAP,UACA,GAAAyD,gBAAAtD,IAAA,CACAI,MAAAtB,aAAAkB,GAAA,GACAI,MAAAL,UACA,WACA,CACA,YACA,EACA,SAAAuD,gBAAAtD,IACA,OACAA,IAAA,IAAAA,IAAA,IACAA,IAAA,IAAAA,IAAA,GAEA,CAGAzB,KAAA+D,sCAAA,SAAAlC,MAAAX,QACA,GAAAA,cAAA,EAAAA,OAAA,MAEA,IAAAtjB,MAAAikB,MAAA1rB,IACA,IAAAiqB,QAAAc,QAAAW,MAAAzB,QAEA,GAAAyB,MAAA3b,IAAA,MACA,GAAA/Q,KAAA6vB,yBAAAnD,MAAA,IACA,IAAAoD,KAAApD,MAAAtB,aACA,GAAAH,SAAA6E,MAAA,OAAAA,MAAA,OACA,IAAAC,iBAAArD,MAAA1rB,IACA,GAAA0rB,MAAA3b,IAAA,KAAA2b,MAAA3b,IAAA,MAAA/Q,KAAA6vB,yBAAAnD,MAAA,IACA,IAAAsD,MAAAtD,MAAAtB,aACA,GAAA4E,OAAA,OAAAA,OAAA,OACAtD,MAAAtB,cAAA0E,KAAA,aAAAE,MAAA,aACA,WACA,CACA,CACAtD,MAAA1rB,IAAA+uB,iBACArD,MAAAtB,aAAA0E,IACA,CACA,WACA,CACA,GACA7E,SACAyB,MAAA3b,IAAA,MACA/Q,KAAAiwB,oBAAAvD,QACAA,MAAA3b,IAAA,MACAmf,eAAAxD,MAAAtB,cACA,CACA,WACA,CACA,GAAAH,QAAA,CACAyB,MAAA/a,MAAA,yBACA,CACA+a,MAAA1rB,IAAAyH,KACA,CAEA,YACA,EACA,SAAAynB,eAAA5D,IACA,OAAAA,IAAA,GAAAA,IAAA,OACA,CAGAzB,KAAA4E,yBAAA,SAAA/C,OACA,GAAAA,MAAAzB,QAAA,CACA,GAAAjrB,KAAAsuB,0BAAA5B,OAAA,CACA,WACA,CACA,GAAAA,MAAA3b,IAAA,KACA2b,MAAAtB,aAAA,GACA,WACA,CACA,YACA,CAEA,IAAAkB,GAAAI,MAAAP,UACA,GAAAG,KAAA,MAAAI,MAAAvB,SAAAmB,KAAA,MACAI,MAAAtB,aAAAkB,GACAI,MAAAL,UACA,WACA,CAEA,YACA,EAGAxB,KAAAsE,wBAAA,SAAAzC,OACAA,MAAAtB,aAAA,EACA,IAAAkB,GAAAI,MAAAP,UACA,GAAAG,IAAA,IAAAA,IAAA,IACA,GACAI,MAAAtB,aAAA,GAAAsB,MAAAtB,cAAAkB,GAAA,IACAI,MAAAL,SACA,QAAAC,GAAAI,MAAAP,YAAA,IAAAG,IAAA,IACA,WACA,CACA,YACA,EAIA,IAAA6D,YAAA,EACA,IAAAC,UAAA,EACA,IAAAC,cAAA,EAGAxF,KAAAmE,+BAAA,SAAAtC,OACA,IAAAJ,GAAAI,MAAAP,UAEA,GAAAmE,uBAAAhE,IAAA,CACAI,MAAAtB,cAAA,EACAsB,MAAAL,UACA,OAAA+D,SACA,CAEA,IAAAG,OAAA,MACA,GACA7D,MAAAzB,SACAjrB,KAAAoC,QAAA2G,aAAA,KACAwnB,OAAAjE,KAAA,KAAAA,KAAA,KACA,CACAI,MAAAtB,cAAA,EACAsB,MAAAL,UACA,IAAA/I,OACA,GACAoJ,MAAA3b,IAAA,OACAuS,OAAAtjB,KAAAwwB,yCAAA9D,SACAA,MAAA3b,IAAA,KACA,CACA,GAAAwf,QAAAjN,SAAA+M,cAAA,CAAA3D,MAAA/a,MAAA,yBACA,OAAA2R,MACA,CACAoJ,MAAA/a,MAAA,wBACA,CAEA,OAAAwe,WACA,EAEA,SAAAG,uBAAAhE,IACA,OACAA,KAAA,KACAA,KAAA,IACAA,KAAA,KACAA,KAAA,IACAA,KAAA,KACAA,KAAA,EAEA,CAKAzB,KAAA2F,yCAAA,SAAA9D,OACA,IAAAjkB,MAAAikB,MAAA1rB,IAGA,GAAAhB,KAAAywB,8BAAA/D,cAAA3b,IAAA,KACA,IAAAvR,KAAAktB,MAAArB,gBACA,GAAArrB,KAAA0wB,+BAAAhE,OAAA,CACA,IAAA5vB,MAAA4vB,MAAArB,gBACArrB,KAAA2wB,2CAAAjE,MAAAltB,KAAA1C,OACA,OAAAszB,SACA,CACA,CACA1D,MAAA1rB,IAAAyH,MAGA,GAAAzI,KAAA4wB,yCAAAlE,OAAA,CACA,IAAAmE,YAAAnE,MAAArB,gBACA,OAAArrB,KAAA8wB,0CAAApE,MAAAmE,YACA,CACA,OAAAV,WACA,EAEAtF,KAAA8F,2CAAA,SAAAjE,MAAAltB,KAAA1C,OACA,IAAA8K,OAAA8kB,MAAA1B,kBAAAV,UAAA9qB,MACA,CAAAktB,MAAA/a,MAAA,yBACA,IAAA+a,MAAA1B,kBAAAV,UAAA9qB,MAAAC,KAAA3C,OACA,CAAA4vB,MAAA/a,MAAA,0BACA,EAEAkZ,KAAAiG,0CAAA,SAAApE,MAAAmE,aACA,GAAAnE,MAAA1B,kBAAAZ,OAAA3qB,KAAAoxB,aAAA,QAAAT,SAAA,CACA,GAAA1D,MAAAxB,SAAAwB,MAAA1B,kBAAAX,gBAAA5qB,KAAAoxB,aAAA,QAAAR,aAAA,CACA3D,MAAA/a,MAAA,wBACA,EAIAkZ,KAAA4F,8BAAA,SAAA/D,OACA,IAAAJ,GAAA,EACAI,MAAArB,gBAAA,GACA,MAAA0F,+BAAAzE,GAAAI,MAAAP,WAAA,CACAO,MAAArB,iBAAApjB,kBAAAqkB,IACAI,MAAAL,SACA,CACA,OAAAK,MAAArB,kBAAA,EACA,EAEA,SAAA0F,+BAAAzE,IACA,OAAAsD,gBAAAtD,UAAA,EACA,CAIAzB,KAAA6F,+BAAA,SAAAhE,OACA,IAAAJ,GAAA,EACAI,MAAArB,gBAAA,GACA,MAAA2F,gCAAA1E,GAAAI,MAAAP,WAAA,CACAO,MAAArB,iBAAApjB,kBAAAqkB,IACAI,MAAAL,SACA,CACA,OAAAK,MAAArB,kBAAA,EACA,EACA,SAAA2F,gCAAA1E,IACA,OAAAyE,+BAAAzE,KAAAqD,eAAArD,GACA,CAIAzB,KAAA+F,yCAAA,SAAAlE,OACA,OAAA1sB,KAAA0wB,+BAAAhE,MACA,EAGA7B,KAAAkD,yBAAA,SAAArB,OACA,GAAAA,MAAA3b,IAAA,KACA,IAAAwf,OAAA7D,MAAA3b,IAAA,IACA,IAAAuS,OAAAtjB,KAAAixB,qBAAAvE,OACA,IAAAA,MAAA3b,IAAA,IACA,CAAA2b,MAAA/a,MAAA,gCACA,GAAA4e,QAAAjN,SAAA+M,cACA,CAAA3D,MAAA/a,MAAA,+CACA,WACA,CACA,YACA,EAIAkZ,KAAAoG,qBAAA,SAAAvE,OACA,GAAAA,MAAAP,YAAA,WAAAiE,SAAA,CACA,GAAA1D,MAAAxB,QAAA,QAAAlrB,KAAAkxB,0BAAAxE,MAAA,CACA1sB,KAAAmxB,2BAAAzE,OACA,OAAA0D,SACA,EAIAvF,KAAAsG,2BAAA,SAAAzE,OACA,MAAA1sB,KAAAoxB,oBAAA1E,OAAA,CACA,IAAArU,KAAAqU,MAAAtB,aACA,GAAAsB,MAAA3b,IAAA,KAAA/Q,KAAAoxB,oBAAA1E,OAAA,CACA,IAAApU,MAAAoU,MAAAtB,aACA,GAAAsB,MAAAzB,UAAA5S,QAAA,GAAAC,SAAA,IACAoU,MAAA/a,MAAA,0BACA,CACA,GAAA0G,QAAA,GAAAC,SAAA,GAAAD,KAAAC,MAAA,CACAoU,MAAA/a,MAAA,wCACA,CACA,CACA,CACA,EAIAkZ,KAAAuG,oBAAA,SAAA1E,OACA,IAAAjkB,MAAAikB,MAAA1rB,IAEA,GAAA0rB,MAAA3b,IAAA,KACA,GAAA/Q,KAAAqxB,sBAAA3E,OAAA,CACA,WACA,CACA,GAAAA,MAAAzB,QAAA,CAEA,IAAAqG,KAAA5E,MAAAP,UACA,GAAAmF,OAAA,IAAAC,aAAAD,MAAA,CACA5E,MAAA/a,MAAA,uBACA,CACA+a,MAAA/a,MAAA,iBACA,CACA+a,MAAA1rB,IAAAyH,KACA,CAEA,IAAA6jB,GAAAI,MAAAP,UACA,GAAAG,KAAA,IACAI,MAAAtB,aAAAkB,GACAI,MAAAL,UACA,WACA,CAEA,YACA,EAGAxB,KAAAwG,sBAAA,SAAA3E,OACA,IAAAjkB,MAAAikB,MAAA1rB,IAEA,GAAA0rB,MAAA3b,IAAA,KACA2b,MAAAtB,aAAA,EACA,WACA,CAEA,GAAAsB,MAAAzB,SAAAyB,MAAA3b,IAAA,KACA2b,MAAAtB,aAAA,GACA,WACA,CAEA,IAAAsB,MAAAzB,SAAAyB,MAAA3b,IAAA,KACA,GAAA/Q,KAAAwxB,6BAAA9E,OAAA,CACA,WACA,CACAA,MAAA1rB,IAAAyH,KACA,CAEA,OACAzI,KAAAgvB,+BAAAtC,QACA1sB,KAAAivB,0BAAAvC,MAEA,EAMA7B,KAAAqG,0BAAA,SAAAxE,OACA,IAAApJ,OAAA8M,UAAAqB,UACA,GAAAzxB,KAAA0xB,wBAAAhF,aAAA,GAAA+E,UAAAzxB,KAAA2xB,0BAAAjF,OAAA,CACA,GAAA+E,YAAApB,cAAA,CAAA/M,OAAA+M,aAAA,CAEA,IAAA5nB,MAAAikB,MAAA1rB,IACA,MAAA0rB,MAAAH,SAAA,UACA,GACAG,MAAAP,YAAA,KACAsF,UAAAzxB,KAAA2xB,0BAAAjF,QACA,CACA,GAAA+E,YAAApB,cAAA,CAAA/M,OAAA8M,SAAA,CACA,QACA,CACA1D,MAAA/a,MAAA,uCACA,CACA,GAAAlJ,QAAAikB,MAAA1rB,IAAA,QAAAsiB,MAAA,CAEA,MAAAoJ,MAAAH,SAAA,UACA,GAAAvsB,KAAA2xB,0BAAAjF,OAAA,UACAA,MAAA/a,MAAA,uCACA,CACA,GAAAlJ,QAAAikB,MAAA1rB,IAAA,QAAAsiB,MAAA,CACA,MACAoJ,MAAA/a,MAAA,uCACA,CAEA,QACA,GAAA3R,KAAA0xB,wBAAAhF,OAAA,UACA+E,UAAAzxB,KAAA2xB,0BAAAjF,OACA,IAAA+E,UAAA,QAAAnO,MAAA,CACA,GAAAmO,YAAApB,cAAA,CAAA/M,OAAA+M,aAAA,CACA,CACA,EAGAxF,KAAA6G,wBAAA,SAAAhF,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,GAAAhB,KAAA4xB,4BAAAlF,OAAA,CACA,IAAArU,KAAAqU,MAAAtB,aACA,GAAAsB,MAAA3b,IAAA,KAAA/Q,KAAA4xB,4BAAAlF,OAAA,CACA,IAAApU,MAAAoU,MAAAtB,aACA,GAAA/S,QAAA,GAAAC,SAAA,GAAAD,KAAAC,MAAA,CACAoU,MAAA/a,MAAA,wCACA,CACA,WACA,CACA+a,MAAA1rB,IAAAyH,KACA,CACA,YACA,EAGAoiB,KAAA8G,0BAAA,SAAAjF,OACA,GAAA1sB,KAAA4xB,4BAAAlF,OAAA,QAAA0D,SAAA,CACA,OAAApwB,KAAA6xB,iCAAAnF,QAAA1sB,KAAA8xB,sBAAApF,MACA,EAGA7B,KAAAiH,sBAAA,SAAApF,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,GAAA0rB,MAAA3b,IAAA,KACA,IAAAwf,OAAA7D,MAAA3b,IAAA,IACA,IAAAuS,OAAAtjB,KAAAixB,qBAAAvE,OACA,GAAAA,MAAA3b,IAAA,KACA,GAAAwf,QAAAjN,SAAA+M,cAAA,CACA3D,MAAA/a,MAAA,8CACA,CACA,OAAA2R,MACA,CACAoJ,MAAA1rB,IAAAyH,KACA,CACA,GAAAikB,MAAA3b,IAAA,KACA,IAAAghB,SAAA/xB,KAAAgvB,+BAAAtC,OACA,GAAAqF,SAAA,CACA,OAAAA,QACA,CACArF,MAAA1rB,IAAAyH,KACA,CACA,WACA,EAGAoiB,KAAAgH,iCAAA,SAAAnF,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,GAAA0rB,MAAAH,SAAA,WACA,GAAAG,MAAA3b,IAAA,MACA,IAAAuS,OAAAtjB,KAAAgyB,sCAAAtF,OACA,GAAAA,MAAA3b,IAAA,MACA,OAAAuS,MACA,CACA,MAEAoJ,MAAA/a,MAAA,iBACA,CACA+a,MAAA1rB,IAAAyH,KACA,CACA,WACA,EAGAoiB,KAAAmH,sCAAA,SAAAtF,OACA,IAAApJ,OAAAtjB,KAAAiyB,mBAAAvF,OACA,MAAAA,MAAA3b,IAAA,MACA,GAAA/Q,KAAAiyB,mBAAAvF,SAAA2D,cAAA,CAAA/M,OAAA+M,aAAA,CACA,CACA,OAAA/M,MACA,EAIAuH,KAAAoH,mBAAA,SAAAvF,OACA,IAAAwF,MAAA,EACA,MAAAlyB,KAAA4xB,4BAAAlF,OAAA,CAAAwF,OAAA,CACA,OAAAA,QAAA,EAAA9B,UAAAC,aACA,EAGAxF,KAAA+G,4BAAA,SAAAlF,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,GAAA0rB,MAAA3b,IAAA,KACA,GACA/Q,KAAAivB,0BAAAvC,QACA1sB,KAAAmyB,qCAAAzF,OACA,CACA,WACA,CACA,GAAAA,MAAA3b,IAAA,KACA2b,MAAAtB,aAAA,EACA,WACA,CACAsB,MAAA1rB,IAAAyH,MACA,YACA,CACA,IAAA6jB,GAAAI,MAAAP,UACA,GAAAG,GAAA,GAAAA,KAAAI,MAAAN,aAAAgG,4CAAA9F,IAAA,cACA,GAAA+F,0BAAA/F,IAAA,cACAI,MAAAL,UACAK,MAAAtB,aAAAkB,GACA,WACA,EAGA,SAAA8F,4CAAA9F,IACA,OACAA,KAAA,IACAA,IAAA,IAAAA,IAAA,IACAA,IAAA,IAAAA,IAAA,IACAA,KAAA,IACAA,IAAA,IAAAA,IAAA,IACAA,KAAA,IACAA,KAAA,IACAA,KAAA,GAEA,CAGA,SAAA+F,0BAAA/F,IACA,OACAA,KAAA,IACAA,KAAA,IACAA,KAAA,IACAA,KAAA,IACAA,IAAA,IAAAA,IAAA,IACAA,IAAA,KAAAA,IAAA,GAEA,CAGAzB,KAAAsH,qCAAA,SAAAzF,OACA,IAAAJ,GAAAI,MAAAP,UACA,GAAAmG,6BAAAhG,IAAA,CACAI,MAAAtB,aAAAkB,GACAI,MAAAL,UACA,WACA,CACA,YACA,EAGA,SAAAiG,6BAAAhG,IACA,OACAA,KAAA,IACAA,KAAA,IACAA,KAAA,IACAA,KAAA,IACAA,KAAA,IACAA,KAAA,IACAA,IAAA,IAAAA,IAAA,IACAA,KAAA,IACAA,KAAA,IACAA,KAAA,GAEA,CAGAzB,KAAA2G,6BAAA,SAAA9E,OACA,IAAAJ,GAAAI,MAAAP,UACA,GAAAwD,eAAArD,UAAA,IACAI,MAAAtB,aAAAkB,GAAA,GACAI,MAAAL,UACA,WACA,CACA,YACA,EAGAxB,KAAA0E,4BAAA,SAAA7C,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,GAAA0rB,MAAA3b,IAAA,MACA,GAAA/Q,KAAA6vB,yBAAAnD,MAAA,IACA,WACA,CACA,GAAAA,MAAAzB,QAAA,CACAyB,MAAA/a,MAAA,iBACA,CACA+a,MAAA1rB,IAAAyH,KACA,CACA,YACA,EAGAoiB,KAAA+C,wBAAA,SAAAlB,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,IAAAsrB,GAAA,EACAI,MAAAtB,aAAA,EACA,MAAAuE,eAAArD,GAAAI,MAAAP,WAAA,CACAO,MAAAtB,aAAA,GAAAsB,MAAAtB,cAAAkB,GAAA,IACAI,MAAAL,SACA,CACA,OAAAK,MAAA1rB,MAAAyH,KACA,EACA,SAAAknB,eAAArD,IACA,OAAAA,IAAA,IAAAA,IAAA,EACA,CAGAzB,KAAAoF,oBAAA,SAAAvD,OACA,IAAAjkB,MAAAikB,MAAA1rB,IACA,IAAAsrB,GAAA,EACAI,MAAAtB,aAAA,EACA,MAAAmH,WAAAjG,GAAAI,MAAAP,WAAA,CACAO,MAAAtB,aAAA,GAAAsB,MAAAtB,aAAAoH,SAAAlG,IACAI,MAAAL,SACA,CACA,OAAAK,MAAA1rB,MAAAyH,KACA,EACA,SAAA8pB,WAAAjG,IACA,OACAA,IAAA,IAAAA,IAAA,IACAA,IAAA,IAAAA,IAAA,IACAA,IAAA,IAAAA,IAAA,GAEA,CACA,SAAAkG,SAAAlG,IACA,GAAAA,IAAA,IAAAA,IAAA,IACA,WAAAA,GAAA,GACA,CACA,GAAAA,IAAA,IAAAA,IAAA,KACA,WAAAA,GAAA,GACA,CACA,OAAAA,GAAA,EACA,CAIAzB,KAAA2E,oCAAA,SAAA9C,OACA,GAAA1sB,KAAAyyB,qBAAA/F,OAAA,CACA,IAAAgG,GAAAhG,MAAAtB,aACA,GAAAprB,KAAAyyB,qBAAA/F,OAAA,CACA,IAAAiG,GAAAjG,MAAAtB,aACA,GAAAsH,IAAA,GAAA1yB,KAAAyyB,qBAAA/F,OAAA,CACAA,MAAAtB,aAAAsH,GAAA,GAAAC,GAAA,EAAAjG,MAAAtB,YACA,MACAsB,MAAAtB,aAAAsH,GAAA,EAAAC,EACA,CACA,MACAjG,MAAAtB,aAAAsH,EACA,CACA,WACA,CACA,YACA,EAGA7H,KAAA4H,qBAAA,SAAA/F,OACA,IAAAJ,GAAAI,MAAAP,UACA,GAAAoF,aAAAjF,IAAA,CACAI,MAAAtB,aAAAkB,GAAA,GACAI,MAAAL,UACA,WACA,CACAK,MAAAtB,aAAA,EACA,YACA,EACA,SAAAmG,aAAAjF,IACA,OAAAA,IAAA,IAAAA,IAAA,EACA,CAKAzB,KAAAgF,yBAAA,SAAAnD,MAAAvyB,QACA,IAAAsO,MAAAikB,MAAA1rB,IACA0rB,MAAAtB,aAAA,EACA,QAAA5xB,EAAA,EAAAA,EAAAW,SAAAX,EAAA,CACA,IAAA8yB,GAAAI,MAAAP,UACA,IAAAoG,WAAAjG,IAAA,CACAI,MAAA1rB,IAAAyH,MACA,YACA,CACAikB,MAAAtB,aAAA,GAAAsB,MAAAtB,aAAAoH,SAAAlG,IACAI,MAAAL,SACA,CACA,WACA,EAMA,IAAAuG,MAAA,SAAAA,MAAA54B,GACAgG,KAAAgL,KAAAhR,EAAAgR,KACAhL,KAAAlD,MAAA9C,EAAA8C,MACAkD,KAAAyI,MAAAzO,EAAAyO,MACAzI,KAAAqH,IAAArN,EAAAqN,IACA,GAAArN,EAAAoI,QAAAqH,UACA,CAAAzJ,KAAAiL,IAAA,IAAAzC,eAAAxO,IAAA6Q,SAAA7Q,EAAA8Q,OAAA,CACA,GAAA9Q,EAAAoI,QAAAwH,OACA,CAAA5J,KAAAkL,MAAA,CAAAlR,EAAAyO,MAAAzO,EAAAqN,IAAA,CACA,EAIA,IAAAwrB,GAAAvmB,OAAA3P,UAIAk2B,GAAAvrB,KAAA,SAAAwrB,+BACA,IAAAA,+BAAA9yB,KAAAgL,KAAAxJ,SAAAxB,KAAA4M,YACA,CAAA5M,KAAAoS,iBAAApS,KAAAyI,MAAA,8BAAAzI,KAAAgL,KAAAxJ,QAAA,CACA,GAAAxB,KAAAoC,QAAAsH,QACA,CAAA1J,KAAAoC,QAAAsH,QAAA,IAAAkpB,MAAA5yB,MAAA,CAEAA,KAAAqN,WAAArN,KAAAqH,IACArH,KAAAoN,aAAApN,KAAAyI,MACAzI,KAAAkN,cAAAlN,KAAA8K,OACA9K,KAAAmN,gBAAAnN,KAAA6K,SACA7K,KAAAoP,WACA,EAEAyjB,GAAAE,SAAA,WACA/yB,KAAAsH,OACA,WAAAsrB,MAAA5yB,KACA,EAGA,UAAArC,SAAA,YACA,CAAAk1B,GAAAl1B,OAAAC,UAAA,WACA,IAAAo1B,SAAAhzB,KAEA,OACAsH,KAAA,WACA,IAAAiD,MAAAyoB,SAAAD,WACA,OACAE,KAAA1oB,MAAAS,OAAA3I,QAAAK,IACA5F,MAAAyN,MAEA,EAEA,EAQAsoB,GAAAzjB,UAAA,WACA,IAAA4R,WAAAhhB,KAAAghB,aACA,IAAAA,wBAAAf,cAAA,CAAAjgB,KAAAkzB,WAAA,CAEAlzB,KAAAyI,MAAAzI,KAAAgB,IACA,GAAAhB,KAAAoC,QAAAqH,UAAA,CAAAzJ,KAAA6K,SAAA7K,KAAAiN,aAAA,CACA,GAAAjN,KAAAgB,KAAAhB,KAAAvB,MAAAtE,OAAA,QAAA6F,KAAAmzB,YAAA9wB,QAAAK,IAAA,CAEA,GAAAse,WAAAd,SAAA,QAAAc,WAAAd,SAAAlgB,KAAA,KACA,CAAAA,KAAAozB,UAAApzB,KAAAqzB,oBAAA,CACA,EAEAR,GAAAO,UAAA,SAAAr5B,MAGA,GAAAkH,kBAAAlH,KAAAiG,KAAAoC,QAAA2G,aAAA,IAAAhP,OAAA,GACA,QAAAiG,KAAAszB,UAAA,CAEA,OAAAtzB,KAAAuzB,iBAAAx5B,KACA,EAEA84B,GAAAQ,kBAAA,WACA,IAAAt5B,KAAAiG,KAAAvB,MAAA8I,WAAAvH,KAAAgB,KACA,GAAAjH,MAAA,OAAAA,MAAA,cAAAA,IAAA,CACA,IAAAuN,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,OAAAsG,MAAA,OAAAA,MAAA,MAAAvN,YAAA,IAAAuN,KAAA,QACA,EAEAurB,GAAAW,iBAAA,WACA,IAAA3oB,SAAA7K,KAAAoC,QAAAuH,WAAA3J,KAAAiN,cACA,IAAAxE,MAAAzI,KAAAgB,IAAAqG,IAAArH,KAAAvB,MAAAsZ,QAAA,KAAA/X,KAAAgB,KAAA,GACA,GAAAqG,OAAA,GAAArH,KAAA2R,MAAA3R,KAAAgB,IAAA,0BACAhB,KAAAgB,IAAAqG,IAAA,EACA,GAAArH,KAAAoC,QAAAqH,UAAA,CACA,QAAAZ,eAAA,EAAA7H,IAAAyH,OAAAI,UAAAzB,cAAApH,KAAAvB,MAAAuC,IAAAhB,KAAAgB,OAAA,MACAhB,KAAA+M,QACA/L,IAAAhB,KAAA6M,UAAAhE,SACA,CACA,CACA,GAAA7I,KAAAoC,QAAAuH,UACA,CAAA3J,KAAAoC,QAAAuH,UAAA,KAAA3J,KAAAvB,MAAAc,MAAAkJ,MAAA,EAAApB,KAAAoB,MAAAzI,KAAAgB,IACA6J,SAAA7K,KAAAiN,cAAA,CACA,EAEA4lB,GAAA3kB,gBAAA,SAAAulB,WACA,IAAAhrB,MAAAzI,KAAAgB,IACA,IAAA6J,SAAA7K,KAAAoC,QAAAuH,WAAA3J,KAAAiN,cACA,IAAAqf,GAAAtsB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,KAAAyyB,WACA,MAAAzzB,KAAAgB,IAAAhB,KAAAvB,MAAAtE,SAAAgN,UAAAmlB,IAAA,CACAA,GAAAtsB,KAAAvB,MAAA8I,aAAAvH,KAAAgB,IACA,CACA,GAAAhB,KAAAoC,QAAAuH,UACA,CAAA3J,KAAAoC,QAAAuH,UAAA,MAAA3J,KAAAvB,MAAAc,MAAAkJ,MAAAgrB,UAAAzzB,KAAAgB,KAAAyH,MAAAzI,KAAAgB,IACA6J,SAAA7K,KAAAiN,cAAA,CACA,EAKA4lB,GAAAK,UAAA,WACAQ,KAAA,MAAA1zB,KAAAgB,IAAAhB,KAAAvB,MAAAtE,OAAA,CACA,IAAAmyB,GAAAtsB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,KACA,OAAAsrB,IACA,mBACAtsB,KAAAgB,IACA,MACA,QACA,GAAAhB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,WACAhB,KAAAgB,GACA,CACA,8BACAhB,KAAAgB,IACA,GAAAhB,KAAAoC,QAAAqH,UAAA,GACAzJ,KAAA+M,QACA/M,KAAA6M,UAAA7M,KAAAgB,GACA,CACA,MACA,QACA,OAAAhB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,IACA,QACAhB,KAAAwzB,mBACA,MACA,QACAxzB,KAAAkO,gBAAA,GACA,MACA,QACA,MAAAwlB,KAEA,MACA,QACA,GAAApH,GAAA,GAAAA,GAAA,IAAAA,IAAA,MAAA9kB,mBAAA/H,KAAAV,OAAAoC,aAAAmrB,KAAA,GACAtsB,KAAAgB,GACA,MACA,MAAA0yB,IACA,EAEA,CACA,EAOAb,GAAAM,YAAA,SAAAnoB,KAAAwa,KACAxlB,KAAAqH,IAAArH,KAAAgB,IACA,GAAAhB,KAAAoC,QAAAqH,UAAA,CAAAzJ,KAAA8K,OAAA9K,KAAAiN,aAAA,CACA,IAAAiU,SAAAlhB,KAAAgL,KACAhL,KAAAgL,UACAhL,KAAAlD,MAAA0oB,IAEAxlB,KAAAgC,cAAAkf,SACA,EAWA2R,GAAAc,cAAA,WACA,IAAArsB,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAAsG,MAAA,IAAAA,MAAA,WAAAtH,KAAA4zB,WAAA,MACA,IAAAC,MAAA7zB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAAhB,KAAAoC,QAAA2G,aAAA,GAAAzB,OAAA,IAAAusB,QAAA,IACA7zB,KAAAgB,KAAA,EACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAqB,SACA,QACA1D,KAAAgB,IACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAe,IACA,CACA,EAEAyvB,GAAAiB,gBAAA,WACA,IAAAxsB,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAAhB,KAAAwN,YAAA,GAAAxN,KAAAgB,IAAA,OAAAhB,KAAA2kB,YAAA,CACA,GAAArd,OAAA,WAAAtH,KAAA+zB,SAAA1xB,QAAAyB,OAAA,GACA,OAAA9D,KAAA+zB,SAAA1xB,QAAAsC,MAAA,EACA,EAEAkuB,GAAAmB,0BAAA,SAAAj6B,MACA,IAAAuN,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,IAAAizB,KAAA,EACA,IAAAC,UAAAn6B,OAAA,GAAAsI,QAAAqC,KAAArC,QAAAoC,OAGA,GAAAzE,KAAAoC,QAAA2G,aAAA,GAAAhP,OAAA,IAAAuN,OAAA,MACA2sB,KACAC,UAAA7xB,QAAAuC,SACA0C,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,EACA,CAEA,GAAAsG,OAAA,WAAAtH,KAAA+zB,SAAA1xB,QAAAyB,OAAAmwB,KAAA,GACA,OAAAj0B,KAAA+zB,SAAAG,UAAAD,KACA,EAEApB,GAAAsB,mBAAA,SAAAp6B,MACA,IAAAuN,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAAsG,OAAAvN,KAAA,CACA,GAAAiG,KAAAoC,QAAA2G,aAAA,IACA,IAAA8qB,MAAA7zB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAA6yB,QAAA,WAAA7zB,KAAA+zB,SAAA1xB,QAAAyB,OAAA,GACA,CACA,OAAA9D,KAAA+zB,SAAAh6B,OAAA,IAAAsI,QAAA2B,UAAA3B,QAAA4B,WAAA,EACA,CACA,GAAAqD,OAAA,WAAAtH,KAAA+zB,SAAA1xB,QAAAyB,OAAA,GACA,OAAA9D,KAAA+zB,SAAAh6B,OAAA,IAAAsI,QAAA6B,UAAA7B,QAAA+B,WAAA,EACA,EAEAyuB,GAAAuB,gBAAA,WACA,IAAA9sB,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAAsG,OAAA,WAAAtH,KAAA+zB,SAAA1xB,QAAAyB,OAAA,GACA,OAAA9D,KAAA+zB,SAAA1xB,QAAA8B,WAAA,EACA,EAEA0uB,GAAAwB,mBAAA,SAAAt6B,MACA,IAAAuN,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAAsG,OAAAvN,KAAA,CACA,GAAAuN,OAAA,KAAAtH,KAAAyN,UAAAzN,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,UACAhB,KAAAqN,aAAA,GAAArG,UAAAvH,KAAAO,KAAAvB,MAAAc,MAAAS,KAAAqN,WAAArN,KAAAgB,OAAA,CAEAhB,KAAAkO,gBAAA,GACAlO,KAAAkzB,YACA,OAAAlzB,KAAAoP,WACA,CACA,OAAApP,KAAA+zB,SAAA1xB,QAAA0B,OAAA,EACA,CACA,GAAAuD,OAAA,WAAAtH,KAAA+zB,SAAA1xB,QAAAyB,OAAA,GACA,OAAA9D,KAAA+zB,SAAA1xB,QAAAmC,QAAA,EACA,EAEAquB,GAAAyB,gBAAA,SAAAv6B,MACA,IAAAuN,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,IAAAizB,KAAA,EACA,GAAA3sB,OAAAvN,KAAA,CACAk6B,KAAAl6B,OAAA,IAAAiG,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,YACA,GAAAhB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAAizB,QAAA,WAAAj0B,KAAA+zB,SAAA1xB,QAAAyB,OAAAmwB,KAAA,GACA,OAAAj0B,KAAA+zB,SAAA1xB,QAAAkC,SAAA0vB,KACA,CACA,GAAA3sB,OAAA,IAAAvN,OAAA,KAAAiG,KAAAyN,UAAAzN,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,SACAhB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,SAEAhB,KAAAkO,gBAAA,GACAlO,KAAAkzB,YACA,OAAAlzB,KAAAoP,WACA,CACA,GAAA9H,OAAA,IAAA2sB,KAAA,EACA,OAAAj0B,KAAA+zB,SAAA1xB,QAAAiC,WAAA2vB,KACA,EAEApB,GAAA0B,kBAAA,SAAAx6B,MACA,IAAAuN,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAAsG,OAAA,WAAAtH,KAAA+zB,SAAA1xB,QAAAgC,SAAArE,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,aACA,GAAAjH,OAAA,IAAAuN,OAAA,IAAAtH,KAAAoC,QAAA2G,aAAA,GACA/I,KAAAgB,KAAA,EACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAkB,MACA,CACA,OAAAvD,KAAA+zB,SAAAh6B,OAAA,GAAAsI,QAAAwB,GAAAxB,QAAAR,OAAA,EACA,EAEAgxB,GAAA2B,mBAAA,WACA,IAAAzrB,YAAA/I,KAAAoC,QAAA2G,YACA,GAAAA,aAAA,IACA,IAAAzB,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAAsG,OAAA,IACA,IAAAusB,MAAA7zB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAA6yB,MAAA,IAAAA,MAAA,WAAA7zB,KAAA+zB,SAAA1xB,QAAAiB,YAAA,GACA,CACA,GAAAgE,OAAA,IACA,GAAAyB,aAAA,IACA,IAAA0rB,QAAAz0B,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAAyzB,UAAA,WAAAz0B,KAAA+zB,SAAA1xB,QAAAyB,OAAA,GACA,CACA,OAAA9D,KAAA+zB,SAAA1xB,QAAAwC,SAAA,EACA,CACA,CACA,OAAA7E,KAAA+zB,SAAA1xB,QAAAgB,SAAA,EACA,EAEAwvB,GAAA6B,qBAAA,WACA,IAAA3rB,YAAA/I,KAAAoC,QAAA2G,YACA,IAAAhP,KAAA,GACA,GAAAgP,aAAA,MACA/I,KAAAgB,IACAjH,KAAAiG,KAAAqzB,oBACA,GAAApyB,kBAAAlH,KAAA,OAAAA,OAAA,IACA,OAAAiG,KAAAmzB,YAAA9wB,QAAAI,UAAAzC,KAAA20B,YACA,CACA,CAEA30B,KAAA2R,MAAA3R,KAAAgB,IAAA,yBAAAiH,kBAAAlO,MAAA,IACA,EAEA84B,GAAAU,iBAAA,SAAAx5B,MACA,OAAAA,MAGA,QACA,OAAAiG,KAAA2zB,gBAGA,UAAA3zB,KAAAgB,IAAA,OAAAhB,KAAAmzB,YAAA9wB,QAAAU,QACA,UAAA/C,KAAAgB,IAAA,OAAAhB,KAAAmzB,YAAA9wB,QAAAW,QACA,UAAAhD,KAAAgB,IAAA,OAAAhB,KAAAmzB,YAAA9wB,QAAAa,MACA,UAAAlD,KAAAgB,IAAA,OAAAhB,KAAAmzB,YAAA9wB,QAAAY,OACA,UAAAjD,KAAAgB,IAAA,OAAAhB,KAAAmzB,YAAA9wB,QAAAM,UACA,UAAA3C,KAAAgB,IAAA,OAAAhB,KAAAmzB,YAAA9wB,QAAAO,UACA,WAAA5C,KAAAgB,IAAA,OAAAhB,KAAAmzB,YAAA9wB,QAAAQ,QACA,WAAA7C,KAAAgB,IAAA,OAAAhB,KAAAmzB,YAAA9wB,QAAAS,QACA,UAAA9C,KAAAgB,IAAA,OAAAhB,KAAAmzB,YAAA9wB,QAAAc,OAEA,QACA,GAAAnD,KAAAoC,QAAA2G,YAAA,WACA/I,KAAAgB,IACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAsB,WAEA,QACA,IAAA2D,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,GACA,GAAAsG,OAAA,KAAAA,OAAA,WAAAtH,KAAA40B,gBAAA,IACA,GAAA50B,KAAAoC,QAAA2G,aAAA,GACA,GAAAzB,OAAA,KAAAA,OAAA,WAAAtH,KAAA40B,gBAAA,GACA,GAAAttB,OAAA,IAAAA,OAAA,WAAAtH,KAAA40B,gBAAA,GACA,CAIA,wEACA,OAAA50B,KAAA4zB,WAAA,OAGA,gBACA,OAAA5zB,KAAA60B,WAAA96B,MAMA,QACA,OAAAiG,KAAA8zB,kBAEA,gBACA,OAAA9zB,KAAAg0B,0BAAAj6B,MAEA,iBACA,OAAAiG,KAAAm0B,mBAAAp6B,MAEA,QACA,OAAAiG,KAAAo0B,kBAEA,gBACA,OAAAp0B,KAAAq0B,mBAAAt6B,MAEA,gBACA,OAAAiG,KAAAs0B,gBAAAv6B,MAEA,gBACA,OAAAiG,KAAAu0B,kBAAAx6B,MAEA,QACA,OAAAiG,KAAAw0B,qBAEA,SACA,OAAAx0B,KAAA+zB,SAAA1xB,QAAAR,OAAA,GAEA,QACA,OAAA7B,KAAA00B,uBAGA10B,KAAA2R,MAAA3R,KAAAgB,IAAA,yBAAAiH,kBAAAlO,MAAA,IACA,EAEA84B,GAAAkB,SAAA,SAAA/oB,KAAAipB,MACA,IAAAa,IAAA90B,KAAAvB,MAAAc,MAAAS,KAAAgB,IAAAhB,KAAAgB,IAAAizB,MACAj0B,KAAAgB,KAAAizB,KACA,OAAAj0B,KAAAmzB,YAAAnoB,KAAA8pB,IACA,EAEAjC,GAAAlO,WAAA,WACA,IAAAoQ,QAAAC,QAAAvsB,MAAAzI,KAAAgB,IACA,QACA,GAAAhB,KAAAgB,KAAAhB,KAAAvB,MAAAtE,OAAA,CAAA6F,KAAA2R,MAAAlJ,MAAA,mCACA,IAAA6jB,GAAAtsB,KAAAvB,MAAAqS,OAAA9Q,KAAAgB,KACA,GAAAgG,UAAAvH,KAAA6sB,IAAA,CAAAtsB,KAAA2R,MAAAlJ,MAAA,mCACA,IAAAssB,QAAA,CACA,GAAAzI,KAAA,KAAA0I,QAAA,UACA,GAAA1I,KAAA,KAAA0I,QAAA,CAAAA,QAAA,WACA,GAAA1I,KAAA,MAAA0I,QAAA,OACAD,QAAAzI,KAAA,IACA,MAAAyI,QAAA,QACA/0B,KAAAgB,GACA,CACA,IAAA8jB,QAAA9kB,KAAAvB,MAAAc,MAAAkJ,MAAAzI,KAAAgB,OACAhB,KAAAgB,IACA,IAAAi0B,WAAAj1B,KAAAgB,IACA,IAAAwO,MAAAxP,KAAA20B,YACA,GAAA30B,KAAA4M,YAAA,CAAA5M,KAAAmR,WAAA8jB,WAAA,CAGA,IAAAvI,MAAA1sB,KAAAqO,cAAArO,KAAAqO,YAAA,IAAAyc,sBAAA9qB,OACA0sB,MAAAf,MAAAljB,MAAAqc,QAAAtV,OACAxP,KAAAysB,oBAAAC,OACA1sB,KAAA6sB,sBAAAH,OAGA,IAAA5vB,MAAA,KACA,IACAA,MAAA,IAAA8D,OAAAkkB,QAAAtV,MACA,OAAApW,GAGA,CAEA,OAAA4G,KAAAmzB,YAAA9wB,QAAAE,OAAA,CAAAuiB,gBAAAtV,YAAA1S,aACA,EAMA+1B,GAAAqC,QAAA,SAAAC,MAAAn6B,IAAAo6B,gCAEA,IAAAC,gBAAAr1B,KAAAoC,QAAA2G,aAAA,IAAA/N,MAAA6D,UAKA,IAAAy2B,4BAAAF,gCAAAp1B,KAAAvB,MAAA8I,WAAAvH,KAAAgB,OAAA,GAEA,IAAAyH,MAAAzI,KAAAgB,IAAAu0B,MAAA,EAAAC,SAAA,EACA,QAAAh8B,EAAA,EAAAJ,EAAA4B,KAAA,KAAAy6B,SAAAz6B,IAAAxB,EAAAJ,IAAAI,IAAAwG,KAAAgB,IAAA,CACA,IAAAjH,KAAAiG,KAAAvB,MAAA8I,WAAAvH,KAAAgB,KAAAwkB,SAAA,EAEA,GAAA6P,iBAAAt7B,OAAA,IACA,GAAAu7B,4BAAA,CAAAt1B,KAAAoS,iBAAApS,KAAAgB,IAAA,qEACA,GAAAw0B,WAAA,IAAAx1B,KAAAoS,iBAAApS,KAAAgB,IAAA,oDACA,GAAAxH,IAAA,GAAAwG,KAAAoS,iBAAApS,KAAAgB,IAAA,2DACAw0B,SAAAz7B,KACA,QACA,CAEA,GAAAA,MAAA,IAAAyrB,IAAAzrB,KAAA,WACA,GAAAA,MAAA,IAAAyrB,IAAAzrB,KAAA,WACA,GAAAA,MAAA,IAAAA,MAAA,IAAAyrB,IAAAzrB,KAAA,OACA,CAAAyrB,IAAAiQ,QAAA,CACA,GAAAjQ,KAAA2P,MAAA,OACAK,SAAAz7B,KACAw7B,YAAAJ,MAAA3P,GACA,CAEA,GAAA6P,iBAAAG,WAAA,IAAAx1B,KAAAoS,iBAAApS,KAAAgB,IAAA,4DACA,GAAAhB,KAAAgB,MAAAyH,OAAAzN,KAAA,MAAAgF,KAAAgB,IAAAyH,QAAAzN,IAAA,aAEA,OAAAu6B,KACA,EAEA,SAAAG,eAAAZ,IAAAQ,6BACA,GAAAA,4BAAA,CACA,OAAAK,SAAAb,IAAA,EACA,CAGA,OAAAc,WAAAd,IAAA9sB,QAAA,SACA,CAEA,SAAA6tB,eAAAf,KACA,UAAAgB,SAAA,YACA,WACA,CAGA,OAAAA,OAAAhB,IAAA9sB,QAAA,SACA,CAEA6qB,GAAA+B,gBAAA,SAAAO,OACA,IAAA1sB,MAAAzI,KAAAgB,IACAhB,KAAAgB,KAAA,EACA,IAAAwkB,IAAAxlB,KAAAk1B,QAAAC,OACA,GAAA3P,KAAA,MAAAxlB,KAAA2R,MAAA3R,KAAAyI,MAAA,8BAAA0sB,MAAA,CACA,GAAAn1B,KAAAoC,QAAA2G,aAAA,IAAA/I,KAAAvB,MAAA8I,WAAAvH,KAAAgB,OAAA,KACAwkB,IAAAqQ,eAAA71B,KAAAvB,MAAAc,MAAAkJ,MAAAzI,KAAAgB,QACAhB,KAAAgB,GACA,SAAAC,kBAAAjB,KAAAqzB,qBAAA,CAAArzB,KAAA2R,MAAA3R,KAAAgB,IAAA,oCACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAC,IAAAkjB,IACA,EAIAqN,GAAAe,WAAA,SAAAmC,eACA,IAAAttB,MAAAzI,KAAAgB,IACA,IAAA+0B,eAAA/1B,KAAAk1B,QAAA,GAAAr2B,UAAA,cAAAmB,KAAA2R,MAAAlJ,MAAA,kBACA,IAAAutB,MAAAh2B,KAAAgB,IAAAyH,OAAA,GAAAzI,KAAAvB,MAAA8I,WAAAkB,SAAA,GACA,GAAAutB,OAAAh2B,KAAAM,OAAA,CAAAN,KAAA2R,MAAAlJ,MAAA,kBACA,IAAAnB,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,KACA,IAAAg1B,QAAAD,eAAA/1B,KAAAoC,QAAA2G,aAAA,IAAAzB,OAAA,KACA,IAAA2uB,MAAAJ,eAAA71B,KAAAvB,MAAAc,MAAAkJ,MAAAzI,KAAAgB,QACAhB,KAAAgB,IACA,GAAAC,kBAAAjB,KAAAqzB,qBAAA,CAAArzB,KAAA2R,MAAA3R,KAAAgB,IAAA,oCACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAC,IAAA2zB,MACA,CACA,GAAAD,OAAA,OAAAv2B,KAAAO,KAAAvB,MAAAc,MAAAkJ,MAAAzI,KAAAgB,MAAA,CAAAg1B,MAAA,MACA,GAAA1uB,OAAA,KAAA0uB,MAAA,GACAh2B,KAAAgB,IACAhB,KAAAk1B,QAAA,IACA5tB,KAAAtH,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IACA,CACA,IAAAsG,OAAA,IAAAA,OAAA,OAAA0uB,MAAA,CACA1uB,KAAAtH,KAAAvB,MAAA8I,aAAAvH,KAAAgB,KACA,GAAAsG,OAAA,IAAAA,OAAA,MAAAtH,KAAAgB,GAAA,CACA,GAAAhB,KAAAk1B,QAAA,YAAAl1B,KAAA2R,MAAAlJ,MAAA,kBACA,CACA,GAAAxH,kBAAAjB,KAAAqzB,qBAAA,CAAArzB,KAAA2R,MAAA3R,KAAAgB,IAAA,oCAEA,IAAAwkB,IAAAkQ,eAAA11B,KAAAvB,MAAAc,MAAAkJ,MAAAzI,KAAAgB,KAAAg1B,OACA,OAAAh2B,KAAAmzB,YAAA9wB,QAAAC,IAAAkjB,IACA,EAIAqN,GAAAqD,cAAA,WACA,IAAA5J,GAAAtsB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,KAAAjH,KAEA,GAAAuyB,KAAA,KACA,GAAAtsB,KAAAoC,QAAA2G,YAAA,GAAA/I,KAAAmR,YAAA,CACA,IAAAglB,UAAAn2B,KAAAgB,IACAjH,KAAAiG,KAAAo2B,YAAAp2B,KAAAvB,MAAAsZ,QAAA,IAAA/X,KAAAgB,KAAAhB,KAAAgB,OACAhB,KAAAgB,IACA,GAAAjH,KAAA,SAAAiG,KAAAq2B,mBAAAF,QAAA,4BACA,MACAp8B,KAAAiG,KAAAo2B,YAAA,EACA,CACA,OAAAr8B,IACA,EAEA84B,GAAAgC,WAAA,SAAAyB,OACA,IAAAhV,IAAA,GAAAiV,aAAAv2B,KAAAgB,IACA,QACA,GAAAhB,KAAAgB,KAAAhB,KAAAvB,MAAAtE,OAAA,CAAA6F,KAAA2R,MAAA3R,KAAAyI,MAAA,gCACA,IAAA6jB,GAAAtsB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,KACA,GAAAsrB,KAAAgK,MAAA,OACA,GAAAhK,KAAA,IACAhL,KAAAthB,KAAAvB,MAAAc,MAAAg3B,WAAAv2B,KAAAgB,KACAsgB,KAAAthB,KAAAw2B,gBAAA,OACAD,WAAAv2B,KAAAgB,GACA,SAAAsrB,KAAA,MAAAA,KAAA,MACA,GAAAtsB,KAAAoC,QAAA2G,YAAA,IAAA/I,KAAA2R,MAAA3R,KAAAyI,MAAA,kCACAzI,KAAAgB,IACA,GAAAhB,KAAAoC,QAAAqH,UAAA,CACAzJ,KAAA+M,UACA/M,KAAA6M,UAAA7M,KAAAgB,GACA,CACA,MACA,GAAAmG,UAAAmlB,IAAA,CAAAtsB,KAAA2R,MAAA3R,KAAAyI,MAAA,kCACAzI,KAAAgB,GACA,CACA,CACAsgB,KAAAthB,KAAAvB,MAAAc,MAAAg3B,WAAAv2B,KAAAgB,OACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAG,OAAA8e,IACA,EAIA,IAAAmV,8BAAA,GAEA5D,GAAAnS,qBAAA,WACA1gB,KAAA02B,kBAAA,KACA,IACA12B,KAAA22B,eACA,OAAA1O,KACA,GAAAA,MAAAwO,8BAAA,CACAz2B,KAAA42B,0BACA,MACA,MAAA3O,GACA,CACA,CAEAjoB,KAAA02B,kBAAA,KACA,EAEA7D,GAAAwD,mBAAA,SAAAQ,SAAA7O,SACA,GAAAhoB,KAAA02B,mBAAA12B,KAAAoC,QAAA2G,aAAA,GACA,MAAA0tB,6BACA,MACAz2B,KAAA2R,MAAAklB,SAAA7O,QACA,CACA,EAEA6K,GAAA8D,cAAA,WACA,IAAArV,IAAA,GAAAiV,WAAAv2B,KAAAgB,IACA,QACA,GAAAhB,KAAAgB,KAAAhB,KAAAvB,MAAAtE,OAAA,CAAA6F,KAAA2R,MAAA3R,KAAAyI,MAAA,yBACA,IAAA6jB,GAAAtsB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,KACA,GAAAsrB,KAAA,IAAAA,KAAA,IAAAtsB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,IAAA,UACA,GAAAhB,KAAAgB,MAAAhB,KAAAyI,QAAAzI,KAAAgL,OAAA3I,QAAAmB,UAAAxD,KAAAgL,OAAA3I,QAAAoB,iBAAA,CACA,GAAA6oB,KAAA,IACAtsB,KAAAgB,KAAA,EACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAuB,aACA,QACA5D,KAAAgB,IACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAsB,UACA,CACA,CACA2d,KAAAthB,KAAAvB,MAAAc,MAAAg3B,WAAAv2B,KAAAgB,KACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAmB,SAAA8d,IACA,CACA,GAAAgL,KAAA,IACAhL,KAAAthB,KAAAvB,MAAAc,MAAAg3B,WAAAv2B,KAAAgB,KACAsgB,KAAAthB,KAAAw2B,gBAAA,MACAD,WAAAv2B,KAAAgB,GACA,SAAAmG,UAAAmlB,IAAA,CACAhL,KAAAthB,KAAAvB,MAAAc,MAAAg3B,WAAAv2B,KAAAgB,OACAhB,KAAAgB,IACA,OAAAsrB,IACA,QACA,GAAAtsB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,OAAA,MAAAhB,KAAAgB,GAAA,CACA,QACAsgB,KAAA,KACA,MACA,QACAA,KAAAviB,OAAAoC,aAAAmrB,IACA,MAEA,GAAAtsB,KAAAoC,QAAAqH,UAAA,GACAzJ,KAAA+M,QACA/M,KAAA6M,UAAA7M,KAAAgB,GACA,CACAu1B,WAAAv2B,KAAAgB,GACA,QACAhB,KAAAgB,GACA,CACA,CACA,EAGA6xB,GAAA+D,yBAAA,WACA,KAAA52B,KAAAgB,IAAAhB,KAAAvB,MAAAtE,OAAA6F,KAAAgB,MAAA,CACA,OAAAhB,KAAAvB,MAAAuB,KAAAgB,MACA,WACAhB,KAAAgB,IACA,MAEA,QACA,GAAAhB,KAAAvB,MAAAuB,KAAAgB,IAAA,UACA,KACA,CAGA,QACA,OAAAhB,KAAAmzB,YAAA9wB,QAAAoB,gBAAAzD,KAAAvB,MAAAc,MAAAS,KAAAyI,MAAAzI,KAAAgB,MAIA,CACAhB,KAAA2R,MAAA3R,KAAAyI,MAAA,wBACA,EAIAoqB,GAAA2D,gBAAA,SAAAM,YACA,IAAAxK,GAAAtsB,KAAAvB,MAAA8I,aAAAvH,KAAAgB,OACAhB,KAAAgB,IACA,OAAAsrB,IACA,oBACA,oBACA,gBAAAvtB,OAAAoC,aAAAnB,KAAAo2B,YAAA,IACA,gBAAAnuB,kBAAAjI,KAAAk2B,iBACA,oBACA,mBACA,oBACA,oBACA,WAAAl2B,KAAAvB,MAAA8I,WAAAvH,KAAAgB,OAAA,MAAAhB,KAAAgB,GAAA,CACA,QACA,GAAAhB,KAAAoC,QAAAqH,UAAA,CAAAzJ,KAAA6M,UAAA7M,KAAAgB,MAAAhB,KAAA+M,OAAA,CACA,SACA,QACA,QACA,GAAA/M,KAAAM,OAAA,CACAN,KAAAq2B,mBACAr2B,KAAAgB,IAAA,EACA,0BAEA,CACA,GAAA81B,WAAA,CACA,IAAAX,QAAAn2B,KAAAgB,IAAA,EAEAhB,KAAAq2B,mBACAF,QACA,6CAEA,CACA,QACA,GAAA7J,IAAA,IAAAA,IAAA,IACA,IAAAyK,SAAA/2B,KAAAvB,MAAAu4B,OAAAh3B,KAAAgB,IAAA,KAAA2P,MAAA,cACA,IAAAqlB,MAAAL,SAAAoB,SAAA,GACA,GAAAf,MAAA,KACAe,kBAAAx3B,MAAA,MACAy2B,MAAAL,SAAAoB,SAAA,EACA,CACA/2B,KAAAgB,KAAA+1B,SAAA58B,OAAA,EACAmyB,GAAAtsB,KAAAvB,MAAA8I,WAAAvH,KAAAgB,KACA,IAAA+1B,WAAA,KAAAzK,KAAA,IAAAA,KAAA,MAAAtsB,KAAAM,QAAAw2B,YAAA,CACA92B,KAAAq2B,mBACAr2B,KAAAgB,IAAA,EAAA+1B,SAAA58B,OACA28B,WACA,mCACA,+BAEA,CACA,OAAA/3B,OAAAoC,aAAA60B,MACA,CACA,GAAA7uB,UAAAmlB,IAAA,CAGA,QACA,CACA,OAAAvtB,OAAAoC,aAAAmrB,IAEA,EAIAuG,GAAAuD,YAAA,SAAAp7B,KACA,IAAAm7B,QAAAn2B,KAAAgB,IACA,IAAA3H,EAAA2G,KAAAk1B,QAAA,GAAAl6B,KACA,GAAA3B,IAAA,MAAA2G,KAAAq2B,mBAAAF,QAAA,iCACA,OAAA98B,CACA,EAQAw5B,GAAA8B,UAAA,WACA30B,KAAA4M,YAAA,MACA,IAAAqqB,KAAA,GAAAtZ,MAAA,KAAA4Y,WAAAv2B,KAAAgB,IACA,IAAAE,OAAAlB,KAAAoC,QAAA2G,aAAA,EACA,MAAA/I,KAAAgB,IAAAhB,KAAAvB,MAAAtE,OAAA,CACA,IAAAmyB,GAAAtsB,KAAAqzB,oBACA,GAAAjyB,iBAAAkrB,GAAAprB,QAAA,CACAlB,KAAAgB,KAAAsrB,IAAA,SACA,SAAAA,KAAA,IACAtsB,KAAA4M,YAAA,KACAqqB,MAAAj3B,KAAAvB,MAAAc,MAAAg3B,WAAAv2B,KAAAgB,KACA,IAAAk2B,SAAAl3B,KAAAgB,IACA,GAAAhB,KAAAvB,MAAA8I,aAAAvH,KAAAgB,OAAA,IACA,CAAAhB,KAAAq2B,mBAAAr2B,KAAAgB,IAAA,+CACAhB,KAAAgB,IACA,IAAAm2B,IAAAn3B,KAAAk2B,gBACA,KAAAvY,MAAA1c,kBAAAG,kBAAA+1B,IAAAj2B,QACA,CAAAlB,KAAAq2B,mBAAAa,SAAA,0BACAD,MAAAhvB,kBAAAkvB,KACAZ,WAAAv2B,KAAAgB,GACA,MACA,KACA,CACA2c,MAAA,KACA,CACA,OAAAsZ,KAAAj3B,KAAAvB,MAAAc,MAAAg3B,WAAAv2B,KAAAgB,IACA,EAKA6xB,GAAAS,SAAA,WACA,IAAA2D,KAAAj3B,KAAA20B,YACA,IAAA3pB,KAAA3I,QAAA7C,KACA,GAAAQ,KAAAkC,SAAAzC,KAAAw3B,MAAA,CACAjsB,KAAA9I,SAAA+0B,KACA,CACA,OAAAj3B,KAAAmzB,YAAAnoB,KAAAisB,KACA,EAmBA,IAAAG,QAAA,QAEA9qB,OAAAvM,MAAA,CACAuM,cACA8qB,gBACAtuB,8BACAX,kBACAK,8BACAG,wBACAkgB,UACAxnB,oBACAg2B,SAAAh1B,QACAi1B,aAAAp1B,SACA6d,sBACAwX,YAAApX,MACA/e,kCACAH,oCACA2xB,YACAzrB,oBACAH,oBACAC,sBACAO,uCAUA,SAAAyH,MAAAxQ,MAAA2D,SACA,OAAAkK,OAAA2C,MAAAxQ,MAAA2D,QACA,CAMA,SAAA8N,kBAAAzR,MAAAuC,IAAAoB,SACA,OAAAkK,OAAA4D,kBAAAzR,MAAAuC,IAAAoB,QACA,CAKA,SAAAiO,UAAA5R,MAAA2D,SACA,OAAAkK,OAAA+D,UAAA5R,MAAA2D,QACA,CAEAnI,QAAA4uB,UACA5uB,QAAAqS,cACArS,QAAAkO,kBACAlO,QAAAuO,8BACAvO,QAAA8lB,sBACA9lB,QAAA24B,YACA34B,QAAAoH,oBACApH,QAAA6O,8BACA7O,QAAA0O,wBACA1O,QAAAmH,kCACAnH,QAAAgH,oCACAhH,QAAAkN,oBACAlN,QAAAq9B,aAAAp1B,SACAjI,QAAA+M,oBACA/M,QAAAgN,sBACAhN,QAAAuN,sCACAvN,QAAAgV,YACAhV,QAAAiW,oCACAjW,QAAAs9B,YAAApX,MACAlmB,QAAAo9B,SAAAh1B,QACApI,QAAAoW,oBACApW,QAAAm9B,eAEA,G,2CC91LAh9B,OAAAH,QAAA2Z,MAEA,SAAAA,MAAAse,MAAAsF,SAAAC,QACA,IAAAC,KAAA,MACAD,eAAAE,KACAC,MAAA1F,YAEA,OAAAA,QAAA,EAAAsF,WAAAI,MAEA,SAAAA,MAAA3P,IAAA3E,QACA,GAAAsU,MAAA1F,OAAA,GACA,UAAAp4B,MAAA,8BACA,GACA89B,MAAA1F,MAGA,GAAAjK,IAAA,CACAyP,KAAA,KACAF,SAAAvP,KAEAuP,SAAAC,MACA,SAAAG,MAAA1F,QAAA,IAAAwF,KAAA,CACAF,SAAA,KAAAlU,OACA,CACA,CACA,CAEA,SAAAqU,OAAA,C,2CCpBAv9B,OAAAH,QAAA,SAAA49B,YAAApvB,MAAApB,KACA,IAAAywB,MAAAD,YAAAE,WACAtvB,aAAA,EACApB,SAAAywB,MAEA,GAAAD,YAAAt4B,MAAA,QAAAs4B,YAAAt4B,MAAAkJ,MAAApB,IAAA,CAEA,GAAAoB,MAAA,GAAAA,OAAAqvB,KAAA,CACA,GAAAzwB,IAAA,GAAAA,KAAAywB,KAAA,CACA,GAAAzwB,IAAAywB,MAAA,CAAAzwB,IAAAywB,KAAA,CAEA,GAAArvB,OAAAqvB,OAAArvB,OAAApB,KAAAywB,QAAA,GACA,WAAAE,YAAA,EACA,CAEA,IAAAC,IAAA,IAAAC,WAAAL,aACA,IAAAvU,OAAA,IAAA4U,WAAA7wB,IAAAoB,OACA,QAAAjP,EAAAiP,MAAA0vB,GAAA,EAAA3+B,EAAA6N,IAAA7N,IAAA2+B,KAAA,CACA7U,OAAA6U,IAAAF,IAAAz+B,EACA,CACA,OAAA8pB,OAAA8U,MACA,C,yEC5BA,aAEA,IAAAC,aAAA1+B,QAAA;;;;;;GAWA,SAAA2+B,QAAAz+B,EAAA0+B,GACA,GAAA1+B,IAAA0+B,EAAA,CACA,QACA,CAEA,IAAAC,EAAA3+B,EAAAM,OACA,IAAAs+B,EAAAF,EAAAp+B,OAEA,QAAAX,EAAA,EAAAwB,IAAA09B,KAAAhL,IAAA8K,EAAAC,GAAAj/B,EAAAwB,MAAAxB,EAAA,CACA,GAAAK,EAAAL,KAAA++B,EAAA/+B,GAAA,CACAg/B,EAAA3+B,EAAAL,GACAi/B,EAAAF,EAAA/+B,GACA,KACA,CACA,CAEA,GAAAg/B,EAAAC,EAAA,CACA,QACA,CACA,GAAAA,EAAAD,EAAA,CACA,QACA,CACA,QACA,CACA,SAAAG,SAAAJ,GACA,GAAA74B,OAAAk5B,eAAAl5B,OAAAk5B,OAAAD,WAAA,YACA,OAAAj5B,OAAAk5B,OAAAD,SAAAJ,EACA,CACA,SAAAA,GAAA,MAAAA,EAAAM,UACA,CA8BA,IAAAC,KAAAn/B,QAAA,SACA,IAAAiO,OAAAvL,OAAAM,UAAAgL,eACA,IAAAoxB,OAAA79B,MAAAyB,UAAA4C,MACA,IAAAy5B,mBAAA,WACA,gBAAAC,MAAA,EAAAz5B,OAAA,KACA,CAFA,GAGA,SAAA05B,UAAAr8B,KACA,OAAAR,OAAAM,UAAA2C,SAAApF,KAAA2C,IACA,CACA,SAAAs8B,OAAAC,QACA,GAAAT,SAAAS,QAAA,CACA,YACA,CACA,UAAA15B,OAAAs4B,cAAA,YACA,YACA,CACA,UAAAA,YAAAmB,SAAA,YACA,OAAAnB,YAAAmB,OAAAC,OACA,CACA,IAAAA,OAAA,CACA,YACA,CACA,GAAAA,kBAAAC,SAAA,CACA,WACA,CACA,GAAAD,OAAAhB,QAAAgB,OAAAhB,kBAAAJ,YAAA,CACA,WACA,CACA,YACA,CAKA,IAAAsB,OAAAl/B,OAAAH,QAAAs/B,GAOA,IAAA1U,MAAA,8BAEA,SAAA2U,QAAAC,MACA,IAAAX,KAAAY,WAAAD,MAAA,CACA,MACA,CACA,GAAAT,mBAAA,CACA,OAAAS,KAAAj6B,IACA,CACA,IAAAs1B,IAAA2E,KAAAn6B,WACA,IAAAqR,MAAAmkB,IAAAnkB,MAAAkU,OACA,OAAAlU,aAAA,EACA,CACA2oB,OAAAK,eAAA,SAAAA,eAAAv3B,SACApC,KAAAR,KAAA,iBACAQ,KAAA45B,OAAAx3B,QAAAw3B,OACA55B,KAAA65B,SAAAz3B,QAAAy3B,SACA75B,KAAA0e,SAAAtc,QAAAsc,SACA,GAAAtc,QAAA4lB,QAAA,CACAhoB,KAAAgoB,QAAA5lB,QAAA4lB,QACAhoB,KAAA85B,iBAAA,KACA,MACA95B,KAAAgoB,QAAA+R,WAAA/5B,MACAA,KAAA85B,iBAAA,IACA,CACA,IAAAE,mBAAA53B,QAAA43B,oBAAAC,KACA,GAAAngC,MAAAogC,kBAAA,CACApgC,MAAAogC,kBAAAl6B,KAAAg6B,mBACA,MAEA,IAAA/R,IAAA,IAAAnuB,MACA,GAAAmuB,IAAAkS,MAAA,CACA,IAAA7Y,IAAA2G,IAAAkS,MAGA,IAAAC,QAAAZ,QAAAQ,oBACA,IAAAK,IAAA/Y,IAAAvJ,QAAA,KAAAqiB,SACA,GAAAC,KAAA,GAGA,IAAAC,UAAAhZ,IAAAvJ,QAAA,KAAAsiB,IAAA,GACA/Y,QAAAiZ,UAAAD,UAAA,EACA,CAEAt6B,KAAAm6B,MAAA7Y,GACA,CACA,CACA,EAGAwX,KAAA0B,SAAAlB,OAAAK,eAAA7/B,OAEA,SAAA2gC,SAAAzO,EAAA3yB,GACA,UAAA2yB,IAAA,UACA,OAAAA,EAAA7xB,OAAAd,EAAA2yB,IAAAzsB,MAAA,EAAAlG,EACA,MACA,OAAA2yB,CACA,CACA,CACA,SAAA0O,QAAAC,WACA,GAAA3B,qBAAAF,KAAAY,WAAAiB,WAAA,CACA,OAAA7B,KAAA4B,QAAAC,UACA,CACA,IAAAC,QAAApB,QAAAmB,WACA,IAAAn7B,KAAAo7B,QAAA,KAAAA,QAAA,GACA,kBAAAp7B,KAAA,GACA,CACA,SAAAu6B,WAAAx+B,MACA,OAAAk/B,SAAAC,QAAAn/B,KAAAq+B,QAAA,SACAr+B,KAAAmjB,SAAA,IACA+b,SAAAC,QAAAn/B,KAAAs+B,UAAA,IACA,CAaA,SAAAI,KAAAL,OAAAC,SAAA7R,QAAAtJ,SAAAsb,oBACA,UAAAV,OAAAK,eAAA,CACA3R,gBACA4R,cACAC,kBACAnb,kBACAsb,uCAEA,CAGAV,OAAAW,UASA,SAAAV,GAAAz8B,MAAAkrB,SACA,IAAAlrB,MAAAm9B,KAAAn9B,MAAA,KAAAkrB,QAAA,KAAAsR,OAAAC,GACA,CACAD,OAAAC,MAMAD,OAAAuB,MAAA,SAAAA,MAAAjB,OAAAC,SAAA7R,SACA,GAAA4R,QAAAC,SAAAI,KAAAL,OAAAC,SAAA7R,QAAA,KAAAsR,OAAAuB,MACA,EAKAvB,OAAAwB,SAAA,SAAAA,SAAAlB,OAAAC,SAAA7R,SACA,GAAA4R,QAAAC,SAAA,CACAI,KAAAL,OAAAC,SAAA7R,QAAA,KAAAsR,OAAAwB,SACA,CACA,EAKAxB,OAAAyB,UAAA,SAAAA,UAAAnB,OAAAC,SAAA7R,SACA,IAAAgT,WAAApB,OAAAC,SAAA,QACAI,KAAAL,OAAAC,SAAA7R,QAAA,YAAAsR,OAAAyB,UACA,CACA,EAEAzB,OAAA2B,gBAAA,SAAAA,gBAAArB,OAAAC,SAAA7R,SACA,IAAAgT,WAAApB,OAAAC,SAAA,OACAI,KAAAL,OAAAC,SAAA7R,QAAA,kBAAAsR,OAAA2B,gBACA,CACA,EAEA,SAAAD,WAAApB,OAAAC,SAAAv5B,OAAA46B,OAEA,GAAAtB,SAAAC,SAAA,CACA,WACA,SAAAlB,SAAAiB,SAAAjB,SAAAkB,UAAA,CACA,OAAAvB,QAAAsB,OAAAC,YAAA,CAIA,SAAAf,KAAAqC,OAAAvB,SAAAd,KAAAqC,OAAAtB,UAAA,CACA,OAAAD,OAAAwB,YAAAvB,SAAAuB,SAKA,SAAAtC,KAAAuC,SAAAzB,SAAAd,KAAAuC,SAAAxB,UAAA,CACA,OAAAD,OAAA1yB,SAAA2yB,SAAA3yB,QACA0yB,OAAAl6B,SAAAm6B,SAAAn6B,QACAk6B,OAAA0B,YAAAzB,SAAAyB,WACA1B,OAAAnpB,YAAAopB,SAAAppB,WACAmpB,OAAA2B,aAAA1B,SAAA0B,UAIA,UAAA3B,SAAA,aAAAA,SAAA,YACAC,WAAA,aAAAA,WAAA,WACA,OAAAv5B,OAAAs5B,SAAAC,SAAAD,QAAAC,QAQA,SAAAV,OAAAS,SAAAT,OAAAU,WACAX,UAAAU,UAAAV,UAAAW,aACAD,kBAAA4B,cACA5B,kBAAA6B,cAAA,CACA,OAAAnD,QAAA,IAAAJ,WAAA0B,OAAAxB,QACA,IAAAF,WAAA2B,SAAAzB,WAAA,CAQA,SAAAO,SAAAiB,UAAAjB,SAAAkB,UAAA,CACA,YACA,MACAqB,aAAA,CAAAtB,OAAA,GAAAC,SAAA,IAEA,IAAA6B,YAAAR,MAAAtB,OAAA7hB,QAAA6hB,QACA,GAAA8B,eAAA,GACA,GAAAA,cAAAR,MAAArB,SAAA9hB,QAAA8hB,UAAA,CACA,WACA,CACA,CAEAqB,MAAAtB,OAAApvB,KAAAovB,QACAsB,MAAArB,SAAArvB,KAAAqvB,UAEA,OAAA8B,SAAA/B,OAAAC,SAAAv5B,OAAA46B,MACA,CACA,CAEA,SAAAU,YAAAjkB,QACA,OAAAtb,OAAAM,UAAA2C,SAAApF,KAAAyd,SAAA,oBACA,CAEA,SAAAgkB,SAAA9hC,EAAA0+B,EAAAj4B,OAAAu7B,sBACA,GAAAhiC,IAAA,MAAAA,IAAAgF,WAAA05B,IAAA,MAAAA,IAAA15B,UACA,aAEA,GAAAi6B,KAAAgD,YAAAjiC,IAAAi/B,KAAAgD,YAAAvD,GACA,OAAA1+B,IAAA0+B,EACA,GAAAj4B,QAAAjE,OAAAY,eAAApD,KAAAwC,OAAAY,eAAAs7B,GACA,aACA,IAAAwD,QAAAH,YAAA/hC,GACA,IAAAmiC,QAAAJ,YAAArD,GACA,GAAAwD,UAAAC,UAAAD,SAAAC,QACA,aACA,GAAAD,QAAA,CACAliC,EAAAk/B,OAAA7+B,KAAAL,GACA0+B,EAAAQ,OAAA7+B,KAAAq+B,GACA,OAAAyC,WAAAnhC,EAAA0+B,EAAAj4B,OACA,CACA,IAAA27B,GAAAC,WAAAriC,GACA,IAAAsiC,GAAAD,WAAA3D,GACA,IAAAh8B,IAAA/C,EAGA,GAAAyiC,GAAA9hC,SAAAgiC,GAAAhiC,OACA,aAEA8hC,GAAAG,OACAD,GAAAC,OAEA,IAAA5iC,EAAAyiC,GAAA9hC,OAAA,EAAAX,GAAA,EAAAA,IAAA,CACA,GAAAyiC,GAAAziC,KAAA2iC,GAAA3iC,GACA,YACA,CAGA,IAAAA,EAAAyiC,GAAA9hC,OAAA,EAAAX,GAAA,EAAAA,IAAA,CACA+C,IAAA0/B,GAAAziC,GACA,IAAAwhC,WAAAnhC,EAAA0C,KAAAg8B,EAAAh8B,KAAA+D,OAAAu7B,sBACA,YACA,CACA,WACA,CAKAvC,OAAA+C,aAAA,SAAAA,aAAAzC,OAAAC,SAAA7R,SACA,GAAAgT,WAAApB,OAAAC,SAAA,QACAI,KAAAL,OAAAC,SAAA7R,QAAA,eAAAsR,OAAA+C,aACA,CACA,EAEA/C,OAAAgD,sCACA,SAAAA,mBAAA1C,OAAAC,SAAA7R,SACA,GAAAgT,WAAApB,OAAAC,SAAA,OACAI,KAAAL,OAAAC,SAAA7R,QAAA,qBAAAsU,mBACA,CACA,CAMAhD,OAAAiD,YAAA,SAAAA,YAAA3C,OAAAC,SAAA7R,SACA,GAAA4R,SAAAC,SAAA,CACAI,KAAAL,OAAAC,SAAA7R,QAAA,MAAAsR,OAAAiD,YACA,CACA,EAKAjD,OAAAkD,eAAA,SAAAA,eAAA5C,OAAAC,SAAA7R,SACA,GAAA4R,SAAAC,SAAA,CACAI,KAAAL,OAAAC,SAAA7R,QAAA,MAAAsR,OAAAkD,eACA,CACA,EAEA,SAAAC,kBAAA7C,OAAAC,UACA,IAAAD,SAAAC,SAAA,CACA,YACA,CAEA,GAAAx9B,OAAAM,UAAA2C,SAAApF,KAAA2/B,WAAA,mBACA,OAAAA,SAAAp6B,KAAAm6B,OACA,CAEA,IACA,GAAAA,kBAAAC,SAAA,CACA,WACA,CACA,OAAAzgC,GAEA,CAEA,GAAAU,MAAA4iC,cAAA7C,UAAA,CACA,YACA,CAEA,OAAAA,SAAA3/B,KAAA,GAAA0/B,UAAA,IACA,CAEA,SAAA+C,UAAAhyB,OACA,IAAAiyB,MACA,IACAjyB,OACA,OAAAvR,GACAwjC,MAAAxjC,CACA,CACA,OAAAwjC,KACA,CAEA,SAAAC,QAAAC,YAAAnyB,MAAAkvB,SAAA7R,SACA,IAAA4R,OAEA,UAAAjvB,QAAA,YACA,UAAA/O,UAAA,sCACA,CAEA,UAAAi+B,WAAA,UACA7R,QAAA6R,SACAA,SAAA,IACA,CAEAD,OAAA+C,UAAAhyB,OAEAqd,SAAA6R,mBAAAr6B,KAAA,KAAAq6B,SAAAr6B,KAAA,WACAwoB,QAAA,IAAAA,QAAA,KAEA,GAAA8U,cAAAlD,OAAA,CACAK,KAAAL,OAAAC,SAAA,6BAAA7R,QACA,CAEA,IAAA+U,2BAAA/U,UAAA,SACA,IAAAgV,qBAAAF,aAAAhE,KAAAmE,QAAArD,QACA,IAAAsD,uBAAAJ,aAAAlD,SAAAC,SAEA,GAAAmD,qBACAD,qBACAN,kBAAA7C,OAAAC,WACAqD,sBAAA,CACAjD,KAAAL,OAAAC,SAAA,yBAAA7R,QACA,CAEA,GAAA8U,aAAAlD,QAAAC,WACA4C,kBAAA7C,OAAAC,YAAAiD,aAAAlD,OAAA,CACA,MAAAA,MACA,CACA,CAKAN,OAAA6D,OAAA,SAAAxyB,MAAAiyB,MAAA5U,SACA6U,QAAA,KAAAlyB,MAAAiyB,MAAA5U,QACA,EAGAsR,OAAA8D,aAAA,SAAAzyB,MAAAiyB,MAAA5U,SACA6U,QAAA,MAAAlyB,MAAAiyB,MAAA5U,QACA,EAEAsR,OAAA+D,QAAA,SAAApV,KAAA,GAAAA,IAAA,MAAAA,GAAA,EAGA,SAAA3nB,OAAAxD,MAAAkrB,SACA,IAAAlrB,MAAAm9B,KAAAn9B,MAAA,KAAAkrB,QAAA,KAAA1nB,OACA,CACAg5B,OAAAh5B,OAAA+3B,aAAA/3B,OAAAg5B,OAAA,CACAuB,MAAAvB,OAAAiD,YACAxB,UAAAzB,OAAA2B,gBACAH,SAAAxB,OAAAkD,eACAH,aAAA/C,OAAAgD,qBAEAhD,OAAAh5B,cAAAg5B,OAAAh5B,OAEA,IAAA47B,WAAA7/B,OAAA4W,MAAA,SAAApW,KACA,IAAAoW,KAAA,GACA,QAAA1W,OAAAM,IAAA,CACA,GAAA+K,OAAA1N,KAAA2C,IAAAN,KAAA0W,KAAAzI,KAAAjO,IACA,CACA,OAAA0W,IACA,C,2MCzfA,UAAA5W,OAAAkB,SAAA,YAEAnD,OAAAH,QAAA,SAAAugC,SAAA8C,KAAAC,WACAD,KAAAE,OAAAD,UACAD,KAAA3gC,UAAAN,OAAAkB,OAAAggC,UAAA5gC,UAAA,CACAa,YAAA,CACAV,MAAAwgC,KACAphC,WAAA,MACAE,SAAA,KACAD,aAAA,OAGA,CACA,MAEA/B,OAAAH,QAAA,SAAAugC,SAAA8C,KAAAC,WACAD,KAAAE,OAAAD,UACA,IAAAE,SAAA,aACAA,SAAA9gC,UAAA4gC,UAAA5gC,UACA2gC,KAAA3gC,UAAA,IAAA8gC,SACAH,KAAA3gC,UAAAa,YAAA8/B,IACA,CACA,C,2CCtBAljC,OAAAH,QAAA,SAAA0+B,SAAAz5B,KACA,OAAAA,kBAAA,iBACAA,IAAAw+B,OAAA,mBACAx+B,IAAAy+B,OAAA,mBACAz+B,IAAA0+B,YAAA,UACA,C,iFCgBA,IAAAC,aAAA,WACA5jC,QAAA6jC,OAAA,SAAArkC,GACA,IAAAskC,SAAAtkC,GAAA,CACA,IAAAukC,QAAA,GACA,QAAAxkC,EAAA,EAAAA,EAAAwW,UAAA7V,OAAAX,IAAA,CACAwkC,QAAAxzB,KAAAkwB,QAAA1qB,UAAAxW,IACA,CACA,OAAAwkC,QAAAC,KAAA,IACA,CAEA,IAAAzkC,EAAA,EACA,IAAA0kC,KAAAluB,UACA,IAAAhV,IAAAkjC,KAAA/jC,OACA,IAAA26B,IAAA/1B,OAAAtF,GAAAuO,QAAA61B,cAAA,SAAArF,GACA,GAAAA,IAAA,eACA,GAAAh/B,GAAAwB,IAAA,OAAAw9B,EACA,OAAAA,GACA,gBAAAz5B,OAAAm/B,KAAA1kC,MACA,gBAAAwF,OAAAk/B,KAAA1kC,MACA,SACA,IACA,OAAA2kC,KAAAC,UAAAF,KAAA1kC,KACA,OAAA6kC,GACA,kBACA,CACA,QACA,OAAA7F,EAEA,IACA,QAAAA,EAAA0F,KAAA1kC,KAAAwB,IAAAw9B,EAAA0F,OAAA1kC,GAAA,CACA,GAAA8kC,OAAA9F,KAAA+F,SAAA/F,GAAA,CACA1D,KAAA,IAAA0D,CACA,MACA1D,KAAA,IAAA4F,QAAAlC,EACA,CACA,CACA,OAAA1D,GACA,EAMA76B,QAAAukC,UAAA,SAAAC,GAAAC,KAEA,GAAAC,YAAAj/B,OAAAk/B,SAAA,CACA,kBACA,OAAA3kC,QAAAukC,UAAAC,GAAAC,KAAAG,MAAA7+B,KAAAgQ,UACA,CACA,CAEA,GAAA4uB,QAAAE,gBAAA,MACA,OAAAL,EACA,CAEA,IAAAM,OAAA,MACA,SAAAC,aACA,IAAAD,OAAA,CACA,GAAAH,QAAAK,iBAAA,CACA,UAAAnlC,MAAA4kC,IACA,SAAAE,QAAAM,iBAAA,CACA90B,QAAA+0B,MAAAT,IACA,MACAt0B,QAAAwyB,MAAA8B,IACA,CACAK,OAAA,IACA,CACA,OAAAN,GAAAI,MAAA7+B,KAAAgQ,UACA,CAEA,OAAAgvB,UACA,EAGA,IAAAI,OAAA,GACA,IAAAC,aACAplC,QAAAqlC,SAAA,SAAAv+B,KACA,GAAA49B,YAAAU,cACAA,aAAAT,QAAAW,IAAAC,YAAA,GACAz+B,QAAA0+B,cACA,IAAAL,OAAAr+B,KAAA,CACA,OAAAH,OAAA,MAAAG,IAAA,WAAAtB,KAAA4/B,cAAA,CACA,IAAAK,IAAAd,QAAAc,IACAN,OAAAr+B,KAAA,WACA,IAAA29B,IAAAzkC,QAAA6jC,OAAAe,MAAA5kC,QAAA+V,WACA5F,QAAAwyB,MAAA,YAAA77B,IAAA2+B,IAAAhB,IACA,CACA,MACAU,OAAAr+B,KAAA,YACA,CACA,CACA,OAAAq+B,OAAAr+B,IACA,EAWA,SAAA25B,QAAA79B,IAAAqN,MAEA,IAAAy1B,IAAA,CACAC,KAAA,GACAC,QAAAC,gBAGA,GAAA9vB,UAAA7V,QAAA,EAAAwlC,IAAAI,MAAA/vB,UAAA,GACA,GAAAA,UAAA7V,QAAA,EAAAwlC,IAAAK,OAAAhwB,UAAA,GACA,GAAAiwB,UAAA/1B,MAAA,CAEAy1B,IAAAO,WAAAh2B,IACA,SAAAA,KAAA,CAEAjQ,QAAAkmC,QAAAR,IAAAz1B,KACA,CAEA,GAAAy0B,YAAAgB,IAAAO,YAAAP,IAAAO,WAAA,MACA,GAAAvB,YAAAgB,IAAAI,OAAAJ,IAAAI,MAAA,EACA,GAAApB,YAAAgB,IAAAK,QAAAL,IAAAK,OAAA,MACA,GAAArB,YAAAgB,IAAAS,eAAAT,IAAAS,cAAA,KACA,GAAAT,IAAAK,OAAAL,IAAAE,QAAAQ,iBACA,OAAAC,YAAAX,IAAA9iC,IAAA8iC,IAAAI,MACA,CACA9lC,QAAAygC,gBAIAA,QAAAsF,OAAA,CACAO,KAAA,OACAC,OAAA,OACAC,UAAA,OACAC,QAAA,OACAC,MAAA,QACAC,KAAA,QACAC,MAAA,QACAC,KAAA,QACAC,KAAA,QACAC,MAAA,QACAC,QAAA,QACAC,IAAA,QACAC,OAAA,SAIAzG,QAAA0G,OAAA,CACAC,QAAA,OACAC,OAAA,SACAC,QAAA,SACA1iC,UAAA,OACA2iC,KAAA,OACAh/B,OAAA,QACAi/B,KAAA,UAEAl/B,OAAA,OAIA,SAAA89B,iBAAAvL,IAAA4M,WACA,IAAAC,MAAAjH,QAAA0G,OAAAM,WAEA,GAAAC,MAAA,CACA,WAAAjH,QAAAsF,OAAA2B,OAAA,OAAA7M,IACA,KAAA4F,QAAAsF,OAAA2B,OAAA,MACA,MACA,OAAA7M,GACA,CACA,CAGA,SAAAgL,eAAAhL,IAAA4M,WACA,OAAA5M,GACA,CAGA,SAAA8M,YAAAl3B,OACA,IAAAm3B,KAAA,GAEAn3B,MAAAo3B,SAAA,SAAAtc,IAAA6U,KACAwH,KAAArc,KAAA,IACA,IAEA,OAAAqc,IACA,CAGA,SAAAvB,YAAAX,IAAA7iC,MAAAilC,cAGA,GAAApC,IAAAS,eACAtjC,OACA48B,WAAA58B,MAAA49B,UAEA59B,MAAA49B,UAAAzgC,QAAAygC,WAEA59B,MAAAU,aAAAV,MAAAU,YAAAb,YAAAG,OAAA,CACA,IAAAklC,IAAAllC,MAAA49B,QAAAqH,aAAApC,KACA,IAAA5B,SAAAiE,KAAA,CACAA,IAAA1B,YAAAX,IAAAqC,IAAAD,aACA,CACA,OAAAC,GACA,CAGA,IAAAC,UAAAC,gBAAAvC,IAAA7iC,OACA,GAAAmlC,UAAA,CACA,OAAAA,SACA,CAGA,IAAAhvB,KAAA5W,OAAA4W,KAAAnW,OACA,IAAAqlC,YAAAP,YAAA3uB,MAEA,GAAA0sB,IAAAO,WAAA,CACAjtB,KAAA5W,OAAA+lC,oBAAAtlC,MACA,CAIA,GAAAmgC,QAAAngC,SACAmW,KAAA8E,QAAA,eAAA9E,KAAA8E,QAAA,oBACA,OAAAsqB,YAAAvlC,MACA,CAGA,GAAAmW,KAAA9Y,SAAA,GACA,GAAAu/B,WAAA58B,OAAA,CACA,IAAA0C,KAAA1C,MAAA0C,KAAA,KAAA1C,MAAA0C,KAAA,GACA,OAAAmgC,IAAAE,QAAA,YAAArgC,KAAA,cACA,CACA,GAAA67B,SAAAv+B,OAAA,CACA,OAAA6iC,IAAAE,QAAAj/B,OAAAjE,UAAA2C,SAAApF,KAAA4C,OAAA,SACA,CACA,GAAAq+B,OAAAr+B,OAAA,CACA,OAAA6iC,IAAAE,QAAAyC,KAAA3lC,UAAA2C,SAAApF,KAAA4C,OAAA,OACA,CACA,GAAAmgC,QAAAngC,OAAA,CACA,OAAAulC,YAAAvlC,MACA,CACA,CAEA,IAAA0mB,KAAA,GAAA9Y,MAAA,MAAA63B,OAAA,UAGA,GAAAlnC,QAAAyB,OAAA,CACA4N,MAAA,KACA63B,OAAA,SACA,CAGA,GAAA7I,WAAA58B,OAAA,CACA,IAAAzD,EAAAyD,MAAA0C,KAAA,KAAA1C,MAAA0C,KAAA,GACAgkB,KAAA,aAAAnqB,EAAA,GACA,CAGA,GAAAgiC,SAAAv+B,OAAA,CACA0mB,KAAA,IAAA5iB,OAAAjE,UAAA2C,SAAApF,KAAA4C,MACA,CAGA,GAAAq+B,OAAAr+B,OAAA,CACA0mB,KAAA,IAAA8e,KAAA3lC,UAAA6lC,YAAAtoC,KAAA4C,MACA,CAGA,GAAAmgC,QAAAngC,OAAA,CACA0mB,KAAA,IAAA6e,YAAAvlC,MACA,CAEA,GAAAmW,KAAA9Y,SAAA,KAAAuQ,OAAA5N,MAAA3C,QAAA,IACA,OAAAooC,OAAA,GAAA/e,KAAA+e,OAAA,EACA,CAEA,GAAAR,aAAA,GACA,GAAA1G,SAAAv+B,OAAA,CACA,OAAA6iC,IAAAE,QAAAj/B,OAAAjE,UAAA2C,SAAApF,KAAA4C,OAAA,SACA,MACA,OAAA6iC,IAAAE,QAAA,qBACA,CACA,CAEAF,IAAAC,KAAAp1B,KAAA1N,OAEA,IAAA2lC,OACA,GAAA/3B,MAAA,CACA+3B,OAAAC,YAAA/C,IAAA7iC,MAAAilC,aAAAI,YAAAlvB,KACA,MACAwvB,OAAAxvB,KAAA0vB,KAAA,SAAApmC,KACA,OAAAqmC,eAAAjD,IAAA7iC,MAAAilC,aAAAI,YAAA5lC,IAAAmO,MACA,GACA,CAEAi1B,IAAAC,KAAArqB,MAEA,OAAAstB,qBAAAJ,OAAAjf,KAAA+e,OACA,CAGA,SAAAL,gBAAAvC,IAAA7iC,OACA,GAAA6hC,YAAA7hC,OACA,OAAA6iC,IAAAE,QAAA,yBACA,GAAA9B,SAAAjhC,OAAA,CACA,IAAAwa,OAAA,IAAA6mB,KAAAC,UAAAthC,OAAAkL,QAAA,aACAA,QAAA,YACAA,QAAA,gBACA,OAAA23B,IAAAE,QAAAvoB,OAAA,SACA,CACA,GAAAwrB,SAAAhmC,OACA,OAAA6iC,IAAAE,QAAA,GAAA/iC,MAAA,UACA,GAAAmjC,UAAAnjC,OACA,OAAA6iC,IAAAE,QAAA,GAAA/iC,MAAA,WAEA,GAAAwhC,OAAAxhC,OACA,OAAA6iC,IAAAE,QAAA,cACA,CAGA,SAAAwC,YAAAvlC,OACA,UAAAhD,MAAA6C,UAAA2C,SAAApF,KAAA4C,OAAA,GACA,CAGA,SAAA4lC,YAAA/C,IAAA7iC,MAAAilC,aAAAI,YAAAlvB,MACA,IAAAwvB,OAAA,GACA,QAAAjpC,EAAA,EAAAyyB,EAAAnvB,MAAA3C,OAAAX,EAAAyyB,IAAAzyB,EAAA,CACA,GAAAmO,eAAA7K,MAAAiC,OAAAvF,IAAA,CACAipC,OAAAj4B,KAAAo4B,eAAAjD,IAAA7iC,MAAAilC,aAAAI,YACApjC,OAAAvF,GAAA,MACA,MACAipC,OAAAj4B,KAAA,GACA,CACA,CACAyI,KAAA6uB,SAAA,SAAAvlC,KACA,IAAAA,IAAAoU,MAAA,UACA8xB,OAAAj4B,KAAAo4B,eAAAjD,IAAA7iC,MAAAilC,aAAAI,YACA5lC,IAAA,MACA,CACA,IACA,OAAAkmC,MACA,CAGA,SAAAG,eAAAjD,IAAA7iC,MAAAilC,aAAAI,YAAA5lC,IAAAmO,OACA,IAAAlL,KAAAs1B,IAAAiO,KACAA,KAAA1mC,OAAA2mC,yBAAAlmC,MAAAP,MAAA,CAAAO,YAAAP,MACA,GAAAwmC,KAAAzzB,IAAA,CACA,GAAAyzB,KAAAhiC,IAAA,CACA+zB,IAAA6K,IAAAE,QAAA,4BACA,MACA/K,IAAA6K,IAAAE,QAAA,qBACA,CACA,MACA,GAAAkD,KAAAhiC,IAAA,CACA+zB,IAAA6K,IAAAE,QAAA,qBACA,CACA,CACA,IAAAl4B,eAAAw6B,YAAA5lC,KAAA,CACAiD,KAAA,IAAAjD,IAAA,GACA,CACA,IAAAu4B,IAAA,CACA,GAAA6K,IAAAC,KAAA7nB,QAAAgrB,KAAAjmC,OAAA,GACA,GAAAwhC,OAAAyD,cAAA,CACAjN,IAAAwL,YAAAX,IAAAoD,KAAAjmC,MAAA,KACA,MACAg4B,IAAAwL,YAAAX,IAAAoD,KAAAjmC,MAAAilC,aAAA,EACA,CACA,GAAAjN,IAAA/c,QAAA,UACA,GAAArN,MAAA,CACAoqB,QAAA9nB,MAAA,MAAA21B,KAAA,SAAAv6B,MACA,WAAAA,IACA,IAAA61B,KAAA,MAAAjH,OAAA,EACA,MACAlC,IAAA,KAAAA,IAAA9nB,MAAA,MAAA21B,KAAA,SAAAv6B,MACA,YAAAA,IACA,IAAA61B,KAAA,KACA,CACA,CACA,MACAnJ,IAAA6K,IAAAE,QAAA,uBACA,CACA,CACA,GAAAlB,YAAAn/B,MAAA,CACA,GAAAkL,OAAAnO,IAAAoU,MAAA,UACA,OAAAmkB,GACA,CACAt1B,KAAA2+B,KAAAC,UAAA,GAAA7hC,KACA,GAAAiD,KAAAmR,MAAA,iCACAnR,UAAAw3B,OAAA,EAAAx3B,KAAArF,OAAA,GACAqF,KAAAmgC,IAAAE,QAAArgC,KAAA,OACA,MACAA,UAAAwI,QAAA,YACAA,QAAA,YACAA,QAAA,gBACAxI,KAAAmgC,IAAAE,QAAArgC,KAAA,SACA,CACA,CAEA,OAAAA,KAAA,KAAAs1B,GACA,CAGA,SAAA+N,qBAAAJ,OAAAjf,KAAA+e,QACA,IAAAU,YAAA,EACA,IAAA9oC,OAAAsoC,OAAAS,QAAA,SAAAC,KAAAv6B,KACAq6B,cACA,GAAAr6B,IAAAmP,QAAA,SAAAkrB,cACA,OAAAE,KAAAv6B,IAAAZ,QAAA,sBAAA7N,OAAA,CACA,MAEA,GAAAA,OAAA,IACA,OAAAooC,OAAA,IACA/e,OAAA,MAAAA,KAAA,OACA,IACAif,OAAAxE,KAAA,SACA,IACAsE,OAAA,EACA,CAEA,OAAAA,OAAA,GAAA/e,KAAA,IAAAif,OAAAxE,KAAA,UAAAsE,OAAA,EACA,CAKA,SAAAlnC,QAAA+nC,IACA,OAAAloC,MAAAG,QAAA+nC,GACA,CACAnpC,QAAAoB,gBAEA,SAAA4kC,UAAA/gC,KACA,cAAAA,MAAA,SACA,CACAjF,QAAAgmC,oBAEA,SAAA3B,OAAAp/B,KACA,OAAAA,MAAA,IACA,CACAjF,QAAAqkC,cAEA,SAAA+E,kBAAAnkC,KACA,OAAAA,KAAA,IACA,CACAjF,QAAAopC,oCAEA,SAAAP,SAAA5jC,KACA,cAAAA,MAAA,QACA,CACAjF,QAAA6oC,kBAEA,SAAA/E,SAAA7+B,KACA,cAAAA,MAAA,QACA,CACAjF,QAAA8jC,kBAEA,SAAAuF,SAAApkC,KACA,cAAAA,MAAA,QACA,CACAjF,QAAAqpC,kBAEA,SAAA3E,YAAAz/B,KACA,OAAAA,WAAA,CACA,CACAjF,QAAA0kC,wBAEA,SAAAtD,SAAA1T,IACA,OAAA4W,SAAA5W,KAAA4b,eAAA5b,MAAA,iBACA,CACA1tB,QAAAohC,kBAEA,SAAAkD,SAAAr/B,KACA,cAAAA,MAAA,UAAAA,MAAA,IACA,CACAjF,QAAAskC,kBAEA,SAAApD,OAAAhR,GACA,OAAAoU,SAAApU,IAAAoZ,eAAApZ,KAAA,eACA,CACAlwB,QAAAkhC,cAEA,SAAA8B,QAAA7jC,GACA,OAAAmlC,SAAAnlC,KACAmqC,eAAAnqC,KAAA,kBAAAA,aAAAU,MACA,CACAG,QAAAgjC,gBAEA,SAAAvD,WAAAx6B,KACA,cAAAA,MAAA,UACA,CACAjF,QAAAy/B,sBAEA,SAAAoC,YAAA58B,KACA,OAAAA,MAAA,aACAA,MAAA,kBACAA,MAAA,iBACAA,MAAA,iBACAA,MAAA,iBACAA,MAAA,WACA,CACAjF,QAAA6hC,wBAEA7hC,QAAA0+B,SAAAh/B,QAAA,sBAEA,SAAA4pC,eAAAhqC,GACA,OAAA8C,OAAAM,UAAA2C,SAAApF,KAAAX,EACA,CAGA,SAAAiqC,IAAAnqC,GACA,OAAAA,EAAA,OAAAA,EAAAiG,SAAA,IAAAjG,EAAAiG,SAAA,GACA,CAGA,IAAAmkC,OAAA,uDACA,mBAGA,SAAAC,YACA,IAAAvZ,EAAA,IAAAmY,KACA,IAAAqB,KAAA,CAAAH,IAAArZ,EAAAyZ,YACAJ,IAAArZ,EAAA0Z,cACAL,IAAArZ,EAAA2Z,eAAA7F,KAAA,KACA,OAAA9T,EAAA4Z,UAAAN,OAAAtZ,EAAA6Z,YAAAL,MAAA1F,KAAA,IACA,CAIAhkC,QAAAgqC,IAAA,WACA75B,QAAA65B,IAAA,UAAAP,YAAAzpC,QAAA6jC,OAAAe,MAAA5kC,QAAA+V,WACA,EAgBA/V,QAAAugC,SAAA7gC,QAAA,YAEAM,QAAAkmC,QAAA,SAAA+D,OAAAC,KAEA,IAAAA,MAAA5F,SAAA4F,KAAA,OAAAD,OAEA,IAAAjxB,KAAA5W,OAAA4W,KAAAkxB,KACA,IAAA3qC,EAAAyZ,KAAA9Y,OACA,MAAAX,IAAA,CACA0qC,OAAAjxB,KAAAzZ,IAAA2qC,IAAAlxB,KAAAzZ,GACA,CACA,OAAA0qC,MACA,EAEA,SAAAv8B,eAAA9K,IAAAugB,MACA,OAAA/gB,OAAAM,UAAAgL,eAAAzN,KAAA2C,IAAAugB,KACA,C,kPCzkBA,SAAA1d,OAAAC,SACA,UAAAC,SAAA,YAAAA,OAAAC,IAAA,CACAD,OAAA,mDAAAD,QACA,gBAAA1F,UAAA,aACA0F,QAAA1F,QAAAN,QAAA,qBAAAA,QAAA,oBACA,MACA,IAAAyqC,IAAA,CACAnqC,QAAA,IAEA0F,QAAAykC,IAAAnqC,QAAAyF,OAAA2kC,gBAAA3kC,OAAA4kC,gBACA5kC,OAAA6kC,SAAAH,IAAAnqC,OACA,CACA,EAZA,CAYA+F,MAAA,SAAA/F,QAAAuqC,iBAAAC,iBACA,aAEAxqC,QAAAkB,WAAA,KACAlB,QAAAyqC,aAAAzqC,QAAAqqC,eAAArqC,QAAAoqC,gBAAAxlC,UAEA,IAAA8lC,kBAAAC,uBAAAJ,kBAEA,IAAAK,iBAAAD,uBAAAH,iBAEA,SAAAG,uBAAA/nC,KACA,OAAAA,SAAA1B,WAAA0B,IAAA,CACAioC,QAAAjoC,IAEA,CAYA,SAAA6nC,aAAAvnB,YAIA,OAAAwnB,kBAAAG,QAAAC,UAAA5nB,WACA,CAEAljB,QAAAoqC,gBAAAM,kBAAAG,QACA7qC,QAAAqqC,eAAAO,iBAAAC,QACA7qC,QAAAyqC,yBACA,G,wFChDA,SAAAhlC,OAAAC,SACA,UAAAC,SAAA,YAAAA,OAAAC,IAAA,CACAD,OAAA,gCAAAD,QACA,gBAAA1F,UAAA,aACA0F,QAAA1F,QAAAN,QAAA,qBACA,MACA,IAAAyqC,IAAA,CACAnqC,QAAA,IAEA0F,QAAAykC,IAAAnqC,QAAAyF,OAAA2kC,iBACA3kC,OAAA4kC,eAAAF,IAAAnqC,OACA,CACA,EAZA,CAYA+F,MAAA,SAAA/F,QAAAuqC,kBACA,aAEAvqC,QAAAkB,WAAA,KAEAlB,QAAA6qC,QAAA,SAAA51B,KAAA81B,UAIAC,eAAA/1B,KAAAlE,MAAAkE,KAAA,CACA81B,kBACAn0B,MAAA,IAEA,OAAA3B,IACA,EAEA,IAAAy1B,kBAAAC,uBAAAJ,kBAEA,SAAAI,uBAAA/nC,KACA,OAAAA,SAAA1B,WAAA0B,IAAA,CACAioC,QAAAjoC,IAEA,CAEA,SAAAynC,eAAAzoB,OAAAqpB,SAAAC,oBAAAzY,MAAA0Y,UACA,IAAAv0B,MAAA6b,MAAA7b,MACAm0B,SAAAtY,MAAAsY,SAEA,IAAAj6B,QAAAi6B,SAAAn0B,OAGA,IAAAw0B,mBAAA,EACAC,sBAAA,EACA,GAAAv6B,SAAA,MACA,GAAAm6B,UAAA,MAAAA,SAAA/qC,SAAA,GAEAkrC,cAAAxpB,OAAAmpB,UAAA,KAAAnpB,OAAAmpB,SAAA,GACA,MAAAj6B,SAAA,MAAAA,QAAA1D,IAAAwU,OAAAxU,IAAA,CACAg+B,cAAA76B,KAAAO,SACAA,QAAAi6B,WAAAn0B,MACA,CACA6b,MAAA7b,YACA,GAAAw0B,cAAAlrC,SAAA,GAAA0hB,OAAAmpB,UAAA,KAAAnpB,OAAAmpB,SAAAK,aACA,MAEA,GAAAF,oBAAA,CACAE,cAAAxpB,OAAAmpB,UAAA,KAAAnpB,OAAAmpB,SAAA,GACA,IAAAv8B,MAAAy8B,SAAA,GAAAz8B,MAEA,MAAAsC,SAAA,MAAAA,QAAAC,KAAA,UAAAD,QAAA1D,IAAAoB,MAAA,CACA48B,cAAA76B,KAAAO,SACAA,QAAAi6B,WAAAn0B,MACA,CACA,GAAAw0B,cAAAlrC,SAAA,GAAA0hB,OAAAmpB,UAAA,KAAAnpB,OAAAmpB,SAAAK,aACA,CAEA,QAAA7rC,EAAA,EAAAW,OAAA+qC,SAAA/qC,OAAA4Q,SAAA,MAAAvR,EAAAW,OAAAX,IAAA,CACA,IAAA+rC,MAAAL,SAAA1rC,GACA6rC,cAAA,GACA,MAAAt6B,SAAA,MAAAA,QAAA1D,IAAAk+B,MAAA98B,MAAA,CACA48B,cAAA76B,KAAAO,SACAA,QAAAi6B,WAAAn0B,MACA,CAEA,GAAA9F,SAAA,MAAAA,QAAAC,KAAA,UACA,GAAAD,QAAAE,IAAAxC,MAAAL,OAAAm9B,MAAAt6B,IAAA5D,IAAAe,KAAA,CACAi9B,cAAA76B,KAAAO,SACAA,QAAAi6B,WAAAn0B,MACA,CACA,CACA,GAAAw0B,cAAAlrC,SAAA,EAAAorC,MAAAP,SAAAK,cAEA3Y,MAAA7b,YACAu0B,SAAAG,MAAAv6B,MAAAu6B,MAAA7Y,OACA7b,MAAA6b,MAAA7b,MACA9F,QAAAi6B,SAAAn0B,MACA,CAEAy0B,iBAAA,GACA,MAAAv6B,SAAA,MAAAA,QAAA1D,IAAAwU,OAAAxU,IAAA,CACAi+B,iBAAA96B,KAAAO,SACAA,QAAAi6B,WAAAn0B,MACA,CACA,GAAAy0B,iBAAAnrC,SAAA,EAAA0hB,OAAAypB,kCACA5Y,MAAA7b,WACA,CACA,CACA,CAEA,IAAA20B,aAAA,EAEA,IAAAP,eAAAN,kBAAAG,QAAAC,UAAA,CACAS,gBAAA,SAAAA,QAAAt2B,KAAAwd,OACA4X,eAAAp1B,UAAA2D,KAAA,KAAA6Z,MAAA1sB,KACA,EACAylC,eAAAD,QACAE,iBAAA,SAAAA,iBAAAx2B,KAAAwd,OACA4X,eAAAp1B,UAAAiO,WAAA,KAAAuP,MAAA1sB,KACA,EACA2lC,gBAAA,SAAAA,gBAAAz2B,KAAAwd,OACA4X,eAAAp1B,UAAAoO,SAAA,KAAAoP,MAAA1sB,KACA,EACA4lC,gBAAA,SAAAA,gBAAA12B,KAAAwd,OACA4X,eAAAp1B,UAAA4H,MAAA,MAAA4V,MAAA1sB,KACA,EACA6lC,WAAA,SAAAA,WAAA32B,KAAAwd,OACA4X,eAAAp1B,UAAAwH,WAAA,MAAAgW,MAAA1sB,KACA,GAIA,G,kEC3HA,SAAAN,OAAAC,SACA,UAAAC,SAAA,YAAAA,OAAAC,IAAA,CACAD,OAAA,YAAAD,QACA,gBAAA1F,UAAA,aACA0F,QAAA1F,QACA,MACA,IAAAmqC,IAAA,CACAnqC,QAAA,IAEA0F,QAAAykC,IAAAnqC,SACAyF,OAAA2kC,gBAAAD,IAAAnqC,OACA,CACA,EAZA,CAYA+F,MAAA,SAAA/F,SACA,aAEAA,QAAAkB,WAAA,KAEA,SAAAM,gBAAAC,SAAAC,aACA,KAAAD,oBAAAC,aAAA,CACA,UAAAC,UAAA,oCACA,CACA,CAEA,IAAAkqC,oBAAA,EACAC,yBAAA,EACAC,iBAAA,EACAC,sBAAA,EACAN,qBAAA,EAEA,IAAAO,OAAAC,SAAAxpC,UAEA,IAAAypC,MAAA,SAAAA,MAAAl3B,KAAAwd,OACAjxB,gBAAAuE,KAAAomC,OAEApmC,KAAAkP,UACAlP,KAAA0sB,WACA,EAEAzyB,QAAA6qC,QAAA,CAEAuB,GAAA,SAAAA,GAAAn3B,KAAAwd,OAKA1sB,KAAAkP,KAAAlE,MAAAkE,KAAAwd,MACA,EACA4Z,KAAA,SAAAA,KAAAC,UAAAr3B,KAAAwd,OAMA,IAAA8Z,OAAAnqC,OAAAkB,OAAAyC,MACAwmC,OAAAH,GAAA,SAAAn3B,KAAAwd,OACA,GAAA6Z,UAAAr3B,KAAAwd,OAAA,CACA,UAAA0Z,MAAAl3B,KAAAwd,MACA,CACA1sB,KAAAkP,KAAAlE,MAAAkE,KAAAwd,MACA,EACA,IACA8Z,OAAAH,GAAAn3B,KAAAwd,MACA,OAAAkQ,OACA,GAAAA,iBAAAwJ,MAAA,CACA,OAAAxJ,KACA,MACA,MAAAA,KACA,CACA,CACA,EACAmI,UAAA,SAAAA,YACA,IAAA5nB,WAAAnN,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,MAKA,IAAAo1B,SAAA/oC,OAAAkB,OAAAyC,MACAolC,SAAAqB,MAAAzmC,KACA,QAAAzD,OAAA4gB,WAAA,CACAioB,SAAA7oC,KAAA4gB,WAAA5gB,IACA,CACA,OAAA6oC,QACA,EAIAI,QAAA,SAAAA,QAAAt2B,KAAAwd,OACA,IAAAvO,WAAAjP,KAAA2D,KACA1Y,OAAAgkB,WAAAhkB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAAloB,WAAA3kB,GAAAkzB,MACA,CACA,EACA+Y,eAAA,SAAAA,eAAAv2B,KAAAwd,OACA,IAAAvO,WAAAjP,KAAA2D,KACA,GAAAsL,YAAA,MACA,QAAA3kB,EAAA,EAAAW,OAAAgkB,WAAAhkB,OAAAX,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAAloB,WAAA3kB,GAAAkzB,MACA,CACA,CACA,EAEAga,eAAAR,OACAS,oBAAA,SAAAA,oBAAAz3B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAyD,WAAA+Z,MACA,EACAka,YAAA,SAAAA,YAAA13B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAzP,KAAAitB,OACA1sB,KAAAqmC,GAAAn3B,KAAAwH,WAAAgW,OACA,GAAAxd,KAAAyH,WAAA,MACA3W,KAAAqmC,GAAAn3B,KAAAyH,UAAA+V,MACA,CACA,EACAma,iBAAA,SAAAA,iBAAA33B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA5N,MAAAorB,OACA1sB,KAAAqmC,GAAAn3B,KAAA2D,KAAA6Z,MACA,EACAoa,eAAA,SAAAA,eAAA53B,KAAAwd,OACA,GAAAxd,KAAA5N,MAAA,CACAtB,KAAAqmC,GAAAn3B,KAAA5N,MAAAorB,MACA,CACA,EACAqa,kBAAA,SAAAA,kBAAA73B,KAAAwd,OACA,GAAAxd,KAAA5N,MAAA,CACAtB,KAAAqmC,GAAAn3B,KAAA5N,MAAAorB,MACA,CACA,EACAsa,cAAA,SAAAA,cAAA93B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAyI,OAAA+U,OACA1sB,KAAAqmC,GAAAn3B,KAAA2D,KAAA6Z,MACA,EACAkZ,gBAAA,SAAAA,gBAAA12B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA2H,aAAA6V,OACA,IAAA5V,MAAA5H,KAAA4H,MACA3c,OAAA2c,MAAA3c,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAAvvB,MAAAtd,GAAAkzB,MACA,CACA,EACAmZ,WAAA,SAAAA,WAAA32B,KAAAwd,OACA,GAAAxd,KAAAzP,MAAA,MACAO,KAAAqmC,GAAAn3B,KAAAzP,KAAAitB,MACA,CACA,IAAAvO,WAAAjP,KAAAwH,WACAvc,OAAAgkB,WAAAhkB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAAloB,WAAA3kB,GAAAkzB,MACA,CACA,EACAua,gBAAA,SAAAA,gBAAA/3B,KAAAwd,OACA,GAAAxd,KAAA0H,SAAA,CACA5W,KAAAqmC,GAAAn3B,KAAA0H,SAAA8V,MACA,CACA,EACAwa,eAAA,SAAAA,eAAAh4B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA0H,SAAA8V,MACA,EACAya,aAAA,SAAAA,aAAAj4B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAvE,MAAA+hB,OACA,GAAAxd,KAAAqI,SAAA,MACAvX,KAAAqmC,GAAAn3B,KAAAqI,QAAAmV,MACA,CACA,GAAAxd,KAAAuI,WAAA,MACAzX,KAAAqmC,GAAAn3B,KAAAuI,UAAAiV,MACA,CACA,EACA0a,YAAA,SAAAA,YAAAl4B,KAAAwd,OACA,GAAAxd,KAAAkI,OAAA,MACApX,KAAAqmC,GAAAn3B,KAAAkI,MAAAsV,MACA,CACA1sB,KAAAqmC,GAAAn3B,KAAA2D,KAAA6Z,MACA,EACA2a,eAAA,SAAAA,eAAAn4B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAzP,KAAAitB,OACA1sB,KAAAqmC,GAAAn3B,KAAA2D,KAAA6Z,MACA,EACA4a,iBAAA,SAAAA,iBAAAp4B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA2D,KAAA6Z,OACA1sB,KAAAqmC,GAAAn3B,KAAAzP,KAAAitB,MACA,EACA6a,aAAA,SAAAA,aAAAr4B,KAAAwd,OACA,GAAAxd,KAAAgH,MAAA,MACAlW,KAAAqmC,GAAAn3B,KAAAgH,KAAAwW,MACA,CACA,GAAAxd,KAAAzP,MAAA,MACAO,KAAAqmC,GAAAn3B,KAAAzP,KAAAitB,MACA,CACA,GAAAxd,KAAAgJ,QAAA,MACAlY,KAAAqmC,GAAAn3B,KAAAgJ,OAAAwU,MACA,CACA1sB,KAAAqmC,GAAAn3B,KAAA2D,KAAA6Z,MACA,EAEAoZ,8BAAA,SAAAA,eAAA52B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAmJ,KAAAqU,OACA1sB,KAAAqmC,GAAAn3B,KAAAoJ,MAAAoU,OACA1sB,KAAAqmC,GAAAn3B,KAAA2D,KAAA6Z,MACA,EACA8a,kBAAAtB,OACAH,wCAAA,SAAAA,oBAAA72B,KAAAwd,OACA,GAAAxd,KAAAkJ,IAAA,MACApY,KAAAqmC,GAAAn3B,KAAAkJ,GAAAsU,MACA,CACA,IAAApT,OAAApK,KAAAoK,OAEA,GAAAA,QAAA,MACA,QAAA9f,EAAA,EAAAW,OAAAmf,OAAAnf,OAAAX,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAA/sB,OAAA9f,GAAAkzB,MACA,CACA,CACA1sB,KAAAqmC,GAAAn3B,KAAA2D,KAAA6Z,MACA,EACA+a,oBAAA,SAAAA,oBAAAv4B,KAAAwd,OACA,IAAA7W,aAAA3G,KAAA2G,aACA1b,OAAA0b,aAAA1b,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAAxwB,aAAArc,GAAAkzB,MACA,CACA,EACAgb,mBAAA,SAAAA,mBAAAx4B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAkJ,GAAAsU,OACA,GAAAxd,KAAAgH,MAAA,MACAlW,KAAAqmC,GAAAn3B,KAAAgH,KAAAwW,MACA,CACA,EACAib,wBAAA,SAAAA,wBAAAz4B,KAAAwd,OACA,IAAApT,OAAApK,KAAAoK,OAEA,GAAAA,QAAA,MACA,QAAA9f,EAAA,EAAAW,OAAAmf,OAAAnf,OAAAX,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAA/sB,OAAA9f,GAAAkzB,MACA,CACA,CACA1sB,KAAAqmC,GAAAn3B,KAAA2D,KAAA6Z,MACA,EAEAkb,eAAA1B,OACAP,gCAAA,SAAAA,gBAAAz2B,KAAAwd,OACA,IAAApP,SAAApO,KAAAoO,SACAnjB,OAAAmjB,SAAAnjB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACA,IAAAwgB,QAAAsD,SAAA9jB,GACA,GAAAwgB,SAAA,MACAha,KAAAqmC,GAAA/oB,SAAA9jB,GAAAkzB,MACA,CACA,CACA,EACAgZ,iBAAA,SAAAA,iBAAAx2B,KAAAwd,OACA,IAAAvP,WAAAjO,KAAAiO,WACAhjB,OAAAgjB,WAAAhjB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAAlpB,WAAA3jB,GAAAkzB,MACA,CACA,EACAmb,SAAA,SAAAA,SAAA34B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA3S,IAAAmwB,OACA,IAAAxd,KAAA0S,UAAA,CACA5hB,KAAAqmC,GAAAn3B,KAAApS,MAAA4vB,MACA,CACA,EAEAob,mBAAA/B,oBACAgC,mBAAA,SAAAA,mBAAA74B,KAAAwd,OACA,IAAA1K,YAAA9S,KAAA8S,YACA7nB,OAAA6nB,YAAA7nB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAArkB,YAAAxoB,GAAAkzB,MACA,CACA,EACAsb,gBAAA,SAAAA,gBAAA94B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA0H,SAAA8V,MACA,EACAub,iBAAA,SAAAA,iBAAA/4B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA0H,SAAA8V,MACA,EACAwb,qBAAA,SAAAA,qBAAAh5B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAmJ,KAAAqU,OACA1sB,KAAAqmC,GAAAn3B,KAAAoJ,MAAAoU,MACA,EAEAuZ,kCAAA,SAAAA,iBAAA/2B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAmJ,KAAAqU,OACA1sB,KAAAqmC,GAAAn3B,KAAAoJ,MAAAoU,MACA,EACAyb,kBAAAlC,iBACAmC,sBAAA,SAAAA,sBAAAl5B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAzP,KAAAitB,OACA1sB,KAAAqmC,GAAAn3B,KAAAwH,WAAAgW,OACA1sB,KAAAqmC,GAAAn3B,KAAAyH,UAAA+V,MACA,EACA2b,cAAA,SAAAA,cAAAn5B,KAAAwd,OACA1sB,KAAAsoC,eAAAp5B,KAAAwd,MACA,EACA4b,eAAA,SAAAA,eAAAp5B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAkV,OAAAsI,OACA,IAAAwR,KAAAhvB,KAAA,aACA/U,OAAA+jC,KAAA/jC,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAAnI,KAAA1kC,GAAAkzB,MACA,CACA,EACA6b,iBAAA,SAAAA,iBAAAr5B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAyI,OAAA+U,OACA1sB,KAAAqmC,GAAAn3B,KAAAmU,SAAAqJ,MACA,EAEA8b,WAAAtC,OACAuC,QAAAvC,OAGAwC,eAAA5C,eACA6C,iBAAA,SAAAA,iBAAAz5B,KAAAwd,OACA,GAAAxd,KAAAkJ,GAAA,CACApY,KAAAqmC,GAAAn3B,KAAAkJ,GAAAsU,MACA,CACA,GAAAxd,KAAA5R,WAAA,CACA0C,KAAAqmC,GAAAn3B,KAAA5R,WAAAovB,MACA,CACA1sB,KAAAqmC,GAAAn3B,KAAA2D,KAAA6Z,MACA,EACAkc,UAAA,SAAAA,UAAA15B,KAAAwd,OACA,IAAA7Z,KAAA3D,KAAA2D,KACA1Y,OAAA0Y,KAAA1Y,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAAxzB,KAAArZ,GAAAkzB,MACA,CACA,EACAmc,kBAAA,SAAAA,kBAAA35B,KAAAwd,OACA,IAAAjQ,WAAAvN,KAAAuN,WACAtiB,OAAAsiB,WAAAtiB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAA5pB,WAAAjjB,GAAAkzB,MACA,CACA1sB,KAAAqmC,GAAAn3B,KAAAhI,OAAAwlB,MACA,EACAoc,yBAAA,SAAAA,yBAAA55B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA2N,MAAA6P,MACA,EACAqc,uBAAA,SAAAA,uBAAA75B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA2N,MAAA6P,MACA,EACAsc,gBAAA,SAAAA,gBAAA95B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA4O,SAAA4O,OACA1sB,KAAAqmC,GAAAn3B,KAAA2N,MAAA6P,MACA,EACAuc,yBAAA,SAAAA,yBAAA/5B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAkN,YAAAsQ,MACA,EACAwc,uBAAA,SAAAA,uBAAAh6B,KAAAwd,OACA,GAAAxd,KAAAkN,YAAA,CACApc,KAAAqmC,GAAAn3B,KAAAkN,YAAAsQ,MACA,CACA,IAAAjQ,WAAAvN,KAAAuN,WACAtiB,OAAAsiB,WAAAtiB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAA5pB,WAAAjjB,GAAAkzB,MACA,CACA,GAAAxd,KAAAhI,OAAA,CACAlH,KAAAqmC,GAAAn3B,KAAAhI,OAAAwlB,MACA,CACA,EACAyc,gBAAA,SAAAA,gBAAAj6B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA2N,MAAA6P,OACA1sB,KAAAqmC,GAAAn3B,KAAA8M,SAAA0Q,MACA,EACA0c,qBAAA,SAAAA,qBAAAl6B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAhI,OAAAwlB,MACA,EACA2c,iBAAA,SAAAA,iBAAAn6B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA3S,IAAAmwB,OACA1sB,KAAAqmC,GAAAn3B,KAAApS,MAAA4vB,MACA,EACA4c,gBAAA,SAAAA,gBAAAp6B,KAAAwd,OACA1sB,KAAA2oC,iBAAAz5B,KAAAwd,MACA,EAEA6c,MAAArD,OACAF,wBAAA,SAAAA,YAAA92B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA0H,SAAA8V,MACA,EACA8c,cAAAxD,YACAyD,gBAAA,SAAAA,gBAAAv6B,KAAAwd,OACA,GAAAxd,KAAA0H,SAAA,CACA5W,KAAAqmC,GAAAn3B,KAAA0H,SAAA8V,MACA,CACA,EACAgd,yBAAA,SAAAA,yBAAAx6B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAoV,IAAAoI,OACA1sB,KAAAqmC,GAAAn3B,KAAAqV,MAAAmI,MACA,EACAid,gBAAA,SAAAA,gBAAAz6B,KAAAwd,OACA,IAAAhG,OAAAxX,KAAAwX,OACA1E,YAAA9S,KAAA8S,YAEA,QAAAxoB,EAAA,EAAAW,OAAA6nB,YAAA7nB,OAAAX,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAArkB,YAAAxoB,GAAAkzB,MACA,CACA,QAAAkd,GAAA,EAAAC,QAAAnjB,OAAAvsB,OAAAyvC,GAAAC,QAAAD,KAAA,CACA5pC,KAAAqmC,GAAA3f,OAAAkjB,IAAAld,MACA,CACA,EAEAod,gBAAA5D,OACA6D,cAAA,SAAAA,cAAA76B,KAAAwd,OACA,IAAAvP,WAAAjO,KAAAiO,WACAhjB,OAAAgjB,WAAAhjB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAwG,KAAAqmC,GAAAlpB,WAAA3jB,GAAAkzB,MACA,CACA,EAEAsd,aAAArE,gBACAsE,kBAAA,SAAAA,kBAAA/6B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAmJ,KAAAqU,OACA1sB,KAAAqmC,GAAAn3B,KAAAoJ,MAAAoU,MACA,EACAwd,aAAA,SAAAA,aAAAh7B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAAiW,KAAAuH,OACA1sB,KAAAqmC,GAAAn3B,KAAAmU,SAAAqJ,MACA,EAIAyd,gBAAA,SAAAA,gBAAAj7B,KAAAwd,OACA1sB,KAAAqmC,GAAAn3B,KAAA0H,SAAA8V,MACA,EAEA,G,2CCvbA,aAEArwB,OAAAC,eAAArC,QAAA,cACA6C,MAAA,OAEA7C,QAAAmwC,kBACAnwC,QAAAowC,cAAApwC,QAAAqwC,UAAArwC,QAAAswC,uBAAAtwC,QAAAuwC,uBAAA,EAEA,SAAA/uC,gBAAAC,SAAAC,aAAA,KAAAD,oBAAAC,aAAA,WAAAC,UAAA,sCAEA,SAAAE,kBAAAC,OAAAC,OAAA,QAAAxC,EAAA,EAAAA,EAAAwC,MAAA7B,OAAAX,IAAA,KAAAyC,WAAAD,MAAAxC,GAAAyC,WAAAC,WAAAD,WAAAC,YAAA,MAAAD,WAAAE,aAAA,kBAAAF,sBAAAG,SAAA,KAAAC,OAAAC,eAAAP,OAAAE,WAAAM,IAAAN,WAAA,EAEA,SAAAO,aAAAb,YAAAc,WAAAC,aAAA,GAAAD,WAAAX,kBAAAH,YAAAgB,UAAAF,YAAA,GAAAC,YAAAZ,kBAAAH,YAAAe,aAAA,OAAAf,WAAA,CAEA,IAAAyiC,UAAAD,KAAAC,UAEA,IAAAr/B,OAAApC,UAAA8tC,OAAA,CACA,UAAA3wC,MAAA,gGACA,CAEA,IAAAiF,OAAApC,UAAA+tC,SAAA,CACA,UAAA5wC,MAAA,kGACA,CAEA,IAAA6wC,oBAAA,CACA,OACA,OACA,OACA,MACA,MACA,MACA,OACA,OACA,QACA,QACA,MACA,MACA,OACA,OACAC,GAAA,EACAC,WAAA,EACA,QACA,QACA,SACA,OACA,OACA,OACA,OACA,OACA,SAEA,IAAAL,kBAAA,GACAvwC,QAAAuwC,oCACA,IAAAD,uBAAA,CACA5E,gBAAA,GACA+D,yBAAA,GACA9B,eAAA,GACAY,WAAA,GACAsC,kBAAA,GACArC,QAAA,GACAkB,gBAAA,GACAJ,MAAA,GACAxB,mBAAA,GACAQ,iBAAA,GACAwC,gBAAA,GACAzC,eAAA,GACAD,cAAA,GACAV,wBAAA6C,kBACAlB,gBAAAkB,kBACA1C,mBAAA0C,kBACA9E,iBAAA8E,kBACAvC,iBAAA,GACAD,gBAAA,GACAmC,gBAAA,GACAlE,iBAAA,GACAkC,kBAAA,GACAC,sBAAA,EACAF,qBAAA,EACAuB,gBAAA,EACAzD,YAAA,GAEA/rC,QAAAswC,8CAEA,SAAAS,eAAAte,MAAAhP,OACA,IAAA3R,UAAA2gB,MAAA3gB,UACA2gB,MAAAue,MAAA,KAEA,GAAAvtB,OAAA,MAAAA,MAAAvjB,OAAA,GACA4R,UAAA2R,MAAA,GAAA1S,MAAA0S,MAAA,GAAAgP,OACA,IAAAvyB,OAAAujB,MAAAvjB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACA,IAAA4d,MAAAsG,MAAAlkB,GACAkzB,MAAAue,MAAA,MACAl/B,UAAAqL,MAAApM,MAAAoM,MAAAsV,MACA,CACA,CAEAA,MAAAue,MAAA,IACA,CAEA,SAAAC,2BAAAxe,MAAAxd,KAAAi8B,WAAAC,aACA,IAAAC,eAAA3e,MAAA4e,sBAAAp8B,KAAAlE,MAEA,GAAAqgC,iBAAAb,kBAAA,CACA,WACA,CAEA,IAAAe,qBAAA7e,MAAA4e,sBAAAH,WAAAngC,MAEA,GAAAqgC,iBAAAE,qBAAA,CACA,OAAAH,aAAAC,iBAAA,IAAAE,uBAAA,IAAAJ,WAAAzsB,WAAA,MAAA2sB,eAAAE,oBACA,CAEA,GAAAF,iBAAA,IAAAA,iBAAA,IACA,YACA,CAEA,GAAAn8B,KAAAwP,WAAA,MAAAysB,WAAAzsB,WAAA,MACA,OAAA0sB,WACA,CAEA,GAAAC,iBAAA,IAAAE,uBAAA,KAAAr8B,KAAAwP,WAAA,MAAAysB,WAAAzsB,WAAA,OACA,WACA,CAEA,GAAA0sB,YAAA,CACA,OAAAT,oBAAAz7B,KAAAwP,WAAAisB,oBAAAQ,WAAAzsB,SACA,CAEA,OAAAisB,oBAAAz7B,KAAAwP,UAAAisB,oBAAAQ,WAAAzsB,SACA,CAEA,SAAA8sB,iBAAA9e,MAAAxd,KAAAi8B,WAAAC,aACA,IAAAr/B,UAAA2gB,MAAA3gB,UAEA,GAAAm/B,2BAAAxe,MAAAxd,KAAAi8B,WAAAC,aAAA,CACA1e,MAAAue,MAAA,KACAl/B,UAAAmD,KAAAlE,MAAAkE,KAAAwd,OACAA,MAAAue,MAAA,IACA,MACAl/B,UAAAmD,KAAAlE,MAAAkE,KAAAwd,MACA,CACA,CAEA,SAAA+e,SAAA/e,MAAA9hB,KAAA8gC,OAAAC,SACA,IAAAC,MAAAhhC,KAAAoC,MAAA,MACA,IAAA3F,IAAAukC,MAAAzxC,OAAA,EACAuyB,MAAAue,MAAAW,MAAA,GAAAC,QAEA,GAAAxkC,IAAA,GACAqlB,MAAAue,MAAAU,SAEA,QAAAnyC,EAAA,EAAAA,EAAA6N,IAAA7N,IAAA,CACAkzB,MAAAue,MAAAS,OAAAE,MAAApyC,GAAAqyC,OAAAF,QACA,CAEAjf,MAAAue,MAAAS,OAAAE,MAAAvkC,KAAAwkC,OACA,CACA,CAEA,SAAAC,eAAApf,MAAAsY,SAAA0G,OAAAC,SACA,IAAAxxC,OAAA6qC,SAAA7qC,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACA,IAAAuR,QAAAi6B,SAAAxrC,GACAkzB,MAAAue,MAAAS,QAEA,GAAA3gC,QAAAC,KAAA,UACA0hB,MAAAue,MAAA,MAAAlgC,QAAAjO,MAAA+uC,OAAA,KAAA9gC,QACA,MACA2hB,MAAAue,MAAA,MACAQ,SAAA/e,MAAA3hB,QAAAjO,MAAA4uC,OAAAC,SACAjf,MAAAue,MAAA,KAAAU,QACA,CACA,CACA,CAEA,SAAAI,kBAAA78B,MACA,IAAA88B,YAAA98B,KAEA,MAAA88B,aAAA,MACA,IAAAC,aAAAD,YACAhhC,KAAAihC,aAAAjhC,KAEA,GAAAA,KAAA,UAAAA,KAAA,UACA,WACA,SAAAA,KAAA,UAAAA,KAAA,UAAAA,KAAA,UACAghC,wBAAAr0B,MACA,MACA,YACA,CACA,CACA,CAEA,SAAAu0B,0BAAAxf,MAAAxd,MACA,IAAAnD,UAAA2gB,MAAA3gB,UACA,IAAA8J,aAAA3G,KAAA2G,aACA6W,MAAAue,MAAA/7B,KAAAmE,KAAA,KACA,IAAAlZ,OAAA0b,aAAA1b,OAEA,GAAAA,OAAA,GACA4R,UAAA27B,mBAAA7xB,aAAA,GAAA6W,OAEA,QAAAlzB,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACAkzB,MAAAue,MAAA,MACAl/B,UAAA27B,mBAAA7xB,aAAArc,GAAAkzB,MACA,CACA,CACA,CAEA,IAAAoZ,eAAAC,oBAAAC,YAAAC,iBAAAN,gBAAAF,eACA,IAAA6E,UAAA,CACA9E,QAAA,SAAAA,QAAAt2B,KAAAwd,OACA,IAAAgf,OAAAhf,MAAAgf,OAAAjB,OAAA/d,MAAAyf,aACA,IAAAR,QAAAjf,MAAAif,QACAS,cAAA1f,MAAA0f,cAEA,GAAAA,eAAAl9B,KAAA81B,UAAA,MACA8G,eAAApf,MAAAxd,KAAA81B,SAAA0G,OAAAC,QACA,CAEA,IAAAxtB,WAAAjP,KAAA2D,KACA,IAAA1Y,OAAAgkB,WAAAhkB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACA,IAAAof,UAAAuF,WAAA3kB,GAEA,GAAA4yC,eAAAxzB,UAAAosB,UAAA,MACA8G,eAAApf,MAAA9T,UAAAosB,SAAA0G,OAAAC,QACA,CAEAjf,MAAAue,MAAAS,QACA1rC,KAAA4Y,UAAA5N,MAAA4N,UAAA8T,OACAA,MAAAue,MAAAU,QACA,CAEA,GAAAS,eAAAl9B,KAAAo2B,kBAAA,MACAwG,eAAApf,MAAAxd,KAAAo2B,iBAAAoG,OAAAC,QACA,CACA,EACAlG,8BAAA,SAAAA,eAAAv2B,KAAAwd,OACA,IAAAgf,OAAAhf,MAAAgf,OAAAjB,OAAA/d,MAAAyf,eACA,IAAAR,QAAAjf,MAAAif,QACAS,cAAA1f,MAAA0f,cACA,IAAAC,gBAAAX,OAAAhf,MAAAgf,OACAhf,MAAAue,MAAA,KACA,IAAA9sB,WAAAjP,KAAA2D,KAEA,GAAAsL,YAAA,MAAAA,WAAAhkB,OAAA,GACAuyB,MAAAue,MAAAU,SAEA,GAAAS,eAAAl9B,KAAA81B,UAAA,MACA8G,eAAApf,MAAAxd,KAAA81B,SAAAqH,gBAAAV,QACA,CAEA,IAAAxxC,OAAAgkB,WAAAhkB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACA,IAAAof,UAAAuF,WAAA3kB,GAEA,GAAA4yC,eAAAxzB,UAAAosB,UAAA,MACA8G,eAAApf,MAAA9T,UAAAosB,SAAAqH,gBAAAV,QACA,CAEAjf,MAAAue,MAAAoB,iBACArsC,KAAA4Y,UAAA5N,MAAA4N,UAAA8T,OACAA,MAAAue,MAAAU,QACA,CAEAjf,MAAAue,MAAAS,OACA,MACA,GAAAU,eAAAl9B,KAAA81B,UAAA,MACAtY,MAAAue,MAAAU,SACAG,eAAApf,MAAAxd,KAAA81B,SAAAqH,gBAAAV,SACAjf,MAAAue,MAAAS,OACA,CACA,CAEA,GAAAU,eAAAl9B,KAAAo2B,kBAAA,MACAwG,eAAApf,MAAAxd,KAAAo2B,iBAAA+G,gBAAAV,QACA,CAEAjf,MAAAue,MAAA,KACAve,MAAAyf,aACA,EACAvD,UAAAnD,eACA6G,YAAA,SAAAA,YAAAp9B,KAAAwd,OACAA,MAAAue,MAAA,WACAjrC,KAAAylC,eAAAv2B,KAAAwd,MACA,EACAga,eAAA,SAAAA,eAAAx3B,KAAAwd,OACAA,MAAAue,MAAA,IACA,EACAtE,oBAAA,SAAAA,oBAAAz3B,KAAAwd,OACA,IAAA6f,WAAA7f,MAAA4e,sBAAAp8B,KAAAyD,WAAA3H,MAEA,GAAAuhC,aAAA/B,mBAAA+B,aAAA,GAAAr9B,KAAAyD,WAAA0F,KAAArN,KAAA,UACA0hB,MAAAue,MAAA,KACAjrC,KAAAkP,KAAAyD,WAAA3H,MAAAkE,KAAAyD,WAAA+Z,OACAA,MAAAue,MAAA,IACA,MACAjrC,KAAAkP,KAAAyD,WAAA3H,MAAAkE,KAAAyD,WAAA+Z,MACA,CAEAA,MAAAue,MAAA,IACA,EACArE,YAAA,SAAAA,YAAA13B,KAAAwd,OACAA,MAAAue,MAAA,QACAjrC,KAAAkP,KAAAzP,KAAAuL,MAAAkE,KAAAzP,KAAAitB,OACAA,MAAAue,MAAA,MACAjrC,KAAAkP,KAAAwH,WAAA1L,MAAAkE,KAAAwH,WAAAgW,OAEA,GAAAxd,KAAAyH,WAAA,MACA+V,MAAAue,MAAA,UACAjrC,KAAAkP,KAAAyH,UAAA3L,MAAAkE,KAAAyH,UAAA+V,MACA,CACA,EACAma,iBAAA,SAAAA,iBAAA33B,KAAAwd,OACA1sB,KAAAkP,KAAA5N,MAAA0J,MAAAkE,KAAA5N,MAAAorB,OACAA,MAAAue,MAAA,MACAjrC,KAAAkP,KAAA2D,KAAA7H,MAAAkE,KAAA2D,KAAA6Z,MACA,EACAoa,eAAA,SAAAA,eAAA53B,KAAAwd,OACAA,MAAAue,MAAA,SAEA,GAAA/7B,KAAA5N,OAAA,MACAorB,MAAAue,MAAA,KACAjrC,KAAAkP,KAAA5N,MAAA0J,MAAAkE,KAAA5N,MAAAorB,MACA,CAEAA,MAAAue,MAAA,IACA,EACAlE,kBAAA,SAAAA,kBAAA73B,KAAAwd,OACAA,MAAAue,MAAA,YAEA,GAAA/7B,KAAA5N,OAAA,MACAorB,MAAAue,MAAA,KACAjrC,KAAAkP,KAAA5N,MAAA0J,MAAAkE,KAAA5N,MAAAorB,MACA,CAEAA,MAAAue,MAAA,IACA,EACAjE,cAAA,SAAAA,cAAA93B,KAAAwd,OACAA,MAAAue,MAAA,UACAjrC,KAAAkP,KAAAyI,OAAA3M,MAAAkE,KAAAyI,OAAA+U,OACAA,MAAAue,MAAA,MACAjrC,KAAAkP,KAAA2D,KAAA7H,MAAAkE,KAAA2D,KAAA6Z,MACA,EACAkZ,gBAAA,SAAAA,gBAAA12B,KAAAwd,OACA,IAAAgf,OAAAhf,MAAAgf,OAAAjB,OAAA/d,MAAAyf,eACA,IAAAR,QAAAjf,MAAAif,QACAS,cAAA1f,MAAA0f,cACA1f,MAAAyf,cACA,IAAAK,WAAAd,OAAAhf,MAAAgf,OACA,IAAAW,gBAAAG,WAAA9f,MAAAgf,OACAhf,MAAAue,MAAA,YACAjrC,KAAAkP,KAAA2H,aAAA7L,MAAAkE,KAAA2H,aAAA6V,OACAA,MAAAue,MAAA,MAAAU,SACA,IAAAc,WAAAv9B,KAAA4H,MACA,IAAA41B,gBAAAD,WAAAtyC,OAEA,QAAAX,EAAA,EAAAA,EAAAkzC,gBAAAlzC,IAAA,CACA,IAAAmzC,UAAAF,WAAAjzC,GAEA,GAAA4yC,eAAAO,UAAA3H,UAAA,MACA8G,eAAApf,MAAAigB,UAAA3H,SAAAwH,WAAAb,QACA,CAEA,GAAAgB,UAAAltC,KAAA,CACAitB,MAAAue,MAAAuB,WAAA,SACAxsC,KAAA2sC,UAAAltC,KAAAuL,MAAA2hC,UAAAltC,KAAAitB,OACAA,MAAAue,MAAA,IAAAU,QACA,MACAjf,MAAAue,MAAAuB,WAAA,WAAAb,QACA,CAEA,IAAAj1B,WAAAi2B,UAAAj2B,WACA,IAAAk2B,gBAAAl2B,WAAAvc,OAEA,QAAAyvC,GAAA,EAAAA,GAAAgD,gBAAAhD,KAAA,CACA,IAAAhxB,UAAAlC,WAAAkzB,IAEA,GAAAwC,eAAAxzB,UAAAosB,UAAA,MACA8G,eAAApf,MAAA9T,UAAAosB,SAAAqH,gBAAAV,QACA,CAEAjf,MAAAue,MAAAoB,iBACArsC,KAAA4Y,UAAA5N,MAAA4N,UAAA8T,OACAA,MAAAue,MAAAU,QACA,CACA,CAEAjf,MAAAyf,aAAA,EACAzf,MAAAue,MAAAS,OAAA,IACA,EACAzE,gBAAA,SAAAA,gBAAA/3B,KAAAwd,OACAA,MAAAue,MAAA,UAEA,GAAA/7B,KAAA0H,SAAA,CACA8V,MAAAue,MAAA,KACAjrC,KAAAkP,KAAA0H,SAAA5L,MAAAkE,KAAA0H,SAAA8V,MACA,CAEAA,MAAAue,MAAA,IACA,EACA/D,eAAA,SAAAA,eAAAh4B,KAAAwd,OACAA,MAAAue,MAAA,UACAjrC,KAAAkP,KAAA0H,SAAA5L,MAAAkE,KAAA0H,SAAA8V,OACAA,MAAAue,MAAA,IACA,EACA9D,aAAA,SAAAA,aAAAj4B,KAAAwd,OACAA,MAAAue,MAAA,QACAjrC,KAAAkP,KAAAvE,MAAAK,MAAAkE,KAAAvE,MAAA+hB,OAEA,GAAAxd,KAAAqI,QAAA,CACA,IAAAA,QAAArI,KAAAqI,QAEA,GAAAA,QAAAH,OAAA,MACAsV,MAAAue,MAAA,UACA,MACAve,MAAAue,MAAA,YACAjrC,KAAAuX,QAAAH,MAAApM,MAAAuM,QAAAH,MAAAsV,OACAA,MAAAue,MAAA,KACA,CAEAjrC,KAAAuX,QAAA1E,KAAA7H,MAAAuM,QAAA1E,KAAA6Z,MACA,CAEA,GAAAxd,KAAAuI,UAAA,CACAiV,MAAAue,MAAA,aACAjrC,KAAAkP,KAAAuI,UAAAzM,MAAAkE,KAAAuI,UAAAiV,MACA,CACA,EACA2a,eAAA,SAAAA,eAAAn4B,KAAAwd,OACAA,MAAAue,MAAA,WACAjrC,KAAAkP,KAAAzP,KAAAuL,MAAAkE,KAAAzP,KAAAitB,OACAA,MAAAue,MAAA,MACAjrC,KAAAkP,KAAA2D,KAAA7H,MAAAkE,KAAA2D,KAAA6Z,MACA,EACA4a,iBAAA,SAAAA,iBAAAp4B,KAAAwd,OACAA,MAAAue,MAAA,OACAjrC,KAAAkP,KAAA2D,KAAA7H,MAAAkE,KAAA2D,KAAA6Z,OACAA,MAAAue,MAAA,YACAjrC,KAAAkP,KAAAzP,KAAAuL,MAAAkE,KAAAzP,KAAAitB,OACAA,MAAAue,MAAA,KACA,EACA1D,aAAA,SAAAA,aAAAr4B,KAAAwd,OACAA,MAAAue,MAAA,SAEA,GAAA/7B,KAAAgH,MAAA,MACA,IAAAA,KAAAhH,KAAAgH,KAEA,GAAAA,KAAAlL,KAAA,UACAkhC,0BAAAxf,MAAAxW,KACA,MACAlW,KAAAkW,KAAAlL,MAAAkL,KAAAwW,MACA,CACA,CAEAA,MAAAue,MAAA,MAEA,GAAA/7B,KAAAzP,KAAA,CACAO,KAAAkP,KAAAzP,KAAAuL,MAAAkE,KAAAzP,KAAAitB,MACA,CAEAA,MAAAue,MAAA,MAEA,GAAA/7B,KAAAgJ,OAAA,CACAlY,KAAAkP,KAAAgJ,OAAAlN,MAAAkE,KAAAgJ,OAAAwU,MACA,CAEAA,MAAAue,MAAA,MACAjrC,KAAAkP,KAAA2D,KAAA7H,MAAAkE,KAAA2D,KAAA6Z,MACA,EACAoZ,8BAAA,SAAAA,eAAA52B,KAAAwd,OACAA,MAAAue,MAAA,OAAA4B,OAAA39B,KAAA,2BACA,IAAAmJ,KAAAnJ,KAAAmJ,KAEA,GAAAA,KAAArN,KAAA,UACAkhC,0BAAAxf,MAAArU,KACA,MACArY,KAAAqY,KAAArN,MAAAqN,KAAAqU,MACA,CAEAA,MAAAue,MAAA/7B,KAAAlE,KAAA,wBACAhL,KAAAkP,KAAAoJ,MAAAtN,MAAAkE,KAAAoJ,MAAAoU,OACAA,MAAAue,MAAA,MACAjrC,KAAAkP,KAAA2D,KAAA7H,MAAAkE,KAAA2D,KAAA6Z,MACA,EACAgc,eAAA5C,eACA0B,kBAAA,SAAAA,kBAAAt4B,KAAAwd,OACAA,MAAAue,MAAA,YAAA/7B,KACA,EACA62B,wCAAA,SAAAA,oBAAA72B,KAAAwd,OACAA,MAAAue,OAAA/7B,KAAApD,MAAA,cAAAoD,KAAAnD,UAAA,2BAAAmD,KAAAkJ,GAAAlJ,KAAAkJ,GAAA5Y,KAAA,IAAA0P,MACA87B,eAAAte,MAAAxd,KAAAoK,QACAoT,MAAAue,MAAA,KACAjrC,KAAAkP,KAAA2D,KAAA7H,MAAAkE,KAAA2D,KAAA6Z,MACA,EACAob,mBAAA/B,oBACA0B,oBAAA,SAAAA,oBAAAv4B,KAAAwd,OACAwf,0BAAAxf,MAAAxd,MACAwd,MAAAue,MAAA,IACA,EACAvD,mBAAA,SAAAA,mBAAAx4B,KAAAwd,OACA1sB,KAAAkP,KAAAkJ,GAAApN,MAAAkE,KAAAkJ,GAAAsU,OAEA,GAAAxd,KAAAgH,MAAA,MACAwW,MAAAue,MAAA,OACAjrC,KAAAkP,KAAAgH,KAAAlL,MAAAkE,KAAAgH,KAAAwW,MACA,CACA,EACAic,iBAAA,SAAAA,iBAAAz5B,KAAAwd,OACAA,MAAAue,MAAA,UAAA/7B,KAAAkJ,GAAA,GAAAy0B,OAAA39B,KAAAkJ,GAAA5Y,KAAA,SAAA0P,MAEA,GAAAA,KAAA5R,WAAA,CACAovB,MAAAue,MAAA,YACA,IAAA3tC,WAAA4R,KAAA5R,WACA,IAAA0N,KAAA1N,WAAA0N,KACA,IAAAuhC,WAAA7f,MAAA4e,sBAAAtgC,MAEA,IAAAA,KAAA,UAAAA,KAAA,UAAAA,KAAA,YAAAuhC,aAAA/B,mBAAA+B,WAAA7f,MAAA4e,sBAAAhC,iBAAA,CACA5c,MAAAue,MAAA,KACAjrC,KAAAkP,KAAA5R,WAAA0N,MAAA1N,WAAAovB,OACAA,MAAAue,MAAA,IACA,MACAjrC,KAAA1C,WAAA0N,MAAA1N,WAAAovB,MACA,CAEAA,MAAAue,MAAA,IACA,CAEAjrC,KAAA4oC,UAAA15B,KAAA2D,KAAA6Z,MACA,EACAmc,kBAAA,SAAAA,kBAAA35B,KAAAwd,OACAA,MAAAue,MAAA,WACA,IAAAxuB,WAAAvN,KAAAuN,WACA,IAAAtiB,OAAAsiB,WAAAtiB,OACA,IAAAX,EAAA,EAEA,GAAAW,OAAA,GACA,KAAAX,EAAAW,QAAA,CACA,GAAAX,EAAA,GACAkzB,MAAAue,MAAA,KACA,CAEA,IAAA6B,UAAArwB,WAAAjjB,GACA,IAAAwR,KAAA8hC,UAAA9hC,KAAA,GAEA,GAAAA,OAAA,KACA0hB,MAAAue,MAAA6B,UAAAjwB,MAAArd,KAAAstC,WACAtzC,GACA,SAAAwR,OAAA,KACA0hB,MAAAue,MAAA,QAAA6B,UAAAjwB,MAAArd,KAAAstC,WACAtzC,GACA,MACA,KACA,CACA,CAEA,GAAAA,EAAAW,OAAA,CACAuyB,MAAAue,MAAA,KAEA,QACA,IAAA8B,WAAAtwB,WAAAjjB,GACA,IAAAgG,KAAAutC,WAAAjvB,SAAAte,KACAktB,MAAAue,MAAAzrC,KAAAutC,YAEA,GAAAvtC,OAAAutC,WAAAlwB,MAAArd,KAAA,CACAktB,MAAAue,MAAA,OAAA8B,WAAAlwB,MAAArd,KACA,CAEA,KAAAhG,EAAAW,OAAA,CACAuyB,MAAAue,MAAA,KACA,MACA,KACA,CACA,CAEAve,MAAAue,MAAA,IACA,CAEAve,MAAAue,MAAA,SACA,CAEAjrC,KAAAyoC,QAAAv5B,KAAAhI,OAAAwlB,OACAA,MAAAue,MAAA,IACA,EACA+B,iBAAA,SAAAA,iBAAA99B,KAAAwd,OACAA,MAAAue,MAAA,WACAjrC,KAAAkP,KAAAhI,OAAA8D,MAAAkE,KAAAhI,OAAAwlB,OACAA,MAAAue,MAAA,IACA,EACAhC,yBAAA,SAAAA,yBAAA/5B,KAAAwd,OACAA,MAAAue,MAAA,mBACAjrC,KAAAkP,KAAAkN,YAAApR,MAAAkE,KAAAkN,YAAAsQ,OAEA,GAAAA,MAAA4e,sBAAAp8B,KAAAkN,YAAApR,OAAA,MAAAkE,KAAAkN,YAAApR,KAAA,UACA0hB,MAAAue,MAAA,IACA,CACA,EACA/B,uBAAA,SAAAA,uBAAAh6B,KAAAwd,OACAA,MAAAue,MAAA,WAEA,GAAA/7B,KAAAkN,YAAA,CACApc,KAAAkP,KAAAkN,YAAApR,MAAAkE,KAAAkN,YAAAsQ,MACA,MACAA,MAAAue,MAAA,KACA,IAAAxuB,WAAAvN,KAAAuN,WACAtiB,OAAAsiB,WAAAtiB,OAEA,GAAAA,OAAA,GACA,QAAAX,EAAA,KACA,IAAAszC,UAAArwB,WAAAjjB,GACA,IAAAgG,KAAAstC,UAAAjwB,MAAArd,KACAktB,MAAAue,MAAAzrC,KAAAstC,WAEA,GAAAttC,OAAAstC,UAAA9wB,SAAAxc,KAAA,CACAktB,MAAAue,MAAA,OAAA6B,UAAA9wB,SAAAxc,KACA,CAEA,KAAAhG,EAAAW,OAAA,CACAuyB,MAAAue,MAAA,KACA,MACA,KACA,CACA,CACA,CAEAve,MAAAue,MAAA,KAEA,GAAA/7B,KAAAhI,OAAA,CACAwlB,MAAAue,MAAA,UACAjrC,KAAAyoC,QAAAv5B,KAAAhI,OAAAwlB,MACA,CAEAA,MAAAue,MAAA,IACA,CACA,EACA7B,qBAAA,SAAAA,qBAAAl6B,KAAAwd,OACA,GAAAxd,KAAA8M,UAAA,MACA0Q,MAAAue,MAAA,eAAA/7B,KAAA8M,SAAAxc,KAAA,SACA,MACAktB,MAAAue,MAAA,iBACA,CAEAjrC,KAAAyoC,QAAAv5B,KAAAhI,OAAAwlB,OACAA,MAAAue,MAAA,IACA,EACA5B,iBAAA,SAAAA,iBAAAn6B,KAAAwd,OACA,GAAAxd,KAAA,WACAwd,MAAAue,MAAA,UACA,CAEA,IAAA53B,KAAAnE,KAAAmE,KAAA,GAEA,GAAAA,OAAA,KAAAA,OAAA,KACAqZ,MAAAue,MAAA/7B,KAAAmE,KAAA,IACA,CAEA,GAAAnE,KAAApS,MAAAgP,MAAA,CACA4gB,MAAAue,MAAA,SACA,CAEA,GAAA/7B,KAAApS,MAAAiP,UAAA,CACA2gB,MAAAue,MAAA,IACA,CAEA,GAAA/7B,KAAA0L,SAAA,CACA8R,MAAAue,MAAA,KACAjrC,KAAAkP,KAAA3S,IAAAyO,MAAAkE,KAAA3S,IAAAmwB,OACAA,MAAAue,MAAA,IACA,MACAjrC,KAAAkP,KAAA3S,IAAAyO,MAAAkE,KAAA3S,IAAAmwB,MACA,CAEAse,eAAAte,MAAAxd,KAAApS,MAAAwc,QACAoT,MAAAue,MAAA,KACAjrC,KAAAkP,KAAApS,MAAA+V,KAAA7H,MAAAkE,KAAApS,MAAA+V,KAAA6Z,MACA,EACA4c,gBAAA,SAAAA,gBAAAp6B,KAAAwd,OACA1sB,KAAA2oC,iBAAAz5B,KAAAwd,MACA,EACAib,wBAAA,SAAAA,wBAAAz4B,KAAAwd,OACAA,MAAAue,MAAA/7B,KAAApD,MAAA,YAAAoD,MACA,IAAAoK,OAAApK,KAAAoK,OAEA,GAAAA,QAAA,MACA,GAAAA,OAAAnf,SAAA,GAAAmf,OAAA,GAAAtO,KAAA,UACA0hB,MAAAue,MAAA3xB,OAAA,GAAA9Z,KAAA8Z,OAAA,GACA,MACA0xB,eAAAte,MAAAxd,KAAAoK,OACA,CACA,CAEAoT,MAAAue,MAAA,QAEA,GAAA/7B,KAAA2D,KAAA7H,KAAA,UACA0hB,MAAAue,MAAA,KACAjrC,KAAA0lC,iBAAAx2B,KAAA2D,KAAA6Z,OACAA,MAAAue,MAAA,IACA,MACAjrC,KAAAkP,KAAA2D,KAAA7H,MAAAkE,KAAA2D,KAAA6Z,MACA,CACA,EACAkb,eAAA,SAAAA,eAAA14B,KAAAwd,OACAA,MAAAue,MAAA,OAAA/7B,KACA,EACAq6B,MAAA,SAAAA,MAAAr6B,KAAAwd,OACAA,MAAAue,MAAA,QAAA/7B,KACA,EACA82B,wBAAA,SAAAA,YAAA92B,KAAAwd,OACAA,MAAAue,MAAA,OACAjrC,KAAAkP,KAAA0H,SAAA5L,MAAAkE,KAAA0H,SAAA8V,MACA,EACA8c,cAAAxD,YACAyD,gBAAA,SAAAA,gBAAAv6B,KAAAwd,OACAA,MAAAue,MAAA/7B,KAAA4Y,SAAA,kBAEA,GAAA5Y,KAAA0H,SAAA,CACA8V,MAAAue,MAAA,KACAjrC,KAAAkP,KAAA0H,SAAA5L,MAAAkE,KAAA0H,SAAA8V,MACA,CACA,EACAyd,gBAAA,SAAAA,gBAAAj7B,KAAAwd,OACAA,MAAAue,MAAA,SAAA/7B,MACAs8B,iBAAA9e,MAAAxd,KAAA0H,SAAA1H,KACA,EACAy6B,gBAAA,SAAAA,gBAAAz6B,KAAAwd,OACA,IAAAhG,OAAAxX,KAAAwX,OACA1E,YAAA9S,KAAA8S,YACA0K,MAAAue,MAAA,KACA,IAAA9wC,OAAA6nB,YAAA7nB,OAEA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,IAAA,CACA,IAAAmZ,WAAAqP,YAAAxoB,GACA,IAAAyzC,OAAAvmB,OAAAltB,GACAkzB,MAAAue,MAAAgC,OAAAnwC,MAAAwhB,IAAA2uB,QACAvgB,MAAAue,MAAA,MACAjrC,KAAA2S,WAAA3H,MAAA2H,WAAA+Z,OACAA,MAAAue,MAAA,IACA,CAEA,IAAA1mB,MAAAmC,cAAAvsB,OAAA,GACAuyB,MAAAue,MAAA1mB,MAAAznB,MAAAwhB,IAAAiG,OACAmI,MAAAue,MAAA,IACA,EACAnB,gBAAA,SAAAA,gBAAA56B,KAAAwd,OACAA,MAAAue,MAAA/7B,KAAApS,MAAAwhB,IAAApP,KACA,EACAw6B,yBAAA,SAAAA,yBAAAx6B,KAAAwd,OACA8e,iBAAA9e,MAAAxd,KAAAoV,IAAApV,MACAlP,KAAAkP,KAAAqV,MAAAvZ,MAAAkE,KAAAqV,MAAAmI,MACA,EACAiZ,gCAAA,SAAAA,gBAAAz2B,KAAAwd,OACAA,MAAAue,MAAA,KAEA,GAAA/7B,KAAAoO,SAAAnjB,OAAA,GACA,IAAAmjB,SAAApO,KAAAoO,SACAnjB,OAAAmjB,SAAAnjB,OAEA,QAAAX,EAAA,KACA,IAAAwgB,QAAAsD,SAAA9jB,GAEA,GAAAwgB,SAAA,MACAha,KAAAga,QAAAhP,MAAAgP,QAAA0S,MACA,CAEA,KAAAlzB,EAAAW,OAAA,CACAuyB,MAAAue,MAAA,KACA,MACA,GAAAjxB,SAAA,MACA0S,MAAAue,MAAA,KACA,CAEA,KACA,CACA,CACA,CAEAve,MAAAue,MAAA,IACA,EACAjB,aAAArE,gBACAD,iBAAA,SAAAA,iBAAAx2B,KAAAwd,OACA,IAAAgf,OAAAhf,MAAAgf,OAAAjB,OAAA/d,MAAAyf,eACA,IAAAR,QAAAjf,MAAAif,QACAS,cAAA1f,MAAA0f,cACA,IAAAc,eAAAxB,OAAAhf,MAAAgf,OACAhf,MAAAue,MAAA,KAEA,GAAA/7B,KAAAiO,WAAAhjB,OAAA,GACAuyB,MAAAue,MAAAU,SAEA,GAAAS,eAAAl9B,KAAA81B,UAAA,MACA8G,eAAApf,MAAAxd,KAAA81B,SAAAkI,eAAAvB,QACA,CAEA,IAAA1oC,MAAA,IAAA0oC,QACA,IAAAxuB,WAAAjO,KAAAiO,WACAhjB,OAAAgjB,WAAAhjB,OAEA,QAAAX,EAAA,KACA,IAAA6pB,SAAAlG,WAAA3jB,GAEA,GAAA4yC,eAAA/oB,SAAA2hB,UAAA,MACA8G,eAAApf,MAAArJ,SAAA2hB,SAAAkI,eAAAvB,QACA,CAEAjf,MAAAue,MAAAiC,gBACAltC,KAAAqjB,SAAArY,MAAAqY,SAAAqJ,OAEA,KAAAlzB,EAAAW,OAAA,CACAuyB,MAAAue,MAAAhoC,MACA,MACA,KACA,CACA,CAEAypB,MAAAue,MAAAU,SAEA,GAAAS,eAAAl9B,KAAAo2B,kBAAA,MACAwG,eAAApf,MAAAxd,KAAAo2B,iBAAA4H,eAAAvB,QACA,CAEAjf,MAAAue,MAAAS,OAAA,IACA,SAAAU,cAAA,CACA,GAAAl9B,KAAA81B,UAAA,MACAtY,MAAAue,MAAAU,SACAG,eAAApf,MAAAxd,KAAA81B,SAAAkI,eAAAvB,SAEA,GAAAz8B,KAAAo2B,kBAAA,MACAwG,eAAApf,MAAAxd,KAAAo2B,iBAAA4H,eAAAvB,QACA,CAEAjf,MAAAue,MAAAS,OAAA,IACA,SAAAx8B,KAAAo2B,kBAAA,MACA5Y,MAAAue,MAAAU,SACAG,eAAApf,MAAAxd,KAAAo2B,iBAAA4H,eAAAvB,SACAjf,MAAAue,MAAAS,OAAA,IACA,MACAhf,MAAAue,MAAA,IACA,CACA,MACAve,MAAAue,MAAA,IACA,CAEAve,MAAAyf,aACA,EACAtE,SAAA,SAAAA,SAAA34B,KAAAwd,OACA,GAAAxd,KAAAoM,QAAApM,KAAAmE,KAAA,UACArT,KAAAqpC,iBAAAn6B,KAAAwd,MACA,MACA,IAAAxd,KAAA0S,UAAA,CACA,GAAA1S,KAAA0L,SAAA,CACA8R,MAAAue,MAAA,KACAjrC,KAAAkP,KAAA3S,IAAAyO,MAAAkE,KAAA3S,IAAAmwB,OACAA,MAAAue,MAAA,IACA,MACAjrC,KAAAkP,KAAA3S,IAAAyO,MAAAkE,KAAA3S,IAAAmwB,MACA,CAEAA,MAAAue,MAAA,KACA,CAEAjrC,KAAAkP,KAAApS,MAAAkO,MAAAkE,KAAApS,MAAA4vB,MACA,CACA,EACAygB,mBAAA,SAAAA,mBAAAj+B,KAAAwd,OACA,GAAAxd,KAAA,WACAwd,MAAAue,MAAA,UACA,CAEA,GAAA/7B,KAAA0L,SAAA,CACA8R,MAAAue,MAAA,IACA,CAEAjrC,KAAAkP,KAAA3S,IAAAyO,MAAAkE,KAAA3S,IAAAmwB,OAEA,GAAAxd,KAAA0L,SAAA,CACA8R,MAAAue,MAAA,IACA,CAEA,GAAA/7B,KAAApS,OAAA,MACA,GAAAoS,KAAA3S,IAAAyO,KAAA,UACA0hB,MAAAue,MAAA,IACA,CAEA,MACA,CAEAve,MAAAue,MAAA,OACAjrC,KAAAkP,KAAApS,MAAAkO,MAAAkE,KAAApS,MAAA4vB,OACAA,MAAAue,MAAA,IACA,EACAlB,cAAA,SAAAA,cAAA76B,KAAAwd,OACAA,MAAAue,MAAA,KAEA,GAAA/7B,KAAAiO,WAAAhjB,OAAA,GACA,IAAAgjB,WAAAjO,KAAAiO,WACAhjB,OAAAgjB,WAAAhjB,OAEA,QAAAX,EAAA,KACAwG,KAAAmd,WAAA3jB,GAAAwR,MAAAmS,WAAA3jB,GAAAkzB,OAEA,KAAAlzB,EAAAW,OAAA,CACAuyB,MAAAue,MAAA,KACA,MACA,KACA,CACA,CACA,CAEAve,MAAAue,MAAA,IACA,EACAlD,mBAAA,SAAAA,mBAAA74B,KAAAwd,OACAse,eAAAte,MAAAxd,KAAA8S,YACA,EACAgmB,gBAAA,SAAAA,gBAAA94B,KAAAwd,OACA,GAAAxd,KAAArN,OAAA,CACA,IAAA6c,SAAAxP,KAAAwP,SACA9H,SAAA1H,KAAA0H,SACA5L,KAAAkE,KAAA0H,SAAA5L,KACA0hB,MAAAue,MAAAvsB,UACA,IAAA0uB,iBAAAlC,2BAAAxe,MAAA9V,SAAA1H,MAEA,IAAAk+B,mBAAA1uB,SAAAvkB,OAAA,GAAA6Q,KAAA,WAAAA,KAAA,UAAAA,KAAA,WAAA4L,SAAA/U,QAAA+U,SAAA8H,SAAA,KAAAA,sBAAA,KAAAA,WAAA,OACAgO,MAAAue,MAAA,IACA,CAEA,GAAAmC,iBAAA,CACA1gB,MAAAue,MAAAvsB,SAAAvkB,OAAA,YACA6F,KAAAgL,MAAA4L,SAAA8V,OACAA,MAAAue,MAAA,IACA,MACAjrC,KAAAgL,MAAA4L,SAAA8V,MACA,CACA,MACA1sB,KAAAkP,KAAA0H,SAAA5L,MAAAkE,KAAA0H,SAAA8V,OACAA,MAAAue,MAAA/7B,KAAAwP,SACA,CACA,EACAupB,iBAAA,SAAAA,iBAAA/4B,KAAAwd,OACA,GAAAxd,KAAArN,OAAA,CACA6qB,MAAAue,MAAA/7B,KAAAwP,UACA1e,KAAAkP,KAAA0H,SAAA5L,MAAAkE,KAAA0H,SAAA8V,MACA,MACA1sB,KAAAkP,KAAA0H,SAAA5L,MAAAkE,KAAA0H,SAAA8V,OACAA,MAAAue,MAAA/7B,KAAAwP,SACA,CACA,EACAwpB,qBAAA,SAAAA,qBAAAh5B,KAAAwd,OACA1sB,KAAAkP,KAAAmJ,KAAArN,MAAAkE,KAAAmJ,KAAAqU,OACAA,MAAAue,MAAA,IAAA/7B,KAAAwP,SAAA,KACA1e,KAAAkP,KAAAoJ,MAAAtN,MAAAkE,KAAAoJ,MAAAoU,MACA,EACAud,kBAAA,SAAAA,kBAAA/6B,KAAAwd,OACA1sB,KAAAkP,KAAAmJ,KAAArN,MAAAkE,KAAAmJ,KAAAqU,OACAA,MAAAue,MAAA,OACAjrC,KAAAkP,KAAAoJ,MAAAtN,MAAAkE,KAAAoJ,MAAAoU,MACA,EACAuZ,kCAAA,SAAAA,iBAAA/2B,KAAAwd,OACA,IAAA2gB,KAAAn+B,KAAAwP,WAAA,KAEA,GAAA2uB,KAAA,CACA3gB,MAAAue,MAAA,IACA,CAEAO,iBAAA9e,MAAAxd,KAAAmJ,KAAAnJ,KAAA,OACAwd,MAAAue,MAAA,IAAA/7B,KAAAwP,SAAA,KACA8sB,iBAAA9e,MAAAxd,KAAAoJ,MAAApJ,KAAA,MAEA,GAAAm+B,KAAA,CACA3gB,MAAAue,MAAA,IACA,CACA,EACA9C,kBAAAlC,iBACAmC,sBAAA,SAAAA,sBAAAl5B,KAAAwd,OACA,IAAAjtB,KAAAyP,KAAAzP,KACA,IAAA8sC,WAAA7f,MAAA4e,sBAAA7rC,KAAAuL,MAEA,GAAAuhC,aAAA/B,mBAAA+B,YAAA7f,MAAA4e,sBAAAlD,sBAAA,CACA1b,MAAAue,MAAA,KACAjrC,KAAAP,KAAAuL,MAAAvL,KAAAitB,OACAA,MAAAue,MAAA,IACA,MACAjrC,KAAAP,KAAAuL,MAAAvL,KAAAitB,MACA,CAEAA,MAAAue,MAAA,OACAjrC,KAAAkP,KAAAwH,WAAA1L,MAAAkE,KAAAwH,WAAAgW,OACAA,MAAAue,MAAA,OACAjrC,KAAAkP,KAAAyH,UAAA3L,MAAAkE,KAAAyH,UAAA+V,MACA,EACA2b,cAAA,SAAAA,cAAAn5B,KAAAwd,OACAA,MAAAue,MAAA,QACA,IAAAsB,WAAA7f,MAAA4e,sBAAAp8B,KAAAkV,OAAApZ,MAEA,GAAAuhC,aAAA/B,mBAAA+B,WAAA7f,MAAA4e,sBAAAhD,gBAAAyD,kBAAA78B,KAAAkV,QAAA,CACAsI,MAAAue,MAAA,KACAjrC,KAAAkP,KAAAkV,OAAApZ,MAAAkE,KAAAkV,OAAAsI,OACAA,MAAAue,MAAA,IACA,MACAjrC,KAAAkP,KAAAkV,OAAApZ,MAAAkE,KAAAkV,OAAAsI,MACA,CAEAse,eAAAte,MAAAxd,KAAA,aACA,EACAo5B,eAAA,SAAAA,eAAAp5B,KAAAwd,OACA,IAAA6f,WAAA7f,MAAA4e,sBAAAp8B,KAAAkV,OAAApZ,MAEA,GAAAuhC,aAAA/B,mBAAA+B,WAAA7f,MAAA4e,sBAAAhD,eAAA,CACA5b,MAAAue,MAAA,KACAjrC,KAAAkP,KAAAkV,OAAApZ,MAAAkE,KAAAkV,OAAAsI,OACAA,MAAAue,MAAA,IACA,MACAjrC,KAAAkP,KAAAkV,OAAApZ,MAAAkE,KAAAkV,OAAAsI,MACA,CAEA,GAAAxd,KAAA2U,SAAA,CACA6I,MAAAue,MAAA,KACA,CAEAD,eAAAte,MAAAxd,KAAA,aACA,EACA67B,gBAAA,SAAAA,gBAAA77B,KAAAwd,OACA1sB,KAAAkP,KAAAyD,WAAA3H,MAAAkE,KAAAyD,WAAA+Z,MACA,EACA6b,iBAAA,SAAAA,iBAAAr5B,KAAAwd,OACA,IAAA6f,WAAA7f,MAAA4e,sBAAAp8B,KAAAyI,OAAA3M,MAEA,GAAAuhC,aAAA/B,mBAAA+B,WAAA7f,MAAA4e,sBAAA/C,iBAAA,CACA7b,MAAAue,MAAA,KACAjrC,KAAAkP,KAAAyI,OAAA3M,MAAAkE,KAAAyI,OAAA+U,OACAA,MAAAue,MAAA,IACA,MACAjrC,KAAAkP,KAAAyI,OAAA3M,MAAAkE,KAAAyI,OAAA+U,MACA,CAEA,GAAAxd,KAAA0L,SAAA,CACA,GAAA1L,KAAA2U,SAAA,CACA6I,MAAAue,MAAA,KACA,CAEAve,MAAAue,MAAA,KACAjrC,KAAAkP,KAAAmU,SAAArY,MAAAkE,KAAAmU,SAAAqJ,OACAA,MAAAue,MAAA,IACA,MACA,GAAA/7B,KAAA2U,SAAA,CACA6I,MAAAue,MAAA,KACA,MACAve,MAAAue,MAAA,IACA,CAEAjrC,KAAAkP,KAAAmU,SAAArY,MAAAkE,KAAAmU,SAAAqJ,MACA,CACA,EACAwd,aAAA,SAAAA,aAAAh7B,KAAAwd,OACAA,MAAAue,MAAA/7B,KAAAiW,KAAA3lB,KAAA,IAAA0P,KAAAmU,SAAA7jB,KAAA0P,KACA,EACAs5B,WAAA,SAAAA,WAAAt5B,KAAAwd,OACAA,MAAAue,MAAA/7B,KAAA1P,KAAA0P,KACA,EACA47B,kBAAA,SAAAA,kBAAA57B,KAAAwd,OACAA,MAAAue,MAAA,IAAA4B,OAAA39B,KAAA1P,MAAA0P,KACA,EACAu5B,QAAA,SAAAA,QAAAv5B,KAAAwd,OACA,GAAAxd,KAAAoP,KAAA,MACAoO,MAAAue,MAAA/7B,KAAAoP,IAAApP,KACA,SAAAA,KAAA2V,OAAA,MACA7kB,KAAAstC,cAAAp+B,KAAAwd,MACA,SAAAxd,KAAAqW,QAAA,MACAmH,MAAAue,MAAA/7B,KAAAqW,OAAA,IAAArW,KACA,MACAwd,MAAAue,MAAA7M,UAAAlvB,KAAApS,OAAAoS,KACA,CACA,EACAo+B,cAAA,SAAAA,cAAAp+B,KAAAwd,OACA,IAAA7H,MAAA3V,KAAA2V,MACA6H,MAAAue,MAAA,IAAA4B,OAAAhoB,MAAAC,QAAA,KAAA+nB,OAAAhoB,MAAArV,OAAAN,KACA,GAEAjV,QAAAqwC,oBACA,IAAAiD,aAAA,GACA,IAAAlD,cAAAC,UACArwC,QAAAowC,4BAEA,IAAAmD,MAAA,WACA,SAAAA,MAAAprC,SACA3G,gBAAAuE,KAAAwtC,OAEA,IAAAC,MAAArrC,SAAA,KAAAmrC,aAAAnrC,QACApC,KAAAyiC,OAAA,GAEA,GAAAgL,MAAAhL,QAAA,MACAziC,KAAAyiC,OAAAgL,MAAAhL,OACAziC,KAAAirC,MAAAjrC,KAAA0tC,aACA,MACA1tC,KAAAyiC,OAAA,EACA,CAEAziC,KAAA+L,UAAA0hC,MAAA1hC,WAAA,KAAA0hC,MAAA1hC,UAAAu+B,UACAtqC,KAAAsrC,sBAAAmC,MAAAnC,uBAAA,KAAAmC,MAAAnC,sBAAAf,uBACAvqC,KAAA0rC,OAAA+B,MAAA/B,QAAA,KAAA+B,MAAA/B,OAAA,KACA1rC,KAAA2rC,QAAA8B,MAAA9B,SAAA,KAAA8B,MAAA9B,QAAA,KACA3rC,KAAAmsC,YAAAsB,MAAAE,qBAAA,KAAAF,MAAAE,oBAAA,EACA3tC,KAAAosC,cAAAqB,MAAAzI,SAAAyI,MAAAzI,SAAA,MAEA,GAAAyI,MAAAG,WAAA,MACA5tC,KAAAirC,MAAAwC,MAAAhL,QAAA,KAAAziC,KAAA6tC,YAAA7tC,KAAA8tC,oBACA9tC,KAAA4tC,UAAAH,MAAAG,UACA5tC,KAAAoI,KAAA,EACApI,KAAAsI,OAAA,EACAtI,KAAA+tC,YAAA/tC,KAAA2rC,QAAA3+B,MAAA,MAAA7S,OAAA,EACA6F,KAAAguC,QAAA,CACAC,SAAA,KACAC,UAAAluC,KACAR,KAAAX,UACAqI,OAAAumC,MAAAG,UAAAO,MAAAV,MAAAG,UAAAQ,MAEA,CACA,CAEA5xC,aAAAgxC,MAAA,EACAjxC,IAAA,QACAO,MAAA,SAAAmuC,MAAAlxC,MACAiG,KAAAyiC,QAAA1oC,IACA,GACA,CACAwC,IAAA,gBACAO,MAAA,SAAA4wC,cAAA3zC,MACAiG,KAAAyiC,OAAAwI,MAAAlxC,KACA,GACA,CACAwC,IAAA,cACAO,MAAA,SAAA+wC,YAAA9zC,KAAAmV,MACAlP,KAAAyiC,QAAA1oC,KACAiG,KAAA2iC,IAAA5oC,KAAAmV,KACA,GACA,CACA3S,IAAA,sBACAO,MAAA,SAAAgxC,oBAAA/zC,KAAAmV,MACAlP,KAAAyiC,OAAAwI,MAAAlxC,MACAiG,KAAA2iC,IAAA5oC,KAAAmV,KACA,GACA,CACA3S,IAAA,MACAO,MAAA,SAAA6lC,IAAA5oC,KAAAmV,MACA,GAAAA,MAAA,MACA,IAAAlE,KAAAkE,KAAAlE,KAEA,GAAAA,KAAA,UAAAA,KAAA,UACAhL,KAAAsI,OAAA,EACAtI,KAAAoI,OACA,MACA,CAEA,GAAA8G,KAAAjE,KAAA,MACA,IAAA+iC,QAAAhuC,KAAAguC,QACAA,QAAAC,SAAA/+B,KAAAjE,IAAAxC,MACAulC,QAAAxuC,KAAA0P,KAAA1P,KACAQ,KAAA4tC,UAAAS,WAAAL,QACA,CAEA,GAAAhjC,KAAA,UAAAA,KAAA,UAAAA,KAAA,UAAAA,KAAA,iBAAAkE,KAAApS,QAAA,UACA,IAAA+sC,QAAA9vC,KAAAI,OACA,IAAAmO,OAAAtI,KAAAsI,OACAF,KAAApI,KAAAoI,KAEA,QAAA5O,EAAA,EAAAA,EAAAqwC,QAAArwC,IAAA,CACA,GAAAO,KAAAP,KAAA,MACA8O,OAAA,EACAF,MACA,MACAE,QACA,CACA,CAEAtI,KAAAsI,cACAtI,KAAAoI,UACA,MACA,CACA,CAEA,IAAAjO,OAAAJ,KAAAI,OACA,IAAAwxC,QAAA3rC,KAAA2rC,QAEA,GAAAxxC,OAAA,GACA,GAAA6F,KAAA+tC,YAAA,IAAApC,QAAAxxC,SAAA,EAAAJ,KAAAI,OAAA,KAAAwxC,QAAA5xC,KAAA2wC,SAAAiB,UAAA,CACA3rC,KAAAoI,MAAApI,KAAA+tC,YACA/tC,KAAAsI,OAAA,CACA,MACAtI,KAAAsI,QAAAnO,MACA,CACA,CACA,GACA,CACAoC,IAAA,WACAO,MAAA,SAAAwC,WACA,OAAAU,KAAAyiC,MACA,KAGA,OAAA+K,KACA,CArHA,GAuHA,SAAApD,SAAAl7B,KAAA9M,SACA,IAAAsqB,MAAA,IAAA8gB,MAAAprC,SACAsqB,MAAA3gB,UAAAmD,KAAAlE,MAAAkE,KAAAwd,OACA,OAAAA,MAAA+V,MACA,C,2CCrrCAroC,OAAAH,QAAAq0C,QAcA,SAAAA,QAAApkC,MACAA,WAAA,GACAlK,KAAAuuC,GAAArkC,KAAAwjB,KAAA,IACA1tB,KAAA2tB,IAAAzjB,KAAAyjB,KAAA,IACA3tB,KAAAwuC,OAAAtkC,KAAAskC,QAAA,EACAxuC,KAAAyuC,OAAAvkC,KAAAukC,OAAA,GAAAvkC,KAAAukC,QAAA,EAAAvkC,KAAAukC,OAAA,EACAzuC,KAAA0uC,SAAA,CACA,CASAJ,QAAA3xC,UAAAgyC,SAAA,WACA,IAAAJ,GAAAvuC,KAAAuuC,GAAA7V,KAAAkW,IAAA5uC,KAAAwuC,OAAAxuC,KAAA0uC,YACA,GAAA1uC,KAAAyuC,OAAA,CACA,IAAAI,KAAAnW,KAAAoW,SACA,IAAAC,UAAArW,KAAAsW,MAAAH,KAAA7uC,KAAAyuC,OAAAF,IACAA,IAAA7V,KAAAsW,MAAAH,KAAA,UAAAN,GAAAQ,UAAAR,GAAAQ,SACA,CACA,OAAArW,KAAAhL,IAAA6gB,GAAAvuC,KAAA2tB,KAAA,CACA,EAQA2gB,QAAA3xC,UAAAgvB,MAAA,WACA3rB,KAAA0uC,SAAA,CACA,EAQAJ,QAAA3xC,UAAAsyC,OAAA,SAAAvhB,KACA1tB,KAAAuuC,GAAA7gB,GACA,EAQA4gB,QAAA3xC,UAAAuyC,OAAA,SAAAvhB,KACA3tB,KAAA2tB,OACA,EAQA2gB,QAAA3xC,UAAAwyC,UAAA,SAAAV,QACAzuC,KAAAyuC,aACA,C,4CC5EA,SAAAW,OACA,aAEAn1C,QAAAo1C,OAAA,SAAAxX,aACA,IAAAC,MAAA,IAAAI,WAAAL,aACAr+B,EAAAwB,IAAA88B,MAAA39B,OAAAm1C,OAAA,GAEA,IAAA91C,EAAA,EAAAA,EAAAwB,IAAAxB,GAAA,GACA81C,QAAAF,MAAAtX,MAAAt+B,IAAA,GACA81C,QAAAF,OAAAtX,MAAAt+B,GAAA,MAAAs+B,MAAAt+B,EAAA,OACA81C,QAAAF,OAAAtX,MAAAt+B,EAAA,UAAAs+B,MAAAt+B,EAAA,OACA81C,QAAAF,MAAAtX,MAAAt+B,EAAA,MACA,CAEA,GAAAwB,IAAA,OACAs0C,cAAA/U,UAAA,EAAA+U,OAAAn1C,OAAA,MACA,SAAAa,IAAA,OACAs0C,cAAA/U,UAAA,EAAA+U,OAAAn1C,OAAA,OACA,CAEA,OAAAm1C,MACA,EAEAr1C,QAAAs1C,OAAA,SAAAD,QACA,IAAAE,aAAAF,OAAAn1C,OAAA,IACAa,IAAAs0C,OAAAn1C,OAAAX,EAAAQ,EAAA,EACAy1C,SAAAC,SAAAC,SAAAC,SAEA,GAAAN,cAAAn1C,OAAA,UACAq1C,eACA,GAAAF,cAAAn1C,OAAA,UACAq1C,cACA,CACA,CAEA,IAAA3X,YAAA,IAAAG,YAAAwX,cACA1X,MAAA,IAAAI,WAAAL,aAEA,IAAAr+B,EAAA,EAAAA,EAAAwB,IAAAxB,GAAA,GACAi2C,SAAAL,MAAAr3B,QAAAu3B,OAAA91C,IACAk2C,SAAAN,MAAAr3B,QAAAu3B,OAAA91C,EAAA,IACAm2C,SAAAP,MAAAr3B,QAAAu3B,OAAA91C,EAAA,IACAo2C,SAAAR,MAAAr3B,QAAAu3B,OAAA91C,EAAA,IAEAs+B,MAAA99B,KAAAy1C,UAAA,EAAAC,UAAA,EACA5X,MAAA99B,MAAA01C,SAAA,OAAAC,UAAA,EACA7X,MAAA99B,MAAA21C,SAAA,MAAAC,SAAA,EACA,CAEA,OAAA/X,WACA,CACA,EAnDA,CAmDA,mE,2CC1DA,aAEA59B,QAAA89B,sBACA99B,QAAA41C,wBACA51C,QAAA61C,4BAEA,IAAAC,OAAA,GACA,IAAAC,UAAA,GACA,IAAAC,WAAA/X,aAAA,YAAAA,WAAAh9B,MAEA,IAAAnB,KAAA,mEACA,QAAAP,EAAA,EAAAwB,IAAAjB,KAAAI,OAAAX,EAAAwB,MAAAxB,EAAA,CACAu2C,OAAAv2C,GAAAO,KAAAP,GACAw2C,UAAAj2C,KAAAwN,WAAA/N,KACA,CAIAw2C,UAAA,IAAAzoC,WAAA,OACAyoC,UAAA,IAAAzoC,WAAA,OAEA,SAAA2oC,QAAAC,KACA,IAAAn1C,IAAAm1C,IAAAh2C,OAEA,GAAAa,IAAA,KACA,UAAAlB,MAAA,iDACA,CAIA,IAAAs2C,SAAAD,IAAAp4B,QAAA,KACA,GAAAq4B,YAAA,EAAAA,SAAAp1C,IAEA,IAAAq1C,gBAAAD,WAAAp1C,IACA,EACA,EAAAo1C,SAAA,EAEA,OAAAA,SAAAC,gBACA,CAGA,SAAAtY,WAAAoY,KACA,IAAAG,KAAAJ,QAAAC,KACA,IAAAC,SAAAE,KAAA,GACA,IAAAD,gBAAAC,KAAA,GACA,OAAAF,SAAAC,iBAAA,IAAAA,eACA,CAEA,SAAAE,YAAAJ,IAAAC,SAAAC,iBACA,OAAAD,SAAAC,iBAAA,IAAAA,eACA,CAEA,SAAAR,YAAAM,KACA,IAAAK,IACA,IAAAF,KAAAJ,QAAAC,KACA,IAAAC,SAAAE,KAAA,GACA,IAAAD,gBAAAC,KAAA,GAEA,IAAAv1C,IAAA,IAAAk1C,IAAAM,YAAAJ,IAAAC,SAAAC,kBAEA,IAAAI,QAAA,EAGA,IAAAz1C,IAAAq1C,gBAAA,EACAD,SAAA,EACAA,SAEA,IAAA52C,EACA,IAAAA,EAAA,EAAAA,EAAAwB,IAAAxB,GAAA,GACAg3C,IACAR,UAAAG,IAAA5oC,WAAA/N,KAAA,GACAw2C,UAAAG,IAAA5oC,WAAA/N,EAAA,QACAw2C,UAAAG,IAAA5oC,WAAA/N,EAAA,OACAw2C,UAAAG,IAAA5oC,WAAA/N,EAAA,IACAuB,IAAA01C,WAAAD,KAAA,OACAz1C,IAAA01C,WAAAD,KAAA,MACAz1C,IAAA01C,WAAAD,IAAA,GACA,CAEA,GAAAH,kBAAA,GACAG,IACAR,UAAAG,IAAA5oC,WAAA/N,KAAA,EACAw2C,UAAAG,IAAA5oC,WAAA/N,EAAA,OACAuB,IAAA01C,WAAAD,IAAA,GACA,CAEA,GAAAH,kBAAA,GACAG,IACAR,UAAAG,IAAA5oC,WAAA/N,KAAA,GACAw2C,UAAAG,IAAA5oC,WAAA/N,EAAA,OACAw2C,UAAAG,IAAA5oC,WAAA/N,EAAA,OACAuB,IAAA01C,WAAAD,KAAA,MACAz1C,IAAA01C,WAAAD,IAAA,GACA,CAEA,OAAAz1C,GACA,CAEA,SAAA21C,gBAAApuC,KACA,OAAAytC,OAAAztC,KAAA,OACAytC,OAAAztC,KAAA,OACAytC,OAAAztC,KAAA,MACAytC,OAAAztC,IAAA,GACA,CAEA,SAAAquC,YAAAC,MAAAnoC,MAAApB,KACA,IAAAmpC,IACA,IAAA/N,OAAA,GACA,QAAAjpC,EAAAiP,MAAAjP,EAAA6N,IAAA7N,GAAA,GACAg3C,KACAI,MAAAp3C,IAAA,cACAo3C,MAAAp3C,EAAA,cACAo3C,MAAAp3C,EAAA,QACAipC,OAAAj4B,KAAAkmC,gBAAAF,KACA,CACA,OAAA/N,OAAAxE,KAAA,GACA,CAEA,SAAA6R,cAAAc,OACA,IAAAJ,IACA,IAAAx1C,IAAA41C,MAAAz2C,OACA,IAAA02C,WAAA71C,IAAA,EACA,IAAA81C,MAAA,GACA,IAAAC,eAAA,MAGA,QAAAv3C,EAAA,EAAAw3C,KAAAh2C,IAAA61C,WAAAr3C,EAAAw3C,KAAAx3C,GAAAu3C,eAAA,CACAD,MAAAtmC,KAAAmmC,YAAAC,MAAAp3C,IAAAu3C,eAAAC,UAAAx3C,EAAAu3C,gBACA,CAGA,GAAAF,aAAA,GACAL,IAAAI,MAAA51C,IAAA,GACA81C,MAAAtmC,KACAulC,OAAAS,KAAA,GACAT,OAAAS,KAAA,MACA,KAEA,SAAAK,aAAA,GACAL,KAAAI,MAAA51C,IAAA,OAAA41C,MAAA51C,IAAA,GACA81C,MAAAtmC,KACAulC,OAAAS,KAAA,IACAT,OAAAS,KAAA,MACAT,OAAAS,KAAA,MACA,IAEA,CAEA,OAAAM,MAAA7S,KAAA,GACA,C,2CCjJA,IAAAgT,iCAAA,YAAAA,mBACAC,oBAAA,YAAAA,yBACAC,gBAAA,YAAAA,qBACAC,iBAAA,YAAAA,eACA,MAMA,IAAAC,cAAA,WACA,IACA,IAAAx3C,EAAA,IAAAy3C,KAAA,QACA,OAAAz3C,EAAAo6B,OAAA,CACA,OAAA76B,GACA,YACA,CACA,CAPA,GAcA,IAAAm4C,4BAAAF,eAAA,WACA,IACA,IAAA9Y,EAAA,IAAA+Y,KAAA,KAAApZ,WAAA,SACA,OAAAK,EAAAtE,OAAA,CACA,OAAA76B,GACA,YACA,CACA,CAPA,GAaA,IAAAo4C,qBAAAP,aACAA,YAAAt0C,UAAA80C,QACAR,YAAAt0C,UAAA+0C,QAQA,SAAAC,oBAAAC,KACA,OAAAA,IAAAjP,KAAA,SAAAkP,OACA,GAAAA,MAAAzZ,kBAAAJ,YAAA,CACA,IAAA8Z,IAAAD,MAAAzZ,OAIA,GAAAyZ,MAAA9Z,aAAA+Z,IAAA/Z,WAAA,CACA,IAAA2F,KAAA,IAAAxF,WAAA2Z,MAAA9Z,YACA2F,KAAA38B,IAAA,IAAAm3B,WAAA4Z,IAAAD,MAAAE,WAAAF,MAAA9Z,aACA+Z,IAAApU,KAAAtF,MACA,CAEA,OAAA0Z,GACA,CAEA,OAAAD,KACA,GACA,CAEA,SAAAG,uBAAAJ,IAAAxvC,SACAA,iBAAA,GAEA,IAAA6vC,GAAA,IAAAhB,YACAU,oBAAAC,KAAA9P,SAAA,SAAAoQ,MACAD,GAAAR,OAAAS,KACA,IAEA,OAAA9vC,QAAA,KAAA6vC,GAAAP,QAAAtvC,QAAA4I,MAAAinC,GAAAP,SACA,CAEA,SAAAS,gBAAAP,IAAAxvC,SACA,WAAAkvC,KAAAK,oBAAAC,KAAAxvC,SAAA,GACA,CAEA,UAAAkvC,OAAA,aACAU,uBAAAr1C,UAAA20C,KAAA30C,UACAw1C,gBAAAx1C,UAAA20C,KAAA30C,SACA,CAEAvC,OAAAH,QAAA,WACA,GAAAo3C,cAAA,CACA,OAAAE,4BAAAD,KAAAa,eACA,SAAAX,qBAAA,CACA,OAAAQ,sBACA,MACA,OAAAnzC,SACA,CACA,CARA,E;;;;;;;ACnFA,aAEA,IAAAywC,OAAA31C,QAAA,aACA,IAAAy4C,QAAAz4C,QAAA,WAEAM,QAAA2+B,cACA3+B,QAAAo4C,sBACAp4C,QAAAq4C,kBAAA,GAEA,IAAAC,aAAA,WACAt4C,QAAAu4C,WAAAD,aAgBA3Z,OAAA6Z,oBAAAC,oBAEA,IAAA9Z,OAAA6Z,4BAAAroC,UAAA,oBACAA,QAAAwyB,QAAA,YACAxyB,QAAAwyB,MACA,4EACA,uEAEA,CAEA,SAAA8V,oBAEA,IACA,IAAA33C,IAAA,IAAAm9B,WAAA,GACAn9B,IAAAoC,UAAA,CAAAA,UAAA+6B,WAAAv7B,UAAAs8B,IAAA,uBACA,OAAAl+B,IAAAk+B,QAAA,EACA,OAAA7/B,GACA,YACA,CACA,CAEAiD,OAAAC,eAAAs8B,OAAAj8B,UAAA,UACAT,WAAA,KACAoT,IAAA,WACA,IAAAspB,OAAAD,SAAA34B,MAAA,OAAAnB,UACA,OAAAmB,KAAAo4B,MACA,IAGA/7B,OAAAC,eAAAs8B,OAAAj8B,UAAA,UACAT,WAAA,KACAoT,IAAA,WACA,IAAAspB,OAAAD,SAAA34B,MAAA,OAAAnB,UACA,OAAAmB,KAAA+xC,UACA,IAGA,SAAAY,aAAAx4C,QACA,GAAAA,OAAAo4C,aAAA,CACA,UAAAK,WAAA,cAAAz4C,OAAA,iCACA,CAEA,IAAA23C,IAAA,IAAA5Z,WAAA/9B,QACA23C,IAAA30C,UAAAy7B,OAAAj8B,UACA,OAAAm1C,GACA,CAYA,SAAAlZ,OAAA15B,IAAA2zC,iBAAA14C,QAEA,UAAA+E,MAAA,UACA,UAAA2zC,mBAAA,UACA,UAAAj3C,UACA,qEAEA,CACA,OAAAk3C,YAAA5zC,IACA,CACA,OAAArB,KAAAqB,IAAA2zC,iBAAA14C,OACA,CAGA,UAAAwD,SAAA,aAAAA,OAAAo1C,SAAA,MACAna,OAAAj7B,OAAAo1C,WAAAna,OAAA,CACAv8B,OAAAC,eAAAs8B,OAAAj7B,OAAAo1C,QAAA,CACAj2C,MAAA,KACAX,aAAA,KACAD,WAAA,MACAE,SAAA,OAEA,CAEAw8B,OAAAoa,SAAA,KAEA,SAAAn1C,KAAAf,MAAA+1C,iBAAA14C,QACA,UAAA2C,QAAA,UACA,OAAAm2C,WAAAn2C,MAAA+1C,iBACA,CAEA,GAAA7a,YAAAmB,OAAAr8B,OAAA,CACA,OAAAo2C,cAAAp2C,MACA,CAEA,GAAAA,OAAA,MACA,MAAAlB,UACA,8EACA,8CAAAkB,MAEA,CAEA,GAAAq2C,WAAAr2C,MAAAk7B,cACAl7B,OAAAq2C,WAAAr2C,MAAAs7B,OAAAJ,aAAA,CACA,OAAAob,gBAAAt2C,MAAA+1C,iBAAA14C,OACA,CAEA,UAAA2C,QAAA,UACA,UAAAlB,UACA,wEAEA,CAEA,IAAAy3C,QAAAv2C,MAAAu2C,SAAAv2C,MAAAu2C,UACA,GAAAA,SAAA,MAAAA,UAAAv2C,MAAA,CACA,OAAA87B,OAAA/6B,KAAAw1C,QAAAR,iBAAA14C,OACA,CAEA,IAAAo+B,EAAA+a,WAAAx2C,OACA,GAAAy7B,EAAA,OAAAA,EAEA,UAAA56B,SAAA,aAAAA,OAAAiB,aAAA,aACA9B,MAAAa,OAAAiB,eAAA,YACA,OAAAg6B,OAAA/6B,KACAf,MAAAa,OAAAiB,aAAA,UAAAi0C,iBAAA14C,OAEA,CAEA,UAAAyB,UACA,8EACA,8CAAAkB,MAEA,CAUA87B,OAAA/6B,KAAA,SAAAf,MAAA+1C,iBAAA14C,QACA,OAAA0D,KAAAf,MAAA+1C,iBAAA14C,OACA,EAIAy+B,OAAAj8B,UAAAQ,UAAA+6B,WAAAv7B,UACAi8B,OAAAz7B,UAAA+6B,WAEA,SAAAqb,WAAAtf,MACA,UAAAA,OAAA,UACA,UAAAr4B,UAAA,yCACA,SAAAq4B,KAAA,GACA,UAAA2e,WAAA,cAAA3e,KAAA,iCACA,CACA,CAEA,SAAAuf,MAAAvf,KAAA0J,KAAA8V,UACAF,WAAAtf,MACA,GAAAA,MAAA,GACA,OAAA0e,aAAA1e,KACA,CACA,GAAA0J,OAAA9+B,UAAA,CAIA,cAAA40C,WAAA,SACAd,aAAA1e,MAAA0J,UAAA8V,UACAd,aAAA1e,MAAA0J,UACA,CACA,OAAAgV,aAAA1e,KACA,CAMA2E,OAAA4a,MAAA,SAAAvf,KAAA0J,KAAA8V,UACA,OAAAD,MAAAvf,KAAA0J,KAAA8V,SACA,EAEA,SAAAX,YAAA7e,MACAsf,WAAAtf,MACA,OAAA0e,aAAA1e,KAAA,IAAAyf,QAAAzf,MAAA,EACA,CAKA2E,OAAAka,YAAA,SAAA7e,MACA,OAAA6e,YAAA7e,KACA,EAIA2E,OAAA+a,gBAAA,SAAA1f,MACA,OAAA6e,YAAA7e,KACA,EAEA,SAAAgf,WAAAzwC,OAAAixC,UACA,UAAAA,WAAA,UAAAA,WAAA,IACAA,SAAA,MACA,CAEA,IAAA7a,OAAAgb,WAAAH,UAAA,CACA,UAAA73C,UAAA,qBAAA63C,SACA,CAEA,IAAAt5C,OAAA49B,WAAAv1B,OAAAixC,UAAA,EACA,IAAA3B,IAAAa,aAAAx4C,QAEA,IAAAy/B,OAAAkY,IAAA7G,MAAAzoC,OAAAixC,UAEA,GAAA7Z,SAAAz/B,OAAA,CAIA23C,QAAAvyC,MAAA,EAAAq6B,OACA,CAEA,OAAAkY,GACA,CAEA,SAAAoB,cAAAxoC,OACA,IAAAvQ,OAAAuQ,MAAAvQ,OAAA,IAAAu5C,QAAAhpC,MAAAvQ,QAAA,EACA,IAAA23C,IAAAa,aAAAx4C,QACA,QAAAX,EAAA,EAAAA,EAAAW,OAAAX,GAAA,GACAs4C,IAAAt4C,GAAAkR,MAAAlR,GAAA,GACA,CACA,OAAAs4C,GACA,CAEA,SAAAsB,gBAAA1oC,MAAAqnC,WAAA53C,QACA,GAAA43C,WAAA,GAAArnC,MAAAqtB,WAAAga,WAAA,CACA,UAAAa,WAAA,uCACA,CAEA,GAAAloC,MAAAqtB,WAAAga,YAAA53C,QAAA,IACA,UAAAy4C,WAAA,uCACA,CAEA,IAAAd,IACA,GAAAC,aAAAlzC,WAAA1E,SAAA0E,UAAA,CACAizC,IAAA,IAAA5Z,WAAAxtB,MACA,SAAAvQ,SAAA0E,UAAA,CACAizC,IAAA,IAAA5Z,WAAAxtB,MAAAqnC,WACA,MACAD,IAAA,IAAA5Z,WAAAxtB,MAAAqnC,WAAA53C,OACA,CAGA23C,IAAA30C,UAAAy7B,OAAAj8B,UACA,OAAAm1C,GACA,CAEA,SAAAwB,WAAAz2C,KACA,GAAA+7B,OAAAD,SAAA97B,KAAA,CACA,IAAA7B,IAAA04C,QAAA72C,IAAA1C,QAAA,EACA,IAAA23C,IAAAa,aAAA33C,KAEA,GAAA82C,IAAA33C,SAAA,GACA,OAAA23C,GACA,CAEAj1C,IAAA6gC,KAAAoU,IAAA,IAAA92C,KACA,OAAA82C,GACA,CAEA,GAAAj1C,IAAA1C,SAAA0E,UAAA,CACA,UAAAhC,IAAA1C,SAAA,UAAA05C,YAAAh3C,IAAA1C,QAAA,CACA,OAAAw4C,aAAA,EACA,CACA,OAAAO,cAAAr2C,IACA,CAEA,GAAAA,IAAAmO,OAAA,UAAA9P,MAAAG,QAAAwB,IAAAotB,MAAA,CACA,OAAAipB,cAAAr2C,IAAAotB,KACA,CACA,CAEA,SAAAypB,QAAAv5C,QAGA,GAAAA,QAAAo4C,aAAA,CACA,UAAAK,WAAA,kDACA,WAAAL,aAAAjzC,SAAA,aACA,CACA,OAAAnF,OAAA,CACA,CAEA,SAAAk4C,WAAAl4C,QACA,IAAAA,eAAA,CACAA,OAAA,CACA,CACA,OAAAy+B,OAAA4a,OAAAr5C,OACA,CAEAy+B,OAAAD,SAAA,SAAAA,SAAAJ,GACA,OAAAA,GAAA,MAAAA,EAAAM,YAAA,MACAN,IAAAK,OAAAj8B,SACA,EAEAi8B,OAAAN,QAAA,SAAAA,QAAAz+B,EAAA0+B,GACA,GAAA4a,WAAAt5C,EAAAq+B,YAAAr+B,EAAA++B,OAAA/6B,KAAAhE,IAAA0O,OAAA1O,EAAAk+B,YACA,GAAAob,WAAA5a,EAAAL,YAAAK,EAAAK,OAAA/6B,KAAA06B,IAAAhwB,OAAAgwB,EAAAR,YACA,IAAAa,OAAAD,SAAA9+B,KAAA++B,OAAAD,SAAAJ,GAAA,CACA,UAAA38B,UACA,wEAEA,CAEA,GAAA/B,IAAA0+B,EAAA,SAEA,IAAAC,EAAA3+B,EAAAM,OACA,IAAAs+B,EAAAF,EAAAp+B,OAEA,QAAAX,EAAA,EAAAwB,IAAA09B,KAAAhL,IAAA8K,EAAAC,GAAAj/B,EAAAwB,MAAAxB,EAAA,CACA,GAAAK,EAAAL,KAAA++B,EAAA/+B,GAAA,CACAg/B,EAAA3+B,EAAAL,GACAi/B,EAAAF,EAAA/+B,GACA,KACA,CACA,CAEA,GAAAg/B,EAAAC,EAAA,SACA,GAAAA,EAAAD,EAAA,SACA,QACA,EAEAI,OAAAgb,WAAA,SAAAA,WAAAH,UACA,OAAA10C,OAAA00C,UAAAK,eACA,UACA,WACA,YACA,YACA,aACA,aACA,aACA,WACA,YACA,cACA,eACA,YACA,QACA,aAEA,EAEAlb,OAAAiU,OAAA,SAAAA,OAAA75B,KAAA7Y,QACA,IAAAe,MAAAG,QAAA2X,MAAA,CACA,UAAApX,UAAA,8CACA,CAEA,GAAAoX,KAAA7Y,SAAA,GACA,OAAAy+B,OAAA4a,MAAA,EACA,CAEA,IAAAh6C,EACA,GAAAW,SAAA0E,UAAA,CACA1E,OAAA,EACA,IAAAX,EAAA,EAAAA,EAAAwZ,KAAA7Y,SAAAX,EAAA,CACAW,QAAA6Y,KAAAxZ,GAAAW,MACA,CACA,CAEA,IAAAi+B,OAAAQ,OAAAka,YAAA34C,QACA,IAAA6G,IAAA,EACA,IAAAxH,EAAA,EAAAA,EAAAwZ,KAAA7Y,SAAAX,EAAA,CACA,IAAAs4C,IAAA9+B,KAAAxZ,GACA,GAAA25C,WAAArB,IAAA5Z,YAAA,CACA4Z,IAAAlZ,OAAA/6B,KAAAi0C,IACA,CACA,IAAAlZ,OAAAD,SAAAmZ,KAAA,CACA,UAAAl2C,UAAA,8CACA,CACAk2C,IAAApU,KAAAtF,OAAAp3B,KACAA,KAAA8wC,IAAA33C,MACA,CACA,OAAAi+B,MACA,EAEA,SAAAL,WAAAv1B,OAAAixC,UACA,GAAA7a,OAAAD,SAAAn2B,QAAA,CACA,OAAAA,OAAArI,MACA,CACA,GAAA69B,YAAAmB,OAAA32B,SAAA2wC,WAAA3wC,OAAAw1B,aAAA,CACA,OAAAx1B,OAAAu1B,UACA,CACA,UAAAv1B,SAAA,UACA,UAAA5G,UACA,6EACA,wBAAA4G,OAEA,CAEA,IAAAxH,IAAAwH,OAAArI,OACA,IAAA45C,UAAA/jC,UAAA7V,OAAA,GAAA6V,UAAA,UACA,IAAA+jC,WAAA/4C,MAAA,WAGA,IAAAg5C,YAAA,MACA,QACA,OAAAP,UACA,YACA,aACA,aACA,OAAAz4C,IACA,WACA,YACA,OAAAi5C,YAAAzxC,QAAArI,OACA,WACA,YACA,cACA,eACA,OAAAa,IAAA,EACA,UACA,OAAAA,MAAA,EACA,aACA,OAAAk5C,cAAA1xC,QAAArI,OACA,QACA,GAAA65C,YAAA,CACA,OAAAD,WAAA,EAAAE,YAAAzxC,QAAArI,MACA,CACAs5C,UAAA,GAAAA,UAAAK,cACAE,YAAA,KAEA,CACA,CACApb,OAAAb,sBAEA,SAAAoc,aAAAV,SAAAhrC,MAAApB,KACA,IAAA2sC,YAAA,MASA,GAAAvrC,QAAA5J,WAAA4J,MAAA,GACAA,MAAA,CACA,CAGA,GAAAA,MAAAzI,KAAA7F,OAAA,CACA,QACA,CAEA,GAAAkN,MAAAxI,WAAAwI,IAAArH,KAAA7F,OAAA,CACAkN,IAAArH,KAAA7F,MACA,CAEA,GAAAkN,KAAA,GACA,QACA,CAGAA,OAAA,EACAoB,SAAA,EAEA,GAAApB,KAAAoB,MAAA,CACA,QACA,CAEA,IAAAgrC,kBAAA,OAEA,YACA,OAAAA,UACA,UACA,OAAAW,SAAAp0C,KAAAyI,MAAApB,KAEA,WACA,YACA,OAAAgtC,UAAAr0C,KAAAyI,MAAApB,KAEA,YACA,OAAAitC,WAAAt0C,KAAAyI,MAAApB,KAEA,aACA,aACA,OAAAktC,YAAAv0C,KAAAyI,MAAApB,KAEA,aACA,OAAAmtC,YAAAx0C,KAAAyI,MAAApB,KAEA,WACA,YACA,cACA,eACA,OAAAotC,aAAAz0C,KAAAyI,MAAApB,KAEA,QACA,GAAA2sC,YAAA,UAAAp4C,UAAA,qBAAA63C,UACAA,mBAAA,IAAAK,cACAE,YAAA,KAEA,CACA,CAQApb,OAAAj8B,UAAAk8B,UAAA,KAEA,SAAA6b,KAAAnc,EAAAl/B,EAAAs7C,GACA,IAAAn7C,EAAA++B,EAAAl/B,GACAk/B,EAAAl/B,GAAAk/B,EAAAoc,GACApc,EAAAoc,GAAAn7C,CACA,CAEAo/B,OAAAj8B,UAAAi4C,OAAA,SAAAA,SACA,IAAA55C,IAAAgF,KAAA7F,OACA,GAAAa,IAAA,OACA,UAAA43C,WAAA,4CACA,CACA,QAAAp5C,EAAA,EAAAA,EAAAwB,IAAAxB,GAAA,GACAk7C,KAAA10C,KAAAxG,IAAA,EACA,CACA,OAAAwG,IACA,EAEA44B,OAAAj8B,UAAAk4C,OAAA,SAAAA,SACA,IAAA75C,IAAAgF,KAAA7F,OACA,GAAAa,IAAA,OACA,UAAA43C,WAAA,4CACA,CACA,QAAAp5C,EAAA,EAAAA,EAAAwB,IAAAxB,GAAA,GACAk7C,KAAA10C,KAAAxG,IAAA,GACAk7C,KAAA10C,KAAAxG,EAAA,EAAAA,EAAA,EACA,CACA,OAAAwG,IACA,EAEA44B,OAAAj8B,UAAAm4C,OAAA,SAAAA,SACA,IAAA95C,IAAAgF,KAAA7F,OACA,GAAAa,IAAA,OACA,UAAA43C,WAAA,4CACA,CACA,QAAAp5C,EAAA,EAAAA,EAAAwB,IAAAxB,GAAA,GACAk7C,KAAA10C,KAAAxG,IAAA,GACAk7C,KAAA10C,KAAAxG,EAAA,EAAAA,EAAA,GACAk7C,KAAA10C,KAAAxG,EAAA,EAAAA,EAAA,GACAk7C,KAAA10C,KAAAxG,EAAA,EAAAA,EAAA,EACA,CACA,OAAAwG,IACA,EAEA44B,OAAAj8B,UAAA2C,SAAA,SAAAA,WACA,IAAAnF,OAAA6F,KAAA7F,OACA,GAAAA,SAAA,WACA,GAAA6V,UAAA7V,SAAA,SAAAk6C,UAAAr0C,KAAA,EAAA7F,QACA,OAAAg6C,aAAAtV,MAAA7+B,KAAAgQ,UACA,EAEA4oB,OAAAj8B,UAAAo4C,eAAAnc,OAAAj8B,UAAA2C,SAEAs5B,OAAAj8B,UAAAq4C,OAAA,SAAAA,OAAAzc,GACA,IAAAK,OAAAD,SAAAJ,GAAA,UAAA38B,UAAA,6BACA,GAAAoE,OAAAu4B,EAAA,YACA,OAAAK,OAAAN,QAAAt4B,KAAAu4B,KAAA,CACA,EAEAK,OAAAj8B,UAAA+9B,QAAA,SAAAA,UACA,IAAA5F,IAAA,GACA,IAAAnH,IAAA1zB,QAAAq4C,kBACAxd,IAAA90B,KAAAV,SAAA,QAAAquB,KAAA3lB,QAAA,iBAAA6jC,OACA,GAAA7rC,KAAA7F,OAAAwzB,IAAAmH,KAAA,QACA,iBAAAA,IAAA,GACA,EAEA8D,OAAAj8B,UAAA27B,QAAA,SAAAA,QAAAv8B,OAAA0M,MAAApB,IAAA4tC,UAAAC,SACA,GAAA/B,WAAAp3C,OAAAm8B,YAAA,CACAn8B,OAAA68B,OAAA/6B,KAAA9B,cAAAwM,OAAAxM,OAAAg8B,WACA,CACA,IAAAa,OAAAD,SAAA58B,QAAA,CACA,UAAAH,UACA,mEACA,wBAAAG,OAEA,CAEA,GAAA0M,QAAA5J,UAAA,CACA4J,MAAA,CACA,CACA,GAAApB,MAAAxI,UAAA,CACAwI,IAAAtL,cAAA5B,OAAA,CACA,CACA,GAAA86C,YAAAp2C,UAAA,CACAo2C,UAAA,CACA,CACA,GAAAC,UAAAr2C,UAAA,CACAq2C,QAAAl1C,KAAA7F,MACA,CAEA,GAAAsO,MAAA,GAAApB,IAAAtL,OAAA5B,QAAA86C,UAAA,GAAAC,QAAAl1C,KAAA7F,OAAA,CACA,UAAAy4C,WAAA,qBACA,CAEA,GAAAqC,WAAAC,SAAAzsC,OAAApB,IAAA,CACA,QACA,CACA,GAAA4tC,WAAAC,QAAA,CACA,QACA,CACA,GAAAzsC,OAAApB,IAAA,CACA,QACA,CAEAoB,SAAA,EACApB,OAAA,EACA4tC,aAAA,EACAC,WAAA,EAEA,GAAAl1C,OAAAjE,OAAA,SAEA,IAAAy8B,EAAA0c,QAAAD,UACA,IAAAxc,EAAApxB,IAAAoB,MACA,IAAAzN,IAAA09B,KAAAhL,IAAA8K,EAAAC,GAEA,IAAA0c,SAAAn1C,KAAAT,MAAA01C,UAAAC,SACA,IAAAE,WAAAr5C,OAAAwD,MAAAkJ,MAAApB,KAEA,QAAA7N,EAAA,EAAAA,EAAAwB,MAAAxB,EAAA,CACA,GAAA27C,SAAA37C,KAAA47C,WAAA57C,GAAA,CACAg/B,EAAA2c,SAAA37C,GACAi/B,EAAA2c,WAAA57C,GACA,KACA,CACA,CAEA,GAAAg/B,EAAAC,EAAA,SACA,GAAAA,EAAAD,EAAA,SACA,QACA,EAWA,SAAA6c,qBAAAjd,OAAA5S,IAAAusB,WAAA0B,SAAA6B,KAEA,GAAAld,OAAAj+B,SAAA,WAGA,UAAA43C,aAAA,UACA0B,SAAA1B,WACAA,WAAA,CACA,SAAAA,WAAA,YACAA,WAAA,UACA,SAAAA,YAAA,YACAA,YAAA,UACA,CACAA,uBACA,GAAA8B,YAAA9B,YAAA,CAEAA,WAAAuD,IAAA,EAAAld,OAAAj+B,OAAA,CACA,CAGA,GAAA43C,WAAA,EAAAA,WAAA3Z,OAAAj+B,OAAA43C,WACA,GAAAA,YAAA3Z,OAAAj+B,OAAA,CACA,GAAAm7C,IAAA,cACAvD,WAAA3Z,OAAAj+B,OAAA,CACA,SAAA43C,WAAA,GACA,GAAAuD,IAAAvD,WAAA,OACA,QACA,CAGA,UAAAvsB,MAAA,UACAA,IAAAoT,OAAA/6B,KAAA2nB,IAAAiuB,SACA,CAGA,GAAA7a,OAAAD,SAAAnT,KAAA,CAEA,GAAAA,IAAArrB,SAAA,GACA,QACA,CACA,OAAAo7C,aAAAnd,OAAA5S,IAAAusB,WAAA0B,SAAA6B,IACA,gBAAA9vB,MAAA,UACAA,QAAA,IACA,UAAA0S,WAAAv7B,UAAAob,UAAA,YACA,GAAAu9B,IAAA,CACA,OAAApd,WAAAv7B,UAAAob,QAAA7d,KAAAk+B,OAAA5S,IAAAusB,WACA,MACA,OAAA7Z,WAAAv7B,UAAAmQ,YAAA5S,KAAAk+B,OAAA5S,IAAAusB,WACA,CACA,CACA,OAAAwD,aAAAnd,OAAA,CAAA5S,KAAAusB,WAAA0B,SAAA6B,IACA,CAEA,UAAA15C,UAAA,uCACA,CAEA,SAAA25C,aAAAx6C,IAAAyqB,IAAAusB,WAAA0B,SAAA6B,KACA,IAAAE,UAAA,EACA,IAAAC,UAAA16C,IAAAZ,OACA,IAAAu7C,UAAAlwB,IAAArrB,OAEA,GAAAs5C,WAAA50C,UAAA,CACA40C,SAAA10C,OAAA00C,UAAAK,cACA,GAAAL,WAAA,QAAAA,WAAA,SACAA,WAAA,WAAAA,WAAA,YACA,GAAA14C,IAAAZ,OAAA,GAAAqrB,IAAArrB,OAAA,GACA,QACA,CACAq7C,UAAA,EACAC,WAAA,EACAC,WAAA,EACA3D,YAAA,CACA,CACA,CAEA,SAAA4D,KAAA7D,IAAAt4C,GACA,GAAAg8C,YAAA,GACA,OAAA1D,IAAAt4C,EACA,MACA,OAAAs4C,IAAA8D,aAAAp8C,EAAAg8C,UACA,CACA,CAEA,IAAAh8C,EACA,GAAA87C,IAAA,CACA,IAAAO,YAAA,EACA,IAAAr8C,EAAAu4C,WAAAv4C,EAAAi8C,UAAAj8C,IAAA,CACA,GAAAm8C,KAAA56C,IAAAvB,KAAAm8C,KAAAnwB,IAAAqwB,cAAA,IAAAr8C,EAAAq8C,YAAA,CACA,GAAAA,cAAA,EAAAA,WAAAr8C,EACA,GAAAA,EAAAq8C,WAAA,IAAAH,UAAA,OAAAG,WAAAL,SACA,MACA,GAAAK,cAAA,EAAAr8C,KAAAq8C,WACAA,YAAA,CACA,CACA,CACA,MACA,GAAA9D,WAAA2D,UAAAD,UAAA1D,WAAA0D,UAAAC,UACA,IAAAl8C,EAAAu4C,WAAAv4C,GAAA,EAAAA,IAAA,CACA,IAAAs8C,MAAA,KACA,QAAAC,EAAA,EAAAA,EAAAL,UAAAK,IAAA,CACA,GAAAJ,KAAA56C,IAAAvB,EAAAu8C,KAAAJ,KAAAnwB,IAAAuwB,GAAA,CACAD,MAAA,MACA,KACA,CACA,CACA,GAAAA,MAAA,OAAAt8C,CACA,CACA,CAEA,QACA,CAEAo/B,OAAAj8B,UAAAq5C,SAAA,SAAAA,SAAAxwB,IAAAusB,WAAA0B,UACA,OAAAzzC,KAAA+X,QAAAyN,IAAAusB,WAAA0B,aAAA,CACA,EAEA7a,OAAAj8B,UAAAob,QAAA,SAAAA,QAAAyN,IAAAusB,WAAA0B,UACA,OAAA4B,qBAAAr1C,KAAAwlB,IAAAusB,WAAA0B,SAAA,KACA,EAEA7a,OAAAj8B,UAAAmQ,YAAA,SAAAA,YAAA0Y,IAAAusB,WAAA0B,UACA,OAAA4B,qBAAAr1C,KAAAwlB,IAAAusB,WAAA0B,SAAA,MACA,EAEA,SAAAwC,SAAAnE,IAAAtvC,OAAA+F,OAAApO,QACAoO,OAAAvJ,OAAAuJ,SAAA,EACA,IAAA2tC,UAAApE,IAAA33C,OAAAoO,OACA,IAAApO,OAAA,CACAA,OAAA+7C,SACA,MACA/7C,OAAA6E,OAAA7E,QACA,GAAAA,OAAA+7C,UAAA,CACA/7C,OAAA+7C,SACA,CACA,CAEA,IAAAC,OAAA3zC,OAAArI,OAEA,GAAAA,OAAAg8C,OAAA,GACAh8C,OAAAg8C,OAAA,CACA,CACA,QAAA38C,EAAA,EAAAA,EAAAW,SAAAX,EAAA,CACA,IAAA48C,OAAAzgB,SAAAnzB,OAAAw0B,OAAAx9B,EAAA,SACA,GAAAq6C,YAAAuC,QAAA,OAAA58C,EACAs4C,IAAAvpC,OAAA/O,GAAA48C,MACA,CACA,OAAA58C,CACA,CAEA,SAAA68C,UAAAvE,IAAAtvC,OAAA+F,OAAApO,QACA,OAAAm8C,WAAArC,YAAAzxC,OAAAsvC,IAAA33C,OAAAoO,QAAAupC,IAAAvpC,OAAApO,OACA,CAEA,SAAAo8C,WAAAzE,IAAAtvC,OAAA+F,OAAApO,QACA,OAAAm8C,WAAAE,aAAAh0C,QAAAsvC,IAAAvpC,OAAApO,OACA,CAEA,SAAAs8C,YAAA3E,IAAAtvC,OAAA+F,OAAApO,QACA,OAAAo8C,WAAAzE,IAAAtvC,OAAA+F,OAAApO,OACA,CAEA,SAAAu8C,YAAA5E,IAAAtvC,OAAA+F,OAAApO,QACA,OAAAm8C,WAAApC,cAAA1xC,QAAAsvC,IAAAvpC,OAAApO,OACA,CAEA,SAAAw8C,UAAA7E,IAAAtvC,OAAA+F,OAAApO,QACA,OAAAm8C,WAAAM,eAAAp0C,OAAAsvC,IAAA33C,OAAAoO,QAAAupC,IAAAvpC,OAAApO,OACA,CAEAy+B,OAAAj8B,UAAAsuC,MAAA,SAAAA,MAAAzoC,OAAA+F,OAAApO,OAAAs5C,UAEA,GAAAlrC,SAAA1J,UAAA,CACA40C,SAAA,OACAt5C,OAAA6F,KAAA7F,OACAoO,OAAA,CAEA,SAAApO,SAAA0E,kBAAA0J,SAAA,UACAkrC,SAAAlrC,OACApO,OAAA6F,KAAA7F,OACAoO,OAAA,CAEA,SAAAsuC,SAAAtuC,QAAA,CACAA,gBAAA,EACA,GAAAsuC,SAAA18C,QAAA,CACAA,gBAAA,EACA,GAAAs5C,WAAA50C,UAAA40C,SAAA,MACA,MACAA,SAAAt5C,OACAA,OAAA0E,SACA,CACA,MACA,UAAA/E,MACA,0EAEA,CAEA,IAAAo8C,UAAAl2C,KAAA7F,OAAAoO,OACA,GAAApO,SAAA0E,WAAA1E,OAAA+7C,UAAA/7C,OAAA+7C,UAEA,GAAA1zC,OAAArI,OAAA,IAAAA,OAAA,GAAAoO,OAAA,IAAAA,OAAAvI,KAAA7F,OAAA,CACA,UAAAy4C,WAAA,yCACA,CAEA,IAAAa,kBAAA,OAEA,IAAAO,YAAA,MACA,QACA,OAAAP,UACA,UACA,OAAAwC,SAAAj2C,KAAAwC,OAAA+F,OAAApO,QAEA,WACA,YACA,OAAAk8C,UAAAr2C,KAAAwC,OAAA+F,OAAApO,QAEA,YACA,OAAAo8C,WAAAv2C,KAAAwC,OAAA+F,OAAApO,QAEA,aACA,aACA,OAAAs8C,YAAAz2C,KAAAwC,OAAA+F,OAAApO,QAEA,aAEA,OAAAu8C,YAAA12C,KAAAwC,OAAA+F,OAAApO,QAEA,WACA,YACA,cACA,eACA,OAAAw8C,UAAA32C,KAAAwC,OAAA+F,OAAApO,QAEA,QACA,GAAA65C,YAAA,UAAAp4C,UAAA,qBAAA63C,UACAA,UAAA,GAAAA,UAAAK,cACAE,YAAA,KAEA,CACA,EAEApb,OAAAj8B,UAAAm6C,OAAA,SAAAA,SACA,OACA9rC,KAAA,SACAif,KAAA/uB,MAAAyB,UAAA4C,MAAArF,KAAA8F,KAAA+2C,MAAA/2C,KAAA,GAEA,EAEA,SAAAw0C,YAAA1C,IAAArpC,MAAApB,KACA,GAAAoB,QAAA,GAAApB,MAAAyqC,IAAA33C,OAAA,CACA,OAAAm1C,OAAAQ,cAAAgC,IACA,MACA,OAAAxC,OAAAQ,cAAAgC,IAAAvyC,MAAAkJ,MAAApB,KACA,CACA,CAEA,SAAAgtC,UAAAvC,IAAArpC,MAAApB,KACAA,IAAAqxB,KAAAhL,IAAAokB,IAAA33C,OAAAkN,KACA,IAAAvI,IAAA,GAEA,IAAAtF,EAAAiP,MACA,MAAAjP,EAAA6N,IAAA,CACA,IAAA2vC,UAAAlF,IAAAt4C,GACA,IAAAy9C,UAAA,KACA,IAAAC,iBAAAF,UAAA,MACAA,UAAA,MACAA,UAAA,MACA,EAEA,GAAAx9C,EAAA09C,kBAAA7vC,IAAA,CACA,IAAA8vC,WAAAC,UAAAC,WAAAC,cAEA,OAAAJ,kBACA,OACA,GAAAF,UAAA,KACAC,UAAAD,SACA,CACA,MACA,OACAG,WAAArF,IAAAt4C,EAAA,GACA,IAAA29C,WAAA,YACAG,eAAAN,UAAA,OAAAG,WAAA,GACA,GAAAG,cAAA,KACAL,UAAAK,aACA,CACA,CACA,MACA,OACAH,WAAArF,IAAAt4C,EAAA,GACA49C,UAAAtF,IAAAt4C,EAAA,GACA,IAAA29C,WAAA,aAAAC,UAAA,YACAE,eAAAN,UAAA,SAAAG,WAAA,OAAAC,UAAA,GACA,GAAAE,cAAA,OAAAA,cAAA,OAAAA,cAAA,QACAL,UAAAK,aACA,CACA,CACA,MACA,OACAH,WAAArF,IAAAt4C,EAAA,GACA49C,UAAAtF,IAAAt4C,EAAA,GACA69C,WAAAvF,IAAAt4C,EAAA,GACA,IAAA29C,WAAA,aAAAC,UAAA,aAAAC,WAAA,YACAC,eAAAN,UAAA,SAAAG,WAAA,SAAAC,UAAA,OAAAC,WAAA,GACA,GAAAC,cAAA,OAAAA,cAAA,SACAL,UAAAK,aACA,CACA,EAEA,CAEA,GAAAL,YAAA,MAGAA,UAAA,MACAC,iBAAA,CACA,SAAAD,UAAA,OAEAA,WAAA,MACAn4C,IAAA0L,KAAAysC,YAAA,eACAA,UAAA,MAAAA,UAAA,IACA,CAEAn4C,IAAA0L,KAAAysC,WACAz9C,GAAA09C,gBACA,CAEA,OAAAK,sBAAAz4C,IACA,CAKA,IAAA04C,qBAAA,KAEA,SAAAD,sBAAAE,YACA,IAAAz8C,IAAAy8C,WAAAt9C,OACA,GAAAa,KAAAw8C,qBAAA,CACA,OAAAz4C,OAAAoC,aAAA09B,MAAA9/B,OAAA04C,WACA,CAGA,IAAA34C,IAAA,GACA,IAAAtF,EAAA,EACA,MAAAA,EAAAwB,IAAA,CACA8D,KAAAC,OAAAoC,aAAA09B,MACA9/B,OACA04C,WAAAl4C,MAAA/F,KAAAg+C,sBAEA,CACA,OAAA14C,GACA,CAEA,SAAAw1C,WAAAxC,IAAArpC,MAAApB,KACA,IAAA26B,IAAA,GACA36B,IAAAqxB,KAAAhL,IAAAokB,IAAA33C,OAAAkN,KAEA,QAAA7N,EAAAiP,MAAAjP,EAAA6N,MAAA7N,EAAA,CACAwoC,KAAAjjC,OAAAoC,aAAA2wC,IAAAt4C,GAAA,IACA,CACA,OAAAwoC,GACA,CAEA,SAAAuS,YAAAzC,IAAArpC,MAAApB,KACA,IAAA26B,IAAA,GACA36B,IAAAqxB,KAAAhL,IAAAokB,IAAA33C,OAAAkN,KAEA,QAAA7N,EAAAiP,MAAAjP,EAAA6N,MAAA7N,EAAA,CACAwoC,KAAAjjC,OAAAoC,aAAA2wC,IAAAt4C,GACA,CACA,OAAAwoC,GACA,CAEA,SAAAoS,SAAAtC,IAAArpC,MAAApB,KACA,IAAArM,IAAA82C,IAAA33C,OAEA,IAAAsO,aAAA,EAAAA,MAAA,EACA,IAAApB,SAAA,GAAAA,IAAArM,IAAAqM,IAAArM,IAEA,IAAAsmB,IAAA,GACA,QAAA9nB,EAAAiP,MAAAjP,EAAA6N,MAAA7N,EAAA,CACA8nB,KAAAo2B,MAAA5F,IAAAt4C,GACA,CACA,OAAA8nB,GACA,CAEA,SAAAmzB,aAAA3C,IAAArpC,MAAApB,KACA,IAAAywB,MAAAga,IAAAvyC,MAAAkJ,MAAApB,KACA,IAAAvI,IAAA,GACA,QAAAtF,EAAA,EAAAA,EAAAs+B,MAAA39B,OAAAX,GAAA,GACAsF,KAAAC,OAAAoC,aAAA22B,MAAAt+B,GAAAs+B,MAAAt+B,EAAA,OACA,CACA,OAAAsF,GACA,CAEA85B,OAAAj8B,UAAA4C,MAAA,SAAAA,MAAAkJ,MAAApB,KACA,IAAArM,IAAAgF,KAAA7F,OACAsO,cACApB,UAAAxI,UAAA7D,MAAAqM,IAEA,GAAAoB,MAAA,GACAA,OAAAzN,IACA,GAAAyN,MAAA,EAAAA,MAAA,CACA,SAAAA,MAAAzN,IAAA,CACAyN,MAAAzN,GACA,CAEA,GAAAqM,IAAA,GACAA,KAAArM,IACA,GAAAqM,IAAA,EAAAA,IAAA,CACA,SAAAA,IAAArM,IAAA,CACAqM,IAAArM,GACA,CAEA,GAAAqM,IAAAoB,MAAApB,IAAAoB,MAEA,IAAAkvC,OAAA33C,KAAA43C,SAAAnvC,MAAApB,KAEAswC,OAAAx6C,UAAAy7B,OAAAj8B,UACA,OAAAg7C,MACA,EAKA,SAAAE,YAAAtvC,OAAAuvC,IAAA39C,QACA,GAAAoO,OAAA,OAAAA,OAAA,YAAAqqC,WAAA,sBACA,GAAArqC,OAAAuvC,IAAA39C,OAAA,UAAAy4C,WAAA,wCACA,CAEAha,OAAAj8B,UAAAo7C,WAAA,SAAAA,WAAAxvC,OAAAwvB,WAAAigB,UACAzvC,gBAAA,EACAwvB,wBAAA,EACA,IAAAigB,SAAAH,YAAAtvC,OAAAwvB,WAAA/3B,KAAA7F,QAEA,IAAAqrB,IAAAxlB,KAAAuI,QACA,IAAA0vC,IAAA,EACA,IAAAz+C,EAAA,EACA,QAAAA,EAAAu+B,aAAAkgB,KAAA,MACAzyB,KAAAxlB,KAAAuI,OAAA/O,GAAAy+C,GACA,CAEA,OAAAzyB,GACA,EAEAoT,OAAAj8B,UAAAu7C,WAAA,SAAAA,WAAA3vC,OAAAwvB,WAAAigB,UACAzvC,gBAAA,EACAwvB,wBAAA,EACA,IAAAigB,SAAA,CACAH,YAAAtvC,OAAAwvB,WAAA/3B,KAAA7F,OACA,CAEA,IAAAqrB,IAAAxlB,KAAAuI,SAAAwvB,YACA,IAAAkgB,IAAA,EACA,MAAAlgB,WAAA,IAAAkgB,KAAA,MACAzyB,KAAAxlB,KAAAuI,SAAAwvB,YAAAkgB,GACA,CAEA,OAAAzyB,GACA,EAEAoT,OAAAj8B,UAAAihC,UAAA,SAAAA,UAAAr1B,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QACA,OAAA6F,KAAAuI,OACA,EAEAqwB,OAAAj8B,UAAAw7C,aAAA,SAAAA,aAAA5vC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QACA,OAAA6F,KAAAuI,QAAAvI,KAAAuI,OAAA,KACA,EAEAqwB,OAAAj8B,UAAAi5C,aAAA,SAAAA,aAAArtC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QACA,OAAA6F,KAAAuI,SAAA,EAAAvI,KAAAuI,OAAA,EACA,EAEAqwB,OAAAj8B,UAAAy7C,aAAA,SAAAA,aAAA7vC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QAEA,OAAA6F,KAAAuI,QACAvI,KAAAuI,OAAA,MACAvI,KAAAuI,OAAA,QACAvI,KAAAuI,OAAA,WACA,EAEAqwB,OAAAj8B,UAAA07C,aAAA,SAAAA,aAAA9vC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QAEA,OAAA6F,KAAAuI,QAAA,UACAvI,KAAAuI,OAAA,OACAvI,KAAAuI,OAAA,MACAvI,KAAAuI,OAAA,GACA,EAEAqwB,OAAAj8B,UAAA27C,UAAA,SAAAA,UAAA/vC,OAAAwvB,WAAAigB,UACAzvC,gBAAA,EACAwvB,wBAAA,EACA,IAAAigB,SAAAH,YAAAtvC,OAAAwvB,WAAA/3B,KAAA7F,QAEA,IAAAqrB,IAAAxlB,KAAAuI,QACA,IAAA0vC,IAAA,EACA,IAAAz+C,EAAA,EACA,QAAAA,EAAAu+B,aAAAkgB,KAAA,MACAzyB,KAAAxlB,KAAAuI,OAAA/O,GAAAy+C,GACA,CACAA,KAAA,IAEA,GAAAzyB,KAAAyyB,IAAAzyB,KAAAkT,KAAAkW,IAAA,IAAA7W,YAEA,OAAAvS,GACA,EAEAoT,OAAAj8B,UAAA47C,UAAA,SAAAA,UAAAhwC,OAAAwvB,WAAAigB,UACAzvC,gBAAA,EACAwvB,wBAAA,EACA,IAAAigB,SAAAH,YAAAtvC,OAAAwvB,WAAA/3B,KAAA7F,QAEA,IAAAX,EAAAu+B,WACA,IAAAkgB,IAAA,EACA,IAAAzyB,IAAAxlB,KAAAuI,SAAA/O,GACA,MAAAA,EAAA,IAAAy+C,KAAA,MACAzyB,KAAAxlB,KAAAuI,SAAA/O,GAAAy+C,GACA,CACAA,KAAA,IAEA,GAAAzyB,KAAAyyB,IAAAzyB,KAAAkT,KAAAkW,IAAA,IAAA7W,YAEA,OAAAvS,GACA,EAEAoT,OAAAj8B,UAAA67C,SAAA,SAAAA,SAAAjwC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QACA,KAAA6F,KAAAuI,QAAA,YAAAvI,KAAAuI,QACA,WAAAvI,KAAAuI,QAAA,KACA,EAEAqwB,OAAAj8B,UAAA87C,YAAA,SAAAA,YAAAlwC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QACA,IAAAqrB,IAAAxlB,KAAAuI,QAAAvI,KAAAuI,OAAA,MACA,OAAAid,IAAA,MAAAA,IAAA,WAAAA,GACA,EAEAoT,OAAAj8B,UAAA+7C,YAAA,SAAAA,YAAAnwC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QACA,IAAAqrB,IAAAxlB,KAAAuI,OAAA,GAAAvI,KAAAuI,SAAA,EACA,OAAAid,IAAA,MAAAA,IAAA,WAAAA,GACA,EAEAoT,OAAAj8B,UAAAg8C,YAAA,SAAAA,YAAApwC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QAEA,OAAA6F,KAAAuI,QACAvI,KAAAuI,OAAA,MACAvI,KAAAuI,OAAA,OACAvI,KAAAuI,OAAA,MACA,EAEAqwB,OAAAj8B,UAAAi8C,YAAA,SAAAA,YAAArwC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QAEA,OAAA6F,KAAAuI,SAAA,GACAvI,KAAAuI,OAAA,OACAvI,KAAAuI,OAAA,MACAvI,KAAAuI,OAAA,EACA,EAEAqwB,OAAAj8B,UAAAk8C,YAAA,SAAAA,YAAAtwC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QACA,OAAAi4C,QAAAuD,KAAA31C,KAAAuI,OAAA,UACA,EAEAqwB,OAAAj8B,UAAAm8C,YAAA,SAAAA,YAAAvwC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QACA,OAAAi4C,QAAAuD,KAAA31C,KAAAuI,OAAA,WACA,EAEAqwB,OAAAj8B,UAAAo8C,aAAA,SAAAA,aAAAxwC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QACA,OAAAi4C,QAAAuD,KAAA31C,KAAAuI,OAAA,UACA,EAEAqwB,OAAAj8B,UAAAq8C,aAAA,SAAAA,aAAAzwC,OAAAyvC,UACAzvC,gBAAA,EACA,IAAAyvC,SAAAH,YAAAtvC,OAAA,EAAAvI,KAAA7F,QACA,OAAAi4C,QAAAuD,KAAA31C,KAAAuI,OAAA,WACA,EAEA,SAAA0wC,SAAAnH,IAAAh1C,MAAAyL,OAAAuvC,IAAAnqB,IAAAD,KACA,IAAAkL,OAAAD,SAAAmZ,KAAA,UAAAl2C,UAAA,+CACA,GAAAkB,MAAA6wB,KAAA7wB,MAAA4wB,IAAA,UAAAklB,WAAA,qCACA,GAAArqC,OAAAuvC,IAAAhG,IAAA33C,OAAA,UAAAy4C,WAAA,qBACA,CAEAha,OAAAj8B,UAAAu8C,YAAA,SAAAA,YAAAp8C,MAAAyL,OAAAwvB,WAAAigB,UACAl7C,aACAyL,gBAAA,EACAwvB,wBAAA,EACA,IAAAigB,SAAA,CACA,IAAAmB,SAAAzgB,KAAAkW,IAAA,IAAA7W,YAAA,EACAkhB,SAAAj5C,KAAAlD,MAAAyL,OAAAwvB,WAAAohB,SAAA,EACA,CAEA,IAAAlB,IAAA,EACA,IAAAz+C,EAAA,EACAwG,KAAAuI,QAAAzL,MAAA,IACA,QAAAtD,EAAAu+B,aAAAkgB,KAAA,MACAj4C,KAAAuI,OAAA/O,GAAAsD,MAAAm7C,IAAA,GACA,CAEA,OAAA1vC,OAAAwvB,UACA,EAEAa,OAAAj8B,UAAAy8C,YAAA,SAAAA,YAAAt8C,MAAAyL,OAAAwvB,WAAAigB,UACAl7C,aACAyL,gBAAA,EACAwvB,wBAAA,EACA,IAAAigB,SAAA,CACA,IAAAmB,SAAAzgB,KAAAkW,IAAA,IAAA7W,YAAA,EACAkhB,SAAAj5C,KAAAlD,MAAAyL,OAAAwvB,WAAAohB,SAAA,EACA,CAEA,IAAA3/C,EAAAu+B,WAAA,EACA,IAAAkgB,IAAA,EACAj4C,KAAAuI,OAAA/O,GAAAsD,MAAA,IACA,QAAAtD,GAAA,IAAAy+C,KAAA,MACAj4C,KAAAuI,OAAA/O,GAAAsD,MAAAm7C,IAAA,GACA,CAEA,OAAA1vC,OAAAwvB,UACA,EAEAa,OAAAj8B,UAAA08C,WAAA,SAAAA,WAAAv8C,MAAAyL,OAAAyvC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAAiB,SAAAj5C,KAAAlD,MAAAyL,OAAA,SACAvI,KAAAuI,QAAAzL,MAAA,IACA,OAAAyL,OAAA,CACA,EAEAqwB,OAAAj8B,UAAA28C,cAAA,SAAAA,cAAAx8C,MAAAyL,OAAAyvC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAAiB,SAAAj5C,KAAAlD,MAAAyL,OAAA,WACAvI,KAAAuI,QAAAzL,MAAA,IACAkD,KAAAuI,OAAA,GAAAzL,QAAA,EACA,OAAAyL,OAAA,CACA,EAEAqwB,OAAAj8B,UAAA48C,cAAA,SAAAA,cAAAz8C,MAAAyL,OAAAyvC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAAiB,SAAAj5C,KAAAlD,MAAAyL,OAAA,WACAvI,KAAAuI,QAAAzL,QAAA,EACAkD,KAAAuI,OAAA,GAAAzL,MAAA,IACA,OAAAyL,OAAA,CACA,EAEAqwB,OAAAj8B,UAAA68C,cAAA,SAAAA,cAAA18C,MAAAyL,OAAAyvC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAAiB,SAAAj5C,KAAAlD,MAAAyL,OAAA,gBACAvI,KAAAuI,OAAA,GAAAzL,QAAA,GACAkD,KAAAuI,OAAA,GAAAzL,QAAA,GACAkD,KAAAuI,OAAA,GAAAzL,QAAA,EACAkD,KAAAuI,QAAAzL,MAAA,IACA,OAAAyL,OAAA,CACA,EAEAqwB,OAAAj8B,UAAA88C,cAAA,SAAAA,cAAA38C,MAAAyL,OAAAyvC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAAiB,SAAAj5C,KAAAlD,MAAAyL,OAAA,gBACAvI,KAAAuI,QAAAzL,QAAA,GACAkD,KAAAuI,OAAA,GAAAzL,QAAA,GACAkD,KAAAuI,OAAA,GAAAzL,QAAA,EACAkD,KAAAuI,OAAA,GAAAzL,MAAA,IACA,OAAAyL,OAAA,CACA,EAEAqwB,OAAAj8B,UAAA+8C,WAAA,SAAAA,WAAA58C,MAAAyL,OAAAwvB,WAAAigB,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAA,CACA,IAAA2B,MAAAjhB,KAAAkW,IAAA,IAAA7W,WAAA,GAEAkhB,SAAAj5C,KAAAlD,MAAAyL,OAAAwvB,WAAA4hB,MAAA,GAAAA,MACA,CAEA,IAAAngD,EAAA,EACA,IAAAy+C,IAAA,EACA,IAAA2B,IAAA,EACA55C,KAAAuI,QAAAzL,MAAA,IACA,QAAAtD,EAAAu+B,aAAAkgB,KAAA,MACA,GAAAn7C,MAAA,GAAA88C,MAAA,GAAA55C,KAAAuI,OAAA/O,EAAA,QACAogD,IAAA,CACA,CACA55C,KAAAuI,OAAA/O,IAAAsD,MAAAm7C,KAAA,GAAA2B,IAAA,GACA,CAEA,OAAArxC,OAAAwvB,UACA,EAEAa,OAAAj8B,UAAAk9C,WAAA,SAAAA,WAAA/8C,MAAAyL,OAAAwvB,WAAAigB,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAA,CACA,IAAA2B,MAAAjhB,KAAAkW,IAAA,IAAA7W,WAAA,GAEAkhB,SAAAj5C,KAAAlD,MAAAyL,OAAAwvB,WAAA4hB,MAAA,GAAAA,MACA,CAEA,IAAAngD,EAAAu+B,WAAA,EACA,IAAAkgB,IAAA,EACA,IAAA2B,IAAA,EACA55C,KAAAuI,OAAA/O,GAAAsD,MAAA,IACA,QAAAtD,GAAA,IAAAy+C,KAAA,MACA,GAAAn7C,MAAA,GAAA88C,MAAA,GAAA55C,KAAAuI,OAAA/O,EAAA,QACAogD,IAAA,CACA,CACA55C,KAAAuI,OAAA/O,IAAAsD,MAAAm7C,KAAA,GAAA2B,IAAA,GACA,CAEA,OAAArxC,OAAAwvB,UACA,EAEAa,OAAAj8B,UAAAm9C,UAAA,SAAAA,UAAAh9C,MAAAyL,OAAAyvC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAAiB,SAAAj5C,KAAAlD,MAAAyL,OAAA,YACA,GAAAzL,MAAA,EAAAA,MAAA,IAAAA,MAAA,EACAkD,KAAAuI,QAAAzL,MAAA,IACA,OAAAyL,OAAA,CACA,EAEAqwB,OAAAj8B,UAAAo9C,aAAA,SAAAA,aAAAj9C,MAAAyL,OAAAyvC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAAiB,SAAAj5C,KAAAlD,MAAAyL,OAAA,gBACAvI,KAAAuI,QAAAzL,MAAA,IACAkD,KAAAuI,OAAA,GAAAzL,QAAA,EACA,OAAAyL,OAAA,CACA,EAEAqwB,OAAAj8B,UAAAq9C,aAAA,SAAAA,aAAAl9C,MAAAyL,OAAAyvC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAAiB,SAAAj5C,KAAAlD,MAAAyL,OAAA,gBACAvI,KAAAuI,QAAAzL,QAAA,EACAkD,KAAAuI,OAAA,GAAAzL,MAAA,IACA,OAAAyL,OAAA,CACA,EAEAqwB,OAAAj8B,UAAAs9C,aAAA,SAAAA,aAAAn9C,MAAAyL,OAAAyvC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAAiB,SAAAj5C,KAAAlD,MAAAyL,OAAA,0BACAvI,KAAAuI,QAAAzL,MAAA,IACAkD,KAAAuI,OAAA,GAAAzL,QAAA,EACAkD,KAAAuI,OAAA,GAAAzL,QAAA,GACAkD,KAAAuI,OAAA,GAAAzL,QAAA,GACA,OAAAyL,OAAA,CACA,EAEAqwB,OAAAj8B,UAAAu9C,aAAA,SAAAA,aAAAp9C,MAAAyL,OAAAyvC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAAiB,SAAAj5C,KAAAlD,MAAAyL,OAAA,0BACA,GAAAzL,MAAA,EAAAA,MAAA,WAAAA,MAAA,EACAkD,KAAAuI,QAAAzL,QAAA,GACAkD,KAAAuI,OAAA,GAAAzL,QAAA,GACAkD,KAAAuI,OAAA,GAAAzL,QAAA,EACAkD,KAAAuI,OAAA,GAAAzL,MAAA,IACA,OAAAyL,OAAA,CACA,EAEA,SAAA4xC,aAAArI,IAAAh1C,MAAAyL,OAAAuvC,IAAAnqB,IAAAD,KACA,GAAAnlB,OAAAuvC,IAAAhG,IAAA33C,OAAA,UAAAy4C,WAAA,sBACA,GAAArqC,OAAA,YAAAqqC,WAAA,qBACA,CAEA,SAAAwH,WAAAtI,IAAAh1C,MAAAyL,OAAA8xC,aAAArC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAA,CACAmC,aAAArI,IAAAh1C,MAAAyL,OAAA,6CACA,CACA6pC,QAAAnH,MAAA6G,IAAAh1C,MAAAyL,OAAA8xC,aAAA,MACA,OAAA9xC,OAAA,CACA,CAEAqwB,OAAAj8B,UAAA29C,aAAA,SAAAA,aAAAx9C,MAAAyL,OAAAyvC,UACA,OAAAoC,WAAAp6C,KAAAlD,MAAAyL,OAAA,KAAAyvC,SACA,EAEApf,OAAAj8B,UAAA49C,aAAA,SAAAA,aAAAz9C,MAAAyL,OAAAyvC,UACA,OAAAoC,WAAAp6C,KAAAlD,MAAAyL,OAAA,MAAAyvC,SACA,EAEA,SAAAwC,YAAA1I,IAAAh1C,MAAAyL,OAAA8xC,aAAArC,UACAl7C,aACAyL,gBAAA,EACA,IAAAyvC,SAAA,CACAmC,aAAArI,IAAAh1C,MAAAyL,OAAA,+CACA,CACA6pC,QAAAnH,MAAA6G,IAAAh1C,MAAAyL,OAAA8xC,aAAA,MACA,OAAA9xC,OAAA,CACA,CAEAqwB,OAAAj8B,UAAA89C,cAAA,SAAAA,cAAA39C,MAAAyL,OAAAyvC,UACA,OAAAwC,YAAAx6C,KAAAlD,MAAAyL,OAAA,KAAAyvC,SACA,EAEApf,OAAAj8B,UAAA+9C,cAAA,SAAAA,cAAA59C,MAAAyL,OAAAyvC,UACA,OAAAwC,YAAAx6C,KAAAlD,MAAAyL,OAAA,MAAAyvC,SACA,EAGApf,OAAAj8B,UAAA+gC,KAAA,SAAAA,KAAA3hC,OAAA4+C,YAAAlyC,MAAApB,KACA,IAAAuxB,OAAAD,SAAA58B,QAAA,UAAAH,UAAA,+BACA,IAAA6M,YAAA,EACA,IAAApB,WAAA,EAAAA,IAAArH,KAAA7F,OACA,GAAAwgD,aAAA5+C,OAAA5B,OAAAwgD,YAAA5+C,OAAA5B,OACA,IAAAwgD,wBAAA,EACA,GAAAtzC,IAAA,GAAAA,IAAAoB,MAAApB,IAAAoB,MAGA,GAAApB,MAAAoB,MAAA,SACA,GAAA1M,OAAA5B,SAAA,GAAA6F,KAAA7F,SAAA,WAGA,GAAAwgD,YAAA,GACA,UAAA/H,WAAA,4BACA,CACA,GAAAnqC,MAAA,GAAAA,OAAAzI,KAAA7F,OAAA,UAAAy4C,WAAA,sBACA,GAAAvrC,IAAA,YAAAurC,WAAA,2BAGA,GAAAvrC,IAAArH,KAAA7F,OAAAkN,IAAArH,KAAA7F,OACA,GAAA4B,OAAA5B,OAAAwgD,YAAAtzC,IAAAoB,MAAA,CACApB,IAAAtL,OAAA5B,OAAAwgD,YAAAlyC,KACA,CAEA,IAAAzN,IAAAqM,IAAAoB,MAEA,GAAAzI,OAAAjE,eAAAm8B,WAAAv7B,UAAAi+C,aAAA,YAEA56C,KAAA46C,WAAAD,YAAAlyC,MAAApB,IACA,SAAArH,OAAAjE,QAAA0M,MAAAkyC,yBAAAtzC,IAAA,CAEA,QAAA7N,EAAAwB,IAAA,EAAAxB,GAAA,IAAAA,EAAA,CACAuC,OAAAvC,EAAAmhD,aAAA36C,KAAAxG,EAAAiP,MACA,CACA,MACAyvB,WAAAv7B,UAAAoE,IAAA7G,KACA6B,OACAiE,KAAA43C,SAAAnvC,MAAApB,KACAszC,YAEA,CAEA,OAAA3/C,GACA,EAMA49B,OAAAj8B,UAAAghC,KAAA,SAAAA,KAAAnY,IAAA/c,MAAApB,IAAAosC,UAEA,UAAAjuB,MAAA,UACA,UAAA/c,QAAA,UACAgrC,SAAAhrC,MACAA,MAAA,EACApB,IAAArH,KAAA7F,MACA,gBAAAkN,MAAA,UACAosC,SAAApsC,IACAA,IAAArH,KAAA7F,MACA,CACA,GAAAs5C,WAAA50C,kBAAA40C,WAAA,UACA,UAAA73C,UAAA,4BACA,CACA,UAAA63C,WAAA,WAAA7a,OAAAgb,WAAAH,UAAA,CACA,UAAA73C,UAAA,qBAAA63C,SACA,CACA,GAAAjuB,IAAArrB,SAAA,GACA,IAAAJ,KAAAyrB,IAAAje,WAAA,GACA,GAAAksC,WAAA,QAAA15C,KAAA,KACA05C,WAAA,UAEAjuB,IAAAzrB,IACA,CACA,CACA,gBAAAyrB,MAAA,UACAA,QAAA,GACA,CAGA,GAAA/c,MAAA,GAAAzI,KAAA7F,OAAAsO,OAAAzI,KAAA7F,OAAAkN,IAAA,CACA,UAAAurC,WAAA,qBACA,CAEA,GAAAvrC,KAAAoB,MAAA,CACA,OAAAzI,IACA,CAEAyI,cAAA,EACApB,UAAAxI,UAAAmB,KAAA7F,OAAAkN,MAAA,EAEA,IAAAme,QAAA,EAEA,IAAAhsB,EACA,UAAAgsB,MAAA,UACA,IAAAhsB,EAAAiP,MAAAjP,EAAA6N,MAAA7N,EAAA,CACAwG,KAAAxG,GAAAgsB,GACA,CACA,MACA,IAAAsS,MAAAc,OAAAD,SAAAnT,KACAA,IACAoT,OAAA/6B,KAAA2nB,IAAAiuB,UACA,IAAAz4C,IAAA88B,MAAA39B,OACA,GAAAa,MAAA,GACA,UAAAY,UAAA,cAAA4pB,IACA,oCACA,CACA,IAAAhsB,EAAA,EAAAA,EAAA6N,IAAAoB,QAAAjP,EAAA,CACAwG,KAAAxG,EAAAiP,OAAAqvB,MAAAt+B,EAAAwB,IACA,CACA,CAEA,OAAAgF,IACA,EAKA,IAAA66C,kBAAA,oBAEA,SAAAC,YAAAhmB,KAEAA,QAAA9nB,MAAA,QAEA8nB,QAAA+W,OAAA7jC,QAAA6yC,kBAAA,IAEA,GAAA/lB,IAAA36B,OAAA,WAEA,MAAA26B,IAAA36B,OAAA,OACA26B,QAAA,GACA,CACA,OAAAA,GACA,CAEA,SAAA4iB,MAAAr+C,GACA,GAAAA,EAAA,aAAAA,EAAAiG,SAAA,IACA,OAAAjG,EAAAiG,SAAA,GACA,CAEA,SAAA20C,YAAAzxC,OAAAu4C,OACAA,aAAAtlB,SACA,IAAAwhB,UACA,IAAA98C,OAAAqI,OAAArI,OACA,IAAA6gD,cAAA,KACA,IAAAljB,MAAA,GAEA,QAAAt+B,EAAA,EAAAA,EAAAW,SAAAX,EAAA,CACAy9C,UAAAz0C,OAAA+E,WAAA/N,GAGA,GAAAy9C,UAAA,OAAAA,UAAA,OAEA,IAAA+D,cAAA,CAEA,GAAA/D,UAAA,OAEA,IAAA8D,OAAA,MAAAjjB,MAAAttB,KAAA,aACA,QACA,SAAAhR,EAAA,IAAAW,OAAA,CAEA,IAAA4gD,OAAA,MAAAjjB,MAAAttB,KAAA,aACA,QACA,CAGAwwC,cAAA/D,UAEA,QACA,CAGA,GAAAA,UAAA,OACA,IAAA8D,OAAA,MAAAjjB,MAAAttB,KAAA,aACAwwC,cAAA/D,UACA,QACA,CAGAA,WAAA+D,cAAA,UAAA/D,UAAA,YACA,SAAA+D,cAAA,CAEA,IAAAD,OAAA,MAAAjjB,MAAAttB,KAAA,YACA,CAEAwwC,cAAA,KAGA,GAAA/D,UAAA,KACA,IAAA8D,OAAA,WACAjjB,MAAAttB,KAAAysC,UACA,SAAAA,UAAA,MACA,IAAA8D,OAAA,WACAjjB,MAAAttB,KACAysC,WAAA,MACAA,UAAA,OAEA,SAAAA,UAAA,OACA,IAAA8D,OAAA,WACAjjB,MAAAttB,KACAysC,WAAA,OACAA,WAAA,SACAA,UAAA,OAEA,SAAAA,UAAA,SACA,IAAA8D,OAAA,WACAjjB,MAAAttB,KACAysC,WAAA,OACAA,WAAA,UACAA,WAAA,SACAA,UAAA,OAEA,MACA,UAAAn9C,MAAA,qBACA,CACA,CAEA,OAAAg+B,KACA,CAEA,SAAA0e,aAAA1hB,KACA,IAAAmmB,UAAA,GACA,QAAAzhD,EAAA,EAAAA,EAAAs7B,IAAA36B,SAAAX,EAAA,CAEAyhD,UAAAzwC,KAAAsqB,IAAAvtB,WAAA/N,GAAA,IACA,CACA,OAAAyhD,SACA,CAEA,SAAArE,eAAA9hB,IAAAimB,OACA,IAAArhD,EAAAwhD,GAAAC,GACA,IAAAF,UAAA,GACA,QAAAzhD,EAAA,EAAAA,EAAAs7B,IAAA36B,SAAAX,EAAA,CACA,IAAAuhD,OAAA,WAEArhD,EAAAo7B,IAAAvtB,WAAA/N,GACA0hD,GAAAxhD,GAAA,EACAyhD,GAAAzhD,EAAA,IACAuhD,UAAAzwC,KAAA2wC,IACAF,UAAAzwC,KAAA0wC,GACA,CAEA,OAAAD,SACA,CAEA,SAAA/G,cAAApf,KACA,OAAAwa,OAAAO,YAAAiL,YAAAhmB,KACA,CAEA,SAAAwhB,WAAA8E,IAAAC,IAAA9yC,OAAApO,QACA,QAAAX,EAAA,EAAAA,EAAAW,SAAAX,EAAA,CACA,GAAAA,EAAA+O,QAAA8yC,IAAAlhD,QAAAX,GAAA4hD,IAAAjhD,OAAA,MACAkhD,IAAA7hD,EAAA+O,QAAA6yC,IAAA5hD,EACA,CACA,OAAAA,CACA,CAKA,SAAA25C,WAAAt2C,IAAAmO,MACA,OAAAnO,eAAAmO,MACAnO,KAAA,MAAAA,IAAAW,aAAA,MAAAX,IAAAW,YAAAgC,MAAA,MACA3C,IAAAW,YAAAgC,OAAAwL,KAAAxL,IACA,CACA,SAAAq0C,YAAAh3C,KAEA,OAAAA,SACA,C,kIChvDA,aAEA,IAAAy+C,aAAA3hD,QAAA,iBAEA,IAAA4hD,SAAA5hD,QAAA,MAEA,IAAA6hD,SAAAD,SAAAD,aAAA,6BAEAlhD,OAAAH,QAAA,SAAAwhD,mBAAAj8C,KAAAk8C,cACA,IAAAC,UAAAL,aAAA97C,OAAAk8C,cACA,UAAAC,YAAA,YAAAH,SAAAh8C,KAAA,mBACA,OAAA+7C,SAAAI,UACA,CACA,OAAAA,SACA,C,qECdA,aAEA,IAAAz+C,KAAAvD,QAAA,iBACA,IAAA2hD,aAAA3hD,QAAA,iBAEA,IAAAiiD,OAAAN,aAAA,8BACA,IAAAO,MAAAP,aAAA,6BACA,IAAAQ,cAAAR,aAAA,yBAAAp+C,KAAAhD,KAAA2hD,MAAAD,QAEA,IAAAG,MAAAT,aAAA,0CACA,IAAAU,gBAAAV,aAAA,gCACA,IAAAW,KAAAX,aAAA,cAEA,GAAAU,gBAAA,CACA,IACAA,gBAAA,QAAAl/C,MAAA,GACA,OAAA1D,GAEA4iD,gBAAA,IACA,CACA,CAEA5hD,OAAAH,QAAA,SAAAshD,SAAAW,kBACA,IAAAziB,KAAAqiB,cAAA5+C,KAAA2+C,MAAA7rC,WACA,GAAA+rC,OAAAC,gBAAA,CACA,IAAAjZ,KAAAgZ,MAAAtiB,KAAA,UACA,GAAAsJ,KAAA5mC,aAAA,CAEA6/C,gBACAviB,KACA,SACA,CAAA38B,MAAA,EAAAm/C,KAAA,EAAAC,iBAAA/hD,QAAA6V,UAAA7V,OAAA,KAEA,CACA,CACA,OAAAs/B,IACA,EAEA,IAAA0iB,UAAA,SAAAA,YACA,OAAAL,cAAA5+C,KAAA0+C,OAAA5rC,UACA,EAEA,GAAAgsC,gBAAA,CACAA,gBAAA5hD,OAAAH,QAAA,SAAA6C,MAAAq/C,WACA,MACA/hD,OAAAH,QAAA4kC,MAAAsd,SACA,C,gFC9CA,IAAAC,aAAAziD,QAAA,UAAAyiD,aAEA,IAAAC,QAAA1iD,QAAA,iBACA,IAAA2iD,OAAA3iD,QAAA,gBACA,IAAA4iD,MAAA5iD,QAAA,eACA,IAAA+jC,KAAA/jC,QAAA,cACA,IAAA6iD,KAAA7iD,QAAA,cACA,IAAA8iD,KAAA9iD,QAAA,cACA,IAAAsqC,IAAAtqC,QAAA,aACA,IAAA+iD,aAAA/iD,QAAA,2BAEAS,OAAAH,QAAA0iD,OAEA,SAAAA,OAAAzyC,MACAA,WAAA,GACA3P,MAAAqiD,UAAA,gBACA,OAAAriD,MACA,SAAAA,MAAAmyB,MAAAmwB,QAAAniD,KACA,IAAAoiD,aAAA,IAAAV,aAEA,UAAAW,SAAA,aACAT,OAAA5vB,MAAAmwB,QAAA3yC,KACA,CAEA2yC,QAAAG,GAAA,+BACA,UAAAD,SAAA,mBACAA,OAAAziD,KAAA,GAEAyiD,OAAAziD,KAAAoyB,YACAqwB,OAAAziD,KAAA2iD,KAAA,WACAJ,QAAAI,KAAApe,MAAAge,QAAA7sC,UACA,EACA+sC,OAAAziD,KAAA0iD,GAAA,SAAAE,UAAAC,UACAN,QAAAG,GAAAE,UAAAC,SACA,EAEAZ,MAAA7vB,MAAAmwB,QAAAniD,IAAAoiD,cAEA7Y,IAAAvX,MAAAmwB,QAAAniD,IAAAoiD,cACAL,KAAA/vB,MAAAmwB,QAAAniD,IAAAoiD,cACAC,OAAAziD,KAAAojC,UACA,GAAAhjC,IAAA0iD,QAAA1iD,IAAA0iD,cAAA,CACAL,OAAAziD,KAAA+iD,OAAAhhD,OAAA4W,KAAAypC,aAAAhiD,IAAA0iD,eACA,CAEAf,UACAG,MACA,GACA,CACA,C,uMCjDA,IAAAc,UAAA3jD,QAAA,cACA,IAAA4jD,MAAA5jD,QAAA,WAEAS,OAAAH,QAAAyjC,KAEA,SAAAA,KAAAhR,OACA,IAAA8wB,cAAA9wB,sBAAA,SACA,IAAA+wB,WAAAD,eAAAxtC,UAAA7V,SAAA,GAAAuyB,MAAA3U,QAAA,cAEA,IAAA2U,sBAAA,WAAAA,MAAAqwB,OAAAziD,KAAAoyB,MACA,GAAA+wB,WAAA,GAAAjzC,KAAAtQ,KAAA8V,UAAA,CAAA0c,MAAAqwB,OAAAziD,KAAAoyB,QAEA4wB,UAAAE,cAAAD,MAAA1e,MAAA7+B,KAAAgQ,WAAA0c,MACA,C,uECZA,IAAAgxB,SAAA/jD,QAAA,0BACA,IAAAgkD,WAAAhkD,QAAA,cACA,IAAA2/B,OAAA3/B,QAAA,UAEA,IAAAikD,eAAA,0DACA,IAAAC,gBAAA,iDAEAzjD,OAAAH,QAAAsiD,MAEA,SAAAA,MAAA7vB,MAAAmwB,QAAAniD,IAAAoiD,cACA,IAAA7Y,IAAA0Z,WAAA,iBACA,IAAAG,QAAAf,OAAAgB,aAAAC,WAAA,QACA,GAAAF,QAAA7Z,IAAAga,KAAAL,gBAEAlxB,MAAAgxB,SAAAhxB,OAAA,SAAAwxB,KAAAphD,MAAAqhD,UACA,IAAAL,QAAA,OACAK,kBAAAnxC,MAAA,SAAAhF,QAAA,UACAi8B,IAAAga,KAAA,SAAAC,KAAAphD,MAAA,KAAAqhD,SACA,IAEAzjD,IAAAgyB,YAEArwB,OAAAC,eAAAygD,OAAAziD,KAAA,SACAgV,IAAA,WACAytC,OAAAgB,aAAAC,SAAA,QACAlB,aAAAG,KAAA,cACAa,QAAA,KACA,OAAAF,cACA,EACA78C,IAAA,SAAAq9C,MACA9kB,OAAAuB,aAAAujB,KAAA,8DACArB,OAAAgB,aAAAC,SAAAI,KAAA,eACAN,QAAAM,KACAtB,aAAAG,KAAA,QAAAa,SACA,GAAAA,QAAA7Z,IAAAga,KAAAL,qBACA3Z,IAAAga,KAAAJ,gBACA,GAEA,C,gGCvCAzjD,OAAAH,QAAAuiD,KAEA,SAAAA,OACAngD,OAAAC,eAAAygD,OAAAziD,KAAA,QACAgV,QACAvO,IAAA42B,OAGA,SAAAroB,MACA+uC,YAAA,WACAC,MAAA,wDACAA,MAAA,mCACAA,MAAA,6CACAA,MAAA,mCACAA,MAAA,4CACAA,MAAA,iDACAA,MAAA,wDACAA,MAAA,wCACAA,MAAA,wCACAA,MAAA,+CACA,MACA,6BACA,CACA,CAEA,SAAAA,MAAAC,IAAAxb,MACA,IAAAyb,MAAA,UACAp0C,QAAA65B,IAAA,YAAAsa,IAAA,UAAAC,MAAA,KAAAzb,KACA,CAEA,SAAApL,OAAA,C,2CC9BA,IAAA8mB,YAAA9kD,QAAA,sBACA,IAAA+kD,UAAA/kD,QAAA,gBAAAA,GACA,IAAAgkD,WAAAhkD,QAAA,cACA,IAAAglD,KAAAhB,WAAA,QACA,IAAAiB,MAAAjlD,QAAA,SAEA,IAAAklD,mBAAA,IAEAzkD,OAAAH,QAAAgqC,IAEA,SAAAA,IAAAvX,MAAAmwB,QAAAniD,IAAAoiD,cACA,IAAAgC,YAAA/B,OAAAgB,aAAAC,WAAA,QACA,IAAAe,QAAA,GACA,IAAAvlD,EAAA,EACA,IAAAwlD,WAAA,KAEAlC,aAAAE,GAAA,kBAAAoB,MACAU,YAAAV,IACA,IAEArB,OAAAziD,KAAA2kD,SAAAF,QACAhC,OAAAziD,KAAAykD,QAAAG,YAEA7iD,OAAAC,eAAAygD,OAAAziD,KAAA,OAAAgV,IAAA4vC,YAAAn+C,IAAA42B,OACAt7B,OAAAC,eAAAygD,OAAAziD,KAAA,WAAAgV,IAAA4vC,YAAAn+C,IAAA42B,OAEAklB,QAAAG,GAAA,cAAAx9C,KAAAyqB,MACAzwB,GAAA,EACA,IAAA2lD,MAAA,IAAAC,MAAA5/C,KAAAyqB,KAAAyC,OACAqyB,QAAAv0C,KAAA20C,OACAT,UAAAl0C,MAAA,WACA,IAAArQ,OAAA4kD,QAAA5kD,OACA,GAAAA,OAAA0kD,mBAAA,CACAJ,YAAAM,QAAA,EAAA5kD,OAAA0kD,mBACA,CACA,GACA,IAEA,SAAAK,cACAb,YAAA,WACAj0C,QAAAi1C,MAAAN,QACA,MACA,IAAAO,OAAA9lD,IAAA,mBACA,IAAAklC,IAAAllC,EAAA,IAAA8lD,OAAA,+BAAAT,mBAAA,IACA,GAAAC,cAAA,OACApgB,KAAA,gDACA,MACAA,KAAA,yDACA,CACA,OAAAA,GACA,CAEA,SAAA0gB,MAAA5/C,KAAAyqB,KAAAyC,OACA1sB,KAAAR,UACAQ,KAAAiqB,YAAAprB,UAAA,YAAAorB,KACAjqB,KAAA0sB,MAAAoyB,YACAS,SAAA7yB,OACA,YACA,CAEA,SAAA6yB,SAAA7yB,OACA,IACA,IAAA8yB,OAAAZ,MAAAlyB,OACA,IAAAsyB,sBAAA,KACA,OAAAQ,MACA,OAAAC,IACA,GAAAT,WAAA,CACAL,KAAAt0C,KAAA,8FACA20C,WAAA,KACA,CACA,wBACA,CACA,CACA,CAEA,SAAArnB,OAAA,C,6GC3EA,IAAA+mB,UAAA/kD,QAAA,gBAAAA,GACA,IAAAgkD,WAAAhkD,QAAA,cACA,IAAA+lD,MAAA/lD,QAAA,cAEAS,OAAAH,QAAAqiD,OAEA,SAAAA,OAAA5vB,MAAAmwB,QAAA3yC,MACA,IAAAy1C,cAAA,KACA,IAAAC,MAAAF,MAAA7C,SACA,IAAA5Y,IAAA0Z,WAAA,QAEAiC,MAAA5C,GAAA,YAAAV,OAAA,UACAsD,MAAA5C,GAAA,WAAAV,OAAA,SACAsD,MAAA5C,GAAA,WAAAV,OAAA,SACAsD,MAAA5C,GAAA,YAAAV,OAAA,UACAsD,MAAA5C,GAAA,YAAAV,OAAA,UAEAsD,MAAA5C,GAAA,kBAAAE,UAAAjzB,KAAA41B,QACA,GAAA31C,KAAA41C,SAAA51C,KAAA41C,OAAA5C,UAAAjzB,KAAA41B,QAAA,OAEA,GAAAA,OAAA,CACA,IAAAlR,SAAAkR,OAAAlR,SAAAoR,UACA,IAAAC,MAAArR,SAAA,iBACA,GAAA1kB,OAAAprB,UAAAy9C,OAAA0D,MAAA1D,CAAAY,UAAAjzB,KAAA0kB,SAAA,WACA2N,OAAA0D,MAAA1D,CAAAY,UAAAvO,SAAA,KACA,MACA,GAAA1kB,OAAAprB,UAAAy9C,OAAA,OAAAA,CAAAY,UAAAjzB,WACAqyB,OAAA,OAAAA,CAAAY,UACA,CACA,IAEA0C,MAAA5C,GAAA,sBAAAE,UAAAjzB,MACAqyB,OAAA,QAAAA,CAAA,oBAAAY,UACA,IAEA0C,MAAA5C,GAAA,6BAAA6C,QACA,IAAAA,OAAA,OAAAvD,OAAA,OAAAA,CAAA,oBACA,IAAA0D,MAAAH,OAAAI,YAAA,kBACA3D,OAAA0D,MAAA1D,CAAA,mBAAAuD,OAAAI,YAAA,oBACA,IAEAL,MAAA5C,GAAA,mBAAAkD,SACA,IAAAA,kBAAAC,OAAA,OAAA7D,OAAA,OAAAA,CAAA,UACA,IAAA3N,SAAAuR,QAAAC,OAAAxR,SAAAoR,UACA,IAAArhB,IAAA,SAEA,GAAAihB,cAAA,CACAA,cAAA,MACAjhB,IAAA,WAAAA,GACA,CAGA,IAAA0hB,IAAA1nB,KAAAhL,KAAA,IAAAihB,UAAAoR,UAAA,IAEA,GAAAK,MAAA,IACA9D,OAAA,OAAAA,CAAA5d,IAAA0hB,IAAA,MAAAzR,SAAA,KACA,MACA,IAAA0R,MAAA,CACAF,OAAAD,QAAAC,OAAAxR,SAAAoR,UAAA,MAEA,GAAAG,QAAAI,MAAAD,MAAAC,MAAAJ,QAAAI,MAAA3R,SAAAoR,UAAA,KACAzD,OAAA,OAAAA,CAAA5d,IAAA0hB,IAAA,MAAAzR,SAAA,KAAA0R,MACA,CACA,IAEAT,MAAA5C,GAAA,0CACAV,OAAA,QAAAA,CAAA,kGACA,IAEAsD,MAAAn3C,QAEA,SAAA6zC,OAAA0D,OACA,kBACA,IAAA9hB,KAAA,GACA,QAAA1kC,EAAA,EAAAwB,IAAAgV,UAAA7V,OAAAX,EAAAwB,IAAAxB,IAAA,CACA0kC,KAAA1zB,KAAAwF,UAAAxW,GACA,CACAklD,UAAAl0C,MAAA,WACAy5B,IAAA+b,OAAAnhB,MAAAoF,IAAA/F,KACA,GACA,CACA,CACA,C,2FClFA,IAAAqiB,cAAA5mD,QAAA,kBAEA,IAAA6mD,IAAA,IAEApmD,OAAAH,QAAAwiD,KAEA,SAAAA,KAAA/vB,MAAAmwB,QAAAniD,IAAAoiD,cACA,IAAA2D,MAAA,GAEA1D,OAAAziD,KAAAmiD,KAAA,GAGA,IAAAiE,IAAA,IAAAC,KAAAF,MAAA,OACApkD,OAAAC,eAAAygD,OAAAziD,KAAAmiD,KAAA,OACAntC,IAAAoxC,IAAApxC,IAAApS,KAAAwjD,KACA3/C,IAAA42B,OAIA,IAAAipB,KAAA,IAAAD,KAAAF,MAAA,iBAAAjhD,MACA,cAAAC,KAAAD,KACA,IACAnD,OAAAC,eAAAygD,OAAAziD,KAAAmiD,KAAA,QACAntC,IAAAsxC,KAAAtxC,IAAApS,KAAA0jD,MACA7/C,IAAA42B,OAIA,IAAAkpB,WAAA,IAAAF,KAAAF,MAAA,uBAAAjhD,MACA,eAAAC,KAAAD,QAAA,UAAAC,KAAAD,KACA,IACAnD,OAAAC,eAAAygD,OAAAziD,KAAAmiD,KAAA,cACAntC,IAAAuxC,WAAAvxC,IAAApS,KAAA2jD,YACA9/C,IAAA42B,OAIA,IAAA2nB,OAAA,IAAAqB,KAAAF,MAAA,mBAAAjhD,MACA,oBAAAC,KAAAD,KACA,aAAAA,MACA,OAAAA,KAAAwI,QAAA,qBAAAA,QAAA,UACA,IACA3L,OAAAC,eAAAygD,OAAAziD,KAAAmiD,KAAA,UACAntC,IAAAgwC,OAAAhwC,IAAApS,KAAAoiD,QACAv+C,IAAA42B,OAGA4oB,eAAA,SAAApB,OACA,GAAAA,MAAA2B,YAAA,iBACA,IAAAthD,KAAA2/C,MAAA3/C,KAAAwI,QAAA,WAEA,IAAAy4C,MAAAjhD,MAAA,CACAihD,MAAAjhD,MAAA,CACAA,UACA0yB,MAAA,EACA6uB,QAAA,GAEA,CAEA,IAAAC,KAAAP,MAAAjhD,MACAwhD,KAAA9uB,OAAA,EACA8uB,KAAAD,QAAAv2C,KAAA20C,MAAAxQ,SACA,GACA,CAGA,SAAAgS,KAAAF,MAAAjhD,KAAAsgD,OAAAmB,QACAjhD,KAAAygD,YACAzgD,KAAAR,UACAQ,KAAA8/C,eAAA,wBACA9/C,KAAAihD,eAAA,SAAAzhD,MAAA,OAAAA,IAAA,CACA,CAGAmhD,KAAAhkD,UAAA2S,IAAA,WACA,IAAA4xC,SAAA7kD,OAAA4W,KAAAjT,KAAAygD,OAAAX,OAAA9/C,KAAA8/C,QACA,IAAAvkD,KAAAyE,KAEA,IAAAmhD,QAAA,EACA,IAAAC,UAAA,EACA,IAAAC,IAAAH,SAAAve,KAAA,SAAApmC,KACA,IAAAykD,KAAAzlD,KAAAklD,MAAAlkD,KACA,IAAA+kD,UAAAtiD,OAAAgiD,KAAAD,QAAA7d,QAAA,SAAAS,KAAAwb,OACA,OAAAxb,KAAAwb,KACA,MAAAY,QAAA,IACA,GAAAuB,UAAAH,gBAAAG,UAEA,IAAAC,OAAAC,UAAAR,KAAAD,SACA,GAAAQ,OAAAH,oBAAAG,OAEA,IAAA/hD,KAAAjE,KAAA0lD,OAAAD,KAAAxhD,MACA,WAAAiiD,UAAAjiD,KAAA8hD,UAAAC,OAAAP,KAAA9uB,MACA,IAEA,IAAAwvB,UAAA,GACAL,IAAAvf,SAAA,SAAAqd,OACA,IAAAmC,UAAAnC,MAAA,mBACA,IAAAoC,OAAApC,MAAA,eACAA,MAAA,KAAAwC,UAAAL,UAAAH,QAAA,IAAAO,WACAvC,MAAA,MAAAwC,UAAAJ,OAAAH,UAAA,IAAAM,UACA,IAEA,SAAAC,UAAA3mD,KACA,IAAA85B,IAAA,GACA,QAAAt7B,EAAA,EAAAm0B,IAAA+K,KAAAkpB,MAAA5mD,KAAAxB,EAAAm0B,IAAAn0B,IAAA,CACAs7B,KAAA0rB,GACA,CACA,OAAA1rB,GACA,CAEA,IAAAh2B,IAAAuiD,IAAAjlB,MAAA,SAAAviC,EAAA0+B,GACA,OAAAA,EAAA,mBAAA1+B,EAAA,kBACA,IACAuQ,QAAAi1C,MAAAvgD,KACA,yCAAAkB,KAAAR,KAAA,GACA,EAGA,SAAAiiD,UAAAjiD,KAAA8hD,UAAAC,OAAArvB,OACAlyB,KAAA6hD,KAAAriD,KACAQ,KAAA,mBAAAshD,UACAthD,KAAA,OACAA,KAAA,eAAAuhD,OACAvhD,KAAA,QACAA,KAAA,eAAAkyB,KACA,CAGA,SAAAsvB,UAAAtjB,MACA,IAAAA,KAAA/jC,OAAA,SACA,IAAA2nD,QAAA5jB,KAAA3+B,MAAA,GAAA68B,MAAA,SAAAviC,EAAA0+B,GAAA,OAAA1+B,EAAA0+B,CAAA,IACA,IAAAwpB,OAAArpB,KAAAsW,MAAA8S,QAAA3nD,OAAA,GACA,IAAA6nD,OAAAF,QAAA3nD,OAAA,MACA,IAAA2E,IAAAkjD,QAAAF,QAAAC,QAAAD,QAAAC,OAAA,MAAAD,QAAAC,QACA,OAAA/iD,OAAAF,IAAAihD,QAAA,GACA,CAGA,SAAApoB,OAAA,C,+DC1IA,IAAAsqB,OAAAtoD,QAAA,kBAEAS,OAAAH,QAAAoiD,QAEA,SAAAA,UACAhgD,OAAAC,eAAAygD,OAAAziD,KAAA,WACAgV,QACAvO,IAAA42B,OAGA,SAAAroB,MACA,GAAA4yC,UAAA7F,QAAA,CACA6F,UAAA7F,QAAA8F,WAAAC,MAAA,SAAAD,UACA,IAAArlD,OAAAqlD,SAAAE,MAAAF,SAAAG,OAAAvC,UACAwC,IAAA,eAAAlB,IAAAc,SAAAG,QACAC,IAAA,gBAAAlB,IAAAc,SAAAE,OAAA,KAAAvlD,MAAA,MACAolD,UAAA7F,QAAAmG,YAAAJ,MAAA,SAAAhE,MACA,IAAA54B,IAAA44B,KAAA,qBACAmE,IAAA,sBAAA/8B,IACA,GACA,IACA,kCACA,MACA,IAAAi9B,SAAA1F,OAAA2F,SAAAD,SACA,cAAAhjD,KAAAgjD,UACA,+DACA,oFACA,CACA,CACA,CAEA,SAAAF,IAAA7jB,IAAAx/B,KACA,IAAAs/C,MAAA,UACAp0C,QAAA65B,IAAA,KAAAvF,IAAA,UAAA8f,MAAAt/C,IACA,CAEA,SAAAmiD,IAAA/+C,KACA,OAAA2/C,OAAA3/C,KAAA0F,QAAA,OACA,CAEA,SAAA2vB,OAAA,C,+DCxCA,IAAA4oB,cAAA5mD,QAAA,kBACA,IAAA+kD,UAAA/kD,QAAA,gBAAAA,GACA,IAAA2/B,OAAA3/B,QAAA,UAEAS,OAAAH,QAAA0oD,UAEA,SAAAA,UAAA9F,SACA,KAAA78C,gBAAA2iD,WAAA,WAAAA,UAAA9F,SAEAvjB,OAAAuB,aAAAgiB,QAAA,UAEA78C,KAAA4iD,iBAAA7F,SAAA,YACA/8C,KAAA6iD,gBAAA7iD,KAAA4iD,WAAA7F,OAAA+F,oBACA9iD,KAAA+iD,eAAA/iD,KAAA4iD,WACA7F,OAAAiG,aACAjG,OAAAiG,YAAAC,iBAEAjjD,KAAA68C,gBACA78C,KAAAkjD,UAAA,GACAljD,KAAAo4B,OAAA,CACA+nB,OAAA,GACAb,OAAA,GAEA,CAEAqD,UAAAhmD,UAAAqgD,GAAA,SAAAx9C,KAAA+X,SACAvX,KAAAkjD,UAAA1jD,MAAA+X,OACA,EAEAorC,UAAAhmD,UAAA8L,MAAA,WACA,IAAAlN,KAAAyE,KACA,GAAAA,KAAA+iD,eAAA,CACAhG,OAAAiG,YAAAG,2BAAA,WACA,IAAAhG,SAAA5hD,KAAA2nD,UAAA,+BACA,GAAA/F,mBACA,CACA,CAGAoD,eAAA,SAAAV,QACA,IAAAA,OAAA,OACA,GAAAA,OAAAiB,YAAA,iBAEA,IAAA5D,UAAA2C,OAAArgD,KACA,iBAAAC,KAAAy9C,WAAA,CACA3hD,KAAA68B,OAAA+nB,OAAAG,MAAAT,MACA,uBAAApgD,KAAAy9C,WAAA,CACA3hD,KAAA68B,OAAA+nB,OAAAvlD,MAAAilD,MACA,wBAAApgD,KAAAy9C,WAAA,CACA3hD,KAAA68B,OAAA+nB,cAAAN,MACA,sBAAApgD,KAAAy9C,aAAA,OAAAz9C,KAAAy9C,WAAA,CACA,IAAAkG,cAAA7nD,KAAA2nD,UAAA,SACA,GAAAE,cAAA,CACA,IAAAC,WAAAnG,UAAAvsC,MAAA,2BACA,GAAA0yC,aAAA,UAAAA,aAAA,0BAEA,IAAAC,QAAApG,UAAAvsC,MAAA,gBACA,IAAAsZ,KAAA1uB,KAAA68B,OAAAknB,OAAAgE,SAEA/nD,KAAA68B,OAAAknB,OAAAgE,SAAA,KACAF,cAAAC,WAAAp5B,KAAA41B,OACA,CACA,CAEA,IAAA0D,KAAAhoD,KAAA68B,OAAA+nB,OACA,GAAAoD,KAAApD,QAAAoD,KAAA3oD,OAAA2oD,KAAAjD,MAAA,CACA,IAAAkD,eAAAjoD,KAAA2nD,UAAA,UACA,IAAAM,eAAA,OACA,IAAAtD,QAAA,GACA,MAAA3kD,KAAA68B,OAAA+nB,OAAAhmD,OAAA,CACA,IAAAspD,QAAAloD,KAAA68B,OAAA+nB,OAAA5qC,MACA,IAAA/V,KAAAikD,QAAAjkD,KACA,kBAAAC,KAAAD,MAAA0gD,QAAAC,OAAAsD,aACA,iBAAAhkD,KAAAD,MAAA0gD,QAAAI,MAAAmD,aACAvD,QAAAtlD,MAAA6oD,OACA,CACAF,KAAApD,OAAAoD,KAAA3oD,MAAA2oD,KAAAjD,WAAA,EACAkD,eAAAtD,QACA,CACA,IAKAlgD,KAAA68C,QAAAG,GAAA,cAAAE,UAAAjzB,KAAAy5B,MACA,IAAA1F,SAAA,iBAAAttC,KAAAwsC,WAEA,IAAA3hD,KAAAwnD,gBAAA7F,YAAA,UAEA,IAAAsG,eAAAjoD,KAAA2nD,UAAA,UACA,GAAAM,+BACA,SAAAtG,YAAA,oBAEA3hD,KAAAooD,aACA,SAAA3F,SAAA,CACAA,kBAAA,GAEA,IAAA4F,YAAAroD,KAAA2nD,UAAA,OAAAlF,UACA,GAAA4F,YAAA,CACAA,YAAA/kB,MAAA,KAAA3jC,MAAAyB,UAAA4C,MAAArF,KAAA8V,UAAA,EAAAA,UAAA7V,OAAA,GACA,CACA,UAAAoB,KAAAshD,QAAAqG,UAAAhG,WAAA/iD,OAAA,CAEA,IAAA0pD,kBAAAtoD,KAAA2nD,UAAA,aACA,GAAAW,oCAAA3G,UAAAjzB,KACA,SAAAizB,YAAA,UAEA,GAAA3hD,KAAAwnD,eAAAxnD,KAAA68B,OAAAknB,OAAAoE,MAAAz5B,IACA,CACA,GACA,EAGA04B,UAAAhmD,UAAAgnD,YAAA,WACA,IAAApoD,KAAAyE,KACA0+C,UAAAl0C,MAAA,SAAAs5C,QACA,IAAA3G,SAAA5hD,KAAA2nD,UAAA,oBACA,IAAArD,OAAAtkD,KAAAqnD,WAAA7F,OAAAiG,aAAAjG,OAAAiG,YAAAnD,OAEA,GAAA1C,UAAA0C,OAAA,CACA1C,SAAA,CACA8C,YAAAJ,OAAAkE,eAAAlE,OAAAmE,gBACAC,OAAApE,OAAAqE,yBAAArE,OAAAmE,iBAEA,CACA,GACA,C,2FC9HA,IAAA1qB,OAAA3/B,QAAA,UACA,IAAAwqD,IAAAxqD,QAAA,WAEAS,OAAAH,QAAAmqD,mBAEA,SAAAA,mBAAA13B,MAAAuwB,KAAAoH,KACA/qB,OAAAC,GAAAv5B,gBAAAokD,mBAAA,mDAEA9qB,OAAAuB,aAAAnO,MAAA,4DACA4M,OAAAuB,aAAAoiB,KAAA,+DAEA,UAAAoH,MAAA,SAAArkD,KAAAskD,MAAA,IAAAH,IAAAE,UACArkD,KAAAskD,MAAAD,KAAA,IAAAF,IAAA,KACAnkD,KAAA0sB,YACA1sB,KAAAi9C,SACA,CAGAmH,mBAAAznD,UAAAwjD,OAAA,SAAAoE,UAAAnsC,IACAkhB,OAAAuB,aAAA0pB,UAAA,2EACAjrB,OAAAC,UAAAnhB,KAAA,iBAAAA,KAAA,+EAEA,IAAAosC,GAAAxkD,KAAAskD,MAAAh1C,IAAA8I,IACA,IAAAosC,GAAA,CACA,IAAAtmB,KAAA,GACA,QAAA1kC,EAAA,EAAAwB,IAAAgV,UAAA7V,OAAAX,EAAAwB,IAAAxB,IAAA,CACA0kC,KAAA1zB,KAAAwF,UAAAxW,GACA,CACA0kC,KAAAumB,QAAAF,UAAAnsC,GAAApY,KAAA0sB,MAAA1sB,KAAAi9C,MACAuH,GAAAE,QAAA7lB,MAAA6lB,QAAAxmB,MACAl+B,KAAAskD,MAAAvjD,IAAAqX,GAAAosC,GACA,CAEA,OAAAA,EACA,EAIA,SAAAE,QAAAC,KACA,WAAAA,IAAAznD,KAAA2hC,MAAA8lB,IAAA30C,WACA,C,iECxCA5V,OAAAH,QAAAN,QAAA,gB,4DCAAS,OAAAH,QAAAN,QAAA,W,uDCAAS,OAAAH,QAAAN,QAAA,e,6DCAA,IAAAirD,eAAAjrD,QAAA,oBACA,IAAAkrD,cAAAlrD,QAAA,kBACA,IAAAmrD,WAAAnrD,QAAA,cACA,IAAAorD,WAAAprD,QAAA,cACA,IAAAqrD,UAAArrD,QAAA,aACA,IAAAsrD,UAAAtrD,QAAA,aACA,IAAAurD,SAAAvrD,QAAA,YACA,IAAAwrD,QAAAxrD,QAAA,WACA,IAAAyrD,QAAAzrD,QAAA,WACA,IAAA2/B,OAAA3/B,QAAA,UAEA,IAAA0rD,MAAA1rD,QAAA,qBAEAS,OAAAH,QAAAqrD,KAEA,IAAAC,eAAA,GAEA,SAAAD,KAAAp7C,MACA,IAAA21C,OAAAiF,WAAA,oBACA,KAAA9kD,gBAAAslD,MAAA,WAAAA,KAAAp7C,MACAA,WAAA,GAEAovB,OAAAuB,aAAA3wB,KAAA,6CAEA,IAAA3O,KAAAyE,KAGAA,KAAAwlD,QAAA,CACAC,iBAAA,mBACAC,eAAA,iBACAC,aAAA,eACAC,UAAA,YACAC,SAAA,WACAC,SAAA,WACAC,OAAA,UAIA/lD,KAAAgmD,gBAAA97C,KAAA60C,UAAAlgD,UAAA,KAAAqL,KAAA60C,QACA/+C,KAAAimD,aAAA/7C,KAAAg8C,OAAArnD,UAAA,KAAAqL,KAAAg8C,KACAlmD,KAAAmmD,aAAAj8C,KAAA23B,OAAAhjC,UAAA,MAAAqL,KAAA23B,KACA7hC,KAAAomD,kBAAArJ,SAAA,YACA/8C,KAAAqmD,OAAAn8C,KAAAo6C,MACAtkD,KAAAsmD,QAAA,MACAtmD,KAAAumD,QAAA,CAAAC,kBACAxmD,KAAAymD,MAAA,KAGA,IAAAjH,OAAA,CACAF,OAAAt/C,KAAAwlD,QACA3E,WAAA,IAEA,GAAA7gD,KAAAomD,WAAA,CACApmD,KAAA0sB,MAAAqwB,OAAA2J,aACArqD,OAAAyH,OAAA,GAAAi5C,OAAA2J,aAAAlH,QACAA,cACAzC,OAAA2J,YACA,MACA1mD,KAAA0sB,MAAA8yB,MACA,CAGAx/C,KAAAo9C,OAAA2H,WAAA,CAAA4B,MAAA,OACA3mD,KAAA68C,QAAAuI,QAAA,aACAplD,KAAAi9C,KAAAj9C,KAAA68C,QAAAI,KAAA//C,KAAA8C,KAAA68C,SAGA,GAAA78C,KAAAomD,WAAApmD,KAAA0sB,MAAAk6B,MAAAC,SAAAD,MACA,SAAAJ,iBAAA95B,OACAnxB,KAAAshD,QAAAiK,gBAAAvrD,KAAAiqD,QAAAE,gBAAA,SAAAkB,OACAttB,OAAAuB,aAAA+rB,MAAA,+DACAl6B,MAAAk6B,YACA,GAAArrD,KAAA6qD,WAAAS,SAAAD,WACA,GACA,CACA/G,QACA,CAEAyF,KAAA3oD,UAAA/B,MAAA,SAAAA,MAAA2c,SACA,IAAAwvC,YAAAjC,WAAA,eAAAlqD,MAAA,MACA0+B,OAAAuB,aAAAjgC,MAAA,oDACA0+B,OAAAuB,aAAAtjB,QAAA,0DACAvX,KAAAo9C,OAAAJ,GAAApiD,MAAA2c,SACAwvC,aACA,EAEAzB,KAAA3oD,UAAAhC,IAAA,SAAAqsD,IACA1tB,OAAAuB,aAAAmsB,GAAA,mDACA,IAAAzrD,KAAAyE,KACAA,KAAAumD,QAAA/7C,MAAA,SAAAkiB,OACA,IAAAgS,IAAA,WACAA,IAAAsoB,GAAApK,UAAAle,IAAA,IAAAsoB,GAAApK,UAAA,IAAAle,IACA,IAAAuoB,UAAAnC,WAAApmB,KACAsoB,GAAAt6B,MAAAnxB,KAAAshD,QAAAthD,MACA0rD,WACA,GACA,EAEA3B,KAAA3oD,UAAA8L,MAAA,WACA6wB,OAAAuB,aAAAkiB,OAAA,uHACA,IAAAmK,YAAApC,WAAA,cAEA,IAAAvpD,KAAAyE,KACA,GAAAA,KAAAgmD,gBAAA,CACAhmD,KAAA68C,QAAAiK,gBAAA9mD,KAAAwlD,QAAAK,UAAA,WACAtqD,KAAA4rD,YAAA5rD,KAAAmxB,OACA,GAAAnxB,KAAA+qD,QAAA,CACA/qD,KAAAshD,QAAAI,KAAA1hD,KAAAiqD,QAAAO,QACA1H,WAAAuG,eAAA1nD,KAAA,KAAA6/C,OAAA2F,SAAA7gB,MAAA,EACA,CACA,IAEA7hC,KAAA68C,QAAAiK,gBAAA9mD,KAAAwlD,QAAAM,UAAA,WACAvqD,KAAAshD,QAAAI,KAAA1hD,KAAAiqD,QAAAK,SACA,IAEA7lD,KAAA68C,QAAAiK,gBAAA9mD,KAAAwlD,QAAAI,WAAA,SAAAM,MACA5sB,OAAAuB,aAAAqrB,KAAA,yDACAnJ,OAAAgC,QAAAqI,UAAA7B,eAAA,KAAAW,MACA3qD,KAAAshD,QAAAI,KAAA1hD,KAAAiqD,QAAAK,SACA,IAEA7lD,KAAA68C,QAAAiK,gBAAA9mD,KAAAwlD,QAAAG,cAAA,SAAAO,MACA5sB,OAAAuB,aAAAqrB,KAAA,4DACAnJ,OAAAgC,QAAAsI,aAAA9B,eAAA,KAAAW,MACA3qD,KAAAshD,QAAAI,KAAA1hD,KAAAiqD,QAAAK,SACA,IAEA9I,OAAAuK,WAAA,WACA/rD,KAAAshD,QAAAI,KAAA1hD,KAAAiqD,QAAAM,SACA,EAEA,GAAAvqD,KAAA0qD,aAAA,CACAf,UAAA,SAAAxC,UACA,IAAAwD,KAAAxD,SAAAwD,KACA,IAAArkB,KAAA6gB,SAAA7gB,KACA,GAAAqkB,OAAAnJ,OAAA2F,SAAAwD,KAAA,CACA,IAAA3qD,KAAA4qD,cAAAtkB,KAAA+iB,eAAA/iB,MACA,MACA,CACAtmC,KAAAshD,QAAAI,KAAA1hD,KAAAiqD,QAAAI,UAAAM,KACA,GACA,CACA,CAEAlmD,KAAAunD,UAAAvnD,KAAA0sB,OACA1sB,KAAAmnD,YAAAnnD,KAAA0sB,OACA1sB,KAAAumD,QAAAzkB,SAAA,SAAA0lB,WACAA,UAAAjsD,KAAAmxB,MACA,IAEA1sB,KAAAymD,MAAAzmD,KAAAynD,WAAAznD,KAAA0sB,OACA4M,OAAAC,GAAAv5B,KAAAymD,MAAA,uDAAAzmD,KAAA0sB,MAAAw5B,MAEAlmD,KAAA68C,QAAAiK,gBAAAvrD,KAAAiqD,QAAAO,OAAAZ,SAAA,WACA,IAAAuC,aAAA5C,WAAA,eACA,IAAA6C,QAAApsD,KAAAksD,WAAAlsD,KAAAmxB,OACA4M,OAAAC,GAAAouB,QAAA,wDAAApsD,KAAAmxB,MAAAw5B,MAEA5sB,OAAAuB,MAAAt/B,KAAAkrD,MAAAmB,SAAAD,QAAAC,SAAA,iCACArsD,KAAAkrD,MAAAmB,SAAA9T,cAAA,2CACA6T,QAAAC,SAAA9T,cAAA,MAEA,IAAA+T,YAAA/C,WAAA,cACAE,UAAAzpD,KAAAkrD,MAAAkB,SACAE,cAEAH,cACA,KAEA7C,eAAA,WACAtpD,KAAAshD,QAAAI,KAAA1hD,KAAAiqD,QAAAC,kBACAlqD,KAAA+qD,QAAA,IACA,IAEAY,cACA,OAAAlnD,KAAAymD,KACA,EAEAnB,KAAA3oD,UAAA9B,MAAA,SAAAA,MAAAitD,UACA,IAAAC,YAAAjD,WAAA,eAAAgD,SAAA,MACA,UAAA/K,SAAA,UACAzjB,OAAAC,UAAAuuB,WAAA,uDACA9nD,KAAA8nD,kBACAC,cACA,OAAA/nD,IACA,CAEAs5B,OAAAC,UAAAuuB,WAAA,iBAAAA,WAAA,sEAEA,IAAAvsD,KAAAyE,KAEA6kD,eAAA,WACA,IAAA6C,aAAA5C,WAAA,eACA,IAAA6C,QAAApsD,KAAAkN,QACA,UAAAq/C,WAAA,UACAvsD,KAAAkrD,MAAAI,SAAAmB,cAAAF,SACA,MACAvsD,KAAAkrD,MAAAqB,QACA,CAEAxuB,OAAAC,GAAAh+B,KAAAkrD,MAAA,yCAAAqB,UACAxuB,OAAAuB,MAAAt/B,KAAAkrD,MAAAmB,SAAAD,QAAAC,SAAA,gCACArsD,KAAAkrD,MAAAmB,SAAA9T,cAAA,2CACA6T,QAAAC,SAAA9T,cAAA,MAEA,IAAA+T,YAAA/C,WAAA,cACAE,UAAAzpD,KAAAkrD,MAAAkB,SACAE,cAEAH,cACA,IACAK,aACA,EAEAzC,KAAA3oD,UAAA2C,SAAA,SAAAojD,SAAAh2B,OACAA,aAAA,GACAA,MAAAm0B,WAAAn0B,MAAAm0B,YAAA,GACAn0B,MAAA4yB,OAAAjjD,OAAAyH,OAAA,GAAA4oB,MAAA4yB,OAAAt/C,KAAAwlD,SAEAlsB,OAAAwB,gBAAAiiB,OAAA,iIACAzjB,OAAAuB,aAAA6nB,SAAA,0DACAppB,OAAAuB,aAAAnO,MAAA,uDAEA1sB,KAAAunD,UAAA76B,OACA1sB,KAAAmnD,YAAAz6B,MAAAg2B,UACA1iD,KAAA68C,QAAAoL,qBACAjoD,KAAAumD,QAAAzkB,SAAA,SAAA0lB,WACAA,UAAA96B,MACA,IAEA,IAAAw7B,KAAAloD,KAAAynD,WAAA/6B,OACA4M,OAAAC,GAAA2uB,KAAA,wDAAAxF,UACAppB,QAAAp+B,MAAAG,QAAA6sD,MAAA,0DAAAxF,UACA,cAAAwF,KAAAC,YAAA,SAAAD,KAAAC,UAAAD,KAAA5oD,UACA,EAEAgmD,KAAA3oD,UAAAwqD,YAAA,SAAAz6B,MAAA07B,kBACA,IAAA1F,SAAA2F,YACA,GAAAD,iBAAA,CACA1F,SAAA0F,iBAAApgD,QAAA,YAAAA,QAAA,UACA,IAAAhI,KAAAmmD,aAAAzD,kBAAA16C,QAAA,WACAqgD,YAAAD,gBACA,MACA1F,SAAA3F,OAAA2F,SAAA4F,SAAAtgD,QAAA,UACA,GAAAhI,KAAAmmD,aAAAzD,UAAA3F,OAAA2F,SAAA7gB,KAAA75B,QAAA,UACAqgD,YAAAtL,OAAA2F,SAAA6F,MACA,CACA,IAAAC,QAAAxoD,KAAAo9C,OAAAzsC,MAAA+xC,UACA1iD,KAAAyoD,SAAAD,QAAAxB,GACAt6B,MAAAw5B,KAAAxD,SACAh2B,MAAAg8B,MAAAzD,UAAAoD,aACA37B,MAAA9xB,MAAA4tD,QAAA5tD,MACA8xB,MAAApT,OAAAkvC,QAAAlvC,MACA,EAEAgsC,KAAA3oD,UAAA8qD,WAAA,SAAA/6B,OACA,IAAAq6B,YAAAjC,WAAA,mBAAAp4B,MAAA9xB,MAAA,MACA,IAAAkE,IAAAkB,KAAAyoD,SAAA/7B,MAAA1sB,KAAAi9C,MACA8J,cACA,OAAAjoD,GACA,EAEAwmD,KAAA3oD,UAAA4qD,UAAA,SAAA76B,OACA,IAAA43B,MAAA,IAAAe,MAAA34B,MAAA1sB,KAAA68C,QAAAI,KAAA//C,KAAA8C,KAAA68C,SAAA78C,KAAAqmD,QACA35B,MAAA43B,MAAAqE,gBAEA,SAAAA,gBAAApE,UAAAnsC,IACAkhB,OAAAuB,aAAA0pB,UAAA,kEACA,IAAArmB,KAAA,GACA,QAAA1kC,EAAA,EAAAwB,IAAAgV,UAAA7V,OAAAX,EAAAwB,IAAAxB,IAAA,CACA0kC,KAAA1zB,KAAAwF,UAAAxW,GACA,CACA,OAAA8qD,MAAAnE,OAAAthB,MAAAylB,MAAApmB,KACA,CAIAyqB,gBAAA7R,OAAA,WACA,WACA,CACA,C;;ACtRA18C,OAAAH,QAAA2uD,cAEA,SAAAA,cAAAh+C,MAGA,GAAAs3C,UAAA2G,UAAA,CACA,OAAA3G,UAAA2G,UAAAC,UAAAl+C,MAAAm+C,OAAA,SAAA9gC,KACA,MAAAA,MAAAppB,UAAAopB,IAAA,IAAA+gC,aAAA,+CACA,GACA,CAKA,IAAAC,KAAApC,SAAAqC,cAAA,QACAD,KAAAE,YAAAv+C,KAGAq+C,KAAAtnB,MAAAynB,WAAA,MACAH,KAAAtnB,MAAA0nB,iBAAA,OACAJ,KAAAtnB,MAAA2nB,WAAA,MAGAzC,SAAAh0C,KAAA02C,YAAAN,MAGA,IAAAO,UAAAzM,OAAA0M,eACA,IAAAv+C,MAAA6xC,OAAA8J,SAAA6C,cACAF,UAAAG,kBACAz+C,MAAA0+C,WAAAX,MACAO,UAAAK,SAAA3+C,OAGA,IAAA4+C,QAAA,MACA,IACAA,QAAA/M,OAAA8J,SAAAkD,YAAA,OACA,OAAA9hC,KACA7d,QAAA65B,IAAA,QAAAhc,IACA,CAGAuhC,UAAAG,kBACA5M,OAAA8J,SAAAh0C,KAAAm3C,YAAAf,MAEA,OAAAa,QACAG,QAAAC,UACAD,QAAAE,OAAA,IAAAnB,aAAA,gDACA,C,yEClDA,IAAApK,MAAA,WACA,aAEA,SAAA/3C,YAAAhK,IAAAmO,MACA,OAAAA,MAAA,MAAAnO,eAAAmO,IACA,CAEA,IAAAo/C,UACA,IACAA,UAAAC,GACA,OAAAhsB,GAGA+rB,UAAA,YACA,CAEA,IAAAE,UACA,IACAA,UAAAC,GACA,OAAAlsB,GACAisB,UAAA,YACA,CAEA,IAAAE,cACA,IACAA,cAAAP,OACA,OAAA5rB,GACAmsB,cAAA,YACA,CAuBA,SAAA5L,MAAA/iC,OAAA4uC,SAAA1qB,MAAApjC,UAAA+tD,sBACA,UAAAD,WAAA,UACA1qB,MAAA0qB,SAAA1qB,MACApjC,UAAA8tD,SAAA9tD,UACA+tD,qBAAAD,SAAAC,qBACAD,0BACA,CAGA,IAAAE,WAAA,GACA,IAAAC,YAAA,GAEA,IAAAC,iBAAAjyB,QAAA,YAEA,UAAA6xB,UAAA,YACAA,SAAA,KAEA,UAAA1qB,OAAA,YACAA,MAAAtK,SAGA,SAAAq1B,OAAAjvC,OAAAkkB,OAEA,GAAAlkB,SAAA,KACA,YAEA,GAAAkkB,QAAA,EACA,OAAAlkB,OAEA,IAAA0pB,MACA,IAAA1jB,MACA,UAAAhG,QAAA,UACA,OAAAA,MACA,CAEA,GAAAhV,YAAAgV,OAAAuuC,WAAA,CACA7kB,MAAA,IAAA6kB,SACA,SAAAvjD,YAAAgV,OAAAyuC,WAAA,CACA/kB,MAAA,IAAA+kB,SACA,SAAAzjD,YAAAgV,OAAA2uC,eAAA,CACAjlB,MAAA,IAAAilB,eAAA,SAAAN,QAAAC,QACAtuC,OAAAumC,MAAA,SAAAtlD,OACAotD,QAAAY,OAAAhuD,MAAAijC,MAAA,GACA,aAAA9X,KACAkiC,OAAAW,OAAA7iC,IAAA8X,MAAA,GACA,GACA,GACA,SAAA6e,MAAAmM,UAAAlvC,QAAA,CACA0pB,MAAA,EACA,SAAAqZ,MAAAoM,WAAAnvC,QAAA,CACA0pB,MAAA,IAAA3kC,OAAAib,OAAA3U,OAAA+jD,iBAAApvC,SACA,GAAAA,OAAApL,UAAA80B,MAAA90B,UAAAoL,OAAApL,SACA,SAAAmuC,MAAAsM,SAAArvC,QAAA,CACA0pB,MAAA,IAAAjD,KAAAzmB,OAAAuf,UACA,SAAAyvB,WAAAjyB,OAAAD,SAAA9c,QAAA,CACA,GAAA+c,OAAAka,YAAA,CAEAvN,MAAA3M,OAAAka,YAAAj3B,OAAA1hB,OACA,MAEAorC,MAAA,IAAA3M,OAAA/c,OAAA1hB,OACA,CACA0hB,OAAA6hB,KAAA6H,OACA,OAAAA,KACA,SAAA1+B,YAAAgV,OAAA/hB,OAAA,CACAyrC,MAAAlpC,OAAAkB,OAAAse,OACA,MACA,UAAAlf,WAAA,aACAklB,MAAAxlB,OAAAY,eAAA4e,QACA0pB,MAAAlpC,OAAAkB,OAAAskB,MACA,KACA,CACA0jB,MAAAlpC,OAAAkB,OAAAZ,WACAklB,MAAAllB,SACA,CACA,CAEA,GAAA8tD,SAAA,CACA,IAAA55C,MAAA85C,WAAA5yC,QAAA8D,QAEA,GAAAhL,QAAA,GACA,OAAA+5C,YAAA/5C,MACA,CACA85C,WAAAngD,KAAAqR,QACA+uC,YAAApgD,KAAA+6B,MACA,CAEA,GAAA1+B,YAAAgV,OAAAuuC,WAAA,CACAvuC,OAAAimB,SAAA,SAAAhlC,MAAAP,KACA,IAAA4uD,SAAAL,OAAAvuD,IAAAwjC,MAAA,GACA,IAAAqrB,WAAAN,OAAAhuD,MAAAijC,MAAA,GACAwF,MAAAxkC,IAAAoqD,SAAAC,WACA,GACA,CACA,GAAAvkD,YAAAgV,OAAAyuC,WAAA,CACAzuC,OAAAimB,SAAA,SAAAhlC,OACA,IAAAuuD,WAAAP,OAAAhuD,MAAAijC,MAAA,GACAwF,MAAApB,IAAAknB,WACA,GACA,CAEA,QAAA7xD,KAAAqiB,OAAA,CACA,IAAAyvC,MACA,GAAAzpC,MAAA,CACAypC,MAAAjvD,OAAA2mC,yBAAAnhB,MAAAroB,EACA,CAEA,GAAA8xD,aAAAvqD,KAAA,MACA,QACA,CACAwkC,MAAA/rC,GAAAsxD,OAAAjvC,OAAAriB,GAAAumC,MAAA,EACA,CAEA,GAAA1jC,OAAAkvD,sBAAA,CACA,IAAAC,QAAAnvD,OAAAkvD,sBAAA1vC,QACA,QAAAriB,EAAA,EAAAA,EAAAgyD,QAAArxD,OAAAX,IAAA,CAGA,IAAAiyD,OAAAD,QAAAhyD,GACA,IAAAyC,WAAAI,OAAA2mC,yBAAAnnB,OAAA4vC,QACA,GAAAxvD,wBAAAC,aAAAwuD,qBAAA,CACA,QACA,CACAnlB,MAAAkmB,QAAAX,OAAAjvC,OAAA4vC,QAAA1rB,MAAA,GACA,IAAA9jC,WAAAC,WAAA,CACAG,OAAAC,eAAAipC,MAAAkmB,OAAA,CACAvvD,WAAA,OAEA,CACA,CACA,CAEA,GAAAwuD,qBAAA,CACA,IAAAgB,iBAAArvD,OAAA+lC,oBAAAvmB,QACA,QAAAriB,EAAA,EAAAA,EAAAkyD,iBAAAvxD,OAAAX,IAAA,CACA,IAAAmyD,aAAAD,iBAAAlyD,GACA,IAAAyC,WAAAI,OAAA2mC,yBAAAnnB,OAAA8vC,cACA,GAAA1vD,uBAAAC,WAAA,CACA,QACA,CACAqpC,MAAAomB,cAAAb,OAAAjvC,OAAA8vC,cAAA5rB,MAAA,GACA1jC,OAAAC,eAAAipC,MAAAomB,aAAA,CACAzvD,WAAA,OAEA,CACA,CAEA,OAAAqpC,KACA,CAEA,OAAAulB,OAAAjvC,OAAAkkB,MACA,CASA6e,MAAAgN,eAAA,SAAAA,eAAA/vC,QACA,GAAAA,SAAA,KACA,YAEA,IAAAniB,EAAA,aACAA,EAAAiD,UAAAkf,OACA,WAAAniB,CACA,EAIA,SAAAmyD,WAAAtyD,GACA,OAAA8C,OAAAM,UAAA2C,SAAApF,KAAAX,EACA,CACAqlD,MAAAiN,sBAEA,SAAAX,SAAA3xD,GACA,cAAAA,IAAA,UAAAsyD,WAAAtyD,KAAA,eACA,CACAqlD,MAAAsM,kBAEA,SAAAH,UAAAxxD,GACA,cAAAA,IAAA,UAAAsyD,WAAAtyD,KAAA,gBACA,CACAqlD,MAAAmM,oBAEA,SAAAC,WAAAzxD,GACA,cAAAA,IAAA,UAAAsyD,WAAAtyD,KAAA,iBACA,CACAqlD,MAAAoM,sBAEA,SAAAC,iBAAAtjC,IACA,IAAAnY,MAAA,GACA,GAAAmY,GAAAjoB,OAAA8P,OAAA,IACA,GAAAmY,GAAA4T,WAAA/rB,OAAA,IACA,GAAAmY,GAAA2T,UAAA9rB,OAAA,IACA,OAAAA,KACA,CACAovC,MAAAqM,kCAEA,OAAArM,KACA,CA5PA,GA8PA,UAAAxkD,SAAA,UAAAA,OAAAH,QAAA,CACAG,OAAAH,QAAA2kD,KACA,C,wGChQA,SAAAzlD,GAAA,iBAAAc,SAAA,iBAAAG,OAAAjB,EAAAQ,QAAA,4CAAAiG,eAAAC,IAAAD,OAAA,yBAAAzG,KAAA2yD,WAAA,aAAA3yD,GAAA,SAAA4yD,EAAAryD,OAAA6uD,OAAA3uD,GAAA,UAAAF,EAAA,EAAAA,CAAA,UAAAsyD,EAAAtyD,EAAAywB,EAAAtwB,GAAA,mBAAA4F,KAAA/F,EAAAuyD,eAAAhgC,EAAA9B,EAAA/hB,KAAA,gBAAA3I,KAAA5F,EAAA,UAAAqyD,EAAAxyD,EAAAywB,GAAA,IAAAtwB,EAAAH,EAAAyyD,UAAA,WAAAtyD,EAAAuyD,kBAAAvyD,EAAAwyD,UAAA3yD,EAAA4yD,UAAAniC,GAAAtwB,CAAA,KAAA0yD,EAAA,GAAA3yD,EAAA,cAAAqyB,EAAA9yB,EAAAqzD,IAAAC,EAAAtzD,EAAAuzD,OAAAvzD,EAAAwzD,SAAAC,cAAA,SAAAlzD,KAAAkzD,eAAA,EACAzzD,EAAA0zD,gBAAA,0BAAAnzD,SAAA6yD,GAAA,QAAApiC,EAAAsL,SAAA57B,EAAAmG,KAAA8sD,iBAAAv0B,EAAA,KAAAn/B,EAAAS,EAAAM,OAAA,KAAAf,MAAA,KAAA2zD,EAAAlzD,EAAAT,GAAAyE,OAAApE,EAAAI,EAAAT,GAAA4zD,KAAAD,EAAA3kD,MAAA+hB,IAAA1wB,EAAA2O,MAAA+hB,IAAA1wB,EAAAwyB,EAAA9B,EAAA,IAAAA,EAAA4iC,EAAA3kD,KAAA,MAAAmwB,EAAAv4B,KAAAitD,UAAAF,EAAAtzD,EAAAC,GAAA6+B,EAAA,MAAAv4B,KAAAktD,YAAAH,EAAAtzD,EAAAC,GAAA6+B,EAAA,cAAAA,EAAAv4B,KAAAitD,UAAAF,EAAAtzD,EAAAC,GAAAsG,KAAAktD,YAAAH,EAAAtzD,EAAAC,GAAA,KAAAP,EAAA0zD,gBAAA,wBAAAnzD,EAAAywB,EAAAtwB,SAAA0yD,GAAA,IAAAh0B,EAAAv4B,KAAA5G,EAAA8yD,EAAA3zB,EAAA7+B,GAAAqzD,EAAAx0B,EAAA40B,QAAAzzD,EAAA0O,MAAA,SAAA2kD,IAAAf,EAAAzzB,EAAA7+B,EAAAqzD,GAAA,KAAAtzD,EAAAI,EAAAqzD,aAAA9zD,EAAA8zD,YAAA,GAAAzzD,EAAA,KAAAk7C,EAAAjc,KAAAhL,IAAA,GACAvD,EAAAmC,IAAAnC,EAAA/hB,MAAA1O,EAAA0O,KAAA+hB,EAAA/hB,KAAA,EAAA+hB,EAAA/hB,KAAAmwB,EAAA60B,WAAA,GAAAzgC,EAAA,MAAA9yB,EAAAwzD,QAAA,IAAAxzD,EAAAwzD,QAAAC,EAAAzzD,EAAA0zD,mBAAA7zD,EAAA0O,MAAA+hB,EAAA/hB,KAAAmwB,EAAAi1B,WAAA,cAAA3zD,EAAA6xC,OAAA,SAAA+hB,EAAA,KAAAC,EAAAh0D,EAAA0O,KAAAslD,EAAA/Y,IAAA+Y,EAAA,KAAAr0D,EAAAk/B,EAAA40B,QAAAO,GAAAr0D,GAAA,IAAAA,EAAAkvD,OAAA3uD,GAAAP,IAAAkG,MAAA,EAAAwsD,EAAA1yD,IAAA,SAAAo0D,KAAAtzD,OAAAd,EAAAc,OAAAszD,EAAAp0D,CAAA,KAAAq0D,EAAAh0D,EAAA0O,KAAAslD,EAAA/Y,IAAA+Y,EAAA,CAAAr0D,EAAAk/B,EAAA40B,QAAAO,GAAA,IAAAp0D,EAAAm0D,EAAAtzD,OAAA,GAAAmzD,GAAA1zD,EAAA6F,KAAApG,KAAAkG,MAAA,EAAAjG,IAAAm0D,IAAAn0D,EAAAyyD,EAAA1yD,IAAAk/B,EAAAo1B,aAAAF,EAAAh0D,EAAAkzB,EAAAV,EAAAyhC,EAAA,GAAAzhC,EAAAyhC,EAAAp0D,GAAA,WAAAo0D,EAAAh0D,EAAA0O,KAAAslD,EAAA/Y,IAAA+Y,GAAAJ,GAAA1zD,EAAA6F,KAAA84B,EAAA40B,QAAAO,MAAAn1B,EAAAo1B,aAAAl0D,EAAAkzB,EAAAV,EAAAyhC,EAAA,eAAA7zD,EAAA+zD,mBACAx0D,EAAAw0D,kBAAA/zD,EAAAg0D,WAAA,EAAAt1B,EAAAu1B,aAAAp0D,EAAAywB,EAAAtwB,EAAA,KAAAV,EAAA0zD,gBAAA,yBAAAnzD,EAAAywB,EAAAtwB,SAAA0yD,GAAA,IAAAh0B,EAAAv4B,KAAA5G,EAAA8yD,EAAA3zB,EAAA7+B,GAAAqzD,EAAAlzD,EAAA+zD,mBAAAx0D,EAAAw0D,kBAAAn0D,EAAAI,EAAAk0D,iBAAA30D,EAAA20D,gBAAA,IAAAhB,IAAAtzD,GAAAI,EAAAqzD,aAAA9zD,EAAA8zD,cAAA,GAAArzD,EAAAg0D,WAAAt1B,EAAA20B,YAAAxzD,EAAAywB,EAAAtwB,QAAA,kBAAA4F,KAAA84B,EAAA0zB,eAAAhgC,EAAAvyB,EAAA0O,KAAA,UAAAusC,EAAAjc,KAAAhL,IAAAvD,EAAA/hB,KAAAmwB,EAAA60B,YAAAzY,GAAAj7C,EAAA0O,MAAA,GAAA+hB,EAAAmC,IAAA1yB,EAAA6F,KAAA84B,EAAA40B,QAAAxY,SAAA,IAAAhoB,EAAA,MAAA9yB,EAAAwzD,QAAA,IAAAxzD,EAAAwzD,QAAA3zD,EAAA0O,KAAAusC,GAAApc,EAAAi1B,WAAA,iBACA3zD,EAAAg0D,UAAA,KAAAP,EAAA1zD,EAAA6F,KAAA84B,EAAA40B,QAAAxY,IAAApc,EAAAo1B,aAAAhhC,EAAAlzB,EAAAwyB,EAAA0oB,IAAApc,EAAAo1B,aAAAZ,EAAApgC,EAAAV,EAAAvyB,EAAA0O,KAAA,QAAAqlD,EAAA5zD,EAAAm0D,kBAAA50D,EAAA40D,iBAAA,SAAAP,EAAA,QAAAC,EAAAh0D,EAAA0O,KAAA,EAAAslD,GAAA/Y,IAAA+Y,MAAA/Y,GAAA2Y,IAAA/0B,EAAAo1B,aAAAF,EAAA9gC,EAAAV,EAAAyhC,EAAA,SAAAJ,EAAA,GAAAb,EAAAl0B,EAAA01B,UAAA,MAAA9jC,GAAAsjC,GAAAl1B,EAAA21B,oBAAA31B,EAAAo1B,aAAAl0D,EAAA0wB,GAAAmjC,GAAA/0B,EAAA41B,aAAAV,EAAAtjC,EAAAoO,EAAA01B,UAAA,QAAA9jC,GAAAoO,EAAAo1B,aAAAZ,EAAArzD,EAAA,QAAAP,EAAA0zD,gBAAA,sBAAAnzD,EAAAywB,EAAAtwB,SAAA0yD,GAAA,IAAAh0B,EAAAv4B,KAAA5G,EAAA8yD,EAAA3zB,EAAA7+B,GAAAqzD,EAAAr0B,KAAAhL,IAAA,GAAAvD,EAAAmC,IAAAnC,EAAA/hB,MAAA1O,EAAA0O,KAAA+hB,EAAA/hB,KAAA+hB,EAAA/hB,KAAA,EAAAmwB,EAAA60B,YACA3zD,EAAAi/B,KAAAhL,IAAAh0B,EAAA0O,KAAA2kD,GAAApY,EAAA96C,EAAAqzD,aAAA9zD,EAAA8zD,YAAAvgC,EAAA,GAAA2gC,EAAA,MAAAzzD,EAAAwzD,QAAA,IAAAxzD,EAAAwzD,QAAAI,EAAA5zD,EAAA,GAAA86C,EAAA,SAAA+Y,EAAAj0D,EAAAi0D,GAAAX,IAAAW,EAAA,KAAAr0D,EAAAk/B,EAAA40B,QAAAO,GAAAp0D,EAAAD,EAAA0e,QAAA48B,IAAA,EAAAr7C,IAAA,UAAAmG,KAAA84B,EAAA0zB,eAAAhgC,EAAAyhC,EAAAp0D,EAAA,OAAAA,GAAA,UAAAA,GAAAM,EAAA6F,KAAApG,GAAA,MAAAQ,EAAA,MAAAP,GAAAM,EAAA6F,KAAApG,EAAAkG,MAAA,EAAAjG,IAAA,MAAAO,EAAA8yB,EAAAniB,KAAAnR,EAAA,CAAAk/B,EAAAi1B,WAAA,mBAAAxzD,EAAAP,EAAAO,GAAA+yD,IAAA/yD,EAAA,KAAAo0D,EAAAzhC,EAAA3yB,EAAAP,GAAA++B,EAAA41B,EAAAr2C,QAAA48B,GAAA0Z,EAAA71B,EAAAmc,EAAAx6C,OAAA,EAAAq+B,IAAA41B,EAAA7uD,MAAA8uD,IAAAf,EAAAnzD,SAAAmzD,IAAAe,GAAAf,EAAAnzD,QAAAszD,GAAA,EAAAl1B,EAAAo1B,aAAA,GAAA1hC,EAAAjyB,EAAAw+B,GAAAvM,EAAAjyB,EAAAq0D,IAAA,QAAAZ,EAAA,aAAAh1B,EAAA5+B,EAAA+zD,mBACAx0D,EAAAw0D,kBAAAU,EAAAz0D,EAAAk0D,iBAAA30D,EAAA20D,gBAAA,IAAAt1B,IAAA61B,EAAA,aAAAC,EAAA10D,EAAAm0D,kBAAA50D,EAAA40D,iBAAAQ,EAAAj2B,EAAA40B,QAAA1zD,GAAAg1D,EAAAD,EAAAz2C,QAAA0gB,GAAA,OAAAg2B,EAAA,aAAAC,EAAA3B,GAAAtzD,EAAA+0D,EAAAj2B,EAAA40B,QAAAJ,GAAA4B,EAAAD,EAAA32C,QAAAu2C,EAAAvB,GAAAtzD,EAAAg1D,EAAAh2B,EAAAt+B,OAAA,GAAAN,EAAAoyB,EAAAxyB,EAAAg1D,EAAA,GAAAr1D,EAAA6yB,EAAA8gC,EAAA4B,EAAA,UAAAA,IAAA,UAAAlvD,KAAA84B,EAAA0zB,eAAApyD,MAAA,UAAA4F,KAAA84B,EAAA0zB,eAAA7yD,MAAA,EAAAm/B,EAAAq2B,SAAA/0D,EAAAT,EAAA,MAAA2e,QAAAu2C,GAAA,SAAAl1D,EAAAo1D,EAAA1hD,YAAA2rB,EAAA/+B,EAAA4yB,IAAAzyB,GAAA,GAAAT,GAAA,EAAAo1D,EAAAjvD,MAAA,EAAA7F,EAAA4yB,IAAAvU,QAAAu2C,EAAAl1D,EAAAq/B,EAAAt+B,QAAA,OAAAf,IAAA,GAAAS,KAAAy0D,EAAAn0D,QAAAT,EAAA4yB,GAAA,SAAAzyB,EAAA60D,EAAA32C,QAAAu2C,EACAnkC,EAAAmC,IAAA5yB,EAAAg1D,EAAAnvD,MAAA4qB,EAAAmC,IAAAxf,YAAA2rB,EAAA5+B,EAAAswB,EAAAmC,IAAAlzB,GAAA,GAAAS,IAAA,GAAAH,GAAA,EAAAywB,EAAAmC,GAAA5yB,EAAA,OAAAG,IAAA,GAAAT,MAAA+wB,EAAAmC,GAAA,SAAAiM,EAAAi1B,WAAA,WAAAj1B,EAAAo1B,aAAA,GAAA1hC,EAAA8gC,EAAA4B,GAAArB,GAAAoB,EAAAnvD,MAAAovD,EAAArB,EAAAnzD,OAAAw0D,IAAArB,IAAAnzD,OAAA,IAAA8xB,EAAA8gC,EAAA4B,EAAAL,EAAAn0D,SAAA,IAAAH,EAAAy0D,EAAAh2B,EAAAt+B,OAAAmzD,GAAAkB,EAAAjvD,MAAAvF,IAAAszD,EAAAnzD,SAAAmzD,IAAAtzD,GAAAszD,EAAAnzD,QAAAo+B,EAAAo1B,aAAA,GAAA1hC,EAAAxyB,EAAAg1D,GAAAxiC,EAAAxyB,EAAAO,IAAA,GAAAu0D,EAAA,IAAAv0D,EAAAP,EAAA,EAAAO,GAAA+yD,IAAA/yD,EAAA,KAAAo0D,EAAA71B,EAAA40B,QAAAnzD,GAAAw+B,EAAA41B,EAAAr2C,QAAAw2C,GAAA,OAAA/1B,IAAA5+B,EAAA6F,KAAA2uD,EAAA7uD,MAAA,EAAAi5B,IAAA,KAAA61B,EAAA71B,EAAA+1B,EAAAp0D,OAAAmzD,GAAAc,EAAA7uD,MAAA8uD,IAAAf,EAAAnzD,SAAAmzD,IAAAe,GAAAf,EAAAnzD,QAAAo+B,EAAAo1B,aAAA,GAAA1hC,EAAAjyB,EAAAw+B,GAAAvM,EAAAjyB,EAAAq0D,GAAA,oB,qECPA,SAAA1Z,GAAA,iBAAA16C,SAAA,iBAAAG,OAAAu6C,EAAAh7C,QAAA,4CAAAiG,eAAAC,IAAAD,OAAA,yBAAA+0C,KAAAmX,WAAA,aAAAnX,GAAA,SAAA8Y,EAAA5zD,EAAA0+B,GAAA,QAAAtM,EAAA,EAAA7yB,EAAAS,EAAAM,OAAA8xB,EAAA7yB,IAAA6yB,EAAAsM,EAAA1+B,EAAAoyB,GAAA,UAAA3yB,EAAAO,EAAA0+B,EAAAtM,EAAA7yB,GAAA,IAAAM,EAAAG,EAAAo0D,YAAA9jC,EAAA8B,EAAApyB,EAAAH,GAAA,6BAAA+F,KAAA0qB,EAAAnf,MAAA,KAAA+hD,EAAApY,EAAA0X,UAAAxyD,EAAAsyD,UAAAhiC,EAAAuC,OAAA,YAAAqgC,EAAA8B,KAAAC,WAAA,CAAA3kC,EAAAuC,MAAAqgC,EAAArgC,MAAA,YAAAjtB,KAAA0qB,EAAA3nB,QAAA2nB,EAAA9iB,IAAA3N,EAAA4yB,KAAAnC,EAAA9iB,IAAA3N,EAAA4yB,GAAAnC,EAAA3nB,OAAA2nB,EAAA3nB,OAAAjD,MAAA,EACA7F,EAAA4yB,GAAAnC,EAAA1hB,QAAA0hB,EAAA,CAAA1hB,MAAA/O,EAAA4yB,GAAAjlB,IAAA3N,EAAA4yB,GAAA9pB,OAAA,GAAAkqB,MAAAvC,EAAAuC,MAAA1hB,KAAA,KAAAmf,EAAA3nB,OAAA,qBAAAuqD,EAAA5iC,EAAA,YAAA4iC,EAAA/hD,MAAA,CAAA+hD,EAAA9gC,EAAApyB,EAAAV,EAAAO,EAAA0O,KAAA2kD,EAAAtkD,QAAA,QAAAskD,EAAAvqD,OAAA,OAAAuqD,EAAA9gC,EAAApyB,EAAAV,EAAAO,EAAA0O,KAAA2kD,EAAAtkD,QAAA,IAAAzO,EAAA,IAAAA,EAAA,GAAAA,EAAAwQ,KAAAuiD,EAAA,QAAA/5C,KAAApZ,EAAAuwB,EAAAnwB,EAAAu+B,EAAAn/B,GAAAyE,KAAA1E,EAAAO,EAAA0O,KAAA+hB,EAAA1hB,OAAAukD,GAAA7zD,EAAAO,EAAA0O,KAAA+hB,EAAA9iB,KAAA,YAAAslB,EAAA9yB,EAAA0+B,GAAA1+B,IAAAk1D,WAAAx2B,KAAAjM,IAAAzyB,EAAA4O,MAAA,QAAA5O,EAAA2I,OAAAsO,OAAA,IAAAjX,EAAAwN,IAAAxN,EAAA4O,MAAA5O,EAAA2I,OAAA,IAAA3I,EAAAmR,KAAA,0BAAAvL,KAAA5F,EAAA2I,UAAA3I,EAAAmR,KAAA,WAAAnR,EAAA4O,QAAA5O,EAAA2I,OAAA3I,EAAA2I,OAAAwF,QAAA,KACA,YAAAnO,CAAA,UAAAD,EAAAC,EAAA0+B,EAAAtM,EAAA7yB,GAAA,SAAAM,EAAAg0D,GAAA,IAAAJ,EAAA,GAAAA,EAAA,GAAAI,EAAA5gD,YAAA9S,EAAA,IAAAH,EAAA,GAAAqB,MAAAyB,UAAAob,QAAAu1C,GAAA,GAAAP,EAAAh1C,QAAA21C,OAAA,KAAAJ,EAAAP,EAAA5yD,OAAAmzD,KAAA,GAAAP,EAAAO,KAAAI,EAAA,CAAAJ,GAAA,QAAAzzD,CAAA,CAAAyzD,GAAA,EAAAA,IAAA,CAAAA,GAAAP,EAAAviD,KAAAkjD,EAAA,UAAAvjC,EAAAujC,GAAA,iBAAAA,EAAAD,EAAAY,EAAA30D,GAAAg0D,aAAAxyD,MAAAuyD,EAAAj1B,EAAA9+B,GAAAg0D,aAAAvnB,UAAAsnB,EAAAh1B,EAAA/+B,GAAA,GAAA2C,OAAA+lC,qBAAA/lC,OAAAY,eAAA,KAAAywD,IAAArxD,OAAAY,eAAAywD,GAAArxD,OAAA+lC,oBAAAsrB,GAAA5rB,QAAApoC,QAAA,QAAA4zD,KAAAI,EAAAh0D,EAAA4zD,EAAA,KAAAP,EAAA,GAAA/yD,EAAAH,EAAA2I,OAAAnJ,EAAAD,KAAA41D,aAAAjS,OAAA,GAAAxkB,GACAA,EAAAp+B,OAAA,CAAAN,EAAA0+B,EAAAhjB,MAAA,IAAA9b,EAAAI,EAAAmR,MAAA,IAAAnR,EAAAmR,KAAA+M,QAAA,aAAA3e,KAAA61D,oBAAAx1D,EAAAL,EAAA61D,kBAAAp1D,EAAA2I,SAAApJ,IAAA,IAAAA,EAAA81D,iBAAAz1D,KAAAJ,EAAAQ,EAAA2I,UAAA,UAAA3I,EAAAmR,KAAAvR,EAAA,WAAAI,EAAAmR,KAAAvR,EAAA,cAAAI,EAAAmR,OAAA,MAAA3R,EAAA81D,QAAA,KAAAt1D,EAAA2I,QAAA,UAAA3I,EAAA2I,QAAA,mBAAAnJ,EAAA81D,OAAA,MAAA91D,EAAAglC,GAAA,KAAAxkC,EAAA2I,QAAA,mBAAAnJ,EAAAglC,IAAA5kC,EAAAJ,EAAAglC,KAAA5kC,EAAAJ,EAAA81D,UAAA,WAAA11D,GAAA8+B,EAAAp+B,QAAAV,IAAA8+B,EAAAhjB,MAAA/S,QAAA,MAAA/I,GAAA0wB,EAAA1wB,EAAA,UAAA8+B,EAAA1+B,EAAA6yB,MAAA0iC,UAAA72B,MAAAjxB,KAAA5N,EAAA6+B,EAAA/4B,MAAA,IAAA/F,EAAAI,EAAA6yB,MAAApf,QAAA7T,IACAA,EAAA0pC,KAAA,IAAA5K,EAAA9+B,EAAA41D,KAAA92B,MAAAjxB,KAAA5N,EAAA6+B,EAAA/4B,MAAA,IAAA+4B,EAAA1+B,EAAA6yB,MAAA4iC,WAAA/2B,MAAAjxB,KAAA5N,EAAA6+B,EAAA/4B,MAAA,GAAApG,GAAA,MAAAA,EAAA61D,kBAAA,QAAAX,KAAAl1D,EAAA61D,kBAAAv1D,EAAA40D,GAAAl1D,IAAA,IAAAA,EAAA81D,gBAAA/kC,EAAA9wB,GAAAo0D,EAAAxhC,EAAAvyB,EAAA,QAAAqzD,CAAA,KAAA5zD,EAAAw7C,EAAA6X,IAAA7X,EAAA4a,eAAA,8BAAA11D,EAAA0+B,GAAA,OAAAj/B,EAAAO,EAAAu0D,GAAA,SAAAniC,EAAA7yB,GAAA,OAAA6yB,EAAA8iC,WAAA31D,EAAA,GAAAm/B,EAAA,IAAAoc,EAAA4a,eAAA,gCAAA11D,EAAA0+B,GAAA,OAAAj/B,EAAAO,EAAA80D,EAAAhiC,EAAA4L,EAAA,QAAA81B,EAAA,iJAAArhD,MAAA,KACAwrB,EAAA,4IAAAxrB,MAAA,KAAAyrB,EAAA,oCAAA21B,EAAA,4NAAAphD,MAAA,KAAA2hD,EAAA,gMAAA3hD,MAAA,O,qECLA,SAAA0gD,GAAA,iBAAAzzD,SAAA,iBAAAG,OAAAszD,EAAA/zD,QAAA,4CAAAiG,eAAAC,IAAAD,OAAA,yBAAA8tD,KAAA5B,WAAA,aAAA4B,GAAA,SAAAiB,EAAA90D,EAAA0+B,GAAAv4B,KAAAwvD,GAAA31D,EAAAmG,KAAAoC,QAAAm2B,EAAAv4B,KAAAyvD,OAAA,KAAAzvD,KAAA0vD,KAAA1vD,KAAA2vD,SAAA,EAAA3vD,KAAAuM,SAAAvM,KAAAwvD,GAAAvB,UAAA,SAAAjuD,KAAA4vD,SAAA5vD,KAAAwvD,GAAArC,QAAAntD,KAAAuM,SAAAnE,MAAAjO,OAAA6F,KAAAwvD,GAAA/F,eAAAtvD,OAAA,GAAA6F,KAAAoC,QAAAytD,uBAAA,KAAAn2D,EAAAsG,KAAAnG,EAAAmjD,GAAA,iBAAAh9C,KAAA8vD,aACA,WAAAp2D,EAAAq2D,gBAAA,aAAAtD,EAAA5yD,EAAA0+B,GAAA,SAAA7+B,EAAAP,EAAA4zD,GAAA,IAAApY,EAAA,iBAAAoY,EAAA,SAAAO,GAAA,OAAAP,EAAAO,EAAA/0B,EAAA,EAAApO,EAAAxiB,eAAAolD,GAAA5iC,EAAA4iC,KAAA/yD,EAAAb,GAAAw7C,CAAA,KAAAxqB,EAAA,CAAA6lC,GAAA,WAAAz3B,EAAA03B,WAAA,IAAAC,KAAA,WAAA33B,EAAA03B,UAAA,IAAAE,OAAA,WAAA53B,EAAA03B,WAAA13B,EAAA63B,WAAA,OAAAC,SAAA,WAAA93B,EAAA03B,UAAA13B,EAAA63B,WAAA,OAAAE,KAAA,WAAA/3B,EAAAg4B,SAAA,IAAAC,IAAA,WAAAj4B,EAAAg4B,SAAAh4B,EAAAp+B,OAAA,IAAAs2D,MAAAl4B,EAAAm4B,KAAAC,IAAAp4B,EAAAm4B,KAAAE,IAAAr4B,EAAAvZ,OAAA,MAAAvf,KAAAyiD,UAAA2O,YAAA1mC,EAAA,qBAAAoO,EAAA03B,WAAA,IACA9lC,EAAA,qBAAAoO,EAAA03B,UAAA,SAAA72D,EAAAS,EAAAuI,QAAA0uD,WAAA92D,EAAAZ,EAAA,GAAA+wB,EAAA,GAAA/wB,EAAA,QAAAK,KAAAL,IAAAuO,eAAAlO,IAAAC,EAAAD,EAAAL,EAAAK,IAAA,GAAAI,IAAAuI,QAAA2uD,UAAA,IAAAt3D,KAAAI,IAAA8N,eAAAlO,IAAAC,EAAAD,EAAAI,EAAAJ,IAAA,OAAAO,CAAA,UAAAw0D,EAAA30D,EAAA0+B,GAAA,KAAAA,MAAA1+B,GAAA,WAAA0+B,EAAAqvB,SAAAnoB,eAAAlH,EAAA4S,YAAAtxC,EAAA,OAAA0+B,MAAA4S,UAAA,WAAAsjB,EAAA50D,EAAA0+B,GAAAv4B,KAAAoY,GAAA,eAAAsgB,KAAAsW,MAAAtW,KAAAoW,OAAA,MAAA9uC,KAAAgxD,WAAAn3D,EAAAmG,KAAAiqB,KAAAsO,EAAAv4B,KAAAixD,QAAA,MAAAv3D,EAAAsG,KAAAmqB,EAAAtwB,EAAA21D,GAAAp2D,EAAA+wB,EAAA+mC,gBAAAC,cAAAn3D,EAAAZ,EAAAg4D,aAAAh4D,EAAAi4D,aACA53D,EAAAuG,KAAAsxD,MAAAl4D,EAAA8vD,cAAA,MAAAzvD,EAAA83D,aAAA,kBAAA93D,EAAA83D,aAAA,wBAAA93D,EAAA2e,GAAApY,KAAAoY,GAAA3e,EAAA+3D,UAAA,oBAAA33D,EAAA21D,GAAAptD,QAAAqvD,MAAAzxD,KAAA0xD,aAAAn5B,EAAAm5B,cAAA,UAAAv4D,EAAAo/B,EAAAvlB,KAAA+5C,EAAA,EAAAA,EAAA5zD,EAAAgB,SAAA4yD,EAAA,KAAApY,EAAAl7C,EAAA8vD,YAAAnwD,EAAA8vD,cAAA,OAAAoE,EAAAn0D,EAAA4zD,GAAAU,EAAA,mBAAAV,GAAA/sD,KAAA0xD,aAAA,oCAAApE,EAAAkE,YAAA/D,EAAAH,EAAAkE,UAAA,IAAA/D,GAAA9Y,EAAA6c,UAAA/D,EAAAV,GAAA/sD,KAAA0xD,cAAA/c,EAAA4c,aAAA,wBAAA5c,EAAAv8B,GAAApY,KAAAoY,GAAA,IAAA20C,EACApY,EAAA4c,aAAA,iBAAAjE,EAAAnN,OAAAmN,EAAAnN,OAAAxL,EAAApc,EAAA+0B,GAAA3Y,EAAA4U,YAAAnwD,EAAAu4D,eAAArE,EAAAsE,cAAA,iBAAAtE,MAAA1iD,QAAA+pC,EAAAkd,OAAA9E,CAAA,KAAA1zD,EAAAQ,EAAAuI,QAAA0vD,WAAA14D,EAAAyZ,KAAAk6C,EAAA5iC,EAAA4nC,aAAAl4D,EAAAuI,QAAA4vD,cAAAz5B,EAAA16B,KAAA,UAAAwwD,EAAAtB,EAAA10C,KAAAmgB,EAAAu0B,EAAAkF,OAAA1F,GAAA,EAAAkB,EAAA9Y,EAAA,KAAAt7C,IAAAD,EAAAyZ,KAAA,CAAAy6C,GAAA,oCAAAv1C,QAAA/d,EAAAk4D,iBAAA74D,GAAAw9B,UAAAx9B,IAAA84D,aAAA1E,EAAAH,EAAA8E,wBAAA,IAAA94D,EAAAF,EAAAyZ,KAAAu/C,wBAAAzd,EAAA8Y,EAAAp1C,KAAA/e,EAAA+e,KAAAi1C,EAAA+E,WAAA5E,IAAA6E,IAAAh5D,EAAAg5D,IAAAhF,EAAAiF,SAAA,CAAA94D,EAAAkoC,MAAAtpB,KACAg2C,EAAA1Z,EAAA,KAAAl7C,EAAAkoC,MAAA2wB,IAAA95B,EAAAi1B,EAAA,KAAAH,EAAAtzD,EAAAw4D,YAAA95B,KAAA/K,IAAAv0B,EAAAyZ,KAAA4/C,YAAAr5D,EAAAs5D,gBAAAD,aAAAn5D,EAAAU,EAAA24D,aAAAj6B,KAAA/K,IAAAv0B,EAAAyZ,KAAA+/C,aAAAx5D,EAAAs5D,gBAAAE,cAAAv5D,EAAAkwD,YAAA9vD,GAAA0wB,EAAA+mC,gBAAAK,aAAA,4BAAApnC,EAAA+mC,gBAAAK,aAAA,YAAAvxD,KAAAoY,IAAA+R,EAAA+mC,gBAAAK,aAAA,wBAAAvxD,KAAAoY,GAAA,IAAApY,KAAA0xD,cAAAr4D,EAAAQ,EAAAuI,QAAAywD,cAAAp5D,EAAA24D,wBAAA,IAAAU,QAAA,IAAApE,EAAA70D,EAAAuI,QAAA2wD,oBAAAt5D,EAAAu5D,aACAv5D,EAAAw5D,aAAA,KAAAr5D,EAAAykD,YAAA,WAAAzkD,EAAAuwB,EAAA+oC,eAAA,SAAA75D,EAAA44D,OAAA34D,EAAA,KAAAm/B,EAAAp/B,EAAA44D,OAAA54D,EAAAi5D,IAAAhE,EAAAj1D,EAAAi5D,KAAAvF,EAAAkF,OAAAlF,EAAAuF,KAAA,EAAAh5D,EAAAD,EAAAi5D,IAAAhE,GAAA71B,EAAA61B,IAAA70D,EAAAkoC,MAAAwxB,QAAA16B,EAAA61B,GAAA,MAAA70D,EAAAkoC,MAAA2wB,KAAA95B,EAAAu0B,EAAAuF,IAAA75B,GAAAg1B,EAAA,KAAAlB,GAAA,GAAA9yD,EAAAkoC,MAAAwxB,OAAA75D,EAAAD,EAAAi5D,IAAA,OAAA7E,EAAAp0D,EAAAif,MAAAg1C,EAAAoB,IAAAjB,GAAAtjC,EAAAipC,QAAAC,gBAAA,EAAA5F,IAAAp0D,EAAAif,MAAAjf,EAAAgf,KAAAi1C,IAAA7zD,EAAAkoC,MAAA2xB,MAAAhG,EAAA,OAAAG,GAAAp0D,EAAAif,MAAAjf,EAAAgf,KAAAi1C,GAAA7zD,EAAAkoC,MAAAtpB,MAAAg2C,EAAA31B,KAAA/K,IAAAo/B,EAAA10C,KAAAo1C,EAAA9Y,EAAA,aAAA+Z,EAAA,IAAA3B,EAAAtzD,EAAA85D,WAAAxG,MAAAyG,YAAAzG,EAAAprB,MAAA8xB,aAAAtpC,EAAAipC,QAAAC,eAAA,KAAAlpC,EAAAupC,UAAA1zD,KAAA2zD,OACAlH,EAAA5yD,EAAA,CAAAo2D,UAAA,SAAAhkC,EAAAU,GAAAjzB,EAAAk6D,aAAAl6D,EAAAg4D,aAAAzlC,EAAAU,EAAA,EAAA4jC,SAAA,SAAAtkC,GAAAvyB,EAAAk6D,aAAA3nC,EAAA,EAAAmkC,SAAA,kBAAA12D,EAAAm6D,cAAA,EAAA15D,OAAAhB,EAAAgB,OAAA6kB,MAAA,WAAAnlB,EAAAmlB,OAAA,EAAA0xC,KAAA,WAAAh3D,EAAAg3D,MAAA,EAAAzmC,KAAAsO,KAAA,GAAA1+B,EAAAuI,QAAA0xD,eAAA,KAAA5H,EAAA/hC,EAAA6yB,GAAA,OAAAh9C,KAAA+zD,OAAA,WAAA7H,EAAA7N,YAAA,WAAAxkD,EAAAmlB,OAAA,UAAAmL,EAAA6yB,GAAA,QAAAh9C,KAAAg0D,QAAA,WAAAC,aAAA/H,EAAA,GAAA/hC,EAAA6yB,GAAA,SAAAh9C,KAAAk0D,SAAA,eAAAjoC,EAAA9B,EAAA+oC,gBAAAvmC,EAAAxC,EAAAgqC,oBAAA/B,wBACAx4D,MAAAuwB,EAAA+oC,iBAAA,IAAA3E,EAAA/1B,EAAA5+B,EAAA04D,IAAArmC,EAAAqmC,IAAAlE,EAAAG,GAAAv0D,EAAAo6D,cAAAh7D,EAAAs5D,iBAAAt5D,EAAAyZ,MAAA0/C,WAAAhG,IAAA6B,GAAA30D,EAAAm5D,cAAA,GAAAxE,GAAAzhC,EAAA2lC,KAAAlE,GAAAzhC,EAAAslC,OAAA,OAAAp4D,EAAAmlB,QAAAvlB,EAAAkoC,MAAA2wB,IAAA/D,EAAA,KAAA90D,EAAAkoC,MAAAtpB,KAAAg2C,EAAAz0D,EAAAye,KAAA4T,EAAA5T,KAAA,OAAAq1C,EAAA1Q,GAAAvjD,EAAA,qBAAAwyB,MAAAuiC,EAAA/0D,EAAAwyB,EAAAlwB,QAAAkwB,EAAAooC,cAAA,MAAApoC,EAAA4lC,SAAAn4D,EAAAk6D,aAAA3nC,EAAA4lC,QAAAn4D,EAAAg3D,OAAA,IAAAhD,EAAA1Q,GAAAvjD,EAAA,kBAAAwyB,MAAAuiC,EAAA/0D,EAAAwyB,EAAAlwB,QAAAkwB,EAAAooC,cAAA,MAAApoC,EAAA4lC,SAAAn4D,EAAAk6D,aAAA3nC,EAAA4lC,QAAAh4D,EAAAuI,QAAAkyD,uBAAA56D,EAAAg3D,OAAA,IAAAhD,EAAA1Q,GAAAvjD,EAAA,aACA,WAAA4kD,YAAA,WAAAl0B,EAAAoqC,OAAA,UAAAxH,EAAA/sD,KAAAw0D,uBAAA,IAAAzH,EAAAlvD,MAAA,IAAAkvD,EAAAC,IAAAhtD,KAAAy0D,iBAAA/G,EAAAgH,OAAAn8B,EAAA,SAAAp/B,EAAA6G,KAAA0xD,cAAAj4D,EAAAk7D,WAAA30D,KAAA0xD,eAAA,kBAAAkD,EAAA/6D,EAAA0+B,GAAA,IAAA1+B,EAAAq0D,oBAAA,OAAA31B,EAAA1+B,EAAA,WAAAH,EAAA,EAAAA,EAAA6+B,EAAAp+B,OAAAT,IAAA6+B,EAAA7+B,GAAAm7D,mBAAAh7D,EAAA2Q,KAAA+tB,EAAA7+B,IAAA,OAAAG,CAAA,UAAAkyD,EAAAlyD,EAAA0+B,EAAA7+B,EAAAywB,GAAAtwB,EAAAiS,MAAAjS,EAAA0+B,EAAApO,EAAAzwB,IAAAG,IAAA0+B,EAAA7+B,KAAAG,EAAAuoD,KAAAvoD,EAAAuoD,KAAAj4B,KAAAtwB,EAAA,CAAA6zD,EAAAoH,SAAA,SAAAj7D,EAAA0+B,EAAA7+B,GAAA,IAAA6+B,EAAA,OAAA1+B,EAAAi7D,SAAAp7D,QAAAoS,QAAAysB,EAAAzsB,OAAA,GAAAysB,EAAA,CAAA75B,KAAA65B,GAAA,GAAA7+B,EAAA,QAAAywB,KAAAzwB,EAAA6+B,EAAApO,GACAzwB,EAAAywB,GAAA,OAAAtwB,EAAAi7D,SAAAv8B,EAAA,EAAAm1B,EAAAb,gBAAA,qBAAAhzD,GAAA,IAAA0+B,EAAAv4B,KAAAiuD,UAAA,SAAAv0D,EAAAsG,KAAAoC,QAAA2yD,YAAA5qC,EAAA,GAAA/wB,EAAA,IAAAA,KAAA4yD,EAAA7hC,EAAA/wB,GAAA4yD,EAAA5yD,GAAA,GAAAM,EAAA,IAAAN,KAAAM,OAAA,IAAAA,EAAAN,KAAA+wB,EAAA/wB,GAAAM,EAAAN,IAAA,GAAAS,EAAA,IAAAT,KAAAS,OAAA,IAAAA,EAAAT,KAAA+wB,EAAA/wB,GAAAS,EAAAT,IAAA+wB,EAAAzrB,KAAAwrD,UAAA//B,EAAAzrB,KAAAyrB,EAAAzrB,KAAAwrD,QAAAlqD,KAAAu4B,IAAA1+B,EAAAswB,EAAAoO,EAAAv4B,KAAA8sD,iBAAA,OAAAv0B,EAAAp+B,QAAA,IAAA6F,KAAAkuD,oBAAA,KAAAr0D,EAAA6E,KAAAm2D,kBAAA,WAAAz7D,EAAA,EAAAA,EAAAm/B,EAAAp+B,OAAAf,IAAA,GAAAm/B,EAAAn/B,GAAA47D,KAAA5sD,MAAAmwB,EAAAn/B,GAAA67D,OAAA7sD,KAAA,OAAApI,KAAA0sB,MAAAwoC,kBAAAl1D,KAAA0sB,MAAAwoC,iBAAAl2C,QACAuZ,EAAAv4B,KAAA0sB,MAAAwoC,iBAAA,IAAAvG,EAAA3uD,KAAAnG,GAAA0+B,EAAAn2B,QAAA1D,OAAAgvD,EAAAgH,OAAA10D,KAAA,kBAAAA,MAAAu4B,EAAArgB,QAAA,QAAAw1C,EAAAb,gBAAA,wBAAA7sD,KAAA0sB,MAAAwoC,kBAAAl1D,KAAA0sB,MAAAwoC,iBAAAl2C,OAAA,QAAAm2C,EAAApY,OAAAqY,uBAAA,SAAAv7D,GAAA,OAAAwkD,WAAAxkD,EAAA,SAAAw7D,EAAAtY,OAAAuY,sBAAArB,aAAAtF,EAAAhyD,UAAA,CAAAqiB,MAAA,WAAAhf,KAAAu1D,WAAAv1D,KAAA0vD,KAAA1vD,KAAAwvD,GAAA9iC,MAAAwoC,iBAAA,KAAAl1D,KAAAoC,QAAAytD,wBAAA7vD,KAAAwvD,GAAAgG,IAAA,iBACAx1D,KAAA8vD,cAAA9vD,KAAAyvD,QAAAzvD,KAAAiqB,MAAAyjC,EAAAgH,OAAA10D,KAAAiqB,KAAA,SAAAjqB,KAAAyvD,QAAAzvD,KAAAyvD,OAAAzwC,QAAA0uC,EAAAgH,OAAA10D,KAAAwvD,GAAA,gBAAAxvD,KAAAwvD,IAAA,EAAA+F,OAAA,kBAAAv1D,KAAAwvD,GAAA9iC,MAAAwoC,kBAAAl1D,IAAA,EAAA0wD,KAAA,SAAA72D,EAAA0+B,GAAA,IAAA7+B,EAAAG,EAAAmZ,KAAAulB,GAAApO,EAAAnqB,UAAAwvD,GAAAhC,WAAA,WAAA9zD,EAAAgF,KAAAhF,EAAAgF,KAAAyrB,EAAAqlC,GAAA31D,EAAAH,GAAAywB,EAAAqlC,GAAA7B,aAAA,iBAAAj0D,MAAAkR,KAAAlR,EAAAmE,MAAAhE,EAAAgE,KAAAnE,EAAAszD,IAAAnzD,EAAAmzD,GAAA,YAAAU,EAAAgH,OAAA76D,EAAA,OAAAH,GAAAywB,EAAAqlC,GAAAiG,gBAAA,IAAAz1D,KAAAoC,QAAAszD,aAAA11D,KAAAgf,OAAA,EAAA+wC,eAAA,WAAA/vD,KAAA2vD,WACA0F,EAAAr1D,KAAA2vD,UAAA3vD,KAAA2vD,SAAA,OAAA91D,EAAAmG,KAAAuM,SAAAvM,KAAAiqB,OAAApwB,EAAAmG,KAAAiqB,KAAApsB,MAAA,IAAA06B,EAAAv4B,KAAAwvD,GAAAvB,YAAAv0D,EAAAsG,KAAAwvD,GAAArC,QAAA50B,EAAAnwB,MAAA,GAAAmwB,EAAAnwB,MAAApI,KAAAuM,SAAAnE,MAAA1O,EAAAS,OAAAo+B,EAAAjM,IAAAtsB,KAAA4vD,SAAA5vD,KAAAuM,SAAA+f,IAAAiM,EAAAjM,GAAAzyB,EAAAyyB,IAAAtsB,KAAAwvD,GAAAtB,sBAAA31B,EAAAjM,IAAAtsB,KAAAoC,QAAAuzD,gBAAAl2D,KAAA/F,EAAAoX,OAAAynB,EAAAjM,GAAA,IAAAtsB,KAAAgf,YAAA,KAAAmL,EAAAnqB,UAAA2vD,SAAAwF,GAAA,WAAAhrC,EAAAjS,QAAA,IAAAlY,KAAAyvD,QAAAzvD,KAAAyvD,OAAAmG,SAAA,GAAA19C,OAAA,SAAAre,GAAA,SAAAmG,KAAA0vD,KAAA,KAAAn3B,EAAAv4B,KAAAtG,IAAAsG,KAAA0vD,KAAA3D,EAAA/rD,KAAAoC,QAAA1D,KACAsB,KAAAwvD,GAAAxvD,KAAAoC,SAAA,SAAA+nB,GAAAoO,EAAAm3B,MAAAh2D,GAAA6+B,EAAAs9B,aAAA1rC,EAAAtwB,EAAA,MAAAg8D,aAAA,SAAAh8D,EAAA0+B,GAAAv4B,KAAAiqB,MAAAyjC,EAAAgH,OAAA10D,KAAAiqB,KAAA,UAAAsO,EAAAv4B,KAAAyvD,QAAAzvD,KAAAyvD,OAAAwB,QAAA14B,GAAAv4B,KAAAoC,QAAA0zD,eAAA91D,KAAAyvD,QAAAzvD,KAAAyvD,OAAAzwC,SAAAhf,KAAAiqB,KAAApwB,MAAAmZ,KAAA7Y,SAAAo+B,GAAA,GAAA1+B,EAAAmZ,KAAA7Y,OAAA6F,KAAA0wD,KAAA72D,EAAA,IAAAmG,KAAAyvD,OAAA,IAAAhB,EAAAzuD,KAAAnG,GAAA6zD,EAAAgH,OAAA76D,EAAA,aAAA40D,EAAA9xD,UAAA,CAAAqiB,MAAA,cAAAhf,KAAAgxD,WAAAvB,QAAAzvD,KAAA,CAAAA,KAAAgxD,WAAAvB,OAAA,KAAAzvD,KAAAsxD,MAAAnmB,YAAAnrC,KAAAsxD,MAAAnmB,WAAA6e,YAAAhqD,KAAAsxD,OACAtxD,KAAAgxD,WAAAxB,GAAAuG,aAAA/1D,KAAA2zD,QAAA,IAAA95D,EAAAmG,KAAAgxD,WAAAxB,GAAA0B,gBAAAr3D,EAAAm8D,gBAAA,yBAAAn8D,EAAAm8D,gBAAA,aAAAn8D,EAAAmG,KAAAgxD,WAAAxB,GAAAxvD,KAAAgxD,WAAA5uD,QAAA0xD,iBAAAj6D,EAAA27D,IAAA,OAAAx1D,KAAA+zD,QAAAl6D,EAAA27D,IAAA,QAAAx1D,KAAAg0D,UAAAn6D,EAAA27D,IAAA,SAAAx1D,KAAAk0D,SAAA,GAAA0B,QAAA,WAAA51D,KAAAgxD,WAAAxB,GAAAuG,aAAA/1D,KAAA2zD,QAAA,IAAA95D,EAAAmG,UAAA2zD,OAAA,CAAAlD,MAAA,WAAA52D,EAAAo3D,QAAA,IAAAjxD,KAAAgxD,WAAAxB,GAAAkE,UAAA1zD,KAAA2zD,OAAA,EAAAjD,KAAA,WAAA1wD,KAAAgxD,WAAAN,KAAA1wD,KAAAiqB,KACAjqB,KAAA0xD,aAAA,EAAAkC,aAAA,SAAA/5D,EAAA0+B,GAAA1+B,GAAAmG,KAAAiqB,KAAAjX,KAAA7Y,OAAAN,EAAA0+B,EAAAv4B,KAAAiqB,KAAAjX,KAAA7Y,OAAA,MAAAN,MAAA0+B,EAAA,EAAAv4B,KAAAiqB,KAAAjX,KAAA7Y,OAAA,MAAA6F,KAAA0xD,cAAA73D,EAAA,IAAA0+B,EAAAv4B,KAAAsxD,MAAAqD,WAAA30D,KAAA0xD,cAAAn5B,EAAAi5B,UAAAj5B,EAAAi5B,UAAAxpD,QAAA,8BAAAuwB,EAAAy9B,gBAAA,iBAAAz9B,EAAAv4B,KAAAsxD,MAAAqD,WAAA30D,KAAA0xD,aAAA73D,GAAA0+B,EAAAi5B,WAAA,0BAAAj5B,EAAAg5B,aAAA,wBAAAvxD,KAAAgxD,WAAAxB,GAAA0B,gBAAAK,aAAA,wBACAh5B,EAAAngB,IAAApY,KAAAy0D,iBAAA/G,EAAAgH,OAAA10D,KAAAiqB,KAAA,SAAAjqB,KAAAiqB,KAAAjX,KAAAhT,KAAA0xD,cAAAn5B,EAAA,GAAAk8B,eAAA,eAAA56D,EAAAmG,KAAAw0D,uBAAAj8B,EAAAv4B,KAAAsxD,MAAAqD,WAAA96D,EAAAgE,MAAAhE,EAAAmG,KAAAsxD,MAAAqD,WAAA96D,EAAAmzD,IAAA,IAAAtzD,EAAAsG,KAAAsxD,MAAAiC,WAAAh7B,EAAA09B,UAAAj2D,KAAAsxD,MAAAiB,UAAAvyD,KAAAsxD,MAAAiB,UAAAh6B,EAAA09B,UAAAv8D,EAAAu8D,UAAAp8D,EAAAo8D,UAAAp8D,EAAA+4D,aAAA5yD,KAAAsxD,MAAAiB,UAAAvyD,KAAAsxD,MAAA2B,eAAAjzD,KAAAsxD,MAAAiB,UAAA14D,EAAAo8D,UAAAp8D,EAAA+4D,aAAA5yD,KAAAsxD,MAAA2B,aAAAv5D,EAAAu8D,UAAA,EAAApC,aAAA,kBAAAn7B,KAAAsW,MAAAhvC,KAAAsxD,MAAA2B,aACAjzD,KAAAsxD,MAAAiC,WAAAX,eAAA,GAAA4B,qBAAA,eAAA36D,EAAAmG,KAAAgxD,WAAA5uD,QAAA8zD,cAAA,SAAAr4D,KAAA66B,KAAA/K,IAAA,EAAA3tB,KAAA0xD,aAAA73D,GAAAmzD,GAAAt0B,KAAAhL,IAAA1tB,KAAAiqB,KAAAjX,KAAA7Y,OAAA,EAAA6F,KAAA0xD,aAAA73D,GAAA,GAAA6zD,EAAA6B,eAAA,eAAArF,QAAA,SAAArwD,EAAA0+B,GAAA,IAAA7+B,EAAAG,EAAAs8D,WAAA59B,EAAA,QAAApO,EAAA,OAAAzwB,EAAAS,QAAAN,EAAA,SAAAT,EAAAY,EAAAP,GAAA,SAAAN,EAAAw7C,GAAA,GAAAA,GAAAoY,EAAA5yD,OAAA,OAAAH,EAAA,MAAA+xD,EAAAgB,EAAApY,GAAAv7C,EAAAK,GAAA,SAAA6zD,MAAA,EAAAA,EAAAt6C,KAAA7Y,OAAAH,EAAAszD,GAAAn0D,EAAAw7C,EAAA,UAAAoY,EAAA6H,EAAAx7D,EAAAM,GAAAP,EAAA,IAAAU,EAAAiS,OAAA,EAAAjS,EAAAg7D,mBAAA,EAAAh7D,IAAAswB,EACAtwB,EAAAu8D,UAAAv8D,EAAAo0D,YAAA,uBAAA70D,GAAA,OAAAs0D,EAAAhvD,KAAA23D,SAAAj9D,EAAA,CAAA2O,MAAAoiB,GAAA,EAAAujC,EAAAhvD,KAAA43D,QAAA,SAAAl9D,EAAAY,GAAA,OAAA0zD,EAAAhvD,KAAA43D,QAAAl9D,EAAAY,EAAA,kBAAA0zD,EAAA6B,eAAA,4BAAA11D,EAAA0+B,GAAA,IAAA7+B,EAAAG,EAAAo0D,YAAA9jC,EAAAtwB,EAAAk1D,WAAAr1D,GAAAG,EAAA6zD,EAAAlB,IAAA9yD,EAAA0O,KAAA+hB,EAAA1hB,OAAA0hB,EAAA1hB,MAAA/O,EAAA4yB,IAAA,KAAA7sB,KAAA0qB,EAAA3nB,OAAAsO,OAAApX,EAAA4yB,GAAAnC,EAAA1hB,MAAA,IAAA0hB,IAAA3nB,OAAAw0B,OAAA,EAAAt9B,EAAA4yB,GAAAnC,EAAA1hB,QAAA0hB,EAAA,GAAAtwB,EAAAH,GAAA,QAAAN,EAAA,GAAAY,EAAA,EAAAA,EAAAu+B,EAAAxwB,MAAA5N,OAAAH,IAAA,KAAAP,EAAA8+B,EAAAxwB,MAAA/N,GAAAP,EAAA8F,MAAA,EAAA4qB,EAAAhwB,SAAAgwB,GAAA/wB,EAAAoR,KAAA/Q,EAAA,IAAAL,EAAAe,OAAA,OAAA6Y,KAAA5Z,EAAAyE,KAAAhE,EAAAmzD,GAAAtzD,EAAA,IACAg0D,EAAAf,SAAA4J,aAAA7I,EAAAoH,SAAA,IAAA9I,EAAA,CAAAttD,KAAAgvD,EAAAhvD,KAAA83D,KAAAV,gBAAA,EAAA9D,eAAA,EAAA2D,gBAAA,mBAAAD,aAAA,EAAA5B,gBAAA,EAAAjE,wBAAA,EAAAyE,uBAAA,EAAAxC,UAAA,KAAAhB,WAAA,KAAAC,UAAA,KAAAgC,qBAAA,EAAAF,eAAA,GAAAnF,EAAA+I,aAAA,sB,kGCpBA,IAAAC,iBAAA,GAAAA,QAAAhnD,MAAA,GAAAgnD,QAAAC,aAAA,SAAA98D,EAAAswB,EAAAzwB,GAAAG,aAAAkF,SAAAlF,EAAAkF,OAAAlF,IAAA,QAAAT,EAAAS,EAAAM,OAAAV,EAAA,EAAAA,EAAAL,EAAAK,IAAA,KAAAk7C,EAAA96C,EAAAJ,GAAA,GAAA0wB,EAAAjwB,KAAAR,EAAAi7C,EAAAl7C,EAAAI,GAAA,OAAAL,EAAAC,EAAAkzB,EAAAgoB,EAAA,QAAAn7C,GAAA,EAAAmzB,OAAA,IAAA+pC,QAAAE,YAAA,EAAAF,QAAAG,sBAAA,EAAAH,QAAAI,sBAAA,EAAAJ,QAAAK,wBAAA,EAAAL,QAAAM,mBAAA,EAAAN,QAAAO,wBAAA,EAAAP,QAAAQ,oDAAA,EACAR,QAAAp6D,eAAAo6D,QAAAE,YAAA,mBAAAv6D,OAAAiU,iBAAAjU,OAAAC,eAAA,SAAAzC,EAAAswB,EAAAzwB,GAAA,GAAAG,GAAAqB,MAAAyB,WAAA9C,GAAAwC,OAAAM,UAAA,OAAA9C,IAAAswB,GAAAzwB,EAAAoD,MAAA,OAAAjD,CAAA,EAAA68D,QAAAS,UAAA,SAAAt9D,KAAA,kBAAAiG,uBAAAjG,EAAA,iBAAAkjD,eAAA,iBAAAxhD,WAAA,iBAAAmE,gBAAA,QAAAyqB,EAAA,EAAAA,EAAAtwB,EAAAM,SAAAgwB,EAAA,KAAAzwB,EAAAG,EAAAswB,GAAA,GAAAzwB,KAAAg/B,WAAA,OAAAh/B,CAAA,OAAAI,MAAA,8BAAA48D,QAAAh3D,OAAAg3D,QAAAS,UAAAn3D,MACA02D,QAAAU,iBAAA,oBAAAz5D,QAAA,kBAAAA,OAAA,KAAA+4D,QAAAW,qBAAAX,QAAAM,mBAAAN,QAAAU,iBAAAV,QAAAY,UAAA,GAAAZ,QAAAa,yBAAA,GAAAb,QAAAc,gBAAA,aAAAC,8BAAA,SAAA59D,EAAAswB,GAAA,IAAAzwB,EAAAg9D,QAAAa,yBAAAptC,GAAA,SAAAzwB,EAAA,OAAAG,EAAAswB,GAAAzwB,EAAAG,EAAAH,GAAA,gBAAAA,IAAAG,EAAAswB,EAAA,EACAusC,QAAAgB,SAAA,SAAA79D,EAAAswB,EAAAzwB,EAAAN,GAAA+wB,IAAAusC,QAAAM,kBAAAN,QAAAiB,iBAAA99D,EAAAswB,EAAAzwB,EAAAN,GAAAs9D,QAAAkB,mBAAA/9D,EAAAswB,EAAAzwB,EAAAN,GAAA,EAAAs9D,QAAAkB,mBAAA,SAAA/9D,EAAAswB,EAAAzwB,EAAAN,GAAAM,EAAAg9D,QAAAh3D,OAAA7F,IAAAmT,MAAA,SAAA5T,EAAA,EAAAA,EAAAS,EAAAM,OAAA,EAAAf,IAAA,KAAAK,EAAAI,EAAAT,GAAA,KAAAK,KAAAC,GAAA,OAAAA,IAAAD,EAAA,CAAAI,MAAAM,OAAA,GAAAf,EAAAM,EAAAG,GAAAswB,IAAA/wB,GAAA+wB,GAAA/wB,GAAA,MAAA+wB,GAAAusC,QAAAp6D,eAAA5C,EAAAG,EAAA,CAAAsC,cAAA,EAAAC,UAAA,EAAAU,MAAAqtB,GAAA,EACAusC,QAAAiB,iBAAA,SAAA99D,EAAAswB,EAAAzwB,EAAAN,GAAA,IAAAK,EAAAI,EAAAmT,MAAA,KAAAnT,EAAA,IAAAJ,EAAAU,OAAAf,EAAAK,EAAA,GAAAL,GAAAS,GAAAT,KAAAs9D,QAAAY,UAAAZ,QAAAY,UAAAZ,QAAAh3D,OAAA,QAAAi1C,EAAA,EAAAA,EAAAl7C,EAAAU,OAAA,EAAAw6C,IAAA,KAAAx7C,EAAAM,EAAAk7C,GAAA,KAAAx7C,KAAAC,GAAA,OAAAA,IAAAD,EAAA,CAAAM,MAAAU,OAAA,GAAAT,EAAAg9D,QAAAU,kBAAA,QAAA19D,EAAAN,EAAAK,GAAA,KAAA0wB,IAAAzwB,GAAA,MAAAywB,IAAAtwB,EAAA68D,QAAAp6D,eAAAo6D,QAAAY,UAAA79D,EAAA,CAAA0C,cAAA,EAAAC,UAAA,EAAAU,MAAAqtB,QAAAzwB,SAAA,IAAAg9D,QAAAa,yBAAA99D,KAAAC,EAAA,IAAAg/B,KAAAoW,WAAA,EAAA4nB,QAAAa,yBAAA99D,GAAAi9D,QAAAU,iBACAV,QAAAh3D,OAAA/B,OAAAlE,GAAAi9D,QAAAc,gBAAA99D,EAAA,IAAAD,GAAAi9D,QAAAp6D,eAAAlD,EAAAs9D,QAAAa,yBAAA99D,GAAA,CAAA0C,cAAA,EAAAC,UAAA,EAAAU,MAAAqtB,KAAA,EAAAusC,QAAAgB,SAAA,iCAAA79D,GAAA,OAAAA,IAAA,SAAAswB,EAAAzwB,GAAA,OAAAg9D,QAAAC,aAAA32D,KAAAmqB,EAAAzwB,GAAAizB,CAAA,kBACA,SAAA9yB,GAAA,iBAAAI,SAAA,iBAAAG,OAAAP,EAAAF,QAAA,4CAAAiG,eAAAC,IAAAD,OAAA,yBAAA/F,KAAAiyD,WAAA,aAAAjyD,GAAA,SAAAswB,EAAAoO,KAAA7L,MAAAmrC,iBAAAt/B,EAAAi1B,WAAA,WAAAr0D,EAAAo/B,EAAA,aAAA7+B,EAAA6+B,KAAA7L,MAAAmrC,iBAAAt/B,EAAA7L,MAAAmrC,gBAAA19D,QAAAo+B,EAAAi1B,WAAA,WAAA/zD,EAAA8+B,EAAA,aAAAn/B,EAAAm/B,EAAAw0B,EAAAW,EAAAJ,GAAA,MAAAtzD,EAAA+yD,EAAAW,GAAA,QAAAzhC,EAAAsM,EAAA7L,MAAAmrC,gBAAAx+D,EAAAk/B,EAAA7L,MAAAorC,qBAAArK,EAAAV,EAAA3kD,OAAA,KAAA9O,EAAAm0D,GAAAV,EAAA3kD,KAAA2kD,EAAApgC,EAAA8gC,EACA,GAAAA,GAAA7zD,EAAA,IAAAy0D,EAAAZ,GAAAC,EAAAtlD,KAAAowB,EAAA61B,EAAAX,EAAA/gC,EAAA8gC,EAAA,GAAAn0D,EAAAi/B,EAAAw/B,SAAAz+D,EAAAk/B,EAAA,CAAAg5B,UAAAn4D,IAAA,MAAAi0D,EAAArhC,EAAAzhB,KAAAlR,GAAA2yB,EAAA+rC,OAAA1K,IAAA,EAAAh0D,GAAA,GAAA+0D,EAAA,gBAAA50D,EAAA8+B,OAAA7L,MAAAmrC,gBAAA,QAAA9K,EAAA,EAAAA,EAAAx0B,EAAAp+B,SAAA4yD,EAAAx0B,EAAAw0B,GAAAjJ,QAAAvrB,EAAAp+B,OAAA,WAAAw6C,EAAApc,GAAA9+B,EAAA8+B,GAAA,QAAAw0B,EAAAx0B,EAAAu0B,iBAAAY,EAAA,EAAAA,EAAAX,EAAA5yD,OAAAuzD,IAAAt0D,EAAAm/B,EAAAw0B,EAAAW,GAAA7vD,OAAAkvD,EAAAW,GAAAV,KAAA,UAAA7zD,EAAAo/B,GAAA,IAAAA,EAAA21B,oBAAA,OAAAz0D,EAAA8+B,GAAA,KAAAA,EAAAu0B,iBAAA3yD,OAAA,OAAAw6C,EAAApc,GAAA,IAAAw0B,EAAAx0B,EAAA01B,UAAA,SAAAP,EAAAn1B,EAAA01B,UAAA,OAAAX,EAAA/0B,EAAA7L,MAAAmrC,gBAAA,IAAAvK,EAAAnzD,OAAA,OAAAf,EAAAm/B,EAAAw0B,EAAAW,GAAA,IAAAzhC,EACAqhC,EAAA,GAAAhnB,OAAAjtC,EAAAi0D,IAAAnzD,OAAA,GAAAmsC,OAAA,IAAAra,IAAA5yB,GAAAq0D,EAAAtlD,KAAA2kD,EAAA3kD,MAAAxO,GAAA,GAAAI,EAAA+yD,EAAA1zD,EAAA2zD,KAAA,GAAAhzD,EAAA0zD,EAAAzhC,EAAApuB,MAAA,OAAA82C,EAAApc,GAAA,OAAAv+B,EAAA+yD,EAAA9gC,EAAApuB,OAAAyvD,EAAA2K,QAAAnU,QAAA73B,EAAAqhC,EAAA,GAAAhnB,OAAA,EAAAtsC,EAAA+yD,EAAA9gC,EAAApuB,QAAAouB,EAAA+gC,GAAA5kD,KAAA2kD,EAAA3kD,KAAAxO,GAAA0zD,EAAA2K,QAAAnU,QAAA1qD,EAAAm/B,EAAAw0B,EAAA9gC,EAAA+gC,GAAA,IAAA5zD,EAAAm/B,EAAAw0B,EAAA9gC,EAAApuB,KAAA,WAAA7D,EAAA0zD,EAAAr0D,EAAA2zD,KAAAM,EAAA/3C,MAAAuuC,QAAAzqD,EAAAi0D,IAAAnzD,OAAA,GAAAmsC,OAAA,EAAAtsC,EAAA0zD,EAAAr0D,EAAA2zD,MAAAU,EAAAtlD,KAAA/O,EAAAwE,KAAAuK,KAAAxO,GAAA0zD,EAAA/3C,MAAAuuC,QAAA1qD,EAAAm/B,EAAAl/B,EAAAwE,KAAA6vD,IAAAt0D,EAAAm/B,EAAAl/B,EAAA2zD,GAAAU,GAAA,CAAA7zD,EAAA48D,aAAA,iCAAAl+B,EAAAw0B,EAAAW,WAAA7zD,EAAAq+D,KAAAnL,IAAAW,GAAAn1B,EAAA7L,MAAAmrC,gBAAA,GAAAt/B,EAAA7L,MAAAorC,qBACA,iBAAA/K,IAAA,0BAAApY,EAAApc,KAAAykB,GAAA,iBAAA7yB,GAAAoO,EAAAykB,GAAA,SAAAtjD,KAAAqzD,GAAAW,IAAAn1B,EAAAi9B,IAAA,iBAAArrC,GAAAoO,EAAAi9B,IAAA,SAAA97D,GAAAD,EAAA8+B,KAAA7L,MAAAmrC,gBAAAt/B,EAAA7L,MAAAorC,qBAAA,aAAAl+D,EAAA,EAAA+yB,EAAA9yB,EAAA2yD,IAAAxyD,EAAAH,EAAA6yD,MAAA,G,oOCTA,IAAAgK,iBAAA,GAAAA,QAAAhnD,MAAA,GAAAgnD,QAAAC,aAAA,SAAAl+B,EAAA8zB,EAAAkC,GAAAh2B,aAAA15B,SAAA05B,EAAA15B,OAAA05B,IAAA,QAAA9L,EAAA8L,EAAAt+B,OAAAg7D,EAAA,EAAAA,EAAAxoC,EAAAwoC,IAAA,KAAAgD,GAAA1/B,EAAA08B,GAAA,GAAA5I,EAAAryD,KAAAu0D,EAAA0J,GAAAhD,EAAA18B,GAAA,OAAAj/B,EAAA27D,EAAAxoC,EAAAwrC,GAAA,QAAA3+D,GAAA,EAAAmzB,OAAA,IAAA+pC,QAAAE,YAAA,EAAAF,QAAAG,sBAAA,EAAAH,QAAAI,sBAAA,EAAAJ,QAAAK,wBAAA,EAAAL,QAAAM,mBAAA,EAAAN,QAAAO,wBAAA,EAAAP,QAAAQ,oDAAA,EACAR,QAAAp6D,eAAAo6D,QAAAE,YAAA,mBAAAv6D,OAAAiU,iBAAAjU,OAAAC,eAAA,SAAAm8B,EAAA8zB,EAAAkC,GAAA,GAAAh2B,GAAAv9B,MAAAyB,WAAA87B,GAAAp8B,OAAAM,UAAA,OAAA87B,IAAA8zB,GAAAkC,EAAA3xD,MAAA,OAAA27B,CAAA,EAAAi+B,QAAAS,UAAA,SAAA1+B,KAAA,kBAAA34B,uBAAA24B,EAAA,iBAAAskB,eAAA,iBAAAxhD,WAAA,iBAAAmE,gBAAA,QAAA6sD,EAAA,EAAAA,EAAA9zB,EAAAt+B,SAAAoyD,EAAA,KAAAkC,EAAAh2B,EAAA8zB,GAAA,GAAAkC,KAAA/1B,WAAA,OAAA+1B,CAAA,OAAA30D,MAAA,8BAAA48D,QAAAh3D,OAAAg3D,QAAAS,UAAAn3D,MACA02D,QAAAU,iBAAA,oBAAAz5D,QAAA,kBAAAA,OAAA,KAAA+4D,QAAAW,qBAAAX,QAAAM,mBAAAN,QAAAU,iBAAAV,QAAAY,UAAA,GAAAZ,QAAAa,yBAAA,GAAAb,QAAAc,gBAAA,aAAAC,8BAAA,SAAAh/B,EAAA8zB,GAAA,IAAAkC,EAAAiI,QAAAa,yBAAAhL,GAAA,SAAAkC,EAAA,OAAAh2B,EAAA8zB,GAAAkC,EAAAh2B,EAAAg2B,GAAA,gBAAAA,IAAAh2B,EAAA8zB,EAAA,EACAmK,QAAAgB,SAAA,SAAAj/B,EAAA8zB,EAAAkC,EAAA9hC,GAAA4/B,IAAAmK,QAAAM,kBAAAN,QAAAiB,iBAAAl/B,EAAA8zB,EAAAkC,EAAA9hC,GAAA+pC,QAAAkB,mBAAAn/B,EAAA8zB,EAAAkC,EAAA9hC,GAAA,EAAA+pC,QAAAkB,mBAAA,SAAAn/B,EAAA8zB,EAAAkC,EAAA9hC,GAAA8hC,EAAAiI,QAAAh3D,OAAA+4B,IAAAzrB,MAAA,SAAA2f,EAAA,EAAAA,EAAA8L,EAAAt+B,OAAA,EAAAwyB,IAAA,KAAAwoC,EAAA18B,EAAA9L,GAAA,KAAAwoC,KAAA1G,GAAA,OAAAA,IAAA0G,EAAA,CAAA18B,MAAAt+B,OAAA,GAAAwyB,EAAA8hC,EAAAh2B,GAAA8zB,IAAA5/B,GAAA4/B,GAAA5/B,GAAA,MAAA4/B,GAAAmK,QAAAp6D,eAAAmyD,EAAAh2B,EAAA,CAAAt8B,cAAA,EAAAC,UAAA,EAAAU,MAAAyvD,GAAA,EACAmK,QAAAiB,iBAAA,SAAAl/B,EAAA8zB,EAAAkC,EAAA9hC,GAAA,IAAAwoC,EAAA18B,EAAAzrB,MAAA,KAAAyrB,EAAA,IAAA08B,EAAAh7D,OAAAwyB,EAAAwoC,EAAA,GAAAxoC,GAAA8L,GAAA9L,KAAA+pC,QAAAY,UAAAZ,QAAAY,UAAAZ,QAAAh3D,OAAA,QAAAy4D,GAAA,EAAAA,GAAAhD,EAAAh7D,OAAA,EAAAg+D,KAAA,KAAAl8B,GAAAk5B,EAAAgD,IAAA,KAAAl8B,MAAAtP,GAAA,OAAAA,IAAAsP,GAAA,CAAAk5B,MAAAh7D,OAAA,GAAAs0D,EAAAiI,QAAAU,kBAAA,QAAA3I,EAAA9hC,EAAAwoC,GAAA,KAAA5I,IAAAkC,GAAA,MAAAlC,IAAA9zB,EAAAi+B,QAAAp6D,eAAAo6D,QAAAY,UAAAnC,EAAA,CAAAh5D,cAAA,EAAAC,UAAA,EAAAU,MAAAyvD,QAAAkC,SAAA,IAAAiI,QAAAa,yBAAApC,KAAA1G,EAAA,IAAA/1B,KAAAoW,WAAA,EAAA4nB,QAAAa,yBAAApC,GACAuB,QAAAU,iBAAAV,QAAAh3D,OAAA/B,OAAAw3D,GAAAuB,QAAAc,gBAAA/I,EAAA,IAAA0G,GAAAuB,QAAAp6D,eAAAqwB,EAAA+pC,QAAAa,yBAAApC,GAAA,CAAAh5D,cAAA,EAAAC,UAAA,EAAAU,MAAAyvD,KAAA,EAAAmK,QAAAgB,SAAA,iCAAAj/B,GAAA,OAAAA,IAAA,SAAA8zB,EAAAkC,GAAA,OAAAiI,QAAAC,aAAA32D,KAAAusD,EAAAkC,GAAA9hC,CAAA,kBACA,SAAA8L,EAAA8zB,GAAA,kBAAAtyD,SAAA,qBAAAG,cAAAH,QAAAsyD,IAAA,oBAAA3sD,eAAAC,IAAAD,OAAA2sD,IAAA9zB,KAAAl9B,KAAAk9B,EAAAqzB,WAAAS,IAAA,GAAAvsD,MAAA,oBAAAy4B,EAAA5+B,GAAA,WAAA+G,OAAA,UAAA/G,EAAA,0BAAA0yD,EAAA1yD,GAAA,QAAA0+B,EAAA1+B,EAAA86D,WAAAx6D,OAAA,EAAAo+B,MAAA1+B,EAAAmwD,YAAAnwD,EAAA05D,YAAA,OAAA15D,CAAA,UAAA40D,EAAA50D,EAAA0+B,GAAA,OAAAg0B,EAAA1yD,GAAA0vD,YAAAhxB,EAAA,UAAA5L,EAAA9yB,EAAA0+B,EAAApO,EAAAzwB,GAAAG,EAAAgtD,SAAAqC,cAAArvD,GAAAswB,IAAAtwB,EAAA23D,UAAArnC,GAAAzwB,IAAAG,EAAA8nC,MAAAy2B,QAAA1+D,GAAA,oBAAA6+B,EAAA1+B,EAAA0vD,YAAA1C,SAAA8K,eAAAp5B,SACA,GAAAA,EAAA,IAAApO,EAAA,EAAAA,EAAAoO,EAAAp+B,SAAAgwB,EAAAtwB,EAAA0vD,YAAAhxB,EAAApO,IAAA,OAAAtwB,CAAA,UAAAs7D,EAAAt7D,EAAA0+B,EAAApO,EAAAzwB,GAAAG,EAAA8yB,EAAA9yB,EAAA0+B,EAAApO,EAAAzwB,GAAAG,EAAA03D,aAAA,8BAAA13D,CAAA,UAAAs+D,GAAAt+D,EAAA0+B,GAAA,GAAAA,EAAA8/B,WAAA9/B,IAAA4S,YAAA,GAAAtxC,EAAAy+D,SAAA,OAAAz+D,EAAAy+D,SAAA//B,GAAA,UAAAA,EAAA8/B,WAAA9/B,IAAAggC,MAAAhgC,GAAA1+B,EAAA,eAAA0+B,IAAA4S,WAAA,UAAAlP,GAAApiC,GAAA,QAAA0+B,EAAA1+B,EAAA2+D,aAAA,OAAAruC,GAAAoO,EAAA1+B,EAAAgZ,MAAA,UAAA0lB,KAAAkgC,YAAAlgC,EAAAkgC,WAAAD,eAAAjgC,IAAAkgC,WAAAD,cAAA,OAAAjgC,CAAA,UAAAmgC,GAAA7+D,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAA23D,UAAA/4B,EAAAF,GAAA94B,KAAA0qB,KAAAtwB,EAAA23D,YACArnC,EAAA,QAAAoO,EAAA,UAAAogC,GAAA9+D,EAAA0+B,GAAA1+B,IAAAmT,MAAA,aAAAmd,EAAA,EAAAA,EAAAtwB,EAAAM,OAAAgwB,IAAAtwB,EAAAswB,KAAAsO,EAAA5+B,EAAAswB,IAAA1qB,KAAA84B,QAAA,IAAA1+B,EAAAswB,IAAA,OAAAoO,CAAA,UAAAqgC,GAAA/+D,GAAA,OAAAA,EAAAu5D,QAAAyF,QAAA1H,aAAA,UAAA2H,GAAAj/D,GAAA,IAAA0+B,EAAAr9B,MAAAyB,UAAA4C,MAAArF,KAAA8V,UAAA,4BAAAnW,EAAAglC,MAAA,KAAAtG,EAAA,WAAAwgC,GAAAl/D,EAAA0+B,EAAApO,GAAAoO,MAAA,YAAA7+B,KAAAG,KAAA8N,eAAAjO,KAAA,IAAAywB,GAAAoO,EAAA5wB,eAAAjO,KAAA6+B,EAAA7+B,GAAAG,EAAAH,IAAA,OAAA6+B,CAAA,UAAAygC,GAAAn/D,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,MAAAm/B,MAAA1+B,EAAA0uD,OAAA,mBAAAhwB,MAAA1+B,EAAAM,SAAAT,KAAA,MAAAN,KAAA,SAAAK,EAAAI,EAAAke,QAAA,KACAre,GAAA,KAAAD,MAAA8+B,EAAA,OAAAn/B,GAAAm/B,EAAA7+B,GAAAN,GAAAK,EAAAC,EAAAN,GAAA+wB,EAAA/wB,EAAA+wB,EAAAzwB,EAAAD,EAAA,YAAAw/D,GAAAp/D,EAAA0+B,GAAA,QAAApO,EAAA,EAAAA,EAAAtwB,EAAAM,SAAAgwB,EAAA,GAAAtwB,EAAAswB,IAAAoO,EAAA,OAAApO,EAAA,kBAAA+uC,GAAAr/D,EAAA0+B,EAAApO,GAAA,QAAAzwB,EAAA,EAAAN,EAAA,SAAAK,EAAAI,EAAAke,QAAA,KAAAre,IAAA,GAAAD,MAAAI,EAAAM,QAAA,IAAA4yD,EAAAtzD,EAAAC,EAAA,GAAAD,GAAAI,EAAAM,QAAAf,EAAA2zD,GAAAx0B,EAAA,OAAA7+B,EAAAg/B,KAAAhL,IAAAq/B,EAAAx0B,EAAAn/B,MAAAK,EAAAC,EAAAN,GAAA+wB,EAAA/wB,EAAA+wB,EAAAzwB,EAAAD,EAAA,KAAAL,GAAAm/B,EAAA,OAAA7+B,CAAA,WAAA0e,GAAAve,GAAA,KAAAs/D,GAAAh/D,QAAAN,GAAAs/D,GAAA3uD,KAAAwhD,EAAAmN,IAAA,YAAAA,GAAAt/D,EAAA,UAAAmyD,EAAAnyD,GAAA,OAAAA,IAAAM,OAAA,YAAAi/D,GAAAv/D,EAAA0+B,GAAA,QAAApO,EAAA,GAAAzwB,EAAA,EAAAA,EAAAG,EAAAM,OAAAT,IAAAywB,EAAAzwB,GAAA6+B,EAAA1+B,EAAAH,MAAA,OAAAywB,CAAA,UAAAkvC,GAAAx/D,EAAA0+B,EAAApO,GAAA,QAAAzwB,EACA,EAAAN,EAAA+wB,EAAAoO,GAAA7+B,EAAAG,EAAAM,QAAAgwB,EAAAtwB,EAAAH,KAAAN,GAAAM,IAAAG,EAAAm+D,OAAAt+D,EAAA,EAAA6+B,EAAA,UAAA+gC,KAAA,UAAAC,GAAA1/D,EAAA0+B,GAAAl8B,OAAAkB,OAAA1D,EAAAwC,OAAAkB,OAAA1D,IAAAy/D,GAAA38D,UAAA9C,IAAA,IAAAy/D,IAAA/gC,GAAAwgC,GAAAxgC,EAAA1+B,GAAA,OAAAA,CAAA,UAAA2/D,GAAA3/D,GAAA,WAAA4F,KAAA5F,IAAA,IAAAA,MAAA4lC,eAAA5lC,EAAAi6C,eAAA2lB,GAAAh6D,KAAA5F,GAAA,UAAA6/D,GAAA7/D,EAAA0+B,GAAA,OAAAA,GAAA,EAAAA,EAAArxB,OAAA6Q,QAAA,QAAAyhD,GAAA3/D,IAAA,EAAA0+B,EAAA94B,KAAA5F,GAAA2/D,GAAA3/D,EAAA,UAAA8tB,GAAA9tB,GAAA,QAAA0+B,KAAA1+B,EAAA,GAAAA,EAAA8N,eAAA4wB,IAAA1+B,EAAA0+B,GAAA,2BAAAohC,GAAA9/D,GAAA,YAAAA,EAAA0N,WAAA,IAAAqyD,GAAAn6D,KAAA5F,EAAA,UAAAggE,GAAAhgE,EAAA0+B,EAAApO,GAAA,QAAAA,EAAA,EAAAoO,EACAA,EAAA1+B,EAAAM,SAAAw/D,GAAA9/D,EAAAiX,OAAAynB,QAAApO,EAAA,OAAAoO,CAAA,UAAAuhC,GAAAjgE,EAAA0+B,EAAApO,GAAA,QAAAzwB,EAAA6+B,EAAApO,GAAA,UAAAoO,GAAApO,EAAA,OAAAoO,EAAA,IAAAn/B,GAAAm/B,EAAApO,GAAA,EAAA/wB,EAAA,EAAAM,EAAAg/B,KAAAqhC,KAAA3gE,GAAAs/B,KAAAsW,MAAA51C,GAAA,GAAAA,GAAAm/B,EAAA,OAAA1+B,EAAAT,GAAAm/B,EAAApO,EAAAtwB,EAAAT,GAAA+wB,EAAA/wB,EAAAm/B,EAAAn/B,EAAAM,CAAA,WAAAsgE,GAAAngE,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAG,EAAA,OAAAH,EAAA6+B,EAAApO,EAAA,iBAAA/wB,GAAA,EAAAK,EAAA,EAAAA,EAAAI,EAAAM,SAAAV,EAAA,KAAAszD,EAAAlzD,EAAAJ,GAAA,GAAAszD,EAAAlvD,KAAAssB,GAAA4iC,EAAAC,GAAAz0B,MAAApO,GAAA4iC,EAAAC,IAAAz0B,EAAA7+B,EAAAg/B,KAAA/K,IAAAo/B,EAAAlvD,KAAA06B,GAAAG,KAAAhL,IAAAq/B,EAAAC,GAAA7iC,GAAA,GAAA4iC,EAAA/M,MAAA,YAAAvmD,GAAAL,GAAA,EAAAA,GAAAM,EAAA6+B,EAAApO,EAAA,gBAAA8vC,GAAApgE,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAwgE,GAAA,aAAA9gE,EAAA,EAAAA,EAAAS,EAAAM,SAAAf,EAAA,KAAAK,EAAAI,EAAAT,GAAA,GAAAK,EAAAoE,KAAA06B,GAAA9+B,EAAAuzD,GAAAz0B,EAAA,OAAAn/B,EACAK,EAAAuzD,IAAAz0B,IAAA9+B,EAAAoE,MAAApE,EAAAuzD,IAAA,UAAA7iC,EAAAzwB,EAAAN,EAAA8gE,GAAA9gE,GAAAK,EAAAoE,MAAA06B,IAAA9+B,EAAAoE,MAAApE,EAAAuzD,IAAA,UAAA7iC,EAAAzwB,EAAAN,EAAA8gE,GAAA9gE,EAAA,cAAAM,IAAAwgE,EAAA,UAAAC,GAAAtgE,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAAugE,MAAA,MAAAjwC,MAAAtwB,EAAAugE,MAAAC,GAAAxgE,EAAA+Q,KAAA2tB,IAAA,OAAApO,CAAA,UAAAmwC,GAAAzgE,EAAA0+B,EAAApO,GAAA,GAAAtwB,EAAA0gE,oBAAA1gE,EAAA0gE,oBAAAhiC,EAAApO,GAAA,WAAAtwB,EAAA2gE,YAAA3gE,EAAA2gE,YAAA,KAAAjiC,EAAApO,OAAA,KAAAzwB,GAAAG,IAAA4gE,YAAA5gE,EAAA0+B,GAAA7+B,IAAAywB,EAAA8uC,GAAAv/D,EAAAywB,IAAA,EAAAA,IAAAtwB,EAAA0+B,GAAA7+B,EAAA6F,MAAA,EAAA4qB,GAAA0iB,OAAAnzC,EAAA6F,MAAA4qB,EAAA,gBAAAuwC,EAAA7gE,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAA4gE,WAAA5gE,EAAA4gE,UAAAliC,IAAAoiC,GAAA,GAAAxwC,EAAAhwB,OAAA,QAAAT,EAAAwB,MAAAyB,UAAA4C,MAAArF,KAAA8V,UACA,GAAA5W,EAAA,EAAAA,EAAA+wB,EAAAhwB,SAAAf,EAAA+wB,EAAA/wB,GAAAylC,MAAA,KAAAnlC,EAAA,UAAAkhE,EAAA/gE,EAAA0+B,EAAApO,GAAA,iBAAAoO,MAAA,CAAAvtB,KAAAutB,EAAAsiC,eAAA,WAAA76D,KAAA86D,kBAAA,KAAAJ,EAAA7gE,EAAAswB,GAAAoO,EAAAvtB,KAAAnR,EAAA0+B,GAAA,OAAAwiC,GAAAxiC,MAAAyiC,gBAAA,UAAAC,GAAAphE,GAAA,IAAA0+B,EAAA1+B,EAAA4gE,WAAA5gE,EAAA4gE,UAAA1K,eAAA,GAAAx3B,EAAA,CAAA1+B,IAAAqhE,MAAAC,yBAAAthE,EAAAqhE,MAAAC,uBAAA,YAAAhxC,EAAA,EAAAA,EAAAoO,EAAAp+B,SAAAgwB,GAAA,GAAA8uC,GAAAp/D,EAAA0+B,EAAApO,KAAAtwB,EAAA2Q,KAAA+tB,EAAApO,GAAA,WAAAixC,GAAAvhE,EAAA0+B,GAAA,UAAA1+B,EAAA4gE,WAAA5gE,EAAA4gE,UAAAliC,IAAAoiC,IAAAxgE,MAAA,UAAAkhE,GAAAxhE,KAAA8C,UAAAqgD,GAAA,SAAAzkB,EAAApO,GAAAmkC,EAAAtuD,KACAu4B,EAAApO,EAAA,EAAAtwB,EAAA8C,UAAA64D,IAAA,SAAAj9B,EAAApO,GAAAmwC,GAAAt6D,KAAAu4B,EAAApO,EAAA,WAAAmxC,GAAAzhE,KAAAghE,eAAAhhE,EAAAghE,iBAAAhhE,EAAA0hE,aAAA,WAAAC,GAAA3hE,KAAA4hE,gBAAA5hE,EAAA4hE,kBAAA5hE,EAAA6hE,cAAA,WAAAX,GAAAlhE,GAAA,aAAAA,EAAAihE,iBAAAjhE,EAAAihE,iBAAA,GAAAjhE,EAAA0hE,WAAA,UAAAI,GAAA9hE,GAAAyhE,GAAAzhE,GAAA2hE,GAAA3hE,EAAA,UAAA+hE,GAAA/hE,GAAA,IAAA0+B,EAAA1+B,EAAAgiE,MAAA,MAAAtjC,IAAA1+B,EAAAiiE,OAAA,EAAAvjC,EAAA,EAAA1+B,EAAAiiE,OAAA,EAAAvjC,EAAA,EAAA1+B,EAAAiiE,OAAA,IAAAvjC,EAAA,IAAAwjC,IAAAliE,EAAAmiE,SAAA,GAAAzjC,MAAA,UAAAA,CAAA,UAAA0jC,GAAApiE,EAAA0+B,GAAA,EAAAvoB,UAAA7V,SAAAo+B,EAAA2jC,aAAAhhE,MAAAyB,UAAA4C,MAAArF,KAAA8V,UACA,IAAAmsD,GAAAtiE,GAAA0+B,CAAA,UAAA6jC,GAAAviE,GAAA,oBAAAA,GAAAwiE,GAAA10D,eAAA9N,KAAAwiE,GAAAxiE,QAAA,GAAAA,GAAA,iBAAAA,EAAA2F,MAAA68D,GAAA10D,eAAA9N,EAAA2F,MAAA,KAAA+4B,EAAA8jC,GAAAxiE,EAAA2F,MAAA,iBAAA+4B,MAAA,CAAA/4B,KAAA+4B,IAAA1+B,EAAA0/D,GAAAhhC,EAAA1+B,KAAA2F,KAAA+4B,EAAA/4B,IAAA,0BAAA3F,GAAA,0BAAA4F,KAAA5F,GAAA,OAAAuiE,GAAA,uCAAAviE,GAAA,2BAAA4F,KAAA5F,GAAA,OAAAuiE,GAAA,2CAAAviE,EAAA,CAAA2F,KAAA3F,MAAA,CAAA2F,KAAA,iBAAA88D,GAAAziE,EAAA0+B,KAAA6jC,GAAA7jC,GAAA,IAAApO,EAAAgyC,GAAA5jC,EAAA/4B,MAAA,IAAA2qB,EAAA,OAAAmyC,GAAAziE,EACA,cAAAA,EAAAswB,EAAAtwB,EAAA0+B,GAAA,GAAAgkC,GAAA50D,eAAA4wB,EAAA/4B,MAAA,CAAA2qB,EAAAoyC,GAAAhkC,EAAA/4B,MAAA,QAAA9F,KAAAywB,IAAAxiB,eAAAjO,KAAAG,EAAA8N,eAAAjO,KAAAG,EAAA,IAAAH,GAAAG,EAAAH,IAAAG,EAAAH,GAAAywB,EAAAzwB,GAAA,CAAAG,EAAA2F,KAAA+4B,EAAA/4B,KAAA+4B,EAAAu2B,aAAAj1D,EAAAi1D,WAAAv2B,EAAAu2B,YAAA,GAAAv2B,EAAAikC,UAAA,QAAApjE,KAAAm/B,EAAAikC,UAAA3iE,EAAAT,GAAAm/B,EAAAikC,UAAApjE,GAAA,OAAAS,CAAA,UAAA4iE,GAAA5iE,EAAA0+B,GAAA1+B,EAAA0iE,GAAA50D,eAAA9N,GAAA0iE,GAAA1iE,GAAA0iE,GAAA1iE,GAAA,GAAAk/D,GAAAxgC,EAAA1+B,EAAA,UAAA6iE,GAAA7iE,EAAA0+B,GAAA,QAAAA,EAAA,OAAAA,EAAA,GAAA1+B,EAAA8iE,UAAA,OAAA9iE,EAAA8iE,UAAApkC,GAAA1+B,EAAA,WAAAswB,KAAAoO,EAAA,KAAA7+B,EAAA6+B,EAAApO,GAAAzwB,aAAAwB,QAAAxB,IAAAmzC,OAAA,KAAAhzC,EAAAswB,GAAAzwB,CAAA,QAAAG,CAAA,UAAA+iE,GAAA/iE,EACA0+B,GAAA,QAAApO,EAAAtwB,EAAAwyD,WAAA,CAAAliC,EAAAtwB,EAAAwyD,UAAA9zB,GAAA,IAAApO,KAAA0kC,MAAAh1D,EAAA,MAAA0+B,EAAApO,EAAAuC,MAAA7yB,EAAAswB,EAAA0kC,IAAA,QAAA1kC,GAAA,CAAA0kC,KAAAh1D,EAAA6yB,MAAA6L,EAAA,UAAAskC,GAAAhjE,EAAA0+B,EAAApO,GAAA,OAAAtwB,EAAAijE,WAAAjjE,EAAAijE,WAAAvkC,EAAApO,IAAA,WAAAkkC,EAAAx0D,EAAA0+B,MAAA1+B,EAAA8jB,MAAA,KAAA4a,MAAA1+B,EAAAo6B,KAAA,MAAAn6B,MAAA,qBAAAy+B,EAAA1+B,EAAA8jB,OAAA,2BAAA9jB,EAAA+xC,OAAA,QAAAzhB,EAAA,KAAAA,EAAA,KAAAzwB,EAAAG,EAAAqrC,SAAA/a,GAAA/wB,EAAAM,EAAAqjE,YAAA,GAAAxkC,EAAAn/B,EAAA,CAAAS,EAAAH,EAAA,MAAA6+B,GAAAn/B,CAAA,QAAAS,EAAA+xC,MAAArT,EAAA,UAAAykC,GAAAnjE,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAA,GAAAN,EAAAm/B,EAAAnwB,KAAAvO,EAAA6D,KAAA66B,EAAAnwB,KAAA+hB,EAAA/hB,KAAA,YAAA3O,OAAAmR,KAAAxR,GAAA+wB,EAAA/hB,OAAA3O,IAAA8F,MAAA,EAAA4qB,EAAAmC,KACAlzB,GAAAm/B,EAAAnwB,OAAA3O,IAAA8F,MAAAg5B,EAAAjM,KAAA5yB,EAAA8Q,KAAA/Q,KAAAL,CAAA,WAAAM,CAAA,UAAAujE,GAAApjE,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAA,GAAAG,EAAA6D,KAAA66B,EAAApO,GAAA,SAAA/wB,GAAAM,EAAA8Q,KAAApR,EAAAwR,KAAA,WAAAlR,CAAA,UAAAwjE,GAAArjE,EAAA0+B,GAAA,GAAAA,GAAA1+B,EAAAs5D,OAAA,KAAAt5D,MAAAgiB,OAAAhiB,EAAAs5D,QAAA56B,CAAA,UAAA88B,EAAAx7D,GAAA,SAAAA,EAAAgiB,OAAA,gBAAA0c,EAAA1+B,EAAAgiB,OAAAhiB,EAAAo/D,GAAA1gC,EAAAqT,MAAA/xC,GAAA,QAAAswB,EAAAoO,EAAA1c,OAAAsO,EAAAoO,EAAApO,MAAAtO,OAAA,QAAAniB,EAAA,EAAAywB,EAAA+a,SAAAxrC,IAAA6+B,IAAA7+B,EAAAG,GAAAswB,EAAA+a,SAAAxrC,GAAAqjE,YAAA,OAAAljE,EAAA0+B,EAAA5a,KAAA,UAAAs0B,GAAAp4C,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAA8jB,MAAA9jB,EAAA,WAAAH,EAAA,EAAAA,EAAAG,EAAAqrC,SAAA/qC,SAAAT,EAAA,KAAAN,EAAAS,EAAAqrC,SAAAxrC,GAAAD,EAAAL,EAAA+5D,OAAA,GAAA56B,EAAA9+B,EAAA,CAAAI,EAAAT,EAAA,SAAAS,CAAA,CAAA0+B,GACA9+B,EAAA0wB,GAAA/wB,EAAA2jE,WAAA,QAAA5yC,CAAA,QAAAtwB,EAAA+xC,OAAA,IAAAlyC,EAAA,EAAAA,EAAAG,EAAA+xC,MAAAzxC,SAAAT,EAAA,CAAAN,EAAAS,EAAA+xC,MAAAlyC,GAAAy5D,OAAA,GAAA56B,EAAAn/B,EAAA,MAAAm/B,GAAAn/B,CAAA,QAAA+wB,EAAAzwB,CAAA,UAAAyjE,GAAAtjE,EAAA0+B,GAAA,OAAAA,GAAA1+B,EAAA8jB,OAAA4a,EAAA1+B,EAAA8jB,MAAA9jB,EAAAo6B,IAAA,UAAAmpC,GAAAvjE,EAAA0+B,GAAA,OAAAx5B,OAAAlF,EAAAwjE,oBAAA9kC,EAAA1+B,EAAAyjE,iBAAA,UAAAhkE,EAAAO,EAAA0+B,EAAApO,QAAA,IAAAA,MAAA,WAAAnqB,gBAAA1G,GAAA,WAAAA,EAAAO,EAAA0+B,EAAApO,GAAAnqB,KAAAoI,KAAAvO,EAAAmG,KAAAssB,GAAAiM,EAAAv4B,KAAAu9D,OAAApzC,CAAA,UAAAwkC,EAAA90D,EAAA0+B,GAAA,OAAA1+B,EAAAuO,KAAAmwB,EAAAnwB,MAAAvO,EAAAyyB,GAAAiM,EAAAjM,EAAA,UAAAkxC,GAAA3jE,EAAA0+B,GAAA,OAAA1+B,EAAA0jE,QAAAhlC,EAAAglC,QAAA,GAAA5O,EAAA90D,EAAA0+B,EAAA,UAAAklC,GAAA5jE,GAAA,OAAAP,EAAAO,EAAAuO,KACAvO,EAAAyyB,GAAA,UAAAoxC,GAAA7jE,EAAA0+B,GAAA,SAAAo2B,EAAA90D,EAAA0+B,KAAA1+B,CAAA,UAAA8jE,GAAA9jE,EAAA0+B,GAAA,SAAAo2B,EAAA90D,EAAA0+B,GAAA1+B,EAAA0+B,CAAA,UAAAi2B,EAAA30D,EAAA0+B,GAAA,GAAAA,EAAAnwB,KAAAvO,EAAA8jB,MAAA,OAAArkB,EAAAO,EAAA8jB,MAAA,OAAAwM,EAAAtwB,EAAA8jB,MAAA9jB,EAAAo6B,KAAA,KAAAsE,EAAAnwB,KAAA+hB,EAAA,OAAA7wB,EAAA6wB,EAAAkkC,EAAAx0D,EAAAswB,GAAAvf,KAAAzQ,QAAAN,EAAAw0D,EAAAx0D,EAAA0+B,EAAAnwB,MAAAwC,KAAAzQ,OAAAgwB,EAAAoO,EAAAjM,GAAAiM,EAAA,MAAApO,KAAAtwB,EAAAP,EAAAi/B,EAAAnwB,KAAAvO,GAAA,EAAAswB,EAAA7wB,EAAAi/B,EAAAnwB,KAAA,GAAAmwB,EAAA,OAAAA,CAAA,UAAAqlC,GAAA/jE,EAAA0+B,GAAA,QAAApO,EAAA,GAAAzwB,EAAA,EAAAA,EAAA6+B,EAAAp+B,OAAAT,IAAAywB,EAAAzwB,GAAA80D,EAAA30D,EAAA0+B,EAAA7+B,IAAA,OAAAywB,CAAA,UAAA0zC,GAAAhkE,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAA,CAAAS,EAAA6yB,MAAAoxC,SAAArkE,EAAA,GAAAskE,GAAAlkE,EAAA0+B,EAAA3tB,KAAA/Q,EAAAmkE,IAAAnP,KAAA1kC,GAAA,SAAAmjC,EAAArhC,GAAA,OAAA7yB,EAAAoR,KAAA8iD,EAAArhC,EAAA,GAAAxyB,EAAAC,GAAA,IAAAqzD,EAAA5iC,EAAAuC,MAAAhzB,EAAA,SAAA4zD,GAAAnjC,EAAA8zC,WACA7kE,EAAA,IAAA6yB,EAAApyB,EAAA6yB,MAAAwxC,SAAA5Q,GAAA3Y,EAAA,EAAAt7C,EAAA,EAAA8wB,EAAAuC,OAAA,EAAAqxC,GAAAlkE,EAAA0+B,EAAA3tB,KAAAqhB,EAAA4iC,KAAA1kC,GAAA,SAAAnwB,EAAAyzD,GAAA,QAAAt0D,EAAAw7C,EAAAt7C,EAAAW,GAAA,KAAAJ,EAAAR,EAAAu7C,GAAA/6C,EAAAI,GAAAZ,EAAA4+D,OAAArjB,EAAA,EAAA36C,EAAAZ,EAAAu7C,EAAA,GAAA/6C,GAAA+6C,GAAA,EAAAt7C,EAAAq/B,KAAAhL,IAAA1zB,EAAAJ,EAAA,IAAA6zD,EAAA,GAAAxhC,EAAAkyC,OAAA/kE,EAAA4+D,OAAA7+D,EAAAw7C,EAAAx7C,EAAAa,EAAA,WAAAyzD,GAAA9Y,EAAAx7C,EAAA,YAAAA,EAAAw7C,EAAAx7C,GAAA,EAAAa,EAAAZ,EAAAD,EAAA,GAAAC,EAAAD,EAAA,IAAAa,IAAA,mBAAAyzD,CAAA,GAAAh0D,GAAA0wB,EAAAuC,MAAAqgC,EAAA5iC,EAAA8zC,WAAA,KAAA9zC,EAAAi0C,aAAA,WAAA1Q,EAAA,EAAAA,EAAA7zD,EAAA6yB,MAAAwxC,SAAA/jE,SAAAuzD,EAAAh0D,EAAAg0D,GAAA,OAAAtsB,OAAAhoC,EAAAilE,QAAA5kE,EAAA6kE,SAAA7kE,EAAA8kE,UAAA9kE,EAAA,eAAA+kE,GAAA3kE,EAAA0+B,EAAApO,GAAA,IAAAoO,EAAA6I,QAAA7I,EAAA6I,OAAA,IAAAvnC,EAAA6yB,MAAAoxC,QAAA,KAAApkE,EAAA+kE,GAAA5kE,EACAw7D,EAAA98B,IAAAn/B,EAAAm/B,EAAA3tB,KAAAzQ,OAAAN,EAAAuI,QAAAs8D,oBAAAhC,GAAA7iE,EAAAmkE,IAAAnP,KAAAn1D,EAAAgzB,OAAAjzB,EAAAokE,GAAAhkE,EAAA0+B,EAAA7+B,GAAAN,IAAAM,EAAAgzB,MAAAtzB,GAAAm/B,EAAAomC,WAAAjlE,EAAAklE,MAAAxlE,GAAAm/B,EAAA6I,OAAA3nC,EAAA2nC,OAAA3nC,EAAA4kE,QAAA9lC,EAAAsmC,aAAAplE,EAAA4kE,QAAA9lC,EAAAsmC,eAAAtmC,EAAAsmC,aAAA,MAAA10C,IAAAtwB,EAAAmkE,IAAAc,oBAAAjlE,EAAAmkE,IAAAe,aAAArmC,KAAA/K,IAAA9zB,EAAAmkE,IAAAe,eAAAllE,EAAAmkE,IAAAc,mBAAA,QAAAvmC,EAAA6I,MAAA,UAAAq9B,GAAA5kE,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAG,EAAAmkE,IAAA5kE,EAAAS,EAAAu5D,QAAA,IAAA15D,EAAAm1D,KAAAiO,WAAA,WAAAkC,GAAAtlE,GAAA,EAAA6+B,GAAA,IAAA9+B,EAAAwlE,GAAAplE,EAAA0+B,EAAApO,GAAA4iC,EAAAtzD,EAAAC,EAAAikB,OAAA0wC,EAAA30D,EAAAD,EAAA,GAAAklE,WAAAjR,EAAAX,EAAAiS,GAAAE,UAAAxlE,EAAAqzD,EAAAtzD,GAAA,IAAAulE,GAAAtlE,EACAmjE,GAAAnjE,EAAAm1D,MAAAp1D,GAAAC,EAAAgE,KAAAjE,EAAA8+B,GAAA,SAAA+0B,GAAA6R,GAAAtlE,EAAAyzD,EAAA1iD,KAAA8iD,GAAA,IAAAzhC,EAAAyhC,EAAAtlD,KAAAklD,EAAAqR,WAAA1yC,GAAAsM,EAAA,MAAAtM,EAAA,GAAAA,GAAA7yB,EAAAgmE,UAAAnzC,EAAA7yB,EAAAimE,OAAA3R,EAAAkR,OAAA,KAAAlR,EAAA4R,UAAA,IAAAn1C,IAAAzwB,EAAAqlE,aAAArR,EAAAtlD,MAAA,OAAAslD,CAAA,UAAAyR,GAAAtlE,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAS,EAAAmkE,IAAAnP,KAAAh1D,EAAA,IAAA0lE,EAAAhnC,EAAA1+B,EAAAuI,QAAAo9D,QAAAr1C,GAAAtwB,EAAA4O,MAAA5O,EAAAmH,IAAAtH,GAAA,UAAA6+B,GAAAknC,GAAArmE,EAAA+wB,EAAAuC,QAAA7yB,EAAA6lE,OAAAC,GAAAvmE,EAAAS,EAAAswB,EAAAuC,OAAA7yB,EAAA4O,MAAA5O,EAAAmH,GAAA,UAAAy+D,GAAA5lE,EAAA0+B,GAAA,GAAA1+B,EAAA+lE,UAAA,OAAA/lE,EAAA+lE,UAAArnC,GAAA,GAAA1+B,EAAAwyD,YAAAxyD,EAAA+iE,GAAA/iE,EAAA0+B,GAAA1+B,EAAAg1D,KAAA+Q,WAAA,OAAA/lE,EAAAg1D,KAAA+Q,UAAA/lE,EAAA6yB,MAAA,UAAAizC,GAAA9lE,EAAA0+B,EAAApO,EAAAzwB,GAAA,QAAAN,EACA,KAAAA,MAAA,CAAAM,MAAA,GAAAkjE,GAAA/iE,EAAAswB,GAAA0kC,MAAA,IAAAp1D,EAAAI,EAAA0Q,MAAAguB,EAAApO,GAAA,GAAAoO,EAAAv3B,IAAAu3B,EAAA9vB,MAAA,OAAAhP,CAAA,OAAAK,MAAA,QAAAD,EAAA2F,KAAA,uCAAAqgE,GAAAhmE,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAS,EAAAmkE,IAAAvkE,EAAAL,EAAAy1D,KAAAt2B,EAAAi2B,EAAAp1D,EAAAm/B,GAAA,IAAAw0B,EAAAsB,EAAAj1D,EAAAm/B,EAAAnwB,MAAA+hB,EAAAs0C,GAAA5kE,EAAA0+B,EAAAnwB,KAAA+hB,GAAAtwB,EAAA,IAAA0lE,EAAAxS,EAAAniD,KAAA/Q,EAAAuI,QAAAo9D,QAAAr1C,GAAA,IAAAujC,EAAA,IAAAh0D,IAAAg0D,EAAA,KAAAh0D,GAAAG,EAAAmH,IAAAu3B,EAAAjM,MAAAzyB,EAAA6lE,OAAA,CAAA7lE,EAAA4O,MAAA5O,EAAAmH,IAAA,IAAAssD,EAAAqS,GAAAlmE,EAAAI,EAAAswB,EAAAuC,OAAAhzB,GAAAg0D,EAAAljD,KAAA,IAAAs1D,GAAAjmE,EAAAyzD,EAAAoP,GAAAtjE,EAAAy1D,KAAA1kC,EAAAuC,QAAA,QAAAhzB,EAAAg0D,EAAA,IAAAoS,GAAAjmE,EAAAyzD,EAAAnjC,EAAAuC,MAAA,UAAAqzC,GAAAlmE,EAAA0+B,GAAA,GAAA1+B,EAAA,YAAAswB,EAAAtwB,EAAA8W,MAAA,yCAAAwZ,EAAA,MACAtwB,IAAA0F,MAAA,EAAA4qB,EAAAtZ,OAAAhX,EAAA0F,MAAA4qB,EAAAtZ,MAAAsZ,EAAA,GAAAhwB,QAAA,IAAAT,EAAAywB,EAAA,+BAAAoO,EAAA7+B,GAAA6+B,EAAA7+B,GAAAywB,EAAA,OAAAvpB,OAAA,YAAAupB,EAAA,gBAAA1qB,KAAA84B,EAAA7+B,MAAA6+B,EAAA7+B,IAAA,IAAAywB,EAAA,WAAAtwB,CAAA,UAAAkkE,GAAAlkE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,EAAAK,EAAAszD,GAAA,IAAAW,EAAAvjC,EAAA61C,aAAA,MAAAtS,MAAA7zD,EAAAuI,QAAA49D,cAAA,IAAA1S,EAAA,EAAArhC,EAAA,KAAA0oB,EAAA,IAAA4qB,EAAAhnC,EAAA1+B,EAAAuI,QAAAo9D,QAAA9lE,GAAAL,EAAAQ,EAAAuI,QAAA69D,cAAA,eAAA1nC,GAAAwnC,GAAAN,GAAAt1C,EAAAzwB,EAAAgzB,OAAAjzB,IAAAk7C,EAAA+qB,OAAA,IAAA/qB,EAAA3zC,IAAAnH,EAAAuI,QAAAs8D,mBAAA,CAAAhR,GAAA,EAAAX,GAAAoS,GAAAtlE,EAAA0+B,EAAA7+B,EAAAi7C,EAAA3zC,KAAA2zC,EAAA3zC,IAAAu3B,EAAAp+B,OAAA,IAAAH,EAAA,UAAAA,EAAA+lE,GAAAJ,GAAAx1C,EAAAwqB,EAAAj7C,EAAAgzB,MACArzB,GAAAI,GAAA,GAAAJ,EAAA,KAAAo0D,EAAAp0D,EAAA,GAAAmG,KAAAiuD,IAAAzzD,EAAA,MAAAA,EAAAyzD,EAAA,IAAAzzD,EAAAyzD,GAAA,KAAAC,GAAAzhC,GAAAjyB,EAAA,MAAAszD,EAAA3Y,EAAAlsC,OAAA6kD,EAAA50B,KAAAhL,IAAAinB,EAAAlsC,MAAA6kD,EAAA,KAAAl0D,EAAAk0D,EAAArhC,KAAAjyB,CAAA,CAAA26C,EAAAlsC,MAAAksC,EAAA3zC,GAAA,MAAAssD,EAAA3Y,EAAA3zC,KAAAnH,EAAA6+B,KAAAhL,IAAAinB,EAAA3zC,IAAAssD,EAAA,KAAAl0D,EAAAS,EAAAoyB,GAAAqhC,EAAAzzD,CAAA,UAAAolE,GAAAplE,EAAA0+B,EAAApO,GAAA,QAAAzwB,EAAAN,EAAAK,EAAAI,EAAAmkE,IAAAjR,EAAA5iC,GAAA,EAAAoO,GAAA1+B,EAAAmkE,IAAAnP,KAAAxC,UAAA,SAAA9zB,EAAAw0B,IAAAx0B,EAAA,IAAAA,GAAA9+B,EAAAkkB,MAAA,OAAAlkB,EAAAkkB,MAAA,IAAA+vC,EAAAW,EAAA50D,EAAA8+B,EAAA,GAAA+0B,EAAAI,EAAAiR,WAAA,GAAArR,KAAAnjC,GAAAoO,GAAA+0B,aAAA4S,GAAA5S,EAAA6S,UAAA,IAAA1mE,EAAAslE,cAAA,OAAAxmC,EAAAm1B,EAAAsL,GAAAtL,EAAA9iD,KAAA,KAAA/Q,EAAAuI,QAAAo9D,SAAA,SAAApmE,GAAAM,EAAAg0D,EAAAt0D,EAAAm/B,EAAA,EAAA7+B,EAAAg0D,CAAA,QAAAt0D,CAAA,UAAAgnE,GAAAvmE,EAAA0+B,GAAA1+B,EAAAklE,aACArmC,KAAAhL,IAAA7zB,EAAAklE,aAAAxmC,GAAA,KAAA1+B,EAAAilE,kBAAAvmC,EAAA,aAAApO,EAAAtwB,EAAA8jB,MAAAjkB,EAAA6+B,EAAA,EAAA7+B,EAAAywB,EAAAzwB,IAAA,KAAAN,EAAAi1D,EAAAx0D,EAAAH,GAAAilE,WAAA,GAAAvlE,mBAAA8mE,KAAAxmE,EAAAN,EAAA+mE,UAAA5nC,GAAA,CAAApO,EAAAzwB,EAAA,SAAAG,EAAAilE,kBAAApmC,KAAAhL,IAAA7zB,EAAAilE,kBAAA30C,EAAA,WAAAk2C,GAAAxmE,EAAA0+B,EAAApO,GAAAnqB,KAAAsgE,OAAAzmE,EAAAmG,KAAAnC,KAAA06B,EAAAv4B,KAAAgtD,GAAA7iC,CAAA,UAAAo2C,GAAA1mE,EAAA0+B,GAAA,GAAA1+B,EAAA,QAAAswB,EAAA,EAAAA,EAAAtwB,EAAAM,SAAAgwB,EAAA,KAAAzwB,EAAAG,EAAAswB,GAAA,GAAAzwB,EAAA4mE,QAAA/nC,EAAA,OAAA7+B,CAAA,WAAA8mE,GAAA3mE,EAAA0+B,GAAA,GAAAA,EAAAkoC,KAAA,gBAAAt2C,EAAAgzC,GAAAtjE,EAAA0+B,EAAA16B,KAAAuK,OAAAimD,EAAAx0D,EAAA0+B,EAAA16B,KAAAuK,MAAAs4D,YAAAhnE,EAAAyjE,GAAAtjE,EAAA0+B,EAAAy0B,GAAA5kD,OAAAimD,EAAAx0D,EAAA0+B,EAAAy0B,GAAA5kD,MAAAs4D,YACA,IAAAv2C,IAAAzwB,EAAA,YAAAG,EAAA0+B,EAAA16B,KAAAyuB,GAAA,IAAAlzB,EAAAm/B,EAAAy0B,GAAA1gC,GAAA7yB,EAAA,GAAAk1D,EAAAp2B,EAAA16B,KAAA06B,EAAAy0B,IAAAD,EAAA,GAAA5iC,EAAA,QAAAujC,EAAA,EAAAA,EAAAvjC,EAAAhwB,SAAAuzD,EAAA,KAAAJ,EAAAnjC,EAAAujC,GAAAzhC,EAAAqhC,EAAAgT,OAAA,SAAAhT,EAAAzvD,OAAAouB,EAAA00C,cAAArT,EAAAzvD,MAAAhE,EAAAyzD,EAAAzvD,KAAAhE,MAAAyzD,EAAAzvD,MAAAhE,GAAA,YAAAoyB,EAAAjhB,MAAAvR,GAAA6zD,EAAAgT,OAAAM,YAAA,KAAAjsB,EAAA,MAAA2Y,EAAAN,KAAA/gC,EAAA40C,eAAAvT,EAAAN,IAAAnzD,EAAAyzD,EAAAN,GAAAnzD,IAAAkzD,MAAA,KAAAviD,KAAA,IAAA61D,GAAAp0C,EAAAqhC,EAAAzvD,KAAA82C,EAAA,KAAA2Y,EAAAN,IAAA,EAAA7iC,EAAA4iC,EAAA,IAAA1zD,EAAA,GAAAK,EAAA,IAAAqzD,EAAA,EAAAA,EAAArzD,EAAAS,SAAA4yD,EAAA,GAAAW,EAAAh0D,EAAAqzD,GAAAO,EAAAI,EAAA4S,OAAA,MAAA5S,EAAAV,KAAAM,EAAAuT,eAAAnT,EAAAV,IAAA5zD,EAAAs0D,EAAAV,GAAA5zD,IAAAs0D,EAAA7vD,MAAAzE,GAAA,YAAAk0D,EAAAtiD,QAAAvR,GAAAi0D,EAAA4S,OAAAM,YAAA30C,EACA,MAAAyhC,EAAA7vD,OAAAyvD,EAAAqT,cAAAjT,EAAA7vD,MAAAzE,EAAAs0D,EAAA7vD,KAAAzE,IAAAC,MAAA,KAAAmR,KAAA,IAAA61D,GAAA/S,EAAArhC,EAAA,KAAAyhC,EAAA7vD,KAAAzE,EAAA,MAAAs0D,EAAAV,GAAA,KAAAU,EAAAV,GAAA5zD,IAAAM,EAAA,GAAA6+B,EAAA3tB,KAAAzQ,OAAAf,EAAA4yD,EAAAzzB,EAAA3tB,MAAAzQ,QAAAT,EAAAG,EAAA,MAAAswB,EAAA,IAAA1wB,EAAA,EAAAA,EAAA0wB,EAAAhwB,SAAAV,EAAA,GAAAszD,EAAA5iC,EAAA1wB,GAAA,MAAAszD,EAAAC,IAAAU,EAAA6S,GAAAlnE,EAAA0zD,EAAAuT,QAAA5S,GAAAh0D,IAAAqzD,EAAAC,GAAA,MAAAU,EAAAV,GAAA,KAAAU,EAAAV,GAAA5zD,GAAA2zD,EAAAC,GAAAnzD,EAAA,GAAAR,EAAA,IAAAQ,EAAA,EAAAA,EAAAR,EAAAc,SAAAN,EAAAJ,EAAAJ,EAAAQ,GAAA,MAAAJ,EAAAuzD,KAAAvzD,EAAAuzD,IAAA5zD,GAAA,MAAAK,EAAAoE,KAAA0iE,GAAAp2C,EAAA1wB,EAAA6mE,UAAA7mE,EAAAoE,KAAAzE,EAAAM,IAAAywB,MAAA,KAAA3f,KAAA/Q,OAAAoE,MAAAzE,EAAAM,IAAAywB,MAAA,KAAA3f,KAAA/Q,IAAA0wB,MAAA22C,GAAA32C,IAAA9wB,MAAA8wB,IAAA9wB,EAAAynE,GAAAznE,IAAAQ,EAAA,CAAAswB,GAAA,IAAAzwB,EAAA,CAAA6+B,IAAA3tB,KAAAzQ,OAAA,MAAAH,EAAA,KACAu+B,GAAApO,EAAA,IAAAzwB,EAAA,EAAAA,EAAAywB,EAAAhwB,SAAAT,EAAA,MAAAywB,EAAAzwB,GAAAszD,KAAAhzD,MAAA,KAAAwQ,KAAA,IAAA61D,GAAAl2C,EAAAzwB,GAAA4mE,OAAA,gBAAAn2C,EAAA,EAAAA,EAAAoO,IAAApO,EAAAtwB,EAAA2Q,KAAAxQ,GAAAH,EAAA2Q,KAAAnR,EAAA,QAAAQ,CAAA,UAAAinE,GAAAjnE,GAAA,QAAA0+B,EAAA,EAAAA,EAAA1+B,EAAAM,SAAAo+B,EAAA,KAAApO,EAAAtwB,EAAA0+B,GAAA,MAAApO,EAAAtsB,MAAAssB,EAAAtsB,MAAAssB,EAAA6iC,KAAA,IAAA7iC,EAAAm2C,OAAAS,gBAAAlnE,EAAAm+D,OAAAz/B,IAAA,UAAA1+B,EAAAM,OAAAN,EAAA,cAAAmnE,GAAAnnE,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAA,KAAAG,EAAA6D,KAAA66B,EAAAnwB,KAAA+hB,EAAA/hB,KAAA,YAAAusC,GAAA,GAAAA,EAAA+rB,YAAA,QAAArnE,EAAA,EAAAA,EAAAs7C,EAAA+rB,YAAAvmE,SAAAd,EAAA,KAAAW,EAAA26C,EAAA+rB,YAAArnE,GAAAinE,QAAAtmE,EAAAinE,UAAAvnE,IAAA,GAAAu/D,GAAAv/D,EAAAM,KAAAN,MAAA,KAAA8Q,KAAAxQ,EAAA,SAAAN,EAAA,YACAG,EAAA,EAAAgE,KAAA06B,EAAAy0B,GAAA7iC,IAAA,IAAAoO,EAAA,EAAAA,EAAA7+B,EAAAS,SAAAo+B,EAAA,CAAApO,EAAAzwB,EAAA6+B,GAAA,QAAAn/B,EAAA+wB,EAAAmc,KAAA,GAAA7sC,EAAA,EAAAA,EAAAI,EAAAM,SAAAV,EAAA,KAAAszD,EAAAlzD,EAAAJ,GAAA,OAAAk1D,EAAA5B,EAAAC,GAAA5zD,EAAAyE,OAAA,EAAA8wD,EAAA5B,EAAAlvD,KAAAzE,EAAA4zD,KAAA,KAAAU,EAAA,CAAAj0D,EAAA,GAAA6zD,EAAAqB,EAAA5B,EAAAlvD,KAAAzE,EAAAyE,MAAAouB,EAAA0iC,EAAA5B,EAAAC,GAAA5zD,EAAA4zD,KAAA,EAAAM,IAAAnjC,EAAAw2C,gBAAArT,IAAAI,EAAAljD,KAAA,CAAA3M,KAAAkvD,EAAAlvD,KAAAmvD,GAAA5zD,EAAAyE,QAAA,EAAAouB,IAAA9B,EAAA02C,iBAAA50C,IAAAyhC,EAAAljD,KAAA,CAAA3M,KAAAzE,EAAA4zD,MAAAD,EAAAC,KAAAnzD,EAAAm+D,OAAAn5B,MAAAhlC,EAAA6zD,GAAAj0D,GAAAi0D,EAAAvzD,OAAA,WAAAN,CAAA,UAAAqnE,GAAArnE,GAAA,IAAA0+B,EAAA1+B,EAAA6mE,YAAA,GAAAnoC,EAAA,SAAApO,EAAA,EAAAA,EAAAoO,EAAAp+B,SAAAgwB,EAAAoO,EAAApO,GAAAm2C,OAAAa,WAAAtnE,KAAA6mE,YAAA,eAAAU,GAAAvnE,EAAA0+B,GAAA,GAAAA,EAAA,SAAApO,EAAA,EAAAA,EACAoO,EAAAp+B,SAAAgwB,EAAAoO,EAAApO,GAAAm2C,OAAAe,WAAAxnE,KAAA6mE,YAAAnoC,CAAA,WAAA+oC,GAAAznE,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAA+xC,MAAAzxC,OAAAo+B,EAAAqT,MAAAzxC,OAAA,MAAAgwB,EAAA,OAAAA,IAAAtwB,EAAAysC,OAAA,IAAA5sC,EAAA6+B,EAAA+N,OAAAltC,EAAAu1D,EAAAxkC,EAAAtsB,KAAAnE,EAAAmE,QAAAhE,EAAA8mE,eAAA,MAAApoC,EAAAooC,eAAA,YAAAvnE,MAAA+wB,EAAAwkC,EAAAxkC,EAAA6iC,GAAAtzD,EAAAszD,MAAAnzD,EAAAgnE,eAAA,MAAAtoC,EAAAsoC,eAAA,MAAA12C,EAAAoO,EAAAngB,GAAAve,EAAAue,EAAA,UAAAmpD,GAAA1nE,EAAA0+B,GAAA1+B,EAAA2nE,IAAA3nE,EAAA6mE,YAAA,GAAA7mE,EAAA,QAAAswB,EAAAzwB,EAAA,EAAAA,EAAAG,EAAAM,SAAAT,EAAA,GAAAywB,EAAAtwB,EAAAH,GAAAywB,EAAAm2C,OAAAmB,WAAA,OAAAlpC,EAAApO,EAAAtsB,KAAAssB,EAAA6iC,OAAA5zD,GAAA,EAAAkoE,GAAAloE,EAAA+wB,EAAAm2C,SAAA,IAAAlnE,EAAA+wB,EAAAm2C,OAAA,OAAAlnE,CAAA,UAAAsoE,GAAA7nE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAAS,EACAw0D,EAAAx0D,EAAA0+B,GAAA,GAAA1+B,EAAA2nE,IAAA3nE,EAAA6mE,YAAA,IAAAnoC,EAAA,EAAAA,EAAA1+B,EAAAM,SAAAo+B,EAAA,KAAA9+B,EAAAI,EAAA0+B,GAAA,GAAA9+B,EAAA6mE,OAAAmB,UAAA,KAAA1U,EAAAtzD,EAAA6mE,OAAAh6B,KAAA,GAAAonB,EAAAiB,EAAA5B,EAAAlvD,KAAAssB,KAAA1wB,EAAA6mE,OAAAK,eAAA,MAAAvnE,EAAAunE,eAAA,KAAArT,EAAAqB,EAAA5B,EAAAC,GAAAtzD,KAAAD,EAAA6mE,OAAAO,eAAA,MAAAznE,EAAAynE,eAAA,aAAAnT,GAAA,GAAAJ,GAAA,GAAAI,GAAA,GAAAJ,KAAA,GAAAI,IAAAj0D,EAAA6mE,OAAAO,gBAAAznE,EAAAunE,cAAA,GAAAhS,EAAA5B,EAAAC,GAAA7iC,GAAA,EAAAwkC,EAAA5B,EAAAC,GAAA7iC,KAAA,GAAAujC,IAAAj0D,EAAA6mE,OAAAO,gBAAAznE,EAAAunE,cAAA,GAAAhS,EAAA5B,EAAAlvD,KAAAnE,GAAA,EAAAi1D,EAAA5B,EAAAlvD,KAAAnE,KAAA,oBAAAioE,GAAA9nE,GAAA,QAAA0+B,IAAAgpC,GAAA1nE,GAAA,IAAAA,EAAA0+B,EAAA+N,MAAA,MAAAl+B,KAAA,OAAAvO,CAAA,CACA,SAAA+nE,GAAA/nE,EAAA0+B,GAAA1+B,EAAAw0D,EAAAx0D,EAAA0+B,GAAA,IAAApO,EAAAw3C,GAAA9nE,GAAA,OAAAA,GAAAswB,EAAAoO,EAAA88B,EAAAlrC,EAAA,UAAA03C,GAAAhoE,EAAA0+B,GAAA,GAAAA,EAAA1+B,EAAAuzD,WAAA,OAAA70B,EAAA,IAAApO,EAAAkkC,EAAAx0D,EAAA0+B,GAAA,IAAAupC,GAAAjoE,EAAAswB,GAAA,OAAAoO,EAAA,KAAA1+B,EAAA0nE,GAAAp3C,GAAA,IAAAA,EAAAtwB,EAAAysC,KAAA,MAAAl+B,KAAA,OAAAitD,EAAAlrC,GAAA,WAAA23C,GAAAjoE,EAAA0+B,GAAA,IAAApO,EAAAq3C,IAAAjpC,EAAAmoC,YAAA,GAAAv2C,EAAA,QAAAzwB,EAAAN,EAAA,EAAAA,EAAA+wB,EAAAhwB,SAAAf,EAAA,GAAAM,EAAAywB,EAAA/wB,GAAAM,EAAA4mE,OAAAmB,YAAA,MAAA/nE,EAAAmE,OAAAnE,EAAA4mE,OAAAyB,YAAA,GAAAroE,EAAAmE,MAAAnE,EAAA4mE,OAAAK,eAAAqB,GAAAnoE,EAAA0+B,EAAA7+B,IAAA,kBAAAsoE,GAAAnoE,EAAA0+B,EAAApO,GAAA,SAAAA,EAAA6iC,GAAA,OAAAz0B,EAAApO,EAAAm2C,OAAAh6B,KAAA,MAAA07B,GAAAnoE,EAAA0+B,EAAAnwB,KAAAm4D,GAAAhoC,EAAAnwB,KAAAs4D,YAAAv2C,EAAAm2C,SAAA,GAAAn2C,EAAAm2C,OAAAO,gBACA12C,EAAA6iC,IAAAz0B,EAAA3tB,KAAAzQ,OAAA,iBAAAT,EAAAN,EAAA,EAAAA,EAAAm/B,EAAAmoC,YAAAvmE,SAAAf,EAAA,GAAAM,EAAA6+B,EAAAmoC,YAAAtnE,GAAAM,EAAA4mE,OAAAmB,YAAA/nE,EAAA4mE,OAAAyB,YAAAroE,EAAAmE,MAAAssB,EAAA6iC,KAAA,MAAAtzD,EAAAszD,IAAAtzD,EAAAszD,IAAA7iC,EAAAtsB,QAAAnE,EAAA4mE,OAAAK,eAAAx2C,EAAAm2C,OAAAO,iBAAAmB,GAAAnoE,EAAA0+B,EAAA7+B,GAAA,kBAAAuoE,GAAApoE,KAAA8nE,GAAA9nE,GAAA,QAAA0+B,EAAA,EAAApO,EAAAtwB,EAAAgiB,OAAAniB,EAAA,EAAAA,EAAAywB,EAAAyhB,MAAAzxC,SAAAT,EAAA,KAAAN,EAAA+wB,EAAAyhB,MAAAlyC,GAAA,GAAAN,GAAAS,EAAA,WAAA0+B,GAAAn/B,EAAA+5D,MAAA,KAAAt5D,EAAAswB,EAAAtO,OAAAhiB,EAAAswB,EAAAtwB,IAAAswB,EAAAtO,OAAA,IAAAniB,EAAA,EAAAA,EAAAG,EAAAqrC,SAAA/qC,SAAAf,EAAAS,EAAAqrC,SAAAxrC,GAAAN,GAAA+wB,KAAAzwB,EAAA6+B,GAAAn/B,EAAA+5D,OAAA,OAAA56B,CAAA,UAAA2pC,GAAAroE,GAAA,MAAAA,EAAAs5D,OAAA,SACA,QAAA56B,EAAA1+B,EAAA+Q,KAAAzQ,OAAAgwB,EAAAzwB,EAAAG,EAAAswB,EAAAo3C,GAAA7nE,GAAA,IAAAywB,IAAAmc,KAAA,MAAA5sC,EAAAywB,EAAAtsB,KAAAuK,KAAAmwB,GAAApO,EAAAtsB,KAAAyuB,GAAAnC,EAAA6iC,GAAA1gC,GAAA,IAAA5yB,EAAAG,EAAAswB,EAAAo3C,GAAA7nE,GAAA,IAAAG,EAAAswB,EAAAmc,KAAA,MAAA/N,GAAA7+B,EAAAkR,KAAAzQ,OAAAN,EAAAgE,KAAAyuB,GAAA5yB,EAAAG,EAAAmzD,GAAA5kD,KAAAmwB,GAAA7+B,EAAAkR,KAAAzQ,OAAAN,EAAAmzD,GAAA1gC,GAAA,OAAAiM,CAAA,UAAA4pC,GAAAtoE,GAAA,IAAA0+B,EAAA1+B,EAAAu5D,QAAAv5D,IAAAmkE,IAAAzlC,EAAA6pC,QAAA/T,EAAAx0D,IAAA8jB,OAAA4a,EAAA8pC,cAAAH,GAAA3pC,EAAA6pC,SAAA7pC,EAAA+pC,gBAAA,EAAAzoE,EAAA6D,MAAA,SAAAysB,GAAA,IAAAzwB,EAAAwoE,GAAA/3C,GAAAzwB,EAAA6+B,EAAA8pC,gBAAA9pC,EAAA8pC,cAAA3oE,EAAA6+B,EAAA6pC,QAAAj4C,EAAA,aAAAo4C,GAAA1oE,EAAA0+B,GAAA,IAAA1+B,GAAA,QAAA4F,KAAA5F,GAAA,YAAA0+B,IAAA0nC,aAAAuC,GAAAC,GAAA,OAAAlqC,EAAA1+B,KAAA0+B,EAAA1+B,KAAAmO,QAAA,OACA,mBAAA06D,GAAA7oE,EAAA0+B,GAAA,IAAApO,EAAAgrC,EAAA,iBAAAwN,GAAA,4BAAAx4C,EAAA,CAAAy4C,IAAAzN,EAAA,OAAAhrC,GAAA,mBAAA04C,QAAA14C,EAAA9hB,IAAA,EAAArH,IAAA,EAAAwuD,GAAA31D,EAAAipE,eAAA,EAAAC,YAAAlpE,EAAAmpE,UAAA,iBAAAzqC,EAAA0qC,QAAA,WAAAvpE,EAAA,EAAAA,IAAA6+B,EAAAlZ,KAAAkZ,EAAAlZ,KAAAllB,OAAA,GAAAT,IAAA,KAAAN,EAAAM,EAAA6+B,EAAAlZ,KAAA3lB,EAAA,GAAA6+B,EAAAnwB,KAAA3O,OAAA,EAAA0wB,EAAAnpB,IAAA,EAAAmpB,EAAA+4C,SAAAC,GAAA,IAAApW,EAAAlzD,EAAAu5D,QAAA6P,QAAA,SAAAG,GAAArW,EAAAqW,OAAA,KAAA1V,EAAAe,EAAA1B,EAAAlG,SAAA8K,eAAA,QAAArE,EAAA+V,GAAA3V,EAAA,KAAA0E,wBAAA1E,EAAA2V,GAAA3V,EAAA,KAAA0E,wBAAA7F,EAAAQ,KAAAO,KAAAj1C,MACAi1C,EAAAh1C,MAAA8qD,GAAA,EAAA1V,EAAAp1C,MAAAg1C,EAAAh1C,OAAA,EAAAy0C,IAAAtzD,EAAA0gE,GAAA/gE,EAAAS,EAAAmkE,IAAAsF,cAAAn5C,EAAA+4C,SAAAK,GAAAp5C,EAAA+4C,SAAAzpE,IAAA0wB,EAAAwY,IAAA,OAAA1W,EAAAsM,GAAA1+B,EAAAu5D,QAAAoQ,kBAAAnO,EAAAj8D,GAAAS,EAAA,KAAA86C,EAAA+Y,EAAAJ,EAAAP,OAAA,EAAA1zD,OAAA,EAAAW,OAAA,EAAAyzD,OAAA,EAAAh0D,EAAA0wB,EAAA8B,EAAAuyC,GAAA3kE,EAAAT,EAAA6yB,GAAA,IAAA9yB,EAAAC,EAAAsnE,YAAA9mE,EAAAR,EAAAwR,KAAAwjD,EAAA,KAAAj1D,EAAA,QAAAsqE,EAAA7pE,EAAAO,OAAAq+B,EAAA,EAAAkrC,EAAA,EAAAjX,EAAA,GAAAkX,EAAA,QAAAA,GAAAnrC,EAAA,CAAAn/B,EAAAs7C,EAAA+Y,EAAA1zD,EAAA,GAAAszD,EAAAP,EAAA,KAAA4W,EAAAluC,SAAA,QAAAmuC,EAAA,GAAAlV,OAAA,EAAAmV,EAAA,EAAAA,EAAA1qE,EAAAgB,SAAA0pE,EAAA,KAAAtV,EAAAp1D,EAAA0qE,GAAAjP,EAAArG,EAAA+R,OAAA,eAAA1L,EAAA5pD,MAAAujD,EAAA1wD,MAAA26B,GAAAo8B,EAAAmN,WAAA6B,EAAAp5D,KAAAoqD,QAAA,GAAArG,EAAA1wD,MAAA26B,IAAA,MAAA+1B,EAAAvB,IAAAuB,EAAAvB,GAAAx0B,GAAAo8B,EAAA6M,WAAAlT,EAAAvB,IACAx0B,GAAA+1B,EAAA1wD,MAAA26B,GAAA,OAAA+1B,EAAAvB,IAAAuB,EAAAvB,IAAAx0B,GAAAmrC,EAAApV,EAAAvB,KAAA2W,EAAApV,EAAAvB,GAAArY,EAAA,IAAAigB,EAAApD,YAAAn4D,GAAA,IAAAu7D,EAAApD,WAAAoD,EAAAkP,MAAA9pE,OAAA,QAAA46D,EAAAkP,KAAAlP,EAAAmP,YAAAxV,EAAA1wD,MAAA26B,IAAAk1B,GAAA,IAAAkH,EAAAmP,YAAAnP,EAAAoP,UAAAzV,EAAAvB,IAAA2W,IAAAjV,MAAA,KAAAlkD,KAAAoqD,EAAAoP,SAAAzV,EAAAvB,IAAA4H,EAAAhO,SAAAmG,MAAA,KAAAnG,MAAAgO,EAAAhO,OAAA,GAAAgO,EAAAqP,WAAA,QAAAC,MAAAtP,EAAAqP,YAAAlX,MAAA,KAAAmX,IAAAtP,EAAAqP,WAAAC,IAAAtP,EAAA6M,aAAAnU,GAAA,EAAAgU,GAAAhU,EAAAgT,OAAA1L,MAAAtH,EAAAiB,EAAA,MAAAA,EAAA1wD,KAAA26B,GAAAmrC,EAAApV,EAAA1wD,OAAA8lE,EAAApV,EAAA1wD,KAAA,IAAA6wD,EAAA,IAAAmV,EAAA,EAAAA,EAAAnV,EAAAv0D,OAAA0pE,GAAA,EAAAnV,EAAAmV,EAAA,IAAAF,IAAAhvB,GAAA,IAAA+Z,EAAAmV,IAAA,IAAAvW,KAAAzvD,MAAA26B,EAAA,IAAAk2B,EAAA,EAAAA,EAAAkV,EAAAzpE,SAAAu0D,EAAAyV,GAAA1qE,EACA,EAAAmqE,EAAAlV,IAAA,GAAApB,MAAAzvD,MAAA,IAAA26B,EAAA,CAAA2rC,GAAA1qE,GAAA,MAAA6zD,EAAAN,GAAAyW,EAAA,EAAAnW,EAAAN,IAAAx0B,EAAA80B,EAAAgT,OAAA,MAAAhT,EAAAzvD,MAAA,SAAAyvD,EAAAN,GAAA,MAAAnzD,EAAAyzD,EAAAN,IAAAx0B,IAAA80B,GAAA,OAAA90B,GAAAirC,EAAA,UAAAG,EAAAlrC,KAAAhL,IAAA+1C,EAAAE,KAAA,IAAAlX,EAAA,CAAAiC,EAAAl2B,EAAAi0B,EAAAtyD,OAAAmzD,IAAAuW,EAAAnV,EAAAkV,EAAAnX,EAAAltD,MAAA,EAAAqkE,EAAAprC,GAAAi0B,EAAAhzD,EAAAypE,SAAAzpE,EAAAoqE,EAAApW,IAAAp0D,IAAAq0D,EAAAl1B,EAAAqrC,EAAA1pE,QAAAwpE,EAAAhvB,EAAA,GAAA36C,EAAA+yD,IAAA,GAAA2B,GAAAkV,EAAA,CAAAnX,IAAAltD,MAAAqkE,EAAAprC,KAAAorC,EAAA,MAAAprC,EAAAk2B,EAAAhB,EAAA,GAAAjB,EAAA7yD,EAAA2F,MAAA6uD,IAAAniC,EAAAy3C,MAAAjW,EAAA8U,GAAAt2C,EAAAy3C,KAAAjqE,EAAA+1D,GAAAptD,QAAA,WAAA2qD,EAAA,EAAAA,EAAA9gC,EAAA9xB,OAAA4yD,GAAA,EAAAtzD,EAAAypE,SAAAzpE,EAAAG,EAAA2F,MAAA6uD,IAAAniC,EAAA8gC,IAAAwV,GAAAt2C,EAAA8gC,EAAA,GAAAtzD,EAAA+1D,GAAAptD,SAAA,CAAAhJ,EAAAylE,eAAAzlE,EAAAylE,aAAAP,UAAAn0C,EAAAm0C,QAAA3F,GAAAv/D,EAAAylE,aAAAP,QACAn0C,EAAAm0C,SAAA,KAAAllE,EAAAylE,aAAAN,YAAAp0C,EAAAo0C,UAAA5F,GAAAv/D,EAAAylE,aAAAN,UAAAp0C,EAAAo0C,WAAA,SAAAp0C,EAAAwY,IAAAxoC,SAAAf,EAAA+wB,EAAAwY,IAAAlpC,EAAAL,EAAAoR,KAAAuiD,EAAA5iC,EAAA04C,QAAAvV,EAAAP,EAAAxD,YAAAmE,EAAA7zD,EAAAu5D,QAAA6P,QAAA,MAAAmB,KAAAzvB,EAAAhoB,EAAA,YAAA8hC,EAAAf,EAAA/gC,EAAA,QAAAgoB,EAAAkS,SAAA8K,eAAA,WAAAjE,EAAA6F,WAAAX,eAAAwR,GAAA,GAAAzvB,EAAA8d,aAAA,EAAA9d,EAAAie,gBAAA1G,GAAA,EAAAmY,KAAA3W,EAAA0W,GAAAz3C,EAAA,YAAAA,EAAA,yEAAA+gC,EAAA6D,aAAA,cAAA93D,EAAAS,KAAAd,EAAA,IAAAk0D,EAAApzD,KAAA6yD,EACAW,KAAA,GAAAh0D,GAAA6+B,EAAA0qC,QAAAtgC,IAAAxY,EAAAwY,IAAApK,EAAA0qC,QAAA3e,MAAA,MAAA/rB,EAAA0qC,QAAAqB,OAAA/rC,EAAA0qC,QAAAqB,KAAA,KAAA95D,KAAA2f,EAAAwY,MAAApK,EAAA0qC,QAAAsB,SAAAhsC,EAAA0qC,QAAAsB,OAAA,KAAA/5D,KAAA,KAAAm4D,KAAAuB,GAAA/5C,EAAA04C,QAAA2B,UAAA,aAAA/kE,KAAAykE,GAAA1S,YAAA0S,GAAAlc,eAAAkc,GAAAlc,cAAA,cAAA79B,EAAA04C,QAAArR,UAAA,oBAAAkJ,EAAA7gE,EAAA,aAAAA,EAAA0+B,EAAAnwB,KAAA+hB,EAAAy4C,KAAAz4C,EAAAy4C,IAAApR,YAAArnC,EAAAo0C,UAAA5F,GAAAxuC,EAAAy4C,IAAApR,UAAArnC,EAAAo0C,WAAA,YAAAp0C,CAAA,UAAAs6C,GAAA5qE,GAAA,IAAA0+B,EAAA5L,EAAA,6BAAA4L,EAAAquB,MAAA,MAAA/sD,EAAA0N,WAAA,GAAAjI,SAAA,IACAi5B,EAAAg5B,aAAA,aAAAh5B,EAAAquB,OAAA,OAAAruB,CAAA,UAAA4qC,GAAAtpE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,EAAAK,EAAAszD,GAAA,GAAAx0B,EAAA,IAAA1+B,EAAAkpE,YAAA,KAAArV,EAAA7zD,EAAAipE,cAAA,KAAAvqC,EAAAp+B,SAAA,KAAAsF,KAAA84B,GAAAm1B,EAAAn1B,MAAA,SAAA+0B,EAAA,GAAArhC,EAAA,EAAAA,EAAAsM,EAAAp+B,OAAA8xB,IAAA,KAAA0oB,EAAApc,EAAAznB,OAAAmb,GAAA,KAAA0oB,IAAA+Y,GAAAzhC,GAAAsM,EAAAp+B,OAAA,OAAAo+B,EAAAhxB,WAAA0kB,EAAA,KAAA0oB,EAAA,KAAA2Y,GAAA3Y,EAAA+Y,EAAA,KAAA/Y,CAAA,CAAA+Y,EAAAJ,CAAA,OAAAI,EAAAn1B,EAAA+0B,EAAAI,EAAAzhC,EAAApyB,EAAA21D,GAAA9iC,MAAAg4C,aAAA/vB,GAAA,KAAA1oB,EAAAxsB,KAAA84B,GAAA,CAAAm1B,EAAA7G,SAAA8d,yBAAA,QAAAtrE,EAAA,KAAA4yB,EAAAxb,UAAApX,EAAA,IAAAW,EAAAiyB,EAAAvb,KAAA6nB,GAAAk1B,EAAAzzD,IAAA6W,MAAAxX,EAAAk/B,EAAAp+B,OAAAd,EAAA,GAAAo0D,EAAA,KAAAt0D,EAAA0tD,SAAA8K,eAAArE,EAAA/tD,MAAAlG,IACAo0D,IAAAvB,GAAA,EAAAmY,EAAA3W,EAAAnE,YAAA58B,EAAA,QAAAxzB,KAAAu0D,EAAAnE,YAAApwD,GAAAU,EAAA8oC,IAAAn4B,KAAA3Q,EAAAmH,IAAAnH,EAAAmH,IAAAysD,EAAAt0D,GAAAU,EAAAwO,KAAAolD,EAAA5zD,EAAAmH,KAAAysD,CAAA,KAAAzzD,EAAA,MAAAX,GAAAo0D,EAAA,QAAAzzD,EAAA,IAAAA,EAAAH,EAAA21D,GAAAptD,QAAAo9D,QAAAxlE,GAAAH,EAAAwO,IAAArO,EAAAyzD,EAAAC,EAAAnE,YAAA58B,EAAA,OAAAvU,GAAApe,GAAA,WAAAyzD,EAAA8D,aAAA,uBAAA9D,EAAA8D,aAAA,gBAAA13D,EAAAwO,KAAArO,IAAA,MAAAA,EAAA,UAAAA,EAAA,IAAAyzD,EAAAC,EAAAnE,YAAA58B,EAAA,aAAA3yB,EAAA,8BAAAyzD,EAAA8D,aAAA,UAAAv3D,EAAA,MAAAyzD,EAAA5zD,EAAA21D,GAAAptD,QAAAwiE,uBAAA5qE,EAAA,IAAAyzD,EAAA8D,aAAA,UAAAv3D,EAAA,IAAAkyD,GAAA,EAAAmY,EACA3W,EAAAnE,YAAA58B,EAAA,QAAA8gC,KAAAC,EAAAnE,YAAAkE,IAAA5zD,EAAAwO,KAAA,GAAAxO,EAAA8oC,IAAAn4B,KAAA3Q,EAAAmH,IAAAnH,EAAAmH,IAAA,EAAAysD,GAAA5zD,EAAAmH,KAAA,OAAAnH,EAAAwO,KAAAkwB,EAAAp+B,OAAAuzD,EAAA7G,SAAA8K,eAAArE,GAAAzzD,EAAA8oC,IAAAn4B,KAAA3Q,EAAAmH,IAAAnH,EAAAmH,IAAAu3B,EAAAp+B,OAAAuzD,GAAAxB,GAAA,EAAAmY,IAAA1vB,GAAA,GAAA96C,EAAAmH,KAAAu3B,EAAAp+B,OAAAN,EAAAipE,cAAA,IAAAxV,EAAA/lD,WAAAgxB,EAAAp+B,OAAA,MAAAgwB,GAAAzwB,GAAAN,GAAAu7C,GAAAl7C,GAAAszD,EAAA,CAAAx0B,EAAApO,GAAA,GAAAzwB,IAAA6+B,GAAA7+B,GAAAN,IAAAm/B,GAAAn/B,GAAAM,EAAAizB,EAAA,QAAA+gC,GAAAn1B,EAAA9+B,GAAA,GAAAszD,EAAA,QAAAnzD,KAAAmzD,IAAAplD,eAAA/N,IAAA,SAAAA,GAAA,SAAAA,GAAAF,EAAA63D,aAAA33D,EAAAmzD,EAAAnzD,IAAA,OAAAC,EAAAgpE,QAAAtZ,YAAA7vD,EAAA,CAAAG,EAAAgpE,QAAAtZ,YAAAmE,EAAA,WAAA6V,GAAA1pE,EAAA0+B,GAAA,gBAAApO,EACAzwB,EAAAN,EAAAK,EAAAszD,EAAAW,EAAAJ,GAAAl0D,MAAA,6CAAA6yB,EAAA9B,EAAAnpB,IAAA2zC,EAAA1oB,EAAAvyB,EAAAS,SAAA,SAAAd,OAAA,EAAAW,EAAA,EAAAA,EAAAu+B,EAAAp+B,UAAAd,EAAAk/B,EAAAv+B,GAAAX,EAAA2zD,GAAA/gC,GAAA5yB,EAAAwE,MAAAouB,GAAAjyB,KAAA,GAAAX,EAAA2zD,IAAArY,EAAA,OAAA96C,EAAAswB,EAAAzwB,EAAAN,EAAAK,EAAAszD,EAAAW,EAAAJ,GAAAzzD,EAAAswB,EAAAzwB,EAAA6F,MAAA,EAAAlG,EAAA2zD,GAAA/gC,GAAA7yB,EAAAK,EAAA,KAAAi0D,EAAAJ,GAAA7zD,EAAA,KAAAC,IAAA6F,MAAAlG,EAAA2zD,GAAA/gC,KAAA5yB,EAAA2zD,EAAA,YAAAmX,GAAAtqE,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,GAAAM,GAAAywB,EAAA43C,WAAA3oE,GAAAS,EAAA8oC,IAAAn4B,KAAA3Q,EAAAmH,IAAAnH,EAAAmH,IAAAu3B,EAAAn/B,IAAAM,GAAAG,EAAA21D,GAAA4D,QAAA30D,MAAAomE,wBAAAzrE,MAAAS,EAAAgpE,QAAAtZ,YAAA1C,SAAAqC,cAAA,UAAA9vD,EAAAm4D,aAAA,YAAApnC,EAAA/R,KAAAhf,IAAAS,EAAA21D,GAAA4D,QAAA30D,MAAAqmE,cAAA1rE,GACAS,EAAAgpE,QAAAtZ,YAAAnwD,IAAAS,EAAAmH,KAAAu3B,EAAA1+B,EAAAipE,eAAA,WAAAiC,GAAAlrE,EAAA0+B,EAAApO,GAAA,QAAAzwB,EAAAsG,KAAAoI,KAAAmwB,EAAAn/B,EAAAM,EAAA6nE,GAAA7nE,GAAA,IAAAA,IAAA4sC,KAAA,MAAAl+B,MAAAhP,MAAA,KAAAoR,KAAA9Q,GAAAsG,KAAAi0B,MAAAj0B,KAAAqf,KAAAjmB,GAAAi8D,EAAArJ,EAAAhsD,KAAAqf,OAAA8K,EAAA,IAAAnqB,KAAAkP,KAAAlP,KAAA4K,KAAA,KAAA5K,KAAAglE,OAAAlD,GAAAjoE,EAAA0+B,EAAA,UAAA0sC,GAAAprE,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAA,GAAAN,EAAA,IAAAA,EAAAm/B,EAAAn/B,EAAA+wB,GAAAoO,EAAA,IAAAwsC,GAAAlrE,EAAAmkE,IAAA3P,EAAAx0D,EAAAmkE,IAAA5kE,SAAAm/B,EAAAtE,KAAAv6B,EAAA8Q,KAAA+tB,GAAA,OAAA7+B,CAAA,UAAAwrE,GAAArrE,EAAA0+B,GAAA,GAAA1+B,IAAAsrE,UAAA,QAAAh7C,EAAAtwB,EAAAurE,iBAAA1rE,EAAA,UAAAA,EAAAywB,EAAAhwB,OAAAT,IAAAywB,EAAAzwB,GAAAQ,KAAA,cAAAd,EAAA,EAAAA,EAAAS,EAAAwrE,IAAAlrE,OAAAf,IAAA,KAAAK,EAAAI,EAAAwrE,IAAAjsE,GAAA,GAAAK,EAAA0hE,uBAAA,KAAA1hE,EAAA6rE,qBACA7rE,EAAA0hE,uBAAAhhE,QAAAV,EAAA0hE,uBAAA1hE,EAAA6rE,wBAAAprE,KAAA,KAAAT,EAAA+1D,GAAA,QAAA91D,EAAAywB,EAAAhwB,OAAA,SAAAorE,GAAA,KAAAhtC,EAAA1+B,EAAA,WAAA2rE,GAAA3rE,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAA4gE,WAAA5gE,EAAA4gE,UAAAliC,IAAAoiC,GAAA,GAAAxwC,EAAAhwB,OAAA,KAAAT,EAAAwB,MAAAyB,UAAA4C,MAAArF,KAAA8V,UAAA,MAAAu1D,GAAA,IAAAnsE,EAAAmsE,GAAAH,sBAAAK,GAAArsE,EAAAqsE,IAAArsE,EAAAqsE,GAAA,GAAApnB,WAAAqnB,GAAA,YAAAjsE,EAAA,SAAAi0D,GAAAt0D,EAAAoR,MAAA,kBAAA2f,EAAAujC,GAAA7uB,MAAA,KAAAnlC,EAAA,KAAAqzD,EAAA,EAAAA,EAAA5iC,EAAAhwB,SAAA4yD,EAAAtzD,EAAAszD,EAAA,WAAA2Y,KAAA,IAAA7rE,EAAA4rE,MAAA,aAAAltC,EAAA,EAAAA,EAAA1+B,EAAAM,SAAAo+B,EAAA1+B,EAAA0+B,IAAA,UAAAotC,GAAA9rE,EAAA0+B,EACApO,EAAAzwB,GAAA,QAAAN,EAAA,EAAAA,EAAAm/B,EAAAqtC,QAAAzrE,OAAAf,IAAA,KAAAK,EAAA8+B,EAAAqtC,QAAAxsE,GAAA,WAAAK,EAAA,CAAAA,EAAAI,EAAA,IAAAkzD,EAAAx0B,EAAAm1B,EAAAX,EAAAniD,KAAA4mD,UAAAlE,EAAAuY,GAAApsE,EAAAszD,KAAAniD,MAAAmiD,EAAA79C,OAAA69C,EAAA79C,KAAAo+C,EAAAsV,KAAA7V,EAAAniD,KAAAugC,WAAA26B,aAAAxY,EAAAsV,IAAA7V,EAAAniD,MAAAmiD,EAAAniD,KAAA0iD,EAAAsV,IAAAtV,EAAAgR,SAAAvR,EAAAuR,SAAAhR,EAAAiR,WAAAxR,EAAAwR,WAAAxR,EAAAuR,QAAAhR,EAAAgR,QAAAvR,EAAAwR,UAAAjR,EAAAiR,UAAAwH,GAAAtsE,EAAAszD,IAAAW,IAAAX,EAAAniD,KAAA4mD,UAAA9D,EAAA,mBAAAj0D,EAAAusE,GAAAnsE,EAAA0+B,EAAApO,EAAAzwB,QAAA,YAAAD,EAAAssE,GAAAlsE,EAAA0+B,QAAA,aAAA9+B,EAAA,CAAAA,EAAAI,EAAAkzD,EAAAx0B,EAAAm1B,EAAAh0D,EAAAqzD,EAAAkZ,YAAAlZ,EAAAkZ,UAAA,MAAA3Y,EAAA70B,EAAA,iCAAAxM,EAAA8gC,EAAA79C,KAAAqkD,WACA5e,EAAA1oB,IAAA0oB,IAAA1oB,EAAAunC,YAAAlG,EAAA7tD,KAAAwsB,EAAAulC,YAAAzE,EAAA79C,KAAA86C,YAAA/9B,GAAAi6C,GAAAzsE,EAAAszD,EAAAW,EAAA,EAAAn1B,EAAAqtC,QAAA,cAAAO,GAAAtsE,KAAAqV,MAAArV,EAAA+Q,OAAA/Q,EAAAqV,KAAAyd,EAAA,sCAAA9yB,EAAA+Q,KAAAugC,YAAAtxC,EAAA+Q,KAAAugC,WAAA26B,aAAAjsE,EAAAqV,KAAArV,EAAA+Q,MAAA/Q,EAAAqV,KAAAq6C,YAAA1vD,EAAA+Q,MAAAshD,GAAA,EAAAmY,IAAAxqE,EAAAqV,KAAAyyB,MAAAykC,OAAA,WAAAvsE,EAAAqV,IAAA,UAAA22D,GAAAhsE,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAAu5D,QAAAoQ,iBAAA,OAAAr5C,KAAA/hB,MAAAmwB,EAAAnwB,MAAAvO,EAAAu5D,QAAAoQ,iBAAA,KAAAjrC,EAAA0qC,QAAA94C,EAAA84C,QAAA94C,EAAAk8C,OAAA3D,GAAA7oE,EAAA0+B,EAAA,UAAAwtC,GAAAlsE,EAAA0+B,GAAA,IAAApO,EAAAoO,EAAA+lC,QAAA/lC,EAAA+lC,QAAA,KACA/lC,EAAAnwB,KAAAk2D,SAAA,IAAA/lC,EAAAnwB,KAAAk2D,QAAAn0C,OAAA,iCAAAoO,EAAA+tC,WAAAn8C,EAAAoO,EAAA+tC,WAAA9U,UAAArnC,GAAAoO,EAAA+tC,WAAAn7B,WAAA6e,YAAAzxB,EAAA+tC,YAAA/tC,EAAA+tC,WAAA,cAAAn8C,EAAA,KAAAzwB,EAAAysE,GAAA5tC,KAAA+tC,WAAA5sE,EAAA6sE,aAAA55C,EAAA,WAAAxC,GAAAzwB,EAAA65D,YAAA15D,EAAAu5D,QAAA30D,MAAAqmE,cAAAvsC,EAAA+tC,WAAA,CAAA/tC,EAAAnwB,KAAAo+D,UAAAL,GAAA5tC,GAAAi5B,UAAAj5B,EAAAnwB,KAAAo+D,UAAAjuC,EAAArpB,MAAAqpB,EAAA3tB,OAAA2tB,EAAArpB,KAAAsiD,UAAA,IAAAj5B,EAAA3tB,KAAA4mD,WAAAj5B,EAAAgmC,UAAAhmC,EAAAgmC,UAAA,KAAAhmC,EAAAnwB,KAAAm2D,WAAA,IAAAhmC,EAAAnwB,KAAAm2D,YAAA,YAAAyH,GAAAnsE,EACA0+B,EAAApO,EAAAzwB,GAAA6+B,EAAAkuC,SAAAluC,EAAArpB,KAAA86C,YAAAzxB,EAAAkuC,QAAAluC,EAAAkuC,OAAA,MAAAluC,EAAAmuC,mBAAAnuC,EAAArpB,KAAA86C,YAAAzxB,EAAAmuC,kBAAAnuC,EAAAmuC,iBAAA,SAAAnuC,EAAAnwB,KAAAu+D,YAAA,KAAAvtE,EAAA+sE,GAAA5tC,KAAAmuC,iBAAA/5C,EAAA,2CAAA4L,EAAAnwB,KAAAu+D,YAAA,UAAA9sE,EAAAuI,QAAAwkE,YAAAltE,EAAAmtE,UAAAntE,EAAAotE,kBAAA,cAAAptE,EAAAotE,iBAAA,MAAAjtE,EAAAu5D,QAAA30D,MAAAqmE,cAAAvsC,EAAAmuC,kBAAAttE,EAAAmtE,aAAAhuC,EAAAmuC,iBAAAnuC,EAAA3tB,KAAA,CAAAxR,EAAAm/B,EAAAnwB,KAAA2+D,cAAA,GAAAltE,EAAAuI,QAAA4kE,aACA5tE,EAAA,KAAAK,EAAA0sE,GAAA5tC,GAAAw0B,EAAAx0B,EAAAkuC,OAAA95C,EAAA,iDAAA9yB,EAAAuI,QAAAwkE,YAAAltE,EAAAmtE,UAAAntE,EAAAotE,kBAAA,MAAA/Z,EAAAwE,aAAA,sBAAA13D,EAAAu5D,QAAA30D,MAAAqmE,cAAA/X,GAAAtzD,EAAA8sE,aAAAxZ,EAAAx0B,EAAA3tB,MAAA2tB,EAAAnwB,KAAAu+D,cAAA5Z,EAAAyE,WAAA,IAAAj5B,EAAAnwB,KAAAu+D,cAAA9sE,EAAAuI,QAAA4kE,aAAA5tE,KAAA,4BAAAm/B,EAAA0uC,WAAAla,EAAAxD,YAAA58B,EAAA,MAAAywC,GAAAvjE,EAAAuI,QAAA+nB,GAAA,uDAAAzwB,EAAAwtE,WAAA,wCACArtE,EAAAu5D,QAAA+T,kBAAA,WAAA/tE,EAAA,IAAAm/B,EAAA,EAAAA,EAAA1+B,EAAAu5D,QAAAgU,YAAAjtE,SAAAo+B,EAAApO,EAAAtwB,EAAAu5D,QAAAgU,YAAA7uC,GAAAi5B,WAAA/3D,EAAAL,EAAAuO,eAAAwiB,IAAA/wB,EAAA+wB,KAAA4iC,EAAAxD,YAAA58B,EAAA,OAAAlzB,GAAA,iCAAAC,EAAAwtE,WAAA/8C,GAAA,cAAAzwB,EAAA2tE,YAAAl9C,GAAA,iBAAAm9C,GAAAztE,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAysE,GAAAhsE,EAAA0+B,KAAA3tB,KAAA2tB,EAAArpB,KAAA9V,EAAAwpE,IAAAxpE,EAAAklE,UAAA/lC,EAAA+lC,QAAAllE,EAAAklE,SAAAllE,EAAAmlE,YAAAhmC,EAAAgmC,UAAAnlE,EAAAmlE,WAAAwH,GAAAlsE,EAAA0+B,GAAAytC,GAAAnsE,EAAA0+B,EAAApO,EAAAzwB,GAAAwsE,GAAArsE,EAAA0+B,EAAA7+B,GAAA,OAAA6+B,EAAArpB,IAAA,UAAAg3D,GAAArsE,EAAA0+B,EAAApO,GAAAo9C,GAAA1tE,EAAA0+B,EAAAnwB,KAAAmwB,EAAApO,GAAA,MAAAoO,EAAAlZ,KAAA,QAAA3lB,EAAA,EAAAA,EAAA6+B,EAAAlZ,KAAAllB,OAAAT,IAAA6tE,GAAA1tE,EACA0+B,EAAAlZ,KAAA3lB,GAAA6+B,EAAApO,GAAA,YAAAo9C,GAAA1tE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,GAAAm/B,EAAAivC,QAAA,KAAA/tE,EAAA0sE,GAAAh8C,GAAA4iC,EAAA,MAAAx0B,IAAAivC,QAAAza,EAAAx0B,EAAAp+B,SAAA4yD,EAAA,KAAAW,EAAAn1B,EAAAw0B,GAAAO,EAAA3gC,EAAA,OAAA+gC,EAAAx+C,MAAA,yBAAAw+C,EAAA8D,UAAA,IAAA9D,EAAA8D,UAAA,KAAA9D,EAAA+Z,mBAAAna,EAAAiE,aAAA,+BAAAtlC,EAAAyhC,EAAA/Y,EAAA2Y,EAAAj0D,EAAAK,EAAA,GAAAuyB,EAAAy7C,UAAA,EAAAv9C,EAAA87C,YAAA97C,EAAA87C,UAAA,KAAAz7D,KAAAmqC,GAAA,IAAA36C,EAAAX,EAAAsuE,aAAAhzB,EAAAhT,MAAAtpB,KAAAhf,EAAAwtE,SAAA,KAAA56C,EAAA27C,cAAA5tE,GAAAX,EAAAytE,iBAAAnyB,EAAAhT,MAAAkmC,YAAAxuE,EAAAytE,iBAAA,MAAAnyB,EAAAhT,MAAA2xB,MAAAt5D,EAAA,KAAAiyB,EAAA27C,cAAAjzB,EAAAhT,MAAAykC,OACA,EAAAzxB,EAAAhT,MAAA9K,SAAA,WAAA5K,EAAAy7C,YAAA/yB,EAAAhT,MAAAmmC,YAAAzuE,EAAAytE,iBAAA,OAAAjtE,EAAAu5D,QAAA30D,MAAAqmE,cAAAxX,GAAAl0D,GAAAs0D,EAAAqa,MAAAtuE,EAAA8sE,aAAAjZ,EAAAnjC,EAAAs8C,QAAAt8C,EAAAvf,MAAAnR,EAAA8vD,YAAA+D,GAAAkY,GAAA9X,EAAA,qBAAAsa,GAAAnuE,GAAA,SAAAA,EAAAs5D,OAAA,OAAAt5D,EAAAs5D,OAAA,IAAA56B,EAAA1+B,EAAAmkE,IAAAxO,GAAA,IAAAj3B,EAAA,aAAA4/B,GAAAtR,SAAAh0C,KAAAhZ,EAAAqV,MAAA,KAAAib,EAAA,sBAAAtwB,EAAA+tE,cAAAz9C,GAAA,iBAAAoO,EAAA66B,QAAA6U,QAAAxV,YAAA,OAAA54D,EAAA6tE,YAAAv9C,GAAA,UAAAoO,EAAA66B,QAAAyF,QAAAqP,YAAA,OAAAzZ,EAAAl2B,EAAA66B,QAAA6P,QAAAt2C,EAAA,MACA,CAAA9yB,EAAAqV,MAAA,KAAAib,GAAA,QAAAtwB,EAAAs5D,OAAAt5D,EAAAqV,KAAAi8B,WAAAynB,YAAA,UAAAuV,GAAAtuE,EAAA0+B,GAAA,IAAAA,IAAAx8B,QAAAw8B,EAAA87B,WAAA97B,GAAA1+B,EAAAg/D,QAAAtgC,IAAA4S,WAAA,IAAA5S,GAAA,GAAAA,EAAA8/B,UAAA,QAAA9/B,EAAA6vC,aAAA,qBAAA7vC,EAAA4S,YAAAtxC,EAAAwuE,OAAA9vC,GAAA1+B,EAAAyuE,MAAA,kBAAAC,GAAA1uE,GAAA,OAAAA,EAAAyuE,MAAA1V,aAAA/4D,EAAA2uE,UAAA5V,YAAA,UAAA6V,GAAA5uE,GAAA,GAAAA,EAAA6uE,eAAA,OAAA7uE,EAAA6uE,eAAA,IAAAnwC,EAAAk2B,EAAA50D,EAAAopE,QAAAt2C,EAAA,mCAAA4L,EAAAwkB,OAAAmV,iBAAAnV,OAAAmV,iBAAA35B,KAAAowC,aAAApwC,EAAA,CAAAlgB,KAAAsd,SAAA4C,EAAAsvC,aACAvvD,MAAAqd,SAAA4C,EAAAk7B,eAAAmV,MAAArwC,EAAAlgB,OAAAuwD,MAAArwC,EAAAjgB,SAAAze,EAAA6uE,eAAAnwC,GAAA,OAAAA,CAAA,UAAAswC,GAAAhvE,GAAA,UAAAA,EAAAu5D,QAAAC,cAAA,UAAArM,GAAAntD,GAAA,OAAAA,EAAAu5D,QAAA0V,SAAAZ,YAAAW,GAAAhvE,KAAAu5D,QAAA2V,QAAA,UAAAC,GAAAnvE,GAAA,OAAAA,EAAAu5D,QAAA0V,SAAA7V,aAAA4V,GAAAhvE,KAAAu5D,QAAA6V,SAAA,UAAAC,GAAArvE,EAAA0+B,EAAApO,GAAA,GAAAtwB,EAAAuO,MAAAmwB,EAAA,OAAAoK,IAAA9oC,EAAAopE,QAAAtgC,IAAA2hB,MAAAzqD,EAAAopE,QAAA3e,OAAA,GAAAzqD,EAAAwlB,KAAA,SAAA3lB,EAAA,EAAAA,EAAAG,EAAAwlB,KAAAllB,OAAAT,IAAA,GAAAG,EAAAwlB,KAAA3lB,IAAA6+B,EAAA,OAAAoK,IAAA9oC,EAAAopE,QAAAqB,KAAA5qE,GAAA4qD,MAAAzqD,EAAAopE,QAAAsB,OAAA7qE,IAAA,IAAA6+B,EACA,EAAAA,EAAA1+B,EAAAwlB,KAAAllB,OAAAo+B,IAAA,GAAA88B,EAAAx7D,EAAAwlB,KAAAkZ,IAAApO,EAAA,OAAAwY,IAAA9oC,EAAAopE,QAAAqB,KAAA/rC,GAAA+rB,MAAAzqD,EAAAopE,QAAAsB,OAAAhsC,GAAA4wC,QAAA,aAAAC,GAAAvvE,EAAA0+B,GAAA,GAAAA,GAAA1+B,EAAAu5D,QAAAgM,UAAA7mC,EAAA1+B,EAAAu5D,QAAAiM,OAAA,OAAAxlE,EAAAu5D,QAAAiW,KAAAC,GAAAzvE,EAAA0+B,IAAA,IAAA1+B,IAAAu5D,QAAAoQ,mBAAAjrC,GAAA1+B,EAAA0vE,OAAAhxC,EAAA1+B,EAAA0vE,MAAA1vE,EAAAo6B,KAAA,OAAAp6B,CAAA,UAAA2vE,GAAA3vE,EAAA0+B,GAAA,IAAApO,EAAAkrC,EAAA98B,GAAA7+B,EAAA0vE,GAAAvvE,EAAAswB,GAAAzwB,MAAAkR,KAAAlR,EAAA,KAAAA,KAAAksE,UAAAD,GAAA9rE,EAAAH,EAAAywB,EAAAs/C,GAAA5vE,MAAAqhE,MAAAwO,aAAA,OAAAhwE,EAAA,KAAAN,EAAAuoE,GAAAppC,GAAA7+B,EAAA27D,EAAAj8D,KAAAS,EAAAu5D,QAAAoQ,iBAAA,IAAAuB,GAAAlrE,EAAAmkE,IAAA5kE,EAAAM,GAAAN,EAAAmwE,MAAA7vE,IAAAN,EAAAitE,MAAA3D,GAAA7oE,EAAAT,KAAAwR,KAAAlR,EAAAkpE,IAAAnU,EAAA50D,EAAAu5D,QAAAuW,YACAjwE,EAAAkpE,KAAAlpE,EAAAN,CAAA,CAAAS,EAAAqvE,GAAAxvE,EAAA6+B,EAAApO,GAAA,OAAA/hB,KAAAmwB,EAAA8wC,KAAA3vE,EAAAkwE,KAAA,KAAAjnC,IAAA9oC,EAAA8oC,IAAA2hB,MAAAzqD,EAAAyqD,MAAA6kB,OAAAtvE,EAAAsvE,OAAAU,YAAA,YAAAC,GAAAjwE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAAm/B,EAAA4wC,SAAAh/C,GAAA,OAAA1wB,EAAA0wB,GAAAzwB,GAAA,OAAA6+B,EAAA+rB,MAAA38C,eAAAlO,GAAAI,EAAA0+B,EAAA+rB,MAAA7qD,OAAA,CAAA8+B,EAAAqxC,OAAArxC,EAAAqxC,KAAArxC,EAAA8wC,KAAAz+D,KAAAwnD,yBAAA,IAAA75B,EAAAsxC,WAAA,KAAA9c,EAAAx0B,EAAA8wC,KAAA3b,EAAAn1B,EAAAqxC,KAAAtc,EAAAzzD,EAAAuI,QAAA2nE,aAAA99C,EAAAqhC,GAAAtG,GAAAntD,GAAA,IAAAkzD,EAAAkW,QAAA+G,SAAA1c,GAAAP,EAAAkW,QAAA3P,OAAArnC,EAAA,KAAA0oB,EAAAoY,EAAAkW,QAAA+G,QAAA,MAAA1c,EAAA,IAAAP,EAAAkW,QAAA3P,MAAArnC,EAAA8gC,IAAAniD,KAAA2oD,WAAA0W,iBAAA3c,EAAA,EAAAA,EAAAP,EAAA5yD,OAAA,EAAAmzD,IAAA,CAAArhC,EACA8gC,EAAAO,GAAA,IAAAj0D,EAAA0zD,EAAAO,EAAA,KAAA50B,KAAAwxC,IAAAj+C,EAAAgmC,OAAA54D,EAAA44D,SAAAtd,EAAAnqC,MAAAyhB,EAAAgmC,OAAA54D,EAAAi5D,KAAA,EAAA5E,EAAA4E,IAAA,CAAA3d,EAAAnqC,KAAAkjD,EAAAuE,OAAAvE,EAAA4E,IAAA,CAAA/5B,EAAAsxC,YAAA,EAAAl1B,EAAAj7C,EAAAqzD,EAAAod,GAAA5xC,EAAAoK,IAAAxY,EAAAwqB,GAAAj7C,EAAAqzD,EAAA79C,KAAAw+C,EAAAX,EAAAtkD,MAAA6kD,EAAAP,EAAA1lD,IAAA8iB,EAAA4iC,EAAAqd,SAAA,MAAA1wE,EAAA2+D,SAAA,SAAAr+D,EAAA,IAAAA,MAAA,MAAA0zD,GAAAiM,GAAAphC,EAAAnwB,KAAAwC,KAAAkG,OAAAi8C,EAAAsd,WAAA3c,SAAA,KAAAX,EAAAsd,WAAA/c,EAAAP,EAAAud,UAAA3Q,GAAAphC,EAAAnwB,KAAAwC,KAAAkG,OAAAi8C,EAAAsd,WAAA/c,SAAA,GAAApB,GAAA,EAAAmY,GAAA,GAAA3W,GAAAJ,GAAAP,EAAAud,SAAAvd,EAAAsd,WAAA,IAAA5c,EAAA/zD,EAAAyxC,WAAAinB,4BAAA,CAAA3E,EAAA4V,GAAA3pE,EAAAg0D,EAAAJ,GAAA2c,iBAAA3c,EAAAid,GAAA,WAAA51B,EAAA,IAAA1oB,EAAA,EAAAA,EAAAwhC,EAAAtzD,SACAmzD,EAAAG,EAAAxhC,IAAA5T,MAAAi1C,EAAAh1C,MAAA2T,UAAA,IAAAA,EAAAwhC,EAAAtzD,OAAA,KAAA8xB,IAAAqhC,EAAAG,EAAAxhC,IAAA5T,MAAAi1C,EAAAh1C,MAAA2T,KAAAwhC,EAAAH,CAAA,IAAAG,EAAAp1C,MAAAo1C,EAAAn1C,OAAA,GAAAo1C,EAAA,MAAAJ,EAAAI,MAAAvjC,EAAA,QAAA+hC,GAAA,GAAAmY,KAAArqE,GAAA+iD,OAAAytB,QAAA,MAAAA,OAAAC,aAAAD,OAAAC,aAAAD,OAAAE,cAAA,MAAAC,GAAA3wE,EAAA2wE,IAAAh2B,EAAA8Z,EAAA50D,EAAAu5D,QAAA6P,QAAAt2C,EAAA,aAAA3yB,EAAA26C,EAAAyd,wBAAAzd,EAAA0uB,GAAA1uB,EAAA,KAAAyd,wBAAAp4D,EAAA2wE,GAAA,EAAAjyC,KAAAwxC,IAAAlwE,EAAAqe,KAAAs8B,EAAAt8B,OAAAre,YAAAwwE,OAAAC,YAAAD,OAAAE,WAAA/1B,EAAA61B,OAAAI,YAAAJ,OAAAK,WAAApd,EAAA,CAAAp1C,KAAAo1C,EAAAp1C,KAAAre,EAAAse,MAAAm1C,EAAAn1C,MAAAte,EACAs4D,IAAA7E,EAAA6E,IAAA3d,EAAAsd,OAAAxE,EAAAwE,OAAAtd,IAAA,QAAA+Y,IAAAvjC,EAAAwqB,EAAA,SAAA8Y,EAAA5zD,EAAAuI,QAAA2nE,cAAA,GAAA/vE,EAAAN,EAAAuwE,kBAAA9vE,OAAAH,EAAA,SAAA26C,EAAA36C,EAAAG,OAAA,KAAAT,EAAA04D,0BAAAlG,GAAA,EAAAmY,IAAA3W,GAAAD,MAAAp1C,MAAAo1C,EAAAn1C,SAAAm1C,KAAA/zD,EAAAyxC,WAAA8+B,iBAAA,KAAA5xD,KAAAo1C,EAAAp1C,KAAAC,MAAAm1C,EAAAp1C,KAAAyyD,GAAAjxE,EAAAu5D,SAAAd,IAAA7E,EAAA6E,IAAAL,OAAAxE,EAAAwE,QAAAsY,IAAA7wE,EAAA+zD,EAAA6E,IAAA/5B,EAAAqxC,KAAAtX,IAAA5E,EAAAD,EAAAwE,OAAA15B,EAAAqxC,KAAAtX,IAAAt4D,GAAAN,EAAAg0D,GAAA,EAAA/Y,EAAApc,EAAA8wC,KAAApG,QAAA+G,QAAA,IAAAjd,EAAA,EAAAA,EAAApY,EAAAx6C,OAAA,KAAAH,EAAA26C,EAAAoY,SAAA5iC,EAAA,CAAA9R,MAAA,SAAA8R,EAAAsjC,EAAAn1C,MAAAm1C,EAAAp1C,MAAAkgB,EAAAqxC,KAAAvxD,KAAAC,OAAA,QAAA6R,EAAAsjC,EAAAp1C,KAAAo1C,EAAAn1C,OACAigB,EAAAqxC,KAAAvxD,KAAAi6C,IAAAvF,EAAApY,EAAAoY,EAAA,KAAAkF,OAAAtd,EAAAoY,IAAAU,EAAAp1C,MAAAo1C,EAAAn1C,QAAA6R,EAAA4gD,OAAA,GAAAlxE,EAAAuI,QAAA4oE,4BAAA7gD,EAAA8gD,KAAAvxE,EAAAywB,EAAA+gD,QAAAxd,GAAA7zD,EAAAswB,EAAAtwB,EAAAkxE,QAAAxyC,EAAA+rB,MAAA7qD,GAAAI,EAAA,QAAAwe,KAAAxe,EAAAwe,KAAAC,MAAAze,EAAAye,MAAAg6C,IAAAl5D,EAAAS,EAAAoxE,KAAApxE,EAAAy4D,IAAAL,OAAA74D,EAAAS,EAAAqxE,QAAArxE,EAAAo4D,OAAA,UAAAkY,GAAAtwE,EAAA0+B,EAAApO,GAAA,QAAAzwB,EAAAN,EAAAK,EAAAszD,EAAAW,EAAAJ,EAAArhC,EAAA,EAAAA,EAAApyB,EAAAM,OAAA8xB,GAAA,GAAAyhC,EAAA7zD,EAAAoyB,GAAAqhC,EAAAzzD,EAAAoyB,EAAA,MAAAsM,EAAAm1B,EAAAt0D,EAAA,EAAAK,EAAA,EAAAszD,EAAA,eAAAx0B,EAAA+0B,EAAAl0D,EAAAm/B,EAAAm1B,EAAAj0D,EAAAL,EAAA,UAAA6yB,GAAApyB,EAAAM,OAAA,GAAAo+B,GAAA+0B,GAAAzzD,EAAAoyB,EAAA,GAAAsM,EAAA9+B,EAAA6zD,EAAAI,EAAAt0D,EAAAK,EAAA,EAAA8+B,GAAA+0B,IAAAP,EAAA,kBAAA3zD,EAAA,CAAAM,EAAAG,EAAAoyB,EAAA,GAAAyhC,GAAAJ,GAAAnjC,IAAAzwB,EAAAknE,WAAA,kBAAA7T,EAAA5iC,GAAA,WACAA,GAAA,GAAA/wB,EAAA,KAAA6yB,GAAApyB,EAAAoyB,EAAA,IAAApyB,EAAAoyB,EAAA,IAAApyB,EAAAoyB,EAAA,GAAA20C,YAAAlnE,EAAAG,GAAAoyB,GAAA,MAAA8gC,EAAA,mBAAA5iC,GAAA/wB,GAAAk0D,EAAAI,EAAA,KAAAzhC,EAAApyB,EAAAM,OAAA,GAAAN,EAAAoyB,EAAA,IAAApyB,EAAAoyB,EAAA,KAAApyB,EAAAoyB,EAAA,GAAA20C,YAAAlnE,EAAAG,GAAAoyB,GAAA,MAAA8gC,EAAA,sBAAA79C,KAAAxV,EAAA+O,MAAArP,EAAAiO,IAAA5N,EAAA2wE,SAAArd,EAAAsd,WAAA3c,EAAA4c,SAAAhd,EAAA,UAAA6d,GAAAtxE,GAAA,GAAAA,EAAAopE,UAAAppE,EAAAopE,QAAA3e,MAAA,GAAAzqD,EAAAopE,QAAA+G,QAAA,KAAAnwE,EAAAwlB,MAAA,QAAAkZ,EAAA,EAAAA,EAAA1+B,EAAAwlB,KAAAllB,OAAAo+B,IAAA1+B,EAAAopE,QAAAsB,OAAAhsC,GAAA,YAAA6yC,GAAAvxE,KAAAu5D,QAAAiY,gBAAA,KAAA9e,EAAA1yD,EAAAu5D,QAAAuW,aAAA,QAAApxC,EAAA,EAAAA,EAAA1+B,EAAAu5D,QAAAiW,KAAAlvE,OAAAo+B,IAAA4yC,GAAAtxE,EAAAu5D,QAAAiW,KAAA9wC,GAAA,CACA,SAAA+yC,GAAAzxE,GAAAuxE,GAAAvxE,KAAAu5D,QAAAmY,gBAAA1xE,EAAAu5D,QAAAoY,iBAAA3xE,EAAAu5D,QAAAsV,eAAA,KAAA7uE,EAAAuI,QAAA2nE,eAAAlwE,EAAAu5D,QAAAkP,gBAAA,GAAAzoE,EAAAu5D,QAAAqY,aAAA,cAAAC,GAAA7xE,GAAA,OAAA8xE,IAAAC,KAAA/xE,EAAAgZ,KAAAu/C,wBAAA/5C,KAAAsd,SAAAu8B,iBAAAr4D,EAAAgZ,MAAAi1D,aAAAjuE,EAAAu3D,YAAAya,cAAAhyE,EAAA64D,iBAAA74D,EAAAgZ,MAAAw/C,UAAA,UAAAyZ,GAAAjyE,GAAA,OAAA8xE,IAAAC,KAAA/xE,EAAAgZ,KAAAu/C,wBAAAE,IAAA38B,SAAAu8B,iBAAAr4D,EAAAgZ,MAAAk5D,YAAAlyE,EAAAu3D,YAAAgD,cACAv6D,EAAA64D,iBAAA74D,EAAAgZ,MAAA0/C,SAAA,UAAAyZ,GAAAnyE,KAAA8nE,GAAA9nE,GAAA2tE,QAAA,IAAAjvC,EAAA,KAAA1+B,EAAA,QAAAswB,EAAA,EAAAA,EAAAtwB,EAAAM,SAAAgwB,EAAAtwB,EAAAswB,GAAA49C,QAAAxvC,GAAAyvC,GAAAnuE,EAAAswB,KAAA,OAAAoO,CAAA,UAAA0zC,GAAApyE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,SAAA4yE,GAAAzzC,GAAApO,EAAAmoC,KAAAl5D,EAAA+wB,EAAA8nC,QAAA74D,GAAA,WAAAM,EAAA,OAAAywB,EAAAzwB,MAAA,SAAA6+B,EAAA0pC,GAAA1pC,KAAA,SAAA7+B,EAAA6+B,EAAA1+B,EAAAu5D,QAAAoV,UAAAvS,UAAA19B,EAAA1+B,EAAAu5D,QAAA8Y,WAAA,WAAAxyE,GAAA,UAAAA,EAAAN,EAAAS,EAAAu5D,QAAAoV,UAAApW,wBAAA75B,GAAAn/B,EAAAk5D,KAAA,UAAA54D,EAAA,EAAAoyE,GAAAlT,GAAA/+D,OAAAT,EAAAif,MAAA,UAAA3e,EAAA,EAAAgyE,GAAA9S,GAAA/+D,KAAAswB,EAAA9R,MAAAxe,EAAAswB,EAAA7R,OAAAze,EAAAswB,EAAAmoC,KAAA/5B,EAAApO,EAAA8nC,QAAA15B,EAAA,OAAApO,CAAA,CACA,SAAAgiD,GAAAtyE,EAAA0+B,EAAApO,GAAA,UAAAA,EAAA,OAAAoO,EAAA,IAAA7+B,EAAA6+B,EAAAlgB,KAAAkgB,IAAA+5B,IAAA,QAAAnoC,GAAAzwB,GAAAgyE,GAAA9S,GAAA/+D,IAAA0+B,GAAAuzC,GAAAlT,GAAA/+D,KAAA,SAAAswB,SAAAtwB,EAAAu5D,QAAAiV,MAAAjW,wBAAA14D,GAAAywB,EAAA9R,KAAAkgB,GAAApO,EAAAmoC,KAAAz4D,IAAAu5D,QAAAoV,UAAApW,wBAAA,OAAA/5C,KAAA3e,EAAAG,EAAAwe,KAAAi6C,IAAA/5B,EAAA1+B,EAAAy4D,IAAA,UAAA8Z,GAAAvyE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAAM,MAAA20D,EAAAx0D,EAAAmkE,IAAAzlC,EAAAnwB,OAAA,IAAA3O,EAAAC,EAAA6+B,IAAAjM,GAAA5yB,EAAAowE,GAAAjwE,EAAA2vE,GAAA3vE,EAAAH,GAAA6+B,EAAAn/B,GAAA,OAAA6yE,GAAApyE,EAAAJ,EAAAC,EAAAywB,EAAA,UAAAkiD,GAAAxyE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,EAAAK,GAAA,SAAAszD,EAAA/yD,EAAAyzD,GAAAzzD,EAAA8vE,GAAAjwE,EAAAT,EAAAY,EAAAyzD,EAAA,eAAAh0D,GAAAg0D,EAAAzzD,EAAAqe,KAAAre,EAAAse,MAAAte,EAAAse,MAAAte,EAAAqe,KAAA,OAAA4zD,GAAApyE,EAAAH,EAAAM,EAAAmwB,EAAA,UAAAujC,EAAA1zD,EAAAyzD,EAAAt0D,GAAA,OAAA4zD,EAAA5zD,EACAa,EAAA,EAAAA,EAAA,GAAAszD,EAAAG,GAAAzN,OAAA7mD,EAAA,CAAAO,KAAA20D,EAAAx0D,EAAAmkE,IAAAzlC,EAAAnwB,MAAAhP,MAAAowE,GAAA3vE,EAAAH,IAAA,IAAA4zD,EAAA6M,GAAAzgE,EAAAG,EAAAmkE,IAAAsF,WAAAr3C,EAAAsM,EAAAjM,GAAAiM,IAAAglC,OAAAtxC,GAAAvyB,EAAAkR,KAAAzQ,QAAA8xB,EAAAvyB,EAAAkR,KAAAzQ,OAAAo+B,EAAA,aAAAtM,MAAA,EAAAsM,EAAA,aAAA+0B,EAAA,OAAAP,EAAA,UAAAx0B,EAAAtM,EAAA,EAAAA,EAAA,UAAAsM,GAAA,IAAAoc,EAAAslB,GAAA3M,EAAArhC,EAAAsM,GAAAl/B,EAAA6gE,GAAAvlB,EAAA+Y,EAAAzhC,EAAA0oB,EAAA,UAAApc,GAAA,MAAAl/B,IAAAs7C,EAAA7yB,MAAA4rC,EAAAzhC,EAAA5yB,EAAA,UAAAk/B,IAAA,OAAAoc,CAAA,UAAA23B,GAAAzyE,EAAA0+B,GAAA,IAAApO,EAAA,EAAAoO,EAAAi2B,EAAA30D,EAAAmkE,IAAAzlC,GAAA1+B,EAAAuI,QAAA2nE,eAAA5/C,EAAA2gD,GAAAjxE,EAAAu5D,SAAA76B,EAAAjM,IAAAiM,EAAA81B,EAAAx0D,EAAAmkE,IAAAzlC,EAAAnwB,MAAAvO,EAAAooE,GAAA1pC,GAAA1+B,EAAAu5D,QAAAoV,UAAAvS,UAAA,OAAA59C,KAAA8R,EAAA7R,MAAA6R,EAAAmoC,IAAAz4D,EAAAo4D,OAAAp4D,EAAA0+B,EAAA46B,OAAA,UAAAoZ,GAAA1yE,EACA0+B,EAAApO,EAAAzwB,EAAAN,GAAAS,EAAAP,EAAAO,EAAA0+B,EAAApO,GAAAtwB,EAAA2yE,KAAApzE,EAAAM,IAAAG,EAAA4yE,QAAA/yE,GAAA,OAAAG,CAAA,UAAA6yE,GAAA7yE,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAG,EAAAmkE,IAAA7zC,GAAAtwB,EAAAu5D,QAAA8Y,WAAA,KAAA/hD,EAAA,OAAAoiD,GAAA7yE,EAAAikB,MAAA,kBAAAvkB,EAAA64C,GAAAv4C,EAAAywB,GAAA1wB,EAAAC,EAAAikB,MAAAjkB,EAAAu6B,KAAA,KAAA76B,EAAAK,EAAA,OAAA8yE,GAAA7yE,EAAAikB,MAAAjkB,EAAAu6B,KAAA,EAAAo6B,EAAA30D,EAAAD,GAAAmR,KAAAzQ,OAAA,YAAAo+B,MAAA,WAAAw0B,EAAAsB,EAAA30D,EAAAN,KAAA,CAAAK,EAAAkzE,GAAA9yE,EAAAkzD,EAAA3zD,EAAAm/B,EAAApO,GAAA,IAAAujC,OAAA,MAAAJ,EAAA7zD,EAAA6yB,IAAA,EAAA7yB,EAAA+yE,MAAA,EAAA/yE,EAAAgzE,QAAA,QAAA1f,EAAAyU,IAAAzU,EAAA2T,YAAA,QAAAz0C,EAAA,EAAAA,EAAA8gC,EAAA5yD,SAAA8xB,EAAA,KAAA0oB,EAAAoY,EAAA9gC,GAAA0oB,EAAA2rB,OAAAmB,YAAA,MAAA9sB,EAAA92C,MAAA82C,EAAA92C,KAAAyvD,KAAA,MAAA3Y,EAAAqY,IAAArY,EAAAqY,GAAAM,MAAAI,GAAA,EAAA4T,GAAA5T,EAAA/Y,EAAA2rB,WAAA5S,EACA/Y,EAAA2rB,OAAA,KAAA5S,EAAA,OAAAj0D,IAAAi0D,EAAApnB,KAAA,MAAA7sC,EAAA2O,MAAAhP,EAAA,OAAAK,EAAAszD,EAAAsB,EAAA30D,EAAAN,EAAAK,EAAA2O,KAAA,WAAAwkE,GAAA/yE,EAAA0+B,EAAApO,EAAAzwB,MAAAsyE,GAAAzzC,OAAA3tB,KAAAzQ,OAAA,IAAAf,EAAA0gE,IAAA,SAAArgE,GAAA,OAAAqwE,GAAAjwE,EAAAswB,EAAA1wB,EAAA,GAAAw4D,QAAAv4D,CAAA,GAAA6+B,EAAA,GAAAA,EAAAuhC,IAAA,SAAArgE,GAAA,OAAAqwE,GAAAjwE,EAAAswB,EAAA1wB,GAAA64D,IAAA54D,CAAA,GAAAN,EAAAm/B,GAAA,OAAAs0C,MAAAzzE,EAAAiO,IAAAkxB,EAAA,UAAAu0C,GAAAjzE,EAAA0+B,EAAApO,EAAAzwB,GAAAywB,MAAAq/C,GAAA3vE,EAAA0+B,IAAA7+B,EAAAuyE,GAAApyE,EAAA0+B,EAAAuxC,GAAAjwE,EAAAswB,EAAAzwB,GAAA,QAAA44D,IAAA,OAAAsa,GAAA/yE,EAAA0+B,EAAApO,EAAAzwB,EAAA,UAAAqzE,GAAAlzE,EAAA0+B,EAAApO,EAAAzwB,GAAA,OAAAG,EAAAo4D,QAAA9nC,GAAA,EAAAtwB,EAAAy4D,IAAAnoC,GAAA,GAAAzwB,EAAAG,EAAAwe,KAAAxe,EAAAye,OAAAigB,CAAA,UAAAo0C,GAAA9yE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,MAAA6oE,GAAA1pC,GAAA,IAAA9+B,EAAA+vE,GAAA3vE,EAAA0+B,GAAAw0B,EAAAif,GAAAzzC,GAAAm1B,EAAA,EAAAJ,EAAA/0B,EAAA3tB,KAAAzQ,OAAA8xB,GAAA,EAAA0oB,EAAAwlB,GAAA5hC,EAAA1+B,EAAAmkE,IAAAsF,WACA3uB,OAAA96C,EAAAuI,QAAA2nE,aAAAiD,GAAAC,IAAApzE,EAAA0+B,EAAApO,EAAA1wB,EAAAk7C,EAAAj7C,EAAAN,GAAAs0D,GAAAzhC,EAAA,GAAA0oB,EAAAqL,OAAArL,EAAA92C,KAAA82C,EAAAqY,GAAA,EAAAM,EAAArhC,EAAA0oB,EAAAqY,GAAArY,EAAA92C,KAAA,OAAAxE,EAAA,KAAAW,EAAA,KAAA26C,EAAAmlB,IAAA,SAAA3gE,GAAA,IAAAS,EAAAkwE,GAAAjwE,EAAAJ,EAAAN,GAAAS,EAAA04D,KAAAvF,EAAAnzD,EAAAq4D,QAAAlF,EAAA,IAAAggB,GAAAnzE,EAAAF,EAAAN,GAAA,YAAAQ,EAAA04D,KAAAl5D,GAAAQ,EAAAye,MAAA3e,IAAAL,EAAAF,EAAAa,EAAAJ,GAAA,WAAA8zD,EAAAJ,GAAA,IAAAG,GAAA,EAAAzzD,GAAA0zD,EAAAh0D,EAAAM,EAAAqe,KAAAre,EAAAse,MAAA5e,EAAAuyB,EAAAyhC,GAAAzhC,EAAA0oB,EAAAt7C,GAAA4yB,EAAA,KAAAA,IAAA,iBAAAyhC,IAAA1zD,EAAAqe,KAAAre,EAAAse,QAAA2T,GAAA0oB,GAAA2Y,GAAA3Y,GAAA+Y,GAAA/Y,IAAA1oB,EAAA,GAAA0oB,EAAA,QAAAA,GAAApc,EAAA3tB,KAAAzQ,OAAA,SAAA2vE,GAAAjwE,EAAAJ,EAAAk7C,GAAA1oB,EAAA,MAAAgmC,OAAAlF,GAAA3zD,GAAA6yB,EAAA,iBAAAwhC,EAAA4e,GAAAxyE,EAAAP,EAAA6wB,EAAAwqB,EAAA1oB,GAAA,OAAAsM,EAAA9+B,GAAAi0D,EAAAD,EAAAp1C,KAAAo1C,EAAAr0D,EAAAq0D,EAAA6E,KAAA,EAAAl5D,GACAq0D,EAAAwE,OAAA,KAAAtd,EAAAklB,GAAAthC,EAAA3tB,KAAA+pC,EAAA,UAAA43B,GAAApiD,EAAAwqB,EAAA1oB,EAAAwhC,EAAA/zD,EAAAg0D,EAAA,UAAAuf,GAAApzE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,EAAAK,EAAAszD,GAAA,IAAAW,EAAAoM,IAAA,SAAAnlB,KAAAv7C,EAAAu7C,GAAA,IAAAt7C,EAAA,GAAAs7C,EAAAqL,MAAA,OAAA+sB,GAAAV,GAAAxyE,EAAAP,EAAA6wB,EAAA9wB,EAAAs7C,EAAAqY,GAAArY,EAAA92C,KAAAxE,EAAA,yBAAAk/B,EAAA7+B,GAAAD,EAAAszD,GAAA,OAAA3zD,EAAAe,OAAA,GAAAmzD,EAAAl0D,EAAAs0D,GAAA,KAAAA,EAAA,KAAAzhC,EAAA,GAAAqhC,EAAAtN,MAAA/zB,EAAAogD,GAAAxyE,EAAAP,EAAA6wB,EAAA8B,EAAAqhC,EAAAzvD,KAAAyvD,EAAAN,GAAA/gC,EAAA,yBAAAsM,EAAA7+B,GAAAqzE,GAAA9gD,EAAAxyB,EAAAszD,GAAA,IAAA9gC,EAAAqmC,IAAAvF,IAAAO,EAAAl0D,EAAAs0D,EAAA,WAAAJ,CAAA,UAAA0f,GAAAnzE,EAAA0+B,EAAApO,EAAAzwB,EAAAN,EAAAK,EAAAszD,KAAA6f,GAAA/yE,EAAA0+B,EAAA7+B,EAAAqzD,GAAA5iC,EAAA4iC,EAAA8f,MAAA9f,IAAA1lD,IAAA,KAAA5H,KAAA84B,EAAA3tB,KAAAkG,OAAAi8C,EAAA,KAAAA,IAAA,QAAAW,EAAAn1B,EAAA,KAAA+0B,EAAA,EAAAA,EAAAl0D,EAAAe,OAAAmzD,IAAA,KAAArhC,EAAA7yB,EAAAk0D,GAAA,KAAArhC,EAAApuB,MACAkvD,GAAA9gC,EAAA+gC,IAAA7iC,GAAA,KAAAwqB,EAAAm1B,GAAAjwE,EAAAH,EAAA,GAAAuyB,EAAA+zB,MAAAtnB,KAAAhL,IAAAq/B,EAAA9gC,EAAA+gC,IAAA,EAAAt0B,KAAA/K,IAAAxD,EAAA8B,EAAApuB,OAAAya,MAAAq8B,IAAAl7C,IAAAk7C,EAAA,IAAAA,EAAAl7C,EAAA,IAAA8+B,GAAAm1B,EAAA/Y,EAAApc,EAAAtM,EAAAyhC,EAAA/Y,CAAA,EAAApc,MAAAn/B,IAAAe,OAAA,IAAAo+B,EAAA16B,KAAAssB,IAAAoO,EAAA,CAAA16B,KAAAssB,EAAA6iC,GAAAz0B,EAAAy0B,GAAAhN,MAAAznB,EAAAynB,QAAAznB,EAAAy0B,GAAAD,IAAAx0B,EAAA,CAAA16B,KAAA06B,EAAA16B,KAAAmvD,GAAAD,EAAA/M,MAAAznB,EAAAynB,QAAA,OAAAznB,CAAA,UAAA20C,GAAArzE,GAAA,SAAAA,EAAA2xE,iBAAA,OAAA3xE,EAAA2xE,iBAAA,SAAA2B,GAAA,CAAAA,GAAAxgD,EAAA,2CAAA4L,EAAA,KAAAA,MAAA40C,GAAA5jB,YAAA1C,SAAA8K,eAAA,MAAAwb,GAAA5jB,YAAA58B,EAAA,OAAAwgD,GAAA5jB,YAAA1C,SAAA8K,eAAA,MAAAlD,EAAA50D,EAAAopE,QACAkK,IAAA50C,EAAA40C,GAAAva,aAAA,KAAAr6B,IAAA1+B,EAAA2xE,iBAAAjzC,GAAAg0B,EAAA1yD,EAAAopE,SAAA,OAAA1qC,GAAA,WAAAuyC,GAAAjxE,GAAA,SAAAA,EAAA0xE,gBAAA,OAAA1xE,EAAA0xE,gBAAA,IAAAhzC,EAAA5L,EAAA,qBAAAxC,EAAAwC,EAAA,OAAA4L,GAAA,wBAAAk2B,EAAA50D,EAAAopE,QAAA94C,GAAAoO,IAAA65B,wBAAA75B,KAAAjgB,MAAAigB,EAAAlgB,MAAA,KAAAkgB,IAAA1+B,EAAA0xE,gBAAAhzC,GAAA,OAAAA,GAAA,YAAAkxC,GAAA5vE,GAAA,QAAA0+B,EAAA1+B,EAAAu5D,QAAAjpC,EAAA,GAAAzwB,EAAA,GAAAN,EAAAm/B,EAAA0vC,QAAAmF,WAAA3zE,EAAA8+B,EAAA0vC,QAAA1U,WAAAxG,EAAA,EAAAtzD,MAAA+5D,cAAAzG,EAAA,KAAAW,EAAA7zD,EAAAu5D,QAAAgU,YAAAra,GAAAyE,UAAArnC,EAAAujC,GAAAj0D,EAAA4zE,WAAA5zE,EAAA2zE,WACAh0E,EAAAM,EAAAg0D,GAAAj0D,EAAAyuE,WAAA,QAAArB,SAAAyG,GAAA/0C,GAAAuuC,iBAAAvuC,EAAA0vC,QAAAxV,YAAAyU,WAAA/8C,EAAAk9C,YAAA3tE,EAAAiuE,aAAApvC,EAAAsgC,QAAAqP,YAAA,UAAAoF,GAAAzzE,GAAA,OAAAA,EAAAivE,SAAA1W,wBAAA/5C,KAAAxe,EAAAwuE,MAAAjW,wBAAA/5C,IAAA,UAAAk1D,GAAA1zE,GAAA,IAAA0+B,EAAA20C,GAAArzE,EAAAu5D,SAAAjpC,EAAAtwB,EAAAuI,QAAA2nE,aAAArwE,EAAAywB,GAAAuO,KAAA/K,IAAA,EAAA9zB,EAAAu5D,QAAA0V,SAAAZ,YAAA4C,GAAAjxE,EAAAu5D,SAAA,mBAAAh6D,GAAA,GAAA0oE,GAAAjoE,EAAAmkE,IAAA5kE,GAAA,aAAAK,EAAA,KAAAL,EAAAouE,QAAA,QAAAza,EAAA,EAAAA,EAAA3zD,EAAAouE,QAAArtE,OAAA4yD,IAAA3zD,EAAAouE,QAAAza,GAAAoG,SAAA15D,GAAAL,EAAAouE,QAAAza,GAAAoG,QACA,OAAAhpC,EAAA1wB,GAAAi/B,KAAAqhC,KAAA3gE,EAAAwR,KAAAzQ,OAAAT,IAAA,GAAA6+B,EAAA9+B,EAAA8+B,CAAA,WAAAi1C,GAAA3zE,GAAA,IAAA0+B,EAAA1+B,EAAAmkE,IAAA7zC,EAAAojD,GAAA1zE,GAAA0+B,EAAA76B,MAAA,SAAAhE,GAAA,IAAAN,EAAA+wB,EAAAzwB,GAAAN,GAAAM,EAAAy5D,QAAA+J,GAAAxjE,EAAAN,EAAA,aAAAq0E,GAAA5zE,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAS,EAAAu5D,QAAA,IAAAjpC,GAAA,SAAAoO,EAAAx8B,QAAAw8B,EAAA87B,YAAA+T,aAAA,8BAAAj+C,EAAA/wB,EAAAovE,UAAApW,wBAAA,QAAA34D,EAAA8+B,EAAAm1C,QAAAvjD,EAAA9R,KAAA,IAAA00C,EAAAx0B,EAAAo1C,QAAAxjD,EAAAmoC,GAAA,OAAAhF,GAAA,YAAA/0B,EAAAm0C,GAAA7yE,EAAAJ,EAAAszD,GAAA,IAAAW,EAAAh0D,GAAA,EAAA6+B,EAAAi0C,OAAA9e,EAAAW,EAAAx0D,EAAAmkE,IAAAzlC,EAAAnwB,MAAAwC,MAAAzQ,QAAAo+B,EAAAjM,KAAA5yB,EAAAs/D,GAAAtL,IAAAvzD,OAAAN,EAAAuI,QAAAo9D,SAAA9R,EAAAvzD,OAAAo+B,EAAAj/B,EAAAi/B,EAAAnwB,KAAAswB,KAAA/K,IAAA,EACA+K,KAAAkpB,OAAAnoD,EAAAgvE,GAAA5uE,EAAAu5D,SAAA/6C,MAAAyyD,GAAAjxE,EAAAu5D,UAAA15D,KAAA,OAAA6+B,CAAA,UAAA+wC,GAAAzvE,EAAA0+B,GAAA,GAAAA,GAAA1+B,EAAAu5D,QAAAiM,OAAA,YAAA9mC,GAAA1+B,EAAAu5D,QAAAgM,SAAA,KAAA7mC,EAAA,YAAA1+B,IAAAu5D,QAAAiW,KAAA,QAAAl/C,EAAA,EAAAA,EAAAtwB,EAAAM,OAAAgwB,IAAA,GAAAoO,GAAA1+B,EAAAswB,GAAA8J,KAAA,EAAAsE,EAAA,OAAApO,CAAA,UAAAyjD,GAAA/zE,EAAA0+B,EAAApO,EAAAzwB,GAAA,MAAA6+B,MAAA1+B,EAAAmkE,IAAArgD,OAAA,MAAAwM,MAAAtwB,EAAAmkE,IAAArgD,MAAA9jB,EAAAmkE,IAAA/pC,MAAAv6B,MAAA,OAAAN,EAAAS,EAAAu5D,QAAA15D,GAAAywB,EAAA/wB,EAAAimE,SAAA,MAAAjmE,EAAAy0E,mBAAAz0E,EAAAy0E,kBAAAt1C,KAAAn/B,EAAAy0E,kBAAAt1C,GAAA1+B,EAAAqhE,MAAA4S,aAAA,KAAAv1C,GAAAn/B,EAAAimE,OAAAmC,IAAAI,GAAA/nE,EAAAmkE,IAAAzlC,GAAAn/B,EAAAimE,QAAA0O,GAAAl0E,QAAA,GAAAswB,GACA/wB,EAAAgmE,SAAAoC,IAAAK,GAAAhoE,EAAAmkE,IAAA7zC,EAAAzwB,GAAAN,EAAAgmE,SAAA2O,GAAAl0E,IAAAT,EAAAgmE,UAAA1lE,EAAAN,EAAAimE,QAAA3lE,QAAA,GAAA6+B,GAAAn/B,EAAAgmE,UAAAj1C,GAAA/wB,EAAAimE,OAAA0O,GAAAl0E,QAAA,GAAA0+B,GAAAn/B,EAAAgmE,SAAA,KAAA3lE,EAAAu0E,GAAAn0E,EAAAswB,IAAAzwB,EAAA,GAAAD,GAAAL,EAAAiwE,KAAAjwE,EAAAiwE,KAAA9pE,MAAA9F,EAAAoX,OAAAzX,EAAAgmE,SAAA3lE,EAAA8vE,MAAAnwE,EAAAimE,QAAA3lE,GAAAq0E,GAAAl0E,EAAA,SAAAswB,GAAA/wB,EAAAimE,QAAA5lE,EAAAu0E,GAAAn0E,EAAA0+B,KAAA,KAAAn/B,EAAAiwE,KAAAjwE,EAAAiwE,KAAA9pE,MAAA,EAAA9F,EAAAoX,OAAAzX,EAAAimE,OAAA5lE,EAAA8vE,OAAAwE,GAAAl0E,OAAA,CAAAJ,EAAAu0E,GAAAn0E,EAAA0+B,KAAA,OAAAw0B,EAAAihB,GAAAn0E,EAAAswB,IAAAzwB,EAAA,GAAAD,GAAAszD,GAAA3zD,EAAAiwE,KAAAjwE,EAAAiwE,KAAA9pE,MAAA,EAAA9F,EAAAoX,OAAAg8B,OAAAo4B,GAAAprE,EAAAJ,EAAA8vE,MAAAxc,EAAAwc,QAAA18B,OAAAzzC,EAAAiwE,KAAA9pE,MAAAwtD,EAAAl8C,QAAAzX,EAAAimE,QAAA3lE,GAAAq0E,GAAAl0E,EAAA,IAAAA,EAAAT,EAAAoqE,iBAAAr5C,EACAtwB,EAAA0vE,MAAA1vE,EAAA0vE,OAAA7vE,EAAA6+B,EAAA1+B,EAAA0vE,MAAA1vE,EAAAo6B,OAAA76B,EAAAoqE,iBAAA,eAAAyK,GAAAp0E,EAAA0+B,EAAApO,GAAAtwB,EAAAqhE,MAAA4S,aAAA,MAAAp0E,EAAAG,EAAAu5D,QAAAh6D,EAAAS,EAAAu5D,QAAAoQ,iBAAApqE,GAAAm/B,GAAAn/B,EAAAmwE,OAAAhxC,EAAAn/B,EAAAmwE,MAAAnwE,EAAA66B,OAAAv6B,EAAA8pE,iBAAA,MAAAjrC,EAAA7+B,EAAA0lE,UAAA7mC,GAAA7+B,EAAA2lE,SAAAxlE,EAAAH,EAAA2vE,KAAAC,GAAAzvE,EAAA0+B,IAAA,MAAA1+B,EAAAqV,OAAArV,IAAA+rE,UAAA/rE,EAAA+rE,QAAA,QAAA3M,GAAAp/D,EAAAswB,IAAAtwB,EAAA2Q,KAAA2f,IAAA,UAAA4jD,GAAAl0E,KAAAu5D,QAAAgM,SAAAvlE,EAAAu5D,QAAAiM,OAAAxlE,EAAAmkE,IAAArgD,MAAA9jB,EAAAu5D,QAAAiW,KAAA,GAAAxvE,EAAAu5D,QAAA8Y,WAAA,WAAA8B,GAAAn0E,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAkwE,GAAAzvE,EAAA0+B,GAAA9+B,EAAAI,EAAAu5D,QAAAiW,KAAA,IAAA7H,IAAAr3C,GAAAtwB,EAAAmkE,IAAArgD,MACA9jB,EAAAmkE,IAAA/pC,KAAA,OAAApjB,MAAAzX,EAAAmwE,MAAAp/C,GAAA,QAAA4iC,EAAAlzD,EAAAu5D,QAAAgM,SAAA1R,EAAA,EAAAA,EAAAt0D,EAAAs0D,IAAAX,GAAAtzD,EAAAi0D,GAAAz5B,KAAA,GAAA84B,GAAAx0B,EAAA,MAAA7+B,EAAA,IAAAN,GAAAK,EAAAU,OAAA,cAAAo+B,EAAAw0B,EAAAtzD,EAAAL,GAAA66B,KAAAsE,EAAAn/B,GAAA,MAAAm/B,EAAAw0B,EAAAx0B,EAAApO,GAAAoO,CAAA,MAAAqpC,GAAA/nE,EAAAmkE,IAAA7zC,OAAA,IAAA/wB,IAAA,EAAAM,EAAA,EAAAD,EAAAU,OAAA,eAAAgwB,GAAAzwB,EAAAD,EAAAL,GAAA,EAAAM,EAAA,MAAAu6B,KAAA76B,GAAAM,CAAA,QAAAmX,MAAAzX,EAAAmwE,MAAAp/C,EAAA,UAAA+jD,GAAAr0E,OAAAu5D,QAAAiW,KAAA,QAAA9wC,EAAA,EAAApO,EAAA,EAAAA,EAAAtwB,EAAAM,OAAAgwB,IAAA,KAAAzwB,EAAAG,EAAAswB,GAAAzwB,EAAAsrE,QAAAtrE,EAAAwV,OAAAxV,EAAAksE,WAAArtC,CAAA,QAAAA,CAAA,UAAA41C,GAAAt0E,KAAAu5D,QAAA30D,MAAA2vE,cAAAv0E,EAAAu5D,QAAA30D,MAAA4vE,mBAAA,UAAAC,GAAAz0E,EAAA0+B,QAAA,IACAA,OAAA,OAAApO,EAAAtwB,EAAAmkE,IAAAtkE,EAAA,GAAAN,EAAAM,EAAA60E,QAAA1nB,SAAA8d,yBAAAlrE,EAAAC,EAAA8vD,UAAA3C,SAAA8d,yBAAA5X,EAAAlzD,EAAAuI,QAAAosE,cAAAzhB,IAAAx0B,GAAA,WAAAm1B,EAAA,EAAAA,EAAAvjC,EAAAskD,IAAA7kE,OAAAzP,OAAAuzD,IAAA,GAAAn1B,GAAAm1B,GAAAvjC,EAAAskD,IAAAC,UAAA,KAAAphB,EAAAnjC,EAAAskD,IAAA7kE,OAAA8jD,GAAA,KAAAJ,EAAAzvD,OAAAuK,MAAAvO,EAAAu5D,QAAAiM,QAAA/R,EAAAN,KAAA5kD,KAAAvO,EAAAu5D,QAAAgM,UAAA,KAAAnzC,EAAAqhC,EAAAjnC,QAAA,GAAA0mC,EAAA,KAAApY,EAAAoY,EAAAlzD,EAAAyzD,GAAA3Y,GAAAg6B,GAAA90E,EAAA86C,EAAAv7C,EAAA,MAAA6yB,GAAApyB,EAAAuI,QAAAwsE,0BAAAD,GAAA90E,EAAAyzD,EAAA0H,KAAA57D,GAAA6yB,GAAA4iD,GAAAh1E,EAAAyzD,EAAA7zD,EAAA,SAAAC,CAAA,UAAAi1E,GAAA90E,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAA2yE,GAAAxyE,EAAA0+B,EAAA,iBAAA1+B,EAAAuI,QAAA4oE,2BACA5xE,EAAA+wB,EAAAo/B,YAAA58B,EAAA,gCAAAvzB,EAAAuoC,MAAAtpB,KAAA3e,EAAA2e,KAAA,KAAAjf,EAAAuoC,MAAA2wB,IAAA54D,EAAA44D,IAAA,KAAAl5D,EAAAuoC,MAAAwxB,OAAAz6B,KAAA/K,IAAA,EAAAj0B,EAAAu4D,OAAAv4D,EAAA44D,KAAAz4D,EAAAuI,QAAA0sE,aAAA,yBAAArvE,KAAA5F,EAAAs6D,oBAAA3C,aAAAj5B,EAAA6zC,GAAAvyE,EAAA0+B,EAAA,iBAAAA,IAAAjgB,MAAAigB,EAAAlgB,KAAAjf,EAAAuoC,MAAA2xB,OAAA,EAAA/6B,IAAA1+B,EAAAk1E,oBAAA,MAAAr1E,EAAAooB,QAAAjoB,EAAAswB,EAAAo/B,YAAA58B,EAAA,2DAAA9yB,EAAA8nC,MAAAyxB,QAAA,GAAAv5D,EAAA8nC,MAAAtpB,KAAA3e,EAAAooB,MAAAzJ,KAAA,KAAAxe,EAAA8nC,MAAA2wB,IAAA54D,EAAAooB,MAAAwwC,IAAA,KAAAz4D,EAAA8nC,MAAAwxB,OACA,KAAAz5D,EAAAooB,MAAAmwC,OAAAv4D,EAAAooB,MAAAwwC,KAAA,eAAA0c,GAAAn1E,EAAA0+B,GAAA,OAAA1+B,EAAAy4D,IAAA/5B,EAAA+5B,KAAAz4D,EAAAwe,KAAAkgB,EAAAlgB,IAAA,UAAAw2D,GAAAh1E,EAAA0+B,EAAApO,GAAA,SAAAzwB,EAAA+zD,EAAAt0D,EAAAS,EAAAw0D,GAAA,EAAAj1D,MAAA,GAAAA,EAAAu/B,KAAAkpB,MAAAzoD,GAAAi1D,EAAA11B,KAAAkpB,MAAAwM,GAAAV,EAAAnE,YAAA58B,EAAA,8DAAA8gC,EAAA,0CAAAt0D,EAAA,qBAAAS,EAAA+6C,EAAA8Y,EAAA7zD,GAAA,8CAAAw0D,EAAAj1D,GAAA,gBAAAC,EAAAq0D,EAAAt0D,EAAAS,GAAA,SAAAw0D,EAAAM,EAAAmV,GAAA,OAAAuI,GAAAvyE,EAAAP,EAAAm0D,EAAAiB,GAAA,MAAAl2B,EAAAqrC,EAAA,UAAAJ,EAAA/U,EAAAmV,EAAAtV,GAAAG,EAAAoe,GAAAjzE,EAAA2+B,EAAA,KAAAk2B,GAAAmV,EAAA,OAAAA,IAAA,SACAtV,GAAA,eAAAA,EAAA,SAAAA,EAAAG,EAAAme,MAAAne,EAAArnD,KAAA,KAAA5H,KAAA+4B,EAAA5tB,KAAAkG,OAAA49C,EAAArnD,IAAA,gBAAA+mD,EAAAG,EAAAsV,KAAA,KAAArrC,EAAA61B,EAAAtB,EAAAU,GAAAiW,EAAAlrC,EAAA5tB,KAAAzQ,OAAAsyD,EAAAkX,EAAAC,EAAAzJ,GAAA3hC,EAAAu0B,EAAAuW,WAAAtJ,GAAA4J,EAAAzqE,GAAA,QAAAS,EAAA8pE,EAAA9pE,GAAA,SAAA80D,EAAAmV,EAAAtV,EAAAqG,GAAA,IAAAsP,GAAA,OAAA3V,EAAA0gB,GAAA7gB,EAAAM,EAAAwV,GAAA,gBAAAgL,GAAA9gB,EAAAyV,EAAA,EAAAK,GAAA,gBAAAiL,GAAA,MAAAh2E,GAAA,GAAAu1D,EAAA0gB,GAAA,MAAAx1E,GAAAiqE,GAAAH,EAAA2L,GAAA,GAAAza,KAAAgP,GAAAhP,GAAAgP,EAAAzpE,OAAA,KAAA+0E,GAAA5c,IAAA2c,GAAA3c,KAAAuR,GAAAxqE,EAAA81E,GAAAC,KAAAC,GAAApjD,GAAAi4C,GAAA+K,GAAAC,IAAA72D,KAAA3e,EAAAmqE,EAAAoL,GAAA3c,MAAAj5D,EAAA+1E,GAAAD,KAAAva,EAAAjgB,GAAAuvB,GAAAgL,GAAAD,IAAA32D,OAAAurD,EAAAoL,GAAAhd,UAAAiS,OAAA7qE,GAAA81E,IAAAE,GAAApjD,EAAAgjD,GAAA52D,KAAA82D,GAAA91E,EAAAs7C,EAAA8uB,EAAA/U,EAAAH,EAAA,UAAAG,EAAAr1D,EAAA4yB,EAAAw3C,EAAAI,EAAAtV,EACA,SAAA6gB,GAAA/1E,GAAA+1E,IAAAxa,EAAAjgB,EAAAu6B,GAAA52D,QAAA4rD,GAAA7qE,EAAAoqE,EAAA/U,EAAAH,EAAA,UAAAtiC,EAAAkjD,IAAA91E,GAAA81E,IAAAE,GAAA16B,EAAAs6B,GAAA32D,MAAAo2C,GAAAr1D,GAAA+1E,IAAAxa,EAAA3oC,EAAAijD,GAAA72D,KAAA+2D,GAAA/1E,EAAAoqE,EAAAI,EAAAtV,EAAA,SAAA5Z,GAAAj7C,EAAAwqE,GAAA+K,GAAA3c,IAAA6c,GAAAjL,GAAA+K,GAAAhd,QAAAgd,GAAAhd,OAAAid,GAAA5c,KAAA54D,EAAAuyB,EAAAgjD,GAAAhd,OAAA,KAAAid,GAAA5c,KAAA54D,EAAAg1D,EAAAwgB,GAAA5c,IAAA8c,GAAA1gB,EAAAwgB,GAAAjd,SAAA,IAAAxF,GAAA,EAAAuiB,GAAAC,GAAAxiB,KAAAwiB,GAAA,EAAAD,GAAAE,GAAAziB,OAAAyiB,IAAA,IAAAvL,GAAA,EAAAqL,GAAAC,GAAAtL,KAAAsL,GAAA,EAAAD,GAAAE,GAAAvL,OAAAuL,GAAA,WAAAzmE,MAAAgkD,EAAAplD,IAAAs8D,EAAA,KAAAlqE,EAAAI,EAAAu5D,QAAArG,EAAAlzD,EAAAmkE,IAAAtQ,EAAA7G,SAAA8d,yBAAArX,EAAAmb,GAAA5uE,EAAAu5D,SAAAnnC,EAAAqhC,EAAAj1C,KAAAs8B,EAAAjc,KAAA/K,IAAAl0B,EAAA61E,WAAAtoB,GAAAntD,GAAAJ,EAAA4uE,MAAAgF,YAAA/f,EAAAh1C,MAAAjf,EAAA,OAAA0zD,EAAAuW,UACA7pE,EAAA8+B,EAAA16B,OAAA06B,IAAAy0B,KAAA,GAAAvzD,EAAA2O,MAAAmwB,EAAAnwB,KAAAhP,EAAAK,EAAA2O,KAAA3O,EAAA6yB,GAAAiM,EAAAjM,QAAA,KAAAtyB,EAAAq0D,EAAAtB,EAAAtzD,EAAA2O,MAAAklD,EAAAe,EAAAtB,EAAAx0B,EAAAnwB,MAAAklD,EAAAqU,GAAA3nE,IAAA2nE,GAAArU,GAAA7zD,EAAAL,EAAAK,EAAA2O,KAAA3O,EAAA6yB,GAAAghC,EAAAtzD,EAAA4Q,KAAAzQ,OAAA,QAAAkN,IAAAkxB,EAAAn/B,EAAAm/B,EAAAnwB,KAAAklD,EAAA,OAAA/0B,EAAAjM,IAAA7jB,MAAA6kD,IAAA7zD,EAAA64D,IAAA/5B,EAAA+5B,IAAA,GAAA54D,EAAAD,EAAA6e,MAAA7e,EAAA64D,IAAA,KAAA74D,EAAAw4D,QAAAv4D,EAAAuyB,EAAAsM,EAAA+5B,IAAA/5B,EAAAlgB,KAAAkgB,EAAA05B,SAAAv4D,EAAAD,EAAA6e,MAAA7e,EAAA64D,IAAA/5B,EAAAlgB,KAAA5e,EAAA6e,MAAA7e,EAAAw4D,SAAAx4D,EAAAw4D,OAAA15B,EAAA+5B,KAAA54D,EAAAuyB,EAAAxyB,EAAAw4D,OAAA,KAAA15B,EAAA+5B,IAAA,CAAAnoC,EAAAo/B,YAAAmE,EAAA,UAAA6hB,GAAA11E,GAAA,GAAAA,EAAA6yB,MAAA8iD,QAAA,KAAAj3C,EAAA1+B,EAAAu5D,QAAAqc,cAAAl3C,EAAAm3C,SAAA,IAAAvlD,GAAA,EAAAoO,EAAAo3C,UAAAhuC,MAAAiuC,WAAA,KAAA/1E,EAAAuI,QAAAytE,gBACAt3C,EAAAm3C,QAAAI,aAAA,WAAAj2E,EAAAk2E,YAAAC,GAAAn2E,GAAA0+B,EAAAo3C,UAAAhuC,MAAAiuC,YAAAzlD,MAAA,cAAAtwB,EAAAuI,QAAAytE,iBAAA,EAAAh2E,EAAAuI,QAAAytE,kBAAAt3C,EAAAo3C,UAAAhuC,MAAAiuC,WAAA,oBAAAK,GAAAp2E,KAAAk2E,aAAAl2E,EAAAu5D,QAAA30D,MAAA81D,QAAA16D,EAAA6yB,MAAA8iD,SAAAU,GAAAr2E,GAAA,UAAAs2E,GAAAt2E,KAAA6yB,MAAA0jD,mBAAA,EAAA/xB,YAAA,WAAAxkD,EAAA6yB,MAAA0jD,oBAAAv2E,EAAA6yB,MAAA0jD,mBAAA,EAAAv2E,EAAA6yB,MAAA8iD,SAAAQ,GAAAn2E,GAAA,iBAAAq2E,GAAAr2E,EAAA0+B,GAAA1+B,EAAA6yB,MAAA0jD,oBAAAv2E,EAAA6yB,MAAA2jD,eAAAx2E,EAAA6yB,MAAA0jD,mBACA,eAAAv2E,EAAAuI,QAAA6+D,WAAApnE,EAAA6yB,MAAA8iD,UAAA9U,EAAA7gE,EAAA,QAAAA,EAAA0+B,GAAA1+B,EAAA6yB,MAAA8iD,SAAA,EAAA9W,GAAA7+D,EAAAu5D,QAAAyF,QAAA,sBAAAh/D,EAAAqhE,OAAArhE,EAAAu5D,QAAAkd,mBAAAz2E,EAAAmkE,IAAAyQ,MAAA50E,EAAAu5D,QAAA30D,MAAAktB,QAAAg3C,IAAAtkB,YAAA,kBAAAxkD,EAAAu5D,QAAA30D,MAAAktB,OAAA,UAAA9xB,EAAAu5D,QAAA30D,MAAA8xE,iBAAAhB,GAAA11E,GAAA,UAAAm2E,GAAAn2E,EAAA0+B,GAAA1+B,EAAA6yB,MAAA0jD,oBAAAv2E,EAAA6yB,MAAA8iD,UAAA9U,EAAA7gE,EAAA,OAAAA,EAAA0+B,GAAA1+B,EAAA6yB,MAAA8iD,SAAA,EAAAgB,GAAA32E,EAAAu5D,QAAAyF,QAAA,uBAAA4W,cAAA51E,EAAAu5D,QAAAsc,SAAArxB,YAAA,WAAAxkD,EAAA6yB,MAAA8iD,UACA31E,EAAAu5D,QAAA6E,OAAA,oBAAAwY,GAAA52E,GAAA,QAAA0+B,EAAA1+B,EAAAu5D,QAAAjpC,EAAAoO,EAAAm4C,QAAAza,UAAAv8D,EAAAg/B,KAAA/K,IAAA,EAAA4K,EAAAuwC,SAAA1W,wBAAAE,KAAAl5D,EAAAm/B,EAAAm4C,QAAAte,wBAAAE,IAAA74D,EAAA,EAAAszD,EAAA,EAAAA,EAAAx0B,EAAA8wC,KAAAlvE,OAAA4yD,IAAA,KAAAW,EAAAn1B,EAAA8wC,KAAAtc,GAAAO,EAAAzzD,EAAAuI,QAAA2nE,aAAA99C,EAAA,MAAAyhC,EAAAsX,OAAA,CAAA5rE,GAAAs0D,EAAAtlD,KAAA+qD,OAAA,GAAAjH,GAAA,EAAAmY,EAAA,CAAA/W,EAAAI,EAAAx+C,KAAA+mD,UAAAvI,EAAAx+C,KAAA0jD,aAAA,IAAAje,EAAA2Y,EAAAnjC,IAAAmjC,CAAA,UAAAj0D,EAAAq0D,EAAAx+C,KAAAkjD,wBAAAzd,EAAAt7C,EAAA44D,OAAA54D,EAAAi5D,KAAAhF,GAAAI,EAAA9iD,KAAA2oD,aAAAtnC,EAAAyhC,EAAA9iD,KAAA2oD,WAAAnB,wBAAA95C,MAAAjf,EAAAgf,KAAA,GAAAi1C,EAAAI,EAAAtlD,KAAA+qD,OACAxe,EAAA,QAAA2Y,IAAA,KAAAA,EAAA,GAAAl0D,EAAAM,IAAAD,GAAA6zD,GAAA4P,GAAAxP,EAAAtlD,KAAAusC,GAAAg8B,GAAAjjB,EAAAtlD,MAAAslD,EAAAruC,KAAA,IAAAs1B,EAAA,EAAAA,EAAA+Y,EAAAruC,KAAAllB,OAAAw6C,IAAAg8B,GAAAjjB,EAAAruC,KAAAs1B,IAAA1oB,EAAApyB,EAAAu5D,QAAAkc,aAAArjD,EAAAyM,KAAAqhC,KAAA9tC,EAAA6+C,GAAAjxE,EAAAu5D,UAAAnnC,EAAApyB,EAAAu5D,QAAAiP,gBAAAxoE,EAAAu5D,QAAAiP,cAAAp2C,EAAApyB,EAAAu5D,QAAAgP,QAAA1U,EAAAtlD,KAAAvO,EAAAu5D,QAAAkP,gBAAA,OAAA5pC,KAAAwxC,IAAAzwE,KAAA8+B,EAAAuwC,SAAAvW,WAAA94D,EAAA,UAAAk3E,GAAA92E,GAAA,GAAAA,EAAA2tE,QAAA,QAAAjvC,EAAA,EAAAA,EAAA1+B,EAAA2tE,QAAArtE,SAAAo+B,EAAA,KAAApO,EAAAtwB,EAAA2tE,QAAAjvC,GAAA7+B,EAAAywB,EAAAjb,KAAAi8B,WAAAzxC,IAAAywB,EAAAgpC,OAAAz5D,EAAAk5D,aAAA,WAAAge,GAAA/2E,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAywB,GAAA,MAAAA,EAAAmoC,IAAA55B,KAAA/K,IAAA,EAAAxD,EAAAmoC,KACAz4D,EAAAivE,SAAAvW,UAAA74D,EAAAg/B,KAAAsW,MAAAt1C,EAAAG,EAAA2uE,UAAAvS,WAAA,IAAA78D,EAAA+wB,GAAA,MAAAA,EAAA8nC,OAAA9nC,EAAA8nC,OAAAv4D,EAAAG,EAAAg/D,QAAA5F,aAAAv5D,EAAAu4C,GAAA1Z,EAAA7+B,GAAAN,EAAA64C,GAAA1Z,EAAAn/B,GAAA,GAAA+wB,KAAA0mD,OAAA,KAAAp3E,EAAA0wB,EAAA0mD,OAAAhzE,KAAAuK,KAAA+hB,IAAA0mD,OAAA7jB,GAAA5kD,KAAA3O,EAAAC,KAAAD,EAAAL,EAAA64C,GAAA1Z,EAAA0pC,GAAA5T,EAAA91B,EAAA9+B,IAAAI,EAAAg/D,QAAA5F,eAAAv6B,KAAAhL,IAAAvD,EAAAoO,EAAA60B,aAAAh0D,IAAAM,EAAAu4C,GAAA1Z,EAAA0pC,GAAA5T,EAAA91B,EAAApO,IAAAtwB,EAAAg/D,QAAA5F,cAAA75D,EAAA+wB,EAAA,QAAAtsB,KAAAnE,EAAAszD,GAAAt0B,KAAA/K,IAAAv0B,EAAAM,EAAA,aAAAo3E,GAAAj3E,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAAu5D,QAAA15D,EAAAwzE,GAAArzE,EAAAu5D,SAAA,EAAA76B,EAAA+5B,MAAA/5B,EAAA+5B,IAAA,OAAAl5D,EAAAS,EAAAqhE,OAAA,MAAArhE,EAAAqhE,MAAA3I,UAAA14D,EAAAqhE,MAAA3I,UAAApoC,EAAA2+C,SAAAvW,UACA94D,EAAAuvE,GAAAnvE,GAAAkzD,EAAA,GAAAx0B,EAAA05B,OAAA15B,EAAA+5B,IAAA74D,IAAA8+B,EAAA05B,OAAA15B,EAAA+5B,IAAA74D,GAAA,IAAAi0D,EAAA7zD,EAAAmkE,IAAA7K,OAAAoV,GAAAp+C,GAAAmjC,EAAA/0B,EAAA+5B,IAAA54D,IAAA6+B,EAAA05B,OAAAvE,EAAAh0D,EAAA6+B,EAAA+5B,IAAAl5D,EAAA2zD,EAAAwF,UAAAjF,EAAA,EAAA/0B,EAAA+5B,IAAA/5B,EAAA05B,OAAA74D,EAAAK,MAAAi/B,KAAAhL,IAAA6K,EAAA+5B,KAAA54D,EAAAg0D,EAAAn1B,EAAA05B,QAAAx4D,MAAAL,IAAA2zD,EAAAwF,UAAA94D,IAAAL,EAAAS,EAAAuI,QAAAwkE,YAAA,EAAAz8C,EAAA89C,QAAAxV,YAAAh5D,EAAAI,EAAAqhE,OAAA,MAAArhE,EAAAqhE,MAAA7I,WAAAx4D,EAAAqhE,MAAA7I,WAAAloC,EAAA2+C,SAAAzW,WAAAj5D,EAAAS,EAAAmtD,GAAAntD,GAAAswB,EAAA89C,QAAAxV,YAAA,GAAAtoC,EAAAoO,EAAAjgB,MAAAigB,EAAAlgB,KAAAxe,EAAA0+B,EAAAjgB,MAAAigB,EAAAlgB,KAAAxe,EAAA,GAAA0+B,EAAAlgB,KAAA00C,EAAAsF,WAAA,EAAA95B,EAAAlgB,KAAA5e,EAAAszD,EAAAsF,WAAA35B,KAAA/K,IAAA,EAAA4K,EAAAlgB,KAAAjf,GAAA+wB,EAAA,OAAAoO,EAAAjgB,MAAAze,EAAAJ,EAAA,IAAAszD,EAAAsF,WACA95B,EAAAjgB,OAAA6R,EAAA,MAAAtwB,GAAA,OAAAkzD,CAAA,UAAAgkB,GAAAl3E,EAAA0+B,GAAA,MAAAA,IAAAy4C,GAAAn3E,KAAAqhE,MAAA3I,WAAA,MAAA14D,EAAAqhE,MAAA3I,UAAA14D,EAAAmkE,IAAAzL,UAAA14D,EAAAqhE,MAAA3I,WAAAh6B,EAAA,UAAA04C,GAAAp3E,GAAAm3E,GAAAn3E,GAAA,IAAA0+B,EAAA1+B,EAAAo0D,YAAAp0D,EAAAqhE,MAAAgW,YAAA,CAAArzE,KAAA06B,EAAAy0B,GAAAz0B,EAAA44C,OAAAt3E,EAAAuI,QAAAgvE,mBAAA,UAAAC,GAAAx3E,EAAA0+B,EAAApO,GAAA,MAAAoO,GAAA,MAAApO,GAAA6mD,GAAAn3E,GAAA,MAAA0+B,IAAA1+B,EAAAqhE,MAAA7I,WAAA95B,GAAA,MAAApO,IAAAtwB,EAAAqhE,MAAA3I,UAAApoC,EAAA,UAAA6mD,GAAAn3E,GAAA,IAAA0+B,EAAA1+B,EAAAqhE,MAAAgW,YAAA,GAAA34C,EAAA,CAAA1+B,EAAAqhE,MAAAgW,YAAA,SAAA/mD,EAAAmiD,GAAAzyE,EAAA0+B,EAAA16B,MAAAnE,EAAA4yE,GAAAzyE,EAAA0+B,EAAAy0B,IAAAskB,GAAAz3E,EAAAswB,EAAAzwB,EAAA6+B,EAAA44C,OAAA,WAAAG,GAAAz3E,EAAA0+B,EAAApO,EACAzwB,GAAA6+B,EAAAu4C,GAAAj3E,EAAA,CAAAwe,KAAAqgB,KAAAhL,IAAA6K,EAAAlgB,KAAA8R,EAAA9R,MAAAi6C,IAAA55B,KAAAhL,IAAA6K,EAAA+5B,IAAAnoC,EAAAmoC,KAAA54D,EAAA4e,MAAAogB,KAAA/K,IAAA4K,EAAAjgB,MAAA6R,EAAA7R,OAAA25C,OAAAv5B,KAAA/K,IAAA4K,EAAA05B,OAAA9nC,EAAA8nC,QAAAv4D,IAAA23E,GAAAx3E,EAAA0+B,EAAA85B,WAAA95B,EAAAg6B,UAAA,UAAAgf,GAAA13E,EAAA0+B,GAAA,EAAAG,KAAAwxC,IAAArwE,EAAAmkE,IAAAzL,UAAAh6B,KAAAi5C,IAAAC,GAAA53E,EAAA,CAAAy4D,IAAA/5B,IAAAm5C,GAAA73E,EAAA0+B,GAAA,GAAAi5C,IAAAC,GAAA53E,GAAA83E,GAAA93E,EAAA,eAAA63E,GAAA73E,EAAA0+B,EAAApO,GAAAoO,EAAAG,KAAA/K,IAAA,EAAA+K,KAAAhL,IAAA7zB,EAAAu5D,QAAA0V,SAAA9V,aAAAn5D,EAAAu5D,QAAA0V,SAAA7V,aAAA16B,IAAA,GAAA1+B,EAAAu5D,QAAA0V,SAAAvW,WAAAh6B,GAAApO,EAAAtwB,EAAAmkE,IAAAzL,UAAAh6B,EAAA1+B,EAAAu5D,QAAAwe,WAAAC,aAAAt5C,GAAA1+B,EAAAu5D,QAAA0V,SAAAvW,WACAh6B,IAAA1+B,EAAAu5D,QAAA0V,SAAAvW,UAAAh6B,EAAA,UAAA4D,GAAAtiC,EAAA0+B,EAAApO,EAAAzwB,GAAA6+B,EAAAG,KAAA/K,IAAA,EAAA+K,KAAAhL,IAAA6K,EAAA1+B,EAAAu5D,QAAA0V,SAAAgJ,YAAAj4E,EAAAu5D,QAAA0V,SAAAZ,eAAA/9C,EAAAoO,GAAA1+B,EAAAmkE,IAAA3L,WAAA,EAAA35B,KAAAwxC,IAAArwE,EAAAmkE,IAAA3L,WAAA95B,MAAA7+B,IAAAG,EAAAmkE,IAAA3L,WAAA95B,EAAAw5C,GAAAl4E,KAAAu5D,QAAA0V,SAAAzW,YAAA95B,IAAA1+B,EAAAu5D,QAAA0V,SAAAzW,WAAA95B,GAAA1+B,EAAAu5D,QAAAwe,WAAAI,cAAAz5C,GAAA,UAAA05C,GAAAp4E,GAAA,IAAA0+B,EAAA1+B,EAAAu5D,QAAAjpC,EAAAoO,EAAA0vC,QAAAxV,YAAA/4D,EAAAg/B,KAAAkpB,MAAA/nD,EAAAmkE,IAAA7K,OAAAoV,GAAA1uE,EAAAu5D,UAAA,OAAAH,aAAA16B,EAAAuwC,SAAA7V,aAAAif,WAAA35C,EAAAsgC,QAAA5F,aACA6e,YAAAv5C,EAAAuwC,SAAAgJ,YAAA5J,YAAA3vC,EAAAuwC,SAAAZ,YAAAiK,UAAA55C,EAAAsgC,QAAAqP,YAAAkK,QAAAv4E,EAAAuI,QAAAwkE,YAAAz8C,EAAA,EAAAkoD,UAAA34E,EAAAs5D,aAAAt5D,EAAAmvE,GAAAhvE,GAAA0+B,EAAA0wC,UAAA5V,eAAA96B,EAAA86B,eAAAgU,YAAAl9C,EAAA,UAAAmoD,GAAAz4E,EAAA0+B,SAAA05C,GAAAp4E,IAAA,IAAAswB,EAAAtwB,EAAAu5D,QAAA2V,SAAArvE,EAAAG,EAAAu5D,QAAA6V,UAAAsJ,GAAA14E,EAAA0+B,GAAA,IAAAA,EAAA,IAAAA,GAAApO,GAAAtwB,EAAAu5D,QAAA2V,UAAArvE,GAAAG,EAAAu5D,QAAA6V,UAAA1wC,IAAApO,GAAAtwB,EAAAu5D,QAAA2V,UAAAlvE,EAAAuI,QAAA2nE,cAAA0G,GAAA52E,GAAA04E,GAAA14E,EAAAo4E,GAAAp4E,IAAAswB,EAAAtwB,EAAAu5D,QAAA2V,SAAArvE,EAAAG,EAAAu5D,QAAA6V,SAAA,UAAAsJ,GAAA14E,EAAA0+B,GAAA,IAAApO,EACAtwB,EAAAu5D,QAAA15D,EAAAywB,EAAAynD,WAAA15D,OAAAqgB,GAAApO,EAAAk+C,MAAA1mC,MAAA8xB,cAAAtpC,EAAA4+C,SAAArvE,EAAA4e,OAAA,KAAA6R,EAAAk+C,MAAA1mC,MAAA6wC,eAAAroD,EAAA8+C,UAAAvvE,EAAAu4D,QAAA,KAAA9nC,EAAAsoD,aAAA9wC,MAAA+wC,aAAAh5E,EAAAu4D,OAAA,uBAAAv4D,EAAA4e,OAAA5e,EAAAu4D,QAAA9nC,EAAAwoD,gBAAAhxC,MAAAyxB,QAAA,QAAAjpC,EAAAwoD,gBAAAhxC,MAAAwxB,OAAAz5D,EAAAu4D,OAAA,KAAA9nC,EAAAwoD,gBAAAhxC,MAAA2xB,MAAA55D,EAAA4e,MAAA,MAAA6R,EAAAwoD,gBAAAhxC,MAAAyxB,QAAA,GAAA15D,EAAAu4D,QAAAp4D,EAAAuI,QAAAwwE,4BAAA/4E,EAAAuI,QAAAwkE,aAAAz8C,EAAA0oD,aAAAlxC,MAAAyxB,QAAA,QACAjpC,EAAA0oD,aAAAlxC,MAAAwxB,OAAAz5D,EAAAu4D,OAAA,KAAA9nC,EAAA0oD,aAAAlxC,MAAA2xB,MAAA/6B,EAAA8uC,YAAA,MAAAl9C,EAAA0oD,aAAAlxC,MAAAyxB,QAAA,YAAA0f,GAAAj5E,KAAAu5D,QAAAwe,aAAA/3E,EAAAu5D,QAAAwe,WAAA9tB,QAAAjqD,EAAAu5D,QAAAwe,WAAAmB,UAAAvC,GAAA32E,EAAAu5D,QAAAyF,QAAAh/D,EAAAu5D,QAAAwe,WAAAmB,WAAAl5E,EAAAu5D,QAAAwe,WAAA,IAAAoB,GAAAn5E,EAAAuI,QAAA6wE,iBAAA,SAAA16C,GAAA1+B,EAAAu5D,QAAAyF,QAAA0N,aAAAhuC,EAAA1+B,EAAAu5D,QAAAuf,iBAAArkB,EAAA/1B,EAAA,wBAAA1+B,EAAA6yB,MAAA8iD,SAAAnxB,YAAA,kBAAAxkD,EAAAu5D,QAAA30D,MAAA81D,OAAA,SACAh8B,EAAAg5B,aAAA,qCAAAh5B,EAAApO,GAAA,cAAAA,EAAAgS,GAAAtiC,EAAA0+B,GAAAg5C,GAAA13E,EAAA0+B,EAAA,GAAA1+B,KAAAu5D,QAAAwe,WAAAmB,UAAAra,GAAA7+D,EAAAu5D,QAAAyF,QAAAh/D,EAAAu5D,QAAAwe,WAAAmB,SAAA,UAAAG,GAAAr5E,KAAAqhE,MAAA,CAAA1L,GAAA31D,EAAAi0E,aAAA,EAAAqF,YAAAt5E,EAAAmkE,IAAA7K,OAAAuW,aAAA,EAAA0J,YAAA,EAAAC,QAAA,EAAAC,WAAA,KAAAnY,uBAAA,KAAAmK,qBAAA,EAAAiO,kBAAA,EAAAC,eAAA,EAAAnhB,WAAA,KAAAE,UAAA,KAAA2e,YAAA,KAAA3c,OAAA,EAAAn8C,KAAAq7D,GAAAC,WAAA,MAAA75E,IAAAqhE,MAAAqK,MAAAF,IAAA76D,KAAA3Q,KAAAsrE,UACAI,GAAA,CAAAF,IAAA,CAAAxrE,GAAAurE,iBAAA,aAAAuO,GAAA95E,QAAAqhE,QAAAgK,GAAArrE,GAAA,SAAA0+B,GAAA,QAAApO,EAAA,EAAAA,EAAAoO,EAAA8sC,IAAAlrE,OAAAgwB,IAAAoO,EAAA8sC,IAAAl7C,GAAAqlC,GAAA0L,MAAA,KAAA3iC,IAAA8sC,IAAA,IAAAl7C,EAAA,EAAAA,EAAAoO,EAAAp+B,OAAAgwB,IAAA,KAAAzwB,EAAA6+B,EAAApO,GAAA/wB,EAAAM,EAAA81D,GAAA/1D,EAAAL,EAAAg6D,QAAArG,EAAA3zD,EAAAg6D,SAAArG,EAAA6mB,mBAAA7mB,EAAA+b,SAAArW,cAAA1F,EAAAsG,eAAAtG,EAAA+b,SAAArW,YAAA1F,EAAA+b,SAAAZ,YAAAnb,EAAA0lB,aAAA9wC,MAAAwxB,OAAA0V,GAAAzvE,GAAA,KAAA2zD,EAAAsb,MAAA1mC,MAAAkyC,cAAA9mB,EAAAsG,eAAA,KAAAtG,EAAAsb,MAAA1mC,MAAAmyC,iBAAAjL,GAAAzvE,GAAA,KAAA2zD,EAAA6mB,mBAAA,GAAAl6E,EAAA85E,eAAArR,GAAA/oE,GAAAM,EAAAq6E,WACAr6E,EAAAo0E,aAAAp0E,EAAAgwE,aAAA,MAAAhwE,EAAA64D,WAAA74D,EAAAw3E,cAAAx3E,EAAAw3E,YAAArzE,KAAAuK,KAAA3O,EAAA2lE,UAAA1lE,EAAAw3E,YAAAlkB,GAAA5kD,MAAA3O,EAAA4lE,SAAA5lE,EAAA6oE,gBAAAlpE,EAAAgJ,QAAA2nE,aAAArwE,EAAAwe,OAAAxe,EAAAq6E,YAAA,IAAAC,GAAA56E,EAAAM,EAAAq6E,YAAA,CAAAzhB,IAAA54D,EAAA64D,UAAAse,OAAAn3E,EAAAw3E,aAAAx3E,EAAAgwE,YAAA,KAAAv/C,EAAA,EAAAA,EAAAoO,EAAAp+B,OAAAgwB,IAAAzwB,EAAA6+B,EAAApO,GAAAzwB,EAAAu6E,eAAAv6E,EAAAq6E,YAAAG,GAAAx6E,EAAA81D,GAAA91D,EAAAwe,QAAA,IAAAiS,EAAA,EAAAA,EAAAoO,EAAAp+B,OAAAgwB,IAAA,GAAAzwB,EAAA6+B,EAAApO,GAAA/wB,EAAAM,EAAA81D,GAAA/1D,EAAAL,EAAAg6D,QAAA15D,EAAAu6E,gBAAAxD,GAAAr3E,GAAAM,EAAAy6E,WAAAlC,GAAA74E,GAAAK,EAAA6oE,iBAAAlpE,EAAAgJ,QAAA2nE,eAAAhd,EAAAtzD,EAAA2oE,QAAAx3D,KAAAzQ,OACA4yD,EAAA+c,GAAA1wE,EAAAowE,GAAApwE,EAAAK,EAAA2oE,SAAArV,OAAA,GAAArzD,EAAA06E,cAAArnB,EAAA10C,KAAA,EAAAjf,EAAAg6D,QAAAkc,WAAA51E,EAAA06E,cAAA16E,EAAAy6E,WAAArC,YAAAp5C,KAAA/K,IAAAl0B,EAAAqvE,SAAAZ,YAAAzuE,EAAA4uE,MAAAgF,WAAA3zE,EAAA06E,cAAAvL,GAAAzvE,KAAAg6D,QAAA2V,UAAArvE,EAAA26E,cAAA37C,KAAA/K,IAAA,EAAAl0B,EAAA4uE,MAAAgF,WAAA3zE,EAAA06E,cAAAptB,GAAA5tD,KAAAM,EAAAu6E,gBAAAv6E,EAAA65E,iBAAA75E,EAAA46E,kBAAA76E,EAAAgF,MAAA4vE,mBAAA,IAAAlkD,EAAA,EAAAA,EAAAoO,EAAAp+B,OAAAgwB,IAAAzwB,EAAA6+B,EAAApO,GAAA/wB,EAAAM,EAAA81D,GAAA,MAAA91D,EAAA06E,gBAAAh7E,EAAAg6D,QAAAiV,MAAA1mC,MAAA4yC,SAAA76E,EAAA06E,cAAA,KAAA16E,EAAA26E,cAAAj7E,EAAA4kE,IAAA3L,YACAl2B,GAAA/iC,EAAAs/B,KAAAhL,IAAAt0B,EAAAg6D,QAAA0V,SAAAzW,WAAA34D,EAAA26E,gBAAA,GAAAj7E,EAAAg6D,QAAAkP,gBAAA,GAAA7oE,EAAAC,EAAA66D,OAAA76D,EAAA66D,OAAAt4B,GAAA28B,GAAAx/D,IAAAM,EAAA46E,mBAAAl7E,EAAAg6D,QAAA30D,MAAA2vE,cAAA10E,EAAA46E,kBAAA76E,IAAAC,EAAAu6E,gBAAAv6E,EAAAy5E,aAAA/5E,EAAA4kE,IAAA7K,SAAAmf,GAAAl5E,EAAAM,EAAAy6E,YAAAz6E,EAAAu6E,gBAAAO,GAAAp7E,EAAAM,EAAAy6E,YAAAz6E,EAAA65E,kBAAAhE,GAAAn2E,KAAAszB,MAAA8iD,SAAA91E,EAAA05E,aAAAh6E,EAAAg6D,QAAA30D,MAAAktB,MAAAjyB,EAAA25E,QAAA55E,GAAAw2E,GAAAv2E,EAAA81D,IAAA,IAAArlC,EAAA,EAAAA,EAAAoO,EAAAp+B,OAAAgwB,IAAA,KAAAujC,OAAA,EAAAh0D,EAAA6+B,EAAApO,GAAA/wB,EAAAM,EAAA81D,GAAA/1D,EAAAL,EAAAg6D,QAAArG,EAAA3zD,EAAA4kE,IAAAtkE,EAAAu6E,gBAAAQ,GAAAr7E,EAAAM,EAAAwe,QACA,MAAAze,EAAAi7E,aAAA,MAAAh7E,EAAA64D,WAAA,MAAA74D,EAAA24D,aAAA34D,EAAAw3E,cAAAz3E,EAAAi7E,YAAAj7E,EAAAk7E,YAAA,YAAAj7E,EAAA64D,WAAAmf,GAAAt4E,EAAAM,EAAA64D,UAAA74D,EAAAk7E,aAAA,MAAAl7E,EAAA24D,YAAAl2B,GAAA/iC,EAAAM,EAAA24D,YAAA,SAAA34D,EAAAw3E,YAAA,KAAA5jB,EAAAkB,EAAAzB,EAAArzD,EAAAw3E,YAAArzE,MAAA,IAAAouB,EAAAuiC,EAAAzB,EAAArzD,EAAAw3E,YAAAlkB,IAAA,IAAArY,EAAAj7C,EAAAw3E,YAAAC,OAAA,MAAAx8B,MAAA,GAAAv7C,EAAAgJ,QAAA2nE,cAAAzc,GAAArhC,MAAA,UAAAqhC,EAAAiQ,OAAAjkE,EAAAg0D,EAAAllD,KAAAklD,EAAAhhC,GAAA,YAAAghC,MAAAhhC,GAAAhzB,EAAAg0D,EAAAllD,KAAA,UAAAklD,EAAAiQ,OAAAjQ,EAAAhhC,GAAA,EAAAghC,EAAAhhC,GAAA,SAAAghC,GAAA,QAAAj0D,EAAA,IAAAA,MAAA,KAAAW,GAAA,EAAA0zD,EAAA2e,GAAAjzE,EACAk0D,GAAA,IAAAG,EAAAxhC,MAAAqhC,EAAA+e,GAAAjzE,EAAA6yB,GAAAyhC,IAAA,CAAAr1C,KAAAqgB,KAAAhL,IAAAggC,EAAAr1C,KAAAo1C,EAAAp1C,MAAAi6C,IAAA55B,KAAAhL,IAAAggC,EAAA4E,IAAA7E,EAAA6E,KAAA3d,EAAAr8B,MAAAogB,KAAA/K,IAAA+/B,EAAAr1C,KAAAo1C,EAAAp1C,MAAA45C,OAAAv5B,KAAA/K,IAAA+/B,EAAAuE,OAAAxE,EAAAwE,QAAAtd,GAAA8Y,EAAAqjB,GAAA13E,EAAAs0D,GAAA,IAAAv0D,EAAAC,EAAA4kE,IAAAzL,UAAA34D,EAAAR,EAAA4kE,IAAA3L,WAAA,MAAA5E,EAAA8E,YAAAgf,GAAAn4E,EAAAq0D,EAAA8E,WAAA,EAAA75B,KAAAwxC,IAAA9wE,EAAA4kE,IAAAzL,UAAAp5D,KAAAa,GAAA,UAAAyzD,EAAA4E,aAAAl2B,GAAA/iC,EAAAq0D,EAAA4E,YAAA,EAAA35B,KAAAwxC,IAAA9wE,EAAA4kE,IAAA3L,WAAAz4D,KAAAI,GAAA,QAAAA,EAAA,MAAAiyB,EAAAyhC,EAAAkN,EAAAxhE,EAAA,0BAAAu7C,EAAAv7C,EAAAg6D,QAAA/5D,EAAAs7C,EAAA0zB,MAAAjW,wBAAA9E,EAAA,KAAAtzD,EAAA26C,EAAAkkB,QAAA1H,cAAA,EAAAllC,EAAAqmC,IAAAj5D,EAAAi5D,IACAhF,GAAA,EAAArhC,EAAAgmC,OAAA54D,EAAAi5D,KAAAt4D,EAAAo3D,YAAAuB,aAAA34D,EAAA04D,gBAAAO,gBAAA3F,GAAA,SAAAA,GAAAunB,KAAA5oD,EAAAU,EAAA,sEAAAV,EAAAqmC,IAAA3d,EAAAu3B,WAAA9yE,EAAAg6D,QAAAoV,UAAAvS,WAAA,0CAAAhqC,EAAAgmC,OAAAhmC,EAAAqmC,IAAAuW,GAAAzvE,GAAAu7C,EAAAs0B,WAAA,uCAAAh9C,EAAA5T,KAAA,cAAAqgB,KAAA/K,IAAA,EAAA1B,EAAA3T,MAAA2T,EAAA5T,MAAA,OAAAjf,EAAAg6D,QAAAoV,UAAAjf,YAAAt9B,KAAAwpC,eAAAnI,GAAAl0D,EAAAg6D,QAAAoV,UAAAxe,YAAA/9B,IAAA,CAAAA,EAAAvyB,EAAAo7E,mBACAxnB,EAAA5zD,EAAAq7E,qBAAA,GAAA9oD,EAAA,IAAA0oB,EAAA,EAAAA,EAAA1oB,EAAA9xB,SAAAw6C,EAAA1oB,EAAA0oB,GAAA/I,MAAAzxC,QAAAugE,EAAAzuC,EAAA0oB,GAAA,WAAA2Y,EAAA,IAAArhC,EAAA,EAAAA,EAAAqhC,EAAAnzD,SAAA8xB,EAAAqhC,EAAArhC,GAAA2f,MAAAzxC,QAAAugE,EAAApN,EAAArhC,GAAA,UAAAxyB,EAAAo/D,QAAAjG,eAAA7F,EAAAwF,UAAAn5D,EAAAg6D,QAAA0V,SAAAvW,WAAA74D,EAAA45E,YAAA5Y,EAAAthE,EAAA,UAAAA,EAAAM,EAAA45E,YAAA55E,EAAAwe,QAAAxe,EAAAwe,OAAA88D,QAAA,cAAAC,GAAAp7E,EAAA0+B,GAAA,GAAA1+B,EAAAqhE,MAAA,OAAA3iC,IAAA26C,GAAAr5E,GAAA,WAAA0+B,GAAA,SAAAo7C,GAAA95E,EAAA,WAAAq7E,GAAAr7E,EAAA0+B,GAAA,qBAAA1+B,EAAAqhE,MAAA,OAAA3iC,EAAAsG,MAAAhlC,EAAAmW,WAAAkjE,GAAAr5E,GAAA,WAAA0+B,EAAAsG,MAAAhlC,EAAAmW,UAAA,SAAA2jE,GAAA95E,EAAA,YAAAs7E,GAAAt7E,GAAA,qBAAAmG,KAAAk7D,MAAA,OAAArhE,EAAAglC,MAAA7+B,KACAgQ,WAAAkjE,GAAAlzE,MAAA,WAAAnG,EAAAglC,MAAA7+B,KAAAgQ,UAAA,SAAA2jE,GAAA3zE,KAAA,YAAAo1E,GAAAv7E,GAAA,sBAAA0+B,EAAAv4B,KAAAwvD,GAAA,IAAAj3B,KAAA2iC,MAAA,OAAArhE,EAAAglC,MAAA7+B,KAAAgQ,WAAAkjE,GAAA36C,GAAA,WAAA1+B,EAAAglC,MAAA7+B,KAAAgQ,UAAA,SAAA2jE,GAAAp7C,EAAA,YAAAo5C,GAAA93E,EAAA0+B,GAAA1+B,EAAAmkE,IAAAc,kBAAAjlE,EAAAu5D,QAAAiM,QAAAxlE,EAAA6yB,MAAA2oD,UAAAt0E,IAAAw3B,EAAAugC,GAAAwc,GAAAz7E,GAAA,UAAAy7E,GAAAz7E,GAAA,IAAA0+B,EAAA1+B,EAAAmkE,IAAA,KAAAzlC,EAAAumC,mBAAAjlE,EAAAu5D,QAAAiM,QAAA,KAAAl1C,GAAA,IAAAmY,KAAAzoC,EAAAuI,QAAAmzE,SAAA77E,EAAA+kE,GAAA5kE,EAAA0+B,EAAAumC,mBAAA1lE,EAAA,GAAAm/B,EAAA76B,KAAAhE,EAAA0O,KAAAswB,KAAAhL,IAAA6K,EAAA5a,MAAA4a,EAAAtE,KAAAp6B,EAAAu5D,QAAAiM,OACA,eAAA5lE,GAAA,GAAAC,EAAA0O,MAAAvO,EAAAu5D,QAAAgM,SAAA,KAAArS,EAAAtzD,EAAA2nC,OAAAssB,EAAAj0D,EAAAmR,KAAAzQ,OAAAN,EAAAuI,QAAAs8D,mBAAAhC,GAAAnkC,EAAAs2B,KAAAn1D,EAAAgzB,OAAA,KAAA4gC,EAAAuQ,GAAAhkE,EAAAJ,EAAAC,GAAA,GAAAg0D,IAAAh0D,EAAAgzB,MAAAghC,GAAAj0D,EAAA2nC,OAAAksB,EAAAlsB,OAAAssB,EAAAj0D,EAAAolE,cAAAvR,IAAA+Q,SAAA5kE,EAAAolE,aAAAvR,EAAAI,IAAAj0D,EAAAolE,aAAA,MAAAvR,GAAAP,KAAA5yD,QAAAV,EAAA2nC,OAAAjnC,QAAAuzD,GAAAJ,KAAAI,IAAAJ,GAAAI,EAAA4Q,SAAAhR,EAAAgR,SAAA5Q,EAAA6Q,WAAAjR,EAAAiR,WAAA,IAAA7Q,EAAA,GAAAJ,GAAAI,EAAAX,EAAA5yD,SAAAuzD,EAAAJ,EAAAP,EAAAW,IAAAj0D,EAAA2nC,OAAAssB,GAAAJ,GAAAl0D,EAAAoR,KAAA9Q,EAAA0O,MAAA3O,EAAAklE,WAAAjlE,EAAAklE,MAAA,MAAAnlE,EAAAmR,KAAAzQ,QAAAN,EAAAuI,QAAAs8D,oBAAAS,GAAAtlE,EAAAJ,EAAAmR,KAAAlR,GACAD,EAAAklE,WAAA,GAAAjlE,EAAA0O,KAAA,EAAA1O,EAAAklE,OAAA,KAAAllE,EAAA4lE,WAAA,QAAAh9B,KAAAnY,EAAA,OAAAwnD,GAAA93E,IAAAuI,QAAAozE,YAAA,KAAAj9C,EAAAumC,kBAAAplE,EAAA0O,KAAAmwB,EAAAwmC,aAAArmC,KAAA/K,IAAA4K,EAAAwmC,aAAArlE,EAAA0O,MAAAhP,EAAAe,QAAA86E,GAAAp7E,GAAA,mBAAAJ,EAAA,EAAAA,EAAAL,EAAAe,OAAAV,IAAAw0E,GAAAp0E,EAAAT,EAAAK,GAAA,qBAAAy6E,GAAAr6E,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAAu5D,QAAA15D,EAAAG,EAAAmkE,IAAA,GAAAzlC,EAAAk9C,eAAA,OAAA1H,GAAAl0E,IAAA,MAAA0+B,EAAAm9C,OAAAn9C,EAAAo9C,QAAA93E,MAAAssB,EAAAi1C,UAAA7mC,EAAAo9C,QAAA3oB,IAAA7iC,EAAAk1C,SAAA,MAAAl1C,EAAA0jD,mBAAA1jD,EAAA0jD,mBAAA1jD,EAAAk1C,SAAAl1C,EAAAyrD,cAAAzrD,EAAAk/C,MAAA,GAAA6E,GAAAr0E,GAAA,SAAAg8E,GAAAh8E,KACAk0E,GAAAl0E,GAAA0+B,EAAAu9C,KAAArM,GAAA5vE,IAAA,IAAAT,EAAAM,EAAAikB,MAAAjkB,EAAAu6B,KAAAx6B,EAAAi/B,KAAA/K,IAAA4K,EAAAo9C,QAAA93E,KAAAhE,EAAAuI,QAAA2zE,eAAAr8E,EAAAikB,OAAAovC,EAAAr0B,KAAAhL,IAAAt0B,EAAAm/B,EAAAo9C,QAAA3oB,GAAAnzD,EAAAuI,QAAA2zE,gBAAA5rD,EAAAi1C,SAAA3lE,GAAA,GAAAA,EAAA0wB,EAAAi1C,WAAA3lE,EAAAi/B,KAAA/K,IAAAj0B,EAAAikB,MAAAwM,EAAAi1C,WAAAj1C,EAAAk1C,OAAAtS,GAAA,GAAA5iC,EAAAk1C,OAAAtS,MAAAr0B,KAAAhL,IAAAt0B,EAAA+wB,EAAAk1C,SAAAmC,KAAA/nE,EAAAmoE,GAAA/nE,EAAAmkE,IAAAvkE,GAAAszD,EAAA8U,GAAAhoE,EAAAmkE,IAAAjR,IAAArzD,EAAAD,GAAA0wB,EAAAi1C,UAAArS,GAAA5iC,EAAAk1C,QAAAl1C,EAAA6rD,gBAAAz9C,EAAA09C,eAAA9rD,EAAA+rD,eAAA39C,EAAAovC,aAAAvuE,EAAAS,EAAAu5D,QAAA,GAAAh6D,EAAAiwE,KAAAlvE,QAAAV,GAAAL,EAAAimE,QAAAtS,GAAA3zD,EAAAgmE,UAAAhmE,EAAAiwE,KAAApE,GAAAprE,EAAAJ,EAAAszD,GAAA3zD,EAAAgmE,SAAA3lE,IAAAL,EAAAgmE,SACA3lE,EAAAL,EAAAiwE,KAAApE,GAAAprE,EAAAJ,EAAAL,EAAAgmE,UAAAvyB,OAAAzzC,EAAAiwE,MAAAjwE,EAAAgmE,SAAA3lE,IAAAL,EAAAiwE,KAAAjwE,EAAAiwE,KAAA9pE,MAAA+pE,GAAAzvE,EAAAJ,KAAAL,EAAAgmE,SAAA3lE,EAAAL,EAAAimE,OAAAtS,EAAA3zD,EAAAiwE,KAAAjwE,EAAAiwE,KAAAx8B,OAAAo4B,GAAAprE,EAAAT,EAAAimE,OAAAtS,IAAA3zD,EAAAimE,OAAAtS,IAAA3zD,EAAAiwE,KAAAjwE,EAAAiwE,KAAA9pE,MAAA,EAAA+pE,GAAAzvE,EAAAkzD,MAAA3zD,EAAAimE,OAAAtS,EAAA5iC,EAAA+hD,WAAAjK,GAAA5T,EAAAx0D,EAAAmkE,IAAA7zC,EAAAi1C,WAAAvlE,EAAAu5D,QAAAkV,MAAA3mC,MAAA2wB,IAAAnoC,EAAA+hD,WAAA,KAAAnf,EAAAmhB,GAAAr0E,GAAA,IAAAH,GAAA,GAAAqzD,IAAAx0B,EAAAm9C,OAAAvrD,EAAAyrD,cAAAzrD,EAAAk/C,OAAA,MAAAl/C,EAAA0jD,mBAAA1jD,EAAA0jD,mBAAA1jD,EAAAk1C,QAAA,SAAAxlE,EAAAk2E,WAAAt2E,EAAA,MAAAA,EAAAwiC,GAAA28B,GAAA/+D,MAAAs+D,GAAAt+D,EAAAu5D,QAAAsd,QAAAj3E,MAAA,CAAA08E,UAAA18E,GAAAsjD,OAAA0M,eACArwD,EAAAw/D,GAAA/+D,GAAAu3D,YAAA3H,eAAArwD,EAAAg9E,YAAAh9E,EAAA0W,QAAAqoD,GAAAt+D,EAAAu5D,QAAAsd,QAAAt3E,EAAAg9E,cAAA38E,EAAA28E,WAAAh9E,EAAAg9E,WAAA38E,EAAA48E,aAAAj9E,EAAAi9E,aAAA58E,EAAA68E,UAAAl9E,EAAAk9E,UAAA78E,EAAA88E,YAAAn9E,EAAAm9E,eAAA98E,EAAA,OAAAszD,IAAA5iC,EAAAumD,QAAA/uC,MAAAyxB,QAAA,QAAAojB,GAAA38E,EAAAswB,EAAA0jD,kBAAAt1C,EAAAu9C,MAAA,EAAA/oB,IAAA5iC,EAAAumD,QAAA/uC,MAAAyxB,QAAA,IAAAjpC,EAAAyrD,aAAAzrD,EAAAk/C,MAAAtc,EAAAtzD,IAAAszD,EAAAopB,WAAAppB,EAAAopB,WAAAl6C,GAAA8wB,EAAAopB,UAAAhlB,iBAAApE,EAAAopB,UAAA5hB,SAAA,qBAAA90D,KAAAstD,EAAAopB,UAAAvuB,WAAAmF,EAAAqpB,YAAAje,GAAAtR,SAAAh0C,KACAk6C,EAAAqpB,aAAAje,GAAAtR,SAAAh0C,KAAAk6C,EAAAupB,aAAAl9E,EAAA2zD,EAAAopB,UAAAhlB,cAAA13D,EAAAL,EAAAg4D,YAAA3H,eAAArwD,IAAAswD,cAAAtwD,EAAAq9E,OAAA1pB,EAAAqpB,WAAArpB,EAAAspB,cAAAj9E,EAAAgxE,UAAA,GAAA3wE,EAAAkwD,kBAAAlwD,EAAAowD,SAAAzwD,GAAAK,EAAAqW,OAAAi9C,EAAAupB,UAAAvpB,EAAAwpB,eAAAhqB,EAAApiC,EAAAwlD,WAAApjB,EAAApiC,EAAAusD,cAAAvsD,EAAA89C,QAAAtmC,MAAAwxB,OAAAhpC,EAAAk+C,MAAA1mC,MAAAg1C,UAAA,EAAAj9E,IAAAywB,EAAA6rD,eAAAz9C,EAAA09C,cAAA9rD,EAAA+rD,cAAA39C,EAAAovC,aAAAgK,GAAA93E,EAAA,MAAAswB,EAAA0jD,kBAAA,uBAAA4G,GAAA56E,EAAA0+B,GAAA,QAAApO,EAAAoO,EAAAq+C,SAAAl9E,GAAA,GAAAA,GAAA,MAAAA,GAAAG,EAAAuI,QAAA2nE,cACAxxC,EAAAs+C,iBAAA7vB,GAAAntD,GAAAH,IAAA6+B,EAAAo9C,QAAA/E,GAAA/2E,EAAAu5D,QAAAv5D,EAAAmkE,IAAA7zC,SAAA,GAAAA,GAAA,MAAAA,EAAAmoC,MAAAnoC,EAAA,CAAAmoC,IAAA55B,KAAAhL,IAAA7zB,EAAAmkE,IAAA7K,OAAAoV,GAAA1uE,EAAAu5D,SAAA4V,GAAAnvE,GAAAswB,EAAAmoC,OAAA/5B,EAAAo9C,QAAA/E,GAAA/2E,EAAAu5D,QAAAv5D,EAAAmkE,IAAA7zC,GAAAoO,EAAAo9C,QAAA93E,MAAAhE,EAAAu5D,QAAAgM,UAAA7mC,EAAAo9C,QAAA3oB,IAAAnzD,EAAAu5D,QAAAiM,OAAA,UAAA6U,GAAAr6E,EAAA0+B,GAAA,MAAAk4C,GAAA52E,GAAAH,EAAAu4E,GAAAp4E,GAAAs0E,GAAAt0E,GAAAy4E,GAAAz4E,EAAAH,GAAA86E,GAAA36E,EAAAH,GAAA6+B,EAAAm9C,OAAA,EAAAn9C,EAAAm8B,OAAA76D,EAAA,SAAAA,GAAA,GAAAA,EAAAu5D,QAAAgM,UAAAvlE,EAAAu5D,QAAA0jB,kBAAAj9E,EAAAu5D,QAAAiM,QAAAxlE,EAAAu5D,QAAA2jB,eAAAx+C,EAAAm8B,OAAA76D,EAAA,iBAAAA,IAAAu5D,QAAAgM,SAAAvlE,EAAAu5D,QAAAiM,QAAAxlE,EAAAu5D,QAAA0jB,iBACAj9E,EAAAu5D,QAAAgM,SAAAvlE,EAAAu5D,QAAA2jB,eAAAl9E,EAAAu5D,QAAAiM,MAAA,UAAAoS,GAAA53E,EAAA0+B,KAAA,IAAAy7C,GAAAn6E,EAAA0+B,GAAA,GAAA27C,GAAAr6E,EAAA0+B,GAAA,CAAAk4C,GAAA52E,GAAA46E,GAAA56E,EAAA0+B,GAAA,IAAApO,EAAA8nD,GAAAp4E,GAAAs0E,GAAAt0E,GAAAy4E,GAAAz4E,EAAAswB,GAAAqqD,GAAA36E,EAAAswB,GAAAoO,EAAAy8C,QAAA,WAAAwB,GAAA38E,EAAA0+B,EAAApO,GAAA,SAAAzwB,EAAAM,GAAA,IAAAyzD,EAAAzzD,EAAAw5D,YAAAmP,IAAA5G,IAAAliE,EAAAu5D,QAAA4jB,oBAAAh9E,IAAA2nC,MAAAyxB,QAAA,OAAAp5D,EAAAmxC,WAAA6e,YAAAhwD,GAAA,OAAAyzD,CAAA,KAAAr0D,EAAAS,EAAAu5D,QAAA35D,EAAAI,EAAAuI,QAAA4kE,YAAAja,EAAA3zD,EAAAs3E,QAAAhjB,EAAAX,EAAAwG,WAAAjG,EAAAl0D,EAAAiwE,KAAAjwE,IAAAgmE,SAAA,QAAAnzC,EAAA,EAAAA,EAAAqhC,EAAAnzD,OAAA8xB,IAAA,KAAA0oB,EAAA2Y,EAAArhC,GAAA,IAAA0oB,EAAAqwB,OAAA,GAAArwB,EAAAzlC,MAAAylC,EAAAzlC,KAAAi8B,YAAA4hB,EAAA,MAAAW,GAAA/Y,EAAAzlC,MAAAw+C,EACAh0D,EAAAg0D,KAAAj0D,GAAA,MAAA8+B,MAAAn/B,GAAAu7C,EAAAsyB,WAAAtyB,EAAAixB,WAAA,EAAA3M,GAAAtkB,EAAAixB,QAAA,YAAAlY,GAAA,GAAAiY,GAAA9rE,EAAA86C,EAAAv7C,EAAA+wB,IAAAujC,IAAAnB,EAAA5X,EAAAsyB,YAAAtyB,EAAAsyB,WAAA1d,YAAA1C,SAAA8K,eAAAyL,GAAAvjE,EAAAuI,QAAAhJ,MAAAs0D,EAAA/Y,EAAAzlC,KAAAskD,WAAA,UAAAn6D,EAAAiuE,GAAAztE,EAAA86C,EAAAv7C,EAAA+wB,GAAA4iC,EAAAwZ,aAAAltE,EAAAq0D,EAAA,CAAAt0D,GAAAu7C,EAAA1gB,IAAA,MAAAy5B,KAAAh0D,EAAAg0D,EAAA,UAAAupB,GAAAp9E,KAAAwuE,MAAA1mC,MAAAmmC,WAAAjuE,EAAAouE,QAAAxV,YAAA,KAAA+S,GAAA3rE,EAAA,gBAAAA,EAAA,UAAA26E,GAAA36E,EAAA0+B,GAAA1+B,EAAAu5D,QAAAiV,MAAA1mC,MAAAg1C,UAAAp+C,EAAA85C,UAAA,KAAAx4E,EAAAu5D,QAAAqf,aAAA9wC,MAAA2wB,IAAA/5B,EAAA85C,UAAA,KAAAx4E,EAAAu5D,QAAA6U,QAAAtmC,MAAAwxB,OACA56B,EAAA85C,UAAAx4E,EAAAu5D,QAAA6V,UAAAJ,GAAAhvE,GAAA,cAAAk4E,GAAAl4E,GAAA,IAAA0+B,EAAA1+B,EAAAu5D,QAAAjpC,EAAAoO,EAAA8wC,KAAA,GAAA9wC,EAAA2+C,cAAA3+C,EAAA0vC,QAAA1U,YAAA15D,EAAAuI,QAAAwkE,YAAA,SAAAltE,EAAA4zE,GAAA/0C,KAAAuwC,SAAAzW,WAAAx4D,EAAAmkE,IAAA3L,WAAAj5D,EAAAm/B,EAAA0vC,QAAAxV,YAAAh5D,EAAAC,EAAA,KAAAqzD,EAAA,EAAAA,EAAA5iC,EAAAhwB,OAAA4yD,IAAA,IAAA5iC,EAAA4iC,GAAAiY,OAAA,CAAAnrE,EAAAuI,QAAAwkE,cAAAz8C,EAAA4iC,GAAA0Z,SAAAt8C,EAAA4iC,GAAA0Z,OAAA9kC,MAAAtpB,KAAA5e,GAAA0wB,EAAA4iC,GAAA2Z,mBAAAv8C,EAAA4iC,GAAA2Z,iBAAA/kC,MAAAtpB,KAAA5e,IAAA,IAAAi0D,EAAAvjC,EAAA4iC,GAAAkZ,UAAA,GAAAvY,EAAA,QAAAJ,EAAA,EAAAA,EAAAI,EAAAvzD,OAAAmzD,IAAAI,EAAAJ,GAAA3rB,MAAAtpB,KAAA5e,CAAA,CAAAI,EAAAuI,QAAAwkE,cAAAruC,EAAA0vC,QAAAtmC,MAAAtpB,KACA3e,EAAAN,EAAA,gBAAAy8E,GAAAh8E,GAAA,IAAAA,EAAAuI,QAAA4kE,YAAA,aAAAzuC,EAAA1+B,EAAAmkE,IAAAzlC,EAAA6kC,GAAAvjE,EAAAuI,QAAAm2B,EAAA5a,MAAA4a,EAAAtE,KAAA,OAAA9J,EAAAtwB,EAAAu5D,QAAA,GAAA76B,EAAAp+B,QAAAgwB,EAAAshD,aAAA,KAAA/xE,EAAAywB,EAAA84C,QAAA1Z,YAAA58B,EAAA,OAAAA,EAAA,MAAA4L,IAAA,gDAAAn/B,EAAAM,EAAA65D,WAAAd,YAAA/4D,IAAA+4D,YAAAr5D,EAAA+wB,EAAAgtD,WAAAx1C,MAAA2xB,MAAA,GAAAnpC,EAAAg9C,kBAAAzuC,KAAA/K,IAAAv0B,EAAA+wB,EAAAgtD,WAAA1kB,YAAA/4D,GAAA,EAAAywB,EAAAitD,aAAAjtD,EAAAg9C,kBAAAztE,EAAAywB,EAAAshD,aAAAthD,EAAAg9C,kBAAA5uC,EAAAp+B,QAAA,EAAAgwB,EAAAgtD,WAAAx1C,MAAA2xB,MAAAnpC,EAAAitD,aACA,KAAAH,GAAAp9E,EAAAu5D,SAAA,2BAAAikB,GAAAx9E,EAAA0+B,GAAA,QAAApO,EAAA,GAAAzwB,GAAA,EAAAN,EAAA,EAAAA,EAAAS,EAAAM,OAAAf,IAAA,KAAAK,EAAAI,EAAAT,GAAA2zD,EAAA,sBAAAtzD,IAAAszD,EAAAtzD,EAAAkoC,MAAAloC,IAAA+3D,WAAA,6BAAA/3D,EAAA,GAAA8+B,EAAA7+B,GAAA,gBAAAywB,EAAA3f,KAAA,CAAAgnD,UAAA/3D,EAAAkoC,MAAAorB,GAAA,CAAAx0B,IAAA7+B,GAAAywB,EAAA3f,KAAA,CAAAgnD,UAAA,yBAAA7vB,MAAA,cAAAxX,CAAA,UAAAmtD,GAAAz9E,GAAA,IAAA0+B,EAAA1+B,EAAAouE,QAAA99C,EAAAtwB,EAAAutE,YAAA7a,EAAAh0B,GAAA1+B,EAAAs9E,WAAA,aAAAz9E,EAAA,EAAAA,EAAAywB,EAAAhwB,SAAAT,EAAA,KAAAN,EAAA+wB,EAAAzwB,GAAAD,EAAAL,EAAAo4D,UAAAp4D,IAAAuoC,MAAA,IAAAorB,EAAAx0B,EAAAgxB,YAAA58B,EAAA,gCAAAlzB,IACAL,IAAA2zD,EAAAprB,MAAAy2B,QAAAh/D,GAAA,0BAAAK,IAAAI,EAAAs9E,WAAApqB,IAAAprB,MAAA2xB,OAAAz5D,EAAAu9E,cAAA,SAAA7+C,EAAAoJ,MAAAyxB,QAAAjpC,EAAAhwB,OAAA,UAAA88E,GAAAp9E,EAAA,UAAA09E,GAAA19E,GAAAy9E,GAAAz9E,EAAAu5D,SAAAwa,GAAA/zE,GAAAk4E,GAAAl4E,EAAA,UAAA29E,GAAA39E,EAAA0+B,EAAApO,EAAAzwB,GAAAsG,KAAAvB,MAAA0rB,EAAAnqB,KAAA2yE,gBAAAhmD,EAAA,0CAAA3sB,KAAA2yE,gBAAAphB,aAAA,yBAAAvxD,KAAA6yE,aAAAlmD,EAAA,uCAAA3sB,KAAA6yE,aAAAthB,aAAA,yBAAAvxD,KAAA0wE,QAAAvb,EAAA,8BACAn1D,KAAA02E,aAAA/pD,EAAA,kDAAA3sB,KAAA2vE,UAAAhjD,EAAA,iCAAA3sB,KAAAijE,QAAAt2C,EAAA,iCAAA3sB,KAAA2pE,YAAAh9C,EAAA,iCAAA3sB,KAAAwoE,UAAArT,EAAA,OAAAn1D,KAAAijE,QAAAjjE,KAAA2pE,YAAA3pE,KAAA02E,aAAA12E,KAAA2vE,UAAA3vE,KAAA0wE,SAAA,8CAAAt3E,EAAA+7D,EAAA,OAAAn1D,KAAAwoE,WAAA,oBAAAxoE,KAAAsoE,MAAA37C,EAAA,OAAAvzB,GAAA,2BAAA4G,KAAAqoE,MAAA17C,EAAA,OAAA3sB,KAAAsoE,OAAA,oBACAtoE,KAAAsvE,WAAA,KAAAtvE,KAAAyyE,aAAA9lD,EAAA,iEAAA3sB,KAAAioE,QAAAt7C,EAAA,iCAAA3sB,KAAAm3E,WAAA,KAAAn3E,KAAA8oE,SAAAn8C,EAAA,OAAA3sB,KAAAqoE,MAAAroE,KAAAyyE,aAAAzyE,KAAAioE,SAAA,qBAAAjoE,KAAA8oE,SAAAvX,aAAA,iBAAAvxD,KAAA64D,QAAAlsC,EAAA,OAAA3sB,KAAA2yE,gBAAA3yE,KAAA6yE,aAAA7yE,KAAA8oE,UAAA,cAAA6C,IAAA,KAAA8L,KAAAz3E,KAAA64D,QAAAl3B,MAAA+1C,SAAA,cAAA13E,KAAA64D,QAAAtH,aAAA,kBAAArF,GAAA,EACAmY,IAAArkE,KAAAioE,QAAAtmC,MAAAykC,QAAA,EAAApmE,KAAA8oE,SAAAnnC,MAAA8xB,aAAA,GAAAkP,IAAA6O,IAAAmG,KAAA33E,KAAA8oE,SAAA8O,WAAA,GAAA/9E,MAAA0vD,YAAA1vD,EAAA0vD,YAAAvpD,KAAA64D,SAAAh/D,EAAAmG,KAAA64D,UAAA74D,KAAA82E,iBAAA92E,KAAA+2E,eAAA/2E,KAAAo/D,SAAAp/D,KAAAq/D,OAAA9mC,EAAA5a,MAAA3d,KAAAqpE,KAAA,GAAArpE,KAAAwjE,iBAAAxjE,KAAA41E,aAAA,KAAA51E,KAAAg2E,eAAAh2E,KAAAk2E,cAAAl2E,KAAAksE,WAAA,EAAAlsE,KAAA6tE,kBAAA,KAAA7tE,KAAAqzD,eAAArzD,KAAAipE,UAAAjpE,KAAA+oE,SAAA,EAAA/oE,KAAA4zE,mBAAA,EAAA5zE,KAAAo3E,aAAAp3E,KAAAmnE,kBACAnnE,KAAAyrE,aAAA,KAAAzrE,KAAAk3E,cAAA,EAAAl3E,KAAAoiE,QAAApiE,KAAAurE,gBAAAvrE,KAAAwrE,iBAAAxrE,KAAA0oE,eAAA,KAAA1oE,KAAAqiE,cAAA,EAAAriE,KAAAsiE,gBAAA,EAAAtiE,KAAA63E,QAAA73E,KAAA83E,QAAA93E,KAAA00E,YAAA10E,KAAA20E,YAAA,KAAA30E,KAAAi4D,OAAA,EAAAj4D,KAAA+3E,YAAA/3E,KAAAswE,kBAAA,KAAAtwE,KAAAonE,YAAAiQ,GAAA39E,EAAAuuE,QAAAvuE,EAAAstE,aAAAsQ,GAAAt3E,MAAAmqB,EAAAjU,KAAAlW,KAAA,UAAAg4E,GAAAn+E,GAAA,IAAA0+B,EAAA1+B,EAAAo+E,YAAA9tD,EAAAtwB,EAAAq+E,YAAA,MAAA3/C,GAAA1+B,EAAAs+E,QAAAt+E,EAAAu+E,MAAAv+E,EAAAw+E,kBAAA9/C,EAAA1+B,EAAAs+E,QAAA,MAAAhuD,GAAAtwB,EAAAs+E,QAAAt+E,EAAAu+E,MAAAv+E,EAAAy+E,cACAnuD,EAAAtwB,EAAAs+E,OAAA,MAAAhuD,MAAAtwB,EAAA0+E,YAAA,OAAA//C,EAAAD,EAAAE,EAAAtO,EAAA,UAAAquD,GAAA3+E,KAAAm+E,GAAAn+E,KAAA2+B,GAAAigD,GAAA5+E,EAAA4+B,GAAAggD,GAAA,OAAA5+E,CAAA,UAAA6+E,GAAA7+E,EAAA0+B,GAAAozC,IAAA,KAAA8L,KAAA,MAAA59E,EAAAu5D,QAAAulB,iBAAA9+E,EAAAu5D,QAAAiV,MAAA1mC,MAAAi3C,cAAA,OAAA3kB,aAAAp6D,EAAAu5D,QAAAulB,kBAAA9+E,EAAAu5D,QAAAulB,iBAAAt6B,YAAA,WAAAxkD,EAAAu5D,QAAAulB,iBAAA,KAAA9+E,EAAAu5D,QAAAiV,MAAA1mC,MAAAi3C,cAAA,eAAAzuD,EAAA6tD,GAAAz/C,GAAA7+B,EAAAywB,EAAAqO,EAAArO,IAAAsO,EAAA,IAAAr/B,EAAAq/E,GAAA,IAAAlgD,EAAAsgD,YAAAn/E,EAAA6+B,EAAAugD,OAAA3uD,EAAAoO,EAAAwgD,OAAA3/E,EAAA,OAAAK,EAAAI,EAAAu5D,QAAArG,EAAAtzD,EAAAqvE,SAAApb,EAAAX,EAAA+kB,YAAA/kB,EAAAmb,YACA5a,EAAAP,EAAAiG,aAAAjG,EAAAkG,aAAA,GAAAv5D,GAAAg0D,GAAAvjC,GAAAmjC,EAAA,IAAAnjC,GAAA4xC,IAAA4G,GAAA,CAAAjV,EAAAn1B,EAAAx8B,OAAA,IAAAkwB,EAAAxyB,EAAA4vE,KAAAxvE,EAAA,KAAA6zD,GAAAX,EAAAW,IAAAviB,WAAA,QAAAwJ,EAAA,EAAAA,EAAA1oB,EAAA9xB,OAAAw6C,IAAA,GAAA1oB,EAAA0oB,GAAAzlC,MAAAw+C,EAAA,CAAA7zD,EAAAu5D,QAAA4jB,mBAAAtpB,EAAA,MAAA7zD,CAAA,GAAAH,GAAA83E,IAAAwH,IAAA,MAAA5/E,GAAA+wB,GAAA,MAAA/wB,OAAA+wB,EAAAmjC,EAAAzzD,EAAAmkE,IAAAzL,UAAA7E,EAAAJ,EAAA7zD,EAAAo/D,QAAA5F,aAAA,EAAA75D,EAAAk0D,EAAA50B,KAAA/K,IAAA,EAAA2/B,EAAAl0D,EAAA,IAAAs0D,EAAAh1B,KAAAhL,IAAA7zB,EAAAmkE,IAAA7K,OAAAzF,EAAAt0D,EAAA,IAAAq4E,GAAA53E,EAAA,CAAAy4D,IAAAhF,EAAA2E,OAAAvE,KAAA,GAAAurB,IAAA,IAAA1gD,EAAAsgD,YAAA,MAAAp/E,EAAAi7E,aAAAj7E,EAAAi7E,YAAA3nB,EAAAsF,WAAA54D,EAAAk7E,YAAA5nB,EAAAwF,UAAA94D,EAAAo+E,QAAAn+E,EAAAD,EAAAq+E,QAAA3tD,EAAAk0B,YAAA,oBACA5kD,EAAAi7E,YAAA,KAAAr7E,EAAA0zD,EAAAsF,WAAA54D,EAAAi7E,YAAA16E,EAAA+yD,EAAAwF,UAAA94D,EAAAk7E,YAAAt7E,EAAAW,GAAAP,EAAAq+E,SAAA99E,EAAAP,EAAAq+E,SAAAz+E,GAAAI,EAAAo+E,SAAAx+E,EAAAI,EAAAo+E,QAAAp+E,EAAAi7E,YAAAj7E,EAAAk7E,YAAA,KAAAt7E,IAAAo/E,OAAAQ,GAAA5/E,IAAA4/E,GAAA,KAAAA,GAAA,WAAAx/E,EAAAo+E,SAAAn+E,EAAAD,EAAAq+E,SAAA3tD,SAAAmjC,GAAAikB,GAAA13E,EAAA6+B,KAAA/K,IAAA,EAAAo/B,EAAAwF,UAAApoC,EAAA/wB,IAAA+iC,GAAAtiC,EAAA6+B,KAAA/K,IAAA,EAAAo/B,EAAAsF,WAAA34D,EAAAN,MAAA+wB,MAAAmjC,IAAAgO,GAAA/iC,GAAA9+B,EAAAi7E,YAAA,gBAAAwE,GAAAr/E,EAAA0+B,EAAApO,GAAAtwB,OAAAuI,QAAA+2E,mBAAAhvD,EAAAoO,EAAApO,GAAAoO,EAAA6D,MAAA,SAAAkxB,EAAArhC,GAAA,OAAA0iC,EAAArB,EAAAzvD,OAAAouB,EAAApuB,OAAA,IAAAssB,EAAA8uC,GAAA1gC,EAAApO,GAAA,QAAAzwB,EAAA,EAAAA,EAAA6+B,EAAAp+B,OAAAT,IAAA,KAAAN,EACAm/B,EAAA7+B,GAAAD,EAAA8+B,EAAA7+B,EAAA,GAAAqzD,EAAA4B,EAAAl1D,EAAAuzD,KAAA5zD,EAAAyE,QAAA,GAAAhE,IAAAT,EAAAitB,QAAA,EAAA0mC,EAAA,GAAAA,EAAA,CAAAA,EAAA4Q,GAAAlkE,EAAAoE,OAAAzE,EAAAyE,QAAA,IAAA6vD,EAAAgQ,GAAAjkE,EAAAuzD,KAAA5zD,EAAA4zD,MAAA5zD,EAAAK,EAAA4sB,QAAAjtB,EAAAyE,QAAAzE,EAAA47D,KAAAv7D,EAAAoE,QAAApE,EAAAu7D,KAAAt7D,GAAAywB,OAAAoO,EAAAy/B,SAAAt+D,EAAA,MAAAqyD,EAAA3yD,EAAAs0D,EAAAX,EAAA3zD,EAAA2zD,EAAAW,GAAA,aAAA0rB,GAAA7gD,EAAApO,EAAA,UAAAkvD,GAAAx/E,EAAA0+B,GAAA,WAAA6gD,GAAA,KAAArtB,EAAAlyD,EAAA0+B,GAAA1+B,IAAA,YAAAy/E,GAAAz/E,GAAA,OAAAA,EAAA+Q,KAAAtR,EAAAO,EAAAgE,KAAAuK,KAAAvO,EAAA+Q,KAAAzQ,OAAA,EAAA6xD,EAAAnyD,EAAA+Q,MAAAzQ,QAAA,GAAAN,EAAA+Q,KAAAzQ,OAAAN,EAAAgE,KAAAyuB,GAAA,IAAAzyB,EAAAmzD,EAAA,UAAAusB,GAAA1/E,EAAA0+B,GAAA,KAAAo2B,EAAA90D,EAAA0+B,EAAA16B,MAAA,OAAAhE,EAAA,MAAA80D,EAAA90D,EAAA0+B,EAAAy0B,IAAA,OAAAssB,GAAA/gD,GAAA,IAAApO,EAAAtwB,EAAAuO,KAAAmwB,EAAA3tB,KAAAzQ,QAAAo+B,EAAAy0B,GAAA5kD,KAAAmwB,EAAA16B,KAAAuK,MACA,EAAA1O,EAAAG,EAAAyyB,GAAAzyB,EAAAuO,MAAAmwB,EAAAy0B,GAAA5kD,OAAA1O,GAAA4/E,GAAA/gD,GAAAjM,GAAAiM,EAAAy0B,GAAA1gC,IAAA,OAAAhzB,EAAA6wB,EAAAzwB,EAAA,UAAA8/E,GAAA3/E,EAAA0+B,GAAA,QAAApO,EAAA,GAAAzwB,EAAA,EAAAA,EAAAG,EAAA40E,IAAA7kE,OAAAzP,OAAAT,IAAA,KAAAN,EAAAS,EAAA40E,IAAA7kE,OAAAlQ,GAAAywB,EAAA3f,KAAA,IAAAuhD,EAAAwtB,GAAAngF,EAAA67D,OAAA18B,GAAAghD,GAAAngF,EAAA47D,KAAAz8B,IAAA,QAAA2gD,GAAAr/E,EAAA21D,GAAArlC,EAAAtwB,EAAA40E,IAAAC,UAAA,UAAA+K,GAAA5/E,EAAA0+B,EAAApO,GAAA,OAAAtwB,EAAAuO,MAAAmwB,EAAAnwB,KAAA9O,EAAA6wB,EAAA/hB,KAAAvO,EAAAyyB,GAAAiM,EAAAjM,GAAAnC,EAAAmC,IAAAhzB,EAAA6wB,EAAA/hB,MAAAvO,EAAAuO,KAAAmwB,EAAAnwB,MAAAvO,EAAAyyB,GAAA,UAAAotD,GAAA7/E,KAAAmkE,IAAAnP,KAAAyN,GAAAziE,EAAAuI,QAAAvI,EAAAmkE,IAAA2b,YAAAC,GAAA//E,EAAA,UAAA+/E,GAAA//E,KAAAmkE,IAAAtgE,MAAA,SAAA66B,KAAAomC,aAAApmC,EAAAomC,WAAA,MAAApmC,EAAA6I,SAAA7I,EAAA6I,OAAA,SAAAvnC,EAAAmkE,IAAAe,aACAllE,EAAAmkE,IAAAc,kBAAAjlE,EAAAmkE,IAAArgD,MAAAg0D,GAAA93E,EAAA,KAAAA,EAAA6yB,MAAAoxC,UAAAjkE,EAAAqhE,OAAA0S,GAAA/zE,EAAA,UAAAggF,GAAAhgF,EAAA0+B,GAAA,UAAAA,EAAA16B,KAAAyuB,IAAA,GAAAiM,EAAAy0B,GAAA1gC,IAAA,IAAA0/B,EAAAzzB,EAAA3tB,SAAA/Q,EAAA21D,IAAA31D,EAAA21D,GAAAptD,QAAA03E,sBAAA,UAAAC,GAAAlgF,EAAA0+B,EAAApO,EAAAzwB,GAAA,SAAAN,EAAAD,EAAAS,EAAAw0D,GAAAj1D,EAAAyR,KAAAhR,EAAAT,EAAAwlE,aAAAxlE,EAAAwlE,WAAA,MAAAxlE,EAAAioC,SAAAjoC,EAAAioC,OAAA,YAAAjoC,EAAAihE,QAAAjhE,EAAAihE,MAAA,MAAA8G,GAAA/nE,GAAAioE,GAAAjoE,EAAAi1D,GAAAx0D,EAAAF,IAAAP,GAAA,EAAAS,GAAAT,EAAAg6D,QAAA+J,GAAA/jE,EAAAS,GAAA4rE,GAAArsE,EAAA,SAAAA,EAAAo/B,EAAA,UAAA9+B,EAAAN,EAAAS,GAAA,QAAAw0D,EAAA,GAAAj1D,EAAAS,IAAAT,EAAAi1D,EAAA5jD,KAAA,IAAAwvE,GAAA1sB,EAAAn0D,GAAAgxB,IAAAhxB,GAAA,KAAAO,IAAA,OAAA00D,CAAA,KAAArB,EAAAx0B,EAAA16B,KAAA6vD,EAAAn1B,EAAAy0B,GAAAM,EAAA/0B,EAAA3tB,KACAqhB,EAAAoiC,EAAAx0D,EAAAkzD,EAAA3kD,MAAAusC,EAAA0Z,EAAAx0D,EAAA6zD,EAAAtlD,MAAA/O,EAAA2yD,EAAAsB,GAAAtzD,EAAAmwB,IAAAmjC,EAAAnzD,OAAA,QAAAszD,EAAAC,EAAAtlD,KAAA2kD,EAAA3kD,KAAAmwB,EAAAkoC,MAAA5mE,EAAAogF,OAAA,EAAAxgF,EAAA,EAAA6zD,EAAAnzD,SAAAN,EAAAqgF,OAAA5sB,EAAAnzD,OAAAN,EAAAo6B,KAAAq5B,EAAAnzD,SAAA0/E,GAAAhgF,EAAA0+B,IAAAm1B,EAAAj0D,EAAA,EAAA6zD,EAAAnzD,OAAA,GAAAf,EAAAu7C,IAAA/pC,KAAA5Q,GAAAyzD,GAAA5zD,EAAAqgF,OAAAntB,EAAA3kD,KAAAqlD,GAAAC,EAAAvzD,QAAAN,EAAAogF,OAAAltB,EAAA3kD,KAAAslD,IAAAzhC,GAAA0oB,EAAA,GAAA2Y,EAAAnzD,OAAAf,EAAA6yB,IAAArhB,KAAArL,MAAA,EAAAwtD,EAAAzgC,IAAAjzB,EAAA4yB,EAAArhB,KAAArL,MAAAmuD,EAAAphC,IAAAtyB,IAAAyzD,EAAAh0D,EAAA,EAAA6zD,EAAAnzD,OAAA,GAAAszD,EAAAjjD,KAAA,IAAAwvE,GAAA3gF,EAAA4yB,EAAArhB,KAAArL,MAAAmuD,EAAAphC,IAAAtyB,EAAAN,IAAAN,EAAA6yB,IAAArhB,KAAArL,MAAA,EAAAwtD,EAAAzgC,IAAAghC,EAAA,GAAAnjC,IAAA,SAAAtwB,EAAAogF,OAAAltB,EAAA3kD,KAAA,EAAAqlD,IAAA,GAAAH,EAAAnzD,QAAAf,EAAA6yB,IAAArhB,KAAArL,MAAA,EAAAwtD,EAAAzgC,IAAAghC,EAAA,GAAA3Y,EAAA/pC,KAAArL,MAAAmuD,EAAAphC,IAAAnC,IAAA,SACAtwB,EAAAqgF,OAAAntB,EAAA3kD,KAAA,EAAAqlD,KAAAr0D,EAAA6yB,IAAArhB,KAAArL,MAAA,EAAAwtD,EAAAzgC,IAAAghC,EAAA,GAAAnjC,IAAA,SAAA/wB,EAAAu7C,EAAAt7C,EAAAs7C,EAAA/pC,KAAArL,MAAAmuD,EAAAphC,IAAAtyB,KAAAP,EAAA,EAAA6zD,EAAAnzD,OAAA,KAAAszD,GAAA5zD,EAAAqgF,OAAAntB,EAAA3kD,KAAA,EAAAqlD,EAAA,GAAA5zD,EAAAogF,OAAAltB,EAAA3kD,KAAA,EAAApO,IAAAwrE,GAAA3rE,EAAA,SAAAA,EAAA0+B,EAAA,UAAA4hD,GAAAtgF,EAAA0+B,EAAApO,GAAA,SAAAzwB,EAAAN,EAAAK,EAAAszD,GAAA,GAAA3zD,EAAAghF,OAAA,QAAA1sB,EAAA,EAAAA,EAAAt0D,EAAAghF,OAAAjgF,SAAAuzD,EAAA,KAAAJ,EAAAl0D,EAAAghF,OAAA1sB,GAAA,GAAAJ,EAAA0Q,KAAAvkE,EAAA,KAAAwyB,EAAA8gC,GAAAO,EAAA+sB,WAAA,IAAAlwD,GAAA8B,EAAAsM,EAAA+0B,EAAA0Q,IAAA/xC,GAAAvyB,EAAA4zD,EAAA0Q,IAAA5kE,EAAA6yB,EAAA,GAAAvyB,EAAAG,EAAA,kBAAAygF,GAAAzgF,EAAA0+B,GAAA,GAAAA,EAAAi3B,GAAA,MAAA11D,MAAA,oCAAAD,EAAAmkE,IAAAzlC,IAAAi3B,GAAA31D,EAAA2zE,GAAA3zE,GAAA6/E,GAAA7/E,GAAA0gF,GAAA1gF,KAAAuI,QAAAkhE,UAAA/qC,EAAA+qC,UACAzpE,EAAAuI,QAAA2nE,cAAA5H,GAAAtoE,KAAAuI,QAAAysD,KAAAt2B,EAAAohD,WAAA/L,GAAA/zE,EAAA,UAAA0gF,GAAA1gF,IAAA,OAAAA,EAAAmkE,IAAAsF,UAAA5K,GAAA8X,IAAA32E,EAAAu5D,QAAAsd,QAAA,2BAAA8J,GAAA3gF,GAAAo7E,GAAAp7E,GAAA,WAAA0gF,GAAA1gF,GAAA+zE,GAAA/zE,EAAA,aAAA4gF,GAAA5gF,GAAAmG,KAAAizB,KAAA,GAAAjzB,KAAA06E,OAAA,GAAA16E,KAAA26E,UAAA9gF,IAAA8gF,UAAAllD,SAAAz1B,KAAA46E,YAAA56E,KAAA66E,YAAA,EAAA76E,KAAA86E,WAAA96E,KAAA+6E,cAAA/6E,KAAAg7E,OAAAh7E,KAAAi7E,UAAA,KAAAj7E,KAAAk7E,WAAAl7E,KAAAm7E,cAAAthF,IAAAshF,cAAA,WAAAC,GAAAvhF,EAAA0+B,GAAA,IAAApO,EAAA,CAAAtsB,KAAA4/D,GAAAllC,EAAA16B,MAAAmvD,GAAAssB,GAAA/gD,GAAA3tB,KAAAoyD,GAAAnjE,EAAA0+B,EAAA16B,KAAA06B,EAAAy0B,KACAquB,GAAAxhF,EAAAswB,EAAAoO,EAAA16B,KAAAuK,KAAAmwB,EAAAy0B,GAAA5kD,KAAA,GAAA+xE,GAAAtgF,GAAA,SAAAH,GAAA,OAAA2hF,GAAA3hF,EAAAywB,EAAAoO,EAAA16B,KAAAuK,KAAAmwB,EAAAy0B,GAAA5kD,KAAA,gBAAA+hB,CAAA,UAAAmxD,GAAAzhF,GAAA,KAAAA,EAAAM,QAAA,GAAA6xD,EAAAnyD,GAAA+P,OAAA/P,EAAA0b,WAAA,eAAAgmE,GAAA1hF,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAS,EAAAklD,QAAA3lD,EAAAshF,OAAAvgF,OAAA,MAAAV,GAAA,IAAA6oC,KAAAyqB,EAAA,GAAAA,EAAA3zD,EAAA4hF,QAAAthF,GAAAN,EAAA0hF,YAAAviD,EAAA2L,QAAA3L,EAAA2L,SAAA,KAAA3L,EAAA2L,OAAApzB,OAAA,IAAA1X,EAAAwhF,YAAAnhF,GAAAI,EAAA21D,GAAA31D,EAAA21D,GAAAptD,QAAAo5E,kBAAA,WAAAjjD,EAAA2L,OAAApzB,OAAA,QAAA1X,EAAA4hF,QAAAthF,EAAA,CAAA4hF,GAAAliF,EAAA65B,MAAA,IAAAy6B,EAAA1B,EAAA5yD,EAAA65B,KAAA,MAAA75B,EAAA65B,KAAA94B,SAAA6xD,EAAA5yD,EAAA65B,MAAArpB,OAAA8jD,EAAA1B,EAAA5yD,EAAA65B,MAAA,EAAA75B,EAAA65B,KAAA94B,SACAf,EAAA65B,KAAA75B,EAAA65B,KAAA94B,OAAA,GAAAyP,QAAAxQ,EAAA65B,KAAA1d,MAAAm4C,EAAA1B,EAAA5yD,EAAA65B,OAAAy6B,OAAA,EAAAX,EAAAW,CAAA,IAAAX,EAAA,KAAAO,EAAAtB,EAAA0B,EAAAkY,SAAA,GAAAjX,EAAAp2B,EAAA16B,KAAA06B,EAAAy0B,KAAA,GAAA2B,EAAAp2B,EAAA16B,KAAAyvD,EAAAN,IAAAM,EAAAN,GAAAssB,GAAA/gD,GAAAm1B,EAAAkY,QAAAp7D,KAAA4wE,GAAAvhF,EAAA0+B,GAAA,WAAAm1B,EAAA1B,EAAA5yD,EAAA65B,QAAAy6B,EAAA9jD,QAAA6xE,GAAA5hF,EAAA40E,IAAAr1E,EAAA65B,MAAAy6B,EAAA,CAAAkY,QAAA,CAAAwV,GAAAvhF,EAAA0+B,IAAA2iD,WAAA9hF,EAAA8hF,YAAA9hF,EAAA65B,KAAAzoB,KAAAkjD,GAAAt0D,EAAA65B,KAAA94B,OAAAf,EAAAuhF,WAAAvhF,EAAA65B,KAAAglC,QAAA7+D,EAAA65B,KAAA,GAAArpB,QAAAxQ,EAAA65B,KAAAglC,QAAA7+D,EAAA65B,KAAAzoB,KAAA2f,GAAA/wB,EAAA8hF,aAAA9hF,EAAA+hF,cAAA/hF,EAAAwhF,YAAAxhF,EAAAyhF,YAAAphF,EAAAL,EAAA4hF,OAAA5hF,EAAA6hF,UAAAvhF,EAAAN,EAAA0hF,WAAA1hF,EAAA2hF,cAAAxiD,EAAA2L,OAAAopB,GAAAoN,EAAA7gE,EAAA,gBACA,SAAA4hF,GAAA5hF,EAAA0+B,GAAA,IAAApO,EAAA6hC,EAAAzzB,GAAApO,KAAAvgB,QAAAugB,EAAA6qB,OAAAn7C,IAAA0+B,EAAA/tB,KAAA3Q,EAAA,UAAAwhF,GAAAxhF,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAm/B,EAAA,SAAA1+B,EAAAue,IAAA3e,EAAA,EAAAI,EAAA6D,KAAAg7B,KAAA/K,IAAA9zB,EAAA8jB,MAAAwM,GAAAuO,KAAAhL,IAAA7zB,EAAA8jB,MAAA9jB,EAAAo6B,KAAAv6B,IAAA,SAAAqzD,KAAA2T,eAAAtnE,MAAAm/B,EAAA,SAAA1+B,EAAAue,IAAA,KAAA3e,GAAAszD,EAAA2T,eAAAjnE,CAAA,aAAAiiF,GAAA7hF,EAAA0+B,GAAA,IAAApO,EAAA,GAAAA,EAAAoO,EAAA,SAAA1+B,EAAAue,IAAA,SAAA1e,EAAA,GAAAN,EAAA,EAAAA,EAAAm/B,EAAA3tB,KAAAzQ,SAAAf,EAAA,KAAAK,EAAAC,EAAAqzD,EAAAtzD,EAAA+Q,KAAA,IAAAkjD,OAAA,MAAAJ,EAAAnjC,EAAA/wB,GAAA,GAAAk0D,EAAA,SAAArhC,EAAA,EAAAA,EAAAqhC,EAAAnzD,SAAA8xB,EAAAqhC,EAAArhC,GAAAq0C,OAAAqb,kBAAAjuB,MAAAJ,EAAA/tD,MAAA,EAAA0sB,IAAAyhC,KAAAljD,KAAA8iD,EAAArhC,IAAAyhC,MAAAvzD,OAAAuzD,EAAA,KAAAJ,CAAA,MAAAI,EAAA,KACAX,EAAA7yD,KAAAT,EAAAi0D,EAAA,CAAAvjC,EAAAzwB,CAAA,MAAAywB,EAAA,KAAAtwB,EAAA2mE,GAAA3mE,EAAA0+B,GAAA,IAAApO,EAAA,OAAAtwB,EAAA,IAAAA,EAAA,OAAAswB,EAAA,IAAAoO,EAAA,EAAAA,EAAApO,EAAAhwB,SAAAo+B,EAAA,GAAA7+B,EAAAywB,EAAAoO,GAAAn/B,EAAAS,EAAA0+B,GAAA7+B,GAAAN,EAAAS,EAAA,IAAAJ,EAAA,EAAAA,EAAAL,EAAAe,SAAAV,EAAA,CAAAszD,EAAA3zD,EAAAK,GAAA,IAAAi0D,EAAA,EAAAA,EAAAh0D,EAAAS,SAAAuzD,EAAA,GAAAh0D,EAAAg0D,GAAA4S,QAAAvT,EAAAuT,OAAA,SAAAzmE,EAAAH,EAAA8Q,KAAAuiD,EAAA,MAAA3zD,IAAA+wB,EAAAoO,GAAAn/B,GAAA,OAAA+wB,CAAA,UAAAyxD,GAAA/hF,EAAA0+B,EAAApO,GAAA,QAAAzwB,EAAA,GAAAN,EAAA,EAAAA,EAAAS,EAAAM,SAAAf,EAAA,KAAAK,EAAAI,EAAAT,GAAA,GAAAK,EAAAmQ,OAAAlQ,EAAA8Q,KAAA2f,EAAAivD,GAAAz8E,UAAAk/E,SAAA3hF,KAAAT,UAAA,CAAAA,IAAAmsE,QAAA,IAAA7Y,EAAA,GAAArzD,EAAA8Q,KAAA,CAAAo7D,QAAA7Y,IAAA,QAAAW,EAAA,EAAAA,EAAAj0D,EAAAU,SAAAuzD,EAAA,KAAAJ,EAAA7zD,EAAAi0D,GAAAzhC,EAAA8gC,EAAAviD,KAAA,CAAA3M,KAAAyvD,EAAAzvD,KAAAmvD,GAAAM,EAAAN,GAAApiD,KAAA0iD,EAAA1iD,OAAA,GAAA2tB,EAAA,QAAAoc,KAAA2Y,GAAArhC,EACA0oB,EAAAhkC,MAAA,sBAAAsoD,GAAA1gC,EAAAv5B,OAAAitB,EAAA,OAAA+/B,EAAAe,GAAApY,GAAA2Y,EAAA3Y,UAAA2Y,EAAA3Y,GAAA,UAAAj7C,CAAA,UAAAoiF,GAAAjiF,EAAA0+B,EAAApO,EAAAzwB,GAAA,OAAAA,GAAAG,IAAAo7D,OAAA9qC,IAAAzwB,EAAA,EAAAi1D,EAAAp2B,EAAA1+B,GAAAH,GAAA,EAAAi1D,EAAAxkC,EAAAtwB,MAAA0+B,IAAApO,GAAAzwB,GAAA,EAAAi1D,EAAAp2B,EAAApO,KAAAoO,EAAApO,IAAA,IAAA4hC,EAAAlyD,EAAA0+B,IAAA,IAAAwzB,EAAA5hC,GAAAoO,IAAA,UAAAwjD,GAAAliF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,MAAAA,MAAAS,EAAA21D,KAAA31D,EAAA21D,GAAA4D,QAAA6E,OAAAp+D,EAAAiW,SAAAksE,GAAAniF,EAAA,IAAAu/E,GAAA,CAAA0C,GAAAjiF,EAAA40E,IAAAwN,UAAA1jD,EAAApO,EAAA/wB,IAAA,GAAAM,EAAA,UAAAwiF,GAAAriF,EAAA0+B,EAAApO,GAAA,QAAAzwB,EAAA,GAAAN,EAAAS,EAAA21D,KAAA31D,EAAA21D,GAAA4D,QAAA6E,OAAAp+D,EAAAiW,QAAArW,EAAA,EAAAA,EAAAI,EAAA40E,IAAA7kE,OAAAzP,OAAAV,IAAAC,EAAAD,GAAAqiF,GAAAjiF,EAAA40E,IAAA7kE,OAAAnQ,GAAA8+B,EAAA9+B,GAAA,KAAAL,GAAAm/B,EAAA2gD,GAAAr/E,EAAA21D,GAAA91D,EAAAG,EAAA40E,IAAAC,WAAAsN,GAAAniF,EACA0+B,EAAApO,EAAA,UAAAgyD,GAAAtiF,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAS,EAAA40E,IAAA7kE,OAAArK,MAAA,GAAAnG,EAAAm/B,GAAApO,EAAA6xD,GAAAniF,EAAAq/E,GAAAr/E,EAAA21D,GAAAp2D,EAAAS,EAAA40E,IAAAC,WAAAh1E,EAAA,UAAA0iF,GAAAviF,EAAA0+B,EAAApO,KAAA,CAAAvgB,OAAA2uB,EAAA3uB,OAAAsO,OAAA,SAAAxe,GAAAsG,KAAA4J,OAAA,WAAAxQ,EAAA,EAAAA,EAAAM,EAAAS,OAAAf,IAAA4G,KAAA4J,OAAAxQ,GAAA,IAAA2yD,EAAAyC,EAAA30D,EAAAH,EAAAN,GAAA67D,QAAAzG,EAAA30D,EAAAH,EAAAN,GAAA47D,MAAA,EAAA9wB,OAAA/Z,KAAA+Z,QAAAw2B,EAAA7gE,EAAA,wBAAAA,EAAAswB,GAAAtwB,EAAA21D,IAAAkL,EAAA7gE,EAAA21D,GAAA,wBAAA31D,EAAA21D,GAAArlC,GAAA,OAAAA,EAAAvgB,QAAA2uB,EAAA3uB,OAAAsvE,GAAAr/E,EAAA21D,GAAArlC,EAAAvgB,OAAAugB,EAAAvgB,OAAAzP,OAAA,GAAAo+B,CAAA,UAAA8jD,GAAAxiF,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAG,EAAAklD,QAAA9rB,KAAA75B,EAAA4yD,EAAAtyD,GAAAN,KAAAwQ,QAAAlQ,IAAAS,OAAA,GAAAo+B,EAAA+jD,GAAAziF,EAAA0+B,EAAApO,IAAA6xD,GAAAniF,EACA0+B,EAAApO,EAAA,UAAA6xD,GAAAniF,EAAA0+B,EAAApO,GAAAmyD,GAAAziF,EAAA0+B,EAAApO,GAAAoO,EAAA1+B,EAAA40E,IAAA,IAAA/0E,EAAAG,EAAA21D,GAAA31D,EAAA21D,GAAA0L,MAAA9iD,GAAAmkE,IAAAnjF,EAAAS,EAAAklD,QAAAtlD,EAAA0wB,KAAA+Z,OAAA6oB,EAAA,KAAAA,EAAArzD,GAAAN,EAAA6hF,aAAAluB,EAAAtzD,GAAAL,EAAA2hF,eAAAthF,MAAAszD,EAAA3zD,EAAAwhF,aAAAxhF,EAAAyhF,aAAAzhF,EAAA0hF,YAAArhF,GAAA,CAAAszD,EAAAf,EAAA5yD,EAAA65B,MAAA,IAAAy6B,EAAAj0D,EAAAqX,OAAA,GAAAi8C,EAAA,KAAAW,GAAA,KAAAA,GAAAX,EAAAnjD,OAAAzP,QAAAo+B,EAAA3uB,OAAAzP,QAAA4yD,EAAAmB,qBAAA31B,EAAA21B,qBAAA,IAAA5rB,KAAAzoC,EAAAklD,QAAA87B,cAAAhhF,EAAA21D,GAAA31D,EAAA21D,GAAAptD,QAAAo5E,kBAAA,KAAAzuB,EAAA3zD,EAAA65B,KAAA75B,EAAA65B,KAAA94B,OAAA,GAAAo+B,EAAAkjD,GAAAljD,EAAAn/B,EAAA65B,MAAA75B,EAAAyhF,aAAA,IAAAv4C,KAAAlpC,EAAA2hF,cAAAthF,EAAAL,EAAA6hF,UAAAvhF,EACAywB,IAAA,IAAAA,EAAAqyD,WAAAlB,GAAAliF,EAAAshF,OAAA,UAAA4B,GAAAziF,EAAA0+B,EAAApO,GAAA,GAAAixC,GAAAvhE,EAAA,0BAAAA,EAAA21D,IAAA4L,GAAAvhE,EAAA21D,GAAA,yBAAAj3B,EAAA6jD,GAAAviF,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAywB,KAAAsyD,OAAA,EAAA9tB,EAAAp2B,EAAA0jD,UAAAjnB,KAAAn7D,EAAA40E,IAAAwN,UAAAjnB,OAAA,KAAA0nB,GAAA7iF,EAAA8iF,GAAA9iF,EAAA0+B,EAAA7+B,GAAA,IAAAywB,IAAA,IAAAA,EAAAyyD,SAAA/iF,EAAA21D,IAAA,YAAA31D,EAAA21D,GAAAwT,UAAA,aAAAiO,GAAAp3E,EAAA21D,GAAA,UAAAktB,GAAA7iF,EAAA0+B,KAAAyc,OAAAn7C,EAAA40E,OAAA50E,EAAA40E,IAAAl2C,EAAA1+B,EAAA21D,KAAA31D,EAAA21D,GAAA0L,MAAAkY,YAAA,EAAAv5E,EAAA21D,GAAA0L,MAAAqY,kBAAA,EAAAtY,GAAAphE,EAAA21D,KAAAgW,GAAA3rE,EAAA,iBAAAA,GAAA,UAAAgjF,GAAAhjF,GAAA6iF,GAAA7iF,EAAA8iF,GAAA9iF,IAAA40E,IAAA,mBAAAkO,GAAA9iF,EAAA0+B,EAAApO,EAAAzwB,GAAA,QAAAN,EACAK,EAAA,EAAAA,EAAA8+B,EAAA3uB,OAAAzP,OAAAV,IAAA,KAAAszD,EAAAx0B,EAAA3uB,OAAAnQ,GAAAi0D,EAAAn1B,EAAA3uB,OAAAzP,QAAAN,EAAA40E,IAAA7kE,OAAAzP,QAAAN,EAAA40E,IAAA7kE,OAAAnQ,GAAA6zD,EAAAwvB,GAAAjjF,EAAAkzD,EAAAkI,OAAAvH,KAAAuH,OAAA9qC,EAAAzwB,GAAAg0D,EAAAX,EAAAiI,MAAAjI,EAAAkI,OAAA3H,EAAAwvB,GAAAjjF,EAAAkzD,EAAAiI,KAAAtH,KAAAsH,KAAA7qC,EAAAzwB,GAAA,GAAAN,GAAAk0D,GAAAP,EAAAkI,QAAAvH,GAAAX,EAAAiI,KAAA57D,MAAAm/B,EAAA3uB,OAAArK,MAAA,EAAA9F,IAAAL,EAAAK,GAAA,IAAAsyD,EAAAuB,EAAAI,EAAA,QAAAt0D,EAAA8/E,GAAAr/E,EAAA21D,GAAAp2D,EAAAm/B,EAAAm2C,WAAAn2C,CAAA,UAAAwkD,GAAAljF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,IAAAK,EAAA40D,EAAAx0D,EAAA0+B,EAAAnwB,MAAA,GAAA3O,EAAAinE,YAAA,QAAA3T,EAAA,EAAAA,EAAAtzD,EAAAinE,YAAAvmE,SAAA4yD,EAAA,KAAAW,EAAAj0D,EAAAinE,YAAA3T,GAAAO,EAAAI,EAAA4S,OAAAr0C,EAAA,eAAAqhC,KAAA0vB,WAAA1vB,EAAAqT,cAAAhsB,EAAA,gBAAA2Y,KAAA2vB,YACA3vB,EAAAuT,eAAA,UAAAnT,EAAA7vD,OAAAouB,EAAAyhC,EAAA7vD,MAAA06B,EAAAjM,GAAAohC,EAAA7vD,KAAA06B,EAAAjM,OAAA,MAAAohC,EAAAV,KAAArY,EAAA+Y,EAAAV,IAAAz0B,EAAAjM,GAAAohC,EAAAV,GAAAz0B,EAAAjM,KAAA,IAAAlzB,IAAAshE,EAAApN,EAAA,qBAAAA,EAAAquB,mBAAA,GAAAliF,EAAAinE,YAAA,GAAA3T,EAAA,uBAAAO,EAAA4vB,OAAA,IAAA/yD,EAAA,CAAA4iC,EAAAO,EAAAhnB,KAAA,EAAA5sC,EAAA,MAAAg0D,OAAA,OAAAh0D,EAAAi7C,EAAA1oB,EAAA8gC,EAAAowB,GAAAtjF,EAAAkzD,GAAArzD,EAAAqzD,KAAA3kD,MAAAmwB,EAAAnwB,KAAA3O,EAAA,SAAAszD,KAAA3kD,MAAAmwB,EAAAnwB,OAAAslD,EAAAiB,EAAA5B,EAAA5iC,MAAA,EAAAzwB,EAAA,EAAAg0D,EAAA,EAAAA,GAAA,OAAAqvB,GAAAljF,EAAAkzD,EAAAx0B,EAAA7+B,EAAAN,EAAA,CAAA+wB,EAAAmjC,EAAAhnB,KAAA,EAAA5sC,GAAA,UAAAA,EAAAuyB,EAAA0oB,EAAAxqB,EAAAgzD,GAAAtjF,EAAAswB,EAAAzwB,EAAAywB,EAAA/hB,MAAAmwB,EAAAnwB,KAAA3O,EAAA,aAAA0wB,EAAA4yD,GAAAljF,EAAAswB,EAAAoO,EAAA7+B,EAAAN,GAAA,cAAAm/B,CAAA,UAAAukD,GAAAjjF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAAM,KAAA,EAAA6+B,EACAwkD,GAAAljF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,QAAA2jF,GAAAljF,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAqjF,GAAAljF,EAAA0+B,EAAApO,GAAAzwB,EAAAN,QAAA2jF,GAAAljF,EAAA0+B,EAAApO,GAAAzwB,GAAA,UAAA6+B,KAAA1+B,EAAAujF,UAAA,EAAA9jF,EAAAO,EAAA8jB,MAAA,aAAAw/D,GAAAtjF,EAAA0+B,EAAApO,EAAAzwB,GAAA,SAAAywB,GAAA,GAAAoO,EAAAjM,GAAAiM,EAAAnwB,KAAAvO,EAAA8jB,MAAA6wC,EAAA30D,EAAAP,EAAAi/B,EAAAnwB,KAAA,WAAA+hB,GAAAoO,EAAAjM,KAAA5yB,GAAA20D,EAAAx0D,EAAA0+B,EAAAnwB,OAAAwC,KAAAzQ,OAAAo+B,EAAAnwB,KAAAvO,EAAA8jB,MAAA9jB,EAAAo6B,KAAA,EAAA36B,EAAAi/B,EAAAnwB,KAAA,cAAA9O,EAAAi/B,EAAAnwB,KAAAmwB,EAAAjM,GAAAnC,EAAA,UAAAkzD,GAAAxjF,KAAAs0D,aAAA70D,EAAAO,EAAAyjF,YAAA,GAAAhkF,EAAAO,EAAAuzD,YAAAmwB,GAAA,UAAAC,GAAA3jF,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAA,CAAA+jF,UAAA,EAAA5/E,KAAA06B,EAAA16B,KAAAmvD,GAAAz0B,EAAAy0B,GAAApiD,KAAA2tB,EAAA3tB,KAAAs5B,OAAA3L,EAAA2L,OAAAw5C,OAAA,kBAAAhkF,EAAA+jF,UAAA,IAAAtzD,IAAAzwB,EAAAwe,OACA,SAAA9e,EAAAK,EAAAszD,EAAAW,GAAAt0D,IAAAM,EAAAmE,KAAA2wD,EAAA30D,EAAAT,IAAAK,IAAAC,EAAAszD,GAAAwB,EAAA30D,EAAAJ,IAAAszD,IAAArzD,EAAAkR,KAAAmiD,QAAA,IAAAW,IAAAh0D,EAAAwqC,OAAAwpB,EAAA,GAAAgN,EAAA7gE,EAAA,eAAAA,EAAAH,GAAAG,EAAA21D,IAAAkL,EAAA7gE,EAAA21D,GAAA,eAAA31D,EAAA21D,GAAA91D,GAAA,OAAAA,EAAA+jF,UAAA5jF,EAAA21D,KAAA31D,EAAA21D,GAAA0L,MAAAkY,YAAA,UAAAv1E,KAAAnE,EAAAmE,KAAAmvD,GAAAtzD,EAAAszD,GAAApiD,KAAAlR,EAAAkR,KAAAs5B,OAAAxqC,EAAAwqC,OAAA,UAAAy5C,GAAA9jF,EAAA0+B,EAAApO,GAAA,GAAAtwB,EAAA21D,GAAA,KAAA31D,EAAA21D,GAAA0L,MAAA,OAAAga,GAAAr7E,EAAA21D,GAAAmuB,GAAAzI,CAAAr7E,EAAA0+B,EAAApO,GAAA,GAAAtwB,EAAA21D,GAAA9iC,MAAAkxD,cAAA,UAAAxiB,GAAAvhE,EAAA,iBAAAA,EAAA21D,IAAA4L,GAAAvhE,EAAA21D,GAAA,mBAAAj3B,EAAAilD,GAAA3jF,EAAA0+B,GAAA,IAAAA,EAAA,UAAApO,EAAA0zD,KAAA1zD,GAAA62C,GAAAnnE,EAAA0+B,EAAA16B,KAAA06B,EAAAy0B,IAAA,QAAAtzD,EAAAywB,EAAAhwB,OAAA,KACAT,MAAAokF,GAAAjkF,EAAA,CAAAgE,KAAAssB,EAAAzwB,GAAAmE,KAAAmvD,GAAA7iC,EAAAzwB,GAAAszD,GAAApiD,KAAAlR,EAAA,KAAA6+B,EAAA3tB,KAAAs5B,OAAA3L,EAAA2L,cAAA45C,GAAAjkF,EAAA0+B,EAAA,UAAAulD,GAAAjkF,EAAA0+B,GAAA,MAAAA,EAAA3tB,KAAAzQ,QAAA,IAAAo+B,EAAA3tB,KAAA,OAAA+jD,EAAAp2B,EAAA16B,KAAA06B,EAAAy0B,IAAA,KAAA7iC,EAAAqvD,GAAA3/E,EAAA0+B,GAAAgjD,GAAA1hF,EAAA0+B,EAAApO,EAAAtwB,EAAA21D,GAAA31D,EAAA21D,GAAA0L,MAAA9iD,GAAAmkE,KAAAwB,GAAAlkF,EAAA0+B,EAAApO,EAAAq2C,GAAA3mE,EAAA0+B,IAAA,IAAA7+B,EAAA,GAAAygF,GAAAtgF,GAAA,SAAAT,EAAAK,OAAA,GAAAw/D,GAAAv/D,EAAAN,EAAA2lD,WAAAi/B,GAAA5kF,EAAA2lD,QAAAxmB,GAAA7+B,EAAA8Q,KAAApR,EAAA2lD,UAAAg/B,GAAA3kF,EAAAm/B,EAAA,KAAAioC,GAAApnE,EAAAm/B,GAAA,cAAA0lD,GAAApkF,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAG,EAAA21D,IAAA31D,EAAA21D,GAAA9iC,MAAAkxD,cAAA,IAAAlkF,GAAAywB,EAAA,SAAA/wB,EAAAS,EAAAklD,QAAAtlD,EAAAszD,EAAAlzD,EAAA40E,IAAA/gB,EAAA,QAAAn1B,EAAAn/B,EAAA65B,KAAA75B,EAAAshF,OAAAptB,EAAA,QAAA/0B,EAAAn/B,EAAAshF,OAAAthF,EAAA65B,KAAAhH,EAAA,EAAAA,EAAAyhC,EAAAvzD,SACAV,EAAAi0D,EAAAzhC,GAAA9B,GAAA1wB,EAAAmQ,QAAAnQ,EAAAu7C,OAAAn7C,EAAA40E,KAAAh1E,EAAAmQ,QAAAqiB,KAAA,GAAAA,GAAAyhC,EAAAvzD,OAAA,KAAAf,EAAA0hF,WAAA1hF,EAAA2hF,cAAA,UAAAthF,EAAAi0D,EAAAn4C,MAAA9b,EAAAmQ,OAAA,CAAA6xE,GAAAhiF,EAAA6zD,GAAA,GAAAnjC,IAAA1wB,EAAAu7C,OAAAn7C,EAAA40E,KAAA,CAAAuN,GAAAniF,EAAAJ,EAAA,CAAA+iF,WAAA,WAAAzvB,EAAAtzD,CAAA,SAAAC,EAAA,CAAAg0D,EAAAljD,KAAA/Q,GAAA,iBAAAk7C,EAAA,GAAA8mC,GAAA1uB,EAAAO,KAAA9iD,KAAA,CAAAo7D,QAAAjxB,EAAAumC,WAAA9hF,EAAA8hF,aAAA9hF,EAAA8hF,WAAAzhF,EAAAyhF,cAAA9hF,EAAA+hF,cAAA,IAAA9hF,EAAA+hE,GAAAvhE,EAAA,iBAAAA,EAAA21D,IAAA4L,GAAAvhE,EAAA21D,GAAA,gBAAArlC,EAAA,SAAAnwB,GAAA,IAAAyzD,EAAAh0D,EAAAmsE,QAAA5rE,GAAAyzD,EAAAvpB,OAAA3L,EAAA,GAAAl/B,IAAAmkF,GAAA3jF,EAAA4zD,GAAA,UAAAC,EAAAvzD,OAAA,KAAAw6C,EAAAnqC,KAAA4wE,GAAAvhF,EAAA4zD,IAAA,IAAAt0D,EAAAa,EACAw/E,GAAA3/E,EAAA4zD,GAAAzB,EAAA0B,GAAAqwB,GAAAlkF,EAAA4zD,EAAAt0D,EAAAuiF,GAAA7hF,EAAA4zD,KAAAzzD,GAAAH,EAAA21D,IAAA31D,EAAA21D,GAAAiG,eAAA,CAAA53D,KAAA4vD,EAAA5vD,KAAAmvD,GAAAssB,GAAA7rB,KAAA,IAAA7zD,EAAA,GAAAugF,GAAAtgF,GAAA,SAAAu0D,EAAAqV,OAAA,GAAAxK,GAAAr/D,EAAAw0D,EAAArP,WAAAi/B,GAAA5vB,EAAArP,QAAA0O,GAAA7zD,EAAA4Q,KAAA4jD,EAAArP,UAAAg/B,GAAA3vB,EAAAX,EAAA,KAAAiuB,GAAAttB,EAAAX,GAAA,SAAA/zD,EAAAD,EAAAmsE,QAAAzrE,OAAA,KAAAT,MAAA,GAAAN,EAAA+wB,EAAAzwB,GAAA,OAAAN,EAAAuzB,CAAA,YAAAuxD,GAAArkF,EAAA0+B,GAAA,MAAAA,IAAA1+B,EAAA8jB,OAAA4a,EAAA1+B,EAAA40E,IAAA,IAAA2K,GAAAhgB,GAAAv/D,EAAA40E,IAAA7kE,QAAA,SAAAxQ,GAAA,WAAA2yD,EAAAzyD,EAAAF,EAAA67D,OAAA7sD,KAAAmwB,EAAAn/B,EAAA67D,OAAA3oC,IAAAhzB,EAAAF,EAAA47D,KAAA5sD,KAAAmwB,EAAAn/B,EAAA47D,KAAA1oC,IAAA,IAAAzyB,EAAA40E,IAAAC,WAAA70E,EAAA21D,IAAA,CAAAoe,GAAA/zE,EAAA21D,GAAA31D,EAAA8jB,MAAA9jB,EAAA8jB,MAAA4a,KAAA,QAAApO,EAAAtwB,EAAA21D,GAAA4D,QAAA15D,EAAAywB,EAAAi1C,SAAA1lE,EAAAywB,EAAAk1C,OAAA3lE,IAAAu0E,GAAAp0E,EAAA21D,GACA91D,EAAA,oBAAAqkF,GAAAlkF,EAAA0+B,EAAApO,EAAAzwB,GAAA,GAAAG,EAAA21D,KAAA31D,EAAA21D,GAAA0L,MAAA,OAAAga,GAAAr7E,EAAA21D,GAAAuuB,GAAA7I,CAAAr7E,EAAA0+B,EAAApO,EAAAzwB,GAAA,GAAA6+B,EAAAy0B,GAAA5kD,KAAAvO,EAAA8jB,MAAAugE,GAAArkF,EAAA0+B,EAAA3tB,KAAAzQ,OAAA,GAAAo+B,EAAAy0B,GAAA5kD,KAAAmwB,EAAA16B,KAAAuK,YAAA,KAAAmwB,EAAA16B,KAAAuK,KAAAvO,EAAAuzD,YAAA,IAAA70B,EAAA16B,KAAAuK,KAAAvO,EAAA8jB,MAAA,KAAAvkB,EAAAm/B,EAAA3tB,KAAAzQ,OAAA,GAAAN,EAAA8jB,MAAA4a,EAAA16B,KAAAuK,MAAA81E,GAAArkF,EAAAT,GAAAm/B,EAAA,CAAA16B,KAAAvE,EAAAO,EAAA8jB,MAAA,GAAAqvC,GAAA1zD,EAAAi/B,EAAAy0B,GAAA5kD,KAAAhP,EAAAm/B,EAAAy0B,GAAA1gC,IAAA1hB,KAAA,CAAAohD,EAAAzzB,EAAA3tB,OAAAs5B,OAAA3L,EAAA2L,OAAA,CAAA9qC,EAAAS,EAAAuzD,WAAA70B,EAAAy0B,GAAA5kD,KAAAhP,IAAAm/B,EAAA,CAAA16B,KAAA06B,EAAA16B,KAAAmvD,GAAA1zD,EAAAF,EAAAi1D,EAAAx0D,EAAAT,GAAAwR,KAAAzQ,QAAAyQ,KAAA,CAAA2tB,EAAA3tB,KAAA,IAAAs5B,OAAA3L,EAAA2L,SAAA3L,EAAA4lD,QAAAnhB,GAAAnjE,EAAA0+B,EAAA16B,KAAA06B,EAAAy0B,IAAA7iC,MAAAqvD,GAAA3/E,EAAA0+B,IAAA1+B,EAAA21D,GAAA4uB,GAAAvkF,EAAA21D,GACAj3B,EAAA7+B,GAAAqgF,GAAAlgF,EAAA0+B,EAAA7+B,GAAA4iF,GAAAziF,EAAAswB,EAAAozD,IAAA1jF,EAAAujF,UAAAN,GAAAjjF,EAAAP,EAAAO,EAAAyjF,YAAA,MAAAzjF,EAAAujF,UAAA,aAAAgB,GAAAvkF,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAG,EAAAmkE,IAAA5kE,EAAAS,EAAAu5D,QAAA35D,EAAA8+B,EAAA16B,KAAAkvD,EAAAx0B,EAAAy0B,GAAAU,GAAA,EAAAJ,EAAA7zD,EAAA2O,KAAAvO,EAAAuI,QAAA2nE,eAAAzc,EAAA+H,EAAAsM,GAAAtT,EAAA30D,EAAAD,EAAA2O,QAAA1O,EAAAgE,KAAA4vD,EAAAP,EAAA3kD,KAAA,YAAA6jB,GAAA,GAAAA,GAAA7yB,EAAAgpE,QAAA,OAAA1U,GAAA,SAAAh0D,EAAA+0E,IAAAnW,SAAA//B,EAAA16B,KAAA06B,EAAAy0B,KAAAiO,GAAAphE,GAAAkgF,GAAArgF,EAAA6+B,EAAApO,EAAAojD,GAAA1zE,MAAAuI,QAAA2nE,eAAArwE,EAAAgE,KAAA4vD,EAAA7zD,EAAA2O,KAAAmwB,EAAA3tB,KAAAzQ,QAAA,SAAA8xB,GAAA,IAAA0oB,EAAAutB,GAAAj2C,GAAA0oB,EAAAv7C,EAAAipE,gBAAAjpE,EAAAgpE,QAAAn2C,EAAA7yB,EAAAipE,cAAA1tB,EAAAv7C,EAAAkpE,gBAAA,EAAA5U,GAAA,MAAAA,IAAA7zD,EAAAqhE,MAAAsY,eAAA,IACApT,GAAA1mE,EAAAD,EAAA2O,MAAAupE,GAAA93E,EAAA,KAAAswB,EAAAoO,EAAA3tB,KAAAzQ,QAAA4yD,EAAA3kD,KAAA3O,EAAA2O,MAAA,EAAAmwB,EAAAkoC,KAAAmN,GAAA/zE,GAAAJ,EAAA2O,MAAA2kD,EAAA3kD,MAAA,GAAAmwB,EAAA3tB,KAAAzQ,QAAA0/E,GAAAhgF,EAAAmkE,IAAAzlC,GAAAq1C,GAAA/zE,EAAAJ,EAAA2O,KAAA2kD,EAAA3kD,KAAA,EAAA+hB,GAAA8jD,GAAAp0E,EAAAJ,EAAA2O,KAAA,QAAA+hB,EAAAixC,GAAAvhE,EAAA,eAAAH,EAAA0hE,GAAAvhE,EAAA,YAAAswB,EAAAoO,EAAA,CAAA16B,KAAApE,EAAAuzD,GAAAD,EAAAniD,KAAA2tB,EAAA3tB,KAAAuzE,QAAA5lD,EAAA4lD,QAAAj6C,OAAA3L,EAAA2L,QAAAxqC,GAAA8rE,GAAA3rE,EAAA,SAAAA,EAAA0+B,GAAApO,IAAAtwB,EAAAqhE,MAAAoY,aAAAz5E,EAAAqhE,MAAAoY,WAAA,KAAA9oE,KAAA+tB,GAAA1+B,EAAAu5D,QAAAkd,kBAAA,cAAA+N,GAAAxkF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAAM,MAAAywB,GAAA,EAAAwkC,EAAAj1D,EAAAywB,KAAAzwB,EAAA,CAAAA,EAAAywB,KAAAzwB,EAAA,GAAAA,IAAA,qBAAA6+B,MAAA1+B,EAAAykF,WAAA/lD,IAAAolD,GAAA9jF,EAAA,CAAAgE,KAAAssB,EAAA6iC,GAAAtzD,EACAkR,KAAA2tB,EAAA2L,OAAA9qC,GAAA,UAAAmlF,GAAA1kF,EAAA0+B,EAAApO,EAAAzwB,GAAAywB,EAAAtwB,EAAAuO,KAAAvO,EAAAuO,MAAA1O,EAAA6+B,EAAA1+B,EAAAuO,OAAAvO,EAAAuO,KAAAmwB,EAAA1+B,EAAAyyB,GAAA,YAAAkyD,GAAA3kF,EAAA0+B,EAAApO,EAAAzwB,GAAA,QAAAN,EAAA,EAAAA,EAAAS,EAAAM,SAAAf,EAAA,KAAAK,EAAAI,EAAAT,GAAA2zD,GAAA,KAAAtzD,EAAAmQ,OAAA,IAAAnQ,EAAAglF,SAAAhlF,EAAAI,EAAAT,GAAAK,EAAAoiF,WAAApiF,EAAAglF,QAAA,GAAA1xB,EAAA,EAAAA,EAAAtzD,EAAAmQ,OAAAzP,OAAA4yD,IAAAwxB,GAAA9kF,EAAAmQ,OAAAmjD,GAAAkI,OAAA18B,EAAApO,EAAAzwB,GAAA6kF,GAAA9kF,EAAAmQ,OAAAmjD,GAAAiI,KAAAz8B,EAAApO,EAAAzwB,OAAA,SAAAg0D,EAAA,EAAAA,EAAAj0D,EAAAmsE,QAAAzrE,SAAAuzD,EAAA,KAAAJ,EAAA7zD,EAAAmsE,QAAAlY,GAAA,GAAAvjC,EAAAmjC,EAAAzvD,KAAAuK,KAAAklD,EAAAzvD,KAAAvE,EAAAg0D,EAAAzvD,KAAAuK,KAAA1O,EAAA4zD,EAAAzvD,KAAAyuB,IAAAghC,EAAAN,GAAA1zD,EAAAg0D,EAAAN,GAAA5kD,KAAA1O,EAAA4zD,EAAAN,GAAA1gC,SAAA,GAAAiM,GAAA+0B,EAAAN,GAAA5kD,KAAA,CAAA2kD,GAAA,SAAAA,IAAAlzD,EAAAm+D,OAAA,EAAA5+D,EAAA,GAAAA,EAAA,cAAA4kF,GAAAnkF,EACA0+B,GAAA,IAAApO,EAAAoO,EAAA16B,KAAAuK,KAAA1O,EAAA6+B,EAAAy0B,GAAA5kD,KAAAmwB,IAAA3tB,KAAAzQ,QAAAT,EAAAywB,GAAA,EAAAq0D,GAAA3kF,EAAAo5B,KAAA9I,EAAAzwB,EAAA6+B,GAAAimD,GAAA3kF,EAAA6gF,OAAAvwD,EAAAzwB,EAAA6+B,EAAA,UAAAmmD,GAAA7kF,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAm/B,EAAA9+B,EAAA8+B,EAAA,iBAAAA,EAAA9+B,EAAA40D,EAAAx0D,EAAA6+B,KAAA/K,IAAA9zB,EAAA8jB,MAAA+a,KAAAhL,IAAA6K,EAAA1+B,EAAA8jB,MAAA9jB,EAAAo6B,KAAA,KAAA76B,EAAAi8D,EAAA98B,GAAA,SAAAn/B,EAAA,YAAAM,EAAAD,EAAAL,IAAAS,EAAA21D,IAAAye,GAAAp0E,EAAA21D,GAAAp2D,EAAA+wB,GAAA,OAAA1wB,CAAA,UAAAklF,GAAA9kF,GAAAmG,KAAA4rC,MAAA/xC,EAAAmG,KAAA6b,OAAA,aAAA0c,EAAA,EAAApO,EAAA,EAAAA,EAAAtwB,EAAAM,SAAAgwB,EAAAtwB,EAAAswB,GAAAtO,OAAA7b,KAAAu4B,GAAA1+B,EAAAswB,GAAAgpC,OAAAnzD,KAAAmzD,OAAA56B,CAAA,UAAAqmD,GAAA/kF,GAAAmG,KAAAklC,SAAArrC,EAAA,QAAA0+B,EAAA,EAAApO,EAAA,EAAAzwB,EAAA,EAAAA,EAAAG,EAAAM,SAAAT,EAAA,KAAAN,EAAAS,EAAAH,GAAA6+B,GAAAn/B,EAAA2jE,YAAA5yC,GAAA/wB,EAAA+5D,OAAA/5D,EAAAyiB,OACA7b,IAAA,CAAAA,KAAAi0B,KAAAsE,EAAAv4B,KAAAmzD,OAAAhpC,EAAAnqB,KAAA6b,OAAA,cAAAyQ,GAAAzyB,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAA,IAAAsxB,GAAA7wB,EAAAswB,EAAAzwB,GAAAD,EAAAI,EAAA21D,GAAA/1D,GAAAL,EAAAsuE,YAAAjuE,EAAA25D,QAAA8jB,cAAA,GAAAwH,GAAA7kF,EAAA0+B,EAAA,mBAAAw0B,GAAA,IAAAW,EAAAX,EAAAya,UAAAza,EAAAya,QAAA,UAAApuE,EAAAylF,SAAAnxB,EAAAljD,KAAApR,GAAAs0D,EAAAsK,OAAAt/B,KAAAhL,IAAAggC,EAAAvzD,OAAAu+B,KAAA/K,IAAA,EAAAv0B,EAAAylF,WAAA,EAAAzlF,KAAAgP,KAAA2kD,EAAAtzD,IAAAqoE,GAAAjoE,EAAAkzD,KAAAW,EAAAuU,GAAAlV,GAAAlzD,EAAA04D,UAAA2K,GAAAnQ,IAAAoG,OAAA6U,GAAA5uE,IAAAs0D,GAAAqjB,GAAAt3E,EAAAL,EAAA+5D,QAAA15D,EAAAyhE,MAAAwO,aAAA,eAAAjwE,GAAA+rE,GAAA/rE,EAAA,kBAAAA,EAAAL,EAAA,iBAAAm/B,IAAA88B,EAAA98B,IAAA,OAAAn/B,CAAA,UAAA0lF,GAAAjlF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,GAAAM,KAAAqlF,OAAA,OAAAC,GAAAnlF,EACA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,GAAAS,EAAA21D,KAAA31D,EAAA21D,GAAA0L,MAAA,OAAAga,GAAAr7E,EAAA21D,GAAAsvB,GAAA5J,CAAAr7E,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,IAAAK,EAAA,IAAAwlF,GAAAplF,EAAAT,KAAAu1D,EAAAp2B,EAAApO,GAAAzwB,GAAAq/D,GAAAr/D,EAAAD,GAAA,QAAAL,GAAA,GAAAA,IAAA,IAAAK,EAAAsnE,eAAA,OAAAtnE,IAAAylF,eAAAzlF,EAAAgoE,WAAA,EAAAhoE,EAAAsoE,WAAA5M,EAAA,QAAA17D,EAAAylF,cAAA,qBAAAxlF,EAAA+tE,mBAAAhuE,EAAAsoE,WAAAxQ,aAAA,2BAAA73D,EAAAknE,aAAAnnE,EAAAsoE,WAAAnB,YAAA,OAAAnnE,EAAAgoE,UAAA,IAAAC,GAAA7nE,EAAA0+B,EAAAnwB,KAAAmwB,EAAApO,EAAA1wB,IAAA8+B,EAAAnwB,MAAA+hB,EAAA/hB,MAAAs5D,GAAA7nE,EAAAswB,EAAA/hB,KAAAmwB,EAAApO,EAAA1wB,GAAA,MAAAK,MAAA,oEACA0nE,IAAA,EAAA/nE,EAAA0lF,cAAA5D,GAAA1hF,EAAA,CAAAgE,KAAA06B,EAAAy0B,GAAA7iC,EAAA+Z,OAAA,YAAArqC,EAAA40E,IAAA8N,KAAA,IAAAxvB,EAAAx0B,EAAAnwB,KAAAslD,EAAA7zD,EAAA21D,GAAAlC,EAAAzzD,EAAA6D,KAAAqvD,EAAA5iC,EAAA/hB,KAAA,YAAA6jB,GAAAyhC,GAAAj0D,EAAAgoE,YAAA/T,EAAAtrD,QAAA2nE,cAAApI,GAAA11C,IAAAyhC,EAAA0F,QAAAgP,UAAA9U,GAAA,GAAA7zD,EAAAgoE,WAAA1U,GAAAx0B,EAAAnwB,MAAA80D,GAAAjxC,EAAA,OAAA0oB,EAAA,IAAA0rB,GAAA5mE,EAAAszD,GAAAx0B,EAAAnwB,KAAAmwB,EAAAjM,GAAA,KAAAygC,GAAA5iC,EAAA/hB,KAAA+hB,EAAAmC,GAAA,MAAAjzB,EAAAQ,EAAA21D,IAAA31D,EAAA21D,GAAA0L,OAAA7hE,KAAA0jD,OAAAqiC,UAAA/lF,EAAAqnE,cAAArnE,EAAAqnE,YAAA,IAAA0e,YAAAnzD,EAAAy0C,aAAArnE,EAAAgmF,IAAApzD,EAAAy0C,aAAAz0C,EAAAy0C,YAAAl2D,KAAAmqC,IAAA1oB,EAAAy0C,YAAAz0C,EAAAy0C,YAAAz0C,EAAAy0C,YAAA7zB,OAAA,CAAA8H,IAAA,CAAAA,GAAAt7C,KAAA8qC,IAAAlY,EAAAy0C,cACA/rB,EAAA2rB,OAAAe,WAAAp1C,KAAA8gC,CAAA,IAAAtzD,EAAAgoE,WAAA5nE,EAAA6D,KAAA66B,EAAAnwB,KAAA+hB,EAAA/hB,KAAA,YAAA6jB,GAAA61C,GAAAjoE,EAAAoyB,IAAAixC,GAAAjxC,EAAA,MAAAxyB,EAAA6lF,cAAAhxB,EAAA70D,EAAA,uCAAAA,EAAAqqD,OAAA,IAAArqD,EAAAwnE,WAAA4c,IAAA,GAAAhkF,EAAAklD,QAAA9rB,KAAA94B,QAAAN,EAAAklD,QAAA27B,OAAAvgF,SAAAN,EAAA0lF,gBAAA9lF,EAAAgoE,YAAAhoE,EAAA2e,KAAAonE,GAAA/lF,EAAAyjF,QAAA,MAAAxvB,EAAA,CAAAJ,IAAAI,EAAAwN,MAAAsY,eAAA,MAAA/5E,EAAAgoE,UAAAmM,GAAAlgB,EAAAn1B,EAAAnwB,KAAA+hB,EAAA/hB,KAAA,WAAA3O,EAAA+3D,WAAA/3D,EAAAsqE,YAAAtqE,EAAAuqE,UAAAvqE,EAAAqqE,KAAArqE,EAAAwqE,YAAAxqE,EAAAmtD,MAAA,IAAAltD,EAAA6+B,EAAAnwB,KAAA1O,GAAAywB,EAAA/hB,KAAA1O,IAAAu0E,GAAAvgB,EAAAh0D,EAAA,QAAAD,EAAAyjF,QAAAL,GAAAnvB,EAAAsQ,KACAwH,GAAA9X,EAAA,cAAAA,EAAAj0D,EAAA,QAAAA,CAAA,UAAAulF,GAAAnlF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAAM,EAAAq/D,GAAAr/D,KAAAqlF,QAAA,MAAAtlF,EAAA,CAAAqlF,GAAAjlF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,IAAA2zD,EAAAtzD,EAAA,GAAAi0D,EAAAh0D,EAAAqoE,WAAAoY,GAAAtgF,GAAA,SAAAyzD,GAAAI,IAAAh0D,EAAAqoE,WAAArU,EAAA+xB,WAAA,IAAAhmF,EAAA+Q,KAAAs0E,GAAAxxB,EAAAkB,EAAAlB,EAAA/0B,GAAAi2B,EAAAlB,EAAAnjC,GAAAzwB,EAAAN,IAAA,QAAA6yB,EAAA,EAAAA,EAAAqhC,EAAA8sB,OAAAjgF,SAAA8xB,EAAA,GAAAqhC,EAAA8sB,OAAAnuD,GAAAyzD,SAAA,OAAA3yB,EAAAf,EAAAvyD,EAAA,eAAAkmF,GAAAlmF,EAAAszD,EAAA,UAAA6yB,GAAA/lF,GAAA,OAAAA,EAAAgmF,UAAAvmF,EAAAO,EAAA8jB,MAAA,GAAA9jB,EAAAimF,QAAAxmF,EAAAO,EAAAuzD,cAAA,SAAA70B,GAAA,OAAAA,EAAA1c,MAAA,aAAAkkE,GAAAlmF,GAAA,QAAA0+B,EAAA,SAAA7+B,KAAAG,EAAAH,GAAA,IAAAN,EAAA,CAAAM,EAAAuiF,QAAAje,KAAAmc,GAAAzgF,EAAAuiF,QAAAje,KAAA,SAAAtQ,GAAA,OAAAt0D,EAAAoR,KAAAkjD,EAAA,IACA,QAAAj0D,EAAA,EAAAA,EAAAC,EAAAsmF,QAAA7lF,OAAAV,IAAA,KAAAszD,EAAArzD,EAAAsmF,QAAAvmF,IAAA,GAAAw/D,GAAA7/D,EAAA2zD,EAAAiR,OAAAjR,EAAAlxC,OAAA,KAAAniB,EAAAsmF,QAAAhoB,OAAAv+D,IAAA,MAAA0wB,EAAA,EAAAA,EAAAtwB,EAAAM,OAAAgwB,IAAAoO,EAAApO,EAAA,UAAA81D,GAAApmF,GAAA,IAAA0+B,EAAAv4B,KAAAkgF,GAAA3nD,GAAA,IAAAqiC,EAAAriC,EAAA1+B,KAAAsuE,GAAA5vC,EAAA66B,QAAAv5D,GAAA,CAAAyhE,GAAAzhE,GAAAqyD,IAAAi0B,IAAA,IAAA79C,MAAA,IAAAnY,EAAAsjD,GAAAl1C,EAAA1+B,GAAA,GAAAH,EAAAG,EAAAumF,aAAAC,MAAA,GAAAl2D,IAAAoO,EAAA+nD,aAAA,GAAA5mF,KAAAS,QAAA4iD,OAAAwjC,YAAAxjC,OAAAyjC,KAAA,QAAApnF,EAAAM,EAAAS,OAAAV,EAAAyB,MAAA9B,GAAA2zD,EAAA,EAAAW,EAAA,aAAAX,GAAA3zD,GAAA87E,GAAA38C,GAAA,WAAApO,EAAAqkC,EAAAj2B,EAAAylC,IAAA7zC,GAAA,IAAAwqB,EAAA,CAAA92C,KAAAssB,EAAA6iC,GAAA7iC,EAAAvf,KAAA2tB,EAAAylC,IAAAsgB,WAAA7kF,EAAAqmD,QAAA,SAAAzmD,GAAA,aAAAA,CAAA,IAAA4kC,KAAA1F,EAAAylC,IAAAyiB,kBACAv8C,OAAA,SAAAy5C,GAAAplD,EAAAylC,IAAArpB,GAAA0nC,GAAA9jD,EAAAylC,IAAAqb,GAAA7qB,EAAAj2B,EAAAylC,IAAA7zC,GAAAqkC,EAAAj2B,EAAAylC,IAAAsb,GAAA3kC,KAAA,GADAugC,EACA,EAAA5nB,EAAA,SAAA3Y,EAAAt7C,GAAA,GAAAk/B,EAAAn2B,QAAAs+E,qBAAA,GAAAznB,GAAA1gC,EAAAn2B,QAAAs+E,mBAAA/rC,EAAA3pC,MAAA0iD,QAAA,KAAA1zD,EAAA,IAAAumF,WAAAvmF,EAAA2mF,QAAA,kBAAAjzB,GAAA,EAAA1zD,EAAA4mF,OAAA,eAAAnzB,EAAAzzD,EAAAspB,OAAA,0BAAA7jB,KAAAguD,KAAAh0D,EAAAJ,GAAAo0D,GAAAC,GAAA,EAAA1zD,EAAA6mF,WAAAlsC,EAAA,GAAA1oB,EAAA,EAAAA,EAAAvyB,EAAAS,OAAA8xB,IAAAqhC,EAAA5zD,EAAAuyB,WAAA,GAAAsM,EAAA7L,MAAA2jD,eAAA,EAAA93C,EAAAylC,IAAAyQ,IAAAnW,SAAAnuC,GAAAoO,EAAA7L,MAAA2jD,aAAAx2E,GAAAwkD,YAAA,kBAAA9lB,EAAA66B,QAAA30D,MAAA81D,OAAA,mBAAAjH,EACAzzD,EAAAumF,aAAAU,QAAA,SAAAvoD,EAAA7L,MAAA2jD,eAAA93C,EAAA7L,MAAA2jD,aAAA3yC,OAAAzR,EAAAsM,EAAAu0B,kBAAAwvB,GAAA/jD,EAAAylC,IAAAqb,GAAAlvD,MAAA,GAAA8B,EAAA,IAAAvyB,EAAA,EAAAA,EAAAuyB,EAAA9xB,SAAAT,EAAA2kF,GAAA9lD,EAAAylC,IAAA,GAAA/xC,EAAAvyB,GAAAu7D,OAAAhpC,EAAAvyB,GAAAs7D,KAAA,QAAAz8B,EAAAwoD,iBAAAzzB,EAAA,kBAAA/0B,EAAA66B,QAAA30D,MAAA81D,OAAA,QAAA5f,GAAA,YAAAurC,GAAArmF,KAAAu5D,QAAA4tB,aAAAnnF,EAAAu5D,QAAAoV,UAAAxe,YAAAnwD,EAAAu5D,QAAA4tB,YAAAnnF,EAAAu5D,QAAA4tB,WAAA,eAAAC,GAAApnF,GAAA,GAAAgtD,SAAAq6B,uBAAA,SAAA3oD,EAAAsuB,SAAAq6B,uBAAA,cAAA/2D,EAAA,GAAAzwB,EACA,EAAAA,EAAA6+B,EAAAp+B,OAAAT,IAAA,KAAAN,EAAAm/B,EAAA7+B,GAAAoyD,WAAA1yD,GAAA+wB,EAAA3f,KAAApR,EAAA,CAAA+wB,EAAAhwB,QAAAgwB,EAAA,GAAAqjC,WAAA,mBAAA/zD,EAAA,EAAAA,EAAA0wB,EAAAhwB,OAAAV,IAAAI,EAAAswB,EAAA1wB,GAAA,cAAA0nF,KAAA,IAAAtnF,EAAAy0D,EAAAvR,OAAA,2BAAAljD,MAAAwkD,YAAA,WAAAxkD,EAAA,KAAAonF,GAAAG,GAAA,YAAA9yB,EAAAvR,OAAA,0BAAAkkC,GAAAjR,GAAA,aAAAoR,GAAAvnF,GAAA,IAAA0+B,EAAA1+B,EAAAu5D,QAAA76B,EAAAgzC,gBAAAhzC,EAAAizC,iBAAAjzC,EAAAmwC,eAAA,KAAAnwC,EAAAq7C,mBAAA,EAAA/5E,EAAAwnF,SAAA,UAAAC,GAAAznF,GAAA,IAAA0+B,EAAA1+B,EAAAmT,MAAA,UAAAnT,EAAA0+B,IAAAp+B,OAAA,WAAAgwB,EAAAzwB,EAAAN,EAAAK,EAAAszD,EAAA,EAAAA,EAAAx0B,EAAAp+B,OAAA,EAAA4yD,IAAA,KAAAW,EAAAn1B,EAAAw0B,GACA,qBAAAttD,KAAAiuD,GAAAj0D,GAAA,sBAAAgG,KAAAiuD,GAAAvjC,GAAA,gCAAA1qB,KAAAiuD,GAAAh0D,GAAA,wBAAA+F,KAAAiuD,GAAAt0D,GAAA,aAAAU,MAAA,+BAAA4zD,EAAA,CAAAvjC,IAAAtwB,EAAA,OAAAA,GAAAH,IAAAG,EAAA,QAAAA,GAAAJ,IAAAI,EAAA,OAAAA,GAAAT,IAAAS,EAAA,SAAAA,GAAA,OAAAA,CAAA,UAAA0nF,GAAA1nF,GAAA,IAAA0+B,EAAA,GAAApO,EAAA,IAAAA,KAAAtwB,EAAA,GAAAA,EAAA8N,eAAAwiB,GAAA,KAAAzwB,EAAAG,EAAAswB,GAAA,uCAAA1qB,KAAA0qB,GAAA,WAAAzwB,EAAA,QAAAN,EAAAggE,GAAAjvC,EAAAnd,MAAA,KAAAs0E,IAAA7nF,EAAA,EAAAA,EAAAL,EAAAe,OAAAV,IAAA,IAAAA,GAAAL,EAAAe,OAAA,OAAA4yD,EAAA3zD,EAAA6kC,KAAA,SAAAyvB,EAAAh0D,CAAA,MAAAqzD,EACA3zD,EAAAmG,MAAA,EAAA9F,EAAA,GAAAwkC,KAAA,KAAAyvB,EAAA,UAAAJ,EAAA/0B,EAAAw0B,GAAA,IAAAO,EAAA/0B,EAAAw0B,GAAAW,OAAA,GAAAJ,GAAAI,EAAA,MAAA5zD,MAAA,6BAAAizD,EAAA,QAAAlzD,EAAAswB,EAAA,UAAA8B,KAAAsM,EAAA1+B,EAAAoyB,GAAAsM,EAAAtM,GAAA,OAAApyB,CAAA,UAAA2nF,GAAA3nF,EAAA0+B,EAAApO,EAAAzwB,GAAA6+B,EAAAkpD,GAAAlpD,GAAA,IAAAn/B,EAAAm/B,EAAAr+B,KAAAq+B,EAAAr+B,KAAAL,EAAAH,GAAA6+B,EAAA1+B,GAAA,QAAAT,EAAA,2BAAAA,EAAA,uBAAAA,GAAA+wB,EAAA/wB,GAAA,mBAAAm/B,EAAAmpD,YAAA,sBAAArlF,OAAAM,UAAA2C,SAAApF,KAAAq+B,EAAAmpD,aAAA,OAAAF,GAAA3nF,EAAA0+B,EAAAmpD,YAAAv3D,EAAAzwB,GAAA,IAAAN,EAAA,EAAAA,EAAAm/B,EAAAmpD,YAAAvnF,OAAAf,IAAA,KAAAK,EAAA+nF,GAAA3nF,EAAA0+B,EAAAmpD,YAAAtoF,GAAA+wB,EAAAzwB,GAAA,GAAAD,EAAA,OAAAA,CAAA,GACA,SAAAkoF,GAAA9nF,KAAA,iBAAAA,IAAA+nF,GAAA/nF,EAAAgoF,SAAA,cAAAhoF,GAAA,OAAAA,GAAA,SAAAA,GAAA,OAAAA,CAAA,UAAAioF,GAAAjoF,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAG,EAAA0+B,EAAAwpD,QAAA,OAAAroF,IAAAG,EAAA,OAAAA,IAAAmoF,GAAAzpD,EAAA0pD,QAAA1pD,EAAAyjC,UAAA,QAAAtiE,IAAAG,EAAA,QAAAA,IAAAmoF,GAAAzpD,EAAAyjC,QAAAzjC,EAAA0pD,UAAA,OAAAvoF,IAAAG,EAAA,OAAAA,IAAAswB,GAAAoO,EAAA2pD,UAAA,SAAAxoF,IAAAG,EAAA,SAAAA,GAAA,OAAAA,CAAA,UAAAsoF,GAAAtoF,EAAA0+B,GAAA,GAAAygD,IAAA,IAAAn/E,EAAAgoF,SAAAhoF,EAAA,qBAAAswB,EAAAy3D,GAAA/nF,EAAAgoF,SAAA,SAAA13D,GAAAtwB,EAAAuoF,YAAA,YAAAvoF,EAAAgoF,SAAAhoF,EAAAE,OAAAowB,EAAAtwB,EAAAE,MAAA,OAAA+nF,GAAA33D,EAAAtwB,EAAA0+B,EAAA,UAAAkpD,GAAA5nF,GAAA,uBACAA,EAAAwoF,GAAAxoF,IAAA,UAAAyoF,GAAAzoF,EAAA0+B,GAAA,QAAApO,EAAAtwB,EAAAmkE,IAAAyQ,IAAA7kE,OAAAlQ,EAAA,GAAAN,EAAA,EAAAA,EAAA+wB,EAAAhwB,OAAAf,IAAA,SAAAK,EAAA8+B,EAAApO,EAAA/wB,IAAAM,EAAAS,QAAA,GAAAw0D,EAAAl1D,EAAAoE,KAAAmuD,EAAAtyD,GAAAszD,KAAA,KAAAD,EAAArzD,EAAA6b,MAAA,KAAAo5C,EAAA5B,EAAAlvD,KAAApE,EAAAoE,MAAA,CAAApE,EAAAoE,KAAAkvD,EAAAlvD,KAAA,OAAAnE,EAAA8Q,KAAA/Q,EAAA,CAAAw7E,GAAAp7E,GAAA,mBAAA6zD,EAAAh0D,EAAAS,OAAA,KAAAuzD,MAAA2wB,GAAAxkF,EAAAmkE,IAAA,GAAAtkE,EAAAg0D,GAAA7vD,KAAAnE,EAAAg0D,GAAAV,GAAA,WAAAikB,GAAAp3E,EAAA,aAAA0oF,GAAA1oF,EAAA0+B,EAAApO,GAAAoO,EAAAshC,GAAAhgE,EAAA+Q,KAAA2tB,EAAApO,KAAA,SAAAoO,KAAA1+B,EAAA+Q,KAAAzQ,OAAA,KAAAo+B,CAAA,UAAAiqD,GAAA3oF,EAAA0+B,EAAApO,GAAAtwB,EAAA0oF,GAAA1oF,EAAA0+B,EAAAjM,GAAAnC,GAAA,aAAAtwB,EAAA,SAAAP,EAAAi/B,EAAAnwB,KAAAvO,EAAA,EAAAswB,EAAA,2BAAAs4D,GAAA5oF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,GAAAS,IAAA,OACA0+B,EAAAylC,IAAAsF,YAAAlqE,MAAAS,EAAAsgE,GAAAhwC,EAAAoO,EAAAylC,IAAAsF,YAAA,CAAAzpE,EAAA,EAAAT,EAAA4yD,EAAAnyD,KAAA,OAAAJ,EAAA,EAAAL,IAAA,GAAAS,EAAAmmD,OAAA,sBAAAnmD,EAAAmmD,OAAA,OAAAznB,EAAAylC,IAAAsF,UAAA,KAAAvW,EAAAyc,GAAAjxC,EAAApO,GAAA,IAAAujC,EAAA,EAAAt0D,EAAA+wB,EAAAvf,KAAAzQ,OAAA,QAAAmzD,EAAAwc,GAAAvxC,EAAAw0B,EAAAW,GAAA4E,IAAA5E,EAAAoM,IAAA,SAAA7tC,GAAA,OAAA69C,GAAAvxC,EAAAw0B,EAAA9gC,GAAAqmC,KAAAhF,CAAA,KAAAl0D,IAAA,GAAAS,EAAAmmD,OAAAnmD,EAAAgE,KAAAhE,EAAAmzD,GAAA,EAAAU,GAAA,UAAAj0D,IAAAi0D,EAAA60B,GAAAp4D,EAAAujC,EAAA,SAAAA,EAAA,EAAAt0D,EAAAS,EAAAmzD,GAAAnzD,EAAAgE,KAAA,WAAAvE,EAAAI,EAAAg0D,EAAAj0D,EAAA,YAAAH,EAAAI,EAAA,EAAAN,EAAA+wB,EAAAvf,KAAAzQ,OAAA,IAAAf,EAAA,2BAAAspF,GAAA7oF,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAA+gE,GAAA5hC,EAAA1+B,EAAAmkE,IAAAsF,WAAA,IAAAlqE,EAAA,OAAAopF,GAAAjqD,EAAApO,EAAAzwB,GAAAywB,EAAAmC,IAAAiM,EAAA3tB,KAAAzQ,QACAgwB,EAAAmC,GAAAiM,EAAA3tB,KAAAzQ,OAAAgwB,EAAAozC,OAAA,aAAApzC,EAAAmC,KAAAnC,EAAAmC,GAAA,EAAAnC,EAAAozC,OAAA,aAAA9jE,EAAAwgE,GAAA7gE,EAAA+wB,EAAAmC,GAAAnC,EAAAozC,QAAAxQ,EAAA3zD,EAAAK,GAAA,UAAAI,EAAAmkE,IAAAsF,WAAA,GAAAvW,EAAA/M,MAAA,MAAAtmD,EAAAqzD,EAAAC,GAAA7iC,EAAAmC,GAAAygC,EAAAlvD,KAAAssB,EAAAmC,IAAA,OAAAk2D,GAAAjqD,EAAApO,EAAAzwB,GAAA,IAAAg0D,EAAA,SAAAD,EAAAt0D,GAAA,OAAAopF,GAAAhqD,EAAAk1B,aAAAn0D,EAAAm0D,EAAAnhC,GAAAmhC,EAAAt0D,EAAA,EAAAm0D,EAAArhC,EAAA,SAAAwhC,GAAA,IAAA5zD,EAAAuI,QAAA2nE,aAAA,OAAA8C,MAAA,EAAAxlE,IAAAkxB,EAAA3tB,KAAAzQ,QAAAmzD,KAAAkc,GAAA3vE,EAAA0+B,GAAA,OAAAu0C,GAAAjzE,EAAA0+B,EAAA+0B,EAAAG,EAAA,EAAA9Y,EAAA1oB,EAAA,UAAA9B,EAAAozC,OAAA7P,EAAAvjC,GAAA,GAAAA,EAAAmC,IAAA,UAAAzyB,EAAAmkE,IAAAsF,WAAA,GAAAvW,EAAA/M,MAAA,KAAA3mD,EAAA,GAAA0zD,EAAA/M,OAAA,EAAAtmD,EAAAM,EAAA0zD,EAAAvjC,EAAA9wB,EAAA,eAAAW,IAAAX,EAAAW,GAAA+yD,EAAAC,IAAAhzD,GAAA26C,EAAAttC,IACArN,GAAA+yD,EAAAlvD,MAAA7D,GAAA26C,EAAAk4B,OAAA,WAAAvzE,EAAA6wB,EAAA/hB,KAAApO,EAAAX,EAAA,kBAAA0zD,EAAA,SAAAU,EAAAt0D,EAAAS,GAAA,QAAAw0D,EAAA,SAAA3B,EAAAkX,GAAA,OAAAA,EAAA,IAAArqE,EAAA6wB,EAAA/hB,KAAAslD,EAAAjB,EAAA,iBAAAnzD,EAAA6wB,EAAA/hB,KAAAqkD,EAAA,aAAAgB,KAAAr0D,EAAAe,OAAAszD,GAAAt0D,EAAA,KAAAsqE,EAAArqE,EAAAq0D,GAAAj1B,EAAA,EAAAr/B,IAAA,GAAAsqE,EAAAzjB,OAAA0jB,EAAAlrC,EAAA5+B,EAAAizE,MAAAnf,EAAA9zD,EAAAyN,KAAA,MAAAo8D,EAAA5lE,MAAA6lE,KAAAD,EAAAzW,GAAA,OAAAoB,EAAAsV,EAAAlrC,GAAAkrC,EAAAlrC,EAAAirC,EAAA5lE,KAAA6vD,EAAA+V,EAAAzW,IAAA,MAAApzD,EAAAizE,OAAAnJ,KAAA9pE,EAAAyN,IAAA,OAAA+mD,EAAAsV,EAAAlrC,EAAA,MAAA/+B,EAAAszD,EAAAtzD,EAAAC,IAAAi7C,GAAA,OAAAl7C,EAAAk7C,EAAA,EAAAj7C,EAAAi7C,EAAAttC,IAAAqmD,EAAA/Y,EAAAk4B,OAAA,gBAAAl4B,GAAA,EAAAj7C,GAAAi7C,GAAApc,EAAA3tB,KAAAzQ,UAAAV,EAAAszD,EAAA,EAAArzD,EAAA,EAAAN,EAAAe,OAAA,EAAAT,EAAAuyB,EAAA0oB,KAAA,KAAAl7C,CAAA,UAAAkpF,GAAA9oF,EAAA0+B,GAAA,IAAApO,EAAAkkC,EAAAx0D,EAAAmkE,IACAzlC,GAAA7+B,EAAAioE,GAAAx3C,GAAAzwB,GAAAywB,IAAAoO,EAAA88B,EAAA37D,IAAA,OAAA+oF,IAAA,EAAA5oF,EAAAH,EAAA6+B,EAAA,YAAAqqD,GAAA/oF,EAAA0+B,GAAA,IAAApO,EAAAw4D,GAAA9oF,EAAA0+B,EAAAnwB,MAAA1O,EAAA20D,EAAAx0D,EAAAmkE,IAAA7zC,EAAA/hB,MAAAvO,EAAAsgE,GAAAzgE,EAAAG,EAAAmkE,IAAAsF,WAAA,OAAAzpE,GAAA,GAAAA,EAAA,GAAAmmD,MAAA71B,GAAAzwB,EAAAg/B,KAAA/K,IAAAxD,EAAAmC,GAAA5yB,EAAAkR,KAAA29C,OAAA,OAAAjvD,EAAA6wB,EAAA/hB,KAAAmwB,EAAAnwB,MAAA+hB,EAAA/hB,MAAAmwB,EAAAjM,IAAA5yB,GAAA6+B,EAAAjM,GAAA,EAAA5yB,EAAAywB,EAAAozC,QAAA,UAAAslB,GAAAhpF,EAAA0+B,EAAApO,GAAA,oBAAAoO,MAAAuqD,GAAAvqD,OAAA,SAAA1+B,EAAAu5D,QAAA30D,MAAAskF,eAAA,IAAArpF,EAAAG,EAAAu5D,QAAA6E,MAAA7+D,GAAA,MAAAS,EAAAymF,eAAAzmF,EAAA6yB,MAAAkxD,eAAA,GAAAzzD,IAAAtwB,EAAAu5D,QAAA6E,OAAA,GAAA7+D,EAAAm/B,EAAA1+B,IAAAmpF,EAAA,SAAAnpF,EAAAu5D,QAAA6E,MAAAv+D,EAAAG,EAAA6yB,MAAAkxD,eAAA,SAAAxkF,CAAA,CACA,SAAA6pF,GAAAppF,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAS,EAAA6yB,MAAAw2D,OAAA,GAAA9pF,EAAA,IAAAuoF,GAAAppD,GAAA,qBAAA94B,KAAA84B,GAAA1+B,EAAA6yB,MAAAw2D,OAAA,KAAAC,GAAApiF,IAAA,eAAAlH,EAAA6yB,MAAAw2D,QAAA9pF,IAAAS,EAAA6yB,MAAAw2D,OAAA,KAAArpF,EAAAu5D,QAAA30D,MAAAktB,QAAA,OAAAy3D,GAAAvpF,EAAAT,EAAA,IAAAm/B,EAAApO,EAAAzwB,GAAA,gBAAA0pF,GAAAvpF,EAAA0+B,EAAApO,EAAAzwB,EAAA,UAAA0pF,GAAAvpF,EAAA0+B,EAAApO,EAAAzwB,GAAAG,EAAA,SAAAT,EAAA,EAAAA,EAAAS,EAAA6yB,MAAA22D,QAAAlpF,OAAAf,IAAA,KAAAK,EAAA+nF,GAAAjpD,EAAA1+B,EAAA6yB,MAAA22D,QAAAjqF,GAAAM,EAAAG,GAAA,GAAAJ,EAAA,CAAAC,EAAAD,EAAA,MAAAI,CAAA,EAAAH,EAAAG,EAAAuI,QAAA2uD,WAAAywB,GAAAjpD,EAAA1+B,EAAAuI,QAAA2uD,UAAAr3D,EAAAG,IAAA2nF,GAAAjpD,EAAA1+B,EAAAuI,QAAAuxD,OAAAj6D,EAAAG,EAAA,UAAAH,IAAAG,EAAA6yB,MAAAw2D,OAAA3qD,GAAA,WAAA7+B,GAAA8rE,GAAA3rE,EAAA,aACAA,EAAA0+B,EAAApO,GAAA,cAAAzwB,GAAA,SAAAA,EAAA4hE,GAAAnxC,GAAAolD,GAAA11E,GAAA,QAAAH,CAAA,UAAA4pF,GAAAzpF,EAAA0+B,GAAA,IAAApO,EAAAg4D,GAAA5pD,GAAA,UAAApO,EAAAoO,EAAA2pD,WAAAroF,EAAA6yB,MAAAw2D,OAAAD,GAAAppF,EAAA,SAAAswB,EAAAoO,GAAA,SAAA7+B,GAAA,OAAAmpF,GAAAhpF,EAAAH,GAAA,OAAAupF,GAAAppF,EAAAswB,EAAAoO,GAAA,SAAA7+B,GAAA,oBAAAA,EAAA,WAAA+F,KAAA/F,KAAA6pF,OAAA,OAAAV,GAAAhpF,EAAAH,EAAA,IAAAupF,GAAAppF,EAAAswB,EAAAoO,GAAA,SAAA7+B,GAAA,OAAAmpF,GAAAhpF,EAAAH,EAAA,gBAAA8pF,GAAA3pF,EAAA0+B,EAAApO,GAAA,OAAA84D,GAAAppF,EAAA,IAAAswB,EAAA,IAAAoO,GAAA,SAAA7+B,GAAA,OAAAmpF,GAAAhpF,EAAAH,GAAA,eAAA+pF,GAAA5pF,GAAA,IAAAA,EAAAkC,QAAAlC,EAAAkC,QAAAiE,KAAAozD,QAAA30D,MAAAilF,WAAA,GAAA1jF,KAAAk7D,MAAA3G,MAAAt4B,GAAA28B,GAAA54D,QAAA46D,EAAA56D,KAAAnG,GAAA,CAAAqyD,GAAA,GACAmY,GAAA,IAAAxqE,EAAAgoF,UAAAhoF,EAAA0hE,aAAA,OAAAhjC,EAAA1+B,EAAAgoF,QAAA7hF,KAAAozD,QAAA6E,MAAA,IAAA1/B,GAAA1+B,EAAAqoF,SAAA,IAAA/3D,EAAAm5D,GAAAtjF,KAAAnG,GAAAm/E,KAAA2K,GAAAx5D,EAAAoO,EAAA,MAAApO,GAAA,IAAAoO,IAAAqrD,KAAA7nB,GAAAliE,EAAAooF,QAAApoF,EAAAmiE,UAAAh8D,KAAA+gF,iBAAA,gBAAAvP,KAAAzV,KAAA5xC,GAAA,IAAAoO,GAAA1+B,EAAAqoF,WAAAroF,EAAAmiE,SAAAnV,SAAAkD,aAAAlD,SAAAkD,YAAA,WAAAxxB,GAAA,2BAAA94B,KAAAO,KAAAozD,QAAAsd,QAAAlf,YAAAqyB,GAAA7jF,KAAA,WAAA6jF,GAAAhqF,GAAA,SAAA0+B,EAAA7+B,GAAA,IAAAA,EAAAmoF,SAAAnoF,EAAAqoF,SAAAvR,GAAArmD,EAAA,wBAAAmwC,GAAAzT,SAAA,QAAAtuB,GAAA+hC,GAAAzT,SAAA,YACAtuB,GAAA,KAAApO,EAAAtwB,EAAAu5D,QAAAsd,QAAAhY,GAAAvuC,EAAA,wBAAAmkC,EAAAzH,SAAA,QAAAtuB,GAAA+1B,EAAAzH,SAAA,YAAAtuB,EAAA,UAAAurD,GAAAjqF,GAAA,IAAAA,EAAAgoF,UAAA7hF,KAAAg+D,IAAAyQ,IAAAxW,OAAA,GAAA2C,EAAA56D,KAAAnG,EAAA,UAAAkqF,GAAAlqF,GAAA,KAAAA,EAAAkC,QAAAlC,EAAAkC,QAAAiE,KAAAozD,QAAA30D,MAAAilF,YAAAvb,GAAAnoE,KAAAozD,QAAAv5D,IAAA+gE,EAAA56D,KAAAnG,MAAAmiE,UAAAniE,EAAAkoF,QAAAhmB,IAAAliE,EAAAooF,SAAA,KAAA1pD,EAAA1+B,EAAAgoF,QAAA13D,EAAAtwB,EAAAmqF,SAAA,GAAAhL,IAAAzgD,GAAAorD,MAAA,KAAAroB,GAAAzhE,QAAA,IAAAm/E,IAAAn/E,EAAAgiE,SAAA,GAAAhiE,EAAAgiE,SAAAynB,GAAAtjF,KAAAnG,GAAA,GAAA0+B,EAAAx5B,OAAAoC,aAAA,MAAAgpB,EAAAoO,EAAApO,GAAA,MAAAoO,IAAAirD,GAAAxjF,KAAAnG,EAAA0+B,GAAAv4B,KAAAozD,QAAA30D,MAAAwlF,WAAApqF,EAAA,EACA,SAAAqqF,GAAArqF,EAAA0+B,GAAA,IAAApO,GAAA,IAAAmY,KAAA,GAAA6hD,OAAA7rD,QAAAnO,EAAAtwB,EAAA0+B,GAAA,OAAA6rD,GAAAD,GAAA,iBAAAC,OAAA9rD,QAAAnO,EAAAtwB,EAAA0+B,GAAA,OAAA4rD,GAAA,IAAAE,GAAAl6D,EAAAtwB,EAAA0+B,GAAA6rD,GAAA,cAAAA,GAAA,IAAAC,GAAAl6D,EAAAtwB,EAAA0+B,GAAA4rD,GAAA,6BAAAG,GAAAzqF,GAAA,IAAA0+B,EAAAv4B,KAAAozD,QAAA,KAAAwH,EAAA56D,KAAAnG,IAAA0+B,EAAAw/C,aAAAx/C,EAAA95B,MAAA8lF,iBAAA,GAAAhsD,EAAA95B,MAAAskF,eAAAxqD,EAAA0/B,MAAAp+D,EAAAqoF,SAAA/Z,GAAA5vC,EAAA1+B,GAAA8oE,KAAApqC,EAAAuwC,SAAA8O,WAAA,EAAAv5B,YAAA,kBAAA9lB,EAAAuwC,SAAA8O,WAAA,mBAAA4M,GAAAxkF,KAAAnG,EAAA,uBAAAswB,EAAAsjD,GAAAztE,KAAAnG,GAAAH,EAAAkiE,GAAA/hE,GAAAT,EAAA+wB,EAAA+5D,GAAA/5D,EAAAzwB,GAAA,SACAk/D,GAAA54D,MAAAoxD,YAAAmD,QAAA,GAAA76D,GAAAsG,KAAA0sB,MAAA+3D,eAAAzkF,KAAA0sB,MAAA+3D,cAAA5qF,GAAA,IAAAswB,IAAAu6D,GAAA1kF,KAAAtG,EAAAywB,EAAA/wB,EAAAS,GAAA,MAAAH,EAAAywB,EAAAw6D,GAAA3kF,KAAAmqB,EAAA/wB,EAAAS,MAAAkC,QAAAlC,EAAAw6D,aAAA97B,EAAAuwC,UAAAxN,GAAAzhE,QAAA,MAAAH,EAAAywB,GAAA4xD,GAAA/7E,KAAAg+D,IAAA7zC,GAAAk0B,YAAA,kBAAA9lB,EAAA95B,MAAA81D,OAAA,kBAAA76D,EAAA,GAAAkrF,GAAA5kF,KAAAozD,QAAA30D,MAAAomF,cAAAhrF,QAAAs2E,GAAAnwE,KAAA,WAAA0kF,GAAA7qF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,IAAAK,EAAA,kBAAAC,EAAAD,EAAA,SAAAA,EAAA,UAAAC,IAAAD,EAAA,SAAAA,GAAA,OAAAwpF,GAAAppF,EAAAioF,IAAA,GAAAvpD,EAAA,UAAAA,EAAA,kBAAA9+B,EAAAL,MAAA,SAAA2zD,GAAA,iBACAA,MAAA+1B,GAAA/1B,IAAA,IAAAA,EAAA,aAAAW,GAAA,MAAA7zD,EAAAymF,eAAAzmF,EAAA6yB,MAAAkxD,eAAA,GAAAlwB,EAAAX,EAAAlzD,EAAAswB,IAAA64D,EAAA,SAAAnpF,EAAA6yB,MAAAkxD,eAAA,SAAAlwB,CAAA,aAAAi3B,GAAA9qF,EAAA0+B,EAAApO,EAAAzwB,GAAAwyD,EAAA7N,WAAAya,GAAAmX,GAAAp2E,GAAA,GAAAA,EAAAqhE,MAAA3G,MAAAt4B,GAAA28B,GAAA/+D,IAAA,IAAAT,EAAAS,EAAAmpE,UAAA,kBAAA5pE,MAAAS,EAAAswB,EAAAzwB,GAAA,SAAAN,EAAA0rF,OAAA1rF,EAAA0rF,MAAAC,GAAArrF,EAAAwoF,UAAAxoF,EAAAuoF,QAAAvoF,EAAAqoF,QAAA,sBAAA53D,EAAA,iBAAAA,EAAA,wBAAA/wB,EAAA0W,QAAAjW,EAAAmkE,IAAAluD,OAAA1W,EAAA0W,OAAAjW,EAAAmkE,IAAAluD,QAAApW,EAAAwoF,SAAA,MAAA9oF,EAAA4rF,SAAA5rF,EAAA4rF,OAAAjpB,GAAAriE,EAAAuoF,QAAAvoF,EAAAsiE,SACA,MAAA5iE,EAAA6rF,aAAA7rF,EAAA6rF,aAAAlpB,GAAAriE,EAAAqoF,OAAAroF,EAAAsiE,UAAA,IAAAviE,EAAAI,EAAAmkE,IAAAyQ,IAAA1hB,EAAAlzD,EAAAuI,QAAA8iF,UAAAC,KAAAtrF,EAAAymF,cAAA,UAAAn2D,IAAA,GAAA4iC,EAAAtzD,EAAA6+D,SAAA//B,MAAA,EAAAo2B,GAAA5B,EAAAtzD,EAAAmQ,OAAAmjD,IAAAlvD,OAAA06B,IAAA,EAAAA,EAAAi0C,QAAA,EAAA7d,EAAA5B,EAAAC,KAAAz0B,IAAA,EAAAA,EAAAi0C,MAAA4Y,GAAAvrF,EAAAH,EAAA6+B,EAAAn/B,GAAAisF,GAAAxrF,EAAAH,EAAA6+B,EAAAn/B,EAAA,UAAAgsF,GAAAvrF,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAS,EAAAu5D,QAAA35D,GAAA,EAAAszD,EAAAmoB,GAAAr7E,GAAA,SAAAoyB,GAAA02C,KAAAvpE,EAAA0vE,SAAA8O,WAAA,GAAA/9E,EAAA6yB,MAAA2jD,cAAA,EAAAx2E,EAAA6yB,MAAA0jD,oBAAAv2E,EAAAk2E,WAAAl2E,EAAA6yB,MAAA0jD,mBAAA,EAAAD,GAAAt2E,IAAAygE,GAAAlhE,EAAAy/D,QAAA1H,cAAA,UAAApE,GAAAuN,GAAAlhE,EAAAy/D,QAAA1H,cACA,YAAAzD,GAAA4M,GAAAlhE,EAAA0vE,SAAA,YAAAxb,GAAAgN,GAAAlhE,EAAA0vE,SAAA,OAAA/b,GAAAtzD,IAAA6hE,GAAArvC,GAAAvyB,EAAAsrF,QAAAjJ,GAAAliF,EAAAmkE,IAAA7zC,EAAA,UAAAzwB,EAAAoW,QAAA6yD,KAAA2iB,IAAAp5B,GAAA,GAAAmY,EAAAhmB,YAAA,WAAAjlD,EAAAy/D,QAAA1H,cAAAt+C,KAAA0hD,MAAA,CAAAgxB,eAAA,IAAAnsF,EAAAqF,MAAA81D,OAAA,OAAAn7D,EAAAqF,MAAA81D,QAAA,IAAA7G,EAAA,SAAAzhC,GAAAxyB,KAAA,IAAAi/B,KAAAwxC,IAAA3xC,EAAAm1C,QAAAzhD,EAAAyhD,SAAAh1C,KAAAwxC,IAAA3xC,EAAAo1C,QAAA1hD,EAAA0hD,QAAA,EAAArgB,EAAA,kBAAA7zD,GAAA,GAAAkpE,KAAAvpE,EAAA0vE,SAAA8O,WAAA,GAAA/9E,EAAA6yB,MAAA2jD,aAAAtjB,IAAArvB,MAAAhkC,EAAAurF,WAAA32B,EAAAl1D,EAAAy/D,QAAA1H,cAAA,UAAApE,GAAAuB,EAAAl1D,EAAAy/D,QAAA1H,cACA,YAAAzD,GAAAY,EAAAl1D,EAAA0vE,SAAA,YAAAxb,GAAAgB,EAAAl1D,EAAA0vE,SAAA,OAAA/b,GAAAlzD,EAAA6yB,MAAA0jD,mBAAA,EAAA/xB,YAAA,kBAAAjlD,EAAAqF,MAAA81D,OAAA,OAAAn7D,EAAA0vE,SAAAoc,UAAA9rF,EAAA0vE,SAAAoc,UAAA,UAAAM,GAAA3rF,EAAA0+B,EAAApO,GAAA,WAAAA,EAAA,WAAA4hC,EAAAxzB,KAAA,WAAApO,EAAA,OAAAtwB,EAAA4rF,WAAAltD,GAAA,WAAApO,EAAA,WAAA4hC,EAAAzyD,EAAAi/B,EAAAnwB,KAAA,GAAAomD,EAAA30D,EAAAmkE,IAAA1kE,EAAAi/B,EAAAnwB,KAAA,OAAAvO,EAAAswB,EAAAtwB,EAAA0+B,GAAA,WAAAwzB,EAAAlyD,EAAAgE,KAAAhE,EAAAmzD,GAAA,UAAAq4B,GAAAxrF,EAAA0+B,EAAApO,EAAAzwB,GAAA,SAAAN,EAAAo/B,GAAA,MAAAm2B,EAAAlB,EAAAj1B,GAAA,GAAAi1B,EAAAj1B,EAAA,aAAA9+B,EAAAorF,KAAA,KAAAphB,EAAA,GAAAjX,EAAA5yD,EAAAuI,QAAAo9D,QAAAmE,EAAA3K,GAAA3K,EAAAf,EAAAnjC,EAAA/hB,MAAAwC,KAAAuf,EAAAmC,GACAmgC,GAAAmX,EAAA5K,GAAA3K,EAAAf,EAAA90B,EAAApwB,MAAAwC,KAAA4tB,EAAAlM,GAAAmgC,GAAAiC,EAAAh2B,KAAAhL,IAAAi2C,EAAAC,GAAAD,EAAAjrC,KAAA/K,IAAAg2C,EAAAC,KAAAlrC,KAAAhL,IAAAvD,EAAA/hB,KAAAowB,EAAApwB,MAAA,QAAAy7D,EAAAnrC,KAAAhL,IAAA7zB,EAAAuzD,WAAA10B,KAAA/K,IAAAxD,EAAA/hB,KAAAowB,EAAApwB,OAAAw7D,GAAAC,EAAAD,IAAA,KAAArV,EAAAF,EAAAf,EAAAsW,GAAAh5D,KAAAgqD,EAAAsE,GAAA3K,EAAAG,EAAAjC,GAAAiC,GAAAiV,EAAAD,EAAAl5D,KAAA,IAAAuhD,EAAAzyD,EAAAsqE,EAAAhP,GAAAt7D,EAAAsqE,EAAAhP,KAAArG,EAAAp0D,OAAAy6D,GAAA8O,EAAAl5D,KAAA,IAAAuhD,EAAAzyD,EAAAsqE,EAAAhP,GAAAt7D,EAAAsqE,EAAA1K,GAAA3K,EAAAoV,EAAAlX,KAAA,CAAAiX,EAAAvpE,QAAAupE,EAAAl5D,KAAA,IAAAuhD,EAAA5hC,MAAA6xD,GAAA1uB,EAAA4rB,GAAAr/E,EAAAoyB,EAAAriB,OAAArK,MAAA,EAAAlG,GAAAwzC,OAAA62B,GAAArqE,GAAA,CAAA6qC,OAAA,SAAA04C,QAAA,IAAA/iF,EAAA47D,eAAAj9B,EAAA,MAAAkrC,EAAA1pE,EAAA00D,EAAA82B,GAAA3rF,EAAA2+B,EAAA9+B,EAAAorF,MAAAtsD,EAAAkrC,EAAAzO,OAAA,EAAAtG,EAAAD,EAAAuG,OAAAz8B,IAAAi0B,EAAAiC,EAAAsG,KAAAx8B,EAAAmlC,GAAA+F,EAAA7lE,OAAA6wD,EAAAuG,UAAAxI,EAAAiC,EAAAuG,OAAAz8B,EAAAklC,GAAAgG,EAAA1W,KACA0B,EAAAsG,OAAA0O,EAAAz3C,EAAAriB,OAAArK,MAAA,GAAAmkE,EAAArqE,GAAAqsF,GAAA7rF,EAAA,IAAAkyD,EAAAyC,EAAAlB,EAAA90B,GAAAi0B,IAAAuvB,GAAA1uB,EAAA4rB,GAAAr/E,EAAA6pE,EAAArqE,GAAAssF,GAAA,UAAAlsF,EAAA++B,GAAA,IAAAkrC,IAAA9pE,EAAA6yD,EAAAghB,GAAA5zE,EAAA2+B,GAAA,eAAA9+B,EAAAorF,MAAA,GAAAr4B,EAAA,MAAAkC,EAAAlC,EAAAgB,GAAA,CAAA5zD,EAAAqhE,MAAA3G,MAAAt4B,GAAA28B,GAAA/+D,IAAAT,EAAAqzD,GAAA,IAAAkX,EAAAiN,GAAAljB,EAAAJ,IAAAb,EAAArkD,MAAAu7D,EAAA3W,IAAAP,EAAArkD,KAAAu7D,EAAA9lE,OAAAwgD,WAAA62B,GAAAr7E,GAAA,WAAAD,GAAA8pE,GAAAjqE,EAAA++B,EAAA,kBAAAorC,EAAAprC,EAAAm1C,QAAAx0E,EAAAm5D,KAAA,GAAA95B,EAAAm1C,QAAAx0E,EAAA84D,OAAA,KAAA2R,GAAAvlB,WAAA62B,GAAAr7E,GAAA,WAAAD,GAAA8pE,IAAAhW,EAAAob,SAAAvW,WAAAqR,EAAAnqE,EAAA++B,GAAA,kBAAAu0B,EAAAv0B,GAAA3+B,EAAA6yB,MAAA+3D,eAAA,EAAA7qF,EAAA67B,SAAA+C,IAAA8iC,GAAA9iC,GAAAk1B,EAAAjvD,MAAA81D,SAAA+F,GAAA5M,EAAAmL,QAAA1H,cACA,YAAA/C,GAAAkM,GAAA5M,EAAAmL,QAAA1H,cAAA,UAAAsS,GAAAnW,EAAAvO,QAAAg8B,cAAA,KAAA7uB,GAAAikB,GAAAt2E,GAAA,IAAA6zD,EAAA7zD,EAAAu5D,QAAA9F,EAAAzzD,EAAAmkE,IAAA1C,GAAA/iC,GAAA,IAAAtM,EAAAqhC,EAAAmhB,IAAA95B,EAAA1oB,EAAAriB,OAAA,GAAAlQ,EAAAsrF,SAAAtrF,EAAAoW,OAAA,KAAAzW,EAAAi0D,EAAAmhB,IAAAnW,SAAAnuC,GAAA,IAAAnwB,GAAA,EAAAX,EAAAs7C,EAAAt7C,GAAA,IAAA0yD,EAAA5hC,IAAA,MAAAnwB,EAAAszD,EAAAmhB,IAAAwN,UAAA5iF,EAAAi0D,EAAAmhB,IAAAC,UAAA,aAAAh1E,EAAAorF,MAAAprF,EAAAsrF,SAAAhrF,EAAA,IAAA+xD,EAAA5hC,QAAAsjD,GAAA5zE,EAAA0+B,GAAA,MAAAl/B,GAAA,IAAAk/B,EAAAitD,GAAA3rF,EAAAswB,EAAAzwB,EAAAorF,MAAA9qF,EAAAN,EAAAoW,OAAAgsE,GAAA9hF,EAAAu+B,EAAA08B,OAAA18B,EAAAy8B,KAAAt7D,EAAAoW,QAAAyoB,GAAA7+B,EAAAsrF,QAAA,GAAA3rF,KAAAs7C,EAAAx6C,OAAA6hF,GAAA1uB,EAAA4rB,GAAAr/E,EAAA86C,EAAA9H,OAAA,CAAA7yC,IAAAX,GAAA,CAAAujF,QAAA,EAAA14C,OAAA,cAAAyQ,EAAAx6C,QAAAw6C,EAAAt7C,GAAAgtB,SACA,QAAA3sB,EAAAorF,OAAAprF,EAAAoW,QAAAksE,GAAA1uB,EAAA4rB,GAAAr/E,EAAA86C,EAAAp1C,MAAA,EAAAlG,GAAAwzC,OAAA8H,EAAAp1C,MAAAlG,EAAA,QAAAujF,QAAA,EAAA14C,OAAA,WAAAjY,EAAAqhC,EAAAmhB,KAAA0N,GAAA7uB,EAAAj0D,EAAAW,EAAA2rF,KAAAtsF,EAAA,EAAA2iF,GAAA1uB,EAAA,IAAA8rB,GAAA,CAAAp/E,GAAA,GAAA2rF,IAAA15D,EAAAqhC,EAAAmhB,KAAA,IAAAhhB,EAAAtjC,EAAAhxB,EAAAu0D,EAAAmL,QAAAzG,wBAAAx4D,EAAA,EAAAw0D,EAAA8mB,GAAAr7E,GAAA,SAAA2+B,GAAA,IAAAA,EAAAotD,SAAAhqB,GAAApjC,GAAA/+B,EAAA++B,GAAAu0B,EAAAv0B,EAAA,IAAAirC,EAAAyR,GAAAr7E,EAAAkzD,GAAAlzD,EAAA6yB,MAAA+3D,cAAAhhB,EAAAnV,EAAAZ,EAAAmL,QAAA1H,cAAA,YAAA/C,GAAAE,EAAAZ,EAAAmL,QAAA1H,cAAA,UAAAsS,EAAA,UAAAiiB,GAAA7rF,EAAA0+B,GAAA,IAAApO,EAAAoO,EAAA08B,OAAAv7D,EAAA6+B,EAAAy8B,KAAA57D,EAAAi1D,EAAAx0D,EAAAmkE,IAAA7zC,EAAA/hB,MAAA,MAAAumD,EAAAxkC,EAAAzwB,IAAAywB,EAAAozC,QAAA7jE,EAAA6jE,OAAA,OAAAhlC,EAAAn/B,EAAA+gE,GAAA/gE,GAAA,IAAAA,EAAA,OAAAm/B,EAAA,IAAA9+B,EACAwgE,GAAA7gE,EAAA+wB,EAAAmC,GAAAnC,EAAAozC,QAAAxQ,EAAA3zD,EAAAK,GAAA,GAAAszD,EAAAlvD,MAAAssB,EAAAmC,IAAAygC,EAAAC,IAAA7iC,EAAAmC,GAAA,OAAAiM,EAAA,IAAAm1B,EAAAj0D,GAAAszD,EAAAlvD,MAAAssB,EAAAmC,KAAA,GAAAygC,EAAA/M,OAAA,WAAA0N,MAAAt0D,EAAAe,OAAA,OAAAo+B,EAAA7+B,EAAA0O,MAAA+hB,EAAA/hB,KAAAvO,EAAA,GAAAH,EAAA0O,KAAA+hB,EAAA/hB,OAAA,OAAAvO,EAAAmkE,IAAAsF,UAAA,OAAAzpE,EAAAogE,GAAA7gE,EAAAM,EAAA4yB,GAAA5yB,EAAA6jE,QAAA9jE,EAAAI,EAAAJ,IAAAC,EAAA4yB,GAAAnC,EAAAmC,KAAA,GAAAygC,EAAA/M,OAAA,KAAAnmD,KAAA6zD,EAAA,GAAA7zD,GAAA6zD,EAAA,EAAAj0D,EAAA,EAAAA,GAAAL,IAAAs0D,GAAA7zD,GAAA,MAAAT,GAAAs0D,EAAA7zD,IAAA,GAAAT,EAAA4mD,QAAA5mD,EAAAyE,KAAAzE,EAAA4zD,GAAAU,IAAA,wBAAAvjC,EAAAmC,IAAAlzB,GAAA+wB,EAAAozC,QAAA7P,EAAAn1B,EAAA,IAAAwzB,EAAA,IAAAzyD,EAAA6wB,EAAA/hB,KAAAhP,EAAAs0D,GAAAh0D,EAAA,UAAA8qF,GAAA3qF,EAAA0+B,EAAApO,EAAAzwB,GAAA,GAAA6+B,EAAAstD,QAAA,KAAAzsF,EAAAm/B,EAAAstD,QAAA,GAAAnY,QAAA,IAAAj0E,EAAA8+B,EAAAstD,QAAA,GAAAlY,OAAA,UAAAv0E,EACAm/B,EAAAm1C,QAAAj0E,EAAA8+B,EAAAo1C,OAAA,OAAArgB,GAAA,YAAAl0D,GAAAs/B,KAAAsW,MAAAn1C,EAAAu5D,QAAA6U,QAAA7V,wBAAA95C,OAAA,SAAA5e,GAAA4hE,GAAA/iC,GAAA7+B,EAAAG,EAAAu5D,QAAA,IAAArG,EAAArzD,EAAAg3E,QAAAte,wBAAA,GAAA34D,EAAAszD,EAAAkF,SAAAmJ,GAAAvhE,EAAAswB,GAAA,OAAA4wC,GAAAxiC,GAAA9+B,GAAAszD,EAAAuF,IAAA54D,EAAAwyE,WAAA,IAAAnf,EAAA,EAAAA,EAAAlzD,EAAAu5D,QAAAgU,YAAAjtE,SAAA4yD,EAAA,KAAAW,EAAAh0D,EAAAuuE,QAAAtT,WAAA5H,GAAA,GAAAW,KAAA0E,wBAAA95C,OAAAlf,EAAA,OAAAA,EAAA64C,GAAAp4C,EAAAmkE,IAAAvkE,GAAAihE,EAAA7gE,EAAAswB,EAAAtwB,EAAAT,EAAAS,EAAAu5D,QAAAgU,YAAAra,GAAAyE,UAAAj5B,GAAAwiC,GAAAxiC,EAAA,WAAAutD,GAAAjsF,EAAA0+B,GAAA,IAAApO,KAAAg+C,GAAAtuE,EAAAu5D,QAAA76B,MAAApO,EAAAixC,GAAAvhE,EAAA,qBAAA2qF,GAAA3qF,EACA0+B,EAAA,gCAAApO,IAAAywC,EAAA/gE,EAAA0+B,EAAA,iBAAAqsD,GAAA/qF,EAAAu5D,QAAA30D,MAAAomF,cAAAtsD,EAAA,UAAAwtD,GAAAlsF,KAAAu5D,QAAAyF,QAAArH,UAAA33D,EAAAu5D,QAAAyF,QAAArH,UAAAxpD,QAAA,mBAAAnO,EAAAuI,QAAAqvD,MAAAzpD,QAAA,uBAAAsjE,GAAAzxE,EAAA,UAAAmsF,GAAAnsF,EAAA0+B,EAAApO,IAAAoO,KAAApO,MAAA87D,MAAA97D,EAAAtwB,EAAAu5D,QAAA8yB,cAAA3tD,IAAA+1B,EAAAgM,GAAA/hC,EAAA1+B,EAAAu5D,QAAA0V,SAAA,YAAA3+C,EAAA1hB,OAAA8vB,EAAA1+B,EAAAu5D,QAAA0V,SAAA,YAAA3+C,EAAAg8D,OAAA5tD,EAAA1+B,EAAAu5D,QAAA0V,SAAA,WAAA3+C,EAAAi8D,MAAA7tD,EAAA1+B,EAAAu5D,QAAA0V,SAAA,YAAA3+C,EAAAk8D,OAAA9tD,EAAA1+B,EAAAu5D,QAAA0V,SACA,OAAA3+C,EAAAm8D,MAAA,UAAAC,GAAA1sF,KAAAuI,QAAA2nE,cAAArR,GAAA7+D,EAAAu5D,QAAAyF,QAAA,mBAAAh/D,EAAAu5D,QAAAiV,MAAA1mC,MAAA4yC,SAAA,GAAA16E,EAAAu5D,QAAAkc,WAAA,OAAAkB,GAAA32E,EAAAu5D,QAAAyF,QAAA,mBAAAsJ,GAAAtoE,IAAA2zE,GAAA3zE,GAAA+zE,GAAA/zE,GAAAyxE,GAAAzxE,GAAAwkD,YAAA,kBAAAi0B,GAAAz4E,EAAA,iBAAA2sF,EAAA3sF,EAAA0+B,GAAA,IAAApO,EAAAnqB,KAAA,KAAAA,gBAAAwmF,GAAA,WAAAA,EAAA3sF,EAAA0+B,GAAAv4B,KAAAoC,QAAAm2B,IAAAwgC,GAAAxgC,GAAA,GAAAwgC,GAAA0tB,GAAAluD,GAAA,OAAA7+B,EAAA6+B,EAAAz7B,MAAA,iBAAApD,IAAA,IAAAgtF,GAAAhtF,EAAA6+B,EAAAs2B,KAAA,KAAAt2B,EAAAkoD,cAAAloD,EAAA+qC,WAAA/qC,EAAAs2B,OAAAn1D,EAAAigF,WAAAphD,EAAAs2B,MAAA7uD,KAAAg+D,IAAAtkE,EAAA,IAAAN,EACA,IAAAotF,EAAAG,YAAApuD,EAAAquD,YAAA5mF,MAAAnG,EAAAmG,KAAAozD,QAAA,IAAAokB,GAAA39E,EAAAH,EAAAN,EAAAm/B,GAAA1+B,EAAAg/D,QAAA/M,WAAA9rD,KAAA+lF,GAAA/lF,MAAAu4B,EAAAwxC,eAAA/pE,KAAAozD,QAAAyF,QAAArH,WAAA,oBAAAshB,GAAA9yE,WAAA0sB,MAAA,CAAA22D,QAAA,GAAAnlB,SAAA,GAAAJ,QAAA,EAAA+oB,WAAA,EAAAzW,mBAAA,EAAAZ,SAAA,EAAAoO,eAAA,EAAAkJ,eAAA,EAAAC,aAAA,EAAAtC,eAAA,EAAApU,cAAA,EAAAgF,UAAA,IAAA2R,GAAA9D,OAAA,KAAAxe,aAAA,MAAAnsC,EAAA0uD,YAAAtP,IAAA99E,EAAA4E,MAAA81D,QAAArI,GAAA,GAAAmY,GAAAhmB,YAAA,kBAAAl0B,EAAAipC,QAAA30D,MAAAktB,OAAA,KACA,IAAAu7D,GAAAlnF,MAAAmnF,KAAAhG,KAAAgG,IAAA,GAAAjU,GAAAlzE,WAAAk7D,MAAAwO,aAAA,EAAA4Q,GAAAt6E,KAAAtG,GAAA6+B,EAAA0uD,YAAAtP,IAAA33E,KAAA+vE,WAAA1xB,YAAA,WAAAl0B,EAAA4lD,aAAA5lD,EAAAuC,MAAA8iD,SAAAU,GAAA/lD,EAAA,OAAA6lD,GAAAhwE,MAAA,QAAAvG,KAAA2tF,GAAA,GAAAA,GAAAz/E,eAAAlO,GAAA2tF,GAAA3tF,GAAAuG,KAAAu4B,EAAA9+B,GAAAwsF,IAAApQ,GAAA71E,MAAAu4B,EAAA8uD,YAAA9uD,EAAA8uD,WAAArnF,MAAA,IAAAtG,EAAA,EAAAA,EAAA4tF,GAAAntF,SAAAT,EAAA4tF,GAAA5tF,GAAAsG,MAAA2zE,GAAA3zE,MAAA2iE,IAAApqC,EAAAwxC,cAAA,sBAAA7X,iBAAAr4D,EAAA62E,SAAA6W,gBAAA1tF,EAAA62E,QAAA/uC,MAAA4lD,cAAA,iBAAAL,GAAArtF,GAAA,SAAA0+B,IAAA7+B,EAAAq+E,cAAA3+E,EACAilD,YAAA,kBAAA3kD,EAAAq+E,YAAA,YAAAt+E,EAAAC,EAAAq+E,YAAAt+E,EAAA4N,KAAA,IAAAi7B,KAAA,UAAAnY,EAAAujC,EAAAJ,GAAA,SAAAA,EAAAj1C,KAAA,aAAA4T,EAAAqhC,EAAAj1C,KAAAq1C,EAAAr1C,KAAAq1C,EAAAJ,EAAAgF,IAAA5E,EAAA4E,IAAA,WAAArmC,IAAAyhC,GAAA,KAAAh0D,EAAAG,EAAAu5D,QAAA9E,EAAA50D,EAAAovE,SAAA,YAAAoM,GAAAr7E,EAAAyqF,KAAAp4B,GAAA,GAAAmY,EAAA/V,EAAA50D,EAAAovE,SAAA,WAAAoM,GAAAr7E,GAAA,SAAA6zD,GAAA,IAAAkN,EAAA/gE,EAAA6zD,GAAA,KAAAJ,EAAAmgB,GAAA5zE,EAAA6zD,IAAAJ,GAAAk3B,GAAA3qF,EAAA6zD,EAAA,mBAAAya,GAAAtuE,EAAAu5D,QAAA1F,KAAA4N,GAAA5N,KAAA7zD,EAAA4rF,WAAAn4B,GAAAyuB,GAAAliF,EAAAmkE,IAAAtQ,EAAAuH,OAAAvH,EAAAsH,MAAA,MAAA1G,EAAA50D,EAAAovE,SAAA,qBAAApb,GAAA,OAAAkN,EAAA/gE,EAAA6zD,IAAA4N,GAAA5N,EAAA,IAAAY,EAAA50D,EAAAovE,SAAA,wBAAApb,GAAA,OAAAo4B,GAAAjsF,EACA6zD,EAAA,IAAAY,EAAA50D,EAAA+E,MAAAilF,WAAA,wBAAAh2B,GAAAh0D,EAAAovE,SAAAxQ,SAAA5K,EAAA3xD,SAAA+pF,GAAAjsF,EAAA6zD,EAAA,QAAAt0D,EAAAK,EAAA,CAAA4N,IAAA,GAAAinD,EAAA50D,EAAAovE,SAAA,uBAAApb,GAAA,IAAAJ,EAAA,GAAAA,GAAAsN,EAAA/gE,EAAA6zD,GAAA,GAAAA,EAAAm4B,QAAA1rF,OAAAmzD,GAAA,GAAAA,EAAAI,EAAAm4B,QAAA,GAAAv4B,EAAA,GAAAA,EAAAk6B,SAAA,GAAAl6B,EAAAm6B,SAAAn6B,SAAAk3B,GAAA3qF,EAAA6zD,EAAA,oBAAAh0D,EAAA+E,MAAAskF,eAAA9uB,aAAA76D,GAAAk0D,GAAA,IAAAhrB,KAAA5oC,EAAAq+E,YAAA,CAAAtvE,MAAA6kD,EAAAo6B,OAAA,EAAAvkD,KAAA,KAAAmqB,EAAA7zD,EAAA4N,IAAA5N,EAAA,SAAAi0D,EAAAm4B,QAAA1rF,SAAAT,EAAAq+E,YAAA1/D,KAAAq1C,EAAAm4B,QAAA,GAAA8B,MAAAjuF,EAAAq+E,YAAAzlB,IAAA5E,EAAAm4B,QAAA,GAAA+B,OAAA,IAAAt5B,EAAA50D,EAAAovE,SAAA,aACA,WAAApvE,EAAAq+E,cAAAr+E,EAAAq+E,YAAA2P,OAAA,MAAAp5B,EAAA50D,EAAAovE,SAAA,qBAAApb,GAAA,IAAAJ,EAAA5zD,EAAAq+E,YAAA,GAAAzqB,IAAA6a,GAAAzuE,EAAAg0D,IAAA,MAAAJ,EAAAj1C,OAAAi1C,EAAAo6B,OAAA,QAAAplD,KAAAgrB,EAAA7kD,MAAA,KAAAwjB,EAAApyB,EAAAguF,WAAAnuF,EAAAq+E,YAAA,QAAAzqB,KAAAnqB,MAAAhZ,EAAAmjC,IAAAnqB,MAAA,IAAA4oB,EAAA9/B,MAAAqhC,EAAAnqB,WAAAhZ,EAAAmjC,IAAAnqB,WAAAtpC,EAAA4rF,WAAAx5D,GAAA,IAAA8/B,EAAAzyD,EAAA2yB,EAAA7jB,KAAA,GAAAomD,EAAA30D,EAAAmkE,IAAA1kE,EAAA2yB,EAAA7jB,KAAA,OAAAvO,EAAAs0D,aAAAb,EAAA2H,OAAA3H,EAAA0H,MAAAn7D,EAAA06D,QAAA+G,GAAA5N,EAAA,CAAAn1B,GAAA,IAAA+1B,EAAA50D,EAAAovE,SAAA,cAAAvwC,GAAA+1B,EAAA50D,EAAAovE,SAAA,qBAAApvE,EAAAovE,SAAA7V,eAAAse,GAAA13E,EAAAH,EAAAovE,SAAAvW,WACAp2B,GAAAtiC,EAAAH,EAAAovE,SAAAzW,YAAA,GAAAqI,EAAA7gE,EAAA,SAAAA,GAAA,IAAAy0D,EAAA50D,EAAAovE,SAAA,uBAAApb,GAAA,OAAAgrB,GAAA7+E,EAAA6zD,EAAA,IAAAY,EAAA50D,EAAAovE,SAAA,2BAAApb,GAAA,OAAAgrB,GAAA7+E,EAAA6zD,EAAA,IAAAY,EAAA50D,EAAAm/D,QAAA,4BAAAn/D,EAAAm/D,QAAAtG,UAAA74D,EAAAm/D,QAAAxG,WAAA,KAAA34D,EAAAwsF,cAAA,CAAAC,MAAA,SAAAz4B,GAAAkN,EAAA/gE,EAAA6zD,IAAAiO,GAAAjO,EAAA,EAAA04B,KAAA,SAAA14B,GAAA,IAAAkN,EAAA/gE,EAAA6zD,GAAA,KAAAJ,EAAAmgB,GAAA5zE,EAAA6zD,GAAA,GAAAJ,EAAA,KAAArhC,EAAA46B,SAAA8d,yBAAAgK,GAAA90E,EAAAyzD,EAAArhC,GAAApyB,EAAAu5D,QAAA4tB,aAAAnnF,EAAAu5D,QAAA4tB,WAAAr0D,EAAA,wDAAA9yB,EAAAu5D,QAAAoV,UAAAjC,aAAA1sE,EAAAu5D,QAAA4tB,WACAnnF,EAAAu5D,QAAAuc,YAAAlhB,EAAA50D,EAAAu5D,QAAA4tB,WAAA/0D,EAAA,CAAA0vC,GAAAjO,EAAA,GAAAjlD,MAAA,SAAAilD,GAAA,GAAAxB,KAAAryD,EAAA6yB,MAAA2jD,cAAA,SAAA/tC,KAAA69C,IAAAxkB,GAAAjO,QAAA,IAAAkN,EAAA/gE,EAAA6zD,KAAAya,GAAAtuE,EAAAu5D,QAAA1F,OAAA0yB,aAAA0H,QAAA,OAAAjuF,EAAA4vD,gBAAAiE,EAAA0yB,aAAA2H,cAAA,WAAAr6B,EAAA0yB,aAAA4H,eAAA1C,IAAA,KAAAh4B,EAAA3gC,EAAA,qDAAA2gC,EAAAlS,IAAA,6EAAA49B,KAAA1rB,EAAAgG,MAAAhG,EAAA6F,OAAA,EAAAt5D,EAAAu5D,QAAAyF,QAAAtP,YAAA+D,KAAA26B,KAAA36B,EAAA2I,WACAvI,EAAA0yB,aAAA4H,aAAA16B,EAAA,KAAA0rB,IAAA1rB,EAAAniB,WAAA6e,YAAAsD,EAAA,GAAAg5B,KAAApR,GAAAr7E,EAAAomF,IAAAoG,MAAA,SAAA34B,GAAAkN,EAAA/gE,EAAA6zD,IAAAwyB,GAAArmF,EAAA,OAAAkzD,EAAArzD,EAAA+E,MAAAilF,WAAAp1B,EAAAvB,EAAA,kBAAAW,GAAA,OAAAo2B,GAAA5pF,KAAAL,EAAA6zD,EAAA,IAAAY,EAAAvB,EAAA,UAAAmoB,GAAAr7E,EAAA4pF,KAAAn1B,EAAAvB,EAAA,WAAAmoB,GAAAr7E,EAAAkqF,KAAAz1B,EAAAvB,EAAA,kBAAAW,GAAA,OAAAwiB,GAAAr2E,EAAA6zD,EAAA,IAAAY,EAAAvB,EAAA,iBAAAW,GAAA,OAAAsiB,GAAAn2E,EAAA6zD,EAAA,aAAAw6B,GAAAruF,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAS,EAAAmkE,IAAAvkE,EAAA,MAAA0wB,MAAA,gBAAAA,IAAA/wB,EAAAy1D,KAAAnjB,OAAAjyC,EAAAglE,GAAA5kE,EAAA0+B,GAAA7L,MAAAvC,EAAA,YAAA4iC,EAAAlzD,EAAAuI,QAAAo9D,QAAA9R,EAAAW,EAAAj1D,EAAAm/B,GAAA+0B,EAAA0L,GAAAtL,EAAA9iD,KAAA,KAAAmiD,GAAAW,EAAAiR,aAAAjR,EAAAiR,WACA,UAAA1yC,EAAAyhC,EAAA9iD,KAAA+F,MAAA,eAAAjX,IAAA,KAAA+F,KAAAiuD,EAAA9iD,MAAA,KAAA+pC,EAAA,EAAAxqB,EAAA,uBAAAA,IAAAwqB,EAAAv7C,EAAAy1D,KAAAnjB,OAAAjyC,EAAAi0D,EAAA9iD,KAAArL,MAAA0sB,EAAA9xB,QAAAuzD,EAAA9iD,MAAA+pC,GAAAquC,IAAA,IAAAruC,GAAA,KAAAj7C,EAAA,OAAAywB,EAAA,eAAAA,EAAAwqB,EAAApc,EAAAn/B,EAAAukB,MAAAq7C,GAAA3K,EAAAj1D,EAAAm/B,EAAA,GAAA3tB,KAAA,KAAAmiD,GAAA,SAAA5iC,EAAAwqB,EAAA2Y,EAAAzzD,EAAAuI,QAAA+lF,WAAA,YAAAh+D,EAAAwqB,EAAA2Y,EAAAzzD,EAAAuI,QAAA+lF,WAAA,iBAAAh+D,IAAAwqB,EAAA2Y,EAAAnjC,GAAAwqB,EAAAjc,KAAA/K,IAAA,EAAAgnB,GAAAxqB,EAAA,GAAAzwB,EAAA,KAAAG,EAAAuI,QAAAgmF,eAAA,IAAAvuF,EAAA6+B,KAAAsW,MAAA2F,EAAAoY,GAAAlzD,MAAAH,GAAAqzD,EAAA5iC,GAAA,KAAAzwB,EAAAi7C,IAAAxqB,GAAA/R,GAAAu8B,EAAAj7C,IAAA,GAAAywB,GAAA8B,EAAA,OAAAoyD,GAAAjlF,EAAA+wB,EAAA7wB,EAAAi/B,EAAA,GAAAj/B,EAAAi/B,EAAAtM,EAAA9xB,QAAA,UACAuzD,EAAAiR,WAAA,YAAA5R,EAAA,EAAAA,EAAA3zD,EAAAq1E,IAAA7kE,OAAAzP,OAAA4yD,IAAA,GAAAW,EAAAt0D,EAAAq1E,IAAA7kE,OAAAmjD,GAAAW,EAAAsH,KAAA5sD,MAAAmwB,GAAAm1B,EAAAsH,KAAA1oC,GAAAL,EAAA9xB,OAAA,CAAAo+B,EAAAj/B,EAAAi/B,EAAAtM,EAAA9xB,QAAAgiF,GAAA/iF,EAAA2zD,EAAA,IAAAhB,EAAAxzB,MAAA,gBAAA8vD,GAAAxuF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,IAAAK,EAAAI,EAAAmkE,IAAAnkE,EAAAu5D,QAAA6E,OAAA,EAAAv+D,MAAAD,EAAAg1E,KAAA,IAAA1hB,GAAA,IAAAzqB,KAAA,IAAAorB,EAAA,SAAAt0D,GAAAS,EAAA6yB,MAAAo6D,cAAA/5B,EAAAO,EAAAg7B,GAAA/vD,GAAAtM,EAAA,QAAAyhC,GAAA,EAAAh0D,EAAAkQ,OAAAzP,OAAA,GAAAouF,OAAA39E,KAAAqzB,KAAA,OAAA1F,EAAA,OAAA7+B,EAAAkQ,OAAAzP,OAAAouF,GAAA39E,KAAAzQ,OAAA,CAAA8xB,EAAA,WAAA0oB,EAAA,EAAAA,EAAA4zC,GAAA39E,KAAAzQ,OAAAw6C,IAAA1oB,EAAAzhB,KAAA/Q,EAAA6kF,WAAAiK,GAAA39E,KAAA+pC,IAAA,OAAA2Y,EAAAnzD,QAAAT,EAAAkQ,OAAAzP,QAAAN,EAAAuI,QAAAomF,yBACAv8D,EAAAmtC,GAAA9L,GAAA,SAAA1zD,GAAA,OAAAA,EAAA,KAAA+6C,EAAA96C,EAAAqhE,MAAAkY,YAAA,QAAA/5E,EAAAK,EAAAkQ,OAAAzP,OAAA,KAAAd,MAAA,KAAAW,EAAAN,EAAAkQ,OAAAvQ,GAAAo0D,EAAAzzD,EAAA6D,OAAA1E,EAAAa,EAAAgzD,KAAAhzD,EAAAqsB,UAAA8D,GAAA,EAAAA,EAAAsjC,EAAAn0D,EAAAm0D,EAAArlD,KAAAqlD,EAAAnhC,GAAAnC,GAAAtwB,EAAA6yB,MAAAm6D,YAAAn5B,EAAAv0D,EAAAG,EAAAH,EAAAiP,KAAAswB,KAAAhL,IAAA2gC,EAAA50D,EAAAN,EAAAiP,MAAAwC,KAAAzQ,OAAAhB,EAAAmzB,GAAA0/B,EAAAsB,GAAAnzD,SAAAuzD,GAAA66B,OAAAE,UAAAF,GAAA39E,KAAAqzB,KAAA,OAAAqvB,EAAArvB,KAAA,QAAAwvB,EAAAt0D,EAAAG,EAAAm0D,EAAArlD,KAAA,KAAApO,EAAA,CAAA6D,KAAA4vD,EAAAT,GAAA7zD,EAAAyR,KAAAqhB,IAAA5yB,EAAA4yB,EAAA9xB,QAAAmzD,EAAAppB,OAAA9qC,IAAAs0D,EAAA,QAAA7zD,EAAA6yB,MAAAq6D,YAAAh6B,EAAA,iBAAA4wB,GAAA9jF,EAAAmkE,IAAAhkE,GAAAwrE,GAAA3rE,EAAA,YAAAA,EAAAG,EAAA,CAAAu+B,IAAAm1B,GAAAg7B,GAAA7uF,EAAA0+B,GAAA04C,GAAAp3E,GAAA,EAAAA,EAAAqhE,MAAAkY,cACAv5E,EAAAqhE,MAAAkY,YAAAz+B,GAAA96C,EAAAqhE,MAAAmY,QAAA,EAAAx5E,EAAA6yB,MAAAo6D,cAAAjtF,EAAA6yB,MAAAq6D,aAAA,WAAA4B,GAAA9uF,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAA+uF,eAAA/uF,EAAA+uF,cAAA9H,QAAA,WAAA32D,EAAA,OAAAtwB,EAAAghE,iBAAAtiC,EAAA+nD,cAAA/nD,EAAAn2B,QAAAymF,eAAAtwD,EAAAw3C,YAAAkF,GAAA18C,GAAA,kBAAA8vD,GAAA9vD,EAAApO,EAAA,+BAAAu+D,GAAA7uF,EAAA0+B,GAAA,GAAA1+B,EAAAuI,QAAA0mF,eAAAjvF,EAAAuI,QAAA2mF,YAAA,QAAA5+D,EAAAtwB,EAAAmkE,IAAAyQ,IAAA/0E,EAAAywB,EAAAvgB,OAAAzP,OAAA,KAAAT,MAAA,KAAAN,EAAA+wB,EAAAvgB,OAAAlQ,GAAA,SAAAN,EAAA47D,KAAA1oC,IAAA5yB,GAAAywB,EAAAvgB,OAAAlQ,EAAA,GAAAs7D,KAAA5sD,MAAAhP,EAAA47D,KAAA5sD,MAAA,KAAA3O,EAAAI,EAAAyyD,UAAAlzD,EAAA47D,MACAjI,GAAA,KAAAtzD,EAAAqvF,cAAA,QAAAp7B,EAAA,EAAAA,EAAAj0D,EAAAqvF,cAAA3uF,OAAAuzD,IAAA,OAAAn1B,EAAAxgB,QAAAte,EAAAqvF,cAAAh4E,OAAA48C,IAAA,CAAAX,EAAAm7B,GAAAruF,EAAAT,EAAA47D,KAAA5sD,KAAA,qBAAA3O,EAAAuvF,eAAAvvF,EAAAuvF,cAAAvpF,KAAA4uD,EAAAx0D,EAAAmkE,IAAA5kE,EAAA47D,KAAA5sD,MAAAwC,KAAArL,MAAA,EAAAnG,EAAA47D,KAAA1oC,OAAAygC,EAAAm7B,GAAAruF,EAAAT,EAAA47D,KAAA5sD,KAAA,UAAA2kD,GAAAyY,GAAA3rE,EAAA,gBAAAA,EAAAT,EAAA47D,KAAA5sD,KAAA,YAAA6gF,GAAApvF,GAAA,QAAA0+B,EAAA,GAAApO,EAAA,GAAAzwB,EAAA,EAAAA,EAAAG,EAAAmkE,IAAAyQ,IAAA7kE,OAAAzP,OAAAT,IAAA,KAAAN,EAAAS,EAAAmkE,IAAAyQ,IAAA7kE,OAAAlQ,GAAAs7D,KAAA5sD,KAAAhP,EAAA,CAAA67D,OAAA37D,EAAAF,EAAA,GAAA47D,KAAA17D,EAAAF,EAAA,MAAA+wB,EAAA3f,KAAApR,GAAAm/B,EAAA/tB,KAAA3Q,EAAA+0D,SAAAx1D,EAAA67D,OAAA77D,EAAA47D,MAAA,QAAApqD,KAAA2tB,EACA3uB,OAAAugB,EAAA,UAAA++D,GAAArvF,EAAA0+B,EAAApO,EAAAzwB,GAAAG,EAAA03D,aAAA,cAAApnC,EAAA,UAAAtwB,EAAA03D,aAAA,iBAAA73D,EAAA,UAAAG,EAAA03D,aAAA,eAAAh5B,EAAA,UAAA4wD,KAAA,IAAAtvF,EAAA8yB,EAAA,8HAAA4L,EAAA5L,EAAA,OAAA9yB,GAAA,uEAAA8oE,GAAA9oE,EAAA8nC,MAAA2xB,MAAA,SAAAz5D,EAAA03D,aAAA,cAAA63B,KAAAvvF,EAAA8nC,MAAA0nD,OAAA,mBAAAH,GAAArvF,GAAA,OAAA0+B,CAAA,UAAA+wD,GAAAzvF,EACA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,SAAAK,EAAAG,GAAA,gBAAAF,EAAA,KAAA00D,EAAAd,EAAA1iD,KAAArD,WAAAgxB,EAAAjM,IAAA,EAAAnC,EAAA,OAAAikC,EAAAwa,MAAAxa,GAAA,SAAA90D,EAAAi/B,EAAAnwB,KAAAswB,KAAA/K,IAAA,EAAA+K,KAAAhL,IAAA4/B,EAAA1iD,KAAAzQ,OAAAo+B,EAAAjM,GAAAnC,IAAA,EAAAA,EAAA,OAAAikC,GAAA,MAAAA,EAAA,OAAAA,GAAA,MAAAA,GAAA,QAAAjkC,EAAA,MAAAikC,EAAAh1D,EAAAspF,GAAA7oF,EAAA21D,GAAAlC,EAAA/0B,EAAApO,GAAAq4D,GAAAl1B,EAAA/0B,EAAApO,GAAA,SAAAikC,EAAA,IAAAx0D,OAAA2+B,EAAAnwB,KAAA6jB,EAAAryB,EAAAC,EAAA8jB,OAAA/jB,GAAAC,EAAA8jB,MAAA9jB,EAAAo6B,KAAAr6B,GAAA,GAAA2+B,EAAA,IAAAj/B,EAAAM,EAAA2+B,EAAAjM,GAAAiM,EAAAglC,QAAA3jE,EAAA0zD,EAAAe,EAAAx0D,EAAAD,IAAA,GAAAA,EAAA2+B,EAAAkqD,GAAArpF,EAAAS,EAAA21D,GAAAlC,EAAA/0B,EAAAnwB,KAAA6jB,QAAA,cAAAsM,EAAA61B,EAAA,aAAArB,EAAAx0B,EAAAm1B,EAAAvjC,EAAAmjC,EAAAe,EAAAx0D,EAAA0+B,EAAAnwB,MAAA6jB,EAAA7yB,GAAA,OAAAS,EAAAypE,WAAAn5C,IAAA,WAAAzwB,GAAA,aAAAA,EAAAD,SAAA,aACAC,EAAAD,GAAA,mBAAAC,GAAA,SAAAA,EAAA,QAAAi7C,EAAA,KAAAt7C,EAAA,SAAAK,EAAAM,EAAAH,EAAA21D,IAAA31D,EAAA21D,GAAA4G,UAAA79B,EAAA,aAAAk1B,GAAA,MAAAtjC,IAAA1wB,GAAAg0D,MAAA,OAAAt0D,EAAAm0D,EAAA1iD,KAAAkG,OAAAynB,EAAAjM,KAAA,KAAAnzB,EAAAugE,GAAAvgE,EAAAa,GAAA,IAAAX,GAAA,MAAAF,EAAA,KAAAE,GAAA,KAAAoG,KAAAtG,GAAA,UAAAE,GAAAo0D,GAAAt0D,MAAA,QAAAw7C,MAAAx7C,EAAA,GAAAgxB,MAAA,EAAA1wB,IAAA8+B,EAAAglC,OAAA,eAAApkE,IAAAw7C,EAAAx7C,GAAA,KAAAgxB,IAAA1wB,GAAAg0D,GAAA,MAAAC,EAAAovB,GAAAjjF,EAAA0+B,EAAAw0B,EAAAW,GAAA,GAAA8P,GAAAzQ,EAAAW,OAAA67B,SAAA,UAAA77B,CAAA,UAAA87B,GAAA3vF,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAS,EAAAmkE,IAAAvkE,EAAA8+B,EAAAlgB,KAAA,WAAA3e,EAAA,KAAAqzD,EAAAr0B,KAAAhL,IAAA7zB,EAAAu5D,QAAAyF,QAAA5F,aAAA2F,GAAA/+D,GAAAu3D,YAAAuB,aAAAv5D,EAAAS,GAAA64D,gBAAAO,cACAlG,EAAAr0B,KAAA/K,IAAAo/B,EAAA,GAAAmgB,GAAArzE,EAAAu5D,SAAA,GAAArG,GAAA,EAAA5iC,EAAAoO,EAAA05B,OAAA15B,EAAA+5B,KAAAnoC,EAAA4iC,CAAA,aAAArzD,IAAAqzD,EAAA,EAAA5iC,EAAAoO,EAAA05B,OAAA,EAAA15B,EAAA+5B,IAAA,WAAA/5B,EAAAm0C,GAAA7yE,EAAAJ,EAAAszD,GAAA,IAAAx0B,EAAAk0C,QAAA,WAAAtiD,EAAA,GAAA4iC,KAAA3zD,EAAA+5D,OAAA,CAAA56B,EAAAgxD,SAAA,QAAAx8B,GAAA,EAAA5iC,CAAA,QAAAoO,CAAA,UAAAkxD,GAAA5vF,EAAA0+B,GAAA,IAAApO,EAAAi/C,GAAAvvE,EAAA0+B,EAAAnwB,MAAA,IAAA+hB,KAAA66C,OAAA,gBAAAtrE,EAAA20D,EAAAx0D,EAAAmkE,IAAAzlC,EAAAnwB,MAAA+hB,EAAA++C,GAAA/+C,EAAAzwB,EAAA6+B,EAAAnwB,MAAAvO,EAAAsgE,GAAAzgE,EAAAG,EAAAmkE,IAAAsF,WAAA5pE,EAAA,OAAAG,IAAAH,EAAAugE,GAAApgE,EAAA0+B,EAAAjM,IAAA,kBAAAiM,EAAA4xC,GAAAhgD,EAAAwY,IAAApK,EAAAjM,GAAA5yB,GAAA6+B,EAAAhwB,OAAA,SAAAgwB,EAAA6xC,SAAA7xC,EAAAlxB,IAAAkxB,EAAA9vB,MAAA,OAAA8vB,CAAA,UAAAmxD,GAAA7vF,GAAA,KAAAA,MAAAsxC,WAAA,+BAAA1rC,KAAA5F,EAAA23D,WAAA,SACA,kBAAAm4B,GAAA9vF,EAAA0+B,OAAA1+B,EAAA+vF,KAAA,UAAA/vF,CAAA,UAAAgwF,GAAAhwF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,SAAAK,EAAAg0D,GAAA,gBAAAt0D,GAAA,OAAAA,EAAAif,IAAAq1C,CAAA,WAAAV,IAAApY,IAAA1oB,GAAA5yB,EAAAW,IAAAiyB,GAAA5yB,GAAAs7C,EAAA36C,GAAA,YAAA0zD,EAAAD,OAAAV,IAAA9gC,GAAAwhC,EAAA,UAAAH,EAAAG,GAAA,MAAAA,EAAA4K,SAAA,KAAAl/D,EAAAs0D,EAAA2a,aAAA,cAAAjvE,EAAAu0D,EAAAv0D,OAAA,CAAAA,EAAAs0D,EAAA2a,aAAA,iBAAAxuE,EAAA,GAAAT,EAAAs0D,EAAA5zD,EAAAgmF,UAAAvmF,EAAAI,EAAA,GAAAJ,EAAAF,EAAA,KAAAK,GAAAN,IAAAs0D,EAAAtzD,SAAAP,EAAA6zD,EAAA,GAAAnnB,KAAA,KAAAonB,EAAAsP,GAAAnjE,EAAAmkE,IAAApkE,EAAAiE,KAAAjE,EAAAozD,IAAA/uB,KAAA5kC,SAAA,YAAAo0D,EAAA2a,aAAA,qBAAAxuE,EAAA,6BAAA6F,KAAAguD,EAAA7F,UACA,QAAAnoD,KAAAguD,EAAA7F,WAAA,GAAA6F,EAAAtE,YAAAhvD,QAAA,CAAAP,GAAAmzD,IAAA,IAAA5zD,EAAA,EAAAA,EAAAs0D,EAAAkH,WAAAx6D,OAAAhB,IAAAm0D,EAAAG,EAAAkH,WAAAx7D,IAAA,aAAAsG,KAAAguD,EAAA7F,YAAA5tD,GAAA,GAAAJ,IAAA+6C,GAAA,aAAA8Y,EAAA4K,UAAA3K,EAAAD,EAAAq8B,UAAA9hF,QAAA,cAAAA,QAAA,wBAAAikB,EAAA,GAAA0oB,GAAA,EAAAt7C,EAAAQ,EAAAmkE,IAAAyiB,gBAAAzmF,GAAA,KAAAszD,EAAA/0B,GAAA,GAAAA,GAAApO,EAAA,MAAAoO,IAAAi7B,YAAAx5D,GAAA,SAAAiyB,CAAA,UAAA89D,GAAAlwF,EAAA0+B,EAAApO,GAAA,GAAAoO,GAAA1+B,EAAAu5D,QAAAsd,QAAA,KAAAh3E,EAAAG,EAAAu5D,QAAAsd,QAAA/b,WAAAxqC,GAAA,IAAAzwB,EAAA,OAAAiwF,GAAA9vF,EAAAimF,QAAAxmF,EAAAO,EAAAu5D,QAAAiM,OAAA,QAAA9mC,EAAA,KAAApO,EAAA,WAAAzwB,EAAA6+B,GAAA7+B,EACAA,EAAAyxC,WAAA,KAAAzxC,MAAAG,EAAAu5D,QAAAsd,QAAA,eAAAh3E,EAAAyxC,YAAAzxC,EAAAyxC,YAAAtxC,EAAAu5D,QAAAsd,QAAA,cAAAt3E,EAAA,EAAAA,EAAAS,EAAAu5D,QAAAiW,KAAAlvE,OAAAf,IAAA,KAAAK,EAAAI,EAAAu5D,QAAAiW,KAAAjwE,GAAA,GAAAK,EAAAyV,MAAAxV,EAAA,OAAAswF,GAAAvwF,EAAA8+B,EAAApO,EAAA,WAAA6/D,GAAAnwF,EAAA0+B,EAAApO,GAAA,SAAAzwB,EAAAi7C,EAAAt7C,EAAAW,GAAA,QAAAyzD,GAAA,EAAAA,GAAAxhC,IAAA9xB,OAAA,GAAAszD,IAAA,QAAAt0D,EAAA,EAAAs0D,EAAAH,EAAA3qB,IAAA1W,EAAAwhC,GAAA7zD,EAAA,EAAAA,EAAAT,EAAAgB,OAAAP,GAAA,OAAAw0D,EAAAj1D,EAAAS,EAAA,MAAAw0D,GAAAzZ,GAAAyZ,GAAA/0D,EAAA,CAAAA,EAAAg8D,EAAA,EAAA5H,EAAA5zD,EAAAuO,KAAAvO,EAAAwlB,KAAAouC,MAAAt0D,EAAAS,GAAAI,EAAA,KAAAA,GAAAo0D,GAAAzZ,EAAA8Y,EAAAt0D,EAAAS,GAAAI,EAAA,aAAAV,EAAAD,EAAAo0D,EAAA,OAAAr0D,EAAAS,EAAA+Q,KAAA2oD,WAAA95D,GAAA,MAAA8+B,IAAA4/B,GAAA/+D,EAAAm/B,GAAA,OAAAoxD,GAAArwF,EAAA+7D,EAAAx7D,EAAAuO,MAAA,OACA,GAAAmwB,GAAAn/B,IAAAK,GAAA,EAAA8+B,EAAAn/B,EAAAu7D,WAAAxqC,KAAA,GAAAoO,GAAA,OAAApO,EAAAtwB,EAAAwlB,KAAA2sC,EAAAnyD,EAAAwlB,MAAAxlB,EAAAuO,KAAAuhF,GAAArwF,EAAA+7D,EAAAlrC,KAAAvf,KAAAzQ,QAAAV,GAAA,IAAAszD,EAAA,GAAAx0B,EAAA8/B,SAAA9/B,EAAA,KAAAm1B,EAAAn1B,EAAAw0B,GAAA,GAAAx0B,EAAAo8B,WAAAx6D,QAAA,GAAAo+B,EAAAg7B,WAAA8E,WAAAtL,EAAAx0B,EAAAg7B,WAAAppC,MAAA4iC,EAAA+8B,UAAA3vF,SAAA,KAAAuzD,EAAAviB,YAAA/xC,GAAAs0D,IAAAviB,WAAA,IAAAmiB,EAAAzzD,EAAAopE,QAAAh3C,EAAAqhC,EAAAgX,KAAA,GAAA/rC,EAAA7+B,EAAAqzD,EAAAW,EAAAvjC,GAAA,OAAAw/D,GAAApxD,EAAA9+B,GAAAL,EAAAs0D,EAAA8F,YAAA,IAAAzG,MAAA+8B,UAAA3vF,OAAAgwB,EAAA,EAAA/wB,MAAAo6D,YAAA,IAAAj7B,EAAA7+B,EAAAN,IAAAm6D,WAAA,UAAAo2B,GAAArwF,EAAAi/B,EAAAnwB,KAAAmwB,EAAAjM,GAAAygC,GAAAtzD,GAAAszD,GAAA3zD,EAAA+vD,YAAAhvD,MAAA,KAAAuzD,IAAAu8B,gBAAAv8B,MAAAu8B,gBAAA,IAAA1xD,EACA7+B,EAAAg0D,IAAA6F,YAAA,UAAAo2B,GAAArwF,EAAAi/B,EAAAnwB,KAAAmwB,EAAAjM,GAAAnC,GAAA1wB,GAAA0wB,GAAAujC,EAAAvE,YAAAhvD,MAAA,MAAA+vF,GAAAhoC,UAAAioC,UAAAC,GAAAloC,UAAA2O,SAAA2gB,GAAA,aAAA/xE,KAAAyqF,IAAAG,GAAA,UAAA5qF,KAAAyqF,IAAAI,GAAA,wCAAA55E,KAAAw5E,IAAAK,GAAA,cAAA75E,KAAAw5E,IAAAh+B,EAAAm+B,IAAAC,IAAAC,GAAAlmB,EAAAnY,IAAAm+B,GAAAxjC,SAAA2jC,cAAA,IAAAD,IAAAD,IAAA,IAAA3nB,IAAA4nB,IAAA,WAAA9qF,KAAAyqF,IAAAO,GAAA9nB,IAAA,eAAAljE,KAAAyqF,IAAAve,IAAA4e,IAAA,gBAAA75E,KAAAw5E,IAAAzS,GAAA9L,QAAA,GAAAqN,GAAA,UAAAv5E,KAAAyqF,IAAA5E,GAAA,iBAAA7lF,KAAAyiD,UAAAwoC,QAAAC,GAAA,+BAAAlrF,KAAAyqF,IACArV,GAAA,YAAAp1E,KAAAyqF,IAAAd,GAAA9D,KAAA,cAAA7lF,KAAAyqF,KAAA,EAAAhoC,UAAA0oC,gBAAAhf,GAAA,UAAAnsE,KAAAyqF,IAAAvS,GAAAyR,IAAAxd,IAAA,mDAAAnsE,KAAAyqF,IAAAnuB,GAAAqtB,IAAA,MAAA3pF,KAAA2qF,IAAArF,GAAA,WAAAtlF,KAAAyqF,IAAAW,GAAA,OAAAprF,KAAA2qF,IAAAU,GAAA9R,IAAAkR,GAAAv5E,MAAA,uBAAAm6E,QAAA9rF,OAAA8rF,GAAA,KAAAA,IAAA,IAAAA,KAAA9R,IAAA,EAAArW,IAAA,OAAAqf,GAAAjmB,KAAA0uB,IAAAzR,KAAA,MAAA8R,IAAA,MAAAA,KAAAlG,GAAApT,IAAAtlB,GAAA,GAAAmY,EAAAmM,GAAA,SAAA32E,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAA23D,UAAA,GAAAj5B,EAAAE,EAAAF,GAAA7nB,KAAAyZ,GAAA,KAAAzwB,EAAAywB,EAAA5qB,MAAAg5B,EAAA1nB,MAAA0nB,EAAA,GAAAp+B,QAAAN,EAAA23D,UAAArnC,EAAA5qB,MAAA,EAAAg5B,EAAA1nB,QACAnX,EAAA6+B,EAAA,GAAA7+B,EAAA,UAAA2pE,GAAAxc,SAAA6C,YAAA,SAAA7vD,EAAA0+B,EAAApO,EAAAzwB,GAAA,IAAAN,EAAAytD,SAAA6C,cAAAtwD,EAAAq9E,OAAA/8E,GAAAG,EAAAswB,GAAA/wB,EAAA2xF,SAAAlxF,EAAA0+B,GAAA,OAAAn/B,CAAA,WAAAS,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAmtD,SAAAh0C,KAAAm4E,kBAAA,IAAAtxF,EAAAuxF,kBAAApxF,EAAAsxC,WAAA,OAAA/xC,GAAA,OAAAM,CAAA,CAAAA,EAAA0wE,UAAA,GAAA1wE,EAAAwxF,QAAA,YAAA/gE,GAAAzwB,EAAAyxF,UAAA,YAAA5yD,GAAA,OAAA7+B,CAAA,MAAA0xF,GAAA,SAAAvxF,KAAAwxF,QAAA,EAAAjC,GAAAgC,GAAA,SAAAvxF,KAAAyxF,eAAA,EAAAzxF,EAAA0xF,aAAA1xF,EAAAiD,MAAA3C,MAAA,EAAA+xD,IAAAk/B,GAAA,SAAAvxF,GAAA,IAAAA,EAAAwxF,QAAA,OAAA9yD,GAAA,QAAAyuD,GAAA,WAAAhnF,KAAAvG,EAAAuG,KAAAoY,GAAA,KACApY,KAAA2jC,KAAA,EAAA3jC,KAAAuX,QAAAuhD,GAAA94D,KAAAwrF,UAAAxrF,KAAA,EAAAgnF,GAAArqF,UAAA6uF,UAAA,SAAA3xF,KAAAue,GAAA,EAAAve,EAAA8pC,OAAA,IAAArB,KAAAzoC,EAAAJ,IAAA4kD,WAAAxkD,EAAA0d,QAAA1d,EAAA8pC,MAAA,IAAArB,KAAA,EAAA0kD,GAAArqF,UAAAoE,IAAA,SAAAlH,EAAA0+B,GAAAv4B,KAAAvG,EAAA8+B,KAAA,IAAA+J,KAAAzoC,EAAA,IAAAmG,KAAAoY,IAAAmgB,EAAAv4B,KAAA2jC,KAAAswB,aAAAj0D,KAAAoY,IAAApY,KAAAoY,GAAAimC,WAAAr+C,KAAAuX,QAAA1d,GAAAmG,KAAA2jC,KAAApL,CAAA,MAAAyqD,GAAA,CAAA1jF,SAAA,qCAAAi+E,GAAA,CAAAX,QAAA,GAAA+I,GAAA,CAAAzhD,OAAA,UAAAunD,GAAA,CAAAvnD,OAAA,SAAAi1B,GAAA,KAAAM,GAAA,4GACAG,GAAA,64DACAM,GAAA,KAAAG,GAAA,oBAAAxgE,EAAAkzD,EAAAW,EAAAJ,GAAAttD,KAAAggD,MAAA+M,EAAA/sD,KAAAnC,KAAA6vD,EAAA1tD,KAAAgtD,GAAAM,CAAA,KAAA/0B,EAAA,4CAAApO,EAAA,SAAAzwB,EAAA,QAAAN,EAAA,SAAAK,EAAA,uBAAAszD,EAAAW,GAAA,IAAAJ,EAAA,OAAAI,EAAA,cAAAX,EAAA5yD,QAAA,OAAAuzD,IAAAn1B,EAAA94B,KAAAstD,GAAA,iBAAA9gC,EAAA8gC,EAAA5yD,OAAAw6C,EAAA,GAAAt7C,EAAA,EAAAA,EAAA4yB,IAAA5yB,EAAA,KAAAW,EAAA26C,EAAA8Y,EAAAzzD,EAAAwQ,KAAA,IAAArR,EAAA4zD,EAAAxlD,WAAAlO,GAAAF,EAAA,KAAAA,EAAA,2PAAA2X,OAAA3X,GACA,MAAAA,GAAA,MAAAA,EAAA,UAAAA,GAAA,MAAAA,EAAA,6PAAA2X,OAAA3X,EAAA,YAAAA,GAAA,MAAAA,EAAA,UAAAA,GAAA,MAAAA,EAAA,UAAAA,EAAA,QAAAs0D,EAAAvzD,KAAAF,EAAAb,EAAA,CAAAE,EAAA,MAAAW,EAAAszD,EAAAj0D,EAAA4yB,IAAA5yB,EAAAo0D,EAAA9Y,EAAAt7C,GAAA,KAAAo0D,EAAA9Y,EAAAt7C,GAAAW,IAAAyzD,EAAAp0D,EAAA,MAAAW,EAAAszD,EAAAj0D,EAAA4yB,IAAA5yB,EAAAo0D,EAAA9Y,EAAAt7C,GAAA,KAAAo0D,GAAA,KAAAzzD,EAAA26C,EAAAt7C,GAAA,IAAAK,EAAA+F,KAAAguD,KAAAzzD,EAAAyzD,EAAA,KAAAA,IAAA9Y,EAAAt7C,GACA,MAAAA,EAAA,MAAAW,EAAA26C,EAAA,GAAAt7C,EAAA4yB,EAAA,IAAA5yB,EAAAo0D,EAAA9Y,EAAAt7C,GAAA,KAAAo0D,GAAA,KAAAzzD,GAAA,KAAA26C,EAAAt7C,EAAA,GAAAs7C,EAAAt7C,GAAA,SAAAo0D,GAAAzzD,GAAA26C,EAAAt7C,EAAA,SAAAW,GAAA,KAAAA,IAAA26C,EAAAt7C,GAAAW,KAAAyzD,EAAA,IAAAp0D,EAAA,EAAAA,EAAA4yB,IAAA5yB,EAAA,GAAAW,EAAA26C,EAAAt7C,GAAA,KAAAW,EAAA26C,EAAAt7C,GAAA,iBAAAW,EAAA,KAAAA,EAAAX,EAAA,EAAAW,EAAAiyB,GAAA,KAAA0oB,EAAA36C,QAAA,IAAAyzD,EAAAp0D,GAAA,KAAAs7C,EAAAt7C,EAAA,IAAAW,EAAAiyB,GAAA,KAAA0oB,EAAA36C,GAAA,QAAAX,EAAAW,IAAAX,EAAAs7C,EAAAt7C,GAAAo0D,EAAAp0D,EAAAW,EAAA,EAAAX,EAAA,MAAAW,EAAAszD,EAAAj0D,EAAA4yB,IAAA5yB,EAAAo0D,EAAA9Y,EAAAt7C,GAAA,KAAAW,GAAA,KAAAyzD,EAAA9Y,EAAAt7C,GAAA,IAAAK,EAAA+F,KAAAguD,KAAAzzD,EAAAyzD,GAAA,IAAAzzD,EAAA,EAAAA,EAAAiyB,IAAAjyB,EAAA,GAAAmwB,EAAA1qB,KAAAk1C,EAAA36C,IAAA,KAAAX,EAAAW,EAAA,EAAAX,EAAA4yB,GAAA9B,EAAA1qB,KAAAk1C,EAAAt7C,SAAAo0D,EAAA,MAAAzzD,EAAA26C,EAAA36C,EAAA,GAAAszD,GAAA,IAAAG,MAAA,MAAAp0D,EAAA4yB,EAAA0oB,EAAAt7C,GAAAi0D,IAAAG,EAAA,QAAAH,EAAAtzD,EAAAX,IAAAW,EAAA26C,EAAA36C,GAAAyzD,EAAAzzD,EAAAX,EAAA,EAAAi0D,EAAA,OAAA1zD,EACA,IAAAP,EAAA,EAAAA,EAAA4yB,GAAA,GAAA7yB,EAAAqG,KAAAk1C,EAAAt7C,IAAA,CAAAW,EAAAX,EAAA,MAAAA,IAAA4yB,GAAA7yB,EAAAqG,KAAAk1C,EAAAt7C,SAAAi0D,EAAA9iD,KAAA,IAAA3Q,EAAA,EAAAG,EAAAX,GAAA,UAAA+0D,EAAA/0D,EAAAW,EAAAszD,EAAAnzD,OAAAszD,EAAA,OAAAC,EAAA,UAAAr0D,IAAA4yB,GAAA,KAAA0oB,EAAAt7C,QAAA,IAAAF,EAAAi1D,EAAAj1D,EAAAE,GAAA,GAAAI,EAAAgG,KAAAk1C,EAAAx7C,IAAA,CAAAi1D,EAAAj1D,IAAAm0D,EAAA0K,OAAAh+D,EAAA,MAAAH,EAAA,EAAAu0D,EAAAj1D,IAAAa,GAAAyzD,GAAAW,EAAAj1D,EAAA,MAAAA,IAAAE,GAAAI,EAAAgG,KAAAk1C,EAAAx7C,SAAAm0D,EAAA0K,OAAAh+D,EAAA,MAAAH,EAAA,EAAAu0D,EAAAj1D,IAAAa,GAAAyzD,EAAAW,EAAAj1D,CAAA,OAAAA,EAAAi1D,EAAA/0D,GAAAi0D,EAAA0K,OAAAh+D,EAAA,MAAAH,EAAA,EAAAu0D,EAAA/0D,GAAA,QAAAq0D,IAAA,GAAAJ,EAAA,GAAAtN,QAAApmD,EAAAmzD,EAAAp8C,MAAA,WAAA28C,EAAA,GAAAzvD,KAAAjE,EAAA,GAAAO,OAAAmzD,EAAA7I,QAAA,IAAA5qD,EAAA,IAAAD,EAAA,GAAAO,UAAA,GAAA6xD,EAAAsB,GAAAtN,QAAApmD,EAAAmzD,EAAAp8C,MAAA,WAAAq7C,EAAAsB,GAAAN,IAAApzD,EAAA,GAAAO,OAAAmzD,EAAA9iD,KAAA,IAAA3Q,EAAA,EACAoyB,EAAAryB,EAAA,GAAAO,OAAA8xB,MAAA,aAAAyhC,EAAAJ,EAAAo+B,UAAAp+B,CAAA,EAJA,GAIAqN,GAAA,GAAArM,EAAA,SAAAz0D,EAAA0+B,EAAApO,GAAAtwB,EAAA8xF,iBAAA9xF,EAAA8xF,iBAAApzD,EAAApO,GAAA,GAAAtwB,EAAA+xF,YAAA/xF,EAAA+xF,YAAA,KAAArzD,EAAApO,IAAAtwB,IAAA4gE,YAAA5gE,EAAA4gE,UAAA,IAAA5gE,EAAA0+B,IAAA1+B,EAAA0+B,IAAAoiC,IAAA9tB,OAAA1iB,GAAA,EAAAg7D,GAAA,cAAAj5B,GAAA,EAAAmY,EAAA,aAAAxqE,EAAA8yB,EAAA,2BAAA9yB,GAAA,aAAAA,CAAA,IAAAuqE,GAAAhB,GAAAklB,GAAA,WAAAt7E,MAAA,MAAA7S,OAAA,SAAAN,GAAA,QAAA0+B,EAAA,EAAApO,EAAA,GAAAzwB,EAAAG,EAAAM,OAAAo+B,GAAA7+B,GAAA,KAAAN,EAAAS,EAAAke,QAAA,KAAAwgB,IAAA,GAAAn/B,MAAAS,EAAAM,QAAA,IAAAV,EAAAI,EAAA0F,MAAAg5B,EAAA,MAAA1+B,EAAAiX,OAAA1X,EAAA,GAAAA,EAAA,EAAAA,GAAA2zD,EAAAtzD,EAAAse,QAAA,OACA,GAAAg1C,GAAA5iC,EAAA3f,KAAA/Q,EAAA8F,MAAA,EAAAwtD,IAAAx0B,GAAAw0B,EAAA,IAAA5iC,EAAA3f,KAAA/Q,GAAA8+B,EAAAn/B,EAAA,UAAA+wB,CAAA,WAAAtwB,GAAA,OAAAA,EAAAmT,MAAA,aAAA6+E,GAAA9uC,OAAA0M,aAAA,SAAA5vD,GAAA,WAAAA,EAAAyxF,gBAAAzxF,EAAA0xF,YAAA,OAAAhzD,GAAA,oBAAA1+B,GAAA,QAAA0+B,EAAA1+B,EAAAs3D,cAAA3H,UAAAE,aAAA,OAAAv/B,GAAA,QAAAoO,KAAAuzD,iBAAAjyF,EAAA,GAAA0+B,EAAAwzD,iBAAA,aAAAxzD,IAAA,GAAAqrD,GAAA,eAAA/pF,EAAA8yB,EAAA,qBAAA9yB,EAAA,SAAAA,EAAA03D,aAAA,6CAAA13D,EAAAmyF,MAAA,IAAArhB,GAAA,KAAAxO,GAAA,GAAAE,GAAA,GAAAE,GAAA,GAAAgD,EACA,SAAA1lE,EAAA0+B,EAAApO,GAAAnqB,KAAAgB,IAAAhB,KAAAyI,MAAA,EAAAzI,KAAAwC,OAAA3I,EAAAmG,KAAAw/D,QAAAjnC,GAAA,EAAAv4B,KAAA6M,UAAA7M,KAAAisF,cAAAjsF,KAAAksF,gBAAA,EAAAlsF,KAAAmsF,WAAAhiE,CAAA,EAAAo1C,EAAA5iE,UAAA+iE,IAAA,kBAAA1/D,KAAAgB,KAAAhB,KAAAwC,OAAArI,MAAA,EAAAolE,EAAA5iE,UAAAyvF,IAAA,kBAAApsF,KAAAgB,KAAAhB,KAAA6M,SAAA,EAAA0yD,EAAA5iE,UAAA0vF,KAAA,kBAAArsF,KAAAwC,OAAAsO,OAAA9Q,KAAAgB,WAAA,GAAAu+D,EAAA5iE,UAAA2K,KAAA,cAAAtH,KAAAgB,IAAAhB,KAAAwC,OAAArI,OAAA,OAAA6F,KAAAwC,OAAAsO,OAAA9Q,KAAAgB,MAAA,EAAAu+D,EAAA5iE,UAAAoU,IAAA,SAAAlX,GAAA,IAAA0+B,EAAAv4B,KAAAwC,OAAAsO,OAAA9Q,KAAAgB,KACA,oBAAAnH,EAAA0+B,GAAA1+B,EAAA0+B,IAAA1+B,EAAA4F,KAAA5F,EAAA4F,KAAA84B,GAAA1+B,EAAA0+B,IAAA,QAAAv4B,KAAAgB,IAAAu3B,CAAA,EAAAgnC,EAAA5iE,UAAA2vF,SAAA,SAAAzyF,GAAA,QAAA0+B,EAAAv4B,KAAAgB,IAAAhB,KAAA+Q,IAAAlX,KAAA,OAAAmG,KAAAgB,IAAAu3B,CAAA,EAAAgnC,EAAA5iE,UAAA4vF,SAAA,mBAAA1yF,EAAAmG,KAAAgB,IAAA,aAAAvB,KAAAO,KAAAwC,OAAAsO,OAAA9Q,KAAAgB,SAAAhB,KAAAgB,IAAA,OAAAhB,KAAAgB,IAAAnH,CAAA,EAAA0lE,EAAA5iE,UAAA6vF,UAAA,WAAAxsF,KAAAgB,IAAAhB,KAAAwC,OAAArI,MAAA,EAAAolE,EAAA5iE,UAAA8vF,OAAA,SAAA5yF,KAAAmG,KAAAwC,OAAAuV,QAAAle,EAAAmG,KAAAgB,KAAA,MAAAnH,EAAA,OAAAmG,KAAAgB,IAAAnH,GAAA,GAAA0lE,EAAA5iE,UAAA+vF,OAAA,SAAA7yF,GAAAmG,KAAAgB,KAAAnH,CAAA,EAAA0lE,EAAA5iE,UAAA2L,OACA,WAAAtI,KAAAisF,cAAAjsF,KAAAyI,QAAAzI,KAAAksF,gBAAAlzB,GAAAh5D,KAAAwC,OAAAxC,KAAAyI,MAAAzI,KAAAw/D,QAAAx/D,KAAAisF,cAAAjsF,KAAAksF,iBAAAlsF,KAAAisF,cAAAjsF,KAAAyI,OAAA,OAAAzI,KAAAksF,iBAAAlsF,KAAA6M,UAAAmsD,GAAAh5D,KAAAwC,OAAAxC,KAAA6M,UAAA7M,KAAAw/D,SAAA,IAAAD,EAAA5iE,UAAAgwF,YAAA,kBAAA3zB,GAAAh5D,KAAAwC,OAAA,KAAAxC,KAAAw/D,UAAAx/D,KAAA6M,UAAAmsD,GAAAh5D,KAAAwC,OAAAxC,KAAA6M,UAAA7M,KAAAw/D,SAAA,IAAAD,EAAA5iE,UAAAgU,MAAA,SAAA9W,EAAA0+B,EAAApO,GAAA,oBAAAtwB,EAAA,KAAAH,EAAA,SAAAD,GAAA,OAAA0wB,EAAA1wB,EAAAq6C,cACAr6C,CAAA,EAAAL,EAAA4G,KAAAwC,OAAAw0B,OAAAh3B,KAAAgB,IAAAnH,EAAAM,QAAA,GAAAT,EAAAN,IAAAM,EAAAG,GAAA,WAAA0+B,IAAAv4B,KAAAgB,KAAAnH,EAAAM,SAAA,WAAAN,EAAAmG,KAAAwC,OAAAjD,MAAAS,KAAAgB,KAAA2P,MAAA9W,KAAA,EAAAA,EAAAgX,MAAA,YAAAhX,IAAA,IAAA0+B,IAAAv4B,KAAAgB,KAAAnH,EAAA,GAAAM,QAAA,OAAAN,CAAA,GAAA0lE,EAAA5iE,UAAAwvB,QAAA,kBAAAnsB,KAAAwC,OAAAjD,MAAAS,KAAAyI,MAAAzI,KAAAgB,IAAA,EAAAu+D,EAAA5iE,UAAAiwF,eAAA,SAAA/yF,EAAA0+B,GAAAv4B,KAAA6M,WAAAhT,EAAA,WAAA0+B,GAAA,SAAAv4B,KAAA6M,WAAAhT,CAAA,GAAA0lE,EAAA5iE,UAAAwjE,UAAA,SAAAtmE,GAAA,IAAA0+B,EAAAv4B,KAAAmsF,WAAA,OAAA5zD,KAAA4nC,UAAAtmE,EAAA,EAAA0lE,EAAA5iE,UAAAkwF,UAAA,eAAAhzF,EACAmG,KAAAmsF,WAAA,OAAAtyF,KAAAgzF,UAAA7sF,KAAAgB,IAAA,MAAAk/D,GAAA,SAAArmE,EAAA0+B,GAAAv4B,KAAA0sB,MAAA7yB,EAAAmG,KAAAmgE,UAAA5nC,CAAA,EAAAymC,GAAA,SAAAnlE,EAAA0+B,EAAApO,EAAAzwB,GAAAsG,KAAA0sB,MAAA6L,EAAAv4B,KAAAg+D,IAAAnkE,EAAAmG,KAAAoI,KAAA+hB,EAAAnqB,KAAA8sF,aAAApzF,GAAA,EAAAsG,KAAAi+D,WAAA,KAAAj+D,KAAAo+D,aAAA,GAAAY,GAAAriE,UAAAwjE,UAAA,SAAAtmE,GAAA,IAAA0+B,EAAAv4B,KAAAg+D,IAAA7Q,QAAAntD,KAAAoI,KAAAvO,GAAA,MAAA0+B,GAAA1+B,EAAAmG,KAAA8sF,eAAA9sF,KAAA8sF,aAAAjzF,GAAA,OAAA0+B,CAAA,EAAAymC,GAAAriE,UAAAkwF,UAAA,SAAAhzF,GAAA,IAAAmG,KAAAi+D,WAAA,iBAAAj+D,KAAAi+D,WAAAj+D,KAAAo+D,eAAAvkE,GAAAmG,KAAAo+D,cAAA,MAAA7lC,EAAAv4B,KAAAi+D,WAAAj+D,KAAAo+D,aACA,UAAApzD,KAAAutB,KAAAvwB,QAAA,sBAAAisB,KAAAj0B,KAAAi+D,WAAAj+D,KAAAo+D,cAAAvkE,EAAA,EAAAmlE,GAAAriE,UAAA2iE,SAAA,WAAAt/D,KAAAoI,OAAA,EAAApI,KAAA8sF,cAAA9sF,KAAA8sF,cAAA,EAAA9tB,GAAAE,UAAA,SAAArlE,EAAA0+B,EAAApO,GAAA,OAAAoO,aAAA2nC,GAAA,IAAAlB,GAAAnlE,EAAA6iE,GAAA7iE,EAAAg1D,KAAAt2B,EAAA7L,OAAAvC,EAAAoO,EAAA4nC,WAAA,IAAAnB,GAAAnlE,EAAA6iE,GAAA7iE,EAAAg1D,KAAAt2B,GAAApO,EAAA,EAAA60C,GAAAriE,UAAAiiE,KAAA,SAAA/kE,MAAA,IAAAA,EAAA6iE,GAAA18D,KAAAg+D,IAAAnP,KAAA7uD,KAAA0sB,OAAA1sB,KAAA0sB,MAAA,SAAA1sB,KAAA8sF,aAAA,IAAA5sB,GAAArmE,EAAAmG,KAAA8sF,cAAAjzF,CAAA,MAAAimE,GAAA,SAAAjmE,EAAA0+B,EAAApO,GAAAnqB,KAAAyI,MAAA5O,EAAA4O,MAAAzI,KAAAqH,IAAAxN,EAAAmH,IAAAhB,KAAAwC,OACA3I,EAAAsyB,UAAAnsB,KAAAgL,KAAAutB,GAAA,KAAAv4B,KAAA0sB,MAAAvC,CAAA,EAAA0zD,IAAA,EAAArc,IAAA,EAAAwY,GAAA,SAAAngF,EAAA0+B,EAAApO,GAAAnqB,KAAA4K,KAAA/Q,EAAAunE,GAAAphE,KAAAu4B,GAAAv4B,KAAAmzD,OAAAhpC,IAAAnqB,MAAA,GAAAg6E,GAAAr9E,UAAAowF,OAAA,kBAAA13B,EAAAr1D,KAAA,EAAAq7D,GAAA2e,IAAA,IAAAvX,GAAA,GAAAD,GAAA,GAAA+C,GAAA,KAAAE,GAAA,KAAA8E,GAAA,CAAAlyD,KAAA,EAAAC,MAAA,EAAAg6C,IAAA,EAAAL,OAAA,GAAAkb,GAAA6f,GAAA,SAAAnzF,EAAA0+B,EAAApO,GAAAnqB,KAAAwvD,GAAArlC,EAAA,IAAAzwB,EAAAsG,KAAAitF,KAAAtgE,EAAA,OAAAA,EAAA,4DAAAvzB,EAAA4G,KAAAktF,MAAAvgE,EAAA,OAAAA,EAAA,2EAAAjzB,EAAAyzF,SAAA/zF,EAAA+zF,UAAA,EAAAtzF,EAAAH,GAAAG,EAAAT,GAAAk1D,EAAA50D,EACA,qBAAAA,EAAAu5D,cAAA16B,EAAA7+B,EAAA64D,UAAA,eAAAjE,EAAAl1D,EAAA,qBAAAA,EAAA8uE,aAAA3vC,EAAAn/B,EAAAi5D,WAAA,iBAAAryD,KAAAotF,kBAAA,EAAAlhC,GAAA,EAAAmY,IAAArkE,KAAAktF,MAAAvrD,MAAAg1C,UAAA32E,KAAAitF,KAAAtrD,MAAA4yC,SAAA,SAAAyY,GAAArwF,UAAAub,OAAA,SAAAre,GAAA,IAAA0+B,EAAA1+B,EAAAi4E,YAAAj4E,EAAAquE,YAAA,EAAA/9C,EAAAtwB,EAAAm5D,aAAAn5D,EAAAo5D,aAAA,EAAAv5D,EAAAG,EAAAw5D,eAAAlpC,GAAAnqB,KAAAitF,KAAAtrD,MAAAyxB,QAAA,QAAApzD,KAAAitF,KAAAtrD,MAAAswB,OAAA15B,EAAA7+B,EAAA,SAAAsG,KAAAitF,KAAA15B,WAAA5xB,MAAAwxB,OAAAz6B,KAAA/K,IAAA,EAAA9zB,EAAAm5D,aAAAn5D,EAAAo5D,cAAAp5D,EAAAq4E,YACA35C,EAAA7+B,EAAA,YAAAsG,KAAAitF,KAAA16B,UAAA,EAAAvyD,KAAAitF,KAAAtrD,MAAAyxB,QAAA,GAAApzD,KAAAitF,KAAA15B,WAAA5xB,MAAAwxB,OAAA,KAAA56B,GAAAv4B,KAAAktF,MAAAvrD,MAAAyxB,QAAA,QAAApzD,KAAAktF,MAAAvrD,MAAArpB,MAAA6R,EAAAzwB,EAAA,SAAAsG,KAAAktF,MAAAvrD,MAAAtpB,KAAAxe,EAAAu4E,QAAA,KAAApyE,KAAAktF,MAAA35B,WAAA5xB,MAAA2xB,MAAA56B,KAAA/K,IAAA,EAAA9zB,EAAAi4E,YAAAj4E,EAAAquE,aAAAruE,EAAAs4E,UAAAt4E,EAAAu4E,SAAAjoD,EAAAzwB,EAAA,YAAAsG,KAAAktF,MAAAvrD,MAAAyxB,QAAA,GAAApzD,KAAAktF,MAAA35B,WAAA5xB,MAAA2xB,MAAA,MAAAtzD,KAAAotF,kBAAA,EAAAvzF,EAAAo5D,eAAA,GAAAv5D,GAAAsG,KAAAqtF,gBAAArtF,KAAAotF,kBAAA,UAAA90E,MAAA6R,EACAzwB,EAAA,EAAAu4D,OAAA15B,EAAA7+B,EAAA,IAAAszF,GAAArwF,UAAAq1E,cAAA,SAAAn4E,GAAAmG,KAAAktF,MAAA76B,YAAAx4D,IAAAmG,KAAAktF,MAAA76B,WAAAx4D,GAAAmG,KAAAstF,cAAAttF,KAAAutF,mBAAAvtF,KAAAktF,MAAAltF,KAAAstF,aAAA,UAAAN,GAAArwF,UAAAk1E,aAAA,SAAAh4E,GAAAmG,KAAAitF,KAAA16B,WAAA14D,IAAAmG,KAAAitF,KAAA16B,UAAA14D,GAAAmG,KAAAwtF,aAAAxtF,KAAAutF,mBAAAvtF,KAAAitF,KAAAjtF,KAAAwtF,YAAA,SAAAR,GAAArwF,UAAA0wF,cAAA,WAAArtF,KAAAktF,MAAAvrD,MAAAwxB,OAAAnzD,KAAAitF,KAAAtrD,MAAA2xB,MAAAyI,KAAA4uB,GAAA,cAAA3qF,KAAAktF,MAAAvrD,MAAAiuC,WAAA5vE,KAAAitF,KAAAtrD,MAAAiuC,WACA,SAAA5vE,KAAAstF,aAAA,IAAAtG,GAAAhnF,KAAAwtF,YAAA,IAAAxG,EAAA,EAAAgG,GAAArwF,UAAA4wF,mBAAA,SAAA1zF,EAAA0+B,EAAApO,GAAA,SAAAzwB,IAAA,IAAAN,EAAAS,EAAAu4D,yBAAA,QAAAjoC,EAAA08B,SAAA4mC,iBAAAr0F,EAAAkf,MAAA,GAAAlf,EAAAk5D,IAAAl5D,EAAA64D,QAAA,GAAApL,SAAA4mC,kBAAAr0F,EAAAkf,MAAAlf,EAAAif,MAAA,EAAAjf,EAAA64D,OAAA,KAAAp4D,IAAA8nC,MAAAiuC,WAAA,SAAAr3C,EAAAx3B,IAAA,IAAArH,EAAA,CAAAG,EAAA8nC,MAAAiuC,WAAA,GAAAr3C,EAAAx3B,IAAA,IAAArH,EAAA,EAAAszF,GAAArwF,UAAAmnD,MAAA,eAAAjqD,EAAAmG,KAAAktF,MAAA/hD,WAAAtxC,EAAAmwD,YAAAhqD,KAAAktF,OAAArzF,EAAAmwD,YAAAhqD,KAAAitF,KAAA,MAAAS,GAAA,aAAAA,GAAA/wF,UAAAub,OACA,kBAAA+5C,OAAA,EAAA35C,MAAA,IAAAo1E,GAAA/wF,UAAAq1E,cAAA,aAAA0b,GAAA/wF,UAAAk1E,aAAA,aAAA6b,GAAA/wF,UAAAmnD,MAAA,iBAAAkvB,GAAA,CAAA2a,OAAAX,GAAAxrD,KAAAksD,IAAAja,GAAA,EAAAO,GAAA,SAAAn6E,EAAA0+B,EAAApO,GAAA,IAAAzwB,EAAAG,EAAAu5D,QAAApzD,KAAA42E,SAAAr+C,EAAAv4B,KAAA21E,QAAA/E,GAAAl3E,EAAAG,EAAAmkE,IAAAzlC,GAAAv4B,KAAAy1E,gBAAA/7E,EAAAm/D,QAAApG,YAAAzyD,KAAAi2E,cAAAv8E,EAAAm/D,QAAA5F,aAAAjzD,KAAA2nE,aAAAjuE,EAAAm/D,QAAAqP,YAAAloE,KAAA62E,gBAAA7vB,GAAAntD,GAAAmG,KAAA01E,MAAAvrD,EAAAnqB,KAAA81E,KAAArM,GAAA5vE,GAAAmG,KAAAs/C,OAAA,IAAA00B,GAAAr3E,UAAA+3D,OAAA,SAAA76D,EAAA0+B,GAAA6iC,GAAAvhE,EAAA0+B,IACAv4B,KAAAs/C,OAAA90C,KAAAwF,UAAA,EAAAgkE,GAAAr3E,UAAAq4E,OAAA,mBAAAn7E,EAAA,EAAAA,EAAAmG,KAAAs/C,OAAAnlD,OAAAN,IAAA6gE,EAAA77B,MAAA,KAAA7+B,KAAAs/C,OAAAzlD,GAAA,MAAAo/E,GAAA,EAAAR,GAAA,KAAAvsB,EAAAusB,IAAA,IAAAjH,GAAAiH,GAAA,GAAA9M,GAAA8M,IAAA,GAAA6M,KAAA7M,IAAA,SAAAW,GAAA,SAAAv/E,EAAA0+B,GAAAv4B,KAAA4J,OAAA/P,EAAAmG,KAAA0uE,UAAAn2C,CAAA,EAAA6gD,GAAAz8E,UAAAs/E,QAAA,kBAAAj8E,KAAA4J,OAAA5J,KAAA0uE,UAAA,EAAA0K,GAAAz8E,UAAAq4C,OAAA,SAAAn7C,GAAA,GAAAA,GAAAmG,KAAA,YAAAnG,EAAA60E,WAAA1uE,KAAA0uE,WAAA70E,EAAA+P,OAAAzP,QAAA6F,KAAA4J,OAAAzP,OAAA,iBAAAo+B,EAAA,EAAAA,EAAAv4B,KAAA4J,OAAAzP,OAAAo+B,IAAA,KAAApO,EAAAnqB,KAAA4J,OAAA2uB,GAAA7+B,EAAAG,EAAA+P,OAAA2uB,GACA,IAAAilC,GAAArzC,EAAA8qC,OAAAv7D,EAAAu7D,UAAAuI,GAAArzC,EAAA6qC,KAAAt7D,EAAAs7D,MAAA,mBAAAokB,GAAAz8E,UAAAk/E,SAAA,mBAAAhiF,EAAA,GAAA0+B,EAAA,EAAAA,EAAAv4B,KAAA4J,OAAAzP,OAAAo+B,IAAA1+B,EAAA0+B,GAAA,IAAAwzB,EAAA0R,GAAAz9D,KAAA4J,OAAA2uB,GAAA08B,QAAAwI,GAAAz9D,KAAA4J,OAAA2uB,GAAAy8B,OAAA,WAAAokB,GAAAv/E,EAAAmG,KAAA0uE,UAAA,EAAA0K,GAAAz8E,UAAAuxD,kBAAA,mBAAAr0D,EAAA,EAAAA,EAAAmG,KAAA4J,OAAAzP,OAAAN,IAAA,IAAAmG,KAAA4J,OAAA/P,GAAAwsB,QAAA,mBAAA+yD,GAAAz8E,UAAA27D,SAAA,SAAAz+D,EAAA0+B,SAAA1+B,GAAA,QAAAswB,EAAA,EAAAA,EAAAnqB,KAAA4J,OAAAzP,OAAAgwB,IAAA,KAAAzwB,EAAAsG,KAAA4J,OAAAugB,GAAA,MAAAwkC,EAAAp2B,EAAA7+B,EAAAmE,SAAA,GAAA8wD,EAAA90D,EAAAH,EAAAszD,MAAA,OAAA7iC,CAAA,WACA,IAAA4hC,EAAA,SAAAlyD,EAAA0+B,GAAAv4B,KAAAi1D,OAAAp7D,EAAAmG,KAAAg1D,KAAAz8B,CAAA,EAAAwzB,EAAApvD,UAAAkB,KAAA,kBAAA8/D,GAAA39D,KAAAi1D,OAAAj1D,KAAAg1D,KAAA,EAAAjJ,EAAApvD,UAAAqwD,GAAA,kBAAA0Q,GAAA19D,KAAAi1D,OAAAj1D,KAAAg1D,KAAA,EAAAjJ,EAAApvD,UAAA0pB,MAAA,kBAAArmB,KAAAg1D,KAAA5sD,MAAApI,KAAAi1D,OAAA7sD,MAAApI,KAAAg1D,KAAA1oC,IAAAtsB,KAAAi1D,OAAA3oC,EAAA,EAAAqyD,GAAAhiF,UAAA,CAAAogE,UAAA,kBAAA/8D,KAAA4rC,MAAAzxC,MAAA,EAAAyzF,YAAA,SAAA/zF,EAAA0+B,GAAA,QAAApO,EAAAtwB,EAAAH,EAAAG,EAAA0+B,EAAApO,EAAAzwB,IAAAywB,EAAA,KAAA/wB,EAAA4G,KAAA4rC,MAAAzhB,GAAAnqB,KAAAmzD,QAAA/5D,EAAA+5D,OAAA,IAAA15D,EAAAL,EAAAK,EAAAoiB,OAAA,KAAAqlD,GAAAznE,GAAA+rE,GAAApsE,EAAA,UAAA4G,KAAA4rC,MAAAosB,OAAAn+D,EAAA0+B,EAAA,EAAA6xC,SAAA,SAAAvwE,KAAA2Q,KAAAq0B,MAAAhlC,EACAmG,KAAA4rC,MAAA,EAAAiiD,YAAA,SAAAh0F,EAAA0+B,EAAApO,GAAAnqB,KAAAmzD,QAAAhpC,EAAAnqB,KAAA4rC,MAAA5rC,KAAA4rC,MAAArsC,MAAA,EAAA1F,GAAAgzC,OAAAtU,GAAAsU,OAAA7sC,KAAA4rC,MAAArsC,MAAA1F,IAAA,IAAAA,EAAA,EAAAA,EAAA0+B,EAAAp+B,SAAAN,EAAA0+B,EAAA1+B,GAAAgiB,OAAA7b,IAAA,EAAA8tF,MAAA,SAAAj0F,EAAA0+B,EAAApO,GAAA,IAAAoO,EAAA1+B,EAAA0+B,EAAA1+B,EAAA0+B,IAAA1+B,EAAA,GAAAswB,EAAAnqB,KAAA4rC,MAAA/xC,IAAA,WAAA+kF,GAAAjiF,UAAA,CAAAogE,UAAA,kBAAA/8D,KAAAi0B,IAAA,EAAA25D,YAAA,SAAA/zF,EAAA0+B,GAAAv4B,KAAAi0B,MAAAsE,EAAA,QAAApO,EAAA,EAAAA,EAAAnqB,KAAAklC,SAAA/qC,SAAAgwB,EAAA,KAAAzwB,EAAAsG,KAAAklC,SAAA/a,GAAA/wB,EAAAM,EAAAqjE,YAAA,GAAAljE,EAAAT,EAAA,KAAAK,EAAAi/B,KAAAhL,IAAA6K,EAAAn/B,EAAAS,GAAAkzD,EAAArzD,EAAAy5D,OAAAz5D,EAAAk0F,YAAA/zF,EAAAJ,GAAAuG,KAAAmzD,QAAApG,EAAArzD,EAAAy5D,OAAA/5D,GAAAK,IAAAuG,KAAAklC,SAAA8yB,OAAA7tC,IACA,GAAAzwB,EAAAmiB,OAAA,aAAA0c,GAAA9+B,GAAA,MAAAI,EAAA,OAAAA,GAAAT,CAAA,IAAA4G,KAAAi0B,KAAAsE,IAAA,EAAAv4B,KAAAklC,SAAA/qC,UAAA6F,KAAAklC,SAAA,aAAAy5C,OAAA9kF,EAAA,GAAAmG,KAAAoqE,SAAAvwE,GAAAmG,KAAAklC,SAAA,KAAAy5C,GAAA9kF,IAAAmG,KAAAklC,SAAA,GAAArpB,OAAA7b,KAAA,EAAAoqE,SAAA,SAAAvwE,GAAA,QAAA0+B,EAAA,EAAAA,EAAAv4B,KAAAklC,SAAA/qC,SAAAo+B,EAAAv4B,KAAAklC,SAAA3M,GAAA6xC,SAAAvwE,EAAA,EAAAg0F,YAAA,SAAAh0F,EAAA0+B,EAAApO,GAAAnqB,KAAAi0B,MAAAsE,EAAAp+B,OAAA6F,KAAAmzD,QAAAhpC,EAAA,QAAAzwB,EAAA,EAAAA,EAAAsG,KAAAklC,SAAA/qC,SAAAT,EAAA,KAAAN,EAAA4G,KAAAklC,SAAAxrC,GAAAD,EAAAL,EAAA2jE,YAAA,GAAAljE,GAAAJ,EAAA,CAAAL,EAAAy0F,YAAAh0F,EAAA0+B,EAAApO,GAAA,GAAA/wB,EAAAwyC,OAAA,GAAAxyC,EAAAwyC,MAAAzxC,OAAA,KAAAo+B,EACA1+B,EAAAT,EAAAwyC,MAAAzxC,OAAA,MAAAo+B,EAAAn/B,EAAAwyC,MAAAzxC,QAAAgwB,EAAA,IAAAw0D,GAAAvlF,EAAAwyC,MAAArsC,MAAAg5B,KAAA,KAAAn/B,EAAA+5D,QAAAhpC,EAAAgpC,OAAAnzD,KAAAklC,SAAA8yB,SAAAt+D,EAAA,EAAAywB,KAAAtO,OAAA7b,KAAA5G,EAAAwyC,MAAAxyC,EAAAwyC,MAAArsC,MAAA,EAAA1F,GAAAmG,KAAA+tF,YAAA,OAAAl0F,GAAAJ,CAAA,GAAAs0F,WAAA,oBAAA/tF,KAAAklC,SAAA/qC,QAAA,KAAAN,EAAAmG,KAAA,OAAAu4B,EAAA1+B,EAAAqrC,SAAA8yB,OAAAn+D,EAAAqrC,SAAA/qC,OAAA,KAAAo+B,EAAA,IAAAqmD,GAAArmD,GAAA,GAAA1+B,EAAAgiB,OAAA,CAAAhiB,EAAAo6B,MAAAsE,EAAAtE,KAAAp6B,EAAAs5D,QAAA56B,EAAA46B,OAAA,IAAAhpC,EAAA8uC,GAAAp/D,EAAAgiB,OAAAqpB,SAAArrC,KAAAgiB,OAAAqpB,SAAA8yB,OAAA7tC,EAAA,IAAAoO,EAAA,MAAApO,EAAA,IAAAy0D,GAAA/kF,EAAAqrC,UAAA/a,EAAAtO,OAAAhiB,IAAAqrC,SAAA,CAAA/a,EAAAoO,GAAA1+B,EAAAswB,EAAAoO,EAAA1c,OAAAhiB,EAAAgiB,MAAA,UACAhiB,EAAAqrC,SAAA/qC,QAAAN,EAAAgiB,OAAAkyE,YAAA,GAAAD,MAAA,SAAAj0F,EAAA0+B,EAAApO,GAAA,QAAAzwB,EAAA,EAAAA,EAAAsG,KAAAklC,SAAA/qC,SAAAT,EAAA,KAAAN,EAAA4G,KAAAklC,SAAAxrC,GAAAD,EAAAL,EAAA2jE,YAAA,GAAAljE,EAAAJ,EAAA,CAAAA,EAAAi/B,KAAAhL,IAAA6K,EAAA9+B,EAAAI,GAAA,GAAAT,EAAA00F,MAAAj0F,EAAAJ,EAAA0wB,GAAA,gBAAAoO,GAAA9+B,GAAA,MAAAI,EAAA,OAAAA,GAAAJ,CAAA,QAAAixB,GAAA,SAAA7wB,EAAA0+B,EAAApO,GAAA,GAAAA,EAAA,QAAAzwB,KAAAywB,IAAAxiB,eAAAjO,KAAAsG,KAAAtG,GAAAywB,EAAAzwB,IAAAsG,KAAAg+D,IAAAnkE,EAAAmG,KAAAkP,KAAAqpB,CAAA,EAAA7N,GAAA/tB,UAAAmnD,MAAA,eAAAjqD,EAAAmG,KAAAg+D,IAAAxO,GAAAj3B,EAAAv4B,KAAAoI,KAAAo/D,QAAAr9C,EAAAnqB,KAAAoI,KAAA1O,EAAA27D,EAAAlrC,GAAA,SAAAzwB,GAAA6+B,EAAA,SAAAn/B,EAAA,EAAAA,EAAAm/B,EAAAp+B,SAAAf,EAAAm/B,EAAAn/B,IAAA4G,MAAAu4B,EAAAy/B,OAAA5+D,IAAA,GAAAm/B,EAAAp+B,SACAgwB,EAAAq9C,QAAA,UAAA/tE,EAAAuuE,GAAAhoE,MAAAk9D,GAAA/yC,EAAAuO,KAAA/K,IAAA,EAAAxD,EAAAgpC,OAAA15D,IAAAI,IAAAo7E,GAAAp7E,GAAA,eAAAkzD,GAAAtzD,EAAAwoE,GAAA93C,IAAAtwB,EAAAqhE,OAAArhE,EAAAqhE,MAAA3I,WAAA14D,EAAAmkE,IAAAzL,YAAAwe,GAAAl3E,EAAAkzD,GAAAkhB,GAAAp0E,EAAAH,EAAA,aAAA8rE,GAAA3rE,EAAA,oBAAAA,EAAAmG,KAAAtG,GAAA,GAAAgxB,GAAA/tB,UAAAqxF,QAAA,eAAAn0F,EAAAmG,KAAAu4B,EAAAv4B,KAAAmzD,OAAAhpC,EAAAnqB,KAAAg+D,IAAAxO,GAAA91D,EAAAsG,KAAAoI,KAAApI,KAAAmzD,OAAA,SAAA/5D,EAAA4uE,GAAAhoE,MAAAu4B,EAAAn/B,IAAA0oE,GAAA9hE,KAAAg+D,IAAAtkE,IAAAwjE,GAAAxjE,IAAAy5D,OAAA/5D,GAAA+wB,GAAA8qD,GAAA9qD,GAAA,WAAAA,EAAA+wC,MAAAwO,aAAA,EAAAzH,GAAAvoE,IAAAywB,EAAA+wC,OAAA/wC,EAAA+wC,MAAA3I,WAAApoC,EAAA6zC,IAAAzL,YAAAwe,GAAA5mD,EAAA/wB,GAAAosE,GAAAr7C,EAAA,oBAAAA,EAAAtwB,EAAAw7D,EAAA37D,GAAA,MACA2hE,GAAA3wC,IAAA,IAAA80D,GAAA,EAAAP,GAAA,SAAAplF,EAAA0+B,GAAAv4B,KAAA4rC,MAAA,GAAA5rC,KAAAgL,KAAAutB,EAAAv4B,KAAAg+D,IAAAnkE,EAAAmG,KAAAoY,KAAAonE,EAAA,EAAAP,GAAAtiF,UAAAmnD,MAAA,eAAA9jD,KAAA27E,kBAAA,KAAA9hF,EAAAmG,KAAAg+D,IAAAxO,GAAAj3B,EAAA1+B,MAAAqhE,MAAA3iC,GAAA26C,GAAAr5E,GAAA,GAAAuhE,GAAAp7D,KAAA,cAAAmqB,EAAAnqB,KAAAsmC,OAAAnc,GAAAq7C,GAAAxlE,KAAA,QAAAmqB,EAAAtsB,KAAAssB,EAAA6iC,GAAA,SAAAtzD,EAAAywB,EAAA,KAAA/wB,EAAA,EAAAA,EAAA4G,KAAA4rC,MAAAzxC,SAAAf,EAAA,KAAAK,EAAAuG,KAAA4rC,MAAAxyC,GAAA2zD,EAAAwT,GAAA9mE,EAAAinE,YAAA1gE,MAAAnG,IAAAmG,KAAAyhE,UAAAwM,GAAAp0E,EAAAw7D,EAAA57D,GAAA,QAAAI,IAAA,MAAAkzD,EAAAC,KAAAtzD,EAAA27D,EAAA57D,IAAA,MAAAszD,EAAAlvD,OAAAssB,EAAAkrC,EAAA57D,KAAA,QAAAi0D,EAAAj0D,EAAA6zD,OAAA,EAAArhC,EAAAxyB,EAAAinE,YAAA/rB,EAAAoY,EAAA1zD,EAAA,EAAAA,EAAA4yB,EAAA9xB,SAAAd,EAAA4yB,EAAA5yB,IAAAs7C,IAAA2Y,IACAA,EAAA,KAAA9iD,KAAAyhB,EAAA5yB,IAAAq0D,EAAAgT,YAAApT,EAAA,MAAAP,EAAAlvD,MAAAmC,KAAAyhE,YAAAK,GAAA9hE,KAAAg+D,IAAAvkE,IAAAI,GAAAqjE,GAAAzjE,EAAAyzE,GAAArzE,EAAAu5D,SAAA,IAAAv5D,GAAAmG,KAAAyhE,YAAA5nE,EAAAuI,QAAA2nE,aAAA,IAAA3wE,EAAA,EAAAA,EAAA4G,KAAA4rC,MAAAzxC,SAAAf,EAAAK,EAAAkoE,GAAA3hE,KAAA4rC,MAAAxyC,IAAA2zD,EAAAmV,GAAAzoE,GAAAszD,EAAAlzD,EAAAu5D,QAAAiP,gBAAAxoE,EAAAu5D,QAAAgP,QAAA3oE,EAAAI,EAAAu5D,QAAAiP,cAAAtV,EAAAlzD,EAAAu5D,QAAAkP,gBAAA,SAAAn4C,GAAAtwB,GAAAmG,KAAAyhE,WAAAmM,GAAA/zE,EAAAswB,EAAAzwB,EAAA,GAAAsG,KAAA4rC,MAAAzxC,OAAA,EAAA6F,KAAA27E,mBAAA,EAAA37E,KAAAk9E,QAAAl9E,KAAAg+D,IAAAof,WAAAp9E,KAAAg+D,IAAAof,UAAA,EAAAvjF,GAAAgjF,GAAAhjF,EAAAmkE,MAAAnkE,GAAA2rE,GAAA3rE,EAAA,gBAAAA,EAAAmG,KAAAmqB,EACAzwB,GAAA6+B,GAAAo7C,GAAA95E,GAAAmG,KAAA6b,QAAA7b,KAAA6b,OAAAioC,OAAA,GAAAm7B,GAAAtiF,UAAA2pC,KAAA,SAAAzsC,EAAA0+B,GAAA,MAAA1+B,GAAA,YAAAmG,KAAAgL,OAAAnR,EAAA,WAAAswB,EAAAzwB,EAAAN,EAAA,EAAAA,EAAA4G,KAAA4rC,MAAAzxC,SAAAf,EAAA,KAAAK,EAAAuG,KAAA4rC,MAAAxyC,GAAA2zD,EAAAwT,GAAA9mE,EAAAinE,YAAA1gE,MAAA,SAAA+sD,EAAAlvD,OAAAssB,EAAA7wB,EAAAi/B,EAAA9+B,EAAA47D,EAAA57D,GAAAszD,EAAAlvD,OAAA,GAAAhE,GAAA,OAAAswB,EAAA,SAAA4iC,EAAAC,KAAAtzD,EAAAJ,EAAAi/B,EAAA9+B,EAAA47D,EAAA57D,GAAAszD,EAAAC,IAAA,GAAAnzD,GAAA,OAAAH,CAAA,QAAAywB,GAAA,CAAAtsB,KAAAssB,EAAA6iC,GAAAtzD,EAAA,EAAAulF,GAAAtiF,UAAAqxF,QAAA,eAAAn0F,EAAAmG,KAAAu4B,EAAAv4B,KAAAsmC,MAAA,MAAAnc,EAAAnqB,KAAAtG,EAAAsG,KAAAg+D,IAAAxO,GAAAj3B,GAAA7+B,GAAAu7E,GAAAv7E,GAAA,eAAAN,EAAAm/B,EAAAnwB,KAAA3O,EAAA47D,EAAA98B,EAAAnwB,MAAA,GAAA3O,EAAA2vE,GAAA1vE,EAAAD,GAAA0xE,GAAA1xE,GAAAC,EAAAwhE,MAAAqY,iBACA75E,EAAAwhE,MAAAwO,aAAA,EAAAhwE,EAAAwhE,MAAAsY,eAAA,EAAA1R,GAAA33C,EAAA6zC,IAAA5kE,IAAA,MAAA+wB,EAAAgpC,SAAA15D,EAAA0wB,EAAAgpC,OAAAhpC,EAAAgpC,OAAA,MAAA15D,EAAAuuE,GAAA79C,GAAA1wB,IAAAyjE,GAAA9jE,IAAA+5D,OAAA15D,IAAA+rE,GAAA9rE,EAAA,gBAAAA,EAAAG,EAAA,KAAAolF,GAAAtiF,UAAA0kE,WAAA,SAAAxnE,GAAA,IAAAmG,KAAA4rC,MAAAzxC,QAAA6F,KAAAg+D,IAAAxO,GAAA,KAAAj3B,EAAAv4B,KAAAg+D,IAAAxO,GAAA0L,MAAA3iC,EAAAu8C,qBAAA,GAAA7b,GAAA1gC,EAAAu8C,mBAAA90E,QAAAu4B,EAAAw8C,uBAAAx8C,EAAAw8C,qBAAA,KAAAvqE,KAAAxK,KAAA,CAAAA,KAAA4rC,MAAAphC,KAAA3Q,EAAA,EAAAolF,GAAAtiF,UAAAwkE,WAAA,SAAAtnE,GAAAmG,KAAA4rC,MAAAosB,OAAAiB,GAAAj5D,KAAA4rC,MAAA/xC,GAAA,IAAAmG,KAAA4rC,MAAAzxC,QAAA6F,KAAAg+D,IAAAxO,KACA31D,EAAAmG,KAAAg+D,IAAAxO,GAAA0L,OAAArhE,EAAAi7E,qBAAAj7E,EAAAi7E,mBAAA,KAAAtqE,KAAAxK,MAAA,EAAAq7D,GAAA4jB,IAAA,IAAAU,GAAA,SAAA9lF,EAAA0+B,GAAAv4B,KAAAggF,QAAAnmF,EAAAmG,KAAAi8E,QAAA1jD,EAAA,IAAAA,EAAA,EAAAA,EAAA1+B,EAAAM,SAAAo+B,EAAA1+B,EAAA0+B,GAAA1c,OAAA7b,IAAA,EAAA2/E,GAAAhjF,UAAAmnD,MAAA,eAAA9jD,KAAA27E,kBAAA,CAAA37E,KAAA27E,mBAAA,UAAA9hF,EAAA,EAAAA,EAAAmG,KAAAggF,QAAA7lF,SAAAN,EAAAmG,KAAAggF,QAAAnmF,GAAAiqD,QAAA0hB,GAAAxlE,KAAA,WAAA2/E,GAAAhjF,UAAA2pC,KAAA,SAAAzsC,EAAA0+B,GAAA,OAAAv4B,KAAAi8E,QAAA31C,KAAAzsC,EAAA0+B,EAAA,EAAA8iC,GAAAskB,IAAA,IAAAsO,GAAA,EAAAvH,GAAA,SAAA7sF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,KAAA4G,gBAAA0mF,IAAA,WAAAA,GAAA7sF,EAAA0+B,EAAApO,EAAAzwB,EAAAN,GAAA,MACA+wB,MAAA,GAAAy0D,GAAA1kF,KAAA8F,KAAA,KAAA2+E,GAAA,KAAA3E,GAAA,aAAAh6E,KAAA2d,MAAAwM,EAAAnqB,KAAAuyD,UAAAvyD,KAAAqyD,WAAA,EAAAryD,KAAAo9E,UAAA,EAAAp9E,KAAAkuF,gBAAA,EAAAluF,KAAA++D,aAAA/+D,KAAA8+D,kBAAA30C,IAAA7wB,EAAA6wB,EAAA,GAAAnqB,KAAAyuE,IAAA4K,GAAAlvD,GAAAnqB,KAAA++C,QAAA,IAAA07B,GAAA,MAAAz6E,KAAAoY,KAAA61E,GAAAjuF,KAAA25E,WAAAphD,EAAAv4B,KAAAmuF,QAAAz0F,EAAAsG,KAAAsjE,UAAA,OAAAlqE,EAAA,YAAA4G,KAAA8P,QAAA,mBAAAjW,MAAAmG,KAAAs+E,WAAAzkF,IAAAkgF,GAAA/5E,KAAA,CAAAnC,KAAAssB,EAAA6iC,GAAA7iC,EAAAvf,KAAA/Q,IAAAmiF,GAAAh8E,KAAAq5E,GAAAlvD,GAAAozD,GAAA,EAAAmJ,GAAA/pF,UAAA48D,GAAAqlB,GAAAjiF,UAAA,CAAAa,YAAAkpF,GAAAhpF,KAAA,SAAA7D,EAAA0+B,EAAApO,KAAAnqB,KAAA8tF,MAAAj0F,EAAAmG,KAAA2d,MACA4a,EAAA1+B,EAAAswB,GAAAnqB,KAAA8tF,MAAA9tF,KAAA2d,MAAA3d,KAAA2d,MAAA3d,KAAAi0B,KAAAp6B,EAAA,EAAAogF,OAAA,SAAApgF,EAAA0+B,GAAA,QAAApO,EAAA,EAAAzwB,EAAA,EAAAA,EAAA6+B,EAAAp+B,SAAAT,EAAAywB,GAAAoO,EAAA7+B,GAAAy5D,OAAAnzD,KAAA6tF,YAAAh0F,EAAAmG,KAAA2d,MAAA4a,EAAApO,EAAA,EAAA+vD,OAAA,SAAArgF,EAAA0+B,GAAAv4B,KAAA4tF,YAAA/zF,EAAAmG,KAAA2d,MAAA4a,EAAA,EAAA61D,SAAA,SAAAv0F,GAAA,IAAA0+B,EAAA0kC,GAAAj9D,UAAA2d,MAAA3d,KAAA2d,MAAA3d,KAAAi0B,MAAA,WAAAp6B,EAAA0+B,IAAA0F,KAAApkC,GAAAmG,KAAAygF,gBAAA,EAAA4N,SAAAjZ,IAAA,SAAAv7E,GAAA,IAAA0+B,EAAAj/B,EAAA0G,KAAA2d,MAAA,GAAAwM,EAAAnqB,KAAA2d,MAAA3d,KAAAi0B,KAAA,EAAA0pD,GAAA39E,KAAA,CAAAnC,KAAA06B,EAAAy0B,GAAA1zD,EAAA6wB,EAAAkkC,EAAAruD,KAAAmqB,GAAAvf,KAAAzQ,QAAAyQ,KAAA5K,KAAAs+E,WAAAzkF,GAAAqqC,OAAA,WAAAu8B,MAAA,OAAAzgE,KAAAwvD,IACA6hB,GAAArxE,KAAAwvD,GAAA,KAAAwsB,GAAAh8E,KAAAq5E,GAAA9gD,GAAAglD,GAAA,IAAA5vB,aAAA,SAAA9zD,EAAA0+B,EAAApO,EAAAzwB,GAAA6+B,EAAAi2B,EAAAxuD,KAAAu4B,GAAApO,IAAAqkC,EAAAxuD,KAAAmqB,GAAAoO,EAAA8lD,GAAAr+E,KAAAnG,EAAA0+B,EAAApO,EAAAzwB,EAAA,EAAAk1D,SAAA,SAAA/0D,EAAA0+B,EAAApO,GAAAtwB,EAAAmjE,GAAAh9D,KAAAwuD,EAAAxuD,KAAAnG,GAAA20D,EAAAxuD,KAAAu4B,IAAA,WAAApO,EAAAtwB,EAAA,KAAAswB,EAAAtwB,EAAAokC,KAAA,IAAApkC,EAAAokC,KAAA9T,GAAAnqB,KAAAygF,gBAAA,EAAAtzB,QAAA,SAAAtzD,GAAA,OAAAA,EAAAmG,KAAAsuF,cAAAz0F,OAAA+Q,IAAA,EAAA0jF,cAAA,SAAAz0F,GAAA,GAAAsjE,GAAAn9D,KAAAnG,GAAA,OAAAw0D,EAAAruD,KAAAnG,EAAA,EAAA00F,cAAA,SAAA10F,GAAA,OAAAw7D,EAAAx7D,EAAA,EAAA20F,yBAAA,SAAA30F,GAAA,iBAAAA,MAAAw0D,EAAAruD,KAAAnG,IAAA,OAAA8nE,GAAA9nE,EAAA,EAAA40F,UAAA,kBAAAzuF,KAAAi0B,IAAA,EACAqpD,UAAA,kBAAAt9E,KAAA2d,KAAA,EAAAyvC,SAAA,kBAAAptD,KAAA2d,MAAA3d,KAAAi0B,KAAA,GAAA6rD,QAAA,SAAAjmF,GAAA,OAAA20D,EAAAxuD,KAAAnG,EAAA,EAAAo0D,UAAA,SAAAp0D,GAAA,IAAA0+B,EAAAv4B,KAAAyuE,IAAAwN,UAAA,aAAApiF,GAAA,QAAAA,EAAA0+B,EAAAy8B,KAAA,UAAAn7D,EAAA0+B,EAAA08B,OAAA,OAAAp7D,GAAA,MAAAA,IAAA,IAAAA,EAAA0+B,EAAAy0B,KAAAz0B,EAAA16B,MAAA,EAAAivD,eAAA,kBAAA9sD,KAAAyuE,IAAA7kE,MAAA,EAAAskD,kBAAA,kBAAAluD,KAAAyuE,IAAAvgB,mBAAA,EAAAwgC,UAAAtZ,IAAA,SAAAv7E,EAAA0+B,EAAApO,GAAAtwB,EAAA20D,EAAAxuD,KAAA,iBAAAnG,EAAAP,EAAAO,EAAA0+B,GAAA,GAAA1+B,GAAAmiF,GAAAh8E,KAAAq5E,GAAAx/E,EAAA,MAAAswB,EAAA,IAAAgkC,aAAAinB,IAAA,SAAAv7E,EACA0+B,EAAApO,GAAA,IAAAzwB,EAAA80D,EAAAxuD,KAAAnG,KAAA20D,EAAAxuD,KAAAu4B,GAAA1+B,GAAAmiF,GAAAh8E,KAAAq5E,GAAA3/E,EAAAG,GAAAswB,EAAA,IAAAwkE,gBAAAvZ,IAAA,SAAAv7E,EAAA0+B,EAAApO,GAAA4xD,GAAA/7E,KAAAwuD,EAAAxuD,KAAAnG,GAAA0+B,GAAAi2B,EAAAxuD,KAAAu4B,GAAApO,EAAA,IAAAykE,iBAAAxZ,IAAA,SAAAv7E,EAAA0+B,GAAA2jD,GAAAl8E,KAAA49D,GAAA59D,KAAAnG,GAAA0+B,EAAA,IAAAs2D,mBAAAzZ,IAAA,SAAAv7E,EAAA0+B,GAAA1+B,EAAAu/D,GAAAp5D,KAAAyuE,IAAA7kE,OAAA/P,GAAAqiF,GAAAl8E,KAAA49D,GAAA59D,KAAAnG,GAAA0+B,EAAA,IAAAu2D,cAAA1Z,IAAA,SAAAv7E,EAAA0+B,EAAApO,GAAA,GAAAtwB,EAAAM,OAAA,SAAAT,EAAA,GAAAN,EAAA,EAAAA,EAAAS,EAAAM,OAAAf,IAAAM,EAAAN,GAAA,IAAA2yD,EAAAyC,EAAAxuD,KAAAnG,EAAAT,GAAA67D,QAAAzG,EAAAxuD,KAAAnG,EAAAT,GAAA47D,MAAAn7D,EAAAT,GAAA67D,SAAA,MAAA18B,MAAAG,KAAAhL,IAAA7zB,EAAAM,OAAA,EAAA6F,KAAAyuE,IAAAC,YAAAsN,GAAAh8E,KAAAk5E,GAAAl5E,KAAAwvD,GAAA91D,EAAA6+B,GAAApO,EAAA,KAAA4kE,aAAA3Z,IAAA,SAAAv7E,EACA0+B,EAAApO,GAAA,IAAAzwB,EAAAsG,KAAAyuE,IAAA7kE,OAAArK,MAAA,GAAA7F,EAAA8Q,KAAA,IAAAuhD,EAAAyC,EAAAxuD,KAAAnG,GAAA20D,EAAAxuD,KAAAu4B,GAAA1+B,KAAAmiF,GAAAh8E,KAAAk5E,GAAAl5E,KAAAwvD,GAAA91D,IAAAS,OAAA,GAAAgwB,EAAA,IAAAs/B,aAAA,SAAA5vD,GAAA,QAAA0+B,EAAAv4B,KAAAyuE,IAAA7kE,OAAAugB,EAAAzwB,EAAA,EAAAA,EAAA6+B,EAAAp+B,OAAAT,IAAA,KAAAN,EAAA4jE,GAAAh9D,KAAAu4B,EAAA7+B,GAAAmE,OAAA06B,EAAA7+B,GAAAszD,MAAA7iC,MAAA0iB,OAAAzzC,IAAA,YAAAS,EAAAswB,IAAA8T,KAAApkC,GAAAmG,KAAAygF,gBAAA,EAAAuO,cAAA,SAAAn1F,GAAA,QAAA0+B,EAAA,GAAApO,EAAAnqB,KAAAyuE,IAAA7kE,OAAAlQ,EAAA,EAAAA,EAAAywB,EAAAhwB,OAAAT,IAAA,KAAAN,EAAA4jE,GAAAh9D,KAAAmqB,EAAAzwB,GAAAmE,OAAAssB,EAAAzwB,GAAAszD,OAAA,IAAAnzD,IAAAT,IAAA6kC,KAAApkC,GAAAmG,KAAAygF,kBAAAloD,EAAA7+B,GAAAN,CAAA,QAAAm/B,CAAA,EAAAwoD,iBAAA,SAAAlnF,EAAA0+B,EAAApO,GAAA,QAAAzwB,EACA,GAAAN,EAAA,EAAAA,EAAA4G,KAAAyuE,IAAA7kE,OAAAzP,OAAAf,IAAAM,EAAAN,GAAAS,EAAAmG,KAAAivF,kBAAAv1F,EAAA6+B,EAAApO,GAAA,WAAA8kE,kBAAA7Z,IAAA,SAAAv7E,EAAA0+B,EAAApO,GAAA,QAAAzwB,EAAA,GAAAN,EAAA4G,KAAAyuE,IAAAh1E,EAAA,EAAAA,EAAAL,EAAAwQ,OAAAzP,OAAAV,IAAA,KAAAszD,EAAA3zD,EAAAwQ,OAAAnQ,GAAAC,EAAAD,GAAA,CAAAoE,KAAAkvD,EAAAlvD,OAAAmvD,GAAAD,EAAAC,KAAApiD,KAAA5K,KAAAs+E,WAAAzkF,EAAAJ,IAAAyqC,OAAA/Z,EAAA,IAAAtwB,EAAA0+B,GAAA,OAAAA,EAAA,CAAA1+B,EAAA,GAAAT,EAAA+wB,EAAA7wB,EAAA0G,KAAA2d,MAAA,OAAAlkB,EAAA,EAAAA,EAAAC,EAAAS,OAAAV,IAAA,KAAAi0D,EAAAh0D,EAAAD,GAAAszD,EAAA0sB,GAAA/rB,EAAA7vD,KAAAssB,EAAA/wB,GAAA,IAAAk0D,EAAAmsB,GAAAH,GAAA5rB,GAAAvjC,EAAA/wB,GAAA+wB,EAAAujC,EAAAV,GAAA5zD,EAAAk0D,EAAA,UAAA/0B,GAAAm1B,EAAA1tD,KAAAyuE,IAAA7kE,OAAAnQ,GAAAi0D,EAAA,EAAAiB,EAAAjB,EAAAsH,KAAAtH,EAAAuH,QAAAp7D,EAAAJ,GAAA,IAAAsyD,EAAA2B,EAAAJ,EAAAP,EAAAW,EAAAX,EAAAO,IAAAzzD,EAAAJ,GAAA,IAAAsyD,EAAAgB,IAAA,CAAAlzD,EAAA,IAAAu/E,GAAAv/E,EAAAmG,KAAAyuE,IAAAC,UAAA,CAAAn2C,EACA1+B,EAAA,IAAAA,EAAAH,EAAAS,OAAA,KAAAN,MAAA8jF,GAAA39E,KAAAtG,EAAAG,IAAA0+B,EAAA8jD,GAAAr8E,KAAAu4B,GAAAv4B,KAAAwvD,IAAAyhB,GAAAjxE,KAAAwvD,GAAA,IAAA0/B,KAAA9Z,IAAA,WAAA6I,GAAAj+E,KAAA,WAAAmvF,KAAA/Z,IAAA,WAAA6I,GAAAj+E,KAAA,WAAAovF,cAAAha,IAAA,WAAA6I,GAAAj+E,KAAA,cAAAqvF,cAAAja,IAAA,WAAA6I,GAAAj+E,KAAA,cAAAsvF,aAAA,SAAAz1F,GAAAmG,KAAA8P,OAAAjW,CAAA,EAAA01F,aAAA,kBAAAvvF,KAAA8P,MAAA,EAAA0/E,YAAA,mBAAA31F,EAAAmG,KAAA++C,QAAAxmB,EAAA,EAAApO,EAAA,EAAAzwB,EAAA,EAAAA,EAAAG,EAAAo5B,KAAA94B,OAAAT,IAAAG,EAAAo5B,KAAAv5B,GAAAkQ,UAAA2uB,EAAA,IAAA7+B,EAAA,EAAAA,EAAAG,EAAA6gF,OAAAvgF,OAAAT,IAAAG,EAAA6gF,OAAAhhF,GAAAkQ,UAAAugB,EAAA,OAAA+kE,KAAA32D,EACA42D,KAAAhlE,EAAA,EAAAo1D,aAAA,eAAA1lF,EAAAmG,UAAA++C,QAAA,IAAA07B,GAAAz6E,KAAA++C,SAAAo7B,GAAAn6E,MAAA,SAAAu4B,GAAA,OAAAA,EAAAwmB,QAAAllD,EAAAklD,OAAA,QAAA0wC,UAAA,WAAAzvF,KAAAkuF,gBAAAluF,KAAA0vF,kBAAA,IAAAA,iBAAA,SAAA71F,OAAAmG,KAAA++C,QAAAi8B,OAAAh7E,KAAA++C,QAAAk8B,UAAAj7E,KAAA++C,QAAA+7B,WAAA,aAAA96E,KAAA++C,QAAAm8B,UAAA,EAAAyU,QAAA,SAAA91F,GAAA,OAAAmG,KAAA++C,QAAAm8B,aAAArhF,GAAAmG,KAAAkuF,gBAAA,EAAA0B,WAAA,kBAAA38D,KAAA2oD,GAAA57E,KAAA++C,QAAA9rB,MAAAynD,OAAAkB,GAAA57E,KAAA++C,QAAA27B,QAAA,EACAmV,WAAA,SAAAh2F,GAAA,IAAA0+B,EAAAv4B,KAAA++C,QAAA,IAAA07B,GAAAz6E,KAAA++C,SAAAxmB,EAAAtF,KAAA2oD,GAAA/hF,EAAAo5B,KAAA1zB,MAAA,YAAAg5B,EAAAmiD,OAAAkB,GAAA/hF,EAAA6gF,OAAAn7E,MAAA,aAAAuwF,gBAAA1a,IAAA,SAAAv7E,EAAA0+B,EAAApO,GAAA,OAAAu0D,GAAA1+E,KAAAnG,EAAA,mBAAAH,GAAA,IAAAN,EAAAM,EAAAqtE,gBAAArtE,EAAAqtE,cAAA,IAAA3tE,EAAAm/B,GAAApO,MAAAxC,GAAAvuB,KAAAM,EAAAqtE,cAAA,qBAAAgpB,YAAA3a,IAAA,SAAAv7E,GAAA,IAAA0+B,EAAAv4B,UAAAtC,MAAA,SAAAysB,KAAA48C,eAAA58C,EAAA48C,cAAAltE,IAAA6kF,GAAAnmD,EAAApO,EAAA,qBAAAA,EAAA48C,cAAAltE,GAAA,KAAA8tB,GAAAwC,EAAA48C,iBAAA58C,EAAA48C,cAAA,MACA,kBAAAipB,SAAA,SAAAn2F,GAAA,oBAAAA,EAAA,KAAAsjE,GAAAn9D,KAAAnG,GAAA,gBAAA0+B,EAAA1+B,IAAAw0D,EAAAruD,KAAAnG,GAAA,IAAAA,EAAA,oBAAA0+B,EAAA88B,EAAAx7D,GAAA,MAAA0+B,EAAA,mBAAAnwB,KAAAmwB,EAAA03D,OAAAp2F,EAAA+Q,KAAA/Q,EAAA+Q,KAAAm8D,cAAAltE,EAAAktE,cAAAxI,UAAA1kE,EAAA0kE,UAAAD,QAAAzkE,EAAAykE,QAAAkI,UAAA3sE,EAAA2sE,UAAAgB,QAAA3tE,EAAA2tE,QAAA,EAAA0oB,aAAA9a,IAAA,SAAAv7E,EAAA0+B,EAAApO,GAAA,OAAAu0D,GAAA1+E,KAAAnG,EAAA,UAAA0+B,EAAA,2BAAA7+B,GAAA,IAAAN,EAAA,QAAAm/B,EAAA,0BAAAA,EAAA,oBAAAA,EAAA,6BAAA7+B,EAAAN,GAAA,IAAAq/B,EAAAtO,GAAA1qB,KAAA/F,EAAAN,IAAA,SACAM,EAAAN,IAAA,IAAA+wB,CAAA,MAAAzwB,EAAAN,GAAA+wB,EAAA,eAAAgmE,gBAAA/a,IAAA,SAAAv7E,EAAA0+B,EAAApO,GAAA,OAAAu0D,GAAA1+E,KAAAnG,EAAA,UAAA0+B,EAAA,2BAAA7+B,GAAA,IAAAN,EAAA,QAAAm/B,EAAA,0BAAAA,EAAA,oBAAAA,EAAA,0BAAA9+B,EAAAC,EAAAN,GAAA,GAAAK,EAAA,SAAA0wB,EAAAzwB,EAAAN,GAAA,cAAA2zD,EAAAtzD,EAAAkX,MAAA8nB,EAAAtO,IAAA,IAAA4iC,EAAA,aAAAW,EAAAX,EAAAl8C,MAAAk8C,EAAA,GAAA5yD,OAAAT,EAAAN,GAAAK,EAAA8F,MAAA,EAAAwtD,EAAAl8C,QAAAk8C,EAAAl8C,OAAA68C,GAAAj0D,EAAAU,OAAA,QAAAV,EAAA8F,MAAAmuD,IAAA,kCAAA0iC,cAAAhb,IAAA,SAAAv7E,EAAA0+B,EAAApO,GAAA,OAAAmC,GAAAtsB,KAAAnG,EAAA0+B,EAAApO,EAAA,IAAAkmE,iBAAA,SAAAx2F,KAAAiqD,OAAA,EACAiU,SAAA,SAAAl+D,EAAA0+B,EAAApO,GAAA,OAAA20D,GAAA9+E,KAAAwuD,EAAAxuD,KAAAnG,GAAA20D,EAAAxuD,KAAAu4B,GAAApO,OAAAnf,MAAA,UAAAslF,YAAA,SAAAz2F,EAAA0+B,KAAA,CAAA2mD,aAAA3mD,IAAA,MAAAA,EAAA8/B,SAAA9/B,EAAAk3B,OAAAl3B,GAAAqoC,WAAAroC,KAAAqoC,WAAAG,gBAAA,EAAAge,OAAAxmD,KAAAwmD,OAAAtX,kBAAAlvC,KAAAkvC,mBAAA5tE,EAAA20D,EAAAxuD,KAAAnG,GAAA,OAAAilF,GAAA9+E,KAAAnG,IAAA0+B,EAAA,aAAAg4D,YAAA,SAAA12F,KAAA20D,EAAAxuD,KAAAnG,GAAA,IAAA0+B,EAAA,GAAApO,EAAAkkC,EAAAruD,KAAAnG,EAAAuO,MAAAs4D,YAAA,GAAAv2C,EAAA,QAAAzwB,EAAA,EAAAA,EAAAywB,EAAAhwB,SAAAT,EAAA,KAAAN,EAAA+wB,EAAAzwB,IAAA,MAAAN,EAAAyE,MAAAzE,EAAAyE,MAAAhE,EAAAyyB,MAAA,MAAAlzB,EAAA4zD,IAAA5zD,EAAA4zD,IAAAnzD,EAAAyyB,KAAAiM,EAAA/tB,KAAApR,EAAAknE,OAAAzkD,QACAziB,EAAAknE,OAAA,QAAA/nC,CAAA,EAAAsnD,UAAA,SAAAhmF,EAAA0+B,EAAApO,GAAAtwB,EAAA20D,EAAAxuD,KAAAnG,GAAA0+B,EAAAi2B,EAAAxuD,KAAAu4B,GAAA,IAAA7+B,EAAA,GAAAN,EAAAS,EAAAuO,KAAApI,KAAAtC,KAAA7D,EAAAuO,KAAAmwB,EAAAnwB,KAAA,YAAA3O,GAAA,GAAAA,IAAAinE,YAAA,QAAA3T,EAAA,EAAAA,EAAAtzD,EAAAU,OAAA4yD,IAAA,KAAAW,EAAAj0D,EAAAszD,GAAA,MAAAW,EAAAV,IAAA5zD,GAAAS,EAAAuO,MAAAvO,EAAAyyB,IAAAohC,EAAAV,IAAA,MAAAU,EAAA7vD,MAAAzE,GAAAS,EAAAuO,MAAA,MAAAslD,EAAA7vD,MAAAzE,GAAAm/B,EAAAnwB,MAAAslD,EAAA7vD,MAAA06B,EAAAjM,IAAAnC,MAAAujC,EAAA4S,SAAA5mE,EAAA8Q,KAAAkjD,EAAA4S,OAAAzkD,QAAA6xC,EAAA4S,OAAA,GAAAlnE,CAAA,WAAAM,CAAA,EAAA82F,YAAA,eAAA32F,EAAA,GAAAmG,KAAAtC,MAAA,SAAA66B,GAAA,GAAAA,IAAAmoC,YAAA,QAAAv2C,EAAA,EAAAA,EAAAoO,EAAAp+B,SAAAgwB,EAAA,MAAAoO,EAAApO,GAAAtsB,MAAAhE,EAAA2Q,KAAA+tB,EAAApO,GAAAm2C,OAAA,WAAAzmE,CAAA,EAAA42F,aAAA,SAAA52F,GAAA,IAAA0+B,EACApO,EAAAnqB,KAAA2d,MAAAjkB,EAAAsG,KAAAygF,gBAAAtmF,OAAA6F,KAAAtC,MAAA,SAAAtE,OAAAwR,KAAAzQ,OAAAT,EAAA,GAAAN,EAAAS,EAAA,OAAA0+B,EAAA1+B,GAAA,EAAAA,GAAAT,IAAA+wB,CAAA,WAAAqkC,EAAAxuD,KAAA1G,EAAA6wB,EAAAoO,GAAA,EAAAm4D,aAAA,SAAA72F,KAAA20D,EAAAxuD,KAAAnG,GAAA,IAAA0+B,EAAA1+B,EAAAyyB,GAAA,GAAAzyB,EAAAuO,KAAApI,KAAA2d,OAAA,EAAA9jB,EAAAyyB,GAAA,aAAAnC,EAAAnqB,KAAAygF,gBAAAtmF,OAAA6F,KAAAtC,KAAAsC,KAAA2d,MAAA9jB,EAAAuO,MAAA,SAAA1O,GAAA6+B,GAAA7+B,EAAAkR,KAAAzQ,OAAAgwB,CAAA,WAAAoO,CAAA,EAAAmF,KAAA,SAAA7jC,GAAA,IAAA0+B,EAAA,IAAAmuD,GAAAzpB,GAAAj9D,UAAA2d,MAAA3d,KAAA2d,MAAA3d,KAAAi0B,MAAAj0B,KAAA25E,WAAA35E,KAAA2d,MAAA3d,KAAAmuF,QAAAnuF,KAAAsjE,WAAA/qC,EAAAg6B,UAAAvyD,KAAAuyD,UAAAh6B,EAAA85B,WAAAryD,KAAAqyD,WACA95B,EAAAk2C,IAAAzuE,KAAAyuE,IAAAl2C,EAAAzoB,QAAA,EAAAjW,IAAA0+B,EAAAwmB,QAAA47B,UAAA36E,KAAA++C,QAAA47B,UAAApiD,EAAAs3D,WAAA7vF,KAAA4vF,eAAA,OAAAr3D,CAAA,EAAAo4D,UAAA,SAAA92F,SAAA,QAAA0+B,EAAAv4B,KAAA2d,MAAAwM,EAAAnqB,KAAA2d,MAAA3d,KAAAi0B,KAAA,MAAAp6B,EAAAgE,MAAAhE,EAAAgE,KAAA06B,MAAA1+B,EAAAgE,MAAA,MAAAhE,EAAAmzD,IAAAnzD,EAAAmzD,GAAA7iC,MAAAtwB,EAAAmzD,IAAAz0B,EAAA,IAAAmuD,GAAAzpB,GAAAj9D,KAAAu4B,EAAApO,GAAAtwB,EAAAg1D,MAAA7uD,KAAA25E,WAAAphD,EAAAv4B,KAAAmuF,QAAAnuF,KAAAsjE,WAAAzpE,EAAAwgF,aAAA9hD,EAAAwmB,QAAA/+C,KAAA++C,UAAA/+C,KAAAo6E,SAAAp6E,KAAAo6E,OAAA,KAAA5vE,KAAA,CAAAwzD,IAAAzlC,EAAA8hD,WAAAxgF,EAAAwgF,aAAA9hD,EAAA6hD,OAAA,EAAApc,IAAAh+D,KAAA0/E,UAAA,EAAArF,WAAAxgF,EAAAwgF,aAAAxgF,EAAA+lF,GAAA5/E,MACA,IAAAmqB,EAAA,EAAAA,EAAAtwB,EAAAM,OAAAgwB,IAAA,KAAAzwB,EAAAG,EAAAswB,GAAA/wB,EAAAM,EAAA4sC,OAAA7sC,EAAA8+B,EAAAunD,QAAA1mF,EAAAyE,MAAAzE,EAAAm/B,EAAAunD,QAAA1mF,EAAA4zD,IAAA2B,EAAAl1D,EAAAL,KAAAK,EAAAqlF,GAAAvmD,EAAA9+B,EAAAL,EAAAM,EAAAuiF,QAAAviF,EAAAuiF,QAAAjxE,MAAAtR,EAAAsmF,QAAAx1E,KAAA/Q,KAAAoiB,OAAAniB,EAAA,QAAA6+B,CAAA,EAAAq4D,UAAA,SAAA/2F,gBAAA2sF,IAAA3sF,IAAAmkE,KAAA,GAAAh+D,KAAAo6E,OAAA,QAAA7hD,EAAA,EAAAA,EAAAv4B,KAAAo6E,OAAAjgF,SAAAo+B,EAAA,GAAAv4B,KAAAo6E,OAAA7hD,GAAAylC,KAAAnkE,EAAA,CAAAmG,KAAAo6E,OAAApiB,OAAAz/B,EAAA,GAAA1+B,EAAA+2F,UAAA5wF,MAAA+/E,GAAAH,GAAA5/E,OAAA,SAAAnG,EAAAklD,SAAA/+C,KAAA++C,QAAA,KAAA50B,EAAA,CAAAtwB,EAAAue,IAAA+hE,GAAAtgF,GAAA,SAAAH,GAAA,OAAAywB,EAAA3f,KAAA9Q,EAAA0e,GAAA,OAAAve,EAAAklD,QAAA,IAAA07B,GAAA,MAAA5gF,EAAAklD,QAAA9rB,KAAA2oD,GAAA57E,KAAA++C,QAAA9rB,KAAA9I,GACAtwB,EAAAklD,QAAA27B,OAAAkB,GAAA57E,KAAA++C,QAAA27B,OAAAvwD,EAAA,GAAA0mE,eAAA,SAAAh3F,GAAAsgF,GAAAn6E,KAAAnG,EAAA,EAAAsyD,QAAA,kBAAAnsD,KAAA6uD,IAAA,EAAAiiC,UAAA,kBAAA9wF,KAAAwvD,EAAA,EAAA8uB,WAAA,SAAAzkF,GAAA,OAAAmG,KAAAmuF,QAAAt0F,EAAAmT,MAAAhN,KAAAmuF,SAAA7F,GAAAzuF,EAAA,EAAA4mF,cAAA,kBAAAzgF,KAAAmuF,SAAA,MAAA4C,aAAA3b,IAAA,SAAAv7E,GAAA,OAAAA,MAAA,OAAAA,GAAAmG,KAAAsjE,YAAAtjE,KAAAsjE,UAAAzpE,EAAAmG,KAAAtC,MAAA,SAAA66B,GAAA,OAAAA,EAAA6hC,MAAA,QAAAp6D,KAAAwvD,IAAAgrB,GAAAx6E,KAAAwvD,IAAA,MAAAk3B,GAAA/pF,UAAAq0F,SAAAtK,GAAA/pF,UAAAe,KAAA,QAAAyiF,GAAA,EAAAgH,IAAA,EAAAvF,GAAA,WACA,sfACA,yEAAAj3D,GAAA,KAAAA,QAAAi3D,GAAAj3D,GAAA,IAAAi3D,GAAAj3D,GAAA,IAAA5rB,OAAA4rB,IAAA,QAAAsmE,GAAA,OAAAA,QAAArP,GAAAqP,IAAAlyF,OAAAoC,aAAA8vF,IAAA,QAAAC,GAAA,MAAAA,QAAAtP,GAAAsP,GAAA,KAAAtP,GAAAsP,GAAA,WAAAA,GAAA,IAAA7O,GAAA,CAAA8O,MAAA,CAAAC,KAAA,aAAAC,MAAA,cAAArhC,GAAA,WAAAE,KAAA,aAAAM,IAAA,YAAAF,KAAA,mBAAAH,OAAA,WAAAE,SAAA,aAAAihC,OAAA,eAAAC,UAAA,kDAAA5gC,IAAA,sCACAF,MAAA,mBAAA+gC,OAAA,kBAAA5gC,IAAA,mBAAA6gC,UAAA,obACA,iLAAA/P,YAAA,SAAAgQ,OAAA,mTACA,qBAAAC,WAAA,+dACA,qPAAAjQ,YAAA,qBAAAW,GAAA,WAAAtmB,GAAAsmB,GAAAsP,WAAAtP,GAAAoP,UAAA,IAAA3O,GAAA,CAAA8O,UAAAvU,GAAAwU,gBAAA,SAAAh4F,GAAA,OAAAA,EAAAs0D,aAAAt0D,EAAAo0D,UAAA,UAAAp0D,EAAAo0D,UAAA,QAAAsvB,GAAA,EAAAuU,SAAA,SAAAj4F,GAAA,OAAAyoF,GAAAzoF,GAAA,SAAA0+B,GAAA,GAAAA,EAAAlS,QAAA,KAAA8D,EACAkkC,EAAAx0D,EAAAmkE,IAAAzlC,EAAAy8B,KAAA5sD,MAAAwC,KAAAzQ,OAAA,OAAAo+B,EAAAy8B,KAAA1oC,IAAAnC,GAAAoO,EAAAy8B,KAAA5sD,KAAAvO,EAAAuzD,WAAA,CAAAvvD,KAAA06B,EAAAy8B,KAAAhI,GAAA1zD,EAAAi/B,EAAAy8B,KAAA5sD,KAAA,OAAAvK,KAAA06B,EAAAy8B,KAAAhI,GAAA1zD,EAAAi/B,EAAAy8B,KAAA5sD,KAAA+hB,GAAA,QAAAtsB,KAAA06B,EAAA16B,OAAAmvD,GAAAz0B,EAAAy0B,KAAA,KAAA+kC,WAAA,SAAAl4F,GAAA,OAAAyoF,GAAAzoF,GAAA,SAAA0+B,GAAA,OAAA16B,KAAAvE,EAAAi/B,EAAA16B,OAAAuK,KAAA,GAAA4kD,GAAAwB,EAAA30D,EAAAmkE,IAAA1kE,EAAAi/B,EAAAy0B,KAAA5kD,KAAA,WAAA4pF,YAAA,SAAAn4F,GAAA,OAAAyoF,GAAAzoF,GAAA,SAAA0+B,GAAA,OAAA16B,KAAAvE,EAAAi/B,EAAA16B,OAAAuK,KAAA,GAAA4kD,GAAAz0B,EAAA16B,OAAA,KAAAo0F,mBAAA,SAAAp4F,GAAA,OAAAyoF,GAAAzoF,GAAA,SAAA0+B,GAAA,IAAApO,EAAAtwB,EAAAq4F,WAAA35D,EAAAy8B,KAAA,OAAA1C,IAAA,SAAAz0D,KAAAhE,EAAAguF,WAAA,CAAAxvE,KAAA,EACAi6C,IAAAnoC,GAAA,OAAA6iC,GAAAz0B,EAAA16B,OAAA,KAAAs0F,oBAAA,SAAAt4F,GAAA,OAAAyoF,GAAAzoF,GAAA,SAAA0+B,GAAA,IAAApO,EAAAtwB,EAAAq4F,WAAA35D,EAAAy8B,KAAA,OAAA1C,IAAA,EAAAnoC,EAAAtwB,EAAAguF,WAAA,CAAAxvE,KAAAxe,EAAAu5D,QAAAsd,QAAAje,YAAA,IAAAH,IAAAnoC,GAAA,cAAAtsB,KAAA06B,EAAA16B,OAAAmvD,GAAA7iC,EAAA,KAAA+kE,KAAA,SAAAr1F,GAAA,OAAAA,EAAAq1F,MAAA,EAAAC,KAAA,SAAAt1F,GAAA,OAAAA,EAAAs1F,MAAA,EAAAC,cAAA,SAAAv1F,GAAA,OAAAA,EAAAu1F,eAAA,EAAAC,cAAA,SAAAx1F,GAAA,OAAAA,EAAAw1F,eAAA,EAAA+C,WAAA,SAAAv4F,GAAA,OAAAA,EAAA80F,gBAAAr1F,EAAAO,EAAAyjF,YAAA,KAAA+U,SAAA,SAAAx4F,GAAA,OAAAA,EAAA80F,gBAAAr1F,EAAAO,EAAAuzD,YAAA,EACAklC,YAAA,SAAAz4F,GAAA,OAAAA,EAAAg1F,oBAAA,SAAAt2D,GAAA,OAAAoqD,GAAA9oF,EAAA0+B,EAAAy8B,KAAA5sD,KAAA,IAAA87B,OAAA,QAAAu4C,KAAA,KAAA8V,iBAAA,SAAA14F,GAAA,OAAAA,EAAAg1F,oBAAA,SAAAt2D,GAAA,OAAAqqD,GAAA/oF,EAAA0+B,EAAAy8B,KAAA,IAAA9wB,OAAA,QAAAu4C,KAAA,KAAA+V,UAAA,SAAA34F,GAAA,OAAAA,EAAAg1F,oBAAA,SAAAt2D,OAAAy8B,KAAA5sD,KAAA,IAAA+hB,EAAAkkC,EAAAx0D,EAAAmkE,IAAAzlC,GAAA,IAAA7+B,EAAAywB,EAAA,QAAA/wB,IAAAmoE,GAAA7nE,GAAA,IAAAA,EAAAN,EAAAktC,KAAA,MAAAl+B,KAAA1O,GAAAywB,IAAAoO,EAAA88B,EAAA37D,IAAA,OAAA+oF,IAAA,EAAA5oF,EAAAswB,EAAAoO,GAAA,MAAA2L,OAAA,QAAAu4C,MAAA,KAAAgW,YAAA,SAAA54F,GAAA,OAAAA,EAAAg1F,oBAAA,SAAAt2D,KACA1+B,EAAAk4D,aAAAx5B,EAAAy8B,KAAA,OAAA1C,IAAA,SAAAz4D,EAAAguF,WAAA,CAAAxvE,KAAAxe,EAAAu5D,QAAAsd,QAAAje,YAAA,IAAAH,IAAA/5B,GAAA,SAAAkzD,GAAA,EAAAiH,WAAA,SAAA74F,GAAA,OAAAA,EAAAg1F,oBAAA,SAAAt2D,KAAA1+B,EAAAk4D,aAAAx5B,EAAAy8B,KAAA,OAAA1C,IAAA,SAAAz4D,EAAAguF,WAAA,CAAAxvE,KAAA,EAAAi6C,IAAA/5B,GAAA,SAAAkzD,GAAA,EAAAkH,gBAAA,SAAA94F,GAAA,OAAAA,EAAAg1F,oBAAA,SAAAt2D,GAAA,IAAApO,EAAAtwB,EAAAk4D,aAAAx5B,EAAAy8B,KAAA,OAAA1C,IAAA,EAAAnoC,EAAAtwB,EAAAguF,WAAA,CAAAxvE,KAAA,EAAAi6C,IAAAnoC,GAAA,cAAAA,EAAAmC,GAAAzyB,EAAAszD,QAAAhjC,EAAA/hB,MAAAmgD,OAAA,MAAAq6B,GAAA/oF,EAAA0+B,EAAAy8B,MAAA7qC,CAAA,GAAAshE,GAAA,EAAAmH,SAAA,SAAA/4F,GAAA,OAAAA,EAAAg5F,OAAA,EACA,SAAAC,WAAA,SAAAj5F,GAAA,OAAAA,EAAAg5F,MAAA,WAAAE,SAAA,SAAAl5F,GAAA,OAAAA,EAAAg5F,OAAA,WAAAG,WAAA,SAAAn5F,GAAA,OAAAA,EAAAg5F,MAAA,WAAAI,WAAA,SAAAp5F,GAAA,OAAAA,EAAAq5F,OAAA,WAAAC,YAAA,SAAAt5F,GAAA,OAAAA,EAAAq5F,MAAA,WAAAE,aAAA,SAAAv5F,GAAA,OAAAA,EAAAq5F,OAAA,aAAAG,cAAA,SAAAx5F,GAAA,OAAAA,EAAAq5F,MAAA,aAAAI,WAAA,SAAAz5F,GAAA,OAAAA,EAAAq5F,OAAA,WAAAK,aAAA,SAAA15F,GAAA,OAAAA,EAAAq5F,MAAA,YAAAM,YAAA,SAAA35F,GAAA,OAAAA,EAAAq5F,OAAA,EACA,UAAAO,YAAA,SAAA55F,GAAA,OAAAA,EAAAq5F,MAAA,WAAAQ,cAAA,SAAA75F,GAAA,OAAAA,EAAA85F,SAAA,gBAAAC,aAAA,SAAA/5F,GAAA,OAAAA,EAAA85F,QAAA,WAAAE,cAAA,SAAAh6F,GAAA,OAAAA,EAAA85F,SAAA,WAAAG,aAAA,SAAAj6F,GAAA,OAAAA,EAAA85F,QAAA,WAAAI,eAAA,SAAAl6F,GAAA,OAAAA,EAAA85F,SAAA,YAAAK,cAAA,SAAAn6F,GAAA,OAAAA,EAAA85F,QAAA,YAAAM,WAAA,SAAAp6F,GAAA,OAAAA,EAAAq6F,gBAAA,UAAAC,WAAA,SAAAt6F,GAAA,OAAAA,EAAAq6F,gBAAA,QACAE,WAAA,SAAAv6F,GAAA,OAAAA,EAAAq6F,gBAAA,aAAAG,UAAA,SAAAx6F,GAAA,OAAAA,EAAAknF,iBAAA,OAAAuT,cAAA,SAAAz6F,GAAA,QAAA0+B,EAAA,GAAApO,EAAAtwB,EAAAizD,iBAAApzD,EAAAG,EAAAuI,QAAAo9D,QAAApmE,EAAA,EAAAA,EAAA+wB,EAAAhwB,OAAAf,IAAA,KAAAK,EAAA0wB,EAAA/wB,GAAAyE,OAAApE,EAAAu/D,GAAAn/D,EAAAszD,QAAA1zD,EAAA2O,MAAA3O,EAAA6yB,GAAA5yB,GAAA6+B,EAAA/tB,KAAA4N,GAAA1e,EAAAD,EAAAC,GAAA,CAAAG,EAAAo1F,kBAAA12D,EAAA,EAAAg8D,WAAA,SAAA16F,KAAAq0D,oBAAAr0D,EAAAq6F,gBAAA,OAAAr6F,EAAAkwD,YAAA,cAAAyqC,eAAA,SAAA36F,GAAA,OAAAo7E,GAAAp7E,GAAA,mBAAA0+B,EAAA1+B,EAAAizD,iBAAA3iC,EAAA,GAAAzwB,EAAA,EAAAA,EAAA6+B,EAAAp+B,OAAAT,IAAA,GAAA6+B,EAAA7+B,GAAA2sB,QAAA,KAAAjtB,EACAm/B,EAAA7+B,GAAAs7D,KAAAv7D,EAAA40D,EAAAx0D,EAAAmkE,IAAA5kE,EAAAgP,MAAAwC,KAAA,GAAAnR,EAAA,GAAAL,EAAAkzB,IAAA7yB,EAAAU,SAAAf,EAAA,IAAAE,EAAAF,EAAAgP,KAAAhP,EAAAkzB,GAAA,MAAAlzB,EAAAkzB,GAAAlzB,EAAA,IAAAE,EAAAF,EAAAgP,KAAAhP,EAAAkzB,GAAA,GAAAzyB,EAAA8zD,aAAAl0D,EAAAqX,OAAA1X,EAAAkzB,GAAA,GAAA7yB,EAAAqX,OAAA1X,EAAAkzB,GAAA,GAAAhzB,EAAAF,EAAAgP,KAAAhP,EAAAkzB,GAAA,GAAAlzB,EAAA,sBAAAA,EAAAgP,KAAAvO,EAAAmkE,IAAArgD,MAAA,KAAAovC,EAAAsB,EAAAx0D,EAAAmkE,IAAA5kE,EAAAgP,KAAA,GAAAwC,KAAAmiD,IAAA3zD,EAAA,IAAAE,EAAAF,EAAAgP,KAAA,GAAAvO,EAAA8zD,aAAAl0D,EAAAqX,OAAA,GAAAjX,EAAAmkE,IAAAyiB,gBAAA1zB,EAAAj8C,OAAAi8C,EAAA5yD,OAAA,GAAAb,EAAAF,EAAAgP,KAAA,EAAA2kD,EAAA5yD,OAAA,GAAAf,EAAA,eAAA+wB,EAAA3f,KAAA,IAAAuhD,EAAA3yD,KAAA,CAAAS,EAAAi1F,cAAA3kE,EAAA,KAAAsqE,iBAAA,SAAA56F,GAAA,OAAAo7E,GAAAp7E,GAAA,mBAAA0+B,EAAA1+B,EAAAizD,iBACA3iC,EAAAoO,EAAAp+B,OAAA,KAAAgwB,MAAAtwB,EAAA8zD,aAAA9zD,EAAAmkE,IAAAyiB,gBAAAloD,EAAApO,GAAA8qC,OAAA18B,EAAApO,GAAA6qC,KAAA,UAAAz8B,EAAA1+B,EAAAizD,iBAAA,IAAA3iC,EAAA,EAAAA,EAAAoO,EAAAp+B,OAAAgwB,IAAAtwB,EAAA66F,WAAAn8D,EAAApO,GAAAtsB,OAAAuK,KAAA,SAAA6oE,GAAAp3E,EAAA,KAAA86F,SAAA,SAAA96F,GAAA,OAAAA,EAAAknF,iBAAA,eAAA6T,gBAAA,SAAA/6F,GAAA,OAAAA,EAAA+6F,iBAAA,GAAAzR,GAAA,IAAA6D,GAAArD,GAAA,KAAAU,GAAA,SAAAxqF,EAAA0+B,EAAApO,GAAAnqB,KAAA2jC,KAAA9pC,EAAAmG,KAAAgB,IAAAu3B,EAAAv4B,KAAA87D,OAAA3xC,CAAA,EAAAk6D,GAAA1nF,UAAA27B,QAAA,SAAAz+B,EAAA0+B,EAAApO,GAAA,OAAAnqB,KAAA2jC,KAAA,IAAA9pC,GAAA,GAAA80D,EAAAp2B,EAAAv4B,KAAAgB,MAAAmpB,GAAAnqB,KAAA87D,MAAA,MAAAsoB,GAAAD,GAAA8B,GAAA,CAAA3mF,SAAA,qCACAmnF,GAAA,GAAAW,GAAA,GAAAZ,EAAAqO,SAAApO,GAAAD,EAAAsO,eAAA1N,GAAA,IAAAE,GAAA,GAAAd,EAAAuO,eAAA,SAAAl7F,GAAA,OAAAytF,GAAA98E,KAAA3Q,EAAA,MAAA0uF,GAAA,KAAAyM,EAAA,SAAAn7F,GAAAmG,KAAAwvD,GAAA31D,EAAAmG,KAAAi1F,eAAAj1F,KAAAk1F,iBAAAl1F,KAAAm1F,cAAAn1F,KAAAo1F,gBAAA,KAAAp1F,KAAAq1F,QAAA,IAAArO,GAAAhnF,KAAAs1F,UAAA,KAAAt1F,KAAAu1F,aAAA,EAAAv1F,KAAAw1F,eAAA,MAAAR,EAAAr4F,UAAAuZ,KAAA,SAAArc,GAAA,SAAA0+B,EAAAm1B,GAAA,IAAAA,IAAA3xD,OAAA2xD,MAAAviB,WAAA,IAAAuiB,GAAAX,EAAA,6CAAAttD,KAAAiuD,EAAA8D,WAAA,wBAAArnC,EAAAujC,GAAA,GAAAn1B,EAAAm1B,KAAAkN,EAAAnhE,EACAi0D,GAAA,IAAAj0D,EAAAy0D,oBAAAq6B,GAAA,CAAAE,UAAA,EAAA79E,KAAAnR,EAAAu1F,iBAAA,OAAAthC,EAAA1iD,MAAAvR,EAAAsnF,iBAAA,uBAAAtnF,EAAA2I,QAAAqzF,gBAAA,KAAAnoC,EAAA27B,GAAAxvF,GAAA8uF,GAAA,CAAAE,UAAA,EAAA79E,KAAA0iD,EAAA1iD,MAAA,OAAA8iD,EAAA1iD,MAAAvR,EAAA+zD,WAAA,WAAA/zD,EAAAq1F,cAAAxhC,EAAA1jD,OAAA,EAAA2zE,IAAA9jF,EAAAsnF,iBAAA,iCAAArzB,EAAAk7B,cAAA,CAAAl7B,EAAAk7B,cAAA8M,YAAA,IAAAzpE,EAAAs8D,GAAA39E,KAAAqzB,KAAA,MAAAyvB,EAAAk7B,cAAAd,QAAA,OAAA77D,GAAA,GAAAyhC,EAAAk7B,cAAA9H,QAAA,SAAA70D,EAAA,CAAAyhC,EAAAmN,iBAAA,YAAAlmB,EAAAw0C,KAAAz7B,EAAA/Y,EAAA4e,WACA95D,EAAA25D,QAAAoV,UAAAjC,aAAA5xB,EAAAl7C,EAAA25D,QAAAoV,UAAAjV,YAAA7F,EAAA5wD,MAAAyrF,GAAA39E,KAAAqzB,KAAA,UAAA5kC,EAAA4iC,GAAA8wB,EAAAoE,eAAAi6B,GAAA19B,GAAArP,YAAA,WAAA5kD,EAAA25D,QAAAoV,UAAAxe,YAAArV,GAAAt7C,EAAAk7D,QAAAl7D,GAAA0zD,GAAA3zD,EAAAu8F,sBAAA,YAAAj8F,EAAAsG,KAAA5G,EAAA4G,KAAAvG,EAAAL,EAAAo2D,GAAAzC,EAAA3zD,EAAAw8F,IAAA/7F,EAAA62E,QAAA3jB,EAAA8oC,iBAAA,EAAA3M,GAAAn8B,EAAAtzD,EAAA2I,QAAA0zF,WAAAr8F,EAAA2I,QAAA2zF,YAAAt8F,EAAA2I,QAAA4zF,gBAAA1nC,EAAAvB,EAAA,kBAAAW,IAAAn1B,EAAAm1B,IAAAkN,EAAAnhE,EAAAi0D,IAAAi7B,GAAAj7B,EAAAj0D,IAAA,IAAA4qE,GAAAhmB,WAAA62B,GAAAz7E,GAAA,kBAAAC,EAAAu8F,eAAA,WAAA3nC,EAAAvB,EAAA,oBACA,SAAAW,GAAAh0D,EAAA47F,UAAA,CAAArrE,KAAAyjC,EAAAzjC,KAAAgJ,MAAA,MAAAq7B,EAAAvB,EAAA,8BAAAW,GAAAh0D,EAAA47F,YAAA57F,EAAA47F,UAAA,CAAArrE,KAAAyjC,EAAAzjC,KAAAgJ,MAAA,OAAAq7B,EAAAvB,EAAA,2BAAAW,GAAAh0D,EAAA47F,YAAA5nC,EAAAzjC,MAAAvwB,EAAA47F,UAAArrE,MAAAvwB,EAAAw8F,kBAAAx8F,EAAA47F,UAAAriE,MAAA,MAAAq7B,EAAAvB,EAAA,gCAAA3zD,EAAA+8F,qBAAA,IAAA7nC,EAAAvB,EAAA,oBAAArzD,EAAA47F,WAAA57F,EAAAw8F,iBAAA,IAAA5nC,EAAAvB,EAAA,OAAA5iC,GAAAmkC,EAAAvB,EAAA,MAAA5iC,EAAA,EAAA6qE,EAAAr4F,UAAAy5F,yBAAA,SAAAv8F,KAAAmG,KAAA41F,IAAArkC,aAAA,aAAA13D,GAAAmG,KAAA41F,IAAA5/B,gBAAA,eACAg/B,EAAAr4F,UAAA0xE,iBAAA,eAAAx0E,EAAAy0E,GAAAtuE,KAAAwvD,IAAA,GAAA31D,EAAA06D,MAAAt4B,GAAAj8B,KAAA41F,IAAAzkC,gBAAAnxD,KAAA41F,IAAA,OAAA/7F,CAAA,EAAAm7F,EAAAr4F,UAAAyxE,cAAA,SAAAv0E,EAAA0+B,GAAA1+B,GAAAmG,KAAAwvD,GAAA4D,QAAAiW,KAAAlvE,UAAAN,EAAA06D,OAAAh8B,IAAAv4B,KAAA21F,uBAAA31F,KAAAq2F,uBAAAx8F,GAAA,EAAAm7F,EAAAr4F,UAAA8sD,aAAA,kBAAAzpD,KAAAwvD,GAAA4D,QAAAyF,QAAA1H,cAAA1H,cAAA,EAAAurC,EAAAr4F,UAAAg5F,qBAAA,eAAA97F,EAAAmG,KAAAypD,eAAAlxB,EAAAv4B,KAAAwvD,GAAArlC,EAAAoO,EAAAylC,IAAAyQ,IAAAwN,UAAAviF,EAAAywB,EAAAtsB,OAAAssB,IAAA6iC,KAAA,GAAAz0B,EAAA66B,QAAAiM,QACA9mC,EAAA66B,QAAAgM,UAAA1lE,EAAA0O,MAAAmwB,EAAA66B,QAAAiM,QAAAl1C,EAAA/hB,KAAAmwB,EAAA66B,QAAAgM,SAAAvlE,EAAA8vD,sBAAA,KAAAvwD,EAAA2wF,GAAAxxD,EAAA1+B,EAAAu8E,WAAAv8E,EAAAw8E,cAAA58E,EAAAswF,GAAAxxD,EAAA1+B,EAAAy8E,UAAAz8E,EAAA08E,aAAA,IAAAn9E,KAAAwwF,MAAAnwF,KAAAmwF,KAAA,GAAAj7B,EAAAgP,GAAAvkE,EAAAK,GAAAC,IAAA,GAAAi1D,EAAA+O,GAAAtkE,EAAAK,GAAA0wB,GAAA,GAAA/wB,EAAAm/B,EAAA66B,QAAAiW,KAAA3vE,IAAA0O,MAAAmwB,EAAA66B,QAAAgM,UAAAqqB,GAAAlxD,EAAA7+B,IAAA,CAAAwV,KAAA9V,EAAA,GAAA6pE,QAAAtgC,IAAA,GAAAp6B,OAAA,GAAA4hB,IAAA/hB,KAAAmwB,EAAA66B,QAAAiM,QAAAoqB,GAAAlxD,EAAApO,SAAA/wB,IAAAe,OAAA,GAAA8oE,QAAA94C,IAAAm6C,KAAAn6C,EAAAm6C,KAAAn6C,EAAAm6C,KAAAnqE,OAAA,GAAAgwB,EAAAwY,IAAAxY,EAAA,CAAAjb,KAAAib,IAAAhwB,OAAA,GAAAoO,OAAA4hB,IAAAhwB,OAAA,GAAAgwB,IAAAhwB,OAAA,KAAAT,GAAAywB,EAAA,CAAA/wB,EAAAS,EAAAy8F,YACAz8F,EAAA08F,WAAA,WAAAxpC,EAAAsW,GAAA3pE,EAAAwV,KAAAxV,EAAA6O,OAAA4hB,EAAA5hB,OAAA4hB,EAAAjb,KAAA,OAAAw+C,GAAA,CAAAX,KAAAykB,IAAAj5C,EAAA7L,MAAA8iD,SAAA31E,EAAAuwE,SAAA1wE,EAAAwV,KAAAxV,EAAA6O,QAAAwkD,EAAA0U,YAAA5nE,EAAA8vD,kBAAA9vD,EAAAgwD,SAAAkD,MAAAlzD,EAAA8vD,kBAAA9vD,EAAAgwD,SAAAkD,IAAA3zD,GAAA,MAAAS,EAAAu8E,WAAAv8E,EAAAgwD,SAAAzwD,GAAAo4E,IAAAxxE,KAAAw2F,oBAAAx2F,KAAAy2F,mBAAA,MAAA58F,EAAA8vD,iBAAA,GAAAqrC,EAAAr4F,UAAA65F,iBAAA,eAAA38F,EAAAmG,KAAAi0D,aAAAj0D,KAAAu1F,aAAAv1F,KAAAu1F,YAAAl3C,YAAA,WAAAxkD,EAAA07F,aAAA,EAAA17F,EAAA05E,oBAAA15E,EAAA21D,GAAAhC,WAAA,kBAAA3zD,EAAA21D,GAAA0L,MAAAqY,kBACA,YAAAyhB,EAAAr4F,UAAA05F,uBAAA,SAAAx8F,GAAA40D,EAAAzuD,KAAAwvD,GAAA4D,QAAAuc,UAAA91E,EAAA00E,SAAA9f,EAAAzuD,KAAAwvD,GAAA4D,QAAAsjB,aAAA78E,EAAA2vD,UAAA,EAAAwrC,EAAAr4F,UAAA85F,kBAAA,eAAA58F,EAAAmG,KAAAypD,eAAAzpD,KAAAi1F,eAAAp7F,EAAAu8E,WAAAp2E,KAAAk1F,iBAAAr7F,EAAAw8E,aAAAr2E,KAAAm1F,cAAAt7F,EAAAy8E,UAAAt2E,KAAAo1F,gBAAAv7F,EAAA08E,WAAA,EAAAye,EAAAr4F,UAAA+5F,kBAAA,eAAA78F,EAAAmG,KAAAypD,eAAA,IAAA5vD,EAAAy8F,WAAA,SAAAz8F,IAAA08F,WAAA,GAAAI,wBAAA,OAAAx+B,GAAAn4D,KAAA41F,IAAA/7F,EAAA,EACAm7F,EAAAr4F,UAAA43D,MAAA,uBAAAv0D,KAAAwvD,GAAAptD,QAAA6+D,WAAAjhE,KAAA02F,qBAAAz6D,GAAAj8B,KAAA41F,IAAAzkC,gBAAAnxD,KAAA41F,KAAA51F,KAAAouE,cAAApuE,KAAAquE,oBAAA,GAAAruE,KAAA41F,IAAArhC,QAAA,EAAAygC,EAAAr4F,UAAAi6F,KAAA,WAAA52F,KAAA41F,IAAAgB,MAAA,EAAA5B,EAAAr4F,UAAA+mF,SAAA,kBAAA1jF,KAAA41F,GAAA,EAAAZ,EAAAr4F,UAAA4nF,cAAA,qBAAAyQ,EAAAr4F,UAAA4zE,cAAA,oBAAA12E,IAAAswB,EAAAqlC,GAAA9iC,MAAA8iD,UAAArlD,EAAA0sE,gBAAA1sE,EAAAkrE,QAAAt0F,IAAAopB,EAAAqlC,GAAAptD,QAAA00F,aAAAj9F,GAAA,KAAA0+B,EAAAv4B,KAAAmqB,EAAAnqB,UAAA02F,oBACAr4C,YAAA,kBAAA9lB,EAAAs+D,eAAA,OAAA5hB,GAAAj1E,KAAAwvD,IAAA,kBAAArlC,EAAAqlC,GAAA0L,MAAAqY,kBAAA,KAAAvzE,KAAAq1F,QAAAt0F,IAAAf,KAAAwvD,GAAAptD,QAAA00F,aAAAj9F,EAAA,EAAAm7F,EAAAr4F,UAAA42E,iBAAA,eAAA15E,EAAAmG,KAAAypD,eAAA,OAAA5vD,EAAAu8E,YAAAp2E,KAAAi1F,gBAAAp7F,EAAAw8E,cAAAr2E,KAAAk1F,kBAAAr7F,EAAAy8E,WAAAt2E,KAAAm1F,eAAAt7F,EAAA08E,aAAAv2E,KAAAo1F,eAAA,EAAAJ,EAAAr4F,UAAAk6F,cAAA,oBAAA72F,KAAAw1F,iBAAAx1F,KAAAu1F,aAAAv1F,KAAAuzE,mBAAA,KAAA15E,EAAAmG,KAAAypD,eACAlxB,EAAAv4B,KAAAwvD,GAAA,GAAAoc,IAAAD,IAAA3rE,KAAAwvD,GAAA4D,QAAAgU,YAAAjtE,QAAAuvF,GAAA7vF,EAAAu8E,YAAAp2E,KAAAwvD,GAAAunC,iBAAA,CAAA/rF,KAAA,UAAA62E,QAAA,EAAAhnB,eAAAniC,KAAAwxC,MAAAlqE,KAAA42F,OAAA52F,KAAAu0D,aAAA,IAAAv0D,KAAAs1F,UAAA,CAAAt1F,KAAAy2F,oBAAA,IAAAtsE,EAAA4/D,GAAAxxD,EAAA1+B,EAAAu8E,WAAAv8E,EAAAw8E,cAAA38E,EAAAqwF,GAAAxxD,EAAA1+B,EAAAy8E,UAAAz8E,EAAA08E,aAAApsD,GAAAzwB,GAAAu7E,GAAA18C,GAAA,WAAAyjD,GAAAzjD,EAAAylC,IAAAqb,GAAAlvD,EAAAzwB,GAAA6jF,IAAA,GAAApzD,EAAAy/D,KAAAlwF,EAAAkwF,IAAArxD,EAAA2iC,MAAAqY,kBAAA,QAAAyhB,EAAAr4F,UAAAq6F,YAAA,iBAAAh3F,KAAAw1F,iBAAAvhC,aAAAj0D,KAAAw1F,gBAAAx1F,KAAAw1F,eACA,UAAA37F,EAAAmG,KAAAwvD,GAAAj3B,EAAA1+B,EAAAu5D,QAAAjpC,EAAAtwB,EAAAmkE,IAAAyQ,IAAAwN,UAAAviF,EAAAywB,EAAAtsB,OAAAzE,EAAA+wB,EAAA6iC,KAAA,GAAAtzD,EAAA4yB,IAAA5yB,EAAA0O,KAAAvO,EAAAyjF,cAAA5jF,EAAAJ,EAAAI,EAAA0O,KAAA,EAAAimD,EAAAx0D,EAAAmkE,IAAAtkE,EAAA0O,KAAA,GAAAjO,SAAAf,EAAAkzB,IAAA+hC,EAAAx0D,EAAAmkE,IAAA5kE,EAAAgP,MAAAwC,KAAAzQ,QAAAf,EAAAgP,KAAAvO,EAAAuzD,aAAAh0D,EAAAE,EAAAF,EAAAgP,KAAA,SAAA1O,EAAA0O,KAAAmwB,EAAA6mC,UAAAhmE,EAAAgP,KAAAmwB,EAAA8mC,OAAA,eAAA5lE,EAAAC,EAAA0O,MAAAmwB,EAAA6mC,UAAA,IAAA3lE,EAAA6vE,GAAAzvE,EAAAH,EAAA0O,QAAA+hB,EAAAkrC,EAAA98B,EAAA8wC,KAAA,GAAAjhE,MAAA3O,EAAA8+B,EAAA8wC,KAAA,GAAAn6D,OAAAib,EAAAkrC,EAAA98B,EAAA8wC,KAAA5vE,GAAA2O,MAAA3O,EAAA8+B,EAAA8wC,KAAA5vE,EAAA,GAAAyV,KAAAskD,aAAA,IAAAzG,EAAAuc,GAAAzvE,EAAAT,EAAAgP,MAAA2kD,GAAAx0B,EAAA8wC,KAAAlvE,OAAA,GAAAf,EAAAm/B,EAAA8mC,OAAA,EAAA9mC,IAAAm4C,QAAAlM,YAAAprE,EAAAi8D,EAAA98B,EAAA8wC,KAAAtc,EAAA,GAAA3kD,MACA,EAAAmwB,IAAA8wC,KAAAtc,EAAA,GAAA79C,KAAA+6E,iBAAA,IAAAxwF,EAAA,SAAA8+B,EAAA1+B,EAAAmkE,IAAAsgB,WAAAuL,GAAAhwF,EAAAJ,EAAA8+B,EAAApO,EAAA/wB,IAAA,IAAAK,EAAAujE,GAAAnjE,EAAAmkE,IAAA1kE,EAAA6wB,EAAA,GAAA7wB,EAAAF,EAAAi1D,EAAAx0D,EAAAmkE,IAAA5kE,GAAAwR,KAAAzQ,SAAA,EAAAo+B,EAAAp+B,QAAA,EAAAV,EAAAU,QAAA,GAAA6xD,EAAAzzB,IAAAyzB,EAAAvyD,GAAA8+B,EAAAhjB,MAAA9b,EAAA8b,MAAAnc,SAAA,GAAAm/B,EAAA,IAAA9+B,EAAA,GAAA8+B,EAAA0/B,QAAAx+D,EAAAw+D,QAAA9tC,SAAA,UAAAujC,EAAA,EAAAX,EAAA,UAAAO,EAAA/0B,EAAA,GAAAtM,EAAAxyB,EAAA,GAAAk7C,EAAAjc,KAAAhL,IAAA4/B,EAAAnzD,OAAA8xB,EAAA9xB,QAAAuzD,EAAA/Y,GAAA2Y,EAAA/lD,WAAAmmD,IAAAzhC,EAAA1kB,WAAAmmD,QAAAJ,EAAAtB,EAAAzzB,GAAAtM,EAAA+/B,EAAAvyD,GAAA,IAAAk7C,EAAAjc,KAAAhL,IAAA4/B,EAAAnzD,QAAA,GAAAo+B,EAAAp+B,OAAAuzD,EAAA,GAAAzhC,EAAA9xB,QAAA,GAAAV,EAAAU,OAAAuzD,EAAA,IAAAX,EAAApY,GAAA2Y,EAAA/lD,WAAA+lD,EAAAnzD,OAAA4yD,EAAA,IAAA9gC,EAAA1kB,WAAA0kB,EAAA9xB,OAAA4yD,EAAA,MAAAA,EACA,MAAAx0B,EAAAp+B,QAAA,GAAAV,EAAAU,QAAAgwB,GAAAzwB,EAAA0O,KAAA,KAAAslD,KAAAh0D,EAAA4yB,IAAAghC,EAAA/lD,WAAA+lD,EAAAnzD,OAAA4yD,EAAA,IAAA9gC,EAAA1kB,WAAA0kB,EAAA9xB,OAAA4yD,EAAA,IAAAW,IAAAX,IAAAx0B,IAAAp+B,OAAA,GAAAmzD,EAAA/tD,MAAA,EAAA+tD,EAAAnzD,OAAA4yD,GAAA/kD,QAAA,eAAAuwB,EAAA,GAAAA,EAAA,GAAAh5B,MAAAmuD,GAAA1lD,QAAA,eAAAtO,EAAAJ,EAAA6wB,EAAAujC,GAAAvjC,EAAA7wB,EAAAF,EAAAK,EAAAU,OAAA6xD,EAAAvyD,GAAAU,OAAA4yD,EAAA,QAAAx0B,EAAAp+B,QAAAo+B,EAAA,IAAAo2B,EAAAj1D,EAAAywB,GAAA,OAAAk0D,GAAAxkF,EAAAmkE,IAAAzlC,EAAA7+B,EAAAywB,EAAA,cAAA6qE,EAAAr4F,UAAAomF,aAAA,WAAA/iF,KAAAm2F,qBAAA,EAAAnB,EAAAr4F,UAAAgvB,MAAA,WAAA3rB,KAAAm2F,qBAAA,EAAAnB,EAAAr4F,UAAAw5F,oBAAA,WAAAn2F,KAAAs1F,YACArhC,aAAAj0D,KAAAw1F,gBAAAx1F,KAAAs1F,UAAA,KAAAt1F,KAAAi2F,gBAAAj2F,KAAA41F,IAAAgB,OAAA52F,KAAA41F,IAAArhC,QAAA,EAAAygC,EAAAr4F,UAAAu5F,gBAAA,eAAAr8F,EAAAmG,KAAA,MAAAA,KAAAw1F,iBAAAx1F,KAAAw1F,eAAAn3C,YAAA,WAAAxkD,EAAA27F,eAAA,QAAA37F,EAAAy7F,UAAA,GAAAz7F,EAAAy7F,UAAAriE,KAAAp5B,EAAAy7F,UAAA,iBAAAz7F,EAAAo8F,eAAA,SAAAjB,EAAAr4F,UAAAs5F,cAAA,eAAAp8F,EAAAmG,WAAAwvD,GAAA8wB,cAAAtgF,KAAAg3F,eAAA/hB,GAAAj1E,KAAAwvD,IAAA,kBAAAoe,GAAA/zE,EAAA21D,GAAA,KAAAwlC,EAAAr4F,UAAAmoE,cAAA,SAAAjrE,KAAAg8F,gBACA,SAAAb,EAAAr4F,UAAAsnF,WAAA,SAAApqF,GAAA,GAAAA,EAAAmqF,UAAAhkF,KAAAs1F,YAAAz7F,EAAAghE,iBAAA76D,KAAAwvD,GAAA8wB,cAAApL,GAAAl1E,KAAAwvD,GAAA64B,GAAAnT,CAAAl1E,KAAAwvD,GAAAzwD,OAAAoC,aAAA,MAAAtH,EAAAmqF,SAAAnqF,EAAAgoF,QAAAhoF,EAAAmqF,UAAA,KAAAgR,EAAAr4F,UAAAs6F,gBAAA,SAAAp9F,GAAAmG,KAAA41F,IAAAC,gBAAA92F,OAAA,YAAAlF,EAAA,EAAAm7F,EAAAr4F,UAAAkoF,cAAA,aAAAmQ,EAAAr4F,UAAAu6F,cAAA,aAAAlC,EAAAr4F,UAAAkoE,uBAAA,MAAAsyB,EAAA,SAAAt9F,GAAAmG,KAAAwvD,GAAA31D,EAAAmG,KAAAo3F,UAAA,GAAAp3F,KAAAq3F,aAAA,EAAAr3F,KAAAq1F,QAAA,IAAArO,GAAAhnF,KAAAs3F,cACA,EAAAt3F,KAAAs1F,UAAA,KAAAt1F,KAAAu3F,WAAA,GAAAJ,EAAAx6F,UAAAuZ,KAAA,SAAArc,GAAA,SAAA0+B,EAAAw0B,GAAA,IAAA6N,EAAAxhE,EAAA2zD,GAAA,IAAA3zD,EAAA80D,oBAAAq6B,GAAA,CAAAE,UAAA,EAAA79E,KAAAxR,EAAA41F,sBAAA,GAAA51F,EAAAgJ,QAAAqzF,gBAAA,KAAA/nC,EAAAu7B,GAAA7vF,GAAAmvF,GAAA,CAAAE,UAAA,EAAA79E,KAAA8iD,EAAA9iD,MAAA,OAAAmiD,EAAA/hD,KAAA5R,EAAA01F,cAAAphC,EAAA9jD,OAAA,KAAA2zE,KAAA7jF,EAAA09F,UAAA,GAAA39F,EAAAqD,MAAA4wD,EAAA9iD,KAAAqzB,KAAA,MAAAmtD,GAAA3xF,GAAA,oBAAAszD,EAAA/hD,OAAA5R,EAAAszB,MAAAq6D,aAAA,IAAAzkD,KAAA,MAAAnY,EAAAnqB,KAAAtG,EAAAsG,KAAA5G,EAAA4G,KAAAwvD,GAAAxvD,KAAAw3F,YAAA39F,GAAA,IAAAJ,EAAAuG,KAAAy3F,SAAA59F,EAAAg/D,QAAA0N,aAAAvmE,KAAA64D,QAAAh/D,EAAAg/D,QAAAtF,YACA61B,KAAA3vF,EAAAkoC,MAAA2xB,MAAA,OAAAhF,EAAA70D,EAAA,oBAAAyyD,GAAA,GAAAmY,GAAAl6C,EAAAmtE,eAAAntE,EAAAmtE,aAAA,MAAA59F,EAAAg+F,MAAA,IAAAppC,EAAA70D,EAAA,kBAAAszD,GAAA6N,EAAAxhE,EAAA2zD,IAAA47B,GAAA57B,EAAA3zD,OAAAszB,MAAAo6D,eAAA,IAAAxkD,KAAA5oC,EAAAi+F,WAAA,IAAArpC,EAAA70D,EAAA,MAAA8+B,GAAA+1B,EAAA70D,EAAA,OAAA8+B,GAAA+1B,EAAAz0D,EAAAivE,SAAA,kBAAA/b,GAAA,IAAAob,GAAAtuE,EAAAkzD,KAAA6N,EAAAxhE,EAAA2zD,GAAA,GAAAtzD,EAAAm+F,cAAA,KAAAlqC,EAAA,IAAAtO,MAAA,SAAAsO,EAAAk7B,cAAA77B,EAAA67B,cAAAnvF,EAAAm+F,cAAAlqC,EAAA,MAAAt0D,EAAAszB,MAAAo6D,eAAA,IAAAxkD,KAAA5oC,EAAA66D,OAAA,IAAAjG,EAAAz0D,EAAA2uE,UAAA,wBAAAzb,GAAAob,GAAAtuE,EAAAkzD,IAAAuO,GAAAvO,EAAA,IAAAuB,EAAA70D,EAAA,oBACA,eAAAszD,EAAA3zD,EAAA60D,UAAA,QAAAv0D,EAAA47F,WAAA57F,EAAA47F,UAAApqF,MAAA44C,QAAApqD,EAAA47F,UAAA,CAAA7sF,MAAAskD,EAAA7hD,MAAA9R,EAAA2+D,SAAAhL,EAAA3zD,EAAA60D,UAAA,OAAAuD,UAAA,6BAAAlD,EAAA70D,EAAA,6BAAAC,EAAA47F,YAAA57F,EAAAg+F,OAAAh+F,EAAA47F,UAAApqF,MAAA44C,QAAApqD,EAAA47F,UAAA,UAAA6B,EAAAx6F,UAAA66F,YAAA,SAAA39F,GAAAmG,KAAA64D,QAAAswB,KAAAnpF,KAAAy3F,SAAAz3F,KAAA64D,QAAAtF,UAAA,EAAA4jC,EAAAx6F,UAAAy5F,yBAAA,SAAAv8F,KAAAmG,KAAAy3F,SAAAlmC,aAAA,aAAA13D,GAAAmG,KAAAy3F,SAAAzhC,gBAAA,eACAmhC,EAAAx6F,UAAA0xE,iBAAA,eAAAx0E,EAAAmG,KAAAwvD,GAAAj3B,EAAA1+B,EAAAu5D,QAAAjpC,EAAAtwB,EAAAmkE,IAAAtkE,EAAA40E,GAAAz0E,GAAA,GAAAA,EAAAuI,QAAAy1F,oBAAA,CAAAh+F,EAAAwyE,GAAAxyE,EAAAswB,EAAAskD,IAAAwN,UAAAjnB,KAAA,OAAA7qC,EAAAoO,EAAAsgC,QAAAzG,wBAAA,IAAAh5D,EAAAm/B,EAAAm4C,QAAAte,wBAAA14D,EAAAo+F,MAAAp/D,KAAA/K,IAAA,EAAA+K,KAAAhL,IAAA6K,EAAAsgC,QAAA5F,aAAA,GAAAp5D,EAAAy4D,IAAAl5D,EAAAk5D,IAAAnoC,EAAAmoC,MAAA54D,EAAAq+F,OAAAr/D,KAAA/K,IAAA,EAAA+K,KAAAhL,IAAA6K,EAAAsgC,QAAAqP,YAAA,GAAAruE,EAAAwe,KAAAjf,EAAAif,KAAA8R,EAAA9R,MAAA,QAAA3e,CAAA,EAAAy9F,EAAAx6F,UAAAyxE,cAAA,SAAAv0E,GAAA,IAAA0+B,EAAAv4B,KAAAwvD,GAAA4D,QAAA3E,EAAAl2B,EAAAo3C,UAAA91E,EAAA00E,SAAA9f,EAAAl2B,EAAAm+C,aAAA78E,EAAA2vD,WACA,MAAA3vD,EAAAi+F,QAAA93F,KAAA64D,QAAAl3B,MAAA2wB,IAAAz4D,EAAAi+F,MAAA,KAAA93F,KAAA64D,QAAAl3B,MAAAtpB,KAAAxe,EAAAk+F,OAAA,OAAAZ,EAAAx6F,UAAAgvB,MAAA,SAAA9xB,GAAA,KAAAmG,KAAAg4F,oBAAAh4F,KAAAs1F,WAAAz7F,GAAA,KAAA0+B,EAAAv4B,KAAAwvD,GAAAxvD,KAAAu3F,WAAA,EAAAh/D,EAAA21B,qBAAAluD,KAAAo3F,UAAA,GAAAv9F,EAAA0+B,EAAAkxB,eAAAzpD,KAAAy3F,SAAA36F,MAAAjD,EAAA0+B,EAAA7L,MAAA8iD,SAAA4b,GAAAprF,KAAAy3F,UAAAvrC,GAAA,GAAAmY,IAAArkE,KAAAs3F,aAAAz9F,QAAAmG,KAAAo3F,UAAAp3F,KAAAy3F,SAAA36F,MAAA,GAAAovD,GAAA,GAAAmY,IAAArkE,KAAAs3F,aAAA,OAAAt3F,KAAAu3F,WAAA,IAAAJ,EAAAx6F,UAAA+mF,SAAA,kBAAA1jF,KAAAy3F,QAAA,EACAN,EAAAx6F,UAAA4nF,cAAA,qBAAA4S,EAAAx6F,UAAA43D,MAAA,0BAAAv0D,KAAAwvD,GAAAptD,QAAA6+D,YAAA0W,IAAA17C,GAAAj8B,KAAAy3F,SAAAtmC,gBAAAnxD,KAAAy3F,UAAA,IAAAz3F,KAAAy3F,SAAAljC,OAAA,OAAA16D,GAAA,GAAAs9F,EAAAx6F,UAAAi6F,KAAA,WAAA52F,KAAAy3F,SAAAb,MAAA,EAAAO,EAAAx6F,UAAAu6F,cAAA,WAAAl3F,KAAA64D,QAAAl3B,MAAA2wB,IAAAtyD,KAAA64D,QAAAl3B,MAAAtpB,KAAA,GAAA8+E,EAAAx6F,UAAA4zE,cAAA,WAAAvwE,KAAAi4F,UAAA,EAAAd,EAAAx6F,UAAAs7F,SAAA,eAAAp+F,EAAAmG,UAAAq3F,aAAAr3F,KAAAq1F,QAAAt0F,IAAAf,KAAAwvD,GAAAptD,QAAA00F,cACA,WAAAj9F,EAAA69F,OAAA79F,EAAA21D,GAAA9iC,MAAA8iD,SAAA31E,EAAAo+F,UAAA,KAAAd,EAAAx6F,UAAAg7F,SAAA,oBAAA99F,IAAAswB,EAAAutE,QAAAn/D,GAAApO,EAAAktE,aAAA,EAAAltE,EAAA8tE,aAAA1/D,GAAA,EAAApO,EAAAkrE,QAAAt0F,IAAA,GAAAlH,GAAA,KAAA0+B,GAAA,EAAApO,EAAAnqB,KAAAmqB,EAAAktE,aAAA,EAAAltE,EAAAkrE,QAAAt0F,IAAA,GAAAlH,EAAA,EAAAs9F,EAAAx6F,UAAA+6F,KAAA,eAAA79F,EAAAmG,KAAAu4B,EAAAv4B,KAAAwvD,GAAArlC,EAAAnqB,KAAAy3F,SAAA/9F,EAAAsG,KAAAo3F,UAAA,GAAAp3F,KAAAg4F,oBAAAh4F,KAAAu3F,YAAAh/D,EAAA7L,MAAA8iD,SAAAqc,GAAA1hE,KAAAzwB,IAAAsG,KAAAs1F,WAAA/8D,EAAA+nD,cAAA/nD,EAAAn2B,QAAAymF,cAAAtwD,EAAA7L,MAAAw2D,OAAA,aAAA9pF,EAAA+wB,EAAArtB,MAAA,GAAA1D,GAAAM,IAAA6+B,EAAA21B,oBAAA,SACA,GAAAhC,GAAA,GAAAmY,GAAArkE,KAAAs3F,eAAAl+F,GAAA2iE,IAAA,kBAAAt8D,KAAArG,GAAA,OAAAm/B,EAAA66B,QAAA30D,MAAAktB,SAAA,KAAA4M,EAAAylC,IAAAyQ,KAAAl2C,EAAA66B,QAAAkd,kBAAA,KAAA72E,EAAAL,EAAAmO,WAAA,SAAA9N,GAAAC,MAAA,cAAAD,EAAA,OAAAuG,KAAA2rB,QAAA3rB,KAAAwvD,GAAAzF,YAAA,YAAAgD,EAAA,MAAAtzD,EAAAi/B,KAAAhL,IAAAh0B,EAAAS,OAAAf,EAAAe,QAAA4yD,EAAAtzD,GAAAC,EAAA6N,WAAAwlD,IAAA3zD,EAAAmO,WAAAwlD,QAAAkoB,GAAA18C,GAAA,WAAA8vD,GAAA9vD,EAAAn/B,EAAAmG,MAAAwtD,GAAArzD,EAAAS,OAAA4yD,EAAA,KAAAlzD,EAAAy7F,UAAA,qBAAAl8F,EAAAe,SAAA,EAAAf,EAAA2e,QAAA,MAAAoS,EAAArtB,MAAAjD,EAAAu9F,UAAA,GAAAv9F,EAAAu9F,UAAAh+F,EAAAS,EAAAy7F,YAAAz7F,EAAAy7F,UAAApqF,MAAA44C,QACAjqD,EAAAy7F,UAAApqF,MAAAqtB,EAAAw/B,SAAAl+D,EAAAy7F,UAAA7sF,MAAA8vB,EAAA01B,UAAA,OAAAuD,UAAA,uCAAA2lC,EAAAx6F,UAAAomF,aAAA,WAAA/iF,KAAAq3F,aAAAr3F,KAAA03F,SAAA13F,KAAAq3F,aAAA,IAAAF,EAAAx6F,UAAAsnF,WAAA,WAAA/3B,GAAA,GAAAmY,IAAArkE,KAAAs3F,aAAA,MAAAt3F,KAAA23F,UAAA,EAAAR,EAAAx6F,UAAAkoF,cAAA,SAAAhrF,GAAA,SAAA0+B,IAAA,SAAAw0B,EAAAu+B,eAAA,KAAA79B,EAAAr0D,EAAA80D,oBAAA/0D,EAAA,KAAAs0D,EAAAV,EAAAjwD,MAAA,IAAAiwD,EAAAjwD,MAAA,IAAAiwD,EAAAjwD,MAAA3D,EAAAO,EAAA09F,UAAA3pC,EAAA,OAAAV,EAAAu+B,eAAA,EAAAv+B,EAAAw+B,aACApyF,EAAAgB,OAAAV,EAAA62E,kBAAAl3E,EAAA4kE,IAAAyQ,GAAA,WAAAtkD,IAAA,GAAAzwB,EAAAs+F,oBAAA7tE,IAAAzwB,EAAAs+F,oBAAA,EAAAt+F,EAAAm/D,QAAAl3B,MAAAy2B,QAAAzjB,EAAAoY,EAAAprB,MAAAy2B,QAAAnsC,EAAAigC,GAAA,EAAAmY,GAAA5qE,EAAAm4E,WAAAC,aAAAp4E,EAAAqvE,SAAAvW,UAAAjF,GAAA,MAAAP,EAAAu+B,gBAAA,GAAAp/B,MAAA,EAAAmY,IAAA9rC,IAAA,IAAAk1B,EAAA,EAAAt0D,EAAA,WAAAM,EAAA62E,mBAAAl3E,EAAA4kE,IAAAyQ,KAAA,GAAA1hB,EAAAu+B,gBAAA,EAAAv+B,EAAAw+B,cAAA,KAAA7xF,EAAA09F,UAAAliB,GAAA97E,EAAAikF,GAAAnI,CAAA97E,GAAA,GAAAq0D,IAAAh0D,EAAAy+F,mBAAA75C,WAAAllD,EAAA,MAAAM,EAAA62E,kBAAA,KAAA72E,EAAAgF,MAAAktB,QAAA,EAAAlyB,EAAAy+F,mBAAA75C,WAAAllD,EACA,UAAAO,EAAAsG,KAAA5G,EAAAM,EAAA81D,GAAA/1D,EAAAL,EAAAg6D,QAAArG,EAAArzD,EAAA+9F,SAAA/9F,EAAAs+F,oBAAAt+F,EAAAs+F,qBAAA,IAAAtqC,EAAA+f,GAAAr0E,EAAAS,GAAAyzD,EAAA7zD,EAAAqvE,SAAAvW,UAAA,GAAA7E,IAAAsrB,GAAA,CAAA5/E,EAAAgJ,QAAA+1F,8BAAA,GAAA/+F,EAAA4kE,IAAAyQ,IAAAnW,SAAA5K,IAAAwnB,GAAA97E,EAAA4iF,GAAA9G,CAAA97E,EAAA4kE,IAAAqb,GAAA3rB,GAAA6vB,IAAA,IAAAtxD,EAAA8gC,EAAAprB,MAAAy2B,QAAAzjB,EAAAj7C,EAAAm/D,QAAAl3B,MAAAy2B,QAAA1K,EAAAh0D,EAAAm/D,QAAA1G,aAAAC,wBAAA14D,EAAAm/D,QAAAl3B,MAAAy2B,QAAA,mBAAArL,EAAAprB,MAAAy2B,QAAA,+DAAAv+D,EAAA8zE,QAAAjgB,EAAA4E,IAAA,iBAAAz4D,EAAA6zE,QAAAhgB,EAAAr1C,KACA,6CAAA6zC,EAAA,iKAAAyW,GAAA,IAAAtpE,EAAA0zD,EAAAoE,cAAAC,YAAAgnC,QAAA3+F,EAAAgF,MAAA81D,QAAAoO,IAAA5V,EAAAoE,cAAAC,YAAAinC,SAAA,KAAAh/F,GAAAI,EAAAgF,MAAAktB,QAAAvyB,EAAA80D,sBAAAnB,EAAAjwD,MAAApD,EAAA09F,UAAA,KAAA19F,EAAAs+F,mBAAA7tE,EAAA1wB,EAAA62E,kBAAAl3E,EAAA4kE,IAAAyQ,IAAAxa,aAAAx6D,EAAAy+F,oBAAAhsC,GAAA,GAAAmY,GAAA9rC,IAAA,GAAAqsD,GAAA,CAAAjpB,GAAA9hE,GAAA,IAAAG,EACA,WAAAsgE,GAAAvd,OAAA,UAAA/iD,GAAAqkD,WAAAl0B,EAAA,KAAAmkC,EAAAvR,OAAA,UAAA/iD,EAAA,MAAAqkD,WAAAl0B,EAAA,MAAAgtE,EAAAx6F,UAAAs6F,gBAAA,SAAAp9F,MAAAmG,KAAA2rB,QAAA3rB,KAAAy3F,SAAAa,SAAA,YAAAz+F,EAAAmG,KAAAy3F,SAAAx2B,WAAApnE,CAAA,EAAAs9F,EAAAx6F,UAAAmoE,cAAA,aAAAqyB,EAAAx6F,UAAAkoE,uBAAA,YAAAhrE,GAAA,SAAA0+B,EAAA7+B,EAAAN,EAAAK,EAAAszD,GAAAlzD,EAAAg7F,SAAAn7F,GAAAN,EAAAK,IAAA0wB,EAAAzwB,GAAAqzD,EAAA,SAAAW,EAAAJ,EAAArhC,MAAAg6D,IAAAxsF,EAAAi0D,EAAAJ,EAAArhC,EAAA,EAAAxyB,EAAA,KAAA0wB,EAAAtwB,EAAAi7F,eAAAj7F,EAAA48D,aAAAl+B,EAAA1+B,EAAAq+D,KAAA+tB,GAAA1tD,EAAA,qBAAA7+B,EAAAN,GAAA,OAAAM,EAAA20F,SAAAj1F,EAAA,OAAAm/B,EAAA,OACA,eAAA7+B,EAAAN,GAAAM,EAAAskE,IAAA2b,WAAAvgF,EAAAsgF,GAAAhgF,EAAA,OAAA6+B,EAAA,eAAAmhD,IAAA,GAAAnhD,EAAA,qBAAAA,EAAA,kBAAAA,EAAA,sBAAA7+B,GAAAkgF,GAAAlgF,GAAA4xE,GAAA5xE,GAAAk0E,GAAAl0E,EAAA,OAAA6+B,EAAA,+BAAA7+B,EAAAN,GAAA,GAAAM,EAAAskE,IAAAmwB,QAAA/0F,EAAA,KAAAK,EAAA,GAAAszD,EAAArzD,EAAAskE,IAAArgD,MAAAjkB,EAAAskE,IAAAtgE,MAAA,SAAA4vD,GAAA,QAAArhC,EAAA,SAAA0oB,EAAA2Y,EAAA1iD,KAAAmN,QAAA3e,EAAA6yB,GAAA,OAAA0oB,EAAA,MAAA1oB,EAAA0oB,EAAAv7C,EAAAe,OAAAV,EAAA+Q,KAAAlR,EAAAyzD,EAAApY,GAAA,CAAAoY,GAAA,YAAAW,EAAAj0D,EAAAU,OAAA,KAAAuzD,MAAA2wB,GAAA3kF,EAAAskE,IAAA5kE,EAAAK,EAAAi0D,GAAAp0D,EAAAG,EAAAi0D,GAAAtlD,KAAA3O,EAAAi0D,GAAAphC,GAAAlzB,EAAAe,QAAA,KAAAo+B,EAAA,2IACA,SAAA7+B,EAAAN,EAAAK,GAAAC,EAAAgzB,MAAAg4C,aAAA,IAAA9jE,OAAAxH,EAAA8N,QAAA9N,EAAAqG,KAAA,qBAAAhG,GAAAwsF,IAAAvsF,EAAA6+F,SAAA,IAAAhgE,EAAA,yBAAAksC,IAAA,SAAA/qE,GAAA,OAAAA,EAAA6+F,SAAA,OAAAhgE,EAAA,oBAAAA,EAAA,aAAAo/C,GAAA,+CAAA79E,MAAA,iEAAAy+B,EAAA,0BAAA7+B,EAAAN,GAAA,OAAAM,EAAAw3D,gBAAA4kC,WAAA18F,CAAA,OAAAm/B,EAAA,2BAAA7+B,EAAAN,GAAA,OAAAM,EAAAw3D,gBAAA6kC,YAAA38F,CAAA,OAAAm/B,EAAA,kBACA,YAAA7+B,EAAAN,GAAA,OAAAM,EAAAw3D,gBAAA8kC,eAAA58F,CAAA,OAAAm/B,EAAA,mBAAAsyD,IAAAtyD,EAAA,4BAAAA,EAAA,4BAAA7+B,GAAAqsF,GAAArsF,GAAA69E,GAAA79E,EAAA,OAAA6+B,EAAA,6BAAA7+B,EAAAN,EAAAK,GAAAL,EAAAqoF,GAAAroF,IAAAK,KAAAwsF,IAAAxE,GAAAhoF,OAAA++F,QAAA/+F,EAAA++F,OAAA9+F,EAAAN,KAAAq/F,QAAAr/F,EAAAq/F,OAAA/+F,EAAAD,GAAA,SAAA8+B,EAAA,kBAAAA,EAAA,uBAAAA,EAAA,kBAAAguD,IAAA,GAAAhuD,EAAA,uBAAA7+B,EAAAN,GAAAM,EAAA05D,QAAAgU,YAAAiQ,GAAAj+E,EAAAM,EAAA0I,QAAA4kE,aAAAuQ,GAAA79E,EAAA,OAAA6+B,EAAA,2BAAA7+B,EAAAN,GAAAM,EAAA05D,QAAA6U,QAAAtmC,MAAAtpB,KACAjf,EAAAk0E,GAAA5zE,EAAA05D,SAAA,SAAA15D,EAAA6+F,SAAA,OAAAhgE,EAAA,0CAAA7+B,GAAA,OAAA44E,GAAA54E,EAAA,OAAA6+B,EAAA,oCAAA7+B,GAAAo5E,GAAAp5E,GAAA44E,GAAA54E,KAAA05D,QAAAwe,WAAAC,aAAAn4E,EAAAskE,IAAAzL,WAAA74D,EAAA05D,QAAAwe,WAAAI,cAAAt4E,EAAAskE,IAAA3L,WAAA,OAAA95B,EAAA,2BAAA7+B,EAAAN,GAAAM,EAAA05D,QAAAgU,YAAAiQ,GAAA39E,EAAA0I,QAAA6lE,QAAA7uE,GAAAm+E,GAAA79E,EAAA,OAAA6+B,EAAA,oBAAAg/C,IAAA,GAAAh/C,EAAA,gCAAA7+B,GAAA,OAAAA,CAAA,GAAA69E,IAAA,GAAAh/C,EAAA,6BAAA41C,IAAA,GAAA51C,EAAA,+BACA,GAAAA,EAAA,sBAAAA,EAAA,6BAAAA,EAAA,yBAAAA,EAAA,wBAAA7+B,EAAAN,GAAA,YAAAA,IAAA42E,GAAAt2E,KAAA05D,QAAA30D,MAAAm4F,QAAAl9F,EAAA05D,QAAA30D,MAAAw4F,gBAAA79F,EAAA,IAAAm/B,EAAA,mCAAA7+B,EAAAN,GAAAM,EAAA05D,QAAA30D,MAAA23F,yBAAA,KAAAh9F,EAAA,KAAAA,EAAA,IAAAm/B,EAAA,4BAAA7+B,EAAAN,MAAAM,EAAA05D,QAAA30D,MAAAktB,OAAA,OAAA4M,EAAA,cAAAytD,IAAAztD,EAAA,2BAAAA,EAAA,uBAAAA,EAAA,wBAAAA,EAAA,iBAAA41C,IAAA,GAAA51C,EAAA,6BACA,EAAA41C,IAAA,GAAA51C,EAAA,gBAAAA,EAAA,iBAAAA,EAAA,kBAAAqhD,IAAA,GAAArhD,EAAA,kBAAAqhD,IAAA,GAAArhD,EAAA,oBAAAA,EAAA,0BAAA7+B,EAAAN,GAAA,OAAAM,EAAAskE,IAAAjf,QAAA47B,UAAAvhF,CAAA,IAAAm/B,EAAA,0BAAAA,EAAA,8BAAA7+B,GAAA,OAAAA,EAAA6+F,SAAA,OAAAhgE,EAAA,yBAAAqhD,IAAA,GAAArhD,EAAA,mCAAA7+B,EAAAN,MAAAM,EAAA05D,QAAA30D,MAAAy4F,eAAA,IAAA3+D,EAAA,0BAAA7+B,EAAAN,GAAA,OAAAM,EAAA05D,QAAA30D,MAAAilF,WAAAyJ,SAAA/zF,GAAA,MAAAm/B,EAAA,kBAAAA,EAAA,YACA,gBAAA7+B,EAAAN,GAAA,OAAAM,EAAAskE,IAAA+yB,aAAA33F,EAAA,OAAAm/B,EAAA,iBAPA,CAOAiuD,IAAA,SAAA3sF,GAAA,IAAA0+B,EAAA1+B,EAAAi7F,eAAA3qE,EAAAtwB,EAAA6+F,QAAA,GAAA7+F,EAAA8C,UAAA,CAAAa,YAAA3D,EAAA06D,MAAA,WAAAqE,GAAA54D,MAAAoxD,YAAAmD,QAAAv0D,KAAAozD,QAAA30D,MAAA81D,OAAA,EAAAokC,UAAA,SAAAj/F,EAAAN,GAAA,IAAAK,EAAAuG,KAAAoC,QAAA2qD,EAAAtzD,EAAAC,GAAA,GAAAD,EAAAC,IAAAN,GAAA,QAAAM,EAAAD,EAAAC,GAAAN,EAAAm/B,EAAA5wB,eAAAjO,IAAAw7E,GAAAl1E,KAAAu4B,EAAA7+B,GAAAw7E,CAAAl1E,KAAA5G,EAAA2zD,GAAA2N,EAAA16D,KAAA,eAAAA,KAAAtG,EAAA,EAAAspE,UAAA,SAAAtpE,GAAA,OAAAsG,KAAAoC,QAAA1I,EAAA,EAAAk/F,OAAA,kBAAA54F,KAAAg+D,GAAA,EAAAtK,UAAA,SAAAh6D,EAAAN,GAAA4G,KAAA0sB,MAAA22D,QAAAjqF,EACA,kBAAAqoF,GAAA/nF,GAAA,EAAAq8D,aAAA,SAAAr8D,GAAA,QAAAN,EAAA4G,KAAA0sB,MAAA22D,QAAA5pF,EAAA,EAAAA,EAAAL,EAAAe,SAAAV,EAAA,GAAAL,EAAAK,IAAAC,GAAAN,EAAAK,GAAA+F,MAAA9F,EAAA,OAAAN,EAAA4+D,OAAAv+D,EAAA,OAAAo/F,WAAA1jB,IAAA,SAAAz7E,EAAAN,GAAA,IAAAK,EAAAC,EAAA6Q,MAAA7Q,EAAAG,EAAAsyD,QAAAnsD,KAAAoC,QAAA1I,GAAA,GAAAD,EAAAqjE,WAAA,MAAAhjE,MAAA,iCAAAu/D,GAAAr5D,KAAA0sB,MAAAwxC,SAAA,CAAArP,KAAAp1D,EAAAq/F,SAAAp/F,EAAAykE,OAAA/kE,KAAA+kE,OAAA46B,SAAA3/F,KAAA2/F,UAAA,aAAAhsC,GAAA,OAAAA,EAAAgsC,QAAA,IAAA/4F,KAAA0sB,MAAAoxC,UAAA8P,GAAA5tE,KAAA,IAAAg5F,cAAA7jB,IAAA,SAAAz7E,GAAA,QAAAN,EAAA4G,KAAA0sB,MAAAwxC,SAAAzkE,EAAA,EAAAA,EAAAL,EAAAe,SAAAV,EAAA,KAAAszD,EACA3zD,EAAAK,GAAAq/F,SAAA,GAAA/rC,GAAArzD,GAAA,iBAAAA,GAAAqzD,EAAAvtD,MAAA9F,EAAA,CAAAN,EAAA4+D,OAAAv+D,EAAA,GAAAuG,KAAA0sB,MAAAoxC,UAAA8P,GAAA5tE,MAAA,WAAA00F,WAAAvf,IAAA,SAAAz7E,EAAAN,EAAAK,GAAA,iBAAAL,GAAA,iBAAAA,MAAA,MAAAA,EAAA4G,KAAAoC,QAAA2mF,YAAA,eAAA3vF,EAAA,kBAAA+jE,GAAAn9D,KAAAg+D,IAAAtkE,IAAAwuF,GAAAloF,KAAAtG,EAAAN,EAAAK,EAAA,IAAAy6F,gBAAA/e,IAAA,SAAAz7E,GAAA,QAAAN,EAAA4G,KAAAg+D,IAAAyQ,IAAA7kE,OAAAnQ,GAAA,EAAAszD,EAAA,EAAAA,EAAA3zD,EAAAe,OAAA4yD,IAAA,KAAAW,EAAAt0D,EAAA2zD,GAAA,GAAAW,EAAArnC,QAAAqnC,EAAAsH,KAAA5sD,KAAA3O,IAAAyuF,GAAAloF,KAAA0tD,EAAAsH,KAAA5sD,KAAA1O,GAAA,GAAAD,EAAAi0D,EAAAsH,KAAA5sD,KAAA2kD,GAAA/sD,KAAAg+D,IAAAyQ,IAAAC,WAAAuC,GAAAjxE,WAAA,KAAAstD,EAAAI,EAAA7vD,OACA6vD,IAAAV,KAAA,IAAA/gC,EAAAyM,KAAA/K,IAAAl0B,EAAA6zD,EAAAllD,MAAA3O,EAAAi/B,KAAAhL,IAAA1tB,KAAAotD,WAAAM,EAAAtlD,MAAAslD,EAAAphC,GAAA,YAAAohC,EAAAzhC,EAAAyhC,EAAAj0D,IAAAi0D,EAAAw6B,GAAAloF,KAAA0tD,EAAAh0D,GAAAg0D,EAAA1tD,KAAAg+D,IAAAyQ,IAAA7kE,OAAA,GAAA0jD,EAAAhhC,IAAAlzB,EAAAe,QAAAuzD,EAAAvzD,QAAA,EAAAuzD,EAAAX,GAAAlvD,OAAAyuB,IAAA6vD,GAAAn8E,KAAAg+D,IAAAjR,EAAA,IAAAhB,EAAAuB,EAAAI,EAAAX,GAAAC,MAAAuwB,GAAA,MAAAxuB,WAAA,SAAAr1D,EAAAN,GAAA,OAAAymE,GAAA7/D,KAAAtG,EAAAN,EAAA,EAAA6/F,cAAA,SAAAv/F,EAAAN,GAAA,OAAAymE,GAAA7/D,KAAA1G,EAAAI,GAAAN,GAAA,IAAA6yD,eAAA,SAAAvyD,KAAA80D,EAAAxuD,KAAAg+D,IAAAtkE,GAAA,IAAAN,EAAAolE,GAAAx+D,KAAAquD,EAAAruD,KAAAg+D,IAAAtkE,EAAA0O,OAAA3O,EAAA,EAAAszD,GAAA3zD,EAAAe,OAAA,KAAAT,IAAA4yB,GAAA,MAAA5yB,EAAAN,IAAA,oBAAAs0D,EAAAj0D,EAAAszD,GAAA,MAAAW,EAAAt0D,EAAA,EAAAs0D,EAAA,OAAAh0D,EAAAqzD,EAAAW,OAAA,GAAAt0D,EAAA,EACAs0D,EAAA,GAAAh0D,EAAAD,EAAAi0D,EAAA,OAAAt0D,IAAA,EAAAs0D,EAAA,UAAAj0D,EAAAL,IAAA2e,QAAA,wBAAAte,EAAAL,EAAA,GAAAK,EAAA,KAAAL,EAAAmG,MAAA,EAAA9F,EAAA,IAAA6yD,UAAA,SAAA5yD,GAAA,IAAAN,EAAA4G,KAAAg+D,IAAAnP,KAAA,OAAAz1D,EAAAizD,UAAAxyD,EAAAwyD,UAAAjzD,EAAA4G,KAAA+uD,WAAAr1D,GAAAgzB,OAAAmiC,KAAAz1D,CAAA,EAAAg9D,UAAA,SAAA18D,EAAAN,GAAA,OAAA4G,KAAAm2D,WAAAz8D,EAAAN,GAAA,IAAA+8D,WAAA,SAAAz8D,EAAAN,GAAA,IAAAK,EAAA,OAAA0wB,EAAAxiB,eAAAvO,GAAA,OAAAK,EAAA,IAAAszD,EAAA5iC,EAAA/wB,GAAAM,EAAAsG,KAAAssD,UAAA5yD,GAAA,oBAAAA,EAAAN,GAAA2zD,EAAArzD,EAAAN,KAAAK,EAAA+Q,KAAAuiD,EAAArzD,EAAAN,UAAA,GAAAM,EAAAN,GAAA,QAAAs0D,EAAA,EAAAA,EAAAh0D,EAAAN,GAAAe,OAAAuzD,IAAA,KAAAJ,EAAAP,EAAArzD,EAAAN,GAAAs0D,IAAAJ,GAAA7zD,EAAA+Q,KAAA8iD,EAAA,MAAA5zD,EAAAo1D,YACA/B,EAAArzD,EAAAo1D,YAAAr1D,EAAA+Q,KAAAuiD,EAAArzD,EAAAo1D,aAAA/B,EAAArzD,EAAA8F,OAAA/F,EAAA+Q,KAAAuiD,EAAArzD,EAAA8F,OAAA,IAAApG,EAAA,EAAAA,EAAA2zD,EAAAmsC,QAAA/+F,OAAAf,IAAAs0D,EAAAX,EAAAmsC,QAAA9/F,GAAAs0D,EAAAyrC,KAAAz/F,EAAAsG,QAAA,GAAAi5D,GAAAx/D,EAAAi0D,EAAAloC,MAAA/rB,EAAA+Q,KAAAkjD,EAAAloC,KAAA,OAAA/rB,CAAA,EAAA2/F,cAAA,SAAA1/F,EAAAN,GAAA,IAAAK,EAAAuG,KAAAg+D,IAAAtkE,EAAAg/B,KAAA/K,IAAAl0B,EAAAkkB,MAAA+a,KAAAhL,IAAA,MAAAh0B,EAAAD,EAAAkkB,MAAAlkB,EAAAw6B,KAAA,EAAAv6B,EAAAD,EAAAkkB,MAAAlkB,EAAAw6B,KAAA,WAAAwqC,GAAAz+D,KAAAtG,EAAA,EAAAN,GAAAszB,KAAA,EAAAqlC,aAAA,SAAAr4D,EAAAN,GAAA,IAAAK,EAAAuG,KAAAg+D,IAAAyQ,IAAAwN,UAAAviF,EAAA,MAAAA,EAAAD,EAAAu7D,KAAA,iBAAAt7D,EAAA80D,EAAAxuD,KAAAg+D,IAAAtkE,KAAAD,EAAAoE,OAAApE,EAAAuzD,KAAA,OAAAqf,GAAArsE,KAAAtG,EAAAN,GAAA,SAAA84F,WAAA,SAAAx4F,EAAAN,GAAA,OAAAgzE,GAAApsE,KACAwuD,EAAAxuD,KAAAg+D,IAAAtkE,GAAAN,GAAA,SAAAyuF,WAAA,SAAAnuF,EAAAN,GAAAM,EAAAyyE,GAAAnsE,KAAAtG,EAAAN,GAAA,eAAAszE,GAAA1sE,KAAAtG,EAAA2e,KAAA3e,EAAA44D,IAAA,EAAA+mC,aAAA,SAAA3/F,EAAAN,GAAAM,EAAAyyE,GAAAnsE,KAAA,CAAAsyD,IAAA54D,EAAA2e,KAAA,GAAAjf,GAAA,QAAAk5D,IAAA,OAAArgB,GAAAjyC,KAAAg+D,IAAAtkE,EAAAsG,KAAAozD,QAAA8Y,WAAA,EAAAotB,aAAA,SAAA5/F,EAAAN,EAAAK,GAAA,IAAAszD,GAAA,sBAAArzD,EAAA,KAAAg0D,EAAA1tD,KAAAg+D,IAAArgD,MAAA3d,KAAAg+D,IAAA/pC,KAAA,EAAAv6B,EAAAsG,KAAAg+D,IAAArgD,MAAAjkB,EAAAsG,KAAAg+D,IAAArgD,MAAAjkB,EAAAg0D,IAAAh0D,EAAAg0D,EAAAX,GAAA,GAAArzD,EAAA20D,EAAAruD,KAAAg+D,IAAAtkE,EAAA,QAAAuyE,GAAAjsE,KAAAtG,EAAA,CAAA44D,IAAA,EAAAj6C,KAAA,GAAAjf,GAAA,OAAAK,GAAAszD,GAAAuF,KAAAvF,EAAA/sD,KAAAg+D,IAAA7K,OAAA8O,GAAAvoE,GAAA,IAAA6/F,kBAAA,kBAAArsB,GAAAltE,KAAAozD,QAAA,EACA2b,iBAAA,kBAAAjE,GAAA9qE,KAAAozD,QAAA,EAAAomC,YAAA,kBAAA37F,KAAAmC,KAAAozD,QAAAgM,SAAApS,GAAAhtD,KAAAozD,QAAAiM,OAAA,EAAAo6B,UAAA,SAAA//F,EAAAN,EAAAK,EAAAszD,EAAAW,GAAA,IAAAJ,EAAAttD,KAAAozD,QAAA15D,EAAA2yE,GAAArsE,KAAAwuD,EAAAxuD,KAAAg+D,IAAAtkE,IAAA,IAAAuyB,EAAAvyB,EAAAu4D,OAAAtd,EAAAj7C,EAAA2e,KAAAjf,EAAAuoC,MAAA9K,SAAA,WAAAz9B,EAAAm4D,aAAA,2BAAAvxD,KAAAozD,QAAA30D,MAAAqmE,cAAA1rE,GAAAk0D,EAAA+a,MAAA9e,YAAAnwD,GAAA,WAAA2zD,EAAA9gC,EAAAvyB,EAAA44D,SAAA,YAAAvF,GAAA,QAAAA,EAAA,KAAA1zD,EAAAq/B,KAAA/K,IAAA2/B,EAAAuL,QAAA5F,aAAAjzD,KAAAg+D,IAAA7K,QAAAn5D,EAAA0+B,KAAA/K,IAAA2/B,EAAA+a,MAAAH,YAAA5a,EAAAkb,UAAAN,cACA,SAAAnb,GAAArzD,EAAAu4D,OAAA74D,EAAAw5D,aAAAv5D,IAAAK,EAAA44D,IAAAl5D,EAAAw5D,aAAA3mC,EAAAvyB,EAAA44D,IAAAl5D,EAAAw5D,aAAAl5D,EAAAu4D,OAAA74D,EAAAw5D,cAAAv5D,IAAA4yB,EAAAvyB,EAAAu4D,QAAAtd,EAAAv7C,EAAAq5D,YAAAz4D,IAAA26C,EAAA36C,EAAAZ,EAAAq5D,YAAA,CAAAr5D,EAAAuoC,MAAA2wB,IAAArmC,EAAA,KAAA7yB,EAAAuoC,MAAAtpB,KAAAjf,EAAAuoC,MAAArpB,MAAA,YAAAo1C,GAAA/Y,EAAA2Y,EAAA+a,MAAAH,YAAA9uE,EAAAq5D,YAAAr5D,EAAAuoC,MAAArpB,MAAA,gBAAAo1C,EAAA/Y,EAAA,YAAA+Y,IAAA/Y,GAAA2Y,EAAA+a,MAAAH,YAAA9uE,EAAAq5D,aAAA,GAAAr5D,EAAAuoC,MAAAtpB,KAAAs8B,EAAA,MAAAl7C,IAAAC,EAAAo3E,GAAA9wE,KAAA,CAAAqY,KAAAs8B,EAAA2d,IAAArmC,EAAA3T,MAAAq8B,EAAAv7C,EAAAq5D,YAAAR,OAAAhmC,EAAA7yB,EAAAw5D,eAAA,MAAAl5D,EAAA64D,WAAAgf,GAAAvxE,KAAAtG,EAAA64D,WAAA,MAAA74D,EAAA24D,YACAl2B,GAAAn8B,KAAAtG,EAAA24D,YAAA,EAAA0kC,iBAAA5hB,GAAAsO,IAAAiW,kBAAAvkB,GAAA4O,IAAA4V,eAAA7V,GAAA8V,mBAAAzkB,GAAAmP,IAAAv6B,YAAA,SAAArwD,GAAA,GAAAopF,GAAAn7E,eAAAjO,GAAA,OAAAopF,GAAAppF,GAAAQ,KAAA,KAAA8F,KAAA,EAAA65F,gBAAA1kB,IAAA,SAAAz7E,GAAAgvF,GAAA1oF,KAAAtG,EAAA,IAAAogG,SAAA,SAAApgG,EAAAN,EAAAK,EAAAszD,GAAA,IAAAW,EAAA,IAAAt0D,IAAAs0D,GAAA,EAAAt0D,MAAAM,EAAA80D,EAAAxuD,KAAAg+D,IAAAtkE,GAAA,QAAA4zD,EAAA,EAAAA,EAAAl0D,IAAAM,EAAA4vF,GAAAtpF,KAAAg+D,IAAAtkE,EAAAg0D,EAAAj0D,EAAAszD,IAAArzD,EAAA6vF,WAAAj8B,GAAA,OAAA5zD,CAAA,EAAAw5F,MAAA/d,IAAA,SAAAz7E,EAAAN,GAAA,IAAAK,EAAAuG,UAAA6uF,oBAAA,SAAA9hC,GAAA,OAAAtzD,EAAA25D,QAAA6E,OAAAx+D,EAAAukE,IAAAluD,QAAAi9C,EAAA1mC,QAAAijE,GAAA7vF,EAAAukE,IACAjR,EAAAiI,KAAAt7D,EAAAN,EAAAK,EAAA2I,QAAA23F,iBAAA,EAAArgG,EAAAqzD,EAAAlvD,OAAAkvD,EAAAC,IAAA,GAAAy+B,GAAA,IAAAkI,QAAAxe,IAAA,SAAAz7E,EAAAN,GAAA,IAAAK,EAAAuG,KAAAg+D,IAAAh+D,KAAAg+D,IAAAyQ,IAAAvgB,oBAAAz0D,EAAAsnF,iBAAA,mBAAAuB,GAAAtiF,MAAA,SAAA+sD,GAAA,IAAAW,EAAA47B,GAAA7vF,EAAAszD,EAAAiI,KAAAt7D,EAAAN,GAAA,YAAAM,EAAA,CAAAmE,KAAA6vD,EAAAV,GAAAD,EAAAiI,MAAA,CAAAn3D,KAAAkvD,EAAAiI,KAAAhI,GAAAU,EAAA,OAAAssC,SAAA,SAAAtgG,EAAAN,EAAAK,EAAAszD,GAAA,IAAAW,EAAA,IAAAt0D,IAAAs0D,GAAA,EAAAt0D,MAAA,IAAAk0D,EAAAkB,EAAAxuD,KAAAg+D,IAAAtkE,GAAA,IAAAA,EAAA,EAAAA,EAAAN,IAAAk0D,EAAA+e,GAAArsE,KAAAstD,EAAA,aAAAP,IAAAO,EAAAj1C,KAAAi1C,EAAAj1C,KAAA00C,EAAAO,EAAAk8B,GAAAxpF,KAAAstD,EAAAI,EAAAj0D,IAAA6zD,EAAAi8B,WAAA7vF,GAAA,OAAA4zD,CAAA,EAAAulC,MAAA1d,IAAA,SAAAz7E,EAAAN,GAAA,IAAAK,EAAAuG,KAAA+sD,EAAA/sD,KAAAg+D,IAAAtQ,EAAA,GAAAJ,GACAttD,KAAAozD,QAAA6E,QAAAlL,EAAAj9C,QAAAi9C,EAAA0hB,IAAAvgB,oBAAAnB,EAAA8hC,oBAAA,SAAAl6C,GAAA,GAAA2Y,EAAA,SAAA5zD,EAAAi7C,EAAA92C,OAAA82C,EAAAqY,KAAA,IAAA3zD,EAAAgzE,GAAA5yE,EAAAk7C,EAAAqgB,KAAA,aAAArgB,EAAAslD,aAAA5gG,EAAAgf,KAAAs8B,EAAAslD,YAAAvsC,EAAAljD,KAAAnR,EAAAgf,MAAA,IAAAre,EAAAwvF,GAAA/vF,EAAAJ,EAAAK,EAAAN,GAAA,QAAAA,GAAAu7C,GAAAoY,EAAA0hB,IAAAwN,WAAAlL,GAAAt3E,EAAA2yE,GAAA3yE,EAAAO,EAAA,OAAAs4D,IAAAj5D,EAAAi5D,KAAA,OAAAt4D,CAAA,GAAAyxF,IAAA,GAAA/9B,EAAAvzD,OAAA,QAAA8xB,EAAA,EAAAA,EAAA8gC,EAAA0hB,IAAA7kE,OAAAzP,OAAA8xB,IAAA8gC,EAAA0hB,IAAA7kE,OAAAqiB,GAAAguE,WAAAvsC,EAAAzhC,EAAA,IAAAw5D,WAAA,SAAA/rF,GAAA,IAAAN,EAAAi1D,EAAAruD,KAAAg+D,IAAAtkE,EAAA0O,MAAAwC,KAAAnR,EAAAC,EAAA4yB,GAAAygC,EAAArzD,EAAA4yB,GAAA,GAAAlzB,EAAA,KAAAs0D,EAAA1tD,KAAAo2D,UAAA18D,EAAA,uBACAA,EAAA6jE,QAAAxQ,GAAA3zD,EAAAe,SAAAV,IAAAszD,IAAAtzD,EAAA,IAAA6zD,EAAAl0D,EAAA0X,OAAArX,GAAA,IAAA6zD,EAAAoM,GAAApM,EAAAI,GAAA,SAAAzhC,GAAA,OAAAytC,GAAAztC,EAAAyhC,EAAA,OAAAjuD,KAAA6tD,GAAA,SAAArhC,GAAA,WAAAxsB,KAAAwsB,EAAA,WAAAA,GAAA,YAAAxsB,KAAAwsB,KAAAytC,GAAAztC,EAAA,IAAAxyB,GAAA6zD,EAAAl0D,EAAA0X,OAAArX,EAAA,OAAAA,EAAA,KAAAszD,EAAA3zD,EAAAe,QAAAmzD,EAAAl0D,EAAA0X,OAAAi8C,QAAA,YAAAhB,EAAAzyD,EAAAI,EAAA0O,KAAA3O,GAAAH,EAAAI,EAAA0O,KAAA2kD,GAAA,EAAA6nC,gBAAA,SAAAl7F,GAAA,SAAAA,MAAAsG,KAAA0sB,MAAAm6D,WAAA7mF,KAAA0sB,MAAAm6D,WAAA7mF,KAAA0sB,MAAAm6D,WAAAnuB,GAAA14D,KAAAozD,QAAAuc,UAAA,wBAAAa,GAAAxwE,KAAAozD,QAAAuc,UAAA,wBAAAjV,EAAA16D,KAAA,kBACAA,UAAA0sB,MAAAm6D,UAAA,EAAA9W,SAAA,kBAAA/vE,KAAAozD,QAAA30D,MAAAilF,YAAAznD,GAAA28B,GAAA54D,MAAA,EAAAsgF,WAAA,oBAAAtgF,KAAAoC,QAAA6+D,WAAAjhE,KAAAg+D,IAAAof,SAAA,EAAAib,SAAAljB,IAAA,SAAAz7E,EAAAN,GAAAi4E,GAAArxE,KAAAtG,EAAAN,EAAA,IAAA85D,cAAA,eAAAx5D,EAAAsG,KAAAozD,QAAA0V,SAAA,OAAAzwD,KAAA3e,EAAA24D,WAAAC,IAAA54D,EAAA64D,UAAAY,OAAAz5D,EAAAs5D,aAAA6V,GAAA7oE,WAAAozD,QAAA6V,UAAA3V,MAAA55D,EAAAo4E,YAAAjJ,GAAA7oE,WAAAozD,QAAA2V,SAAA9V,aAAA+V,GAAAhpE,MAAAkoE,YAAAlhB,GAAAhnD,MAAA,EAAAy1D,eAAA0f,IAAA,SAAAz7E,EAAAN,GAAA,MAAAM,KACA,CAAAmE,KAAAmC,KAAAg+D,IAAAyQ,IAAAwN,UAAAjnB,KAAAhI,GAAA,YAAA5zD,MAAA4G,KAAAoC,QAAAgvE,qBAAA,iBAAA13E,IAAA,CAAAmE,KAAAvE,EAAAI,EAAA,GAAAszD,GAAA,YAAAtzD,EAAAmE,OAAAnE,EAAA,CAAAmE,KAAAnE,EAAAszD,GAAA,OAAAtzD,EAAAszD,KAAAtzD,EAAAszD,GAAAtzD,EAAAmE,MAAAnE,EAAAy3E,OAAA/3E,GAAA,QAAAM,EAAAmE,KAAAuK,MAAA4oE,GAAAhxE,WAAAk7D,MAAAgW,YAAAx3E,GAAA43E,GAAAtxE,KAAAtG,EAAAmE,KAAAnE,EAAAszD,GAAAtzD,EAAAy3E,OAAA,IAAAkQ,QAAAlM,IAAA,SAAAz7E,EAAAN,GAAA,IAAAK,EAAAuG,KAAA+sD,EAAA,SAAAO,GAAA,uBAAAA,GAAA,QAAA7tD,KAAAV,OAAAuuD,MAAA,KAAAA,CAAA,QAAA5zD,IAAAsG,KAAAozD,QAAAyF,QAAAl3B,MAAA2xB,MAAAvG,EAAArzD,IAAA,MAAAN,IAAA4G,KAAAozD,QAAAyF,QAAAl3B,MAAAwxB,OAAApG,EAAA3zD,IAAA4G,KAAAoC,QAAA2nE,cACAqB,GAAAprE,MAAA,IAAA0tD,EAAA1tD,KAAAozD,QAAAgM,SAAAp/D,KAAAg+D,IAAAtgE,KAAAgwD,EAAA1tD,KAAAozD,QAAAiM,QAAA,SAAA/R,GAAA,GAAAA,EAAAka,QAAA,QAAAv7C,EAAA,EAAAA,EAAAqhC,EAAAka,QAAArtE,OAAA8xB,IAAA,GAAAqhC,EAAAka,QAAAv7C,GAAAy7C,UAAA,CAAAuG,GAAAx0E,EAAAi0D,EAAA,kBAAAA,CAAA,IAAA1tD,KAAAk7D,MAAAwO,aAAA,EAAAhP,EAAA16D,KAAA,UAAAA,KAAA,IAAAwtD,UAAA,SAAA9zD,GAAA,OAAAu7E,GAAAj1E,KAAAtG,EAAA,EAAAwgG,eAAA,kBAAAhnB,GAAAlzE,KAAA,EAAAm6F,aAAA,kBAAAxmB,GAAA3zE,KAAA,EAAAu4F,QAAApjB,IAAA,eAAAz7E,EAAAsG,KAAAozD,QAAAoY,iBAAAoC,GAAA5tE,WAAAk7D,MAAAwO,aAAA,EAAA4B,GAAAtrE,MAAAqxE,GAAArxE,UAAAg+D,IAAA3L,WAAAryD,KAAAg+D,IAAAzL,WACA0kB,GAAAj3E,KAAAozD,UAAA,MAAA15D,GAAA,GAAAg/B,KAAAwxC,IAAAxwE,EAAAwzE,GAAAltE,KAAAozD,WAAApzD,KAAAoC,QAAA2nE,eAAAyD,GAAAxtE,MAAA06D,EAAA16D,KAAA,UAAAA,KAAA,IAAAo6F,QAAAjlB,IAAA,SAAAz7E,GAAA,IAAAN,EAAA4G,KAAAg+D,IAAA5kE,EAAAo2D,GAAA,KAAAxvD,KAAA0sB,MAAA+3D,eAAAzkF,KAAA0sB,MAAA+3D,gBAAAnK,GAAAt6E,KAAAtG,GAAA4xE,GAAAtrE,WAAAozD,QAAA30D,MAAAktB,QAAA0lD,GAAArxE,KAAAtG,EAAA24D,WAAA34D,EAAA64D,WAAAvyD,KAAAk7D,MAAA0Z,aAAA,EAAApP,GAAAxlE,KAAA,UAAAA,KAAA5G,GAAA,OAAAA,CAAA,IAAAihG,OAAA,SAAA3gG,GAAA,IAAAN,EAAA4G,KAAAoC,QAAAk4F,QAAA,OAAAlhG,GAAAiD,OAAAM,UAAAgL,eAAAzN,KAAAd,EAAAM,GAAAN,EAAAM,IAAA,EAAAw3D,cAAA,kBAAAlxD,KAAAozD,QAAA30D,MAAAilF,UAAA,EACAvvB,kBAAA,kBAAAn0D,KAAAozD,QAAAyF,OAAA,EAAA0hC,mBAAA,kBAAAv6F,KAAAozD,QAAA0V,QAAA,EAAA0xB,iBAAA,kBAAAx6F,KAAAozD,QAAA6U,OAAA,GAAA5M,GAAAxhE,KAAA01D,eAAA,SAAA71D,EAAAN,EAAAK,GAAA0wB,EAAAxiB,eAAAjO,KAAAywB,EAAAzwB,GAAAG,EAAAH,GAAA,CAAAw/F,QAAA,KAAA/uE,EAAAzwB,GAAAN,GAAAK,CAAA,EAAAI,EAAA4gG,qBAAA,SAAA/gG,EAAAN,EAAAK,EAAAszD,GAAAlzD,EAAA01D,eAAA71D,EAAAN,EAAA2zD,GAAA5iC,EAAAzwB,GAAAw/F,QAAA1uF,KAAA,CAAA2uF,KAAA1/F,EAAA+rB,IAAAunC,GAAA,GAjBA,CAiBAy5B,GAAA,IAAAkU,GAAA,gDAAA1tF,MAAA,KAAA2tF,GAAA,IAAAA,MAAAjU,GAAA/pF,UAAA+pF,GAAA/pF,UAAAgL,eAAAgzF,KACA,EAAA1hC,GAAAyhC,GAAAC,MAAAnU,EAAA7pF,UAAAg+F,IAAA,SAAA9gG,GAAA,yBAAAA,EAAAglC,MAAA7+B,KAAAg+D,IAAAhuD,UAAA,GAAA02E,GAAA/pF,UAAAg+F,MAAAt/B,GAAAqrB,IAAAF,EAAAG,YAAA,CAAA8Q,SAAAN,EAAAyD,gBAAA5F,GAAAxO,EAAAqU,WAAA,SAAAhhG,GAAA2sF,EAAAqO,SAAAhmC,MAAA,QAAAh1D,IAAA2sF,EAAAqO,SAAAhmC,KAAAh1D,GAAAoiE,GAAAp9B,MAAA7+B,KAAAgQ,UAAA,EAAAw2E,EAAAsU,WAAA,SAAAjhG,EAAA0+B,GAAA8jC,GAAAxiE,GAAA0+B,CAAA,EAAAiuD,EAAAqU,WAAA,0BAAAtwF,MAAA,SAAA1Q,GAAA,OAAAA,EAAA2yF,WAAA,MAAAhG,EAAAsU,WAAA,qBAAAtU,EAAA35B,gBAAA,SAAAhzD,EAAA0+B,GAAAiuD,EAAA7pF,UAAA9C,GAAA0+B,CAAA,EAAAiuD,EAAAuU,mBAAA,SAAAlhG,EAAA0+B,GAAAmuD,GAAA/pF,UAAA9C,GACA0+B,CAAA,EAAAiuD,EAAAwU,aAAA,SAAAnhG,EAAA0+B,GAAA,SAAApO,IAAAtwB,EAAAiD,MAAA4wD,EAAA0gC,UAAA,CAAA71D,IAAAwgC,GAAAxgC,GAAA,GAAAA,EAAAz7B,MAAAjD,EAAAiD,OAAAy7B,EAAA0iE,UAAAphG,EAAAszF,WAAA50D,EAAA0iE,SAAAphG,EAAAszF,WAAA50D,EAAA2iE,aAAArhG,EAAAqhG,cAAA3iE,EAAA2iE,YAAArhG,EAAAqhG,aAAA,SAAA3iE,EAAA0uD,UAAA,KAAAvtF,EAAAuiC,GAAApiC,EAAAs3D,eAAA54B,EAAA0uD,UAAAvtF,GAAAG,GAAA,MAAAA,EAAAuuE,aAAA,cAAA1uE,GAAAmtD,SAAAh0C,IAAA,IAAAhZ,EAAAshG,OAAA7sC,EAAAz0D,EAAAshG,KAAA,SAAAhxE,IAAAoO,EAAA6iE,wBAAA,KAAAhiG,EAAAS,EAAAshG,KAAA,IAAA1hG,EAAAL,EAAAiiG,OAAA,QAAAtuC,EAAA3zD,EAAAiiG,OAAA,WAAAlxE,IAAA/wB,EAAAiiG,OAAA5hG,EAAAL,EAAAiiG,SAAAjiG,EAAAiiG,OAAAtuC,CAAA,QAAAO,GAAA,EAAA/0B,EAAA8uD,WACA,SAAA/5B,KAAAsR,KAAAz0C,EAAAmjC,EAAAguC,YAAA,kBAAAzhG,CAAA,EAAAyzD,EAAAiuC,WAAA,WAAAjuC,EAAAiuC,WAAA3yB,MAAAz+C,IAAAtwB,EAAAsxC,WAAA6e,YAAAsD,EAAA6G,qBAAAt6D,EAAA8nC,MAAAyxB,QAAA,GAAAv5D,EAAAshG,OAAA7gC,GAAAzgE,EAAAshG,KAAA,SAAAhxE,GAAAoO,EAAA6iE,wBAAA,mBAAAvhG,EAAAshG,KAAAE,SAAAxhG,EAAAshG,KAAAE,OAAA5hG,GAAA,GAAAI,EAAA8nC,MAAAyxB,QAAA,WAAA1F,EAAA84B,GAAA,SAAAl5B,GAAA,OAAAzzD,EAAAsxC,WAAAo7B,aAAAjZ,EAAAzzD,EAAA25D,YAAA,GAAAj7B,GAAA,OAAAm1B,CAAA,YAAA7zD,KAAA27D,IAAA8E,GAAAzgE,EAAAmjD,GAAAsR,EAAAz0D,EAAA2hG,iBAAAhjB,GAAA3+E,EAAA4hG,IAAA/U,GAAA7sF,EAAAykF,WAAAgK,GAAAzuF,EAAA6hG,YAAA1iC,GAAAn/D,EAAA8hG,WAAAziC,GAAAr/D,EAAA+hG,WACApiC,GAAA3/D,EAAAgiG,KAAA7Y,GAAAnpF,EAAA66D,OAAAgG,EAAA7gE,EAAAiiG,KAAA9hB,GAAAngF,EAAAkiG,UAAAziB,GAAAz/E,EAAAmiG,eAAAhpB,GAAAn5E,EAAA2yD,IAAAlzD,EAAAO,EAAA6yD,OAAAiC,EAAA90D,EAAAoiG,MAAA9/B,GAAAtiE,EAAAqiG,UAAA7/B,GAAAxiE,EAAAsiG,YAAA//B,GAAAviE,EAAAsyD,QAAAmQ,GAAAziE,EAAAuiG,eAAA7/B,GAAA1iE,EAAAwiG,WAAA5/B,GAAA5iE,EAAA8iE,UAAAD,GAAA7iE,EAAAijE,WAAAD,GAAAhjE,EAAAwyD,UAAAuQ,GAAA/iE,EAAA8yD,SAAAm2B,GAAAjpF,EAAA85D,OAAA0uB,GAAAxoF,EAAAwgB,QAAA8nE,GAAAtoF,EAAAyiG,cAAA3a,GAAA9nF,EAAA0iG,UAAA/a,GAAA3nF,EAAA2iG,gBAAAjb,GAAA1nF,EAAA4iG,aAAAl9B,EAAA1lE,EAAA6iG,iBAAA/c,GAAA9lF,EAAA8iG,WAAA1d,GAAAplF,EAAA+iG,WAAAlyE,GAAA7wB,EAAAgjG,iBAAAvhC,GAAAzhE,EAAAijG,kBAAAthC,GAAA3hE,EAAAkjG,OAAAphC,GAAA9hE,EAAAk5E,SAAAra,GAAA7+D,EAAAy+D,SAAAH,GAAAt+D,EAAAmjG,QAAAxsB,GAAA32E,EAAAojG,SAAArb,EAAA,EADA,CACA4E,GACAA,EAAApvD,QAAA,gBAAAovD,CAAA,G,8KClVA,SAAA75D,GAAA,iBAAA1yB,SAAA,iBAAAG,OAAAuyB,EAAAhzB,QAAA,4CAAAiG,eAAAC,IAAAD,OAAA,yBAAA+sB,KAAAm/B,WAAA,aAAAn/B,KAAAkuE,WAAA,uBAAA1gB,GAAA/rB,GAAA,IAAAp0D,EAAAq0D,EAAA50D,EAAA,SAAAG,EAAAC,EAAA0+B,EAAApO,GAAAgtE,EAAAt9F,EAAAu7E,GAAAjrD,EAAA,OAAAoO,CAAA,UAAAwzB,EAAAlyD,EAAA0+B,GAAA,IAAApO,EAAAtwB,EAAAyN,OAAA,QAAA6iB,GAAA,KAAAA,EAAA,OAAAoO,EAAA2kE,SAAAje,GAAA90D,GAAAoO,EAAA2kE,SAAArjG,EAAA0+B,GAAA,QAAApO,GAAAtwB,EAAA8W,MAAA,yCAAA/W,EAAA,2BAAAuwB,GAAAtwB,EAAA8W,MAAA,aAAA/W,EAAA,iBACA,uBAAA6F,KAAA0qB,GAAA,OAAAvwB,EAAAuwB,GAAA,QAAAA,GAAAtwB,EAAAkX,IAAA,YAAAnX,EAAA,yBAAAuwB,GAAAtwB,EAAA8W,MAAA,gDAAA/W,EAAA,2BAAA6F,KAAA0qB,GAAA,OAAAtwB,EAAA8W,MAAA,oDAAA/W,EAAA,2BAAAuwB,EAAA,IAAAtwB,EAAAkX,IAAA,YAAAwnB,EAAA2kE,SAAAlhB,MAAAniF,EAAA0+B,GAAA,GAAA1+B,EAAAkX,IAAA,YAAAlX,EAAA2yF,YAAA5yF,EAAA,wBAAAkwE,GAAAjwE,EAAA0+B,EAAA,IAAA1+B,EAAA,QAAAT,EAAAm/B,GAAA,SAAApO,EAAAtwB,EAAAyN,SAAA,KAAAixB,EAAA,SAAApO,IAAA/wB,EAAA,MAAAS,EAAA,KAAAswB,EAAA/wB,GAAA,EAAAA,GAAA,KAAA+wB,IAAA/wB,GACA,GAAAm/B,MAAA,MAAApO,CAAA,CAAAtwB,EAAA8W,MAAA,4CAAA/W,EAAA,qBAAAC,EAAAkX,IAAA,YAAAnX,EAAA,sBAAAC,EAAAsyB,UAAA,SAAAhC,EAAA,OAAAoO,EAAA2kE,SAAAxiC,IAAA7gE,EAAA0+B,GAAA,QAAApO,GAAA,KAAAtwB,EAAAwyF,OAAA,OAAAxyF,EAAA2yF,YAAA5yF,EAAA,uBAAAuwB,GAAAtwB,EAAAyyF,SAAArzB,IAAA,OAAAr/D,EAAA,+BAAAuwB,GAAAtwB,EAAA8W,MAAA,aAAAwZ,GAAAtwB,EAAA8W,MAAA,aAAAlR,KAAA5F,EAAA2I,OAAAjD,MAAA,EAAA1F,EAAA4O,QAAA,OAAA5O,EAAA2yF,YAAA5yF,EAAA,wBAAAyyE,GAAA5sE,KAAA0qB,GAAA,WAAAA,GAAAoO,EAAAhQ,SAAA,KAAAgQ,EAAAhQ,QAAAvd,OAAAnR,EAAAkX,IAAA,KACA,KAAAoZ,GAAA,KAAAA,GAAAtwB,EAAAkX,IAAA,mBAAAtR,KAAA0qB,KAAAtwB,EAAAkX,IAAAoZ,GAAA,KAAAA,GAAAtwB,EAAAkX,IAAAoZ,KAAA,KAAAA,GAAAtwB,EAAAkX,IAAA,KAAAnX,EAAA,KAAAA,EAAA,sBAAAC,EAAAsyB,WAAA,GAAA8sC,GAAAx5D,KAAA0qB,GAAA,CAAAtwB,EAAAyyF,SAAArzB,IAAA9uC,EAAAtwB,EAAAsyB,UAAA,QAAAoM,EAAA4kE,SAAA,IAAAnkB,GAAAokB,qBAAAjzE,GAAA,OAAAtwB,EAAAm/E,GAAA7uD,GAAAvwB,EAAAC,EAAAmR,KAAAnR,EAAA8nC,MAAAxX,GAAA,YAAAA,GAAAtwB,EAAA8W,MAAA,sDAAA/W,EAAA,kBAAAuwB,EAAA,QAAAvwB,EAAA,sBAAAuwB,EAAA,WAAA80D,GAAAplF,GAAA,gBAAA0+B,EAAApO,GAAA,IAAA/wB,GAAA,EAAAs0D,EAAA,GAAAiV,IAAA,KAAApqC,EAAA8zD,QAAA9zD,EAAA5nB,MAAAixE,IAAA,OAAAz3D,EAAA+yE,SACAnxC,EAAAnyD,EAAA,qCAAA8zD,EAAAn1B,EAAAjxB,UAAAomD,GAAA7zD,GAAAT,UAAA,MAAAs0D,EAAAt0D,IAAA+wB,EAAA+yE,SAAAnxC,GAAA,OAAAnyD,EAAA,6BAAAoiF,GAAAniF,EAAA0+B,GAAA,QAAApO,GAAA,EAAA/wB,IAAAS,EAAAyN,QAAA,SAAAlO,GAAA+wB,EAAA,CAAAoO,EAAA2kE,SAAAnxC,EAAA,MAAA5hC,EAAA,KAAA/wB,CAAA,QAAAQ,EAAA,8BAAA8gE,EAAA7gE,EAAA0+B,GAAA,QAAApO,GAAA,EAAA/wB,EAAA,OAAAA,EAAAS,EAAAyN,SAAA,KAAA6iB,IAAA,KAAA/wB,GAAA,KAAAA,GAAAS,EAAAkX,IAAA,OAAAwnB,EAAA2kE,SAAAnxC,EAAA,MAAA5hC,MAAA,MAAA/wB,CAAA,QAAAQ,EAAA,mBAAAC,EAAAsyB,UAAA,UAAAysC,GAAA/+D,EAAA0+B,KAAA8kE,aAAA9kE,EAAA8kE,WAAA,UAAAlzE,EAAAtwB,EAAA2I,OAAAuV,QAAA,KAAAle,EAAA4O,OAAA,OACA0hB,GAAA,IAAAhxB,EAAA,KAAAC,EAAA,6CAAAsX,KAAA7W,EAAA2I,OAAAjD,MAAA1F,EAAA4O,MAAA0hB,IAAA/wB,IAAA+wB,EAAA/wB,EAAAyX,MAAA,CAAAzX,EAAA,MAAAs0D,GAAA,QAAAvjC,EAAA,GAAAA,MAAA,KAAAwqB,EAAA96C,EAAA2I,OAAAsO,OAAAqZ,GAAAsO,EAAA,SAAA1gB,QAAA48B,GAAA,MAAAlc,GAAA,EAAAA,EAAA,KAAAr/B,EAAA,GAAA+wB,EAAA,cAAA/wB,EAAA,MAAAu7C,IAAA+Y,GAAA,qBAAAj1B,GAAA,EAAAA,IAAAr/B,OAAA,GAAA6/D,GAAAx5D,KAAAk1C,GAAA+Y,GAAA,oBAAAjuD,KAAAk1C,GAAA,QAAAxqB,EAAA,OAAAA,EAAA,UAAAtwB,EAAA2I,OAAAsO,OAAAqZ,EAAA,IAAAwqB,GAAA,MAAA96C,EAAA2I,OAAAsO,OAAAqZ,EAAA,IAAAA,IAAA,eAAAujC,IAAAt0D,EAAA,GAAA+wB,EAAA,OAAAujC,IAAAt0D,IAAAm/B,EAAA8kE,WAAAlzE,EAAA,WAAA+uD,GAAAr/E,EAAA0+B,EAAApO,EAAA/wB,EAAAs0D,EAAA/Y,GAAA30C,KAAAs9F,SACAzjG,EAAAmG,KAAAsI,OAAAiwB,EAAAv4B,KAAAgL,KAAAmf,EAAAnqB,KAAAmjC,KAAAuqB,EAAA1tD,KAAAi+C,KAAAtJ,EAAA,MAAAv7C,IAAA4G,KAAAu9F,MAAAnkG,EAAA,UAAA8jE,GAAArjE,EAAA0+B,EAAApO,EAAA/wB,EAAAs0D,GAAA,IAAA/Y,EAAA96C,EAAAkkF,GAAA/jF,EAAAH,EAAAw0D,EAAAX,EAAAj0D,EAAA,KAAAw7E,GAAAtgC,EAAA4qB,EAAAhnC,EAAA1+B,EAAA0uB,QAAA5gB,eAAA,WAAA9N,EAAA0uB,QAAAg1E,OAAA,cAAA5oD,EAAAx6C,OAAAw6C,EAAAp/B,MAAAy2C,EAAA1yD,EAAAk/B,GAAArO,EAAA/wB,GAAA,MAAAu7C,EAAAx6C,QAAAw6C,IAAAx6C,OAAA,GAAAqjG,KAAA7oD,EAAAp/B,KAAAo/B,GAAA,GAAAl7C,EAAA,OAAAA,EAAA,GAAA0wB,EAAA,YAAAA,EAAAtwB,EAAA,GAAAmlE,GAAA,KAAA70C,EAAAtwB,EAAAu1D,UAAAjlC,MAAA7iB,KAAA,GAAA6iB,EAAA3qB,MAAApG,EAAA,CAAA+wB,GAAA,QAAAtwB,CAAA,KAAAA,IAAAyT,QAAAzT,MAAAspC,KAAA,IAAAhZ,EAAAtwB,EAAAw1D,KAAAllC,MAAA7iB,KAAA,GAAA6iB,EAAA3qB,MAAApG,EAAA,CAAA+wB,GAAA,QAAAtwB,CAAA,CAAAswB,OAAA,OAAAA,GAAA,SAAAA,EAAA,aAAAoO,CAAA,WAAA+0B,IAAA,QAAAzzD,EACAmW,UAAA7V,OAAA,KAAAN,MAAAo7E,GAAAzqE,KAAAwF,UAAAnW,GAAA,UAAAH,IAAA4zD,EAAAzuB,MAAA,KAAA7uB,WAAA,kBAAAu4E,GAAA1uF,EAAA0+B,GAAA,KAAAA,MAAAjxB,KAAA,GAAAixB,EAAA/4B,MAAA3F,EAAA,2BAAAm7F,EAAAn7F,GAAA,IAAA0+B,EAAAv+B,EAAAP,EAAA,SAAAulE,GAAA,IAAAzmC,EAAAjrB,QAAA,UAAAirB,EAAAhQ,QAAA01B,MAAA1lB,EAAAjrB,SAAAirB,EAAAjrB,QAAA3C,MAAA,KAAAwf,EAAA83C,GAAApoE,EAAA0+B,EAAAjrB,SAAA,SAAA6c,EAAA,CAAAoO,EAAAjrB,QAAA6c,EAAA,iBAAAo+D,GAAA1uF,EAAA0+B,EAAA62B,WAAA,CAAA72B,EAAA62B,UAAA,IAAAqU,EAAA5pE,EAAA0+B,EAAA62B,WAAA,OAAAhB,EAAAkB,aAAAi5B,GAAA1uF,EAAA0+B,EAAA+2B,cAAA/2B,EAAA+2B,WAAA,IAAAmU,EAAA5pE,EAAA0+B,EAAA+2B,YAAA,WAAA2S,GAAApoE,EAAA0+B,GAAA,OAAAA,IAAA5tB,OAAA9Q,EAAAooE,GAAApoE,EACA0+B,EAAA4K,OAAAtpC,GAAA0+B,EAAA4K,KAAA5K,EAAA,IAAAqiC,EAAA/gE,EAAA0+B,EAAA82B,MAAA,QAAAk5B,GAAA1uF,EAAA0+B,EAAA82B,MAAA92B,EAAA,IAAAqiC,EAAAriC,EAAA4K,KAAA,IAAAsgC,EAAA5pE,EAAA0+B,EAAA82B,OAAA,iBAAA6U,GAAArqE,GAAA,gBAAAA,GAAA,WAAAA,GAAA,aAAAA,GAAA,YAAAA,GAAA,YAAAA,CAAA,UAAA+gE,EAAA/gE,EAAA0+B,EAAApO,GAAAnqB,KAAAmjC,KAAAtpC,EAAAmG,KAAAqvD,KAAA92B,EAAAv4B,KAAA2K,MAAAwf,CAAA,UAAAs5C,EAAA5pE,EAAA0+B,GAAAv4B,KAAAR,KAAA3F,EAAAmG,KAAAsH,KAAAixB,CAAA,UAAAk0B,IAAAzyD,EAAAsT,QAAA,IAAAstD,EAAA5gE,EAAAsT,QAAAtT,EAAAo1D,WAAA,GAAAp1D,EAAAo1D,UAAA43B,EAAA,UAAA7R,KAAAn7E,EAAAsT,QAAA,IAAAstD,EAAA5gE,EAAAsT,QAAAtT,EAAAo1D,WAAA,GAAAp1D,EAAAo1D,UAAA,cAAAZ,IAAAx0D,EAAAo1D,UAAAp1D,EAAAsT,QAAA+hD,KAAAr1D,EAAAsT,QAAAtT,EAAAsT,QAAA61B,IAAA,UAAAlX,EAAApyB,EACA0+B,GAAA,IAAApO,EAAA,eAAA/wB,EAAAY,EAAA0zD,EAAAt0D,EAAAkkG,SAAA,WAAAlkG,EAAAmvB,QAAAvd,KAAA0iD,EAAAt0D,EAAAmvB,QAAA+0E,cAAA,QAAA3oD,EAAAv7C,EAAAmvB,QAAAosB,GAAA,KAAAA,EAAA3pC,MAAA2pC,EAAA4oD,MAAA5oD,IAAAxR,KAAAuqB,EAAA/Y,EAAA2oD,SAAAlkG,EAAAmvB,QAAA,IAAA2wD,GAAAxrB,EAAAW,EAAA/lD,SAAAzO,EAAA,KAAAT,EAAAmvB,QAAAgQ,EAAA,EAAApO,EAAAqzE,KAAA,SAAArzE,CAAA,UAAA4iC,IAAA,IAAAlzD,EAAAG,EAAAH,EAAA0uB,QAAA4a,OAAA,KAAAtpC,EAAA0uB,QAAAvd,OAAAnR,EAAAyjG,SAAAzjG,EAAA0uB,QAAA+0E,UAAAzjG,EAAA0uB,QAAA1uB,EAAA0uB,QAAA4a,KAAA,UAAA9pC,EAAAQ,GAAA,SAAA0+B,EAAApO,GAAA,OAAAA,GAAAtwB,EAAAH,IAAA,KAAAG,GAAA,KAAAswB,GAAA,KAAAA,GAAA,KAAAA,EAAAmjC,IAAA5zD,EAAA6+B,EAAA,QAAAA,CAAA,UAAAC,EAAA3+B,EAAA0+B,GAAA,aAAA1+B,EAAAH,EAAAuyB,EAAA,SAAAsM,GAAA+hC,GAAAjhE,EAAA,KAAA0zD,GAAA,aACAlzD,EAAAH,EAAAuyB,EAAA,QAAAijD,GAAA12C,EAAAu0B,GAAA,aAAAlzD,EAAAH,EAAAuyB,EAAA,QAAAuM,EAAAu0B,GAAA,aAAAlzD,EAAAw0D,EAAA19C,MAAA,YAAAjX,MAAAuyB,EAAA,QAAAy3C,EAAArqE,EAAA,KAAA0zD,GAAA,YAAAlzD,EAAAH,EAAAL,EAAA,WAAAQ,EAAAH,EAAAuyB,EAAA,KAAAkpD,GAAAhd,GAAApL,EAAAyB,GAAA,KAAA30D,EAAAH,IAAA,MAAAG,GAAA,QAAAG,EAAAuuB,QAAA01B,MAAAjkD,EAAA+jF,GAAA/jF,EAAA+jF,GAAA5jF,OAAA,IAAA4yD,GAAA/yD,EAAA+jF,GAAAxoE,KAAAvb,GAAAN,EAAAuyB,EAAA,QAAAijD,GAAA12C,EAAAu0B,EAAA8b,KAAA,YAAAhvE,EAAAH,EAAAwyD,GAAA,OAAAryD,EAAAH,EAAAuyB,EAAA,QAAAkpD,GAAAoI,GAAA/kD,EAAAg2B,EAAAzB,GAAA,SAAAlzD,GAAAV,GAAA,aAAAo/B,GAAA9+B,EAAA,UAAAC,EAAAuyB,EAAA,gBAAApyB,IAAA0+B,GAAA4hC,GAAApN,IAAA,YAAAlzD,EAAAV,GAAA,WAAAo/B,GAAA9+B,EAAA,UAAAC,EAAA8+B,IAAAr/B,IAAA,UAAAo/B,GAAA,QAAAA,GAAA,QAAAA,IAAA81B,EAAA19C,MAAA,UACA,IAAAlX,EAAA,kBAAA8+B,EAAA7+B,EAAA8nE,IAAA,QAAAjpC,EAAA7+B,EAAAyuE,GAAA9uE,EAAA,YAAAo0D,EAAAp0D,EAAA,MAAAK,EAAAuyB,EAAA,QAAAwiC,EAAAp1D,EAAA,KAAA4yB,EAAA,KAAAksC,GAAApL,MAAA5zD,GAAA,aAAAo/B,GAAA9+B,EAAA,UAAAC,EAAAuyB,EAAA,QAAA3yB,EAAAk/B,EAAAu0B,IAAA5zD,GAAA,YAAAo/B,GAAA9+B,EAAA,UAAAC,EAAA8+B,IAAA9+B,EAAAuyB,EAAA,QAAAysC,IAAA,UAAA7+D,EAAAH,EAAAuyB,EAAA,QAAAijD,GAAA71E,EAAA,KAAA4yB,EAAA,cAAAkpD,GAAAhd,GAAApL,IAAAyB,GAAA,QAAA30D,EAAAH,EAAAJ,EAAAD,EAAA,iBAAAQ,EAAAH,EAAAL,EAAA,eAAAQ,EAAAH,EAAAuyB,EAAA,QAAAwgC,EAAAsM,GAAAvgC,EAAAu0B,EAAAyB,GAAA,UAAA30D,EAAAH,EAAAuyB,EAAA,QAAAywC,GAAA3P,GAAA,UAAAlzD,EAAAH,EAAAuyB,EAAA,QAAA+wC,GAAAjQ,GAAA,SAAAlzD,EAAAH,EAAA8+B,GAAA,KAAAD,EAAA7+B,EAAAJ,EAAAk/B,GAAA80B,EAAArhC,EAAA,QAAA3yB,EAAAD,EAAA,KAAA0zD,EAAA,UAAAgM,GAAAl/D,GAAA,QAAAA,EAAA,OAAAH,EAAAk7D,EACAv7D,EAAA,eAAAC,EAAAO,EAAA0+B,GAAA,OAAAi5C,GAAA33E,EAAA0+B,GAAA,YAAAo2B,EAAA90D,EAAA0+B,GAAA,OAAAi5C,GAAA33E,EAAA0+B,GAAA,YAAA22C,GAAAr1E,GAAA,WAAAA,EAAAyzD,IAAA5zD,EAAAuyB,EAAA,KAAAy3C,EAAArqE,EAAA,KAAA0zD,EAAA,UAAAykB,GAAA33E,EAAA0+B,EAAApO,GAAA,GAAAnwB,EAAAqjG,YAAAhvC,EAAA5lD,MAAA,KAAArP,EAAA+wB,EAAAsuD,GAAAY,GAAA,QAAAx/E,EAAA,OAAAH,EAAA+yD,EAAAxgC,EAAA,KAAAqiC,EAAAsG,EAAA,KAAA7H,EAAA1zD,EAAA,MAAAD,EAAAo1D,GAAA,eAAA30D,EAAA,OAAAyzD,EAAAb,EAAAgC,EAAAp1D,EAAA,MAAAD,EAAAo1D,EAAA,CAAAp1D,EAAA+wB,EAAAw5C,EAAAxO,EAAA,OAAAljB,GAAAtqC,eAAA9N,GAAAH,EAAAN,GAAA,YAAAS,EAAAH,EAAAwyD,EAAA9yD,GAAA,SAAAS,GAAAV,GAAA,aAAAo/B,GAAA9+B,EAAA,UAAAC,EAAAuyB,EAAA,QAAA+6B,GAAA+F,IAAA,aAAAlzD,GAAA,SAAAA,EAAAH,EAAAywB,EAAAwkC,EAAAr1D,GAAA,KAAAO,EAAAH,EAAAuyB,EAAA,KAAAy3C,EAAArqE,EAAA,KAAA0zD,EAAA3zD,GAAA,YAAAS,GAAA,UAAAA,EAAAH,EAAAywB,EACAwkC,EAAAr1D,GAAA,KAAAO,EAAAH,EAAAuyB,EAAA,KAAAq9C,GAAAvc,EAAA3zD,GAAA,KAAAS,EAAA2rE,GAAAvpC,GAAA,SAAA7iC,GAAA,SAAAS,EAAAyzD,EAAAgO,GAAAliE,GAAA,OAAAS,EAAAH,EAAA8vE,GAAAr/C,IAAAzwB,GAAA,UAAAgqE,EAAA7pE,GAAA,OAAAA,EAAA8W,MAAA,cAAA28C,MAAAh0D,EAAA,UAAA67D,EAAAt7D,EAAA0+B,GAAA,WAAA1+B,EAAAH,EAAAgqE,GAAAC,EAAA9pE,EAAA0+B,GAAA,YAAAorC,EAAA9pE,EAAA0+B,EAAApO,GAAA,IAAA/wB,EAAA,GAAA+wB,EAAAgrC,EAAAwO,EAAAjW,EAAA,GAAAvjC,EAAA7wB,EAAAq1D,EAAA,SAAA90D,EAAA,OAAAH,EAAA+yD,EAAAtiC,EAAAsuD,GAAAY,GAAA7qB,GAAA,eAAA30D,EAAA,gBAAA4F,KAAA84B,IAAAp/B,GAAA,KAAAo/B,EAAA7+B,EAAAN,GAAAD,GAAA,KAAAo/B,GAAA81B,EAAA19C,MAAA,+BAAAjX,EAAAuyB,EAAA,KAAAqiC,EAAAb,EAAA,KAAAV,EAAA3zD,GAAA,KAAAm/B,EAAA7+B,EAAAJ,EAAAD,EAAA,KAAAq0D,GAAAh0D,EAAAg0D,GAAA,YAAA7zD,EAAA,OAAAyzD,EAAAgO,GAAAliE,GAAA,QAAAS,EAAA,SAAAA,EAAA,OAAA2rE,GAAA7W,EAAA,WAAAv1D,GAAA,QACAS,EAAA,OAAAH,EAAAyzE,GAAA/zE,GAAA,QAAAS,EAAA,OAAAH,EAAAuyB,EAAA,KAAAy3C,EAAArqE,EAAA,KAAA0zD,EAAA3zD,GAAA,GAAAD,GAAA,MAAAo/B,EAAA,OAAA9+B,EAAA,UAAAC,EAAA+zD,EAAAr0D,GAAA,aAAAS,EAAA,OAAAG,EAAAmjG,SAAA1jG,EAAA,WAAA40D,EAAAq+B,OAAAr+B,EAAArtD,IAAAqtD,EAAA5lD,MAAA,GAAA/O,EAAAg0D,EAAA,WAAA4N,GAAAzhE,EAAA0+B,GAAA,eAAA1+B,EAAAyzD,IAAA,MAAA/0B,EAAAh5B,MAAAg5B,EAAAp+B,OAAA,GAAAT,EAAA4hE,IAAA5hE,EAAAgqE,EAAA+J,GAAA,UAAAA,GAAA5zE,GAAA,QAAAA,EAAA,OAAAJ,EAAA,WAAAO,EAAAkjG,SAAAxiC,EAAAhhE,EAAA4hE,GAAA,UAAA+d,GAAAx/E,GAAA++D,GAAAvK,EAAAr0D,GAAA,OAAAszD,EAAA,KAAAzzD,EAAA2+B,EAAAl/B,EAAA,UAAAm/E,GAAA5+E,GAAA++D,GAAAvK,EAAAr0D,GAAA,OAAAszD,EAAA,KAAAzzD,EAAA2+B,EAAAm2B,EAAA,UAAA6a,GAAA3vE,GAAA,gBAAA0+B,GAAA,WAAAA,EAAA7+B,EAAAG,EAAAs1E,GAAAC,IAAA,YAAA72C,GAAAp/B,EAAAO,EAAA82E,GAAA32E,EAAA8pE,EAAAxO,GAAA7H,EAAAzzD,EAAA80D,EAAAr1D,EAAA,EACA,SAAA81E,GAAAv1E,EAAA0+B,GAAA,aAAAA,EAAA,OAAA9+B,EAAA,UAAAC,EAAAy7D,EAAA,UAAAga,GAAAt1E,EAAA0+B,GAAA,aAAAA,EAAA,OAAA9+B,EAAA,UAAAC,EAAAiqE,EAAA,UAAAjL,GAAA7+D,GAAA,WAAAA,EAAAH,EAAAqzD,EAAAv0B,GAAA80B,EAAA6H,EAAA97D,EAAA,KAAA0zD,EAAA,UAAAogB,GAAAtzE,GAAA,eAAAA,EAAA,OAAAJ,EAAA,WAAAC,GAAA,UAAAuiC,GAAApiC,EAAA0+B,GAAA,YAAA1+B,EAAA,OAAAJ,EAAA,WAAAC,EAAAuiC,IAAA,eAAApiC,GAAA,WAAA0lE,EAAA,CAAA9lE,EAAA,qBAAA8+B,GAAA,OAAAA,EAAA,OAAA7+B,EAAAyiC,IAAA,IAAAhS,EAAAhxB,GAAAa,EAAAqjG,YAAAhvC,EAAA5lD,QAAA0hB,EAAAkkC,EAAA19C,MAAA,kBAAA3W,EAAAqjG,WAAAhvC,EAAArtD,IAAAmpB,EAAA,GAAAhwB,QAAA,OAAAT,EAAA27D,EAAA,cAAAx7D,GAAA,UAAAA,EAAA,OAAAJ,EAAAkpE,GAAA,WACApD,EAAA,YAAA7lE,EAAA27D,GAAA,qBAAAx7D,EAAA,OAAAH,EAAA27D,GAAA,GAAAl8D,GAAA+qE,GAAA3rC,GAAA,OAAA9+B,EAAA,UAAAC,EAAAuiC,IAAA,QAAApiC,EAAA,OAAAH,EAAAJ,EAAAuqE,EAAAxqE,EAAA,KAAAg8D,GAAA,aAAAx7D,EAAA,OAAAH,EAAAi1D,EAAA0G,GAAA,QAAA98B,EAAA,OAAA9+B,EAAA,UAAAC,EAAAuiC,IAAA,QAAApiC,EAAA,OAAAyzD,EAAA+H,EAAA,UAAAl5B,GAAAtiC,GAAA,eAAAA,EAAA,OAAAyzD,EAAA+H,GAAA57D,EAAA,kBAAAC,EAAAwyD,EAAA,UAAAmJ,EAAAx7D,GAAA,QAAAA,EAAA,OAAAH,EAAAi1D,GAAA,QAAA90D,EAAA,OAAAyzD,EAAApB,EAAA,UAAAoC,EAAAz0D,EAAA0+B,EAAApO,GAAA,SAAA/wB,EAAAs0D,EAAA/Y,GAAA,OAAAxqB,GAAA,EAAAA,EAAApS,QAAA21C,GAAA,KAAAA,MAAA1zD,EAAAuuB,QAAA,QAAAmlC,EAAAzP,OAAAyP,EAAA1sD,KAAA0sD,EAAA1sD,KAAA,MAAAtH,GAAA,SAAA++B,EAAA2gD,IAAA,OAAA3gD,GAAAF,GAAA6gD,IAAA7gD,EAAA+0B,MAAAzzD,EAAA,GAAAT,IACAs0D,GAAAn1B,GAAAoc,GAAApc,EAAA7+B,IAAAywB,IAAA,EAAAA,EAAApS,QAAA,KAAAu1C,EAAAzzD,GAAAH,EAAAL,EAAAk/B,GAAA,iBAAAm1B,EAAA/Y,GAAA,OAAA+Y,GAAAn1B,GAAAoc,GAAApc,EAAA7+B,IAAA4zD,EAAAzzD,EAAAT,EAAA,WAAAosE,GAAA3rE,EAAA0+B,EAAApO,GAAA,QAAA/wB,EAAA,EAAAA,EAAA4W,UAAA7V,OAAAf,IAAA67E,GAAAzqE,KAAAwF,UAAA5W,IAAA,OAAAM,EAAAuyB,EAAAsM,EAAApO,GAAAmkC,EAAAz0D,EAAA0+B,GAAAw0B,EAAA,UAAAoL,GAAAt+D,GAAA,WAAAA,EAAAH,IAAA4zD,EAAA90B,EAAA2/B,GAAA,UAAA0L,EAAAhqE,EAAA0+B,GAAA,GAAAp/B,EAAA,SAAAU,EAAA,OAAAH,EAAA+zD,GAAA,QAAAl1B,EAAA,OAAA7+B,EAAAmqE,EAAA,WAAAqP,GAAAr5E,EAAA0+B,GAAA,GAAAp/B,IAAA,KAAAU,GAAA,MAAA0+B,GAAA,OAAA7+B,EAAA+zD,EAAA,UAAAqU,GAAAjoE,GAAA,GAAAV,GAAA,KAAAU,EAAA,OAAAw0D,EAAA19C,MAAA,qBAAAjX,EAAAJ,EAAAq6E,GAAAlmB,GAAA/zD,EAAA+zD,EAAA,UAAAkmB,GAAA95E,EAAA0+B,GAAA,SAAAA,EAAA,OAAA9+B,EAAA,UAAAC,GAAA,UAAA+zD,EAAA5zD,EACA0+B,GAAA,YAAAA,GAAA,UAAAA,GAAA,SAAAA,GAAA,YAAAA,EAAA,OAAA9+B,EAAA,UAAAC,EAAA,UAAA6+B,EAAAo2B,EAAAlB,GAAA,eAAA5zD,GAAA,QAAA0+B,EAAA,OAAA9+B,EAAA,OAAAC,EAAA6yD,GAAA,QAAAh0B,GAAA,KAAAA,EAAA,OAAA7+B,EAAA+zD,GAAA,aAAA5zD,GAAA,UAAAA,GAAA,QAAAA,EAAA,OAAAH,EAAA6yD,GAAA,QAAA1yD,EAAA,OAAAH,EAAAuyB,EAAA,KAAAqiC,EAAAb,EAAA,SAAAV,EAAAR,GAAA,QAAA1yD,EAAA,OAAAH,EAAAuyB,EAAA,KAAA+sC,GAAAjM,EAAAR,GAAA,QAAA1yD,EAAA,OAAAH,EAAA40D,EAAA8M,GAAA,KAAA0vB,GAAAv+B,GAAA,QAAA1yD,EAAA,OAAAH,EAAA40D,EAAAb,EAAA,KAAAA,GAAA,YAAA5zD,EAAA,OAAAyzD,EAAAyO,GAAAxP,EAAA,UAAAu+B,GAAAjxF,GAAA,SAAAA,EAAA,OAAAH,EAAA+zD,EAAA,UAAAuL,GAAAn/D,GAAA,OAAAA,EAAA8W,MAAA,YAAAjX,IAAA,KAAAG,GAAA,KAAAA,EAAAH,EAAAs/D,IACA1L,EAAA4nB,GAAAlc,GAAA,UAAAkc,GAAAr7E,EAAA0+B,GAAA,eAAA1+B,GAAA,WAAA0lE,EAAA,OAAA9lE,EAAA,WAAAC,EAAAw7E,IAAA,QAAA38C,GAAA,UAAA1+B,GAAA,UAAAA,EAAA,OAAAH,EAAAw7E,IAAA,QAAAr7E,EAAA,OAAAH,EAAA+zD,GAAA,QAAA5zD,EAAA,OAAAH,EAAAL,EAAA,YAAA65E,GAAA75E,EAAA,KAAA67E,IAAA,QAAAr7E,EAAA,OAAAyzD,EAAAsW,EAAAsR,IAAA,IAAAr7E,EAAA8W,MAAA,qBAAAjX,GAAA,UAAAqiE,GAAAliE,EAAA0+B,GAAA,eAAA1+B,EAAAyzD,IAAA,MAAA/0B,EAAAh5B,MAAAg5B,EAAAp+B,OAAA,GAAAT,EAAAqiE,IAAAriE,EAAA+zD,EAAAu/B,GAAA,UAAAA,GAAAnzF,GAAA,QAAAA,EAAA,OAAAJ,EAAA,WAAAO,EAAAkjG,SAAAxiC,EAAAhhE,EAAAqiE,GAAA,UAAAX,GAAAvhE,EAAA0+B,GAAA,kBAAA1+B,GAAAw0D,EAAA19C,MAAA,qBAAA4nB,EAAA7+B,EAAA0hE,IAAA,KAAAvhE,EAAAH,EAAA+zD,GAAA,UACA5zD,EAAAH,EAAA0hE,IAAA9N,EAAAG,EAAA,UAAAlB,EAAA1yD,EAAA0+B,GAAA,QAAAA,EAAA,OAAA7+B,EAAAuyB,EAAA,KAAAqiC,EAAAb,EAAA,KAAAV,EAAAR,GAAA,QAAAh0B,GAAA,KAAA1+B,GAAA,KAAA0+B,EAAA,OAAA7+B,EAAA+zD,GAAA,QAAA5zD,EAAA,OAAAH,EAAA+zD,EAAAp0D,EAAA,KAAAkzD,GAAA,cAAAh0B,GAAA,cAAAA,EAAA,OAAA9+B,EAAA,UAAAC,EAAA+zD,GAAA,QAAAl1B,EAAA,OAAA7+B,EAAA+zD,EAAAp0D,EAAA,KAAAo0D,EAAA,UAAA+iB,GAAA32E,EAAA0+B,GAAA,QAAAA,EAAA,OAAA7+B,EAAAuyB,EAAA,KAAAqiC,EAAAb,EAAA,KAAAV,EAAAR,EAAA,UAAAqhB,KAAA,OAAAtgB,EAAAG,EAAA4N,GAAA,UAAAA,GAAAxhE,EAAA0+B,GAAA,QAAAA,EAAA,OAAA7+B,EAAA+zD,EAAA,UAAA6M,GAAAzgE,EAAA0+B,GAAA,cAAAA,GAAA9+B,EAAA,UAAAC,EAAA8nE,KAAAlU,EAAAmB,EAAAoV,EAAAtV,EAAA8N,GAAA,UAAA5N,EAAA50D,EAAA0+B,GAAA,GAAAp/B,GAAA+qE,GAAA3rC,GAAA,OAAA9+B,EAAA,UAAAC,EAAA+0D,GAAA,eAAA50D,EAAA,OAAAm7F,EAAAz8D,GAAA7+B,IACA,aAAAG,EAAA,OAAAH,EAAA+0D,GAAA,QAAA50D,EAAA,OAAA2rE,GAAAjJ,GAAA,aAAA1iE,EAAA,OAAA2rE,GAAAmG,GAAA,cAAAA,GAAA9xE,EAAA0+B,GAAA,eAAA1+B,IAAAw0D,EAAA19C,MAAA,mBAAAqkF,EAAAz8D,GAAA7+B,EAAA60D,GAAA,YAAA10D,IAAAJ,EAAA,4BAAAI,EAAAH,EAAA+0D,GAAA,KAAA50D,EAAAyzD,IAAA,KAAAzzD,EAAAH,EAAAJ,EAAAD,EAAA,KAAAA,EAAA,KAAAsyE,IAAAjyE,EAAAL,EAAA,KAAAo1D,EAAAF,EAAA,UAAAgO,KAAA,OAAAjP,EAAAmB,EAAAF,EAAA,UAAAA,EAAA10D,EAAA0+B,GAAA,QAAAA,EAAA,OAAA7+B,EAAAi1D,EAAA,UAAA0N,GAAAxiE,GAAA,QAAAA,EAAA,OAAAH,EAAA4gE,GAAA,UAAAuO,GAAAhvE,EAAA0+B,GAAA,gBAAA1+B,GAAA,QAAA0+B,EAAA,OAAA7+B,EAAAuyB,EAAA,eAAAuM,EAAAu0B,EAAA,UAAAwwB,GAAA1jF,EAAA0+B,GAAA,YAAAA,EAAA,OAAA7+B,EAAA6jF,IAAA,QAAA1jF,EAAA,OAAAH,EAAAuyB,EAAA,KACAs1C,GAAAxU,EAAA,UAAAwU,GAAA1nE,GAAA,aAAAA,EAAAH,EAAA4gE,GAAA+J,GAAA,YAAAxqE,EAAAH,EAAA2qE,GAAA/W,EAAA+W,EAAA,UAAAA,EAAAxqE,EAAA0+B,GAAA,WAAA1+B,EAAAH,IAAA,KAAAG,EAAAH,EAAA2qE,GAAA,MAAA9rC,GAAA,MAAAA,GAAA9+B,EAAA,UAAAC,EAAAJ,EAAA+qE,IAAA/W,EAAAh0D,EAAA+qE,EAAA,UAAAnY,EAAAryD,EAAA0+B,GAAA,QAAAA,EAAA,OAAA9+B,EAAA,UAAAC,EAAAwyD,GAAA,eAAAryD,EAAA,OAAAm7F,EAAAz8D,GAAA7+B,EAAAwyD,GAAA,QAAAryD,EAAA,OAAAH,EAAA+yD,EAAAxgC,EAAA,KAAAqiC,EAAAsG,EAAA,KAAA7H,EAAA+U,GAAAtpC,EAAAg2B,GAAA,GAAAr1D,GAAA,KAAAo/B,EAAA,OAAA7+B,EAAAuyB,EAAA,KAAAqiC,EAAAsf,GAAA,KAAA7gB,EAAAb,EAAA,UAAA0X,EAAA/pE,EAAA0+B,GAAA,QAAAA,EAAA,OAAA9+B,EAAA,UAAAC,EAAAkqE,GAAA,eAAA/pE,EAAA,OAAAm7F,EAAAz8D,GAAA7+B,EAAAkqE,GAAA,QAAA/pE,EAAA,OAAAH,EAAA+yD,EAAAxgC,EAAA,KAAAqiC,EAAAsG,EAAA,KAAA7H,EAAA+U,GAAAtT,GAAA,GAAAr1D,GAAA,KAAAo/B,EAAA,OAAA7+B,EAAAuyB,EAAA,KAAAqiC,EAAAsf,GAAA,KACA7gB,EAAA6W,EAAA,UAAAuE,GAAAtuE,EAAA0+B,GAAA,cAAA1+B,GAAA,YAAAA,EAAA,OAAAJ,EAAA,OAAAC,EAAAyuE,IAAA,QAAA5vC,EAAA,OAAA7+B,EAAAuyB,EAAA,KAAAqiC,EAAAsf,GAAA,KAAA7gB,EAAA,UAAA6H,EAAA/6D,EAAA0+B,GAAA,KAAAA,GAAA7+B,EAAAJ,EAAAs7D,GAAA,gBAAA/6D,EAAAH,EAAAk7D,GAAAz7D,GAAA+qE,GAAA3rC,IAAA9+B,EAAA,UAAAC,EAAAk7D,IAAAz7D,GAAA,QAAAU,EAAAH,EAAAmqE,EAAAtV,GAAAjB,EAAAmB,EAAAoV,EAAAtV,EAAA,UAAAvH,GAAAntD,EAAA0+B,GAAA,kBAAA1+B,EAAAsgE,GAAAtgE,EAAA0+B,GAAA02C,GAAAp1E,EAAA0+B,EAAA,UAAA4hC,GAAAtgE,EAAA0+B,GAAA,eAAA1+B,EAAA,OAAAm7F,EAAAz8D,GAAA7+B,EAAAu1E,GAAA,UAAAA,GAAAp1E,EAAA0+B,GAAA,QAAAA,EAAA,OAAA7+B,EAAAuyB,EAAA,KAAAqiC,EAAAsf,GAAA,KAAA7gB,EAAAkiB,IAAA,cAAA12C,GAAA,cAAAA,GAAAp/B,GAAA,KAAAU,EAAA,oBAAA0+B,IAAA9+B,EAAA,WAAAC,EAAAP,EAAAs0D,EAAAn0D,EAAA21E,IAAA,QAAAp1E,EAAA,OAAAH,EAAAuyB,EAAA,KACAyiC,EAAA3B,EAAA,UAAA2B,EAAA70D,EAAA0+B,GAAA,YAAA1+B,GAAA,YAAAA,IAAA,UAAA0+B,GAAA,OAAAA,GAAA,OAAAA,GAAAp/B,GAAA+qE,GAAA3rC,KAAA81B,EAAA19C,MAAA,kCAAAlX,EAAA,UAAAC,EAAAg1D,GAAA,eAAA70D,GAAA,WAAA0lE,EAAA,OAAA9lE,EAAA,WAAAC,EAAAgtF,GAAAh4B,GAAA,aAAA70D,GAAA,UAAAA,EAAA,OAAAH,EAAAgtF,GAAAh4B,GAAA,QAAA70D,EAAA,OAAAH,EAAAJ,EAAAuqE,EAAAxqE,EAAA,KAAAqtF,GAAAh4B,GAAA,QAAAn2B,EAAA,OAAA9+B,EAAA,UAAAC,EAAAg1D,GAAA,GAAAv1D,GAAA,KAAAU,EAAA,OAAAyzD,EAAAsW,EAAAlV,GAAA,QAAA70D,GAAA,KAAAA,EAAA,OAAAH,EAAAg1D,GAAA,QAAA70D,EAAA,OAAAH,IAAA,QAAA6+B,EAAA,OAAA7+B,EAAAJ,EAAAo1D,EAAA,UAAAg4B,GAAA7sF,EAAA0+B,GAAA,QAAAA,GAAA,KAAAA,EAAA,OAAA7+B,EAAAgtF,IAAA,QAAA7sF,EAAA,OAAAH,EAAA+zD,EAAAc,GACA,QAAAh2B,EAAA,OAAA7+B,EAAAi1D,GAAA90D,EAAAG,EAAAuuB,QAAA4a,KAAA,OAAAmqB,EAAAzzD,GAAA,aAAAA,EAAAokD,KAAA2lB,EAAA1X,EAAA,UAAAwQ,GAAA7iE,EAAA0+B,GAAA,WAAAA,GAAA9+B,EAAA,UAAAC,EAAAioE,GAAAtoE,EAAA,kBAAAk/B,GAAA9+B,EAAA,UAAAC,EAAAJ,EAAAD,EAAA,YAAAQ,EAAAH,EAAA40D,EAAAyf,GAAA,KAAApM,GAAAtoE,EAAA,MAAAi0D,EAAA90B,EAAA,UAAAu1C,GAAAl0E,EAAA0+B,GAAA,SAAAA,EAAA,OAAA9+B,EAAA,UAAAC,EAAAL,EAAA,4BAAAQ,EAAA,OAAAyzD,EAAAqB,EAAAof,GAAA,UAAA/Q,GAAAnjE,GAAA,gBAAAA,EAAAH,IAAA,KAAAG,EAAAyzD,EAAAh0D,GAAA,KAAAO,EAAAyzD,EAAA6H,GAAA7H,EAAA48B,GAAAjc,GAAAtM,GAAA,UAAAuoB,GAAArwF,EAAA0+B,GAAA,QAAA1+B,EAAA,OAAA2rE,GAAA0kB,GAAA,iBAAArwF,GAAAm7F,EAAAz8D,GAAA,KAAAA,IAAA9+B,EAAA,kBAAAC,EAAA6rE,GAAA,UAAA0I,GAAAp0E,GAAA,QAAAA,EAAA,OAAAH,EAAAwwF,GACAjc,GAAA,UAAA1I,GAAA1rE,EAAA0+B,GAAA,SAAAA,EAAA,OAAA9+B,EAAA,UAAAC,EAAAwwF,GAAA,UAAAvoB,GAAA9nE,EAAA0+B,GAAA,WAAAA,EAAA,OAAA9+B,EAAA,UAAAC,EAAAJ,EAAA,UAAAgwE,GAAAzvE,GAAA,WAAAA,EAAAH,IAAA4zD,EAAAgB,EAAAK,EAAA,eAAA6S,KAAA,OAAAlU,EAAArhC,EAAA,QAAAwiC,EAAAp1D,EAAA,KAAA4yB,EAAA,KAAAqiC,EAAAwc,GAAA,KAAA/d,IAAA,UAAA+d,KAAA,OAAAxd,EAAAmB,EAAAF,EAAA,UAAAub,GAAAjwE,EAAA0+B,EAAApO,GAAA,OAAAoO,EAAA2kE,UAAAnxC,GAAA,iFAAAtsD,KAAA84B,EAAA4kE,WAAA,SAAA5kE,EAAA4kE,UAAA,SAAA19F,KAAA5F,EAAA2I,OAAAjD,MAAA,EAAA1F,EAAAmH,KAAAmpB,GAAA,SAAAq8D,EAAArM,GAAAgO,WAAA7O,GAAAlrB,EAAA/hB,gBAAAs2B,GAAAvU,EAAAqvC,OACAzxC,EAAAoC,EAAAsvC,MAAA/6B,GAAA3D,IAAA,IAAA5Q,EAAAuvC,WAAAxkG,EAAAi1D,EAAAwvC,WAAA3kC,GAAA7K,EAAAyvC,gBAAA,mBAAA7kB,GAAA,oBAAAn/E,EAAAu/E,IAAA,OAAApuE,KAAAouE,GAAAz3C,MAAA,eAAApJ,EAAA1+B,EAAA,aAAAswB,EAAAtwB,EAAA,aAAAT,EAAAS,EAAA,aAAA6zD,EAAA7zD,EAAA,aAAA86C,EAAA96C,EAAA,YAAA4+B,EAAA,CAAAztB,KAAA,OAAA22B,MAAA,eAAAm8D,GAAAjkG,EAAA,MAAAkkG,MAAAxlE,EAAAylE,KAAAzlE,EAAA0lE,KAAA9zE,EAAA+zE,GAAA/zE,EAAAg0E,IAAAh0E,EAAAi0E,QAAAj0E,EAAAk0E,OAAA3wC,EAAA4wC,MAAA5wC,EAAA6wC,SAAA7wC,EAAA8wC,IAAA3kG,EAAA,OAAA4kG,OAAArlG,EAAAslG,KAAAtlG,EAAAulG,MAAAvlG,EAAAwlG,SAAA/kG,EAAA,YAAAyuB,IAAAzuB,EAAA,OAAAglG,MAAAhlG,EAAA,OAAAilG,IAAAjlG,EAAA,OAAAklG,SAAAllG,EAAA,YACAkvD,MAAAlvD,EAAA,SAAAmlG,IAAAnlG,EAAA,OAAAolG,OAAAplG,EAAA,UAAAqlG,KAAArlG,EAAA,QAAAirC,QAAAjrC,EAAA,WAAA+wC,GAAA+J,EAAAwqD,OAAAxqD,EAAA9J,WAAA8J,EAAAyqD,KAAA3mE,EAAA4mE,MAAA5mE,EAAA+I,KAAA/I,EAAA55B,UAAA45B,EAAA8jD,IAAA9jD,EAAAhD,SAAAgD,EAAAz4B,KAAAnG,EAAA,QAAAylG,MAAAzlG,EAAA,SAAA4sC,MAAA5sC,EAAA,QAAA0lG,MAAAnmG,EAAAomG,OAAA3lG,EAAA,UAAA4lG,OAAA5lG,EAAA,UAAA6lG,QAAAtmG,EAAA0c,MAAA1c,EAAA,CADA,GACAizE,GAAA,oBAAAuV,GAAA,wFAAAuV,EAAA/hB,GAAAnjC,GAAA,CAAA0tD,MAAA,EAAAr+D,QAAA,EAAAs+D,UAAA,EAAAp9F,QAAA,EAAAD,QAAA,EAAAvC,MAAA,EAAAy/F,QAAA,EACA,yBAAAxqB,GAAAx7E,EAAAO,EAAA,SAAAulE,EAAAlR,OAAA,MAAA24B,GAAA,IAAAvjB,EAAA,WAAAA,EAAA,mBAAAhX,EAAA+wC,IAAAroB,GAAAqoB,KAAA,EAAAhvC,EAAAgvC,KAAA,EAAAzwC,EAAAywC,KAAA,SAAA1gC,WAAA,SAAAjjE,KAAA,CAAAqjG,SAAAnxC,EAAAoxC,SAAA,MAAApf,GAAA,GAAAx1D,QAAA,IAAA2wD,IAAAr/E,GAAA,GAAA2sF,EAAA,cAAAp3B,UAAAhB,EAAAgB,UAAA9hD,QAAA8gD,EAAAgB,WAAA,IAAAwL,EAAA,cAAA0iC,SAAAzjG,GAAA,GAAAu0D,EAAAkB,YAAA,iBAAAlB,EAAAkB,aAAAz1D,EAAAy1D,WAAAlB,EAAAkB,YAAA,OAAAz1D,CAAA,EAAA0Q,MAAA,SAAA1Q,EAAA0+B,GAAA1+B,EAAAuyF,QAAA7zD,EAAAhQ,QAAA5gB,eAAA,WAAA4wB,EAAAhQ,QAAAg1E,OAAA,GAAAhlE,EAAA+kE,SAAAzjG,EAAA8yF,cACA/zB,GAAA/+D,EAAA0+B,IAAA,GAAAA,EAAA2kE,UAAAlhB,IAAAniF,EAAA0yF,WAAA,gBAAApiE,EAAAoO,EAAA2kE,SAAArjG,EAAA0+B,GAAA,cAAA4+D,EAAA,OAAAhtE,EAAAoO,EAAA4kE,SAAA,YAAAhG,GAAA,MAAA/hB,IAAA,MAAAA,GAAA+hB,EAAA,gBAAAj6B,GAAA3kC,EAAApO,EAAAgtE,EAAA/hB,GAAAv7E,EAAA,EAAA6xC,OAAA,SAAA7xC,EAAA0+B,GAAA,GAAA1+B,EAAAqjG,UAAAlhB,IAAAniF,EAAAqjG,UAAAxiC,EAAA,OAAA/tC,EAAAkvE,KAAA,GAAAhiG,EAAAqjG,UAAAnxC,EAAA,aAAA5hC,EAAAoO,KAAAznB,OAAA,GAAA1X,EAAAS,EAAA0uB,QAAAmlC,EAAA,iBAAAjuD,KAAA84B,GAAA,QAAAoc,EAAA96C,EAAAkkF,GAAA5jF,OAAA,KAAAw6C,MAAA,KAAAlc,EAAA5+B,EAAAkkF,GAAAppC,GAAA,GAAAlc,GAAAs0B,EAAA3zD,IAAA+pC,UAAA,GAAA1K,GAAAowC,IAAApwC,GAAA+1B,EAAA,qBAAAp1D,EAAA4R,MAAA,QAAA5R,EAAA4R,MAAA,KAAAmf,MAAAujC,EAAA7zD,EAAAkkF,GAAAlkF,EAAAkkF,GAAA5jF,OAAA,KAAAuzD,GACAyH,GAAAzH,GAAAiW,GAAA,mBAAAlkE,KAAA84B,MAAAn/B,IAAA+pC,KAAAm2C,IAAA,KAAAlgF,EAAA4R,MAAA,QAAA5R,EAAA+pC,KAAAn4B,OAAA5R,IAAA+pC,MAAAuqB,EAAAt0D,EAAA4R,KAAA2pC,EAAAxqB,GAAAujC,EAAA,gBAAAA,EAAAt0D,EAAAkkG,UAAA,YAAAzjG,EAAAsjG,UAAA,KAAAtjG,EAAAsjG,SAAA/jG,EAAA6kD,KAAA9jD,OAAA,aAAAuzD,GAAA,KAAAvjC,EAAA/wB,EAAAkkG,SAAA,QAAA5vC,EAAAt0D,EAAAkkG,SAAA9W,EAAA,QAAA94B,GAAAvjC,EAAA/wB,EAAAkkG,SAAAzjG,EAAA,YAAAA,EAAAsjG,UAAA,KAAAtjG,EAAAsjG,UAAA9wB,GAAA5sE,KAAA84B,EAAAznB,OAAA,YAAArR,KAAA84B,EAAAznB,OAAA,IAAAqZ,GAAAtwB,EAAAy/E,IAAAkN,EAAA,cAAAptF,EAAA6kD,MAAAtJ,GAAA,GAAAyZ,EAAAyxC,mBAAAzmG,EAAAmkG,MAAAnkG,EAAAkP,QAAAqsC,EAAA,KAAAv7C,EAAAkkG,UAAA3oD,EAAA,EAAA6xC,GAAAptF,EAAAkkG,UAAA,sBAAA79F,KAAA84B,GACAiuD,EAAA,EAAAA,EAAA,EAAAwC,cAAA,oCAAAp7B,kBAAA5B,EAAA,UAAA+B,gBAAA/B,EAAA,UAAA8zC,qBAAA9zC,EAAA,WAAAkB,YAAAlB,EAAA,UAAA+zC,KAAA,QAAAC,cAAA,iBAAAlxC,WAAA9C,EAAA,oBAAAi0C,WAAAt9B,GAAAu9B,SAAAl0C,EAAAm0C,kBAAAr2B,GAAAs2B,eAAA,SAAAvmG,GAAAqjE,GAAArjE,EAAA,yBAAA8yB,EAAA8vE,aAAA,iBAAA9vE,EAAA4iC,eAAA,kCAAA5iC,EAAAmuE,WAAA,gCAAAnuE,EAAAmuE,WAAA,kBACA,cAAAnuE,EAAAmuE,WAAA,uCAAAnuE,EAAAmuE,WAAA,yCAAAnuE,EAAAmuE,WAAA,uCAAAnuE,EAAAmuE,WAAA,oBAAAt7F,KAAA,aAAAk+F,MAAA,IAAA/wE,EAAAmuE,WAAA,sBAAAt7F,KAAA,aAAAk+F,MAAA,IAAA/wE,EAAAmuE,WAAA,6BAAAt7F,KAAA,aAAAk+F,MAAA,IAAA/wE,EAAAmuE,WAAA,uBAAAt7F,KAAA,aAAAi+F,QAAA,IAAA9wE,EAAAmuE,WAAA,mBAAAt7F,KAAA,aAAAo+F,YAAA,IAAAjxE,EAAAmuE,WAAA,yBACA,CAAAt7F,KAAA,aAAAo+F,YAAA,M,oEC9BA,IAAAr+F,MAAA,GAAAA,MAWAnF,OAAAH,QAAA,SAAA4C,IAAA4hC,IACA,oBAAAA,MAAA5hC,IAAA4hC,IACA,sBAAAA,GAAA,UAAA3kC,MAAA,8BACA,IAAAokC,KAAA3+B,MAAArF,KAAA8V,UAAA,GACA,kBACA,OAAAyuB,GAAAI,MAAAhiC,IAAAqhC,KAAA2O,OAAAttC,MAAArF,KAAA8V,YACA,CACA,C,2CCjBA,UAAA5V,SAAA,aACAA,OAAAH,QAAAomG,OACA,CAQA,SAAAA,QAAAxjG,KACA,GAAAA,IAAA,OAAAyjG,MAAAzjG,IACA,CAUA,SAAAyjG,MAAAzjG,KACA,QAAAN,OAAA8jG,QAAA1jG,UAAA,CACAE,IAAAN,KAAA8jG,QAAA1jG,UAAAJ,IACA,CACA,OAAAM,GACA,CAWAwjG,QAAA1jG,UAAAqgD,GACAqjD,QAAA1jG,UAAAgvF,iBAAA,SAAA4U,MAAA9hE,IACAz+B,KAAAwgG,WAAAxgG,KAAAwgG,YAAA,IACAxgG,KAAAwgG,WAAA,IAAAD,OAAAvgG,KAAAwgG,WAAA,IAAAD,QAAA,IACA/1F,KAAAi0B,IACA,OAAAz+B,IACA,EAYAqgG,QAAA1jG,UAAA8jG,KAAA,SAAAF,MAAA9hE,IACA,SAAAue,KACAh9C,KAAAw1D,IAAA+qC,MAAAvjD,IACAve,GAAAI,MAAA7+B,KAAAgQ,UACA,CAEAgtC,GAAAve,MACAz+B,KAAAg9C,GAAAujD,MAAAvjD,IACA,OAAAh9C,IACA,EAYAqgG,QAAA1jG,UAAA64D,IACA6qC,QAAA1jG,UAAA+jG,eACAL,QAAA1jG,UAAAsrD,mBACAo4C,QAAA1jG,UAAA49D,oBAAA,SAAAgmC,MAAA9hE,IACAz+B,KAAAwgG,WAAAxgG,KAAAwgG,YAAA,GAGA,MAAAxwF,UAAA7V,OAAA,CACA6F,KAAAwgG,WAAA,GACA,OAAAxgG,IACA,CAGA,IAAA2gG,UAAA3gG,KAAAwgG,WAAA,IAAAD,OACA,IAAAI,UAAA,OAAA3gG,KAGA,MAAAgQ,UAAA7V,OAAA,QACA6F,KAAAwgG,WAAA,IAAAD,OACA,OAAAvgG,IACA,CAGA,IAAAgnD,GACA,QAAAxtD,EAAA,EAAAA,EAAAmnG,UAAAxmG,OAAAX,IAAA,CACAwtD,GAAA25C,UAAAnnG,GACA,GAAAwtD,KAAAvoB,IAAAuoB,GAAAvoB,QAAA,CACAkiE,UAAA3oC,OAAAx+D,EAAA,GACA,KACA,CACA,CAIA,GAAAmnG,UAAAxmG,SAAA,UACA6F,KAAAwgG,WAAA,IAAAD,MACA,CAEA,OAAAvgG,IACA,EAUAqgG,QAAA1jG,UAAAsgD,KAAA,SAAAsjD,OACAvgG,KAAAwgG,WAAAxgG,KAAAwgG,YAAA,GAEA,IAAAtiE,KAAA,IAAAhjC,MAAA8U,UAAA7V,OAAA,GACAwmG,UAAA3gG,KAAAwgG,WAAA,IAAAD,OAEA,QAAA/mG,EAAA,EAAAA,EAAAwW,UAAA7V,OAAAX,IAAA,CACA0kC,KAAA1kC,EAAA,GAAAwW,UAAAxW,EACA,CAEA,GAAAmnG,UAAA,CACAA,oBAAAphG,MAAA,GACA,QAAA/F,EAAA,EAAAwB,IAAA2lG,UAAAxmG,OAAAX,EAAAwB,MAAAxB,EAAA,CACAmnG,UAAAnnG,GAAAqlC,MAAA7+B,KAAAk+B,KACA,CACA,CAEA,OAAAl+B,IACA,EAUAqgG,QAAA1jG,UAAAumD,UAAA,SAAAq9C,OACAvgG,KAAAwgG,WAAAxgG,KAAAwgG,YAAA,GACA,OAAAxgG,KAAAwgG,WAAA,IAAAD,QAAA,EACA,EAUAF,QAAA1jG,UAAAikG,aAAA,SAAAL,OACA,QAAAvgG,KAAAkjD,UAAAq9C,OAAApmG,MACA,C,2CC7KAC,OAAAH,QAAA,SAAAJ,EAAA0+B,GACA,IAAAkG,GAAA,aACAA,GAAA9hC,UAAA47B,EAAA57B,UACA9C,EAAA8C,UAAA,IAAA8hC,GACA5kC,EAAA8C,UAAAa,YAAA3D,CACA,C,2CCNA,aAEAO,OAAAH,QAAA4mG,MAEA,SAAAA,MAAArpE,UACA,UAAAqvB,WAAA,aACA,UAAA/sD,MAAA,0CACA,CACA,IAAA4yB,MAAAm6B,SAAAi6C,WACA,GAAAp0E,QAAA,YAAAA,QAAA,eACA,OAAA2xB,WAAA7mB,SAAA,EACA,CAEAqvB,SAAA8kC,iBAAA,6BAAAoV,SACAvpE,UACA,GACA,C,2CChBAp9B,OAAAH,QAAA,WACA,UAAAsB,OAAA,aACA,OAAAA,IACA,gBAAAwhD,SAAA,aACA,OAAAA,MACA,MACA,OAAA5W,SAAA,cAAAA,EACA,CACA,CARA,E,2CCCA/rC,OAAAH,QAAAN,QAAA,YAQAS,OAAAH,QAAAkW,OAAAxW,QAAA,mB,8ECLA,IAAAqnG,WAAArnG,QAAA,sBACA,IAAA0mG,QAAA1mG,QAAA,qBACA,IAAA4iD,MAAA5iD,QAAA,QAAAA,CAAA,2BACA,IAAAkX,MAAAlX,QAAA,WACA,IAAAwW,OAAAxW,QAAA,oBACA,IAAAsnG,SAAAtnG,QAAA,YACA,IAAAunG,QAAAvnG,QAAA,WAMAS,OAAAH,QAAAknG,OAUA,SAAAA,OAAAC,IAAAl3F,MACA,KAAAlK,gBAAAmhG,QAAA,WAAAA,OAAAC,IAAAl3F,MAEAA,WAAA,GAEA,GAAAk3F,KAAA,kBAAAA,IAAA,CACAl3F,KAAAk3F,IACAA,IAAA,IACA,CAEA,GAAAA,IAAA,CACAA,IAAAH,SAAAG,KACAl3F,KAAAm3F,SAAAD,IAAA7oC,KACAruD,KAAAo3F,OAAAF,IAAA3+C,WAAA,SAAA2+C,IAAA3+C,WAAA,MACAv4C,KAAAq3F,KAAAH,IAAAG,KACA,GAAAH,IAAA14C,MAAAx+C,KAAAw+C,MAAA04C,IAAA14C,KACA,SAAAx+C,KAAAquD,KAAA,CACAruD,KAAAm3F,SAAAJ,SAAA/2F,KAAAquD,UACA,CAEAv4D,KAAAshG,OAAA,MAAAp3F,KAAAo3F,OAAAp3F,KAAAo3F,cACA5+C,WAAA,wBAAAA,SAAAD,SAEA,GAAAv4C,KAAAm3F,WAAAn3F,KAAAq3F,KAAA,CAEAr3F,KAAAq3F,KAAAvhG,KAAAshG,OAAA,UACA,CAEAthG,KAAAwhG,MAAAt3F,KAAAs3F,OAAA,MACAxhG,KAAAqhG,SAAAn3F,KAAAm3F,kBACA3+C,WAAA,YAAAA,SAAA2+C,SAAA,aACArhG,KAAAuhG,KAAAr3F,KAAAq3F,cAAA7+C,WAAA,aAAAA,SAAA6+C,KACA7+C,SAAA6+C,KACAvhG,KAAAshG,OAAA,QACAthG,KAAA0oD,MAAAx+C,KAAAw+C,OAAA,GACA,qBAAA1oD,KAAA0oD,MAAA1oD,KAAA0oD,MAAAw4C,QAAA3xD,OAAAvvC,KAAA0oD,OACA1oD,KAAAyhG,QAAA,QAAAv3F,KAAAu3F,QACAzhG,KAAA0hG,MAAAx3F,KAAAw3F,MAAA,cAAA15F,QAAA,cACAhI,KAAA2hG,aAAAz3F,KAAAy3F,WACA3hG,KAAA4hG,MAAA,QAAA13F,KAAA03F,MACA5hG,KAAA6hG,cAAA33F,KAAA23F,YACA7hG,KAAA8hG,aAAA53F,KAAA43F,WACA9hG,KAAA+hG,gBAAA,QAAA73F,KAAA63F,gBACA/hG,KAAAgiG,eAAA93F,KAAA83F,gBAAA,IACAhiG,KAAAiiG,kBAAA/3F,KAAA+3F,kBACAjiG,KAAAghG,WAAA92F,KAAA82F,YAAA,wBACAhhG,KAAAkiG,iBAAAh4F,KAAAg4F,kBAAA,GACAliG,KAAA8gG,WAAA,GACA9gG,KAAAmiG,YAAA,GACAniG,KAAAoiG,cAAA,EACApiG,KAAAqiG,WAAAn4F,KAAAm4F,YAAA,IACAriG,KAAAsiG,gBAAAp4F,KAAAo4F,iBAAA,MACAtiG,KAAAuiG,WAAA,KACAviG,KAAAwiG,mBAAAt4F,KAAAs4F,mBACAxiG,KAAAyiG,kBAAA,QAAAv4F,KAAAu4F,kBAAAv4F,KAAAu4F,mBAAA,SAEA,UAAAziG,KAAAyiG,kBAAAziG,KAAAyiG,kBAAA,GACA,GAAAziG,KAAAyiG,mBAAA,MAAAziG,KAAAyiG,kBAAAC,UAAA,CACA1iG,KAAAyiG,kBAAAC,UAAA,IACA,CAGA1iG,KAAA2iG,IAAAz4F,KAAAy4F,KAAA9jG,UACAmB,KAAAzD,IAAA2N,KAAA3N,KAAAsC,UACAmB,KAAA4iG,WAAA14F,KAAA04F,YAAA/jG,UACAmB,KAAA6iG,KAAA34F,KAAA24F,MAAAhkG,UACAmB,KAAAo1E,GAAAlrE,KAAAkrE,IAAAv2E,UACAmB,KAAA8iG,QAAA54F,KAAA44F,SAAAjkG,UACAmB,KAAA+iG,mBAAA74F,KAAA64F,qBAAAlkG,UAAA,KAAAqL,KAAA64F,mBACA/iG,KAAAgjG,YAAA94F,KAAA84F,UAGAhjG,KAAAijG,qBAAA/gD,YAAA,oBAAAA,UAAAghD,UAAA,UAAAhhD,UAAAghD,QAAApvD,gBAAA,cAGA,UAAAv4C,OAAA,aAAAyE,KAAAijG,cAAA,CACA,GAAA/4F,KAAAi5F,cAAA9mG,OAAA4W,KAAA/I,KAAAi5F,cAAAhpG,OAAA,GACA6F,KAAAmjG,aAAAj5F,KAAAi5F,YACA,CAEA,GAAAj5F,KAAAk5F,aAAA,CACApjG,KAAAojG,aAAAl5F,KAAAk5F,YACA,CACA,CAGApjG,KAAAoY,GAAA,KACApY,KAAAqjG,SAAA,KACArjG,KAAAsjG,aAAA,KACAtjG,KAAAujG,YAAA,KAGAvjG,KAAAwjG,kBAAA,KACAxjG,KAAAyjG,iBAAA,KAEAzjG,KAAA0jG,MACA,CAEAvC,OAAAwC,sBAAA,MAMAtD,QAAAc,OAAAxkG,WAQAwkG,OAAA1+C,SAAAtyC,OAAAsyC,SAOA0+C,qBACAA,OAAAyC,UAAAjqG,QAAA,eACAwnG,OAAAH,WAAArnG,QAAA,sBACAwnG,OAAAhxF,OAAAxW,QAAA,oBAUAwnG,OAAAxkG,UAAAknG,gBAAA,SAAArkG,MACA+8C,MAAA,0BAAA/8C,MACA,IAAAkpD,MAAA9J,MAAA5+C,KAAA0oD,OAGAA,MAAAo7C,IAAA3zF,OAAAsyC,SAGAiG,MAAAq7C,UAAAvkG,KAGA,IAAA4C,QAAApC,KAAAkiG,iBAAA1iG,OAAA,GAGA,GAAAQ,KAAAoY,GAAAswC,MAAAs7C,IAAAhkG,KAAAoY,GAEA,IAAA2rF,UAAA,IAAA/C,WAAAxhG,MAAA,CACAkpD,YACAu7C,OAAAjkG,KACAwhG,MAAAp/F,QAAAo/F,OAAAxhG,KAAAwhG,MACAH,SAAAj/F,QAAAi/F,UAAArhG,KAAAqhG,SACAE,KAAAn/F,QAAAm/F,MAAAvhG,KAAAuhG,KACAD,OAAAl/F,QAAAk/F,QAAAthG,KAAAshG,OACAI,KAAAt/F,QAAAs/F,MAAA1hG,KAAA0hG,KACAC,WAAAv/F,QAAAu/F,YAAA3hG,KAAA2hG,WACAC,MAAAx/F,QAAAw/F,OAAA5hG,KAAA4hG,MACAC,YAAAz/F,QAAAy/F,aAAA7hG,KAAA6hG,YACAC,WAAA1/F,QAAA0/F,YAAA9hG,KAAA8hG,WACAC,gBAAA3/F,QAAA2/F,iBAAA/hG,KAAA+hG,gBACAE,kBAAA7/F,QAAA6/F,mBAAAjiG,KAAAiiG,kBACAD,eAAA5/F,QAAA4/F,gBAAAhiG,KAAAgiG,eACAK,WAAAjgG,QAAAigG,YAAAriG,KAAAqiG,WACAM,IAAAvgG,QAAAugG,KAAA3iG,KAAA2iG,IACApmG,IAAA6F,QAAA7F,KAAAyD,KAAAzD,IACAqmG,WAAAxgG,QAAAwgG,YAAA5iG,KAAA4iG,WACAC,KAAAzgG,QAAAygG,MAAA7iG,KAAA6iG,KACAztB,GAAAhzE,QAAAgzE,IAAAp1E,KAAAo1E,GACA0tB,QAAA1gG,QAAA0gG,SAAA9iG,KAAA8iG,QACAC,mBAAA3gG,QAAA2gG,oBAAA/iG,KAAA+iG,mBACAN,kBAAArgG,QAAAqgG,mBAAAziG,KAAAyiG,kBACAU,aAAA/gG,QAAA+gG,cAAAnjG,KAAAmjG,aACAH,UAAA5gG,QAAA4gG,WAAAhjG,KAAAgjG,UACAI,aAAAhhG,QAAAghG,cAAApjG,KAAAojG,aACAc,eAAA9hG,QAAA8hG,gBAAAlkG,KAAAkkG,eACAC,UAAA/hG,QAAA+hG,gBAAA,EACAlB,cAAAjjG,KAAAijG,gBAGA,OAAAc,SACA,EAEA,SAAAnlD,MAAA/hD,KACA,IAAAtD,EAAA,GACA,QAAAC,KAAAqD,IAAA,CACA,GAAAA,IAAA8K,eAAAnO,GAAA,CACAD,EAAAC,GAAAqD,IAAArD,EACA,CACA,CACA,OAAAD,CACA,CAOA4nG,OAAAxkG,UAAA+mG,KAAA,WACA,IAAAK,UACA,GAAA/jG,KAAAsiG,iBAAAnB,OAAAwC,uBAAA3jG,KAAAghG,WAAAjpF,QAAA,mBACAgsF,UAAA,WACA,aAAA/jG,KAAAghG,WAAA7mG,OAAA,CAEA,IAAAoB,KAAAyE,KACAq+C,YAAA,WACA9iD,KAAA0hD,KAAA,kCACA,MACA,MACA,MACA8mD,UAAA/jG,KAAAghG,WAAA,EACA,CACAhhG,KAAA8gG,WAAA,UAGA,IACAiD,UAAA/jG,KAAA6jG,gBAAAE,UACA,OAAA3qG,GACA4G,KAAAghG,WAAA/oC,QACAj4D,KAAA0jG,OACA,MACA,CAEAK,UAAAL,OACA1jG,KAAAokG,aAAAL,UACA,EAQA5C,OAAAxkG,UAAAynG,aAAA,SAAAL,WACAxnD,MAAA,uBAAAwnD,UAAAvkG,MACA,IAAAjE,KAAAyE,KAEA,GAAAA,KAAA+jG,UAAA,CACAxnD,MAAA,iCAAAv8C,KAAA+jG,UAAAvkG,MACAQ,KAAA+jG,UAAA97C,oBACA,CAGAjoD,KAAA+jG,oBAGAA,UACA/mD,GAAA,oBACAzhD,KAAA8oG,SACA,IACArnD,GAAA,mBAAAsnD,QACA/oG,KAAAgpG,SAAAD,OACA,IACAtnD,GAAA,kBAAA5jD,GACAmC,KAAAipG,QAAAprG,EACA,IACA4jD,GAAA,oBACAzhD,KAAAkpG,QAAA,kBACA,GACA,EASAtD,OAAAxkG,UAAA+nG,MAAA,SAAAllG,MACA+8C,MAAA,yBAAA/8C,MACA,IAAAukG,UAAA/jG,KAAA6jG,gBAAArkG,KAAA,CAAAklG,MAAA,IACA,IAAAC,OAAA,MACA,IAAAppG,KAAAyE,KAEAmhG,OAAAwC,sBAAA,MAEA,SAAAiB,kBACA,GAAArpG,KAAAinG,mBAAA,CACA,IAAAqC,oBAAA7kG,KAAA8kG,gBAAAvpG,KAAAwoG,UAAAe,eACAH,eAAAE,kBACA,CACA,GAAAF,OAAA,OAEApoD,MAAA,8BAAA/8C,MACAukG,UAAAgB,KAAA,EAAA/5F,KAAA,OAAAif,KAAA,WACA85E,UAAAtD,KAAA,mBAAA/hE,KACA,GAAAimE,OAAA,OACA,YAAAjmE,IAAA1zB,MAAA,UAAA0zB,IAAAzU,KAAA,CACAsyB,MAAA,4BAAA/8C,MACAjE,KAAAypG,UAAA,KACAzpG,KAAA0hD,KAAA,YAAA8mD,WACA,IAAAA,UAAA,OACA5C,OAAAwC,sBAAA,cAAAI,UAAAvkG,KAEA+8C,MAAA,iCAAAhhD,KAAAwoG,UAAAvkG,MACAjE,KAAAwoG,UAAAkB,OAAA,WACA,GAAAN,OAAA,OACA,cAAAppG,KAAAulG,WAAA,OACAvkD,MAAA,iDAEA2oD,UAEA3pG,KAAA6oG,aAAAL,WACAA,UAAAgB,KAAA,EAAA/5F,KAAA,aACAzP,KAAA0hD,KAAA,UAAA8mD,WACAA,UAAA,KACAxoG,KAAAypG,UAAA,MACAzpG,KAAA4pG,OACA,GACA,MACA5oD,MAAA,8BAAA/8C,MACA,IAAAyoB,IAAA,IAAAnuB,MAAA,eACAmuB,IAAA87E,oBAAAvkG,KACAjE,KAAA0hD,KAAA,eAAAh1B,IACA,CACA,GACA,CAEA,SAAAm9E,kBACA,GAAAT,OAAA,OAGAA,OAAA,KAEAO,UAEAnB,UAAA/kF,QACA+kF,UAAA,IACA,CAGA,SAAApjB,QAAA14D,KACA,IAAA2U,MAAA,IAAA9iC,MAAA,gBAAAmuB,KACA2U,MAAAmnE,oBAAAvkG,KAEA4lG,kBAEA7oD,MAAA,mDAAA/8C,KAAAyoB,KAEA1sB,KAAA0hD,KAAA,eAAArgB,MACA,CAEA,SAAAyoE,mBACA1kB,QAAA,mBACA,CAGA,SAAA2kB,UACA3kB,QAAA,gBACA,CAGA,SAAA4kB,UAAAv4C,IACA,GAAA+2C,WAAA/2C,GAAAxtD,OAAAukG,UAAAvkG,KAAA,CACA+8C,MAAA,6BAAAyQ,GAAAxtD,KAAAukG,UAAAvkG,MACA4lG,iBACA,CACA,CAGA,SAAAF,UACAnB,UAAArD,eAAA,OAAAkE,iBACAb,UAAArD,eAAA,QAAA/f,SACAojB,UAAArD,eAAA,QAAA2E,kBACA9pG,KAAAmlG,eAAA,QAAA4E,SACA/pG,KAAAmlG,eAAA,YAAA6E,UACA,CAEAxB,UAAAtD,KAAA,OAAAmE,iBACAb,UAAAtD,KAAA,QAAA9f,SACAojB,UAAAtD,KAAA,QAAA4E,kBAEArlG,KAAAygG,KAAA,QAAA6E,SACAtlG,KAAAygG,KAAA,YAAA8E,WAEAxB,UAAAL,MACA,EAQAvC,OAAAxkG,UAAA6oG,OAAA,WACAjpD,MAAA,eACAv8C,KAAA8gG,WAAA,OACAK,OAAAwC,sBAAA,cAAA3jG,KAAA+jG,UAAAvkG,KACAQ,KAAAi9C,KAAA,QACAj9C,KAAAmlG,QAIA,YAAAnlG,KAAA8gG,YAAA9gG,KAAAyhG,SAAAzhG,KAAA+jG,UAAAkB,MAAA,CACA1oD,MAAA,2BACA,QAAA/iD,EAAA,EAAAyyB,EAAAjsB,KAAAqjG,SAAAlpG,OAAAX,EAAAyyB,EAAAzyB,IAAA,CACAwG,KAAA0kG,MAAA1kG,KAAAqjG,SAAA7pG,GACA,CACA,CACA,EAQA2nG,OAAAxkG,UAAA4nG,SAAA,SAAAD,QACA,eAAAtkG,KAAA8gG,YAAA,SAAA9gG,KAAA8gG,YACA,YAAA9gG,KAAA8gG,WAAA,CACAvkD,MAAA,uCAAA+nD,OAAAt5F,KAAAs5F,OAAAr6E,MAEAjqB,KAAAi9C,KAAA,SAAAqnD,QAGAtkG,KAAAi9C,KAAA,aAEA,OAAAqnD,OAAAt5F,MACA,WACAhL,KAAAylG,YAAAtnE,KAAAlvB,MAAAq1F,OAAAr6E,OACA,MAEA,WACAjqB,KAAA0lG,UACA1lG,KAAAi9C,KAAA,QACA,MAEA,YACA,IAAAh1B,IAAA,IAAAnuB,MAAA,gBACAmuB,IAAAluB,KAAAuqG,OAAAr6E,KACAjqB,KAAAwkG,QAAAv8E,KACA,MAEA,cACAjoB,KAAAi9C,KAAA,OAAAqnD,OAAAr6E,MACAjqB,KAAAi9C,KAAA,UAAAqnD,OAAAr6E,MACA,MAEA,MACAsyB,MAAA,8CAAAv8C,KAAA8gG,WACA,CACA,EASAK,OAAAxkG,UAAA8oG,YAAA,SAAAx7E,MACAjqB,KAAAi9C,KAAA,YAAAhzB,MACAjqB,KAAAoY,GAAA6R,KAAA+5E,IACAhkG,KAAA+jG,UAAAr7C,MAAAs7C,IAAA/5E,KAAA+5E,IACAhkG,KAAAqjG,SAAArjG,KAAA2lG,eAAA17E,KAAAo5E,UACArjG,KAAAsjG,aAAAr5E,KAAAq5E,aACAtjG,KAAAujG,YAAAt5E,KAAAs5E,YACAvjG,KAAAwlG,SAEA,cAAAxlG,KAAA8gG,WAAA,OACA9gG,KAAA0lG,UAGA1lG,KAAA0gG,eAAA,YAAA1gG,KAAA4lG,aACA5lG,KAAAg9C,GAAA,YAAAh9C,KAAA4lG,YACA,EAQAzE,OAAAxkG,UAAAipG,YAAA,SAAAC,SACA5xC,aAAAj0D,KAAAyjG,kBACA,IAAAloG,KAAAyE,KACAzE,KAAAkoG,iBAAAplD,YAAA,WACA,cAAA9iD,KAAAulG,WAAA,OACAvlG,KAAAkpG,QAAA,eACA,GAAAoB,SAAAtqG,KAAA+nG,aAAA/nG,KAAAgoG,YACA,EASApC,OAAAxkG,UAAA+oG,QAAA,WACA,IAAAnqG,KAAAyE,KACAi0D,aAAA14D,KAAAioG,mBACAjoG,KAAAioG,kBAAAnlD,YAAA,WACA9B,MAAA,mDAAAhhD,KAAAgoG,aACAhoG,KAAAuqG,OACAvqG,KAAAqqG,YAAArqG,KAAAgoG,YACA,GAAAhoG,KAAA+nG,aACA,EAQAnC,OAAAxkG,UAAAmpG,KAAA,WACA,IAAAvqG,KAAAyE,KACAA,KAAA+lG,WAAA,mBACAxqG,KAAA0hD,KAAA,OACA,GACA,EAQAkkD,OAAAxkG,UAAA0nG,QAAA,WACArkG,KAAAmiG,YAAAnqC,OAAA,EAAAh4D,KAAAoiG,eAKApiG,KAAAoiG,cAAA,EAEA,OAAApiG,KAAAmiG,YAAAhoG,OAAA,CACA6F,KAAAi9C,KAAA,QACA,MACAj9C,KAAAmlG,OACA,CACA,EAQAhE,OAAAxkG,UAAAwoG,MAAA,WACA,cAAAnlG,KAAA8gG,YAAA9gG,KAAA+jG,UAAA3nG,WACA4D,KAAAglG,WAAAhlG,KAAAmiG,YAAAhoG,OAAA,CACAoiD,MAAA,gCAAAv8C,KAAAmiG,YAAAhoG,QACA6F,KAAA+jG,UAAAgB,KAAA/kG,KAAAmiG,aAGAniG,KAAAoiG,cAAApiG,KAAAmiG,YAAAhoG,OACA6F,KAAAi9C,KAAA,QACA,CACA,EAYAkkD,OAAAxkG,UAAAsuC,MACAk2D,OAAAxkG,UAAAooG,KAAA,SAAArmE,IAAAt8B,QAAAq8B,IACAz+B,KAAA+lG,WAAA,UAAArnE,IAAAt8B,QAAAq8B,IACA,OAAAz+B,IACA,EAYAmhG,OAAAxkG,UAAAopG,WAAA,SAAA/6F,KAAAif,KAAA7nB,QAAAq8B,IACA,uBAAAxU,KAAA,CACAwU,GAAAxU,KACAA,KAAAprB,SACA,CAEA,uBAAAuD,QAAA,CACAq8B,GAAAr8B,QACAA,QAAA,IACA,CAEA,eAAApC,KAAA8gG,YAAA,WAAA9gG,KAAA8gG,WAAA,CACA,MACA,CAEA1+F,iBAAA,GACAA,QAAA4jG,SAAA,QAAA5jG,QAAA4jG,SAEA,IAAA1B,OAAA,CACAt5F,UACAif,UACA7nB,iBAEApC,KAAAi9C,KAAA,eAAAqnD,QACAtkG,KAAAmiG,YAAA33F,KAAA85F,QACA,GAAA7lE,GAAAz+B,KAAAygG,KAAA,QAAAhiE,IACAz+B,KAAAmlG,OACA,EAQAhE,OAAAxkG,UAAAqiB,MAAA,WACA,eAAAhf,KAAA8gG,YAAA,SAAA9gG,KAAA8gG,WAAA,CACA9gG,KAAA8gG,WAAA,UAEA,IAAAvlG,KAAAyE,KAEA,GAAAA,KAAAmiG,YAAAhoG,OAAA,CACA6F,KAAAygG,KAAA,oBACA,GAAAzgG,KAAAglG,UAAA,CACAiB,gBACA,MACAjnF,OACA,CACA,GACA,SAAAhf,KAAAglG,UAAA,CACAiB,gBACA,MACAjnF,OACA,CACA,CAEA,SAAAA,QACAzjB,KAAAkpG,QAAA,gBACAloD,MAAA,+CACAhhD,KAAAwoG,UAAA/kF,OACA,CAEA,SAAAknF,kBACA3qG,KAAAmlG,eAAA,UAAAwF,iBACA3qG,KAAAmlG,eAAA,eAAAwF,iBACAlnF,OACA,CAEA,SAAAinF,iBAEA1qG,KAAAklG,KAAA,UAAAyF,iBACA3qG,KAAAklG,KAAA,eAAAyF,gBACA,CAEA,OAAAlmG,IACA,EAQAmhG,OAAAxkG,UAAA6nG,QAAA,SAAAv8E,KACAs0B,MAAA,kBAAAt0B,KACAk5E,OAAAwC,sBAAA,MACA3jG,KAAAi9C,KAAA,QAAAh1B,KACAjoB,KAAAykG,QAAA,kBAAAx8E,IACA,EAQAk5E,OAAAxkG,UAAA8nG,QAAA,SAAA0B,OAAApjE,MACA,eAAA/iC,KAAA8gG,YAAA,SAAA9gG,KAAA8gG,YAAA,YAAA9gG,KAAA8gG,WAAA,CACAvkD,MAAA,iCAAA4pD,QACA,IAAA5qG,KAAAyE,KAGAi0D,aAAAj0D,KAAAwjG,mBACAvvC,aAAAj0D,KAAAyjG,kBAGAzjG,KAAA+jG,UAAA97C,mBAAA,SAGAjoD,KAAA+jG,UAAA/kF,QAGAhf,KAAA+jG,UAAA97C,qBAGAjoD,KAAA8gG,WAAA,SAGA9gG,KAAAoY,GAAA,KAGApY,KAAAi9C,KAAA,QAAAkpD,OAAApjE,MAIAxnC,KAAA4mG,YAAA,GACA5mG,KAAA6mG,cAAA,CACA,CACA,EAUAjB,OAAAxkG,UAAAgpG,eAAA,SAAAtC,UACA,IAAA+C,iBAAA,GACA,QAAA5sG,EAAA,EAAAu8C,EAAAstD,SAAAlpG,OAAAX,EAAAu8C,EAAAv8C,IAAA,CACA,IAAAqX,MAAA7Q,KAAAghG,WAAAqC,SAAA7pG,IAAA4sG,iBAAA57F,KAAA64F,SAAA7pG,GACA,CACA,OAAA4sG,gBACA,C,8KCvuBA,IAAAj2F,OAAAxW,QAAA,oBACA,IAAA0mG,QAAA1mG,QAAA,qBAMAS,OAAAH,QAAA2pG,UASA,SAAAA,UAAA15F,MACAlK,KAAA0hG,KAAAx3F,KAAAw3F,KACA1hG,KAAAqhG,SAAAn3F,KAAAm3F,SACArhG,KAAAuhG,KAAAr3F,KAAAq3F,KACAvhG,KAAAshG,OAAAp3F,KAAAo3F,OACAthG,KAAA0oD,MAAAx+C,KAAAw+C,MACA1oD,KAAAgiG,eAAA93F,KAAA83F,eACAhiG,KAAAiiG,kBAAA/3F,KAAA+3F,kBACAjiG,KAAA8gG,WAAA,GACA9gG,KAAAwhG,MAAAt3F,KAAAs3F,OAAA,MACAxhG,KAAAikG,OAAA/5F,KAAA+5F,OACAjkG,KAAA8hG,WAAA53F,KAAA43F,WACA9hG,KAAA+hG,gBAAA73F,KAAA63F,gBAGA/hG,KAAA2iG,IAAAz4F,KAAAy4F,IACA3iG,KAAAzD,IAAA2N,KAAA3N,IACAyD,KAAA4iG,WAAA14F,KAAA04F,WACA5iG,KAAA6iG,KAAA34F,KAAA24F,KACA7iG,KAAAo1E,GAAAlrE,KAAAkrE,GACAp1E,KAAA8iG,QAAA54F,KAAA44F,QACA9iG,KAAA+iG,mBAAA74F,KAAA64F,mBACA/iG,KAAAgjG,UAAA94F,KAAA84F,UAGAhjG,KAAAijG,cAAA/4F,KAAA+4F,cAGAjjG,KAAAmjG,aAAAj5F,KAAAi5F,aACAnjG,KAAAojG,aAAAl5F,KAAAk5F,YACA,CAMA/C,QAAAuD,UAAAjnG,WAUAinG,UAAAjnG,UAAA6nG,QAAA,SAAA9lE,IAAAqE,MACA,IAAA9a,IAAA,IAAAnuB,MAAA4kC,KACAzW,IAAAjd,KAAA,iBACAid,IAAAo+E,YAAAtjE,KACA/iC,KAAAi9C,KAAA,QAAAh1B,KACA,OAAAjoB,IACA,EAQA4jG,UAAAjnG,UAAA+mG,KAAA,WACA,cAAA1jG,KAAA8gG,YAAA,KAAA9gG,KAAA8gG,WAAA,CACA9gG,KAAA8gG,WAAA,UACA9gG,KAAAsmG,QACA,CAEA,OAAAtmG,IACA,EAQA4jG,UAAAjnG,UAAAqiB,MAAA,WACA,eAAAhf,KAAA8gG,YAAA,SAAA9gG,KAAA8gG,WAAA,CACA9gG,KAAAumG,UACAvmG,KAAAykG,SACA,CAEA,OAAAzkG,IACA,EASA4jG,UAAAjnG,UAAAooG,KAAA,SAAAyB,SACA,YAAAxmG,KAAA8gG,WAAA,CACA9gG,KAAAirC,MAAAu7D,QACA,MACA,UAAA1sG,MAAA,qBACA,CACA,EAQA8pG,UAAAjnG,UAAA6oG,OAAA,WACAxlG,KAAA8gG,WAAA,OACA9gG,KAAA5D,SAAA,KACA4D,KAAAi9C,KAAA,OACA,EASA2mD,UAAAjnG,UAAA8pG,OAAA,SAAAx8E,MACA,IAAAq6E,OAAAn0F,OAAAu2F,aAAAz8E,KAAAjqB,KAAAikG,OAAA1B,YACAviG,KAAAukG,SAAAD,OACA,EAMAV,UAAAjnG,UAAA4nG,SAAA,SAAAD,QACAtkG,KAAAi9C,KAAA,SAAAqnD,OACA,EAQAV,UAAAjnG,UAAA8nG,QAAA,WACAzkG,KAAA8gG,WAAA,SACA9gG,KAAAi9C,KAAA,QACA,C,uFC5JA,IAAA0pD,eAAAhtG,QAAA,oBACA,IAAAitG,IAAAjtG,QAAA,iBACA,IAAAktG,MAAAltG,QAAA,mBACA,IAAAmtG,UAAAntG,QAAA,eAMAM,QAAAo7F,gBACAp7F,QAAA6sG,oBASA,SAAAzR,QAAAnrF,MACA,IAAA68F,IACA,IAAAnlC,GAAA,MACA,IAAAolC,GAAA,MACA,IAAApF,MAAA,QAAA13F,KAAA03F,MAEA,UAAAl/C,WAAA,aACA,IAAAukD,MAAA,WAAAvkD,SAAAD,SACA,IAAA8+C,KAAA7+C,SAAA6+C,KAGA,IAAAA,KAAA,CACAA,KAAA0F,MAAA,MACA,CAEArlC,GAAA13D,KAAAm3F,WAAA3+C,SAAA2+C,UAAAE,OAAAr3F,KAAAq3F,KACAyF,GAAA98F,KAAAo3F,SAAA2F,KACA,CAEA/8F,KAAAg9F,QAAAtlC,GACA13D,KAAAi9F,QAAAH,GACAD,IAAA,IAAAJ,eAAAz8F,MAEA,YAAA68F,MAAA78F,KAAAy3F,WAAA,CACA,WAAAiF,IAAA18F,KACA,MACA,IAAA03F,MAAA,UAAA9nG,MAAA,kBACA,WAAA+sG,MAAA38F,KACA,CACA,C,yHChDA,IAAAk9F,QAAAztG,QAAA,aACA,IAAA0tG,QAAA1tG,QAAA,qBACA,IAAAmG,WAAAnG,QAAA,iBAMAS,OAAAH,QAAAqtG,aAMA,IAAAC,SAAA,MACA,IAAAC,gBAAA,OAMA,IAAA7G,UAMA,SAAAt6E,QAAA,CASA,SAAAihF,aAAAp9F,MACAk9F,QAAAltG,KAAA8F,KAAAkK,MAEAlK,KAAA0oD,MAAA1oD,KAAA0oD,OAAA,GAIA,IAAAi4C,UAAA,CAEAA,UAAA7gG,WAAA2nG,OAAA3nG,WAAA2nG,QAAA,EACA,CAGAznG,KAAA6Q,MAAA8vF,UAAAxmG,OAGA,IAAAoB,KAAAyE,KACA2gG,UAAAn2F,MAAA,SAAAk0B,KACAnjC,KAAAkrG,OAAA/nE,IACA,IAGA1+B,KAAA0oD,MAAA3S,EAAA/1C,KAAA6Q,MAGA,UAAA86E,mBAAA,YACAA,iBAAA,2BACA,GAAApwF,KAAAmsG,OAAAnsG,KAAAmsG,OAAA/mB,QAAAt6D,KACA,SACA,CACA,CAMAghF,QAAAC,aAAAF,SAMAE,aAAA3qG,UAAAmoG,eAAA,MAQAwC,aAAA3qG,UAAA4pG,QAAA,WACA,GAAAvmG,KAAA0nG,OAAA,CACA1nG,KAAA0nG,OAAAv8D,WAAA6e,YAAAhqD,KAAA0nG,QACA1nG,KAAA0nG,OAAA,IACA,CAEA,GAAA1nG,KAAAm7F,KAAA,CACAn7F,KAAAm7F,KAAAhwD,WAAA6e,YAAAhqD,KAAAm7F,MACAn7F,KAAAm7F,KAAA,KACAn7F,KAAA2nG,OAAA,IACA,CAEAP,QAAAzqG,UAAA4pG,QAAArsG,KAAA8F,KACA,EAQAsnG,aAAA3qG,UAAAirG,OAAA,WACA,IAAArsG,KAAAyE,KACA,IAAA0nG,OAAA7gD,SAAAqC,cAAA,UAEA,GAAAlpD,KAAA0nG,OAAA,CACA1nG,KAAA0nG,OAAAv8D,WAAA6e,YAAAhqD,KAAA0nG,QACA1nG,KAAA0nG,OAAA,IACA,CAEAA,OAAA57F,MAAA,KACA47F,OAAAtsD,IAAAp7C,KAAAohG,MACAsG,OAAA/mB,QAAA,SAAAvnF,GACAmC,KAAAipG,QAAA,mBAAAprG,EACA,EAEA,IAAAylF,SAAAh4B,SAAAghD,qBAAA,aACA,GAAAhpB,SAAA,CACAA,SAAA1zC,WAAAo7B,aAAAmhC,OAAA7oB,SACA,OACAh4B,SAAAmO,MAAAnO,SAAAh0C,MAAA02C,YAAAm+C,OACA,CACA1nG,KAAA0nG,cAEA,IAAAI,UAAA,qBAAA5lD,WAAA,SAAAziD,KAAAyiD,UAAAioC,WAEA,GAAA2d,UAAA,CACAzpD,YAAA,WACA,IAAAspD,OAAA9gD,SAAAqC,cAAA,UACArC,SAAAh0C,KAAA02C,YAAAo+C,QACA9gD,SAAAh0C,KAAAm3C,YAAA29C,OACA,OACA,CACA,EAUAL,aAAA3qG,UAAAorG,QAAA,SAAA99E,KAAAwU,IACA,IAAAljC,KAAAyE,KAEA,IAAAA,KAAAm7F,KAAA,CACA,IAAAA,KAAAt0C,SAAAqC,cAAA,QACA,IAAA8+C,KAAAnhD,SAAAqC,cAAA,YACA,IAAA9wC,GAAApY,KAAAioG,SAAA,cAAAjoG,KAAA6Q,MACA,IAAA82F,OAEAxM,KAAA3pC,UAAA,WACA2pC,KAAAx5D,MAAA9K,SAAA,WACAskE,KAAAx5D,MAAA2wB,IAAA,UACA6oC,KAAAx5D,MAAAtpB,KAAA,UACA8iF,KAAAp/F,OAAAqc,GACA+iF,KAAA7/E,OAAA,OACA6/E,KAAA5pC,aAAA,0BACAy2C,KAAAxoG,KAAA,IACA27F,KAAA5xC,YAAAy+C,MACAnhD,SAAAh0C,KAAA02C,YAAA4xC,MAEAn7F,KAAAm7F,UACAn7F,KAAAgoG,SACA,CAEAhoG,KAAAm7F,KAAA+M,OAAAloG,KAAAohG,MAEA,SAAA+G,WACAC,aACA3pE,IACA,CAEA,SAAA2pE,aACA,GAAA7sG,KAAAosG,OAAA,CACA,IACApsG,KAAA4/F,KAAAnxC,YAAAzuD,KAAAosG,OACA,OAAAvuG,GACAmC,KAAAipG,QAAA,qCAAAprG,EACA,CACA,CAEA,IAEA,IAAA8uD,KAAA,oCAAA3sD,KAAA0sG,SAAA,KACAN,OAAA9gD,SAAAqC,cAAAhB,KACA,OAAA9uD,GACAuuG,OAAA9gD,SAAAqC,cAAA,UACAy+C,OAAAnoG,KAAAjE,KAAA0sG,SACAN,OAAAvsD,IAAA,cACA,CAEAusD,OAAAvvF,GAAA7c,KAAA0sG,SAEA1sG,KAAA4/F,KAAA5xC,YAAAo+C,QACApsG,KAAAosG,aACA,CAEAS,aAIAn+E,UAAAjiB,QAAAw/F,gBAAA,QACAxnG,KAAAgoG,KAAAlrG,MAAAmtB,KAAAjiB,QAAAu/F,SAAA,OAEA,IACAvnG,KAAAm7F,KAAAE,QACA,OAAAjiG,GAAA,CAEA,GAAA4G,KAAA2nG,OAAA/b,YAAA,CACA5rF,KAAA2nG,OAAAU,mBAAA,WACA,GAAA9sG,KAAAosG,OAAA7G,aAAA,YACAqH,UACA,CACA,CACA,MACAnoG,KAAA2nG,OAAA/mB,OAAAunB,QACA,CACA,C,mGC/NA,IAAAxB,eAAAhtG,QAAA,oBACA,IAAAytG,QAAAztG,QAAA,aACA,IAAA0mG,QAAA1mG,QAAA,qBACA,IAAA0tG,QAAA1tG,QAAA,qBACA,IAAA4iD,MAAA5iD,QAAA,QAAAA,CAAA,gCACA,IAAAmG,WAAAnG,QAAA,iBAMAS,OAAAH,QAAA2sG,IACAxsG,OAAAH,QAAAquG,gBAMA,SAAAjiF,QAAA,CASA,SAAAugF,IAAA18F,MACAk9F,QAAAltG,KAAA8F,KAAAkK,MACAlK,KAAAkkG,eAAAh6F,KAAAg6F,eACAlkG,KAAAmjG,aAAAj5F,KAAAi5F,aAEA,UAAAzgD,WAAA,aACA,IAAAukD,MAAA,WAAAvkD,SAAAD,SACA,IAAA8+C,KAAA7+C,SAAA6+C,KAGA,IAAAA,KAAA,CACAA,KAAA0F,MAAA,MACA,CAEAjnG,KAAA4hE,UAAAlf,WAAA,aAAAx4C,KAAAm3F,WAAA3+C,SAAA2+C,UACAE,OAAAr3F,KAAAq3F,KACAvhG,KAAAgnG,GAAA98F,KAAAo3F,SAAA2F,KACA,CACA,CAMAI,QAAAT,IAAAQ,SAMAR,IAAAjqG,UAAAmoG,eAAA,KASA8B,IAAAjqG,UAAA4rG,QAAA,SAAAr+F,MACAA,WAAA,GACAA,KAAAk3F,IAAAphG,KAAAohG,MACAl3F,KAAA03D,GAAA5hE,KAAA4hE,GACA13D,KAAA88F,GAAAhnG,KAAAgnG,GACA98F,KAAAs3F,MAAAxhG,KAAAwhG,OAAA,MACAt3F,KAAA46F,eAAA9kG,KAAA8kG,eACA56F,KAAA43F,WAAA9hG,KAAA8hG,WACA53F,KAAA63F,gBAAA/hG,KAAA+hG,gBAGA73F,KAAAy4F,IAAA3iG,KAAA2iG,IACAz4F,KAAA3N,IAAAyD,KAAAzD,IACA2N,KAAA04F,WAAA5iG,KAAA4iG,WACA14F,KAAA24F,KAAA7iG,KAAA6iG,KACA34F,KAAAkrE,GAAAp1E,KAAAo1E,GACAlrE,KAAA44F,QAAA9iG,KAAA8iG,QACA54F,KAAA64F,mBAAA/iG,KAAA+iG,mBACA74F,KAAAg6F,eAAAlkG,KAAAkkG,eAGAh6F,KAAAi5F,aAAAnjG,KAAAmjG,aAEA,WAAAmF,QAAAp+F,KACA,EAUA08F,IAAAjqG,UAAAorG,QAAA,SAAA99E,KAAAwU,IACA,IAAA+pE,gBAAAv+E,OAAA,UAAAA,OAAAprB,UACA,IAAA4pG,IAAAzoG,KAAAuoG,QAAA,CAAAjtF,OAAA,OAAA2O,UAAAu+E,oBACA,IAAAjtG,KAAAyE,KACAyoG,IAAAzrD,GAAA,UAAAve,IACAgqE,IAAAzrD,GAAA,kBAAA/0B,KACA1sB,KAAAipG,QAAA,iBAAAv8E,IACA,IACAjoB,KAAA0oG,QAAAD,GACA,EAQA7B,IAAAjqG,UAAAirG,OAAA,WACArrD,MAAA,YACA,IAAAksD,IAAAzoG,KAAAuoG,UACA,IAAAhtG,KAAAyE,KACAyoG,IAAAzrD,GAAA,iBAAA/yB,MACA1uB,KAAAkrG,OAAAx8E,KACA,IACAw+E,IAAAzrD,GAAA,kBAAA/0B,KACA1sB,KAAAipG,QAAA,iBAAAv8E,IACA,IACAjoB,KAAA2oG,QAAAF,GACA,EASA,SAAAH,QAAAp+F,MACAlK,KAAAsb,OAAApR,KAAAoR,QAAA,MACAtb,KAAAohG,IAAAl3F,KAAAk3F,IACAphG,KAAA4hE,KAAA13D,KAAA03D,GACA5hE,KAAAgnG,KAAA98F,KAAA88F,GACAhnG,KAAA8L,MAAA,QAAA5B,KAAA4B,MACA9L,KAAAiqB,KAAAprB,YAAAqL,KAAA+f,KAAA/f,KAAA+f,KAAA,KACAjqB,KAAAwhG,MAAAt3F,KAAAs3F,MACAxhG,KAAAwoG,SAAAt+F,KAAAs+F,SACAxoG,KAAA8kG,eAAA56F,KAAA46F,eACA9kG,KAAA8hG,WAAA53F,KAAA43F,WACA9hG,KAAA+hG,gBAAA73F,KAAA63F,gBACA/hG,KAAAkkG,eAAAh6F,KAAAg6F,eAGAlkG,KAAA2iG,IAAAz4F,KAAAy4F,IACA3iG,KAAAzD,IAAA2N,KAAA3N,IACAyD,KAAA4iG,WAAA14F,KAAA04F,WACA5iG,KAAA6iG,KAAA34F,KAAA24F,KACA7iG,KAAAo1E,GAAAlrE,KAAAkrE,GACAp1E,KAAA8iG,QAAA54F,KAAA44F,QACA9iG,KAAA+iG,mBAAA74F,KAAA64F,mBAGA/iG,KAAAmjG,aAAAj5F,KAAAi5F,aAEAnjG,KAAAzC,QACA,CAMA8iG,QAAAiI,QAAA3rG,WAQA2rG,QAAA3rG,UAAAY,OAAA,WACA,IAAA2M,KAAA,CAAAs3F,MAAAxhG,KAAAwhG,MAAA0F,QAAAlnG,KAAA4hE,GAAAulC,QAAAnnG,KAAAgnG,GAAAlF,WAAA9hG,KAAA8hG,YAGA53F,KAAAy4F,IAAA3iG,KAAA2iG,IACAz4F,KAAA3N,IAAAyD,KAAAzD,IACA2N,KAAA04F,WAAA5iG,KAAA4iG,WACA14F,KAAA24F,KAAA7iG,KAAA6iG,KACA34F,KAAAkrE,GAAAp1E,KAAAo1E,GACAlrE,KAAA44F,QAAA9iG,KAAA8iG,QACA54F,KAAA64F,mBAAA/iG,KAAA+iG,mBAEA,IAAAgE,IAAA/mG,KAAA+mG,IAAA,IAAAJ,eAAAz8F,MACA,IAAA3O,KAAAyE,KAEA,IACAu8C,MAAA,kBAAAv8C,KAAAsb,OAAAtb,KAAAohG,KACA2F,IAAArD,KAAA1jG,KAAAsb,OAAAtb,KAAAohG,IAAAphG,KAAA8L,OACA,IACA,GAAA9L,KAAAmjG,aAAA,CACA4D,IAAA6B,uBAAA7B,IAAA6B,sBAAA,MACA,QAAApvG,KAAAwG,KAAAmjG,aAAA,CACA,GAAAnjG,KAAAmjG,aAAAx7F,eAAAnO,GAAA,CACAutG,IAAA8B,iBAAArvG,EAAAwG,KAAAmjG,aAAA3pG,GACA,CACA,CACA,CACA,OAAAJ,GAAA,CAEA,YAAA4G,KAAAsb,OAAA,CACA,IACA,GAAAtb,KAAAwoG,SAAA,CACAzB,IAAA8B,iBAAA,0CACA,MACA9B,IAAA8B,iBAAA,0CACA,CACA,OAAAzvG,GAAA,CACA,CAEA,IACA2tG,IAAA8B,iBAAA,eACA,OAAAzvG,GAAA,CAGA,uBAAA2tG,IAAA,CACAA,IAAAhF,gBAAA/hG,KAAA+hG,eACA,CAEA,GAAA/hG,KAAAkkG,eAAA,CACA6C,IAAAlB,QAAA7lG,KAAAkkG,cACA,CAEA,GAAAlkG,KAAA8oG,SAAA,CACA/B,IAAAnmB,OAAA,WACArlF,KAAAwlG,QACA,EACAgG,IAAApmB,QAAA,WACAplF,KAAAipG,QAAAuC,IAAAgC,aACA,CACA,MACAhC,IAAAsB,mBAAA,WACA,GAAAtB,IAAAjG,aAAA,GACA,IACA,IAAAkI,YAAAjC,IAAAkC,kBAAA,gBACA,GAAA1tG,KAAAupG,gBAAAkE,cAAA,4BAAAA,cAAA,2CACAjC,IAAAmC,aAAA,aACA,CACA,OAAA9vG,GAAA,CACA,CACA,OAAA2tG,IAAAjG,WAAA,OACA,SAAAiG,IAAAoC,QAAA,OAAApC,IAAAoC,OAAA,CACA5tG,KAAAwlG,QACA,MAGA1iD,YAAA,WACA9iD,KAAAipG,eAAAuC,IAAAoC,SAAA,SAAApC,IAAAoC,OAAA,EACA,KACA,CACA,CACA,CAEA5sD,MAAA,cAAAv8C,KAAAiqB,MACA88E,IAAAhC,KAAA/kG,KAAAiqB,KACA,OAAA7wB,GAIAilD,YAAA,WACA9iD,KAAAipG,QAAAprG,EACA,MACA,MACA,CAEA,UAAAytD,WAAA,aACA7mD,KAAA6Q,MAAAy3F,QAAAc,gBACAd,QAAAe,SAAArpG,KAAA6Q,OAAA7Q,IACA,CACA,EAQAsoG,QAAA3rG,UAAA2sG,UAAA,WACAtpG,KAAAi9C,KAAA,WACAj9C,KAAAklG,SACA,EAQAoD,QAAA3rG,UAAA8pG,OAAA,SAAAx8E,MACAjqB,KAAAi9C,KAAA,OAAAhzB,MACAjqB,KAAAspG,WACA,EAQAhB,QAAA3rG,UAAA6nG,QAAA,SAAAv8E,KACAjoB,KAAAi9C,KAAA,QAAAh1B,KACAjoB,KAAAklG,QAAA,KACA,EAQAoD,QAAA3rG,UAAAuoG,QAAA,SAAAqE,WACA,wBAAAvpG,KAAA+mG,KAAA,OAAA/mG,KAAA+mG,IAAA,CACA,MACA,CAEA,GAAA/mG,KAAA8oG,SAAA,CACA9oG,KAAA+mG,IAAAnmB,OAAA5gF,KAAA+mG,IAAApmB,QAAAt6D,KACA,MACArmB,KAAA+mG,IAAAsB,mBAAAhiF,KACA,CAEA,GAAAkjF,UAAA,CACA,IACAvpG,KAAA+mG,IAAAyC,OACA,OAAApwG,GAAA,CACA,CAEA,UAAAytD,WAAA,oBACAyhD,QAAAe,SAAArpG,KAAA6Q,MACA,CAEA7Q,KAAA+mG,IAAA,IACA,EAQAuB,QAAA3rG,UAAAokG,OAAA,WACA,IAAA92E,KACA,IACA,IAAA++E,YACA,IACAA,YAAAhpG,KAAA+mG,IAAAkC,kBAAA,eACA,OAAA7vG,GAAA,CACA,GAAA4vG,cAAA,4BAAAA,cAAA,2CACA/+E,KAAAjqB,KAAA+mG,IAAA0C,UAAAzpG,KAAA+mG,IAAAgC,YACA,MACA9+E,KAAAjqB,KAAA+mG,IAAAgC,YACA,CACA,OAAA3vG,GACA4G,KAAAwkG,QAAAprG,EACA,CACA,SAAA6wB,KAAA,CACAjqB,KAAAymG,OAAAx8E,KACA,CACA,EAQAq+E,QAAA3rG,UAAAmsG,OAAA,WACA,cAAAY,iBAAA,cAAA1pG,KAAAgnG,IAAAhnG,KAAA8hG,UACA,EAQAwG,QAAA3rG,UAAA6sG,MAAA,WACAxpG,KAAAklG,SACA,EAQAoD,QAAAc,cAAA,EACAd,QAAAe,SAAA,GAEA,UAAAxiD,WAAA,aACA,UAAA+kC,cAAA,YACAA,YAAA,WAAA+d,cACA,gBAAAhe,mBAAA,YACA,IAAAie,iBAAA,eAAA9pG,WAAA,oBACA6rF,iBAAAie,iBAAAD,cAAA,MACA,CACA,CAEA,SAAAA,gBACA,QAAAnwG,KAAA8uG,QAAAe,SAAA,CACA,GAAAf,QAAAe,SAAA1hG,eAAAnO,GAAA,CACA8uG,QAAAe,SAAA7vG,GAAAgwG,OACA,CACA,CACA,C,yJC7ZA,IAAA5F,UAAAjqG,QAAA,gBACA,IAAAunG,QAAAvnG,QAAA,WACA,IAAAwW,OAAAxW,QAAA,oBACA,IAAA0tG,QAAA1tG,QAAA,qBACA,IAAAkwG,MAAAlwG,QAAA,SACA,IAAA4iD,MAAA5iD,QAAA,QAAAA,CAAA,4BAMAS,OAAAH,QAAAmtG,QAMA,IAAA0C,QAAA,WACA,IAAAnD,eAAAhtG,QAAA,oBACA,IAAAotG,IAAA,IAAAJ,eAAA,CAAAO,QAAA,QACA,aAAAH,IAAAmC,YACA,CAJA,GAaA,SAAA9B,QAAAl9F,MACA,IAAA23F,YAAA33F,WAAA23F,YACA,IAAAiI,SAAAjI,YAAA,CACA7hG,KAAA8kG,eAAA,KACA,CACAlB,UAAA1pG,KAAA8F,KAAAkK,KACA,CAMAm9F,QAAAD,QAAAxD,WAMAwD,QAAAzqG,UAAA6C,KAAA,UASA4nG,QAAAzqG,UAAA2pG,OAAA,WACAtmG,KAAA03F,MACA,EASA0P,QAAAzqG,UAAAsoG,MAAA,SAAA8E,SACA,IAAAxuG,KAAAyE,KAEAA,KAAA8gG,WAAA,UAEA,SAAAmE,QACA1oD,MAAA,UACAhhD,KAAAulG,WAAA,SACAiJ,SACA,CAEA,GAAA/pG,KAAAq1F,UAAAr1F,KAAA5D,SAAA,CACA,IAAAm5B,MAAA,EAEA,GAAAv1B,KAAAq1F,QAAA,CACA94C,MAAA,+CACAhnB,QACAv1B,KAAAygG,KAAA,2BACAlkD,MAAA,gCACAhnB,OAAA0vE,OACA,GACA,CAEA,IAAAjlG,KAAA5D,SAAA,CACAmgD,MAAA,+CACAhnB,QACAv1B,KAAAygG,KAAA,oBACAlkD,MAAA,gCACAhnB,OAAA0vE,OACA,GACA,CACA,MACAA,OACA,CACA,EAQAmC,QAAAzqG,UAAA+6F,KAAA,WACAn7C,MAAA,WACAv8C,KAAAq1F,QAAA,KACAr1F,KAAA4nG,SACA5nG,KAAAi9C,KAAA,OACA,EAQAmqD,QAAAzqG,UAAA8pG,OAAA,SAAAx8E,MACA,IAAA1uB,KAAAyE,KACAu8C,MAAA,sBAAAtyB,MACA,IAAAuN,SAAA,SAAA8sE,OAAAzzF,MAAA0kB,OAEA,eAAAh6B,KAAAulG,YAAAwD,OAAAt5F,OAAA,QACAzP,KAAAiqG,QACA,CAGA,aAAAlB,OAAAt5F,KAAA,CACAzP,KAAAkpG,UACA,YACA,CAGAlpG,KAAAgpG,SAAAD,OACA,EAGAn0F,OAAA65F,cAAA//E,KAAAjqB,KAAAikG,OAAA1B,WAAA/qE,UAGA,cAAAx3B,KAAA8gG,WAAA,CAEA9gG,KAAAq1F,QAAA,MACAr1F,KAAAi9C,KAAA,gBAEA,YAAAj9C,KAAA8gG,WAAA,CACA9gG,KAAA03F,MACA,MACAn7C,MAAA,uCAAAv8C,KAAA8gG,WACA,CACA,CACA,EAQAsG,QAAAzqG,UAAA4pG,QAAA,WACA,IAAAhrG,KAAAyE,KAEA,SAAAgf,QACAu9B,MAAA,wBACAhhD,KAAA0vC,MAAA,EAAAjgC,KAAA,UACA,CAEA,YAAAhL,KAAA8gG,WAAA,CACAvkD,MAAA,4BACAv9B,OACA,MAGAu9B,MAAA,wCACAv8C,KAAAygG,KAAA,OAAAzhF,MACA,CACA,EAUAooF,QAAAzqG,UAAAsuC,MAAA,SAAAu7D,SACA,IAAAjrG,KAAAyE,KACAA,KAAA5D,SAAA,MACA,IAAA6tG,WAAA,WACA1uG,KAAAa,SAAA,KACAb,KAAA0hD,KAAA,QACA,EAEA9sC,OAAA+5F,cAAA1D,QAAAxmG,KAAA8kG,gBAAA,SAAA76E,MACA1uB,KAAAwsG,QAAA99E,KAAAggF,WACA,GACA,EAQA7C,QAAAzqG,UAAAykG,IAAA,WACA,IAAA14C,MAAA1oD,KAAA0oD,OAAA,GACA,IAAAyhD,OAAAnqG,KAAAshG,OAAA,eACA,IAAAC,KAAA,GAGA,WAAAvhG,KAAAiiG,kBAAA,CACAv5C,MAAA1oD,KAAAgiG,gBAAA6H,OACA,CAEA,IAAA7pG,KAAA8kG,iBAAAp8C,MAAAs7C,IAAA,CACAt7C,MAAAvY,IAAA,CACA,CAEAuY,MAAAw4C,QAAA7xD,OAAAqZ,OAGA,GAAA1oD,KAAAuhG,OAAA,UAAA4I,QAAAnrG,OAAAgB,KAAAuhG,QAAA,KACA,SAAA4I,QAAAnrG,OAAAgB,KAAAuhG,QAAA,KACAA,KAAA,IAAAvhG,KAAAuhG,IACA,CAGA,GAAA74C,MAAAvuD,OAAA,CACAuuD,MAAA,IAAAA,KACA,CAEA,IAAA0hD,KAAApqG,KAAAqhG,SAAAtpF,QAAA,UACA,OAAAoyF,OAAA,OAAAC,KAAA,IAAApqG,KAAAqhG,SAAA,IAAArhG,KAAAqhG,UAAAE,KAAAvhG,KAAA0hG,KAAAh5C,KACA,C,4LChPA,IAAAk7C,UAAAjqG,QAAA,gBACA,IAAAwW,OAAAxW,QAAA,oBACA,IAAAunG,QAAAvnG,QAAA,WACA,IAAA0tG,QAAA1tG,QAAA,qBACA,IAAAkwG,MAAAlwG,QAAA,SACA,IAAA4iD,MAAA5iD,QAAA,QAAAA,CAAA,8BAEA,IAAA0wG,iBAAAC,cAEA,UAAAC,YAAA,aACAF,iBAAAE,SACA,gBAAAhvG,OAAA,aACA8uG,iBAAA9uG,KAAAgvG,WAAAhvG,KAAAivG,YACA,CAEA,UAAAztD,SAAA,aACA,IACAutD,cAAA3wG,QAAA,KACA,OAAAP,GAAA,CACA,CAQA,IAAAqxG,cAAAJ,kBAAAC,cAMAlwG,OAAAH,QAAAywG,GASA,SAAAA,GAAAxgG,MACA,IAAA23F,YAAA33F,WAAA23F,YACA,GAAAA,YAAA,CACA7hG,KAAA8kG,eAAA,KACA,CACA9kG,KAAAyiG,kBAAAv4F,KAAAu4F,kBACAziG,KAAA2qG,sBAAAN,mBAAAngG,KAAA84F,UACAhjG,KAAAmkG,UAAAj6F,KAAAi6F,UACA,IAAAnkG,KAAA2qG,sBAAA,CACAF,cAAAH,aACA,CACA1G,UAAA1pG,KAAA8F,KAAAkK,KACA,CAMAm9F,QAAAqD,GAAA9G,WAQA8G,GAAA/tG,UAAA6C,KAAA,YAMAkrG,GAAA/tG,UAAAmoG,eAAA,KAQA4F,GAAA/tG,UAAA2pG,OAAA,WACA,IAAAtmG,KAAA4qG,QAAA,CAEA,MACA,CAEA,IAAAxJ,IAAAphG,KAAAohG,MACA,IAAA+C,UAAAnkG,KAAAmkG,UAEA,IAAAj6F,KAAA,GAEA,IAAAlK,KAAAijG,cAAA,CACA/4F,KAAAs3F,MAAAxhG,KAAAwhG,MACAt3F,KAAAu4F,kBAAAziG,KAAAyiG,kBAGAv4F,KAAAy4F,IAAA3iG,KAAA2iG,IACAz4F,KAAA3N,IAAAyD,KAAAzD,IACA2N,KAAA04F,WAAA5iG,KAAA4iG,WACA14F,KAAA24F,KAAA7iG,KAAA6iG,KACA34F,KAAAkrE,GAAAp1E,KAAAo1E,GACAlrE,KAAA44F,QAAA9iG,KAAA8iG,QACA54F,KAAA64F,mBAAA/iG,KAAA+iG,kBACA,CAEA,GAAA/iG,KAAAmjG,aAAA,CACAj5F,KAAA2gG,QAAA7qG,KAAAmjG,YACA,CACA,GAAAnjG,KAAAojG,aAAA,CACAl5F,KAAAk5F,aAAApjG,KAAAojG,YACA,CAEA,IACApjG,KAAA8qG,GACA9qG,KAAA2qG,wBAAA3qG,KAAAijG,cACAkB,UACA,IAAAsG,cAAArJ,IAAA+C,WACA,IAAAsG,cAAArJ,KACA,IAAAqJ,cAAArJ,IAAA+C,UAAAj6F,KACA,OAAA+d,KACA,OAAAjoB,KAAAi9C,KAAA,QAAAh1B,IACA,CAEA,GAAAjoB,KAAA8qG,GAAAvI,aAAA1jG,UAAA,CACAmB,KAAA8kG,eAAA,KACA,CAEA,GAAA9kG,KAAA8qG,GAAAC,UAAA/qG,KAAA8qG,GAAAC,SAAA3gF,OAAA,CACApqB,KAAA8kG,eAAA,KACA9kG,KAAA8qG,GAAAvI,WAAA,YACA,MACAviG,KAAA8qG,GAAAvI,WAAA,aACA,CAEAviG,KAAAgrG,mBACA,EAQAN,GAAA/tG,UAAAquG,kBAAA,WACA,IAAAzvG,KAAAyE,KAEAA,KAAA8qG,GAAAG,OAAA,WACA1vG,KAAAiqG,QACA,EACAxlG,KAAA8qG,GAAAxF,QAAA,WACA/pG,KAAAkpG,SACA,EACAzkG,KAAA8qG,GAAAI,UAAA,SAAAC,IACA5vG,KAAAkrG,OAAA0E,GAAAlhF,KACA,EACAjqB,KAAA8qG,GAAAnqB,QAAA,SAAAvnF,GACAmC,KAAAipG,QAAA,kBAAAprG,EACA,CACA,EASAsxG,GAAA/tG,UAAAsuC,MAAA,SAAAu7D,SACA,IAAAjrG,KAAAyE,KACAA,KAAA5D,SAAA,MAIA,IAAAm5B,MAAAixE,QAAArsG,OACA,QAAAX,EAAA,EAAAyyB,EAAAsJ,MAAA/7B,EAAAyyB,EAAAzyB,IAAA,EACA,SAAA8qG,QACAn0F,OAAAi7F,aAAA9G,OAAA/oG,KAAAupG,gBAAA,SAAA76E,MACA,IAAA1uB,KAAAovG,sBAAA,CAEA,IAAAzgG,KAAA,GACA,GAAAo6F,OAAAliG,QAAA,CACA8H,KAAA87F,SAAA1B,OAAAliG,QAAA4jG,QACA,CAEA,GAAAzqG,KAAAknG,kBAAA,CACA,IAAAznG,IAAA,kBAAAivB,KAAA2O,OAAAb,WAAA9N,WAAA9vB,OACA,GAAAa,IAAAO,KAAAknG,kBAAAC,UAAA,CACAx4F,KAAA87F,SAAA,KACA,CACA,CACA,CAKA,IACA,GAAAzqG,KAAAovG,sBAAA,CAEApvG,KAAAuvG,GAAA/F,KAAA96E,KACA,MACA1uB,KAAAuvG,GAAA/F,KAAA96E,KAAA/f,KACA,CACA,OAAA9Q,GACAmjD,MAAA,wCACA,GAEAhnB,OAAAtC,MACA,GACA,EAjCA,CAiCAuzE,QAAAhtG,GACA,CAEA,SAAAy5B,OACA13B,KAAA0hD,KAAA,SAIAoB,YAAA,WACA9iD,KAAAa,SAAA,KACAb,KAAA0hD,KAAA,QACA,KACA,CACA,EAQAytD,GAAA/tG,UAAA8nG,QAAA,WACAb,UAAAjnG,UAAA8nG,QAAAvqG,KAAA8F,KACA,EAQA0qG,GAAA/tG,UAAA4pG,QAAA,WACA,UAAAvmG,KAAA8qG,KAAA,aACA9qG,KAAA8qG,GAAA9rF,OACA,CACA,EAQA0rF,GAAA/tG,UAAAykG,IAAA,WACA,IAAA14C,MAAA1oD,KAAA0oD,OAAA,GACA,IAAAyhD,OAAAnqG,KAAAshG,OAAA,WACA,IAAAC,KAAA,GAGA,GAAAvhG,KAAAuhG,OAAA,QAAA4I,QAAAnrG,OAAAgB,KAAAuhG,QAAA,KACA,OAAA4I,QAAAnrG,OAAAgB,KAAAuhG,QAAA,KACAA,KAAA,IAAAvhG,KAAAuhG,IACA,CAGA,GAAAvhG,KAAAiiG,kBAAA,CACAv5C,MAAA1oD,KAAAgiG,gBAAA6H,OACA,CAGA,IAAA7pG,KAAA8kG,eAAA,CACAp8C,MAAAvY,IAAA,CACA,CAEAuY,MAAAw4C,QAAA7xD,OAAAqZ,OAGA,GAAAA,MAAAvuD,OAAA,CACAuuD,MAAA,IAAAA,KACA,CAEA,IAAA0hD,KAAApqG,KAAAqhG,SAAAtpF,QAAA,UACA,OAAAoyF,OAAA,OAAAC,KAAA,IAAApqG,KAAAqhG,SAAA,IAAArhG,KAAAqhG,UAAAE,KAAAvhG,KAAA0hG,KAAAh5C,KACA,EASAgiD,GAAA/tG,UAAAiuG,MAAA,WACA,QAAAH,iBAAA,iBAAAA,eAAAzqG,KAAAR,OAAAkrG,GAAA/tG,UAAA6C,KACA,C,2MCxSA,IAAA6rG,QAAA1xG,QAAA,YACA,IAAAmG,WAAAnG,QAAA,iBAEAS,OAAAH,QAAA,SAAAiQ,MACA,IAAAg9F,QAAAh9F,KAAAg9F,QAIA,IAAAC,QAAAj9F,KAAAi9F,QAIA,IAAArF,WAAA53F,KAAA43F,WAGA,IACA,wBAAA6E,kBAAAO,SAAAmE,SAAA,CACA,WAAA1E,cACA,CACA,OAAAvtG,GAAA,CAKA,IACA,wBAAAswG,iBAAAvC,SAAArF,WAAA,CACA,WAAA4H,cACA,CACA,OAAAtwG,GAAA,CAEA,IAAA8tG,QAAA,CACA,IACA,WAAApnG,WAAA,WAAA+sC,OAAA,UAAA5O,KAAA,2BACA,OAAA7kC,GAAA,CACA,CACA,C,0GC/BAa,QAAAG,OAAAH,QAAAN,QAAA,WACAM,QAAAgqC,QACAhqC,QAAAqxG,sBACArxG,QAAA2kE,UACA3kE,QAAAsxG,UACAtxG,QAAAuxG,oBACAvxG,QAAAoiD,QAAA,oBAAAovD,QACA,oBAAAA,OAAApvD,QACAovD,OAAApvD,QAAAx/B,MACA6uF,eAMAzxG,QAAA+lC,OAAA,CACA,sEACA,sEACA,sEACA,sEACA,sEACA,sEACA,sEACA,sEACA,sEACA,sEACA,6DAWA,SAAAwrE,YAIA,UAAAzuD,SAAA,aAAAA,OAAAne,SAAAme,OAAAne,QAAA5zB,OAAA,YACA,WACA,CAGA,UAAAk3C,YAAA,aAAAA,UAAAioC,WAAAjoC,UAAAioC,UAAAr2C,cAAAnjC,MAAA,0BACA,YACA,CAIA,cAAAk2C,WAAA,aAAAA,SAAA6L,iBAAA7L,SAAA6L,gBAAA/wB,OAAAklB,SAAA6L,gBAAA/wB,MAAAgqE,yBAEA5uD,SAAA,aAAAA,OAAA3yC,UAAA2yC,OAAA3yC,QAAAwhG,SAAA7uD,OAAA3yC,QAAAyhG,WAAA9uD,OAAA3yC,QAAAi1C,eAGA6C,YAAA,aAAAA,UAAAioC,WAAAjoC,UAAAioC,UAAAr2C,cAAAnjC,MAAA,mBAAAglB,SAAA/0B,OAAAkrG,GAAA,gBAEA5pD,YAAA,aAAAA,UAAAioC,WAAAjoC,UAAAioC,UAAAr2C,cAAAnjC,MAAA,qBACA,CAMA1W,QAAA8xG,WAAAh2D,EAAA,SAAAppB,GACA,IACA,OAAAwR,KAAAC,UAAAzR,EACA,OAAA1E,KACA,qCAAAA,IAAAD,OACA,CACA,EASA,SAAAsjF,WAAAptE,MACA,IAAAstE,UAAAxrG,KAAAwrG,UAEAttE,KAAA,IAAAstE,UAAA,SACAxrG,KAAAgsG,WACAR,UAAA,WACAttE,KAAA,IACAstE,UAAA,WACA,IAAAvxG,QAAAgyG,SAAAjsG,KAAAksG,MAEA,IAAAV,UAAA,OAEA,IAAA9xG,EAAA,UAAAsG,KAAAw+C,MACAtgB,KAAA85B,OAAA,IAAAt+D,EAAA,kBAKA,IAAAmX,MAAA,EACA,IAAAs7F,MAAA,EACAjuE,KAAA,GAAAl2B,QAAA,wBAAA2I,OACA,UAAAA,MAAA,OACAE,QACA,UAAAF,MAAA,CAGAw7F,MAAAt7F,KACA,CACA,IAEAqtB,KAAA85B,OAAAm0C,MAAA,EAAAzyG,EACA,CASA,SAAAuqC,MAGA,wBAAA75B,SACAA,QAAA65B,KACAkC,SAAAxpC,UAAAkiC,MAAA3kC,KAAAkQ,QAAA65B,IAAA75B,QAAA4F,UACA,CASA,SAAA4uD,KAAAwtC,YACA,IACA,SAAAA,WAAA,CACAnyG,QAAAoiD,QAAAgwD,WAAA,QACA,MACApyG,QAAAoiD,QAAAE,MAAA6vD,UACA,CACA,OAAAhzG,GAAA,CACA,CASA,SAAAmyG,OACA,IAAApyG,EACA,IACAA,EAAAc,QAAAoiD,QAAAE,KACA,OAAAnjD,GAAA,CAGA,IAAAD,UAAAylC,UAAA,qBAAAA,QAAA,CACAzlC,EAAAylC,QAAAW,IAAA+sE,KACA,CAEA,OAAAnzG,CACA,CAMAc,QAAAsyG,OAAAhB,QAaA,SAAAG,eACA,IACA,OAAA3uD,OAAAgB,YACA,OAAA3kD,GAAA,CACA,C,kHC1LAa,QAAAG,OAAAH,QAAAuyG,YAAAjwD,MAAAiwD,YAAA,WAAAA,YACAvyG,QAAAwyG,cACAxyG,QAAA27D,gBACA37D,QAAAsyG,cACAtyG,QAAA6jD,gBACA7jD,QAAAgyG,SAAAtyG,QAAA,MAKAM,QAAAyyG,UAAA,GAMAzyG,QAAA0yG,MAAA,GACA1yG,QAAA2yG,MAAA,GAQA3yG,QAAA8xG,WAAA,GASA,SAAAc,YAAAb,WACA,IAAAnqE,KAAA,EAAAroC,EAEA,IAAAA,KAAAwyG,UAAA,CACAnqE,YAAA,GAAAA,KAAAmqE,UAAAzkG,WAAA/N,GACAqoC,MAAA,CACA,CAEA,OAAA5nC,QAAA+lC,OAAAtH,KAAAwxC,IAAAroC,MAAA5nC,QAAA+lC,OAAA7lC,OACA,CAUA,SAAAqyG,YAAAR,WAEA,IAAAc,SAEA,SAAAvwD,QAEA,IAAAA,MAAAuB,QAAA,OAEA,IAAAviD,KAAAghD,MAGA,IAAAzgC,MAAA,IAAAwmB,KACA,IAAAiM,GAAAzyB,MAAAgxF,UAAAhxF,MACAvgB,KAAA2wG,KAAA39D,GACAhzC,KAAA4nC,KAAA2pE,SACAvxG,KAAAugB,UACAgxF,SAAAhxF,KAGA,IAAAoiB,KAAA,IAAAhjC,MAAA8U,UAAA7V,QACA,QAAAX,EAAA,EAAAA,EAAA0kC,KAAA/jC,OAAAX,IAAA,CACA0kC,KAAA1kC,GAAAwW,UAAAxW,EACA,CAEA0kC,KAAA,GAAAjkC,QAAAwyG,OAAAvuE,KAAA,IAEA,qBAAAA,KAAA,IAEAA,KAAAumB,QAAA,KACA,CAGA,IAAA5zC,MAAA,EACAqtB,KAAA,GAAAA,KAAA,GAAAl2B,QAAA,0BAAA2I,MAAAmtB,QAEA,GAAAntB,QAAA,YAAAA,MACAE,QACA,IAAAk8F,UAAA9yG,QAAA8xG,WAAAjuE,QACA,uBAAAivE,UAAA,CACA,IAAAvnF,IAAA0Y,KAAArtB,OACAF,MAAAo8F,UAAA7yG,KAAAqB,KAAAiqB,KAGA0Y,KAAA85B,OAAAnnD,MAAA,GACAA,OACA,CACA,OAAAF,KACA,IAGA1W,QAAAqxG,WAAApxG,KAAAqB,KAAA2iC,MAEA,IAAA8uE,MAAAzwD,MAAAtY,KAAAhqC,QAAAgqC,KAAA75B,QAAA65B,IAAA/mC,KAAAkN,SACA4iG,MAAAnuE,MAAAtjC,KAAA2iC,KACA,CAEAqe,MAAAyvD,oBACAzvD,MAAAuB,QAAA7jD,QAAA6jD,QAAAkuD,WACAzvD,MAAAivD,UAAAvxG,QAAAuxG,YACAjvD,MAAAiC,MAAAquD,YAAAb,WACAzvD,MAAA0wD,gBAGA,uBAAAhzG,QAAAic,KAAA,CACAjc,QAAAic,KAAAqmC,MACA,CAEAtiD,QAAAyyG,UAAAliG,KAAA+xC,OAEA,OAAAA,KACA,CAEA,SAAA0wD,UACA,IAAAp8F,MAAA5W,QAAAyyG,UAAA30F,QAAA/X,MACA,GAAA6Q,SAAA,GACA5W,QAAAyyG,UAAA10C,OAAAnnD,MAAA,GACA,WACA,MACA,YACA,CACA,CAUA,SAAA07F,OAAAH,YACAnyG,QAAA2kE,KAAAwtC,YAEAnyG,QAAA0yG,MAAA,GACA1yG,QAAA2yG,MAAA,GAEA,IAAApzG,EACA,IAAAwT,cAAAo/F,aAAA,SAAAA,WAAA,IAAAp/F,MAAA,UACA,IAAAhS,IAAAgS,MAAA7S,OAEA,IAAAX,EAAA,EAAAA,EAAAwB,IAAAxB,IAAA,CACA,IAAAwT,MAAAxT,GAAA,SACA4yG,WAAAp/F,MAAAxT,GAAAwO,QAAA,aACA,GAAAokG,WAAA,UACAnyG,QAAA2yG,MAAApiG,KAAA,IAAA5J,OAAA,IAAAwrG,WAAAp1E,OAAA,QACA,MACA/8B,QAAA0yG,MAAAniG,KAAA,IAAA5J,OAAA,IAAAwrG,WAAA,KACA,CACA,CAEA,IAAA5yG,EAAA,EAAAA,EAAAS,QAAAyyG,UAAAvyG,OAAAX,IAAA,CACA,IAAAkC,SAAAzB,QAAAyyG,UAAAlzG,GACAkC,SAAAoiD,QAAA7jD,QAAA6jD,QAAApiD,SAAAswG,UACA,CACA,CAQA,SAAAp2C,UACA37D,QAAAsyG,OAAA,GACA,CAUA,SAAAzuD,QAAAt+C,MACA,GAAAA,UAAArF,OAAA,UACA,WACA,CACA,IAAAX,EAAAwB,IACA,IAAAxB,EAAA,EAAAwB,IAAAf,QAAA2yG,MAAAzyG,OAAAX,EAAAwB,IAAAxB,IAAA,CACA,GAAAS,QAAA2yG,MAAApzG,GAAAiG,KAAAD,MAAA,CACA,YACA,CACA,CACA,IAAAhG,EAAA,EAAAwB,IAAAf,QAAA0yG,MAAAxyG,OAAAX,EAAAwB,IAAAxB,IAAA,CACA,GAAAS,QAAA0yG,MAAAnzG,GAAAiG,KAAAD,MAAA,CACA,WACA,CACA,CACA,YACA,CAUA,SAAAitG,OAAAjnF,KACA,GAAAA,eAAA1rB,MAAA,OAAA0rB,IAAA2U,OAAA3U,IAAAwC,QACA,OAAAxC,GACA,C,gDC5NA,IAAAwG,EAAA,IACA,IAAA2oB,EAAA3oB,EAAA,GACA,IAAA0hC,EAAA/Y,EAAA,GACA,IAAAxqB,EAAAujC,EAAA,GACA,IAAAj1B,EAAAtO,EAAA,OAgBA/vB,OAAAH,QAAA,SAAAurB,IAAApjB,SACAA,iBAAA,GACA,IAAA4I,YAAAwa,IACA,GAAAxa,OAAA,UAAAwa,IAAArrB,OAAA,GACA,OAAA8U,MAAAuW,IACA,SAAAxa,OAAA,UAAA49D,MAAApjD,OAAA,OACA,OAAApjB,QAAA8qG,KAAAC,QAAA3nF,KAAA4nF,SAAA5nF,IACA,CACA,UAAA1rB,MACA,wDACAqkC,KAAAC,UAAA5Y,KAEA,EAUA,SAAAvW,MAAA6lB,KACAA,IAAA/1B,OAAA+1B,KACA,GAAAA,IAAA36B,OAAA,KACA,MACA,CACA,IAAAwW,MAAA,wHAAAD,KACAokB,KAEA,IAAAnkB,MAAA,CACA,MACA,CACA,IAAAtX,EAAAu8B,WAAAjlB,MAAA,IACA,IAAA3F,MAAA2F,MAAA,UAAAmjC,cACA,OAAA9oC,MACA,YACA,WACA,UACA,SACA,QACA,OAAA3R,EAAAo/B,EACA,WACA,UACA,QACA,OAAAp/B,EAAA8wB,EACA,YACA,WACA,UACA,SACA,QACA,OAAA9wB,EAAAq0D,EACA,cACA,aACA,WACA,UACA,QACA,OAAAr0D,EAAAs7C,EACA,cACA,aACA,WACA,UACA,QACA,OAAAt7C,EAAA2yB,EACA,mBACA,kBACA,YACA,WACA,SACA,OAAA3yB,EACA,QACA,OAAAwF,UAEA,CAUA,SAAAuuG,SAAA7+D,IACA,GAAAA,IAAApkB,EAAA,CACA,OAAAuO,KAAAkpB,MAAArT,GAAApkB,GAAA,GACA,CACA,GAAAokB,IAAAmf,EAAA,CACA,OAAAh1B,KAAAkpB,MAAArT,GAAAmf,GAAA,GACA,CACA,GAAAnf,IAAAoG,EAAA,CACA,OAAAjc,KAAAkpB,MAAArT,GAAAoG,GAAA,GACA,CACA,GAAApG,IAAAviB,EAAA,CACA,OAAA0M,KAAAkpB,MAAArT,GAAAviB,GAAA,GACA,CACA,OAAAuiB,GAAA,IACA,CAUA,SAAA4+D,QAAA5+D,IACA,OAAA8+D,OAAA9+D,GAAApkB,EAAA,QACAkjF,OAAA9+D,GAAAmf,EAAA,SACA2/C,OAAA9+D,GAAAoG,EAAA,WACA04D,OAAA9+D,GAAAviB,EAAA,WACAuiB,GAAA,KACA,CAMA,SAAA8+D,OAAA9+D,GAAAl1C,EAAAmG,MACA,GAAA+uC,GAAAl1C,EAAA,CACA,MACA,CACA,GAAAk1C,GAAAl1C,EAAA,KACA,OAAAq/B,KAAAsW,MAAAT,GAAAl1C,GAAA,IAAAmG,IACA,CACA,OAAAk5B,KAAAqhC,KAAAxrB,GAAAl1C,GAAA,IAAAmG,KAAA,GACA,C,2CCnJA,IAAAyT,KAAAtZ,QAAA,UACA,IAAA2zG,UAAA3zG,QAAA,eACA,IAAA4zG,YAAA5zG,QAAA,qBACA,IAAAia,MAAAja,QAAA,SACA,IAAA6zG,KAAA7zG,QAAA,UAEA,IAAA8zG,cACA,UAAAz1E,cAAA,aACAy1E,cAAA9zG,QAAA,qBACA,CASA,IAAA+zG,iBAAAxrD,YAAA,wBAAAziD,KAAAyiD,UAAAioC,WAQA,IAAAwjB,mBAAAzrD,YAAA,0BAAAziD,KAAAyiD,UAAAioC,WAMA,IAAAyjB,cAAAF,WAAAC,YAMA1zG,QAAAwoD,SAAA,EAMA,IAAA+jD,QAAAvsG,QAAAusG,QAAA,CACA9C,KAAA,EACA1kF,MAAA,EACA8mF,KAAA,EACA+H,KAAA,EACA7lF,QAAA,EACAy5E,QAAA,EACA9pE,KAAA,GAGA,IAAAm2E,YAAA76F,KAAAuzF,SAMA,IAAAv+E,IAAA,CAAAjd,KAAA,QAAAif,KAAA,gBAMA,IAAAqnB,KAAA33C,QAAA,QAkBAM,QAAAmxG,aAAA,SAAA9G,OAAAQ,eAAAiJ,WAAAv2E,UACA,UAAAstE,iBAAA,YACAttE,SAAAstE,eACAA,eAAA,KACA,CAEA,UAAAiJ,aAAA,YACAv2E,SAAAu2E,WACAA,WAAA,IACA,CAEA,IAAA9jF,KAAAq6E,OAAAr6E,OAAAprB,UACAA,UACAylG,OAAAr6E,KAAAmO,QAAAksE,OAAAr6E,KAEA,UAAA+N,cAAA,aAAA/N,gBAAA+N,YAAA,CACA,OAAAg2E,kBAAA1J,OAAAQ,eAAAttE,SACA,gBAAA8Z,OAAA,aAAArnB,gBAAAqnB,KAAA,CACA,OAAA28D,WAAA3J,OAAAQ,eAAAttE,SACA,CAGA,GAAAvN,WAAAqlB,OAAA,CACA,OAAA4+D,mBAAA5J,OAAA9sE,SACA,CAGA,IAAA22E,QAAA3H,QAAAlC,OAAAt5F,MAGA,GAAAnM,YAAAylG,OAAAr6E,KAAA,CACAkkF,SAAAJ,WAAAP,KAAAn+D,OAAAtwC,OAAAulG,OAAAr6E,MAAA,CAAA3pB,OAAA,QAAAvB,OAAAulG,OAAAr6E,KACA,CAEA,OAAAuN,SAAA,GAAA22E,QAEA,EAEA,SAAAD,mBAAA5J,OAAA9sE,UAEA,IAAAxP,QAAA,IAAA/tB,QAAAusG,QAAAlC,OAAAt5F,MAAAs5F,OAAAr6E,UACA,OAAAuN,SAAAxP,QACA,CAMA,SAAAgmF,kBAAA1J,OAAAQ,eAAAttE,UACA,IAAAstE,eAAA,CACA,OAAA7qG,QAAAm0G,mBAAA9J,OAAA9sE,SACA,CAEA,IAAAvN,KAAAq6E,OAAAr6E,KACA,IAAAokF,aAAA,IAAAn2E,WAAAjO,MACA,IAAAqkF,aAAA,IAAAp2E,WAAA,EAAAjO,KAAA8N,YAEAu2E,aAAA,GAAA9H,QAAAlC,OAAAt5F,MACA,QAAAxR,EAAA,EAAAA,EAAA60G,aAAAl0G,OAAAX,IAAA,CACA80G,aAAA90G,EAAA,GAAA60G,aAAA70G,EACA,CAEA,OAAAg+B,SAAA82E,aAAAl2E,OACA,CAEA,SAAAm2E,wBAAAjK,OAAAQ,eAAAttE,UACA,IAAAstE,eAAA,CACA,OAAA7qG,QAAAm0G,mBAAA9J,OAAA9sE,SACA,CAEA,IAAAg3E,GAAA,IAAAjuB,WACAiuB,GAAA5tB,OAAA,WACA3mF,QAAAmxG,aAAA,CAAApgG,KAAAs5F,OAAAt5F,KAAAif,KAAAukF,GAAAlrF,QAAAwhF,eAAA,KAAAttE,SACA,EACA,OAAAg3E,GAAAC,kBAAAnK,OAAAr6E,KACA,CAEA,SAAAgkF,WAAA3J,OAAAQ,eAAAttE,UACA,IAAAstE,eAAA,CACA,OAAA7qG,QAAAm0G,mBAAA9J,OAAA9sE,SACA,CAEA,GAAAo2E,cAAA,CACA,OAAAW,wBAAAjK,OAAAQ,eAAAttE,SACA,CAEA,IAAAr9B,OAAA,IAAA+9B,WAAA,GACA/9B,OAAA,GAAAqsG,QAAAlC,OAAAt5F,MACA,IAAA0jG,KAAA,IAAAp9D,KAAA,CAAAn3C,OAAAi+B,OAAAksE,OAAAr6E,OAEA,OAAAuN,SAAAk3E,KACA,CASAz0G,QAAAm0G,mBAAA,SAAA9J,OAAA9sE,UACA,IAAAxP,QAAA,IAAA/tB,QAAAusG,QAAAlC,OAAAt5F,MACA,UAAAsmC,OAAA,aAAAgzD,OAAAr6E,gBAAAqnB,KAAA,CACA,IAAAk9D,GAAA,IAAAjuB,WACAiuB,GAAA5tB,OAAA,WACA,IAAAzwC,IAAAq+D,GAAAlrF,OAAAtW,MAAA,QACAwqB,SAAAxP,QAAAmoB,IACA,EACA,OAAAq+D,GAAAG,cAAArK,OAAAr6E,KACA,CAEA,IAAA2kF,QACA,IACAA,QAAA7vG,OAAAoC,aAAA09B,MAAA,SAAA3G,WAAAosE,OAAAr6E,MACA,OAAA7wB,GAEA,IAAAy1G,MAAA,IAAA32E,WAAAosE,OAAAr6E,MACA,IAAAknE,MAAA,IAAAj2F,MAAA2zG,MAAA10G,QACA,QAAAX,EAAA,EAAAA,EAAAq1G,MAAA10G,OAAAX,IAAA,CACA23F,MAAA33F,GAAAq1G,MAAAr1G,EACA,CACAo1G,QAAA7vG,OAAAoC,aAAA09B,MAAA,KAAAsyD,MACA,CACAnpE,SAAA8mF,KAAAF,SACA,OAAAp3E,SAAAxP,QACA,EASA/tB,QAAAysG,aAAA,SAAAz8E,KAAAs4E,WAAAwM,YACA,GAAA9kF,OAAAprB,UAAA,CACA,OAAAopB,GACA,CAEA,UAAAgC,OAAA,UACA,GAAAA,KAAAnZ,OAAA,UACA,OAAA7W,QAAA+0G,mBAAA/kF,KAAA+M,OAAA,GAAAurE,WACA,CAEA,GAAAwM,WAAA,CACA9kF,KAAAglF,UAAAhlF,MACA,GAAAA,OAAA,OACA,OAAAhC,GACA,CACA,CACA,IAAAjd,KAAAif,KAAAnZ,OAAA,GAEA,GAAA9R,OAAAgM,cAAA8iG,YAAA9iG,MAAA,CACA,OAAAid,GACA,CAEA,GAAAgC,KAAA9vB,OAAA,GACA,OAAA6Q,KAAA8iG,YAAA9iG,MAAAif,UAAAsQ,UAAA,GACA,MACA,OAAAvvB,KAAA8iG,YAAA9iG,MACA,CACA,CAEA,IAAAkkG,QAAA,IAAAh3E,WAAAjO,MACA,IAAAjf,KAAAkkG,QAAA,GACA,IAAA7vF,KAAAkuF,YAAAtjF,KAAA,GACA,GAAAqnB,MAAAixD,aAAA,QACAljF,KAAA,IAAAiyB,KAAA,CAAAjyB,MACA,CACA,OAAArU,KAAA8iG,YAAA9iG,MAAAif,KAAA5K,KACA,EAEA,SAAA4vF,UAAAhlF,MACA,IACAA,KAAAujF,KAAAj+D,OAAAtlB,KAAA,CAAA3pB,OAAA,OACA,OAAAlH,GACA,YACA,CACA,OAAA6wB,IACA,CASAhwB,QAAA+0G,mBAAA,SAAAtwE,IAAA6jE,YACA,IAAAv3F,KAAA8iG,YAAApvE,IAAA5tB,OAAA,IACA,IAAA28F,cAAA,CACA,OAAAziG,UAAAif,KAAA,CAAAqlB,OAAA,KAAArlB,KAAAyU,IAAA1H,OAAA,IACA,CAEA,IAAA/M,KAAAwjF,cAAAl+D,OAAA7Q,IAAA1H,OAAA,IAEA,GAAAurE,aAAA,QAAAjxD,KAAA,CACArnB,KAAA,IAAAqnB,KAAA,CAAArnB,MACA,CAEA,OAAAjf,UAAAif,UACA,EAkBAhwB,QAAAiwG,cAAA,SAAA1D,QAAA1B,eAAAttE,UACA,UAAAstE,iBAAA,YACAttE,SAAAstE,eACAA,eAAA,IACA,CAEA,IAAA0D,SAAA8E,UAAA9G,SAEA,GAAA1B,gBAAA0D,SAAA,CACA,GAAAl3D,OAAAs8D,cAAA,CACA,OAAA3zG,QAAAk1G,oBAAA3I,QAAAhvE,SACA,CAEA,OAAAv9B,QAAAm1G,2BAAA5I,QAAAhvE,SACA,CAEA,IAAAgvE,QAAArsG,OAAA,CACA,OAAAq9B,SAAA,KACA,CAEA,SAAA63E,gBAAArnF,SACA,OAAAA,QAAA7tB,OAAA,IAAA6tB,OACA,CAEA,SAAAsnF,UAAAhL,OAAAiL,cACAt1G,QAAAmxG,aAAA9G,QAAAkE,SAAA,MAAA1D,eAAA,gBAAA98E,SACAunF,aAAA,KAAAF,gBAAArnF,SACA,GACA,CAEA2a,IAAA6jE,QAAA8I,WAAA,SAAArnF,IAAAunF,SACA,OAAAh4E,SAAAg4E,QAAAvxE,KAAA,IACA,GACA,EAMA,SAAA0E,IAAAiP,IAAA69D,KAAAx8E,MACA,IAAA3P,OAAA,IAAApoB,MAAA02C,IAAAz3C,QACA,IAAAmN,KAAAsM,MAAAg+B,IAAAz3C,OAAA84B,MAEA,IAAAy8E,cAAA,SAAAl2G,EAAAgrD,GAAAwC,IACAyoD,KAAAjrD,IAAA,SAAA5nB,MAAA8B,KACApb,OAAA9pB,GAAAklC,IACAsoB,GAAApqB,MAAAtZ,OACA,GACA,EAEA,QAAA9pB,EAAA,EAAAA,EAAAo4C,IAAAz3C,OAAAX,IAAA,CACAk2G,cAAAl2G,EAAAo4C,IAAAp4C,GAAA8N,KACA,CACA,CAUArN,QAAA+vG,cAAA,SAAA//E,KAAAs4E,WAAA/qE,UACA,UAAAvN,OAAA,UACA,OAAAhwB,QAAA01G,sBAAA1lF,KAAAs4E,WAAA/qE,SACA,CAEA,UAAA+qE,aAAA,YACA/qE,SAAA+qE,WACAA,WAAA,IACA,CAEA,IAAA+B,OACA,GAAAr6E,OAAA,IAEA,OAAAuN,SAAAvP,IAAA,IACA,CAEA,IAAA9tB,OAAA,GAAAd,EAAAqlC,IAEA,QAAAllC,EAAA,EAAAyyB,EAAAhC,KAAA9vB,OAAAX,EAAAyyB,EAAAzyB,IAAA,CACA,IAAAo2G,IAAA3lF,KAAAnZ,OAAAtX,GAEA,GAAAo2G,MAAA,KACAz1G,QAAAy1G,IACA,QACA,CAEA,GAAAz1G,SAAA,IAAAA,SAAAd,EAAA2F,OAAA7E,SAAA,CAEA,OAAAq9B,SAAAvP,IAAA,IACA,CAEAyW,IAAAzU,KAAA+M,OAAAx9B,EAAA,EAAAH,GAEA,GAAAc,QAAAukC,IAAAvkC,OAAA,CAEA,OAAAq9B,SAAAvP,IAAA,IACA,CAEA,GAAAyW,IAAAvkC,OAAA,CACAmqG,OAAArqG,QAAAysG,aAAAhoE,IAAA6jE,WAAA,OAEA,GAAAt6E,IAAAjd,OAAAs5F,OAAAt5F,MAAAid,IAAAgC,OAAAq6E,OAAAr6E,KAAA,CAEA,OAAAuN,SAAAvP,IAAA,IACA,CAEA,IAAA+Z,IAAAxK,SAAA8sE,OAAA9qG,EAAAH,EAAA4yB,GACA,WAAA+V,IAAA,MACA,CAGAxoC,GAAAH,EACAc,OAAA,EACA,CAEA,GAAAA,SAAA,IAEA,OAAAq9B,SAAAvP,IAAA,IACA,CAEA,EAgBAhuB,QAAAm1G,2BAAA,SAAA5I,QAAAhvE,UACA,IAAAgvE,QAAArsG,OAAA,CACA,OAAAq9B,SAAA,IAAAQ,YAAA,GACA,CAEA,SAAAs3E,UAAAhL,OAAAiL,cACAt1G,QAAAmxG,aAAA9G,OAAA,oBAAAr6E,MACA,OAAAslF,aAAA,KAAAtlF,KACA,GACA,CAEA0Y,IAAA6jE,QAAA8I,WAAA,SAAArnF,IAAA4nF,gBACA,IAAAC,YAAAD,eAAA3sE,QAAA,SAAA6sE,IAAA/1G,GACA,IAAAgB,IACA,UAAAhB,IAAA,UACAgB,IAAAhB,EAAAG,MACA,MACAa,IAAAhB,EAAA+9B,UACA,CACA,OAAAg4E,IAAA/0G,IAAAsE,WAAAnF,OAAAa,IAAA,CACA,MAEA,IAAAg1G,YAAA,IAAA93E,WAAA43E,aAEA,IAAAG,YAAA,EACAJ,eAAA/tE,SAAA,SAAA9nC,GACA,IAAA+jC,gBAAA/jC,IAAA,SACA,IAAAgjE,GAAAhjE,EACA,GAAA+jC,SAAA,CACA,IAAAsrC,KAAA,IAAAnxC,WAAAl+B,EAAAG,QACA,QAAAX,EAAA,EAAAA,EAAAQ,EAAAG,OAAAX,IAAA,CACA6vE,KAAA7vE,GAAAQ,EAAAuN,WAAA/N,EACA,CACAwjE,GAAAqM,KAAAjxC,MACA,CAEA,GAAA2F,SAAA,CACAiyE,YAAAC,eAAA,CACA,MACAD,YAAAC,eAAA,CACA,CAEA,IAAAC,OAAAlzC,GAAAjlC,WAAAz4B,WACA,QAAA9F,EAAA,EAAAA,EAAA02G,OAAA/1G,OAAAX,IAAA,CACAw2G,YAAAC,eAAAt6E,SAAAu6E,OAAA12G,GACA,CACAw2G,YAAAC,eAAA,IAEA,IAAA5mC,KAAA,IAAAnxC,WAAA8kC,IACA,QAAAxjE,EAAA,EAAAA,EAAA6vE,KAAAlvE,OAAAX,IAAA,CACAw2G,YAAAC,eAAA5mC,KAAA7vE,EACA,CACA,IAEA,OAAAg+B,SAAAw4E,YAAA53E,OACA,GACA,EAMAn+B,QAAAk1G,oBAAA,SAAA3I,QAAAhvE,UACA,SAAA83E,UAAAhL,OAAAiL,cACAt1G,QAAAmxG,aAAA9G,OAAA,oBAAA6J,SACA,IAAAgC,iBAAA,IAAAj4E,WAAA,GACAi4E,iBAAA,KACA,UAAAhC,UAAA,UACA,IAAA9kC,KAAA,IAAAnxC,WAAAi2E,QAAAh0G,QACA,QAAAX,EAAA,EAAAA,EAAA20G,QAAAh0G,OAAAX,IAAA,CACA6vE,KAAA7vE,GAAA20G,QAAA5mG,WAAA/N,EACA,CACA20G,QAAA9kC,KAAAjxC,OACA+3E,iBAAA,IACA,CAEA,IAAAn1G,IAAAmzG,mBAAAn2E,YACAm2E,QAAAp2E,WACAo2E,QAAAl6E,KAEA,IAAAi8E,OAAAl1G,IAAAsE,WACA,IAAA8wG,UAAA,IAAAl4E,WAAAg4E,OAAA/1G,OAAA,GACA,QAAAX,EAAA,EAAAA,EAAA02G,OAAA/1G,OAAAX,IAAA,CACA42G,UAAA52G,GAAAm8B,SAAAu6E,OAAA12G,GACA,CACA42G,UAAAF,OAAA/1G,QAAA,IAEA,GAAAm3C,KAAA,CACA,IAAAo9D,KAAA,IAAAp9D,KAAA,CAAA6+D,iBAAA/3E,OAAAg4E,UAAAh4E,OAAA+1E,UACAoB,aAAA,KAAAb,KACA,CACA,GACA,CAEA/rE,IAAA6jE,QAAA8I,WAAA,SAAArnF,IAAAunF,SACA,OAAAh4E,SAAA,IAAA8Z,KAAAk+D,SACA,GACA,EAWAv1G,QAAA01G,sBAAA,SAAA1lF,KAAAs4E,WAAA/qE,UACA,UAAA+qE,aAAA,YACA/qE,SAAA+qE,WACAA,WAAA,IACA,CAEA,IAAA8N,WAAApmF,KACA,IAAAqmF,QAAA,GAEA,MAAAD,WAAAt4E,WAAA,GACA,IAAAw4E,UAAA,IAAAr4E,WAAAm4E,YACA,IAAAtyE,SAAAwyE,UAAA,OACA,IAAAC,UAAA,GAEA,QAAAh3G,EAAA,GAAAA,IAAA,CACA,GAAA+2G,UAAA/2G,KAAA,UAGA,GAAAg3G,UAAAr2G,OAAA,KACA,OAAAq9B,SAAAvP,IAAA,IACA,CAEAuoF,WAAAD,UAAA/2G,EACA,CAEA62G,WAAA9C,YAAA8C,WAAA,EAAAG,UAAAr2G,QACAq2G,UAAA76E,SAAA66E,WAEA,IAAA9xE,IAAA6uE,YAAA8C,WAAA,EAAAG,WACA,GAAAzyE,SAAA,CACA,IACAW,IAAA3/B,OAAAoC,aAAA09B,MAAA,SAAA3G,WAAAwG,KACA,OAAAtlC,GAEA,IAAAy1G,MAAA,IAAA32E,WAAAwG,KACAA,IAAA,GACA,QAAAllC,EAAA,EAAAA,EAAAq1G,MAAA10G,OAAAX,IAAA,CACAklC,KAAA3/B,OAAAoC,aAAA0tG,MAAAr1G,GACA,CACA,CACA,CAEA82G,QAAA9lG,KAAAk0B,KACA2xE,WAAA9C,YAAA8C,WAAAG,UACA,CAEA,IAAAj7E,MAAA+6E,QAAAn2G,OACAm2G,QAAAxuE,SAAA,SAAA1J,OAAA5+B,GACAg+B,SAAAv9B,QAAAysG,aAAAtuE,OAAAmqE,WAAA,MAAA/oG,EAAA+7B,MACA,GACA,C,mJCplBAn7B,OAAAH,QAAAoC,OAAA4W,MAAA,SAAAA,KAAApW,KACA,IAAA9B,IAAA,GACA,IAAAskF,IAAAhjF,OAAAM,UAAAgL,eAEA,QAAAnO,KAAAqD,IAAA,CACA,GAAAwiF,IAAAnlF,KAAA2C,IAAArD,GAAA,CACAuB,IAAAyP,KAAAhR,EACA,CACA,CACA,OAAAuB,GACA,C;;AChBA,IAAA01G,mBAAA1xG,OAAAoC,aAGA,SAAAuvG,WAAAluG,QACA,IAAAigC,OAAA,GACA,IAAAkuE,QAAA,EACA,IAAAx2G,OAAAqI,OAAArI,OACA,IAAA2C,MACA,IAAA8zG,MACA,MAAAD,QAAAx2G,OAAA,CACA2C,MAAA0F,OAAA+E,WAAAopG,WACA,GAAA7zG,OAAA,OAAAA,OAAA,OAAA6zG,QAAAx2G,OAAA,CAEAy2G,MAAApuG,OAAA+E,WAAAopG,WACA,IAAAC,MAAA,eACAnuE,OAAAj4B,OAAA1N,MAAA,YAAA8zG,MAAA,YACA,MAGAnuE,OAAAj4B,KAAA1N,OACA6zG,SACA,CACA,MACAluE,OAAAj4B,KAAA1N,MACA,CACA,CACA,OAAA2lC,MACA,CAGA,SAAAouE,WAAAnmG,OACA,IAAAvQ,OAAAuQ,MAAAvQ,OACA,IAAA0W,OAAA,EACA,IAAA/T,MACA,IAAA2lC,OAAA,GACA,QAAA5xB,MAAA1W,OAAA,CACA2C,MAAA4N,MAAAmG,OACA,GAAA/T,MAAA,OACAA,OAAA,MACA2lC,QAAAguE,mBAAA3zG,QAAA,eACAA,MAAA,MAAAA,MAAA,IACA,CACA2lC,QAAAguE,mBAAA3zG,MACA,CACA,OAAA2lC,MACA,CAEA,SAAAquE,iBAAA75D,UAAA32C,QACA,GAAA22C,WAAA,OAAAA,WAAA,OACA,GAAA32C,OAAA,CACA,MAAAxG,MACA,oBAAAm9C,UAAA33C,SAAA,IAAAmgC,cACA,yBAEA,CACA,YACA,CACA,WACA,CAGA,SAAAsxE,WAAA95D,UAAAghB,OACA,OAAAw4C,mBAAAx5D,WAAAghB,MAAA,OACA,CAEA,SAAA+4C,gBAAA/5D,UAAA32C,QACA,IAAA22C,UAAA,gBACA,OAAAw5D,mBAAAx5D,UACA,CACA,IAAAwU,OAAA,GACA,IAAAxU,UAAA,gBACAwU,OAAAglD,mBAAAx5D,WAAA,SACA,MACA,IAAAA,UAAA,gBACA,IAAA65D,iBAAA75D,UAAA32C,QAAA,CACA22C,UAAA,KACA,CACAwU,OAAAglD,mBAAAx5D,WAAA,WACAwU,QAAAslD,WAAA95D,UAAA,EACA,MACA,IAAAA,UAAA,gBACAwU,OAAAglD,mBAAAx5D,WAAA,UACAwU,QAAAslD,WAAA95D,UAAA,IACAwU,QAAAslD,WAAA95D,UAAA,EACA,CACAwU,QAAAglD,mBAAAx5D,UAAA,QACA,OAAAwU,MACA,CAEA,SAAAsiD,WAAAvrG,OAAA0H,MACAA,WAAA,GACA,IAAA5J,OAAA,QAAA4J,KAAA5J,OAEA,IAAAm3C,WAAAi5D,WAAAluG,QACA,IAAArI,OAAAs9C,WAAAt9C,OACA,IAAA0W,OAAA,EACA,IAAAomC,UACA,IAAAg6D,WAAA,GACA,QAAApgG,MAAA1W,OAAA,CACA88C,UAAAQ,WAAA5mC,OACAogG,YAAAD,gBAAA/5D,UAAA32C,OACA,CACA,OAAA2wG,UACA,CAIA,SAAAC,uBACA,GAAAC,WAAAC,UAAA,CACA,MAAAt3G,MAAA,qBACA,CAEA,IAAAu3G,iBAAAp2D,UAAAk2D,WAAA,IACAA,YAEA,IAAAE,iBAAA,WACA,OAAAA,iBAAA,EACA,CAGA,MAAAv3G,MAAA,4BACA,CAEA,SAAAw3G,aAAAhxG,QACA,IAAAixG,MACA,IAAAC,MACA,IAAAC,MACA,IAAAC,MACA,IAAAz6D,UAEA,GAAAk6D,UAAAC,UAAA,CACA,MAAAt3G,MAAA,qBACA,CAEA,GAAAq3G,WAAAC,UAAA,CACA,YACA,CAGAG,MAAAt2D,UAAAk2D,WAAA,IACAA,YAGA,IAAAI,MAAA,SACA,OAAAA,KACA,CAGA,IAAAA,MAAA,WACAC,MAAAN,uBACAj6D,WAAAs6D,MAAA,OAAAC,MACA,GAAAv6D,WAAA,KACA,OAAAA,SACA,MACA,MAAAn9C,MAAA,4BACA,CACA,CAGA,IAAAy3G,MAAA,WACAC,MAAAN,uBACAO,MAAAP,uBACAj6D,WAAAs6D,MAAA,QAAAC,OAAA,EAAAC,MACA,GAAAx6D,WAAA,MACA,OAAA65D,iBAAA75D,UAAA32C,QAAA22C,UAAA,KACA,MACA,MAAAn9C,MAAA,4BACA,CACA,CAGA,IAAAy3G,MAAA,WACAC,MAAAN,uBACAO,MAAAP,uBACAQ,MAAAR,uBACAj6D,WAAAs6D,MAAA,OAAAC,OAAA,GACAC,OAAA,EAAAC,MACA,GAAAz6D,WAAA,OAAAA,WAAA,SACA,OAAAA,SACA,CACA,CAEA,MAAAn9C,MAAA,yBACA,CAEA,IAAAmhD,UACA,IAAAm2D,UACA,IAAAD,UACA,SAAApC,WAAAkC,WAAA/mG,MACAA,WAAA,GACA,IAAA5J,OAAA,QAAA4J,KAAA5J,OAEA26C,UAAAy1D,WAAAO,YACAG,UAAAn2D,UAAA9gD,OACAg3G,UAAA,EACA,IAAA15D,WAAA,GACA,IAAAjH,IACA,OAAAA,IAAA8gE,aAAAhxG,WAAA,OACAm3C,WAAAjtC,KAAAgmC,IACA,CACA,OAAAqgE,WAAAp5D,WACA,CAEAr9C,OAAAH,QAAA,CACAm9B,QAAA,QACAiY,OAAA0+D,WACAx+D,OAAAw/D,W,2CChNA,aAcA,SAAAjrG,OAAAjH,IAAAb,OACA,UAAAO,OAAAP,MAAA,CACAK,OAAAC,eAAAO,IAAAN,IAAA,CACAO,MAAAd,MAAAO,KACAL,WAAA,KACAC,aAAA,MAEA,CAEA,OAAAU,GACA,CASA,SAAA80G,YAAA1pF,IAAAluB,KAAAiC,OACA,IAAAisB,kBAAA,UACA,UAAArsB,UAAA,mCACA,CAEA,IAAAI,MAAA,CACAA,MAAA,EACA,CAEA,UAAAjC,OAAA,UACAiC,MAAAjC,KACAA,KAAA,EACA,CAEA,GAAAA,KAAA,CACAiC,MAAAjC,SACA,CAEA,IACA,OAAA+J,OAAAmkB,IAAAjsB,MACA,OAAAqiC,GACAriC,MAAAgsB,QAAAC,IAAAD,QACAhsB,MAAAm+B,MAAAlS,IAAAkS,MAEA,MAAAy3E,SAAA,aAEAA,SAAAj1G,UAAAN,OAAAkB,OAAAlB,OAAAY,eAAAgrB,MAGA,MAAAwa,OAAA3+B,OAAA,IAAA8tG,SAAA51G,OAEA,OAAAymC,MACA,CACA,CAEAroC,OAAAH,QAAA03G,W,2CC/CA,aAEA,IAAA9tC,SAAAguC,UAAA,SAAAA,QAAA,KACA,IAAAC,aAAAjuC,YAAAhlC,QAAA,WACAglC,EAAAhlC,MACA,SAAAizE,aAAA/1G,OAAAg2G,SAAA7zE,MACA,OAAAiI,SAAAxpC,UAAAkiC,MAAA3kC,KAAA6B,OAAAg2G,SAAA7zE,KACA,EAEA,IAAA8zE,eACA,GAAAnuC,YAAAouC,UAAA,YACAD,eAAAnuC,EAAAouC,OACA,SAAA51G,OAAAkvD,sBAAA,CACAymD,eAAA,SAAAA,eAAAj2G,QACA,OAAAM,OAAA+lC,oBAAArmC,QACA8wC,OAAAxwC,OAAAkvD,sBAAAxvD,QACA,CACA,MACAi2G,eAAA,SAAAA,eAAAj2G,QACA,OAAAM,OAAA+lC,oBAAArmC,OACA,CACA,CAEA,SAAAm2G,mBAAAC,SACA,GAAA/nG,iBAAAC,KAAAD,QAAAC,KAAA8nG,QACA,CAEA,IAAAC,YAAApzG,OAAA4pE,OAAA,SAAAwpC,YAAAt1G,OACA,OAAAA,aACA,EAEA,SAAAs/C,eACAA,aAAAlmC,KAAAhc,KAAA8F,KACA,CACA5F,OAAAH,QAAAmiD,aACAhiD,OAAAH,QAAAwmG,UAGArkD,uCAEAA,aAAAz/C,UAAA6oD,QAAA3mD,UACAu9C,aAAAz/C,UAAA01G,aAAA,EACAj2D,aAAAz/C,UAAA21G,cAAAzzG,UAIA,IAAA0zG,oBAAA,GAEA,SAAAC,cAAAr1D,UACA,UAAAA,WAAA,YACA,UAAAvhD,UAAA,0EAAAuhD,SACA,CACA,CAEA9gD,OAAAC,eAAA8/C,aAAA,uBACAlgD,WAAA,KACAoT,IAAA,WACA,OAAAijG,mBACA,EACAxxG,IAAA,SAAA7B,KACA,UAAAA,MAAA,UAAAA,IAAA,GAAAkzG,YAAAlzG,KAAA,CACA,UAAA0zC,WAAA,kGAAA1zC,IAAA,IACA,CACAqzG,oBAAArzG,GACA,IAGAk9C,aAAAlmC,KAAA,WAEA,GAAAlW,KAAAwlD,UAAA3mD,WACAmB,KAAAwlD,UAAAnpD,OAAAY,eAAA+C,MAAAwlD,QAAA,CACAxlD,KAAAwlD,QAAAnpD,OAAAkB,OAAA,MACAyC,KAAAqyG,aAAA,CACA,CAEAryG,KAAAsyG,cAAAtyG,KAAAsyG,eAAAzzG,SACA,EAIAu9C,aAAAz/C,UAAA81G,gBAAA,SAAAA,gBAAAp5G,GACA,UAAAA,IAAA,UAAAA,EAAA,GAAA+4G,YAAA/4G,GAAA,CACA,UAAAu5C,WAAA,gFAAAv5C,EAAA,IACA,CACA2G,KAAAsyG,cAAAj5G,EACA,OAAA2G,IACA,EAEA,SAAA0yG,iBAAAC,MACA,GAAAA,KAAAL,gBAAAzzG,UACA,OAAAu9C,aAAAm2D,oBACA,OAAAI,KAAAL,aACA,CAEAl2D,aAAAz/C,UAAAi2G,gBAAA,SAAAA,kBACA,OAAAF,iBAAA1yG,KACA,EAEAo8C,aAAAz/C,UAAAsgD,KAAA,SAAAA,KAAAjyC,MACA,IAAAkzB,KAAA,GACA,QAAA1kC,EAAA,EAAAA,EAAAwW,UAAA7V,OAAAX,IAAA0kC,KAAA1zB,KAAAwF,UAAAxW,IACA,IAAAq5G,QAAA7nG,OAAA,QAEA,IAAAs0C,OAAAt/C,KAAAwlD,QACA,GAAAlG,SAAAzgD,UACAg0G,iBAAAvzD,OAAA1iB,QAAA/9B,eACA,IAAAg0G,QACA,aAGA,GAAAA,QAAA,CACA,IAAAC,GACA,GAAA50E,KAAA/jC,OAAA,EACA24G,GAAA50E,KAAA,GACA,GAAA40E,cAAAh5G,MAAA,CAGA,MAAAg5G,EACA,CAEA,IAAA7qF,IAAA,IAAAnuB,MAAA,oBAAAg5G,GAAA,KAAAA,GAAA9qF,QAAA,SACAC,IAAA3a,QAAAwlG,GACA,MAAA7qF,GACA,CAEA,IAAA1Q,QAAA+nC,OAAAt0C,MAEA,GAAAuM,UAAA1Y,UACA,aAEA,UAAA0Y,UAAA,YACAu6F,aAAAv6F,QAAAvX,KAAAk+B,KACA,MACA,IAAAljC,IAAAuc,QAAApd,OACA,IAAA+oD,UAAA6vD,WAAAx7F,QAAAvc,KACA,QAAAxB,EAAA,EAAAA,EAAAwB,MAAAxB,EACAs4G,aAAA5uD,UAAA1pD,GAAAwG,KAAAk+B,KACA,CAEA,WACA,EAEA,SAAA80E,aAAAj3G,OAAAiP,KAAAmyC,SAAA81D,SACA,IAAAt+D,EACA,IAAA2K,OACA,IAAA4zD,SAEAV,cAAAr1D,UAEAmC,OAAAvjD,OAAAypD,QACA,GAAAlG,SAAAzgD,UAAA,CACAygD,OAAAvjD,OAAAypD,QAAAnpD,OAAAkB,OAAA,MACAxB,OAAAs2G,aAAA,CACA,MAGA,GAAA/yD,OAAA6zD,cAAAt0G,UAAA,CACA9C,OAAAkhD,KAAA,cAAAjyC,KACAmyC,8CAIAmC,OAAAvjD,OAAAypD,OACA,CACA0tD,SAAA5zD,OAAAt0C,KACA,CAEA,GAAAkoG,WAAAr0G,UAAA,CAEAq0G,SAAA5zD,OAAAt0C,MAAAmyC,WACAphD,OAAAs2G,YACA,MACA,UAAAa,WAAA,YAEAA,SAAA5zD,OAAAt0C,MACAioG,QAAA,CAAA91D,SAAA+1D,UAAA,CAAAA,SAAA/1D,SAEA,SAAA81D,QAAA,CACAC,SAAAzuD,QAAAtH,SACA,MACA+1D,SAAA1oG,KAAA2yC,SACA,CAGAxI,EAAA+9D,iBAAA32G,QACA,GAAA44C,EAAA,GAAAu+D,SAAA/4G,OAAAw6C,IAAAu+D,SAAAn0E,OAAA,CACAm0E,SAAAn0E,OAAA,KAGA,IAAAsvB,EAAA,IAAAv0D,MAAA,+CACAo5G,SAAA/4G,OAAA,IAAA4E,OAAAiM,MAAA,cACA,2CACA,kBACAqjD,EAAA7uD,KAAA,8BACA6uD,EAAAxR,QAAA9gD,OACAsyD,EAAArjD,UACAqjD,EAAAn8B,MAAAghF,SAAA/4G,OACA+3G,mBAAA7jD,EACA,CACA,CAEA,OAAAtyD,MACA,CAEAqgD,aAAAz/C,UAAAy2G,YAAA,SAAAA,YAAApoG,KAAAmyC,UACA,OAAA61D,aAAAhzG,KAAAgL,KAAAmyC,SAAA,MACA,EAEAf,aAAAz/C,UAAAqgD,GAAAZ,aAAAz/C,UAAAy2G,YAEAh3D,aAAAz/C,UAAAmqD,gBACA,SAAAA,gBAAA97C,KAAAmyC,UACA,OAAA61D,aAAAhzG,KAAAgL,KAAAmyC,SAAA,KACA,EAEA,SAAAk2D,cACA,IAAArzG,KAAAszG,MAAA,CACAtzG,KAAAjE,OAAA2kG,eAAA1gG,KAAAgL,KAAAhL,KAAAuzG,QACAvzG,KAAAszG,MAAA,KACA,GAAAtjG,UAAA7V,SAAA,EACA,OAAA6F,KAAAm9C,SAAAjjD,KAAA8F,KAAAjE,QACA,OAAAiE,KAAAm9C,SAAAte,MAAA7+B,KAAAjE,OAAAiU,UACA,CACA,CAEA,SAAAwjG,UAAAz3G,OAAAiP,KAAAmyC,UACA,IAAAzwB,MAAA,CAAA4mF,MAAA,MAAAC,OAAA10G,UAAA9C,cAAAiP,UAAAmyC,mBACA,IAAAs2D,QAAAJ,YAAAn2G,KAAAwvB,OACA+mF,QAAAt2D,kBACAzwB,MAAA6mF,OAAAE,QACA,OAAAA,OACA,CAEAr3D,aAAAz/C,UAAA8jG,KAAA,SAAAA,KAAAz1F,KAAAmyC,UACAq1D,cAAAr1D,UACAn9C,KAAAg9C,GAAAhyC,KAAAwoG,UAAAxzG,KAAAgL,KAAAmyC,WACA,OAAAn9C,IACA,EAEAo8C,aAAAz/C,UAAA+2G,oBACA,SAAAA,oBAAA1oG,KAAAmyC,UACAq1D,cAAAr1D,UACAn9C,KAAA8mD,gBAAA97C,KAAAwoG,UAAAxzG,KAAAgL,KAAAmyC,WACA,OAAAn9C,IACA,EAGAo8C,aAAAz/C,UAAA+jG,eACA,SAAAA,eAAA11F,KAAAmyC,UACA,IAAAnqC,KAAAssC,OAAAzoB,SAAAr9B,EAAAm6G,iBAEAnB,cAAAr1D,UAEAmC,OAAAt/C,KAAAwlD,QACA,GAAAlG,SAAAzgD,UACA,OAAAmB,KAEAgT,KAAAssC,OAAAt0C,MACA,GAAAgI,OAAAnU,UACA,OAAAmB,KAEA,GAAAgT,OAAAmqC,UAAAnqC,KAAAmqC,oBAAA,CACA,KAAAn9C,KAAAqyG,eAAA,EACAryG,KAAAwlD,QAAAnpD,OAAAkB,OAAA,UACA,QACA+hD,OAAAt0C,MACA,GAAAs0C,OAAAohD,eACA1gG,KAAAi9C,KAAA,iBAAAjyC,KAAAgI,KAAAmqC,mBACA,CACA,gBAAAnqC,OAAA,YACA6jB,UAAA,EAEA,IAAAr9B,EAAAwZ,KAAA7Y,OAAA,EAAAX,GAAA,EAAAA,IAAA,CACA,GAAAwZ,KAAAxZ,KAAA2jD,UAAAnqC,KAAAxZ,GAAA2jD,oBAAA,CACAw2D,iBAAA3gG,KAAAxZ,GAAA2jD,SACAtmB,SAAAr9B,EACA,KACA,CACA,CAEA,GAAAq9B,SAAA,EACA,OAAA72B,KAEA,GAAA62B,WAAA,EACA7jB,KAAAilD,YACA,CACA27C,UAAA5gG,KAAA6jB,SACA,CAEA,GAAA7jB,KAAA7Y,SAAA,EACAmlD,OAAAt0C,MAAAgI,KAAA,GAEA,GAAAssC,OAAAohD,iBAAA7hG,UACAmB,KAAAi9C,KAAA,iBAAAjyC,KAAA2oG,kBAAAx2D,SACA,CAEA,OAAAn9C,IACA,EAEAo8C,aAAAz/C,UAAA64D,IAAApZ,aAAAz/C,UAAA+jG,eAEAtkD,aAAAz/C,UAAAsrD,mBACA,SAAAA,mBAAAj9C,MACA,IAAAk4C,UAAA5D,OAAA9lD,EAEA8lD,OAAAt/C,KAAAwlD,QACA,GAAAlG,SAAAzgD,UACA,OAAAmB,KAGA,GAAAs/C,OAAAohD,iBAAA7hG,UAAA,CACA,GAAAmR,UAAA7V,SAAA,GACA6F,KAAAwlD,QAAAnpD,OAAAkB,OAAA,MACAyC,KAAAqyG,aAAA,CACA,SAAA/yD,OAAAt0C,QAAAnM,UAAA,CACA,KAAAmB,KAAAqyG,eAAA,EACAryG,KAAAwlD,QAAAnpD,OAAAkB,OAAA,kBAEA+hD,OAAAt0C,KACA,CACA,OAAAhL,IACA,CAGA,GAAAgQ,UAAA7V,SAAA,GACA,IAAA8Y,KAAA5W,OAAA4W,KAAAqsC,QACA,IAAA/iD,IACA,IAAA/C,EAAA,EAAAA,EAAAyZ,KAAA9Y,SAAAX,EAAA,CACA+C,IAAA0W,KAAAzZ,GACA,GAAA+C,MAAA,0BACAyD,KAAAioD,mBAAA1rD,IACA,CACAyD,KAAAioD,mBAAA,kBACAjoD,KAAAwlD,QAAAnpD,OAAAkB,OAAA,MACAyC,KAAAqyG,aAAA,EACA,OAAAryG,IACA,CAEAkjD,UAAA5D,OAAAt0C,MAEA,UAAAk4C,YAAA,YACAljD,KAAA0gG,eAAA11F,KAAAk4C,UACA,SAAAA,YAAArkD,UAAA,CAEA,IAAArF,EAAA0pD,UAAA/oD,OAAA,EAAAX,GAAA,EAAAA,IAAA,CACAwG,KAAA0gG,eAAA11F,KAAAk4C,UAAA1pD,GACA,CACA,CAEA,OAAAwG,IACA,EAEA,SAAA6zG,WAAA93G,OAAAiP,KAAA8oG,QACA,IAAAx0D,OAAAvjD,OAAAypD,QAEA,GAAAlG,SAAAzgD,UACA,SAEA,IAAAk1G,WAAAz0D,OAAAt0C,MACA,GAAA+oG,aAAAl1G,UACA,SAEA,UAAAk1G,aAAA,WACA,OAAAD,OAAA,CAAAC,WAAA52D,UAAA42D,YAAA,CAAAA,YAEA,OAAAD,OACAE,gBAAAD,YAAAhB,WAAAgB,sBAAA55G,OACA,CAEAiiD,aAAAz/C,UAAAumD,UAAA,SAAAA,UAAAl4C,MACA,OAAA6oG,WAAA7zG,KAAAgL,KAAA,KACA,EAEAoxC,aAAAz/C,UAAAs3G,aAAA,SAAAA,aAAAjpG,MACA,OAAA6oG,WAAA7zG,KAAAgL,KAAA,MACA,EAEAoxC,aAAA83D,cAAA,SAAAr3D,QAAA7xC,MACA,UAAA6xC,QAAAq3D,gBAAA,YACA,OAAAr3D,QAAAq3D,cAAAlpG,KACA,MACA,OAAAkpG,cAAAh6G,KAAA2iD,QAAA7xC,KACA,CACA,EAEAoxC,aAAAz/C,UAAAu3G,4BACA,SAAAA,cAAAlpG,MACA,IAAAs0C,OAAAt/C,KAAAwlD,QAEA,GAAAlG,SAAAzgD,UAAA,CACA,IAAAk1G,WAAAz0D,OAAAt0C,MAEA,UAAA+oG,aAAA,YACA,QACA,SAAAA,aAAAl1G,UAAA,CACA,OAAAk1G,WAAA55G,MACA,CACA,CAEA,QACA,CAEAiiD,aAAAz/C,UAAAw3G,WAAA,SAAAA,aACA,OAAAn0G,KAAAqyG,aAAA,EAAAL,eAAAhyG,KAAAwlD,SAAA,EACA,EAEA,SAAAutD,WAAAh4G,IAAA1B,GACA,IAAAqkC,KAAA,IAAAxiC,MAAA7B,GACA,QAAAG,EAAA,EAAAA,EAAAH,IAAAG,EACAkkC,KAAAlkC,GAAAuB,IAAAvB,GACA,OAAAkkC,IACA,CAEA,SAAAk2E,UAAA5gG,KAAAnC,OACA,KAAAA,MAAA,EAAAmC,KAAA7Y,OAAA0W,QACAmC,KAAAnC,OAAAmC,KAAAnC,MAAA,GACAmC,KAAAuC,KACA,CAEA,SAAAy+F,gBAAAj5G,KACA,IAAAinC,IAAA,IAAA9mC,MAAAH,IAAAZ,QACA,QAAAX,EAAA,EAAAA,EAAAwoC,IAAA7nC,SAAAX,EAAA,CACAwoC,IAAAxoC,GAAAuB,IAAAvB,GAAA2jD,UAAApiD,IAAAvB,EACA,CACA,OAAAwoC,GACA,CAEA,SAAAy+D,KAAA5jD,QAAAr9C,MACA,WAAAyqD,SAAA,SAAAC,QAAAC,QACA,SAAAiqD,cAAAnsF,KACA40B,QAAA6jD,eAAAlhG,KAAA60G,UACAlqD,OAAAliC,IACA,CAEA,SAAAosF,WACA,UAAAx3D,QAAA6jD,iBAAA,YACA7jD,QAAA6jD,eAAA,QAAA0T,cACA,CACAlqD,QAAA,GAAA3qD,MAAArF,KAAA8V,WACA,CAEAskG,+BAAAz3D,QAAAr9C,KAAA60G,SAAA,CAAA5T,KAAA,OACA,GAAAjhG,OAAA,SACA+0G,8BAAA13D,QAAAu3D,cAAA,CAAA3T,KAAA,MACA,CACA,GACA,CAEA,SAAA8T,8BAAA13D,QAAAtlC,QAAA/H,OACA,UAAAqtC,QAAAG,KAAA,YACAs3D,+BAAAz3D,QAAA,QAAAtlC,QAAA/H,MACA,CACA,CAEA,SAAA8kG,+BAAAz3D,QAAAr9C,KAAA29C,SAAA3tC,OACA,UAAAqtC,QAAAG,KAAA,YACA,GAAAxtC,MAAAixF,KAAA,CACA5jD,QAAA4jD,KAAAjhG,KAAA29C,SACA,MACAN,QAAAG,GAAAx9C,KAAA29C,SACA,CACA,gBAAAN,QAAA8uC,mBAAA,YAGA9uC,QAAA8uC,iBAAAnsF,MAAA,SAAAg1G,aAAAt1G,KAGA,GAAAsQ,MAAAixF,KAAA,CACA5jD,QAAA0d,oBAAA/6D,KAAAg1G,aACA,CACAr3D,SAAAj+C,IACA,GACA,MACA,UAAAtD,UAAA,6EAAAihD,QACA,CACA,C,2CChfAziD,OAAAH,QAAAmkC,UACAA,UAAA0G,QAAA1G,UACAA,UAAAq2E,OAAAC,uBACAt2E,UAAAu2E,gBAAAD,uBAEA,IAAAE,mBAAA,QACA,IAAAC,sBAAA,aAEA,IAAA95G,IAAA,GACA,IAAA+5G,cAAA,GAEA,SAAAhsG,iBACA,OACAisG,WAAA/1G,OAAAg2G,iBACAC,WAAAj2G,OAAAg2G,iBAEA,CAGA,SAAA52E,UAAAvhC,IAAAq4G,SAAAC,OAAA/yG,SACA,UAAAA,UAAA,aACAA,QAAA0G,gBACA,CAEAssG,OAAAv4G,IAAA,QAAAgC,UAAA,EAAAuD,SACA,IAAAtD,IACA,IACA,GAAAg2G,cAAA36G,SAAA,GACA2E,IAAAq/B,KAAAC,UAAAvhC,IAAAq4G,SAAAC,OACA,MACAr2G,IAAAq/B,KAAAC,UAAAvhC,IAAAw4G,oBAAAH,UAAAC,OACA,CACA,OAAA92E,GACA,OAAAF,KAAAC,UAAA,sEACA,SACA,MAAArjC,IAAAZ,SAAA,GACA,IAAA+3C,KAAAn3C,IAAAwa,MACA,GAAA28B,KAAA/3C,SAAA,GACAkC,OAAAC,eAAA41C,KAAA,GAAAA,KAAA,GAAAA,KAAA,GACA,MACAA,KAAA,GAAAA,KAAA,IAAAA,KAAA,EACA,CACA,CACA,CACA,OAAApzC,GACA,CAEA,SAAAw2G,WAAAttG,QAAAwd,IAAA8nC,EAAAzxC,QACA,IAAA05F,mBAAAl5G,OAAA2mC,yBAAAnnB,OAAAyxC,GACA,GAAAioD,mBAAAjmG,MAAAzQ,UAAA,CACA,GAAA02G,mBAAAp5G,aAAA,CACAE,OAAAC,eAAAuf,OAAAyxC,EAAA,CAAAxwD,MAAAkL,UACAjN,IAAAyP,KAAA,CAAAqR,OAAAyxC,EAAA9nC,IAAA+vF,oBACA,MACAT,cAAAtqG,KAAA,CAAAgb,IAAA8nC,EAAAtlD,SACA,CACA,MACA6T,OAAAyxC,GAAAtlD,QACAjN,IAAAyP,KAAA,CAAAqR,OAAAyxC,EAAA9nC,KACA,CACA,CAEA,SAAA4vF,OAAA5vF,IAAA8nC,EAAAkoD,UAAAr7E,MAAAte,OAAAkkB,MAAA39B,SACA29B,OAAA,EACA,IAAAvmC,EACA,UAAAgsB,MAAA,UAAAA,MAAA,MACA,IAAAhsB,EAAA,EAAAA,EAAA2gC,MAAAhgC,OAAAX,IAAA,CACA,GAAA2gC,MAAA3gC,KAAAgsB,IAAA,CACA8vF,WAAAT,sBAAArvF,IAAA8nC,EAAAzxC,QACA,MACA,CACA,CAEA,UACAzZ,QAAA2yG,aAAA,aACAh1E,MAAA39B,QAAA2yG,WACA,CACAO,WAAAV,mBAAApvF,IAAA8nC,EAAAzxC,QACA,MACA,CAEA,UACAzZ,QAAA6yG,aAAA,aACAO,UAAA,EAAApzG,QAAA6yG,WACA,CACAK,WAAAV,mBAAApvF,IAAA8nC,EAAAzxC,QACA,MACA,CAEAse,MAAA3vB,KAAAgb,KAEA,GAAAtqB,MAAAG,QAAAmqB,KAAA,CACA,IAAAhsB,EAAA,EAAAA,EAAAgsB,IAAArrB,OAAAX,IAAA,CACA47G,OAAA5vF,IAAAhsB,OAAA2gC,MAAA3U,IAAAua,MAAA39B,QACA,CACA,MACA,IAAA6Q,KAAA5W,OAAA4W,KAAAuS,KACA,IAAAhsB,EAAA,EAAAA,EAAAyZ,KAAA9Y,OAAAX,IAAA,CACA,IAAA+C,IAAA0W,KAAAzZ,GACA47G,OAAA5vF,IAAAjpB,SAAA/C,EAAA2gC,MAAA3U,IAAAua,MAAA39B,QACA,CACA,CACA+3B,MAAA5kB,KACA,CACA,CAGA,SAAAkgG,gBAAA57G,EAAA0+B,GACA,GAAA1+B,EAAA0+B,EAAA,CACA,QACA,CACA,GAAA1+B,EAAA0+B,EAAA,CACA,QACA,CACA,QACA,CAEA,SAAAm8E,uBAAA73G,IAAAq4G,SAAAC,OAAA/yG,SACA,UAAAA,UAAA,aACAA,QAAA0G,gBACA,CAEA,IAAA0nC,IAAAklE,oBAAA74G,IAAA,QAAAgC,UAAA,EAAAuD,UAAAvF,IACA,IAAAiC,IACA,IACA,GAAAg2G,cAAA36G,SAAA,GACA2E,IAAAq/B,KAAAC,UAAAoS,IAAA0kE,SAAAC,OACA,MACAr2G,IAAAq/B,KAAAC,UAAAoS,IAAA6kE,oBAAAH,UAAAC,OACA,CACA,OAAA92E,GACA,OAAAF,KAAAC,UAAA,sEACA,SAEA,MAAArjC,IAAAZ,SAAA,GACA,IAAA+3C,KAAAn3C,IAAAwa,MACA,GAAA28B,KAAA/3C,SAAA,GACAkC,OAAAC,eAAA41C,KAAA,GAAAA,KAAA,GAAAA,KAAA,GACA,MACAA,KAAA,GAAAA,KAAA,IAAAA,KAAA,EACA,CACA,CACA,CACA,OAAApzC,GACA,CAEA,SAAA42G,oBAAAlwF,IAAA8nC,EAAAkoD,UAAAr7E,MAAAte,OAAAkkB,MAAA39B,SACA29B,OAAA,EACA,IAAAvmC,EACA,UAAAgsB,MAAA,UAAAA,MAAA,MACA,IAAAhsB,EAAA,EAAAA,EAAA2gC,MAAAhgC,OAAAX,IAAA,CACA,GAAA2gC,MAAA3gC,KAAAgsB,IAAA,CACA8vF,WAAAT,sBAAArvF,IAAA8nC,EAAAzxC,QACA,MACA,CACA,CACA,IACA,UAAA2J,IAAAsxB,SAAA,YACA,MACA,CACA,OAAAzY,GACA,MACA,CAEA,UACAj8B,QAAA2yG,aAAA,aACAh1E,MAAA39B,QAAA2yG,WACA,CACAO,WAAAV,mBAAApvF,IAAA8nC,EAAAzxC,QACA,MACA,CAEA,UACAzZ,QAAA6yG,aAAA,aACAO,UAAA,EAAApzG,QAAA6yG,WACA,CACAK,WAAAV,mBAAApvF,IAAA8nC,EAAAzxC,QACA,MACA,CAEAse,MAAA3vB,KAAAgb,KAEA,GAAAtqB,MAAAG,QAAAmqB,KAAA,CACA,IAAAhsB,EAAA,EAAAA,EAAAgsB,IAAArrB,OAAAX,IAAA,CACAk8G,oBAAAlwF,IAAAhsB,OAAA2gC,MAAA3U,IAAAua,MAAA39B,QACA,CACA,MAEA,IAAAouC,IAAA,GACA,IAAAv9B,KAAA5W,OAAA4W,KAAAuS,KAAA4W,KAAAq5E,iBACA,IAAAj8G,EAAA,EAAAA,EAAAyZ,KAAA9Y,OAAAX,IAAA,CACA,IAAA+C,IAAA0W,KAAAzZ,GACAk8G,oBAAAlwF,IAAAjpB,SAAA/C,EAAA2gC,MAAA3U,IAAAua,MAAA39B,SACAouC,IAAAj0C,KAAAipB,IAAAjpB,IACA,CACA,UAAAsf,SAAA,aACA9gB,IAAAyP,KAAA,CAAAqR,OAAAyxC,EAAA9nC,MACA3J,OAAAyxC,GAAA9c,GACA,MACA,OAAAA,GACA,CACA,CACArW,MAAA5kB,KACA,CACA,CAIA,SAAA8/F,oBAAAH,UACAA,gBACAA,WAAA,YACAA,SACA,SAAA5nD,EAAA3gC,GACA,OAAAA,CACA,EACA,gBAAApwB,IAAAipB,KACA,GAAAsvF,cAAA36G,OAAA,GACA,QAAAX,EAAA,EAAAA,EAAAs7G,cAAA36G,OAAAX,IAAA,CACA,IAAA04C,KAAA4iE,cAAAt7G,GACA,GAAA04C,KAAA,KAAA31C,KAAA21C,KAAA,KAAA1sB,IAAA,CACAA,IAAA0sB,KAAA,GACA4iE,cAAA98C,OAAAx+D,EAAA,GACA,KACA,CACA,CACA,CACA,OAAA07G,SAAAh7G,KAAA8F,KAAAzD,IAAAipB,IACA,CACA,C,2CCpOA,aAIA,IAAAmwF,cAAA,kDACA,IAAAp2G,MAAArE,MAAAyB,UAAA4C,MACA,IAAAq2G,MAAAv5G,OAAAM,UAAA2C,SACA,IAAAu2G,SAAA,oBAEAz7G,OAAAH,QAAA,SAAAiD,KAAAy1G,MACA,IAAA52G,OAAAiE,KACA,UAAAjE,SAAA,YAAA65G,MAAA17G,KAAA6B,UAAA85G,SAAA,CACA,UAAAj6G,UAAA+5G,cAAA55G,OACA,CACA,IAAAmiC,KAAA3+B,MAAArF,KAAA8V,UAAA,GAEA,IAAA8lG,MACA,IAAAC,OAAA,WACA,GAAA/1G,gBAAA81G,MAAA,CACA,IAAAxyF,OAAAvnB,OAAA8iC,MACA7+B,KACAk+B,KAAA2O,OAAAttC,MAAArF,KAAA8V,aAEA,GAAA3T,OAAAinB,iBAAA,CACA,OAAAA,MACA,CACA,OAAAtjB,IACA,MACA,OAAAjE,OAAA8iC,MACA8zE,KACAz0E,KAAA2O,OAAAttC,MAAArF,KAAA8V,YAEA,CACA,EAEA,IAAAgmG,YAAAt9E,KAAA/K,IAAA,EAAA5xB,OAAA5B,OAAA+jC,KAAA/jC,QACA,IAAA87G,UAAA,GACA,QAAAz8G,EAAA,EAAAA,EAAAw8G,YAAAx8G,IAAA,CACAy8G,UAAAzrG,KAAA,IAAAhR,EACA,CAEAs8G,MAAA3vE,SAAA,6BAAA8vE,UAAAh4E,KAAA,iDAAAkI,CAAA4vE,QAEA,GAAAh6G,OAAAY,UAAA,CACA,IAAAu5G,MAAA,SAAAA,QAAA,EACAA,MAAAv5G,UAAAZ,OAAAY,UACAm5G,MAAAn5G,UAAA,IAAAu5G,MACAA,MAAAv5G,UAAA,IACA,CAEA,OAAAm5G,KACA,C,2CCnDA,aAEA,IAAAK,eAAAx8G,QAAA,oBAEAS,OAAAH,QAAAksC,SAAAxpC,UAAAO,MAAAi5G,c,gECFA/7G,OAAAH,QAAA,SAAAm8G,gBACA,UAAAt2G,aAAA,wBACA,IAAAu2G,KAAA,CACAC,kBAAAx2G,WAAAw2G,mBAAAx2G,WAAAy2G,sBACAz2G,WAAA02G,wBACAC,sBAAA32G,WAAA22G,uBACA32G,WAAA42G,0BAAA52G,WAAA62G,4BACAC,gBAAA92G,WAAA82G,iBAAA92G,WAAA+2G,oBACA/2G,WAAAg3G,uBAEA,IAAAT,KAAAC,kBAAA,YACA,OAAAD,IACA,C,2CCdA,aAEA,IAAAx3G,UAEA,IAAAk4G,aAAA7uF,YACA,IAAA8uF,UAAA7wE,SACA,IAAA8wE,WAAAr7G,UAGA,IAAAs7G,sBAAA,SAAAC,kBACA,IACA,OAAAH,UAAA,yBAAAG,iBAAA,iBAAAH,EACA,OAAA59G,GAAA,CACA,EAEA,IAAA2iD,MAAA1/C,OAAA2mC,yBACA,GAAA+Y,MAAA,CACA,IACAA,MAAA,MACA,OAAA3iD,GACA2iD,MAAA,IACA,CACA,CAEA,IAAAq7D,eAAA,WACA,UAAAH,UACA,EACA,IAAAI,eAAAt7D,MACA,WACA,IAEA/rC,UAAAoU,OACA,OAAAgzF,cACA,OAAAE,cACA,IAEA,OAAAv7D,MAAA/rC,UAAA,UAAAV,GACA,OAAAioG,YACA,OAAAH,cACA,CACA,CACA,CAbA,GAcAA,eAEA,IAAAI,WAAA79G,QAAA,cAAAA,GACA,IAAA89G,SAAA99G,QAAA,YAAAA,GAEA,IAAA+9G,SAAAr7G,OAAAY,iBACAw6G,SACA,SAAAj/E,GAAA,OAAAA,EAAAr7B,SAAA,EACA,MAGA,IAAAw6G,UAAA,GAEA,IAAAC,kBAAA1/E,aAAA,cAAAw/E,SAAA74G,UAAA64G,SAAAx/E,YAEA,IAAA2/E,WAAA,CACA,0BAAAC,iBAAA,YAAAj5G,UAAAi5G,eACA,UAAA58G,MACA,uBAAA88B,cAAA,YAAAn5B,UAAAm5B,YACA,2BAAAw/E,YAAAE,kBAAA,GAAA/5G,OAAAC,aAAAiB,UACA,mCAAAA,UACA,kBAAA84G,UACA,mBAAAA,UACA,2BAAAA,UACA,2BAAAA,UACA,mBAAAI,UAAA,YAAAl5G,UAAAk5G,QACA,kBAAAjiF,SAAA,YAAAj3B,UAAAi3B,OACA,yBAAAkiF,gBAAA,YAAAn5G,UAAAm5G,cACA,0BAAAC,iBAAA,YAAAp5G,UAAAo5G,eACA,YAAAC,QACA,oBAAA7+E,WAAA,YAAAx6B,UAAAw6B,SACA,SAAAiJ,KACA,cAAA61E,UACA,uBAAAC,mBACA,cAAAC,UACA,uBAAAC,mBACA,UAAAx+G,MACA,SAAAy+G,KACA,cAAAC,UACA,wBAAAh9E,eAAA,YAAA38B,UAAA28B,aACA,wBAAAC,eAAA,YAAA58B,UAAA48B,aACA,gCAAAg9E,uBAAA,YAAA55G,UAAA45G,qBACA,aAAAzB,UACA,sBAAAW,UACA,qBAAAe,YAAA,YAAA75G,UAAA65G,UACA,sBAAAC,aAAA,YAAA95G,UAAA85G,WACA,sBAAAC,aAAA,YAAA/5G,UAAA+5G,WACA,aAAA/hE,SACA,UAAA+xB,MACA,sBAAA4uC,YAAAE,2BAAA,GAAA/5G,OAAAC,cAAAiB,UACA,gBAAAs/B,OAAA,SAAAA,KAAAt/B,UACA,eAAAwrD,MAAA,YAAAxrD,UAAAwrD,IACA,gCAAAA,MAAA,cAAAmtD,aAAAE,SAAA74G,UAAA64G,UAAA,IAAArtD,KAAA1sD,OAAAC,aACA,SAAA86B,KACA,WAAA15B,OACA,WAAA3C,OACA,eAAAu5B,WACA,aAAAD,SACA,mBAAAs0B,UAAA,YAAAprD,UAAAorD,QACA,iBAAA4uD,QAAA,YAAAh6G,UAAAg6G,MACA,eAAAjmE,WACA,mBAAAp3C,eACA,mBAAAq2G,UAAA,YAAAhzG,UAAAgzG,QACA,WAAAjxG,OACA,eAAA2pD,MAAA,YAAA1rD,UAAA0rD,IACA,gCAAAA,MAAA,cAAAitD,aAAAE,SAAA74G,UAAA64G,UAAA,IAAAntD,KAAA5sD,OAAAC,aACA,6BAAAk7G,oBAAA,YAAAj6G,UAAAi6G,kBACA,WAAA/5G,OACA,4BAAAy4G,YAAAE,kBAAA,GAAA/5G,OAAAC,aAAAiB,UACA,WAAA24G,WAAA75G,OAAAkB,UACA,gBAAAk4G,aACA,mBAAAM,eACA,eAAAO,WACA,cAAAX,WACA,sBAAA/+E,aAAA,YAAAr5B,UAAAq5B,WACA,6BAAA6gF,oBAAA,YAAAl6G,UAAAk6G,kBACA,uBAAAC,cAAA,YAAAn6G,UAAAm6G,YACA,uBAAAC,cAAA,YAAAp6G,UAAAo6G,YACA,aAAAC,SACA,mBAAAC,UAAA,YAAAt6G,UAAAs6G,QACA,mBAAAC,UAAA,YAAAv6G,UAAAu6G,QACA,mBAAAh6B,UAAA,YAAAvgF,UAAAugF,SAGA,GAAAs4B,SAAA,CACA,IACA,KAAA96E,KACA,OAAAxjC,GAEA,IAAAigH,WAAA3B,kBAAAt+G,IACAy+G,WAAA,qBAAAwB,UACA,CACA,CAEA,IAAAC,OAAA,SAAAA,OAAA95G,MACA,IAAA1C,MACA,GAAA0C,OAAA,mBACA1C,MAAAo6G,sBAAA,uBACA,SAAA13G,OAAA,uBACA1C,MAAAo6G,sBAAA,kBACA,SAAA13G,OAAA,4BACA1C,MAAAo6G,sBAAA,wBACA,SAAA13G,OAAA,oBACA,IAAAi/B,GAAA66E,OAAA,4BACA,GAAA76E,GAAA,CACA3hC,MAAA2hC,GAAA9hC,SACA,CACA,SAAA6C,OAAA,4BACA,IAAA+5G,IAAAD,OAAA,oBACA,GAAAC,KAAA7B,SAAA,CACA56G,MAAA46G,SAAA6B,IAAA58G,UACA,CACA,CAEAk7G,WAAAr4G,MAAA1C,MAEA,OAAAA,KACA,EAEA,IAAA08G,eAAA,CACA,qDACA,yCACA,uDACA,uDACA,iDACA,qDACA,yDACA,0DACA,+EACA,6CACA,+CACA,uCACA,yCACA,iDACA,uDACA,uDACA,+CACA,gDACA,qEACA,iDACA,mDACA,mDACA,+BACA,uCACA,qCACA,2CACA,2CACA,wDACA,sDACA,6CACA,qDACA,kCACA,wCACA,0CACA,mDACA,2DACA,2CACA,qCACA,iEACA,2CACA,2CACA,qDACA,mDACA,iDACA,mDACA,iEACA,qDACA,qDACA,+CACA,6CACA,8CAGA,IAAAt8G,KAAAvD,QAAA,iBACA,IAAAiO,OAAAjO,QAAA,OACA,IAAA8/G,QAAAv8G,KAAAhD,KAAAisC,SAAAjsC,KAAAgB,MAAAyB,UAAAkwC,QACA,IAAA6sE,aAAAx8G,KAAAhD,KAAAisC,SAAAtH,MAAA3jC,MAAAyB,UAAAq7D,QACA,IAAA2hD,SAAAz8G,KAAAhD,KAAAisC,SAAAjsC,KAAA6E,OAAApC,UAAAqL,SACA,IAAA4xG,UAAA18G,KAAAhD,KAAAisC,SAAAjsC,KAAA6E,OAAApC,UAAA4C,OACA,IAAAs6G,MAAA38G,KAAAhD,KAAAisC,SAAAjsC,KAAA0G,OAAAjE,UAAA+T,MAGA,IAAAopG,WAAA,qGACA,IAAAC,aAAA,WACA,IAAAC,aAAA,SAAAA,aAAAx3G,QACA,IAAAmb,MAAAi8F,UAAAp3G,OAAA,KACA,IAAAoc,KAAAg7F,UAAAp3G,QAAA,GACA,GAAAmb,QAAA,KAAAiB,OAAA,KACA,UAAAm4F,aAAA,iDACA,SAAAn4F,OAAA,KAAAjB,QAAA,KACA,UAAAo5F,aAAA,iDACA,CACA,IAAAzzF,OAAA,GACAq2F,SAAAn3G,OAAAs3G,YAAA,SAAAnpG,MAAA2wB,OAAAhL,MAAA2jF,WACA32F,cAAAnpB,QAAAm8B,MAAAqjF,SAAAM,UAAAF,aAAA,MAAAz4E,QAAA3wB,KACA,IACA,OAAA2S,MACA,EAGA,IAAA42F,iBAAA,SAAAA,iBAAA16G,KAAAk8C,cACA,IAAAy+D,cAAA36G,KACA,IAAA46G,MACA,GAAAxyG,OAAA4xG,eAAAW,eAAA,CACAC,MAAAZ,eAAAW,eACAA,cAAA,IAAAC,MAAA,MACA,CAEA,GAAAxyG,OAAAiwG,WAAAsC,eAAA,CACA,IAAAr9G,MAAA+6G,WAAAsC,eACA,GAAAr9G,QAAA66G,UAAA,CACA76G,MAAAw8G,OAAAa,cACA,CACA,UAAAr9G,QAAA,cAAA4+C,aAAA,CACA,UAAAu7D,WAAA,aAAAz3G,KAAA,uDACA,CAEA,OACA46G,YACA56G,KAAA26G,cACAr9G,YAEA,CAEA,UAAAi6G,aAAA,aAAAv3G,KAAA,mBACA,EAEApF,OAAAH,QAAA,SAAAqhD,aAAA97C,KAAAk8C,cACA,UAAAl8C,OAAA,UAAAA,KAAArF,SAAA,GACA,UAAA88G,WAAA,4CACA,CACA,GAAAjnG,UAAA7V,OAAA,UAAAuhD,eAAA,WACA,UAAAu7D,WAAA,4CACA,CAEA,GAAA4C,MAAA,cAAAr6G,QAAA,MACA,UAAAu3G,aAAA,qFACA,CACA,IAAAjmE,MAAAkpE,aAAAx6G,MACA,IAAA66G,kBAAAvpE,MAAA32C,OAAA,EAAA22C,MAAA,MAEA,IAAA6K,UAAAu+D,iBAAA,IAAAG,kBAAA,IAAA3+D,cACA,IAAA4+D,kBAAA3+D,UAAAn8C,KACA,IAAA1C,MAAA6+C,UAAA7+C,MACA,IAAAy9G,mBAAA,MAEA,IAAAH,MAAAz+D,UAAAy+D,MACA,GAAAA,MAAA,CACAC,kBAAAD,MAAA,GACAV,aAAA5oE,MAAA2oE,QAAA,MAAAW,OACA,CAEA,QAAA5gH,EAAA,EAAAghH,MAAA,KAAAhhH,EAAAs3C,MAAA32C,OAAAX,GAAA,GACA,IAAA04C,KAAApB,MAAAt3C,GACA,IAAAmkB,MAAAi8F,UAAA1nE,KAAA,KACA,IAAAtzB,KAAAg7F,UAAA1nE,MAAA,GACA,IAEAv0B,QAAA,KAAAA,QAAA,KAAAA,QAAA,MACAiB,OAAA,KAAAA,OAAA,KAAAA,OAAA,OAEAjB,QAAAiB,KACA,CACA,UAAAm4F,aAAA,uDACA,CACA,GAAA7kE,OAAA,gBAAAsoE,MAAA,CACAD,mBAAA,IACA,CAEAF,mBAAA,IAAAnoE,KACAooE,kBAAA,IAAAD,kBAAA,IAEA,GAAAzyG,OAAAiwG,WAAAyC,mBAAA,CACAx9G,MAAA+6G,WAAAyC,kBACA,SAAAx9G,OAAA,MACA,KAAAo1C,QAAAp1C,OAAA,CACA,IAAA4+C,aAAA,CACA,UAAAu7D,WAAA,sBAAAz3G,KAAA,8CACA,CACA,YAAAX,SACA,CACA,GAAAk9C,OAAAviD,EAAA,GAAAs3C,MAAA32C,OAAA,CACA,IAAA4oC,KAAAgZ,MAAAj/C,MAAAo1C,MACAsoE,QAAAz3E,KASA,GAAAy3E,OAAA,QAAAz3E,QAAA,kBAAAA,KAAAzzB,KAAA,CACAxS,MAAAimC,KAAAzzB,GACA,MACAxS,YAAAo1C,KACA,CACA,MACAsoE,MAAA5yG,OAAA9K,MAAAo1C,MACAp1C,YAAAo1C,KACA,CAEA,GAAAsoE,QAAAD,mBAAA,CACA1C,WAAAyC,mBAAAx9G,KACA,CACA,CACA,CACA,OAAAA,KACA,C,kIC9VA,IAAA+W,gBAAAnU,SAAA,YAAAA,cACAq9C,SAAA,YAAAA,OAAA,GACA,IAAA09D,OAAA9gH,QAAA,gBAEA,IAAA+gH,MAEA,UAAA7zD,WAAA,aACA6zD,MAAA7zD,QACA,MACA6zD,MAAA7mG,SAAA,6BAEA,IAAA6mG,MAAA,CACAA,MAAA7mG,SAAA,6BAAA4mG,MACA,CACA,CAEArgH,OAAAH,QAAAygH,K,4NChBA,IAAAC,IAEA,UAAA59D,SAAA,aACA49D,IAAA59D,MACA,gBAAAr9C,SAAA,aACAi7G,IAAAj7G,MACA,gBAAAnE,OAAA,aACAo/G,IAAAp/G,IACA,MACAo/G,IAAA,EACA,CAEAvgH,OAAAH,QAAA0gH,G,2MCNA,IAAAt/G,QAAA1B,QAAA,WAEA,IAAA2F,SAAAjD,OAAAM,UAAA2C,SACA,IAAAs7G,sBAAAtpE,OAAA,mBACAA,OAAA,aAAAhyC,SAAApF,KAAAo3C,QAAA,2BACA,IAAAupE,sBAAAr6B,OAAA,mBACAA,OAAA,aAAAlhF,SAAApF,KAAAsmF,QAAA,2BAMApmF,OAAAH,QAAAqzG,UAWA,SAAAA,UAAAzwG,KACA,IAAAA,kBAAA,UACA,YACA,CAEA,GAAAxB,QAAAwB,KAAA,CACA,QAAArD,EAAA,EAAAyyB,EAAApvB,IAAA1C,OAAAX,EAAAyyB,EAAAzyB,IAAA,CACA,GAAA8zG,UAAAzwG,IAAArD,IAAA,CACA,WACA,CACA,CACA,YACA,CAEA,UAAAo/B,SAAA,YAAAA,OAAAD,UAAAC,OAAAD,SAAA97B,aACAm7B,cAAA,YAAAn7B,eAAAm7B,aACA4iF,gBAAA/9G,eAAAy0C,MACAupE,gBAAAh+G,eAAA2jF,KACA,CACA,WACA,CAGA,GAAA3jF,IAAAi6C,eAAAj6C,IAAAi6C,SAAA,YAAA9mC,UAAA7V,SAAA,GACA,OAAAmzG,UAAAzwG,IAAAi6C,SAAA,KACA,CAEA,QAAAv6C,OAAAM,IAAA,CACA,GAAAR,OAAAM,UAAAgL,eAAAzN,KAAA2C,IAAAN,MAAA+wG,UAAAzwG,IAAAN,MAAA,CACA,WACA,CACA,CAEA,YACA,C,kHC/DA,IAAA+C,SAAA,GAAAA,SAEAlF,OAAAH,QAAAiB,MAAAG,SAAA,SAAAN,KACA,OAAAuE,SAAApF,KAAAa,MAAA,gBACA,C,2CCKA,IACAX,OAAAH,eAAA0sG,iBAAA,aACA,wBAAAA,cACA,OAAA1+E,KAGA7tB,OAAAH,QAAA,KACA,C,2CChBA,aAEA,IAAAwF,KAAA,CACAw5B,IAAA,IAGA,IAAA6hF,QAAAz+G,OAEAjC,OAAAH,QAAA,SAAAw9G,WACA,OAAAt6G,UAAAsC,MAAAw5B,MAAAx5B,KAAAw5B,OAAA,CAAA97B,UAAA,gBAAA29G,QACA,C,2CCVA,aAEA,IAAAC,kBAAAp9G,SAAA,aAAAA,OACA,IAAAq9G,cAAArhH,QAAA,WAEAS,OAAAH,QAAA,SAAAghH,mBACA,UAAAF,aAAA,yBACA,UAAAp9G,SAAA,yBACA,UAAAo9G,WAAA,gCACA,UAAAp9G,OAAA,gCAEA,OAAAq9G,eACA,C,uDCZA,aAGA5gH,OAAAH,QAAA,SAAAu9G,aACA,UAAA75G,SAAA,mBAAAtB,OAAAkvD,wBAAA,yBACA,UAAA5tD,OAAAC,WAAA,sBAEA,IAAAf,IAAA,GACA,IAAAq+G,IAAAv9G,OAAA,QACA,IAAAw9G,OAAA9+G,OAAA6+G,KACA,UAAAA,MAAA,uBAEA,GAAA7+G,OAAAM,UAAA2C,SAAApF,KAAAghH,OAAA,gCACA,GAAA7+G,OAAAM,UAAA2C,SAAApF,KAAAihH,UAAA,gCAUA,IAAAC,OAAA,GACAv+G,IAAAq+G,KAAAE,OACA,IAAAF,OAAAr+G,IAAA,cACA,UAAAR,OAAA4W,OAAA,YAAA5W,OAAA4W,KAAApW,KAAA1C,SAAA,gBAEA,UAAAkC,OAAA+lC,sBAAA,YAAA/lC,OAAA+lC,oBAAAvlC,KAAA1C,SAAA,gBAEA,IAAAkhH,KAAAh/G,OAAAkvD,sBAAA1uD,KACA,GAAAw+G,KAAAlhH,SAAA,GAAAkhH,KAAA,KAAAH,IAAA,cAEA,IAAA7+G,OAAAM,UAAAygG,qBAAAljG,KAAA2C,IAAAq+G,KAAA,cAEA,UAAA7+G,OAAA2mC,2BAAA,YACA,IAAA/mC,WAAAI,OAAA2mC,yBAAAnmC,IAAAq+G,KACA,GAAAj/G,WAAAa,QAAAs+G,QAAAn/G,WAAAC,aAAA,mBACA,CAEA,WACA,C,2CCzCA,aAEA,IAAAgB,KAAAvD,QAAA,iBAEAS,OAAAH,QAAAiD,KAAAhD,KAAAisC,SAAAjsC,KAAAmC,OAAAM,UAAAgL,e,6DCJAvN,OAAAH,QAAAqhH,oBAEA,IAAAC,UAAA,CACAjc,MAAA,YACAN,IAAA,UACA,0BAGA,SAAAsc,oBAAA5tD,GACA,gBAAA8tD,QAAAlwD,MAAApmB,UACA,QAAAgZ,QAAAoN,MAAA,CACA,GAAApN,QAAAq9D,UAAA,CACAjwD,MAAAiwD,UAAAr9D,OAAAoN,MAAApN,aACAoN,MAAApN,KACA,CACA,CACA,OAAAwP,EAAA8tD,QAAAlwD,MAAApmB,SACA,CACA,C,2CClBA,IAAAu2E,WAAA9hH,QAAA,qCAEA,IAAA+hH,IAAA,EAAAC,KAAA,EAAAC,KAAA,EAAAC,MAAA,EAAAC,KAAA,EACA,IAAAC,SAAA,EAAAC,WAAA,EACA,IAAAC,aAAA,EAAAC,WAAA,EACA,IAAAC,cAAA,EAAAC,cAAA,GACA,IAAAC,QAAA,GAAAC,WAAA,GACA,IAAAC,QAAA,GAEAniH,OAAAH,QAAA,SAAAyzD,EAAAxjD,MACA,IAAAA,UAAA,GACA,IAAA2iC,OAAA3iC,KAAA2iC,QAAA,SAAAhzC,EAAA0+B,GACA,OAAAx5B,OAAAlF,GAAAkF,OAAAw5B,EACA,EACA,GAAAruB,KAAAuxG,aAAA,OACA/tD,EAAA+tD,WAAA/tD,EACA,CAEA,gBAAA8uD,SACA,IAAA9vF,MAAAivF,KAAAc,IAAA,GACA,IAAAC,OAAA1sG,UAAA7V,OACA,IAAA22C,MAAA,GAEA,QAAAt3C,EAAA,EAAAA,EAAAgjH,QAAAriH,OAAAX,IAAA,CACA,GAAAA,EAAAkjH,OAAA,GACA,IAAAx9G,IAAA8Q,UAAAxW,EAAA,GACA,IAAAQ,EAAAiV,MAAAutG,QAAAhjH,IACA,IAAAmjH,OAAAjwF,MACA,GAAAiwF,SAAAP,cAAAO,OAAAT,WACA,GAAAS,SAAAR,cAAAQ,OAAAT,WACA,GAAAS,SAAAV,aAAAU,OAAAT,WACA,GAAAS,SAAAb,KAAAa,OAAAZ,SACA,GAAAY,SAAAf,KAAA,CACA,GAAAa,MAAA,KACAziH,EAAAwQ,KAAA,CAAAoxG,KAAA,IAAA18G,MACAu9G,IAAA,EACA,MACAziH,EAAAwQ,KAAA,CAAAoxG,KAAA18G,KACA,CACA,SAAAy9G,SAAAJ,SAAAryG,KAAA86B,SAAA,CACAy3E,KAAA19G,OAAAG,IACA,SAAAy9G,SAAAJ,QAAA,CACAviH,EAAAwQ,KAAA,CAAAkxG,IAAAiB,OAAAz9G,KACA,CACA4xC,MAAAtmC,KAAAq0B,MAAAiS,MAAA92C,EACA,MAAA82C,MAAAtmC,KAAAq0B,MAAAiS,MAAA7hC,MAAAutG,QAAAhjH,IACA,CAEA,IAAAojH,KAAA,aACA,IAAAziF,MAAA,EAAAyiF,MAAA,IACA,QAAApjH,EAAA,EAAAA,EAAAs3C,MAAA32C,OAAAX,IAAA,CACA,IAAAoP,IAAAuxB,YAAAhgC,OAAA,MACA,IAAAH,EAAA82C,MAAAt3C,GAAAwyB,EAAAhyB,EAAA,GACA,GAAAgyB,IAAA4vF,MAAA,MAAAn8G,KAAAzF,EAAA,KACA,IAAA6iH,GAAA1iF,YAAAhgC,OAAA,MACA,GAAAggC,MAAAhgC,OAAA,GACAggC,MAAA5kB,MACA4kB,YAAAhgC,OAAA,SAAA0iH,IAAAnvD,EACA9kD,IAAA,GAAAA,IAAA,GAAAA,IAAA,GAAAzO,OAAAyO,IAAA,GAAA/J,UAEA,CACA,SAAAmtB,IAAA4vF,KAAA,CACA,IAAAliH,EAAA,CAAAM,EAAA,UACA4O,IAAA,GAAA4B,KAAA9Q,GACAygC,MAAA3vB,KAAA,CAAA9Q,EAAAkP,IAAA,GAAAzO,OAAA,GACA,SAAA6xB,IAAA+vF,UAAA/vF,IAAA0vF,KAAA1hH,EAAA,KAAA+hH,SAAA,CACA,IAAAx/G,IAAA,GACA,IAAAugH,QACA,KAAAtjH,EAAAs3C,MAAA32C,OAAAX,IAAA,CACA,GAAAs3C,MAAAt3C,GAAA,KAAAuiH,SAAA,CACAx/G,IAAAswC,OAAAtwC,IAAAu0C,MAAAt3C,GAAA,GACA,SAAAs3C,MAAAt3C,GAAA,KAAAkiH,KAAA5qE,MAAAt3C,GAAA,KAAAuiH,SAAA,CACA,UAAAjrE,MAAAt3C,GAAA,gBAAA+C,IAAA,CACA,IAAAugH,WAAAhsE,MAAAt3C,GAAA,IACA,GAAAs3C,MAAAt3C,GAAA,GAAAmO,eAAAm1G,WAAAl0G,IAAA,GAAAk0G,SAAA,CACAl0G,IAAA,GAAAk0G,SAAAhsE,MAAAt3C,GAAA,GAAAsjH,QACA,CACA,CACA,MACAvgH,IAAAswC,OAAAtwC,IAAAu0C,MAAAt3C,GAAA,GACA,CACA,WACA,CACA,GAAAs3C,MAAAt3C,GAAA,KAAA6iH,QAAA7iH,IACA,IAAAu8C,EAAAv8C,EACA,KAAAA,EAAAs3C,MAAA32C,OAAAX,IAAA,CACA,GAAAs3C,MAAAt3C,GAAA,KAAA0iH,YAAAprE,MAAAt3C,GAAA,KAAAuiH,SAAA,CACA,IAAAnzG,IAAA,GAAArM,KAAAqM,IAAA,GAAArM,KAAAwgH,MAAAjsE,MAAAt3C,GAAA,SACAs3C,MAAAt3C,GAAA,UAAAoP,IAAA,GAAArM,KAAAswC,OAAAjkC,IAAA,GAAArM,KAAAu0C,MAAAt3C,GAAA,IACA,SAAAs3C,MAAAt3C,GAAA,KAAAkiH,MACA5qE,MAAAt3C,GAAA,KAAA0iH,YAAAprE,MAAAt3C,GAAA,KAAAuiH,UAAA,CACA,IAAAnzG,IAAA,GAAArM,KAAAqM,IAAA,GAAArM,KAAAwgH,MAAAjsE,MAAAt3C,GAAA,SACAs3C,MAAAt3C,GAAA,UAAAoP,IAAA,GAAArM,KAAAswC,OAAAjkC,IAAA,GAAArM,KAAAu0C,MAAAt3C,GAAA,IACA,MACA,GAAA+C,IAAApC,SAAAyO,IAAA,GAAArM,MAAA/C,IAAAu8C,IACAjF,MAAAt3C,GAAA,KAAAqiH,OAAA/qE,MAAAt3C,GAAA,KAAA8iH,YAAA,CAGA1zG,IAAA,GAAArM,SAAAu3C,aACA,CACA,GAAAhD,MAAAt3C,GAAA,KAAAqiH,MAAA,CACAriH,GACA,CACA,KACA,CACA,CACA,SAAAwyB,IAAA+vF,SAAA,CACAnzG,IAAA,GAAA5O,EAAA,QACA,SAAAgyB,IAAA0vF,KAAA1hH,EAAA,KAAA+hH,SAAA,CACAnzG,IAAA,GAAA5O,EAAA,QACA,SAAAgyB,IAAA6vF,MAAA,CACA,GAAAmB,YAAAp0G,IAAA,KAAAuxB,MAAAhgC,OAAA,CACA,IAAA0iH,GAAA1iF,YAAAhgC,OAAA,MACAggC,MAAA5kB,MACA4kB,YAAAhgC,OAAA,SAAA0iH,IAAAnvD,EACA9kD,IAAA,GAAAA,IAAA,GAAAA,IAAA,GAAAzO,OAAAyO,IAAA,GAAA/J,UAEA,CACA,SAAAmtB,IAAA0vF,KAAA1hH,EAAA,KAAA2hH,KAAA,CACA,GAAA3hH,EAAA,KAAA6E,WAAA7E,EAAA,UAAAA,EAAA,WACA,IAAAA,EAAA,GAAAA,EAAA,GAAA6yC,OAAA,GAAA7yC,EAAA,IACA,GAAAkB,MAAAG,QAAArB,EAAA,QACA4O,IAAA,GAAA4B,KAAAq0B,MAAAj2B,IAAA,GAAA5O,EAAA,GACA,MACA4O,IAAA,GAAA4B,KAAAxQ,EAAA,GACA,CACA,SAAAgyB,IAAA2vF,KAAA,CACA/yG,IAAA,GAAA4B,KAAAxQ,EAAA,GACA,SAAAgyB,IAAAqwF,SAAArwF,IAAAswF,WAAA,CAEA,MACA,UAAAxiH,MAAA,cAAAkyB,EACA,CACA,CAEA,GAAA4wF,KAAA,GAAAziH,OAAA,WAAAsF,KAAAm9G,KAAA,QACAA,KAAA,GAAA3kD,OACA,CAEA,GAAA2kD,KAAA,GAAAziH,OAAA,GACAyiH,KAAA,GAAAziH,SAAA,QAAAsF,KAAAm9G,KAAA,QACA,GAAA1yG,KAAA+yG,eAAA,OAAA/yG,KAAA+yG,eAAAL,KAAA,IACA,UAAA9iH,MACA,6DAEA,CACA,GAAAoB,MAAAG,QAAAuhH,KAAA,eAAAA,KAAA,qBACA1hH,MAAAG,QAAAuhH,KAAA,WACAA,KAAA,MAAAlvD,EAAAkvD,KAAA,SAAAA,KAAA,SAAAA,KAAA,SACA,CACA,OAAAA,KAAA,MAEA,SAAA3tG,MAAA6lB,KACA,IAAAh2B,IAAA,GACA,GAAA4tB,QAAAuvF,aAAAvvF,MAAAovF,KACA,QAAAtiH,EAAA,EAAAA,EAAAs7B,IAAA36B,OAAAX,IAAA,CACA,IAAAE,EAAAo7B,IAAAhkB,OAAAtX,GACA,GAAAkzB,QAAAivF,MAAAjiH,IAAA,KACA,GAAA+iH,IAAAtiH,OAAA2E,IAAA0L,KAAA,CAAAmxG,KAAAc,MACAA,IAAA,GACA/vF,MAAAkvF,IACA,SAAAliH,IAAA,MAAAwjH,KAAAxwF,gBAAA6vF,QAAA,CACA,GAAA7vF,QAAAkvF,MAAAa,IAAAtiH,OAAA,CACA2E,IAAA0L,KAAA,CAAAoxG,KAAAa,KACA,SAAA/vF,QAAAqvF,SAAA,CACAj9G,IAAA0L,KAAA,CAAAuxG,SAAAU,KACA,SAAA/vF,QAAAwvF,YAAAO,IAAAtiH,OAAA,CACA2E,IAAA0L,KAAA,CAAA0xG,WAAAO,KACA,CACA39G,IAAA0L,KAAA,CAAAqxG,QACAY,IAAA,GACA/vF,MAAAivF,IACA,SAAAjvF,QAAA6vF,SAAA,KAAA98G,KAAAg9G,MAAA/iH,IAAA,KACA,GAAAwQ,KAAA86B,SAAA,CACAlmC,IAAA0L,KAAA,CAAA0xG,WAAAO,IAAAzlF,OAAA,EAAAylF,IAAAtiH,OAAA,IACA,CACAsiH,IAAA,GACA/vF,MAAAivF,IACA,SAAAjvF,QAAAkvF,MAAA,QAAAn8G,KAAAg9G,KAAA,CACA,GAAAvyG,KAAA86B,SAAA,CACAlmC,IAAA0L,KAAA,CAAAoxG,KAAAa,KAAA,CAAAV,SAAA,YAAAM,SACA,CACAI,IAAA/iH,EACAgzB,MAAA6vF,OACA,SAAA7vF,QAAAivF,MAAAjvF,QAAA6vF,QAAA,CACAE,KAAA/iH,CACA,SAAAgzB,QAAAkvF,MAAAliH,IAAA,KAAA+iH,IAAAtiH,OAAA,CAEA,SAAAuyB,QAAAkvF,MAAA,KAAAn8G,KAAA/F,GAAA,CACA,GAAA+iH,IAAAtiH,OAAA,CACA2E,IAAA0L,KAAA,CAAAoxG,KAAAa,KACA,CACAA,IAAA,GACA/vF,MAAAovF,IACA,SAAApvF,QAAAkvF,KAAA,CACAa,KAAA/iH,CACA,SAAAgzB,QAAAovF,MAAA,YAAAr8G,KAAA/F,GAAA,CACAgzB,MAAAqvF,SACAU,IAAA/iH,CACA,SAAAgzB,QAAAovF,MAAA,KAAAr8G,KAAA/F,GAAA,CACA,GAAA+iH,IAAAtiH,OAAA2E,IAAA0L,KAAA,CAAAuxG,SAAAU,MACA39G,IAAA0L,KAAA,CAAA8xG,YACA,SAAA5vF,QAAAqvF,UAAA,KAAAt8G,KAAA/F,GAAA,CACAoF,IAAA0L,KAAA,CAAAuxG,SAAAU,MACAA,IAAA,GACA/vF,MAAAsvF,UACA,SAAAtvF,QAAAqvF,UAAAriH,IAAA,KACAoF,IAAA0L,KAAA,CAAAuxG,SAAAU,KAAA,CAAAJ,UACAI,IAAA,GACA/vF,MAAAuvF,YACA,SAAAvvF,QAAAqvF,SAAA,CACAU,KAAA/iH,CACA,UAAAgzB,QAAAsvF,YAAAtvF,QAAAovF,OAAApiH,IAAA,KACAoF,IAAA0L,KAAA,CAAA6xG,UACA3vF,MAAAuvF,YACA,UAAAvvF,QAAAsvF,YAAAtvF,QAAAovF,QAAA,KAAAr8G,KAAA/F,GAAA,CACAoF,IAAA0L,KAAA,CAAA8xG,aACA,WAAA78G,KAAA/F,GAAA,CACA+iH,KAAA/iH,EACAgzB,MAAAqvF,QACA,MAAArvF,MAAAovF,IACA,SAAApvF,QAAAuvF,cAAAviH,IAAA,KACAgzB,MAAA0vF,aACA,SAAA1vF,QAAAuvF,cAAAviH,IAAA,KACAgzB,MAAAyvF,aACA,SAAAzvF,QAAA0vF,eAAA1iH,IAAA,KACAoF,IAAA0L,KAAA,CAAA0xG,WAAAO,KAAA,CAAAH,aACAG,IAAA,GACA/vF,MAAAovF,IACA,SAAApvF,QAAAyvF,eAAAziH,IAAA,KACAoF,IAAA0L,KAAA,CAAA0xG,WAAAO,KAAA,CAAAH,aACAG,IAAA,GACA/vF,MAAAovF,IACA,SAAApvF,QAAAuvF,eAAA,KAAAx8G,KAAA/F,GAAA,CACAgzB,MAAAwvF,WACA1iH,GACA,SAAAkzB,QAAAwvF,YAAA,KAAAz8G,KAAA/F,GAAA,CACAoF,IAAA0L,KAAA,CAAA0xG,WAAAO,KAAA,CAAAH,aACAG,IAAA,GACA/vF,MAAAovF,IACA,SAAApvF,QAAAwvF,YAAAxvF,QAAAyvF,eACAzvF,QAAA0vF,cAAA,CACAK,KAAA/iH,CACA,CACA,CACA,GAAAgzB,QAAAivF,MAAAc,IAAAtiH,OAAA,CACA2E,IAAA0L,KAAA,CAAAmxG,KAAAc,MACAA,IAAA,EACA,SAAA/vF,QAAAwvF,YAAAO,IAAAtiH,OAAA,CACA2E,IAAA0L,KAAA,CAAA0xG,WAAAO,MACAA,IAAA,EACA,SAAA/vF,QAAA0vF,eAAAK,IAAAtiH,OAAA,CACA2E,IAAA0L,KAAA,CAAA0xG,WAAAO,MACAA,IAAA,EACA,SAAA/vF,QAAAyvF,eAAAM,IAAAtiH,OAAA,CACA2E,IAAA0L,KAAA,CAAA0xG,WAAAO,MACAA,IAAA,EACA,SAAA/vF,QAAAqvF,SAAA,CACAj9G,IAAA0L,KAAA,CAAAuxG,SAAAU,MACAA,IAAA,EACA,CACA,OAAA39G,GACA,CACA,EAEA,SAAAi+G,MAAAvkF,GACA,UAAAA,IAAA,kBAAAA,OACA,UAAAA,IAAA,gBAAAA,OACA,GAAAA,cAAA,gBAAAA,OACA,GAAAA,IAAA,MAAAA,IAAA35B,UAAA,OAAA25B,OACA,OAAAqU,OAAA,GAAArU,EACA,CACA,EAEA,SAAA0kF,KAAAxwF,OACA,OAAAA,QAAAyvF,eAAAzvF,QAAA0vF,aACA,CAEA,IAAAe,QAAAv8G,OAAA,MACA,gEACA,oEACA,6BAEA,gEACA,wCACA,2DACA,mEACA,wDACA,sEACA,mEACA,kEACA,oEACA,SACAq9B,KAAA,sCACA,SAAA++E,YAAA14F,KAAA,OAAA64F,QAAA19G,KAAA6kB,IAAA,C,iFCtSA,aAEA,IAAA7oB,gBAAA9B,QAAA,yCACA,IAAA6C,aAAA7C,QAAA,sCAEA,SAAAyjH,sBAAAhkH,GAAA,OAAAA,cAAA,sBAAAA,IAAA,CAAA0rC,QAAA1rC,EAAA,CAEA,IAAAikH,yBAAAD,sBAAA3hH,iBACA,IAAA6hH,sBAAAF,sBAAA5gH,cAEA,IAAAzB,IAAA,GACA,IAAA00G,KAAA10G,IAAA+mC,QACA,IAAAviC,MAAAxE,IAAAwE,MACA,SAAAs1F,SAAAh4F,KACA4yG,KAAAv1G,KAAAqF,MAAArF,KAAA8V,UAAA,aAAA9I,QACA,GAAAA,OAAA,CACA,QAAAkW,QAAAlW,OAAA,CACA,GAAArK,IAAAugB,QAAAve,UAAAhC,IAAAugB,MAAAlW,OAAAkW,KACA,CACA,CACA,IACA,OAAAvgB,GACA,CAGA,IAAA0gH,mBAAA,wCAEA,IAAAC,gBAAA,SAAAA,gBAAAh+G,KAAAgmB,IAAApjB,SACA,IAAA+H,IAAA/H,SAAA,GACA+H,IAAAu3F,KAAAv3F,IAAAu3F,MAAA,IACA,IAAA5kG,MAAAw7G,mBAAA9yF,KACA,IAAAsP,IAAA,GAAA+X,OAAArtC,KAAA,KAAAqtC,OAAA/vC,OAEA,GAAAqN,IAAAszG,OAAA,GACA,IAAAA,OAAAtzG,IAAAszG,OAAA,EACA,GAAAz+G,OAAA4pE,MAAA60C,QAAA,UAAA3jH,MAAA,6BACAg7B,KAAA,aAAA+X,OAAAnU,KAAAsW,MAAAyuE,QACA,CAEA,GAAAtzG,IAAAuzG,OAAA,CACA,IAAAH,mBAAA99G,KAAA0K,IAAAuzG,QAAA,CACA,UAAA9hH,UAAA,2BACA,CAEAk5B,KAAA,YAAA+X,OAAA1iC,IAAAuzG,OACA,CAEA,GAAAvzG,IAAAu3F,KAAA,CACA,IAAA6b,mBAAA99G,KAAA0K,IAAAu3F,MAAA,CACA,UAAA9lG,UAAA,yBACA,CAEAk5B,KAAA,UAAA+X,OAAA1iC,IAAAu3F,KACA,CAEA,GAAAv3F,IAAAwzG,QAAA,CACA,UAAAxzG,IAAAwzG,QAAAn7E,cAAA,YACA,UAAA5mC,UAAA,4BACA,CAEAk5B,KAAA,aAAA+X,OAAA1iC,IAAAwzG,QAAAn7E,cACA,CAEA,GAAAr4B,IAAAyzG,SAAA9oF,KAAA,aACA,GAAA3qB,IAAAm3F,OAAAxsE,KAAA,WAEA,GAAA3qB,IAAA0zG,SAAA,CACA,IAAAA,gBAAA1zG,IAAA0zG,WAAA,SAAA1zG,IAAA0zG,SAAA/pE,cAAA3pC,IAAA0zG,SAEA,OAAAA,UACA,UACA/oF,KAAA,oBACA,MAEA,UACAA,KAAA,iBACA,MAEA,aACAA,KAAA,oBACA,MAEA,WACAA,KAAA,kBACA,MAEA,QACA,UAAAl5B,UAAA,8BAEA,CAEA,OAAAk5B,GACA,EAEA,IAAAgpF,OAAA,CACAvgH,OAAA,SAAAA,OAAAiC,KAAA1C,MAAAihH,QAAAL,QACA,IAAAM,cAAAhuG,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,IACA0xF,KAAA,IACAmc,SAAA,UAGA,GAAAE,QAAA,CACAC,cAAAL,QAAA,IAAAr7E,KACA07E,cAAAL,QAAAM,QAAAD,cAAAL,QAAAviF,UAAA2iF,QAAA,OACA,CAEA,GAAAL,OAAAM,cAAAN,cACA72D,SAAAi3D,OAAAN,gBAAAh+G,KAAA84G,mBAAAx7G,OAAAkhH,cACA,EACAroE,KAAA,SAAAA,KAAAn2C,MACA,IAAA0+G,OAAA,GAAArxE,OAAArtC,KAAA,KACA,IAAA41E,GAAAvuB,SAAAi3D,OAAA9wG,MAAA,KAEA,QAAAxT,EAAA,EAAAA,EAAA47E,GAAAj7E,OAAAX,IAAA,CACA,IAAAE,EAAA07E,GAAA57E,GAEA,MAAAE,EAAAoX,OAAA,UACApX,IAAA6gC,UAAA,EAAA7gC,EAAAS,OACA,CAEA,GAAAT,EAAAqe,QAAAmmG,UAAA,SAAAxkH,EAAA6gC,UAAA2jF,OAAA/jH,OAAAT,EAAAS,OACA,CAEA,WACA,EACA+/E,OAAA,SAAAA,OAAA16E,MACAQ,KAAAzC,OAAAiC,KAAA,MACA,GAEA,IAAA2+G,SAAA,CACA3+G,KAAA,SACAuwC,OAAA,SAAAA,OAAA3tC,SACA,IAAA0zC,MAEA,GAAA1zC,QAAAg8G,qBAAAv3D,WAAA,aACA,IAAAntD,EAAAokH,OAAAnoE,KAAAvzC,QAAAg8G,cACA,GAAA1kH,EAAAo8C,MAAAp8C,CACA,CAEA,OAAAo8C,KACA,EACAuoE,kBAAA,SAAAA,kBAAAC,IAAAl8G,SACA,GAAAA,QAAAg8G,qBAAAv3D,WAAA,aACAi3D,OAAAvgH,OAAA6E,QAAAg8G,aAAAE,IAAAl8G,QAAAm8G,cAAAn8G,QAAAo8G,aAAAp8G,QAAA47G,cACA,CACA,GAGA,IAAAS,YAAA,CACAj/G,KAAA,cACAuwC,OAAA,SAAAA,OAAA3tC,SACA,IAAA0zC,MAEA,UAAAiH,SAAA,aACA,IAAAwL,OAAAxL,OAAA2F,SAAA6F,OAEA,IAAAxL,OAAA2F,SAAA6F,QAAAxL,OAAA2F,SAAA7gB,MAAAkb,OAAA2F,SAAA7gB,KAAA9pB,QAAA,SACAwwC,OAAAxL,OAAA2F,SAAA7gB,KAAAtH,UAAAwiB,OAAA2F,SAAA7gB,KAAA9pB,QAAA,KACA,CAEA,IAAA2wC,MAAAH,OAAAhuB,UAAA,GACA,IAAAjhB,OAAAovC,MAAA17C,MAAA,KAEA,QAAAxT,EAAA,EAAAA,EAAA8f,OAAAnf,OAAAX,IAAA,CACA,IAAAwH,IAAAsY,OAAA9f,GAAAue,QAAA,KAEA,GAAA/W,IAAA,GACA,IAAAzE,IAAA+c,OAAA9f,GAAA+gC,UAAA,EAAAv5B,KAEA,GAAAzE,MAAA6F,QAAAs8G,kBAAA,CACA5oE,MAAAx8B,OAAA9f,GAAA+gC,UAAAv5B,IAAA,EACA,CACA,CACA,CACA,CAEA,OAAA80C,KACA,GAGA,IAAA6oE,uBAAA,KAEA,IAAAC,sBAAA,SAAAA,wBACA,GAAAD,yBAAA,YAAAA,uBAEA,IACAA,uBAAA5hE,SAAA,aAAAA,OAAAgB,eAAA,KACA,IAAA8gE,QAAA,wBACA9hE,OAAAgB,aAAA+gE,QAAAD,QAAA,OACA9hE,OAAAgB,aAAAsuD,WAAAwS,QACA,OAAAzlH,GACAulH,uBAAA,KACA,CAEA,OAAAA,sBACA,EAEA,IAAA5gE,aAAA,CACAv+C,KAAA,eACAuwC,OAAA,SAAAA,OAAA3tC,SACA,IAAA0zC,MAEA,GAAA1zC,QAAA28G,oBAAAH,wBAAA,CACA,IAAAN,IAAAvhE,OAAAgB,aAAAihE,QAAA58G,QAAA28G,oBACA,GAAAT,IAAAxoE,MAAAwoE,GACA,CAEA,OAAAxoE,KACA,EACAuoE,kBAAA,SAAAA,kBAAAC,IAAAl8G,SACA,GAAAA,QAAA28G,oBAAAH,wBAAA,CACA7hE,OAAAgB,aAAA+gE,QAAA18G,QAAA28G,mBAAAT,IACA,CACA,GAGA,IAAAW,yBAAA,KAEA,IAAAC,wBAAA,SAAAA,0BACA,GAAAD,2BAAA,YAAAA,yBAEA,IACAA,yBAAAliE,SAAA,aAAAA,OAAAoiE,iBAAA,KACA,IAAAN,QAAA,wBACA9hE,OAAAoiE,eAAAL,QAAAD,QAAA,OACA9hE,OAAAoiE,eAAA9S,WAAAwS,QACA,OAAAzlH,GACA6lH,yBAAA,KACA,CAEA,OAAAA,wBACA,EAEA,IAAAE,eAAA,CACA3/G,KAAA,iBACAuwC,OAAA,SAAAA,OAAA3tC,SACA,IAAA0zC,MAEA,GAAA1zC,QAAAg9G,sBAAAF,0BAAA,CACA,IAAAZ,IAAAvhE,OAAAoiE,eAAAH,QAAA58G,QAAAg9G,sBACA,GAAAd,IAAAxoE,MAAAwoE,GACA,CAEA,OAAAxoE,KACA,EACAuoE,kBAAA,SAAAA,kBAAAC,IAAAl8G,SACA,GAAAA,QAAAg9G,sBAAAF,0BAAA,CACAniE,OAAAoiE,eAAAL,QAAA18G,QAAAg9G,qBAAAd,IACA,CACA,GAGA,IAAAe,YAAA,CACA7/G,KAAA,YACAuwC,OAAA,SAAAA,OAAA3tC,SACA,IAAA0zC,MAAA,GAEA,UAAAoM,YAAA,aACA,GAAAA,UAAAo9D,UAAA,CAEA,QAAA9lH,EAAA,EAAAA,EAAA0oD,UAAAo9D,UAAAnlH,OAAAX,IAAA,CACAs8C,MAAAtrC,KAAA03C,UAAAo9D,UAAA9lH,GACA,CACA,CAEA,GAAA0oD,UAAAq9D,aAAA,CACAzpE,MAAAtrC,KAAA03C,UAAAq9D,aACA,CAEA,GAAAr9D,UAAAs9D,SAAA,CACA1pE,MAAAtrC,KAAA03C,UAAAs9D,SACA,CACA,CAEA,OAAA1pE,MAAA37C,OAAA,EAAA27C,MAAAj3C,SACA,GAGA,IAAA4gH,QAAA,CACAjgH,KAAA,UACAuwC,OAAA,SAAAA,OAAA3tC,SACA,IAAA0zC,MACA,IAAA2pE,QAAAr9G,QAAAq9G,iBAAA54D,WAAA,YAAAA,SAAA6L,gBAAA,MAEA,GAAA+sD,wBAAAr3C,eAAA,YACAtyB,MAAA2pE,QAAAr3C,aAAA,OACA,CAEA,OAAAtyB,KACA,GAGA,IAAA4rD,KAAA,CACAliG,KAAA,OACAuwC,OAAA,SAAAA,OAAA3tC,SACA,IAAA0zC,MAEA,UAAAiH,SAAA,aACA,IAAAyiE,SAAAziE,OAAA2F,SAAA4F,SAAA33C,MAAA,mBAEA,GAAA6uG,oBAAAtkH,MAAA,CACA,UAAAkH,QAAAs9G,sBAAA,UACA,UAAAF,SAAAp9G,QAAAs9G,uBAAA,UACA,OAAA7gH,SACA,CAEAi3C,MAAA0pE,SAAAp9G,QAAAs9G,qBAAA13G,QAAA,OACA,MACA8tC,MAAA0pE,SAAA,GAAAx3G,QAAA,OACA,CACA,CACA,CAEA,OAAA8tC,KACA,GAGA,IAAA6pE,UAAA,CACAngH,KAAA,YACAuwC,OAAA,SAAAA,OAAA3tC,SAEA,IAAAw9G,gCAAAx9G,QAAAw9G,2BAAA,SAAAx9G,QAAAw9G,yBAAA,IAIA,IAAAJ,gBAAAziE,SAAA,aAAAA,OAAA2F,UAAA3F,OAAA2F,SAAA2+C,UAAAtkD,OAAA2F,SAAA2+C,SAAA1wF,MAAA,0DAEA,IAAA6uG,SAAA,OAAA3gH,UAEA,OAAA2gH,SAAAI,yBACA,GAGA,SAAAC,cACA,OACAzlD,MAAA,+EACAskD,kBAAA,MACAN,aAAA,UACAW,mBAAA,aACAK,qBAAA,aAEA76C,OAAA,iBACAu7C,gBAAA,WAIA,CAEA,IAAAC,QAAA,WACA,SAAAA,QAAAC,UACA,IAAA59G,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,MAEAqtG,yBAAA,WAAAr9G,KAAA+/G,SAEA//G,KAAAgL,KAAA,mBACAhL,KAAAigH,UAAA,GACAjgH,KAAAkW,KAAA8pG,SAAA59G,QACA,CAEAk7G,sBAAA,WAAAyC,QAAA,EACAxjH,IAAA,OACAO,MAAA,SAAAoZ,KAAA8pG,UACA,IAAA59G,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,MACA,IAAAkwG,YAAAlwG,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,MACAhQ,KAAAggH,kBACAhgH,KAAAoC,QAAAyyF,SAAAzyF,QAAApC,KAAAoC,SAAA,GAAAy9G,eAEA,GAAA7/G,KAAAoC,QAAA+9G,mBAAAngH,KAAAoC,QAAAs9G,oBAAA1/G,KAAAoC,QAAA+9G,mBACAngH,KAAAkgH,wBACAlgH,KAAAogH,YAAAjC,UACAn+G,KAAAogH,YAAA3B,aACAz+G,KAAAogH,YAAAriE,cACA/9C,KAAAogH,YAAAjB,gBACAn/G,KAAAogH,YAAAf,aACAr/G,KAAAogH,YAAAX,SACAz/G,KAAAogH,YAAA1e,MACA1hG,KAAAogH,YAAAT,UACA,GACA,CACApjH,IAAA,cACAO,MAAA,SAAAsjH,YAAAC,UACArgH,KAAAigH,UAAAI,SAAA7gH,MAAA6gH,QACA,GACA,CACA9jH,IAAA,SACAO,MAAA,SAAAwjH,OAAAC,gBACA,IAAAp6G,MAAAnG,KAEA,IAAAugH,8BAAAvgH,KAAAoC,QAAAg4D,MACA,IAAAomD,SAAA,GACAD,eAAAz+E,SAAA,SAAA2+E,cACA,GAAAt6G,MAAA85G,UAAAQ,cAAA,CACA,IAAA1wE,OAAA5pC,MAAA85G,UAAAQ,cAAA1wE,OAAA5pC,MAAA/D,SAEA,GAAA2tC,wBAAA,SAAAA,OAAA,CAAAA,QACA,GAAAA,OAAAywE,kBAAA3zE,OAAAkD,OACA,CACA,IACA,GAAA/vC,KAAAggH,SAAAU,cAAAC,sBAAA,OAAAH,SAEA,OAAAA,SAAArmH,OAAA,EAAAqmH,SAAA,OACA,GACA,CACAjkH,IAAA,oBACAO,MAAA,SAAAuhH,kBAAAC,IAAA/5C,QACA,IAAAq8C,OAAA5gH,KAEA,IAAAukE,cAAAvkE,KAAAoC,QAAAmiE,OACA,IAAAA,OAAA,OACA,GAAAvkE,KAAAoC,QAAA09G,iBAAA9/G,KAAAoC,QAAA09G,gBAAA/nG,QAAAumG,MAAA,SACA/5C,OAAAziC,SAAA,SAAA++E,WACA,GAAAD,OAAAX,UAAAY,WAAAD,OAAAX,UAAAY,WAAAxC,kBAAAC,IAAAsC,OAAAx+G,QACA,GACA,KAGA,OAAA29G,OACA,CArEA,GAuEAA,QAAA/0G,KAAA,mBAEA5Q,OAAAH,QAAA8lH,O,2HCraA,aAEA,IAAAhiH,QAAApE,QAAA,iCACA,IAAA8B,gBAAA9B,QAAA,yCACA,IAAA6C,aAAA7C,QAAA,sCACA,IAAA2B,uBAAA3B,QAAA,gDACA,IAAAyD,UAAAzD,QAAA,mCACA,IAAAsE,2BAAAtE,QAAA,oDACA,IAAAoD,gBAAApD,QAAA,yCACA,IAAAiD,gBAAAjD,QAAA,yCACA,IAAA4E,SAAA5E,QAAA,kCAEA,SAAAyjH,sBAAAhkH,GAAA,OAAAA,cAAA,sBAAAA,IAAA,CAAA0rC,QAAA1rC,EAAA,CAEA,IAAA0nH,iBAAA1D,sBAAAr/G,SACA,IAAAs/G,yBAAAD,sBAAA3hH,iBACA,IAAA6hH,sBAAAF,sBAAA5gH,cACA,IAAAukH,gCAAA3D,sBAAA9hH,wBACA,IAAA0lH,mBAAA5D,sBAAAhgH,WACA,IAAA6jH,oCAAA7D,sBAAAn/G,4BACA,IAAAijH,yBAAA9D,sBAAArgH,iBACA,IAAAokH,yBAAA/D,sBAAAxgH,iBACA,IAAAwkH,kBAAAhE,sBAAA7+G,UAEA,SAAA0zG,QAAAt6F,OAAA0pG,gBAAA,IAAApuG,KAAA5W,OAAA4W,KAAA0E,QAAA,GAAAtb,OAAAkvD,sBAAA,KAAAC,QAAAnvD,OAAAkvD,sBAAA5zC,QAAA,GAAA0pG,eAAA,CAAA71D,gBAAA1L,QAAA,SAAAo7D,KAAA,OAAA7+G,OAAA2mC,yBAAArrB,OAAAujG,KAAAh/G,UAAA,IAAA+W,KAAAzI,KAAAq0B,MAAA5rB,KAAAu4C,QAAA,QAAAv4C,IAAA,CAEA,SAAAquG,cAAAvlH,QAAA,QAAAvC,EAAA,EAAAA,EAAAwW,UAAA7V,OAAAX,IAAA,KAAA0N,OAAA8I,UAAAxW,IAAA,KAAAwW,UAAAxW,GAAA,MAAAA,EAAA,GAAAy4G,QAAA51G,OAAA6K,QAAA,MAAA46B,SAAA,SAAAvlC,KAAA4kH,yBAAA,WAAAplH,OAAAQ,IAAA2K,OAAA3K,KAAA,YAAAF,OAAAklH,0BAAA,CAAAllH,OAAAiU,iBAAAvU,OAAAM,OAAAklH,0BAAAr6G,QAAA,MAAA+qG,QAAA51G,OAAA6K,SAAA46B,SAAA,SAAAvlC,KAAAF,OAAAC,eAAAP,OAAAQ,IAAAF,OAAA2mC,yBAAA97B,OAAA3K,KAAA,YAAAR,MAAA,CAEA,IAAAylH,cAAA,CACAx2G,KAAA,SACAi5B,IAAA,SAAAA,IAAA/F,MACAl+B,KAAAyiC,OAAA,MAAAvE,KACA,EACA7zB,KAAA,SAAAA,KAAA6zB,MACAl+B,KAAAyiC,OAAA,OAAAvE,KACA,EACAtB,MAAA,SAAAA,MAAAsB,MACAl+B,KAAAyiC,OAAA,QAAAvE,KACA,EACAuE,OAAA,SAAAA,OAAAz3B,KAAAkzB,MACA,GAAA9zB,iBAAAY,MAAAZ,QAAAY,MAAA6zB,MAAAz0B,QAAA8zB,KACA,GAGA,IAAAujF,OAAA,WACA,SAAAA,OAAAC,gBACA,IAAAt/G,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,MAEAqtG,yBAAA,WAAAr9G,KAAAyhH,QAEAzhH,KAAAkW,KAAAwrG,eAAAt/G,QACA,CAEAk7G,sBAAA,WAAAmE,OAAA,EACAllH,IAAA,OACAO,MAAA,SAAAoZ,KAAAwrG,gBACA,IAAAt/G,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,MACAhQ,KAAA6B,OAAAO,QAAAP,QAAA,WACA7B,KAAAs8C,OAAAolE,gBAAAF,cACAxhH,KAAAoC,gBACApC,KAAAu8C,MAAAn6C,QAAAm6C,KACA,GACA,CACAhgD,IAAA,WACAO,MAAA,SAAA6kH,SAAAvjE,MACAp+C,KAAAu8C,MAAA6B,IACA,GACA,CACA7hD,IAAA,MACAO,MAAA,SAAAmnC,MACA,QAAA29E,KAAA5xG,UAAA7V,OAAA+jC,KAAA,IAAAhjC,MAAA0mH,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAA,CACA3jF,KAAA2jF,MAAA7xG,UAAA6xG,KACA,CAEA,OAAA7hH,KAAA8hH,QAAA5jF,KAAA,cACA,GACA,CACA3hC,IAAA,OACAO,MAAA,SAAAuN,OACA,QAAA03G,MAAA/xG,UAAA7V,OAAA+jC,KAAA,IAAAhjC,MAAA6mH,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAA,CACA9jF,KAAA8jF,OAAAhyG,UAAAgyG,MACA,CAEA,OAAAhiH,KAAA8hH,QAAA5jF,KAAA,eACA,GACA,CACA3hC,IAAA,QACAO,MAAA,SAAA8/B,QACA,QAAAqlF,MAAAjyG,UAAA7V,OAAA+jC,KAAA,IAAAhjC,MAAA+mH,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAA,CACAhkF,KAAAgkF,OAAAlyG,UAAAkyG,MACA,CAEA,OAAAliH,KAAA8hH,QAAA5jF,KAAA,WACA,GACA,CACA3hC,IAAA,YACAO,MAAA,SAAA0hC,YACA,QAAA2jF,MAAAnyG,UAAA7V,OAAA+jC,KAAA,IAAAhjC,MAAAinH,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAA,CACAlkF,KAAAkkF,OAAApyG,UAAAoyG,MACA,CAEA,OAAApiH,KAAA8hH,QAAA5jF,KAAA,mCACA,GACA,CACA3hC,IAAA,UACAO,MAAA,SAAAglH,QAAA5jF,KAAAmkF,IAAAxgH,OAAAygH,WACA,GAAAA,YAAAtiH,KAAAu8C,MAAA,YACA,UAAAre,KAAA,cAAAA,KAAA,MAAA2O,OAAAhrC,QAAAgrC,OAAA7sC,KAAA6B,OAAA,KAAAgrC,OAAA3O,KAAA,IACA,OAAAl+B,KAAAs8C,OAAA+lE,KAAAnkF,KACA,GACA,CACA3hC,IAAA,SACAO,MAAA,SAAAS,OAAAglH,YACA,WAAAd,OAAAzhH,KAAAs8C,OAAAglE,4BAAA,IACAz/G,OAAA,GAAAgrC,OAAA7sC,KAAA6B,OAAA,KAAAgrC,OAAA01E,WAAA,OACAviH,KAAAoC,SACA,GACA,CACA7F,IAAA,QACAO,MAAA,SAAA8hD,MAAAx8C,SACAA,iBAAApC,KAAAoC,QACAA,QAAAP,OAAAO,QAAAP,QAAA7B,KAAA6B,OACA,WAAA4/G,OAAAzhH,KAAAs8C,OAAAl6C,QACA,KAGA,OAAAq/G,MACA,CAnFA,GAqFA,IAAAe,WAAA,IAAAf,OAEA,IAAArlE,aAAA,WACA,SAAAA,eACAihE,yBAAA,WAAAr9G,KAAAo8C,cAEAp8C,KAAAyiH,UAAA,EACA,CAEAnF,sBAAA,WAAAlhE,aAAA,EACA7/C,IAAA,KACAO,MAAA,SAAAkgD,GAAAsC,OAAAnC,UACA,IAAAh3C,MAAAnG,KAEAs/C,OAAAtyC,MAAA,KAAA80B,SAAA,SAAAy+D,OACAp6F,MAAAs8G,UAAAliB,OAAAp6F,MAAAs8G,UAAAliB,QAAA,GAEAp6F,MAAAs8G,UAAAliB,OAAA/1F,KAAA2yC,SACA,IACA,OAAAn9C,IACA,GACA,CACAzD,IAAA,MACAO,MAAA,SAAA04D,IAAA+qC,MAAApjD,UACA,IAAAn9C,KAAAyiH,UAAAliB,OAAA,OAEA,IAAApjD,SAAA,QACAn9C,KAAAyiH,UAAAliB,OACA,MACA,CAEAvgG,KAAAyiH,UAAAliB,OAAAvgG,KAAAyiH,UAAAliB,OAAAzgD,QAAA,SAAA7zB,GACA,OAAAA,IAAAkxB,QACA,GACA,GACA,CACA5gD,IAAA,OACAO,MAAA,SAAAmgD,KAAAsjD,OACA,QAAAqhB,KAAA5xG,UAAA7V,OAAA+jC,KAAA,IAAAhjC,MAAA0mH,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAA,CACA3jF,KAAA2jF,KAAA,GAAA7xG,UAAA6xG,KACA,CAEA,GAAA7hH,KAAAyiH,UAAAliB,OAAA,CACA,IAAAmiB,OAAA,GAAA71E,OAAA7sC,KAAAyiH,UAAAliB,QACAmiB,OAAA5gF,SAAA,SAAA6gF,UACAA,SAAA9jF,WAAA,EAAAX,KACA,GACA,CAEA,GAAAl+B,KAAAyiH,UAAA,MACA,IAAAG,QAAA,GAAA/1E,OAAA7sC,KAAAyiH,UAAA,MAEAG,QAAA9gF,SAAA,SAAA6gF,UACAA,SAAA9jF,MAAA8jF,SAAA,CAAApiB,OAAA1zD,OAAA3O,MACA,GACA,CACA,KAGA,OAAAke,YACA,CA1DA,GA4DA,SAAAymE,QACA,IAAA/jH,IACA,IAAAgkH,IACA,IAAAC,QAAA,IAAA94D,SAAA,SAAAC,QAAAC,QACArrD,IAAAorD,QACA44D,IAAA34D,MACA,IACA44D,QAAA74D,QAAAprD,IACAikH,QAAA54D,OAAA24D,IACA,OAAAC,OACA,CACA,SAAAC,WAAArrG,QACA,GAAAA,QAAA,cACA,SAAAA,MACA,CACA,SAAA+lB,KAAA7jC,EAAAmyB,EAAA1yB,GACAO,EAAAioC,SAAA,SAAA6S,GACA,GAAA3oB,EAAA2oB,GAAAr7C,EAAAq7C,GAAA3oB,EAAA2oB,EACA,GACA,CAEA,SAAAsuE,cAAAtrG,OAAA+pF,KAAAwU,OACA,SAAAgN,SAAA3mH,KACA,OAAAA,SAAAwb,QAAA,UAAAxb,IAAAyL,QAAA,YAAAzL,GACA,CAEA,SAAA4mH,uBACA,OAAAxrG,wBAAA,QACA,CAEA,IAAAwiB,aAAAunE,OAAA,YAAA70D,OAAA60D,WAAA10F,MAAA,KAEA,MAAAmtB,MAAAhgC,OAAA,GACA,GAAAgpH,uBAAA,SACA,IAAA5mH,IAAA2mH,SAAA/oF,MAAA89B,SACA,IAAAtgD,OAAApb,MAAA25G,MAAAv+F,OAAApb,KAAA,IAAA25G,MAEA,GAAA75G,OAAAM,UAAAgL,eAAAzN,KAAAyd,OAAApb,KAAA,CACAob,cAAApb,IACA,MACAob,OAAA,EACA,CACA,CAEA,GAAAwrG,uBAAA,SACA,OACAtmH,IAAA8a,OACA21C,EAAA41D,SAAA/oF,MAAA89B,SAEA,CAEA,SAAAmrD,QAAAzrG,OAAA+pF,KAAA2hB,UACA,IAAAC,eAAAL,cAAAtrG,OAAA+pF,KAAArlG,QACAQ,IAAAymH,eAAAzmH,IACAywD,EAAAg2D,eAAAh2D,EAEAzwD,IAAAywD,GAAA+1D,QACA,CACA,SAAAE,SAAA5rG,OAAA+pF,KAAA2hB,SAAAx2E,QACA,IAAA22E,gBAAAP,cAAAtrG,OAAA+pF,KAAArlG,QACAQ,IAAA2mH,gBAAA3mH,IACAywD,EAAAk2D,gBAAAl2D,EAEAzwD,IAAAywD,GAAAzwD,IAAAywD,IAAA,GACA,GAAAzgB,OAAAhwC,IAAAywD,GAAAzwD,IAAAywD,GAAAzgB,OAAAw2E,UACA,IAAAx2E,OAAAhwC,IAAAywD,GAAA9iD,KAAA64G,SACA,CACA,SAAAI,QAAA9rG,OAAA+pF,MACA,IAAAgiB,gBAAAT,cAAAtrG,OAAA+pF,MACA7kG,IAAA6mH,gBAAA7mH,IACAywD,EAAAo2D,gBAAAp2D,EAEA,IAAAzwD,IAAA,OAAAgC,UACA,OAAAhC,IAAAywD,EACA,CACA,SAAAq2D,oBAAA15F,KAAA25F,YAAArnH,KACA,IAAAO,MAAA2mH,QAAAx5F,KAAA1tB,KAEA,GAAAO,QAAA+B,UAAA,CACA,OAAA/B,KACA,CAEA,OAAA2mH,QAAAG,YAAArnH,IACA,CACA,SAAAsnH,WAAA9nH,OAAAmL,OAAA2/E,WACA,QAAAzpE,QAAAlW,OAAA,CACA,GAAAkW,OAAA,aAAAA,OAAA,eACA,GAAAA,QAAArhB,OAAA,CACA,UAAAA,OAAAqhB,QAAA,UAAArhB,OAAAqhB,gBAAAre,eAAAmI,OAAAkW,QAAA,UAAAlW,OAAAkW,gBAAAre,OAAA,CACA,GAAA8nF,UAAA9qF,OAAAqhB,MAAAlW,OAAAkW,KACA,MACAymG,WAAA9nH,OAAAqhB,MAAAlW,OAAAkW,MAAAypE,UACA,CACA,MACA9qF,OAAAqhB,MAAAlW,OAAAkW,KACA,CACA,CACA,CAEA,OAAArhB,MACA,CACA,SAAA+nH,YAAAhvF,KACA,OAAAA,IAAA9sB,QAAA,6CACA,CACA,IAAA+7G,WAAA,CACA,YACA,WACA,WACA,aACA,YACA,cAEA,SAAAC,OAAA/5F,MACA,UAAAA,OAAA,UACA,OAAAA,KAAAjiB,QAAA,uBAAAgkB,GACA,OAAA+3F,WAAA/3F,EACA,GACA,CAEA,OAAA/B,IACA,CACA,IAAAg6F,cAAAlnE,SAAA,aAAAA,OAAAmF,kBAAAnF,OAAAmF,UAAAgiE,gBAAA,aAAAnnE,OAAAmF,UAAAioC,WAAAptC,OAAAmF,UAAAioC,UAAApyE,QAAA,WACA,IAAAq3B,MAAA,sBACA,SAAA+0E,oBAAA5nH,IAAA6nH,YAAAC,cACAD,yBAAA,GACAC,2BAAA,GACA,IAAAC,cAAAl1E,MAAA0Q,QAAA,SAAApmD,GACA,OAAA0qH,YAAArsG,QAAAre,GAAA,GAAA2qH,aAAAtsG,QAAAre,GAAA,CACA,IACA,GAAA4qH,cAAAnqH,SAAA,cACA,IAAAhB,EAAA,IAAAyH,OAAA,IAAAisC,OAAAy3E,cAAA3hF,KAAA,SAAAjpC,GACA,OAAAA,IAAA,UAAAA,CACA,IAAAukC,KAAA,WACA,IAAAuqB,SAAArvD,EAAAsG,KAAAlD,KAEA,IAAAisD,QAAA,CACA,IAAA+7D,GAAAhoH,IAAAwb,QAAAssG,cAEA,GAAAE,GAAA,IAAAprH,EAAAsG,KAAAlD,IAAAg+B,UAAA,EAAAgqF,KAAA,CACA/7D,QAAA,IACA,CACA,CAEA,OAAAA,OACA,CAEA,SAAAg8D,UAAA7sG,OAAA0pG,gBAAA,IAAApuG,KAAA5W,OAAA4W,KAAA0E,QAAA,GAAAtb,OAAAkvD,sBAAA,KAAAC,QAAAnvD,OAAAkvD,sBAAA5zC,QAAA,GAAA0pG,eAAA,CAAA71D,gBAAA1L,QAAA,SAAAo7D,KAAA,OAAA7+G,OAAA2mC,yBAAArrB,OAAAujG,KAAAh/G,UAAA,IAAA+W,KAAAzI,KAAAq0B,MAAA5rB,KAAAu4C,QAAA,QAAAv4C,IAAA,CAEA,SAAAwxG,gBAAA1oH,QAAA,QAAAvC,EAAA,EAAAA,EAAAwW,UAAA7V,OAAAX,IAAA,KAAA0N,OAAA8I,UAAAxW,IAAA,KAAAwW,UAAAxW,GAAA,MAAAA,EAAA,GAAAgrH,UAAAnoH,OAAA6K,QAAA,MAAA46B,SAAA,SAAAvlC,KAAA4kH,yBAAA,WAAAplH,OAAAQ,IAAA2K,OAAA3K,KAAA,YAAAF,OAAAklH,0BAAA,CAAAllH,OAAAiU,iBAAAvU,OAAAM,OAAAklH,0BAAAr6G,QAAA,MAAAs9G,UAAAnoH,OAAA6K,SAAA46B,SAAA,SAAAvlC,KAAAF,OAAAC,eAAAP,OAAAQ,IAAAF,OAAA2mC,yBAAA97B,OAAA3K,KAAA,YAAAR,MAAA,CAEA,SAAA2oH,aAAAC,SAAA,IAAAC,0BAAAC,4BAAA,gBAAAC,uBAAA,IAAAv7E,MAAA23E,yBAAA,WAAAyD,SAAArhG,OAAA,GAAAshG,0BAAA,KAAAG,UAAA7D,yBAAA,WAAAlhH,MAAAxC,YAAA8lB,OAAAuuF,QAAAmT,UAAAz7E,MAAAv5B,UAAA+0G,UAAA,MAAAzhG,OAAAimB,MAAA1K,MAAA7+B,KAAAgQ,UAAA,QAAAixG,oCAAA,WAAAjhH,KAAAsjB,OAAA,EAEA,SAAAuhG,4BAAA,UAAAhT,UAAA,cAAAA,QAAAmT,UAAA,gBAAAnT,QAAAmT,UAAAC,KAAA,uBAAApM,QAAA,2BAAAX,QAAAv7G,UAAA02C,QAAAn5C,KAAA23G,QAAAmT,UAAA9M,QAAA,sCAAA9+G,GAAA,cAEA,SAAA8rH,SAAAroH,IAAA6kG,MACA,IAAA2iB,aAAAr0G,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,OACA,IAAAnT,IAAA,OAAAgC,UACA,GAAAhC,IAAA6kG,MAAA,OAAA7kG,IAAA6kG,MACA,IAAAyjB,MAAAzjB,KAAA10F,MAAAq3G,cACA,IAAAl4F,QAAAtvB,IAEA,QAAArD,EAAA,EAAAA,EAAA2rH,MAAAhrH,SAAAX,EAAA,CACA,IAAA2yB,QAAA,OAAAttB,UAEA,UAAAstB,QAAAg5F,MAAA3rH,MAAA,UAAAA,EAAA,EAAA2rH,MAAAhrH,OAAA,CACA,OAAA0E,SACA,CAEA,GAAAstB,QAAAg5F,MAAA3rH,MAAAqF,UAAA,CACA,IAAAk3C,EAAA,EACA,IAAA/7C,EAAAmrH,MAAA5lH,MAAA/F,IAAAu8C,GAAA9X,KAAAomF,cACA,IAAAe,IAAAj5F,QAAAnyB,GAEA,MAAAorH,MAAAvmH,WAAAsmH,MAAAhrH,OAAAX,EAAAu8C,EAAA,CACAA,IACA/7C,EAAAmrH,MAAA5lH,MAAA/F,IAAAu8C,GAAA9X,KAAAomF,cACAe,IAAAj5F,QAAAnyB,EACA,CAEA,GAAAorH,MAAAvmH,UAAA,OAAAA,UACA,GAAAumH,MAAA,iBAEA,GAAA1jB,KAAAh3D,SAAA1wC,GAAA,CACA,UAAAorH,MAAA,gBAAAA,IACA,GAAAprH,UAAAorH,IAAAprH,KAAA,gBAAAorH,IAAAprH,EACA,CAEA,IAAAqrH,WAAAF,MAAA5lH,MAAA/F,EAAAu8C,GAAA9X,KAAAomF,cACA,GAAAgB,WAAA,OAAAH,SAAAE,IAAAC,WAAAhB,cACA,OAAAxlH,SACA,CAEAstB,gBAAAg5F,MAAA3rH,GACA,CAEA,OAAA2yB,OACA,CAEA,IAAAm5F,cAAA,SAAAC,eACAvE,mBAAA,WAAAsE,cAAAC,eAEA,IAAAn/G,OAAAs+G,aAAAY,eAEA,SAAAA,cAAAr7F,MACA,IAAA9jB,MAEA,IAAA/D,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,IACAw1G,GAAA,gBACAC,UAAA,eAGApI,yBAAA,WAAAr9G,KAAAslH,eAEAn/G,MAAAC,OAAAlM,KAAA8F,MAEA,GAAAikH,OAAA,CACA7nE,aAAAliD,KAAA6mH,gCAAA,WAAA56G,OACA,CAEAA,MAAA8jB,WAAA,GACA9jB,MAAA/D,gBAEA,GAAA+D,MAAA/D,QAAAiiH,eAAAxlH,UAAA,CACAsH,MAAA/D,QAAAiiH,aAAA,GACA,CAEA,GAAAl+G,MAAA/D,QAAAsjH,sBAAA7mH,UAAA,CACAsH,MAAA/D,QAAAsjH,oBAAA,IACA,CAEA,OAAAv/G,KACA,CAEAm3G,sBAAA,WAAAgI,cAAA,EACA/oH,IAAA,gBACAO,MAAA,SAAA6oH,cAAAH,IACA,GAAAxlH,KAAAoC,QAAAojH,GAAAztG,QAAAytG,IAAA,GACAxlH,KAAAoC,QAAAojH,GAAAh7G,KAAAg7G,GACA,CACA,GACA,CACAjpH,IAAA,mBACAO,MAAA,SAAA8oH,iBAAAJ,IACA,IAAA30G,MAAA7Q,KAAAoC,QAAAojH,GAAAztG,QAAAytG,IAEA,GAAA30G,OAAA,GACA7Q,KAAAoC,QAAAojH,GAAAxtD,OAAAnnD,MAAA,EACA,CACA,GACA,CACAtU,IAAA,cACAO,MAAA,SAAA+oH,YAAAvH,IAAAkH,GAAAjpH,KACA,IAAA6F,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,MACA,IAAAq0G,aAAAjiH,QAAAiiH,eAAAxlH,UAAAuD,QAAAiiH,aAAArkH,KAAAoC,QAAAiiH,aACA,IAAAqB,oBAAAtjH,QAAAsjH,sBAAA7mH,UAAAuD,QAAAsjH,oBAAA1lH,KAAAoC,QAAAsjH,oBACA,IAAAhkB,KAAA,CAAA4c,IAAAkH,IACA,GAAAjpH,kBAAA,SAAAmlG,UAAA70D,OAAAtwC,KACA,GAAAA,kBAAA,SAAAmlG,UAAA70D,OAAAw3E,aAAA9nH,IAAAyQ,MAAAq3G,cAAA9nH,KAEA,GAAA+hH,IAAAvmG,QAAA,SACA2pF,KAAA4c,IAAAtxG,MAAA,IACA,CAEA,IAAAsW,OAAAmgG,QAAAzjH,KAAAiqB,KAAAy3E,MACA,GAAAp+E,SAAAoiG,4BAAAnpH,MAAA,gBAAA+mB,OACA,OAAA4hG,SAAAllH,KAAAiqB,MAAAjqB,KAAAiqB,KAAAq0F,MAAAt+G,KAAAiqB,KAAAq0F,KAAAkH,IAAAjpH,IAAA8nH,aACA,GACA,CACA9nH,IAAA,cACAO,MAAA,SAAAgpH,YAAAxH,IAAAkH,GAAAjpH,IAAAO,OACA,IAAAsF,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,IACA+1G,OAAA,OAEA,IAAA1B,aAAArkH,KAAAoC,QAAAiiH,aACA,GAAAA,eAAAxlH,UAAAwlH,aAAA,IACA,IAAA3iB,KAAA,CAAA4c,IAAAkH,IACA,GAAAjpH,IAAAmlG,UAAA70D,OAAAw3E,aAAA9nH,IAAAyQ,MAAAq3G,cAAA9nH,KAEA,GAAA+hH,IAAAvmG,QAAA,SACA2pF,KAAA4c,IAAAtxG,MAAA,KACAlQ,MAAA0oH,GACAA,GAAA9jB,KAAA,EACA,CAEA1hG,KAAA2lH,cAAAH,IACApC,QAAApjH,KAAAiqB,KAAAy3E,KAAA5kG,OACA,IAAAsF,QAAA2jH,OAAA/lH,KAAAi9C,KAAA,QAAAqhE,IAAAkH,GAAAjpH,IAAAO,MACA,GACA,CACAP,IAAA,eACAO,MAAA,SAAAkpH,aAAA1H,IAAAkH,GAAAS,WACA,IAAA7jH,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,IACA+1G,OAAA,OAGA,QAAApxE,KAAAsxE,UAAA,CACA,UAAAA,UAAAtxE,KAAA,UAAAt4C,OAAAM,UAAA2C,SAAAu/B,MAAAonF,UAAAtxE,MAAA,iBAAA30C,KAAA8lH,YAAAxH,IAAAkH,GAAA7wE,EAAAsxE,UAAAtxE,GAAA,CACAoxE,OAAA,MAEA,CAEA,IAAA3jH,QAAA2jH,OAAA/lH,KAAAi9C,KAAA,QAAAqhE,IAAAkH,GAAAS,UACA,GACA,CACA1pH,IAAA,oBACAO,MAAA,SAAAopH,kBAAA5H,IAAAkH,GAAAS,UAAAE,KAAAt/B,WACA,IAAAzkF,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,IACA+1G,OAAA,OAEA,IAAArkB,KAAA,CAAA4c,IAAAkH,IAEA,GAAAlH,IAAAvmG,QAAA,SACA2pF,KAAA4c,IAAAtxG,MAAA,KACAm5G,KAAAF,UACAA,UAAAT,GACAA,GAAA9jB,KAAA,EACA,CAEA1hG,KAAA2lH,cAAAH,IACA,IAAAY,KAAA3C,QAAAzjH,KAAAiqB,KAAAy3E,OAAA,GAEA,GAAAykB,KAAA,CACAtC,WAAAuC,KAAAH,UAAAp/B,UACA,MACAu/B,KAAA3B,gCAAA,GAAA2B,MAAAH,UACA,CAEA7C,QAAApjH,KAAAiqB,KAAAy3E,KAAA0kB,MACA,IAAAhkH,QAAA2jH,OAAA/lH,KAAAi9C,KAAA,QAAAqhE,IAAAkH,GAAAS,UACA,GACA,CACA1pH,IAAA,uBACAO,MAAA,SAAAupH,qBAAA/H,IAAAkH,IACA,GAAAxlH,KAAAsmH,kBAAAhI,IAAAkH,IAAA,QACAxlH,KAAAiqB,KAAAq0F,KAAAkH,GACA,CAEAxlH,KAAA4lH,iBAAAJ,IACAxlH,KAAAi9C,KAAA,UAAAqhE,IAAAkH,GACA,GACA,CACAjpH,IAAA,oBACAO,MAAA,SAAAwpH,kBAAAhI,IAAAkH,IACA,OAAAxlH,KAAA6lH,YAAAvH,IAAAkH,MAAA3mH,SACA,GACA,CACAtC,IAAA,oBACAO,MAAA,SAAAypH,kBAAAjI,IAAAkH,IACA,IAAAA,MAAAxlH,KAAAoC,QAAAqjH,UACA,GAAAzlH,KAAAoC,QAAAokH,mBAAA,YAAA/B,gCAAA,OAAAzkH,KAAA6lH,YAAAvH,IAAAkH,KACA,OAAAxlH,KAAA6lH,YAAAvH,IAAAkH,GACA,GACA,CACAjpH,IAAA,oBACAO,MAAA,SAAA2pH,kBAAAnI,KACA,OAAAt+G,KAAAiqB,KAAAq0F,IACA,GACA,CACA/hH,IAAA,8BACAO,MAAA,SAAA4pH,4BAAApI,KACA,IAAAr0F,KAAAjqB,KAAAymH,kBAAAnI,KACA,IAAAjlH,EAAA4wB,MAAA5tB,OAAA4W,KAAAgX,OAAA,GACA,QAAA5wB,EAAAitC,MAAA,SAAA3Z,GACA,OAAA1C,KAAA0C,IAAAtwB,OAAA4W,KAAAgX,KAAA0C,IAAAxyB,OAAA,CACA,GACA,GACA,CACAoC,IAAA,SACAO,MAAA,SAAAg6C,SACA,OAAA92C,KAAAiqB,IACA,KAGA,OAAAq7F,aACA,CAhLA,CAgLAlpE,cAEA,IAAAuqE,cAAA,CACAC,WAAA,GACAC,iBAAA,SAAAA,iBAAAzsH,QACA4F,KAAA4mH,WAAAxsH,OAAAoF,MAAApF,MACA,EACA61F,OAAA,SAAAA,OAAA22B,WAAA9pH,MAAAP,IAAA6F,QAAA0kH,YACA,IAAA3gH,MAAAnG,KAEA4mH,WAAA9kF,SAAA,SAAAilF,WACA,GAAA5gH,MAAAygH,WAAAG,WAAAjqH,MAAAqJ,MAAAygH,WAAAG,WAAAnoF,QAAA9hC,MAAAP,IAAA6F,QAAA0kH,WACA,IACA,OAAAhqH,KACA,GAGA,SAAAkqH,UAAArvG,OAAA0pG,gBAAA,IAAApuG,KAAA5W,OAAA4W,KAAA0E,QAAA,GAAAtb,OAAAkvD,sBAAA,KAAAC,QAAAnvD,OAAAkvD,sBAAA5zC,QAAA,GAAA0pG,eAAA,CAAA71D,gBAAA1L,QAAA,SAAAo7D,KAAA,OAAA7+G,OAAA2mC,yBAAArrB,OAAAujG,KAAAh/G,UAAA,IAAA+W,KAAAzI,KAAAq0B,MAAA5rB,KAAAu4C,QAAA,QAAAv4C,IAAA,CAEA,SAAAg0G,gBAAAlrH,QAAA,QAAAvC,EAAA,EAAAA,EAAAwW,UAAA7V,OAAAX,IAAA,KAAA0N,OAAA8I,UAAAxW,IAAA,KAAAwW,UAAAxW,GAAA,MAAAA,EAAA,GAAAwtH,UAAA3qH,OAAA6K,QAAA,MAAA46B,SAAA,SAAAvlC,KAAA4kH,yBAAA,WAAAplH,OAAAQ,IAAA2K,OAAA3K,KAAA,YAAAF,OAAAklH,0BAAA,CAAAllH,OAAAiU,iBAAAvU,OAAAM,OAAAklH,0BAAAr6G,QAAA,MAAA8/G,UAAA3qH,OAAA6K,SAAA46B,SAAA,SAAAvlC,KAAAF,OAAAC,eAAAP,OAAAQ,IAAAF,OAAA2mC,yBAAA97B,OAAA3K,KAAA,YAAAR,MAAA,CAEA,SAAAmrH,eAAAvC,SAAA,IAAAC,0BAAAuC,8BAAA,gBAAArC,uBAAA,IAAAv7E,MAAA23E,yBAAA,WAAAyD,SAAArhG,OAAA,GAAAshG,0BAAA,KAAAG,UAAA7D,yBAAA,WAAAlhH,MAAAxC,YAAA8lB,OAAAuuF,QAAAmT,UAAAz7E,MAAAv5B,UAAA+0G,UAAA,MAAAzhG,OAAAimB,MAAA1K,MAAA7+B,KAAAgQ,UAAA,QAAAixG,oCAAA,WAAAjhH,KAAAsjB,OAAA,EAEA,SAAA6jG,8BAAA,UAAAtV,UAAA,cAAAA,QAAAmT,UAAA,gBAAAnT,QAAAmT,UAAAC,KAAA,uBAAApM,QAAA,2BAAAX,QAAAv7G,UAAA02C,QAAAn5C,KAAA23G,QAAAmT,UAAA9M,QAAA,sCAAA9+G,GAAA,cACA,IAAAguH,iBAAA,GAEA,IAAAC,WAAA,SAAA9B,eACAvE,mBAAA,WAAAqG,WAAA9B,eAEA,IAAAn/G,OAAA8gH,eAAAG,YAEA,SAAAA,WAAArH,UACA,IAAA75G,MAEA,IAAA/D,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,MAEAqtG,yBAAA,WAAAr9G,KAAAqnH,YAEAlhH,MAAAC,OAAAlM,KAAA8F,MAEA,GAAAikH,OAAA,CACA7nE,aAAAliD,KAAA6mH,gCAAA,WAAA56G,OACA,CAEAu3B,KAAA,0GAAAsiF,SAAAe,gCAAA,WAAA56G,QACAA,MAAA/D,gBAEA,GAAA+D,MAAA/D,QAAAiiH,eAAAxlH,UAAA,CACAsH,MAAA/D,QAAAiiH,aAAA,GACA,CAEAl+G,MAAAm2C,OAAAkmE,WAAAjlH,OAAA,cACA,OAAA4I,KACA,CAEAm3G,sBAAA,WAAA+J,WAAA,EACA9qH,IAAA,iBACAO,MAAA,SAAAwqH,eAAAhJ,KACA,GAAAA,IAAAt+G,KAAAw/G,SAAAlB,GACA,GACA,CACA/hH,IAAA,SACAO,MAAA,SAAAyqH,OAAAhrH,KACA,IAAA6F,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,IACAw3G,cAAA,IAGA,GAAAjrH,MAAAsC,WAAAtC,MAAA,MACA,YACA,CAEA,IAAAkrH,SAAAznH,KAAAkqD,QAAA3tD,IAAA6F,SACA,OAAAqlH,mBAAA3oH,MAAAD,SACA,GACA,CACAtC,IAAA,iBACAO,MAAA,SAAA4qH,eAAAnrH,IAAA6F,SACA,IAAAgiH,YAAAhiH,QAAAgiH,cAAAvlH,UAAAuD,QAAAgiH,YAAApkH,KAAAoC,QAAAgiH,YACA,GAAAA,cAAAvlH,UAAAulH,YAAA,IACA,IAAAC,aAAAjiH,QAAAiiH,eAAAxlH,UAAAuD,QAAAiiH,aAAArkH,KAAAoC,QAAAiiH,aACA,IAAAjY,WAAAhqG,QAAAojH,IAAAxlH,KAAAoC,QAAAqjH,WAAA,GACA,IAAAkC,qBAAAvD,aAAA7nH,IAAAwb,QAAAqsG,cAAA,EACA,IAAAwD,sBAAA5nH,KAAAoC,QAAAylH,0BAAAzlH,QAAAiiH,eAAArkH,KAAAoC,QAAA0lH,yBAAA1lH,QAAAgiH,cAAAD,oBAAA5nH,IAAA6nH,YAAAC,cAEA,GAAAsD,uBAAAC,qBAAA,CACA,IAAAjzE,EAAAp4C,IAAAoU,MAAA3Q,KAAA+nH,aAAAC,eAEA,GAAArzE,KAAAx6C,OAAA,GACA,OACAoC,QACA6vG,sBAEA,CAEA,IAAAt7D,MAAAv0C,IAAAyQ,MAAAo3G,aACA,GAAAA,cAAAC,cAAAD,cAAAC,cAAArkH,KAAAoC,QAAAojH,GAAAztG,QAAA+4B,MAAA,OAAAs7D,WAAAt7D,MAAAmnB,QACA17D,IAAAu0C,MAAA7S,KAAAomF,aACA,CAEA,UAAAjY,aAAA,SAAAA,WAAA,CAAAA,YACA,OACA7vG,QACA6vG,sBAEA,GACA,CACA7vG,IAAA,YACAO,MAAA,SAAAmrH,UAAAh1G,KAAA7Q,QAAA8lH,SACA,IAAAtH,OAAA5gH,KAEA,GAAA8gH,iBAAA,WAAA1+G,WAAA,UAAApC,KAAAoC,QAAA+lH,iCAAA,CACA/lH,QAAApC,KAAAoC,QAAA+lH,iCAAAn4G,UACA,CAEA,IAAA5N,gBAAA,GACA,GAAA6Q,OAAApU,WAAAoU,OAAA,cACA,IAAA/X,MAAAG,QAAA4X,WAAA,CAAAlU,OAAAkU,OACA,IAAAm1G,cAAAhmH,QAAAgmH,gBAAAvpH,UAAAuD,QAAAgmH,cAAApoH,KAAAoC,QAAAgmH,cACA,IAAA/D,aAAAjiH,QAAAiiH,eAAAxlH,UAAAuD,QAAAiiH,aAAArkH,KAAAoC,QAAAiiH,aAEA,IAAAgE,qBAAAroH,KAAA0nH,eAAAz0G,UAAA9Y,OAAA,GAAAiI,SACA7F,IAAA8rH,qBAAA9rH,IACA6vG,WAAAic,qBAAAjc,WAEA,IAAAJ,UAAAI,sBAAAjyG,OAAA,GACA,IAAAmkH,IAAAl8G,QAAAk8G,KAAAt+G,KAAAw/G,SACA,IAAA8I,wBAAAlmH,QAAAkmH,yBAAAtoH,KAAAoC,QAAAkmH,wBAEA,GAAAhK,SAAAxqE,gBAAA,UACA,GAAAw0E,wBAAA,CACA,IAAAlE,YAAAhiH,QAAAgiH,aAAApkH,KAAAoC,QAAAgiH,YAEA,GAAAgE,cAAA,CACAX,SAAA3oH,IAAA,GAAA+tC,OAAAm/D,WAAAn/D,OAAAu3E,aAAAv3E,OAAAtwC,KACA,OAAAkrH,QACA,CAEA,SAAA56E,OAAAm/D,WAAAn/D,OAAAu3E,aAAAv3E,OAAAtwC,IACA,CAEA,GAAA6rH,cAAA,CACAX,SAAA3oH,IAAAvC,IACA,OAAAkrH,QACA,CAEA,OAAAlrH,GACA,CAEA,IAAAkrH,SAAAznH,KAAAkqD,QAAAj3C,KAAA7Q,SACA,IAAAtD,IAAA2oH,mBAAA3oH,IACA,IAAAypH,WAAAd,mBAAAe,SAAAjsH,IACA,IAAAksH,gBAAAhB,mBAAAiB,cAAAnsH,IACA,IAAAosH,QAAAtsH,OAAAM,UAAA2C,SAAAu/B,MAAA//B,KACA,IAAA8pH,SAAA,0DACA,IAAAC,WAAAzmH,QAAAymH,aAAAhqH,UAAAuD,QAAAymH,WAAA7oH,KAAAoC,QAAAymH,WACA,IAAAC,4BAAA9oH,KAAA+oH,YAAA/oH,KAAA+oH,WAAAC,eACA,IAAAA,sBAAAlqH,MAAA,iBAAAA,MAAA,kBAAAA,MAAA,SAEA,GAAAgqH,4BAAAhqH,KAAAkqH,gBAAAJ,SAAA7wG,QAAA4wG,SAAA,YAAAE,aAAA,UAAAF,UAAA,mBACA,IAAAvmH,QAAA6mH,gBAAAjpH,KAAAoC,QAAA6mH,cAAA,CACA,IAAAjpH,KAAAoC,QAAA8mH,sBAAA,CACAlpH,KAAAs8C,OAAAjyC,KAAA,kEACA,CAEA,IAAAlR,EAAA6G,KAAAoC,QAAA8mH,sBAAAlpH,KAAAoC,QAAA8mH,sBAAAX,WAAAzpH,IAAAmoH,gCAAA,GAAA7kH,SAAA,IACAojH,GAAApZ,cACA,QAAAv/D,OAAAtwC,IAAA,MAAAswC,OAAA7sC,KAAAw/G,SAAA,4CAEA,GAAA4I,cAAA,CACAX,SAAA3oH,IAAA3F,EACA,OAAAsuH,QACA,CAEA,OAAAtuH,CACA,CAEA,GAAAkrH,aAAA,CACA,IAAA8E,eAAAR,UAAA,iBACA,IAAAjrF,KAAAyrF,eAAA,MACA,IAAAC,YAAAD,eAAAV,gBAAAF,WAEA,QAAA5zE,KAAA71C,IAAA,CACA,GAAAzC,OAAAM,UAAAgL,eAAAzN,KAAA4E,IAAA61C,GAAA,CACA,IAAA00E,QAAA,GAAAx8E,OAAAu8E,aAAAv8E,OAAAw3E,cAAAx3E,OAAA8H,GACAjX,KAAAiX,GAAA30C,KAAAioH,UAAAoB,QAAApC,gCAAA,GAAA7kH,SAAA,CACAymH,WAAA,MACArD,GAAApZ,cAEA,GAAA1uE,KAAAiX,KAAA00E,QAAA3rF,KAAAiX,GAAA71C,IAAA61C,EACA,CACA,CAEA71C,IAAA4+B,IACA,CACA,SAAAorF,mCAAAD,aAAA,UAAAF,UAAA,kBACA7pH,QAAAm/B,KAAA4qF,YACA,GAAA/pH,QAAAkB,KAAAspH,kBAAAxqH,IAAAmU,KAAA7Q,QAAA8lH,QACA,MACA,IAAAqB,YAAA,MACA,IAAAf,QAAA,MACA,IAAAgB,oBAAApnH,QAAA8vB,QAAArzB,kBAAAuD,QAAA8vB,QAAA,SACA,IAAAu3F,gBAAApC,WAAAoC,gBAAArnH,SACA,IAAAsnH,mBAAAF,oBAAAxpH,KAAA2pH,eAAAC,UAAAtL,IAAAl8G,QAAA8vB,MAAA9vB,SAAA,GACA,IAAAynH,aAAAznH,QAAA,eAAAyqC,OAAA68E,sBAAAtnH,QAAAynH,aAEA,IAAA7pH,KAAA8pH,cAAAhrH,MAAA2qH,gBAAA,CACAF,YAAA,KACAzqH,IAAA+qH,YACA,CAEA,IAAA7pH,KAAA8pH,cAAAhrH,KAAA,CACA0pH,QAAA,KACA1pH,IAAAvC,GACA,CAEA,IAAAwtH,+BAAA3nH,QAAA2nH,gCAAA/pH,KAAAoC,QAAA2nH,+BACA,IAAAC,cAAAD,gCAAAvB,QAAA3pH,UAAAC,IACA,IAAAmrH,cAAAR,iBAAAI,eAAA/qH,KAAAkB,KAAAoC,QAAA6nH,cAEA,GAAAzB,SAAAe,aAAAU,cAAA,CACAjqH,KAAAs8C,OAAArY,IAAAgmF,cAAA,yBAAA3L,IAAAtS,UAAAzvG,IAAA0tH,cAAAJ,aAAA/qH,KAEA,GAAAulH,aAAA,CACA,IAAA6F,GAAAlqH,KAAAkqD,QAAA3tD,IAAA0qH,gCAAA,GAAA7kH,SAAA,IACAiiH,aAAA,SAEA,GAAA6F,OAAAprH,IAAAkB,KAAAs8C,OAAAjyC,KAAA,kLACA,CAEA,IAAA8/G,KAAA,GACA,IAAAC,aAAApqH,KAAA0gH,cAAA2J,iBAAArqH,KAAAoC,QAAAkoH,YAAAloH,QAAAk8G,KAAAt+G,KAAAw/G,UAEA,GAAAx/G,KAAAoC,QAAAmoH,gBAAA,YAAAH,2BAAA,IACA,QAAA5wH,EAAA,EAAAA,EAAA4wH,aAAAjwH,OAAAX,IAAA,CACA2wH,KAAA3/G,KAAA4/G,aAAA5wH,GACA,CACA,SAAAwG,KAAAoC,QAAAmoH,gBAAA,OACAJ,KAAAnqH,KAAA0gH,cAAA8J,mBAAApoH,QAAAk8G,KAAAt+G,KAAAw/G,SACA,MACA2K,KAAA3/G,KAAApI,QAAAk8G,KAAAt+G,KAAAw/G,SACA,CAEA,IAAAza,KAAA,SAAAA,KAAA94E,EAAAqhC,EAAAm9D,sBACA,IAAAC,kBAAAjB,iBAAAgB,uBAAA3rH,IAAA2rH,qBAAAT,cAEA,GAAApJ,OAAAx+G,QAAAuoH,kBAAA,CACA/J,OAAAx+G,QAAAuoH,kBAAA1+F,EAAA+/E,UAAA1+C,EAAAo9D,kBAAAT,cAAA7nH,QACA,SAAAw+G,OAAAgK,kBAAAhK,OAAAgK,iBAAAC,YAAA,CACAjK,OAAAgK,iBAAAC,YAAA5+F,EAAA+/E,UAAA1+C,EAAAo9D,kBAAAT,cAAA7nH,QACA,CAEAw+G,OAAA3jE,KAAA,aAAAhxB,EAAA+/E,UAAA1+C,EAAAxuD,IACA,EAEA,GAAAkB,KAAAoC,QAAAyoH,YAAA,CACA,GAAA7qH,KAAAoC,QAAA0oH,oBAAAtB,oBAAA,CACAW,KAAAroF,SAAA,SAAA09E,UACAoB,OAAA+I,eAAAoB,YAAAvL,SAAAp9G,SAAA0/B,SAAA,SAAAkpF,QACAjmB,KAAA,CAAAya,UAAAjjH,IAAAyuH,OAAA5oH,QAAA,eAAAyqC,OAAAm+E,UAAAnB,aACA,GACA,GACA,MACA9kB,KAAAolB,KAAA5tH,IAAAstH,aACA,CACA,CACA,CAEA/qH,IAAAkB,KAAAspH,kBAAAxqH,IAAAmU,KAAA7Q,QAAAqlH,SAAAS,SACA,GAAAM,SAAA1pH,MAAAvC,KAAAyD,KAAAoC,QAAA6oH,4BAAAnsH,IAAA,GAAA+tC,OAAAm/D,UAAA,KAAAn/D,OAAAtwC,KAEA,IAAAisH,SAAAe,cAAAvpH,KAAAoC,QAAA8oH,uBAAA,CACA,GAAAlrH,KAAAoC,QAAAokH,mBAAA,MACA1nH,IAAAkB,KAAAoC,QAAA8oH,uBAAAlrH,KAAAoC,QAAA6oH,4BAAA,GAAAp+E,OAAAm/D,UAAA,KAAAn/D,OAAAtwC,SAAAgtH,YAAAzqH,IAAAD,UACA,MACAC,IAAAkB,KAAAoC,QAAA8oH,uBAAApsH,IACA,CACA,CACA,CAEA,GAAAspH,cAAA,CACAX,SAAA3oH,QACA,OAAA2oH,QACA,CAEA,OAAA3oH,GACA,GACA,CACAvC,IAAA,oBACAO,MAAA,SAAAwsH,kBAAAxqH,IAAAvC,IAAA6F,QAAAqlH,SAAAS,SACA,IAAAiD,OAAAnrH,KAEA,GAAAA,KAAA+oH,YAAA/oH,KAAA+oH,WAAA95G,MAAA,CACAnQ,IAAAkB,KAAA+oH,WAAA95G,MAAAnQ,IAAAmoH,gCAAA,GAAAjnH,KAAAoC,QAAAolH,cAAA4D,kBAAAhpH,SAAAqlH,SAAA4D,QAAA5D,SAAA6D,OAAA7D,SAAAe,QAAA,CACAf,mBAEA,UAAArlH,QAAAmpH,kBAAA,CACA,GAAAnpH,QAAAolH,cAAAxnH,KAAA+nH,aAAA7xG,KAAA+wG,gCAAA,GAAA7kH,SAAA,CACAolH,cAAAP,gCAAA,GAAAjnH,KAAAoC,QAAAolH,eAAAplH,QAAAolH,kBAEA,IAAAgE,uBAAA1sH,MAAA,WAAAsD,iBAAAolH,eAAAplH,QAAAolH,cAAAgE,kBAAA3sH,UAAAuD,QAAAolH,cAAAgE,gBAAAxrH,KAAAoC,QAAAolH,cAAAgE,iBACA,IAAAC,QAEA,GAAAD,gBAAA,CACA,IAAA1gC,GAAAhsF,IAAA6R,MAAA3Q,KAAA+nH,aAAAC,eACAyD,QAAA3gC,OAAA3wF,MACA,CAEA,IAAA8vB,KAAA7nB,QAAA4F,gBAAA5F,QAAA4F,UAAA,SAAA5F,QAAA4F,QAAA5F,QACA,GAAApC,KAAAoC,QAAAolH,cAAA4D,iBAAAnhG,KAAAg9F,gCAAA,GAAAjnH,KAAAoC,QAAAolH,cAAA4D,kBAAAnhG,MACAnrB,IAAAkB,KAAA+nH,aAAA2D,YAAA5sH,IAAAmrB,KAAA7nB,QAAAk8G,KAAAt+G,KAAAw/G,SAAAp9G,SAEA,GAAAopH,gBAAA,CACA,IAAAv8C,GAAAnwE,IAAA6R,MAAA3Q,KAAA+nH,aAAAC,eACA,IAAA2D,QAAA18C,OAAA90E,OACA,GAAAsxH,QAAAE,QAAAvpH,QAAAwpH,KAAA,KACA,CAEA,GAAAxpH,QAAAwpH,OAAA,MAAA9sH,IAAAkB,KAAA+nH,aAAA6D,KAAA9sH,KAAA,WACA,QAAA8iH,KAAA5xG,UAAA7V,OAAA+jC,KAAA,IAAAhjC,MAAA0mH,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAA,CACA3jF,KAAA2jF,MAAA7xG,UAAA6xG,KACA,CAEA,GAAAqG,iBAAA,KAAAhqF,KAAA,KAAA97B,QAAAkL,QAAA,CACA69G,OAAA7uE,OAAAjyC,KAAA,6CAAAwiC,OAAA3O,KAAA,gBAAA2O,OAAAtwC,IAAA,KAEA,WACA,CAEA,OAAA4uH,OAAAlD,UAAAppF,MAAAssF,OAAAjtF,KAAA2O,OAAA,CAAAtwC,MACA,GAAA6F,SACA,GAAAA,QAAAolH,cAAAxnH,KAAA+nH,aAAAp8F,OACA,CAEA,IAAAkgG,YAAAzpH,QAAAypH,aAAA7rH,KAAAoC,QAAAypH,YACA,IAAAC,0BAAAD,cAAA,UAAAA,yBAEA,GAAA/sH,MAAAD,WAAAC,MAAA,MAAAgtH,uCAAA3xH,QAAAiI,QAAA2pH,qBAAA,OACAjtH,IAAA6nH,cAAA12B,OAAA67B,mBAAAhtH,IAAAvC,IAAAyD,KAAAoC,SAAApC,KAAAoC,QAAA4pH,wBAAA/E,gBAAA,CACAgF,aAAAxE,UACArlH,iBAAApC,KACA,CAEA,OAAAlB,GACA,GACA,CACAvC,IAAA,UACAO,MAAA,SAAAotD,QAAAj3C,MACA,IAAAi5G,OAAAlsH,KAEA,IAAAoC,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,MACA,IAAA8lC,MACA,IAAA0yE,QACA,IAAAE,aACA,IAAA2C,QACA,IAAAC,OACA,UAAAr4G,OAAA,SAAAA,KAAA,CAAAA,MACAA,KAAA6uB,SAAA,SAAAwrB,GACA,GAAA4+D,OAAApC,cAAAh0E,OAAA,OAEA,IAAAq2E,UAAAD,OAAAxE,eAAAp6D,EAAAlrD,SAEA,IAAA7F,IAAA4vH,UAAA5vH,IACAisH,QAAAjsH,IACA,IAAA6vG,WAAA+f,UAAA/f,WACA,GAAA8f,OAAA9pH,QAAAgqH,WAAAhgB,sBAAAv/D,OAAAq/E,OAAA9pH,QAAAgqH,YACA,IAAA5C,oBAAApnH,QAAA8vB,QAAArzB,kBAAAuD,QAAA8vB,QAAA,SAEA,IAAAm6F,sBAAA7C,sBAAApnH,QAAAkqH,SAAAlqH,QAAA8vB,QAAA,GAAAg6F,OAAAvC,eAAA4C,mBAEA,IAAAC,qBAAApqH,QAAAkL,UAAAzO,mBAAAuD,QAAAkL,UAAA,iBAAAlL,QAAAkL,UAAA,WAAAlL,QAAAkL,UAAA,GACA,IAAAm/G,MAAArqH,QAAA+nH,KAAA/nH,QAAA+nH,KAAA+B,OAAAxL,cAAA8J,mBAAApoH,QAAAk8G,KAAA4N,OAAA1M,SAAAp9G,QAAAkoH,aACAle,WAAAtqE,SAAA,SAAA0jF,IACA,GAAA0G,OAAApC,cAAAh0E,OAAA,OACAw1E,OAAA9F,GAEA,IAAA4B,iBAAA,GAAAv6E,OAAA4/E,MAAA,QAAA5/E,OAAA24E,MAAA0G,OAAAQ,OAAAR,OAAAQ,MAAAC,qBAAAT,OAAAQ,MAAAC,mBAAArB,QAAA,CACAlE,iBAAA,GAAAv6E,OAAA4/E,MAAA,QAAA5/E,OAAA24E,KAAA,KAEA0G,OAAA5vE,OAAAjyC,KAAA,QAAAwiC,OAAA27E,QAAA,qBAAA37E,OAAA4/E,MAAAxuF,KAAA,8CAAA4O,OAAAy+E,OAAA,mPACA,CAEAmB,MAAA3qF,SAAA,SAAA/nC,MACA,GAAAmyH,OAAApC,cAAAh0E,OAAA,OACAu1E,QAAAtxH,KACA,IAAA6yH,UAAA,CAAArwH,KAEA,GAAA2vH,OAAAnD,YAAAmD,OAAAnD,WAAA8D,cAAA,CACAX,OAAAnD,WAAA8D,cAAAD,UAAArwH,IAAAxC,KAAAyrH,GAAApjH,QACA,MACA,IAAA0qH,aACA,GAAAtD,oBAAAsD,aAAAZ,OAAAvC,eAAAC,UAAA7vH,KAAAqI,QAAA8vB,MAAA9vB,SACA,IAAA2qH,WAAA,GAAAlgF,OAAAq/E,OAAA9pH,QAAA4qH,gBAAA,QAEA,GAAAxD,oBAAA,CACAoD,UAAApiH,KAAAjO,IAAAuwH,cAEA,GAAAT,sBAAA,CACAO,UAAApiH,KAAAjO,IAAAwwH,WACA,CACA,CAEA,GAAAP,qBAAA,CACA,IAAAS,WAAA,GAAApgF,OAAAtwC,KAAAswC,OAAAq/E,OAAA9pH,QAAA8qH,kBAAArgF,OAAAzqC,QAAAkL,SACAs/G,UAAApiH,KAAAyiH,YAEA,GAAAzD,oBAAA,CACAoD,UAAApiH,KAAAyiH,WAAAH,cAEA,GAAAT,sBAAA,CACAO,UAAApiH,KAAAyiH,WAAAF,WACA,CACA,CACA,CACA,CAEA,IAAAI,YAEA,MAAAA,YAAAP,UAAAr3G,MAAA,CACA,IAAA22G,OAAApC,cAAAh0E,OAAA,CACA4yE,aAAAyE,YACAr3E,MAAAo2E,OAAArG,YAAA9rH,KAAAyrH,GAAA2H,YAAA/qH,QACA,CACA,CACA,GACA,GACA,IACA,OACAtD,IAAAg3C,MACA0yE,gBACAE,0BACA2C,gBACAC,cAEA,GACA,CACA/uH,IAAA,gBACAO,MAAA,SAAAgtH,cAAAhrH,KACA,OAAAA,MAAAD,cAAAmB,KAAAoC,QAAAgrH,YAAAtuH,MAAA,UAAAkB,KAAAoC,QAAAirH,mBAAAvuH,MAAA,GACA,GACA,CACAvC,IAAA,cACAO,MAAA,SAAA+oH,YAAA9rH,KAAAyrH,GAAAjpH,KACA,IAAA6F,QAAA4N,UAAA7V,OAAA,GAAA6V,UAAA,KAAAnR,UAAAmR,UAAA,MACA,GAAAhQ,KAAA+oH,YAAA/oH,KAAA+oH,WAAAlD,YAAA,OAAA7lH,KAAA+oH,WAAAlD,YAAA9rH,KAAAyrH,GAAAjpH,IAAA6F,SACA,OAAApC,KAAAstH,cAAAzH,YAAA9rH,KAAAyrH,GAAAjpH,IAAA6F,QACA,IACA,EACA7F,IAAA,kBACAO,MAAA,SAAA2sH,gBAAArnH,SACA,IAAAP,OAAA,eAEA,QAAA0rH,UAAAnrH,QAAA,CACA,GAAA/F,OAAAM,UAAAgL,eAAAzN,KAAAkI,QAAAmrH,SAAA1rH,SAAA0rH,OAAAhzF,UAAA,EAAA14B,OAAA1H,SAAA0E,YAAAuD,QAAAmrH,QAAA,CACA,WACA,CACA,CAEA,YACA,KAGA,OAAAlG,UACA,CApbA,CAobAjrE,cAEA,SAAAoxE,WAAAhrH,QACA,OAAAA,OAAAsO,OAAA,GAAA2uB,cAAAj9B,OAAAjD,MAAA,EACA,CAEA,IAAAkuH,aAAA,WACA,SAAAA,aAAArrH,SACAi7G,yBAAA,WAAAr9G,KAAAytH,cAEAztH,KAAAoC,gBACApC,KAAA0tH,cAAA1tH,KAAAoC,QAAAsrH,eAAA,MACA1tH,KAAAs8C,OAAAkmE,WAAAjlH,OAAA,gBACA,CAEA+/G,sBAAA,WAAAmQ,aAAA,EACAlxH,IAAA,wBACAO,MAAA,SAAA6wH,sBAAA5zH,MACA,IAAAA,WAAAge,QAAA,mBACA,IAAA/d,EAAAD,KAAAiT,MAAA,KACA,GAAAhT,EAAAG,SAAA,cACAH,EAAAub,MACA,GAAAvb,IAAAG,OAAA,GAAA25C,gBAAA,gBACA,OAAA9zC,KAAA4tH,mBAAA5zH,EAAAikC,KAAA,KACA,GACA,CACA1hC,IAAA,0BACAO,MAAA,SAAA+wH,wBAAA9zH,MACA,IAAAA,WAAAge,QAAA,cAAAhe,KACA,IAAAC,EAAAD,KAAAiT,MAAA,KACA,OAAAhN,KAAA4tH,mBAAA5zH,EAAA,GACA,GACA,CACAuC,IAAA,qBACAO,MAAA,SAAA8wH,mBAAA7zH,MACA,UAAAA,OAAA,UAAAA,KAAAge,QAAA,SACA,IAAA+1G,aAAA,mDACA,IAAA9zH,EAAAD,KAAAiT,MAAA,KAEA,GAAAhN,KAAAoC,QAAA2rH,aAAA,CACA/zH,IAAA2oC,KAAA,SAAAuP,MACA,OAAAA,KAAA4B,aACA,GACA,SAAA95C,EAAAG,SAAA,GACAH,EAAA,GAAAA,EAAA,GAAA85C,cACA95C,EAAA,GAAAA,EAAA,GAAAylC,cACA,GAAAquF,aAAA/1G,QAAA/d,EAAA,GAAA85C,gBAAA,EAAA95C,EAAA,GAAAwzH,WAAAxzH,EAAA,GAAA85C,cACA,SAAA95C,EAAAG,SAAA,GACAH,EAAA,GAAAA,EAAA,GAAA85C,cACA,GAAA95C,EAAA,GAAAG,SAAA,EAAAH,EAAA,GAAAA,EAAA,GAAAylC,cACA,GAAAzlC,EAAA,YAAAA,EAAA,GAAAG,SAAA,EAAAH,EAAA,GAAAA,EAAA,GAAAylC,cACA,GAAAquF,aAAA/1G,QAAA/d,EAAA,GAAA85C,gBAAA,EAAA95C,EAAA,GAAAwzH,WAAAxzH,EAAA,GAAA85C,eACA,GAAAg6E,aAAA/1G,QAAA/d,EAAA,GAAA85C,gBAAA,EAAA95C,EAAA,GAAAwzH,WAAAxzH,EAAA,GAAA85C,cACA,CAEA,OAAA95C,EAAAikC,KAAA,IACA,CAEA,OAAAj+B,KAAAoC,QAAA4rH,WAAAhuH,KAAAoC,QAAA2rH,aAAAh0H,KAAA+5C,cAAA/5C,IACA,GACA,CACAwC,IAAA,kBACAO,MAAA,SAAAmxH,gBAAAl0H,MACA,GAAAiG,KAAAoC,QAAAmpG,OAAA,gBAAAvrG,KAAAoC,QAAA8rH,yBAAA,CACAn0H,KAAAiG,KAAA6tH,wBAAA9zH,KACA,CAEA,OAAAiG,KAAA0tH,gBAAA1tH,KAAA0tH,cAAAvzH,QAAA6F,KAAA0tH,cAAA31G,QAAAhe,OAAA,CACA,GACA,CACAwC,IAAA,wBACAO,MAAA,SAAA6jH,sBAAA8L,OACA,IAAAtmH,MAAAnG,KAEA,IAAAysH,MAAA,YACA,IAAA32E,MACA22E,MAAA3qF,SAAA,SAAA/nC,MACA,GAAA+7C,MAAA,OAEA,IAAAq4E,WAAAhoH,MAAAynH,mBAAA7zH,MAEA,IAAAoM,MAAA/D,QAAAsrH,eAAAvnH,MAAA8nH,gBAAAE,YAAAr4E,MAAAq4E,UACA,IAEA,IAAAr4E,OAAA91C,KAAAoC,QAAAsrH,cAAA,CACAjB,MAAA3qF,SAAA,SAAA/nC,MACA,GAAA+7C,MAAA,OAEA,IAAAs4E,QAAAjoH,MAAA0nH,wBAAA9zH,MAEA,GAAAoM,MAAA8nH,gBAAAG,SAAA,OAAAt4E,MAAAs4E,QACAt4E,MAAA3vC,MAAA/D,QAAAsrH,cAAApnF,MAAA,SAAA+nF,cACA,GAAAA,aAAAt2G,QAAAq2G,WAAA,SAAAC,YACA,GACA,GACA,CAEA,IAAAv4E,YAAA91C,KAAAqqH,iBAAArqH,KAAAoC,QAAAkoH,aAAA,GACA,OAAAx0E,KACA,GACA,CACAv5C,IAAA,mBACAO,MAAA,SAAAutH,iBAAAiE,UAAAv0H,MACA,IAAAu0H,UAAA,SACA,UAAAA,YAAA,WAAAA,oBAAAv0H,MACA,UAAAu0H,YAAA,SAAAA,UAAA,CAAAA,WACA,GAAAjyH,OAAAM,UAAA2C,SAAAu/B,MAAAyvF,aAAA,wBAAAA,UACA,IAAAv0H,KAAA,OAAAu0H,UAAA,eACA,IAAAx4E,MAAAw4E,UAAAv0H,MACA,IAAA+7C,YAAAw4E,UAAAtuH,KAAA2tH,sBAAA5zH,OACA,IAAA+7C,YAAAw4E,UAAAtuH,KAAA4tH,mBAAA7zH,OACA,IAAA+7C,YAAAw4E,UAAAtuH,KAAA6tH,wBAAA9zH,OACA,IAAA+7C,YAAAw4E,UAAA,WACA,OAAAx4E,OAAA,EACA,GACA,CACAv5C,IAAA,qBACAO,MAAA,SAAA0tH,mBAAAzwH,KAAAw0H,cACA,IAAA3N,OAAA5gH,KAEA,IAAAwuH,cAAAxuH,KAAAqqH,iBAAAkE,cAAAvuH,KAAAoC,QAAAkoH,aAAA,GAAAvwH,MACA,IAAA0yH,MAAA,GAEA,IAAAgC,QAAA,SAAAA,QAAA/0H,GACA,IAAAA,EAAA,OAEA,GAAAknH,OAAAqN,gBAAAv0H,GAAA,CACA+yH,MAAAjiH,KAAA9Q,EACA,MACAknH,OAAAtkE,OAAAjyC,KAAA,uDAAAwiC,OAAAnzC,GACA,CACA,EAEA,UAAAK,OAAA,UAAAA,KAAAge,QAAA,SACA,GAAA/X,KAAAoC,QAAAmpG,OAAA,eAAAkjB,QAAAzuH,KAAA4tH,mBAAA7zH,OACA,GAAAiG,KAAAoC,QAAAmpG,OAAA,gBAAAvrG,KAAAoC,QAAAmpG,OAAA,cAAAkjB,QAAAzuH,KAAA2tH,sBAAA5zH,OACA,GAAAiG,KAAAoC,QAAAmpG,OAAA,cAAAkjB,QAAAzuH,KAAA6tH,wBAAA9zH,MACA,gBAAAA,OAAA,UACA00H,QAAAzuH,KAAA4tH,mBAAA7zH,MACA,CAEAy0H,cAAA1sF,SAAA,SAAA88C,IACA,GAAA6tC,MAAA10G,QAAA6mE,IAAA,EAAA6vC,QAAA7N,OAAAgN,mBAAAhvC,IACA,IACA,OAAA6tC,KACA,KAGA,OAAAgB,YACA,CA/IA,GAiJA,IAAAiB,KAAA,EACAvE,KAAA,8GACAwE,GAAA,MACA/vC,GAAA,GACA,CACAurC,KAAA,2UACAwE,GAAA,MACA/vC,GAAA,GACA,CACAurC,KAAA,mHACAwE,GAAA,IACA/vC,GAAA,GACA,CACAurC,KAAA,2CACAwE,GAAA,QACA/vC,GAAA,GACA,CACAurC,KAAA,OACAwE,GAAA,iBACA/vC,GAAA,GACA,CACAurC,KAAA,YACAwE,GAAA,QACA/vC,GAAA,GACA,CACAurC,KAAA,aACAwE,GAAA,QACA/vC,GAAA,GACA,CACAurC,KAAA,OACAwE,GAAA,UACA/vC,GAAA,GACA,CACAurC,KAAA,OACAwE,GAAA,MACA/vC,GAAA,GACA,CACAurC,KAAA,OACAwE,GAAA,aACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,WACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,MACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,MACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,UACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,SACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,QACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,MACA/vC,GAAA,IACA,CACAurC,KAAA,QACAwE,GAAA,QACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,YACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,MACA/vC,GAAA,GACA,CACAurC,KAAA,OACAwE,GAAA,SACA/vC,GAAA,IACA,CACAurC,KAAA,OACAwE,GAAA,UACA/vC,GAAA,IACA,CACAurC,KAAA,YACAwE,GAAA,YACA/vC,GAAA,KA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CA3+J,KAAAi9C,KAAA,SAAAorH,YAAA,GACA,GAEA,CAEA1J,SACA,MAAAzgI,KAAA,GAAA3+B,MAAArF,KAAA8V,WACAkuB,KAAA,OAAAl+B,KAAAwhJ,IAAA,KAAAtjH,KAAA,GACAqe,MAAA1d,MAAA,KAAAX,KACA,EAGAsgI,KAAA+J,iBAAAnyD,gBAOAooD,KAAA7iC,OAAA,CACA6sC,WAAA,CACA,CACAC,KAAA,CACA,+BACA,sCAIAC,aAAA,gBAGAlK,KAAAM,cAAA,GAEA1kK,OAAAH,QAAAukK,I,6LCrhCAvkK,QAAAqxG,sBACArxG,QAAA2kE,UACA3kE,QAAAsxG,UACAtxG,QAAAuxG,oBACAvxG,QAAAoiD,QAAAqvD,eACAzxG,QAAAgzG,QAAA,MACA,IAAAluE,OAAA,MAEA,WACA,IAAAA,OAAA,CACAA,OAAA,KACA30B,QAAAC,KAAA,wIACA,EAEA,EATA,GAeApQ,QAAA+lC,OAAA,CACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAYA,SAAAwrE,YAIA,UAAAzuD,SAAA,aAAAA,OAAAne,UAAAme,OAAAne,QAAA5zB,OAAA,YAAA+xC,OAAAne,QAAA+pI,QAAA,CACA,WACA,CAGA,UAAAzmH,YAAA,aAAAA,UAAAioC,WAAAjoC,UAAAioC,UAAAr2C,cAAAnjC,MAAA,0BACA,YACA,CAIA,cAAAk2C,WAAA,aAAAA,SAAA6L,iBAAA7L,SAAA6L,gBAAA/wB,OAAAklB,SAAA6L,gBAAA/wB,MAAAgqE,yBAEA5uD,SAAA,aAAA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KAAA,SACAslC,QAAA,KAGAqyJ,KACA,oEAEA,CACA33L,KAAA,UACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,QACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,WACAslC,QAAA,KAGAqyJ,KACA,k3BA2BA,CACA33L,KAAA,MACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,YACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,OACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,2QAMA,CACA33L,KAAA,QACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,QACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,YACAslC,QAAA,MAGAqyJ,KACA,qSAOA,CACA33L,KAAA,WACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,8CAEA,CACA33L,KAAA,MACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,YACAxL,KAAA,MACAslC,QAAAy3C,MAGA46G,KACA,gGAGA,CACA33L,KAAA,QACAwL,KAAA,MACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,IAGAqyJ,KACA,+BAEA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,qKAMA,CACA33L,KAAA,QACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,KAGAqyJ,KACA,0JAMA,CACA33L,KAAA,WACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,+EAGA,CACA33L,KAAA,YACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,OACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,KAGAqyJ,KACA,mLAOA,CACA33L,KAAA,QACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,IACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,IAGAqyJ,KACA,+KAOA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAGAqyJ,KACA,wKAKA,CACA33L,KAAA,iBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,KAGAqyJ,KACA,wLAKA,CACA33L,KAAA,UACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,OACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,mJAKA,CACA33L,KAAA,kBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,OACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,4JAKA,CACA33L,KAAA,UACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,OACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,mJAKA,CACA33L,KAAA,kBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,OACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,4JAKA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,gOASA,CACA33L,KAAA,iBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,6NAQA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,yGAKA,CACA33L,KAAA,UACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,8DAGA,CACA33L,KAAA,kBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,oEAGA,CACA33L,KAAA,UACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,8DAGA,CACA33L,KAAA,kBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,UACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,QACAslC,QAAA,IAGAqyJ,KACA,oEAGA,CACA33L,KAAA,MACAwL,KAAA,UACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,kDAEA,CACA33L,KAAA,MACAwL,KAAA,UACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,kDAEA,CACA33L,KAAA,QACAwL,KAAA,UACAgqL,OAAA,GAGAmC,KACA,iFAEA,CACA33L,KAAA,QACAwL,KAAA,UACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,0CAEA,CACA33L,KAAA,OACAwL,KAAA,UACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,gDAEA,CACA33L,KAAA,OACAwL,KAAA,UACAgqL,OAAA,GAGAmC,KACA,4DAEA,CACA33L,KAAA,WACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,kFAGA,CACA33L,KAAA,gBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,WACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,+IAKA,CACA33L,KAAA,mBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,WACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,iHAGA,CACA33L,KAAA,iBACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,WACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,qLAMA,CACA33L,KAAA,cACAwL,KAAA,eACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,mFAEA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,IAGAqyJ,KACA,uEAEA,CACA33L,KAAA,WACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,MAGAqyJ,KACA,0FAGA,CACA33L,KAAA,aACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,SACAslC,QAAA,KAGAqyJ,KACA,kDAEA,CACA33L,KAAA,OACAwL,KAAA,UACAgqL,OAAA,GAGAmC,KACA,2EAIA,CACA33L,KAAA,OACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,YACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,YACAslC,QAAA,KAGAqyJ,KACA,oJAGA,CACA33L,KAAA,SACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,YACAslC,QAAA,IAEA,CACA95B,KAAA,QACAxL,KAAA,YACAslC,QAAA,MAGAqyJ,KACA,mIAEA,CACA33L,KAAA,QACAwL,KAAA,QACAgqL,OAAA,CACA,CACAhqL,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,GAEA,CACA95B,KAAA,QACAxL,KAAA,IACAslC,QAAA,IAGAqyJ,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"} \ No newline at end of file diff --git a/src/stores/store.js b/src/stores/store.js index e302ae2..107ad66 100644 --- a/src/stores/store.js +++ b/src/stores/store.js @@ -145,8 +145,7 @@ module.exports = function store(state, emitter) { function showConfirmation(successCallback, terminateCallback) { var c = prompt(` - ////:: ḣ̖̻͛̓y҉̃̀̋̑ḑ̴̞͛̒r̴̨̦͕̝ā̤̓̍͘ s̠҉͍͊ͅḳ̯͍̑ͦẹ̿͋̒̕t̲̂̓ͩ̑c͕͗ͤ̕̕ḣ̖̻͛̓ ĝ̽̓̀͑ā̤̓̍͘l̙͖̑̾ͣl̙͖̑̾ͣẹ̿͋̒̕r̴̨̦͕̝y҉̃̀̋̑ :://// - + HYDRA SKETCH GALLERY 🎨 Click 'OK' to add your sketch and screenshot to the gallery of hydra sketches at https://botsin.space/@hydra.